<?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>161602</bug_id>
          
          <creation_ts>2016-09-05 06:19:31 -0700</creation_ts>
          <short_desc>[Fetch API] Move WebCore/loader/cache to WebCore/loader/fetch</short_desc>
          <delta_ts>2016-10-05 04:11:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>162963</dependson>
          <blocked>151937</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1226414</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-09-05 06:19:31 -0700</bug_when>
    <thetext>As part of implementation of fetch, it seems best to transition from &quot;CachedXXX&quot; to &quot;FetchedXXX&quot;.
Let&apos;s start with the folder name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226415</commentid>
    <comment_count>1</comment_count>
      <attachid>287948</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-09-05 06:25:00 -0700</bug_when>
    <thetext>Created attachment 287948
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226416</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-05 06:27:38 -0700</bug_when>
    <thetext>Attachment 287948 did not pass style-queue:


ERROR: Source/WebCore/loader/fetch/CachedResourceHandle.h:66:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/loader/fetch/CachedResourceHandle.h:67:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/loader/fetch/MemoryCache.h:25:  #ifndef header guard has wrong style, please use: MemoryCache_h  [build/header_guard] [5]
ERROR: Source/WebCore/loader/fetch/MemoryCache.h:116:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/MemoryCache.h:196:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/MemoryCache.h:207:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/MemoryCache.h:212:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/CachedCSSStyleSheet.h:33:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/loader/fetch/CachedFont.cpp:58:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/CachedSVGFont.cpp:40:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/loader/fetch/CachedTextTrack.cpp:30:  You should not add a blank line before implementation file&apos;s own header.  [build/include_order] [4]
ERROR: Source/WebCore/loader/fetch/CachedRawResource.cpp:155:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/fetch/CachedResourceLoader.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/loader/fetch/CachedResourceLoader.cpp:146:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/loader/fetch/CachedResourceLoader.cpp:297:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/fetch/CachedResourceLoader.cpp:1028:  &apos;protectDocumentLoader&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedDocumentLoader&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebCore/loader/fetch/CachedResourceLoader.cpp:1029:  &apos;protectDocument&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedDocument&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebCore/loader/fetch/CachedImage.cpp:295:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/loader/fetch/CachedImage.cpp:340:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebCore/loader/fetch/CachedCSSStyleSheet.cpp:123:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/CachedCSSStyleSheet.cpp:125:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/MemoryCache.cpp:284:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/loader/fetch/MemoryCache.cpp:367:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/fetch/MemoryCache.cpp:753:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/loader/fetch/MemoryCache.cpp:762:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/fetch/MemoryCache.cpp:764:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/fetch/MemoryCache.cpp:765:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/fetch/MemoryCache.cpp:766:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/fetch/CachedResourceLoader.h:95:  The parameter name &quot;url&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/loader/fetch/CachedResourceLoader.h:98:  The parameter name &quot;url&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/loader/fetch/CachePolicy.h:31:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/loader/fetch/CachedResource.h:89:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/CachedResource.h:90:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/CachedResource.h:91:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/CachedResource.h:245:  The parameter name &quot;h&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/loader/fetch/CachedResource.h:246:  The parameter name &quot;h&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/loader/fetch/CachedResource.cpp:40:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/loader/fetch/CachedResource.cpp:56:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/loader/fetch/CachedResource.cpp:656:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/fetch/CachedResource.cpp:810:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 40 in 43 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>1226431</commentid>
    <comment_count>3</comment_count>
      <attachid>287956</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-09-05 07:42:39 -0700</bug_when>
    <thetext>Created attachment 287956
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226436</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-05 08:06:25 -0700</bug_when>
    <thetext>Attachment 287956 did not pass style-queue:


ERROR: Source/WebCore/loader/fetch/CachedResourceHandle.h:66:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/loader/fetch/CachedResourceHandle.h:67:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/loader/fetch/MemoryCache.h:25:  #ifndef header guard has wrong style, please use: MemoryCache_h  [build/header_guard] [5]
ERROR: Source/WebCore/loader/fetch/MemoryCache.h:116:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/MemoryCache.h:196:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/MemoryCache.h:207:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/MemoryCache.h:212:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/CachedCSSStyleSheet.h:33:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/loader/fetch/CachedFont.cpp:58:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/CachedSVGFont.cpp:40:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/loader/fetch/CachedTextTrack.cpp:30:  You should not add a blank line before implementation file&apos;s own header.  [build/include_order] [4]
ERROR: Source/WebCore/loader/fetch/CachedResourceLoader.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/loader/fetch/CachedResourceLoader.cpp:146:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/loader/fetch/CachedResourceLoader.cpp:297:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/fetch/CachedResourceLoader.cpp:1028:  &apos;protectDocumentLoader&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedDocumentLoader&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebCore/loader/fetch/CachedResourceLoader.cpp:1029:  &apos;protectDocument&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedDocument&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebCore/loader/fetch/CachedImage.cpp:295:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/loader/fetch/CachedImage.cpp:340:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebCore/loader/fetch/CachedCSSStyleSheet.cpp:123:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/CachedCSSStyleSheet.cpp:125:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/CachedRawResource.cpp:155:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/fetch/MemoryCache.cpp:284:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/loader/fetch/MemoryCache.cpp:367:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/fetch/MemoryCache.cpp:753:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/loader/fetch/MemoryCache.cpp:762:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/fetch/MemoryCache.cpp:764:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/fetch/MemoryCache.cpp:765:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/fetch/MemoryCache.cpp:766:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/fetch/CachedResourceLoader.h:95:  The parameter name &quot;url&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/loader/fetch/CachedResourceLoader.h:98:  The parameter name &quot;url&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/loader/fetch/CachePolicy.h:31:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/loader/fetch/CachedResource.h:89:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/CachedResource.h:90:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/CachedResource.h:91:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/CachedResource.h:245:  The parameter name &quot;h&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/loader/fetch/CachedResource.h:246:  The parameter name &quot;h&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/loader/fetch/CachedResource.cpp:40:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/loader/fetch/CachedResource.cpp:56:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/loader/fetch/CachedResource.cpp:656:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/fetch/CachedResource.cpp:810:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 40 in 45 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>1226441</commentid>
    <comment_count>5</comment_count>
      <attachid>287962</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-09-05 08:32:56 -0700</bug_when>
    <thetext>Created attachment 287962
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226442</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-05 08:36:29 -0700</bug_when>
    <thetext>Attachment 287962 did not pass style-queue:


ERROR: Source/WebCore/loader/fetch/CachedSVGFont.cpp:40:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/loader/fetch/MemoryCache.h:25:  #ifndef header guard has wrong style, please use: MemoryCache_h  [build/header_guard] [5]
ERROR: Source/WebCore/loader/fetch/MemoryCache.h:116:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/MemoryCache.h:196:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/MemoryCache.h:207:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/MemoryCache.h:212:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/CachedTextTrack.cpp:30:  You should not add a blank line before implementation file&apos;s own header.  [build/include_order] [4]
ERROR: Source/WebCore/loader/fetch/CachedResourceHandle.h:66:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/loader/fetch/CachedResourceHandle.h:67:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/loader/fetch/CachedResource.h:89:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/CachedResource.h:90:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/CachedResource.h:91:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/CachedResource.h:245:  The parameter name &quot;h&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/loader/fetch/CachedResource.h:246:  The parameter name &quot;h&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/loader/fetch/CachedFont.cpp:58:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/CachedCSSStyleSheet.cpp:123:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/CachedCSSStyleSheet.cpp:125:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/loader/fetch/CachedResourceLoader.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/loader/fetch/CachedResourceLoader.cpp:146:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/loader/fetch/CachedResourceLoader.cpp:297:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/fetch/CachedResourceLoader.cpp:1028:  &apos;protectDocumentLoader&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedDocumentLoader&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebCore/loader/fetch/CachedResourceLoader.cpp:1029:  &apos;protectDocument&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedDocument&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebCore/loader/fetch/MemoryCache.cpp:284:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/loader/fetch/MemoryCache.cpp:367:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/fetch/MemoryCache.cpp:753:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/loader/fetch/MemoryCache.cpp:762:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/fetch/MemoryCache.cpp:764:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/fetch/MemoryCache.cpp:765:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/fetch/MemoryCache.cpp:766:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/PlatformWin.cmake:215:  Alphabetical sorting problem. &quot;loader/fetch&quot; should be before &quot;loader/icon&quot;.  [list/order] [5]
ERROR: Source/WebCore/loader/fetch/CachedCSSStyleSheet.h:33:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/loader/fetch/CachedImage.cpp:295:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/loader/fetch/CachedImage.cpp:340:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebCore/loader/fetch/CachedRawResource.cpp:155:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/fetch/CachedResourceLoader.h:95:  The parameter name &quot;url&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/loader/fetch/CachedResourceLoader.h:98:  The parameter name &quot;url&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/loader/fetch/CachePolicy.h:31:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/loader/fetch/CachedResource.cpp:40:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/loader/fetch/CachedResource.cpp:56:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/loader/fetch/CachedResource.cpp:656:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/loader/fetch/CachedResource.cpp:810:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 41 in 51 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>1226499</commentid>
    <comment_count>7</comment_count>
      <attachid>287962</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-05 12:36:52 -0700</bug_when>
    <thetext>Comment on attachment 287962
Patch

Why?  What will this improve?
And, if we&apos;re going to move and rename, we&apos;ll have to change all the file names as we change the names of the classes anyways, so there is definitely no reason for this move as-is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226505</commentid>
    <comment_count>8</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-09-05 13:28:34 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 287962 [details]
&gt; Patch
&gt; 
&gt; Why?  What will this improve?

Goal is to better relate class and directory names with spec.
CachedResourceRequest will become FetchedResourceRequest for instance.

&gt; And, if we&apos;re going to move and rename, we&apos;ll have to change all the file
&gt; names as we change the names of the classes anyways, so there is definitely
&gt; no reason for this move as-is.

Right, there will be another file renaming from CachedXX.h/.cpp to FetchedXX.h/.cpp.
I can do that progressively from loader/cache/CachedXX to loader/fetch/FetchedXX.

But it seems easier to rename the directory first, update the header paths in CMake, and then rename each file/each class plus corresponding cleaning.

What is the issue with this approach?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226842</commentid>
    <comment_count>9</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-06 14:50:19 -0700</bug_when>
    <thetext>&gt; But it seems easier to rename the directory first, update the header paths
&gt; in CMake, and then rename each file/each class plus corresponding cleaning.
I think if we do this, then we should do both of these steps at the same time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227057</commentid>
    <comment_count>10</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-09-06 23:02:28 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; But it seems easier to rename the directory first, update the header paths
&gt; &gt; in CMake, and then rename each file/each class plus corresponding cleaning.
&gt; I think if we do this, then we should do both of these steps at the same
&gt; time.

Renaming files and directories at the same time is fine.
Renaming the classes is more work and I would prefer tackle these as separate bugs.

Also I would prefer doing the renaming of the class when changing the filename, hence the first option.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227218</commentid>
    <comment_count>11</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-07 09:56:07 -0700</bug_when>
    <thetext>If we are going to rename the classes, then we will have to have another big patch that changes all the filenames again with class name changes.  This patch is a huge change just to change directories, which isn&apos;t a significant improvement.  Changing directories at the same time as changing class names is fine.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287948</attachid>
            <date>2016-09-05 06:25:00 -0700</date>
            <delta_ts>2016-09-05 07:42:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161602-20160905152233.patch</filename>
            <type>text/plain</type>
            <size>583533</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA1NDUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjM3MDBiZjE0OTMyMTgw
OTc5NjU0Yjk0MThmNWEzOTdhMTAyY2ZhMy4uNWUxYThmOTAwYWYzOTM4NzFiYTczZDdkZTFjM2U3
ZjYyZDE3ZDU1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU1IEBACiAyMDE2LTA5LTA1ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBbRmV0Y2ggQVBJXSBNb3Zl
IFdlYkNvcmUvbG9hZGVyL2NhY2hlIHRvIFdlYkNvcmUvbG9hZGVyL2ZldGNoCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE2MDIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBjaGFuZ2Ugb2YgYmVoYXZp
b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlUG9saWN5
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVQb2xpY3ku
aC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5j
cHAuCisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZENTU1N0eWxlU2hlZXQuaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0Lmgu
CisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZEZvbnQuY3BwOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwLgorICAgICAgICAqIGxvYWRl
ci9mZXRjaC9DYWNoZWRGb250Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkRm9udC5oLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRGb250Q2xp
ZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9u
dENsaWVudC5oLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRJbWFnZS5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwLgorICAg
ICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRJbWFnZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmguCisgICAgICAgICogbG9hZGVyL2ZldGNo
L0NhY2hlZEltYWdlQ2xpZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkSW1hZ2VDbGllbnQuaC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVk
UmF3UmVzb3VyY2UuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJhd1Jlc291cmNlLmNwcC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkUmF3
UmVzb3VyY2UuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSYXdSZXNvdXJjZS5oLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRSYXdSZXNvdXJj
ZUNsaWVudC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJhd1Jlc291cmNlQ2xpZW50LmguCisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291
cmNlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZS5jcHAuCisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaC4K
KyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVu
dFdhbGtlci5oLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZUhhbmRsZS5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGUuY3BwLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZUhhbmRs
ZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlSGFuZGxlLmguCisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlTG9hZGVy
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZUxvYWRlci5jcHAuCisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlUmVx
dWVzdC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0LmNwcC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0LmguCisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291
cmNlUmVxdWVzdEluaXRpYXRvcnMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMuY3BwLgorICAgICAgICAq
IGxvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5p
dGlhdG9ycy5oLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRTVkdEb2N1bWVudC5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRG9jdW1l
bnQuY3BwLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRTVkdEb2N1bWVudC5oOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0RvY3VtZW50Lmgu
CisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZFNWR0RvY3VtZW50Q2xpZW50Lmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRG9jdW1lbnRDbGll
bnQuaC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2Uu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0Rv
Y3VtZW50UmVmZXJlbmNlLmNwcC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRG9j
dW1lbnRSZWZlcmVuY2UuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9D
YWNoZWRTVkdGb250LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRTVkdGb250LmNwcC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRm9u
dC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0Zv
bnQuaC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkU2NyaXB0LmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwLgorICAgICAg
ICAqIGxvYWRlci9mZXRjaC9DYWNoZWRTY3JpcHQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuaC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gv
Q2FjaGVkU3R5bGVTaGVldENsaWVudC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFN0eWxlU2hlZXRDbGllbnQuaC4KKyAgICAgICAgKiBsb2FkZXIvZmV0
Y2gvQ2FjaGVkVGV4dFRyYWNrLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRUZXh0VHJhY2suY3BwLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9DYWNo
ZWRUZXh0VHJhY2suaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRUZXh0VHJhY2suaC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkWFNMU3R5bGVT
aGVldC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
WFNMU3R5bGVTaGVldC5jcHAuCisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZFhTTFN0eWxl
U2hlZXQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRY
U0xTdHlsZVNoZWV0LmguCisgICAgICAgICogbG9hZGVyL2ZldGNoL01lbW9yeUNhY2hlLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAu
CisgICAgICAgICogbG9hZGVyL2ZldGNoL01lbW9yeUNhY2hlLmg6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaC4KKworMjAxNi0wOS0wNSAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKICAgICAgICAgQ2FjaGVkUmVzb3VyY2VM
b2FkZXIgaXMgbm90IHRha2luZyBpbnRvIGFjY291bnQgZmV0Y2ggb3B0aW9ucyB0byB1c2Ugb3Ig
bm90IGNhY2hlZCByZXNvdXJjZXMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2MTM4OQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGUxYjM5YTA3YWQz
N2MwOWVhMWE5ZWE1OTlmNTEwNDQ5MTU3MzhiNWYuLmE2MWQ3MzBmMGY0YjY4ZTZmYTA4YzU1M2Y1
NTE0NDIxMTg4NjIxNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC02Miw3ICs2Miw3IEBAIHNl
dChXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vbG9hZGVy
L2FwcGNhY2hlIgogICAgICIke1dFQkNPUkVfRElSfS9sb2FkZXIvYXJjaGl2ZSIKICAgICAiJHtX
RUJDT1JFX0RJUn0vbG9hZGVyL2FyY2hpdmUvbWh0bWwiCi0gICAgIiR7V0VCQ09SRV9ESVJ9L2xv
YWRlci9jYWNoZSIKKyAgICAiJHtXRUJDT1JFX0RJUn0vbG9hZGVyL2ZldGNoIgogICAgICIke1dF
QkNPUkVfRElSfS9sb2FkZXIvaWNvbiIKICAgICAiJHtXRUJDT1JFX0RJUn0vbWF0aG1sIgogICAg
ICIke1dFQkNPUkVfRElSfS9wYWdlIgpAQCAtMTk4OSwyMSArMTk4OSwyMSBAQCBzZXQoV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgbG9hZGVyL2FyY2hpdmUvbWh0bWwvTUhUTUxBcmNoaXZlLmNwcAogICAg
IGxvYWRlci9hcmNoaXZlL21odG1sL01IVE1MUGFyc2VyLmNwcAogCi0gICAgbG9hZGVyL2NhY2hl
L0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCi0gICAgbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3Bw
Ci0gICAgbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAotICAgIGxvYWRlci9jYWNoZS9DYWNo
ZWRSYXdSZXNvdXJjZS5jcHAKLSAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCi0g
ICAgbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlSGFuZGxlLmNwcAotICAgIGxvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKLSAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0LmNwcAotICAgIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0
aWF0b3JzLmNwcAotICAgIGxvYWRlci9jYWNoZS9DYWNoZWRTVkdEb2N1bWVudC5jcHAKLSAgICBs
b2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuY3BwCi0gICAgbG9hZGVyL2Nh
Y2hlL0NhY2hlZFNWR0ZvbnQuY3BwCi0gICAgbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5jcHAK
LSAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAKLSAgICBsb2FkZXIvY2Fj
aGUvTWVtb3J5Q2FjaGUuY3BwCisgICAgbG9hZGVyL2ZldGNoL0NhY2hlZENTU1N0eWxlU2hlZXQu
Y3BwCisgICAgbG9hZGVyL2ZldGNoL0NhY2hlZEZvbnQuY3BwCisgICAgbG9hZGVyL2ZldGNoL0Nh
Y2hlZEltYWdlLmNwcAorICAgIGxvYWRlci9mZXRjaC9DYWNoZWRSYXdSZXNvdXJjZS5jcHAKKyAg
ICBsb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2UuY3BwCisgICAgbG9hZGVyL2ZldGNoL0NhY2hl
ZFJlc291cmNlSGFuZGxlLmNwcAorICAgIGxvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZUxvYWRl
ci5jcHAKKyAgICBsb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcAorICAgIGxv
YWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmNwcAorICAgIGxvYWRl
ci9mZXRjaC9DYWNoZWRTVkdEb2N1bWVudC5jcHAKKyAgICBsb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZH
RG9jdW1lbnRSZWZlcmVuY2UuY3BwCisgICAgbG9hZGVyL2ZldGNoL0NhY2hlZFNWR0ZvbnQuY3Bw
CisgICAgbG9hZGVyL2ZldGNoL0NhY2hlZFNjcmlwdC5jcHAKKyAgICBsb2FkZXIvZmV0Y2gvQ2Fj
aGVkWFNMU3R5bGVTaGVldC5jcHAKKyAgICBsb2FkZXIvZmV0Y2gvTWVtb3J5Q2FjaGUuY3BwCiAK
ICAgICBsb2FkZXIvaWNvbi9JY29uQ29udHJvbGxlci5jcHAKICAgICBsb2FkZXIvaWNvbi9JY29u
RGF0YWJhc2UuY3BwCkBAIC0zMTk3LDcgKzMxOTcsNyBAQCBpZiAoRU5BQkxFX1ZJREVPX1RSQUNL
KQogICAgICAgICBodG1sL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAKICAgICAgICAgaHRtbC90cmFj
ay9XZWJWVFRUb2tlbml6ZXIuY3BwCiAKLSAgICAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFRleHRU
cmFjay5jcHAKKyAgICAgICAgbG9hZGVyL2ZldGNoL0NhY2hlZFRleHRUcmFjay5jcHAKIAogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5jcHAKICAgICAp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggYWRlYWQ2ZDA4NTYxZjI1OGI2NGYyZDdjYjVmZTZkY2JiMTE0MzlmMi4uZjI5NWQ2Zjc0
N2YzOWFhOTRmMDQ0Y2I5MGQ5OTFlMGFlYjcyMTVlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTk3MTcsNyArMTk3MTcsNyBA
QAogCQkJbmFtZSA9IFhNTDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCUE4
RDJCMjUyMTI4N0E1NjAwMEFGNEREQSAvKiBjYWNoZSAqLyA9IHsKKwkJQThEMkIyNTIxMjg3QTU2
MDAwQUY0RERBIC8qIGZldGNoICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKIAkJCQlCQ0IxNkMwMDA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkQ1NTU3R5bGVTaGVl
dC5jcHAgKi8sCkBAIC0xOTc2MSw3ICsxOTc2MSw3IEBACiAJCQkJQkNCMTZCRkUwOTc5QzNCRDAw
NDY3NzQxIC8qIE1lbW9yeUNhY2hlLmNwcCAqLywKIAkJCQlCQ0IxNkJGRjA5NzlDM0JEMDA0Njc3
NDEgLyogTWVtb3J5Q2FjaGUuaCAqLywKIAkJCSk7Ci0JCQlwYXRoID0gY2FjaGU7CisJCQlwYXRo
ID0gZmV0Y2g7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwogCQlBOUQyNDdGOTBE
NzU3RTQxMDBGREY5NTkgLyogUGx1Z2lucyAqLyA9IHsKQEAgLTIxMzI5LDcgKzIxMzI5LDcgQEAK
IAkJCWNoaWxkcmVuID0gKAogCQkJCTFBOEY2QkIwMERCNTVDREMwMDFEQjc5NCAvKiBhcHBjYWNo
ZSAqLywKIAkJCQk1MTJERDhFODBEOTFFNjkxMDAwRjg5RUUgLyogYXJjaGl2ZSAqLywKLQkJCQlB
OEQyQjI1MjEyODdBNTYwMDBBRjREREEgLyogY2FjaGUgKi8sCisJCQkJQThEMkIyNTIxMjg3QTU2
MDAwQUY0RERBIC8qIGZldGNoICovLAogCQkJCTdFRTY4NDczMTJEMjZFNTUwMEU3OTQxNSAvKiBj
ZiAqLywKIAkJCQk3RTRERTEwQjE5OEIxMDgxMDA1MUNCMDIgLyogY29jb2EgKi8sCiAJCQkJNTEy
NkU2QjYwQTJFM0FFRjAwNUMyOUZBIC8qIGljb24gKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVQb2xpY3kuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZVBvbGljeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjc2ODVl
ZTkyMDQyMTA3NDU5MTk1MjAxMmQ3ZWIxMWJhYTk4NTBhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZVBvbGljeS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDYWNoZVBvbGlj
eV9oCi0jZGVmaW5lIENhY2hlUG9saWN5X2gKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAg
ZW51bSBDYWNoZVBvbGljeSB7Ci0gICAgICAgIENhY2hlUG9saWN5VmVyaWZ5LAotICAgICAgICBD
YWNoZVBvbGljeVJldmFsaWRhdGUsCi0gICAgICAgIENhY2hlUG9saWN5UmVsb2FkLAotICAgICAg
ICBDYWNoZVBvbGljeUhpc3RvcnlCdWZmZXIKLSAgICB9OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDM3ZTU4YmRmNDllMTRlZWRjZDRmMDkwZjlm
YWU2NmYyNGVlOTM5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDE4MiArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMTk5
OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHlyaWdodCAoQykgMjAw
MSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDIg
V2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQotICAgIENvcHlyaWdodCAoQykgMjAwNiBT
YW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKLSAgICBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYgQXBwbGUgSW5jLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYWxsIGZ1
bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUgc2hlZXRzIGFuZCBo
dG1sCi0gICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkgY2FjaGUgZm9yIHRo
ZXNlIG9iamVjdHMuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2FjaGVk
Q1NTU3R5bGVTaGVldC5oIgotCi0jaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgotI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgiCi0jaW5jbHVkZSAiQ2FjaGVkU3R5bGVTaGVl
dENsaWVudC5oIgotI2luY2x1ZGUgIkhUVFBIZWFkZXJOYW1lcy5oIgotI2luY2x1ZGUgIkhUVFBQ
YXJzZXJzLmgiCi0jaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKLSNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKLSNpbmNsdWRlICJUZXh0UmVz
b3VyY2VEZWNvZGVyLmgiCi0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotQ2FjaGVkQ1NTU3R5bGVTaGVldDo6Q2FjaGVkQ1NTU3R5bGVTaGVldChj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgU3RyaW5nJiBjaGFy
c2V0LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQotICAgIDogQ2FjaGVkUmVzb3VyY2UocmVzb3VyY2VS
ZXF1ZXN0LCBDU1NTdHlsZVNoZWV0LCBzZXNzaW9uSUQpCi0gICAgLCBtX2RlY29kZXIoVGV4dFJl
c291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L2NzcyIsIGNoYXJzZXQpKQotewotICAgIC8vIFBy
ZWZlciB0ZXh0L2NzcyBidXQgYWNjZXB0IGFueSB0eXBlIChkZWxsLmNvbSBzZXJ2ZXMgYSBzdHls
ZXNoZWV0Ci0gICAgLy8gYXMgdGV4dC9odG1sOyBzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExNDUxPikuCi0gICAgc2V0QWNjZXB0KCJ0ZXh0L2NzcywqLyo7cT0w
LjEiKTsKLX0KLQotQ2FjaGVkQ1NTU3R5bGVTaGVldDo6fkNhY2hlZENTU1N0eWxlU2hlZXQoKQot
ewotICAgIGlmIChtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZSkKLSAgICAgICAgbV9wYXJzZWRTdHls
ZVNoZWV0Q2FjaGUtPnJlbW92ZWRGcm9tTWVtb3J5Q2FjaGUoKTsKLX0KLQotdm9pZCBDYWNoZWRD
U1NTdHlsZVNoZWV0OjpkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGMpCi17Ci0g
ICAgQVNTRVJUKGMtPnJlc291cmNlQ2xpZW50VHlwZSgpID09IENhY2hlZFN0eWxlU2hlZXRDbGll
bnQ6OmV4cGVjdGVkVHlwZSgpKTsKLSAgICAvLyBDYWNoZWRSZXNvdXJjZTo6ZGlkQWRkQ2xpZW50
KCkgbXVzdCBiZSBiZWZvcmUgc2V0Q1NTU3R5bGVTaGVldCgpLAotICAgIC8vIGJlY2F1c2Ugc2V0
Q1NTU3R5bGVTaGVldCgpIG1heSBjYXVzZSBzY3JpcHRzIHRvIGJlIGV4ZWN1dGVkLCB3aGljaCBj
b3VsZCBkZXN0cm95ICdjJyBpZiBpdCBpcyBhbiBpbnN0YW5jZSBvZiBIVE1MTGlua0VsZW1lbnQu
Ci0gICAgLy8gc2VlIHRoZSBjb21tZW50IG9mIEhUTUxMaW5rRWxlbWVudDo6c2V0Q1NTU3R5bGVT
aGVldC4KLSAgICBDYWNoZWRSZXNvdXJjZTo6ZGlkQWRkQ2xpZW50KGMpOwotCi0gICAgaWYgKCFp
c0xvYWRpbmcoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8Q2FjaGVkU3R5bGVTaGVldENsaWVudCo+
KGMpLT5zZXRDU1NTdHlsZVNoZWV0KG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLCBtX3Jlc3BvbnNl
LnVybCgpLCBtX2RlY29kZXItPmVuY29kaW5nKCkubmFtZSgpLCB0aGlzKTsKLX0KLQotdm9pZCBD
YWNoZWRDU1NTdHlsZVNoZWV0OjpzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmIGNocykKLXsKLSAg
ICBtX2RlY29kZXItPnNldEVuY29kaW5nKGNocywgVGV4dFJlc291cmNlRGVjb2Rlcjo6RW5jb2Rp
bmdGcm9tSFRUUEhlYWRlcik7Ci19Ci0KLVN0cmluZyBDYWNoZWRDU1NTdHlsZVNoZWV0OjplbmNv
ZGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKS5uYW1lKCk7
Ci19Ci0gICAgCi1jb25zdCBTdHJpbmcgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6c2hlZXRUZXh0KE1J
TUVUeXBlQ2hlY2sgbWltZVR5cGVDaGVjaywgYm9vbCogaGFzVmFsaWRNSU1FVHlwZSkgY29uc3QK
LXsgCi0gICAgaWYgKCFtX2RhdGEgfHwgbV9kYXRhLT5pc0VtcHR5KCkgfHwgIWNhblVzZVNoZWV0
KG1pbWVUeXBlQ2hlY2ssIGhhc1ZhbGlkTUlNRVR5cGUpKQotICAgICAgICByZXR1cm4gU3RyaW5n
KCk7Ci0gICAgCi0gICAgaWYgKCFtX2RlY29kZWRTaGVldFRleHQuaXNOdWxsKCkpCi0gICAgICAg
IHJldHVybiBtX2RlY29kZWRTaGVldFRleHQ7Ci0gICAgCi0gICAgLy8gRG9uJ3QgY2FjaGUgdGhl
IGRlY29kZWQgdGV4dCwgcmVnZW5lcmF0aW5nIGlzIGNoZWFwIGFuZCBpdCBjYW4gdXNlIHF1aXRl
IGEgYml0IG9mIG1lbW9yeQotICAgIHJldHVybiBtX2RlY29kZXItPmRlY29kZUFuZEZsdXNoKG1f
ZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSk7Ci19Ci0KLXZvaWQgQ2FjaGVkQ1NTU3R5bGVT
aGVldDo6ZmluaXNoTG9hZGluZyhTaGFyZWRCdWZmZXIqIGRhdGEpCi17Ci0gICAgbV9kYXRhID0g
ZGF0YTsKLSAgICBzZXRFbmNvZGVkU2l6ZShkYXRhID8gZGF0YS0+c2l6ZSgpIDogMCk7Ci0gICAg
Ly8gRGVjb2RlIHRoZSBkYXRhIHRvIGZpbmQgb3V0IHRoZSBlbmNvZGluZyBhbmQga2VlcCB0aGUg
c2hlZXQgdGV4dCBhcm91bmQgZHVyaW5nIGNoZWNrTm90aWZ5KCkKLSAgICBpZiAoZGF0YSkKLSAg
ICAgICAgbV9kZWNvZGVkU2hlZXRUZXh0ID0gbV9kZWNvZGVyLT5kZWNvZGVBbmRGbHVzaChkYXRh
LT5kYXRhKCksIGRhdGEtPnNpemUoKSk7Ci0gICAgc2V0TG9hZGluZyhmYWxzZSk7Ci0gICAgY2hl
Y2tOb3RpZnkoKTsKLSAgICAvLyBDbGVhciB0aGUgZGVjb2RlZCB0ZXh0IGFzIGl0IGlzIHVubGlr
ZWx5IHRvIGJlIG5lZWRlZCBpbW1lZGlhdGVseSBhZ2FpbiBhbmQgaXMgY2hlYXAgdG8gcmVnZW5l
cmF0ZS4KLSAgICBtX2RlY29kZWRTaGVldFRleHQgPSBTdHJpbmcoKTsKLX0KLQotdm9pZCBDYWNo
ZWRDU1NTdHlsZVNoZWV0OjpjaGVja05vdGlmeSgpCi17Ci0gICAgaWYgKGlzTG9hZGluZygpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRT
dHlsZVNoZWV0Q2xpZW50PiB3KG1fY2xpZW50cyk7Ci0gICAgd2hpbGUgKENhY2hlZFN0eWxlU2hl
ZXRDbGllbnQqIGMgPSB3Lm5leHQoKSkKLSAgICAgICAgYy0+c2V0Q1NTU3R5bGVTaGVldChtX3Jl
c291cmNlUmVxdWVzdC51cmwoKSwgbV9yZXNwb25zZS51cmwoKSwgbV9kZWNvZGVyLT5lbmNvZGlu
ZygpLm5hbWUoKSwgdGhpcyk7Ci19Ci0KLWJvb2wgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6Y2FuVXNl
U2hlZXQoTUlNRVR5cGVDaGVjayBtaW1lVHlwZUNoZWNrLCBib29sKiBoYXNWYWxpZE1JTUVUeXBl
KSBjb25zdAotewotICAgIGlmIChlcnJvck9jY3VycmVkKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChtaW1lVHlwZUNoZWNrID09IE1JTUVUeXBlQ2hlY2s6OkxheCkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBUaGlzIGNoZWNrIGV4YWN0bHkgbWF0Y2hlcyBGaXJl
Zm94LiAgTm90ZSB0aGF0IHdlIGdyYWIgdGhlIENvbnRlbnQtVHlwZQotICAgIC8vIGhlYWRlciBk
aXJlY3RseSBiZWNhdXNlIHdlIHdhbnQgdG8gc2VlIHdoYXQgdGhlIHZhbHVlIGlzIEJFRk9SRSBj
b250ZW50Ci0gICAgLy8gc25pZmZpbmcuICBGaXJlZm94IGRvZXMgdGhpcyBieSBzZXR0aW5nIGEg
InR5cGUgaGludCIgb24gdGhlIGNoYW5uZWwuCi0gICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBz
aG91bGQgYmUgb2JzZXJ2YXRpb25hbGx5IGVxdWl2YWxlbnQuCi0gICAgLy8KLSAgICAvLyBUaGlz
IGNvZGUgZGVmYXVsdHMgdG8gYWxsb3dpbmcgdGhlIHN0eWxlc2hlZXQgZm9yIG5vbi1IVFRQIHBy
b3RvY29scyBzbwotICAgIC8vIGZvbGtzIGNhbiB1c2Ugc3RhbmRhcmRzIG1vZGUgZm9yIGxvY2Fs
IEhUTUwgZG9jdW1lbnRzLgotICAgIFN0cmluZyBtaW1lVHlwZSA9IGV4dHJhY3RNSU1FVHlwZUZy
b21NZWRpYVR5cGUocmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNv
bnRlbnRUeXBlKSk7Ci0gICAgYm9vbCB0eXBlT0sgPSBtaW1lVHlwZS5pc0VtcHR5KCkgfHwgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJ0ZXh0L2NzcyIpIHx8IGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiYXBwbGljYXRpb24veC11bmtub3du
LWNvbnRlbnQtdHlwZSIpOwotICAgIGlmIChoYXNWYWxpZE1JTUVUeXBlKQotICAgICAgICAqaGFz
VmFsaWRNSU1FVHlwZSA9IHR5cGVPSzsKLSAgICByZXR1cm4gdHlwZU9LOwotfQotCi12b2lkIENh
Y2hlZENTU1N0eWxlU2hlZXQ6OmRlc3Ryb3lEZWNvZGVkRGF0YSgpCi17Ci0gICAgaWYgKCFtX3Bh
cnNlZFN0eWxlU2hlZXRDYWNoZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYXJzZWRTdHls
ZVNoZWV0Q2FjaGUtPnJlbW92ZWRGcm9tTWVtb3J5Q2FjaGUoKTsKLSAgICBtX3BhcnNlZFN0eWxl
U2hlZXRDYWNoZSA9IG51bGxwdHI7Ci0KLSAgICBzZXREZWNvZGVkU2l6ZSgwKTsKLX0KLQotUGFz
c1JlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+IENhY2hlZENTU1N0eWxlU2hlZXQ6OnJlc3RvcmVQ
YXJzZWRTdHlsZVNoZWV0KGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIENhY2hlUG9s
aWN5IGNhY2hlUG9saWN5KQotewotICAgIGlmICghbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUt
PnN1YnJlc291cmNlc0FsbG93UmV1c2UoY2FjaGVQb2xpY3kpKSB7Ci0gICAgICAgIG1fcGFyc2Vk
U3R5bGVTaGVldENhY2hlLT5yZW1vdmVkRnJvbU1lbW9yeUNhY2hlKCk7Ci0gICAgICAgIG1fcGFy
c2VkU3R5bGVTaGVldENhY2hlID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgfQotCi0gICAgQVNTRVJUKG1fcGFyc2VkU3R5bGVTaGVldENhY2hlLT5pc0NhY2hlYWJsZSgp
KTsKLSAgICBBU1NFUlQobV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUtPmlzSW5NZW1vcnlDYWNoZSgp
KTsKLQotICAgIC8vIENvbnRleHRzIG11c3QgYmUgaWRlbnRpY2FsIHNvIHdlIGtub3cgd2Ugd291
bGQgZ2V0IHRoZSBzYW1lIGV4YWN0IHJlc3VsdCBpZiB3ZSBwYXJzZWQgYWdhaW4uCi0gICAgaWYg
KG1fcGFyc2VkU3R5bGVTaGVldENhY2hlLT5wYXJzZXJDb250ZXh0KCkgIT0gY29udGV4dCkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBkaWRBY2Nlc3NEZWNvZGVkRGF0YShtb25vdG9u
aWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7Ci0KLSAgICByZXR1cm4gbV9wYXJzZWRTdHlsZVNoZWV0
Q2FjaGU7Ci19Ci0KLXZvaWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6c2F2ZVBhcnNlZFN0eWxlU2hl
ZXQoUmVmPFN0eWxlU2hlZXRDb250ZW50cz4mJiBzaGVldCkKLXsKLSAgICBBU1NFUlQoc2hlZXQu
Z2V0KCkuaXNDYWNoZWFibGUoKSk7Ci0KLSAgICBpZiAobV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUp
Ci0gICAgICAgIG1fcGFyc2VkU3R5bGVTaGVldENhY2hlLT5yZW1vdmVkRnJvbU1lbW9yeUNhY2hl
KCk7Ci0gICAgbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUgPSBXVEZNb3ZlKHNoZWV0KTsKLSAgICBt
X3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+YWRkZWRUb01lbW9yeUNhY2hlKCk7Ci0KLSAgICBzZXRE
ZWNvZGVkU2l6ZShtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+ZXN0aW1hdGVkU2l6ZUluQnl0ZXMo
KSk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRDU1NTdHlsZVNoZWV0LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NT
U3R5bGVTaGVldC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDJhOGZmZWU2MGI2
MDllMTllOGYwYTAyNjY0MTBiNjc5MWUyY2RjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRDU1NT
dHlsZVNoZWV0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICAgIENvcHly
aWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHly
aWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAgICBDb3B5cmln
aHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gICAgQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5
IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxlIHNoZWV0cyBhbmQgaHRtbAotICAgIHBh
Z2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hlIGZvciB0aGVzZSBvYmplY3Rz
LgotKi8KLQotI2lmbmRlZiBDYWNoZWRDU1NTdHlsZVNoZWV0X2gKLSNkZWZpbmUgQ2FjaGVkQ1NT
U3R5bGVTaGVldF9oCi0KLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBDYWNoZWRSZXNvdXJjZUNsaWVudDsKLSAgICBjbGFzcyBT
dHlsZVNoZWV0Q29udGVudHM7Ci0gICAgY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsKLSAgICBz
dHJ1Y3QgQ1NTUGFyc2VyQ29udGV4dDsKLQotICAgIGNsYXNzIENhY2hlZENTU1N0eWxlU2hlZXQg
ZmluYWwgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2UgewotICAgIHB1YmxpYzoKLSAgICAgICAgQ2Fj
aGVkQ1NTU3R5bGVTaGVldChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIGNo
YXJzZXQsIFNlc3Npb25JRCk7Ci0gICAgICAgIHZpcnR1YWwgfkNhY2hlZENTU1N0eWxlU2hlZXQo
KTsKLQotICAgICAgICBlbnVtIGNsYXNzIE1JTUVUeXBlQ2hlY2sgeyBTdHJpY3QsIExheCB9Owot
ICAgICAgICBjb25zdCBTdHJpbmcgc2hlZXRUZXh0KE1JTUVUeXBlQ2hlY2sgPSBNSU1FVHlwZUNo
ZWNrOjpTdHJpY3QsIGJvb2wqIGhhc1ZhbGlkTUlNRVR5cGUgPSBudWxscHRyKSBjb25zdDsKLQot
ICAgICAgICBQYXNzUmVmUHRyPFN0eWxlU2hlZXRDb250ZW50cz4gcmVzdG9yZVBhcnNlZFN0eWxl
U2hlZXQoY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIENhY2hlUG9saWN5KTsKLSAgICAgICAgdm9p
ZCBzYXZlUGFyc2VkU3R5bGVTaGVldChSZWY8U3R5bGVTaGVldENvbnRlbnRzPiYmKTsKLQotICAg
IHByaXZhdGU6Ci0gICAgICAgIGJvb2wgY2FuVXNlU2hlZXQoTUlNRVR5cGVDaGVjaywgYm9vbCog
aGFzVmFsaWRNSU1FVHlwZSkgY29uc3Q7Ci0gICAgICAgIGJvb2wgbWF5VHJ5UmVwbGFjZUVuY29k
ZWREYXRhKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgICAgIHZvaWQg
ZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kikgb3ZlcnJpZGU7Ci0KLSAgICAgICAg
dm9pZCBzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICAgICAgU3RyaW5n
IGVuY29kaW5nKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgICAgIGNvbnN0IFRleHRSZXNvdXJjZURl
Y29kZXIqIHRleHRSZXNvdXJjZURlY29kZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rl
Y29kZXIuZ2V0KCk7IH0KLSAgICAgICAgdm9pZCBmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1ZmZlciop
IG92ZXJyaWRlOwotICAgICAgICB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YSgpIG92ZXJyaWRlOwot
Ci0gICAgcHJvdGVjdGVkOgotICAgICAgICB2b2lkIGNoZWNrTm90aWZ5KCkgb3ZlcnJpZGU7Ci0K
LSAgICAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsKLSAgICAgICAg
U3RyaW5nIG1fZGVjb2RlZFNoZWV0VGV4dDsKLQotICAgICAgICBSZWZQdHI8U3R5bGVTaGVldENv
bnRlbnRzPiBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZTsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FDSEVEX1JFU09VUkNFKENhY2hl
ZENTU1N0eWxlU2hlZXQsIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0KQotCi0jZW5kaWYg
Ly8gQ2FjaGVkQ1NTU3R5bGVTaGVldF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkRm9udC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkRm9udC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2Y2I0MWMzMjkyZjFm
OTdhYzFiNGQzYzE5OThkZGQ1NDFmYTFmYjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNh
Y2hlZEZvbnQuaCIKLQotI2luY2x1ZGUgIkNhY2hlZEZvbnRDbGllbnQuaCIKLSNpbmNsdWRlICJD
YWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9h
ZGVyLmgiCi0jaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIgotI2luY2x1ZGUgIkZv
bnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLSNpbmNsdWRl
ICJNZW1vcnlDYWNoZS5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgIlRl
eHRSZXNvdXJjZURlY29kZXIuaCIKLSNpbmNsdWRlICJUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRl
cmF0b3IuaCIKLSNpbmNsdWRlICJXT0ZGRmlsZUZvcm1hdC5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1DYWNoZWRGb250OjpDYWNoZWRGb250KGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBTZXNzaW9uSUQgc2Vzc2lvbklE
LCBUeXBlIHR5cGUpCi0gICAgOiBDYWNoZWRSZXNvdXJjZShyZXNvdXJjZVJlcXVlc3QsIHR5cGUs
IHNlc3Npb25JRCkKLSAgICAsIG1fbG9hZEluaXRpYXRlZChmYWxzZSkKLSAgICAsIG1faGFzQ3Jl
YXRlZEZvbnREYXRhV3JhcHBpbmdSZXNvdXJjZShmYWxzZSkKLXsKLX0KLQotQ2FjaGVkRm9udDo6
fkNhY2hlZEZvbnQoKQotewotfQotCi12b2lkIENhY2hlZEZvbnQ6OmxvYWQoQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXImLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAg
Ly8gRG9uJ3QgbG9hZCB0aGUgZmlsZSB5ZXQuICBXYWl0IGZvciBhbiBhY2Nlc3MgYmVmb3JlIHRy
aWdnZXJpbmcgdGhlIGxvYWQuCi0gICAgc2V0TG9hZGluZyh0cnVlKTsKLSAgICBtX29wdGlvbnMg
PSBvcHRpb25zOwotfQotCi12b2lkIENhY2hlZEZvbnQ6OmRpZEFkZENsaWVudChDYWNoZWRSZXNv
dXJjZUNsaWVudCogY2xpZW50KQotewotICAgIEFTU0VSVChjbGllbnQtPnJlc291cmNlQ2xpZW50
VHlwZSgpID09IENhY2hlZEZvbnRDbGllbnQ6OmV4cGVjdGVkVHlwZSgpKTsKLSAgICBpZiAoIWlz
TG9hZGluZygpKQotICAgICAgICBzdGF0aWNfY2FzdDxDYWNoZWRGb250Q2xpZW50Kj4oY2xpZW50
KS0+Zm9udExvYWRlZCgqdGhpcyk7Ci19Ci0KLXZvaWQgQ2FjaGVkRm9udDo6ZmluaXNoTG9hZGlu
ZyhTaGFyZWRCdWZmZXIqIGRhdGEpCi17Ci0gICAgbV9kYXRhID0gZGF0YTsKLSAgICBzZXRFbmNv
ZGVkU2l6ZShtX2RhdGEuZ2V0KCkgPyBtX2RhdGEtPnNpemUoKSA6IDApOwotICAgIHNldExvYWRp
bmcoZmFsc2UpOwotICAgIGNoZWNrTm90aWZ5KCk7Ci19Ci0KLXZvaWQgQ2FjaGVkRm9udDo6YmVn
aW5Mb2FkSWZOZWVkZWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlcikKLXsKLSAgICBpZiAo
IW1fbG9hZEluaXRpYXRlZCkgewotICAgICAgICBtX2xvYWRJbml0aWF0ZWQgPSB0cnVlOwotICAg
ICAgICBDYWNoZWRSZXNvdXJjZTo6bG9hZChsb2FkZXIsIG1fb3B0aW9ucyk7Ci0gICAgfQotfQot
Ci1ib29sIENhY2hlZEZvbnQ6OmVuc3VyZUN1c3RvbUZvbnREYXRhKGNvbnN0IEF0b21pY1N0cmlu
ZyYpCi17Ci0gICAgcmV0dXJuIGVuc3VyZUN1c3RvbUZvbnREYXRhKG1fZGF0YS5nZXQoKSk7Ci19
Ci0KLWJvb2wgQ2FjaGVkRm9udDo6ZW5zdXJlQ3VzdG9tRm9udERhdGEoU2hhcmVkQnVmZmVyKiBk
YXRhKQotewotICAgIGlmICghbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhICYmICFlcnJvck9jY3Vy
cmVkKCkgJiYgIWlzTG9hZGluZygpICYmIGRhdGEpIHsKLSAgICAgICAgYm9vbCB3cmFwcGluZzsK
LSAgICAgICAgbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhID0gY3JlYXRlQ3VzdG9tRm9udERhdGEo
KmRhdGEsIHdyYXBwaW5nKTsKLSAgICAgICAgbV9oYXNDcmVhdGVkRm9udERhdGFXcmFwcGluZ1Jl
c291cmNlID0gbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhICYmIHdyYXBwaW5nOwotICAgICAgICBp
ZiAoIW1fZm9udEN1c3RvbVBsYXRmb3JtRGF0YSkKLSAgICAgICAgICAgIHNldFN0YXR1cyhEZWNv
ZGVFcnJvcik7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0YS5n
ZXQoKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEZvbnRDdXN0b21QbGF0Zm9ybURhdGE+IENhY2hl
ZEZvbnQ6OmNyZWF0ZUN1c3RvbUZvbnREYXRhKFNoYXJlZEJ1ZmZlciYgYnl0ZXMsIGJvb2wmIHdy
YXBwaW5nKQotewotICAgIHdyYXBwaW5nID0gdHJ1ZTsKLQotI2lmICFQTEFURk9STShDT0NPQSkK
LSAgICBpZiAoaXNXT0ZGKGJ5dGVzKSkgewotICAgICAgICB3cmFwcGluZyA9IGZhbHNlOwotICAg
ICAgICBWZWN0b3I8Y2hhcj4gY29udmVydGVkRm9udDsKLSAgICAgICAgaWYgKCFjb252ZXJ0V09G
RlRvU2ZudChieXRlcywgY29udmVydGVkRm9udCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgICAgICBhdXRvIGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IoY29u
dmVydGVkRm9udCk7Ci0gICAgICAgIHJldHVybiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRh
KGJ1ZmZlcik7Ci0gICAgfQotI2VuZGlmCi0KLSAgICByZXR1cm4gY3JlYXRlRm9udEN1c3RvbVBs
YXRmb3JtRGF0YShieXRlcyk7Ci19Ci0KLVJlZlB0cjxGb250PiBDYWNoZWRGb250OjpjcmVhdGVG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNT
dHJpbmcmLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBjb25zdCBG
b250RmVhdHVyZVNldHRpbmdzJiBmb250RmFjZUZlYXR1cmVzLCBjb25zdCBGb250VmFyaWFudFNl
dHRpbmdzJiBmb250RmFjZVZhcmlhbnRTZXR0aW5ncykKLXsKLSAgICByZXR1cm4gRm9udDo6Y3Jl
YXRlKHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZvbnREZXNjcmlwdGlvbiwgc3ludGhldGlj
Qm9sZCwgc3ludGhldGljSXRhbGljLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFjZVZhcmlhbnRT
ZXR0aW5ncyksIHRydWUpOwotfQotCi1Gb250UGxhdGZvcm1EYXRhIENhY2hlZEZvbnQ6OnBsYXRm
b3JtRGF0YUZyb21DdXN0b21EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzJiBm
b250RmFjZUZlYXR1cmVzLCBjb25zdCBGb250VmFyaWFudFNldHRpbmdzJiBmb250RmFjZVZhcmlh
bnRTZXR0aW5ncykKLXsKLSAgICBBU1NFUlQobV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhKTsKLSAg
ICByZXR1cm4gcGxhdGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoKm1fZm9udEN1c3RvbVBsYXRmb3Jt
RGF0YSwgZm9udERlc2NyaXB0aW9uLCBib2xkLCBpdGFsaWMsIGZvbnRGYWNlRmVhdHVyZXMsIGZv
bnRGYWNlVmFyaWFudFNldHRpbmdzKTsKLX0KLQotRm9udFBsYXRmb3JtRGF0YSBDYWNoZWRGb250
OjpwbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShGb250Q3VzdG9tUGxhdGZvcm1EYXRhJiBmb250
Q3VzdG9tUGxhdGZvcm1EYXRhLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyYgZm9u
dEZhY2VGZWF0dXJlcywgY29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYgZm9udEZhY2VWYXJpYW50
U2V0dGluZ3MpCi17Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgcmV0dXJuIGZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEuZm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGJvbGQsIGl0YWxp
YywgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VWYXJpYW50U2V0dGluZ3MpOwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0oZm9udEZhY2VGZWF0dXJlcyk7Ci0gICAgVU5VU0VEX1BBUkFNKGZvbnRG
YWNlVmFyaWFudFNldHRpbmdzKTsKLSAgICByZXR1cm4gZm9udEN1c3RvbVBsYXRmb3JtRGF0YS5m
b250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgYm9sZCwgaXRhbGljKTsKLSNlbmRpZgot
fQotCi12b2lkIENhY2hlZEZvbnQ6OmFsbENsaWVudHNSZW1vdmVkKCkKLXsKLSAgICBtX2ZvbnRD
dXN0b21QbGF0Zm9ybURhdGEgPSBudWxscHRyOwotfQotCi12b2lkIENhY2hlZEZvbnQ6OmNoZWNr
Tm90aWZ5KCkKLXsKLSAgICBpZiAoaXNMb2FkaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRGb250Q2xpZW50PiB3YWxrZXIo
bV9jbGllbnRzKTsKLSAgICB3aGlsZSAoQ2FjaGVkRm9udENsaWVudCogY2xpZW50ID0gd2Fsa2Vy
Lm5leHQoKSkKLSAgICAgICAgY2xpZW50LT5mb250TG9hZGVkKCp0aGlzKTsKLX0KLQotYm9vbCBD
YWNoZWRGb250OjptYXlUcnlSZXBsYWNlRW5jb2RlZERhdGEoKSBjb25zdAotewotICAgIC8vIElm
IGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YSBoYXMgZXZlciBiZWVuIGNvbnN0cnVjdGVkIHRvIHdy
YXAgdGhlIGludGVybmFsIHJlc291cmNlIGJ1ZmZlciB0aGVuIGl0IHN0aWxsIG1pZ2h0IGJlIGlu
IHVzZSBzb21ld2hlcmUuCi0gICAgLy8gVGhhdCBwbGF0Zm9ybSBmb250IG9iamVjdCBtaWdodCBk
aXJlY3RseSByZWZlcmVuY2UgdGhlIGVuY29kZWQgZGF0YSBidWZmZXIgYmVoaW5kIHRoaXMgQ2Fj
aGVkRm9udCwKLSAgICAvLyBzbyByZXBsYWNpbmcgaXQgaXMgdW5zYWZlLgotCi0gICAgcmV0dXJu
ICFtX2hhc0NyZWF0ZWRGb250RGF0YVdyYXBwaW5nUmVzb3VyY2U7Ci19Ci0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmggYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBlNThjOWUwOTVjNDlmZWZlMjE3YTNhNjdiMDA2ZjVmNTQ1MWFjMGMxLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRGb250LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYg
Q2FjaGVkRm9udF9oCi0jZGVmaW5lIENhY2hlZEZvbnRfaAotCi0jaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2UuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgotI2luY2x1ZGUgIkZv
bnQuaCIKLSNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKLWNsYXNzIEZvbnREZXNjcmlwdGlvbjsKLWNsYXNz
IEZvbnRGZWF0dXJlU2V0dGluZ3M7Ci1jbGFzcyBGb250UGxhdGZvcm1EYXRhOwotY2xhc3MgU1ZH
RG9jdW1lbnQ7Ci1jbGFzcyBTVkdGb250RWxlbWVudDsKLXN0cnVjdCBGb250Q3VzdG9tUGxhdGZv
cm1EYXRhOwotCi1jbGFzcyBDYWNoZWRGb250IDogcHVibGljIENhY2hlZFJlc291cmNlIHsKLXB1
YmxpYzoKLSAgICBDYWNoZWRGb250KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFNlc3Npb25JRCwg
VHlwZSA9IEZvbnRSZXNvdXJjZSk7Ci0gICAgdmlydHVhbCB+Q2FjaGVkRm9udCgpOwotCi0gICAg
dm9pZCBiZWdpbkxvYWRJZk5lZWRlZChDYWNoZWRSZXNvdXJjZUxvYWRlciYpOwotICAgIGJvb2wg
c3RpbGxOZWVkc0xvYWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAhbV9sb2FkSW5pdGlhdGVk
OyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlQ3VzdG9tRm9udERhdGEoY29uc3QgQXRvbWlj
U3RyaW5nJiByZW1vdGVVUkkpOwotCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxGb250Q3Vz
dG9tUGxhdGZvcm1EYXRhPiBjcmVhdGVDdXN0b21Gb250RGF0YShTaGFyZWRCdWZmZXImLCBib29s
JiB3cmFwcGluZyk7Ci0gICAgc3RhdGljIEZvbnRQbGF0Zm9ybURhdGEgcGxhdGZvcm1EYXRhRnJv
bUN1c3RvbURhdGEoRm9udEN1c3RvbVBsYXRmb3JtRGF0YSYsIGNvbnN0IEZvbnREZXNjcmlwdGlv
biYsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MmLCBj
b25zdCBGb250VmFyaWFudFNldHRpbmdzJik7Ci0KLSAgICB2aXJ0dWFsIFJlZlB0cjxGb250PiBj
cmVhdGVGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgcmVt
b3RlVVJJLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBjb25zdCBG
b250RmVhdHVyZVNldHRpbmdzJiwgY29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYpOwotCi1wcm90
ZWN0ZWQ6Ci0gICAgRm9udFBsYXRmb3JtRGF0YSBwbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBjb25zdCBGb250
RmVhdHVyZVNldHRpbmdzJiwgY29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYpOwotCi0gICAgYm9v
bCBlbnN1cmVDdXN0b21Gb250RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEpOwotCi1wcml2YXRlOgot
ICAgIHZvaWQgY2hlY2tOb3RpZnkoKSBvdmVycmlkZTsKLSAgICBib29sIG1heVRyeVJlcGxhY2VF
bmNvZGVkRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBsb2FkKENhY2hlZFJlc291
cmNlTG9hZGVyJiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJikgb3ZlcnJpZGU7Ci0KLSAg
ICB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopIG92ZXJyaWRlOwotICAg
IHZvaWQgZmluaXNoTG9hZGluZyhTaGFyZWRCdWZmZXIqKSBvdmVycmlkZTsKLQotICAgIHZvaWQg
YWxsQ2xpZW50c1JlbW92ZWQoKSBvdmVycmlkZTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250
Q3VzdG9tUGxhdGZvcm1EYXRhPiBtX2ZvbnRDdXN0b21QbGF0Zm9ybURhdGE7Ci0gICAgYm9vbCBt
X2xvYWRJbml0aWF0ZWQ7Ci0gICAgYm9vbCBtX2hhc0NyZWF0ZWRGb250RGF0YVdyYXBwaW5nUmVz
b3VyY2U7Ci0KLSAgICBmcmllbmQgY2xhc3MgTWVtb3J5Q2FjaGU7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FDSEVEX1JFU09VUkNFKENh
Y2hlZEZvbnQsIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2UpCi0KLSNlbmRpZiAvLyBDYWNo
ZWRGb250X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRG
b250Q2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udENsaWVu
dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTMyNDFhNjBmNDAxZTNhYjU3MTE3
MmYxYzliOTFiZmJmMTFlYjU0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250Q2xpZW50LmgK
KysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDYWNo
ZWRGb250Q2xpZW50X2gKLSNkZWZpbmUgQ2FjaGVkRm9udENsaWVudF9oCi0KLSNpbmNsdWRlICJD
YWNoZWRSZXNvdXJjZUNsaWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENh
Y2hlZEZvbnQ7Ci0KLWNsYXNzIENhY2hlZEZvbnRDbGllbnQgOiBwdWJsaWMgQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgfkNhY2hlZEZvbnRDbGllbnQoKSB7IH0K
LSAgICBzdGF0aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnRUeXBlIGV4cGVjdGVkVHlwZSgpIHsgcmV0
dXJuIEZvbnRUeXBlOyB9Ci0gICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRUeXBlIHJlc291cmNlQ2xp
ZW50VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGV4cGVjdGVkVHlwZSgpOyB9Ci0gICAg
dmlydHVhbCB2b2lkIGZvbnRMb2FkZWQoQ2FjaGVkRm9udCYpIHsgfQotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQ2FjaGVkRm9udENsaWVudF9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYjVkMGVkN2JiMTFlYmIwYWIwNTlhOWI2NGI0YTdhNjlkZGRiMjIxNS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTQxICswLDAg
QEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5t
cGcuZGUpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUu
b3JnKQotICAgIENvcHlyaWdodCAoQykgMjAwMiBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5v
cmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21h
aWwuY29tKQotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkNhY2hlZEltYWdlLmgiCi0KLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUg
IkNhY2hlZEltYWdlQ2xpZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIK
LSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIgotI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiRnJhbWVM
b2FkZXJUeXBlcy5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIk1lbW9yeUNh
Y2hlLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKLSNp
bmNsdWRlICJTVkdJbWFnZS5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJTdWJy
ZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQot
I2lmIFBMQVRGT1JNKElPUykKLSNpbmNsdWRlICJTeXN0ZW1NZW1vcnkuaCIKLSNlbmRpZgotCi0j
aWYgVVNFKENHKQotI2luY2x1ZGUgIlBERkRvY3VtZW50SW1hZ2UuaCIKLSNlbmRpZgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLUNhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgU2Vzc2lvbklEIHNlc3Npb25JRCkKLSAgICA6IENh
Y2hlZFJlc291cmNlKHJlc291cmNlUmVxdWVzdCwgSW1hZ2VSZXNvdXJjZSwgc2Vzc2lvbklEKQot
ICAgICwgbV9pbWFnZShudWxscHRyKQotICAgICwgbV9pc01hbnVhbGx5Q2FjaGVkKGZhbHNlKQot
ICAgICwgbV9zaG91bGRQYWludEJyb2tlbkltYWdlKHRydWUpCi17Ci0gICAgc2V0U3RhdHVzKFVu
a25vd24pOwotfQotCi1DYWNoZWRJbWFnZTo6Q2FjaGVkSW1hZ2UoSW1hZ2UqIGltYWdlLCBTZXNz
aW9uSUQgc2Vzc2lvbklEKQotICAgIDogQ2FjaGVkUmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0KCks
IEltYWdlUmVzb3VyY2UsIHNlc3Npb25JRCkKLSAgICAsIG1faW1hZ2UoaW1hZ2UpCi0gICAgLCBt
X2lzTWFudWFsbHlDYWNoZWQoZmFsc2UpCi0gICAgLCBtX3Nob3VsZFBhaW50QnJva2VuSW1hZ2Uo
dHJ1ZSkKLXsKLSAgICBzZXRTdGF0dXMoQ2FjaGVkKTsKLSAgICBzZXRMb2FkaW5nKGZhbHNlKTsK
LX0KLQotQ2FjaGVkSW1hZ2U6OkNhY2hlZEltYWdlKGNvbnN0IFVSTCYgdXJsLCBJbWFnZSogaW1h
Z2UsIFNlc3Npb25JRCBzZXNzaW9uSUQpCi0gICAgOiBDYWNoZWRSZXNvdXJjZShSZXNvdXJjZVJl
cXVlc3QodXJsKSwgSW1hZ2VSZXNvdXJjZSwgc2Vzc2lvbklEKQotICAgICwgbV9pbWFnZShpbWFn
ZSkKLSAgICAsIG1faXNNYW51YWxseUNhY2hlZChmYWxzZSkKLSAgICAsIG1fc2hvdWxkUGFpbnRC
cm9rZW5JbWFnZSh0cnVlKQotewotICAgIHNldFN0YXR1cyhDYWNoZWQpOwotICAgIHNldExvYWRp
bmcoZmFsc2UpOwotfQotCi1DYWNoZWRJbWFnZTo6Q2FjaGVkSW1hZ2UoY29uc3QgVVJMJiB1cmws
IEltYWdlKiBpbWFnZSwgQ2FjaGVkSW1hZ2U6OkNhY2hlQmVoYXZpb3JUeXBlIHR5cGUsIFNlc3Np
b25JRCBzZXNzaW9uSUQpCi0gICAgOiBDYWNoZWRSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3QodXJs
KSwgSW1hZ2VSZXNvdXJjZSwgc2Vzc2lvbklEKQotICAgICwgbV9pbWFnZShpbWFnZSkKLSAgICAs
IG1faXNNYW51YWxseUNhY2hlZCh0eXBlID09IENhY2hlZEltYWdlOjpNYW51YWxseUNhY2hlZCkK
LSAgICAsIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSh0cnVlKQotewotICAgIHNldFN0YXR1cyhD
YWNoZWQpOwotICAgIHNldExvYWRpbmcoZmFsc2UpOwotICAgIGlmIChVTkxJS0VMWShpc01hbnVh
bGx5Q2FjaGVkKCkpKSB7Ci0gICAgICAgIC8vIFVzZSB0aGUgaW5jb21pbmcgVVJMIGluIHRoZSBy
ZXNwb25zZSBmaWVsZC4gVGhpcyBlbnN1cmVzIHRoYXQgY29kZQotICAgICAgICAvLyB1c2luZyB0
aGUgcmVzcG9uc2UgZGlyZWN0bHksIHN1Y2ggYXMgb3JpZ2luIGNoZWNrcyBmb3Igc2VjdXJpdHks
Ci0gICAgICAgIC8vIGFjdHVhbGx5IHNlZSBzb21ldGhpbmcuCi0gICAgICAgIG1fcmVzcG9uc2Uu
c2V0VVJMKHVybCk7Ci0gICAgfQotfQotCi1DYWNoZWRJbWFnZTo6fkNhY2hlZEltYWdlKCkKLXsK
LSAgICBjbGVhckltYWdlKCk7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6OmxvYWQoQ2FjaGVkUmVz
b3VyY2VMb2FkZXImIGNhY2hlZFJlc291cmNlTG9hZGVyLCBjb25zdCBSZXNvdXJjZUxvYWRlck9w
dGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKGNhY2hlZFJlc291cmNlTG9hZGVyLnNob3VsZFBl
cmZvcm1JbWFnZUxvYWQodXJsKCkpKQotICAgICAgICBDYWNoZWRSZXNvdXJjZTo6bG9hZChjYWNo
ZWRSZXNvdXJjZUxvYWRlciwgb3B0aW9ucyk7Ci0gICAgZWxzZQotICAgICAgICBzZXRMb2FkaW5n
KGZhbHNlKTsKLX0KLQotdm9pZCBDYWNoZWRJbWFnZTo6c2V0Qm9keURhdGFGcm9tKGNvbnN0IENh
Y2hlZFJlc291cmNlJiByZXNvdXJjZSkKLXsKLSAgICBBU1NFUlQocmVzb3VyY2UudHlwZSgpID09
IHR5cGUoKSk7Ci0gICAgY29uc3QgQ2FjaGVkSW1hZ2UmIGltYWdlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgQ2FjaGVkSW1hZ2UmPihyZXNvdXJjZSk7Ci0KLSAgICBzZXRMb2FkaW5nKGZhbHNlKTsKLSAg
ICBtX2ltYWdlID0gaW1hZ2UubV9pbWFnZTsKLQotICAgIGlmIChtX2ltYWdlICYmIGlzPFNWR0lt
YWdlPigqbV9pbWFnZSkpCi0gICAgICAgIG1fc3ZnSW1hZ2VDYWNoZSA9IHN0ZDo6bWFrZV91bmlx
dWU8U1ZHSW1hZ2VDYWNoZT4oJmRvd25jYXN0PFNWR0ltYWdlPigqbV9pbWFnZSkpOwotfQotCi12
b2lkIENhY2hlZEltYWdlOjpkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVu
dCkKLXsKLSAgICBpZiAobV9kYXRhICYmICFtX2ltYWdlICYmICFlcnJvck9jY3VycmVkKCkpIHsK
LSAgICAgICAgY3JlYXRlSW1hZ2UoKTsKLSAgICAgICAgbV9pbWFnZS0+c2V0RGF0YShtX2RhdGEu
Y29weVJlZigpLCB0cnVlKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoY2xpZW50LT5yZXNvdXJjZUNs
aWVudFR5cGUoKSA9PSBDYWNoZWRJbWFnZUNsaWVudDo6ZXhwZWN0ZWRUeXBlKCkpOwotICAgIGlm
IChtX2ltYWdlICYmICFtX2ltYWdlLT5pc051bGwoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8Q2Fj
aGVkSW1hZ2VDbGllbnQqPihjbGllbnQpLT5pbWFnZUNoYW5nZWQodGhpcyk7Ci0KLSAgICBDYWNo
ZWRSZXNvdXJjZTo6ZGlkQWRkQ2xpZW50KGNsaWVudCk7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6
OmRpZFJlbW92ZUNsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50KQotewotICAgIEFT
U0VSVChjbGllbnQpOwotICAgIEFTU0VSVChjbGllbnQtPnJlc291cmNlQ2xpZW50VHlwZSgpID09
IENhY2hlZEltYWdlQ2xpZW50OjpleHBlY3RlZFR5cGUoKSk7Ci0KLSAgICBtX3BlbmRpbmdDb250
YWluZXJTaXplUmVxdWVzdHMucmVtb3ZlKHN0YXRpY19jYXN0PENhY2hlZEltYWdlQ2xpZW50Kj4o
Y2xpZW50KSk7Ci0KLSAgICBpZiAobV9zdmdJbWFnZUNhY2hlKQotICAgICAgICBtX3N2Z0ltYWdl
Q2FjaGUtPnJlbW92ZUNsaWVudEZyb21DYWNoZShzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZUNsaWVu
dCo+KGNsaWVudCkpOwotCi0gICAgQ2FjaGVkUmVzb3VyY2U6OmRpZFJlbW92ZUNsaWVudChjbGll
bnQpOwotfQotCi12b2lkIENhY2hlZEltYWdlOjpzd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJl
c291cmNlKCkKLXsKLSAgICBBU1NFUlQoaXM8Q2FjaGVkSW1hZ2U+KHJlc291cmNlVG9SZXZhbGlk
YXRlKCkpKTsKLSAgICAvLyBQZW5kaW5nIGNvbnRhaW5lciBzaXplIHJlcXVlc3RzIG5lZWQgdG8g
YmUgdHJhbnNmZXJyZWQgdG8gdGhlIHJldmFsaWRhdGVkIHJlc291cmNlLgotICAgIGlmICghbV9w
ZW5kaW5nQ29udGFpbmVyU2l6ZVJlcXVlc3RzLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBBIGNv
cHkgb2YgcGVuZGluZyBzaXplIHJlcXVlc3RzIGlzIG5lZWRlZCBhcyB0aGV5IGFyZSBkZWxldGVk
IGR1cmluZyBDYWNoZWRSZXNvdXJjZTo6c3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZVJlc291Y2Uo
KS4KLSAgICAgICAgQ29udGFpbmVyU2l6ZVJlcXVlc3RzIHN3aXRjaENvbnRhaW5lclNpemVSZXF1
ZXN0czsKLSAgICAgICAgZm9yIChhdXRvJiByZXF1ZXN0IDogbV9wZW5kaW5nQ29udGFpbmVyU2l6
ZVJlcXVlc3RzKQotICAgICAgICAgICAgc3dpdGNoQ29udGFpbmVyU2l6ZVJlcXVlc3RzLnNldChy
ZXF1ZXN0LmtleSwgcmVxdWVzdC52YWx1ZSk7Ci0gICAgICAgIENhY2hlZFJlc291cmNlOjpzd2l0
Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNlKCk7Ci0gICAgICAgIENhY2hlZEltYWdlJiBy
ZXZhbGlkYXRlZENhY2hlZEltYWdlID0gZG93bmNhc3Q8Q2FjaGVkSW1hZ2U+KCpyZXNvdXJjZVRv
UmV2YWxpZGF0ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiByZXF1ZXN0IDogc3dpdGNoQ29udGFp
bmVyU2l6ZVJlcXVlc3RzKQotICAgICAgICAgICAgcmV2YWxpZGF0ZWRDYWNoZWRJbWFnZS5zZXRD
b250YWluZXJTaXplRm9yUmVuZGVyZXIocmVxdWVzdC5rZXksIHJlcXVlc3QudmFsdWUuZmlyc3Qs
IHJlcXVlc3QudmFsdWUuc2Vjb25kKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENh
Y2hlZFJlc291cmNlOjpzd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNlKCk7Ci19Ci0K
LXZvaWQgQ2FjaGVkSW1hZ2U6OmFsbENsaWVudHNSZW1vdmVkKCkKLXsKLSAgICBtX3BlbmRpbmdD
b250YWluZXJTaXplUmVxdWVzdHMuY2xlYXIoKTsKLSAgICBpZiAobV9pbWFnZSAmJiAhZXJyb3JP
Y2N1cnJlZCgpKQotICAgICAgICBtX2ltYWdlLT5yZXNldEFuaW1hdGlvbigpOwotfQotCi1zdGQ6
OnBhaXI8SW1hZ2UqLCBmbG9hdD4gQ2FjaGVkSW1hZ2U6OmJyb2tlbkltYWdlKGZsb2F0IGRldmlj
ZVNjYWxlRmFjdG9yKSBjb25zdAotewotICAgIGlmIChkZXZpY2VTY2FsZUZhY3RvciA+PSAzKSB7
Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IGJyb2tlbkltYWdlVmVyeUhp
UmVzKEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWlzc2luZ0ltYWdlQDN4IikubGVha1Jl
ZigpKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGJyb2tlbkltYWdlVmVyeUhpUmVz
LCAzKTsKLSAgICB9Ci0KLSAgICBpZiAoZGV2aWNlU2NhbGVGYWN0b3IgPj0gMikgewotICAgICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiBicm9rZW5JbWFnZUhpUmVzKEltYWdlOjps
b2FkUGxhdGZvcm1SZXNvdXJjZSgibWlzc2luZ0ltYWdlQDJ4IikubGVha1JlZigpKTsKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGJyb2tlbkltYWdlSGlSZXMsIDIpOwotICAgIH0KLQot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IGJyb2tlbkltYWdlTG9SZXMoSW1hZ2U6
OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtaXNzaW5nSW1hZ2UiKS5sZWFrUmVmKCkpOwotICAgIHJl
dHVybiBzdGQ6Om1ha2VfcGFpcihicm9rZW5JbWFnZUxvUmVzLCAxKTsKLX0KLQotYm9vbCBDYWNo
ZWRJbWFnZTo6d2lsbFBhaW50QnJva2VuSW1hZ2UoKSBjb25zdAotewotICAgIHJldHVybiBlcnJv
ck9jY3VycmVkKCkgJiYgbV9zaG91bGRQYWludEJyb2tlbkltYWdlOwotfQotCi1JbWFnZSogQ2Fj
aGVkSW1hZ2U6OmltYWdlKCkKLXsKLSAgICBpZiAoZXJyb3JPY2N1cnJlZCgpICYmIG1fc2hvdWxk
UGFpbnRCcm9rZW5JbWFnZSkgewotICAgICAgICAvLyBSZXR1cm5pbmcgdGhlIDF4IGJyb2tlbiBp
bWFnZSBpcyBub24taWRlYWwsIGJ1dCB3ZSBjYW5ub3QgcmVsaWFibHkgYWNjZXNzIHRoZSBhcHBy
b3ByaWF0ZQotICAgICAgICAvLyBkZXZpY2VTY2FsZUZhY3RvciBmcm9tIGhlcmUuIEl0IGlzIGNy
aXRpY2FsIHRoYXQgY2FsbGVycyB1c2UgQ2FjaGVkSW1hZ2U6OmJyb2tlbkltYWdlKCkgCi0gICAg
ICAgIC8vIHdoZW4gdGhleSBuZWVkIHRoZSByZWFsLCBkZXZpY2VTY2FsZUZhY3Rvci1hcHByb3By
aWF0ZSBicm9rZW4gaW1hZ2UgaWNvbi4gCi0gICAgICAgIHJldHVybiBicm9rZW5JbWFnZSgxKS5m
aXJzdDsKLSAgICB9Ci0KLSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgcmV0dXJuIG1faW1hZ2Uu
Z2V0KCk7Ci0KLSAgICByZXR1cm4gSW1hZ2U6Om51bGxJbWFnZSgpOwotfQotCi1JbWFnZSogQ2Fj
aGVkSW1hZ2U6OmltYWdlRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
LXsKLSAgICBpZiAoZXJyb3JPY2N1cnJlZCgpICYmIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSkg
ewotICAgICAgICAvLyBSZXR1cm5pbmcgdGhlIDF4IGJyb2tlbiBpbWFnZSBpcyBub24taWRlYWws
IGJ1dCB3ZSBjYW5ub3QgcmVsaWFibHkgYWNjZXNzIHRoZSBhcHByb3ByaWF0ZQotICAgICAgICAv
LyBkZXZpY2VTY2FsZUZhY3RvciBmcm9tIGhlcmUuIEl0IGlzIGNyaXRpY2FsIHRoYXQgY2FsbGVy
cyB1c2UgQ2FjaGVkSW1hZ2U6OmJyb2tlbkltYWdlKCkgCi0gICAgICAgIC8vIHdoZW4gdGhleSBu
ZWVkIHRoZSByZWFsLCBkZXZpY2VTY2FsZUZhY3Rvci1hcHByb3ByaWF0ZSBicm9rZW4gaW1hZ2Ug
aWNvbi4gCi0gICAgICAgIHJldHVybiBicm9rZW5JbWFnZSgxKS5maXJzdDsKLSAgICB9Ci0KLSAg
ICBpZiAoIW1faW1hZ2UpCi0gICAgICAgIHJldHVybiBJbWFnZTo6bnVsbEltYWdlKCk7Ci0KLSAg
ICBpZiAobV9pbWFnZS0+aXNTVkdJbWFnZSgpKSB7Ci0gICAgICAgIEltYWdlKiBpbWFnZSA9IG1f
c3ZnSW1hZ2VDYWNoZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlcik7Ci0gICAgICAgIGlmIChp
bWFnZSAhPSBJbWFnZTo6bnVsbEltYWdlKCkpCi0gICAgICAgICAgICByZXR1cm4gaW1hZ2U7Ci0g
ICAgfQotICAgIHJldHVybiBtX2ltYWdlLmdldCgpOwotfQotCi12b2lkIENhY2hlZEltYWdlOjpz
ZXRDb250YWluZXJTaXplRm9yUmVuZGVyZXIoY29uc3QgQ2FjaGVkSW1hZ2VDbGllbnQqIHJlbmRl
cmVyLCBjb25zdCBMYXlvdXRTaXplJiBjb250YWluZXJTaXplLCBmbG9hdCBjb250YWluZXJab29t
KQotewotICAgIGlmIChjb250YWluZXJTaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIEFTU0VSVChyZW5kZXJlcik7Ci0gICAgQVNTRVJUKGNvbnRhaW5lclpvb20pOwotICAgIGlm
ICghbV9pbWFnZSkgewotICAgICAgICBtX3BlbmRpbmdDb250YWluZXJTaXplUmVxdWVzdHMuc2V0
KHJlbmRlcmVyLCBTaXplQW5kWm9vbShjb250YWluZXJTaXplLCBjb250YWluZXJab29tKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1faW1hZ2UtPmlzU1ZHSW1hZ2UoKSkg
ewotICAgICAgICBtX2ltYWdlLT5zZXRDb250YWluZXJTaXplKGNvbnRhaW5lclNpemUpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9zdmdJbWFnZUNhY2hlLT5zZXRDb250YWluZXJT
aXplRm9yUmVuZGVyZXIocmVuZGVyZXIsIGNvbnRhaW5lclNpemUsIGNvbnRhaW5lclpvb20pOwot
fQotCi1ib29sIENhY2hlZEltYWdlOjp1c2VzSW1hZ2VDb250YWluZXJTaXplKCkgY29uc3QKLXsK
LSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgcmV0dXJuIG1faW1hZ2UtPnVzZXNDb250YWluZXJT
aXplKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQ2FjaGVkSW1hZ2U6OmltYWdl
SGFzUmVsYXRpdmVXaWR0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1faW1hZ2UpCi0gICAgICAgIHJl
dHVybiBtX2ltYWdlLT5oYXNSZWxhdGl2ZVdpZHRoKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgQ2FjaGVkSW1hZ2U6OmltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdAotewot
ICAgIGlmIChtX2ltYWdlKQotICAgICAgICByZXR1cm4gbV9pbWFnZS0+aGFzUmVsYXRpdmVIZWln
aHQoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotTGF5b3V0U2l6ZSBDYWNoZWRJbWFnZTo6
aW1hZ2VTaXplRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgZmxvYXQg
bXVsdGlwbGllciwgU2l6ZVR5cGUgc2l6ZVR5cGUpCi17Ci0gICAgaWYgKCFtX2ltYWdlKQotICAg
ICAgICByZXR1cm4gTGF5b3V0U2l6ZSgpOwotCi0gICAgTGF5b3V0U2l6ZSBpbWFnZVNpemU7Ci0K
LSAgICBpZiAoaXM8Qml0bWFwSW1hZ2U+KCptX2ltYWdlKSAmJiByZW5kZXJlciAmJiByZW5kZXJl
ci0+c2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRh
dGlvbikKLSAgICAgICAgaW1hZ2VTaXplID0gTGF5b3V0U2l6ZShkb3duY2FzdDxCaXRtYXBJbWFn
ZT4oKm1faW1hZ2UpLnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSk7Ci0gICAgZWxzZSBpZiAo
aXM8U1ZHSW1hZ2U+KCptX2ltYWdlKSAmJiBzaXplVHlwZSA9PSBVc2VkU2l6ZSkKLSAgICAgICAg
aW1hZ2VTaXplID0gTGF5b3V0U2l6ZShtX3N2Z0ltYWdlQ2FjaGUtPmltYWdlU2l6ZUZvclJlbmRl
cmVyKHJlbmRlcmVyKSk7Ci0gICAgZWxzZQotICAgICAgICBpbWFnZVNpemUgPSBMYXlvdXRTaXpl
KG1faW1hZ2UtPnNpemUoKSk7Ci0KLSAgICBpZiAobXVsdGlwbGllciA9PSAxLjBmKQotICAgICAg
ICByZXR1cm4gaW1hZ2VTaXplOwotICAgICAgICAKLSAgICAvLyBEb24ndCBsZXQgaW1hZ2VzIHRo
YXQgaGF2ZSBhIHdpZHRoL2hlaWdodCA+PSAxIHNocmluayBiZWxvdyAxIHdoZW4gem9vbWVkLgot
ICAgIGZsb2F0IHdpZHRoU2NhbGUgPSBtX2ltYWdlLT5oYXNSZWxhdGl2ZVdpZHRoKCkgPyAxLjBm
IDogbXVsdGlwbGllcjsKLSAgICBmbG9hdCBoZWlnaHRTY2FsZSA9IG1faW1hZ2UtPmhhc1JlbGF0
aXZlSGVpZ2h0KCkgPyAxLjBmIDogbXVsdGlwbGllcjsKLSAgICBMYXlvdXRTaXplIG1pbmltdW1T
aXplKGltYWdlU2l6ZS53aWR0aCgpID4gMCA/IDEgOiAwLCBpbWFnZVNpemUuaGVpZ2h0KCkgPiAw
ID8gMSA6IDApOwotICAgIGltYWdlU2l6ZS5zY2FsZSh3aWR0aFNjYWxlLCBoZWlnaHRTY2FsZSk7
Ci0gICAgaW1hZ2VTaXplLmNsYW1wVG9NaW5pbXVtU2l6ZShtaW5pbXVtU2l6ZSk7Ci0gICAgQVNT
RVJUKG11bHRpcGxpZXIgIT0gMS4wZiB8fCAoaW1hZ2VTaXplLndpZHRoKCkuZnJhY3Rpb24oKSA9
PSAwLjBmICYmIGltYWdlU2l6ZS5oZWlnaHQoKS5mcmFjdGlvbigpID09IDAuMGYpKTsKLSAgICBy
ZXR1cm4gaW1hZ2VTaXplOwotfQotCi12b2lkIENhY2hlZEltYWdlOjpjb21wdXRlSW50cmluc2lj
RGltZW5zaW9ucyhMZW5ndGgmIGludHJpbnNpY1dpZHRoLCBMZW5ndGgmIGludHJpbnNpY0hlaWdo
dCwgRmxvYXRTaXplJiBpbnRyaW5zaWNSYXRpbykKLXsKLSAgICBpZiAobV9pbWFnZSkKLSAgICAg
ICAgbV9pbWFnZS0+Y29tcHV0ZUludHJpbnNpY0RpbWVuc2lvbnMoaW50cmluc2ljV2lkdGgsIGlu
dHJpbnNpY0hlaWdodCwgaW50cmluc2ljUmF0aW8pOwotfQotCi12b2lkIENhY2hlZEltYWdlOjpu
b3RpZnlPYnNlcnZlcnMoY29uc3QgSW50UmVjdCogY2hhbmdlUmVjdCkKLXsKLSAgICBDYWNoZWRS
ZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRJbWFnZUNsaWVudD4gdyhtX2NsaWVudHMpOwotICAg
IHdoaWxlIChDYWNoZWRJbWFnZUNsaWVudCogYyA9IHcubmV4dCgpKQotICAgICAgICBjLT5pbWFn
ZUNoYW5nZWQodGhpcywgY2hhbmdlUmVjdCk7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6OmNoZWNr
U2hvdWxkUGFpbnRCcm9rZW5JbWFnZSgpCi17Ci0gICAgaWYgKCFtX2xvYWRlciB8fCBtX2xvYWRl
ci0+cmVhY2hlZFRlcm1pbmFsU3RhdGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaG91
bGRQYWludEJyb2tlbkltYWdlID0gbV9sb2FkZXItPmZyYW1lTG9hZGVyKCktPmNsaWVudCgpLnNo
b3VsZFBhaW50QnJva2VuSW1hZ2UodXJsKCkpOwotfQotCi12b2lkIENhY2hlZEltYWdlOjpjbGVh
cigpCi17Ci0gICAgZGVzdHJveURlY29kZWREYXRhKCk7Ci0gICAgY2xlYXJJbWFnZSgpOwotICAg
IG1fcGVuZGluZ0NvbnRhaW5lclNpemVSZXF1ZXN0cy5jbGVhcigpOwotICAgIHNldEVuY29kZWRT
aXplKDApOwotfQotCi1pbmxpbmUgdm9pZCBDYWNoZWRJbWFnZTo6Y3JlYXRlSW1hZ2UoKQotewot
ICAgIC8vIENyZWF0ZSB0aGUgaW1hZ2UgaWYgaXQgZG9lc24ndCB5ZXQgZXhpc3QuCi0gICAgaWYg
KG1faW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShDRykgJiYgIVVTRShXRUJLSVRf
SU1BR0VfREVDT0RFUlMpCi0gICAgZWxzZSBpZiAobV9yZXNwb25zZS5taW1lVHlwZSgpID09ICJh
cHBsaWNhdGlvbi9wZGYiKQotICAgICAgICBtX2ltYWdlID0gUERGRG9jdW1lbnRJbWFnZTo6Y3Jl
YXRlKHRoaXMpOwotI2VuZGlmCi0gICAgZWxzZSBpZiAobV9yZXNwb25zZS5taW1lVHlwZSgpID09
ICJpbWFnZS9zdmcreG1sIikgewotICAgICAgICBhdXRvIHN2Z0ltYWdlID0gU1ZHSW1hZ2U6OmNy
ZWF0ZSgqdGhpcywgdXJsKCkpOwotICAgICAgICBtX3N2Z0ltYWdlQ2FjaGUgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFNWR0ltYWdlQ2FjaGU+KHN2Z0ltYWdlLnB0cigpKTsKLSAgICAgICAgbV9pbWFnZSA9
IFdURk1vdmUoc3ZnSW1hZ2UpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1faW1hZ2UgPSBCaXRt
YXBJbWFnZTo6Y3JlYXRlKHRoaXMpOwotICAgICAgICBkb3duY2FzdDxCaXRtYXBJbWFnZT4oKm1f
aW1hZ2UpLnNldEFsbG93U3Vic2FtcGxpbmcobV9sb2FkZXIgJiYgbV9sb2FkZXItPmZyYW1lTG9h
ZGVyKCktPmZyYW1lKCkuc2V0dGluZ3MoKS5pbWFnZVN1YnNhbXBsaW5nRW5hYmxlZCgpKTsKLSAg
ICB9Ci0KLSAgICBpZiAobV9pbWFnZSkgewotICAgICAgICAvLyBTZW5kIHF1ZXVlZCBjb250YWlu
ZXIgc2l6ZSByZXF1ZXN0cy4KLSAgICAgICAgaWYgKG1faW1hZ2UtPnVzZXNDb250YWluZXJTaXpl
KCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcmVxdWVzdCA6IG1fcGVuZGluZ0NvbnRhaW5l
clNpemVSZXF1ZXN0cykKLSAgICAgICAgICAgICAgICBzZXRDb250YWluZXJTaXplRm9yUmVuZGVy
ZXIocmVxdWVzdC5rZXksIHJlcXVlc3QudmFsdWUuZmlyc3QsIHJlcXVlc3QudmFsdWUuc2Vjb25k
KTsKLSAgICAgICAgfQotICAgICAgICBtX3BlbmRpbmdDb250YWluZXJTaXplUmVxdWVzdHMuY2xl
YXIoKTsKLSAgICB9Ci19Ci0KLWlubGluZSB2b2lkIENhY2hlZEltYWdlOjpjbGVhckltYWdlKCkK
LXsKLSAgICAvLyBJZiBvdXIgSW1hZ2UgaGFzIGFuIG9ic2VydmVyLCBpdCdzIGFsd2F5cyB1cyBz
byB3ZSBuZWVkIHRvIGNsZWFyIHRoZSBiYWNrIHBvaW50ZXIKLSAgICAvLyBiZWZvcmUgZHJvcHBp
bmcgb3VyIHJlZmVyZW5jZS4KLSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgbV9pbWFnZS0+c2V0
SW1hZ2VPYnNlcnZlcihudWxscHRyKTsKLSAgICBtX2ltYWdlID0gbnVsbHB0cjsKLX0KLQotdm9p
ZCBDYWNoZWRJbWFnZTo6YWRkSW5jcmVtZW50YWxEYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYgZGF0
YSkKLXsKLSAgICBtX2RhdGEgPSAmZGF0YTsKLQotICAgIGNyZWF0ZUltYWdlKCk7Ci0KLSAgICAv
LyBIYXZlIHRoZSBpbWFnZSB1cGRhdGUgaXRzIGRhdGEgZnJvbSBpdHMgaW50ZXJuYWwgYnVmZmVy
LgotICAgIC8vIEl0IHdpbGwgbm90IGRvIGFueXRoaW5nIG5vdywgYnV0IHdpbGwgZGVsYXkgZGVj
b2RpbmcgdW50aWwKLSAgICAvLyBxdWVyaWVkIGZvciBpbmZvIChsaWtlIHNpemUgb3Igc3BlY2lm
aWMgaW1hZ2UgZnJhbWVzKS4KLSAgICBib29sIHNpemVBdmFpbGFibGUgPSBtX2ltYWdlLT5zZXRE
YXRhKCZkYXRhLCBmYWxzZSk7Ci0gICAgaWYgKCFzaXplQXZhaWxhYmxlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbWFnZS0+aXNOdWxsKCkpIHsKLSAgICAgICAgLy8gSW1hZ2UgZGVj
b2RpbmcgZmFpbGVkLiBFaXRoZXIgd2UgbmVlZCBtb3JlIGltYWdlIGRhdGEgb3IgdGhlIGltYWdl
IGRhdGEgaXMgbWFsZm9ybWVkLgotICAgICAgICBlcnJvcihlcnJvck9jY3VycmVkKCkgPyBzdGF0
dXMoKSA6IERlY29kZUVycm9yKTsKLSAgICAgICAgaWYgKGluQ2FjaGUoKSkKLSAgICAgICAgICAg
IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUoKnRoaXMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgLy8gVGVsbCBvdXIgb2JzZXJ2ZXJzIHRvIHRyeSB0byBkcmF3LgotICAg
IC8vIEVhY2ggY2h1bmsgZnJvbSB0aGUgbmV0d29yayBjYXVzZXMgb2JzZXJ2ZXJzIHRvIHJlcGFp
bnQsIHdoaWNoIHdpbGwgZm9yY2UgdGhhdCBjaHVuayB0byBkZWNvZGUuCi0gICAgLy8gSXQgd291
bGQgYmUgbmljZSB0byBvbmx5IHJlZHJhdyB0aGUgZGVjb2RlZCBiYW5kIG9mIHRoZSBpbWFnZSwg
YnV0IHdpdGggdGhlIGN1cnJlbnQgZGVzaWduCi0gICAgLy8gKGRlY29kaW5nIGRlbGF5ZWQgdW50
aWwgcGFpbnRpbmcpIHRoYXQgc2VlbXMgaGFyZC4KLSAgICBub3RpZnlPYnNlcnZlcnMoKTsKLQot
ICAgIHNldEVuY29kZWRTaXplKG1faW1hZ2UtPmRhdGEoKSA/IG1faW1hZ2UtPmRhdGEoKS0+c2l6
ZSgpIDogMCk7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6OmFkZERhdGFCdWZmZXIoU2hhcmVkQnVm
ZmVyJiBkYXRhKQotewotICAgIEFTU0VSVChkYXRhQnVmZmVyaW5nUG9saWN5KCkgPT0gQnVmZmVy
RGF0YSk7Ci0gICAgYWRkSW5jcmVtZW50YWxEYXRhQnVmZmVyKGRhdGEpOwotICAgIENhY2hlZFJl
c291cmNlOjphZGREYXRhQnVmZmVyKGRhdGEpOwotfQotCi12b2lkIENhY2hlZEltYWdlOjphZGRE
YXRhKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBBU1NFUlQoZGF0
YUJ1ZmZlcmluZ1BvbGljeSgpID09IERvTm90QnVmZmVyRGF0YSk7Ci0gICAgYWRkSW5jcmVtZW50
YWxEYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEsIGxlbmd0aCkpOwotICAgIENh
Y2hlZFJlc291cmNlOjphZGREYXRhKGRhdGEsIGxlbmd0aCk7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1h
Z2U6OmZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKiBkYXRhKQotewotICAgIG1fZGF0YSA9IGRh
dGE7Ci0gICAgaWYgKCFtX2ltYWdlICYmIGRhdGEpCi0gICAgICAgIGNyZWF0ZUltYWdlKCk7Ci0K
LSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgbV9pbWFnZS0+c2V0RGF0YShkYXRhLCB0cnVlKTsK
LQotICAgIGlmICghbV9pbWFnZSB8fCBtX2ltYWdlLT5pc051bGwoKSkgewotICAgICAgICAvLyBJ
bWFnZSBkZWNvZGluZyBmYWlsZWQ7IHRoZSBpbWFnZSBkYXRhIGlzIG1hbGZvcm1lZC4KLSAgICAg
ICAgZXJyb3IoZXJyb3JPY2N1cnJlZCgpID8gc3RhdHVzKCkgOiBEZWNvZGVFcnJvcik7Ci0gICAg
ICAgIGlmIChpbkNhY2hlKCkpCi0gICAgICAgICAgICBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCku
cmVtb3ZlKCp0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG5vdGlmeU9ic2Vy
dmVycygpOwotICAgIGlmIChtX2ltYWdlKQotICAgICAgICBzZXRFbmNvZGVkU2l6ZShtX2ltYWdl
LT5kYXRhKCkgPyBtX2ltYWdlLT5kYXRhKCktPnNpemUoKSA6IDApOwotICAgIENhY2hlZFJlc291
cmNlOjpmaW5pc2hMb2FkaW5nKGRhdGEpOwotfQotCi12b2lkIENhY2hlZEltYWdlOjpkaWRSZXBs
YWNlU2hhcmVkQnVmZmVyQ29udGVudHMoKQotewotICAgIGlmIChtX2ltYWdlKSB7Ci0gICAgICAg
IC8vIExldCB0aGUgSW1hZ2Uga25vdyB0aGF0IHRoZSBTaGFyZWRCdWZmZXIgaGFzIGJlZW4gcmVq
aWdnZWQsIHNvIGl0IGNhbiBsZXQgZ28gb2YgYW55IHJlZmVyZW5jZXMgdG8gdGhlIGhlYXAtYWxs
b2NhdGVkIHJlc291cmNlIGJ1ZmZlci4KLSAgICAgICAgLy8gRklYTUUocmRhcjovL3Byb2JsZW0v
MjQyNzU2MTcpOiBJdCB3b3VsZCBiZSBiZXR0ZXIgaWYgd2UgY291bGQgc29tZWhvdyB0ZWxsIHRo
ZSBJbWFnZSdzIGRlY29kZXIgdG8gc3dhcCBpbiB0aGUgbmV3IGNvbnRlbnRzIHdpdGhvdXQgZGVz
dHJveWluZyBhbnl0aGluZy4KLSAgICAgICAgbV9pbWFnZS0+ZGVzdHJveURlY29kZWREYXRhKHRy
dWUpOwotICAgIH0KLSAgICBDYWNoZWRSZXNvdXJjZTo6ZGlkUmVwbGFjZVNoYXJlZEJ1ZmZlckNv
bnRlbnRzKCk7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6OmVycm9yKENhY2hlZFJlc291cmNlOjpT
dGF0dXMgc3RhdHVzKQotewotICAgIGNoZWNrU2hvdWxkUGFpbnRCcm9rZW5JbWFnZSgpOwotICAg
IGNsZWFyKCk7Ci0gICAgQ2FjaGVkUmVzb3VyY2U6OmVycm9yKHN0YXR1cyk7Ci0gICAgbm90aWZ5
T2JzZXJ2ZXJzKCk7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6OnJlc3BvbnNlUmVjZWl2ZWQoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgaWYgKCFtX3Jlc3BvbnNlLmlz
TnVsbCgpKQotICAgICAgICBjbGVhcigpOwotICAgIENhY2hlZFJlc291cmNlOjpyZXNwb25zZVJl
Y2VpdmVkKHJlc3BvbnNlKTsKLX0KLQotdm9pZCBDYWNoZWRJbWFnZTo6ZGVzdHJveURlY29kZWRE
YXRhKCkKLXsKLSAgICBib29sIGNhbkRlbGV0ZUltYWdlID0gIW1faW1hZ2UgfHwgKG1faW1hZ2Ut
Pmhhc09uZVJlZigpICYmIG1faW1hZ2UtPmlzQml0bWFwSW1hZ2UoKSk7Ci0gICAgaWYgKGNhbkRl
bGV0ZUltYWdlICYmICFpc0xvYWRpbmcoKSAmJiAhaGFzQ2xpZW50cygpKSB7Ci0gICAgICAgIG1f
aW1hZ2UgPSBudWxscHRyOwotICAgICAgICBzZXREZWNvZGVkU2l6ZSgwKTsKLSAgICB9IGVsc2Ug
aWYgKG1faW1hZ2UgJiYgIWVycm9yT2NjdXJyZWQoKSkKLSAgICAgICAgbV9pbWFnZS0+ZGVzdHJv
eURlY29kZWREYXRhKCk7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6OmRlY29kZWRTaXplQ2hhbmdl
ZChjb25zdCBJbWFnZSogaW1hZ2UsIGludCBkZWx0YSkKLXsKLSAgICBpZiAoIWltYWdlIHx8IGlt
YWdlICE9IG1faW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBzZXREZWNvZGVkU2l6
ZShkZWNvZGVkU2l6ZSgpICsgZGVsdGEpOwotfQotCi12b2lkIENhY2hlZEltYWdlOjpkaWREcmF3
KGNvbnN0IEltYWdlKiBpbWFnZSkKLXsKLSAgICBpZiAoIWltYWdlIHx8IGltYWdlICE9IG1faW1h
Z2UpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBkb3VibGUgdGltZVN0YW1wID0gRnJhbWVW
aWV3OjpjdXJyZW50UGFpbnRUaW1lU3RhbXAoKTsKLSAgICBpZiAoIXRpbWVTdGFtcCkgLy8gSWYg
ZGlkRHJhdyBpcyBjYWxsZWQgb3V0c2lkZSBvZiBhIEZyYW1lIHBhaW50LgotICAgICAgICB0aW1l
U3RhbXAgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKLSAgICAKLSAgICBDYWNoZWRS
ZXNvdXJjZTo6ZGlkQWNjZXNzRGVjb2RlZERhdGEodGltZVN0YW1wKTsKLX0KLQotdm9pZCBDYWNo
ZWRJbWFnZTo6YW5pbWF0aW9uQWR2YW5jZWQoY29uc3QgSW1hZ2UqIGltYWdlKQotewotICAgIGlm
ICghaW1hZ2UgfHwgaW1hZ2UgIT0gbV9pbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIENhY2hl
ZFJlc291cmNlQ2xpZW50V2Fsa2VyPENhY2hlZEltYWdlQ2xpZW50PiBjbGllbnRXYWxrZXIobV9j
bGllbnRzKTsKLSAgICB3aGlsZSAoQ2FjaGVkSW1hZ2VDbGllbnQqIGNsaWVudCA9IGNsaWVudFdh
bGtlci5uZXh0KCkpCi0gICAgICAgIGNsaWVudC0+bmV3SW1hZ2VBbmltYXRpb25GcmFtZUF2YWls
YWJsZSgqdGhpcyk7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6OmNoYW5nZWRJblJlY3QoY29uc3Qg
SW1hZ2UqIGltYWdlLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICghaW1hZ2UgfHwg
aW1hZ2UgIT0gbV9pbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG5vdGlmeU9ic2VydmVycygm
cmVjdCk7Ci19Ci0KLWJvb2wgQ2FjaGVkSW1hZ2U6OmN1cnJlbnRGcmFtZUtub3duVG9CZU9wYXF1
ZShjb25zdCBSZW5kZXJFbGVtZW50KiByZW5kZXJlcikKLXsKLSAgICBJbWFnZSogaW1hZ2UgPSBp
bWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKTsKLSAgICByZXR1cm4gaW1hZ2UtPmN1cnJlbnRGcmFt
ZUtub3duVG9CZU9wYXF1ZSgpOwotfQotCi1ib29sIENhY2hlZEltYWdlOjppc09yaWdpbkNsZWFu
KFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKLXsKLSAgICBpZiAoIWltYWdlKCktPmhh
c1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
cGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKCpzZWN1cml0eU9yaWdpbikpCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIHJldHVybiAhc2VjdXJpdHlPcmlnaW4tPnRhaW50c0NhbnZhcyhyZXNwb25z
ZUZvclNhbWVPcmlnaW5Qb2xpY3lDaGVja3MoKS51cmwoKSk7Ci19Ci0KLUNhY2hlZFJlc291cmNl
OjpSZXZhbGlkYXRpb25EZWNpc2lvbiBDYWNoZWRJbWFnZTo6bWFrZVJldmFsaWRhdGlvbkRlY2lz
aW9uKENhY2hlUG9saWN5IGNhY2hlUG9saWN5KSBjb25zdAotewotICAgIGlmIChVTkxJS0VMWShp
c01hbnVhbGx5Q2FjaGVkKCkpKSB7Ci0gICAgICAgIC8vIERvIG5vdCByZXZhbGlkYXRlIG1hbnVh
bGx5IGNhY2hlZCBpbWFnZXMuIFRoaXMgbWVjaGFuaXNtIGlzIHVzZWQgYXMgYQotICAgICAgICAv
LyB3YXkgdG8gZWZmaWNpZW50bHkgc2hhcmUgYW4gaW1hZ2UgZnJvbSB0aGUgY2xpZW50IHRvIGNv
bnRlbnQgYW5kCi0gICAgICAgIC8vIHRoZSBVUkwgZm9yIHRoYXQgaW1hZ2UgbWF5IG5vdCByZXBy
ZXNlbnQgYSByZXNvdXJjZSB0aGF0IGNhbiBiZQotICAgICAgICAvLyByZXRyaWV2ZWQgYnkgc3Rh
bmRhcmQgbWVhbnMuIElmIHRoZSBtYW51YWwgY2FjaGluZyBTUEkgaXMgdXNlZCwgaXQgaXMKLSAg
ICAgICAgLy8gaW5jdW1iZW50IG9uIHRoZSBjbGllbnQgdG8gb25seSB1c2UgdmFsaWQgcmVzb3Vy
Y2VzLgotICAgICAgICByZXR1cm4gUmV2YWxpZGF0aW9uRGVjaXNpb246Ok5vOwotICAgIH0KLSAg
ICByZXR1cm4gQ2FjaGVkUmVzb3VyY2U6Om1ha2VSZXZhbGlkYXRpb25EZWNpc2lvbihjYWNoZVBv
bGljeSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZEltYWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwZGI5
NGRjOTY5MDllOGE2NjEwM2IxMGU1MDlkMDkzNzY4MTc5MDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZEltYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotLyoKLSAgICBDb3B5
cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5
cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gICAgQ29weXJp
Z2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQotICAgIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotKi8KLQotI2lmbmRlZiBDYWNoZWRJbWFnZV9oCi0jZGVmaW5lIENhY2hlZEltYWdl
X2gKLQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNp
bmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUg
IkludFNpemVIYXNoLmgiCi0jaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgotI2luY2x1ZGUgIlNWR0lt
YWdlQ2FjaGUuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIENhY2hlZEltYWdlQ2xpZW50OwotY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXI7Ci1jbGFzcyBGbG9hdFNpemU7Ci1jbGFzcyBNZW1vcnlDYWNoZTsKLWNsYXNzIFJlbmRlckVs
ZW1lbnQ7Ci1jbGFzcyBSZW5kZXJPYmplY3Q7Ci1jbGFzcyBTZWN1cml0eU9yaWdpbjsKLQotc3Ry
dWN0IExlbmd0aDsKLQotY2xhc3MgQ2FjaGVkSW1hZ2UgZmluYWwgOiBwdWJsaWMgQ2FjaGVkUmVz
b3VyY2UsIHB1YmxpYyBJbWFnZU9ic2VydmVyIHsKLSAgICBmcmllbmQgY2xhc3MgTWVtb3J5Q2Fj
aGU7Ci0KLXB1YmxpYzoKLSAgICBlbnVtIENhY2hlQmVoYXZpb3JUeXBlIHsgQXV0b21hdGljYWxs
eUNhY2hlZCwgTWFudWFsbHlDYWNoZWQgfTsKLQotICAgIENhY2hlZEltYWdlKGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIFNlc3Npb25JRCk7Ci0gICAgQ2FjaGVkSW1hZ2UoSW1hZ2UqLCBTZXNzaW9u
SUQpOwotICAgIENhY2hlZEltYWdlKGNvbnN0IFVSTCYsIEltYWdlKiwgU2Vzc2lvbklEKTsKLSAg
ICBDYWNoZWRJbWFnZShjb25zdCBVUkwmLCBJbWFnZSosIENhY2hlQmVoYXZpb3JUeXBlLCBTZXNz
aW9uSUQpOwotICAgIHZpcnR1YWwgfkNhY2hlZEltYWdlKCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9S
VCBJbWFnZSogaW1hZ2UoKTsgLy8gUmV0dXJucyB0aGUgbnVsbEltYWdlKCkgaWYgdGhlIGltYWdl
IGlzIG5vdCBhdmFpbGFibGUgeWV0LgotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlKiBpbWFnZUZv
clJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCopOyAvLyBSZXR1cm5zIHRoZSBudWxsSW1hZ2Uo
KSBpZiB0aGUgaW1hZ2UgaXMgbm90IGF2YWlsYWJsZSB5ZXQuCi0gICAgYm9vbCBoYXNJbWFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KLSAgICBib29sIGN1cnJlbnRGcmFtZUtu
b3duVG9CZU9wYXF1ZShjb25zdCBSZW5kZXJFbGVtZW50Kik7Ci0KLSAgICBzdGQ6OnBhaXI8SW1h
Z2UqLCBmbG9hdD4gYnJva2VuSW1hZ2UoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpIGNvbnN0OyAv
LyBSZXR1cm5zIGFuIGltYWdlIGFuZCB0aGUgaW1hZ2UncyByZXNvbHV0aW9uIHNjYWxlIGZhY3Rv
ci4KLSAgICBib29sIHdpbGxQYWludEJyb2tlbkltYWdlKCkgY29uc3Q7IAotCi0gICAgYm9vbCBj
YW5SZW5kZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgZmxvYXQgbXVsdGlwbGllcikg
eyByZXR1cm4gIWVycm9yT2NjdXJyZWQoKSAmJiAhaW1hZ2VTaXplRm9yUmVuZGVyZXIocmVuZGVy
ZXIsIG11bHRpcGxpZXIpLmlzRW1wdHkoKTsgfQotCi0gICAgdm9pZCBzZXRDb250YWluZXJTaXpl
Rm9yUmVuZGVyZXIoY29uc3QgQ2FjaGVkSW1hZ2VDbGllbnQqLCBjb25zdCBMYXlvdXRTaXplJiwg
ZmxvYXQpOwotICAgIGJvb2wgdXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0OwotICAgIGJv
b2wgaW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3Q7Ci0gICAgYm9vbCBpbWFnZUhhc1JlbGF0
aXZlSGVpZ2h0KCkgY29uc3Q7Ci0KLSAgICB2b2lkIGFkZERhdGFCdWZmZXIoU2hhcmVkQnVmZmVy
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1ZmZlciopIG92ZXJy
aWRlOwotCi0gICAgZW51bSBTaXplVHlwZSB7Ci0gICAgICAgIFVzZWRTaXplLAotICAgICAgICBJ
bnRyaW5zaWNTaXplCi0gICAgfTsKLSAgICAvLyBUaGlzIG1ldGhvZCB0YWtlcyBhIHpvb20gbXVs
dGlwbGllciB0aGF0IGNhbiBiZSB1c2VkIHRvIGluY3JlYXNlIHRoZSBuYXR1cmFsIHNpemUgb2Yg
dGhlIGltYWdlIGJ5IHRoZSB6b29tLgotICAgIExheW91dFNpemUgaW1hZ2VTaXplRm9yUmVuZGVy
ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiwgZmxvYXQgbXVsdGlwbGllciwgU2l6ZVR5cGUgPSBVc2Vk
U2l6ZSk7IC8vIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIGNvbXBsZXRlIGltYWdlLgotICAgIHZv
aWQgY29tcHV0ZUludHJpbnNpY0RpbWVuc2lvbnMoTGVuZ3RoJiBpbnRyaW5zaWNXaWR0aCwgTGVu
Z3RoJiBpbnRyaW5zaWNIZWlnaHQsIEZsb2F0U2l6ZSYgaW50cmluc2ljUmF0aW8pOwotCi0gICAg
Ym9vbCBpc01hbnVhbGx5Q2FjaGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc01hbnVhbGx5Q2FjaGVk
OyB9Ci0gICAgUmV2YWxpZGF0aW9uRGVjaXNpb24gbWFrZVJldmFsaWRhdGlvbkRlY2lzaW9uKENh
Y2hlUG9saWN5KSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIGxvYWQoQ2FjaGVkUmVzb3VyY2VM
b2FkZXImLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKSBvdmVycmlkZTsKLQotICAgIGJv
b2wgaXNPcmlnaW5DbGVhbihTZWN1cml0eU9yaWdpbiopOwotCi1wcml2YXRlOgotICAgIHZvaWQg
Y2xlYXIoKTsKLQotICAgIENhY2hlZEltYWdlKENhY2hlZEltYWdlJiwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgU2Vzc2lvbklEKTsKLQotICAgIHZvaWQgc2V0Qm9keURhdGFGcm9tKGNvbnN0IENh
Y2hlZFJlc291cmNlJikgZmluYWw7Ci0KLSAgICB2b2lkIGNyZWF0ZUltYWdlKCk7Ci0gICAgdm9p
ZCBjbGVhckltYWdlKCk7Ci0gICAgLy8gSWYgbm90IG51bGwsIGNoYW5nZVJlY3QgaXMgdGhlIGNo
YW5nZWQgcGFydCBvZiB0aGUgaW1hZ2UuCi0gICAgdm9pZCBub3RpZnlPYnNlcnZlcnMoY29uc3Qg
SW50UmVjdCogY2hhbmdlUmVjdCA9IG51bGxwdHIpOwotICAgIHZvaWQgY2hlY2tTaG91bGRQYWlu
dEJyb2tlbkltYWdlKCk7Ci0KLSAgICB2b2lkIHN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVz
b3VyY2UoKSBvdmVycmlkZTsKLSAgICBib29sIG1heVRyeVJlcGxhY2VFbmNvZGVkRGF0YSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZvaWQgZGlkQWRkQ2xpZW50KENh
Y2hlZFJlc291cmNlQ2xpZW50Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRSZW1vdmVDbGllbnQo
Q2FjaGVkUmVzb3VyY2VDbGllbnQqKSBvdmVycmlkZTsKLQotICAgIHZvaWQgYWxsQ2xpZW50c1Jl
bW92ZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YSgpIG92ZXJyaWRl
OwotCi0gICAgdm9pZCBhZGREYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBlcnJvcihDYWNoZWRSZXNvdXJjZTo6U3RhdHVzKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIG92
ZXJyaWRlOwotCi0gICAgLy8gRm9yIGNvbXBhdGliaWxpdHksIGltYWdlcyBrZWVwIGxvYWRpbmcg
ZXZlbiBpZiB0aGVyZSBhcmUgSFRUUCBlcnJvcnMuCi0gICAgYm9vbCBzaG91bGRJZ25vcmVIVFRQ
U3RhdHVzQ29kZUVycm9ycygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotICAg
IGJvb2wgc3RpbGxOZWVkc0xvYWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAhZXJyb3JPY2N1
cnJlZCgpICYmIHN0YXR1cygpID09IFVua25vd24gJiYgIWlzTG9hZGluZygpOyB9Ci0KLSAgICAv
LyBJbWFnZU9ic2VydmVyCi0gICAgdm9pZCBkZWNvZGVkU2l6ZUNoYW5nZWQoY29uc3QgSW1hZ2Uq
LCBpbnQgZGVsdGEpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkRHJhdyhjb25zdCBJbWFnZSopIG92
ZXJyaWRlOwotCi0gICAgdm9pZCBhbmltYXRpb25BZHZhbmNlZChjb25zdCBJbWFnZSopIG92ZXJy
aWRlOwotICAgIHZvaWQgY2hhbmdlZEluUmVjdChjb25zdCBJbWFnZSosIGNvbnN0IEludFJlY3Qm
KSBvdmVycmlkZTsKLQotICAgIHZvaWQgYWRkSW5jcmVtZW50YWxEYXRhQnVmZmVyKFNoYXJlZEJ1
ZmZlciYpOwotCi0gICAgdm9pZCBkaWRSZXBsYWNlU2hhcmVkQnVmZmVyQ29udGVudHMoKSBvdmVy
cmlkZTsKLQotICAgIHR5cGVkZWYgc3RkOjpwYWlyPExheW91dFNpemUsIGZsb2F0PiBTaXplQW5k
Wm9vbTsKLSAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgQ2FjaGVkSW1hZ2VDbGllbnQqLCBTaXpl
QW5kWm9vbT4gQ29udGFpbmVyU2l6ZVJlcXVlc3RzOwotICAgIENvbnRhaW5lclNpemVSZXF1ZXN0
cyBtX3BlbmRpbmdDb250YWluZXJTaXplUmVxdWVzdHM7Ci0KLSAgICBSZWZQdHI8SW1hZ2U+IG1f
aW1hZ2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNWR0ltYWdlQ2FjaGU+IG1fc3ZnSW1hZ2VDYWNo
ZTsKLSAgICB1bnNpZ25lZCBtX2lzTWFudWFsbHlDYWNoZWQgOiAxOwotICAgIHVuc2lnbmVkIG1f
c2hvdWxkUGFpbnRCcm9rZW5JbWFnZSA6IDE7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FDSEVEX1JFU09VUkNFKENhY2hlZEltYWdlLCBD
YWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZSkKLQotI2VuZGlmIC8vIENhY2hlZEltYWdlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZUNsaWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlQ2xpZW50LmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMjM1YWNiZjlhZmE0Y2U4YzlhNmFhMzYxOWYz
NDk1ZDk0MTlhOWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlQ2xpZW50LmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJz
IEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJr
IE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVs
IFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZu
ZGVmIENhY2hlZEltYWdlQ2xpZW50X2gKLSNkZWZpbmUgQ2FjaGVkSW1hZ2VDbGllbnRfaAotCi0j
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBDYWNoZWRJbWFnZTsKLWNsYXNzIEludFJlY3Q7Ci0KLWNsYXNzIENhY2hlZEltYWdl
Q2xpZW50IDogcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0
dWFsIH5DYWNoZWRJbWFnZUNsaWVudCgpIHsgfQotICAgIHN0YXRpYyBDYWNoZWRSZXNvdXJjZUNs
aWVudFR5cGUgZXhwZWN0ZWRUeXBlKCkgeyByZXR1cm4gSW1hZ2VUeXBlOyB9Ci0gICAgQ2FjaGVk
UmVzb3VyY2VDbGllbnRUeXBlIHJlc291cmNlQ2xpZW50VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGV4cGVjdGVkVHlwZSgpOyB9Ci0KLSAgICAvLyBDYWxsZWQgd2hlbmV2ZXIgYSBmcmFt
ZSBvZiBhbiBpbWFnZSBjaGFuZ2VzIGJlY2F1c2Ugd2UgZ290IG1vcmUgZGF0YSBmcm9tIHRoZSBu
ZXR3b3JrLgotICAgIC8vIElmIG5vdCBudWxsLCB0aGUgSW50UmVjdCBpcyB0aGUgY2hhbmdlZCBy
ZWN0IG9mIHRoZSBpbWFnZS4KLSAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKENhY2hlZElt
YWdlKiwgY29uc3QgSW50UmVjdCogPSBudWxscHRyKSB7IH0KLQotICAgIC8vIENhbGxlZCB3aGVu
IEdJRiBhbmltYXRpb24gcHJvZ3Jlc3Nlcy4KLSAgICB2aXJ0dWFsIHZvaWQgbmV3SW1hZ2VBbmlt
YXRpb25GcmFtZUF2YWlsYWJsZShDYWNoZWRJbWFnZSYgaW1hZ2UpIHsgaW1hZ2VDaGFuZ2VkKCZp
bWFnZSk7IH0KLX07Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZmEwZGY4YjA0ZWNlNTRkYjEwNjYyNDYyOGY1OGZiYmM3ODFmZGM0Mi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjk3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmF3UmVzb3Vy
Y2UuaCIKLQotI2luY2x1ZGUgIkNhY2hlZFJhd1Jlc291cmNlQ2xpZW50LmgiCi0jaW5jbHVkZSAi
Q2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxv
YWRlci5oIgotI2luY2x1ZGUgIkhUVFBIZWFkZXJOYW1lcy5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1
ZmZlci5oIgotI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nVmlldy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNhY2hlZFJhd1Jlc291
cmNlOjpDYWNoZWRSYXdSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwg
VHlwZSB0eXBlLCBTZXNzaW9uSUQgc2Vzc2lvbklEKQotICAgIDogQ2FjaGVkUmVzb3VyY2UocmVz
b3VyY2VSZXF1ZXN0LCB0eXBlLCBzZXNzaW9uSUQpCi0gICAgLCBtX2lkZW50aWZpZXIoMCkKLSAg
ICAsIG1fYWxsb3dFbmNvZGVkRGF0YVJlcGxhY2VtZW50KHRydWUpCi17Ci0gICAgQVNTRVJUKGlz
TWFpbk9yTWVkaWFPclJhd1Jlc291cmNlKCkpOwotfQotCi1jb25zdCBjaGFyKiBDYWNoZWRSYXdS
ZXNvdXJjZTo6Y2FsY3VsYXRlSW5jcmVtZW50YWxEYXRhQ2h1bmsoU2hhcmVkQnVmZmVyKiBkYXRh
LCB1bnNpZ25lZCYgaW5jcmVtZW50YWxEYXRhTGVuZ3RoKQotewotICAgIGluY3JlbWVudGFsRGF0
YUxlbmd0aCA9IDA7Ci0gICAgaWYgKCFkYXRhKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIHVuc2lnbmVkIHByZXZpb3VzRGF0YUxlbmd0aCA9IGVuY29kZWRTaXplKCk7Ci0gICAgQVNT
RVJUKGRhdGEtPnNpemUoKSA+PSBwcmV2aW91c0RhdGFMZW5ndGgpOwotICAgIGluY3JlbWVudGFs
RGF0YUxlbmd0aCA9IGRhdGEtPnNpemUoKSAtIHByZXZpb3VzRGF0YUxlbmd0aDsKLSAgICByZXR1
cm4gZGF0YS0+ZGF0YSgpICsgcHJldmlvdXNEYXRhTGVuZ3RoOwotfQotCi12b2lkIENhY2hlZFJh
d1Jlc291cmNlOjphZGREYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYgZGF0YSkKLXsKLSAgICBDYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
LSAgICBBU1NFUlQoZGF0YUJ1ZmZlcmluZ1BvbGljeSgpID09IEJ1ZmZlckRhdGEpOwotICAgIG1f
ZGF0YSA9ICZkYXRhOwotCi0gICAgdW5zaWduZWQgaW5jcmVtZW50YWxEYXRhTGVuZ3RoOwotICAg
IGNvbnN0IGNoYXIqIGluY3JlbWVudGFsRGF0YSA9IGNhbGN1bGF0ZUluY3JlbWVudGFsRGF0YUNo
dW5rKCZkYXRhLCBpbmNyZW1lbnRhbERhdGFMZW5ndGgpOwotICAgIHNldEVuY29kZWRTaXplKGRh
dGEuc2l6ZSgpKTsKLSAgICBub3RpZnlDbGllbnRzRGF0YVdhc1JlY2VpdmVkKGluY3JlbWVudGFs
RGF0YSwgaW5jcmVtZW50YWxEYXRhTGVuZ3RoKTsKLSAgICBpZiAoZGF0YUJ1ZmZlcmluZ1BvbGlj
eSgpID09IERvTm90QnVmZmVyRGF0YSkgewotICAgICAgICBpZiAobV9sb2FkZXIpCi0gICAgICAg
ICAgICBtX2xvYWRlci0+c2V0RGF0YUJ1ZmZlcmluZ1BvbGljeShEb05vdEJ1ZmZlckRhdGEpOwot
ICAgICAgICBjbGVhcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ2FjaGVkUmVz
b3VyY2U6OmFkZERhdGFCdWZmZXIoZGF0YSk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6
OmFkZERhdGEoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIEFTU0VS
VChkYXRhQnVmZmVyaW5nUG9saWN5KCkgPT0gRG9Ob3RCdWZmZXJEYXRhKTsKLSAgICBub3RpZnlD
bGllbnRzRGF0YVdhc1JlY2VpdmVkKGRhdGEsIGxlbmd0aCk7Ci0gICAgQ2FjaGVkUmVzb3VyY2U6
OmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKLX0KLQotdm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6Zmlu
aXNoTG9hZGluZyhTaGFyZWRCdWZmZXIqIGRhdGEpCi17Ci0gICAgQ2FjaGVkUmVzb3VyY2VIYW5k
bGU8Q2FjaGVkUmF3UmVzb3VyY2U+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgRGF0YUJ1ZmZl
cmluZ1BvbGljeSBkYXRhQnVmZmVyaW5nUG9saWN5ID0gdGhpcy0+ZGF0YUJ1ZmZlcmluZ1BvbGlj
eSgpOwotICAgIGlmIChkYXRhQnVmZmVyaW5nUG9saWN5ID09IEJ1ZmZlckRhdGEpIHsKLSAgICAg
ICAgbV9kYXRhID0gZGF0YTsKLQotICAgICAgICB1bnNpZ25lZCBpbmNyZW1lbnRhbERhdGFMZW5n
dGg7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGluY3JlbWVudGFsRGF0YSA9IGNhbGN1bGF0ZUluY3Jl
bWVudGFsRGF0YUNodW5rKGRhdGEsIGluY3JlbWVudGFsRGF0YUxlbmd0aCk7Ci0gICAgICAgIGlm
IChkYXRhKQotICAgICAgICAgICAgc2V0RW5jb2RlZFNpemUoZGF0YS0+c2l6ZSgpKTsKLSAgICAg
ICAgbm90aWZ5Q2xpZW50c0RhdGFXYXNSZWNlaXZlZChpbmNyZW1lbnRhbERhdGEsIGluY3JlbWVu
dGFsRGF0YUxlbmd0aCk7Ci0gICAgfQotCi0gICAgbV9hbGxvd0VuY29kZWREYXRhUmVwbGFjZW1l
bnQgPSAhbV9sb2FkZXItPmlzUXVpY2tMb29rUmVzb3VyY2UoKTsKLQotICAgIENhY2hlZFJlc291
cmNlOjpmaW5pc2hMb2FkaW5nKGRhdGEpOwotICAgIGlmIChkYXRhQnVmZmVyaW5nUG9saWN5ID09
IEJ1ZmZlckRhdGEgJiYgdGhpcy0+ZGF0YUJ1ZmZlcmluZ1BvbGljeSgpID09IERvTm90QnVmZmVy
RGF0YSkgewotICAgICAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgICAgICBtX2xvYWRlci0+c2V0
RGF0YUJ1ZmZlcmluZ1BvbGljeShEb05vdEJ1ZmZlckRhdGEpOwotICAgICAgICBjbGVhcigpOwot
ICAgIH0KLX0KLQotdm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6bm90aWZ5Q2xpZW50c0RhdGFXYXNS
ZWNlaXZlZChjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgaWYgKCFs
ZW5ndGgpCi0gICAgICAgIHJldHVybjsKLQotICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hl
ZFJhd1Jlc291cmNlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIENhY2hlZFJlc291cmNlQ2xp
ZW50V2Fsa2VyPENhY2hlZFJhd1Jlc291cmNlQ2xpZW50PiB3KG1fY2xpZW50cyk7Ci0gICAgd2hp
bGUgKENhY2hlZFJhd1Jlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkpCi0gICAgICAgIGMtPmRh
dGFSZWNlaXZlZCh0aGlzLCBkYXRhLCBsZW5ndGgpOwotfQotCi12b2lkIENhY2hlZFJhd1Jlc291
cmNlOjpkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGMpCi17Ci0gICAgaWYgKCFo
YXNDbGllbnQoYykpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBUaGUgY2FsbHMgdG8gdGhlIGNs
aWVudCBjYW4gcmVzdWx0IGluIGV2ZW50cyBydW5uaW5nLCBwb3RlbnRpYWxseSBjYXVzaW5nCi0g
ICAgLy8gdGhpcyByZXNvdXJjZSB0byBiZSBldmljdGVkIGZyb20gdGhlIGNhY2hlIGFuZCBhbGwg
Y2xpZW50cyB0byBiZSByZW1vdmVkLAotICAgIC8vIHNvIGEgcHJvdGVjdG9yIGlzIG5lY2Vzc2Fy
eS4KLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKLSAgICBDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCogY2xpZW50ID0gc3RhdGlj
X2Nhc3Q8Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQqPihjKTsKLSAgICBzaXplX3QgcmVkaXJlY3RD
b3VudCA9IG1fcmVkaXJlY3RDaGFpbi5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCByZWRpcmVjdENvdW50OyBpKyspIHsKLSAgICAgICAgUmVkaXJlY3RQYWlyIHJlZGlyZWN0ID0g
bV9yZWRpcmVjdENoYWluW2ldOwotICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChyZWRp
cmVjdC5tX3JlcXVlc3QpOwotICAgICAgICBjbGllbnQtPnJlZGlyZWN0UmVjZWl2ZWQodGhpcywg
cmVxdWVzdCwgcmVkaXJlY3QubV9yZWRpcmVjdFJlc3BvbnNlKTsKLSAgICAgICAgaWYgKCFoYXND
bGllbnQoYykpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEFTU0VSVChyZWRpcmVj
dENvdW50ID09IG1fcmVkaXJlY3RDaGFpbi5zaXplKCkpOwotCi0gICAgaWYgKCFtX3Jlc3BvbnNl
LmlzTnVsbCgpKSB7Ci0gICAgICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UobV9yZXNwb25z
ZSk7Ci0gICAgICAgIGlmICh2YWxpZGF0aW9uQ29tcGxldGluZygpKQotICAgICAgICAgICAgcmVz
cG9uc2Uuc2V0U291cmNlKFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6TWVtb3J5Q2FjaGVBZnRl
clZhbGlkYXRpb24pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCghdmFsaWRh
dGlvbkluUHJvZ3Jlc3MoKSk7Ci0gICAgICAgICAgICByZXNwb25zZS5zZXRTb3VyY2UoUmVzb3Vy
Y2VSZXNwb25zZTo6U291cmNlOjpNZW1vcnlDYWNoZSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2xp
ZW50LT5yZXNwb25zZVJlY2VpdmVkKHRoaXMsIHJlc3BvbnNlKTsKLSAgICB9Ci0gICAgaWYgKCFo
YXNDbGllbnQoYykpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAobV9kYXRhKQotICAgICAgICBj
bGllbnQtPmRhdGFSZWNlaXZlZCh0aGlzLCBtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkp
OwotICAgIGlmICghaGFzQ2xpZW50KGMpKQotICAgICAgIHJldHVybjsKLSAgICBDYWNoZWRSZXNv
dXJjZTo6ZGlkQWRkQ2xpZW50KGNsaWVudCk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6
OmFsbENsaWVudHNSZW1vdmVkKCkKLXsKLSAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgIG1fbG9h
ZGVyLT5jYW5jZWxJZk5vdEZpbmlzaGluZygpOwotfQotCi12b2lkIENhY2hlZFJhd1Jlc291cmNl
OjpyZWRpcmVjdFJlY2VpdmVkKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
UmF3UmVzb3VyY2U+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgaWYgKCFyZXNwb25zZS5pc051
bGwoKSkgewotICAgICAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRSYXdSZXNv
dXJjZUNsaWVudD4gdyhtX2NsaWVudHMpOwotICAgICAgICB3aGlsZSAoQ2FjaGVkUmF3UmVzb3Vy
Y2VDbGllbnQqIGMgPSB3Lm5leHQoKSkKLSAgICAgICAgICAgIGMtPnJlZGlyZWN0UmVjZWl2ZWQo
dGhpcywgcmVxdWVzdCwgcmVzcG9uc2UpOwotICAgICAgICBtX3JlZGlyZWN0Q2hhaW4uYXBwZW5k
KFJlZGlyZWN0UGFpcihyZXF1ZXN0LCByZXNwb25zZSkpOwotICAgIH0KLSAgICBDYWNoZWRSZXNv
dXJjZTo6cmVkaXJlY3RSZWNlaXZlZChyZXF1ZXN0LCByZXNwb25zZSk7Ci19Ci0KLXZvaWQgQ2Fj
aGVkUmF3UmVzb3VyY2U6OnJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UpCi17Ci0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+
IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgaWYgKCFtX2lkZW50aWZpZXIpCi0gICAgICAgIG1f
aWRlbnRpZmllciA9IG1fbG9hZGVyLT5pZGVudGlmaWVyKCk7Ci0gICAgQ2FjaGVkUmVzb3VyY2U6
OnJlc3BvbnNlUmVjZWl2ZWQocmVzcG9uc2UpOwotICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fs
a2VyPENhY2hlZFJhd1Jlc291cmNlQ2xpZW50PiB3KG1fY2xpZW50cyk7Ci0gICAgd2hpbGUgKENh
Y2hlZFJhd1Jlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkpCi0gICAgICAgIGMtPnJlc3BvbnNl
UmVjZWl2ZWQodGhpcywgbV9yZXNwb25zZSk7Ci19Ci0KLWJvb2wgQ2FjaGVkUmF3UmVzb3VyY2U6
OnNob3VsZENhY2hlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17
Ci0gICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI8Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQ+
IHcobV9jbGllbnRzKTsKLSAgICB3aGlsZSAoQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQqIGMgPSB3
Lm5leHQoKSkgewotICAgICAgICBpZiAoIWMtPnNob3VsZENhY2hlUmVzcG9uc2UodGhpcywgcmVz
cG9uc2UpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6ZGlkU2VuZERhdGEodW5zaWduZWQgbG9u
ZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkK
LXsKLSAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRSYXdSZXNvdXJjZUNsaWVu
dD4gdyhtX2NsaWVudHMpOwotICAgIHdoaWxlIChDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCogYyA9
IHcubmV4dCgpKQotICAgICAgICBjLT5kYXRhU2VudCh0aGlzLCBieXRlc1NlbnQsIHRvdGFsQnl0
ZXNUb0JlU2VudCk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OnN3aXRjaENsaWVudHNU
b1JldmFsaWRhdGVkUmVzb3VyY2UoKQotewotICAgIEFTU0VSVChtX2xvYWRlcik7Ci0gICAgLy8g
SWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHN1Y2Nlc3NmdWwgcmV2YWxpZGF0aW9uLCByZXNw
b25zZVJlY2VpdmVkKCkgaGFzbid0IGJlZW4gY2FsbGVkLCBzbyB3ZSBoYXZlbid0IHNldCBtX2lk
ZW50aWZpZXIuCi0gICAgQVNTRVJUKCFtX2lkZW50aWZpZXIpOwotICAgIGRvd25jYXN0PENhY2hl
ZFJhd1Jlc291cmNlPigqcmVzb3VyY2VUb1JldmFsaWRhdGUoKSkubV9pZGVudGlmaWVyID0gbV9s
b2FkZXItPmlkZW50aWZpZXIoKTsKLSAgICBDYWNoZWRSZXNvdXJjZTo6c3dpdGNoQ2xpZW50c1Rv
UmV2YWxpZGF0ZWRSZXNvdXJjZSgpOwotfQotCi12b2lkIENhY2hlZFJhd1Jlc291cmNlOjpzZXRE
ZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQotewotICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAg
bV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKLX0KLQotdm9pZCBDYWNoZWRSYXdS
ZXNvdXJjZTo6c2V0RGF0YUJ1ZmZlcmluZ1BvbGljeShEYXRhQnVmZmVyaW5nUG9saWN5IGRhdGFC
dWZmZXJpbmdQb2xpY3kpCi17Ci0gICAgbV9vcHRpb25zLmRhdGFCdWZmZXJpbmdQb2xpY3kgPSBk
YXRhQnVmZmVyaW5nUG9saWN5OwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVIZWFkZXJG
b3JDYWNoZVJldXNlKEhUVFBIZWFkZXJOYW1lIG5hbWUpCi17Ci0gICAgc3dpdGNoIChuYW1lKSB7
Ci0gICAgLy8gRklYTUU6IFRoaXMgbGlzdCBvZiBoZWFkZXJzIHRoYXQgZG9uJ3QgYWZmZWN0IGNh
Y2hlIHBvbGljeSBhbG1vc3QgY2VydGFpbmx5IGlzbid0IGNvbXBsZXRlLgotICAgIGNhc2UgSFRU
UEhlYWRlck5hbWU6OkFjY2VwdDoKLSAgICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpDYWNoZUNvbnRy
b2w6Ci0gICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6UHJhZ21hOgotICAgIGNhc2UgSFRUUEhlYWRl
ck5hbWU6OlB1cnBvc2U6Ci0gICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6UmVmZXJlcjoKLSAgICBj
YXNlIEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBDYWNo
ZWRSYXdSZXNvdXJjZTo6Y2FuUmV1c2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0
KSBjb25zdAotewotICAgIGlmIChkYXRhQnVmZmVyaW5nUG9saWN5KCkgPT0gRG9Ob3RCdWZmZXJE
YXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9yZXNvdXJjZVJlcXVlc3Qu
aHR0cE1ldGhvZCgpICE9IG5ld1JlcXVlc3QuaHR0cE1ldGhvZCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAobV9yZXNvdXJjZVJlcXVlc3QuaHR0cEJvZHkoKSAhPSBuZXdSZXF1
ZXN0Lmh0dHBCb2R5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX3Jlc291
cmNlUmVxdWVzdC5hbGxvd0Nvb2tpZXMoKSAhPSBuZXdSZXF1ZXN0LmFsbG93Q29va2llcygpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobmV3UmVxdWVzdC5pc0NvbmRpdGlvbmFs
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEVuc3VyZSBtb3N0IGhlYWRlcnMg
bWF0Y2ggdGhlIGV4aXN0aW5nIGhlYWRlcnMgYmVmb3JlIGNvbnRpbnVpbmcuCi0gICAgLy8gTm90
ZSB0aGF0IHRoZSBsaXN0IG9mIGlnbm9yZWQgaGVhZGVycyBpbmNsdWRlcyBzb21lIGhlYWRlcnMg
ZXhwbGljaXRseSByZWxhdGVkIHRvIGNhY2hpbmcuCi0gICAgLy8gQSBtb3JlIGRldGFpbGVkIGNo
ZWNrIG9mIGNhY2hpbmcgcG9saWN5IHdpbGwgYmUgcGVyZm9ybWVkIGxhdGVyLCB0aGlzIGlzIHNp
bXBseSBhIGxpc3Qgb2YKLSAgICAvLyBoZWFkZXJzIHRoYXQgd2UgbWlnaHQgcGVybWl0IHRvIGJl
IGRpZmZlcmVudCBhbmQgc3RpbGwgcmV1c2UgdGhlIGV4aXN0aW5nIENhY2hlZFJlc291cmNlLgot
ICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIG5ld0hlYWRlcnMgPSBuZXdSZXF1ZXN0Lmh0dHBIZWFk
ZXJGaWVsZHMoKTsKLSAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBvbGRIZWFkZXJzID0gbV9yZXNv
dXJjZVJlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBo
ZWFkZXIgOiBuZXdIZWFkZXJzKSB7Ci0gICAgICAgIGlmIChoZWFkZXIua2V5QXNIVFRQSGVhZGVy
TmFtZSkgewotICAgICAgICAgICAgaWYgKCFzaG91bGRJZ25vcmVIZWFkZXJGb3JDYWNoZVJldXNl
KGhlYWRlci5rZXlBc0hUVFBIZWFkZXJOYW1lLnZhbHVlKCkpCi0gICAgICAgICAgICAgICAgJiYg
aGVhZGVyLnZhbHVlICE9IG9sZEhlYWRlcnMuY29tbW9uSGVhZGVycygpLmdldChoZWFkZXIua2V5
QXNIVFRQSGVhZGVyTmFtZS52YWx1ZSgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0gZWxzZSBpZiAoaGVhZGVyLnZhbHVlICE9IG9sZEhlYWRlcnMudW5jb21tb25I
ZWFkZXJzKCkuZ2V0KGhlYWRlci5rZXkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIC8vIEZvciB0aGlzIHNlY29uZCBsb29wLCB3ZSBkb24ndCBhY3R1YWxseSBuZWVk
IHRvIGNvbXBhcmUgdmFsdWVzLCBjaGVja2luZyB0aGF0IHRoZQotICAgIC8vIGtleSBpcyBjb250
YWluZWQgaW4gbmV3SGVhZGVycyBpcyBzdWZmaWNpZW50IGR1ZSB0byB0aGUgcHJldmlvdXMgbG9v
cC4KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IG9sZEhlYWRlcnMpIHsKLSAgICAgICAg
aWYgKGhlYWRlci5rZXlBc0hUVFBIZWFkZXJOYW1lKSB7Ci0gICAgICAgICAgICBpZiAoIXNob3Vs
ZElnbm9yZUhlYWRlckZvckNhY2hlUmV1c2UoaGVhZGVyLmtleUFzSFRUUEhlYWRlck5hbWUudmFs
dWUoKSkKLSAgICAgICAgICAgICAgICAmJiAhbmV3SGVhZGVycy5jb21tb25IZWFkZXJzKCkuY29u
dGFpbnMoaGVhZGVyLmtleUFzSFRUUEhlYWRlck5hbWUudmFsdWUoKSkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKCFuZXdIZWFkZXJzLnVuY29tbW9u
SGVhZGVycygpLmNvbnRhaW5zKGhlYWRlci5rZXkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENhY2hlZFJhd1Jlc291cmNl
OjpjbGVhcigpCi17Ci0gICAgbV9kYXRhID0gbnVsbHB0cjsKLSAgICBzZXRFbmNvZGVkU2l6ZSgw
KTsKLSAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgIG1fbG9hZGVyLT5jbGVhclJlc291cmNlRGF0
YSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA1ZmI1NGQ4NDU4MmM5NTAwODEwY2M5NjBmYTM2MTQ1OWI3NTg5NjA2Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAg
QEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5t
cGcuZGUpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUu
b3JnPgotICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdt
YWlsLmNvbSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpZm5kZWYgQ2FjaGVkUmF3UmVzb3VyY2Vf
aAotI2RlZmluZSBDYWNoZWRSYXdSZXNvdXJjZV9oCi0KLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENhY2hlZFJlc291cmNlQ2xpZW50
OwotY2xhc3MgU3VicmVzb3VyY2VMb2FkZXI7Ci0KLWNsYXNzIENhY2hlZFJhd1Jlc291cmNlIGZp
bmFsIDogcHVibGljIENhY2hlZFJlc291cmNlIHsKLXB1YmxpYzoKLSAgICBDYWNoZWRSYXdSZXNv
dXJjZShSZXNvdXJjZVJlcXVlc3QmLCBUeXBlLCBTZXNzaW9uSUQpOwotCi0gICAgLy8gRklYTUU6
IEFzc29jaWF0ZWRVUkxMb2FkZXIgc2hvdWxkbid0IGJlIGEgRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyIGFuZCB0aGVyZWZvcmUgc2hvdWxkbid0Ci0gICAgLy8gdXNlIENhY2hlZFJhd1Jlc291cmNl
LiBIb3dldmVyLCBpdCBpcywgYW5kIGl0IG5lZWRzIHRvIGJlIGFibGUgdG8gZGVmZXIgbG9hZGlu
Zy4KLSAgICAvLyBUaGlzIGNhbiBiZSBmaXhlZCBieSBzcGxpdHRpbmcgQ09SUyBwcmVmbGlnaHRp
bmcgb3V0IG9mIERvY3VtZW50VGhyZWFjYWJsZUxvYWRlci4KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
RGVmZXJzTG9hZGluZyhib29sKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhQnVmZmVyaW5n
UG9saWN5KERhdGFCdWZmZXJpbmdQb2xpY3kpOwotICAgIAotICAgIC8vIEZJWE1FOiBUaGlzIGlz
IGV4cG9zZWQgZm9yIHRoZSBJbnBzZWN0b3JJbnN0cnVtZW50YXRpb24gZm9yIHByZWZsaWdodHMg
aW4gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLiBJdCdzIGFsc28gcmVhbGx5IGxhbWUuCi0gICAg
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9
Ci0KLSAgICB2b2lkIGNsZWFyKCk7Ci0KLSAgICBib29sIGNhblJldXNlKGNvbnN0IFJlc291cmNl
UmVxdWVzdCYpIGNvbnN0OwotCi0gICAgYm9vbCB3YXNSZWRpcmVjdGVkKCkgY29uc3QgeyByZXR1
cm4gIW1fcmVkaXJlY3RDaGFpbi5pc0VtcHR5KCk7IH07Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBk
aWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKSBvdmVycmlkZTsKLSAgICB2b2lkIGFk
ZERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGREYXRhKGNv
bnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaW5p
c2hMb2FkaW5nKFNoYXJlZEJ1ZmZlciopIG92ZXJyaWRlOwotCi0gICAgYm9vbCBzaG91bGRJZ25v
cmVIVFRQU3RhdHVzQ29kZUVycm9ycygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0K
LSAgICB2b2lkIGFsbENsaWVudHNSZW1vdmVkKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHJlZGly
ZWN0UmVjZWl2ZWQoUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIG92
ZXJyaWRlOwotICAgIHZvaWQgcmVzcG9uc2VSZWNlaXZlZChjb25zdCBSZXNvdXJjZVJlc3BvbnNl
Jikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzaG91bGRDYWNoZVJlc3BvbnNlKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcg
bG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpIG92
ZXJyaWRlOwotCi0gICAgdm9pZCBzd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNlKCkg
b3ZlcnJpZGU7Ci0gICAgYm9vbCBtYXlUcnlSZXBsYWNlRW5jb2RlZERhdGEoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX2FsbG93RW5jb2RlZERhdGFSZXBsYWNlbWVudDsgfQotCi0gICAgY29u
c3QgY2hhciogY2FsY3VsYXRlSW5jcmVtZW50YWxEYXRhQ2h1bmsoU2hhcmVkQnVmZmVyKiwgdW5z
aWduZWQmIGluY3JlbWVudGFsRGF0YUxlbmd0aCk7Ci0gICAgdm9pZCBub3RpZnlDbGllbnRzRGF0
YVdhc1JlY2VpdmVkKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSNpZiBV
U0UoU09VUCkKLSAgICBjaGFyKiBnZXRPckNyZWF0ZVJlYWRCdWZmZXIoc2l6ZV90IHJlcXVlc3Rl
ZFNpemUsIHNpemVfdCYgYWN0dWFsU2l6ZSkgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotICAgIHVuc2ln
bmVkIGxvbmcgbV9pZGVudGlmaWVyOwotICAgIGJvb2wgbV9hbGxvd0VuY29kZWREYXRhUmVwbGFj
ZW1lbnQ7Ci0KLSAgICBzdHJ1Y3QgUmVkaXJlY3RQYWlyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IGV4cGxpY2l0IFJlZGlyZWN0UGFpcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCi0gICAgICAgICAgICA6IG1f
cmVxdWVzdChyZXF1ZXN0KQotICAgICAgICAgICAgLCBtX3JlZGlyZWN0UmVzcG9uc2UocmVkaXJl
Y3RSZXNwb25zZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0IG1fcmVxdWVzdDsKLSAgICAgICAgY29uc3QgUmVzb3VyY2VSZXNwb25zZSBtX3Jl
ZGlyZWN0UmVzcG9uc2U7Ci0gICAgfTsKLQotICAgIFZlY3RvcjxSZWRpcmVjdFBhaXI+IG1fcmVk
aXJlY3RDaGFpbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpDYWNoZWRSYXdSZXNvdXJjZSkKLSAgICBzdGF0aWMg
Ym9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKSB7IHJl
dHVybiByZXNvdXJjZS5pc01haW5Pck1lZGlhT3JSYXdSZXNvdXJjZSgpOyB9Ci1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0VORCgpCi0KLSNlbmRpZiAvLyBDYWNoZWRSYXdSZXNvdXJjZV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2VDbGll
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZUNsaWVu
dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTBjOWZkZjkxODRjOTQ1YWZjZTI5
Y2VkOGU5ZTA5YTZhYWIzYTNiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZUNs
aWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQg
KEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQg
KEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChD
KSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQotICAgIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENhY2hlZFJlc291cmNlOwotY2xhc3Mg
UmVzb3VyY2VSZXF1ZXN0OwotY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKLQotY2xhc3MgQ2FjaGVk
UmF3UmVzb3VyY2VDbGllbnQgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewotcHVibGlj
OgotICAgIHZpcnR1YWwgfkNhY2hlZFJhd1Jlc291cmNlQ2xpZW50KCkgeyB9Ci0gICAgc3RhdGlj
IENhY2hlZFJlc291cmNlQ2xpZW50VHlwZSBleHBlY3RlZFR5cGUoKSB7IHJldHVybiBSYXdSZXNv
dXJjZVR5cGU7IH0KLSAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFR5cGUgcmVzb3VyY2VDbGllbnRU
eXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZXhwZWN0ZWRUeXBlKCk7IH0KLQotICAgIHZp
cnR1YWwgdm9pZCBkYXRhU2VudChDYWNoZWRSZXNvdXJjZSosIHVuc2lnbmVkIGxvbmcgbG9uZyAv
KiBieXRlc1NlbnQgKi8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKiB0b3RhbEJ5dGVzVG9CZVNlbnQg
Ki8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCByZXNwb25zZVJlY2VpdmVkKENhY2hlZFJlc291cmNl
KiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRD
YWNoZVJlc3BvbnNlKENhY2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsg
cmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGF0YVJlY2VpdmVkKENhY2hlZFJlc291
cmNlKiwgY29uc3QgY2hhciogLyogZGF0YSAqLywgaW50IC8qIGxlbmd0aCAqLykgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIHJlZGlyZWN0UmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqLCBSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyB9Ci0jaWYgVVNFKFNPVVApCi0gICAg
dmlydHVhbCBjaGFyKiBnZXRPckNyZWF0ZVJlYWRCdWZmZXIoQ2FjaGVkUmVzb3VyY2UqLCBzaXpl
X3QgLyogcmVxdWVzdGVkU2l6ZSAqLywgc2l6ZV90JiAvKiBhY3R1YWxTaXplICovKSB7IHJldHVy
biBudWxscHRyOyB9Ci0jZW5kaWYKLX07Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBm
MTNhZTYyYTEzYWQwY2Q4ZmIxMTI5YTNiZTJjZTJjYjhmZmEzNWE2Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5MzUgKzAsMCBAQAotLyoK
LSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkK
LSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0g
ICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKLSAg
ICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20p
Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTEsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZS5oIgotCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKLSNpbmNsdWRlICJD
YWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFu
ZGxlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKLSNpbmNsdWRlICJDcm9z
c09yaWdpbkFjY2Vzc0NvbnRyb2wuaCIKLSNpbmNsdWRlICJEaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dC5oIgotI2luY2x1ZGUgIkRpYWdub3N0aWNMb2dnaW5nS2V5cy5oIgotI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiSFRUUEhlYWRl
ck5hbWVzLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCi0jaW5jbHVk
ZSAiVVJMLmgiCi0jaW5jbHVkZSAiTG9hZGVyU3RyYXRlZ3kuaCIKLSNpbmNsdWRlICJMb2dnaW5n
LmgiCi0jaW5jbHVkZSAiTWFpbkZyYW1lLmgiCi0jaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKLSNp
bmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCi0jaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgotI2luY2x1
ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlQb2xpY3kuaCIKLSNpbmNs
dWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgot
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFr
Q291bnRlci5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0jaWYgVVNFKFFVSUNL
X0xPT0spCi0jaW5jbHVkZSAiUXVpY2tMb29rLmgiCi0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNl
IFdURjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZXNvdXJjZUxvYWRQcmlvcml0eSBDYWNo
ZWRSZXNvdXJjZTo6ZGVmYXVsdFByaW9yaXR5Rm9yUmVzb3VyY2VUeXBlKFR5cGUgdHlwZSkKLXsK
LSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpNYWluUmVzb3Vy
Y2U6Ci0gICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUhpZ2g7Ci0gICAg
Y2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKLSAgICAgICAgcmV0dXJuIFJlc291
cmNlTG9hZFByaW9yaXR5OjpIaWdoOwotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoK
LSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0ZvbnRS
ZXNvdXJjZToKLSNlbmRpZgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok1lZGlhUmVzb3VyY2U6
Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlOgotICAgIGNhc2UgQ2FjaGVk
UmVzb3VyY2U6OlJhd1Jlc291cmNlOgotICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3Jp
dHk6Ok1lZGl1bTsKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgotICAg
ICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdzsKLSNpZiBFTkFCTEUoWFNMVCkK
LSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgotICAgICAgICByZXR1cm4g
UmVzb3VyY2VMb2FkUHJpb3JpdHk6OkhpZ2g7Ci0jZW5kaWYKLSAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpTVkdEb2N1bWVudFJlc291cmNlOgotICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJp
b3JpdHk6OkxvdzsKLSNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKLSAgICBjYXNlIENhY2hlZFJl
c291cmNlOjpMaW5rUHJlZmV0Y2g6Ci0gICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0
eTo6VmVyeUxvdzsKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rU3VicmVzb3VyY2U6Ci0g
ICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdzsKLSNlbmRpZgotI2lm
IEVOQUJMRShWSURFT19UUkFDSykKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpUZXh0VHJhY2tS
ZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5OjpMb3c7Ci0jZW5k
aWYKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFJlc291cmNl
TG9hZFByaW9yaXR5OjpMb3c7Ci19Ci0KLXN0YXRpYyBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
IGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWxGb3JSZXNvdXJjZVR5cGUoQ2FjaGVkUmVz
b3VyY2U6OlR5cGUgdHlwZSkKLXsKLSAgICBpZiAodHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6U2Ny
aXB0KQotICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB7IDAgfTsKLQot
ICAgIHJldHVybiBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkuZGVhZERlY29kZWREYXRhRGVsZXRp
b25JbnRlcnZhbCgpOwotfQotCi1ERUZJTkVfREVCVUdfT05MWV9HTE9CQUwoUmVmQ291bnRlZExl
YWtDb3VudGVyLCBjYWNoZWRSZXNvdXJjZUxlYWtDb3VudGVyLCAoIkNhY2hlZFJlc291cmNlIikp
OwotCi1DYWNoZWRSZXNvdXJjZTo6Q2FjaGVkUmVzb3VyY2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBUeXBlIHR5cGUsIFNlc3Npb25JRCBzZXNzaW9uSUQpCi0gICAgOiBtX3Jlc291
cmNlUmVxdWVzdChyZXF1ZXN0KQotICAgICwgbV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXIoKnRo
aXMsICZDYWNoZWRSZXNvdXJjZTo6ZGVzdHJveURlY29kZWREYXRhLCBkZWFkRGVjb2RlZERhdGFE
ZWxldGlvbkludGVydmFsRm9yUmVzb3VyY2VUeXBlKHR5cGUpKQotICAgICwgbV9zZXNzaW9uSUQo
c2Vzc2lvbklEKQotICAgICwgbV9sb2FkUHJpb3JpdHkoZGVmYXVsdFByaW9yaXR5Rm9yUmVzb3Vy
Y2VUeXBlKHR5cGUpKQotICAgICwgbV9yZXNwb25zZVRpbWVzdGFtcChzdGQ6OmNocm9ubzo6c3lz
dGVtX2Nsb2NrOjpub3coKSkKLSAgICAsIG1fbGFzdERlY29kZWRBY2Nlc3NUaW1lKDApCi0gICAg
LCBtX2xvYWRGaW5pc2hUaW1lKDApCi0gICAgLCBtX2VuY29kZWRTaXplKDApCi0gICAgLCBtX2Rl
Y29kZWRTaXplKDApCi0gICAgLCBtX2FjY2Vzc0NvdW50KDApCi0gICAgLCBtX2hhbmRsZUNvdW50
KDApCi0gICAgLCBtX3ByZWxvYWRDb3VudCgwKQotICAgICwgbV9wcmVsb2FkUmVzdWx0KFByZWxv
YWROb3RSZWZlcmVuY2VkKQotICAgICwgbV9yZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyKGZh
bHNlKQotICAgICwgbV9pbkNhY2hlKGZhbHNlKQotICAgICwgbV9sb2FkaW5nKGZhbHNlKQotICAg
ICwgbV9zd2l0Y2hpbmdDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNlKGZhbHNlKQotICAgICwg
bV90eXBlKHR5cGUpCi0gICAgLCBtX3N0YXR1cyhQZW5kaW5nKQotI2lmbmRlZiBOREVCVUcKLSAg
ICAsIG1fZGVsZXRlZChmYWxzZSkKLSAgICAsIG1fbHJ1SW5kZXgoMCkKLSNlbmRpZgotICAgICwg
bV9vd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcihudWxscHRyKQotICAgICwgbV9yZXNvdXJjZVRv
UmV2YWxpZGF0ZShudWxscHRyKQotICAgICwgbV9wcm94eVJlc291cmNlKG51bGxwdHIpCi17Ci0g
ICAgQVNTRVJUKG1fdHlwZSA9PSB1bnNpZ25lZCh0eXBlKSk7IC8vIG1fdHlwZSBpcyBhIGJpdGZp
ZWxkLCBzbyB0aGlzIHRlc3RzIGNhcmVsZXNzIHVwZGF0ZXMgb2YgdGhlIGVudW0uCi0gICAgQVNT
RVJUKHNlc3Npb25JRC5pc1ZhbGlkKCkpOwotI2lmbmRlZiBOREVCVUcKLSAgICBjYWNoZWRSZXNv
dXJjZUxlYWtDb3VudGVyLmluY3JlbWVudCgpOwotI2VuZGlmCi0KLSAgICBpZiAoIW1fcmVzb3Vy
Y2VSZXF1ZXN0LnVybCgpLmhhc0ZyYWdtZW50SWRlbnRpZmllcigpKQotICAgICAgICByZXR1cm47
Ci0gICAgVVJMIHVybEZvckNhY2hlID0gTWVtb3J5Q2FjaGU6OnJlbW92ZUZyYWdtZW50SWRlbnRp
ZmllcklmTmVlZGVkKG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpKTsKLSAgICBpZiAodXJsRm9yQ2Fj
aGUuaGFzRnJhZ21lbnRJZGVudGlmaWVyKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2ZyYWdt
ZW50SWRlbnRpZmllckZvclJlcXVlc3QgPSBtX3Jlc291cmNlUmVxdWVzdC51cmwoKS5mcmFnbWVu
dElkZW50aWZpZXIoKTsKLSAgICBtX3Jlc291cmNlUmVxdWVzdC5zZXRVUkwodXJsRm9yQ2FjaGUp
OwotfQotCi1DYWNoZWRSZXNvdXJjZTo6fkNhY2hlZFJlc291cmNlKCkKLXsKLSAgICBBU1NFUlQo
IW1fcmVzb3VyY2VUb1JldmFsaWRhdGUpOyAvLyBTaG91bGQgYmUgdHJ1ZSBiZWNhdXNlIGNhbkRl
bGV0ZSgpIGNoZWNrcyB0aGlzLgotICAgIEFTU0VSVChjYW5EZWxldGUoKSk7Ci0gICAgQVNTRVJU
KCFpbkNhY2hlKCkpOwotICAgIEFTU0VSVCghbV9kZWxldGVkKTsKLSAgICBBU1NFUlQodXJsKCku
aXNOdWxsKCkgfHwgIWFsbG93c0NhY2hpbmcoKSB8fCBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCku
cmVzb3VyY2VGb3JSZXF1ZXN0KHJlc291cmNlUmVxdWVzdCgpLCBzZXNzaW9uSUQoKSkgIT0gdGhp
cyk7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9kZWxldGVkID0gdHJ1ZTsKLSAgICBjYWNoZWRS
ZXNvdXJjZUxlYWtDb3VudGVyLmRlY3JlbWVudCgpOwotI2VuZGlmCi0KLSAgICBpZiAobV9vd25p
bmdDYWNoZWRSZXNvdXJjZUxvYWRlcikKLSAgICAgICAgbV9vd25pbmdDYWNoZWRSZXNvdXJjZUxv
YWRlci0+cmVtb3ZlQ2FjaGVkUmVzb3VyY2UoKnRoaXMpOwotfQotCi12b2lkIENhY2hlZFJlc291
cmNlOjpmYWlsQmVmb3JlU3RhcnRpbmcoKQotewotICAgIC8vIEZJWE1FOiBXaGF0IGlmIHJlc291
cmNlcyBpbiBvdGhlciBmcmFtZXMgd2VyZSB3YWl0aW5nIGZvciB0aGlzIHJldmFsaWRhdGlvbj8K
LSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2Fubm90IHN0YXJ0IGxvYWRpbmcgJyVzJyIsIHVy
bCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7Ci0gICAgaWYgKGFsbG93c0NhY2hpbmcoKSAm
JiBtX3Jlc291cmNlVG9SZXZhbGlkYXRlKQotICAgICAgICBNZW1vcnlDYWNoZTo6c2luZ2xldG9u
KCkucmV2YWxpZGF0aW9uRmFpbGVkKCp0aGlzKTsKLSAgICBlcnJvcihDYWNoZWRSZXNvdXJjZTo6
TG9hZEVycm9yKTsKLX0KLQotc3RhdGljIHZvaWQgYWRkQWRkaXRpb25hbFJlcXVlc3RIZWFkZXJz
VG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgQ2FjaGVkUmVzb3VyY2VM
b2FkZXImIGNhY2hlZFJlc291cmNlTG9hZGVyLCBDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpCi17
Ci0gICAgaWYgKHJlc291cmNlLnR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6TWFpblJlc291cmNl
KQotICAgICAgICByZXR1cm47Ci0gICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBtYXkgdHJ5IHRvIGxv
YWQgcmVzb3VyY2VzIGluIGZyYW1lbGVzcyBkb2N1bWVudHMuIFN1Y2ggbG9hZHMgYWx3YXlzIGZh
aWwuCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBnZXQgdGhpcyBmYXIuCi0gICAgaWYgKCFj
YWNoZWRSZXNvdXJjZUxvYWRlci5mcmFtZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBO
b3RlOiBXZSBza2lwIHRoZSBDb250ZW50LVNlY3VyaXR5LVBvbGljeSBjaGVjayBoZXJlIGJlY2F1
c2Ugd2UgY2hlY2sKLSAgICAvLyB0aGUgQ29udGVudC1TZWN1cml0eS1Qb2xpY3kgYXQgdGhlIENh
Y2hlZFJlc291cmNlTG9hZGVyIGxheWVyIHNvIHdlIGNhbgotICAgIC8vIGhhbmRsZSBkaWZmZXJl
bnQgcmVzb3VyY2UgdHlwZXMgZGlmZmVyZW50bHkuCi0gICAgRnJhbWVMb2FkZXImIGZyYW1lTG9h
ZGVyID0gY2FjaGVkUmVzb3VyY2VMb2FkZXIuZnJhbWUoKS0+bG9hZGVyKCk7Ci0gICAgU3RyaW5n
IG91dGdvaW5nUmVmZXJyZXI7Ci0gICAgU3RyaW5nIG91dGdvaW5nT3JpZ2luOwotICAgIGlmIChy
ZXF1ZXN0Lmh0dHBSZWZlcnJlcigpLmlzTnVsbCgpKSB7Ci0gICAgICAgIG91dGdvaW5nUmVmZXJy
ZXIgPSBmcmFtZUxvYWRlci5vdXRnb2luZ1JlZmVycmVyKCk7Ci0gICAgICAgIG91dGdvaW5nT3Jp
Z2luID0gZnJhbWVMb2FkZXIub3V0Z29pbmdPcmlnaW4oKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBvdXRnb2luZ1JlZmVycmVyID0gcmVxdWVzdC5odHRwUmVmZXJyZXIoKTsKLSAgICAgICAgb3V0
Z29pbmdPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhvdXRnb2luZ1Jl
ZmVycmVyKS0+dG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogUmVmYWN0b3IgU2Vj
dXJpdHlQb2xpY3k6OmdlbmVyYXRlUmVmZXJyZXJIZWFkZXIgdG8gYWxpZ24gd2l0aCBuZXcgdGVy
bWlub2xvZ3kgdXNlZCBpbiBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVy
LXBvbGljeS4KLSAgICBzd2l0Y2ggKHJlc291cmNlLm9wdGlvbnMoKS5yZWZlcnJlclBvbGljeSkg
ewotICAgIGNhc2UgRmV0Y2hPcHRpb25zOjpSZWZlcnJlclBvbGljeTo6RW1wdHlTdHJpbmc6IHsK
LSAgICAgICAgUmVmZXJyZXJQb2xpY3kgcmVmZXJyZXJQb2xpY3kgPSBjYWNoZWRSZXNvdXJjZUxv
YWRlci5kb2N1bWVudCgpID8gY2FjaGVkUmVzb3VyY2VMb2FkZXIuZG9jdW1lbnQoKS0+cmVmZXJy
ZXJQb2xpY3koKSA6IFJlZmVycmVyUG9saWN5OjpEZWZhdWx0OwotICAgICAgICBvdXRnb2luZ1Jl
ZmVycmVyID0gU2VjdXJpdHlQb2xpY3k6OmdlbmVyYXRlUmVmZXJyZXJIZWFkZXIocmVmZXJyZXJQ
b2xpY3ksIHJlcXVlc3QudXJsKCksIG91dGdvaW5nUmVmZXJyZXIpOwotICAgICAgICBicmVhazsg
fQotICAgIGNhc2UgRmV0Y2hPcHRpb25zOjpSZWZlcnJlclBvbGljeTo6Tm9SZWZlcnJlcldoZW5E
b3duZ3JhZGU6Ci0gICAgICAgIG91dGdvaW5nUmVmZXJyZXIgPSBTZWN1cml0eVBvbGljeTo6Z2Vu
ZXJhdGVSZWZlcnJlckhlYWRlcihSZWZlcnJlclBvbGljeTo6RGVmYXVsdCwgcmVxdWVzdC51cmwo
KSwgb3V0Z29pbmdSZWZlcnJlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmV0Y2hPcHRp
b25zOjpSZWZlcnJlclBvbGljeTo6Tm9SZWZlcnJlcjoKLSAgICAgICAgb3V0Z29pbmdSZWZlcnJl
ciA9IFN0cmluZygpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZldGNoT3B0aW9uczo6UmVm
ZXJyZXJQb2xpY3k6Ok9yaWdpbjoKLSAgICAgICAgb3V0Z29pbmdSZWZlcnJlciA9IFNlY3VyaXR5
UG9saWN5OjpnZW5lcmF0ZVJlZmVycmVySGVhZGVyKFJlZmVycmVyUG9saWN5OjpPcmlnaW4sIHJl
cXVlc3QudXJsKCksIG91dGdvaW5nUmVmZXJyZXIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEZldGNoT3B0aW9uczo6UmVmZXJyZXJQb2xpY3k6Ok9yaWdpbldoZW5Dcm9zc09yaWdpbjoKLSAg
ICAgICAgaWYgKHJlc291cmNlLmlzQ3Jvc3NPcmlnaW4oKSkKLSAgICAgICAgICAgIG91dGdvaW5n
UmVmZXJyZXIgPSBTZWN1cml0eVBvbGljeTo6Z2VuZXJhdGVSZWZlcnJlckhlYWRlcihSZWZlcnJl
clBvbGljeTo6T3JpZ2luLCByZXF1ZXN0LnVybCgpLCBvdXRnb2luZ1JlZmVycmVyKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGZXRjaE9wdGlvbnM6OlJlZmVycmVyUG9saWN5OjpVbnNhZmVV
cmw6Ci0gICAgICAgIGJyZWFrOwotICAgIH07Ci0KLSAgICBpZiAob3V0Z29pbmdSZWZlcnJlci5p
c0VtcHR5KCkpCi0gICAgICAgIHJlcXVlc3QuY2xlYXJIVFRQUmVmZXJyZXIoKTsKLSAgICBlbHNl
Ci0gICAgICAgIHJlcXVlc3Quc2V0SFRUUFJlZmVycmVyKG91dGdvaW5nUmVmZXJyZXIpOwotICAg
IEZyYW1lTG9hZGVyOjphZGRIVFRQT3JpZ2luSWZOZWVkZWQocmVxdWVzdCwgb3V0Z29pbmdPcmln
aW4pOwotCi0gICAgZnJhbWVMb2FkZXIuYWRkRXh0cmFGaWVsZHNUb1N1YnJlc291cmNlUmVxdWVz
dChyZXF1ZXN0KTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6YWRkQWRkaXRpb25hbFJlcXVl
c3RIZWFkZXJzKENhY2hlZFJlc291cmNlTG9hZGVyJiBsb2FkZXIpCi17Ci0gICAgYWRkQWRkaXRp
b25hbFJlcXVlc3RIZWFkZXJzVG9SZXF1ZXN0KG1fcmVzb3VyY2VSZXF1ZXN0LCBsb2FkZXIsICp0
aGlzKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6Y29tcHV0ZU9yaWdpbihDYWNoZWRSZXNv
dXJjZUxvYWRlciYgbG9hZGVyKQotewotICAgIGlmICh0eXBlKCkgPT0gTWFpblJlc291cmNlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobG9hZGVyLmRvY3VtZW50KCkpOwotICAgIGlm
IChtX3Jlc291cmNlUmVxdWVzdC5oYXNIVFRQT3JpZ2luKCkpCi0gICAgICAgIG1fb3JpZ2luID0g
U2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcobV9yZXNvdXJjZVJlcXVlc3QuaHR0cE9y
aWdpbigpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fb3JpZ2luID0gbG9hZGVyLmRvY3VtZW50KCkt
PnNlY3VyaXR5T3JpZ2luKCk7Ci0gICAgQVNTRVJUKG1fb3JpZ2luKTsKLQotICAgIGlmICghKG1f
cmVzb3VyY2VSZXF1ZXN0LnVybCgpLnByb3RvY29sSXNEYXRhKCkgJiYgbV9vcHRpb25zLnNhbWVP
cmlnaW5EYXRhVVJMRmxhZyA9PSBTYW1lT3JpZ2luRGF0YVVSTEZsYWc6OlNldCkgJiYgIW1fb3Jp
Z2luLT5jYW5SZXF1ZXN0KG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpKSkKLSAgICAgICAgc2V0Q3Jv
c3NPcmlnaW4oKTsKLQotICAgIGFkZEFkZGl0aW9uYWxSZXF1ZXN0SGVhZGVycyhsb2FkZXIpOwot
fQotCi12b2lkIENhY2hlZFJlc291cmNlOjpsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyJiBjYWNo
ZWRSZXNvdXJjZUxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKQot
ewotICAgIGlmICghY2FjaGVkUmVzb3VyY2VMb2FkZXIuZnJhbWUoKSkgewotICAgICAgICBmYWls
QmVmb3JlU3RhcnRpbmcoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBGcmFtZSYgZnJh
bWUgPSAqY2FjaGVkUmVzb3VyY2VMb2FkZXIuZnJhbWUoKTsKLQotICAgIC8vIFByZXZlbnQgbmV3
IGxvYWRzIGlmIHdlIGFyZSBpbiB0aGUgUGFnZUNhY2hlIG9yIGJlaW5nIGFkZGVkIHRvIHRoZSBQ
YWdlQ2FjaGUuCi0gICAgaWYgKGZyYW1lLnBhZ2UoKSAmJiBmcmFtZS5wYWdlKCktPmluUGFnZUNh
Y2hlKCkpIHsKLSAgICAgICAgZmFpbEJlZm9yZVN0YXJ0aW5nKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIgPSBmcmFtZS5sb2FkZXIoKTsK
LSAgICBpZiAob3B0aW9ucy5zZWN1cml0eUNoZWNrID09IERvU2VjdXJpdHlDaGVjayAmJiAoZnJh
bWVMb2FkZXIuc3RhdGUoKSA9PSBGcmFtZVN0YXRlUHJvdmlzaW9uYWwgfHwgIWZyYW1lTG9hZGVy
LmFjdGl2ZURvY3VtZW50TG9hZGVyKCkgfHwgZnJhbWVMb2FkZXIuYWN0aXZlRG9jdW1lbnRMb2Fk
ZXIoKS0+aXNTdG9wcGluZygpKSkgewotICAgICAgICBmYWlsQmVmb3JlU3RhcnRpbmcoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fb3B0aW9ucyA9IG9wdGlvbnM7Ci0gICAgbV9s
b2FkaW5nID0gdHJ1ZTsKLQotI2lmIFVTRShRVUlDS19MT09LKQotICAgIGlmICghbV9yZXNvdXJj
ZVJlcXVlc3QuaXNOdWxsKCkgJiYgbV9yZXNvdXJjZVJlcXVlc3QudXJsKCkucHJvdG9jb2xJcyhR
TFByZXZpZXdQcm90b2NvbCgpKSkgewotICAgICAgICAvLyBXaGVuIFF1aWNrTG9vayBpcyBpbnZv
a2VkIHRvIGNvbnZlcnQgYSBkb2N1bWVudCwgaXQgcmV0dXJucyBhIHVuaXF1ZSBVUkwgaW4gdGhl
Ci0gICAgICAgIC8vIE5TVVJMUmVwb25zZSBmb3IgdGhlIG1haW4gZG9jdW1lbnQuIFRvIG1ha2Ug
c2FmZVFMVVJMRm9yRG9jdW1lbnRVUkxBbmRSZXNvdXJjZVVSTCgpCi0gICAgICAgIC8vIHdvcmss
IHdlIG5lZWQgdG8gdXNlIHRoZSBRTCBVUkwgbm90IHRoZSBvcmlnaW5hbCBVUkwuCi0gICAgICAg
IGNvbnN0IFVSTCYgZG9jdW1lbnRVUkwgPSBmcmFtZUxvYWRlci5kb2N1bWVudExvYWRlcigpLT5y
ZXNwb25zZSgpLnVybCgpOwotICAgICAgICBtX3Jlc291cmNlUmVxdWVzdC5zZXRVUkwoc2FmZVFM
VVJMRm9yRG9jdW1lbnRVUkxBbmRSZXNvdXJjZVVSTChkb2N1bWVudFVSTCwgdXJsKCkpKTsKLSAg
ICB9Ci0jZW5kaWYKLQotICAgIGlmICghYWNjZXB0KCkuaXNFbXB0eSgpKQotICAgICAgICBtX3Jl
c291cmNlUmVxdWVzdC5zZXRIVFRQQWNjZXB0KGFjY2VwdCgpKTsKLQotICAgIGlmIChpc0NhY2hl
VmFsaWRhdG9yKCkpIHsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlVG9SZXZhbGlk
YXRlID0gbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZTsKLSAgICAgICAgQVNTRVJUKHJlc291cmNlVG9S
ZXZhbGlkYXRlLT5jYW5Vc2VDYWNoZVZhbGlkYXRvcigpKTsKLSAgICAgICAgQVNTRVJUKHJlc291
cmNlVG9SZXZhbGlkYXRlLT5pc0xvYWRlZCgpKTsKLSAgICAgICAgY29uc3QgU3RyaW5nJiBsYXN0
TW9kaWZpZWQgPSByZXNvdXJjZVRvUmV2YWxpZGF0ZS0+cmVzcG9uc2UoKS5odHRwSGVhZGVyRmll
bGQoSFRUUEhlYWRlck5hbWU6Okxhc3RNb2RpZmllZCk7Ci0gICAgICAgIGNvbnN0IFN0cmluZyYg
ZVRhZyA9IHJlc291cmNlVG9SZXZhbGlkYXRlLT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZChI
VFRQSGVhZGVyTmFtZTo6RVRhZyk7Ci0gICAgICAgIGlmICghbGFzdE1vZGlmaWVkLmlzRW1wdHko
KSB8fCAhZVRhZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWNoZWRSZXNvdXJj
ZUxvYWRlci5jYWNoZVBvbGljeSh0eXBlKCkpICE9IENhY2hlUG9saWN5UmVsb2FkKTsKLSAgICAg
ICAgICAgIGlmIChjYWNoZWRSZXNvdXJjZUxvYWRlci5jYWNoZVBvbGljeSh0eXBlKCkpID09IENh
Y2hlUG9saWN5UmV2YWxpZGF0ZSkKLSAgICAgICAgICAgICAgICBtX3Jlc291cmNlUmVxdWVzdC5z
ZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNhY2hlQ29udHJvbCwgIm1heC1hZ2U9
MCIpOwotICAgICAgICAgICAgaWYgKCFsYXN0TW9kaWZpZWQuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgICAgIG1fcmVzb3VyY2VSZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFt
ZTo6SWZNb2RpZmllZFNpbmNlLCBsYXN0TW9kaWZpZWQpOwotICAgICAgICAgICAgaWYgKCFlVGFn
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBtX3Jlc291cmNlUmVxdWVzdC5zZXRIVFRQSGVh
ZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OklmTm9uZU1hdGNoLCBlVGFnKTsKLSAgICAgICAgfQot
ICAgIH0KLQotI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQotICAgIGlmICh0eXBlKCkgPT0gQ2Fj
aGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRjaCB8fCB0eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6Okxp
bmtTdWJyZXNvdXJjZSkKLSAgICAgICAgbV9yZXNvdXJjZVJlcXVlc3Quc2V0SFRUUEhlYWRlckZp
ZWxkKEhUVFBIZWFkZXJOYW1lOjpQdXJwb3NlLCAicHJlZmV0Y2giKTsKLSNlbmRpZgotICAgIG1f
cmVzb3VyY2VSZXF1ZXN0LnNldFByaW9yaXR5KGxvYWRQcmlvcml0eSgpKTsKLQotICAgIGNvbXB1
dGVPcmlnaW4oY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwotCi0gICAgLy8gRklYTUU6IEl0J3MgdW5m
b3J0dW5hdGUgdGhhdCB0aGUgY2FjaGUgbGF5ZXIgYW5kIGJlbG93IGdldCB0byBrbm93IGFueXRo
aW5nIGFib3V0IGZyYWdtZW50IGlkZW50aWZpZXJzLgotICAgIC8vIFdlIHNob3VsZCBsb29rIGlu
dG8gcmVtb3ZpbmcgdGhlIGV4cGVjdGF0aW9uIG9mIHRoYXQga25vd2xlZGdlIGZyb20gdGhlIHBs
YXRmb3JtIG5ldHdvcmsgc3RhY2tzLgotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KG1fcmVz
b3VyY2VSZXF1ZXN0KTsKLSAgICBpZiAoIW1fZnJhZ21lbnRJZGVudGlmaWVyRm9yUmVxdWVzdC5p
c051bGwoKSkgewotICAgICAgICBVUkwgdXJsID0gcmVxdWVzdC51cmwoKTsKLSAgICAgICAgdXJs
LnNldEZyYWdtZW50SWRlbnRpZmllcihtX2ZyYWdtZW50SWRlbnRpZmllckZvclJlcXVlc3QpOwot
ICAgICAgICByZXF1ZXN0LnNldFVSTCh1cmwpOwotICAgICAgICBtX2ZyYWdtZW50SWRlbnRpZmll
ckZvclJlcXVlc3QgPSBTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBtX2xvYWRlciA9IHBsYXRmb3Jt
U3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5sb2FkUmVzb3VyY2UoZnJhbWUsICp0aGlz
LCByZXF1ZXN0LCBvcHRpb25zKTsKLSAgICBpZiAoIW1fbG9hZGVyKSB7Ci0gICAgICAgIGZhaWxC
ZWZvcmVTdGFydGluZygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9zdGF0dXMg
PSBQZW5kaW5nOwotfQotCi12b2lkIENhY2hlZFJlc291cmNlOjpsb2FkRnJvbShjb25zdCBDYWNo
ZWRSZXNvdXJjZSYgcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9u
cywgQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGNhY2hlZFJlc291cmNlTG9hZGVyKQotewotICAgIEFT
U0VSVCh1cmwoKSA9PSByZXNvdXJjZS51cmwoKSk7Ci0gICAgQVNTRVJUKHR5cGUoKSA9PSByZXNv
dXJjZS50eXBlKCkpOwotICAgIEFTU0VSVChyZXNvdXJjZS5zdGF0dXMoKSA9PSBTdGF0dXM6OkNh
Y2hlZCk7Ci0KLSAgICBtX29wdGlvbnMgPSBvcHRpb25zOwotICAgIGNvbXB1dGVPcmlnaW4oY2Fj
aGVkUmVzb3VyY2VMb2FkZXIpOwotCi0gICAgaWYgKGlzQ3Jvc3NPcmlnaW4oKSAmJiBvcHRpb25z
Lm1vZGUgPT0gRmV0Y2hPcHRpb25zOjpNb2RlOjpDb3JzKSB7Ci0gICAgICAgIEFTU0VSVChtX29y
aWdpbik7Ci0gICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgICAgIGlmICghV2ViQ29y
ZTo6cGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKHJlc291cmNlLnJlc3BvbnNlKCksIG1fb3B0aW9u
cy5hbGxvd0NyZWRlbnRpYWxzLCAqbV9vcmlnaW4sIGVycm9yTWVzc2FnZSkpIHsKLSAgICAgICAg
ICAgIHNldFJlc291cmNlRXJyb3IoUmVzb3VyY2VFcnJvcihTdHJpbmcoKSwgMCwgdXJsKCksIGVy
cm9yTWVzc2FnZSwgUmVzb3VyY2VFcnJvcjo6VHlwZTo6QWNjZXNzQ29udHJvbCkpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc2V0Qm9keURhdGFGcm9tKHJl
c291cmNlKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6Y2hlY2tOb3RpZnkoKQotewotICAg
IGlmIChpc0xvYWRpbmcoKSB8fCBzdGlsbE5lZWRzTG9hZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRSZXNvdXJjZUNsaWVudD4gd2Fs
a2VyKG1fY2xpZW50cyk7Ci0gICAgd2hpbGUgKENhY2hlZFJlc291cmNlQ2xpZW50KiBjbGllbnQg
PSB3YWxrZXIubmV4dCgpKQotICAgICAgICBjbGllbnQtPm5vdGlmeUZpbmlzaGVkKHRoaXMpOwot
fQotCi12b2lkIENhY2hlZFJlc291cmNlOjphZGREYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYpCi17
Ci0gICAgQVNTRVJUKGRhdGFCdWZmZXJpbmdQb2xpY3koKSA9PSBCdWZmZXJEYXRhKTsKLX0KLQot
dm9pZCBDYWNoZWRSZXNvdXJjZTo6YWRkRGF0YShjb25zdCBjaGFyKiwgdW5zaWduZWQpCi17Ci0g
ICAgQVNTRVJUKGRhdGFCdWZmZXJpbmdQb2xpY3koKSA9PSBEb05vdEJ1ZmZlckRhdGEpOwotfQot
Ci12b2lkIENhY2hlZFJlc291cmNlOjpmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1ZmZlciopCi17Ci0g
ICAgc2V0TG9hZGluZyhmYWxzZSk7Ci0gICAgY2hlY2tOb3RpZnkoKTsKLX0KLQotdm9pZCBDYWNo
ZWRSZXNvdXJjZTo6ZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OlN0YXR1cyBzdGF0dXMpCi17Ci0gICAg
c2V0U3RhdHVzKHN0YXR1cyk7Ci0gICAgQVNTRVJUKGVycm9yT2NjdXJyZWQoKSk7Ci0gICAgbV9k
YXRhID0gbnVsbHB0cjsKLQotICAgIHNldExvYWRpbmcoZmFsc2UpOwotICAgIGNoZWNrTm90aWZ5
KCk7Ci19Ci0gICAgCi12b2lkIENhY2hlZFJlc291cmNlOjpjYW5jZWxMb2FkKCkKLXsKLSAgICBp
ZiAoIWlzTG9hZGluZygpICYmICFzdGlsbE5lZWRzTG9hZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBzZXRTdGF0dXMoTG9hZEVycm9yKTsKLSAgICBzZXRMb2FkaW5nKGZhbHNlKTsKLSAgICBj
aGVja05vdGlmeSgpOwotfQotCi12b2lkIENhY2hlZFJlc291cmNlOjpmaW5pc2goKQotewotICAg
IGlmICghZXJyb3JPY2N1cnJlZCgpKQotICAgICAgICBtX3N0YXR1cyA9IENhY2hlZDsKLX0KLQot
Ym9vbCBDYWNoZWRSZXNvdXJjZTo6cGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKFNlY3VyaXR5T3Jp
Z2luJiBzZWN1cml0eU9yaWdpbikKLXsKLSAgICBTdHJpbmcgZXJyb3JEZXNjcmlwdGlvbjsKLSAg
ICByZXR1cm4gV2ViQ29yZTo6cGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKHJlc3BvbnNlKCksIHJl
c291cmNlUmVxdWVzdCgpLmFsbG93Q29va2llcygpID8gQWxsb3dTdG9yZWRDcmVkZW50aWFscyA6
IERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFscywgc2VjdXJpdHlPcmlnaW4sIGVycm9yRGVzY3Jp
cHRpb24pOwotfQotCi1ib29sIENhY2hlZFJlc291cmNlOjpwYXNzZXNTYW1lT3JpZ2luUG9saWN5
Q2hlY2soU2VjdXJpdHlPcmlnaW4mIHNlY3VyaXR5T3JpZ2luKQotewotICAgIGlmIChzZWN1cml0
eU9yaWdpbi5jYW5SZXF1ZXN0KHJlc3BvbnNlRm9yU2FtZU9yaWdpblBvbGljeUNoZWNrcygpLnVy
bCgpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIHBhc3Nlc0FjY2Vzc0NvbnRy
b2xDaGVjayhzZWN1cml0eU9yaWdpbik7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldENy
b3NzT3JpZ2luKCkKLXsKLSAgICBBU1NFUlQobV9vcHRpb25zLm1vZGUgIT0gRmV0Y2hPcHRpb25z
OjpNb2RlOjpTYW1lT3JpZ2luKTsKLSAgICBtX3Jlc3BvbnNlVGFpbnRpbmcgPSAobV9vcHRpb25z
Lm1vZGUgPT0gRmV0Y2hPcHRpb25zOjpNb2RlOjpDb3JzKSA/IFJlc291cmNlUmVzcG9uc2U6OlRh
aW50aW5nOjpDb3JzIDogUmVzb3VyY2VSZXNwb25zZTo6VGFpbnRpbmc6Ok9wYXF1ZTsKLX0KLQot
Ym9vbCBDYWNoZWRSZXNvdXJjZTo6aXNDcm9zc09yaWdpbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fcmVzcG9uc2VUYWludGluZyAhPSBSZXNvdXJjZVJlc3BvbnNlOjpUYWludGluZzo6QmFzaWM7
Ci19Ci0KLWJvb2wgQ2FjaGVkUmVzb3VyY2U6OmlzQ2xlYW4oKSBjb25zdAotewotICAgIC8vIGh0
dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2luZnJhc3RydWN0dXJlLmh0bWwj
Y29ycy1zYW1lLW9yaWdpbgotICAgIHJldHVybiAhbG9hZEZhaWxlZE9yQ2FuY2VsZWQoKSAmJiBt
X3Jlc3BvbnNlVGFpbnRpbmcgIT0gUmVzb3VyY2VSZXNwb25zZTo6VGFpbnRpbmc6Ok9wYXF1ZTsK
LX0KLQotYm9vbCBDYWNoZWRSZXNvdXJjZTo6aXNFeHBpcmVkKCkgY29uc3QKLXsKLSAgICBpZiAo
bV9yZXNwb25zZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IGNvbXB1dGVDdXJyZW50QWdlKG1fcmVzcG9uc2UsIG1fcmVzcG9uc2VUaW1lc3RhbXApID4gZnJl
c2huZXNzTGlmZXRpbWUobV9yZXNwb25zZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91
bGRDYWNoZVNjaGVtZUluZGVmaW5pdGVseShjb25zdCBTdHJpbmcmIHNjaGVtZSkKLXsKLSNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc2No
ZW1lLCAiYXBwbGV3ZWJkYXRhIikpCi0gICAgICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi0jaWYg
VVNFKFNPVVApCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHNjaGVtZSwg
InJlc291cmNlIikpCi0gICAgICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi0gICAgcmV0dXJuIGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHNjaGVtZSwgImRhdGEiKTsKLX0KLQotc3RkOjpj
aHJvbm86Om1pY3Jvc2Vjb25kcyBDYWNoZWRSZXNvdXJjZTo6ZnJlc2huZXNzTGlmZXRpbWUoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZXNwb25z
ZS51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpIHsKLSAgICAgICAgU3RyaW5nIHByb3Rv
Y29sID0gcmVzcG9uc2UudXJsKCkucHJvdG9jb2woKTsKLSAgICAgICAgaWYgKCFzaG91bGRDYWNo
ZVNjaGVtZUluZGVmaW5pdGVseShwcm90b2NvbCkpIHsKLSAgICAgICAgICAgIC8vIERvbid0IGNh
Y2hlIG5vbi1IVFRQIG1haW4gcmVzb3VyY2VzIHNpbmNlIHdlIGNhbid0IGNoZWNrIGZvciBmcmVz
aG5lc3MuCi0gICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBjYWNoZSBzdWJyZXNv
dXJjZXMgZWl0aGVyLCBidXQgd2hlbiB3ZSB0cmllZCB0aGlzCi0gICAgICAgICAgICAvLyBpdCBj
YXVzZWQgcGVyZm9ybWFuY2UgYW5kIGZsYWtpbmVzcyBpc3N1ZXMgaW4gb3VyIHRlc3QgaW5mcmFz
dHJ1Y3R1cmUuCi0gICAgICAgICAgICBpZiAobV90eXBlID09IE1haW5SZXNvdXJjZSB8fCBTY2hl
bWVSZWdpc3RyeTo6c2hvdWxkQWx3YXlzUmV2YWxpZGF0ZVVSTFNjaGVtZShwcm90b2NvbCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIDB1czsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBz
dGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzOjptYXgoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29t
cHV0ZUZyZXNobmVzc0xpZmV0aW1lRm9ySFRUUEZhbWlseShyZXNwb25zZSwgbV9yZXNwb25zZVRp
bWVzdGFtcCk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OnJlZGlyZWN0UmVjZWl2ZWQoUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
LXsKLSAgICBtX3JlcXVlc3RlZEZyb21OZXR3b3JraW5nTGF5ZXIgPSB0cnVlOwotICAgIGlmIChy
ZXNwb25zZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUmVkaXJlY3QgdG8g
ZGF0YTogVVJMIHVzZXMgdGhlIGxhc3QgSFRUUCByZXNwb25zZSBmb3IgU09QLgotICAgIGlmIChy
ZXNwb25zZS5pc0hUVFAoKSAmJiByZXF1ZXN0LnVybCgpLnByb3RvY29sSXNEYXRhKCkpCi0gICAg
ICAgIG1fcmVkaXJlY3RSZXNwb25zZUZvclNhbWVPcmlnaW5Qb2xpY3lDaGVja3MgPSByZXNwb25z
ZTsKLQotICAgIHVwZGF0ZVJlZGlyZWN0Q2hhaW5TdGF0dXMobV9yZWRpcmVjdENoYWluQ2FjaGVT
dGF0dXMsIHJlc3BvbnNlKTsKLX0KLQotY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgQ2FjaGVkUmVz
b3VyY2U6OnJlc3BvbnNlRm9yU2FtZU9yaWdpblBvbGljeUNoZWNrcygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fcmVkaXJlY3RSZXNwb25zZUZvclNhbWVPcmlnaW5Qb2xpY3lDaGVja3MuaXNOdWxs
KCkgPyBtX3Jlc3BvbnNlIDogbV9yZWRpcmVjdFJlc3BvbnNlRm9yU2FtZU9yaWdpblBvbGljeUNo
ZWNrczsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0UmVzcG9uc2UoY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgQVNTRVJUKG1fcmVzcG9uc2UudHlwZSgpID09
IFJlc291cmNlUmVzcG9uc2U6OlR5cGU6OkRlZmF1bHQpOwotICAgIG1fcmVzcG9uc2UgPSByZXNw
b25zZTsKLSAgICBtX3Jlc3BvbnNlLnNldFJlZGlyZWN0ZWQobV9yZWRpcmVjdENoYWluQ2FjaGVT
dGF0dXMuc3RhdHVzICE9IFJlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1czo6Tm9SZWRpcmVjdGlvbik7
Ci0KLSAgICBtX3ZhcnlpbmdIZWFkZXJWYWx1ZXMgPSBjb2xsZWN0VmFyeWluZ1JlcXVlc3RIZWFk
ZXJzKG1fcmVzb3VyY2VSZXF1ZXN0LCBtX3Jlc3BvbnNlLCBtX3Nlc3Npb25JRCk7Ci19Ci0KLXZv
aWQgQ2FjaGVkUmVzb3VyY2U6OnJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UpCi17Ci0gICAgc2V0UmVzcG9uc2UocmVzcG9uc2UpOwotICAgIG1fcmVzcG9u
c2VUaW1lc3RhbXAgPSBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKLSAgICBTdHJp
bmcgZW5jb2RpbmcgPSByZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCk7Ci0gICAgaWYgKCFlbmNv
ZGluZy5pc051bGwoKSkKLSAgICAgICAgc2V0RW5jb2RpbmcoZW5jb2RpbmcpOwotfQotCi12b2lk
IENhY2hlZFJlc291cmNlOjpjbGVhckxvYWRlcigpCi17Ci0gICAgQVNTRVJUKG1fbG9hZGVyKTsK
LSAgICBtX2lkZW50aWZpZXJGb3JMb2FkV2l0aG91dFJlc291cmNlTG9hZGVyID0gbV9sb2FkZXIt
PmlkZW50aWZpZXIoKTsKLSAgICBtX2xvYWRlciA9IG51bGxwdHI7Ci0gICAgZGVsZXRlSWZQb3Nz
aWJsZSgpOwotfQotCi12b2lkIENhY2hlZFJlc291cmNlOjphZGRDbGllbnQoQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQqIGNsaWVudCkKLXsKLSAgICBpZiAoYWRkQ2xpZW50VG9TZXQoY2xpZW50KSkKLSAg
ICAgICAgZGlkQWRkQ2xpZW50KGNsaWVudCk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OmRp
ZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50KQotewotICAgIGlmIChtX2Rl
Y29kZWREYXRhRGVsZXRpb25UaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX2RlY29kZWREYXRh
RGVsZXRpb25UaW1lci5zdG9wKCk7Ci0KLSAgICBpZiAobV9jbGllbnRzQXdhaXRpbmdDYWxsYmFj
ay5yZW1vdmUoY2xpZW50KSkKLSAgICAgICAgbV9jbGllbnRzLmFkZChjbGllbnQpOwotICAgIGlm
ICghaXNMb2FkaW5nKCkgJiYgIXN0aWxsTmVlZHNMb2FkKCkpCi0gICAgICAgIGNsaWVudC0+bm90
aWZ5RmluaXNoZWQodGhpcyk7Ci19Ci0KLWJvb2wgQ2FjaGVkUmVzb3VyY2U6OmFkZENsaWVudFRv
U2V0KENhY2hlZFJlc291cmNlQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgaWYgKG1fcHJlbG9hZFJl
c3VsdCA9PSBQcmVsb2FkTm90UmVmZXJlbmNlZCkgewotICAgICAgICBpZiAoaXNMb2FkZWQoKSkK
LSAgICAgICAgICAgIG1fcHJlbG9hZFJlc3VsdCA9IFByZWxvYWRSZWZlcmVuY2VkV2hpbGVDb21w
bGV0ZTsKLSAgICAgICAgZWxzZSBpZiAobV9yZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyKQot
ICAgICAgICAgICAgbV9wcmVsb2FkUmVzdWx0ID0gUHJlbG9hZFJlZmVyZW5jZWRXaGlsZUxvYWRp
bmc7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcHJlbG9hZFJlc3VsdCA9IFByZWxvYWRS
ZWZlcmVuY2VkOwotICAgIH0KLSAgICBpZiAoYWxsb3dzQ2FjaGluZygpICYmICFoYXNDbGllbnRz
KCkgJiYgaW5DYWNoZSgpKQotICAgICAgICBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkuYWRkVG9M
aXZlUmVzb3VyY2VzU2l6ZSgqdGhpcyk7Ci0KLSAgICBpZiAoKG1fdHlwZSA9PSBSYXdSZXNvdXJj
ZSB8fCBtX3R5cGUgPT0gTWFpblJlc291cmNlKSAmJiAhbV9yZXNwb25zZS5pc051bGwoKSAmJiAh
bV9wcm94eVJlc291cmNlKSB7Ci0gICAgICAgIC8vIENlcnRhaW4gcmVzb3VyY2VzIChlc3BlY2lh
bGx5IFhIUnMgYW5kIG1haW4gcmVzb3VyY2VzKSBkbyBjcmF6eSB0aGluZ3MgaWYgYW4gYXN5bmNo
cm9ub3VzIGxvYWQgcmV0dXJucwotICAgICAgICAvLyBzeW5jaHJvbm91c2x5IChlLmcuLCBzY3Jp
cHRzIG1heSBub3QgaGF2ZSBzZXQgYWxsIHRoZSBzdGF0ZSB0aGV5IG5lZWQgdG8gaGFuZGxlIHRo
ZSBsb2FkKS4KLSAgICAgICAgLy8gVGhlcmVmb3JlLCByYXRoZXIgdGhhbiBpbW1lZGlhdGVseSBz
ZW5kaW5nIGNhbGxiYWNrcyBvbiBhIGNhY2hlIGhpdCBsaWtlIG90aGVyIENhY2hlZFJlc291cmNl
cywKLSAgICAgICAgLy8gd2Ugc2NoZWR1bGUgdGhlIGNhbGxiYWNrcyBhbmQgZW5zdXJlIHdlIG5l
dmVyIGZpbmlzaCBzeW5jaHJvbm91c2x5LgotICAgICAgICBBU1NFUlQoIW1fY2xpZW50c0F3YWl0
aW5nQ2FsbGJhY2suY29udGFpbnMoY2xpZW50KSk7Ci0gICAgICAgIG1fY2xpZW50c0F3YWl0aW5n
Q2FsbGJhY2suYWRkKGNsaWVudCwgc3RkOjptYWtlX3VuaXF1ZTxDYWxsYmFjaz4oKnRoaXMsICpj
bGllbnQpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1fY2xpZW50cy5h
ZGQoY2xpZW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6
cmVtb3ZlQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgYXV0byBj
YWxsYmFjayA9IG1fY2xpZW50c0F3YWl0aW5nQ2FsbGJhY2sudGFrZShjbGllbnQpOwotICAgIGlm
IChjYWxsYmFjaykgewotICAgICAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucyhjbGllbnQp
KTsKLSAgICAgICAgY2FsbGJhY2stPmNhbmNlbCgpOwotICAgICAgICBjYWxsYmFjayA9IG51bGxw
dHI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucyhjbGll
bnQpKTsKLSAgICAgICAgbV9jbGllbnRzLnJlbW92ZShjbGllbnQpOwotICAgICAgICBkaWRSZW1v
dmVDbGllbnQoY2xpZW50KTsKLSAgICB9Ci0KLSAgICBpZiAoZGVsZXRlSWZQb3NzaWJsZSgpKSB7
Ci0gICAgICAgIC8vIGB0aGlzYCBvYmplY3QgaXMgZGVhZCBoZXJlLgotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKGhhc0NsaWVudHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byYgbWVtb3J5Q2FjaGUgPSBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCk7Ci0gICAgaWYgKGFs
bG93c0NhY2hpbmcoKSAmJiBpbkNhY2hlKCkpIHsKLSAgICAgICAgbWVtb3J5Q2FjaGUucmVtb3Zl
RnJvbUxpdmVSZXNvdXJjZXNTaXplKCp0aGlzKTsKLSAgICAgICAgbWVtb3J5Q2FjaGUucmVtb3Zl
RnJvbUxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCgqdGhpcyk7Ci0gICAgfQotICAgIGlmICghbV9z
d2l0Y2hpbmdDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNlKQotICAgICAgICBhbGxDbGllbnRz
UmVtb3ZlZCgpOwotICAgIGRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVlZGVkKCk7Ci0KLSAgICBpZiAo
IWFsbG93c0NhY2hpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHJlc3BvbnNlKCku
Y2FjaGVDb250cm9sQ29udGFpbnNOb1N0b3JlKCkgJiYgdXJsKCkucHJvdG9jb2xJcygiaHR0cHMi
KSkgewotICAgICAgICAvLyBSRkMyNjE2IDE0LjkuMjoKLSAgICAgICAgLy8gIm5vLXN0b3JlOiAu
Li4gTVVTVCBtYWtlIGEgYmVzdC1lZmZvcnQgYXR0ZW1wdCB0byByZW1vdmUgdGhlIGluZm9ybWF0
aW9uIGZyb20gdm9sYXRpbGUgc3RvcmFnZSBhcyBwcm9tcHRseSBhcyBwb3NzaWJsZSIKLSAgICAg
ICAgLy8gIi4uLiBIaXN0b3J5IGJ1ZmZlcnMgTUFZIHN0b3JlIHN1Y2ggcmVzcG9uc2VzIGFzIHBh
cnQgb2YgdGhlaXIgbm9ybWFsIG9wZXJhdGlvbi4iCi0gICAgICAgIC8vIFdlIGFsbG93IG5vbi1z
ZWN1cmUgY29udGVudCB0byBiZSByZXVzZWQgaW4gaGlzdG9yeSwgYnV0IHdlIGRvIG5vdCBhbGxv
dyBzZWN1cmUgY29udGVudCB0byBiZSByZXVzZWQuCi0gICAgICAgIG1lbW9yeUNhY2hlLnJlbW92
ZSgqdGhpcyk7Ci0gICAgfQotICAgIG1lbW9yeUNhY2hlLnBydW5lU29vbigpOwotfQotCi12b2lk
IENhY2hlZFJlc291cmNlOjpkZXN0cm95RGVjb2RlZERhdGFJZk5lZWRlZCgpCi17Ci0gICAgaWYg
KCFtX2RlY29kZWRTaXplKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFNZW1vcnlDYWNoZTo6
c2luZ2xldG9uKCkuZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCgpLmNvdW50KCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lci5yZXN0YXJ0KCk7
Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OmRlY29kZWREYXRhRGVsZXRpb25UaW1lckZpcmVk
KCkKLXsKLSAgICBkZXN0cm95RGVjb2RlZERhdGEoKTsKLX0KLQotYm9vbCBDYWNoZWRSZXNvdXJj
ZTo6ZGVsZXRlSWZQb3NzaWJsZSgpCi17Ci0gICAgaWYgKGNhbkRlbGV0ZSgpKSB7Ci0gICAgICAg
IGlmICghaW5DYWNoZSgpKSB7Ci0gICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxEZXN0cm95Q2FjaGVkUmVzb3VyY2UoKnRoaXMpOwotICAgICAgICAgICAgZGVsZXRlIHRo
aXM7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9k
YXRhKQotICAgICAgICAgICAgbV9kYXRhLT5oaW50TWVtb3J5Tm90TmVlZGVkU29vbigpOwotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldERlY29k
ZWRTaXplKHVuc2lnbmVkIHNpemUpCi17Ci0gICAgaWYgKHNpemUgPT0gbV9kZWNvZGVkU2l6ZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IGRlbHRhID0gc2l6ZSAtIG1fZGVjb2RlZFNpemU7
Ci0KLSAgICAvLyBUaGUgb2JqZWN0IG11c3QgYmUgbW92ZWQgdG8gYSBkaWZmZXJlbnQgcXVldWUs
IHNpbmNlIGl0cyBzaXplIGhhcyBiZWVuIGNoYW5nZWQuCi0gICAgLy8gUmVtb3ZlIGJlZm9yZSB1
cGRhdGluZyBtX2RlY29kZWRTaXplLCBzbyB3ZSBmaW5kIHRoZSByZXNvdXJjZSBpbiB0aGUgY29y
cmVjdCBMUlUgbGlzdC4KLSAgICBpZiAoYWxsb3dzQ2FjaGluZygpICYmIGluQ2FjaGUoKSkKLSAg
ICAgICAgTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpLnJlbW92ZUZyb21MUlVMaXN0KCp0aGlzKTsK
LSAgICAKLSAgICBtX2RlY29kZWRTaXplID0gc2l6ZTsKLSAgIAotICAgIGlmIChhbGxvd3NDYWNo
aW5nKCkgJiYgaW5DYWNoZSgpKSB7Ci0gICAgICAgIGF1dG8mIG1lbW9yeUNhY2hlID0gTWVtb3J5
Q2FjaGU6OnNpbmdsZXRvbigpOwotICAgICAgICAvLyBOb3cgaW5zZXJ0IGludG8gdGhlIG5ldyBM
UlUgbGlzdC4KLSAgICAgICAgbWVtb3J5Q2FjaGUuaW5zZXJ0SW5MUlVMaXN0KCp0aGlzKTsKLSAg
ICAgICAgCi0gICAgICAgIC8vIEluc2VydCBpbnRvIG9yIHJlbW92ZSBmcm9tIHRoZSBsaXZlIGRl
Y29kZWQgbGlzdCBpZiBuZWNlc3NhcnkuCi0gICAgICAgIC8vIFdoZW4gaW5zZXJ0aW5nIGludG8g
dGhlIExpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCBpdCBpcyBwb3NzaWJsZQotICAgICAgICAvLyB0
aGF0IHRoZSBtX2xhc3REZWNvZGVkQWNjZXNzVGltZSBpcyBzdGlsbCB6ZXJvIG9yIHNtYWxsZXIg
dGhhbgotICAgICAgICAvLyB0aGUgbV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWUgb2YgdGhlIGN1cnJl
bnQgbGlzdCBoZWFkLiBUaGlzIGlzIGEKLSAgICAgICAgLy8gdmlvbGF0aW9uIG9mIHRoZSBpbnZh
cmlhbnQgdGhhdCB0aGUgbGlzdCBpcyB0byBiZSBrZXB0IHNvcnRlZAotICAgICAgICAvLyBieSBh
Y2Nlc3MgdGltZS4gVGhlIHdlYWtlbmluZyBvZiB0aGUgaW52YXJpYW50IGRvZXMgbm90IHBvc2UK
LSAgICAgICAgLy8gYSBwcm9ibGVtLiBGb3IgbW9yZSBkZXRhaWxzIHBsZWFzZSBzZWU6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDIwOQotICAgICAgICBib29sIGlu
TGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0ID0gbWVtb3J5Q2FjaGUuaW5MaXZlRGVjb2RlZFJlc291
cmNlc0xpc3QoKnRoaXMpOwotICAgICAgICBpZiAobV9kZWNvZGVkU2l6ZSAmJiAhaW5MaXZlRGVj
b2RlZFJlc291cmNlc0xpc3QgJiYgaGFzQ2xpZW50cygpKQotICAgICAgICAgICAgbWVtb3J5Q2Fj
aGUuaW5zZXJ0SW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QoKnRoaXMpOwotICAgICAgICBlbHNl
IGlmICghbV9kZWNvZGVkU2l6ZSAmJiBpbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCkKLSAgICAg
ICAgICAgIG1lbW9yeUNhY2hlLnJlbW92ZUZyb21MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QoKnRo
aXMpOwotCi0gICAgICAgIC8vIFVwZGF0ZSB0aGUgY2FjaGUncyBzaXplIHRvdGFscy4KLSAgICAg
ICAgbWVtb3J5Q2FjaGUuYWRqdXN0U2l6ZShoYXNDbGllbnRzKCksIGRlbHRhKTsKLSAgICB9Ci19
Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldEVuY29kZWRTaXplKHVuc2lnbmVkIHNpemUpCi17
Ci0gICAgaWYgKHNpemUgPT0gbV9lbmNvZGVkU2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aW50IGRlbHRhID0gc2l6ZSAtIG1fZW5jb2RlZFNpemU7Ci0KLSAgICAvLyBUaGUgb2JqZWN0IG11
c3QgYmUgbW92ZWQgdG8gYSBkaWZmZXJlbnQgcXVldWUsIHNpbmNlIGl0cyBzaXplIGhhcyBiZWVu
IGNoYW5nZWQuCi0gICAgLy8gUmVtb3ZlIGJlZm9yZSB1cGRhdGluZyBtX2VuY29kZWRTaXplLCBz
byB3ZSBmaW5kIHRoZSByZXNvdXJjZSBpbiB0aGUgY29ycmVjdCBMUlUgbGlzdC4KLSAgICBpZiAo
YWxsb3dzQ2FjaGluZygpICYmIGluQ2FjaGUoKSkKLSAgICAgICAgTWVtb3J5Q2FjaGU6OnNpbmds
ZXRvbigpLnJlbW92ZUZyb21MUlVMaXN0KCp0aGlzKTsKLQotICAgIG1fZW5jb2RlZFNpemUgPSBz
aXplOwotCi0gICAgaWYgKGFsbG93c0NhY2hpbmcoKSAmJiBpbkNhY2hlKCkpIHsKLSAgICAgICAg
YXV0byYgbWVtb3J5Q2FjaGUgPSBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCk7Ci0gICAgICAgIG1l
bW9yeUNhY2hlLmluc2VydEluTFJVTGlzdCgqdGhpcyk7Ci0gICAgICAgIG1lbW9yeUNhY2hlLmFk
anVzdFNpemUoaGFzQ2xpZW50cygpLCBkZWx0YSk7Ci0gICAgfQotfQotCi12b2lkIENhY2hlZFJl
c291cmNlOjpkaWRBY2Nlc3NEZWNvZGVkRGF0YShkb3VibGUgdGltZVN0YW1wKQotewotICAgIG1f
bGFzdERlY29kZWRBY2Nlc3NUaW1lID0gdGltZVN0YW1wOwotICAgIAotICAgIGlmIChhbGxvd3ND
YWNoaW5nKCkgJiYgaW5DYWNoZSgpKSB7Ci0gICAgICAgIGF1dG8mIG1lbW9yeUNhY2hlID0gTWVt
b3J5Q2FjaGU6OnNpbmdsZXRvbigpOwotICAgICAgICBpZiAobWVtb3J5Q2FjaGUuaW5MaXZlRGVj
b2RlZFJlc291cmNlc0xpc3QoKnRoaXMpKSB7Ci0gICAgICAgICAgICBtZW1vcnlDYWNoZS5yZW1v
dmVGcm9tTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KCp0aGlzKTsKLSAgICAgICAgICAgIG1lbW9y
eUNhY2hlLmluc2VydEluTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KCp0aGlzKTsKLSAgICAgICAg
fQotICAgICAgICBtZW1vcnlDYWNoZS5wcnVuZVNvb24oKTsKLSAgICB9Ci19Ci0gICAgCi12b2lk
IENhY2hlZFJlc291cmNlOjpzZXRSZXNvdXJjZVRvUmV2YWxpZGF0ZShDYWNoZWRSZXNvdXJjZSog
cmVzb3VyY2UpIAoteyAKLSAgICBBU1NFUlQocmVzb3VyY2UpOwotICAgIEFTU0VSVCghbV9yZXNv
dXJjZVRvUmV2YWxpZGF0ZSk7Ci0gICAgQVNTRVJUKHJlc291cmNlICE9IHRoaXMpOwotICAgIEFT
U0VSVChtX2hhbmRsZXNUb1JldmFsaWRhdGUuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQocmVzb3Vy
Y2UtPnR5cGUoKSA9PSB0eXBlKCkpOwotICAgIEFTU0VSVCghcmVzb3VyY2UtPm1fcHJveHlSZXNv
dXJjZSk7Ci0KLSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2UgJXAgc2V0
UmVzb3VyY2VUb1JldmFsaWRhdGUgJXAiLCB0aGlzLCByZXNvdXJjZSk7Ci0KLSAgICByZXNvdXJj
ZS0+bV9wcm94eVJlc291cmNlID0gdGhpczsKLSAgICBtX3Jlc291cmNlVG9SZXZhbGlkYXRlID0g
cmVzb3VyY2U7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OmNsZWFyUmVzb3VyY2VUb1JldmFs
aWRhdGUoKSAKLXsKLSAgICBBU1NFUlQobV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSk7Ci0gICAgQVNT
RVJUKG1fcmVzb3VyY2VUb1JldmFsaWRhdGUtPm1fcHJveHlSZXNvdXJjZSA9PSB0aGlzKTsKLQot
ICAgIGlmIChtX3N3aXRjaGluZ0NsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fcmVzb3VyY2VUb1JldmFsaWRhdGUtPm1fcHJveHlSZXNvdXJjZSA9
IG51bGxwdHI7Ci0gICAgbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZS0+ZGVsZXRlSWZQb3NzaWJsZSgp
OwotCi0gICAgbV9oYW5kbGVzVG9SZXZhbGlkYXRlLmNsZWFyKCk7Ci0gICAgbV9yZXNvdXJjZVRv
UmV2YWxpZGF0ZSA9IG51bGxwdHI7Ci0gICAgZGVsZXRlSWZQb3NzaWJsZSgpOwotfQotICAgIAot
dm9pZCBDYWNoZWRSZXNvdXJjZTo6c3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSgp
Ci17Ci0gICAgQVNTRVJUKG1fcmVzb3VyY2VUb1JldmFsaWRhdGUpOwotICAgIEFTU0VSVChtX3Jl
c291cmNlVG9SZXZhbGlkYXRlLT5pbkNhY2hlKCkpOwotICAgIEFTU0VSVCghaW5DYWNoZSgpKTsK
LQotICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZWRSZXNvdXJjZSAlcCBzd2l0Y2hDbGll
bnRzVG9SZXZhbGlkYXRlZFJlc291cmNlICVwIiwgdGhpcywgbV9yZXNvdXJjZVRvUmV2YWxpZGF0
ZSk7Ci0KLSAgICBtX3N3aXRjaGluZ0NsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UgPSB0cnVl
OwotICAgIGZvciAoYXV0byYgaGFuZGxlIDogbV9oYW5kbGVzVG9SZXZhbGlkYXRlKSB7Ci0gICAg
ICAgIGhhbmRsZS0+bV9yZXNvdXJjZSA9IG1fcmVzb3VyY2VUb1JldmFsaWRhdGU7Ci0gICAgICAg
IG1fcmVzb3VyY2VUb1JldmFsaWRhdGUtPnJlZ2lzdGVySGFuZGxlKGhhbmRsZSk7Ci0gICAgICAg
IC0tbV9oYW5kbGVDb3VudDsKLSAgICB9Ci0gICAgQVNTRVJUKCFtX2hhbmRsZUNvdW50KTsKLSAg
ICBtX2hhbmRsZXNUb1JldmFsaWRhdGUuY2xlYXIoKTsKLQotICAgIFZlY3RvcjxDYWNoZWRSZXNv
dXJjZUNsaWVudCo+IGNsaWVudHNUb01vdmU7Ci0gICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fY2xp
ZW50cykgewotICAgICAgICBDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50ID0gZW50cnkua2V5
OwotICAgICAgICB1bnNpZ25lZCBjb3VudCA9IGVudHJ5LnZhbHVlOwotICAgICAgICB3aGlsZSAo
Y291bnQpIHsKLSAgICAgICAgICAgIGNsaWVudHNUb01vdmUuYXBwZW5kKGNsaWVudCk7Ci0gICAg
ICAgICAgICAtLWNvdW50OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChhdXRvJiBjbGll
bnQgOiBjbGllbnRzVG9Nb3ZlKQotICAgICAgICByZW1vdmVDbGllbnQoY2xpZW50KTsKLSAgICBB
U1NFUlQobV9jbGllbnRzLmlzRW1wdHkoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNs
aWVudHNUb01vdmUpCi0gICAgICAgIG1fcmVzb3VyY2VUb1JldmFsaWRhdGUtPmFkZENsaWVudFRv
U2V0KGNsaWVudCk7Ci0gICAgZm9yIChhdXRvJiBjbGllbnQgOiBjbGllbnRzVG9Nb3ZlKSB7Ci0g
ICAgICAgIC8vIENhbGxpbmcgZGlkQWRkQ2xpZW50IG1heSBkbyBhbnl0aGluZywgaW5jbHVkaW5n
IHRyeWluZyB0byBjYW5jZWwgcmV2YWxpZGF0aW9uLgotICAgICAgICAvLyBBc3NlcnQgdGhhdCBp
dCBkaWRuJ3Qgc3VjY2VlZC4KLSAgICAgICAgQVNTRVJUKG1fcmVzb3VyY2VUb1JldmFsaWRhdGUp
OwotICAgICAgICAvLyBDYWxsaW5nIGRpZEFkZENsaWVudCBmb3IgYSBjbGllbnQgbWF5IGVuZCB1
cCByZW1vdmluZyBhbm90aGVyIGNsaWVudC4gSW4gdGhhdCBjYXNlIGl0IHdvbid0IGJlIGluIHRo
ZSBzZXQgYW55bW9yZS4KLSAgICAgICAgaWYgKG1fcmVzb3VyY2VUb1JldmFsaWRhdGUtPm1fY2xp
ZW50cy5jb250YWlucyhjbGllbnQpKQotICAgICAgICAgICAgbV9yZXNvdXJjZVRvUmV2YWxpZGF0
ZS0+ZGlkQWRkQ2xpZW50KGNsaWVudCk7Ci0gICAgfQotICAgIG1fc3dpdGNoaW5nQ2xpZW50c1Rv
UmV2YWxpZGF0ZWRSZXNvdXJjZSA9IGZhbHNlOwotfQotCi12b2lkIENhY2hlZFJlc291cmNlOjp1
cGRhdGVSZXNwb25zZUFmdGVyUmV2YWxpZGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHZh
bGlkYXRpbmdSZXNwb25zZSkKLXsKLSAgICBtX3Jlc3BvbnNlVGltZXN0YW1wID0gc3RkOjpjaHJv
bm86OnN5c3RlbV9jbG9jazo6bm93KCk7Ci0KLSAgICB1cGRhdGVSZXNwb25zZUhlYWRlcnNBZnRl
clJldmFsaWRhdGlvbihtX3Jlc3BvbnNlLCB2YWxpZGF0aW5nUmVzcG9uc2UpOwotfQotCi12b2lk
IENhY2hlZFJlc291cmNlOjpyZWdpc3RlckhhbmRsZShDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2Uq
IGgpCi17Ci0gICAgKyttX2hhbmRsZUNvdW50OwotICAgIGlmIChtX3Jlc291cmNlVG9SZXZhbGlk
YXRlKQotICAgICAgICBtX2hhbmRsZXNUb1JldmFsaWRhdGUuYWRkKGgpOwotfQotCi12b2lkIENh
Y2hlZFJlc291cmNlOjp1bnJlZ2lzdGVySGFuZGxlKENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSog
aCkKLXsKLSAgICBBU1NFUlQobV9oYW5kbGVDb3VudCA+IDApOwotICAgIC0tbV9oYW5kbGVDb3Vu
dDsKLQotICAgIGlmIChtX3Jlc291cmNlVG9SZXZhbGlkYXRlKQotICAgICAgICAgbV9oYW5kbGVz
VG9SZXZhbGlkYXRlLnJlbW92ZShoKTsKLQotICAgIGlmICghbV9oYW5kbGVDb3VudCkKLSAgICAg
ICAgZGVsZXRlSWZQb3NzaWJsZSgpOwotfQotCi1ib29sIENhY2hlZFJlc291cmNlOjpjYW5Vc2VD
YWNoZVZhbGlkYXRvcigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fbG9hZGluZyB8fCBlcnJvck9jY3Vy
cmVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX3Jlc3BvbnNlLmNhY2hl
Q29udHJvbENvbnRhaW5zTm9TdG9yZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0
dXJuIG1fcmVzcG9uc2UuaGFzQ2FjaGVWYWxpZGF0b3JGaWVsZHMoKTsKLX0KLQotQ2FjaGVkUmVz
b3VyY2U6OlJldmFsaWRhdGlvbkRlY2lzaW9uIENhY2hlZFJlc291cmNlOjptYWtlUmV2YWxpZGF0
aW9uRGVjaXNpb24oQ2FjaGVQb2xpY3kgY2FjaGVQb2xpY3kpIGNvbnN0Ci17ICAgIAotICAgIHN3
aXRjaCAoY2FjaGVQb2xpY3kpIHsKLSAgICBjYXNlIENhY2hlUG9saWN5SGlzdG9yeUJ1ZmZlcjoK
LSAgICAgICAgcmV0dXJuIFJldmFsaWRhdGlvbkRlY2lzaW9uOjpObzsKLQotICAgIGNhc2UgQ2Fj
aGVQb2xpY3lSZWxvYWQ6Ci0gICAgY2FzZSBDYWNoZVBvbGljeVJldmFsaWRhdGU6Ci0gICAgICAg
IHJldHVybiBSZXZhbGlkYXRpb25EZWNpc2lvbjo6WWVzRHVlVG9DYWNoZVBvbGljeTsKLQotICAg
IGNhc2UgQ2FjaGVQb2xpY3lWZXJpZnk6Ci0gICAgICAgIGlmIChtX3Jlc3BvbnNlLmNhY2hlQ29u
dHJvbENvbnRhaW5zTm9DYWNoZSgpKQotICAgICAgICAgICAgcmV0dXJuIFJldmFsaWRhdGlvbkRl
Y2lzaW9uOjpZZXNEdWVUb05vQ2FjaGU7Ci0gICAgICAgIC8vIEZJWE1FOiBDYWNoZS1Db250cm9s
Om5vLXN0b3JlIHNob3VsZCBwcmV2ZW50IHN0b3JpbmcsIG5vdCByZXVzZS4KLSAgICAgICAgaWYg
KG1fcmVzcG9uc2UuY2FjaGVDb250cm9sQ29udGFpbnNOb1N0b3JlKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gUmV2YWxpZGF0aW9uRGVjaXNpb246Olllc0R1ZVRvTm9TdG9yZTsKLQotICAgICAgICBp
ZiAoaXNFeHBpcmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gUmV2YWxpZGF0aW9uRGVjaXNpb246
Olllc0R1ZVRvRXhwaXJlZDsKLQotICAgICAgICByZXR1cm4gUmV2YWxpZGF0aW9uRGVjaXNpb246
Ok5vOwotICAgIH07Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFJldmFs
aWRhdGlvbkRlY2lzaW9uOjpObzsKLX0KLQotYm9vbCBDYWNoZWRSZXNvdXJjZTo6cmVkaXJlY3RD
aGFpbkFsbG93c1JldXNlKFJldXNlRXhwaXJlZFJlZGlyZWN0aW9uT3JOb3QgcmV1c2VFeHBpcmVk
UmVkaXJlY3Rpb24pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnJlZGlyZWN0Q2hhaW5B
bGxvd3NSZXVzZShtX3JlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1cywgcmV1c2VFeHBpcmVkUmVkaXJl
Y3Rpb24pOwotfQotCi1ib29sIENhY2hlZFJlc291cmNlOjp2YXJ5SGVhZGVyVmFsdWVzTWF0Y2go
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBDYWNoZWRSZXNvdXJjZUxvYWRl
ciYgY2FjaGVkUmVzb3VyY2VMb2FkZXIpCi17Ci0gICAgaWYgKG1fdmFyeWluZ0hlYWRlclZhbHVl
cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUmVzb3VyY2VSZXF1ZXN0
IHJlcXVlc3RXaXRoRnVsbEhlYWRlcnMocmVxdWVzdCk7Ci0gICAgYWRkQWRkaXRpb25hbFJlcXVl
c3RIZWFkZXJzVG9SZXF1ZXN0KHJlcXVlc3RXaXRoRnVsbEhlYWRlcnMsIGNhY2hlZFJlc291cmNl
TG9hZGVyLCAqdGhpcyk7Ci0KLSAgICByZXR1cm4gdmVyaWZ5VmFyeWluZ1JlcXVlc3RIZWFkZXJz
KG1fdmFyeWluZ0hlYWRlclZhbHVlcywgcmVxdWVzdFdpdGhGdWxsSGVhZGVycywgbV9zZXNzaW9u
SUQpOwotfQotCi11bnNpZ25lZCBDYWNoZWRSZXNvdXJjZTo6b3ZlcmhlYWRTaXplKCkgY29uc3QK
LXsKLSAgICBzdGF0aWMgY29uc3QgaW50IGtBdmVyYWdlQ2xpZW50c0hhc2hNYXBTaXplID0gMzg0
OwotICAgIHJldHVybiBzaXplb2YoQ2FjaGVkUmVzb3VyY2UpICsgbV9yZXNwb25zZS5tZW1vcnlV
c2FnZSgpICsga0F2ZXJhZ2VDbGllbnRzSGFzaE1hcFNpemUgKyBtX3Jlc291cmNlUmVxdWVzdC51
cmwoKS5zdHJpbmcoKS5sZW5ndGgoKSAqIDI7Ci19Ci0KLWJvb2wgQ2FjaGVkUmVzb3VyY2U6OmFy
ZUFsbENsaWVudHNYTUxIdHRwUmVxdWVzdHMoKSBjb25zdAotewotICAgIGlmICh0eXBlKCkgIT0g
UmF3UmVzb3VyY2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvciAoYXV0byYgY2xp
ZW50IDogbV9jbGllbnRzKSB7Ci0gICAgICAgIGlmICghY2xpZW50LmtleS0+aXNYTUxIdHRwUmVx
dWVzdCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0TG9hZFByaW9yaXR5KGNvbnN0IE9wdGlv
bmFsPFJlc291cmNlTG9hZFByaW9yaXR5PiYgbG9hZFByaW9yaXR5KQotewotICAgIGlmIChsb2Fk
UHJpb3JpdHkpCi0gICAgICAgIG1fbG9hZFByaW9yaXR5ID0gbG9hZFByaW9yaXR5LnZhbHVlKCk7
Ci0gICAgZWxzZQotICAgICAgICBtX2xvYWRQcmlvcml0eSA9IGRlZmF1bHRQcmlvcml0eUZvclJl
c291cmNlVHlwZSh0eXBlKCkpOwotfQotCi1pbmxpbmUgQ2FjaGVkUmVzb3VyY2U6OkNhbGxiYWNr
OjpDYWxsYmFjayhDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UsIENhY2hlZFJlc291cmNlQ2xpZW50
JiBjbGllbnQpCi0gICAgOiBtX3Jlc291cmNlKHJlc291cmNlKQotICAgICwgbV9jbGllbnQoY2xp
ZW50KQotICAgICwgbV90aW1lcigqdGhpcywgJkNhbGxiYWNrOjp0aW1lckZpcmVkKQotewotICAg
IG1fdGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi1pbmxpbmUgdm9pZCBDYWNoZWRSZXNvdXJj
ZTo6Q2FsbGJhY2s6OmNhbmNlbCgpCi17Ci0gICAgaWYgKG1fdGltZXIuaXNBY3RpdmUoKSkKLSAg
ICAgICAgbV90aW1lci5zdG9wKCk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OkNhbGxiYWNr
Ojp0aW1lckZpcmVkKCkKLXsKLSAgICBtX3Jlc291cmNlLmRpZEFkZENsaWVudCgmbV9jbGllbnQp
OwotfQotCi0jaWYgVVNFKEZPVU5EQVRJT04pIHx8IFVTRShTT1VQKQotCi12b2lkIENhY2hlZFJl
c291cmNlOjp0cnlSZXBsYWNlRW5jb2RlZERhdGEoU2hhcmVkQnVmZmVyJiBuZXdCdWZmZXIpCi17
Ci0gICAgaWYgKCFtX2RhdGEpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoIW1heVRy
eVJlcGxhY2VFbmNvZGVkRGF0YSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBoYXZl
IHRvIGRvIHRoZSBtZW1jbXAgYmVjYXVzZSB3ZSBjYW4ndCB0ZWxsIGlmIHRoZSByZXBsYWNlbWVu
dCBmaWxlIGJhY2tlZCBkYXRhIGlzIGZvciB0aGUKLSAgICAvLyBzYW1lIHJlc291cmNlIG9yIGlm
IHdlIG1hZGUgYSBzZWNvbmQgcmVxdWVzdCB3aXRoIHRoZSBzYW1lIFVSTCB3aGljaCBnYXZlIHVz
IGEgZGlmZmVyZW50Ci0gICAgLy8gcmVzb3VyY2UuIFdlIGhhdmUgc2VlbiB0aGlzIGhhcHBlbiBm
b3IgY2FjaGVkIFBPU1QgcmVzb3VyY2VzLgotICAgIGlmIChtX2RhdGEtPnNpemUoKSAhPSBuZXdC
dWZmZXIuc2l6ZSgpIHx8IG1lbWNtcChtX2RhdGEtPmRhdGEoKSwgbmV3QnVmZmVyLmRhdGEoKSwg
bV9kYXRhLT5zaXplKCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9kYXRhLT50cnlS
ZXBsYWNlQ29udGVudHNXaXRoUGxhdGZvcm1CdWZmZXIobmV3QnVmZmVyKSkKLSAgICAgICAgZGlk
UmVwbGFjZVNoYXJlZEJ1ZmZlckNvbnRlbnRzKCk7Ci19Ci0KLSNlbmRpZgotCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA1NGI5NTdkMWJiM2M1NzlkNWY5OTdkYzlkODlkMzVhYjhhNTczM2E2Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAw
ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1w
aS1oZC5tcGcuZGUpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxl
ckBrZGUub3JnPgotICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2Vp
bmlnQGdtYWlsLmNvbSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ci0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSov
Ci0KLSNpZm5kZWYgQ2FjaGVkUmVzb3VyY2VfaAotI2RlZmluZSBDYWNoZWRSZXNvdXJjZV9oCi0K
LSNpbmNsdWRlICJDYWNoZVBvbGljeS5oIgotI2luY2x1ZGUgIkNhY2hlVmFsaWRhdGlvbi5oIgot
I2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgi
Ci0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxv
YWRlck9wdGlvbnMuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJS
ZXNvdXJjZVJlc3BvbnNlLmgiCi0jaW5jbHVkZSAiU2Vzc2lvbklELmgiCi0jaW5jbHVkZSAiVGlt
ZXIuaCIKLSNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+
Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIE1lbW9yeUNhY2hlOwotY2xhc3MgQ2FjaGVk
UmVzb3VyY2VDbGllbnQ7Ci1jbGFzcyBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2U7Ci1jbGFzcyBD
YWNoZWRSZXNvdXJjZUxvYWRlcjsKLWNsYXNzIEluc3BlY3RvclJlc291cmNlOwotY2xhc3MgU2Vj
dXJpdHlPcmlnaW47Ci1jbGFzcyBTaGFyZWRCdWZmZXI7Ci1jbGFzcyBTdWJyZXNvdXJjZUxvYWRl
cjsKLWNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7Ci0KLS8vIEEgcmVzb3VyY2UgdGhhdCBpcyBo
ZWxkIGluIHRoZSBjYWNoZS4gQ2xhc3NlcyB3aG8gd2FudCB0byB1c2UgdGhpcyBvYmplY3Qgc2hv
dWxkIGRlcml2ZQotLy8gZnJvbSBDYWNoZWRSZXNvdXJjZUNsaWVudCwgdG8gZ2V0IHRoZSBmdW5j
dGlvbiBjYWxscyBpbiBjYXNlIHRoZSByZXF1ZXN0ZWQgZGF0YSBoYXMgYXJyaXZlZC4KLS8vIFRo
aXMgY2xhc3MgYWxzbyBkb2VzIHRoZSBhY3R1YWwgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBsb2Fk
ZXIgdG8gb2J0YWluIHRoZSByZXNvdXJjZSBmcm9tIHRoZSBuZXR3b3JrLgotY2xhc3MgQ2FjaGVk
UmVzb3VyY2UgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENhY2hlZFJlc291cmNlKTsgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgZnJpZW5kIGNsYXNzIE1lbW9yeUNhY2hlOwotICAg
IGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JSZXNvdXJjZTsKLSAgICAKLXB1YmxpYzoKLSAgICBlbnVt
IFR5cGUgewotICAgICAgICBNYWluUmVzb3VyY2UsCi0gICAgICAgIEltYWdlUmVzb3VyY2UsCi0g
ICAgICAgIENTU1N0eWxlU2hlZXQsCi0gICAgICAgIFNjcmlwdCwKLSAgICAgICAgRm9udFJlc291
cmNlLAotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgICAgIFNWR0ZvbnRSZXNvdXJjZSwKLSNl
bmRpZgotICAgICAgICBNZWRpYVJlc291cmNlLAotICAgICAgICBSYXdSZXNvdXJjZSwKLSAgICAg
ICAgU1ZHRG9jdW1lbnRSZXNvdXJjZQotI2lmIEVOQUJMRShYU0xUKQotICAgICAgICAsIFhTTFN0
eWxlU2hlZXQKLSNlbmRpZgotI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQotICAgICAgICAsIExp
bmtQcmVmZXRjaAotICAgICAgICAsIExpbmtTdWJyZXNvdXJjZQotI2VuZGlmCi0jaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQotICAgICAgICAsIFRleHRUcmFja1Jlc291cmNlCi0jZW5kaWYKLSAgICB9
OwotCi0gICAgZW51bSBTdGF0dXMgewotICAgICAgICBVbmtub3duLCAgICAgIC8vIGxldCBjYWNo
ZSBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIGl0Ci0gICAgICAgIFBlbmRpbmcsICAgICAgLy8gb25s
eSBwYXJ0aWFsbHkgbG9hZGVkCi0gICAgICAgIENhY2hlZCwgICAgICAgLy8gcmVndWxhciBjYXNl
Ci0gICAgICAgIExvYWRFcnJvciwKLSAgICAgICAgRGVjb2RlRXJyb3IKLSAgICB9OwotCi0gICAg
Q2FjaGVkUmVzb3VyY2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgVHlwZSwgU2Vzc2lvbklEKTsK
LSAgICB2aXJ0dWFsIH5DYWNoZWRSZXNvdXJjZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIGxvYWQo
Q2FjaGVkUmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKLQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmKSB7IH0KLSAgICB2aXJ0
dWFsIFN0cmluZyBlbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAgdmly
dHVhbCBjb25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKiB0ZXh0UmVzb3VyY2VEZWNvZGVyKCkgY29u
c3QgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIHZpcnR1YWwgdm9pZCBhZGREYXRhQnVmZmVyKFNo
YXJlZEJ1ZmZlciYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGREYXRhKGNvbnN0IGNoYXIqIGRhdGEs
IHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgdmlydHVhbCB2b2lkIGZpbmlzaExvYWRpbmcoU2hhcmVk
QnVmZmVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGVycm9yKENhY2hlZFJlc291cmNlOjpTdGF0dXMp
OwotCi0gICAgdm9pZCBzZXRSZXNvdXJjZUVycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9y
KSB7IG1fZXJyb3IgPSBlcnJvcjsgfQotICAgIGNvbnN0IFJlc291cmNlRXJyb3ImIHJlc291cmNl
RXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkSWdub3JlSFRUUFN0YXR1c0NvZGVFcnJvcnMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQot
Ci0gICAgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QoKSB7IHJldHVybiBtX3Jlc291
cmNlUmVxdWVzdDsgfQotICAgIGNvbnN0IFVSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV9yZXNv
dXJjZVJlcXVlc3QudXJsKCk7fQotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCi0gICAg
Y29uc3QgU3RyaW5nJiBjYWNoZVBhcnRpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VS
ZXF1ZXN0LmNhY2hlUGFydGl0aW9uKCk7IH0KLSNlbmRpZgotICAgIFNlc3Npb25JRCBzZXNzaW9u
SUQoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25JRDsgfQotICAgIFR5cGUgdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1fdHlwZSk7IH0KLSAgICAKLSAgICBSZXNvdXJj
ZUxvYWRQcmlvcml0eSBsb2FkUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiBtX2xvYWRQcmlvcml0
eTsgfQotICAgIHZvaWQgc2V0TG9hZFByaW9yaXR5KGNvbnN0IE9wdGlvbmFsPFJlc291cmNlTG9h
ZFByaW9yaXR5PiYpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDbGllbnQoQ2FjaGVk
UmVzb3VyY2VDbGllbnQqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUNsaWVudChD
YWNoZWRSZXNvdXJjZUNsaWVudCopOwotICAgIGJvb2wgaGFzQ2xpZW50cygpIGNvbnN0IHsgcmV0
dXJuICFtX2NsaWVudHMuaXNFbXB0eSgpIHx8ICFtX2NsaWVudHNBd2FpdGluZ0NhbGxiYWNrLmlz
RW1wdHkoKTsgfQotICAgIGJvb2wgaGFzQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50KiBjbGll
bnQpIHsgcmV0dXJuIG1fY2xpZW50cy5jb250YWlucyhjbGllbnQpIHx8IG1fY2xpZW50c0F3YWl0
aW5nQ2FsbGJhY2suY29udGFpbnMoY2xpZW50KTsgfQotICAgIGJvb2wgZGVsZXRlSWZQb3NzaWJs
ZSgpOwotCi0gICAgZW51bSBQcmVsb2FkUmVzdWx0IHsKLSAgICAgICAgUHJlbG9hZE5vdFJlZmVy
ZW5jZWQsCi0gICAgICAgIFByZWxvYWRSZWZlcmVuY2VkLAotICAgICAgICBQcmVsb2FkUmVmZXJl
bmNlZFdoaWxlTG9hZGluZywKLSAgICAgICAgUHJlbG9hZFJlZmVyZW5jZWRXaGlsZUNvbXBsZXRl
Ci0gICAgfTsKLSAgICBQcmVsb2FkUmVzdWx0IHByZWxvYWRSZXN1bHQoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxQcmVsb2FkUmVzdWx0PihtX3ByZWxvYWRSZXN1bHQpOyB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kik7Ci0gICAgdmly
dHVhbCB2b2lkIGRpZFJlbW92ZUNsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopIHsgfQotICAg
IHZpcnR1YWwgdm9pZCBhbGxDbGllbnRzUmVtb3ZlZCgpIHsgfQotICAgIHZvaWQgZGVzdHJveURl
Y29kZWREYXRhSWZOZWVkZWQoKTsKLQotICAgIHVuc2lnbmVkIGNvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9jbGllbnRzLnNpemUoKTsgfQotCi0gICAgU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PFN0YXR1cz4obV9zdGF0dXMpOyB9Ci0gICAgdm9pZCBzZXRTdGF0dXMo
U3RhdHVzIHN0YXR1cykgeyBtX3N0YXR1cyA9IHN0YXR1czsgfQotCi0gICAgdW5zaWduZWQgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIGVuY29kZWRTaXplKCkgKyBkZWNvZGVkU2l6ZSgpICsgb3Zlcmhl
YWRTaXplKCk7IH0KLSAgICB1bnNpZ25lZCBlbmNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZW5jb2RlZFNpemU7IH0KLSAgICB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGVjb2RlZFNpemU7IH0KLSAgICB1bnNpZ25lZCBvdmVyaGVhZFNpemUoKSBjb25zdDsKLSAg
ICAKLSAgICBib29sIGlzTG9hZGVkKCkgY29uc3QgeyByZXR1cm4gIW1fbG9hZGluZzsgfSAvLyBG
SVhNRS4gTWV0aG9kIG5hbWUgaXMgaW5hY2N1cmF0ZS4gTG9hZGluZyBtaWdodCBub3QgaGF2ZSBz
dGFydGVkIHlldC4KLQotICAgIGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9sb2Fk
aW5nOyB9Ci0gICAgdm9pZCBzZXRMb2FkaW5nKGJvb2wgYikgeyBtX2xvYWRpbmcgPSBiOyB9Ci0g
ICAgdmlydHVhbCBib29sIHN0aWxsTmVlZHNMb2FkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LQotICAgIFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIoKSB7IHJldHVybiBtX2xvYWRlci5nZXQo
KTsgfQotCi0gICAgYm9vbCBhcmVBbGxDbGllbnRzWE1MSHR0cFJlcXVlc3RzKCkgY29uc3Q7Ci0K
LSAgICBib29sIGlzSW1hZ2UoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gSW1hZ2VSZXNvdXJj
ZTsgfQotICAgIC8vIEZJWE1FOiBDYWNoZWRSYXdSZXNvdXJjZSBjb3VsZCBiZSBhIG1haW4gcmVz
b3VyY2UsIGFuIGF1ZGlvL3ZpZGVvIHJlc291cmNlLCBvciBhIHJhdyBYSFIvaWNvbiByZXNvdXJj
ZS4KLSAgICBib29sIGlzTWFpbk9yTWVkaWFPclJhd1Jlc291cmNlKCkgY29uc3QgeyByZXR1cm4g
dHlwZSgpID09IE1haW5SZXNvdXJjZSB8fCB0eXBlKCkgPT0gTWVkaWFSZXNvdXJjZSB8fCB0eXBl
KCkgPT0gUmF3UmVzb3VyY2U7IH0KLSAgICBib29sIGlnbm9yZUZvclJlcXVlc3RDb3VudCgpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9yZXNvdXJjZVJlcXVlc3QuaWdub3JlRm9yUmVx
dWVzdENvdW50KCkKLSAgICAgICAgICAgIHx8IHR5cGUoKSA9PSBNYWluUmVzb3VyY2UKLSNpZiBF
TkFCTEUoTElOS19QUkVGRVRDSCkKLSAgICAgICAgICAgIHx8IHR5cGUoKSA9PSBMaW5rUHJlZmV0
Y2gKLSAgICAgICAgICAgIHx8IHR5cGUoKSA9PSBMaW5rU3VicmVzb3VyY2UKLSNlbmRpZgotICAg
ICAgICAgICAgfHwgdHlwZSgpID09IFJhd1Jlc291cmNlOwotICAgIH0KLQotICAgIHVuc2lnbmVk
IGFjY2Vzc0NvdW50KCkgY29uc3QgeyByZXR1cm4gbV9hY2Nlc3NDb3VudDsgfQotICAgIHZvaWQg
aW5jcmVhc2VBY2Nlc3NDb3VudCgpIHsgbV9hY2Nlc3NDb3VudCsrOyB9Ci0KLSAgICAvLyBDb21w
dXRlcyB0aGUgc3RhdHVzIG9mIGFuIG9iamVjdCBhZnRlciBsb2FkaW5nLiAgCi0gICAgLy8gVXBk
YXRlcyB0aGUgZXhwaXJlIGRhdGUgb24gdGhlIGNhY2hlIGVudHJ5IGZpbGUKLSAgICB2b2lkIGZp
bmlzaCgpOwotCi0gICAgYm9vbCBwYXNzZXNBY2Nlc3NDb250cm9sQ2hlY2soU2VjdXJpdHlPcmln
aW4mKTsKLSAgICBib29sIHBhc3Nlc1NhbWVPcmlnaW5Qb2xpY3lDaGVjayhTZWN1cml0eU9yaWdp
biYpOwotCi0gICAgLy8gQ2FsbGVkIGJ5IHRoZSBjYWNoZSBpZiB0aGUgb2JqZWN0IGhhcyBiZWVu
IHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUKLSAgICAvLyB3aGlsZSBzdGlsbCBiZWluZyByZWZlcmVu
Y2VkLiBUaGlzIG1lYW5zIHRoZSBvYmplY3Qgc2hvdWxkIGRlbGV0ZSBpdHNlbGYKLSAgICAvLyBp
ZiB0aGUgbnVtYmVyIG9mIGNsaWVudHMgb2JzZXJ2aW5nIGl0IGV2ZXIgZHJvcHMgdG8gMC4KLSAg
ICAvLyBUaGUgcmVzb3VyY2UgY2FuIGJlIGJyb3VnaHQgYmFjayB0byBjYWNoZSBhZnRlciBzdWNj
ZXNzZnVsIHJldmFsaWRhdGlvbi4KLSAgICB2b2lkIHNldEluQ2FjaGUoYm9vbCBpbkNhY2hlKSB7
IG1faW5DYWNoZSA9IGluQ2FjaGU7IH0KLSAgICBib29sIGluQ2FjaGUoKSBjb25zdCB7IHJldHVy
biBtX2luQ2FjaGU7IH0KLSAgICAKLSAgICB2b2lkIGNsZWFyTG9hZGVyKCk7Ci0KLSAgICBTaGFy
ZWRCdWZmZXIqIHJlc291cmNlQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmdldCgpOyB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZVJlcXVlc3QmLCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Ci0gICAgdmlydHVhbCB2b2lkIHJlc3BvbnNlUmVjZWl2
ZWQoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDYWNo
ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAg
dm9pZCBzZXRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Ci0gICAgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9Ci0g
ICAgLy8gVGhpcyBpcyB0aGUgc2FtZSBhcyByZXNwb25zZSgpIGV4Y2VwdCBhZnRlciBIVFRQIHJl
ZGlyZWN0IHRvIGRhdGE6IFVSTC4KLSAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZUZvclNhbWVPcmlnaW5Qb2xpY3lDaGVja3MoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0Q3Jvc3NP
cmlnaW4oKTsKLSAgICBib29sIGlzQ3Jvc3NPcmlnaW4oKSBjb25zdDsKLSAgICBib29sIGlzQ2xl
YW4oKSBjb25zdDsKLSAgICBSZXNvdXJjZVJlc3BvbnNlOjpUYWludGluZyByZXNwb25zZVRhaW50
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25zZVRhaW50aW5nOyB9Ci0KLSAgICB2b2lkIGxv
YWRGcm9tKGNvbnN0IENhY2hlZFJlc291cmNlJiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25z
JiwgQ2FjaGVkUmVzb3VyY2VMb2FkZXImKTsKLQotICAgIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4o
KSBjb25zdCB7IHJldHVybiBtX29yaWdpbi5nZXQoKTsgfQotCi0gICAgYm9vbCBjYW5EZWxldGUo
KSBjb25zdCB7IHJldHVybiAhaGFzQ2xpZW50cygpICYmICFtX2xvYWRlciAmJiAhbV9wcmVsb2Fk
Q291bnQgJiYgIW1faGFuZGxlQ291bnQgJiYgIW1fcmVzb3VyY2VUb1JldmFsaWRhdGUgJiYgIW1f
cHJveHlSZXNvdXJjZTsgfQotICAgIGJvb2wgaGFzT25lSGFuZGxlKCkgY29uc3QgeyByZXR1cm4g
bV9oYW5kbGVDb3VudCA9PSAxOyB9Ci0KLSAgICBib29sIGlzRXhwaXJlZCgpIGNvbnN0OwotCi0g
ICAgLy8gTGlzdCBvZiBhY2NlcHRhYmxlIE1JTUUgdHlwZXMgc2VwYXJhdGVkIGJ5ICIsIi4KLSAg
ICAvLyBBIE1JTUUgdHlwZSBtYXkgY29udGFpbiBhIHdpbGRjYXJkLCBlLmcuICJ0ZXh0LyoiLgot
ICAgIFN0cmluZyBhY2NlcHQoKSBjb25zdCB7IHJldHVybiBtX2FjY2VwdDsgfQotICAgIHZvaWQg
c2V0QWNjZXB0KGNvbnN0IFN0cmluZyYgYWNjZXB0KSB7IG1fYWNjZXB0ID0gYWNjZXB0OyB9Ci0K
LSAgICB2b2lkIGNhbmNlbExvYWQoKTsKLSAgICBib29sIHdhc0NhbmNlbGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9lcnJvci5pc0NhbmNlbGxhdGlvbigpOyB9Ci0gICAgYm9vbCBlcnJvck9jY3VycmVk
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMgPT0gTG9hZEVycm9yIHx8IG1fc3RhdHVzID09IERl
Y29kZUVycm9yOyB9Ci0gICAgYm9vbCBsb2FkRmFpbGVkT3JDYW5jZWxlZCgpIGNvbnN0IHsgcmV0
dXJuICFtX2Vycm9yLmlzTnVsbCgpOyB9Ci0KLSAgICBib29sIHNob3VsZFNlbmRSZXNvdXJjZUxv
YWRDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX29wdGlvbnMuc2VuZExvYWRDYWxsYmFja3Mg
PT0gU2VuZENhbGxiYWNrczsgfQotICAgIERhdGFCdWZmZXJpbmdQb2xpY3kgZGF0YUJ1ZmZlcmlu
Z1BvbGljeSgpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9ucy5kYXRhQnVmZmVyaW5nUG9saWN5OyB9
Ci0KLSAgICBib29sIGFsbG93c0NhY2hpbmcoKSBjb25zdCB7IHJldHVybiBtX29wdGlvbnMuY2Fj
aGluZ1BvbGljeSA9PSBDYWNoaW5nUG9saWN5OjpBbGxvd0NhY2hpbmc7IH0KLSAgICBjb25zdCBG
ZXRjaE9wdGlvbnMmIG9wdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX29wdGlvbnM7IH0KLQotICAg
IHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoKSB7IH0KLQotICAgIHZvaWQgc2V0T3du
aW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291
cmNlTG9hZGVyKSB7IG1fb3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBjYWNoZWRSZXNvdXJj
ZUxvYWRlcjsgfQotICAgIAotICAgIGJvb2wgaXNQcmVsb2FkZWQoKSBjb25zdCB7IHJldHVybiBt
X3ByZWxvYWRDb3VudDsgfQotICAgIHZvaWQgaW5jcmVhc2VQcmVsb2FkQ291bnQoKSB7ICsrbV9w
cmVsb2FkQ291bnQ7IH0KLSAgICB2b2lkIGRlY3JlYXNlUHJlbG9hZENvdW50KCkgeyBBU1NFUlQo
bV9wcmVsb2FkQ291bnQpOyAtLW1fcHJlbG9hZENvdW50OyB9Ci0gICAgCi0gICAgdm9pZCByZWdp
c3RlckhhbmRsZShDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UqIGgpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgdW5yZWdpc3RlckhhbmRsZShDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UqIGgpOwot
ICAgIAotICAgIGJvb2wgY2FuVXNlQ2FjaGVWYWxpZGF0b3IoKSBjb25zdDsKLQotICAgIGVudW0g
Y2xhc3MgUmV2YWxpZGF0aW9uRGVjaXNpb24geyBObywgWWVzRHVlVG9DYWNoZVBvbGljeSwgWWVz
RHVlVG9Ob1N0b3JlLCBZZXNEdWVUb05vQ2FjaGUsIFllc0R1ZVRvRXhwaXJlZCB9OwotICAgIHZp
cnR1YWwgUmV2YWxpZGF0aW9uRGVjaXNpb24gbWFrZVJldmFsaWRhdGlvbkRlY2lzaW9uKENhY2hl
UG9saWN5KSBjb25zdDsKLSAgICBib29sIHJlZGlyZWN0Q2hhaW5BbGxvd3NSZXVzZShSZXVzZUV4
cGlyZWRSZWRpcmVjdGlvbk9yTm90KSBjb25zdDsKLQotICAgIGJvb2wgdmFyeUhlYWRlclZhbHVl
c01hdGNoKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IENhY2hlZFJlc291cmNlTG9hZGVy
Jik7Ci0KLSAgICBib29sIGlzQ2FjaGVWYWxpZGF0b3IoKSBjb25zdCB7IHJldHVybiBtX3Jlc291
cmNlVG9SZXZhbGlkYXRlOyB9Ci0gICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlVG9SZXZhbGlk
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZTsgfQotICAgIAotICAg
IC8vIEhUVFAgcmV2YWxpZGF0aW9uIHN1cHBvcnQgbWV0aG9kcyBmb3IgQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuCi0gICAgdm9pZCBzZXRSZXNvdXJjZVRvUmV2YWxpZGF0ZShDYWNoZWRSZXNvdXJjZSop
OwotICAgIHZpcnR1YWwgdm9pZCBzd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNlKCk7
Ci0gICAgdm9pZCBjbGVhclJlc291cmNlVG9SZXZhbGlkYXRlKCk7Ci0gICAgdm9pZCB1cGRhdGVS
ZXNwb25zZUFmdGVyUmV2YWxpZGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHZhbGlkYXRp
bmdSZXNwb25zZSk7Ci0gICAgYm9vbCB2YWxpZGF0aW9uSW5Qcm9ncmVzcygpIGNvbnN0IHsgcmV0
dXJuIG1fcHJveHlSZXNvdXJjZTsgfQotICAgIGJvb2wgdmFsaWRhdGlvbkNvbXBsZXRpbmcoKSBj
b25zdCB7IHJldHVybiBtX3Byb3h5UmVzb3VyY2UgJiYgbV9wcm94eVJlc291cmNlLT5tX3N3aXRj
aGluZ0NsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2U7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBk
aWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgLyogYnl0ZXNTZW50ICovLCB1bnNpZ25lZCBs
b25nIGxvbmcgLyogdG90YWxCeXRlc1RvQmVTZW50ICovKSB7IH0KLQotICAgIHZvaWQgc2V0TG9h
ZEZpbmlzaFRpbWUoZG91YmxlIGZpbmlzaFRpbWUpIHsgbV9sb2FkRmluaXNoVGltZSA9IGZpbmlz
aFRpbWU7IH0KLSAgICBkb3VibGUgbG9hZEZpbmlzaFRpbWUoKSBjb25zdCB7IHJldHVybiBtX2xv
YWRGaW5pc2hUaW1lOyB9Ci0KLSNpZiBVU0UoRk9VTkRBVElPTikgfHwgVVNFKFNPVVApCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCB0cnlSZXBsYWNlRW5jb2RlZERhdGEoU2hhcmVkQnVmZmVyJik7
Ci0jZW5kaWYKLQotI2lmIFVTRShTT1VQKQotICAgIHZpcnR1YWwgY2hhciogZ2V0T3JDcmVhdGVS
ZWFkQnVmZmVyKHNpemVfdCAvKiByZXF1ZXN0ZWRTaXplICovLCBzaXplX3QmIC8qIGFjdHVhbFNp
emUgKi8pIHsgcmV0dXJuIG51bGxwdHI7IH0KLSNlbmRpZgotCi0gICAgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyRm9yTG9hZFdpdGhvdXRSZXNvdXJjZUxvYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1f
aWRlbnRpZmllckZvckxvYWRXaXRob3V0UmVzb3VyY2VMb2FkZXI7IH0KLSAgICBzdGF0aWMgUmVz
b3VyY2VMb2FkUHJpb3JpdHkgZGVmYXVsdFByaW9yaXR5Rm9yUmVzb3VyY2VUeXBlKFR5cGUpOwot
Ci1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBzZXRFbmNvZGVkU2l6ZSh1bnNpZ25lZCk7Ci0gICAgdm9p
ZCBzZXREZWNvZGVkU2l6ZSh1bnNpZ25lZCk7Ci0gICAgdm9pZCBkaWRBY2Nlc3NEZWNvZGVkRGF0
YShkb3VibGUgdGltZVN0YW1wKTsKLQotICAgIHZpcnR1YWwgdm9pZCBkaWRSZXBsYWNlU2hhcmVk
QnVmZmVyQ29udGVudHMoKSB7IH0KLQotICAgIC8vIEZJWE1FOiBNYWtlIHRoZSByZXN0IG9mIHRo
ZXNlIGRhdGEgbWVtYmVycyBwcml2YXRlIGFuZCB1c2UgZnVuY3Rpb25zIGluIGRlcml2ZWQgY2xh
c3NlcyBpbnN0ZWFkLgotICAgIEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj4g
bV9jbGllbnRzOwotICAgIFJlc291cmNlUmVxdWVzdCBtX3Jlc291cmNlUmVxdWVzdDsKLSAgICBS
ZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IG1fbG9hZGVyOwotICAgIFJlc291cmNlTG9hZGVyT3B0
aW9ucyBtX29wdGlvbnM7Ci0gICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwotICAgIFJl
c291cmNlUmVzcG9uc2U6OlRhaW50aW5nIG1fcmVzcG9uc2VUYWludGluZyB7IFJlc291cmNlUmVz
cG9uc2U6OlRhaW50aW5nOjpCYXNpYyB9OwotICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZWRpcmVj
dFJlc3BvbnNlRm9yU2FtZU9yaWdpblBvbGljeUNoZWNrczsKLSAgICBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBtX2RhdGE7Ci0gICAgRGVmZXJyYWJsZU9uZVNob3RUaW1lciBtX2RlY29kZWREYXRhRGVs
ZXRpb25UaW1lcjsKLQotcHJpdmF0ZToKLSAgICBjbGFzcyBDYWxsYmFjazsKLQotICAgIGJvb2wg
YWRkQ2xpZW50VG9TZXQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKTsKLQotICAgIHZvaWQgZGVjb2Rl
ZERhdGFEZWxldGlvblRpbWVyRmlyZWQoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBjaGVja05vdGlm
eSgpOwotICAgIHZpcnR1YWwgYm9vbCBtYXlUcnlSZXBsYWNlRW5jb2RlZERhdGEoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRCb2R5RGF0YUZyb20oY29uc3Qg
Q2FjaGVkUmVzb3VyY2UmKSB7IH0KLQotICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgZnJl
c2huZXNzTGlmZXRpbWUoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIGNvbnN0OwotCi0gICAgdm9p
ZCBhZGRBZGRpdGlvbmFsUmVxdWVzdEhlYWRlcnMoQ2FjaGVkUmVzb3VyY2VMb2FkZXImKTsKLSAg
ICB2b2lkIGNvbXB1dGVPcmlnaW4oQ2FjaGVkUmVzb3VyY2VMb2FkZXImKTsKLSAgICB2b2lkIGZh
aWxCZWZvcmVTdGFydGluZygpOwotCi0gICAgSGFzaE1hcDxDYWNoZWRSZXNvdXJjZUNsaWVudCos
IHN0ZDo6dW5pcXVlX3B0cjxDYWxsYmFjaz4+IG1fY2xpZW50c0F3YWl0aW5nQ2FsbGJhY2s7Ci0g
ICAgU2Vzc2lvbklEIG1fc2Vzc2lvbklEOwotICAgIFN0cmluZyBtX2FjY2VwdDsKLSAgICBSZXNv
dXJjZUxvYWRQcmlvcml0eSBtX2xvYWRQcmlvcml0eTsKLSAgICBzdGQ6OmNocm9ubzo6c3lzdGVt
X2Nsb2NrOjp0aW1lX3BvaW50IG1fcmVzcG9uc2VUaW1lc3RhbXA7Ci0KLSAgICBTdHJpbmcgbV9m
cmFnbWVudElkZW50aWZpZXJGb3JSZXF1ZXN0OwotCi0gICAgUmVzb3VyY2VFcnJvciBtX2Vycm9y
OwotICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gbV9vcmlnaW47Ci0KLSAgICBkb3VibGUgbV9s
YXN0RGVjb2RlZEFjY2Vzc1RpbWU7IC8vIFVzZWQgYXMgYSAidGhyYXNoIGd1YXJkIiBpbiB0aGUg
Y2FjaGUKLSAgICBkb3VibGUgbV9sb2FkRmluaXNoVGltZTsKLQotICAgIHVuc2lnbmVkIG1fZW5j
b2RlZFNpemU7Ci0gICAgdW5zaWduZWQgbV9kZWNvZGVkU2l6ZTsKLSAgICB1bnNpZ25lZCBtX2Fj
Y2Vzc0NvdW50OwotICAgIHVuc2lnbmVkIG1faGFuZGxlQ291bnQ7Ci0gICAgdW5zaWduZWQgbV9w
cmVsb2FkQ291bnQ7Ci0KLSAgICB1bnNpZ25lZCBtX3ByZWxvYWRSZXN1bHQgOiAyOyAvLyBQcmVs
b2FkUmVzdWx0Ci0KLSAgICBib29sIG1fcmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllciA6IDE7
Ci0KLSAgICBib29sIG1faW5DYWNoZSA6IDE7Ci0gICAgYm9vbCBtX2xvYWRpbmcgOiAxOwotCi0g
ICAgYm9vbCBtX3N3aXRjaGluZ0NsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UgOiAxOwotCi0g
ICAgdW5zaWduZWQgbV90eXBlIDogNDsgLy8gVHlwZQotICAgIHVuc2lnbmVkIG1fc3RhdHVzIDog
MzsgLy8gU3RhdHVzCi0KLSNpZm5kZWYgTkRFQlVHCi0gICAgYm9vbCBtX2RlbGV0ZWQ7Ci0gICAg
dW5zaWduZWQgbV9scnVJbmRleDsKLSNlbmRpZgotCi0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIq
IG1fb3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXI7IC8vIG9ubHkgbm9uLW51bGwgZm9yIHJlc291
cmNlcyB0aGF0IGFyZSBub3QgaW4gdGhlIGNhY2hlCi0gICAgCi0gICAgLy8gSWYgdGhpcyBmaWVs
ZCBpcyBub24tbnVsbCB3ZSBhcmUgdXNpbmcgdGhlIHJlc291cmNlIGFzIGEgcHJveHkgZm9yIGNo
ZWNraW5nIHdoZXRoZXIgYW4gZXhpc3RpbmcgcmVzb3VyY2UgaXMgc3RpbGwgdXAgdG8gZGF0ZQot
ICAgIC8vIHVzaW5nIEhUVFAgSWYtTW9kaWZpZWQtU2luY2UvSWYtTm9uZS1NYXRjaCBoZWFkZXJz
LiBJZiB0aGUgcmVzcG9uc2UgaXMgMzA0IGFsbCBjbGllbnRzIG9mIHRoaXMgcmVzb3VyY2UgYXJl
IG1vdmVkCi0gICAgLy8gdG8gdG8gYmUgY2xpZW50cyBvZiBtX3Jlc291cmNlVG9SZXZhbGlkYXRl
IGFuZCB0aGUgcmVzb3VyY2UgaXMgZGVsZXRlZC4gSWYgbm90LCB0aGUgZmllbGQgaXMgemVyb2Vk
IGFuZCB0aGlzCi0gICAgLy8gcmVzb3VyY2VzIGJlY29tZXMgbm9ybWFsIHJlc291cmNlIGxvYWQu
Ci0gICAgQ2FjaGVkUmVzb3VyY2UqIG1fcmVzb3VyY2VUb1JldmFsaWRhdGU7Ci0KLSAgICAvLyBJ
ZiB0aGlzIGZpZWxkIGlzIG5vbi1udWxsLCB0aGUgcmVzb3VyY2UgaGFzIGEgcHJveHkgZm9yIGNo
ZWNraW5nIHdoZXRoZXIgaXQgaXMgc3RpbGwgdXAgdG8gZGF0ZSAoc2VlIG1fcmVzb3VyY2VUb1Jl
dmFsaWRhdGUpLgotICAgIENhY2hlZFJlc291cmNlKiBtX3Byb3h5UmVzb3VyY2U7Ci0KLSAgICAv
LyBUaGVzZSBoYW5kbGVzIHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBt
X3Jlc291cmNlVG9SZXZhbGlkYXRlIGluIGNhc2Ugd2UgZ2V0IDMwNCByZXNwb25zZS4KLSAgICBI
YXNoU2V0PENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSo+IG1faGFuZGxlc1RvUmV2YWxpZGF0ZTsK
LQotICAgIFJlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1cyBtX3JlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1
czsKLQotICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiBtX3ZhcnlpbmdIZWFk
ZXJWYWx1ZXM7Ci0KLSAgICB1bnNpZ25lZCBsb25nIG1faWRlbnRpZmllckZvckxvYWRXaXRob3V0
UmVzb3VyY2VMb2FkZXIgeyAwIH07Ci19OwotCi1jbGFzcyBDYWNoZWRSZXNvdXJjZTo6Q2FsbGJh
Y2sgewotI2lmICFDT01QSUxFUihNU1ZDKQotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
I2VuZGlmCi1wdWJsaWM6Ci0gICAgQ2FsbGJhY2soQ2FjaGVkUmVzb3VyY2UmLCBDYWNoZWRSZXNv
dXJjZUNsaWVudCYpOwotCi0gICAgdm9pZCBjYW5jZWwoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lk
IHRpbWVyRmlyZWQoKTsKLQotICAgIENhY2hlZFJlc291cmNlJiBtX3Jlc291cmNlOwotICAgIENh
Y2hlZFJlc291cmNlQ2xpZW50JiBtX2NsaWVudDsKLSAgICBUaW1lciBtX3RpbWVyOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
Q0FDSEVEX1JFU09VUkNFKFRvQ2xhc3NOYW1lLCBDYWNoZWRSZXNvdXJjZVR5cGUpIFwKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6VG9DbGFzc05hbWUpIFwKLSAgICBzdGF0
aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKSB7
IHJldHVybiByZXNvdXJjZS50eXBlKCkgPT0gV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VUeXBlOyB9
IFwKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQotI2VuZGlmIC8vIENhY2hlZFJlc291
cmNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
Q2xpZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNDU0M2Q1YTU5NzllY2M0
MmY2ZDI2NGI0NDJlNzQ5MzEzYTVjOWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
Q2xpZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICAgIENvcHlyaWdo
dCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHlyaWdo
dCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYWxsIGZ1
bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUgc2hlZXRzIGFuZCBo
dG1sCi0gICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkgY2FjaGUgZm9yIHRo
ZXNlIG9iamVjdHMuCi0qLwotCi0jaWZuZGVmIENhY2hlZFJlc291cmNlQ2xpZW50X2gKLSNkZWZp
bmUgQ2FjaGVkUmVzb3VyY2VDbGllbnRfaAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IENhY2hlZFJlc291cmNlOwotCi1jbGFzcyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7Ci1wdWJsaWM6
Ci0gICAgZW51bSBDYWNoZWRSZXNvdXJjZUNsaWVudFR5cGUgewotICAgICAgICBCYXNlUmVzb3Vy
Y2VUeXBlLAotICAgICAgICBJbWFnZVR5cGUsCi0gICAgICAgIEZvbnRUeXBlLAotICAgICAgICBT
dHlsZVNoZWV0VHlwZSwKLSAgICAgICAgU1ZHRG9jdW1lbnRUeXBlLAotICAgICAgICBSYXdSZXNv
dXJjZVR5cGUKLSAgICB9OwotCi0gICAgdmlydHVhbCB+Q2FjaGVkUmVzb3VyY2VDbGllbnQoKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgZGVwcmVjYXRlZERpZFJlY2VpdmVDYWNoZWRSZXNvdXJjZShDYWNo
ZWRSZXNvdXJjZSopIHsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1hNTEh0dHBSZXF1ZXN0KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHN0YXRpYyBDYWNoZWRSZXNvdXJjZUNsaWVudFR5
cGUgZXhwZWN0ZWRUeXBlKCkgeyByZXR1cm4gQmFzZVJlc291cmNlVHlwZTsgfQotICAgIHZpcnR1
YWwgQ2FjaGVkUmVzb3VyY2VDbGllbnRUeXBlIHJlc291cmNlQ2xpZW50VHlwZSgpIGNvbnN0IHsg
cmV0dXJuIGV4cGVjdGVkVHlwZSgpOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBDYWNoZWRSZXNvdXJj
ZUNsaWVudCgpIHsgfQotfTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MWVmODYxMDEzNmRiMmQzNzQ0MDU5ZjA0ZGRkNzNkOTU3
NzY2YmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMTk5OCBM
YXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHlyaWdodCAoQykgMjAwMSBE
aXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotICAgIFRoaXMg
Y2xhc3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdl
cywgc3R5bGUgc2hlZXRzIGFuZCBodG1sCi0gICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMg
YSBtZW1vcnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCi0qLwotCi0jaWZuZGVmIENhY2hlZFJl
c291cmNlQ2xpZW50V2Fsa2VyX2gKLSNkZWZpbmUgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXJf
aAotCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKLSNpbmNsdWRlIDx3dGYvSGFz
aENvdW50ZWRTZXQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotLy8gQ2FsbCB0aGlzICJ3YWxrZXIiIGluc3RlYWQgb2YgaXRlcmF0b3Igc28gcGVv
cGxlIHdvbid0IGV4cGVjdCBRdCBvciBTVEwtc3R5bGUgaXRlcmF0b3IgaW50ZXJmYWNlLgotLy8g
SnVzdCBrZWVwIGNhbGxpbmcgbmV4dCgpIG9uIHRoaXMuIEl0J3Mgc2FmZSBmcm9tIGRlbGV0aW9u
cyBvZiBpdGVtcy4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIENhY2hlZFJlc291cmNlQ2xp
ZW50V2Fsa2VyIHsKLXB1YmxpYzoKLSAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcihjb25z
dCBIYXNoQ291bnRlZFNldDxDYWNoZWRSZXNvdXJjZUNsaWVudCo+JiBzZXQpCi0gICAgICAgIDog
bV9jbGllbnRTZXQoc2V0KSwgbV9jbGllbnRWZWN0b3Ioc2V0LnNpemUoKSksIG1faW5kZXgoMCkK
LSAgICB7Ci0gICAgICAgIHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8Q2FjaGVkUmVzb3VyY2VDbGll
bnQqPjo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7Ci0gICAgICAgIEl0ZXJhdG9yIGVuZCA9IHNl
dC5lbmQoKTsKLSAgICAgICAgc2l6ZV90IGNsaWVudEluZGV4ID0gMDsKLSAgICAgICAgZm9yIChJ
dGVyYXRvciBjdXJyZW50ID0gc2V0LmJlZ2luKCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQp
Ci0gICAgICAgICAgICBtX2NsaWVudFZlY3RvcltjbGllbnRJbmRleCsrXSA9IGN1cnJlbnQtPmtl
eTsKLSAgICB9Ci0KLSAgICBUKiBuZXh0KCkKLSAgICB7Ci0gICAgICAgIHNpemVfdCBzaXplID0g
bV9jbGllbnRWZWN0b3Iuc2l6ZSgpOwotICAgICAgICB3aGlsZSAobV9pbmRleCA8IHNpemUpIHsK
LSAgICAgICAgICAgIENhY2hlZFJlc291cmNlQ2xpZW50KiBuZXh0ID0gbV9jbGllbnRWZWN0b3Jb
bV9pbmRleCsrXTsKLSAgICAgICAgICAgIGlmIChtX2NsaWVudFNldC5jb250YWlucyhuZXh0KSkg
ewotICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKFQ6OmV4
cGVjdGVkVHlwZSgpID09IENhY2hlZFJlc291cmNlQ2xpZW50OjpleHBlY3RlZFR5cGUoKSB8fCBu
ZXh0LT5yZXNvdXJjZUNsaWVudFR5cGUoKSA9PSBUOjpleHBlY3RlZFR5cGUoKSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihuZXh0KTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotcHJpdmF0
ZToKLSAgICBjb25zdCBIYXNoQ291bnRlZFNldDxDYWNoZWRSZXNvdXJjZUNsaWVudCo+JiBtX2Ns
aWVudFNldDsKLSAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPiBtX2NsaWVudFZlY3Rv
cjsKLSAgICBzaXplX3QgbV9pbmRleDsKLX07Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlSGFuZGxlLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk3Mjc2ZTkzMmJkMGVjYzg2MDdkM2NlY2FiNDUzNzRi
YTM5M2MwYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2VIYW5kbGUuaCIKLQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlOjpDYWNoZWRSZXNvdXJjZUhh
bmRsZUJhc2UoKQotICAgIDogbV9yZXNvdXJjZShudWxscHRyKQotewotfQotCi1DYWNoZWRSZXNv
dXJjZUhhbmRsZUJhc2U6OkNhY2hlZFJlc291cmNlSGFuZGxlQmFzZShDYWNoZWRSZXNvdXJjZSog
cmVzb3VyY2UpCi0gICAgOiBtX3Jlc291cmNlKHJlc291cmNlKQotewotICAgIGlmIChtX3Jlc291
cmNlKQotICAgICAgICBtX3Jlc291cmNlLT5yZWdpc3RlckhhbmRsZSh0aGlzKTsKLX0KLQotQ2Fj
aGVkUmVzb3VyY2VIYW5kbGVCYXNlOjpDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UoY29uc3QgQ2Fj
aGVkUmVzb3VyY2VIYW5kbGVCYXNlJiBvdGhlcikKLSAgICA6IG1fcmVzb3VyY2Uob3RoZXIubV9y
ZXNvdXJjZSkKLXsKLSAgICBpZiAobV9yZXNvdXJjZSkKLSAgICAgICAgbV9yZXNvdXJjZS0+cmVn
aXN0ZXJIYW5kbGUodGhpcyk7Ci19Ci0KLUNhY2hlZFJlc291cmNlSGFuZGxlQmFzZTo6fkNhY2hl
ZFJlc291cmNlSGFuZGxlQmFzZSgpCi17Ci0gICAgaWYgKG1fcmVzb3VyY2UpCi0gICAgICAgIG1f
cmVzb3VyY2UtPnVucmVnaXN0ZXJIYW5kbGUodGhpcyk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGVCYXNlOjpzZXRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCi17Ci0g
ICAgaWYgKHJlc291cmNlID09IG1fcmVzb3VyY2UpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAo
bV9yZXNvdXJjZSkKLSAgICAgICAgbV9yZXNvdXJjZS0+dW5yZWdpc3RlckhhbmRsZSh0aGlzKTsK
LSAgICBtX3Jlc291cmNlID0gcmVzb3VyY2U7Ci0gICAgaWYgKG1fcmVzb3VyY2UpCi0gICAgICAg
IG1fcmVzb3VyY2UtPnJlZ2lzdGVySGFuZGxlKHRoaXMpOwotfQotCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUhhbmRsZS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwM2U1ODQyZTMzNTQ0OWI1YTlkYTljY2I1N2NjNjU3NWQ1YmVh
NWFiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUhhbmRsZS5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2lmbmRlZiBDYWNoZWRSZXNvdXJjZUhhbmRsZV9oCi0jZGVmaW5lIENhY2hl
ZFJlc291cmNlSGFuZGxlX2gKLQotI2luY2x1ZGUgIlBsYXRmb3JtRXhwb3J0TWFjcm9zLmgiCi0j
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBD
YWNoZWRSZXNvdXJjZTsKLQotY2xhc3MgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlIHsKLXB1Ymxp
YzoKLSAgICB+Q2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKCk7Ci0KLSAgICBDYWNoZWRSZXNvdXJj
ZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZTsgfQotICAgIAotICAgIGJvb2wgb3Bl
cmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fcmVzb3VyY2U7IH0KLSAgICAKLSAgICAvLyBUaGlz
IGNvbnZlcnNpb24gb3BlcmF0b3IgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gYm9vbCBi
dXQgbm90IHRvIG90aGVyIGludGVnZXIgdHlwZXMuCi0gICAgdHlwZWRlZiBDYWNoZWRSZXNvdXJj
ZSogQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlOjoqVW5zcGVjaWZpZWRCb29sVHlwZTsKLSAgICBv
cGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZSA/
ICZDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2U6Om1fcmVzb3VyY2UgOiAwOyB9Ci0KLXByb3RlY3Rl
ZDoKLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UoKTsKLSAgICBDYWNoZWRSZXNvdXJjZUhh
bmRsZUJhc2UoQ2FjaGVkUmVzb3VyY2UqKTsKLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2Uo
Y29uc3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlJik7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldFJlc291cmNlKENhY2hlZFJlc291cmNlKik7Ci0gICAgCi1wcml2YXRlOgotICAgIENh
Y2hlZFJlc291cmNlSGFuZGxlQmFzZSYgb3BlcmF0b3I9KGNvbnN0IENhY2hlZFJlc291cmNlSGFu
ZGxlQmFzZSYpIHsgcmV0dXJuICp0aGlzOyB9IAotICAgIAotICAgIGZyaWVuZCBjbGFzcyBDYWNo
ZWRSZXNvdXJjZTsKLQotICAgIENhY2hlZFJlc291cmNlKiBtX3Jlc291cmNlOwotfTsKLSAgICAK
LXRlbXBsYXRlIDxjbGFzcyBSPiBjbGFzcyBDYWNoZWRSZXNvdXJjZUhhbmRsZSA6IHB1YmxpYyBD
YWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UgewotcHVibGljOiAKLSAgICBDYWNoZWRSZXNvdXJjZUhh
bmRsZSgpIHsgfQotICAgIENhY2hlZFJlc291cmNlSGFuZGxlKFIqIHJlcykgOiBDYWNoZWRSZXNv
dXJjZUhhbmRsZUJhc2UocmVzKSB7IH0KLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZShjb25zdCBD
YWNoZWRSZXNvdXJjZUhhbmRsZTxSPiYgbykgOiBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2Uobykg
eyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gQ2FjaGVkUmVzb3VyY2VIYW5kbGUoY29uc3Qg
Q2FjaGVkUmVzb3VyY2VIYW5kbGU8VT4mIG8pIDogQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKG8u
Z2V0KCkpIHsgfQotCi0gICAgUiogZ2V0KCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxSKj4oQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlOjpnZXQoKSk7IH0KLSAgICBSKiBvcGVyYXRv
ci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KLSAgICBSJiBvcGVyYXRvciooKSBjb25zdCB7
IEFTU0VSVChnZXQoKSk7IHJldHVybiAqZ2V0KCk7IH0KLQotICAgIENhY2hlZFJlc291cmNlSGFu
ZGxlJiBvcGVyYXRvcj0oUiogcmVzKSB7IHNldFJlc291cmNlKHJlcyk7IHJldHVybiAqdGhpczsg
fSAKLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZSYgb3BlcmF0b3I9KGNvbnN0IENhY2hlZFJlc291
cmNlSGFuZGxlJiBvKSB7IHNldFJlc291cmNlKG8uZ2V0KCkpOyByZXR1cm4gKnRoaXM7IH0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBDYWNoZWRSZXNvdXJjZUhhbmRsZSYgb3BlcmF0b3I9KGNv
bnN0IENhY2hlZFJlc291cmNlSGFuZGxlPFU+JiBvKSB7IHNldFJlc291cmNlKG8uZ2V0KCkpOyBy
ZXR1cm4gKnRoaXM7IH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWNoZWRSZXNvdXJj
ZUhhbmRsZUJhc2UmIG8pIGNvbnN0IHsgcmV0dXJuIGdldCgpID09IG8uZ2V0KCk7IH0KLSAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlJiBvKSBjb25zdCB7
IHJldHVybiBnZXQoKSAhPSBvLmdldCgpOyB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xh
c3MgUlI+IGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxSPiYgaCwg
Y29uc3QgUlIqIHJlcykgCi17IAotICAgIHJldHVybiBoLmdldCgpID09IHJlczsgCi19Ci10ZW1w
bGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUlI+IGJvb2wgb3BlcmF0b3I9PShjb25zdCBSUiogcmVzLCBj
b25zdCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxSPiYgaCkgCi17IAotICAgIHJldHVybiBoLmdldCgp
ID09IHJlczsgCi19Ci10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUlI+IGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxSPiYgaCwgY29uc3QgUlIqIHJlcykgCi17IAot
ICAgIHJldHVybiBoLmdldCgpICE9IHJlczsgCi19Ci10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3Mg
UlI+IGJvb2wgb3BlcmF0b3IhPShjb25zdCBSUiogcmVzLCBjb25zdCBDYWNoZWRSZXNvdXJjZUhh
bmRsZTxSPiYgaCkgCi17IAotICAgIHJldHVybiBoLmdldCgpICE9IHJlczsgCi19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIENhY2hlZFJlc291cmNlSGFuZGxlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDViN2Y4Y2Y2YjAwOWViMDRjY2Q1YTk3
OWNlMjZlMzk3ZjQzOGI5NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTI1NyArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAo
QykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHlyaWdodCAo
QykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAgICBDb3B5cmlnaHQgKEMp
IDIwMDIgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQotICAgIENvcHlyaWdodCAoQykg
MjAwNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgICBDb3B5cmlnaHQg
KEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCi0K
LSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotCi0g
ICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRp
bmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKLSAgICBwYWdlcyBmcm9tIHRoZSB3ZWIu
IEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KLSovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotCi0jaW5jbHVk
ZSAiQ2FjaGVkQ1NTU3R5bGVTaGVldC5oIgotI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiQ2FjaGVkRm9udC5oIgotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5j
bHVkZSAiQ2FjaGVkUmF3UmVzb3VyY2UuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZVJlcXVl
c3QuaCIKLSNpbmNsdWRlICJDYWNoZWRTVkdGb250LmgiCi0jaW5jbHVkZSAiQ2FjaGVkU2NyaXB0
LmgiCi0jaW5jbHVkZSAiQ2FjaGVkWFNMU3R5bGVTaGVldC5oIgotI2luY2x1ZGUgIkNocm9tZS5o
IgotI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgotI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25F
cnJvci5oIgotI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25SdWxlLmgiCi0jaW5jbHVkZSAiQ29u
dGVudFNlY3VyaXR5UG9saWN5LmgiCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAi
RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCIKLSNpbmNsdWRlICJEaWFnbm9zdGljTG9nZ2luZ0tl
eXMuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgi
Ci0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUg
IkZyYW1lTG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKLSNpbmNsdWRlICJMb2FkZXJTdHJhdGVneS5oIgot
I2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5j
bHVkZSAiTWFpbkZyYW1lLmgiCi0jaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKLSNpbmNsdWRlICJQ
YWdlLmgiCi0jaW5jbHVkZSAiUGVyZm9ybWFuY2UuaCIKLSNpbmNsdWRlICJQaW5nTG9hZGVyLmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCi0jaW5jbHVkZSAiUmVuZGVyRWxlbWVu
dC5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZEluZm8uaCIKLSNpbmNsdWRlICJSdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmgiCi0jaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgotI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiU2Vzc2lvbklELmgiCi0jaW5jbHVkZSAiU2V0
dGluZ3MuaCIKLSNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKLSNpbmNsdWRlICJTdWJy
ZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIlVzZXJDb250ZW50Q29udHJvbGxlci5oIgotI2lu
Y2x1ZGUgIlVzZXJTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQotI2luY2x1ZGUgIkNhY2hlZFRleHRUcmFjay5oIgotI2VuZGlmCi0KLSNkZWZpbmUgUFJFTE9B
RF9ERUJVRyAwCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIENhY2hlZFJlc291cmNl
KiBjcmVhdGVSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgU2Vzc2lvbklEIHNlc3Npb25JRCkK
LXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJl
c291cmNlOgotICAgICAgICByZXR1cm4gbmV3IENhY2hlZEltYWdlKHJlcXVlc3QsIHNlc3Npb25J
RCk7Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKLSAgICAgICAgcmV0
dXJuIG5ldyBDYWNoZWRDU1NTdHlsZVNoZWV0KHJlcXVlc3QsIGNoYXJzZXQsIHNlc3Npb25JRCk7
Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OgotICAgICAgICByZXR1cm4gbmV3IENh
Y2hlZFNjcmlwdChyZXF1ZXN0LCBjaGFyc2V0LCBzZXNzaW9uSUQpOwotICAgIGNhc2UgQ2FjaGVk
UmVzb3VyY2U6OlNWR0RvY3VtZW50UmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBuZXcgQ2FjaGVk
U1ZHRG9jdW1lbnQocmVxdWVzdCwgc2Vzc2lvbklEKTsKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQot
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0ZvbnRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJu
IG5ldyBDYWNoZWRTVkdGb250KHJlcXVlc3QsIHNlc3Npb25JRCk7Ci0jZW5kaWYKLSAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBuZXcgQ2FjaGVk
Rm9udChyZXF1ZXN0LCBzZXNzaW9uSUQpOwotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok1lZGlh
UmVzb3VyY2U6Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2U6Ci0gICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6TWFpblJlc291cmNlOgotICAgICAgICByZXR1cm4gbmV3IENhY2hl
ZFJhd1Jlc291cmNlKHJlcXVlc3QsIHR5cGUsIHNlc3Npb25JRCk7Ci0jaWYgRU5BQkxFKFhTTFQp
Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldDoKLSAgICAgICAgcmV0dXJu
IG5ldyBDYWNoZWRYU0xTdHlsZVNoZWV0KHJlcXVlc3QsIHNlc3Npb25JRCk7Ci0jZW5kaWYKLSNp
ZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rUHJl
ZmV0Y2g6Ci0gICAgICAgIHJldHVybiBuZXcgQ2FjaGVkUmVzb3VyY2UocmVxdWVzdCwgQ2FjaGVk
UmVzb3VyY2U6OkxpbmtQcmVmZXRjaCwgc2Vzc2lvbklEKTsKLSAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpMaW5rU3VicmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBuZXcgQ2FjaGVkUmVzb3VyY2Uo
cmVxdWVzdCwgQ2FjaGVkUmVzb3VyY2U6OkxpbmtTdWJyZXNvdXJjZSwgc2Vzc2lvbklEKTsKLSNl
bmRpZgotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpU
ZXh0VHJhY2tSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRUZXh0VHJhY2socmVx
dWVzdCwgc2Vzc2lvbklEKTsKLSNlbmRpZgotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkNhY2hl
ZFJlc291cmNlTG9hZGVyKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlcikKLSAgICA6IG1f
ZG9jdW1lbnQobnVsbHB0cikKLSAgICAsIG1fZG9jdW1lbnRMb2FkZXIoZG9jdW1lbnRMb2FkZXIp
Ci0gICAgLCBtX3JlcXVlc3RDb3VudCgwKQotICAgICwgbV9nYXJiYWdlQ29sbGVjdERvY3VtZW50
UmVzb3VyY2VzVGltZXIoKnRoaXMsICZDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Z2FyYmFnZUNvbGxl
Y3REb2N1bWVudFJlc291cmNlcykKLSAgICAsIG1fYXV0b0xvYWRJbWFnZXModHJ1ZSkKLSAgICAs
IG1faW1hZ2VzRW5hYmxlZCh0cnVlKQotICAgICwgbV9hbGxvd1N0YWxlUmVzb3VyY2VzKGZhbHNl
KQotewotfQotCi1DYWNoZWRSZXNvdXJjZUxvYWRlcjo6fkNhY2hlZFJlc291cmNlTG9hZGVyKCkK
LXsKLSAgICBtX2RvY3VtZW50TG9hZGVyID0gbnVsbHB0cjsKLSAgICBtX2RvY3VtZW50ID0gbnVs
bHB0cjsKLQotICAgIGNsZWFyUHJlbG9hZHMoKTsKLSAgICBmb3IgKGF1dG8mIHJlc291cmNlIDog
bV9kb2N1bWVudFJlc291cmNlcy52YWx1ZXMoKSkKLSAgICAgICAgcmVzb3VyY2UtPnNldE93bmlu
Z0NhY2hlZFJlc291cmNlTG9hZGVyKG51bGxwdHIpOwotCi0gICAgLy8gTWFrZSBzdXJlIG5vIHJl
cXVlc3RzIHN0aWxsIHBvaW50IHRvIHRoaXMgQ2FjaGVkUmVzb3VyY2VMb2FkZXIKLSAgICBBU1NF
UlQobV9yZXF1ZXN0Q291bnQgPT0gMCk7Ci19Ci0KLUNhY2hlZFJlc291cmNlKiBDYWNoZWRSZXNv
dXJjZUxvYWRlcjo6Y2FjaGVkUmVzb3VyY2UoY29uc3QgU3RyaW5nJiByZXNvdXJjZVVSTCkgY29u
c3QgCi17Ci0gICAgQVNTRVJUKCFyZXNvdXJjZVVSTC5pc051bGwoKSk7Ci0gICAgVVJMIHVybCA9
IG1fZG9jdW1lbnQtPmNvbXBsZXRlVVJMKHJlc291cmNlVVJMKTsKLSAgICByZXR1cm4gY2FjaGVk
UmVzb3VyY2UodXJsKTsgCi19Ci0KLUNhY2hlZFJlc291cmNlKiBDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6Y2FjaGVkUmVzb3VyY2UoY29uc3QgVVJMJiByZXNvdXJjZVVSTCkgY29uc3QKLXsKLSAgICBV
UkwgdXJsID0gTWVtb3J5Q2FjaGU6OnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcklmTmVlZGVkKHJl
c291cmNlVVJMKTsKLSAgICByZXR1cm4gbV9kb2N1bWVudFJlc291cmNlcy5nZXQodXJsKS5nZXQo
KTsgCi19Ci0KLUZyYW1lKiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZnJhbWUoKSBjb25zdAotewot
ICAgIHJldHVybiBtX2RvY3VtZW50TG9hZGVyID8gbV9kb2N1bWVudExvYWRlci0+ZnJhbWUoKSA6
IG51bGxwdHI7Ci19Ci0KLVNlc3Npb25JRCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6c2Vzc2lvbklE
KCkgY29uc3QKLXsKLSAgICBTZXNzaW9uSUQgc2Vzc2lvbklEID0gU2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCk7Ci0KLSAgICBpZiAoRnJhbWUqIGYgPSBmcmFtZSgpKQotICAgICAgICBzZXNz
aW9uSUQgPSBmLT5wYWdlKCktPnNlc3Npb25JRCgpOwotCi0gICAgcmV0dXJuIHNlc3Npb25JRDsK
LX0KLQotQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkSW1hZ2U+IENhY2hlZFJlc291cmNlTG9h
ZGVyOjpyZXF1ZXN0SW1hZ2UoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAg
IGlmIChGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+
bG9hZGVyKCkucGFnZURpc21pc3NhbEV2ZW50QmVpbmdEaXNwYXRjaGVkKCkgIT0gRnJhbWVMb2Fk
ZXI6OlBhZ2VEaXNtaXNzYWxUeXBlOjpOb25lKSB7Ci0gICAgICAgICAgICBpZiAoRG9jdW1lbnQq
IGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQt
PmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT51cGdyYWRlSW5zZWN1cmVSZXF1ZXN0SWZOZWVkZWQo
cmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCksIENvbnRlbnRTZWN1cml0eVBvbGljeTo6
SW5zZWN1cmVSZXF1ZXN0VHlwZTo6TG9hZCk7Ci0gICAgICAgICAgICBVUkwgcmVxdWVzdFVSTCA9
IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7Ci0gICAgICAgICAgICBpZiAocmVxdWVz
dFVSTC5pc1ZhbGlkKCkgJiYgY2FuUmVxdWVzdChDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJj
ZSwgcmVxdWVzdFVSTCwgcmVxdWVzdC5vcHRpb25zKCksIHJlcXVlc3QuZm9yUHJlbG9hZCgpKSkK
LSAgICAgICAgICAgICAgICBQaW5nTG9hZGVyOjpsb2FkSW1hZ2UoKmZyYW1lLCByZXF1ZXN0VVJM
KTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgfQotICAgIAot
ICAgIHJlcXVlc3Quc2V0RGVmZXIoY2xpZW50RGVmZXJzSW1hZ2UocmVxdWVzdC5yZXNvdXJjZVJl
cXVlc3QoKS51cmwoKSkgPyBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OkRlZmVycmVkQnlDbGllbnQg
OiBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6Ok5vRGVmZXIpOwotICAgIHJldHVybiBkb3duY2FzdDxD
YWNoZWRJbWFnZT4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNl
LCByZXF1ZXN0KS5nZXQoKSk7Ci19Ci0KLUNhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZEZvbnQ+
IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0Rm9udChDYWNoZWRSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGJvb2wgaXNTVkcpCi17Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBpZiAo
aXNTVkcpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDYWNoZWRTVkdGb250PihyZXF1ZXN0UmVz
b3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlNWR0ZvbnRSZXNvdXJjZSwgcmVxdWVzdCkuZ2V0KCkpOwot
I2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oaXNTVkcpOwotI2VuZGlmCi0gICAgcmV0dXJuIGRvd25j
YXN0PENhY2hlZEZvbnQ+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291
cmNlLCByZXF1ZXN0KS5nZXQoKSk7Ci19Ci0KLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi1DYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRUZXh0VHJhY2s+IENhY2hlZFJlc291cmNlTG9hZGVyOjpy
ZXF1ZXN0VGV4dFRyYWNrKENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICBy
ZXR1cm4gZG93bmNhc3Q8Q2FjaGVkVGV4dFRyYWNrPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVz
b3VyY2U6OlRleHRUcmFja1Jlc291cmNlLCByZXF1ZXN0KS5nZXQoKSk7Ci19Ci0jZW5kaWYKLQot
Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkQ1NTU3R5bGVTaGVldD4gQ2FjaGVkUmVzb3VyY2VM
b2FkZXI6OnJlcXVlc3RDU1NTdHlsZVNoZWV0KENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCkKLXsKLSAgICByZXR1cm4gZG93bmNhc3Q8Q2FjaGVkQ1NTU3R5bGVTaGVldD4ocmVxdWVzdFJl
c291cmNlKENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0LCByZXF1ZXN0KS5nZXQoKSk7Ci19
Ci0KLUNhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZENTU1N0eWxlU2hlZXQ+IENhY2hlZFJlc291
cmNlTG9hZGVyOjpyZXF1ZXN0VXNlckNTU1N0eWxlU2hlZXQoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0KQotewotICAgIFVSTCB1cmwgPSBNZW1vcnlDYWNoZTo6cmVtb3ZlRnJhZ21lbnRJ
ZGVudGlmaWVySWZOZWVkZWQocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKSk7Ci0KLSNp
ZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQotICAgIHJlcXVlc3QubXV0YWJsZVJlc291cmNl
UmVxdWVzdCgpLnNldERvbWFpbkZvckNhY2hlUGFydGl0aW9uKGRvY3VtZW50KCktPnRvcE9yaWdp
bigpLT5kb21haW5Gb3JDYWNoZVBhcnRpdGlvbigpKTsKLSNlbmRpZgotCi0gICAgYXV0byYgbWVt
b3J5Q2FjaGUgPSBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCk7Ci0gICAgaWYgKHJlcXVlc3QuYWxs
b3dzQ2FjaGluZygpKSB7Ci0gICAgICAgIGlmIChDYWNoZWRSZXNvdXJjZSogZXhpc3RpbmcgPSBt
ZW1vcnlDYWNoZS5yZXNvdXJjZUZvclJlcXVlc3QocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwg
c2Vzc2lvbklEKCkpKSB7Ci0gICAgICAgICAgICBpZiAoaXM8Q2FjaGVkQ1NTU3R5bGVTaGVldD4o
KmV4aXN0aW5nKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2FjaGVkQ1NTU3R5
bGVTaGVldD4oZXhpc3RpbmcpOwotICAgICAgICAgICAgbWVtb3J5Q2FjaGUucmVtb3ZlKCpleGlz
dGluZyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodXJsLnN0cmluZygpICE9IHJlcXVl
c3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCkpCi0gICAgICAgIHJlcXVlc3QubXV0YWJsZVJlc291
cmNlUmVxdWVzdCgpLnNldFVSTCh1cmwpOwotCi0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2Fj
aGVkQ1NTU3R5bGVTaGVldD4gdXNlclNoZWV0ID0gbmV3IENhY2hlZENTU1N0eWxlU2hlZXQocmVx
dWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgcmVxdWVzdC5jaGFyc2V0KCksIHNlc3Npb25JRCgpKTsK
LQotICAgIGlmIChyZXF1ZXN0LmFsbG93c0NhY2hpbmcoKSkKLSAgICAgICAgbWVtb3J5Q2FjaGUu
YWRkKCp1c2VyU2hlZXQpOwotICAgIC8vIEZJWE1FOiBsb2FkUmVzb3VyY2UgY2FsbHMgc2V0T3du
aW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoKSBpZiB0aGUgcmVzb3VyY2UgY291bGRuJ3QgYmUgYWRk
ZWQgdG8gY2FjaGUuIERvZXMgdGhpcyBmdW5jdGlvbiBuZWVkIHRvIGNhbGwgaXQsIHRvbz8KLQot
ICAgIHVzZXJTaGVldC0+bG9hZCgqdGhpcywgUmVzb3VyY2VMb2FkZXJPcHRpb25zKERvTm90U2Vu
ZENhbGxiYWNrcywgU25pZmZDb250ZW50LCBCdWZmZXJEYXRhLCBBbGxvd1N0b3JlZENyZWRlbnRp
YWxzLCBDbGllbnRDcmVkZW50aWFsUG9saWN5OjpNYXlBc2tDbGllbnRGb3JDcmVkZW50aWFscywg
RmV0Y2hPcHRpb25zOjpDcmVkZW50aWFsczo6SW5jbHVkZSwgU2tpcFNlY3VyaXR5Q2hlY2ssIEZl
dGNoT3B0aW9uczo6TW9kZTo6Tm9Db3JzLCBEb05vdEluY2x1ZGVDZXJ0aWZpY2F0ZUluZm8sIENv
bnRlbnRTZWN1cml0eVBvbGljeUltcG9zaXRpb246OlNraXBQb2xpY3lDaGVjaywgRGVmZXJzTG9h
ZGluZ1BvbGljeTo6QWxsb3dEZWZlcnNMb2FkaW5nLCBDYWNoaW5nUG9saWN5OjpBbGxvd0NhY2hp
bmcpKTsKLSAgICAKLSAgICByZXR1cm4gdXNlclNoZWV0OwotfQotCi1DYWNoZWRSZXNvdXJjZUhh
bmRsZTxDYWNoZWRTY3JpcHQ+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0U2NyaXB0KENh
Y2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gZG93bmNhc3Q8Q2Fj
aGVkU2NyaXB0PihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdCwgcmVxdWVz
dCkuZ2V0KCkpOwotfQotCi0jaWYgRU5BQkxFKFhTTFQpCi1DYWNoZWRSZXNvdXJjZUhhbmRsZTxD
YWNoZWRYU0xTdHlsZVNoZWV0PiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFhTTFN0eWxl
U2hlZXQoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIHJldHVybiBkb3du
Y2FzdDxDYWNoZWRYU0xTdHlsZVNoZWV0PihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6
OlhTTFN0eWxlU2hlZXQsIHJlcXVlc3QpLmdldCgpKTsKLX0KLSNlbmRpZgotCi1DYWNoZWRSZXNv
dXJjZUhhbmRsZTxDYWNoZWRTVkdEb2N1bWVudD4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVl
c3RTVkdEb2N1bWVudChDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgcmV0
dXJuIGRvd25jYXN0PENhY2hlZFNWR0RvY3VtZW50PihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVz
b3VyY2U6OlNWR0RvY3VtZW50UmVzb3VyY2UsIHJlcXVlc3QpLmdldCgpKTsKLX0KLQotI2lmIEVO
QUJMRShMSU5LX1BSRUZFVENIKQotQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+
IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0TGlua1Jlc291cmNlKENhY2hlZFJlc291cmNl
OjpUeXBlIHR5cGUsIENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICBBU1NF
UlQoZnJhbWUoKSk7Ci0gICAgQVNTRVJUKHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVm
ZXRjaCB8fCB0eXBlID09IENhY2hlZFJlc291cmNlOjpMaW5rU3VicmVzb3VyY2UpOwotICAgIHJl
dHVybiByZXF1ZXN0UmVzb3VyY2UodHlwZSwgcmVxdWVzdCk7Ci19Ci0jZW5kaWYKLQotQ2FjaGVk
UmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+IENhY2hlZFJlc291cmNlTG9hZGVyOjpy
ZXF1ZXN0TWVkaWEoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIHJldHVy
biBkb3duY2FzdDxDYWNoZWRSYXdSZXNvdXJjZT4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291
cmNlOjpNZWRpYVJlc291cmNlLCByZXF1ZXN0KS5nZXQoKSk7Ci19Ci0KLUNhY2hlZFJlc291cmNl
SGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJh
d1Jlc291cmNlKENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICByZXR1cm4g
ZG93bmNhc3Q8Q2FjaGVkUmF3UmVzb3VyY2U+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJj
ZTo6UmF3UmVzb3VyY2UsIHJlcXVlc3QpLmdldCgpKTsKLX0KLQotQ2FjaGVkUmVzb3VyY2VIYW5k
bGU8Q2FjaGVkUmF3UmVzb3VyY2U+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0TWFpblJl
c291cmNlKENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gZG93
bmNhc3Q8Q2FjaGVkUmF3UmVzb3VyY2U+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6
TWFpblJlc291cmNlLCByZXF1ZXN0KS5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBNaXhlZENvbnRlbnRD
aGVja2VyOjpDb250ZW50VHlwZSBjb250ZW50VHlwZUZyb21SZXNvdXJjZVR5cGUoQ2FjaGVkUmVz
b3VyY2U6OlR5cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAvLyBodHRwczov
L3czYy5naXRodWIuaW8vd2ViYXBwc2VjLW1peGVkLWNvbnRlbnQvI2NhdGVnb3J5LW9wdGlvbmFs
bHktYmxvY2thYmxlCi0gICAgLy8gRWRpdG9yJ3MgRHJhZnQsIDExIEZlYnJ1YXJ5IDIwMTYKLSAg
ICAvLyAzLjEuIE9wdGlvbmFsbHktYmxvY2thYmxlIENvbnRlbnQKLSAgICBjYXNlIENhY2hlZFJl
c291cmNlOjpJbWFnZVJlc291cmNlOgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok1lZGlhUmVz
b3VyY2U6Ci0gICAgICAgICAgICByZXR1cm4gTWl4ZWRDb250ZW50Q2hlY2tlcjo6Q29udGVudFR5
cGU6OkFjdGl2ZUNhbldhcm47Ci0KLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNo
ZWV0OgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKLSAgICBjYXNlIENhY2hlZFJl
c291cmNlOjpGb250UmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBNaXhlZENvbnRlbnRDaGVja2Vy
OjpDb250ZW50VHlwZTo6QWN0aXZlOwotCi0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpTVkdGb250UmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBNaXhlZENv
bnRlbnRDaGVja2VyOjpDb250ZW50VHlwZTo6QWN0aXZlOwotI2VuZGlmCi0KLSAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpSYXdSZXNvdXJjZToKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdE
b2N1bWVudFJlc291cmNlOgotICAgICAgICByZXR1cm4gTWl4ZWRDb250ZW50Q2hlY2tlcjo6Q29u
dGVudFR5cGU6OkFjdGl2ZTsKLSNpZiBFTkFCTEUoWFNMVCkKLSAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpYU0xTdHlsZVNoZWV0OgotICAgICAgICByZXR1cm4gTWl4ZWRDb250ZW50Q2hlY2tlcjo6
Q29udGVudFR5cGU6OkFjdGl2ZTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gp
Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1ByZWZldGNoOgotICAgIGNhc2UgQ2FjaGVk
UmVzb3VyY2U6OkxpbmtTdWJyZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIE1peGVkQ29udGVudENo
ZWNrZXI6OkNvbnRlbnRUeXBlOjpBY3RpdmU7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShWSURFT19U
UkFDSykKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpUZXh0VHJhY2tSZXNvdXJjZToKLSAgICAg
ICAgcmV0dXJuIE1peGVkQ29udGVudENoZWNrZXI6OkNvbnRlbnRUeXBlOjpBY3RpdmU7Ci0jZW5k
aWYKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIE1peGVkQ29udGVudENoZWNrZXI6OkNvbnRlbnRUeXBlOjpBY3RpdmU7Ci0gICAgfQot
fQotCi1ib29sIENhY2hlZFJlc291cmNlTG9hZGVyOjpjaGVja0luc2VjdXJlQ29udGVudChDYWNo
ZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBVUkwmIHVybCkgY29uc3QKLXsKLSAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6Ci0jaWYgRU5BQkxF
KFhTTFQpCi0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldDoKLSNlbmRpZgot
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0RvY3VtZW50UmVzb3VyY2U6Ci0gICAgY2FzZSBD
YWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKLSAgICAgICAgLy8gVGhlc2UgcmVzb3VyY2Ug
Y2FuIGluamVjdCBzY3JpcHQgaW50byB0aGUgY3VycmVudCBkb2N1bWVudCAoU2NyaXB0LAotICAg
ICAgICAvLyBYU0wpIG9yIGV4ZmlsdHJhdGUgdGhlIGNvbnRlbnQgb2YgdGhlIGN1cnJlbnQgZG9j
dW1lbnQgKENTUykuCi0gICAgICAgIGlmIChGcmFtZSogZiA9IGZyYW1lKCkpIHsKLSAgICAgICAg
ICAgIGlmICghZi0+bG9hZGVyKCkubWl4ZWRDb250ZW50Q2hlY2tlcigpLmNhblJ1bkluc2VjdXJl
Q29udGVudChtX2RvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCB1cmwpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIEZyYW1lJiB0b3AgPSBmLT50cmVlKCkudG9w
KCk7Ci0gICAgICAgICAgICBpZiAoJnRvcCAhPSBmICYmICF0b3AubG9hZGVyKCkubWl4ZWRDb250
ZW50Q2hlY2tlcigpLmNhblJ1bkluc2VjdXJlQ29udGVudCh0b3AuZG9jdW1lbnQoKS0+c2VjdXJp
dHlPcmlnaW4oKSwgdXJsKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OlRleHRUcmFja1Jlc291cmNlOgotI2VuZGlmCi0gICAgY2FzZSBDYWNoZWRS
ZXNvdXJjZTo6TWVkaWFSZXNvdXJjZToKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpSYXdSZXNv
dXJjZToKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgotI2lmIEVOQUJM
RShTVkdfRk9OVFMpCi0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U1ZHRm9udFJlc291cmNlOgot
I2VuZGlmCi0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlOiB7Ci0gICAgICAg
IC8vIFRoZXNlIHJlc291cmNlcyBjYW4gY29ycnVwdCBvbmx5IHRoZSBmcmFtZSdzIHBpeGVscy4K
LSAgICAgICAgaWYgKEZyYW1lKiBmID0gZnJhbWUoKSkgewotICAgICAgICAgICAgRnJhbWUmIHRv
cEZyYW1lID0gZi0+dHJlZSgpLnRvcCgpOwotICAgICAgICAgICAgaWYgKCF0b3BGcmFtZS5sb2Fk
ZXIoKS5taXhlZENvbnRlbnRDaGVja2VyKCkuY2FuRGlzcGxheUluc2VjdXJlQ29udGVudCh0b3BG
cmFtZS5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBjb250ZW50VHlwZUZyb21SZXNvdXJj
ZVR5cGUodHlwZSksIHVybCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpNYWlu
UmVzb3VyY2U6Ci0jaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCi0gICAgY2FzZSBDYWNoZWRSZXNv
dXJjZTo6TGlua1ByZWZldGNoOgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtTdWJyZXNv
dXJjZToKLSAgICAgICAgLy8gUHJlZmV0Y2ggY2Fubm90IGFmZmVjdCB0aGUgY3VycmVudCBkb2N1
bWVudC4KLSNlbmRpZgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1NhbWVPcmlnaW5EYXRhVVJMKGNvbnN0IFVSTCYgdXJs
LCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMsIGJvb2wgZGlkUmVjZWl2ZVJl
ZGlyZWN0UmVzcG9uc2UpCi17Ci0gICAgcmV0dXJuICFkaWRSZWNlaXZlUmVkaXJlY3RSZXNwb25z
ZSAmJiB1cmwucHJvdG9jb2xJc0RhdGEoKSAmJiBvcHRpb25zLnNhbWVPcmlnaW5EYXRhVVJMRmxh
ZyA9PSBTYW1lT3JpZ2luRGF0YVVSTEZsYWc6OlNldDsKLX0KLQotYm9vbCBDYWNoZWRSZXNvdXJj
ZUxvYWRlcjo6Y2FuUmVxdWVzdChDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBVUkwm
IHVybCwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zLCBib29sIGZvclByZWxv
YWQsIGJvb2wgZGlkUmVjZWl2ZVJlZGlyZWN0UmVzcG9uc2UpCi17Ci0gICAgaWYgKGRvY3VtZW50
KCkgJiYgIWRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkRpc3BsYXkodXJsKSkgewot
ICAgICAgICBpZiAoIWZvclByZWxvYWQpCi0gICAgICAgICAgICBGcmFtZUxvYWRlcjo6cmVwb3J0
TG9jYWxMb2FkRmFpbGVkKGZyYW1lKCksIHVybC5zdHJpbmdDZW50ZXJFbGxpcHNpemVkVG9MZW5n
dGgoKSk7Ci0gICAgICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6cmVxdWVzdFJlc291cmNlIFVSTCB3YXMgbm90IGFsbG93ZWQgYnkgU2VjdXJpdHlPcmlnaW46
OmNhbkRpc3BsYXkiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wg
c2tpcENvbnRlbnRTZWN1cml0eVBvbGljeUNoZWNrID0gb3B0aW9ucy5jb250ZW50U2VjdXJpdHlQ
b2xpY3lJbXBvc2l0aW9uID09IENvbnRlbnRTZWN1cml0eVBvbGljeUltcG9zaXRpb246OlNraXBQ
b2xpY3lDaGVjazsKLSAgICBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlZGlyZWN0UmVzcG9uc2VS
ZWNlaXZlZCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgPSBkaWRSZWNlaXZlUmVkaXJlY3RSZXNw
b25zZSA/IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkOjpZ
ZXMgOiBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZDo6Tm87
Ci0KLSAgICAvLyBTb21lIHR5cGVzIG9mIHJlc291cmNlcyBjYW4gYmUgbG9hZGVkIG9ubHkgZnJv
bSB0aGUgc2FtZSBvcmlnaW4uIE90aGVyIHR5cGVzIG9mIHJlc291cmNlcywgbGlrZSBJbWFnZXMs
IFNjcmlwdHMsIGFuZCBDU1MsIGNhbiBiZSBsb2FkZWQgZnJvbSBhbnkgVVJMLgotICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgcmVtb3ZlIHRoYXQgY2hlY2sgYW5kIGhhbmRsZSBpdCBieSBzZXR0aW5n
IHRoZSBjb3JyZWN0IFJlc291cmNlTG9hZGVyT3B0aW9uczo6bW9kZS4KLSAgICBzd2l0Y2ggKHR5
cGUpIHsKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpNYWluUmVzb3VyY2U6Ci0gICAgY2FzZSBD
YWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpD
U1NTdHlsZVNoZWV0OgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKLSNpZiBFTkFC
TEUoU1ZHX0ZPTlRTKQotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0ZvbnRSZXNvdXJjZToK
LSNlbmRpZgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok1lZGlhUmVzb3VyY2U6Ci0gICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlOgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OlJhd1Jlc291cmNlOgotI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQotICAgIGNhc2UgQ2FjaGVk
UmVzb3VyY2U6OkxpbmtQcmVmZXRjaDoKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rU3Vi
cmVzb3VyY2U6Ci0jZW5kaWYKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6VGV4dFRyYWNrUmVzb3VyY2U6Ci0jZW5kaWYKLSAgICAgICAgaWYgKG9wdGlv
bnMubW9kZSA9PSBGZXRjaE9wdGlvbnM6Ok1vZGU6OlNhbWVPcmlnaW4gJiYgIWlzU2FtZU9yaWdp
bkRhdGFVUkwodXJsLCBvcHRpb25zLCBkaWRSZWNlaXZlUmVkaXJlY3RSZXNwb25zZSkgJiYhbV9k
b2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpKSB7Ci0gICAgICAgICAg
ICBwcmludEFjY2Vzc0RlbmllZE1lc3NhZ2UodXJsKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpT
VkdEb2N1bWVudFJlc291cmNlOgotI2lmIEVOQUJMRShYU0xUKQotICAgIGNhc2UgQ2FjaGVkUmVz
b3VyY2U6OlhTTFN0eWxlU2hlZXQ6Ci0gICAgICAgIGlmICghbV9kb2N1bWVudC0+c2VjdXJpdHlP
cmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpKSB7Ci0gICAgICAgICAgICBwcmludEFjY2Vzc0Rlbmll
ZE1lc3NhZ2UodXJsKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotI2Vu
ZGlmCi0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHN3aXRjaCAodHlwZSkgewotI2lmIEVO
QUJMRShYU0xUKQotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6Ci0gICAg
ICAgIGlmICghbV9kb2N1bWVudC0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93U2NyaXB0
RnJvbVNvdXJjZSh1cmwsIHNraXBDb250ZW50U2VjdXJpdHlQb2xpY3lDaGVjaywgcmVkaXJlY3RS
ZXNwb25zZVJlY2VpdmVkKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYnJl
YWs7Ci0jZW5kaWYKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6Ci0gICAgICAgIGlm
ICghbV9kb2N1bWVudC0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93U2NyaXB0RnJvbVNv
dXJjZSh1cmwsIHNraXBDb250ZW50U2VjdXJpdHlQb2xpY3lDaGVjaywgcmVkaXJlY3RSZXNwb25z
ZVJlY2VpdmVkKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGZyYW1l
KCkgJiYgIWZyYW1lKCktPnNldHRpbmdzKCkuaXNTY3JpcHRFbmFibGVkKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OkNTU1N0eWxlU2hlZXQ6Ci0gICAgICAgIGlmICghbV9kb2N1bWVudC0+Y29udGVudFNlY3VyaXR5
UG9saWN5KCktPmFsbG93U3R5bGVGcm9tU291cmNlKHVybCwgc2tpcENvbnRlbnRTZWN1cml0eVBv
bGljeUNoZWNrLCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdEb2N1
bWVudFJlc291cmNlOgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6Ci0g
ICAgICAgIGlmICghbV9kb2N1bWVudC0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93SW1h
Z2VGcm9tU291cmNlKHVybCwgc2tpcENvbnRlbnRTZWN1cml0eVBvbGljeUNoZWNrLCByZWRpcmVj
dFJlc3BvbnNlUmVjZWl2ZWQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBi
cmVhazsKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNW
R0ZvbnRSZXNvdXJjZToKLSNlbmRpZgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNv
dXJjZTogewotICAgICAgICBpZiAoIW1fZG9jdW1lbnQtPmNvbnRlbnRTZWN1cml0eVBvbGljeSgp
LT5hbGxvd0ZvbnRGcm9tU291cmNlKHVybCwgc2tpcENvbnRlbnRTZWN1cml0eVBvbGljeUNoZWNr
LCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TWFpblJlc291
cmNlOgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOgotI2lmIEVOQUJMRShM
SU5LX1BSRUZFVENIKQotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRjaDoKLSAg
ICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rU3VicmVzb3VyY2U6Ci0jZW5kaWYKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TWVkaWFSZXNvdXJjZToKLSNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCi0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6VGV4dFRyYWNrUmVzb3Vy
Y2U6Ci0jZW5kaWYKLSAgICAgICAgaWYgKCFtX2RvY3VtZW50LT5jb250ZW50U2VjdXJpdHlQb2xp
Y3koKS0+YWxsb3dNZWRpYUZyb21Tb3VyY2UodXJsLCBza2lwQ29udGVudFNlY3VyaXR5UG9saWN5
Q2hlY2ssIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIC8vIFNWRyBJbWFnZXMgaGF2ZSB1bmlx
dWUgc2VjdXJpdHkgcnVsZXMgdGhhdCBwcmV2ZW50IGFsbCBzdWJyZXNvdXJjZSByZXF1ZXN0cyBl
eGNlcHQgZm9yIGRhdGEgdXJscy4KLSAgICBpZiAodHlwZSAhPSBDYWNoZWRSZXNvdXJjZTo6TWFp
blJlc291cmNlICYmIGZyYW1lKCkgJiYgZnJhbWUoKS0+cGFnZSgpKSB7Ci0gICAgICAgIGlmIChm
cmFtZSgpLT5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLmlzU1ZHSW1hZ2VDaHJvbWVDbGllbnQo
KSAmJiAhdXJsLnByb3RvY29sSXNEYXRhKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgaWYgKCFjYW5SZXF1ZXN0SW5Db250ZW50RGlzcG9zaXRpb25BdHRhY2htZW50
U2FuZGJveCh0eXBlLCB1cmwpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBMYXN0
IG9mIGFsbCwgY2hlY2sgZm9yIGluc2VjdXJlIGNvbnRlbnQuIFdlIGRvIHRoaXMgbGFzdCBzbyB0
aGF0IHdoZW4KLSAgICAvLyBmb2xrcyBibG9jayBpbnNlY3VyZSBjb250ZW50IHdpdGggYSBDU1Ag
cG9saWN5LCB0aGV5IGRvbid0IGdldCBhIHdhcm5pbmcuCi0gICAgLy8gVGhleSdsbCBzdGlsbCBn
ZXQgYSB3YXJuaW5nIGluIHRoZSBjb25zb2xlIGFib3V0IENTUCBibG9ja2luZyB0aGUgbG9hZC4K
LQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgY29uc2lkZXIgZm9yUHJlbG9hZCBoZXJlPwotICAg
IGlmICghY2hlY2tJbnNlY3VyZUNvbnRlbnQodHlwZSwgdXJsKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
OmNhblJlcXVlc3RJbkNvbnRlbnREaXNwb3NpdGlvbkF0dGFjaG1lbnRTYW5kYm94KENhY2hlZFJl
c291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFVSTCYgdXJsKSBjb25zdAotewotICAgIERvY3VtZW50
KiBkb2N1bWVudDsKLSAgICAKLSAgICAvLyBGSVhNRTogRG8gd2Ugd2FudCB0byBleHBhbmQgdGhp
cyB0byBhbGwgcmVzb3VyY2UgdHlwZXMgdGhhdCB0aGUgbWl4ZWQgY29udGVudCBjaGVja2VyIHdv
dWxkIGNvbnNpZGVyIGFjdGl2ZSBjb250ZW50PwotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNh
c2UgQ2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZToKLSAgICAgICAgaWYgKGF1dG8gb3duZXJF
bGVtZW50ID0gZnJhbWUoKSA/IGZyYW1lKCktPm93bmVyRWxlbWVudCgpIDogbnVsbHB0cikgewot
ICAgICAgICAgICAgZG9jdW1lbnQgPSAmb3duZXJFbGVtZW50LT5kb2N1bWVudCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBD
YWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKLSAgICAgICAgZG9jdW1lbnQgPSBtX2RvY3Vt
ZW50OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBpZiAoIWRvY3VtZW50LT5zaG91bGRFbmZvcmNlQ29udGVudERpc3Bvc2l0
aW9uQXR0YWNobWVudFNhbmRib3goKSB8fCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2Fu
UmVxdWVzdCh1cmwpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFN0cmluZyBtZXNzYWdl
ID0gIlVuc2FmZSBhdHRlbXB0IHRvIGxvYWQgVVJMICIgKyB1cmwuc3RyaW5nQ2VudGVyRWxsaXBz
aXplZFRvTGVuZ3RoKCkgKyAiIGZyb20gZG9jdW1lbnQgd2l0aCBDb250ZW50LURpc3Bvc2l0aW9u
OiBhdHRhY2htZW50IGF0IFVSTCAiICsgZG9jdW1lbnQtPnVybCgpLnN0cmluZ0NlbnRlckVsbGlw
c2l6ZWRUb0xlbmd0aCgpICsgIi4iOwotICAgIGRvY3VtZW50LT5hZGRDb25zb2xlTWVzc2FnZShN
ZXNzYWdlU291cmNlOjpTZWN1cml0eSwgTWVzc2FnZUxldmVsOjpFcnJvciwgbWVzc2FnZSk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENhY2hlZFJlc291cmNlTG9hZGVyOjpzaG91bGRD
b250aW51ZUFmdGVyTm90aWZ5aW5nTG9hZGVkRnJvbU1lbW9yeUNhY2hlKGNvbnN0IENhY2hlZFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQotewotICAg
IGlmICghcmVzb3VyY2UgfHwgIWZyYW1lKCkgfHwgcmVzb3VyY2UtPnN0YXR1cygpICE9IENhY2hl
ZFJlc291cmNlOjpDYWNoZWQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUmVzb3VyY2VS
ZXF1ZXN0IG5ld1JlcXVlc3QgPSBSZXNvdXJjZVJlcXVlc3QocmVzb3VyY2UtPnVybCgpKTsKLSAg
ICBpZiAocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5oaWRkZW5Gcm9tSW5zcGVjdG9yKCkpCi0g
ICAgICAgIG5ld1JlcXVlc3Quc2V0SGlkZGVuRnJvbUluc3BlY3Rvcih0cnVlKTsKLSAgICBmcmFt
ZSgpLT5sb2FkZXIoKS5sb2FkZWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShyZXNvdXJjZSwgbmV3
UmVxdWVzdCk7Ci0KLSAgICAvLyBGSVhNRSA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMTMyNTE+OiBJ
ZiB0aGUgZGVsZWdhdGUgbW9kaWZpZXMgdGhlIHJlcXVlc3QncwotICAgIC8vIFVSTCwgaXQgaXMg
bm8gbG9uZ2VyIGFwcHJvcHJpYXRlIHRvIHVzZSB0aGlzIENhY2hlZFJlc291cmNlLgotICAgIHJl
dHVybiAhbmV3UmVxdWVzdC5pc051bGwoKTsKLX0KLQotYm9vbCBDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6dXBkYXRlQ2FjaGVkUmVzb3VyY2VXaXRoQ3VycmVudFJlcXVlc3QoQ2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4mIHJl
c291cmNlSGFuZGxlKQotewotICAgIEFTU0VSVChyZXNvdXJjZUhhbmRsZSk7Ci0KLSAgICBDYWNo
ZWRSZXNvdXJjZSYgcmVzb3VyY2UgPSAqcmVzb3VyY2VIYW5kbGU7Ci0KLSAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIHByb2dyZXNzaXZlbHkgZXh0ZW5kIHRoaXMgdG8gb3RoZXIgcmV1c2FibGUgcmVz
b3VyY2VzCi0gICAgaWYgKHJlc291cmNlLnR5cGUoKSAhPSBDYWNoZWRSZXNvdXJjZTo6VHlwZTo6
SW1hZ2VSZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBzaG91bGRV
cGRhdGUgPSByZXNvdXJjZS5vcHRpb25zKCkubW9kZSAhPSByZXF1ZXN0Lm9wdGlvbnMoKS5tb2Rl
IHx8IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cE9yaWdpbigpICE9IHJlc291cmNlLnJl
c291cmNlUmVxdWVzdCgpLmh0dHBPcmlnaW4oKTsKLQotICAgIGlmICghc2hvdWxkVXBkYXRlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRTogRm9yIGJlaW5nIGxvYWRlZCBy
ZXF1ZXN0cywgd2UgY3VycmVudGx5IGRvIG5vdCB1c2UgdGhlIHNhbWUgcmVzb3VyY2UsIGFzIHRo
aXMgbWF5IGluZHVjZSBlcnJvcnMgaW4gdGhlIHJlc291cmNlIHJlc3BvbnNlIHRhaW50aW5nLgot
ICAgIC8vIFdlIHNob3VsZCBmaW5kIGEgd2F5IHRvIGltcHJvdmUgdGhpcy4KLSAgICBpZiAocmVz
b3VyY2Uuc3RhdHVzKCkgIT0gQ2FjaGVkUmVzb3VyY2U6OkNhY2hlZCkgewotICAgICAgICByZXF1
ZXN0LnNldENhY2hpbmdQb2xpY3koQ2FjaGluZ1BvbGljeTo6RGlzYWxsb3dDYWNoaW5nKTsKLSAg
ICAgICAgcmVzb3VyY2VIYW5kbGUgPSBsb2FkUmVzb3VyY2UocmVzb3VyY2UudHlwZSgpLCByZXF1
ZXN0KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmVzb3VyY2VIYW5kbGUg
PSBjcmVhdGVSZXNvdXJjZShyZXNvdXJjZS50eXBlKCksIHJlcXVlc3QubXV0YWJsZVJlc291cmNl
UmVxdWVzdCgpLCByZXF1ZXN0LmNoYXJzZXQoKSwgc2Vzc2lvbklEKCkpOwotICAgIHJlc291cmNl
SGFuZGxlLT5sb2FkRnJvbShyZXNvdXJjZSwgcmVxdWVzdC5vcHRpb25zKCksICp0aGlzKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGxvZ01lbW9yeUNhY2hlUmVz
b3VyY2VSZXF1ZXN0KEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgY29u
c3QgU3RyaW5nJiB2YWx1ZSA9IFN0cmluZygpKQotewotICAgIGlmICghZnJhbWUgfHwgIWZyYW1l
LT5wYWdlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAodmFsdWUuaXNOdWxsKCkpCi0gICAg
ICAgIGZyYW1lLT5wYWdlKCktPmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCkubG9nRGlhZ25vc3Rp
Y01lc3NhZ2UoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZVJlcXVlc3RLZXkoKSwgZGVz
Y3JpcHRpb24sIFNob3VsZFNhbXBsZTo6WWVzKTsKLSAgICBlbHNlCi0gICAgICAgIGZyYW1lLT5w
YWdlKCktPmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRo
VmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZVJlcXVlc3RLZXkoKSwgZGVzY3Jp
cHRpb24sIHZhbHVlLCBTaG91bGRTYW1wbGU6Olllcyk7Ci19Ci0KLUNhY2hlZFJlc291cmNlSGFu
ZGxlPENhY2hlZFJlc291cmNlPiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJlc291cmNl
KENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCkKLXsKLSAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKSkKLSAg
ICAgICAgZG9jdW1lbnQtPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT51cGdyYWRlSW5zZWN1cmVS
ZXF1ZXN0SWZOZWVkZWQocmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCksIENvbnRlbnRT
ZWN1cml0eVBvbGljeTo6SW5zZWN1cmVSZXF1ZXN0VHlwZTo6TG9hZCk7Ci0gICAgCi0gICAgVVJM
IHVybCA9IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7Ci0gICAgCi0gICAgTE9HKFJl
c291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmVzb3VyY2UgJyVz
JywgY2hhcnNldCAnJXMnLCBwcmlvcml0eT0lZCwgZm9yUHJlbG9hZD0ldSIsIHVybC5zdHJpbmdD
ZW50ZXJFbGxpcHNpemVkVG9MZW5ndGgoKS5sYXRpbjEoKS5kYXRhKCksIHJlcXVlc3QuY2hhcnNl
dCgpLmxhdGluMSgpLmRhdGEoKSwgcmVxdWVzdC5wcmlvcml0eSgpID8gc3RhdGljX2Nhc3Q8aW50
PihyZXF1ZXN0LnByaW9yaXR5KCkudmFsdWUoKSkgOiAtMSwgcmVxdWVzdC5mb3JQcmVsb2FkKCkp
OwotICAgIAotICAgIC8vIElmIG9ubHkgdGhlIGZyYWdtZW50IGlkZW50aWZpZXJzIGRpZmZlciwg
aXQgaXMgdGhlIHNhbWUgcmVzb3VyY2UuCi0gICAgdXJsID0gTWVtb3J5Q2FjaGU6OnJlbW92ZUZy
YWdtZW50SWRlbnRpZmllcklmTmVlZGVkKHVybCk7Ci0KLSAgICBpZiAoIXVybC5pc1ZhbGlkKCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKCFjYW5SZXF1ZXN0KHR5cGUsIHVy
bCwgcmVxdWVzdC5vcHRpb25zKCksIHJlcXVlc3QuZm9yUHJlbG9hZCgpKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIGlmIChm
cmFtZSgpICYmIGZyYW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKSAmJiBtX2RvY3VtZW50TG9hZGVy
KSB7Ci0gICAgICAgIGF1dG8mIHJlc291cmNlUmVxdWVzdCA9IHJlcXVlc3QubXV0YWJsZVJlc291
cmNlUmVxdWVzdCgpOwotICAgICAgICBhdXRvIGJsb2NrZWRTdGF0dXMgPSBmcmFtZSgpLT5tYWlu
RnJhbWUoKS5wYWdlKCktPnVzZXJDb250ZW50UHJvdmlkZXIoKS5wcm9jZXNzQ29udGVudEV4dGVu
c2lvblJ1bGVzRm9yTG9hZChyZXNvdXJjZVJlcXVlc3QudXJsKCksIHRvUmVzb3VyY2VUeXBlKHR5
cGUpLCAqbV9kb2N1bWVudExvYWRlcik7Ci0gICAgICAgIGFwcGx5QmxvY2tlZFN0YXR1c1RvUmVx
dWVzdChibG9ja2VkU3RhdHVzLCByZXNvdXJjZVJlcXVlc3QpOwotICAgICAgICBpZiAoYmxvY2tl
ZFN0YXR1cy5ibG9ja2VkTG9hZCkgewotICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ2FjaGVkUmVz
b3VyY2U6OlR5cGU6Ok1haW5SZXNvdXJjZSkgewotICAgICAgICAgICAgICAgIGF1dG8gcmVzb3Vy
Y2UgPSBjcmVhdGVSZXNvdXJjZSh0eXBlLCByZXF1ZXN0Lm11dGFibGVSZXNvdXJjZVJlcXVlc3Qo
KSwgcmVxdWVzdC5jaGFyc2V0KCksIHNlc3Npb25JRCgpKTsKLSAgICAgICAgICAgICAgICBBU1NF
UlQocmVzb3VyY2UpOwotICAgICAgICAgICAgICAgIHJlc291cmNlLT5lcnJvcihDYWNoZWRSZXNv
dXJjZTo6U3RhdHVzOjpMb2FkRXJyb3IpOwotICAgICAgICAgICAgICAgIHJlc291cmNlLT5zZXRS
ZXNvdXJjZUVycm9yKFJlc291cmNlRXJyb3IoQ29udGVudEV4dGVuc2lvbnM6OldlYktpdENvbnRl
bnRCbG9ja2VyRG9tYWluLCAwLCByZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpLCBXRUJf
VUlfU1RSSU5HKCJUaGUgVVJMIHdhcyBibG9ja2VkIGJ5IGEgY29udGVudCBibG9ja2VyIiwgIldl
YktpdEVycm9yQmxvY2tlZEJ5Q29udGVudEJsb2NrZXIgZGVzY3JpcHRpb24iKSkpOwotICAgICAg
ICAgICAgICAgIHJldHVybiByZXNvdXJjZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIGlmIChibG9ja2VkU3RhdHVzLm1hZGVI
VFRQUwotICAgICAgICAgICAgJiYgdHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6VHlwZTo6TWFpblJl
c291cmNlCi0gICAgICAgICAgICAmJiBtX2RvY3VtZW50TG9hZGVyLT5pc0xvYWRpbmdNYWluUmVz
b3VyY2UoKSkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyB0byBtYWtlIHN1cmUgdGhlIGNvcnJl
Y3QgJ25ldycgVVJMIHNob3dzIGluIHRoZSBsb2NhdGlvbiBiYXIuCi0gICAgICAgICAgICBtX2Rv
Y3VtZW50TG9hZGVyLT5mcmFtZUxvYWRlcigpLT5jbGllbnQoKS5kaXNwYXRjaERpZENoYW5nZVBy
b3Zpc2lvbmFsVVJMKCk7Ci0gICAgICAgIH0KLSAgICAgICAgdXJsID0gcmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS51cmwoKTsgLy8gVGhlIGNvbnRlbnQgZXh0ZW5zaW9uIGNvdWxkIGhhdmUgY2hh
bmdlZCBpdCBmcm9tIGh0dHAgdG8gaHR0cHMuCi0gICAgICAgIHVybCA9IE1lbW9yeUNhY2hlOjpy
ZW1vdmVGcmFnbWVudElkZW50aWZpZXJJZk5lZWRlZCh1cmwpOyAvLyBNaWdodCBuZWVkIHRvIHJl
bW92ZSBmcmFnbWVudCBpZGVudGlmaWVyIGFnYWluLgotICAgIH0KLSNlbmRpZgotCi0jaWYgRU5B
QkxFKFdFQl9USU1JTkcpCi0gICAgTG9hZFRpbWluZyBsb2FkVGltaW5nOwotICAgIGxvYWRUaW1p
bmcubWFya1N0YXJ0VGltZUFuZEZldGNoU3RhcnQoKTsKLSNlbmRpZgotCi0gICAgYXV0byYgbWVt
b3J5Q2FjaGUgPSBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCk7Ci0gICAgaWYgKHJlcXVlc3QuYWxs
b3dzQ2FjaGluZygpICYmIG1lbW9yeUNhY2hlLmRpc2FibGVkKCkpIHsKLSAgICAgICAgRG9jdW1l
bnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmZpbmQodXJs
LnN0cmluZygpKTsKLSAgICAgICAgaWYgKGl0ICE9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZW5kKCkp
IHsKLSAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIo
bnVsbHB0cik7Ci0gICAgICAgICAgICBtX2RvY3VtZW50UmVzb3VyY2VzLnJlbW92ZShpdCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBTZWUgaWYgd2UgY2FuIHVzZSBhbiBleGlzdGluZyBy
ZXNvdXJjZSBmcm9tIHRoZSBjYWNoZS4KLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRS
ZXNvdXJjZT4gcmVzb3VyY2U7Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKLSAgICBp
ZiAoZG9jdW1lbnQoKSkKLSAgICAgICAgcmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCku
c2V0RG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24oZG9jdW1lbnQoKS0+dG9wT3JpZ2luKCktPmRvbWFp
bkZvckNhY2hlUGFydGl0aW9uKCkpOwotI2VuZGlmCi0KLSAgICBpZiAocmVxdWVzdC5hbGxvd3ND
YWNoaW5nKCkpCi0gICAgICAgIHJlc291cmNlID0gbWVtb3J5Q2FjaGUucmVzb3VyY2VGb3JSZXF1
ZXN0KHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCksIHNlc3Npb25JRCgpKTsKLQotICAgIGxvZ01l
bW9yeUNhY2hlUmVzb3VyY2VSZXF1ZXN0KGZyYW1lKCksIHJlc291cmNlID8gRGlhZ25vc3RpY0xv
Z2dpbmdLZXlzOjppbk1lbW9yeUNhY2hlS2V5KCkgOiBEaWFnbm9zdGljTG9nZ2luZ0tleXM6Om5v
dEluTWVtb3J5Q2FjaGVLZXkoKSk7Ci0KLSAgICBjb25zdCBSZXZhbGlkYXRpb25Qb2xpY3kgcG9s
aWN5ID0gZGV0ZXJtaW5lUmV2YWxpZGF0aW9uUG9saWN5KHR5cGUsIHJlcXVlc3QsIHJlc291cmNl
LmdldCgpKTsKLSAgICBzd2l0Y2ggKHBvbGljeSkgewotICAgIGNhc2UgUmVsb2FkOgotICAgICAg
ICBtZW1vcnlDYWNoZS5yZW1vdmUoKnJlc291cmNlKTsKLSAgICAgICAgRkFMTFRIUk9VR0g7Ci0g
ICAgY2FzZSBMb2FkOgotICAgICAgICBpZiAocmVzb3VyY2UpCi0gICAgICAgICAgICBsb2dNZW1v
cnlDYWNoZVJlc291cmNlUmVxdWVzdChmcmFtZSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6Omlu
TWVtb3J5Q2FjaGVLZXkoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjp1bnVzZWRLZXkoKSk7Ci0g
ICAgICAgIHJlc291cmNlID0gbG9hZFJlc291cmNlKHR5cGUsIHJlcXVlc3QpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFJldmFsaWRhdGU6Ci0gICAgICAgIGlmIChyZXNvdXJjZSkKLSAgICAg
ICAgICAgIGxvZ01lbW9yeUNhY2hlUmVzb3VyY2VSZXF1ZXN0KGZyYW1lKCksIERpYWdub3N0aWNM
b2dnaW5nS2V5czo6aW5NZW1vcnlDYWNoZUtleSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJl
dmFsaWRhdGluZ0tleSgpKTsKLSAgICAgICAgcmVzb3VyY2UgPSByZXZhbGlkYXRlUmVzb3VyY2Uo
cmVxdWVzdCwgcmVzb3VyY2UuZ2V0KCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFVzZToK
LSAgICAgICAgaWYgKCF1cGRhdGVDYWNoZWRSZXNvdXJjZVdpdGhDdXJyZW50UmVxdWVzdChyZXF1
ZXN0LCByZXNvdXJjZSkpIHsKLSAgICAgICAgICAgIGlmICghc2hvdWxkQ29udGludWVBZnRlck5v
dGlmeWluZ0xvYWRlZEZyb21NZW1vcnlDYWNoZShyZXF1ZXN0LCByZXNvdXJjZS5nZXQoKSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBsb2dNZW1vcnlDYWNo
ZVJlc291cmNlUmVxdWVzdChmcmFtZSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmluTWVtb3J5
Q2FjaGVLZXkoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjp1c2VkS2V5KCkpOwotICAgICAgICAg
ICAgbWVtb3J5Q2FjaGUucmVzb3VyY2VBY2Nlc3NlZCgqcmVzb3VyY2UpOwotI2lmIEVOQUJMRShX
RUJfVElNSU5HKQotICAgICAgICAgICAgaWYgKGRvY3VtZW50KCkgJiYgUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5yZXNvdXJjZVRpbWluZ0VuYWJsZWQoKSkgewotICAg
ICAgICAgICAgICAgIC8vIEZJWE1FICgxNjExNzApOiBUaGUgbmV0d29ya0xvYWRUaW1pbmcgc2hv
dWxkbid0IGJlIHN0b3JlZCBvbiB0aGUgUmVzb3VyY2VSZXNwb25zZS4KLSAgICAgICAgICAgICAg
ICByZXNvdXJjZS0+cmVzcG9uc2UoKS5uZXR3b3JrTG9hZFRpbWluZygpLnJlc2V0KCk7Ci0gICAg
ICAgICAgICAgICAgbG9hZFRpbWluZy5zZXRSZXNwb25zZUVuZChtb25vdG9uaWNhbGx5SW5jcmVh
c2luZ1RpbWUoKSk7Ci0gICAgICAgICAgICAgICAgbV9yZXNvdXJjZVRpbWluZ0luZm8uc3RvcmVS
ZXNvdXJjZVRpbWluZ0luaXRpYXRvckluZm9ybWF0aW9uKHJlc291cmNlLCByZXF1ZXN0LCBmcmFt
ZSgpKTsKLSAgICAgICAgICAgICAgICBtX3Jlc291cmNlVGltaW5nSW5mby5hZGRSZXNvdXJjZVRp
bWluZyhyZXNvdXJjZS5nZXQoKSwgKmRvY3VtZW50KCksIGxvYWRUaW1pbmcpOwotICAgICAgICAg
ICAgfQotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYg
KCFyZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoIXJlcXVlc3Qu
Zm9yUHJlbG9hZCgpIHx8IHBvbGljeSAhPSBVc2UpCi0gICAgICAgIHJlc291cmNlLT5zZXRMb2Fk
UHJpb3JpdHkocmVxdWVzdC5wcmlvcml0eSgpKTsKLQotICAgIGlmICghcmVxdWVzdC5mb3JQcmVs
b2FkKCkgJiYgcmVzb3VyY2UtPmxvYWRlcigpICYmIHJlc291cmNlLT5yZXNvdXJjZVJlcXVlc3Qo
KS5pZ25vcmVGb3JSZXF1ZXN0Q291bnQoKSkgewotICAgICAgICByZXNvdXJjZS0+cmVzb3VyY2VS
ZXF1ZXN0KCkuc2V0SWdub3JlRm9yUmVxdWVzdENvdW50KGZhbHNlKTsKLSAgICAgICAgaW5jcmVt
ZW50UmVxdWVzdENvdW50KCpyZXNvdXJjZSk7Ci0gICAgfQotCi0gICAgaWYgKChwb2xpY3kgIT0g
VXNlIHx8IHJlc291cmNlLT5zdGlsbE5lZWRzTG9hZCgpKSAmJiBDYWNoZWRSZXNvdXJjZVJlcXVl
c3Q6Ok5vRGVmZXIgPT0gcmVxdWVzdC5kZWZlcigpKSB7Ci0gICAgICAgIHJlc291cmNlLT5sb2Fk
KCp0aGlzLCByZXF1ZXN0Lm9wdGlvbnMoKSk7Ci0KLSAgICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9y
dCBpbW1lZGlhdGUgbG9hZHMsIGJ1dCB3ZSBkbyBzdXBwb3J0IGltbWVkaWF0ZSBmYWlsdXJlLgot
ICAgICAgICBpZiAocmVzb3VyY2UtPmVycm9yT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgaWYg
KHJlc291cmNlLT5hbGxvd3NDYWNoaW5nKCkgJiYgcmVzb3VyY2UtPmluQ2FjaGUoKSkKLSAgICAg
ICAgICAgICAgICBtZW1vcnlDYWNoZS5yZW1vdmUoKnJlc291cmNlKTsKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGRvY3VtZW50KCkgJiYg
IWRvY3VtZW50KCktPmxvYWRFdmVudEZpbmlzaGVkKCkgJiYgIXJlcXVlc3QucmVzb3VyY2VSZXF1
ZXN0KCkudXJsKCkucHJvdG9jb2xJc0RhdGEoKSkKLSAgICAgICAgbV92YWxpZGF0ZWRVUkxzLmFk
ZChyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpKTsKLQotICAgIEFTU0VSVChyZXNvdXJj
ZS0+dXJsKCkgPT0gdXJsLnN0cmluZygpKTsKLSAgICBtX2RvY3VtZW50UmVzb3VyY2VzLnNldChy
ZXNvdXJjZS0+dXJsKCksIHJlc291cmNlKTsKLSAgICByZXR1cm4gcmVzb3VyY2U7Ci19Ci0KLXZv
aWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRvY3VtZW50RGlkRmluaXNoTG9hZEV2ZW50KCkKLXsK
LSAgICBtX3ZhbGlkYXRlZFVSTHMuY2xlYXIoKTsKLX0KLQotQ2FjaGVkUmVzb3VyY2VIYW5kbGU8
Q2FjaGVkUmVzb3VyY2U+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXZhbGlkYXRlUmVzb3VyY2Uo
Y29uc3QgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBDYWNoZWRSZXNvdXJjZSogcmVz
b3VyY2UpCi17Ci0gICAgQVNTRVJUKHJlc291cmNlKTsKLSAgICBBU1NFUlQocmVzb3VyY2UtPmlu
Q2FjaGUoKSk7Ci0gICAgYXV0byYgbWVtb3J5Q2FjaGUgPSBNZW1vcnlDYWNoZTo6c2luZ2xldG9u
KCk7Ci0gICAgQVNTRVJUKCFtZW1vcnlDYWNoZS5kaXNhYmxlZCgpKTsKLSAgICBBU1NFUlQocmVz
b3VyY2UtPmNhblVzZUNhY2hlVmFsaWRhdG9yKCkpOwotICAgIEFTU0VSVCghcmVzb3VyY2UtPnJl
c291cmNlVG9SZXZhbGlkYXRlKCkpOwotICAgIEFTU0VSVChyZXNvdXJjZS0+c2Vzc2lvbklEKCkg
PT0gc2Vzc2lvbklEKCkpOwotICAgIEFTU0VSVChyZXNvdXJjZS0+YWxsb3dzQ2FjaGluZygpKTsK
LQotICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiBuZXdSZXNvdXJjZSA9
IGNyZWF0ZVJlc291cmNlKHJlc291cmNlLT50eXBlKCksIHJlc291cmNlLT5yZXNvdXJjZVJlcXVl
c3QoKSwgcmVzb3VyY2UtPmVuY29kaW5nKCksIHJlc291cmNlLT5zZXNzaW9uSUQoKSk7Ci0KLSAg
ICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVzb3VyY2UgJXAgY3JlYXRlZCB0byByZXZhbGlkYXRl
ICVwIiwgbmV3UmVzb3VyY2UuZ2V0KCksIHJlc291cmNlKTsKLSAgICBuZXdSZXNvdXJjZS0+c2V0
UmVzb3VyY2VUb1JldmFsaWRhdGUocmVzb3VyY2UpOwotICAgIAotICAgIG1lbW9yeUNhY2hlLnJl
bW92ZSgqcmVzb3VyY2UpOwotICAgIG1lbW9yeUNhY2hlLmFkZCgqbmV3UmVzb3VyY2UpOwotI2lm
IEVOQUJMRShXRUJfVElNSU5HKQotICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLnJlc291cmNlVGltaW5nRW5hYmxlZCgpKQotICAgICAgICBtX3Jlc291cmNl
VGltaW5nSW5mby5zdG9yZVJlc291cmNlVGltaW5nSW5pdGlhdG9ySW5mb3JtYXRpb24obmV3UmVz
b3VyY2UsIHJlcXVlc3QsIGZyYW1lKCkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocmVxdWVz
dCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gbmV3UmVzb3VyY2U7Ci19Ci0KLUNhY2hlZFJlc291cmNl
SGFuZGxlPENhY2hlZFJlc291cmNlPiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6bG9hZFJlc291cmNl
KENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCkKLXsKLSAgICBhdXRvJiBtZW1vcnlDYWNoZSA9IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKTsK
LSAgICBBU1NFUlQoIXJlcXVlc3QuYWxsb3dzQ2FjaGluZygpIHx8ICFtZW1vcnlDYWNoZS5yZXNv
dXJjZUZvclJlcXVlc3QocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgc2Vzc2lvbklEKCkpKTsK
LQotICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJMb2FkaW5nIENhY2hlZFJlc291cmNlIGZvciAn
JXMnLiIsIHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCkuc3RyaW5nQ2VudGVyRWxsaXBz
aXplZFRvTGVuZ3RoKCkubGF0aW4xKCkuZGF0YSgpKTsKLQotICAgIENhY2hlZFJlc291cmNlSGFu
ZGxlPENhY2hlZFJlc291cmNlPiByZXNvdXJjZSA9IGNyZWF0ZVJlc291cmNlKHR5cGUsIHJlcXVl
c3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LmNoYXJzZXQoKSwgc2Vzc2lvbklE
KCkpOwotCi0gICAgaWYgKHJlcXVlc3QuYWxsb3dzQ2FjaGluZygpICYmICFtZW1vcnlDYWNoZS5h
ZGQoKnJlc291cmNlKSkKLSAgICAgICAgcmVzb3VyY2UtPnNldE93bmluZ0NhY2hlZFJlc291cmNl
TG9hZGVyKHRoaXMpOwotI2lmIEVOQUJMRShXRUJfVElNSU5HKQotICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnJlc291cmNlVGltaW5nRW5hYmxlZCgpKQot
ICAgICAgICBtX3Jlc291cmNlVGltaW5nSW5mby5zdG9yZVJlc291cmNlVGltaW5nSW5pdGlhdG9y
SW5mb3JtYXRpb24ocmVzb3VyY2UsIHJlcXVlc3QsIGZyYW1lKCkpOwotI2VuZGlmCi0gICAgcmV0
dXJuIHJlc291cmNlOwotfQotCi1zdGF0aWMgdm9pZCBsb2dSZXZhbGlkYXRpb24oY29uc3QgU3Ry
aW5nJiByZWFzb24sIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50JiBsb2dDbGllbnQpCi17Ci0gICAg
bG9nQ2xpZW50LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5n
S2V5czo6Y2FjaGVkUmVzb3VyY2VSZXZhbGlkYXRpb25LZXkoKSwgRGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzOjpyZWFzb25LZXkoKSwgcmVhc29uLCBTaG91bGRTYW1wbGU6Olllcyk7Ci19Ci0KLXN0YXRp
YyB2b2lkIGxvZ1Jlc291cmNlUmV2YWxpZGF0aW9uRGVjaXNpb24oQ2FjaGVkUmVzb3VyY2U6OlJl
dmFsaWRhdGlvbkRlY2lzaW9uIHJlYXNvbiwgY29uc3QgRnJhbWUqIGZyYW1lKQotewotICAgIGlm
ICghZnJhbWUgfHwgIWZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBhdXRvJiBs
b2dDbGllbnQgPSBmcmFtZS0+cGFnZSgpLT5kaWFnbm9zdGljTG9nZ2luZ0NsaWVudCgpOwotICAg
IHN3aXRjaCAocmVhc29uKSB7Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmV2YWxpZGF0aW9u
RGVjaXNpb246Ok5vOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpS
ZXZhbGlkYXRpb25EZWNpc2lvbjo6WWVzRHVlVG9FeHBpcmVkOgotICAgICAgICBsb2dSZXZhbGlk
YXRpb24oRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjppc0V4cGlyZWRLZXkoKSwgbG9nQ2xpZW50KTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmV2YWxpZGF0aW9uRGVj
aXNpb246Olllc0R1ZVRvTm9TdG9yZToKLSAgICAgICAgbG9nUmV2YWxpZGF0aW9uKERpYWdub3N0
aWNMb2dnaW5nS2V5czo6bm9TdG9yZUtleSgpLCBsb2dDbGllbnQpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpSZXZhbGlkYXRpb25EZWNpc2lvbjo6WWVzRHVlVG9O
b0NhY2hlOgotICAgICAgICBsb2dSZXZhbGlkYXRpb24oRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpu
b0NhY2hlS2V5KCksIGxvZ0NsaWVudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2FjaGVk
UmVzb3VyY2U6OlJldmFsaWRhdGlvbkRlY2lzaW9uOjpZZXNEdWVUb0NhY2hlUG9saWN5OgotICAg
ICAgICBsb2dSZXZhbGlkYXRpb24oRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZWxvYWRLZXkoKSwg
bG9nQ2xpZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1DYWNoZWRSZXNvdXJjZUxv
YWRlcjo6UmV2YWxpZGF0aW9uUG9saWN5IENhY2hlZFJlc291cmNlTG9hZGVyOjpkZXRlcm1pbmVS
ZXZhbGlkYXRpb25Qb2xpY3koQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0JiBjYWNoZWRSZXNvdXJjZVJlcXVlc3QsIENhY2hlZFJlc291cmNlKiBleGlzdGlu
Z1Jlc291cmNlKSBjb25zdAotewotICAgIGF1dG8mIHJlcXVlc3QgPSBjYWNoZWRSZXNvdXJjZVJl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCk7Ci0KLSAgICBpZiAoIWV4aXN0aW5nUmVzb3VyY2UpCi0g
ICAgICAgIHJldHVybiBMb2FkOwotCi0gICAgLy8gV2UgYWxyZWFkeSBoYXZlIGEgcHJlbG9hZCBn
b2luZyBmb3IgdGhpcyBVUkwuCi0gICAgaWYgKGNhY2hlZFJlc291cmNlUmVxdWVzdC5mb3JQcmVs
b2FkKCkgJiYgZXhpc3RpbmdSZXNvdXJjZS0+aXNQcmVsb2FkZWQoKSkKLSAgICAgICAgcmV0dXJu
IFVzZTsKLQotICAgIC8vIElmIHRoZSBzYW1lIFVSTCBoYXMgYmVlbiBsb2FkZWQgYXMgYSBkaWZm
ZXJlbnQgdHlwZSwgd2UgbmVlZCB0byByZWxvYWQuCi0gICAgaWYgKGV4aXN0aW5nUmVzb3VyY2Ut
PnR5cGUoKSAhPSB0eXBlKSB7Ci0gICAgICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZWRS
ZXNvdXJjZUxvYWRlcjo6ZGV0ZXJtaW5lUmV2YWxpZGF0aW9uUG9saWN5IHJlbG9hZGluZyBkdWUg
dG8gdHlwZSBtaXNtYXRjaC4iKTsKLSAgICAgICAgbG9nTWVtb3J5Q2FjaGVSZXNvdXJjZVJlcXVl
c3QoZnJhbWUoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjppbk1lbW9yeUNhY2hlS2V5KCksIERp
YWdub3N0aWNMb2dnaW5nS2V5czo6dW51c2VkUmVhc29uVHlwZU1pc21hdGNoS2V5KCkpOwotICAg
ICAgICByZXR1cm4gUmVsb2FkOwotICAgIH0KLQotICAgIGlmICghZXhpc3RpbmdSZXNvdXJjZS0+
dmFyeUhlYWRlclZhbHVlc01hdGNoKHJlcXVlc3QsICp0aGlzKSkKLSAgICAgICAgcmV0dXJuIFJl
bG9hZDsKLQotICAgIGF1dG8qIHRleHREZWNvZGVyID0gZXhpc3RpbmdSZXNvdXJjZS0+dGV4dFJl
c291cmNlRGVjb2RlcigpOwotICAgIGlmICh0ZXh0RGVjb2RlciAmJiAhdGV4dERlY29kZXItPmhh
c0VxdWFsRW5jb2RpbmdGb3JDaGFyc2V0KGNhY2hlZFJlc291cmNlUmVxdWVzdC5jaGFyc2V0KCkp
KQotICAgICAgICByZXR1cm4gUmVsb2FkOwotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCB1c2Ug
dGhlIHNhbWUgY2FjaGUgcG9saWN5IGZvciBhbGwgcmVzb3VyY2UgdHlwZXMuIFRoZSByYXcgcmVz
b3VyY2UgcG9saWN5IGlzIG92ZXJseSBzdHJpY3QKLSAgICAvLyAgICAgICAgd2hpbGUgdGhlIG5v
cm1hbCBzdWJyZXNvdXJjZSBwb2xpY3kgaXMgdG9vIGxvb3NlLgotICAgIGlmIChleGlzdGluZ1Jl
c291cmNlLT5pc01haW5Pck1lZGlhT3JSYXdSZXNvdXJjZSgpICYmIGZyYW1lKCkpIHsKLSAgICAg
ICAgYm9vbCBzdHJpY3RQb2xpY3lEaXNhYmxlZCA9IGZyYW1lKCktPmxvYWRlcigpLmlzU3RyaWN0
UmF3UmVzb3VyY2VWYWxpZGF0aW9uUG9saWN5RGlzYWJsZWRGb3JUZXN0aW5nKCk7Ci0gICAgICAg
IGJvb2wgY2FuUmV1c2VSYXdSZXNvdXJjZSA9IHN0cmljdFBvbGljeURpc2FibGVkIHx8IGRvd25j
YXN0PENhY2hlZFJhd1Jlc291cmNlPigqZXhpc3RpbmdSZXNvdXJjZSkuY2FuUmV1c2UocmVxdWVz
dCk7Ci0gICAgICAgIGlmICghY2FuUmV1c2VSYXdSZXNvdXJjZSkKLSAgICAgICAgICAgIHJldHVy
biBSZWxvYWQ7Ci0gICAgfQotCi0gICAgLy8gQ29uZGl0aW9uYWwgcmVxdWVzdHMgc2hvdWxkIGhh
dmUgZmFpbGVkIGNhblJldXNlIGNoZWNrLgotICAgIEFTU0VSVCghcmVxdWVzdC5pc0NvbmRpdGlv
bmFsKCkpOwotCi0gICAgLy8gRG8gbm90IGxvYWQgZnJvbSBjYWNoZSBpZiBpbWFnZXMgYXJlIG5v
dCBlbmFibGVkLiBUaGUgbG9hZCBmb3IgdGhpcyBpbWFnZSB3aWxsIGJlIGJsb2NrZWQKLSAgICAv
LyBpbiBDYWNoZWRJbWFnZTo6bG9hZC4KLSAgICBpZiAoY2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmRl
ZmVyKCkgPT0gQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpEZWZlcnJlZEJ5Q2xpZW50KQotICAgICAg
ICByZXR1cm4gUmVsb2FkOwotCi0gICAgLy8gRG9uJ3QgcmVsb2FkIHJlc291cmNlcyB3aGlsZSBw
YXN0aW5nLgotICAgIGlmIChtX2FsbG93U3RhbGVSZXNvdXJjZXMpCi0gICAgICAgIHJldHVybiBV
c2U7Ci0KLSAgICAvLyBBbHdheXMgdXNlIHByZWxvYWRzLgotICAgIGlmIChleGlzdGluZ1Jlc291
cmNlLT5pc1ByZWxvYWRlZCgpKQotICAgICAgICByZXR1cm4gVXNlOwotCi0gICAgLy8gV2UgY2Fu
IGZpbmQgcmVzb3VyY2VzIHRoYXQgYXJlIGJlaW5nIHZhbGlkYXRlZCBmcm9tIGNhY2hlIG9ubHkg
d2hlbiB2YWxpZGF0aW9uIGlzIGp1c3Qgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRpbmcuCi0gICAgaWYg
KGV4aXN0aW5nUmVzb3VyY2UtPnZhbGlkYXRpb25Db21wbGV0aW5nKCkpCi0gICAgICAgIHJldHVy
biBVc2U7Ci0gICAgQVNTRVJUKCFleGlzdGluZ1Jlc291cmNlLT52YWxpZGF0aW9uSW5Qcm9ncmVz
cygpKTsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSByZWRpcmVjdCBjaGFpbi4KLSAgICBib29sIGNh
Y2hlUG9saWN5SXNIaXN0b3J5QnVmZmVyID0gY2FjaGVQb2xpY3kodHlwZSkgPT0gQ2FjaGVQb2xp
Y3lIaXN0b3J5QnVmZmVyOwotICAgIGlmICghZXhpc3RpbmdSZXNvdXJjZS0+cmVkaXJlY3RDaGFp
bkFsbG93c1JldXNlKGNhY2hlUG9saWN5SXNIaXN0b3J5QnVmZmVyID8gUmV1c2VFeHBpcmVkUmVk
aXJlY3Rpb24gOiBEb05vdFJldXNlRXhwaXJlZFJlZGlyZWN0aW9uKSkgewotICAgICAgICBMT0co
UmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRldGVybWluZVJldmFsaWRh
dGlvblBvbGljeSByZWxvYWRpbmcgZHVlIHRvIG5vdCBjYWNoZWQgb3IgZXhwaXJlZCByZWRpcmVj
dGlvbnMuIik7Ci0gICAgICAgIGxvZ01lbW9yeUNhY2hlUmVzb3VyY2VSZXF1ZXN0KGZyYW1lKCks
IERpYWdub3N0aWNMb2dnaW5nS2V5czo6aW5NZW1vcnlDYWNoZUtleSgpLCBEaWFnbm9zdGljTG9n
Z2luZ0tleXM6OnVudXNlZFJlYXNvblJlZGlyZWN0Q2hhaW5LZXkoKSk7Ci0gICAgICAgIHJldHVy
biBSZWxvYWQ7Ci0gICAgfQotCi0gICAgLy8gQ2FjaGVQb2xpY3lIaXN0b3J5QnVmZmVyIHVzZXMg
dGhlIGNhY2hlIGV4Y2VwdCBpZiB0aGlzIGlzIGEgbWFpbiByZXNvdXJjZSB3aXRoICJjYWNoZS1j
b250cm9sOiBuby1zdG9yZSIuCi0gICAgaWYgKGNhY2hlUG9saWN5SXNIaXN0b3J5QnVmZmVyKSB7
Ci0gICAgICAgIC8vIEZJWE1FOiBJZ25vcmluZyAiY2FjaGUtY29udHJvbDogbm8tY2FjaGUiIGZv
ciBzdWItcmVzb3VyY2VzIG9uIGhpc3RvcnkgbmF2aWdhdGlvbiBidXQgbm90IHRoZSBtYWluCi0g
ICAgICAgIC8vIHJlc291cmNlIGlzIGluY29uc2lzdGVudC4gV2Ugc2hvdWxkIHByb2JhYmx5IGhh
cm1vbml6ZSB0aGlzLgotICAgICAgICBpZiAoIWV4aXN0aW5nUmVzb3VyY2UtPnJlc3BvbnNlKCku
Y2FjaGVDb250cm9sQ29udGFpbnNOb1N0b3JlKCkgfHwgdHlwZSAhPSBDYWNoZWRSZXNvdXJjZTo6
TWFpblJlc291cmNlKQotICAgICAgICAgICAgcmV0dXJuIFVzZTsKLSAgICB9Ci0KLSAgICAvLyBE
b24ndCByZXVzZSByZXNvdXJjZXMgd2l0aCBDYWNoZS1jb250cm9sOiBuby1zdG9yZS4KLSAgICBp
ZiAoZXhpc3RpbmdSZXNvdXJjZS0+cmVzcG9uc2UoKS5jYWNoZUNvbnRyb2xDb250YWluc05vU3Rv
cmUoKSkgewotICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXI6OmRldGVybWluZVJldmFsaWRhdGlvblBvbGljeSByZWxvYWRpbmcgZHVlIHRvIENhY2hlLWNv
bnRyb2w6IG5vLXN0b3JlLiIpOwotICAgICAgICBsb2dNZW1vcnlDYWNoZVJlc291cmNlUmVxdWVz
dChmcmFtZSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmluTWVtb3J5Q2FjaGVLZXkoKSwgRGlh
Z25vc3RpY0xvZ2dpbmdLZXlzOjp1bnVzZWRSZWFzb25Ob1N0b3JlS2V5KCkpOwotICAgICAgICBy
ZXR1cm4gUmVsb2FkOwotICAgIH0KLQotICAgIC8vIElmIGNyZWRlbnRpYWxzIHdlcmUgc2VudCB3
aXRoIHRoZSBwcmV2aW91cyByZXF1ZXN0IGFuZCB3b24ndCBiZQotICAgIC8vIHdpdGggdGhpcyBv
bmUsIG9yIHZpY2UgdmVyc2EsIHJlLWZldGNoIHRoZSByZXNvdXJjZS4KLSAgICAvLwotICAgIC8v
IFRoaXMgaGVscHMgd2l0aCB0aGUgY2FzZSB3aGVyZSB0aGUgc2VydmVyIHNlbmRzIGJhY2sKLSAg
ICAvLyAiQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luOiAqIiBhbGwgdGhlIHRpbWUsIGJ1dCBz
b21lIG9mIHRoZQotICAgIC8vIGNsaWVudCdzIHJlcXVlc3RzIGFyZSBtYWRlIHdpdGhvdXQgQ09S
UyBhbmQgc29tZSB3aXRoLgotICAgIGlmIChleGlzdGluZ1Jlc291cmNlLT5yZXNvdXJjZVJlcXVl
c3QoKS5hbGxvd0Nvb2tpZXMoKSAhPSByZXF1ZXN0LmFsbG93Q29va2llcygpKSB7Ci0gICAgICAg
IExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGV0ZXJtaW5lUmV2
YWxpZGF0aW9uUG9saWN5IHJlbG9hZGluZyBkdWUgdG8gZGlmZmVyZW5jZSBpbiBjcmVkZW50aWFs
cyBzZXR0aW5ncy4iKTsKLSAgICAgICAgbG9nTWVtb3J5Q2FjaGVSZXNvdXJjZVJlcXVlc3QoZnJh
bWUoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjppbk1lbW9yeUNhY2hlS2V5KCksIERpYWdub3N0
aWNMb2dnaW5nS2V5czo6dW51c2VkUmVhc29uQ3JlZGVudGlhbFNldHRpbmdzS2V5KCkpOwotICAg
ICAgICByZXR1cm4gUmVsb2FkOwotICAgIH0KLQotICAgIC8vIER1cmluZyB0aGUgaW5pdGlhbCBs
b2FkLCBhdm9pZCBsb2FkaW5nIHRoZSBzYW1lIHJlc291cmNlIG11bHRpcGxlIHRpbWVzIGZvciBh
IHNpbmdsZSBkb2N1bWVudCwgZXZlbiBpZiB0aGUgY2FjaGUgcG9saWNpZXMgd291bGQgdGVsbCB1
cyB0by4KLSAgICBpZiAoZG9jdW1lbnQoKSAmJiAhZG9jdW1lbnQoKS0+bG9hZEV2ZW50RmluaXNo
ZWQoKSAmJiBtX3ZhbGlkYXRlZFVSTHMuY29udGFpbnMoZXhpc3RpbmdSZXNvdXJjZS0+dXJsKCkp
KQotICAgICAgICByZXR1cm4gVXNlOwotCi0gICAgLy8gQ2FjaGVQb2xpY3lSZWxvYWQgYWx3YXlz
IHJlbG9hZHMKLSAgICBpZiAoY2FjaGVQb2xpY3kodHlwZSkgPT0gQ2FjaGVQb2xpY3lSZWxvYWQp
IHsKLSAgICAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlTG9hZGVyOjpk
ZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3kgcmVsb2FkaW5nIGR1ZSB0byBDYWNoZVBvbGljeVJl
bG9hZC4iKTsKLSAgICAgICAgbG9nTWVtb3J5Q2FjaGVSZXNvdXJjZVJlcXVlc3QoZnJhbWUoKSwg
RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjppbk1lbW9yeUNhY2hlS2V5KCksIERpYWdub3N0aWNMb2dn
aW5nS2V5czo6dW51c2VkUmVhc29uUmVsb2FkS2V5KCkpOwotICAgICAgICByZXR1cm4gUmVsb2Fk
OwotICAgIH0KLSAgICAKLSAgICAvLyBXZSdsbCB0cnkgdG8gcmVsb2FkIHRoZSByZXNvdXJjZSBp
ZiBpdCBmYWlsZWQgbGFzdCB0aW1lLgotICAgIGlmIChleGlzdGluZ1Jlc291cmNlLT5lcnJvck9j
Y3VycmVkKCkpIHsKLSAgICAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNl
TG9hZGVyOjpkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3llIHJlbG9hZGluZyBkdWUgdG8gcmVz
b3VyY2UgYmVpbmcgaW4gdGhlIGVycm9yIHN0YXRlIik7Ci0gICAgICAgIGxvZ01lbW9yeUNhY2hl
UmVzb3VyY2VSZXF1ZXN0KGZyYW1lKCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6aW5NZW1vcnlD
YWNoZUtleSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnVudXNlZFJlYXNvbkVycm9yS2V5KCkp
OwotICAgICAgICByZXR1cm4gUmVsb2FkOwotICAgIH0KLSAgICAKLSAgICAvLyBGb3IgcmVzb3Vy
Y2VzIHRoYXQgYXJlIG5vdCB5ZXQgbG9hZGVkIHdlIGlnbm9yZSB0aGUgY2FjaGUgcG9saWN5Lgot
ICAgIGlmIChleGlzdGluZ1Jlc291cmNlLT5pc0xvYWRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFVz
ZTsKLQotICAgIGF1dG8gcmV2YWxpZGF0aW9uRGVjaXNpb24gPSBleGlzdGluZ1Jlc291cmNlLT5t
YWtlUmV2YWxpZGF0aW9uRGVjaXNpb24oY2FjaGVQb2xpY3kodHlwZSkpOwotICAgIGxvZ1Jlc291
cmNlUmV2YWxpZGF0aW9uRGVjaXNpb24ocmV2YWxpZGF0aW9uRGVjaXNpb24sIGZyYW1lKCkpOwot
Ci0gICAgLy8gQ2hlY2sgaWYgdGhlIGNhY2hlIGhlYWRlcnMgcmVxdWlyZXMgdXMgdG8gcmV2YWxp
ZGF0ZSAoY2FjaGUgZXhwaXJhdGlvbiBmb3IgZXhhbXBsZSkuCi0gICAgaWYgKHJldmFsaWRhdGlv
bkRlY2lzaW9uICE9IENhY2hlZFJlc291cmNlOjpSZXZhbGlkYXRpb25EZWNpc2lvbjo6Tm8pIHsK
LSAgICAgICAgLy8gU2VlIGlmIHRoZSByZXNvdXJjZSBoYXMgdXNhYmxlIEVUYWcgb3IgTGFzdC1t
b2RpZmllZCBoZWFkZXJzLgotICAgICAgICBpZiAoZXhpc3RpbmdSZXNvdXJjZS0+Y2FuVXNlQ2Fj
aGVWYWxpZGF0b3IoKSkKLSAgICAgICAgICAgIHJldHVybiBSZXZhbGlkYXRlOwotICAgICAgICAK
LSAgICAgICAgLy8gTm8sIG11c3QgcmVsb2FkLgotICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5n
LCAiQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRldGVybWluZVJldmFsaWRhdGlvblBvbGljeSByZWxv
YWRpbmcgZHVlIHRvIG1pc3NpbmcgY2FjaGUgdmFsaWRhdG9ycy4iKTsKLSAgICAgICAgbG9nTWVt
b3J5Q2FjaGVSZXNvdXJjZVJlcXVlc3QoZnJhbWUoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpp
bk1lbW9yeUNhY2hlS2V5KCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6dW51c2VkUmVhc29uTXVz
dFJldmFsaWRhdGVOb1ZhbGlkYXRvcktleSgpKTsKLSAgICAgICAgcmV0dXJuIFJlbG9hZDsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gVXNlOwotfQotCi12b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpw
cmludEFjY2Vzc0RlbmllZE1lc3NhZ2UoY29uc3QgVVJMJiB1cmwpIGNvbnN0Ci17Ci0gICAgaWYg
KHVybC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFmcmFtZSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgbWVzc2FnZTsKLSAgICBpZiAoIW1fZG9jdW1lbnQg
fHwgbV9kb2N1bWVudC0+dXJsKCkuaXNOdWxsKCkpCi0gICAgICAgIG1lc3NhZ2UgPSAiVW5zYWZl
IGF0dGVtcHQgdG8gbG9hZCBVUkwgIiArIHVybC5zdHJpbmdDZW50ZXJFbGxpcHNpemVkVG9MZW5n
dGgoKSArICcuJzsKLSAgICBlbHNlCi0gICAgICAgIG1lc3NhZ2UgPSAiVW5zYWZlIGF0dGVtcHQg
dG8gbG9hZCBVUkwgIiArIHVybC5zdHJpbmdDZW50ZXJFbGxpcHNpemVkVG9MZW5ndGgoKSArICIg
ZnJvbSBmcmFtZSB3aXRoIFVSTCAiICsgbV9kb2N1bWVudC0+dXJsKCkuc3RyaW5nQ2VudGVyRWxs
aXBzaXplZFRvTGVuZ3RoKCkgKyAiLiBEb21haW5zLCBwcm90b2NvbHMgYW5kIHBvcnRzIG11c3Qg
bWF0Y2guXG4iOwotCi0gICAgZnJhbWUoKS0+ZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2Uo
TWVzc2FnZVNvdXJjZTo6U2VjdXJpdHksIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIG1lc3NhZ2UpOwot
fQotCi12b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpzZXRBdXRvTG9hZEltYWdlcyhib29sIGVu
YWJsZSkKLXsKLSAgICBpZiAoZW5hYmxlID09IG1fYXV0b0xvYWRJbWFnZXMpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fYXV0b0xvYWRJbWFnZXMgPSBlbmFibGU7Ci0KLSAgICBpZiAoIW1fYXV0
b0xvYWRJbWFnZXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlbG9hZEltYWdlc0lmTm90RGVm
ZXJyZWQoKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6c2V0SW1hZ2VzRW5hYmxl
ZChib29sIGVuYWJsZSkKLXsKLSAgICBpZiAoZW5hYmxlID09IG1faW1hZ2VzRW5hYmxlZCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9pbWFnZXNFbmFibGVkID0gZW5hYmxlOwotCi0gICAgaWYg
KCFtX2ltYWdlc0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlbG9hZEltYWdlc0lm
Tm90RGVmZXJyZWQoKTsKLX0KLQotYm9vbCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2xpZW50RGVm
ZXJzSW1hZ2UoY29uc3QgVVJMJikgY29uc3QKLXsKLSAgICByZXR1cm4gIW1faW1hZ2VzRW5hYmxl
ZDsKLX0KLQotYm9vbCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6c2hvdWxkUGVyZm9ybUltYWdlTG9h
ZChjb25zdCBVUkwmIHVybCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9hdXRvTG9hZEltYWdlcyB8
fCB1cmwucHJvdG9jb2xJc0RhdGEoKTsKLX0KLQotYm9vbCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
c2hvdWxkRGVmZXJJbWFnZUxvYWQoY29uc3QgVVJMJiB1cmwpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGNsaWVudERlZmVyc0ltYWdlKHVybCkgfHwgIXNob3VsZFBlcmZvcm1JbWFnZUxvYWQodXJsKTsK
LX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVsb2FkSW1hZ2VzSWZOb3REZWZlcnJl
ZCgpCi17Ci0gICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IG1fZG9jdW1lbnRSZXNvdXJjZXMudmFs
dWVzKCkpIHsKLSAgICAgICAgaWYgKGlzPENhY2hlZEltYWdlPigqcmVzb3VyY2UpICYmIHJlc291
cmNlLT5zdGlsbE5lZWRzTG9hZCgpICYmICFjbGllbnREZWZlcnNJbWFnZShyZXNvdXJjZS0+dXJs
KCkpKQotICAgICAgICAgICAgZG93bmNhc3Q8Q2FjaGVkSW1hZ2U+KCpyZXNvdXJjZSkubG9hZCgq
dGhpcywgZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygpKTsKLSAgICB9Ci19Ci0KLUNhY2hl
UG9saWN5IENhY2hlZFJlc291cmNlTG9hZGVyOjpjYWNoZVBvbGljeShDYWNoZWRSZXNvdXJjZTo6
VHlwZSB0eXBlKSBjb25zdAotewotICAgIEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0g
ICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIENhY2hlUG9saWN5VmVyaWZ5OwotCi0gICAg
aWYgKHR5cGUgIT0gQ2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZSkKLSAgICAgICAgcmV0dXJu
IGZyYW1lLT5sb2FkZXIoKS5zdWJyZXNvdXJjZUNhY2hlUG9saWN5KCk7Ci0KLSAgICBpZiAoUGFn
ZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpIHsKLSAgICAgICAgaWYgKHBhZ2UtPmlzUmVzb3VyY2VD
YWNoaW5nRGlzYWJsZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBDYWNoZVBvbGljeVJlbG9hZDsK
LSAgICB9Ci0KLSAgICBzd2l0Y2ggKGZyYW1lLT5sb2FkZXIoKS5sb2FkVHlwZSgpKSB7Ci0gICAg
Y2FzZSBGcmFtZUxvYWRUeXBlOjpSZWxvYWRGcm9tT3JpZ2luOgotICAgIGNhc2UgRnJhbWVMb2Fk
VHlwZTo6UmVsb2FkOgotICAgICAgICByZXR1cm4gQ2FjaGVQb2xpY3lSZWxvYWQ7Ci0gICAgY2Fz
ZSBGcmFtZUxvYWRUeXBlOjpCYWNrOgotICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6Rm9yd2FyZDoK
LSAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OkluZGV4ZWRCYWNrRm9yd2FyZDoKLSAgICAgICAgLy8g
RG8gbm90IHJldmFsaWRhdGUgY2FjaGVkIG1haW4gcmVzb3VyY2Ugb24gYmFjay9mb3J3YXJkIG5h
dmlnYXRpb24uCi0gICAgICAgIHJldHVybiBDYWNoZVBvbGljeUhpc3RvcnlCdWZmZXI7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIENhY2hlUG9saWN5VmVyaWZ5OwotICAgIH0KLX0KLQot
dm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVtb3ZlQ2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVz
b3VyY2UmIHJlc291cmNlKQotewotI2lmbmRlZiBOREVCVUcKLSAgICBEb2N1bWVudFJlc291cmNl
TWFwOjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZmluZChyZXNvdXJjZS51cmwo
KSk7Ci0gICAgaWYgKGl0ICE9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZW5kKCkpCi0gICAgICAgIEFT
U0VSVChpdC0+dmFsdWUuZ2V0KCkgPT0gJnJlc291cmNlKTsKLSNlbmRpZgotICAgIG1fZG9jdW1l
bnRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlLnVybCgpKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNv
dXJjZUxvYWRlcjo6bG9hZERvbmUoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBib29sIHNob3Vs
ZFBlcmZvcm1Qb3N0TG9hZEFjdGlvbnMpCi17Ci0gICAgUmVmUHRyPERvY3VtZW50TG9hZGVyPiBw
cm90ZWN0RG9jdW1lbnRMb2FkZXIobV9kb2N1bWVudExvYWRlcik7Ci0gICAgUmVmUHRyPERvY3Vt
ZW50PiBwcm90ZWN0RG9jdW1lbnQobV9kb2N1bWVudCk7Ci0KLSNpZiBFTkFCTEUoV0VCX1RJTUlO
RykKLSAgICBpZiAocmVzb3VyY2UgJiYgZG9jdW1lbnQoKSAmJiBSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLnJlc291cmNlVGltaW5nRW5hYmxlZCgpKQotICAgICAgICBt
X3Jlc291cmNlVGltaW5nSW5mby5hZGRSZXNvdXJjZVRpbWluZyhyZXNvdXJjZSwgKmRvY3VtZW50
KCksIHJlc291cmNlLT5sb2FkZXIoKS0+bG9hZFRpbWluZygpKTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKHJlc291cmNlKTsKLSNlbmRpZgotCi0gICAgaWYgKGZyYW1lKCkpCi0gICAgICAgIGZy
YW1lKCktPmxvYWRlcigpLmxvYWREb25lKCk7Ci0KLSAgICBpZiAoc2hvdWxkUGVyZm9ybVBvc3RM
b2FkQWN0aW9ucykKLSAgICAgICAgcGVyZm9ybVBvc3RMb2FkQWN0aW9ucygpOwotCi0gICAgaWYg
KCFtX2dhcmJhZ2VDb2xsZWN0RG9jdW1lbnRSZXNvdXJjZXNUaW1lci5pc0FjdGl2ZSgpKQotICAg
ICAgICBtX2dhcmJhZ2VDb2xsZWN0RG9jdW1lbnRSZXNvdXJjZXNUaW1lci5zdGFydE9uZVNob3Qo
MCk7Ci19Ci0KLS8vIEdhcmJhZ2UgY29sbGVjdGluZyBtX2RvY3VtZW50UmVzb3VyY2VzIGlzIGEg
d29ya2Fyb3VuZCBmb3IgdGhlCi0vLyBDYWNoZWRSZXNvdXJjZUhhbmRsZXMgb24gdGhlIFJIUyBi
ZWluZyBzdHJvbmcgcmVmZXJlbmNlcy4gSWRlYWxseSB0aGlzCi0vLyB3b3VsZCBiZSBhIHdlYWsg
bWFwLCBob3dldmVyIENhY2hlZFJlc291cmNlSGFuZGxlcyBwZXJmb3JtIGFkZGl0aW9uYWwKLS8v
IGJvb2trZWVwaW5nIG9uIENhY2hlZFJlc291cmNlcywgc28gaW5zdGVhZCBwc2V1ZG8tR0MgdGhl
bSAtLSB3aGVuIHRoZQotLy8gcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgMSwgbV9kb2N1bWVudFJl
c291cmNlcyBpcyB0aGUgb25seSByZWZlcmVuY2UsIHNvCi0vLyByZW1vdmUgaXQgZnJvbSB0aGUg
bWFwLgotdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Z2FyYmFnZUNvbGxlY3REb2N1bWVudFJl
c291cmNlcygpCi17Ci0gICAgdHlwZWRlZiBWZWN0b3I8U3RyaW5nLCAxMD4gU3RyaW5nVmVjdG9y
OwotICAgIFN0cmluZ1ZlY3RvciByZXNvdXJjZXNUb0RlbGV0ZTsKLQotICAgIGZvciAoYXV0byYg
cmVzb3VyY2UgOiBtX2RvY3VtZW50UmVzb3VyY2VzKSB7Ci0gICAgICAgIGlmIChyZXNvdXJjZS52
YWx1ZS0+aGFzT25lSGFuZGxlKCkpIHsKLSAgICAgICAgICAgIHJlc291cmNlc1RvRGVsZXRlLmFw
cGVuZChyZXNvdXJjZS5rZXkpOwotICAgICAgICAgICAgcmVzb3VyY2UudmFsdWUtPnNldE93bmlu
Z0NhY2hlZFJlc291cmNlTG9hZGVyKG51bGxwdHIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Zm9yIChhdXRvJiByZXNvdXJjZSA6IHJlc291cmNlc1RvRGVsZXRlKQotICAgICAgICBtX2RvY3Vt
ZW50UmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZSk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2VM
b2FkZXI6OnBlcmZvcm1Qb3N0TG9hZEFjdGlvbnMoKQotewotICAgIGNoZWNrRm9yUGVuZGluZ1By
ZWxvYWRzKCk7Ci0KLSAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+
c2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
aW5jcmVtZW50UmVxdWVzdENvdW50KGNvbnN0IENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkKLXsK
LSAgICBpZiAocmVzb3VyY2UuaWdub3JlRm9yUmVxdWVzdENvdW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgICsrbV9yZXF1ZXN0Q291bnQ7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXI6OmRlY3JlbWVudFJlcXVlc3RDb3VudChjb25zdCBDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2Up
Ci17Ci0gICAgaWYgKHJlc291cmNlLmlnbm9yZUZvclJlcXVlc3RDb3VudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAtLW1fcmVxdWVzdENvdW50OwotICAgIEFTU0VSVChtX3JlcXVlc3RDb3Vu
dCA+IC0xKTsKLX0KLQotQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IENhY2hl
ZFJlc291cmNlTG9hZGVyOjpwcmVsb2FkKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIENhY2hl
ZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBQcmVsb2Fk
VHlwZSBwcmVsb2FkVHlwZSkKLXsKLSAgICAvLyBXZSBhbHdheXMgcHJlbG9hZCByZXNvdXJjZXMg
b24gaU9TLiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTI3
Nj4uCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBjb25zaWRlciBhZGRpbmcgYSBzZXR0aW5nIHRv
IHRvZ2dsZSBhZ2dyZXNzaXZlIHByZWxvYWRpbmcgYmVoYXZpb3IgYXMgb3Bwb3NlZAotICAgIC8v
IHRvIG1ha2luZyB0aGlzIGJlaGF2aW9yIHNwZWNpZmljIHRvIGlPUy4KLSNpZiAhUExBVEZPUk0o
SU9TKQotICAgIGJvb2wgaGFzUmVuZGVyaW5nID0gbV9kb2N1bWVudC0+Ym9keU9yRnJhbWVzZXQo
KSAmJiBtX2RvY3VtZW50LT5yZW5kZXJWaWV3KCk7Ci0gICAgYm9vbCBjYW5CbG9ja1BhcnNlciA9
IHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdCB8fCB0eXBlID09IENhY2hlZFJlc291cmNl
OjpDU1NTdHlsZVNoZWV0OwotICAgIGlmICghaGFzUmVuZGVyaW5nICYmICFjYW5CbG9ja1BhcnNl
ciAmJiBwcmVsb2FkVHlwZSA9PSBJbXBsaWNpdFByZWxvYWQpIHsKLSAgICAgICAgLy8gRG9uJ3Qg
cHJlbG9hZCBzdWJyZXNvdXJjZXMgdGhhdCBjYW4ndCBibG9jayB0aGUgcGFyc2VyIGJlZm9yZSB3
ZSBoYXZlIHNvbWV0aGluZyB0byBkcmF3LgotICAgICAgICAvLyBUaGlzIGhlbHBzIHByZXZlbnQg
cHJlbG9hZHMgZnJvbSBkZWxheWluZyBmaXJzdCBkaXNwbGF5IHdoZW4gYmFuZHdpZHRoIGlzIGxp
bWl0ZWQuCi0gICAgICAgIFBlbmRpbmdQcmVsb2FkIHBlbmRpbmdQcmVsb2FkID0geyB0eXBlLCBy
ZXF1ZXN0LCBjaGFyc2V0IH07Ci0gICAgICAgIG1fcGVuZGluZ1ByZWxvYWRzLmFwcGVuZChwZW5k
aW5nUHJlbG9hZCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKHByZWxvYWRUeXBlKTsKLSNlbmRpZgotICAgIHJldHVybiByZXF1ZXN0UHJl
bG9hZCh0eXBlLCByZXF1ZXN0LCBjaGFyc2V0KTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZUxv
YWRlcjo6Y2hlY2tGb3JQZW5kaW5nUHJlbG9hZHMoKSAKLXsKLSAgICBpZiAobV9wZW5kaW5nUHJl
bG9hZHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgYXV0byogYm9keSA9IG1fZG9j
dW1lbnQtPmJvZHlPckZyYW1lc2V0KCk7Ci0gICAgaWYgKCFib2R5IHx8ICFib2R5LT5yZW5kZXJl
cigpKQotICAgICAgICByZXR1cm47Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIC8vIFdlIGFsd2F5
cyBwcmVsb2FkIHJlc291cmNlcyBvbiBpT1MuIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTkxMjc2Pi4KLSAgICAvLyBTbywgd2Ugc2hvdWxkIG5ldmVyIGhhdmUg
YW55IHBlbmRpbmcgcHJlbG9hZHMuCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBsb29rIHRvIGF2
b2lkIGNvbXBpbGluZyB0aGlzIGNvZGUgZW50aXJlbHkgd2hlbiBidWlsZGluZyBmb3IgaU9TLgot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgd2hpbGUgKCFtX3BlbmRpbmdQ
cmVsb2Fkcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgUGVuZGluZ1ByZWxvYWQgcHJlbG9hZCA9IG1f
cGVuZGluZ1ByZWxvYWRzLnRha2VGaXJzdCgpOwotICAgICAgICAvLyBEb24ndCByZXF1ZXN0IHBy
ZWxvYWQgaWYgdGhlIHJlc291cmNlIGFscmVhZHkgbG9hZGVkIG5vcm1hbGx5ICh0aGlzIHdpbGwg
cmVzdWx0IGluIGRvdWJsZSBsb2FkIGlmIHRoZSBwYWdlIGlzIGJlaW5nIHJlbG9hZGVkIHdpdGgg
Y2FjaGVkIHJlc3VsdHMgaWdub3JlZCkuCi0gICAgICAgIGlmICghY2FjaGVkUmVzb3VyY2UocHJl
bG9hZC5tX3JlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCkpKQotICAgICAgICAgICAgcmVx
dWVzdFByZWxvYWQocHJlbG9hZC5tX3R5cGUsIHByZWxvYWQubV9yZXF1ZXN0LCBwcmVsb2FkLm1f
Y2hhcnNldCk7Ci0gICAgfQotICAgIG1fcGVuZGluZ1ByZWxvYWRzLmNsZWFyKCk7Ci19Ci0KLUNh
Y2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
cmVxdWVzdFByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgQ2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCi17Ci0gICAgU3RyaW5nIGVu
Y29kaW5nOwotICAgIGlmICh0eXBlID09IENhY2hlZFJlc291cmNlOjpTY3JpcHQgfHwgdHlwZSA9
PSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCkKLSAgICAgICAgZW5jb2RpbmcgPSBjaGFy
c2V0LmlzRW1wdHkoKSA/IG1fZG9jdW1lbnQtPmNoYXJzZXQoKSA6IGNoYXJzZXQ7Ci0KLSAgICBy
ZXF1ZXN0LnNldENoYXJzZXQoZW5jb2RpbmcpOwotICAgIHJlcXVlc3Quc2V0Rm9yUHJlbG9hZCh0
cnVlKTsKLQotICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiByZXNvdXJj
ZSA9IHJlcXVlc3RSZXNvdXJjZSh0eXBlLCByZXF1ZXN0KTsKLSAgICBpZiAoIXJlc291cmNlIHx8
IChtX3ByZWxvYWRzICYmIG1fcHJlbG9hZHMtPmNvbnRhaW5zKHJlc291cmNlLmdldCgpKSkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIC8vIEZvbnRzIG5lZWQgc3BlY2lhbCB0cmVhdG1l
bnQgc2luY2UganVzdCBjcmVhdGluZyB0aGUgcmVzb3VyY2UgZG9lc24ndCB0cmlnZ2VyIGEgbG9h
ZC4KLSAgICBpZiAodHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlKQotICAgICAg
ICBkb3duY2FzdDxDYWNoZWRGb250PihyZXNvdXJjZS5nZXQoKSktPmJlZ2luTG9hZElmTmVlZGVk
KCp0aGlzKTsKLSAgICByZXNvdXJjZS0+aW5jcmVhc2VQcmVsb2FkQ291bnQoKTsKLQotICAgIGlm
ICghbV9wcmVsb2FkcykKLSAgICAgICAgbV9wcmVsb2FkcyA9IHN0ZDo6bWFrZV91bmlxdWU8TGlz
dEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2UqPj4oKTsKLSAgICBtX3ByZWxvYWRzLT5hZGQocmVzb3Vy
Y2UuZ2V0KCkpOwotCi0jaWYgUFJFTE9BRF9ERUJVRwotICAgIHByaW50ZigiUFJFTE9BRElORyAl
c1xuIiwgIHJlc291cmNlLT51cmwoKS5sYXRpbjEoKS5kYXRhKCkpOwotI2VuZGlmCi0gICAgcmV0
dXJuIHJlc291cmNlOwotfQotCi1ib29sIENhY2hlZFJlc291cmNlTG9hZGVyOjppc1ByZWxvYWRl
ZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykgY29uc3QKLXsKLSAgICBjb25zdCBVUkwmIHVybCA9
IG1fZG9jdW1lbnQtPmNvbXBsZXRlVVJMKHVybFN0cmluZyk7Ci0KLSAgICBpZiAobV9wcmVsb2Fk
cykgewotICAgICAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogKm1fcHJlbG9hZHMpIHsKLSAgICAg
ICAgICAgIGlmIChyZXNvdXJjZS0+dXJsKCkgPT0gdXJsKQotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChhdXRvJiBwZW5kaW5nUHJlbG9h
ZCA6IG1fcGVuZGluZ1ByZWxvYWRzKSB7Ci0gICAgICAgIGlmIChwZW5kaW5nUHJlbG9hZC5tX3Jl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCkgPT0gdXJsKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJj
ZUxvYWRlcjo6Y2xlYXJQcmVsb2FkcygpCi17Ci0jaWYgUFJFTE9BRF9ERUJVRwotICAgIHByaW50
UHJlbG9hZFN0YXRzKCk7Ci0jZW5kaWYKLSAgICBpZiAoIW1fcHJlbG9hZHMpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGZvciAoYXV0byogcmVzb3VyY2UgOiAqbV9wcmVsb2FkcykgewotICAgICAg
ICByZXNvdXJjZS0+ZGVjcmVhc2VQcmVsb2FkQ291bnQoKTsKLSAgICAgICAgYm9vbCBkZWxldGVk
ID0gcmVzb3VyY2UtPmRlbGV0ZUlmUG9zc2libGUoKTsKLSAgICAgICAgaWYgKCFkZWxldGVkICYm
IHJlc291cmNlLT5wcmVsb2FkUmVzdWx0KCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlByZWxvYWROb3RS
ZWZlcmVuY2VkKQotICAgICAgICAgICAgTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpLnJlbW92ZSgq
cmVzb3VyY2UpOwotICAgIH0KLSAgICBtX3ByZWxvYWRzID0gbnVsbHB0cjsKLX0KLQotdm9pZCBD
YWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2xlYXJQZW5kaW5nUHJlbG9hZHMoKQotewotICAgIG1fcGVu
ZGluZ1ByZWxvYWRzLmNsZWFyKCk7Ci19Ci0KLSNpZiBQUkVMT0FEX0RFQlVHCi12b2lkIENhY2hl
ZFJlc291cmNlTG9hZGVyOjpwcmludFByZWxvYWRTdGF0cygpCi17Ci0gICAgdW5zaWduZWQgc2Ny
aXB0cyA9IDA7Ci0gICAgdW5zaWduZWQgc2NyaXB0TWlzc2VzID0gMDsKLSAgICB1bnNpZ25lZCBz
dHlsZXNoZWV0cyA9IDA7Ci0gICAgdW5zaWduZWQgc3R5bGVzaGVldE1pc3NlcyA9IDA7Ci0gICAg
dW5zaWduZWQgaW1hZ2VzID0gMDsKLSAgICB1bnNpZ25lZCBpbWFnZU1pc3NlcyA9IDA7Ci0gICAg
Zm9yIChhdXRvJiByZXNvdXJjZSA6IG1fcHJlbG9hZHMpIHsKLSAgICAgICAgaWYgKHJlc291cmNl
LT5wcmVsb2FkUmVzdWx0KCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlByZWxvYWROb3RSZWZlcmVuY2Vk
KQotICAgICAgICAgICAgcHJpbnRmKCIhISBVTlJFRkVSRU5DRUQgUFJFTE9BRCAlc1xuIiwgcmVz
b3VyY2UtPnVybCgpLmxhdGluMSgpLmRhdGEoKSk7Ci0gICAgICAgIGVsc2UgaWYgKHJlc291cmNl
LT5wcmVsb2FkUmVzdWx0KCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlByZWxvYWRSZWZlcmVuY2VkV2hp
bGVDb21wbGV0ZSkKLSAgICAgICAgICAgIHByaW50ZigiSElUIENPTVBMRVRFIFBSRUxPQUQgJXNc
biIsIHJlc291cmNlLT51cmwoKS5sYXRpbjEoKS5kYXRhKCkpOwotICAgICAgICBlbHNlIGlmIChy
ZXNvdXJjZS0+cHJlbG9hZFJlc3VsdCgpID09IENhY2hlZFJlc291cmNlOjpQcmVsb2FkUmVmZXJl
bmNlZFdoaWxlTG9hZGluZykKLSAgICAgICAgICAgIHByaW50ZigiSElUIExPQURJTkcgUFJFTE9B
RCAlc1xuIiwgcmVzb3VyY2UtPnVybCgpLmxhdGluMSgpLmRhdGEoKSk7Ci0KLSAgICAgICAgaWYg
KHJlc291cmNlLT50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdCkgewotICAgICAgICAg
ICAgc2NyaXB0cysrOwotICAgICAgICAgICAgaWYgKHJlc291cmNlLT5wcmVsb2FkUmVzdWx0KCkg
PCBDYWNoZWRSZXNvdXJjZTo6UHJlbG9hZFJlZmVyZW5jZWRXaGlsZUxvYWRpbmcpCi0gICAgICAg
ICAgICAgICAgc2NyaXB0TWlzc2VzKys7Ci0gICAgICAgIH0gZWxzZSBpZiAocmVzb3VyY2UtPnR5
cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCkgewotICAgICAgICAgICAgc3R5
bGVzaGVldHMrKzsKLSAgICAgICAgICAgIGlmIChyZXNvdXJjZS0+cHJlbG9hZFJlc3VsdCgpIDwg
Q2FjaGVkUmVzb3VyY2U6OlByZWxvYWRSZWZlcmVuY2VkV2hpbGVMb2FkaW5nKQotICAgICAgICAg
ICAgICAgIHN0eWxlc2hlZXRNaXNzZXMrKzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGltYWdlcysrOwotICAgICAgICAgICAgaWYgKHJlc291cmNlLT5wcmVsb2FkUmVzdWx0KCkgPCBD
YWNoZWRSZXNvdXJjZTo6UHJlbG9hZFJlZmVyZW5jZWRXaGlsZUxvYWRpbmcpCi0gICAgICAgICAg
ICAgICAgaW1hZ2VNaXNzZXMrKzsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXNvdXJjZS0+
ZXJyb3JPY2N1cnJlZCgpICYmIHJlc291cmNlLT5wcmVsb2FkUmVzdWx0KCkgPT0gQ2FjaGVkUmVz
b3VyY2U6OlByZWxvYWROb3RSZWZlcmVuY2VkKQotICAgICAgICAgICAgTWVtb3J5Q2FjaGU6OnNp
bmdsZXRvbigpLnJlbW92ZShyZXNvdXJjZSk7Ci0KLSAgICAgICAgcmVzb3VyY2UtPmRlY3JlYXNl
UHJlbG9hZENvdW50KCk7Ci0gICAgfQotICAgIG1fcHJlbG9hZHMgPSBudWxscHRyOwotCi0gICAg
aWYgKHNjcmlwdHMpCi0gICAgICAgIHByaW50ZigiU0NSSVBUUzogJWQgKCVkIGhpdHMsIGhpdCBy
YXRlICVkJSUpXG4iLCBzY3JpcHRzLCBzY3JpcHRzIC0gc2NyaXB0TWlzc2VzLCAoc2NyaXB0cyAt
IHNjcmlwdE1pc3NlcykgKiAxMDAgLyBzY3JpcHRzKTsKLSAgICBpZiAoc3R5bGVzaGVldHMpCi0g
ICAgICAgIHByaW50ZigiU1RZTEVTSEVFVFM6ICVkICglZCBoaXRzLCBoaXQgcmF0ZSAlZCUlKVxu
Iiwgc3R5bGVzaGVldHMsIHN0eWxlc2hlZXRzIC0gc3R5bGVzaGVldE1pc3NlcywgKHN0eWxlc2hl
ZXRzIC0gc3R5bGVzaGVldE1pc3NlcykgKiAxMDAgLyBzdHlsZXNoZWV0cyk7Ci0gICAgaWYgKGlt
YWdlcykKLSAgICAgICAgcHJpbnRmKCJJTUFHRVM6ICAlZCAoJWQgaGl0cywgaGl0IHJhdGUgJWQl
JSlcbiIsIGltYWdlcywgaW1hZ2VzIC0gaW1hZ2VNaXNzZXMsIChpbWFnZXMgLSBpbWFnZU1pc3Nl
cykgKiAxMDAgLyBpbWFnZXMpOwotfQotI2VuZGlmCi0KLWNvbnN0IFJlc291cmNlTG9hZGVyT3B0
aW9ucyYgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRlZmF1bHRDYWNoZWRSZXNvdXJjZU9wdGlvbnMo
KQotewotICAgIHN0YXRpYyBSZXNvdXJjZUxvYWRlck9wdGlvbnMgb3B0aW9ucyhTZW5kQ2FsbGJh
Y2tzLCBTbmlmZkNvbnRlbnQsIEJ1ZmZlckRhdGEsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIENs
aWVudENyZWRlbnRpYWxQb2xpY3k6Ok1heUFza0NsaWVudEZvckNyZWRlbnRpYWxzLCBGZXRjaE9w
dGlvbnM6OkNyZWRlbnRpYWxzOjpJbmNsdWRlLCBEb1NlY3VyaXR5Q2hlY2ssIEZldGNoT3B0aW9u
czo6TW9kZTo6Tm9Db3JzLCBEb05vdEluY2x1ZGVDZXJ0aWZpY2F0ZUluZm8sIENvbnRlbnRTZWN1
cml0eVBvbGljeUltcG9zaXRpb246OkRvUG9saWN5Q2hlY2ssIERlZmVyc0xvYWRpbmdQb2xpY3k6
OkFsbG93RGVmZXJzTG9hZGluZywgQ2FjaGluZ1BvbGljeTo6QWxsb3dDYWNoaW5nKTsKLSAgICBy
ZXR1cm4gb3B0aW9uczsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NGNjOGIzODI4M2FkZDllZWIwYTM1M2E2NGE0M2FjYWE1ZTk0OTBkOS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxOCArMCwwIEBA
Ci0vKgotICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBn
LmRlKQotICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9y
Zz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICAgIENvcHlyaWdo
dCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8K
LQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0K
LSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9h
ZGluZyBpbWFnZXMsIHN0eWxlIHNoZWV0cyBhbmQgaHRtbAotICAgIHBhZ2VzIGZyb20gdGhlIHdl
Yi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgotKi8KLQotI2lmbmRl
ZiBDYWNoZWRSZXNvdXJjZUxvYWRlcl9oCi0jZGVmaW5lIENhY2hlZFJlc291cmNlTG9hZGVyX2gK
LQotI2luY2x1ZGUgIkNhY2hlUG9saWN5LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIK
LSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFByaW9yaXR5LmgiCi0jaW5jbHVk
ZSAiUmVzb3VyY2VUaW1pbmdJbmZvcm1hdGlvbi5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5j
bHVkZSA8d3RmL0RlcXVlLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDYWNo
ZWRDU1NTdHlsZVNoZWV0OwotY2xhc3MgQ2FjaGVkU1ZHRG9jdW1lbnQ7Ci1jbGFzcyBDYWNoZWRG
b250OwotY2xhc3MgQ2FjaGVkSW1hZ2U7Ci1jbGFzcyBDYWNoZWRSYXdSZXNvdXJjZTsKLWNsYXNz
IENhY2hlZFNjcmlwdDsKLWNsYXNzIENhY2hlZFRleHRUcmFjazsKLWNsYXNzIENhY2hlZFhTTFN0
eWxlU2hlZXQ7Ci1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIERvY3VtZW50TG9hZGVyOwotY2xhc3Mg
RnJhbWU7Ci1jbGFzcyBJbWFnZUxvYWRlcjsKLWNsYXNzIFVSTDsKLQotLy8gVGhlIENhY2hlZFJl
c291cmNlTG9hZGVyIHByb3ZpZGVzIGEgcGVyLWNvbnRleHQgaW50ZXJmYWNlIHRvIHRoZSBNZW1v
cnlDYWNoZQotLy8gYW5kIGVuZm9yY2VzIGEgYnVuY2ggb2Ygc2VjdXJpdHkgY2hlY2tzIGFuZCBy
dWxlcyBmb3IgcmVzb3VyY2UgcmV2YWxpZGF0aW9uLgotLy8gSXRzIGxpZmV0aW1lIGlzIHJvdWdo
bHkgcGVyLURvY3VtZW50TG9hZGVyLCBpbiB0aGF0IGl0IGlzIGdlbmVyYWxseSBjcmVhdGVkCi0v
LyBpbiB0aGUgRG9jdW1lbnRMb2FkZXIgY29uc3RydWN0b3IgYW5kIGxvc2VzIGl0cyBhYmlsaXR5
IHRvIGdlbmVyYXRlIG5ldHdvcmsKLS8vIHJlcXVlc3RzIHdoZW4gdGhlIERvY3VtZW50TG9hZGVy
IGlzIGRlc3Ryb3llZC4gRG9jdW1lbnRzIGFsc28gaG9sZCBhIAotLy8gUmVmUHRyPENhY2hlZFJl
c291cmNlTG9hZGVyPiBmb3IgdGhlaXIgbGlmZXRpbWUgKGFuZCB3aWxsIGNyZWF0ZSBvbmUgaWYg
dGhleQotLy8gYXJlIGluaXRpYWxpemVkIHdpdGhvdXQgYSBGcmFtZSksIHNvIGEgRG9jdW1lbnQg
Y2FuIGtlZXAgYSBDYWNoZWRSZXNvdXJjZUxvYWRlcgotLy8gYWxpdmUgcGFzdCBkZXRhY2ggaWYg
c2NyaXB0cyBzdGlsbCByZWZlcmVuY2UgdGhlIERvY3VtZW50LgotY2xhc3MgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxDYWNoZWRSZXNvdXJjZUxvYWRlcj4gewotICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENhY2hlZFJlc291cmNlTG9hZGVyKTsgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci1mcmllbmQgY2xhc3MgSW1hZ2VMb2FkZXI7Ci1mcmllbmQgY2xhc3MgUmVz
b3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29yOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxDYWNoZWRSZXNvdXJjZUxvYWRlcj4gY3JlYXRlKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExv
YWRlcikgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBDYWNoZWRSZXNvdXJjZUxvYWRlcihkb2N1bWVu
dExvYWRlcikpOyB9Ci0gICAgfkNhY2hlZFJlc291cmNlTG9hZGVyKCk7Ci0KLSAgICBDYWNoZWRS
ZXNvdXJjZUhhbmRsZTxDYWNoZWRJbWFnZT4gcmVxdWVzdEltYWdlKENhY2hlZFJlc291cmNlUmVx
dWVzdCYpOwotICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZENTU1N0eWxlU2hlZXQ+IHJl
cXVlc3RDU1NTdHlsZVNoZWV0KENhY2hlZFJlc291cmNlUmVxdWVzdCYpOwotICAgIENhY2hlZFJl
c291cmNlSGFuZGxlPENhY2hlZENTU1N0eWxlU2hlZXQ+IHJlcXVlc3RVc2VyQ1NTU3R5bGVTaGVl
dChDYWNoZWRSZXNvdXJjZVJlcXVlc3QmKTsKLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNo
ZWRTY3JpcHQ+IHJlcXVlc3RTY3JpcHQoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgQ2Fj
aGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkRm9udD4gcmVxdWVzdEZvbnQoQ2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0JiwgYm9vbCBpc1NWRyk7Ci0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3
UmVzb3VyY2U+IHJlcXVlc3RNZWRpYShDYWNoZWRSZXNvdXJjZVJlcXVlc3QmKTsKLSAgICBDYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gcmVxdWVzdFJhd1Jlc291cmNlKENh
Y2hlZFJlc291cmNlUmVxdWVzdCYpOwotICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJh
d1Jlc291cmNlPiByZXF1ZXN0TWFpblJlc291cmNlKENhY2hlZFJlc291cmNlUmVxdWVzdCYpOwot
ICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNWR0RvY3VtZW50PiByZXF1ZXN0U1ZHRG9j
dW1lbnQoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Jik7Ci0jaWYgRU5BQkxFKFhTTFQpCi0gICAgQ2Fj
aGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkWFNMU3R5bGVTaGVldD4gcmVxdWVzdFhTTFN0eWxlU2hl
ZXQoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Jik7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoTElOS19QUkVG
RVRDSCkKLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gcmVxdWVzdExp
bmtSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSwgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Jik7
Ci0jZW5kaWYKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgQ2FjaGVkUmVzb3VyY2VIYW5k
bGU8Q2FjaGVkVGV4dFRyYWNrPiByZXF1ZXN0VGV4dFRyYWNrKENhY2hlZFJlc291cmNlUmVxdWVz
dCYpOwotI2VuZGlmCi0KLSAgICAvLyBMb2dzIGFuIGFjY2VzcyBkZW5pZWQgbWVzc2FnZSB0byB0
aGUgY29uc29sZSBmb3IgdGhlIHNwZWNpZmllZCBVUkwuCi0gICAgdm9pZCBwcmludEFjY2Vzc0Rl
bmllZE1lc3NhZ2UoY29uc3QgVVJMJiB1cmwpIGNvbnN0OwotCi0gICAgQ2FjaGVkUmVzb3VyY2Uq
IGNhY2hlZFJlc291cmNlKGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdDsKLSAgICBDYWNoZWRSZXNv
dXJjZSogY2FjaGVkUmVzb3VyY2UoY29uc3QgVVJMJiB1cmwpIGNvbnN0OwotICAgIAotICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNl
Pj4gRG9jdW1lbnRSZXNvdXJjZU1hcDsKLSAgICBjb25zdCBEb2N1bWVudFJlc291cmNlTWFwJiBh
bGxDYWNoZWRSZXNvdXJjZXMoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50UmVzb3VyY2VzOyB9
Ci0KLSAgICBib29sIGF1dG9Mb2FkSW1hZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9hdXRvTG9hZElt
YWdlczsgfQotICAgIHZvaWQgc2V0QXV0b0xvYWRJbWFnZXMoYm9vbCk7Ci0KLSAgICBib29sIGlt
YWdlc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlc0VuYWJsZWQ7IH0KLSAgICB2b2lk
IHNldEltYWdlc0VuYWJsZWQoYm9vbCk7Ci0KLSAgICBib29sIHNob3VsZERlZmVySW1hZ2VMb2Fk
KGNvbnN0IFVSTCYpIGNvbnN0OwotICAgIGJvb2wgc2hvdWxkUGVyZm9ybUltYWdlTG9hZChjb25z
dCBVUkwmKSBjb25zdDsKLSAgICAKLSAgICBDYWNoZVBvbGljeSBjYWNoZVBvbGljeShDYWNoZWRS
ZXNvdXJjZTo6VHlwZSkgY29uc3Q7Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lKCkgY29uc3Q7IC8v
IENhbiBiZSBudWxsCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9k
b2N1bWVudDsgfSAvLyBDYW4gYmUgbnVsbAotICAgIHZvaWQgc2V0RG9jdW1lbnQoRG9jdW1lbnQq
IGRvY3VtZW50KSB7IG1fZG9jdW1lbnQgPSBkb2N1bWVudDsgfQotICAgIHZvaWQgY2xlYXJEb2N1
bWVudExvYWRlcigpIHsgbV9kb2N1bWVudExvYWRlciA9IG51bGxwdHI7IH0KLSAgICBTZXNzaW9u
SUQgc2Vzc2lvbklEKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHJlbW92ZUNhY2hlZFJlc291cmNlKENh
Y2hlZFJlc291cmNlJik7Ci0KLSAgICB2b2lkIGxvYWREb25lKENhY2hlZFJlc291cmNlKiwgYm9v
bCBzaG91bGRQZXJmb3JtUG9zdExvYWRBY3Rpb25zID0gdHJ1ZSk7Ci0KLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGdhcmJhZ2VDb2xsZWN0RG9jdW1lbnRSZXNvdXJjZXMoKTsKLSAgICAKLSAgICB2
b2lkIGluY3JlbWVudFJlcXVlc3RDb3VudChjb25zdCBDYWNoZWRSZXNvdXJjZSYpOwotICAgIHZv
aWQgZGVjcmVtZW50UmVxdWVzdENvdW50KGNvbnN0IENhY2hlZFJlc291cmNlJik7Ci0gICAgaW50
IHJlcXVlc3RDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdENvdW50OyB9Ci0KLSAgICBX
RUJDT1JFX0VYUE9SVCBib29sIGlzUHJlbG9hZGVkKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBj
b25zdDsKLSAgICB2b2lkIGNsZWFyUHJlbG9hZHMoKTsKLSAgICB2b2lkIGNsZWFyUGVuZGluZ1By
ZWxvYWRzKCk7Ci0gICAgZW51bSBQcmVsb2FkVHlwZSB7IEltcGxpY2l0UHJlbG9hZCwgRXhwbGlj
aXRQcmVsb2FkIH07Ci0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IHBy
ZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIENhY2hlZFJlc291cmNlUmVxdWVzdCYsIGNvbnN0
IFN0cmluZyYgY2hhcnNldCwgUHJlbG9hZFR5cGUpOwotICAgIHZvaWQgY2hlY2tGb3JQZW5kaW5n
UHJlbG9hZHMoKTsKLSAgICB2b2lkIHByaW50UHJlbG9hZFN0YXRzKCk7Ci0KLSAgICBib29sIGNh
blJlcXVlc3QoQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIGNvbnN0IFVSTCYsIGNvbnN0IFJlc291cmNl
TG9hZGVyT3B0aW9ucyYsIGJvb2wgZm9yUHJlbG9hZCA9IGZhbHNlLCBib29sIGRpZFJlY2VpdmVS
ZWRpcmVjdFJlc3BvbnNlID0gZmFsc2UpOwotCi0gICAgc3RhdGljIGNvbnN0IFJlc291cmNlTG9h
ZGVyT3B0aW9ucyYgZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygpOwotCi0gICAgdm9pZCBk
b2N1bWVudERpZEZpbmlzaExvYWRFdmVudCgpOwotCi0jaWYgRU5BQkxFKFdFQl9USU1JTkcpCi0g
ICAgUmVzb3VyY2VUaW1pbmdJbmZvcm1hdGlvbiYgcmVzb3VyY2VUaW1pbmdJbmZvcm1hdGlvbigp
IHsgcmV0dXJuIG1fcmVzb3VyY2VUaW1pbmdJbmZvOyB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAg
ICBleHBsaWNpdCBDYWNoZWRSZXNvdXJjZUxvYWRlcihEb2N1bWVudExvYWRlciopOwotCi0gICAg
Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IHJlcXVlc3RSZXNvdXJjZShDYWNo
ZWRSZXNvdXJjZTo6VHlwZSwgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgQ2FjaGVkUmVz
b3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IHJldmFsaWRhdGVSZXNvdXJjZShjb25zdCBDYWNo
ZWRSZXNvdXJjZVJlcXVlc3QmLCBDYWNoZWRSZXNvdXJjZSopOwotICAgIENhY2hlZFJlc291cmNl
SGFuZGxlPENhY2hlZFJlc291cmNlPiBsb2FkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUs
IENhY2hlZFJlc291cmNlUmVxdWVzdCYpOwotICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hl
ZFJlc291cmNlPiByZXF1ZXN0UHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6VHlwZSwgQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKLQotICAgIGVudW0gUmV2YWxp
ZGF0aW9uUG9saWN5IHsgVXNlLCBSZXZhbGlkYXRlLCBSZWxvYWQsIExvYWQgfTsKLSAgICBSZXZh
bGlkYXRpb25Qb2xpY3kgZGV0ZXJtaW5lUmV2YWxpZGF0aW9uUG9saWN5KENhY2hlZFJlc291cmNl
OjpUeXBlLCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QmLCBDYWNoZWRSZXNvdXJjZSogZXhpc3RpbmdS
ZXNvdXJjZSkgY29uc3Q7Ci0KLSAgICBib29sIHVwZGF0ZUNhY2hlZFJlc291cmNlV2l0aEN1cnJl
bnRSZXF1ZXN0KENhY2hlZFJlc291cmNlUmVxdWVzdCYsIENhY2hlZFJlc291cmNlSGFuZGxlPENh
Y2hlZFJlc291cmNlPiYpOwotICAgIGJvb2wgc2hvdWxkQ29udGludWVBZnRlck5vdGlmeWluZ0xv
YWRlZEZyb21NZW1vcnlDYWNoZShjb25zdCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QmLCBDYWNoZWRS
ZXNvdXJjZSopOwotICAgIGJvb2wgY2hlY2tJbnNlY3VyZUNvbnRlbnQoQ2FjaGVkUmVzb3VyY2U6
OlR5cGUsIGNvbnN0IFVSTCYpIGNvbnN0OwotCi0gICAgdm9pZCBwZXJmb3JtUG9zdExvYWRBY3Rp
b25zKCk7Ci0KLSAgICBib29sIGNsaWVudERlZmVyc0ltYWdlKGNvbnN0IFVSTCYpIGNvbnN0Owot
ICAgIHZvaWQgcmVsb2FkSW1hZ2VzSWZOb3REZWZlcnJlZCgpOwotCi0gICAgYm9vbCBjYW5SZXF1
ZXN0SW5Db250ZW50RGlzcG9zaXRpb25BdHRhY2htZW50U2FuZGJveChDYWNoZWRSZXNvdXJjZTo6
VHlwZSwgY29uc3QgVVJMJikgY29uc3Q7Ci0gICAgCi0gICAgSGFzaFNldDxTdHJpbmc+IG1fdmFs
aWRhdGVkVVJMczsKLSAgICBtdXRhYmxlIERvY3VtZW50UmVzb3VyY2VNYXAgbV9kb2N1bWVudFJl
c291cmNlczsKLSAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKLSAgICBEb2N1bWVudExvYWRlciog
bV9kb2N1bWVudExvYWRlcjsKLSAgICAKLSAgICBpbnQgbV9yZXF1ZXN0Q291bnQ7Ci0gICAgCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNlKj4+IG1fcHJlbG9h
ZHM7Ci0gICAgc3RydWN0IFBlbmRpbmdQcmVsb2FkIHsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2U6
OlR5cGUgbV90eXBlOwotICAgICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgbV9yZXF1ZXN0Owot
ICAgICAgICBTdHJpbmcgbV9jaGFyc2V0OwotICAgIH07Ci0gICAgRGVxdWU8UGVuZGluZ1ByZWxv
YWQ+IG1fcGVuZGluZ1ByZWxvYWRzOwotCi0gICAgVGltZXIgbV9nYXJiYWdlQ29sbGVjdERvY3Vt
ZW50UmVzb3VyY2VzVGltZXI7Ci0KLSNpZiBFTkFCTEUoV0VCX1RJTUlORykKLSAgICBSZXNvdXJj
ZVRpbWluZ0luZm9ybWF0aW9uIG1fcmVzb3VyY2VUaW1pbmdJbmZvOwotI2VuZGlmCi0KLSAgICAv
LyAyOSBiaXRzIGxlZnQKLSAgICBib29sIG1fYXV0b0xvYWRJbWFnZXMgOiAxOwotICAgIGJvb2wg
bV9pbWFnZXNFbmFibGVkIDogMTsKLSAgICBib29sIG1fYWxsb3dTdGFsZVJlc291cmNlcyA6IDE7
Ci19OwotCi1jbGFzcyBSZXNvdXJjZUNhY2hlVmFsaWRhdGlvblN1cHByZXNzb3IgewotICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFJlc291cmNlQ2FjaGVWYWxpZGF0aW9uU3VwcHJlc3Nvcik7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUmVzb3VyY2VDYWNoZVZh
bGlkYXRpb25TdXBwcmVzc29yKENhY2hlZFJlc291cmNlTG9hZGVyJiBsb2FkZXIpCi0gICAgICAg
IDogbV9sb2FkZXIobG9hZGVyKQotICAgICAgICAsIG1fcHJldmlvdXNTdGF0ZShtX2xvYWRlci5t
X2FsbG93U3RhbGVSZXNvdXJjZXMpCi0gICAgewotICAgICAgICBtX2xvYWRlci5tX2FsbG93U3Rh
bGVSZXNvdXJjZXMgPSB0cnVlOwotICAgIH0KLSAgICB+UmVzb3VyY2VDYWNoZVZhbGlkYXRpb25T
dXBwcmVzc29yKCkKLSAgICB7Ci0gICAgICAgIG1fbG9hZGVyLm1fYWxsb3dTdGFsZVJlc291cmNl
cyA9IG1fcHJldmlvdXNTdGF0ZTsKLSAgICB9Ci1wcml2YXRlOgotICAgIENhY2hlZFJlc291cmNl
TG9hZGVyJiBtX2xvYWRlcjsKLSAgICBib29sIG1fcHJldmlvdXNTdGF0ZTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkYzU0YmRmMTA0NTYxN2QzYThjYzc0OTEyMWM3NGY5NzkxNWZiMjE3Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBHT09HTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0LmgiCi0KLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkNy
b3NzT3JpZ2luQWNjZXNzQ29udHJvbC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVk
ZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLUNhY2hlZFJlc291cmNlUmVxdWVzdDo6Q2FjaGVkUmVzb3VyY2VSZXF1
ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBTdHJpbmcm
IGNoYXJzZXQsIE9wdGlvbmFsPFJlc291cmNlTG9hZFByaW9yaXR5PiBwcmlvcml0eSkKLSAgICA6
IG1fcmVzb3VyY2VSZXF1ZXN0KHJlc291cmNlUmVxdWVzdCkKLSAgICAsIG1fY2hhcnNldChjaGFy
c2V0KQotICAgICwgbV9vcHRpb25zKENhY2hlZFJlc291cmNlTG9hZGVyOjpkZWZhdWx0Q2FjaGVk
UmVzb3VyY2VPcHRpb25zKCkpCi0gICAgLCBtX3ByaW9yaXR5KHByaW9yaXR5KQotICAgICwgbV9m
b3JQcmVsb2FkKGZhbHNlKQotICAgICwgbV9kZWZlcihOb0RlZmVyKQotewotfQotCi1DYWNoZWRS
ZXNvdXJjZVJlcXVlc3Q6OkNhY2hlZFJlc291cmNlUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiBy
ZXNvdXJjZVJlcXVlc3QsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKLSAg
ICA6IG1fcmVzb3VyY2VSZXF1ZXN0KFdURk1vdmUocmVzb3VyY2VSZXF1ZXN0KSkKLSAgICAsIG1f
b3B0aW9ucyhvcHRpb25zKQotICAgICwgbV9mb3JQcmVsb2FkKGZhbHNlKQotICAgICwgbV9kZWZl
cihOb0RlZmVyKQotewotfQotCi1DYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OkNhY2hlZFJlc291cmNl
UmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgT3B0aW9uYWw8
UmVzb3VyY2VMb2FkUHJpb3JpdHk+IHByaW9yaXR5KQotICAgIDogbV9yZXNvdXJjZVJlcXVlc3Qo
cmVzb3VyY2VSZXF1ZXN0KQotICAgICwgbV9vcHRpb25zKENhY2hlZFJlc291cmNlTG9hZGVyOjpk
ZWZhdWx0Q2FjaGVkUmVzb3VyY2VPcHRpb25zKCkpCi0gICAgLCBtX3ByaW9yaXR5KHByaW9yaXR5
KQotICAgICwgbV9mb3JQcmVsb2FkKGZhbHNlKQotICAgICwgbV9kZWZlcihOb0RlZmVyKQotewot
fQotCi1DYWNoZWRSZXNvdXJjZVJlcXVlc3Q6On5DYWNoZWRSZXNvdXJjZVJlcXVlc3QoKQotewot
fQotCi12b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6c2V0SW5pdGlhdG9yKFBhc3NSZWZQdHI8
RWxlbWVudD4gZWxlbWVudCkKLXsKLSAgICBBU1NFUlQoIW1faW5pdGlhdG9yRWxlbWVudCAmJiBt
X2luaXRpYXRvck5hbWUuaXNFbXB0eSgpKTsKLSAgICBtX2luaXRpYXRvckVsZW1lbnQgPSBlbGVt
ZW50OwotfQotCi12b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6c2V0SW5pdGlhdG9yKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQoIW1faW5pdGlhdG9yRWxlbWVudCAm
JiBtX2luaXRpYXRvck5hbWUuaXNFbXB0eSgpKTsKLSAgICBtX2luaXRpYXRvck5hbWUgPSBuYW1l
OwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIENhY2hlZFJlc291cmNlUmVxdWVzdDo6aW5pdGlh
dG9yTmFtZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1faW5pdGlhdG9yRWxlbWVudCkKLSAgICAgICAg
cmV0dXJuIG1faW5pdGlhdG9yRWxlbWVudC0+bG9jYWxOYW1lKCk7Ci0gICAgaWYgKCFtX2luaXRp
YXRvck5hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9pbml0aWF0b3JOYW1lOwotCi0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZGVmYXVsdE5hbWUoInJlc291
cmNlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIGRl
ZmF1bHROYW1lOwotfQotCi12b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6c2V0QXNQb3RlbnRp
YWxseUNyb3NzT3JpZ2luKGNvbnN0IFN0cmluZyYgbW9kZSwgRG9jdW1lbnQmIGRvY3VtZW50KQot
ewotICAgIEFTU0VSVChtX29wdGlvbnMubW9kZSA9PSBGZXRjaE9wdGlvbnM6Ok1vZGU6Ok5vQ29y
cyk7Ci0gICAgaWYgKG1vZGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX29wdGlv
bnMubW9kZSA9IEZldGNoT3B0aW9uczo6TW9kZTo6Q29yczsKLSAgICBtX29wdGlvbnMuY3JlZGVu
dGlhbHMgPSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtb2RlLCAidXNlLWNyZWRlbnRp
YWxzIikgPyBGZXRjaE9wdGlvbnM6OkNyZWRlbnRpYWxzOjpJbmNsdWRlIDogRmV0Y2hPcHRpb25z
OjpDcmVkZW50aWFsczo6U2FtZU9yaWdpbjsKLSAgICBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFs
cyA9IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1vZGUsICJ1c2UtY3JlZGVudGlhbHMi
KSA/IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMgOiBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHM7
Ci0KLSAgICBBU1NFUlQoZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAgdXBkYXRlUmVx
dWVzdEZvckFjY2Vzc0NvbnRyb2wobV9yZXNvdXJjZVJlcXVlc3QsICpkb2N1bWVudC5zZWN1cml0
eU9yaWdpbigpLCBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscyk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZVJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZVJlcXVlc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI3ZWJiYmU1
ODY2NzRlYmJhNzY5OGI0OTc4M2FkM2Q4ZmRmYzAyMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDYWNoZWRS
ZXNvdXJjZVJlcXVlc3RfaAotI2RlZmluZSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RfaAotCi0jaW5j
bHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAi
UmVzb3VyY2VMb2FkUHJpb3JpdHkuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRlck9wdGlvbnMu
aCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLWNsYXNzIERvY3VtZW50OwotCi1jbGFzcyBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgewotcHVi
bGljOgotICAgIGVudW0gRGVmZXJPcHRpb24geyBOb0RlZmVyLCBEZWZlcnJlZEJ5Q2xpZW50IH07
Ci0KLSAgICBleHBsaWNpdCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwgY29uc3QgU3RyaW5nJiBjaGFyc2V0ID0gU3RyaW5nKCksIE9wdGlvbmFsPFJlc291cmNl
TG9hZFByaW9yaXR5PiA9IE51bGxvcHQpOwotICAgIENhY2hlZFJlc291cmNlUmVxdWVzdChSZXNv
dXJjZVJlcXVlc3QmJiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJik7Ci0gICAgQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIE9wdGlvbmFsPFJlc291cmNl
TG9hZFByaW9yaXR5Pik7Ci0gICAgfkNhY2hlZFJlc291cmNlUmVxdWVzdCgpOwotCi0gICAgUmVz
b3VyY2VSZXF1ZXN0JiBtdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCkgeyByZXR1cm4gbV9yZXNvdXJj
ZVJlcXVlc3Q7IH0KLSAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VSZXF1ZXN0OyB9Ci0gICAgY29uc3QgU3RyaW5nJiBj
aGFyc2V0KCkgY29uc3QgeyByZXR1cm4gbV9jaGFyc2V0OyB9Ci0gICAgdm9pZCBzZXRDaGFyc2V0
KGNvbnN0IFN0cmluZyYgY2hhcnNldCkgeyBtX2NoYXJzZXQgPSBjaGFyc2V0OyB9Ci0gICAgY29u
c3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9vcHRp
b25zOyB9Ci0gICAgdm9pZCBzZXRPcHRpb25zKGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYg
b3B0aW9ucykgeyBtX29wdGlvbnMgPSBvcHRpb25zOyB9Ci0gICAgY29uc3QgT3B0aW9uYWw8UmVz
b3VyY2VMb2FkUHJpb3JpdHk+JiBwcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpb3JpdHk7
IH0KLSAgICBib29sIGZvclByZWxvYWQoKSBjb25zdCB7IHJldHVybiBtX2ZvclByZWxvYWQ7IH0K
LSAgICB2b2lkIHNldEZvclByZWxvYWQoYm9vbCBmb3JQcmVsb2FkKSB7IG1fZm9yUHJlbG9hZCA9
IGZvclByZWxvYWQ7IH0KLSAgICBEZWZlck9wdGlvbiBkZWZlcigpIGNvbnN0IHsgcmV0dXJuIG1f
ZGVmZXI7IH0KLSAgICB2b2lkIHNldERlZmVyKERlZmVyT3B0aW9uIGRlZmVyKSB7IG1fZGVmZXIg
PSBkZWZlcjsgfQotICAgIHZvaWQgc2V0SW5pdGlhdG9yKFBhc3NSZWZQdHI8RWxlbWVudD4pOwot
ICAgIHZvaWQgc2V0SW5pdGlhdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSk7Ci0gICAgY29u
c3QgQXRvbWljU3RyaW5nJiBpbml0aWF0b3JOYW1lKCkgY29uc3Q7Ci0gICAgYm9vbCBhbGxvd3ND
YWNoaW5nKCkgY29uc3QgeyByZXR1cm4gbV9vcHRpb25zLmNhY2hpbmdQb2xpY3kgPT0gQ2FjaGlu
Z1BvbGljeTo6QWxsb3dDYWNoaW5nOyB9Ci0gICAgdm9pZCBzZXRDYWNoaW5nUG9saWN5KENhY2hp
bmdQb2xpY3kgcG9saWN5KSB7IG1fb3B0aW9ucy5jYWNoaW5nUG9saWN5ID0gcG9saWN5OyB9Ci0K
LSAgICB2b2lkIHNldEFzUG90ZW50aWFsbHlDcm9zc09yaWdpbihjb25zdCBTdHJpbmcmLCBEb2N1
bWVudCYpOwotCi1wcml2YXRlOgotICAgIFJlc291cmNlUmVxdWVzdCBtX3Jlc291cmNlUmVxdWVz
dDsKLSAgICBTdHJpbmcgbV9jaGFyc2V0OwotICAgIFJlc291cmNlTG9hZGVyT3B0aW9ucyBtX29w
dGlvbnM7Ci0gICAgT3B0aW9uYWw8UmVzb3VyY2VMb2FkUHJpb3JpdHk+IG1fcHJpb3JpdHk7Ci0g
ICAgYm9vbCBtX2ZvclByZWxvYWQ7Ci0gICAgRGVmZXJPcHRpb24gbV9kZWZlcjsKLSAgICBSZWZQ
dHI8RWxlbWVudD4gbV9pbml0aWF0b3JFbGVtZW50OwotICAgIEF0b21pY1N0cmluZyBtX2luaXRp
YXRvck5hbWU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdElu
aXRpYXRvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
UmVxdWVzdEluaXRpYXRvcnMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzM5
YThlNThjZGFhZDUxZjVhZjgwZWE0NjM5NGJkN2JjNTAyODE1Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM5
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBHT09HTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5p
dGlhdG9ycy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNhY2hlZFJlc291cmNlUmVxdWVz
dEluaXRpYXRvcnM6OkNhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMoKQotICAgIDogY3Nz
KCJjc3MiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKQotICAgICwgZmV0Y2go
ImZldGNoIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkKLSAgICAsIGljb24o
Imljb24iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKQotICAgICwgeG1saHR0
cHJlcXVlc3QoInhtbGh0dHByZXF1ZXN0IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCkKLXsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMuaCBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0
b3JzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3Y2ZlMDFjOGQyMDAwODMyNmEw
OTE5N2ViZmRmNDY0NTczODFmMjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVx
dWVzdEluaXRpYXRvcnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENhY2hlZFJl
c291cmNlUmVxdWVzdEluaXRpYXRvcnNfaAotI2RlZmluZSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJ
bml0aWF0b3JzX2gKLQotI2luY2x1ZGUgIlRocmVhZEdsb2JhbERhdGEuaCIKLSNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3Qg
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycyB7Ci0gICAgQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0SW5pdGlhdG9ycygpOwotCi0gICAgY29uc3QgQXRvbWljU3RyaW5nIGNzczsKLSAgICBjb25z
dCBBdG9taWNTdHJpbmcgZmV0Y2g7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nIGljb247Ci0gICAg
Y29uc3QgQXRvbWljU3RyaW5nIHhtbGh0dHByZXF1ZXN0OwotICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKENhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMpOyBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFRocmVhZEdsb2JhbERhdGE7Ci19Owot
Ci1pbmxpbmUgY29uc3QgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycyYgY2FjaGVkUmVz
b3VyY2VSZXF1ZXN0SW5pdGlhdG9ycygpCi17Ci0gICAgcmV0dXJuIHRocmVhZEdsb2JhbERhdGEo
KS5jYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkU1ZHRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFNWR0RvY3VtZW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUyMzAy
MDFiMGY3MTBkMzlhNWJkYmIxYTZkNmEyYjg1MjYwN2QzMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkU1ZHRG9jdW1lbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAg
ICBDb3B5cmlnaHQgKEMpIDIwMTAgUm9iIEJ1aXMgPHJ3bGJ1aXNAZ21haWwuY29tPgotICAgIENv
cHlyaWdodCAoQykgMjAxMSBDb3NtaW4gVHJ1dGEgPGN0cnV0YUBnbWFpbC5jb20+Ci0gICAgQ29w
eXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gICAgQ29weXJpZ2h0IChDKSAy
MDEyIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+Ci0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50LmgiCi0KLSNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1DYWNoZWRTVkdEb2N1bWVudDo6Q2Fj
aGVkU1ZHRG9jdW1lbnQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTZXNzaW9uSUQg
c2Vzc2lvbklEKQotICAgIDogQ2FjaGVkUmVzb3VyY2UocmVxdWVzdCwgU1ZHRG9jdW1lbnRSZXNv
dXJjZSwgc2Vzc2lvbklEKQotICAgICwgbV9kZWNvZGVyKFRleHRSZXNvdXJjZURlY29kZXI6OmNy
ZWF0ZSgiYXBwbGljYXRpb24veG1sIikpCi17Ci0gICAgc2V0QWNjZXB0KCJpbWFnZS9zdmcreG1s
Iik7Ci19Ci0KLUNhY2hlZFNWR0RvY3VtZW50Ojp+Q2FjaGVkU1ZHRG9jdW1lbnQoKQotewotfQot
Ci12b2lkIENhY2hlZFNWR0RvY3VtZW50OjpzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmIGNocykK
LXsKLSAgICBtX2RlY29kZXItPnNldEVuY29kaW5nKGNocywgVGV4dFJlc291cmNlRGVjb2Rlcjo6
RW5jb2RpbmdGcm9tSFRUUEhlYWRlcik7Ci19Ci0KLVN0cmluZyBDYWNoZWRTVkdEb2N1bWVudDo6
ZW5jb2RpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtX2RlY29kZXItPmVuY29kaW5nKCkubmFt
ZSgpOwotfQotCi12b2lkIENhY2hlZFNWR0RvY3VtZW50OjpmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1
ZmZlciogZGF0YSkKLXsKLSAgICBpZiAoZGF0YSkgewotICAgICAgICAvLyBXZSBkb24ndCBuZWVk
IHRvIGNyZWF0ZSBhIG5ldyBmcmFtZSBiZWNhdXNlIHRoZSBuZXcgZG9jdW1lbnQgYmVsb25ncyB0
byB0aGUgcGFyZW50IFVzZUVsZW1lbnQuCi0gICAgICAgIG1fZG9jdW1lbnQgPSBTVkdEb2N1bWVu
dDo6Y3JlYXRlKG51bGxwdHIsIHJlc3BvbnNlKCkudXJsKCkpOwotICAgICAgICBtX2RvY3VtZW50
LT5zZXRDb250ZW50KG1fZGVjb2Rlci0+ZGVjb2RlQW5kRmx1c2goZGF0YS0+ZGF0YSgpLCBkYXRh
LT5zaXplKCkpKTsKLSAgICB9Ci0gICAgQ2FjaGVkUmVzb3VyY2U6OmZpbmlzaExvYWRpbmcoZGF0
YSk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRTVkdEb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0Rv
Y3VtZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNjQyZmUzZTQzNWZiYzdm
MTE5M2JkZmI1NTk2YjM1ZjY5ZDk5YmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0RvY3Vt
ZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAo
QykgMjAxMCBSb2IgQnVpcyA8cndsYnVpc0BnbWFpbC5jb20+Ci0gICAgQ29weXJpZ2h0IChDKSAy
MDExIENvc21pbiBUcnV0YSA8Y3RydXRhQGdtYWlsLmNvbT4KLSAgICBDb3B5cmlnaHQgKEMpIDIw
MTIgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTIgUmVuYXRhIEhv
ZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVmIENhY2hlZFNWR0RvY3VtZW50X2gK
LSNkZWZpbmUgQ2FjaGVkU1ZHRG9jdW1lbnRfaAotCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2Uu
aCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIlNWR0RvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIENhY2hlZFNWR0RvY3VtZW50IGZpbmFsIDogcHVibGljIENhY2hlZFJl
c291cmNlIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBDYWNoZWRTVkdEb2N1bWVudChjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLCBTZXNzaW9uSUQpOwotICAgIHZpcnR1YWwgfkNhY2hlZFNWR0RvY3Vt
ZW50KCk7Ci0KLSAgICBTVkdEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2Rv
Y3VtZW50LmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtYXlUcnlSZXBsYWNlRW5jb2Rl
ZERhdGEoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdm9pZCBzZXRFbmNv
ZGluZyhjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICBTdHJpbmcgZW5jb2RpbmcoKSBjb25z
dCBvdmVycmlkZTsKLSAgICBjb25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKiB0ZXh0UmVzb3VyY2VE
ZWNvZGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZWNvZGVyLmdldCgpOyB9Ci0gICAg
dm9pZCBmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1ZmZlciopIG92ZXJyaWRlOwotCi0gICAgUmVmUHRy
PFNWR0RvY3VtZW50PiBtX2RvY3VtZW50OwotICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVy
PiBtX2RlY29kZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfQ0FDSEVEX1JFU09VUkNFKENhY2hlZFNWR0RvY3VtZW50LCBDYWNoZWRSZXNv
dXJjZTo6U1ZHRG9jdW1lbnRSZXNvdXJjZSkKLQotI2VuZGlmIC8vIENhY2hlZFNWR0RvY3VtZW50
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdEb2N1
bWVudENsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0RvY3Vt
ZW50Q2xpZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMmVhZDBiODA2YzM4
MDVkMWUzNzRmZmRhZjA3ZmVlMjdjNDlmMjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0Rv
Y3VtZW50Q2xpZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKgotICAgIENv
cHlyaWdodCAoQykgMjAxMCBSb2IgQnVpcyA8cndsYnVpc0BnbWFpbC5jb20+Ci0gICAgQ29weXJp
Z2h0IChDKSAyMDExIENvc21pbiBUcnV0YSA8Y3RydXRhQGdtYWlsLmNvbT4KLSAgICBDb3B5cmln
aHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTIg
UmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQot
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVmIENhY2hlZFNWR0Rv
Y3VtZW50Q2xpZW50X2gKLSNkZWZpbmUgQ2FjaGVkU1ZHRG9jdW1lbnRDbGllbnRfaAotCi0jaW5j
bHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBDYWNoZWRTVkdEb2N1bWVudENsaWVudCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVu
dCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+Q2FjaGVkU1ZHRG9jdW1lbnRDbGllbnQoKSB7IH0K
LSAgICBzdGF0aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnRUeXBlIGV4cGVjdGVkVHlwZSgpIHsgcmV0
dXJuIFNWR0RvY3VtZW50VHlwZTsgfQotICAgIENhY2hlZFJlc291cmNlQ2xpZW50VHlwZSByZXNv
dXJjZUNsaWVudFR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBleHBlY3RlZFR5cGUoKTsg
fQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQ2FjaGVkU1ZHRG9j
dW1lbnRDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDQ3OTBmNzM0OTM4OTZlZTNiNTI1MjFkMmE3NWU4ODc2ZGQ5YzU4MDIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2Fj
aGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuaCIKLQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFu
ZGxlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKLSNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0
aWF0b3JzLmgiCi0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnQuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1DYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZTo6Q2FjaGVkU1ZHRG9jdW1lbnRS
ZWZlcmVuY2UoY29uc3QgU3RyaW5nJiB1cmwpCi0gICAgOiBtX3VybCh1cmwpCi0gICAgLCBtX2Rv
Y3VtZW50KG51bGxwdHIpCi0gICAgLCBtX2xvYWRSZXF1ZXN0ZWQoZmFsc2UpCi17Ci19Ci0KLUNh
Y2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlOjp+Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UoKQot
ewotICAgIGlmIChtX2RvY3VtZW50KQotICAgICAgICBtX2RvY3VtZW50LT5yZW1vdmVDbGllbnQo
dGhpcyk7Ci19Ci0KLXZvaWQgQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2U6OmxvYWQoQ2FjaGVk
UmVzb3VyY2VMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRp
b25zKQotewotICAgIGlmIChtX2xvYWRSZXF1ZXN0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IENhY2hlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KFJlc291cmNlUmVxdWVzdChsb2FkZXIuZG9j
dW1lbnQoKS0+Y29tcGxldGVVUkwobV91cmwpKSwgb3B0aW9ucyk7Ci0gICAgcmVxdWVzdC5zZXRJ
bml0aWF0b3IoY2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycygpLmNzcyk7Ci0gICAgbV9k
b2N1bWVudCA9IGxvYWRlci5yZXF1ZXN0U1ZHRG9jdW1lbnQocmVxdWVzdCk7Ci0gICAgaWYgKG1f
ZG9jdW1lbnQpCi0gICAgICAgIG1fZG9jdW1lbnQtPmFkZENsaWVudCh0aGlzKTsKLQotICAgIG1f
bG9hZFJlcXVlc3RlZCA9IHRydWU7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGY5ODBhMTNmNjEyODkxMzU4ZmQ2YjM2MGJhYjY5ZDFmZTQxNjA4
OWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDYWNoZWRTVkdEb2N1bWVu
dFJlZmVyZW5jZV9oCi0jZGVmaW5lIENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlX2gKLQotI2lu
Y2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1l
bnRDbGllbnQuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBDYWNoZWRTVkdEb2N1bWVudDsKLWNsYXNzIENhY2hlZFJlc291
cmNlTG9hZGVyOwotc3RydWN0IFJlc291cmNlTG9hZGVyT3B0aW9uczsKLQotY2xhc3MgQ2FjaGVk
U1ZHRG9jdW1lbnRSZWZlcmVuY2UgOiBwdWJsaWMgQ2FjaGVkU1ZHRG9jdW1lbnRDbGllbnQgewot
cHVibGljOgotICAgIENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKGNvbnN0IFN0cmluZyYpOwot
Ci0gICAgdmlydHVhbCB+Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UoKTsKLQotICAgIHZvaWQg
bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciYsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYp
OwotICAgIGJvb2wgbG9hZFJlcXVlc3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZFJlcXVlc3Rl
ZDsgfQotCi0gICAgQ2FjaGVkU1ZHRG9jdW1lbnQqIGRvY3VtZW50KCkgeyByZXR1cm4gbV9kb2N1
bWVudC5nZXQoKTsgfQotCi1wcml2YXRlOgotICAgIFN0cmluZyBtX3VybDsKLSAgICBDYWNoZWRS
ZXNvdXJjZUhhbmRsZTxDYWNoZWRTVkdEb2N1bWVudD4gbV9kb2N1bWVudDsKLSAgICBib29sIG1f
bG9hZFJlcXVlc3RlZDsKLX07Ci0KLX07Ci0KLSNlbmRpZiAvLyBDYWNoZWRTVkdEb2N1bWVudFJl
ZmVyZW5jZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
U1ZHRm9udC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczYjFiNmJhNDkyZGMwNThlZWRlOTcy
Njc2MThmOTc0ODZiZGMyNjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0ZvbnQuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNhY2hlZFNW
R0ZvbnQuaCIKLQotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0KLSNpbmNsdWRlICJGb250RGVzY3Jp
cHRpb24uaCIKLSNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCi0jaW5jbHVkZSAiTm9FdmVu
dERpc3BhdGNoQXNzZXJ0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRl
ICJTVkdGb250RWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIK
LSNpbmNsdWRlICJUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJT
VkdUb09URkZvbnRDb252ZXJzaW9uLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ2FjaGVk
U1ZHRm9udDo6Q2FjaGVkU1ZHRm9udChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVx
dWVzdCwgU2Vzc2lvbklEIHNlc3Npb25JRCkKLSAgICA6IENhY2hlZEZvbnQocmVzb3VyY2VSZXF1
ZXN0LCBzZXNzaW9uSUQsIFNWR0ZvbnRSZXNvdXJjZSkKLSAgICAsIG1fZXh0ZXJuYWxTVkdGb250
RWxlbWVudChudWxscHRyKQotewotfQotCi1SZWZQdHI8Rm9udD4gQ2FjaGVkU1ZHRm9udDo6Y3Jl
YXRlRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRv
bWljU3RyaW5nJiByZW1vdGVVUkksIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJ
dGFsaWMsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MmIGZvbnRGYWNlRmVhdHVyZXMsIGNvbnN0
IEZvbnRWYXJpYW50U2V0dGluZ3MmIGZvbnRGYWNlVmFyaWFudFNldHRpbmdzKQotewotICAgIGlm
IChmaXJzdEZvbnRGYWNlKHJlbW90ZVVSSSkpCi0gICAgICAgIHJldHVybiBDYWNoZWRGb250Ojpj
cmVhdGVGb250KGZvbnREZXNjcmlwdGlvbiwgcmVtb3RlVVJJLCBzeW50aGV0aWNCb2xkLCBzeW50
aGV0aWNJdGFsaWMsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlVmFyaWFudFNldHRpbmdzKTsK
LSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotRm9udFBsYXRmb3JtRGF0YSBDYWNoZWRTVkdGb250
OjpwbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgY29uc3QgRm9udEZlYXR1cmVTZXR0
aW5ncyYgZm9udEZhY2VGZWF0dXJlcywgY29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYgZm9udEZh
Y2VWYXJpYW50U2V0dGluZ3MpCi17Ci0gICAgaWYgKG1fZXh0ZXJuYWxTVkdEb2N1bWVudCkKLSAg
ICAgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4
ZWxTaXplKCksIGJvbGQsIGl0YWxpYyk7Ci0gICAgcmV0dXJuIENhY2hlZEZvbnQ6OnBsYXRmb3Jt
RGF0YUZyb21DdXN0b21EYXRhKGZvbnREZXNjcmlwdGlvbiwgYm9sZCwgaXRhbGljLCBmb250RmFj
ZUZlYXR1cmVzLCBmb250RmFjZVZhcmlhbnRTZXR0aW5ncyk7Ci19Ci0KLWJvb2wgQ2FjaGVkU1ZH
Rm9udDo6ZW5zdXJlQ3VzdG9tRm9udERhdGEoY29uc3QgQXRvbWljU3RyaW5nJiByZW1vdGVVUkkp
Ci17Ci0gICAgaWYgKCFtX2V4dGVybmFsU1ZHRG9jdW1lbnQgJiYgIWVycm9yT2NjdXJyZWQoKSAm
JiAhaXNMb2FkaW5nKCkgJiYgbV9kYXRhKSB7Ci0gICAgICAgIC8vIFdlIG1heSBnZXQgaGVyZSBk
dXJpbmcgcmVuZGVyIHRyZWUgdXBkYXRlcyB3aGVuIGV2ZW50cyBhcmUgZm9yYmlkZGVuLgotICAg
ICAgICAvLyBGcmFtZWxlc3MgZG9jdW1lbnQgY2FuJ3QgcnVuIHNjcmlwdHMgb3IgY2FsbCBiYWNr
IHRvIHRoZSBjbGllbnQgc28gdGhpcyBpcyBzYWZlLgotICAgICAgICBhdXRvIGNvdW50ID0gTm9F
dmVudERpc3BhdGNoQXNzZXJ0aW9uOjpkcm9wVGVtcG9yYXJpbHkoKTsKLQotICAgICAgICBtX2V4
dGVybmFsU1ZHRG9jdW1lbnQgPSBTVkdEb2N1bWVudDo6Y3JlYXRlKG51bGxwdHIsIFVSTCgpKTsK
LSAgICAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGRlY29kZXIgPSBUZXh0UmVzb3Vy
Y2VEZWNvZGVyOjpjcmVhdGUoImFwcGxpY2F0aW9uL3htbCIpOwotICAgICAgICBtX2V4dGVybmFs
U1ZHRG9jdW1lbnQtPnNldENvbnRlbnQoZGVjb2Rlci0+ZGVjb2RlQW5kRmx1c2gobV9kYXRhLT5k
YXRhKCksIG1fZGF0YS0+c2l6ZSgpKSk7Ci0KLSAgICAgICAgTm9FdmVudERpc3BhdGNoQXNzZXJ0
aW9uOjpyZXN0b3JlRHJvcHBlZChjb3VudCk7Ci0KLSAgICAgICAgaWYgKGRlY29kZXItPnNhd0Vy
cm9yKCkpCi0gICAgICAgICAgICBtX2V4dGVybmFsU1ZHRG9jdW1lbnQgPSBudWxscHRyOwotICAg
ICAgICBpZiAobV9leHRlcm5hbFNWR0RvY3VtZW50KQotICAgICAgICAgICAgbWF5YmVJbml0aWFs
aXplRXh0ZXJuYWxTVkdGb250RWxlbWVudChyZW1vdGVVUkkpOwotICAgICAgICBpZiAoIW1fZXh0
ZXJuYWxTVkdGb250RWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aWYgKGF1dG8gY29udmVydGVkRm9udCA9IGNvbnZlcnRTVkdUb09URkZvbnQoKm1fZXh0ZXJuYWxT
VkdGb250RWxlbWVudCkpCi0gICAgICAgICAgICBtX2NvbnZlcnRlZEZvbnQgPSBTaGFyZWRCdWZm
ZXI6OmFkb3B0VmVjdG9yKGNvbnZlcnRlZEZvbnQudmFsdWUoKSk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgbV9leHRlcm5hbFNWR0RvY3VtZW50ID0gbnVsbHB0cjsKLSAgICAgICAgICAg
IG1fZXh0ZXJuYWxTVkdGb250RWxlbWVudCA9IG51bGxwdHI7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbV9leHRlcm5hbFNWR0RvY3Vt
ZW50ICYmIENhY2hlZEZvbnQ6OmVuc3VyZUN1c3RvbUZvbnREYXRhKG1fY29udmVydGVkRm9udC5n
ZXQoKSk7Ci19Ci0KLVNWR0ZvbnRFbGVtZW50KiBDYWNoZWRTVkdGb250OjpnZXRTVkdGb250QnlJ
ZChjb25zdCBTdHJpbmcmIGZvbnROYW1lKSBjb25zdAotewotICAgIEFTU0VSVChtX2V4dGVybmFs
U1ZHRG9jdW1lbnQpOwotICAgIGF1dG8gZWxlbWVudHMgPSBkZXNjZW5kYW50c09mVHlwZTxTVkdG
b250RWxlbWVudD4oKm1fZXh0ZXJuYWxTVkdEb2N1bWVudCk7Ci0KLSAgICBpZiAoZm9udE5hbWUu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZWxlbWVudHMuZmlyc3QoKTsKLQotICAgIGZvciAo
YXV0byYgZWxlbWVudCA6IGVsZW1lbnRzKSB7Ci0gICAgICAgIGlmIChlbGVtZW50LmdldElkQXR0
cmlidXRlKCkgPT0gZm9udE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gJmVsZW1lbnQ7Ci0gICAg
fQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1TVkdGb250RWxlbWVudCogQ2FjaGVkU1ZHRm9u
dDo6bWF5YmVJbml0aWFsaXplRXh0ZXJuYWxTVkdGb250RWxlbWVudChjb25zdCBBdG9taWNTdHJp
bmcmIHJlbW90ZVVSSSkKLXsKLSAgICBpZiAobV9leHRlcm5hbFNWR0ZvbnRFbGVtZW50KQotICAg
ICAgICByZXR1cm4gbV9leHRlcm5hbFNWR0ZvbnRFbGVtZW50OwotICAgIFN0cmluZyBmcmFnbWVu
dElkZW50aWZpZXI7Ci0gICAgc2l6ZV90IHN0YXJ0ID0gcmVtb3RlVVJJLmZpbmQoJyMnKTsKLSAg
ICBpZiAoc3RhcnQgIT0gbm90Rm91bmQpCi0gICAgICAgIGZyYWdtZW50SWRlbnRpZmllciA9IHJl
bW90ZVVSSS5zdHJpbmcoKS5zdWJzdHJpbmcoc3RhcnQgKyAxKTsKLSAgICBtX2V4dGVybmFsU1ZH
Rm9udEVsZW1lbnQgPSBnZXRTVkdGb250QnlJZChmcmFnbWVudElkZW50aWZpZXIpOwotICAgIHJl
dHVybiBtX2V4dGVybmFsU1ZHRm9udEVsZW1lbnQ7Ci19Ci0KLVNWR0ZvbnRGYWNlRWxlbWVudCog
Q2FjaGVkU1ZHRm9udDo6Zmlyc3RGb250RmFjZShjb25zdCBBdG9taWNTdHJpbmcmIHJlbW90ZVVS
SSkKLXsKLSAgICBpZiAoIW1heWJlSW5pdGlhbGl6ZUV4dGVybmFsU1ZHRm9udEVsZW1lbnQocmVt
b3RlVVJJKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoYXV0byogZmlyc3RG
b250RmFjZSA9IGNoaWxkcmVuT2ZUeXBlPFNWR0ZvbnRGYWNlRWxlbWVudD4oKm1fZXh0ZXJuYWxT
VkdGb250RWxlbWVudCkuZmlyc3QoKSkKLSAgICAgICAgcmV0dXJuIGZpcnN0Rm9udEZhY2U7Ci0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5oIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFNWR0ZvbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NjYxYmE1YzI1MzdjNzI0YmYyMmM4NDA0MzcxNDVlNDk4Mjc1ZDczYi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkU1ZHRm9udC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIENh
Y2hlZFNWR0ZvbnRfaAotI2RlZmluZSBDYWNoZWRTVkdGb250X2gKLQotI2lmIEVOQUJMRShTVkdf
Rk9OVFMpCi0KLSNpbmNsdWRlICJDYWNoZWRGb250LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgU1ZHRm9udEZhY2VFbGVtZW50OwotCi1jbGFzcyBDYWNoZWRTVkdGb250IGZpbmFs
IDogcHVibGljIENhY2hlZEZvbnQgewotcHVibGljOgotICAgIENhY2hlZFNWR0ZvbnQoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgU2Vzc2lvbklEKTsKLQotICAgIGJvb2wgZW5zdXJlQ3VzdG9tRm9u
dERhdGEoY29uc3QgQXRvbWljU3RyaW5nJiByZW1vdGVVUkkpIG92ZXJyaWRlOwotICAgIAotICAg
IFJlZlB0cjxGb250PiBjcmVhdGVGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0
b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGlj
SXRhbGljLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzJiwgY29uc3QgRm9udFZhcmlhbnRTZXR0
aW5ncyYpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIEZvbnRQbGF0Zm9ybURhdGEgcGxhdGZv
cm1EYXRhRnJvbUN1c3RvbURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBib2xkLCBi
b29sIGl0YWxpYywgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyYsIGNvbnN0IEZvbnRWYXJpYW50
U2V0dGluZ3MmKTsKLQotICAgIFNWR0ZvbnRFbGVtZW50KiBnZXRTVkdGb250QnlJZChjb25zdCBT
dHJpbmcmKSBjb25zdDsKLQotICAgIFNWR0ZvbnRFbGVtZW50KiBtYXliZUluaXRpYWxpemVFeHRl
cm5hbFNWR0ZvbnRFbGVtZW50KGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJKTsKLSAgICBT
VkdGb250RmFjZUVsZW1lbnQqIGZpcnN0Rm9udEZhY2UoY29uc3QgQXRvbWljU3RyaW5nJiByZW1v
dGVVUkkpOwotCi0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9jb252ZXJ0ZWRGb250OwotICAg
IFJlZlB0cjxTVkdEb2N1bWVudD4gbV9leHRlcm5hbFNWR0RvY3VtZW50OwotICAgIFNWR0ZvbnRF
bGVtZW50KiBtX2V4dGVybmFsU1ZHRm9udEVsZW1lbnQ7Ci19OwotCi19Ci0KLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfQ0FDSEVEX1JFU09VUkNFKENhY2hlZFNWR0ZvbnQsIENhY2hlZFJlc291cmNl
OjpTVkdGb250UmVzb3VyY2UpCi0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDc0NTg0YzllNjQ2ODU0M2M4MTc3MWQ5MDFlYWIyZjdlZjhlZjY0MzUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZFNjcmlwdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAot
LyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5k
ZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
Ci0gICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykK
LSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5j
b20pCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFsbCBm
dW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxlIHNoZWV0cyBhbmQg
aHRtbAotICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hlIGZvciB0
aGVzZSBvYmplY3RzLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNhY2hl
ZFNjcmlwdC5oIgotCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKLSNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIgotI2luY2x1ZGUgIkhUVFBIZWFkZXJOYW1l
cy5oIgotI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3Ry
eS5oIgotI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCi0jaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0
aW9uQ2hlY2tzLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSAiVGV4dFJl
c291cmNlRGVjb2Rlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNhY2hlZFNjcmlwdDo6
Q2FjaGVkU2NyaXB0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25z
dCBTdHJpbmcmIGNoYXJzZXQsIFNlc3Npb25JRCBzZXNzaW9uSUQpCi0gICAgOiBDYWNoZWRSZXNv
dXJjZShyZXNvdXJjZVJlcXVlc3QsIFNjcmlwdCwgc2Vzc2lvbklEKQotICAgICwgbV9kZWNvZGVy
KFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZShBU0NJSUxpdGVyYWwoImFwcGxpY2F0aW9uL2ph
dmFzY3JpcHQiKSwgY2hhcnNldCkpCi17Ci0gICAgLy8gSXQncyBqYXZhc2NyaXB0IHdlIHdhbnQu
Ci0gICAgLy8gQnV0IHNvbWUgd2Vic2l0ZXMgdGhpbmsgdGhlaXIgc2NyaXB0cyBhcmUgPHNvbWUg
d3JvbmcgbWltZXR5cGUgaGVyZT4KLSAgICAvLyBhbmQgcmVmdXNlIHRvIHNlcnZlIHRoZW0gaWYg
d2Ugb25seSBhY2NlcHQgYXBwbGljYXRpb24veC1qYXZhc2NyaXB0LgotICAgIHNldEFjY2VwdCgi
Ki8qIik7Ci19Ci0KLUNhY2hlZFNjcmlwdDo6fkNhY2hlZFNjcmlwdCgpCi17Ci19Ci0KLXZvaWQg
Q2FjaGVkU2NyaXB0OjpzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmIGNocykKLXsKLSAgICBtX2Rl
Y29kZXItPnNldEVuY29kaW5nKGNocywgVGV4dFJlc291cmNlRGVjb2Rlcjo6RW5jb2RpbmdGcm9t
SFRUUEhlYWRlcik7Ci19Ci0KLVN0cmluZyBDYWNoZWRTY3JpcHQ6OmVuY29kaW5nKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9kZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKTsKLX0KLQotU3RyaW5n
IENhY2hlZFNjcmlwdDo6bWltZVR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBleHRyYWN0TUlN
RVR5cGVGcm9tTWVkaWFUeXBlKG1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJO
YW1lOjpDb250ZW50VHlwZSkpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7Ci19Ci0KLVN0cmlu
Z1ZpZXcgQ2FjaGVkU2NyaXB0OjpzY3JpcHQoKQotewotICAgIGlmICghbV9kYXRhKQotICAgICAg
ICByZXR1cm4geyB9OwotCi0gICAgaWYgKG1fZGVjb2RpbmdTdGF0ZSA9PSBOZXZlckRlY29kZWQK
LSAgICAgICAgJiYgVGV4dEVuY29kaW5nKGVuY29kaW5nKCkpLmlzQnl0ZUJhc2VkRW5jb2Rpbmco
KQotICAgICAgICAmJiBtX2RhdGEtPnNpemUoKQotICAgICAgICAmJiBjaGFyYWN0ZXJzQXJlQWxs
QVNDSUkocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KG1fZGF0YS0+ZGF0YSgpKSwgbV9k
YXRhLT5zaXplKCkpKSB7Ci0KLSAgICAgICAgbV9kZWNvZGluZ1N0YXRlID0gRGF0YUFuZERlY29k
ZWRTdHJpbmdIYXZlU2FtZUJ5dGVzOwotCi0gICAgICAgIC8vIElmIHRoZSBlbmNvZGVkIGFuZCBk
ZWNvZGVkIGRhdGEgYXJlIHRoZSBzYW1lLCB0aGVyZSBpcyBubyBkZWNvZGVkIGRhdGEgY29zdCEK
LSAgICAgICAgc2V0RGVjb2RlZFNpemUoMCk7Ci0gICAgICAgIG1fZGVjb2RlZERhdGFEZWxldGlv
blRpbWVyLnN0b3AoKTsKLQotICAgICAgICBtX3NjcmlwdEhhc2ggPSBTdHJpbmdIYXNoZXI6OmNv
bXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPiht
X2RhdGEtPmRhdGEoKSksIG1fZGF0YS0+c2l6ZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAobV9kZWNv
ZGluZ1N0YXRlID09IERhdGFBbmREZWNvZGVkU3RyaW5nSGF2ZVNhbWVCeXRlcykKLSAgICAgICAg
cmV0dXJuIHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KG1fZGF0YS0+ZGF0YSgpKSwg
bV9kYXRhLT5zaXplKCkgfTsKLQotICAgIGlmICghbV9zY3JpcHQpIHsKLSAgICAgICAgbV9zY3Jp
cHQgPSBtX2RlY29kZXItPmRlY29kZUFuZEZsdXNoKG1fZGF0YS0+ZGF0YSgpLCBlbmNvZGVkU2l6
ZSgpKTsKLSAgICAgICAgQVNTRVJUKCFtX3NjcmlwdEhhc2ggfHwgbV9zY3JpcHRIYXNoID09IG1f
c2NyaXB0LmltcGwoKS0+aGFzaCgpKTsKLSAgICAgICAgaWYgKG1fZGVjb2RpbmdTdGF0ZSA9PSBO
ZXZlckRlY29kZWQpCi0gICAgICAgICAgICBtX3NjcmlwdEhhc2ggPSBtX3NjcmlwdC5pbXBsKCkt
Pmhhc2goKTsKLSAgICAgICAgbV9kZWNvZGluZ1N0YXRlID0gRGF0YUFuZERlY29kZWRTdHJpbmdI
YXZlRGlmZmVyZW50Qnl0ZXM7Ci0gICAgICAgIHNldERlY29kZWRTaXplKG1fc2NyaXB0LnNpemVJ
bkJ5dGVzKCkpOwotICAgIH0KLQotICAgIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyLnJlc3Rh
cnQoKTsKLSAgICByZXR1cm4gbV9zY3JpcHQ7Ci19Ci0KLXVuc2lnbmVkIENhY2hlZFNjcmlwdDo6
c2NyaXB0SGFzaCgpCi17Ci0gICAgaWYgKG1fZGVjb2RpbmdTdGF0ZSA9PSBOZXZlckRlY29kZWQp
Ci0gICAgICAgIHNjcmlwdCgpOwotICAgIHJldHVybiBtX3NjcmlwdEhhc2g7Ci19Ci0KLXZvaWQg
Q2FjaGVkU2NyaXB0OjpmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1ZmZlciogZGF0YSkKLXsKLSAgICBt
X2RhdGEgPSBkYXRhOwotICAgIHNldEVuY29kZWRTaXplKGRhdGEgPyBkYXRhLT5zaXplKCkgOiAw
KTsKLSAgICBDYWNoZWRSZXNvdXJjZTo6ZmluaXNoTG9hZGluZyhkYXRhKTsKLX0KLQotdm9pZCBD
YWNoZWRTY3JpcHQ6OmRlc3Ryb3lEZWNvZGVkRGF0YSgpCi17Ci0gICAgbV9zY3JpcHQgPSBTdHJp
bmcoKTsKLSAgICBzZXREZWNvZGVkU2l6ZSgwKTsKLX0KLQotI2lmIEVOQUJMRShOT1NOSUZGKQot
Ym9vbCBDYWNoZWRTY3JpcHQ6Om1pbWVUeXBlQWxsb3dlZEJ5Tm9zbmlmZigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHBhcnNlQ29udGVudFR5cGVPcHRpb25zSGVhZGVyKG1fcmVzcG9uc2UuaHR0cEhl
YWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpYQ29udGVudFR5cGVPcHRpb25zKSkgIT0gQ29udGVu
dFR5cGVPcHRpb25zTm9zbmlmZiB8fCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEphdmFT
Y3JpcHRNSU1FVHlwZShtaW1lVHlwZSgpKTsKLX0KLSNlbmRpZgotCi1ib29sIENhY2hlZFNjcmlw
dDo6c2hvdWxkSWdub3JlSFRUUFN0YXR1c0NvZGVFcnJvcnMoKSBjb25zdAotewotI2lmIFBMQVRG
T1JNKE1BQykKLSAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVt
LzEzOTE2MjkxPgotICAgIC8vIFJFR1JFU1NJT04gKHIxMTk3NTkpOiBBZG9iZSBGbGFzaCBQbGF5
ZXIgInNtYWxsZXIiIGluc3RhbGxlciByZWxpZXMgb24gdGhlIGluY29ycmVjdCBmaXJpbmcKLSAg
ICAvLyBvZiBhIGxvYWQgZXZlbnQgYW5kIG5lZWRzIGFuIGFwcC1zcGVjaWZpYyBoYWNrIGZvciBj
b21wYXRpYmlsaXR5LgotICAgIC8vIFRoZSBpbnN0YWxsZXIgaW4gcXVlc3Rpb24gdHJpZXMgdG8g
bG9hZCAuanMgZmlsZSB0aGF0IGRvZXNuJ3QgZXhpc3QsIGNhdXNpbmcgdGhlIHNlcnZlciB0bwot
ICAgIC8vIHJldHVybiBhIDQwNCByZXNwb25zZS4gTm9ybWFsbHksIHRoaXMgd291bGQgdHJpZ2dl
ciBhbiBlcnJvciBldmVudCB0byBiZSBkaXNwYXRjaGVkLCBidXQgdGhlCi0gICAgLy8gaW5zdGFs
bGVyIGV4cGVjdHMgYSBsb2FkIGV2ZW50IGluc3RlYWQgc28gd2Ugd29yayBhcm91bmQgaXQgaGVy
ZS4KLSAgICBpZiAoTWFjQXBwbGljYXRpb246OmlzU29saWRTdGF0ZU5ldHdvcmtzRG93bmxvYWRl
cigpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIENhY2hlZFJl
c291cmNlOjpzaG91bGRJZ25vcmVIVFRQU3RhdHVzQ29kZUVycm9ycygpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkU2NyaXB0LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiZjFkMTQxNmM1MjBmOTE0NzcxZGI5
MzA1ZjI1ODM3YmY0Y2IxZWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFy
cyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGly
ayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVl
bCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQotICAgIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0K
LSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotCi0g
ICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRp
bmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKLSAgICBwYWdlcyBmcm9tIHRoZSB3ZWIu
IEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KLSovCi0KLSNpZm5kZWYg
Q2FjaGVkU2NyaXB0X2gKLSNkZWZpbmUgQ2FjaGVkU2NyaXB0X2gKLQotI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgVGV4dFJlc291cmNl
RGVjb2RlcjsKLQotY2xhc3MgQ2FjaGVkU2NyaXB0IGZpbmFsIDogcHVibGljIENhY2hlZFJlc291
cmNlIHsKLXB1YmxpYzoKLSAgICBDYWNoZWRTY3JpcHQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgU3RyaW5nJiBjaGFyc2V0LCBTZXNzaW9uSUQpOwotICAgIHZpcnR1YWwgfkNhY2hlZFNj
cmlwdCgpOwotCi0gICAgU3RyaW5nVmlldyBzY3JpcHQoKTsKLSAgICB1bnNpZ25lZCBzY3JpcHRI
YXNoKCk7Ci0KLSAgICBTdHJpbmcgbWltZVR5cGUoKSBjb25zdDsKLQotI2lmIEVOQUJMRShOT1NO
SUZGKQotICAgIGJvb2wgbWltZVR5cGVBbGxvd2VkQnlOb3NuaWZmKCkgY29uc3Q7Ci0jZW5kaWYK
LQotcHJpdmF0ZToKLSAgICBib29sIG1heVRyeVJlcGxhY2VFbmNvZGVkRGF0YSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIGJvb2wgc2hvdWxkSWdub3JlSFRUUFN0YXR1
c0NvZGVFcnJvcnMoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0RW5jb2RpbmcoY29u
c3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIGVuY29kaW5nKCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogdGV4dFJlc291cmNlRGVjb2Rlcigp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVjb2Rlci5nZXQoKTsgfQotICAgIHZvaWQgZmlu
aXNoTG9hZGluZyhTaGFyZWRCdWZmZXIqKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGVzdHJveURl
Y29kZWREYXRhKCkgb3ZlcnJpZGU7Ci0KLSAgICBTdHJpbmcgbV9zY3JpcHQ7Ci0gICAgdW5zaWdu
ZWQgbV9zY3JpcHRIYXNoIHsgMCB9OwotCi0gICAgZW51bSBEZWNvZGluZ1N0YXRlIHsgTmV2ZXJE
ZWNvZGVkLCBEYXRhQW5kRGVjb2RlZFN0cmluZ0hhdmVTYW1lQnl0ZXMsIERhdGFBbmREZWNvZGVk
U3RyaW5nSGF2ZURpZmZlcmVudEJ5dGVzIH07Ci0gICAgRGVjb2RpbmdTdGF0ZSBtX2RlY29kaW5n
U3RhdGUgeyBOZXZlckRlY29kZWQgfTsKLQotICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVy
PiBtX2RlY29kZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfQ0FDSEVEX1JFU09VUkNFKENhY2hlZFNjcmlwdCwgQ2FjaGVkUmVzb3VyY2U6
OlNjcmlwdCkKLQotI2VuZGlmIC8vIENhY2hlZFNjcmlwdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU3R5bGVTaGVldENsaWVudC5oIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFN0eWxlU2hlZXRDbGllbnQuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMmFhMjkyYTcxZGRkZWM5YTRiNTQ5MmNmMjZlNGFmOTllZmUxMmUy
OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU3R5bGVTaGVldENsaWVudC5oCisrKyAvZGV2L251
bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAo
a25vbGxAbXBpLWhkLm1wZy5kZSkKLSBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxt
dWVsbGVyQGtkZS5vcmc+Ci0gQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAKLSBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIAotIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
Ci0gVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRp
bmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKLSBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0
IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KLSAqLwotCi0jaWZuZGVmIENh
Y2hlZFN0eWxlU2hlZXRDbGllbnRfaAotI2RlZmluZSBDYWNoZWRTdHlsZVNoZWV0Q2xpZW50X2gK
LQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCi0jaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDYWNoZWRDU1NTdHlsZVNoZWV0
OwotY2xhc3MgVVJMOwotCi1jbGFzcyBDYWNoZWRTdHlsZVNoZWV0Q2xpZW50IDogcHVibGljIENh
Y2hlZFJlc291cmNlQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5DYWNoZWRTdHlsZVNo
ZWV0Q2xpZW50KCkgeyB9Ci0gICAgc3RhdGljIENhY2hlZFJlc291cmNlQ2xpZW50VHlwZSBleHBl
Y3RlZFR5cGUoKSB7IHJldHVybiBTdHlsZVNoZWV0VHlwZTsgfQotICAgIENhY2hlZFJlc291cmNl
Q2xpZW50VHlwZSByZXNvdXJjZUNsaWVudFR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBl
eHBlY3RlZFR5cGUoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRDU1NTdHlsZVNoZWV0KGNvbnN0
IFN0cmluZyYgLyogaHJlZiAqLywgY29uc3QgVVJMJiAvKiBiYXNlVVJMICovLCBjb25zdCBTdHJp
bmcmIC8qIGNoYXJzZXQgKi8sIGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQqKSB7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgc2V0WFNMU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIC8qIGhyZWYgKi8sIGNv
bnN0IFVSTCYgLyogYmFzZVVSTCAqLywgY29uc3QgU3RyaW5nJiAvKiBzaGVldCAqLykgeyB9Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBDYWNoZWRTdHlsZVNoZWV0
Q2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRU
ZXh0VHJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFRleHRUcmFj
ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1Y2I0YWU4MjRhMzAzODg1NjU4
YmI4Njk3MGZlZTc4OGU5ZDk0ZjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFRleHRUcmFjay5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotCi0jaW5jbHVkZSAiQ2FjaGVk
VGV4dFRyYWNrLmgiCi0KLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgotI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJUZXh0UmVz
b3VyY2VEZWNvZGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ2FjaGVkVGV4dFRyYWNr
OjpDYWNoZWRUZXh0VHJhY2soY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3Qs
IFNlc3Npb25JRCBzZXNzaW9uSUQpCi0gICAgOiBDYWNoZWRSZXNvdXJjZShyZXNvdXJjZVJlcXVl
c3QsIFRleHRUcmFja1Jlc291cmNlLCBzZXNzaW9uSUQpCi17Ci19Ci0KLXZvaWQgQ2FjaGVkVGV4
dFRyYWNrOjp1cGRhdGVEYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSkKLXsKLSAgICBBU1NFUlQoZGF0
YUJ1ZmZlcmluZ1BvbGljeSgpID09IEJ1ZmZlckRhdGEpOwotICAgIG1fZGF0YSA9IGRhdGE7Ci0g
ICAgc2V0RW5jb2RlZFNpemUoZGF0YSA/IGRhdGEtPnNpemUoKSA6IDApOwotCi0gICAgQ2FjaGVk
UmVzb3VyY2VDbGllbnRXYWxrZXI8Q2FjaGVkUmVzb3VyY2VDbGllbnQ+IHdhbGtlcihtX2NsaWVu
dHMpOwotICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50ID0gd2Fsa2VyLm5l
eHQoKSkKLSAgICAgICAgY2xpZW50LT5kZXByZWNhdGVkRGlkUmVjZWl2ZUNhY2hlZFJlc291cmNl
KHRoaXMpOwotfQotCi12b2lkIENhY2hlZFRleHRUcmFjazo6YWRkRGF0YUJ1ZmZlcihTaGFyZWRC
dWZmZXImIGRhdGEpCi17Ci0gICAgdXBkYXRlRGF0YSgmZGF0YSk7Ci0gICAgQ2FjaGVkUmVzb3Vy
Y2U6OmFkZERhdGFCdWZmZXIoZGF0YSk7Ci19Ci0KLXZvaWQgQ2FjaGVkVGV4dFRyYWNrOjpmaW5p
c2hMb2FkaW5nKFNoYXJlZEJ1ZmZlciogZGF0YSkKLXsKLSAgICB1cGRhdGVEYXRhKGRhdGEpOwot
ICAgIENhY2hlZFJlc291cmNlOjpmaW5pc2hMb2FkaW5nKGRhdGEpOwotfQotCi19Ci0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFRleHRUcmFj
ay5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFRleHRUcmFjay5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGU1MzRkMzUwY2FlZDNmYTYzY2EwOTMwZmQ4MmJl
YWZlMjYwYTA2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRUZXh0VHJhY2suaAorKysgL2Rldi9u
dWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENhY2hlZFRleHRUcmFj
a19oCi0jZGVmaW5lIENhY2hlZFRleHRUcmFja19oCi0KLSNpZiBFTkFCTEUoVklERU9fVFJBQ0sp
Ci0KLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgotI2luY2x1ZGUgIlRleHRGbGFncy5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENhY2hlZFRleHRUcmFjayBmaW5hbCA6IHB1
YmxpYyBDYWNoZWRSZXNvdXJjZSB7Ci1wdWJsaWM6Ci0gICAgQ2FjaGVkVGV4dFRyYWNrKGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIFNlc3Npb25JRCk7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtYXlU
cnlSZXBsYWNlRW5jb2RlZERhdGEoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgdm9pZCBhZGREYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZmluaXNoTG9hZGluZyhTaGFyZWRCdWZmZXIqKSBvdmVycmlkZTsKLQotICAgIHZvaWQgdXBkYXRl
RGF0YShTaGFyZWRCdWZmZXIqKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19DQUNIRURfUkVTT1VSQ0UoQ2FjaGVkVGV4dFRyYWNrLCBDYWNo
ZWRSZXNvdXJjZTo6VGV4dFRyYWNrUmVzb3VyY2UpCi0KLSNlbmRpZiAvLyBFTkFCTEUoVklERU9f
VFJBQ0spCi0KLSNlbmRpZiAvLyBDYWNoZWRUZXh0VHJhY2tfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBmYmMxNGZmZjI2MDc4YzhkMjliNjhkMjJlOTI1ODBiNDVkNTNiMTQ5
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDkxICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwg
KGtub2xsQG1waS1oZC5tcGcuZGUpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxl
ciAobXVlbGxlckBrZGUub3JnKQotICAgIENvcHlyaWdodCAoQykgMjAwMiBXYWxkbyBCYXN0aWFu
IChiYXN0aWFuQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcg
KHNhbS53ZWluaWdAZ21haWwuY29tKQotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotCi0gICAgVGhpcyBj
bGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2Vz
LCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKLSAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBh
IG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KLSovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJDYWNoZWRYU0xTdHlsZVNoZWV0LmgiCi0KLSNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZUNsaWVudFdhbGtlci5oIgotI2luY2x1ZGUgIkNhY2hlZFN0eWxlU2hlZXRDbGllbnQu
aCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNv
ZGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIEVOQUJMRShYU0xUKQotCi1DYWNo
ZWRYU0xTdHlsZVNoZWV0OjpDYWNoZWRYU0xTdHlsZVNoZWV0KGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVzb3VyY2VSZXF1ZXN0LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQotICAgIDogQ2FjaGVkUmVz
b3VyY2UocmVzb3VyY2VSZXF1ZXN0LCBYU0xTdHlsZVNoZWV0LCBzZXNzaW9uSUQpCi0gICAgLCBt
X2RlY29kZXIoVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L3hzbCIpKQotewotICAg
IC8vIEl0J3MgWE1MIHdlIHdhbnQuCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFjY2VwdCBt
b3JlIGdlbmVyYWwgeG1sIGZvcm1hdHMgKi8qK3htbCwgaW1hZ2Uvc3ZnK3htbCBmb3IgZXhhbXBs
ZS4KLSAgICBzZXRBY2NlcHQoInRleHQveG1sLCBhcHBsaWNhdGlvbi94bWwsIGFwcGxpY2F0aW9u
L3hodG1sK3htbCwgdGV4dC94c2wsIGFwcGxpY2F0aW9uL3Jzcyt4bWwsIGFwcGxpY2F0aW9uL2F0
b20reG1sIik7Ci19Ci0KLUNhY2hlZFhTTFN0eWxlU2hlZXQ6On5DYWNoZWRYU0xTdHlsZVNoZWV0
KCkKLXsKLX0KLQotdm9pZCBDYWNoZWRYU0xTdHlsZVNoZWV0OjpkaWRBZGRDbGllbnQoQ2FjaGVk
UmVzb3VyY2VDbGllbnQqIGMpCi17ICAKLSAgICBBU1NFUlQoYy0+cmVzb3VyY2VDbGllbnRUeXBl
KCkgPT0gQ2FjaGVkU3R5bGVTaGVldENsaWVudDo6ZXhwZWN0ZWRUeXBlKCkpOwotICAgIGlmICgh
aXNMb2FkaW5nKCkpCi0gICAgICAgIHN0YXRpY19jYXN0PENhY2hlZFN0eWxlU2hlZXRDbGllbnQq
PihjKS0+c2V0WFNMU3R5bGVTaGVldChtX3Jlc291cmNlUmVxdWVzdC51cmwoKSwgbV9yZXNwb25z
ZS51cmwoKSwgbV9zaGVldCk7Ci19Ci0KLXZvaWQgQ2FjaGVkWFNMU3R5bGVTaGVldDo6c2V0RW5j
b2RpbmcoY29uc3QgU3RyaW5nJiBjaHMpCi17Ci0gICAgbV9kZWNvZGVyLT5zZXRFbmNvZGluZyhj
aHMsIFRleHRSZXNvdXJjZURlY29kZXI6OkVuY29kaW5nRnJvbUhUVFBIZWFkZXIpOwotfQotCi1T
dHJpbmcgQ2FjaGVkWFNMU3R5bGVTaGVldDo6ZW5jb2RpbmcoKSBjb25zdAotewotICAgIHJldHVy
biBtX2RlY29kZXItPmVuY29kaW5nKCkubmFtZSgpOwotfQotCi12b2lkIENhY2hlZFhTTFN0eWxl
U2hlZXQ6OmZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKiBkYXRhKQotewotICAgIG1fZGF0YSA9
IGRhdGE7Ci0gICAgc2V0RW5jb2RlZFNpemUoZGF0YSA/IGRhdGEtPnNpemUoKSA6IDApOwotICAg
IGlmIChkYXRhKQotICAgICAgICBtX3NoZWV0ID0gbV9kZWNvZGVyLT5kZWNvZGVBbmRGbHVzaChk
YXRhLT5kYXRhKCksIGVuY29kZWRTaXplKCkpOwotICAgIHNldExvYWRpbmcoZmFsc2UpOwotICAg
IGNoZWNrTm90aWZ5KCk7Ci19Ci0KLXZvaWQgQ2FjaGVkWFNMU3R5bGVTaGVldDo6Y2hlY2tOb3Rp
ZnkoKQotewotICAgIGlmIChpc0xvYWRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyPENhY2hlZFN0eWxlU2hlZXRDbGllbnQ+IHcobV9j
bGllbnRzKTsKLSAgICB3aGlsZSAoQ2FjaGVkU3R5bGVTaGVldENsaWVudCogYyA9IHcubmV4dCgp
KQotICAgICAgICBjLT5zZXRYU0xTdHlsZVNoZWV0KG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLCBt
X3Jlc3BvbnNlLnVybCgpLCBtX3NoZWV0KTsKLX0KLQotI2VuZGlmCi0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA4ZWNmZjQ1ZWY0ZGYxZjE5MTdiYjhjNDk0NWZmMmZhOWQ2Njhm
NTZkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmgKKysrIC9kZXYvbnVs
bApAQCAtMSw2MyArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xs
IChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxs
ZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5p
ZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSAgICBUaGlz
IGNsYXNzIHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFn
ZXMsIHN0eWxlIHNoZWV0cyBhbmQgaHRtbAotICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFz
IGEgbWVtb3J5IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgotKi8KLQotI2lmbmRlZiBDYWNoZWRY
U0xTdHlsZVNoZWV0X2gKLSNkZWZpbmUgQ2FjaGVkWFNMU3R5bGVTaGVldF9oCi0KLSNpZiBFTkFC
TEUoWFNMVCkKLQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsKLQotY2xhc3MgQ2FjaGVkWFNMU3R5
bGVTaGVldCBmaW5hbCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSB7Ci1wdWJsaWM6Ci0gICAgQ2Fj
aGVkWFNMU3R5bGVTaGVldChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTZXNzaW9uSUQpOwotICAg
IHZpcnR1YWwgfkNhY2hlZFhTTFN0eWxlU2hlZXQoKTsKLQotICAgIGNvbnN0IFN0cmluZyYgc2hl
ZXQoKSBjb25zdCB7IHJldHVybiBtX3NoZWV0OyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjaGVj
a05vdGlmeSgpIG92ZXJyaWRlOwotICAgIGJvb2wgbWF5VHJ5UmVwbGFjZUVuY29kZWREYXRhKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZvaWQgZGlkQWRkQ2xpZW50KENh
Y2hlZFJlc291cmNlQ2xpZW50Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRFbmNvZGluZyhjb25z
dCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICBTdHJpbmcgZW5jb2RpbmcoKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBjb25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKiB0ZXh0UmVzb3VyY2VEZWNvZGVyKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZWNvZGVyLmdldCgpOyB9Ci0gICAgdm9pZCBmaW5p
c2hMb2FkaW5nKFNoYXJlZEJ1ZmZlciopIG92ZXJyaWRlOwotCi0gICAgU3RyaW5nIG1fc2hlZXQ7
Ci0gICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUNIRURfUkVTT1VS
Q0UoQ2FjaGVkWFNMU3R5bGVTaGVldCwgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQpCi0K
LSNlbmRpZiAvLyBFTkFCTEUoWFNMVCkKLQotI2VuZGlmIC8vIENhY2hlZFhTTFN0eWxlU2hlZXRf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MzUwMWU0YjI5ZjZiODI5YTYyNTE4YTg1ZDg1MGIxZWYw
NDZkZmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDgwMCArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChr
bm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIg
KG11ZWxsZXJAa2RlLm9yZykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDIgV2FsZG8gQmFzdGlhbiAo
YmFzdGlhbkBrZGUub3JnKQotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCi0KLSNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2VDbGll
bnQuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQ
dWJsaWNTdWZmaXguaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJXb3Jr
ZXJHbG9iYWxTY29wZS5oIgotI2luY2x1ZGUgIldvcmtlckxvYWRlclByb3h5LmgiCi0jaW5jbHVk
ZSAiV29ya2VyVGhyZWFkLmgiCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDx3dGYvQ3Vy
cmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGlj
IGNvbnN0IGludCBjRGVmYXVsdENhY2hlQ2FwYWNpdHkgPSA4MTkyICogMTAyNDsKLXN0YXRpYyBj
b25zdCBkb3VibGUgY01pbkRlbGF5QmVmb3JlTGl2ZURlY29kZWRQcnVuZSA9IDE7IC8vIFNlY29u
ZHMuCi1zdGF0aWMgY29uc3QgZmxvYXQgY1RhcmdldFBydW5lUGVyY2VudGFnZSA9IC45NWY7IC8v
IFBlcmNlbnRhZ2Ugb2YgY2FwYWNpdHkgdG93YXJkIHdoaWNoIHdlIHBydW5lLCB0byBhdm9pZCBp
bW1lZGlhdGVseSBwcnVuaW5nIGFnYWluLgotc3RhdGljIGNvbnN0IGF1dG8gZGVmYXVsdERlY29k
ZWREYXRhRGVsZXRpb25JbnRlcnZhbCA9IHN0ZDo6Y2hyb25vOjpzZWNvbmRzIHsgMCB9OwotCi1N
ZW1vcnlDYWNoZSYgTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpCi17Ci0gICAgQVNTRVJUKFdURjo6
aXNNYWluVGhyZWFkKCkpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1vcnlDYWNoZT4g
bWVtb3J5Q2FjaGU7Ci0gICAgcmV0dXJuIG1lbW9yeUNhY2hlOwotfQotCi1NZW1vcnlDYWNoZTo6
TWVtb3J5Q2FjaGUoKQotICAgIDogbV9kaXNhYmxlZChmYWxzZSkKLSAgICAsIG1faW5QcnVuZVJl
c291cmNlcyhmYWxzZSkKLSAgICAsIG1fY2FwYWNpdHkoY0RlZmF1bHRDYWNoZUNhcGFjaXR5KQot
ICAgICwgbV9taW5EZWFkQ2FwYWNpdHkoMCkKLSAgICAsIG1fbWF4RGVhZENhcGFjaXR5KGNEZWZh
dWx0Q2FjaGVDYXBhY2l0eSkKLSAgICAsIG1fZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZh
bChkZWZhdWx0RGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKQotICAgICwgbV9saXZlU2l6ZSgw
KQotICAgICwgbV9kZWFkU2l6ZSgwKQotICAgICwgbV9wcnVuZVRpbWVyKCp0aGlzLCAmTWVtb3J5
Q2FjaGU6OnBydW5lKQotewotfQotCi1hdXRvIE1lbW9yeUNhY2hlOjpzZXNzaW9uUmVzb3VyY2VN
YXAoU2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QgLT4gQ2FjaGVkUmVzb3VyY2VNYXAqCi17Ci0g
ICAgQVNTRVJUKHNlc3Npb25JRC5pc1ZhbGlkKCkpOwotICAgIHJldHVybiBtX3Nlc3Npb25SZXNv
dXJjZXMuZ2V0KHNlc3Npb25JRCk7Ci19Ci0KLWF1dG8gTWVtb3J5Q2FjaGU6OmVuc3VyZVNlc3Np
b25SZXNvdXJjZU1hcChTZXNzaW9uSUQgc2Vzc2lvbklEKSAtPiBDYWNoZWRSZXNvdXJjZU1hcCYK
LXsKLSAgICBBU1NFUlQoc2Vzc2lvbklELmlzVmFsaWQoKSk7Ci0gICAgYXV0byYgbWFwID0gbV9z
ZXNzaW9uUmVzb3VyY2VzLmFkZChzZXNzaW9uSUQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsK
LSAgICBpZiAoIW1hcCkKLSAgICAgICAgbWFwID0gc3RkOjptYWtlX3VuaXF1ZTxDYWNoZWRSZXNv
dXJjZU1hcD4oKTsKLSAgICByZXR1cm4gKm1hcDsKLX0KLQotVVJMIE1lbW9yeUNhY2hlOjpyZW1v
dmVGcmFnbWVudElkZW50aWZpZXJJZk5lZWRlZChjb25zdCBVUkwmIG9yaWdpbmFsVVJMKQotewot
ICAgIGlmICghb3JpZ2luYWxVUkwuaGFzRnJhZ21lbnRJZGVudGlmaWVyKCkpCi0gICAgICAgIHJl
dHVybiBvcmlnaW5hbFVSTDsKLSAgICAvLyBTdHJpcCBhd2F5IGZyYWdtZW50IGlkZW50aWZpZXIg
ZnJvbSBIVFRQIFVSTHMuCi0gICAgLy8gRGF0YSBVUkxzIG11c3QgYmUgdW5tb2RpZmllZC4gRm9y
IGZpbGUgYW5kIGN1c3RvbSBVUkxzIGNsaWVudHMgbWF5IGV4cGVjdCByZXNvdXJjZXMgCi0gICAg
Ly8gdG8gYmUgdW5pcXVlIGV2ZW4gd2hlbiB0aGV5IGRpZmZlciBieSB0aGUgZnJhZ21lbnQgaWRl
bnRpZmllciBvbmx5LgotICAgIGlmICghb3JpZ2luYWxVUkwucHJvdG9jb2xJc0luSFRUUEZhbWls
eSgpKQotICAgICAgICByZXR1cm4gb3JpZ2luYWxVUkw7Ci0gICAgVVJMIHVybCA9IG9yaWdpbmFs
VVJMOwotICAgIHVybC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKLSAgICByZXR1cm4gdXJs
OwotfQotCi1ib29sIE1lbW9yeUNhY2hlOjphZGQoQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQot
ewotICAgIGlmIChkaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NF
UlQoV1RGOjppc01haW5UaHJlYWQoKSk7Ci0KLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5H
KQotICAgIGF1dG8ga2V5ID0gc3RkOjptYWtlX3BhaXIocmVzb3VyY2UudXJsKCksIHJlc291cmNl
LmNhY2hlUGFydGl0aW9uKCkpOwotI2Vsc2UKLSAgICBhdXRvJiBrZXkgPSByZXNvdXJjZS51cmwo
KTsKLSNlbmRpZgotICAgIGVuc3VyZVNlc3Npb25SZXNvdXJjZU1hcChyZXNvdXJjZS5zZXNzaW9u
SUQoKSkuc2V0KGtleSwgJnJlc291cmNlKTsKLSAgICByZXNvdXJjZS5zZXRJbkNhY2hlKHRydWUp
OwotICAgIAotICAgIHJlc291cmNlQWNjZXNzZWQocmVzb3VyY2UpOwotICAgIAotICAgIExPRyhS
ZXNvdXJjZUxvYWRpbmcsICJNZW1vcnlDYWNoZTo6YWRkIEFkZGVkICclcycsIHJlc291cmNlICVw
XG4iLCByZXNvdXJjZS51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCksICZyZXNvdXJjZSk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWVtb3J5Q2FjaGU6OnJldmFsaWRhdGlvblN1
Y2NlZWRlZChDYWNoZWRSZXNvdXJjZSYgcmV2YWxpZGF0aW5nUmVzb3VyY2UsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIEFTU0VSVChyZXZhbGlkYXRpbmdSZXNvdXJj
ZS5yZXNvdXJjZVRvUmV2YWxpZGF0ZSgpKTsKLSAgICBDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2Ug
PSAqcmV2YWxpZGF0aW5nUmVzb3VyY2UucmVzb3VyY2VUb1JldmFsaWRhdGUoKTsKLSAgICBBU1NF
UlQoIXJlc291cmNlLmluQ2FjaGUoKSk7Ci0gICAgQVNTRVJUKHJlc291cmNlLmlzTG9hZGVkKCkp
OwotCi0gICAgLy8gQ2FsbGluZyByZW1vdmUoKSBjYW4gcG90ZW50aWFsbHkgZGVsZXRlIHJldmFs
aWRhdGluZ1Jlc291cmNlLCB3aGljaCB3ZSB1c2UKLSAgICAvLyBiZWxvdy4gVGhpcyBtdXN0bid0
IGJlIHRoZSBjYXNlIHNpbmNlIHJldmFsaWRhdGlvbiBtZWFucyBpdCBpcyBsb2FkZWQKLSAgICAv
LyBhbmQgc28gY2FuRGVsZXRlKCkgaXMgZmFsc2UuCi0gICAgQVNTRVJUKCFyZXZhbGlkYXRpbmdS
ZXNvdXJjZS5jYW5EZWxldGUoKSk7Ci0KLSAgICByZW1vdmUocmV2YWxpZGF0aW5nUmVzb3VyY2Up
OwotCi0gICAgYXV0byYgcmVzb3VyY2VzID0gZW5zdXJlU2Vzc2lvblJlc291cmNlTWFwKHJlc291
cmNlLnNlc3Npb25JRCgpKTsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQotICAgIGF1
dG8ga2V5ID0gc3RkOjptYWtlX3BhaXIocmVzb3VyY2UudXJsKCksIHJlc291cmNlLmNhY2hlUGFy
dGl0aW9uKCkpOwotI2Vsc2UKLSAgICBhdXRvJiBrZXkgPSByZXNvdXJjZS51cmwoKTsKLSNlbmRp
ZgotICAgIEFTU0VSVCghcmVzb3VyY2VzLmdldChrZXkpKTsKLSAgICByZXNvdXJjZXMuc2V0KGtl
eSwgJnJlc291cmNlKTsKLSAgICByZXNvdXJjZS5zZXRJbkNhY2hlKHRydWUpOwotICAgIHJlc291
cmNlLnVwZGF0ZVJlc3BvbnNlQWZ0ZXJSZXZhbGlkYXRpb24ocmVzcG9uc2UpOwotICAgIGluc2Vy
dEluTFJVTGlzdChyZXNvdXJjZSk7Ci0gICAgaW50IGRlbHRhID0gcmVzb3VyY2Uuc2l6ZSgpOwot
ICAgIGlmIChyZXNvdXJjZS5kZWNvZGVkU2l6ZSgpICYmIHJlc291cmNlLmhhc0NsaWVudHMoKSkK
LSAgICAgICAgaW5zZXJ0SW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QocmVzb3VyY2UpOwotICAg
IGlmIChkZWx0YSkKLSAgICAgICAgYWRqdXN0U2l6ZShyZXNvdXJjZS5oYXNDbGllbnRzKCksIGRl
bHRhKTsKLSAgICAKLSAgICByZXZhbGlkYXRpbmdSZXNvdXJjZS5zd2l0Y2hDbGllbnRzVG9SZXZh
bGlkYXRlZFJlc291cmNlKCk7Ci0gICAgQVNTRVJUKCFyZXZhbGlkYXRpbmdSZXNvdXJjZS5tX2Rl
bGV0ZWQpOwotICAgIC8vIHRoaXMgZGVsZXRlcyB0aGUgcmV2YWxpZGF0aW5nIHJlc291cmNlCi0g
ICAgcmV2YWxpZGF0aW5nUmVzb3VyY2UuY2xlYXJSZXNvdXJjZVRvUmV2YWxpZGF0ZSgpOwotfQot
Ci12b2lkIE1lbW9yeUNhY2hlOjpyZXZhbGlkYXRpb25GYWlsZWQoQ2FjaGVkUmVzb3VyY2UmIHJl
dmFsaWRhdGluZ1Jlc291cmNlKQotewotICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsK
LSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmV2YWxpZGF0aW9uIGZhaWxlZCBmb3IgJXAiLCAm
cmV2YWxpZGF0aW5nUmVzb3VyY2UpOwotICAgIEFTU0VSVChyZXZhbGlkYXRpbmdSZXNvdXJjZS5y
ZXNvdXJjZVRvUmV2YWxpZGF0ZSgpKTsKLSAgICByZXZhbGlkYXRpbmdSZXNvdXJjZS5jbGVhclJl
c291cmNlVG9SZXZhbGlkYXRlKCk7Ci19Ci0KLUNhY2hlZFJlc291cmNlKiBNZW1vcnlDYWNoZTo6
cmVzb3VyY2VGb3JSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU2Vzc2lv
bklEIHNlc3Npb25JRCkKLXsKLSAgICBhdXRvKiByZXNvdXJjZXMgPSBzZXNzaW9uUmVzb3VyY2VN
YXAoc2Vzc2lvbklEKTsKLSAgICBpZiAoIXJlc291cmNlcykKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgcmV0dXJuIHJlc291cmNlRm9yUmVxdWVzdEltcGwocmVxdWVzdCwgKnJlc291cmNl
cyk7Ci19Ci0KLUNhY2hlZFJlc291cmNlKiBNZW1vcnlDYWNoZTo6cmVzb3VyY2VGb3JSZXF1ZXN0
SW1wbChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIENhY2hlZFJlc291cmNlTWFwJiBy
ZXNvdXJjZXMpCi17Ci0gICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOwotICAgIFVSTCB1
cmwgPSByZW1vdmVGcmFnbWVudElkZW50aWZpZXJJZk5lZWRlZChyZXF1ZXN0LnVybCgpKTsKLQot
I2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCi0gICAgYXV0byBrZXkgPSBzdGQ6Om1ha2Vf
cGFpcih1cmwsIHJlcXVlc3QuY2FjaGVQYXJ0aXRpb24oKSk7Ci0jZWxzZQotICAgIGF1dG8mIGtl
eSA9IHVybDsKLSNlbmRpZgotICAgIHJldHVybiByZXNvdXJjZXMuZ2V0KGtleSk7Ci19Ci0KLXVu
c2lnbmVkIE1lbW9yeUNhY2hlOjpkZWFkQ2FwYWNpdHkoKSBjb25zdCAKLXsKLSAgICAvLyBEZWFk
IHJlc291cmNlIGNhcGFjaXR5IGlzIHdoYXRldmVyIHNwYWNlIGlzIG5vdCBvY2N1cGllZCBieSBs
aXZlIHJlc291cmNlcywgYm91bmRlZCBieSBhbiBpbmRlcGVuZGVudCBtaW5pbXVtIGFuZCBtYXhp
bXVtLgotICAgIHVuc2lnbmVkIGNhcGFjaXR5ID0gbV9jYXBhY2l0eSAtIHN0ZDo6bWluKG1fbGl2
ZVNpemUsIG1fY2FwYWNpdHkpOyAvLyBTdGFydCB3aXRoIGF2YWlsYWJsZSBjYXBhY2l0eS4KLSAg
ICBjYXBhY2l0eSA9IHN0ZDo6bWF4KGNhcGFjaXR5LCBtX21pbkRlYWRDYXBhY2l0eSk7IC8vIE1h
a2Ugc3VyZSBpdCdzIGFib3ZlIHRoZSBtaW5pbXVtLgotICAgIGNhcGFjaXR5ID0gc3RkOjptaW4o
Y2FwYWNpdHksIG1fbWF4RGVhZENhcGFjaXR5KTsgLy8gTWFrZSBzdXJlIGl0J3MgYmVsb3cgdGhl
IG1heGltdW0uCi0gICAgcmV0dXJuIGNhcGFjaXR5OwotfQotCi11bnNpZ25lZCBNZW1vcnlDYWNo
ZTo6bGl2ZUNhcGFjaXR5KCkgY29uc3QgCi17IAotICAgIC8vIExpdmUgcmVzb3VyY2UgY2FwYWNp
dHkgaXMgd2hhdGV2ZXIgaXMgbGVmdCBvdmVyIGFmdGVyIGNhbGN1bGF0aW5nIGRlYWQgcmVzb3Vy
Y2UgY2FwYWNpdHkuCi0gICAgcmV0dXJuIG1fY2FwYWNpdHkgLSBkZWFkQ2FwYWNpdHkoKTsKLX0K
LQotc3RhdGljIENhY2hlZEltYWdlQ2xpZW50JiBkdW1teUNhY2hlZEltYWdlQ2xpZW50KCkKLXsK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q2FjaGVkSW1hZ2VDbGllbnQ+IGNsaWVudDsKLSAg
ICByZXR1cm4gY2xpZW50OwotfQotCi1ib29sIE1lbW9yeUNhY2hlOjphZGRJbWFnZVRvQ2FjaGUo
TmF0aXZlSW1hZ2VQdHImJiBpbWFnZSwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgZG9t
YWluRm9yQ2FjaGVQYXJ0aXRpb24pCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICBTZXNzaW9u
SUQgc2Vzc2lvbklEID0gU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCk7Ci0gICAgcmVtb3Zl
SW1hZ2VGcm9tQ2FjaGUodXJsLCBkb21haW5Gb3JDYWNoZVBhcnRpdGlvbik7IC8vIFJlbW92ZSBj
YWNoZSBlbnRyeSBpZiBpdCBhbHJlYWR5IGV4aXN0cy4KLQotICAgIFJlZlB0cjxCaXRtYXBJbWFn
ZT4gYml0bWFwSW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpLCBudWxs
cHRyKTsKLSAgICBpZiAoIWJpdG1hcEltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkSW1hZ2U+IGNhY2hlZEltYWdlID0gc3RkOjptYWtlX3Vu
aXF1ZTxDYWNoZWRJbWFnZT4odXJsLCBiaXRtYXBJbWFnZS5nZXQoKSwgQ2FjaGVkSW1hZ2U6Ok1h
bnVhbGx5Q2FjaGVkLCBzZXNzaW9uSUQpOwotCi0gICAgY2FjaGVkSW1hZ2UtPmFkZENsaWVudCgm
ZHVtbXlDYWNoZWRJbWFnZUNsaWVudCgpKTsKLSAgICBjYWNoZWRJbWFnZS0+c2V0RGVjb2RlZFNp
emUoYml0bWFwSW1hZ2UtPmRlY29kZWRTaXplKCkpOwotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJ
T05JTkcpCi0gICAgY2FjaGVkSW1hZ2UtPnJlc291cmNlUmVxdWVzdCgpLnNldERvbWFpbkZvckNh
Y2hlUGFydGl0aW9uKGRvbWFpbkZvckNhY2hlUGFydGl0aW9uKTsKLSNlbmRpZgotICAgIHJldHVy
biBhZGQoKmNhY2hlZEltYWdlLnJlbGVhc2UoKSk7Ci19Ci0KLXZvaWQgTWVtb3J5Q2FjaGU6OnJl
bW92ZUltYWdlRnJvbUNhY2hlKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGRvbWFpbkZv
ckNhY2hlUGFydGl0aW9uKQotewotICAgIGF1dG8qIHJlc291cmNlcyA9IHNlc3Npb25SZXNvdXJj
ZU1hcChTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0gICAgaWYgKCFyZXNvdXJjZXMp
Ci0gICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCi0gICAg
YXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcih1cmwsIFJlc291cmNlUmVxdWVzdDo6cGFydGl0aW9u
TmFtZShkb21haW5Gb3JDYWNoZVBhcnRpdGlvbikpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0o
ZG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24pOwotICAgIGF1dG8mIGtleSA9IHVybDsKLSNlbmRpZgot
ICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IHJlc291cmNlcy0+Z2V0KGtleSk7Ci0gICAg
aWYgKCFyZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQSByZXNvdXJjZSBleGlz
dHMgYW5kIGlzIG5vdCBhIG1hbnVhbGx5IGNhY2hlZCBpbWFnZSwgc28ganVzdCByZW1vdmUgaXQu
Ci0gICAgaWYgKCFpczxDYWNoZWRJbWFnZT4oKnJlc291cmNlKSB8fCAhZG93bmNhc3Q8Q2FjaGVk
SW1hZ2U+KCpyZXNvdXJjZSkuaXNNYW51YWxseUNhY2hlZCgpKSB7Ci0gICAgICAgIHJlbW92ZSgq
cmVzb3VyY2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gUmVtb3ZpbmcgdGhl
IGxhc3QgY2xpZW50IG9mIGEgQ2FjaGVkSW1hZ2UgdHVybnMgdGhlIHJlc291cmNlCi0gICAgLy8g
aW50byBhIGRlYWQgcmVzb3VyY2Ugd2hpY2ggd2lsbCBldmVudHVhbGx5IGJlIGV2aWN0ZWQgd2hl
bgotICAgIC8vIGRlYWQgcmVzb3VyY2VzIGFyZSBwcnVuZWQuIFRoYXQgbWlnaHQgYmUgaW1tZWRp
YXRlbHkgc2luY2UKLSAgICAvLyByZW1vdmluZyB0aGUgbGFzdCBjbGllbnQgdHJpZ2dlcnMgYSBN
ZW1vcnlDYWNoZTo6cHJ1bmUsIHNvIHRoZQotICAgIC8vIHJlc291cmNlIG1heSBiZSBkZWxldGVk
IGFmdGVyIHRoaXMgY2FsbC4KLSAgICBkb3duY2FzdDxDYWNoZWRJbWFnZT4oKnJlc291cmNlKS5y
ZW1vdmVDbGllbnQoJmR1bW15Q2FjaGVkSW1hZ2VDbGllbnQoKSk7Ci19Ci0KLXZvaWQgTWVtb3J5
Q2FjaGU6OnBydW5lTGl2ZVJlc291cmNlcyhib29sIHNob3VsZERlc3Ryb3lEZWNvZGVkRGF0YUZv
ckFsbExpdmVSZXNvdXJjZXMpCi17Ci0gICAgdW5zaWduZWQgY2FwYWNpdHkgPSBzaG91bGREZXN0
cm95RGVjb2RlZERhdGFGb3JBbGxMaXZlUmVzb3VyY2VzID8gMCA6IGxpdmVDYXBhY2l0eSgpOwot
ICAgIGlmIChjYXBhY2l0eSAmJiBtX2xpdmVTaXplIDw9IGNhcGFjaXR5KQotICAgICAgICByZXR1
cm47Ci0KLSAgICB1bnNpZ25lZCB0YXJnZXRTaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNh
cGFjaXR5ICogY1RhcmdldFBydW5lUGVyY2VudGFnZSk7IC8vIEN1dCBieSBhIHBlcmNlbnRhZ2Ug
dG8gYXZvaWQgaW1tZWRpYXRlbHkgcHJ1bmluZyBhZ2Fpbi4KLQotICAgIHBydW5lTGl2ZVJlc291
cmNlc1RvU2l6ZSh0YXJnZXRTaXplLCBzaG91bGREZXN0cm95RGVjb2RlZERhdGFGb3JBbGxMaXZl
UmVzb3VyY2VzKTsKLX0KLQotdm9pZCBNZW1vcnlDYWNoZTo6Zm9yRWFjaFJlc291cmNlKGNvbnN0
IHN0ZDo6ZnVuY3Rpb248dm9pZChDYWNoZWRSZXNvdXJjZSYpPiYgZnVuY3Rpb24pCi17Ci0gICAg
Zm9yIChhdXRvJiB1bnByb3RlY3RlZExSVUxpc3QgOiBtX2FsbFJlc291cmNlcykgewotICAgICAg
ICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+PiBscnVMaXN0Owot
ICAgICAgICBjb3B5VG9WZWN0b3IoKnVucHJvdGVjdGVkTFJVTGlzdCwgbHJ1TGlzdCk7Ci0gICAg
ICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiBscnVMaXN0KQotICAgICAgICAgICAgZnVuY3Rpb24o
KnJlc291cmNlKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVtb3J5Q2FjaGU6OmZvckVhY2hTZXNzaW9u
UmVzb3VyY2UoU2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkIChD
YWNoZWRSZXNvdXJjZSYpPiYgZnVuY3Rpb24pCi17Ci0gICAgYXV0byBpdCA9IG1fc2Vzc2lvblJl
c291cmNlcy5maW5kKHNlc3Npb25JRCk7Ci0gICAgaWYgKGl0ID09IG1fc2Vzc2lvblJlc291cmNl
cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPENhY2hlZFJlc291cmNlSGFu
ZGxlPENhY2hlZFJlc291cmNlPj4gcmVzb3VyY2VzRm9yU2Vzc2lvbjsKLSAgICBjb3B5VmFsdWVz
VG9WZWN0b3IoKml0LT52YWx1ZSwgcmVzb3VyY2VzRm9yU2Vzc2lvbik7Ci0KLSAgICBmb3IgKGF1
dG8mIHJlc291cmNlIDogcmVzb3VyY2VzRm9yU2Vzc2lvbikKLSAgICAgICAgZnVuY3Rpb24oKnJl
c291cmNlKTsKLX0KLQotdm9pZCBNZW1vcnlDYWNoZTo6ZGVzdHJveURlY29kZWREYXRhRm9yQWxs
SW1hZ2VzKCkKLXsKLSAgICBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkuZm9yRWFjaFJlc291cmNl
KFtdKENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkgewotICAgICAgICBpZiAocmVzb3VyY2UuaXNJ
bWFnZSgpKQotICAgICAgICAgICAgcmVzb3VyY2UuZGVzdHJveURlY29kZWREYXRhKCk7Ci0gICAg
fSk7Ci19Ci0KLXZvaWQgTWVtb3J5Q2FjaGU6OnBydW5lTGl2ZVJlc291cmNlc1RvU2l6ZSh1bnNp
Z25lZCB0YXJnZXRTaXplLCBib29sIHNob3VsZERlc3Ryb3lEZWNvZGVkRGF0YUZvckFsbExpdmVS
ZXNvdXJjZXMpCi17Ci0gICAgaWYgKG1faW5QcnVuZVJlc291cmNlcykKLSAgICAgICAgcmV0dXJu
OwotICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiByZWVudHJhbmN5UHJvdGVjdG9yKG1faW5QcnVu
ZVJlc291cmNlcywgdHJ1ZSk7Ci0KLSAgICBkb3VibGUgY3VycmVudFRpbWUgPSBGcmFtZVZpZXc6
OmN1cnJlbnRQYWludFRpbWVTdGFtcCgpOwotICAgIGlmICghY3VycmVudFRpbWUpIC8vIEluIGNh
c2UgcHJ1bmUgaXMgY2FsbGVkIGRpcmVjdGx5LCBvdXRzaWRlIG9mIGEgRnJhbWUgcGFpbnQuCi0g
ICAgICAgIGN1cnJlbnRUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7Ci0gICAg
Ci0gICAgLy8gRGVzdHJveSBhbnkgZGVjb2RlZCBkYXRhIGluIGxpdmUgb2JqZWN0cyB0aGF0IHdl
IGNhbi4KLSAgICAvLyBTdGFydCBmcm9tIHRoZSBoZWFkLCBzaW5jZSB0aGlzIGlzIHRoZSBsZWFz
dCByZWNlbnRseSBhY2Nlc3NlZCBvZiB0aGUgb2JqZWN0cy4KLQotICAgIC8vIFRoZSBsaXN0IG1p
Z2h0IG5vdCBiZSBzb3J0ZWQgYnkgdGhlIG1fbGFzdERlY29kZWRBY2Nlc3NUaW1lLiBUaGUgaW1w
YWN0Ci0gICAgLy8gb2YgdGhpcyB3ZWFrZXIgaW52YXJpYW50IGlzIG1pbm9yIGFzIHRoZSBiZWxv
dyBpZiBzdGF0ZW1lbnQgdG8gY2hlY2sgdGhlCi0gICAgLy8gZWxhcHNlZFRpbWUgd2lsbCBldmFs
dWF0ZSB0byBmYWxzZSBhcyB0aGUgY3VycmVudFRpbWUgd2lsbCBiZSBhIGxvdAotICAgIC8vIGdy
ZWF0ZXIgdGhhbiB0aGUgY3VycmVudC0+bV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWUuCi0gICAgLy8g
Rm9yIG1vcmUgZGV0YWlscyBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zMDIwOQotICAgIGF1dG8gaXQgPSBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzLmJlZ2luKCk7
Ci0gICAgd2hpbGUgKGl0ICE9IG1fbGl2ZURlY29kZWRSZXNvdXJjZXMuZW5kKCkpIHsKLSAgICAg
ICAgYXV0byogY3VycmVudCA9ICppdDsKLQotICAgICAgICAvLyBJbmNyZW1lbnQgdGhlIGl0ZXJh
dG9yIG5vdyBiZWNhdXNlIHRoZSBjYWxsIHRvIGRlc3Ryb3lEZWNvZGVkRGF0YSgpIGJlbG93Ci0g
ICAgICAgIC8vIG1heSBjYXVzZSBhIGNhbGwgdG8gTGlzdEhhc2hTZXQ6OnJlbW92ZSgpIGFuZCBp
bnZhbGlkYXRlIHRoZSBjdXJyZW50Ci0gICAgICAgIC8vIGl0ZXJhdG9yLiBOb3RlIHRoYXQgdGhp
cyBpcyBzYWZlIGJlY2F1c2UgdW5saWtlIGl0ZXJhdGlvbiBvZiBtb3N0Ci0gICAgICAgIC8vIFdU
RiBIYXNoIGRhdGEgc3RydWN0dXJlcywgaXRlcmF0aW9uIGlzIGd1YXJhbnRlZWQgc2FmZSBhZ2Fp
bnN0IG11dGF0aW9uCi0gICAgICAgIC8vIG9mIHRoZSBMaXN0SGFzaFNldCwgZXhjZXB0IGZvciBy
ZW1vdmFsIG9mIHRoZSBpdGVtIGN1cnJlbnRseSBwb2ludGVkIHRvCi0gICAgICAgIC8vIGJ5IGEg
Z2l2ZW4gaXRlcmF0b3IuCi0gICAgICAgICsraXQ7Ci0KLSAgICAgICAgQVNTRVJUKGN1cnJlbnQt
Pmhhc0NsaWVudHMoKSk7Ci0gICAgICAgIGlmIChjdXJyZW50LT5pc0xvYWRlZCgpICYmIGN1cnJl
bnQtPmRlY29kZWRTaXplKCkpIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUg
cmVtYWluaW5nIHJlc291cmNlcyBhcmUgdG9vIG5ldyB0byBwcnVuZS4KLSAgICAgICAgICAgIGRv
dWJsZSBlbGFwc2VkVGltZSA9IGN1cnJlbnRUaW1lIC0gY3VycmVudC0+bV9sYXN0RGVjb2RlZEFj
Y2Vzc1RpbWU7Ci0gICAgICAgICAgICBpZiAoIXNob3VsZERlc3Ryb3lEZWNvZGVkRGF0YUZvckFs
bExpdmVSZXNvdXJjZXMgJiYgZWxhcHNlZFRpbWUgPCBjTWluRGVsYXlCZWZvcmVMaXZlRGVjb2Rl
ZFBydW5lKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgLy8gRGVzdHJv
eSBvdXIgZGVjb2RlZCBkYXRhLiBUaGlzIHdpbGwgcmVtb3ZlIHVzIGZyb20gbV9saXZlRGVjb2Rl
ZFJlc291cmNlcywgYW5kIHBvc3NpYmx5IG1vdmUgdXMKLSAgICAgICAgICAgIC8vIHRvIGEgZGlm
ZmVyZW50IExSVSBsaXN0IGluIG1fYWxsUmVzb3VyY2VzLgotICAgICAgICAgICAgY3VycmVudC0+
ZGVzdHJveURlY29kZWREYXRhKCk7Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXRTaXplICYmIG1f
bGl2ZVNpemUgPD0gdGFyZ2V0U2l6ZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLXZvaWQgTWVtb3J5Q2FjaGU6OnBydW5lRGVhZFJlc291cmNlcygpCi17
Ci0gICAgdW5zaWduZWQgY2FwYWNpdHkgPSBkZWFkQ2FwYWNpdHkoKTsKLSAgICBpZiAoY2FwYWNp
dHkgJiYgbV9kZWFkU2l6ZSA8PSBjYXBhY2l0eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5z
aWduZWQgdGFyZ2V0U2l6ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYXBhY2l0eSAqIGNUYXJn
ZXRQcnVuZVBlcmNlbnRhZ2UpOyAvLyBDdXQgYnkgYSBwZXJjZW50YWdlIHRvIGF2b2lkIGltbWVk
aWF0ZWx5IHBydW5pbmcgYWdhaW4uCi0gICAgcHJ1bmVEZWFkUmVzb3VyY2VzVG9TaXplKHRhcmdl
dFNpemUpOwotfQotCi12b2lkIE1lbW9yeUNhY2hlOjpwcnVuZURlYWRSZXNvdXJjZXNUb1NpemUo
dW5zaWduZWQgdGFyZ2V0U2l6ZSkKLXsKLSAgICBpZiAobV9pblBydW5lUmVzb3VyY2VzKQotICAg
ICAgICByZXR1cm47Ci0gICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IHJlZW50cmFuY3lQcm90ZWN0
b3IobV9pblBydW5lUmVzb3VyY2VzLCB0cnVlKTsKLSAKLSAgICBpZiAodGFyZ2V0U2l6ZSAmJiBt
X2RlYWRTaXplIDw9IHRhcmdldFNpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgY2Fu
U2hyaW5rTFJVTGlzdHMgPSB0cnVlOwotICAgIGZvciAoaW50IGkgPSBtX2FsbFJlc291cmNlcy5z
aXplKCkgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAvLyBNYWtlIGEgY29weSBvZiB0aGUg
TFJVTGlzdCBmaXJzdCAoYW5kIHJlZiB0aGUgcmVzb3VyY2VzKSBhcyBjYWxsaW5nCi0gICAgICAg
IC8vIGRlc3Ryb3lEZWNvZGVkRGF0YSgpIGNhbiBhbHRlciB0aGUgTFJVTGlzdC4KLSAgICAgICAg
VmVjdG9yPENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPj4gbHJ1TGlzdDsKLSAg
ICAgICAgY29weVRvVmVjdG9yKCptX2FsbFJlc291cmNlc1tpXSwgbHJ1TGlzdCk7Ci0KLSAgICAg
ICAgLy8gRmlyc3QgZmx1c2ggYWxsIHRoZSBkZWNvZGVkIGRhdGEgaW4gdGhpcyBxdWV1ZS4KLSAg
ICAgICAgLy8gUmVtb3ZlIGZyb20gdGhlIGhlYWQsIHNpbmNlIHRoaXMgaXMgdGhlIGxlYXN0IGZy
ZXF1ZW50bHkgYWNjZXNzZWQgb2YgdGhlIG9iamVjdHMuCi0gICAgICAgIGZvciAoYXV0byYgcmVz
b3VyY2UgOiBscnVMaXN0KSB7Ci0gICAgICAgICAgICBpZiAoIXJlc291cmNlLT5pbkNhY2hlKCkp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmICghcmVzb3VyY2Ut
Pmhhc0NsaWVudHMoKSAmJiAhcmVzb3VyY2UtPmlzUHJlbG9hZGVkKCkgJiYgcmVzb3VyY2UtPmlz
TG9hZGVkKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBEZXN0cm95IG91ciBkZWNvZGVkIGRhdGEu
IFRoaXMgd2lsbCByZW1vdmUgdXMgZnJvbSAKLSAgICAgICAgICAgICAgICAvLyBtX2xpdmVEZWNv
ZGVkUmVzb3VyY2VzLCBhbmQgcG9zc2libHkgbW92ZSB1cyB0byBhIGRpZmZlcmVudCAKLSAgICAg
ICAgICAgICAgICAvLyBMUlUgbGlzdCBpbiBtX2FsbFJlc291cmNlcy4KLSAgICAgICAgICAgICAg
ICByZXNvdXJjZS0+ZGVzdHJveURlY29kZWREYXRhKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAo
dGFyZ2V0U2l6ZSAmJiBtX2RlYWRTaXplIDw9IHRhcmdldFNpemUpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5vdyBl
dmljdCBvYmplY3RzIGZyb20gdGhpcyBsaXN0LgotICAgICAgICAvLyBSZW1vdmUgZnJvbSB0aGUg
aGVhZCwgc2luY2UgdGhpcyBpcyB0aGUgbGVhc3QgZnJlcXVlbnRseSBhY2Nlc3NlZCBvZiB0aGUg
b2JqZWN0cy4KLSAgICAgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IGxydUxpc3QpIHsKLSAgICAg
ICAgICAgIGlmICghcmVzb3VyY2UtPmluQ2FjaGUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAgICAgaWYgKCFyZXNvdXJjZS0+aGFzQ2xpZW50cygpICYmICFyZXNvdXJj
ZS0+aXNQcmVsb2FkZWQoKSAmJiAhcmVzb3VyY2UtPmlzQ2FjaGVWYWxpZGF0b3IoKSkgewotICAg
ICAgICAgICAgICAgIHJlbW92ZSgqcmVzb3VyY2UpOwotICAgICAgICAgICAgICAgIGlmICh0YXJn
ZXRTaXplICYmIG1fZGVhZFNpemUgPD0gdGFyZ2V0U2l6ZSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
Ly8gU2hyaW5rIHRoZSB2ZWN0b3IgYmFjayBkb3duIHNvIHdlIGRvbid0IHdhc3RlIHRpbWUgaW5z
cGVjdGluZwotICAgICAgICAvLyBlbXB0eSBMUlUgbGlzdHMgb24gZnV0dXJlIHBydW5lcy4KLSAg
ICAgICAgaWYgKCFtX2FsbFJlc291cmNlc1tpXS0+aXNFbXB0eSgpKQotICAgICAgICAgICAgY2Fu
U2hyaW5rTFJVTGlzdHMgPSBmYWxzZTsKLSAgICAgICAgZWxzZSBpZiAoY2FuU2hyaW5rTFJVTGlz
dHMpCi0gICAgICAgICAgICBtX2FsbFJlc291cmNlcy5zaHJpbmsoaSk7Ci0gICAgfQotfQotCi12
b2lkIE1lbW9yeUNhY2hlOjpzZXRDYXBhY2l0aWVzKHVuc2lnbmVkIG1pbkRlYWRCeXRlcywgdW5z
aWduZWQgbWF4RGVhZEJ5dGVzLCB1bnNpZ25lZCB0b3RhbEJ5dGVzKQotewotICAgIEFTU0VSVCht
aW5EZWFkQnl0ZXMgPD0gbWF4RGVhZEJ5dGVzKTsKLSAgICBBU1NFUlQobWF4RGVhZEJ5dGVzIDw9
IHRvdGFsQnl0ZXMpOwotICAgIG1fbWluRGVhZENhcGFjaXR5ID0gbWluRGVhZEJ5dGVzOwotICAg
IG1fbWF4RGVhZENhcGFjaXR5ID0gbWF4RGVhZEJ5dGVzOwotICAgIG1fY2FwYWNpdHkgPSB0b3Rh
bEJ5dGVzOwotICAgIHBydW5lKCk7Ci19Ci0KLXZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZShDYWNo
ZWRSZXNvdXJjZSYgcmVzb3VyY2UpCi17Ci0gICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkp
OwotICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJFdmljdGluZyByZXNvdXJjZSAlcCBmb3IgJyVz
JyBmcm9tIGNhY2hlIiwgJnJlc291cmNlLCByZXNvdXJjZS51cmwoKS5zdHJpbmcoKS5sYXRpbjEo
KS5kYXRhKCkpOwotICAgIC8vIFRoZSByZXNvdXJjZSBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVt
b3ZlZCBieSBzb21lb25lIG90aGVyIHRoYW4gb3VyIGNhbGxlciwKLSAgICAvLyB3aG8gbmVlZGVk
IGEgZnJlc2ggY29weSBmb3IgYSByZWxvYWQuIFNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTI0NzkjYzY+LgotICAgIGlmIChhdXRvKiByZXNvdXJjZXMgPSBzZXNz
aW9uUmVzb3VyY2VNYXAocmVzb3VyY2Uuc2Vzc2lvbklEKCkpKSB7Ci0jaWYgRU5BQkxFKENBQ0hF
X1BBUlRJVElPTklORykKLSAgICAgICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihyZXNvdXJj
ZS51cmwoKSwgcmVzb3VyY2UuY2FjaGVQYXJ0aXRpb24oKSk7Ci0jZWxzZQotICAgICAgICBhdXRv
JiBrZXkgPSByZXNvdXJjZS51cmwoKTsKLSNlbmRpZgotICAgICAgICBpZiAocmVzb3VyY2UuaW5D
YWNoZSgpKSB7Ci0gICAgICAgICAgICAvLyBSZW1vdmUgcmVzb3VyY2UgZnJvbSB0aGUgcmVzb3Vy
Y2UgbWFwLgotICAgICAgICAgICAgcmVzb3VyY2VzLT5yZW1vdmUoa2V5KTsKLSAgICAgICAgICAg
IHJlc291cmNlLnNldEluQ2FjaGUoZmFsc2UpOwotCi0gICAgICAgICAgICAvLyBJZiB0aGUgcmVz
b3VyY2UgbWFwIGlzIG5vdyBlbXB0eSwgcmVtb3ZlIGl0IGZyb20gbV9zZXNzaW9uUmVzb3VyY2Vz
LgotICAgICAgICAgICAgaWYgKHJlc291cmNlcy0+aXNFbXB0eSgpKQotICAgICAgICAgICAgICAg
IG1fc2Vzc2lvblJlc291cmNlcy5yZW1vdmUocmVzb3VyY2Uuc2Vzc2lvbklEKCkpOwotCi0gICAg
ICAgICAgICAvLyBSZW1vdmUgZnJvbSB0aGUgYXBwcm9wcmlhdGUgTFJVIGxpc3QuCi0gICAgICAg
ICAgICByZW1vdmVGcm9tTFJVTGlzdChyZXNvdXJjZSk7Ci0gICAgICAgICAgICByZW1vdmVGcm9t
TGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KHJlc291cmNlKTsKLSAgICAgICAgICAgIGFkanVzdFNp
emUocmVzb3VyY2UuaGFzQ2xpZW50cygpLCAtc3RhdGljX2Nhc3Q8aW50PihyZXNvdXJjZS5zaXpl
KCkpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBBU1NFUlQocmVzb3VyY2VzLT5nZXQo
a2V5KSAhPSAmcmVzb3VyY2UpOwotICAgIH0KLQotICAgIHJlc291cmNlLmRlbGV0ZUlmUG9zc2li
bGUoKTsKLX0KLQotYXV0byBNZW1vcnlDYWNoZTo6bHJ1TGlzdEZvcihDYWNoZWRSZXNvdXJjZSYg
cmVzb3VyY2UpIC0+IExSVUxpc3QmCi17Ci0gICAgdW5zaWduZWQgYWNjZXNzQ291bnQgPSBzdGQ6
Om1heChyZXNvdXJjZS5hY2Nlc3NDb3VudCgpLCAxVSk7Ci0gICAgdW5zaWduZWQgcXVldWVJbmRl
eCA9IFdURjo6ZmFzdExvZzIocmVzb3VyY2Uuc2l6ZSgpIC8gYWNjZXNzQ291bnQpOwotI2lmbmRl
ZiBOREVCVUcKLSAgICByZXNvdXJjZS5tX2xydUluZGV4ID0gcXVldWVJbmRleDsKLSNlbmRpZgot
Ci0gICAgbV9hbGxSZXNvdXJjZXMucmVzZXJ2ZUNhcGFjaXR5KHF1ZXVlSW5kZXggKyAxKTsKLSAg
ICB3aGlsZSAobV9hbGxSZXNvdXJjZXMuc2l6ZSgpIDw9IHF1ZXVlSW5kZXgpCi0gICAgICAgIG1f
YWxsUmVzb3VyY2VzLnVuY2hlY2tlZEFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPExSVUxpc3Q+KCkp
OwotICAgIHJldHVybiAqbV9hbGxSZXNvdXJjZXNbcXVldWVJbmRleF07Ci19Ci0KLXZvaWQgTWVt
b3J5Q2FjaGU6OnJlbW92ZUZyb21MUlVMaXN0KENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkKLXsK
LSAgICAvLyBJZiB3ZSd2ZSBuZXZlciBiZWVuIGFjY2Vzc2VkLCB0aGVuIHdlJ3JlIGJyYW5kIG5l
dyBhbmQgbm90IGluIGFueSBsaXN0LgotICAgIGlmICghcmVzb3VyY2UuYWNjZXNzQ291bnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIHVuc2lnbmVkIG9s
ZExpc3RJbmRleCA9IHJlc291cmNlLm1fbHJ1SW5kZXg7Ci0jZW5kaWYKLQotICAgIExSVUxpc3Qm
IGxpc3QgPSBscnVMaXN0Rm9yKHJlc291cmNlKTsKLQotICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBs
aXN0IHdlIGdvdCBpcyB0aGUgbGlzdCB3ZSB3YW50LgotICAgIEFTU0VSVChyZXNvdXJjZS5tX2xy
dUluZGV4ID09IG9sZExpc3RJbmRleCk7Ci0KLSAgICBib29sIHJlbW92ZWQgPSBsaXN0LnJlbW92
ZSgmcmVzb3VyY2UpOwotICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7Ci19Ci0K
LXZvaWQgTWVtb3J5Q2FjaGU6Omluc2VydEluTFJVTGlzdChDYWNoZWRSZXNvdXJjZSYgcmVzb3Vy
Y2UpCi17Ci0gICAgQVNTRVJUKHJlc291cmNlLmluQ2FjaGUoKSk7Ci0gICAgQVNTRVJUKHJlc291
cmNlLmFjY2Vzc0NvdW50KCkgPiAwKTsKLSAgICAKLSAgICBhdXRvIGFkZFJlc3VsdCA9IGxydUxp
c3RGb3IocmVzb3VyY2UpLmFkZCgmcmVzb3VyY2UpOwotICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVz
dWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci19Ci0KLXZvaWQgTWVtb3J5Q2FjaGU6OnJlc291
cmNlQWNjZXNzZWQoQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQotewotICAgIEFTU0VSVChyZXNv
dXJjZS5pbkNhY2hlKCkpOwotICAgIAotICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIHRvIHJlbW92
ZSBiZWZvcmUgd2UgaW5jcmVhc2UgdGhlIGFjY2VzcyBjb3VudCwgc2luY2UKLSAgICAvLyB0aGUg
cXVldWUgd2lsbCBwb3NzaWJseSBjaGFuZ2UuCi0gICAgcmVtb3ZlRnJvbUxSVUxpc3QocmVzb3Vy
Y2UpOwotICAgIAotICAgIC8vIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhlIHJlc291cmNl
IGhhcyBiZWVuIGFjY2Vzc2VkLCBhZGp1c3QgdGhlIHNpemUgb2YgdGhlIGNhY2hlIHRvIGFjY291
bnQgZm9yIGl0cyBpbml0aWFsIHNpemUuCi0gICAgaWYgKCFyZXNvdXJjZS5hY2Nlc3NDb3VudCgp
KQotICAgICAgICBhZGp1c3RTaXplKHJlc291cmNlLmhhc0NsaWVudHMoKSwgcmVzb3VyY2Uuc2l6
ZSgpKTsKLSAgICAKLSAgICAvLyBBZGQgdG8gb3VyIGFjY2VzcyBjb3VudC4KLSAgICByZXNvdXJj
ZS5pbmNyZWFzZUFjY2Vzc0NvdW50KCk7Ci0gICAgCi0gICAgLy8gTm93IGluc2VydCBpbnRvIHRo
ZSBuZXcgcXVldWUuCi0gICAgaW5zZXJ0SW5MUlVMaXN0KHJlc291cmNlKTsKLX0KLQotdm9pZCBN
ZW1vcnlDYWNoZTo6cmVtb3ZlUmVzb3VyY2VzV2l0aE9yaWdpbihTZWN1cml0eU9yaWdpbiYgb3Jp
Z2luKQotewotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCi0gICAgU3RyaW5nIG9yaWdp
blBhcnRpdGlvbiA9IFJlc291cmNlUmVxdWVzdDo6cGFydGl0aW9uTmFtZShvcmlnaW4uaG9zdCgp
KTsKLSNlbmRpZgotCi0gICAgVmVjdG9yPENhY2hlZFJlc291cmNlKj4gcmVzb3VyY2VzV2l0aE9y
aWdpbjsKLSAgICBmb3IgKGF1dG8mIHJlc291cmNlcyA6IG1fc2Vzc2lvblJlc291cmNlcy52YWx1
ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogKnJlc291cmNlcykgewotICAg
ICAgICAgICAgYXV0byYgcmVzb3VyY2UgPSAqa2V5VmFsdWUudmFsdWU7Ci0jaWYgRU5BQkxFKENB
Q0hFX1BBUlRJVElPTklORykKLSAgICAgICAgICAgIGF1dG8mIHBhcnRpdGlvbk5hbWUgPSBrZXlW
YWx1ZS5rZXkuc2Vjb25kOwotICAgICAgICAgICAgaWYgKHBhcnRpdGlvbk5hbWUgPT0gb3JpZ2lu
UGFydGl0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmVzb3VyY2VzV2l0aE9yaWdpbi5hcHBlbmQo
JnJlc291cmNlKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSNl
bmRpZgotICAgICAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiByZXNvdXJjZU9yaWdpbiA9
IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUocmVzb3VyY2UudXJsKCkpOwotICAgICAgICAgICAgaWYg
KHJlc291cmNlT3JpZ2luLT5lcXVhbCgmb3JpZ2luKSkKLSAgICAgICAgICAgICAgICByZXNvdXJj
ZXNXaXRoT3JpZ2luLmFwcGVuZCgmcmVzb3VyY2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Zm9yIChhdXRvKiByZXNvdXJjZSA6IHJlc291cmNlc1dpdGhPcmlnaW4pCi0gICAgICAgIHJlbW92
ZSgqcmVzb3VyY2UpOwotfQotCi12b2lkIE1lbW9yeUNhY2hlOjpyZW1vdmVSZXNvdXJjZXNXaXRo
T3JpZ2lucyhTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBIYXNoU2V0PFJlZlB0cjxTZWN1cml0
eU9yaWdpbj4+JiBvcmlnaW5zKQotewotICAgIGF1dG8qIHJlc291cmNlTWFwID0gc2Vzc2lvblJl
c291cmNlTWFwKHNlc3Npb25JRCk7Ci0gICAgaWYgKCFyZXNvdXJjZU1hcCkKLSAgICAgICAgcmV0
dXJuOwotCi0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKLSAgICBIYXNoU2V0PFN0cmlu
Zz4gb3JpZ2luUGFydGl0aW9uczsKLQotICAgIGZvciAoYXV0byYgb3JpZ2luIDogb3JpZ2lucykK
LSAgICAgICAgb3JpZ2luUGFydGl0aW9ucy5hZGQoUmVzb3VyY2VSZXF1ZXN0OjpwYXJ0aXRpb25O
YW1lKG9yaWdpbi0+aG9zdCgpKSk7Ci0jZW5kaWYKLQotICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJj
ZSo+IHJlc291cmNlc1RvUmVtb3ZlOwotICAgIGZvciAoYXV0byYga2V5VmFsdWVQYWlyIDogKnJl
c291cmNlTWFwKSB7Ci0gICAgICAgIGF1dG8mIHJlc291cmNlID0gKmtleVZhbHVlUGFpci52YWx1
ZTsKLQotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCi0gICAgICAgIGF1dG8mIHBhcnRp
dGlvbk5hbWUgPSBrZXlWYWx1ZVBhaXIua2V5LnNlY29uZDsKLSAgICAgICAgaWYgKG9yaWdpblBh
cnRpdGlvbnMuY29udGFpbnMocGFydGl0aW9uTmFtZSkpIHsKLSAgICAgICAgICAgIHJlc291cmNl
c1RvUmVtb3ZlLmFwcGVuZCgmcmVzb3VyY2UpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLSNlbmRpZgotCi0gICAgICAgIGlmIChvcmlnaW5zLmNvbnRhaW5zKFNlY3VyaXR5T3Jp
Z2luOjpjcmVhdGUocmVzb3VyY2UudXJsKCkpLnB0cigpKSkKLSAgICAgICAgICAgIHJlc291cmNl
c1RvUmVtb3ZlLmFwcGVuZCgmcmVzb3VyY2UpOwotICAgIH0KLQotICAgIGZvciAoYXV0byYgcmVz
b3VyY2UgOiByZXNvdXJjZXNUb1JlbW92ZSkKLSAgICAgICAgcmVtb3ZlKCpyZXNvdXJjZSk7Ci19
Ci0KLXZvaWQgTWVtb3J5Q2FjaGU6OmdldE9yaWdpbnNXaXRoQ2FjaGUoU2VjdXJpdHlPcmlnaW5T
ZXQmIG9yaWdpbnMpCi17Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBodHRwU3RyaW5nKCJodHRwIik7Ci0jZW5kaWYKLSAg
ICBmb3IgKGF1dG8mIHJlc291cmNlcyA6IG1fc2Vzc2lvblJlc291cmNlcy52YWx1ZXMoKSkgewot
ICAgICAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogKnJlc291cmNlcykgewotICAgICAgICAgICAg
YXV0byYgcmVzb3VyY2UgPSAqa2V5VmFsdWUudmFsdWU7Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJ
VElPTklORykKLSAgICAgICAgICAgIGF1dG8mIHBhcnRpdGlvbk5hbWUgPSBrZXlWYWx1ZS5rZXku
c2Vjb25kOwotICAgICAgICAgICAgaWYgKCFwYXJ0aXRpb25OYW1lLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgICAgICBvcmlnaW5zLmFkZChTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKGh0dHBTdHJpbmcs
IHBhcnRpdGlvbk5hbWUsIDApKTsKLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAg
ICAgb3JpZ2lucy5hZGQoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShyZXNvdXJjZS51cmwoKSkpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi1IYXNoU2V0PFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+IE1l
bW9yeUNhY2hlOjpvcmlnaW5zV2l0aENhY2hlKFNlc3Npb25JRCBzZXNzaW9uSUQpIGNvbnN0Ci17
Ci0gICAgSGFzaFNldDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+PiBvcmlnaW5zOwotCi0gICAgYXV0
byBpdCA9IG1fc2Vzc2lvblJlc291cmNlcy5maW5kKHNlc3Npb25JRCk7Ci0gICAgaWYgKGl0ICE9
IG1fc2Vzc2lvblJlc291cmNlcy5lbmQoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGtleVZhbHVl
IDogKml0LT52YWx1ZSkgewotICAgICAgICAgICAgYXV0byYgcmVzb3VyY2UgPSAqa2V5VmFsdWUu
dmFsdWU7Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKLSAgICAgICAgICAgIGF1dG8m
IHBhcnRpdGlvbk5hbWUgPSBrZXlWYWx1ZS5rZXkuc2Vjb25kOwotICAgICAgICAgICAgaWYgKCFw
YXJ0aXRpb25OYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBvcmlnaW5zLmFkZChTZWN1
cml0eU9yaWdpbjo6Y3JlYXRlKCJodHRwIiwgcGFydGl0aW9uTmFtZSwgMCkpOwotICAgICAgICAg
ICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICBvcmlnaW5zLmFkZChTZWN1cml0eU9yaWdpbjo6
Y3JlYXRlKHJlc291cmNlLnVybCgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
b3JpZ2luczsKLX0KLQotdm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlRnJvbUxpdmVEZWNvZGVkUmVz
b3VyY2VzTGlzdChDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpCi17Ci0gICAgbV9saXZlRGVjb2Rl
ZFJlc291cmNlcy5yZW1vdmUoJnJlc291cmNlKTsKLX0KLQotdm9pZCBNZW1vcnlDYWNoZTo6aW5z
ZXJ0SW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QoQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQot
ewotICAgIC8vIE1ha2Ugc3VyZSB3ZSBhcmVuJ3QgaW4gdGhlIGxpc3QgYWxyZWFkeS4KLSAgICBB
U1NFUlQoIW1fbGl2ZURlY29kZWRSZXNvdXJjZXMuY29udGFpbnMoJnJlc291cmNlKSk7Ci0gICAg
bV9saXZlRGVjb2RlZFJlc291cmNlcy5hZGQoJnJlc291cmNlKTsKLX0KLQotdm9pZCBNZW1vcnlD
YWNoZTo6YWRkVG9MaXZlUmVzb3VyY2VzU2l6ZShDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpCi17
Ci0gICAgbV9saXZlU2l6ZSArPSByZXNvdXJjZS5zaXplKCk7Ci0gICAgbV9kZWFkU2l6ZSAtPSBy
ZXNvdXJjZS5zaXplKCk7Ci19Ci0KLXZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZUZyb21MaXZlUmVz
b3VyY2VzU2l6ZShDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpCi17Ci0gICAgbV9saXZlU2l6ZSAt
PSByZXNvdXJjZS5zaXplKCk7Ci0gICAgbV9kZWFkU2l6ZSArPSByZXNvdXJjZS5zaXplKCk7Ci19
Ci0KLXZvaWQgTWVtb3J5Q2FjaGU6OmFkanVzdFNpemUoYm9vbCBsaXZlLCBpbnQgZGVsdGEpCi17
Ci0gICAgaWYgKGxpdmUpIHsKLSAgICAgICAgQVNTRVJUKGRlbHRhID49IDAgfHwgKChpbnQpbV9s
aXZlU2l6ZSArIGRlbHRhID49IDApKTsKLSAgICAgICAgbV9saXZlU2l6ZSArPSBkZWx0YTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBBU1NFUlQoZGVsdGEgPj0gMCB8fCAoKGludCltX2RlYWRTaXpl
ICsgZGVsdGEgPj0gMCkpOwotICAgICAgICBtX2RlYWRTaXplICs9IGRlbHRhOwotICAgIH0KLX0K
LQotdm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlUmVxdWVzdEZyb21TZXNzaW9uQ2FjaGVzKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCkKLXsKLSAgICBpZiAoaXM8V29ya2VyR2xvYmFsU2NvcGU+KGNvbnRleHQpKSB7Ci0gICAgICAg
IGRvd25jYXN0PFdvcmtlckdsb2JhbFNjb3BlPihjb250ZXh0KS50aHJlYWQoKS53b3JrZXJMb2Fk
ZXJQcm94eSgpLnBvc3RUYXNrVG9Mb2FkZXIoW3JlcXVlc3QgPSByZXF1ZXN0Lmlzb2xhdGVkQ29w
eSgpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewotICAgICAgICAgICAgTWVt
b3J5Q2FjaGU6OnJlbW92ZVJlcXVlc3RGcm9tU2Vzc2lvbkNhY2hlcyhjb250ZXh0LCByZXF1ZXN0
KTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvJiBtZW1v
cnlDYWNoZSA9IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKTsKLSAgICBmb3IgKGF1dG8mIHJlc291
cmNlcyA6IG1lbW9yeUNhY2hlLm1fc2Vzc2lvblJlc291cmNlcykgewotICAgICAgICBpZiAoQ2Fj
aGVkUmVzb3VyY2UqIHJlc291cmNlID0gbWVtb3J5Q2FjaGUucmVzb3VyY2VGb3JSZXF1ZXN0SW1w
bChyZXF1ZXN0LCAqcmVzb3VyY2VzLnZhbHVlKSkKLSAgICAgICAgICAgIG1lbW9yeUNhY2hlLnJl
bW92ZSgqcmVzb3VyY2UpOwotICAgIH0KLX0KLQotdm9pZCBNZW1vcnlDYWNoZTo6VHlwZVN0YXRp
c3RpYzo6YWRkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQotewotICAgIGNvdW50
Kys7Ci0gICAgc2l6ZSArPSByZXNvdXJjZS5zaXplKCk7Ci0gICAgbGl2ZVNpemUgKz0gcmVzb3Vy
Y2UuaGFzQ2xpZW50cygpID8gcmVzb3VyY2Uuc2l6ZSgpIDogMDsKLSAgICBkZWNvZGVkU2l6ZSAr
PSByZXNvdXJjZS5kZWNvZGVkU2l6ZSgpOwotfQotCi1NZW1vcnlDYWNoZTo6U3RhdGlzdGljcyBN
ZW1vcnlDYWNoZTo6Z2V0U3RhdGlzdGljcygpCi17Ci0gICAgU3RhdGlzdGljcyBzdGF0czsKLQot
ICAgIGZvciAoYXV0byYgcmVzb3VyY2VzIDogbV9zZXNzaW9uUmVzb3VyY2VzLnZhbHVlcygpKSB7
Ci0gICAgICAgIGZvciAoYXV0byogcmVzb3VyY2UgOiByZXNvdXJjZXMtPnZhbHVlcygpKSB7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKHJlc291cmNlLT50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2Ug
Q2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6Ci0gICAgICAgICAgICAgICAgc3RhdHMuaW1h
Z2VzLmFkZFJlc291cmNlKCpyZXNvdXJjZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OgotICAgICAgICAgICAg
ICAgIHN0YXRzLmNzc1N0eWxlU2hlZXRzLmFkZFJlc291cmNlKCpyZXNvdXJjZSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6
Ci0gICAgICAgICAgICAgICAgc3RhdHMuc2NyaXB0cy5hZGRSZXNvdXJjZSgqcmVzb3VyY2UpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShYU0xUKQotICAgICAgICAgICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldDoKLSAgICAgICAgICAgICAgICBzdGF0cy54
c2xTdHlsZVNoZWV0cy5hZGRSZXNvdXJjZSgqcmVzb3VyY2UpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotI2VuZGlmCi0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICAgICAgICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OlNWR0ZvbnRSZXNvdXJjZToKLSNlbmRpZgotICAgICAgICAgICAgY2FzZSBD
YWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlOgotICAgICAgICAgICAgICAgIHN0YXRzLmZvbnRz
LmFkZFJlc291cmNlKCpyZXNvdXJjZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotICAgIHJldHVybiBzdGF0czsKLX0KLQotdm9pZCBNZW1vcnlDYWNoZTo6
c2V0RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKLXsKLSAgICBtX2Rpc2FibGVkID0gZGlzYWJsZWQ7
Ci0gICAgaWYgKCFtX2Rpc2FibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3aGlsZSAoIW1f
c2Vzc2lvblJlc291cmNlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byYgcmVzb3VyY2VzID0g
Km1fc2Vzc2lvblJlc291cmNlcy5iZWdpbigpLT52YWx1ZTsKLSAgICAgICAgQVNTRVJUKCFyZXNv
dXJjZXMuaXNFbXB0eSgpKTsKLSAgICAgICAgcmVtb3ZlKCpyZXNvdXJjZXMuYmVnaW4oKS0+dmFs
dWUpOwotICAgIH0KLX0KLQotdm9pZCBNZW1vcnlDYWNoZTo6ZXZpY3RSZXNvdXJjZXMoKQotewot
ICAgIGlmIChkaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXREaXNhYmxlZCh0
cnVlKTsKLSAgICBzZXREaXNhYmxlZChmYWxzZSk7Ci19Ci0KLXZvaWQgTWVtb3J5Q2FjaGU6OmV2
aWN0UmVzb3VyY2VzKFNlc3Npb25JRCBzZXNzaW9uSUQpCi17Ci0gICAgaWYgKGRpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGZvckVhY2hTZXNzaW9uUmVzb3VyY2Uoc2Vzc2lvbklE
LCBbdGhpc10gKENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkgeyByZW1vdmUocmVzb3VyY2UpOyB9
KTsKLQotICAgIEFTU0VSVCghbV9zZXNzaW9uUmVzb3VyY2VzLmNvbnRhaW5zKHNlc3Npb25JRCkp
OwotfQotCi1ib29sIE1lbW9yeUNhY2hlOjpuZWVkc1BydW5pbmcoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2xpdmVTaXplICsgbV9kZWFkU2l6ZSA+IG1fY2FwYWNpdHkgfHwgbV9kZWFkU2l6ZSA+
IG1fbWF4RGVhZENhcGFjaXR5OwotfQotCi12b2lkIE1lbW9yeUNhY2hlOjpwcnVuZSgpCi17Ci0g
ICAgaWYgKCFuZWVkc1BydW5pbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBw
cnVuZURlYWRSZXNvdXJjZXMoKTsgLy8gUHJ1bmUgZGVhZCBmaXJzdCwgaW4gY2FzZSBpdCB3YXMg
ImJvcnJvd2luZyIgY2FwYWNpdHkgZnJvbSBsaXZlLgotICAgIHBydW5lTGl2ZVJlc291cmNlcygp
OwotfQotCi12b2lkIE1lbW9yeUNhY2hlOjpwcnVuZVNvb24oKQotewotICAgICBpZiAobV9wcnVu
ZVRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAgaWYgKCFuZWVkc1BydW5p
bmcoKSkKLSAgICAgICAgIHJldHVybjsKLSAgICAgbV9wcnVuZVRpbWVyLnN0YXJ0T25lU2hvdCgw
KTsKLX0KLQotI2lmbmRlZiBOREVCVUcKLXZvaWQgTWVtb3J5Q2FjaGU6OmR1bXBTdGF0cygpCi17
Ci0gICAgU3RhdGlzdGljcyBzID0gZ2V0U3RhdGlzdGljcygpOwotICAgIHByaW50ZigiJS0xM3Mg
JS0xM3MgJS0xM3MgJS0xM3MgJS0xM3NcbiIsICIiLCAiQ291bnQiLCAiU2l6ZSIsICJMaXZlU2l6
ZSIsICJEZWNvZGVkU2l6ZSIpOwotICAgIHByaW50ZigiJS0xM3MgJS0xM3MgJS0xM3MgJS0xM3Mg
JS0xM3NcbiIsICItLS0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0t
LSIsICItLS0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tLS0iKTsKLSAgICBwcmludGYoIiUtMTNz
ICUxM2QgJTEzZCAlMTNkICUxM2RcbiIsICJJbWFnZXMiLCBzLmltYWdlcy5jb3VudCwgcy5pbWFn
ZXMuc2l6ZSwgcy5pbWFnZXMubGl2ZVNpemUsIHMuaW1hZ2VzLmRlY29kZWRTaXplKTsKLSAgICBw
cmludGYoIiUtMTNzICUxM2QgJTEzZCAlMTNkICUxM2RcbiIsICJDU1MiLCBzLmNzc1N0eWxlU2hl
ZXRzLmNvdW50LCBzLmNzc1N0eWxlU2hlZXRzLnNpemUsIHMuY3NzU3R5bGVTaGVldHMubGl2ZVNp
emUsIHMuY3NzU3R5bGVTaGVldHMuZGVjb2RlZFNpemUpOwotI2lmIEVOQUJMRShYU0xUKQotICAg
IHByaW50ZigiJS0xM3MgJTEzZCAlMTNkICUxM2QgJTEzZFxuIiwgIlhTTCIsIHMueHNsU3R5bGVT
aGVldHMuY291bnQsIHMueHNsU3R5bGVTaGVldHMuc2l6ZSwgcy54c2xTdHlsZVNoZWV0cy5saXZl
U2l6ZSwgcy54c2xTdHlsZVNoZWV0cy5kZWNvZGVkU2l6ZSk7Ci0jZW5kaWYKLSAgICBwcmludGYo
IiUtMTNzICUxM2QgJTEzZCAlMTNkICUxM2RcbiIsICJKYXZhU2NyaXB0Iiwgcy5zY3JpcHRzLmNv
dW50LCBzLnNjcmlwdHMuc2l6ZSwgcy5zY3JpcHRzLmxpdmVTaXplLCBzLnNjcmlwdHMuZGVjb2Rl
ZFNpemUpOwotICAgIHByaW50ZigiJS0xM3MgJTEzZCAlMTNkICUxM2QgJTEzZFxuIiwgIkZvbnRz
Iiwgcy5mb250cy5jb3VudCwgcy5mb250cy5zaXplLCBzLmZvbnRzLmxpdmVTaXplLCBzLmZvbnRz
LmRlY29kZWRTaXplKTsKLSAgICBwcmludGYoIiUtMTNzICUtMTNzICUtMTNzICUtMTNzICUtMTNz
XG5cbiIsICItLS0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0tLSIs
ICItLS0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tLS0iKTsKLX0KLQotdm9pZCBNZW1vcnlDYWNo
ZTo6ZHVtcExSVUxpc3RzKGJvb2wgaW5jbHVkZUxpdmUpIGNvbnN0Ci17Ci0gICAgcHJpbnRmKCJM
UlUtU1AgbGlzdHMgaW4gZXZpY3Rpb24gb3JkZXIgKEtpbG9ieXRlcyBkZWNvZGVkLCBLaWxvYnl0
ZXMgZW5jb2RlZCwgQWNjZXNzIGNvdW50LCBSZWZlcmVuY2VkKTpcbiIpOwotCi0gICAgaW50IHNp
emUgPSBtX2FsbFJlc291cmNlcy5zaXplKCk7Ci0gICAgZm9yIChpbnQgaSA9IHNpemUgLSAxOyBp
ID49IDA7IGktLSkgewotICAgICAgICBwcmludGYoIlxuXG5MaXN0ICVkOiAiLCBpKTsKLSAgICAg
ICAgZm9yIChhdXRvKiByZXNvdXJjZSA6ICptX2FsbFJlc291cmNlc1tpXSkgewotICAgICAgICAg
ICAgaWYgKGluY2x1ZGVMaXZlIHx8ICFyZXNvdXJjZS0+aGFzQ2xpZW50cygpKQotICAgICAgICAg
ICAgICAgIHByaW50ZigiKCUuMWZLLCAlLjFmSywgJXVBLCAlZFIpOyAiLCByZXNvdXJjZS0+ZGVj
b2RlZFNpemUoKSAvIDEwMjQuMGYsIChyZXNvdXJjZS0+ZW5jb2RlZFNpemUoKSArIHJlc291cmNl
LT5vdmVyaGVhZFNpemUoKSkgLyAxMDI0LjBmLCByZXNvdXJjZS0+YWNjZXNzQ291bnQoKSwgcmVz
b3VyY2UtPmhhc0NsaWVudHMoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0jZW5kaWYKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL01lbW9yeUNhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2Fj
aGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJlMTc0N2MyYTNiYWViNWY5YTBh
OGJmNTc5OTRhNzEyOTA0NTc0Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaAorKysg
L2Rldi9udWxsCkBAIC0xLDIyNSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMTk5OCBM
YXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHlyaWdodCAoQykgMjAwMSBE
aXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotICAg
IFRoaXMgY2xhc3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5n
IGltYWdlcywgc3R5bGUgc2hlZXRzIGFuZCBodG1sCi0gICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJ
dCBoYXMgYSBtZW1vcnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCi0qLwotCi0jaWZuZGVmIENh
Y2hlX2gKLSNkZWZpbmUgQ2FjaGVfaAotCi0jaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKLSNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbkhhc2guaCIKLSNpbmNsdWRlICJTZXNzaW9uSUQuaCIKLSNp
bmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9MaXN0
SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlICB7Ci0KLWNsYXNzIENhY2hl
ZFJlc291cmNlOwotY2xhc3MgVVJMOwotY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwotY2xhc3MgUmVz
b3VyY2VSZXNwb25zZTsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci1jbGFzcyBTZWN1
cml0eU9yaWdpbjsKLQotLy8gVGhpcyBjYWNoZSBob2xkcyBzdWJyZXNvdXJjZXMgdXNlZCBieSBX
ZWIgcGFnZXM6IGltYWdlcywgc2NyaXB0cywgc3R5bGVzaGVldHMsIGV0Yy4KLQotLy8gVGhlIGNh
Y2hlIGtlZXBzIGEgZmxleGlibGUgYnV0IGJvdW5kZWQgd2luZG93IG9mIGRlYWQgcmVzb3VyY2Vz
IHRoYXQgZ3Jvd3Mvc2hyaW5rcyAKLS8vIGRlcGVuZGluZyBvbiB0aGUgbGl2ZSByZXNvdXJjZSBs
b2FkLiBIZXJlJ3MgYW4gZXhhbXBsZSBvZiBjYWNoZSBncm93dGggb3ZlciB0aW1lLAotLy8gd2l0
aCBhIG1pbiBkZWFkIHJlc291cmNlIGNhcGFjaXR5IG9mIDI1JSBhbmQgYSBtYXggZGVhZCByZXNv
dXJjZSBjYXBhY2l0eSBvZiA1MCU6Ci0KLS8vICAgICAgICB8LS0tLS18ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRGVhZDogLQotLy8gICAgICAgIHwtLS0tLS0tLS0tfCAgICAgICAgICAg
ICAgICAgICAgICAgICBMaXZlOiArCi0vLyAgICAgIC0tfC0tLS0tLS0tLS18ICAgICAgICAgICAg
ICAgICAgICAgICAgIENhY2hlIGJvdW5kYXJ5OiB8IChvYmplY3RzIG91dHNpZGUgdGhpcyBtYXJr
IGhhdmUgYmVlbiBldmljdGVkKQotLy8gICAgICAtLXwtLS0tLS0tLS0tKysrKysrKysrK3wKLS8v
IC0tLS0tLS18LS0tLS0rKysrKysrKysrKysrKyt8Ci0vLyAtLS0tLS0tfC0tLS0tKysrKysrKysr
KysrKysrfCsrKysrCi0KLWNsYXNzIE1lbW9yeUNhY2hlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShNZW1vcnlDYWNoZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIGZyaWVuZCBO
ZXZlckRlc3Ryb3llZDxNZW1vcnlDYWNoZT47Ci0gICAgZnJpZW5kIGNsYXNzIEludGVybmFsczsK
LXB1YmxpYzoKLSAgICBzdHJ1Y3QgVHlwZVN0YXRpc3RpYyB7Ci0gICAgICAgIGludCBjb3VudDsK
LSAgICAgICAgaW50IHNpemU7Ci0gICAgICAgIGludCBsaXZlU2l6ZTsKLSAgICAgICAgaW50IGRl
Y29kZWRTaXplOwotCi0gICAgICAgIFR5cGVTdGF0aXN0aWMoKQotICAgICAgICAgICAgOiBjb3Vu
dCgwKQotICAgICAgICAgICAgLCBzaXplKDApCi0gICAgICAgICAgICAsIGxpdmVTaXplKDApCi0g
ICAgICAgICAgICAsIGRlY29kZWRTaXplKDApCi0gICAgICAgIHsgCi0gICAgICAgIH0KLQotICAg
ICAgICB2b2lkIGFkZFJlc291cmNlKENhY2hlZFJlc291cmNlJik7Ci0gICAgfTsKLSAgICAKLSAg
ICBzdHJ1Y3QgU3RhdGlzdGljcyB7Ci0gICAgICAgIFR5cGVTdGF0aXN0aWMgaW1hZ2VzOwotICAg
ICAgICBUeXBlU3RhdGlzdGljIGNzc1N0eWxlU2hlZXRzOwotICAgICAgICBUeXBlU3RhdGlzdGlj
IHNjcmlwdHM7Ci0gICAgICAgIFR5cGVTdGF0aXN0aWMgeHNsU3R5bGVTaGVldHM7Ci0gICAgICAg
IFR5cGVTdGF0aXN0aWMgZm9udHM7Ci0gICAgfTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBNZW1vcnlDYWNoZSYgc2luZ2xldG9uKCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBDYWNoZWRS
ZXNvdXJjZSogcmVzb3VyY2VGb3JSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFNlc3Np
b25JRCk7Ci0KLSAgICBib29sIGFkZChDYWNoZWRSZXNvdXJjZSYpOwotICAgIHZvaWQgcmVtb3Zl
KENhY2hlZFJlc291cmNlJik7Ci0KLSAgICBzdGF0aWMgVVJMIHJlbW92ZUZyYWdtZW50SWRlbnRp
ZmllcklmTmVlZGVkKGNvbnN0IFVSTCYgb3JpZ2luYWxVUkwpOwotICAgIAotICAgIHZvaWQgcmV2
YWxpZGF0aW9uU3VjY2VlZGVkKENhY2hlZFJlc291cmNlJiByZXZhbGlkYXRpbmdSZXNvdXJjZSwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgIHZvaWQgcmV2YWxpZGF0aW9uRmFpbGVkKENh
Y2hlZFJlc291cmNlJiByZXZhbGlkYXRpbmdSZXNvdXJjZSk7Ci0KLSAgICB2b2lkIGZvckVhY2hS
ZXNvdXJjZShjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoQ2FjaGVkUmVzb3VyY2UmKT4mKTsKLSAg
ICB2b2lkIGZvckVhY2hTZXNzaW9uUmVzb3VyY2UoU2Vzc2lvbklELCBjb25zdCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoQ2FjaGVkUmVzb3VyY2UmKT4mKTsKLSAgICB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0
YUZvckFsbEltYWdlcygpOwotICAgIAotICAgIC8vIFNldHMgdGhlIGNhY2hlJ3MgbWVtb3J5IGNh
cGFjaXRpZXMsIGluIGJ5dGVzLiBUaGVzZSB3aWxsIGhvbGQgb25seSBhcHByb3hpbWF0ZWx5LCAK
LSAgICAvLyBzaW5jZSB0aGUgZGVjb2RlZCBjb3N0IG9mIHJlc291cmNlcyBsaWtlIHNjcmlwdHMg
YW5kIHN0eWxlc2hlZXRzIGlzIG5vdCBrbm93bi4KLSAgICAvLyAgLSBtaW5EZWFkQnl0ZXM6IFRo
ZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGF0IGRlYWQgcmVzb3VyY2VzIHNob3VsZCBjb25z
dW1lIHdoZW4gdGhlIGNhY2hlIGlzIHVuZGVyIHByZXNzdXJlLgotICAgIC8vICAtIG1heERlYWRC
eXRlczogVGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgZGVhZCByZXNvdXJjZXMgc2hv
dWxkIGNvbnN1bWUgd2hlbiB0aGUgY2FjaGUgaXMgbm90IHVuZGVyIHByZXNzdXJlLgotICAgIC8v
ICAtIHRvdGFsQnl0ZXM6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGF0IHRoZSBjYWNo
ZSBzaG91bGQgY29uc3VtZSBvdmVyYWxsLgotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q2Fw
YWNpdGllcyh1bnNpZ25lZCBtaW5EZWFkQnl0ZXMsIHVuc2lnbmVkIG1heERlYWRCeXRlcywgdW5z
aWduZWQgdG90YWxCeXRlcyk7Ci0KLSAgICAvLyBUdXJuIHRoZSBjYWNoZSBvbiBhbmQgb2ZmLiAg
RGlzYWJsaW5nIHRoZSBjYWNoZSB3aWxsIHJlbW92ZSBhbGwgcmVzb3VyY2VzIGZyb20gdGhlIGNh
Y2hlLiAgVGhleSBtYXkKLSAgICAvLyBzdGlsbCBsaXZlIG9uIGlmIHRoZXkgYXJlIHJlZmVyZW5j
ZWQgYnkgc29tZSBXZWIgcGFnZSB0aG91Z2guCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRE
aXNhYmxlZChib29sKTsKLSAgICBib29sIGRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kaXNh
YmxlZDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBldmljdFJlc291cmNlcygpOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZXZpY3RSZXNvdXJjZXMoU2Vzc2lvbklEKTsKLSAgICAKLSAg
ICB2b2lkIHBydW5lKCk7Ci0gICAgdm9pZCBwcnVuZVNvb24oKTsKLSAgICB1bnNpZ25lZCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9saXZlU2l6ZSArIG1fZGVhZFNpemU7IH0KLQotICAgIHZvaWQg
c2V0RGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbChzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzIGludGVydmFsKSB7IG1fZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCA9IGludGVy
dmFsOyB9Ci0gICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBkZWFkRGVjb2RlZERhdGFEZWxl
dGlvbkludGVydmFsKCkgY29uc3QgeyByZXR1cm4gbV9kZWFkRGVjb2RlZERhdGFEZWxldGlvbklu
dGVydmFsOyB9Ci0KLSAgICAvLyBDYWxscyB0byBwdXQgdGhlIGNhY2hlZCByZXNvdXJjZSBpbnRv
IGFuZCBvdXQgb2YgTFJVIGxpc3RzLgotICAgIHZvaWQgaW5zZXJ0SW5MUlVMaXN0KENhY2hlZFJl
c291cmNlJik7Ci0gICAgdm9pZCByZW1vdmVGcm9tTFJVTGlzdChDYWNoZWRSZXNvdXJjZSYpOwot
Ci0gICAgLy8gQ2FsbGVkIHRvIGFkanVzdCB0aGUgY2FjaGUgdG90YWxzIHdoZW4gYSByZXNvdXJj
ZSBjaGFuZ2VzIHNpemUuCi0gICAgdm9pZCBhZGp1c3RTaXplKGJvb2wgbGl2ZSwgaW50IGRlbHRh
KTsKLQotICAgIC8vIFRyYWNrIGRlY29kZWQgcmVzb3VyY2VzIHRoYXQgYXJlIGluIHRoZSBjYWNo
ZSBhbmQgcmVmZXJlbmNlZCBieSBhIFdlYiBwYWdlLgotICAgIHZvaWQgaW5zZXJ0SW5MaXZlRGVj
b2RlZFJlc291cmNlc0xpc3QoQ2FjaGVkUmVzb3VyY2UmKTsKLSAgICB2b2lkIHJlbW92ZUZyb21M
aXZlRGVjb2RlZFJlc291cmNlc0xpc3QoQ2FjaGVkUmVzb3VyY2UmKTsKLQotICAgIHZvaWQgYWRk
VG9MaXZlUmVzb3VyY2VzU2l6ZShDYWNoZWRSZXNvdXJjZSYpOwotICAgIHZvaWQgcmVtb3ZlRnJv
bUxpdmVSZXNvdXJjZXNTaXplKENhY2hlZFJlc291cmNlJik7Ci0KLSAgICBzdGF0aWMgdm9pZCBy
ZW1vdmVSZXF1ZXN0RnJvbVNlc3Npb25DYWNoZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYpOwotCi0gICAgLy8gRnVuY3Rpb24gdG8gY29sbGVjdCBjYWNo
ZSBzdGF0aXN0aWNzIGZvciB0aGUgY2FjaGVzIHdpbmRvdyBpbiB0aGUgU2FmYXJpIERlYnVnIG1l
bnUuCi0gICAgV0VCQ09SRV9FWFBPUlQgU3RhdGlzdGljcyBnZXRTdGF0aXN0aWNzKCk7Ci0gICAg
Ci0gICAgdm9pZCByZXNvdXJjZUFjY2Vzc2VkKENhY2hlZFJlc291cmNlJik7Ci0gICAgYm9vbCBp
bkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdChDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpIGNvbnN0
IHsgcmV0dXJuIG1fbGl2ZURlY29kZWRSZXNvdXJjZXMuY29udGFpbnMoJnJlc291cmNlKTsgfQot
Ci0gICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+IFNlY3VyaXR5T3Jp
Z2luU2V0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlUmVzb3VyY2VzV2l0aE9yaWdp
bihTZWN1cml0eU9yaWdpbiYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlUmVzb3Vy
Y2VzV2l0aE9yaWdpbnMoU2Vzc2lvbklELCBjb25zdCBIYXNoU2V0PFJlZlB0cjxTZWN1cml0eU9y
aWdpbj4+Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRPcmlnaW5zV2l0aENhY2hlKFNl
Y3VyaXR5T3JpZ2luU2V0JiBvcmlnaW5zKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBIYXNoU2V0PFJl
ZlB0cjxTZWN1cml0eU9yaWdpbj4+IG9yaWdpbnNXaXRoQ2FjaGUoU2Vzc2lvbklEKSBjb25zdDsK
LQotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgYWRkSW1hZ2VUb0NhY2hlKE5hdGl2ZUltYWdlUHRy
JiYsIGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYgZG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24pOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlSW1hZ2VGcm9tQ2FjaGUoY29uc3QgVVJMJiwg
Y29uc3QgU3RyaW5nJiBkb21haW5Gb3JDYWNoZVBhcnRpdGlvbik7Ci0KLSAgICAvLyBwcnVuZURl
YWQqKCkgLSBGbHVzaCBkZWNvZGVkIGFuZCBlbmNvZGVkIGRhdGEgZnJvbSByZXNvdXJjZXMgbm90
IHJlZmVyZW5jZWQgYnkgV2ViIHBhZ2VzLgotICAgIC8vIHBydW5lTGl2ZSooKSAtIEZsdXNoIGRl
Y29kZWQgZGF0YSBmcm9tIHJlc291cmNlcyBzdGlsbCByZWZlcmVuY2VkIGJ5IFdlYiBwYWdlcy4K
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBydW5lRGVhZFJlc291cmNlcygpOyAvLyBBdXRvbWF0
aWNhbGx5IGRlY2lkZSBob3cgbXVjaCB0byBwcnVuZS4KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHBydW5lTGl2ZVJlc291cmNlcyhib29sIHNob3VsZERlc3Ryb3lEZWNvZGVkRGF0YUZvckFsbExp
dmVSZXNvdXJjZXMgPSBmYWxzZSk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBydW5lRGVh
ZFJlc291cmNlc1RvU2l6ZSh1bnNpZ25lZCB0YXJnZXRTaXplKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHBydW5lTGl2ZVJlc291cmNlc1RvU2l6ZSh1bnNpZ25lZCB0YXJnZXRTaXplLCBib29s
IHNob3VsZERlc3Ryb3lEZWNvZGVkRGF0YUZvckFsbExpdmVSZXNvdXJjZXMgPSBmYWxzZSk7Ci0K
LXByaXZhdGU6Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKLSAgICB0eXBlZGVmIEhh
c2hNYXA8c3RkOjpwYWlyPFVSTCwgU3RyaW5nIC8qIHBhcnRpdGlvbk5hbWUgKi8+LCBDYWNoZWRS
ZXNvdXJjZSo+IENhY2hlZFJlc291cmNlTWFwOwotI2Vsc2UKLSAgICB0eXBlZGVmIEhhc2hNYXA8
VVJMLCBDYWNoZWRSZXNvdXJjZSo+IENhY2hlZFJlc291cmNlTWFwOwotI2VuZGlmCi0gICAgdHlw
ZWRlZiBMaXN0SGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+IExSVUxpc3Q7Ci0KLSAgICBNZW1vcnlD
YWNoZSgpOwotICAgIH5NZW1vcnlDYWNoZSgpOyAvLyBOb3QgaW1wbGVtZW50ZWQgdG8gbWFrZSBz
dXJlIG5vYm9keSBhY2NpZGVudGFsbHkgY2FsbHMgZGVsZXRlIC0tIFdlYkNvcmUgZG9lcyBub3Qg
ZGVsZXRlIHNpbmdsZXRvbnMuCi0KLSAgICBMUlVMaXN0JiBscnVMaXN0Rm9yKENhY2hlZFJlc291
cmNlJik7Ci0jaWZuZGVmIE5ERUJVRwotICAgIHZvaWQgZHVtcFN0YXRzKCk7Ci0gICAgdm9pZCBk
dW1wTFJVTGlzdHMoYm9vbCBpbmNsdWRlTGl2ZSkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIHVuc2ln
bmVkIGxpdmVDYXBhY2l0eSgpIGNvbnN0OwotICAgIHVuc2lnbmVkIGRlYWRDYXBhY2l0eSgpIGNv
bnN0OwotICAgIGJvb2wgbmVlZHNQcnVuaW5nKCkgY29uc3Q7Ci0KLSAgICBDYWNoZWRSZXNvdXJj
ZSogcmVzb3VyY2VGb3JSZXF1ZXN0SW1wbChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBDYWNoZWRS
ZXNvdXJjZU1hcCYpOwotCi0gICAgQ2FjaGVkUmVzb3VyY2VNYXAmIGVuc3VyZVNlc3Npb25SZXNv
dXJjZU1hcChTZXNzaW9uSUQpOwotICAgIENhY2hlZFJlc291cmNlTWFwKiBzZXNzaW9uUmVzb3Vy
Y2VNYXAoU2Vzc2lvbklEKSBjb25zdDsKLQotICAgIGJvb2wgbV9kaXNhYmxlZDsgIC8vIFdoZXRo
ZXIgb3Igbm90IHRoZSBjYWNoZSBpcyBlbmFibGVkLgotICAgIGJvb2wgbV9pblBydW5lUmVzb3Vy
Y2VzOwotCi0gICAgdW5zaWduZWQgbV9jYXBhY2l0eTsKLSAgICB1bnNpZ25lZCBtX21pbkRlYWRD
YXBhY2l0eTsKLSAgICB1bnNpZ25lZCBtX21heERlYWRDYXBhY2l0eTsKLSAgICBzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzIG1fZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbDsKLQotICAg
IHVuc2lnbmVkIG1fbGl2ZVNpemU7IC8vIFRoZSBudW1iZXIgb2YgYnl0ZXMgY3VycmVudGx5IGNv
bnN1bWVkIGJ5ICJsaXZlIiByZXNvdXJjZXMgaW4gdGhlIGNhY2hlLgotICAgIHVuc2lnbmVkIG1f
ZGVhZFNpemU7IC8vIFRoZSBudW1iZXIgb2YgYnl0ZXMgY3VycmVudGx5IGNvbnN1bWVkIGJ5ICJk
ZWFkIiByZXNvdXJjZXMgaW4gdGhlIGNhY2hlLgotCi0gICAgLy8gU2l6ZS1hZGp1c3RlZCBhbmQg
cG9wdWxhcml0eS1hd2FyZSBMUlUgbGlzdCBjb2xsZWN0aW9uIGZvciBjYWNoZSBvYmplY3RzLiAg
VGhpcyBjb2xsZWN0aW9uIGNhbiBob2xkCi0gICAgLy8gbW9yZSByZXNvdXJjZXMgdGhhbiB0aGUg
Y2FjaGVkIHJlc291cmNlIG1hcCwgc2luY2UgaXQgY2FuIGFsc28gaG9sZCAic3RhbGUiIG11bHRp
cGxlIHZlcnNpb25zIG9mIG9iamVjdHMgdGhhdCBhcmUKLSAgICAvLyB3YWl0aW5nIHRvIGRpZSB3
aGVuIHRoZSBjbGllbnRzIHJlZmVyZW5jaW5nIHRoZW0gZ28gYXdheS4KLSAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPExSVUxpc3Q+LCAzMj4gbV9hbGxSZXNvdXJjZXM7Ci0gICAgCi0gICAgLy8g
TGlzdCBqdXN0IGZvciBsaXZlIHJlc291cmNlcyB3aXRoIGRlY29kZWQgZGF0YS4gIEFjY2VzcyB0
byB0aGlzIGxpc3QgaXMgYmFzZWQgb2ZmIG9mIHBhaW50aW5nIHRoZSByZXNvdXJjZS4KLSAgICBM
UlVMaXN0IG1fbGl2ZURlY29kZWRSZXNvdXJjZXM7Ci0gICAgCi0gICAgLy8gQSBVUkwtYmFzZWQg
bWFwIG9mIGFsbCByZXNvdXJjZXMgdGhhdCBhcmUgaW4gdGhlIGNhY2hlIChpbmNsdWRpbmcgdGhl
IGZyZXNoZXN0IHZlcnNpb24gb2Ygb2JqZWN0cyB0aGF0IGFyZSBjdXJyZW50bHkgYmVpbmcgCi0g
ICAgLy8gcmVmZXJlbmNlZCBieSBhIFdlYiBwYWdlKS4KLSAgICB0eXBlZGVmIEhhc2hNYXA8U2Vz
c2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUmVzb3VyY2VNYXA+PiBTZXNzaW9uQ2FjaGVk
UmVzb3VyY2VNYXA7Ci0gICAgU2Vzc2lvbkNhY2hlZFJlc291cmNlTWFwIG1fc2Vzc2lvblJlc291
cmNlczsKLQotICAgIFRpbWVyIG1fcHJ1bmVUaW1lcjsKLX07Ci0KLX0KLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVQb2xpY3kuaCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZVBvbGljeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyNzY4NWVl
OTIwNDIxMDc0NTkxOTUyMDEyZDdlYjExYmFhOTg1MGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVQb2xpY3kuaApAQCAtMCwwICsxLDQwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIENhY2hlUG9saWN5X2gKKyNkZWZpbmUgQ2FjaGVQb2xpY3lfaAorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKyAgICBlbnVtIENhY2hlUG9saWN5IHsKKyAgICAgICAgQ2FjaGVQb2xpY3lWZXJp
ZnksCisgICAgICAgIENhY2hlUG9saWN5UmV2YWxpZGF0ZSwKKyAgICAgICAgQ2FjaGVQb2xpY3lS
ZWxvYWQsCisgICAgICAgIENhY2hlUG9saWN5SGlzdG9yeUJ1ZmZlcgorICAgIH07CisKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkQ1NT
U3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkQ1NTU3R5
bGVTaGVldC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGQzN2U1OGJkZjQ5ZTE0ZWVkY2Q0ZjA5MGY5ZmFlNjZm
MjRlZTkzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9D
YWNoZWRDU1NTdHlsZVNoZWV0LmNwcApAQCAtMCwwICsxLDE4MiBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0
IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCisgICAgQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIEluYy4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgICBUaGlzIGNsYXNzIHByb3Zp
ZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxlIHNo
ZWV0cyBhbmQgaHRtbAorICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNh
Y2hlIGZvciB0aGVzZSBvYmplY3RzLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKKworI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIK
KyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIgorI2luY2x1ZGUgIkNhY2hl
ZFN0eWxlU2hlZXRDbGllbnQuaCIKKyNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKKyNpbmNs
dWRlICJIVFRQUGFyc2Vycy5oIgorI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCisjaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCisjaW5jbHVk
ZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NhY2hlZENTU1N0eWxlU2hlZXQ6OkNhY2hlZENTU1N0
eWxlU2hlZXQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IFN0
cmluZyYgY2hhcnNldCwgU2Vzc2lvbklEIHNlc3Npb25JRCkKKyAgICA6IENhY2hlZFJlc291cmNl
KHJlc291cmNlUmVxdWVzdCwgQ1NTU3R5bGVTaGVldCwgc2Vzc2lvbklEKQorICAgICwgbV9kZWNv
ZGVyKFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9jc3MiLCBjaGFyc2V0KSkKK3sK
KyAgICAvLyBQcmVmZXIgdGV4dC9jc3MgYnV0IGFjY2VwdCBhbnkgdHlwZSAoZGVsbC5jb20gc2Vy
dmVzIGEgc3R5bGVzaGVldAorICAgIC8vIGFzIHRleHQvaHRtbDsgc2VlIDxodHRwOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ1MT4pLgorICAgIHNldEFjY2VwdCgidGV4dC9j
c3MsKi8qO3E9MC4xIik7Cit9CisKK0NhY2hlZENTU1N0eWxlU2hlZXQ6On5DYWNoZWRDU1NTdHls
ZVNoZWV0KCkKK3sKKyAgICBpZiAobV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUpCisgICAgICAgIG1f
cGFyc2VkU3R5bGVTaGVldENhY2hlLT5yZW1vdmVkRnJvbU1lbW9yeUNhY2hlKCk7Cit9CisKK3Zv
aWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6ZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50
KiBjKQoreworICAgIEFTU0VSVChjLT5yZXNvdXJjZUNsaWVudFR5cGUoKSA9PSBDYWNoZWRTdHls
ZVNoZWV0Q2xpZW50OjpleHBlY3RlZFR5cGUoKSk7CisgICAgLy8gQ2FjaGVkUmVzb3VyY2U6OmRp
ZEFkZENsaWVudCgpIG11c3QgYmUgYmVmb3JlIHNldENTU1N0eWxlU2hlZXQoKSwKKyAgICAvLyBi
ZWNhdXNlIHNldENTU1N0eWxlU2hlZXQoKSBtYXkgY2F1c2Ugc2NyaXB0cyB0byBiZSBleGVjdXRl
ZCwgd2hpY2ggY291bGQgZGVzdHJveSAnYycgaWYgaXQgaXMgYW4gaW5zdGFuY2Ugb2YgSFRNTExp
bmtFbGVtZW50LgorICAgIC8vIHNlZSB0aGUgY29tbWVudCBvZiBIVE1MTGlua0VsZW1lbnQ6OnNl
dENTU1N0eWxlU2hlZXQuCisgICAgQ2FjaGVkUmVzb3VyY2U6OmRpZEFkZENsaWVudChjKTsKKwor
ICAgIGlmICghaXNMb2FkaW5nKCkpCisgICAgICAgIHN0YXRpY19jYXN0PENhY2hlZFN0eWxlU2hl
ZXRDbGllbnQqPihjKS0+c2V0Q1NTU3R5bGVTaGVldChtX3Jlc291cmNlUmVxdWVzdC51cmwoKSwg
bV9yZXNwb25zZS51cmwoKSwgbV9kZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKSwgdGhpcyk7Cit9
CisKK3ZvaWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6c2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJiBj
aHMpCit7CisgICAgbV9kZWNvZGVyLT5zZXRFbmNvZGluZyhjaHMsIFRleHRSZXNvdXJjZURlY29k
ZXI6OkVuY29kaW5nRnJvbUhUVFBIZWFkZXIpOworfQorCitTdHJpbmcgQ2FjaGVkQ1NTU3R5bGVT
aGVldDo6ZW5jb2RpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2RlY29kZXItPmVuY29kaW5n
KCkubmFtZSgpOworfQorICAgIAorY29uc3QgU3RyaW5nIENhY2hlZENTU1N0eWxlU2hlZXQ6OnNo
ZWV0VGV4dChNSU1FVHlwZUNoZWNrIG1pbWVUeXBlQ2hlY2ssIGJvb2wqIGhhc1ZhbGlkTUlNRVR5
cGUpIGNvbnN0Cit7IAorICAgIGlmICghbV9kYXRhIHx8IG1fZGF0YS0+aXNFbXB0eSgpIHx8ICFj
YW5Vc2VTaGVldChtaW1lVHlwZUNoZWNrLCBoYXNWYWxpZE1JTUVUeXBlKSkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworICAgIAorICAgIGlmICghbV9kZWNvZGVkU2hlZXRUZXh0LmlzTnVsbCgp
KQorICAgICAgICByZXR1cm4gbV9kZWNvZGVkU2hlZXRUZXh0OworICAgIAorICAgIC8vIERvbid0
IGNhY2hlIHRoZSBkZWNvZGVkIHRleHQsIHJlZ2VuZXJhdGluZyBpcyBjaGVhcCBhbmQgaXQgY2Fu
IHVzZSBxdWl0ZSBhIGJpdCBvZiBtZW1vcnkKKyAgICByZXR1cm4gbV9kZWNvZGVyLT5kZWNvZGVB
bmRGbHVzaChtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpOworfQorCit2b2lkIENhY2hl
ZENTU1N0eWxlU2hlZXQ6OmZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKiBkYXRhKQoreworICAg
IG1fZGF0YSA9IGRhdGE7CisgICAgc2V0RW5jb2RlZFNpemUoZGF0YSA/IGRhdGEtPnNpemUoKSA6
IDApOworICAgIC8vIERlY29kZSB0aGUgZGF0YSB0byBmaW5kIG91dCB0aGUgZW5jb2RpbmcgYW5k
IGtlZXAgdGhlIHNoZWV0IHRleHQgYXJvdW5kIGR1cmluZyBjaGVja05vdGlmeSgpCisgICAgaWYg
KGRhdGEpCisgICAgICAgIG1fZGVjb2RlZFNoZWV0VGV4dCA9IG1fZGVjb2Rlci0+ZGVjb2RlQW5k
Rmx1c2goZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpOworICAgIHNldExvYWRpbmcoZmFsc2Up
OworICAgIGNoZWNrTm90aWZ5KCk7CisgICAgLy8gQ2xlYXIgdGhlIGRlY29kZWQgdGV4dCBhcyBp
dCBpcyB1bmxpa2VseSB0byBiZSBuZWVkZWQgaW1tZWRpYXRlbHkgYWdhaW4gYW5kIGlzIGNoZWFw
IHRvIHJlZ2VuZXJhdGUuCisgICAgbV9kZWNvZGVkU2hlZXRUZXh0ID0gU3RyaW5nKCk7Cit9CisK
K3ZvaWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6Y2hlY2tOb3RpZnkoKQoreworICAgIGlmIChpc0xv
YWRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxr
ZXI8Q2FjaGVkU3R5bGVTaGVldENsaWVudD4gdyhtX2NsaWVudHMpOworICAgIHdoaWxlIChDYWNo
ZWRTdHlsZVNoZWV0Q2xpZW50KiBjID0gdy5uZXh0KCkpCisgICAgICAgIGMtPnNldENTU1N0eWxl
U2hlZXQobV9yZXNvdXJjZVJlcXVlc3QudXJsKCksIG1fcmVzcG9uc2UudXJsKCksIG1fZGVjb2Rl
ci0+ZW5jb2RpbmcoKS5uYW1lKCksIHRoaXMpOworfQorCitib29sIENhY2hlZENTU1N0eWxlU2hl
ZXQ6OmNhblVzZVNoZWV0KE1JTUVUeXBlQ2hlY2sgbWltZVR5cGVDaGVjaywgYm9vbCogaGFzVmFs
aWRNSU1FVHlwZSkgY29uc3QKK3sKKyAgICBpZiAoZXJyb3JPY2N1cnJlZCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobWltZVR5cGVDaGVjayA9PSBNSU1FVHlwZUNoZWNrOjpM
YXgpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gVGhpcyBjaGVjayBleGFjdGx5IG1h
dGNoZXMgRmlyZWZveC4gIE5vdGUgdGhhdCB3ZSBncmFiIHRoZSBDb250ZW50LVR5cGUKKyAgICAv
LyBoZWFkZXIgZGlyZWN0bHkgYmVjYXVzZSB3ZSB3YW50IHRvIHNlZSB3aGF0IHRoZSB2YWx1ZSBp
cyBCRUZPUkUgY29udGVudAorICAgIC8vIHNuaWZmaW5nLiAgRmlyZWZveCBkb2VzIHRoaXMgYnkg
c2V0dGluZyBhICJ0eXBlIGhpbnQiIG9uIHRoZSBjaGFubmVsLgorICAgIC8vIFRoaXMgaW1wbGVt
ZW50YXRpb24gc2hvdWxkIGJlIG9ic2VydmF0aW9uYWxseSBlcXVpdmFsZW50LgorICAgIC8vCisg
ICAgLy8gVGhpcyBjb2RlIGRlZmF1bHRzIHRvIGFsbG93aW5nIHRoZSBzdHlsZXNoZWV0IGZvciBu
b24tSFRUUCBwcm90b2NvbHMgc28KKyAgICAvLyBmb2xrcyBjYW4gdXNlIHN0YW5kYXJkcyBtb2Rl
IGZvciBsb2NhbCBIVE1MIGRvY3VtZW50cy4KKyAgICBTdHJpbmcgbWltZVR5cGUgPSBleHRyYWN0
TUlNRVR5cGVGcm9tTWVkaWFUeXBlKHJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFk
ZXJOYW1lOjpDb250ZW50VHlwZSkpOworICAgIGJvb2wgdHlwZU9LID0gbWltZVR5cGUuaXNFbXB0
eSgpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAidGV4dC9jc3Mi
KSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImFwcGxpY2F0aW9u
L3gtdW5rbm93bi1jb250ZW50LXR5cGUiKTsKKyAgICBpZiAoaGFzVmFsaWRNSU1FVHlwZSkKKyAg
ICAgICAgKmhhc1ZhbGlkTUlNRVR5cGUgPSB0eXBlT0s7CisgICAgcmV0dXJuIHR5cGVPSzsKK30K
Kwordm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0OjpkZXN0cm95RGVjb2RlZERhdGEoKQoreworICAg
IGlmICghbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
cGFyc2VkU3R5bGVTaGVldENhY2hlLT5yZW1vdmVkRnJvbU1lbW9yeUNhY2hlKCk7CisgICAgbV9w
YXJzZWRTdHlsZVNoZWV0Q2FjaGUgPSBudWxscHRyOworCisgICAgc2V0RGVjb2RlZFNpemUoMCk7
Cit9CisKK1Bhc3NSZWZQdHI8U3R5bGVTaGVldENvbnRlbnRzPiBDYWNoZWRDU1NTdHlsZVNoZWV0
OjpyZXN0b3JlUGFyc2VkU3R5bGVTaGVldChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0
LCBDYWNoZVBvbGljeSBjYWNoZVBvbGljeSkKK3sKKyAgICBpZiAoIW1fcGFyc2VkU3R5bGVTaGVl
dENhY2hlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1fcGFyc2VkU3R5bGVT
aGVldENhY2hlLT5zdWJyZXNvdXJjZXNBbGxvd1JldXNlKGNhY2hlUG9saWN5KSkgeworICAgICAg
ICBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+cmVtb3ZlZEZyb21NZW1vcnlDYWNoZSgpOworICAg
ICAgICBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKworICAgIEFTU0VSVChtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+aXND
YWNoZWFibGUoKSk7CisgICAgQVNTRVJUKG1fcGFyc2VkU3R5bGVTaGVldENhY2hlLT5pc0luTWVt
b3J5Q2FjaGUoKSk7CisKKyAgICAvLyBDb250ZXh0cyBtdXN0IGJlIGlkZW50aWNhbCBzbyB3ZSBr
bm93IHdlIHdvdWxkIGdldCB0aGUgc2FtZSBleGFjdCByZXN1bHQgaWYgd2UgcGFyc2VkIGFnYWlu
LgorICAgIGlmIChtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+cGFyc2VyQ29udGV4dCgpICE9IGNv
bnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgZGlkQWNjZXNzRGVjb2RlZERh
dGEobW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOworCisgICAgcmV0dXJuIG1fcGFyc2Vk
U3R5bGVTaGVldENhY2hlOworfQorCit2b2lkIENhY2hlZENTU1N0eWxlU2hlZXQ6OnNhdmVQYXJz
ZWRTdHlsZVNoZWV0KFJlZjxTdHlsZVNoZWV0Q29udGVudHM+JiYgc2hlZXQpCit7CisgICAgQVNT
RVJUKHNoZWV0LmdldCgpLmlzQ2FjaGVhYmxlKCkpOworCisgICAgaWYgKG1fcGFyc2VkU3R5bGVT
aGVldENhY2hlKQorICAgICAgICBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+cmVtb3ZlZEZyb21N
ZW1vcnlDYWNoZSgpOworICAgIG1fcGFyc2VkU3R5bGVTaGVldENhY2hlID0gV1RGTW92ZShzaGVl
dCk7CisgICAgbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUtPmFkZGVkVG9NZW1vcnlDYWNoZSgpOwor
CisgICAgc2V0RGVjb2RlZFNpemUobV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUtPmVzdGltYXRlZFNp
emVJbkJ5dGVzKCkpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
ZmV0Y2gvQ2FjaGVkQ1NTU3R5bGVTaGVldC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNo
L0NhY2hlZENTU1N0eWxlU2hlZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNDJhOGZmZWU2MGI2MDllMTllOGYw
YTAyNjY0MTBiNjc5MWUyY2RjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2ZldGNoL0NhY2hlZENTU1N0eWxlU2hlZXQuaApAQCAtMCwwICsxLDc0IEBACisvKgorICAg
IENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQorICAg
IENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisKKyAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFsbCBmdW5jdGlv
bmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxlIHNoZWV0cyBhbmQgaHRtbAor
ICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hlIGZvciB0aGVzZSBv
YmplY3RzLgorKi8KKworI2lmbmRlZiBDYWNoZWRDU1NTdHlsZVNoZWV0X2gKKyNkZWZpbmUgQ2Fj
aGVkQ1NTU3R5bGVTaGVldF9oCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBDYWNoZWRSZXNvdXJjZUNsaWVudDsKKyAgICBj
bGFzcyBTdHlsZVNoZWV0Q29udGVudHM7CisgICAgY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsK
KyAgICBzdHJ1Y3QgQ1NTUGFyc2VyQ29udGV4dDsKKworICAgIGNsYXNzIENhY2hlZENTU1N0eWxl
U2hlZXQgZmluYWwgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2UgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgQ2FjaGVkQ1NTU3R5bGVTaGVldChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJp
bmcmIGNoYXJzZXQsIFNlc3Npb25JRCk7CisgICAgICAgIHZpcnR1YWwgfkNhY2hlZENTU1N0eWxl
U2hlZXQoKTsKKworICAgICAgICBlbnVtIGNsYXNzIE1JTUVUeXBlQ2hlY2sgeyBTdHJpY3QsIExh
eCB9OworICAgICAgICBjb25zdCBTdHJpbmcgc2hlZXRUZXh0KE1JTUVUeXBlQ2hlY2sgPSBNSU1F
VHlwZUNoZWNrOjpTdHJpY3QsIGJvb2wqIGhhc1ZhbGlkTUlNRVR5cGUgPSBudWxscHRyKSBjb25z
dDsKKworICAgICAgICBQYXNzUmVmUHRyPFN0eWxlU2hlZXRDb250ZW50cz4gcmVzdG9yZVBhcnNl
ZFN0eWxlU2hlZXQoY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIENhY2hlUG9saWN5KTsKKyAgICAg
ICAgdm9pZCBzYXZlUGFyc2VkU3R5bGVTaGVldChSZWY8U3R5bGVTaGVldENvbnRlbnRzPiYmKTsK
KworICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wgY2FuVXNlU2hlZXQoTUlNRVR5cGVDaGVjaywg
Ym9vbCogaGFzVmFsaWRNSU1FVHlwZSkgY29uc3Q7CisgICAgICAgIGJvb2wgbWF5VHJ5UmVwbGFj
ZUVuY29kZWREYXRhKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAg
IHZvaWQgZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kikgb3ZlcnJpZGU7CisKKyAg
ICAgICAgdm9pZCBzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICAgICAg
U3RyaW5nIGVuY29kaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgICAgIGNvbnN0IFRleHRSZXNv
dXJjZURlY29kZXIqIHRleHRSZXNvdXJjZURlY29kZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBtX2RlY29kZXIuZ2V0KCk7IH0KKyAgICAgICAgdm9pZCBmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1
ZmZlciopIG92ZXJyaWRlOworICAgICAgICB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YSgpIG92ZXJy
aWRlOworCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2b2lkIGNoZWNrTm90aWZ5KCkgb3ZlcnJp
ZGU7CisKKyAgICAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsKKyAg
ICAgICAgU3RyaW5nIG1fZGVjb2RlZFNoZWV0VGV4dDsKKworICAgICAgICBSZWZQdHI8U3R5bGVT
aGVldENvbnRlbnRzPiBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZTsKKyAgICB9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FDSEVEX1JFU09VUkNF
KENhY2hlZENTU1N0eWxlU2hlZXQsIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0KQorCisj
ZW5kaWYgLy8gQ2FjaGVkQ1NTU3R5bGVTaGVldF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkRm9udC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0
Y2gvQ2FjaGVkRm9udC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTZjYjQxYzMyOTJmMWY5N2FjMWI0ZDNjMTk5
OGRkZDU0MWZhMWZiNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9m
ZXRjaC9DYWNoZWRGb250LmNwcApAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q2FjaGVkRm9udC5oIgorCisjaW5jbHVkZSAiQ2FjaGVkRm9udENsaWVudC5oIgorI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuaCIKKyNpbmNsdWRlICJGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgiCisjaW5jbHVkZSAi
Rm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorI2luY2x1
ZGUgIk1lbW9yeUNhY2hlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAi
VGV4dFJlc291cmNlRGVjb2Rlci5oIgorI2luY2x1ZGUgIlR5cGVkRWxlbWVudERlc2NlbmRhbnRJ
dGVyYXRvci5oIgorI2luY2x1ZGUgIldPRkZGaWxlRm9ybWF0LmgiCisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NhY2hlZEZvbnQ6OkNhY2hlZEZvbnQo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIFNlc3Npb25JRCBzZXNzaW9u
SUQsIFR5cGUgdHlwZSkKKyAgICA6IENhY2hlZFJlc291cmNlKHJlc291cmNlUmVxdWVzdCwgdHlw
ZSwgc2Vzc2lvbklEKQorICAgICwgbV9sb2FkSW5pdGlhdGVkKGZhbHNlKQorICAgICwgbV9oYXND
cmVhdGVkRm9udERhdGFXcmFwcGluZ1Jlc291cmNlKGZhbHNlKQoreworfQorCitDYWNoZWRGb250
Ojp+Q2FjaGVkRm9udCgpCit7Cit9CisKK3ZvaWQgQ2FjaGVkRm9udDo6bG9hZChDYWNoZWRSZXNv
dXJjZUxvYWRlciYsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAg
ICAvLyBEb24ndCBsb2FkIHRoZSBmaWxlIHlldC4gIFdhaXQgZm9yIGFuIGFjY2VzcyBiZWZvcmUg
dHJpZ2dlcmluZyB0aGUgbG9hZC4KKyAgICBzZXRMb2FkaW5nKHRydWUpOworICAgIG1fb3B0aW9u
cyA9IG9wdGlvbnM7Cit9CisKK3ZvaWQgQ2FjaGVkRm9udDo6ZGlkQWRkQ2xpZW50KENhY2hlZFJl
c291cmNlQ2xpZW50KiBjbGllbnQpCit7CisgICAgQVNTRVJUKGNsaWVudC0+cmVzb3VyY2VDbGll
bnRUeXBlKCkgPT0gQ2FjaGVkRm9udENsaWVudDo6ZXhwZWN0ZWRUeXBlKCkpOworICAgIGlmICgh
aXNMb2FkaW5nKCkpCisgICAgICAgIHN0YXRpY19jYXN0PENhY2hlZEZvbnRDbGllbnQqPihjbGll
bnQpLT5mb250TG9hZGVkKCp0aGlzKTsKK30KKwordm9pZCBDYWNoZWRGb250OjpmaW5pc2hMb2Fk
aW5nKFNoYXJlZEJ1ZmZlciogZGF0YSkKK3sKKyAgICBtX2RhdGEgPSBkYXRhOworICAgIHNldEVu
Y29kZWRTaXplKG1fZGF0YS5nZXQoKSA/IG1fZGF0YS0+c2l6ZSgpIDogMCk7CisgICAgc2V0TG9h
ZGluZyhmYWxzZSk7CisgICAgY2hlY2tOb3RpZnkoKTsKK30KKwordm9pZCBDYWNoZWRGb250Ojpi
ZWdpbkxvYWRJZk5lZWRlZChDYWNoZWRSZXNvdXJjZUxvYWRlciYgbG9hZGVyKQoreworICAgIGlm
ICghbV9sb2FkSW5pdGlhdGVkKSB7CisgICAgICAgIG1fbG9hZEluaXRpYXRlZCA9IHRydWU7Cisg
ICAgICAgIENhY2hlZFJlc291cmNlOjpsb2FkKGxvYWRlciwgbV9vcHRpb25zKTsKKyAgICB9Cit9
CisKK2Jvb2wgQ2FjaGVkRm9udDo6ZW5zdXJlQ3VzdG9tRm9udERhdGEoY29uc3QgQXRvbWljU3Ry
aW5nJikKK3sKKyAgICByZXR1cm4gZW5zdXJlQ3VzdG9tRm9udERhdGEobV9kYXRhLmdldCgpKTsK
K30KKworYm9vbCBDYWNoZWRGb250OjplbnN1cmVDdXN0b21Gb250RGF0YShTaGFyZWRCdWZmZXIq
IGRhdGEpCit7CisgICAgaWYgKCFtX2ZvbnRDdXN0b21QbGF0Zm9ybURhdGEgJiYgIWVycm9yT2Nj
dXJyZWQoKSAmJiAhaXNMb2FkaW5nKCkgJiYgZGF0YSkgeworICAgICAgICBib29sIHdyYXBwaW5n
OworICAgICAgICBtX2ZvbnRDdXN0b21QbGF0Zm9ybURhdGEgPSBjcmVhdGVDdXN0b21Gb250RGF0
YSgqZGF0YSwgd3JhcHBpbmcpOworICAgICAgICBtX2hhc0NyZWF0ZWRGb250RGF0YVdyYXBwaW5n
UmVzb3VyY2UgPSBtX2ZvbnRDdXN0b21QbGF0Zm9ybURhdGEgJiYgd3JhcHBpbmc7CisgICAgICAg
IGlmICghbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhKQorICAgICAgICAgICAgc2V0U3RhdHVzKERl
Y29kZUVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRh
LmdldCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Rm9udEN1c3RvbVBsYXRmb3JtRGF0YT4gQ2Fj
aGVkRm9udDo6Y3JlYXRlQ3VzdG9tRm9udERhdGEoU2hhcmVkQnVmZmVyJiBieXRlcywgYm9vbCYg
d3JhcHBpbmcpCit7CisgICAgd3JhcHBpbmcgPSB0cnVlOworCisjaWYgIVBMQVRGT1JNKENPQ09B
KQorICAgIGlmIChpc1dPRkYoYnl0ZXMpKSB7CisgICAgICAgIHdyYXBwaW5nID0gZmFsc2U7Cisg
ICAgICAgIFZlY3RvcjxjaGFyPiBjb252ZXJ0ZWRGb250OworICAgICAgICBpZiAoIWNvbnZlcnRX
T0ZGVG9TZm50KGJ5dGVzLCBjb252ZXJ0ZWRGb250KSkKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgICAgIGF1dG8gYnVmZmVyID0gU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcihj
b252ZXJ0ZWRGb250KTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURh
dGEoYnVmZmVyKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBjcmVhdGVGb250Q3VzdG9t
UGxhdGZvcm1EYXRhKGJ5dGVzKTsKK30KKworUmVmUHRyPEZvbnQ+IENhY2hlZEZvbnQ6OmNyZWF0
ZUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21p
Y1N0cmluZyYsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMsIGNvbnN0
IEZvbnRGZWF0dXJlU2V0dGluZ3MmIGZvbnRGYWNlRmVhdHVyZXMsIGNvbnN0IEZvbnRWYXJpYW50
U2V0dGluZ3MmIGZvbnRGYWNlVmFyaWFudFNldHRpbmdzKQoreworICAgIHJldHVybiBGb250Ojpj
cmVhdGUocGxhdGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoZm9udERlc2NyaXB0aW9uLCBzeW50aGV0
aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlVmFyaWFu
dFNldHRpbmdzKSwgdHJ1ZSk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEgQ2FjaGVkRm9udDo6cGxh
dGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3Mm
IGZvbnRGYWNlRmVhdHVyZXMsIGNvbnN0IEZvbnRWYXJpYW50U2V0dGluZ3MmIGZvbnRGYWNlVmFy
aWFudFNldHRpbmdzKQoreworICAgIEFTU0VSVChtX2ZvbnRDdXN0b21QbGF0Zm9ybURhdGEpOwor
ICAgIHJldHVybiBwbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YSgqbV9mb250Q3VzdG9tUGxhdGZv
cm1EYXRhLCBmb250RGVzY3JpcHRpb24sIGJvbGQsIGl0YWxpYywgZm9udEZhY2VGZWF0dXJlcywg
Zm9udEZhY2VWYXJpYW50U2V0dGluZ3MpOworfQorCitGb250UGxhdGZvcm1EYXRhIENhY2hlZEZv
bnQ6OnBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKEZvbnRDdXN0b21QbGF0Zm9ybURhdGEmIGZv
bnRDdXN0b21QbGF0Zm9ybURhdGEsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzJiBm
b250RmFjZUZlYXR1cmVzLCBjb25zdCBGb250VmFyaWFudFNldHRpbmdzJiBmb250RmFjZVZhcmlh
bnRTZXR0aW5ncykKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICByZXR1cm4gZm9udEN1c3Rv
bVBsYXRmb3JtRGF0YS5mb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgYm9sZCwgaXRh
bGljLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFjZVZhcmlhbnRTZXR0aW5ncyk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShmb250RmFjZUZlYXR1cmVzKTsKKyAgICBVTlVTRURfUEFSQU0oZm9u
dEZhY2VWYXJpYW50U2V0dGluZ3MpOworICAgIHJldHVybiBmb250Q3VzdG9tUGxhdGZvcm1EYXRh
LmZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBib2xkLCBpdGFsaWMpOworI2VuZGlm
Cit9CisKK3ZvaWQgQ2FjaGVkRm9udDo6YWxsQ2xpZW50c1JlbW92ZWQoKQoreworICAgIG1fZm9u
dEN1c3RvbVBsYXRmb3JtRGF0YSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgQ2FjaGVkRm9udDo6Y2hl
Y2tOb3RpZnkoKQoreworICAgIGlmIChpc0xvYWRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyPENhY2hlZEZvbnRDbGllbnQ+IHdhbGtl
cihtX2NsaWVudHMpOworICAgIHdoaWxlIChDYWNoZWRGb250Q2xpZW50KiBjbGllbnQgPSB3YWxr
ZXIubmV4dCgpKQorICAgICAgICBjbGllbnQtPmZvbnRMb2FkZWQoKnRoaXMpOworfQorCitib29s
IENhY2hlZEZvbnQ6Om1heVRyeVJlcGxhY2VFbmNvZGVkRGF0YSgpIGNvbnN0Cit7CisgICAgLy8g
SWYgYSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhIGhhcyBldmVyIGJlZW4gY29uc3RydWN0ZWQgdG8g
d3JhcCB0aGUgaW50ZXJuYWwgcmVzb3VyY2UgYnVmZmVyIHRoZW4gaXQgc3RpbGwgbWlnaHQgYmUg
aW4gdXNlIHNvbWV3aGVyZS4KKyAgICAvLyBUaGF0IHBsYXRmb3JtIGZvbnQgb2JqZWN0IG1pZ2h0
IGRpcmVjdGx5IHJlZmVyZW5jZSB0aGUgZW5jb2RlZCBkYXRhIGJ1ZmZlciBiZWhpbmQgdGhpcyBD
YWNoZWRGb250LAorICAgIC8vIHNvIHJlcGxhY2luZyBpdCBpcyB1bnNhZmUuCisKKyAgICByZXR1
cm4gIW1faGFzQ3JlYXRlZEZvbnREYXRhV3JhcHBpbmdSZXNvdXJjZTsKK30KKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZEZvbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRGb250LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTU4YzllMDk1YzQ5
ZmVmZTIxN2EzYTY3YjAwNmY1ZjU0NTFhYzBjMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRGb250LmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENh
Y2hlZEZvbnRfaAorI2RlZmluZSBDYWNoZWRGb250X2gKKworI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJGb250
LmgiCisjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CitjbGFzcyBGb250RGVzY3JpcHRpb247CitjbGFzcyBG
b250RmVhdHVyZVNldHRpbmdzOworY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKK2NsYXNzIFNWR0Rv
Y3VtZW50OworY2xhc3MgU1ZHRm9udEVsZW1lbnQ7CitzdHJ1Y3QgRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YTsKKworY2xhc3MgQ2FjaGVkRm9udCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSB7CitwdWJs
aWM6CisgICAgQ2FjaGVkRm9udChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTZXNzaW9uSUQsIFR5
cGUgPSBGb250UmVzb3VyY2UpOworICAgIHZpcnR1YWwgfkNhY2hlZEZvbnQoKTsKKworICAgIHZv
aWQgYmVnaW5Mb2FkSWZOZWVkZWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXImKTsKKyAgICBib29sIHN0
aWxsTmVlZHNMb2FkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIW1fbG9hZEluaXRpYXRlZDsg
fQorCisgICAgdmlydHVhbCBib29sIGVuc3VyZUN1c3RvbUZvbnREYXRhKGNvbnN0IEF0b21pY1N0
cmluZyYgcmVtb3RlVVJJKTsKKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Rm9udEN1c3Rv
bVBsYXRmb3JtRGF0YT4gY3JlYXRlQ3VzdG9tRm9udERhdGEoU2hhcmVkQnVmZmVyJiwgYm9vbCYg
d3JhcHBpbmcpOworICAgIHN0YXRpYyBGb250UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0YUZyb21D
dXN0b21EYXRhKEZvbnRDdXN0b21QbGF0Zm9ybURhdGEmLCBjb25zdCBGb250RGVzY3JpcHRpb24m
LCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzJiwgY29u
c3QgRm9udFZhcmlhbnRTZXR0aW5ncyYpOworCisgICAgdmlydHVhbCBSZWZQdHI8Rm9udD4gY3Jl
YXRlRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmIHJlbW90
ZVVSSSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgY29uc3QgRm9u
dEZlYXR1cmVTZXR0aW5ncyYsIGNvbnN0IEZvbnRWYXJpYW50U2V0dGluZ3MmKTsKKworcHJvdGVj
dGVkOgorICAgIEZvbnRQbGF0Zm9ybURhdGEgcGxhdGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgY29uc3QgRm9udEZl
YXR1cmVTZXR0aW5ncyYsIGNvbnN0IEZvbnRWYXJpYW50U2V0dGluZ3MmKTsKKworICAgIGJvb2wg
ZW5zdXJlQ3VzdG9tRm9udERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhKTsKKworcHJpdmF0ZToKKyAg
ICB2b2lkIGNoZWNrTm90aWZ5KCkgb3ZlcnJpZGU7CisgICAgYm9vbCBtYXlUcnlSZXBsYWNlRW5j
b2RlZERhdGEoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgbG9hZChDYWNoZWRSZXNvdXJj
ZUxvYWRlciYsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAg
dm9pZCBkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKSBvdmVycmlkZTsKKyAgICB2
b2lkIGZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGFs
bENsaWVudHNSZW1vdmVkKCkgb3ZlcnJpZGU7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Rm9udEN1
c3RvbVBsYXRmb3JtRGF0YT4gbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhOworICAgIGJvb2wgbV9s
b2FkSW5pdGlhdGVkOworICAgIGJvb2wgbV9oYXNDcmVhdGVkRm9udERhdGFXcmFwcGluZ1Jlc291
cmNlOworCisgICAgZnJpZW5kIGNsYXNzIE1lbW9yeUNhY2hlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBQ0hFRF9SRVNPVVJDRShDYWNo
ZWRGb250LCBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlKQorCisjZW5kaWYgLy8gQ2FjaGVk
Rm9udF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkRm9u
dENsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZEZvbnRDbGllbnQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40OTMyNDFhNjBmNDAxZTNhYjU3MTE3MmYxYzliOTFiZmJmMTFlYjU0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZEZvbnRD
bGllbnQuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDYWNoZWRGb250
Q2xpZW50X2gKKyNkZWZpbmUgQ2FjaGVkRm9udENsaWVudF9oCisKKyNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZUNsaWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhY2hlZEZv
bnQ7CisKK2NsYXNzIENhY2hlZEZvbnRDbGllbnQgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGll
bnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkNhY2hlZEZvbnRDbGllbnQoKSB7IH0KKyAgICBz
dGF0aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnRUeXBlIGV4cGVjdGVkVHlwZSgpIHsgcmV0dXJuIEZv
bnRUeXBlOyB9CisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRUeXBlIHJlc291cmNlQ2xpZW50VHlw
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGV4cGVjdGVkVHlwZSgpOyB9CisgICAgdmlydHVh
bCB2b2lkIGZvbnRMb2FkZWQoQ2FjaGVkRm9udCYpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gQ2FjaGVkRm9udENsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2ZldGNoL0NhY2hlZEltYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNWQwZWQ3YmIxMWViYjBh
YjA1OWE5YjY0YjRhN2E2OWRkZGIyMjE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2ZldGNoL0NhY2hlZEltYWdlLmNwcApAQCAtMCwwICsxLDU0MSBAQAorLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgICAg
Q29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FjaGVk
SW1hZ2UuaCIKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiQ2FjaGVkSW1h
Z2VDbGllbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisj
aW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVz
LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKKyNp
bmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgorI2luY2x1ZGUgIlNW
R0ltYWdlLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTZXR0aW5n
cy5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIlN1YnJlc291cmNlTG9h
ZGVyLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCisjaWYgUExBVEZP
Uk0oSU9TKQorI2luY2x1ZGUgIlN5c3RlbU1lbW9yeS5oIgorI2VuZGlmCisKKyNpZiBVU0UoQ0cp
CisjaW5jbHVkZSAiUERGRG9jdW1lbnRJbWFnZS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworQ2FjaGVkSW1hZ2U6OkNhY2hlZEltYWdlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVzb3VyY2VSZXF1ZXN0LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQorICAgIDogQ2FjaGVkUmVzb3Vy
Y2UocmVzb3VyY2VSZXF1ZXN0LCBJbWFnZVJlc291cmNlLCBzZXNzaW9uSUQpCisgICAgLCBtX2lt
YWdlKG51bGxwdHIpCisgICAgLCBtX2lzTWFudWFsbHlDYWNoZWQoZmFsc2UpCisgICAgLCBtX3No
b3VsZFBhaW50QnJva2VuSW1hZ2UodHJ1ZSkKK3sKKyAgICBzZXRTdGF0dXMoVW5rbm93bik7Cit9
CisKK0NhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShJbWFnZSogaW1hZ2UsIFNlc3Npb25JRCBzZXNz
aW9uSUQpCisgICAgOiBDYWNoZWRSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3QoKSwgSW1hZ2VSZXNv
dXJjZSwgc2Vzc2lvbklEKQorICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICAsIG1faXNNYW51YWxs
eUNhY2hlZChmYWxzZSkKKyAgICAsIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSh0cnVlKQorewor
ICAgIHNldFN0YXR1cyhDYWNoZWQpOworICAgIHNldExvYWRpbmcoZmFsc2UpOworfQorCitDYWNo
ZWRJbWFnZTo6Q2FjaGVkSW1hZ2UoY29uc3QgVVJMJiB1cmwsIEltYWdlKiBpbWFnZSwgU2Vzc2lv
bklEIHNlc3Npb25JRCkKKyAgICA6IENhY2hlZFJlc291cmNlKFJlc291cmNlUmVxdWVzdCh1cmwp
LCBJbWFnZVJlc291cmNlLCBzZXNzaW9uSUQpCisgICAgLCBtX2ltYWdlKGltYWdlKQorICAgICwg
bV9pc01hbnVhbGx5Q2FjaGVkKGZhbHNlKQorICAgICwgbV9zaG91bGRQYWludEJyb2tlbkltYWdl
KHRydWUpCit7CisgICAgc2V0U3RhdHVzKENhY2hlZCk7CisgICAgc2V0TG9hZGluZyhmYWxzZSk7
Cit9CisKK0NhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShjb25zdCBVUkwmIHVybCwgSW1hZ2UqIGlt
YWdlLCBDYWNoZWRJbWFnZTo6Q2FjaGVCZWhhdmlvclR5cGUgdHlwZSwgU2Vzc2lvbklEIHNlc3Np
b25JRCkKKyAgICA6IENhY2hlZFJlc291cmNlKFJlc291cmNlUmVxdWVzdCh1cmwpLCBJbWFnZVJl
c291cmNlLCBzZXNzaW9uSUQpCisgICAgLCBtX2ltYWdlKGltYWdlKQorICAgICwgbV9pc01hbnVh
bGx5Q2FjaGVkKHR5cGUgPT0gQ2FjaGVkSW1hZ2U6Ok1hbnVhbGx5Q2FjaGVkKQorICAgICwgbV9z
aG91bGRQYWludEJyb2tlbkltYWdlKHRydWUpCit7CisgICAgc2V0U3RhdHVzKENhY2hlZCk7Cisg
ICAgc2V0TG9hZGluZyhmYWxzZSk7CisgICAgaWYgKFVOTElLRUxZKGlzTWFudWFsbHlDYWNoZWQo
KSkpIHsKKyAgICAgICAgLy8gVXNlIHRoZSBpbmNvbWluZyBVUkwgaW4gdGhlIHJlc3BvbnNlIGZp
ZWxkLiBUaGlzIGVuc3VyZXMgdGhhdCBjb2RlCisgICAgICAgIC8vIHVzaW5nIHRoZSByZXNwb25z
ZSBkaXJlY3RseSwgc3VjaCBhcyBvcmlnaW4gY2hlY2tzIGZvciBzZWN1cml0eSwKKyAgICAgICAg
Ly8gYWN0dWFsbHkgc2VlIHNvbWV0aGluZy4KKyAgICAgICAgbV9yZXNwb25zZS5zZXRVUkwodXJs
KTsKKyAgICB9Cit9CisKK0NhY2hlZEltYWdlOjp+Q2FjaGVkSW1hZ2UoKQoreworICAgIGNsZWFy
SW1hZ2UoKTsKK30KKwordm9pZCBDYWNoZWRJbWFnZTo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRl
ciYgY2FjaGVkUmVzb3VyY2VMb2FkZXIsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0
aW9ucykKK3sKKyAgICBpZiAoY2FjaGVkUmVzb3VyY2VMb2FkZXIuc2hvdWxkUGVyZm9ybUltYWdl
TG9hZCh1cmwoKSkpCisgICAgICAgIENhY2hlZFJlc291cmNlOjpsb2FkKGNhY2hlZFJlc291cmNl
TG9hZGVyLCBvcHRpb25zKTsKKyAgICBlbHNlCisgICAgICAgIHNldExvYWRpbmcoZmFsc2UpOwor
fQorCit2b2lkIENhY2hlZEltYWdlOjpzZXRCb2R5RGF0YUZyb20oY29uc3QgQ2FjaGVkUmVzb3Vy
Y2UmIHJlc291cmNlKQoreworICAgIEFTU0VSVChyZXNvdXJjZS50eXBlKCkgPT0gdHlwZSgpKTsK
KyAgICBjb25zdCBDYWNoZWRJbWFnZSYgaW1hZ2UgPSBzdGF0aWNfY2FzdDxjb25zdCBDYWNoZWRJ
bWFnZSY+KHJlc291cmNlKTsKKworICAgIHNldExvYWRpbmcoZmFsc2UpOworICAgIG1faW1hZ2Ug
PSBpbWFnZS5tX2ltYWdlOworCisgICAgaWYgKG1faW1hZ2UgJiYgaXM8U1ZHSW1hZ2U+KCptX2lt
YWdlKSkKKyAgICAgICAgbV9zdmdJbWFnZUNhY2hlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdJbWFn
ZUNhY2hlPigmZG93bmNhc3Q8U1ZHSW1hZ2U+KCptX2ltYWdlKSk7Cit9CisKK3ZvaWQgQ2FjaGVk
SW1hZ2U6OmRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50KQoreworICAg
IGlmIChtX2RhdGEgJiYgIW1faW1hZ2UgJiYgIWVycm9yT2NjdXJyZWQoKSkgeworICAgICAgICBj
cmVhdGVJbWFnZSgpOworICAgICAgICBtX2ltYWdlLT5zZXREYXRhKG1fZGF0YS5jb3B5UmVmKCks
IHRydWUpOworICAgIH0KKworICAgIEFTU0VSVChjbGllbnQtPnJlc291cmNlQ2xpZW50VHlwZSgp
ID09IENhY2hlZEltYWdlQ2xpZW50OjpleHBlY3RlZFR5cGUoKSk7CisgICAgaWYgKG1faW1hZ2Ug
JiYgIW1faW1hZ2UtPmlzTnVsbCgpKQorICAgICAgICBzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZUNs
aWVudCo+KGNsaWVudCktPmltYWdlQ2hhbmdlZCh0aGlzKTsKKworICAgIENhY2hlZFJlc291cmNl
OjpkaWRBZGRDbGllbnQoY2xpZW50KTsKK30KKwordm9pZCBDYWNoZWRJbWFnZTo6ZGlkUmVtb3Zl
Q2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50KiBjbGllbnQpCit7CisgICAgQVNTRVJUKGNsaWVu
dCk7CisgICAgQVNTRVJUKGNsaWVudC0+cmVzb3VyY2VDbGllbnRUeXBlKCkgPT0gQ2FjaGVkSW1h
Z2VDbGllbnQ6OmV4cGVjdGVkVHlwZSgpKTsKKworICAgIG1fcGVuZGluZ0NvbnRhaW5lclNpemVS
ZXF1ZXN0cy5yZW1vdmUoc3RhdGljX2Nhc3Q8Q2FjaGVkSW1hZ2VDbGllbnQqPihjbGllbnQpKTsK
KworICAgIGlmIChtX3N2Z0ltYWdlQ2FjaGUpCisgICAgICAgIG1fc3ZnSW1hZ2VDYWNoZS0+cmVt
b3ZlQ2xpZW50RnJvbUNhY2hlKHN0YXRpY19jYXN0PENhY2hlZEltYWdlQ2xpZW50Kj4oY2xpZW50
KSk7CisKKyAgICBDYWNoZWRSZXNvdXJjZTo6ZGlkUmVtb3ZlQ2xpZW50KGNsaWVudCk7Cit9CisK
K3ZvaWQgQ2FjaGVkSW1hZ2U6OnN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UoKQor
eworICAgIEFTU0VSVChpczxDYWNoZWRJbWFnZT4ocmVzb3VyY2VUb1JldmFsaWRhdGUoKSkpOwor
ICAgIC8vIFBlbmRpbmcgY29udGFpbmVyIHNpemUgcmVxdWVzdHMgbmVlZCB0byBiZSB0cmFuc2Zl
cnJlZCB0byB0aGUgcmV2YWxpZGF0ZWQgcmVzb3VyY2UuCisgICAgaWYgKCFtX3BlbmRpbmdDb250
YWluZXJTaXplUmVxdWVzdHMuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEEgY29weSBvZiBwZW5k
aW5nIHNpemUgcmVxdWVzdHMgaXMgbmVlZGVkIGFzIHRoZXkgYXJlIGRlbGV0ZWQgZHVyaW5nIENh
Y2hlZFJlc291cmNlOjpzd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlUmVzb3VjZSgpLgorICAgICAg
ICBDb250YWluZXJTaXplUmVxdWVzdHMgc3dpdGNoQ29udGFpbmVyU2l6ZVJlcXVlc3RzOworICAg
ICAgICBmb3IgKGF1dG8mIHJlcXVlc3QgOiBtX3BlbmRpbmdDb250YWluZXJTaXplUmVxdWVzdHMp
CisgICAgICAgICAgICBzd2l0Y2hDb250YWluZXJTaXplUmVxdWVzdHMuc2V0KHJlcXVlc3Qua2V5
LCByZXF1ZXN0LnZhbHVlKTsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2U6OnN3aXRjaENsaWVudHNU
b1JldmFsaWRhdGVkUmVzb3VyY2UoKTsKKyAgICAgICAgQ2FjaGVkSW1hZ2UmIHJldmFsaWRhdGVk
Q2FjaGVkSW1hZ2UgPSBkb3duY2FzdDxDYWNoZWRJbWFnZT4oKnJlc291cmNlVG9SZXZhbGlkYXRl
KCkpOworICAgICAgICBmb3IgKGF1dG8mIHJlcXVlc3QgOiBzd2l0Y2hDb250YWluZXJTaXplUmVx
dWVzdHMpCisgICAgICAgICAgICByZXZhbGlkYXRlZENhY2hlZEltYWdlLnNldENvbnRhaW5lclNp
emVGb3JSZW5kZXJlcihyZXF1ZXN0LmtleSwgcmVxdWVzdC52YWx1ZS5maXJzdCwgcmVxdWVzdC52
YWx1ZS5zZWNvbmQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ2FjaGVkUmVzb3Vy
Y2U6OnN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UoKTsKK30KKwordm9pZCBDYWNo
ZWRJbWFnZTo6YWxsQ2xpZW50c1JlbW92ZWQoKQoreworICAgIG1fcGVuZGluZ0NvbnRhaW5lclNp
emVSZXF1ZXN0cy5jbGVhcigpOworICAgIGlmIChtX2ltYWdlICYmICFlcnJvck9jY3VycmVkKCkp
CisgICAgICAgIG1faW1hZ2UtPnJlc2V0QW5pbWF0aW9uKCk7Cit9CisKK3N0ZDo6cGFpcjxJbWFn
ZSosIGZsb2F0PiBDYWNoZWRJbWFnZTo6YnJva2VuSW1hZ2UoZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3IpIGNvbnN0Cit7CisgICAgaWYgKGRldmljZVNjYWxlRmFjdG9yID49IDMpIHsKKyAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gYnJva2VuSW1hZ2VWZXJ5SGlSZXMoSW1hZ2U6
OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtaXNzaW5nSW1hZ2VAM3giKS5sZWFrUmVmKCkpOworICAg
ICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoYnJva2VuSW1hZ2VWZXJ5SGlSZXMsIDMpOworICAg
IH0KKworICAgIGlmIChkZXZpY2VTY2FsZUZhY3RvciA+PSAyKSB7CisgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxJbWFnZSo+IGJyb2tlbkltYWdlSGlSZXMoSW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlc291cmNlKCJtaXNzaW5nSW1hZ2VAMngiKS5sZWFrUmVmKCkpOworICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3BhaXIoYnJva2VuSW1hZ2VIaVJlcywgMik7CisgICAgfQorCisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEltYWdlKj4gYnJva2VuSW1hZ2VMb1JlcyhJbWFnZTo6bG9hZFBsYXRm
b3JtUmVzb3VyY2UoIm1pc3NpbmdJbWFnZSIpLmxlYWtSZWYoKSk7CisgICAgcmV0dXJuIHN0ZDo6
bWFrZV9wYWlyKGJyb2tlbkltYWdlTG9SZXMsIDEpOworfQorCitib29sIENhY2hlZEltYWdlOjp3
aWxsUGFpbnRCcm9rZW5JbWFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVycm9yT2NjdXJyZWQo
KSAmJiBtX3Nob3VsZFBhaW50QnJva2VuSW1hZ2U7Cit9CisKK0ltYWdlKiBDYWNoZWRJbWFnZTo6
aW1hZ2UoKQoreworICAgIGlmIChlcnJvck9jY3VycmVkKCkgJiYgbV9zaG91bGRQYWludEJyb2tl
bkltYWdlKSB7CisgICAgICAgIC8vIFJldHVybmluZyB0aGUgMXggYnJva2VuIGltYWdlIGlzIG5v
bi1pZGVhbCwgYnV0IHdlIGNhbm5vdCByZWxpYWJseSBhY2Nlc3MgdGhlIGFwcHJvcHJpYXRlCisg
ICAgICAgIC8vIGRldmljZVNjYWxlRmFjdG9yIGZyb20gaGVyZS4gSXQgaXMgY3JpdGljYWwgdGhh
dCBjYWxsZXJzIHVzZSBDYWNoZWRJbWFnZTo6YnJva2VuSW1hZ2UoKSAKKyAgICAgICAgLy8gd2hl
biB0aGV5IG5lZWQgdGhlIHJlYWwsIGRldmljZVNjYWxlRmFjdG9yLWFwcHJvcHJpYXRlIGJyb2tl
biBpbWFnZSBpY29uLiAKKyAgICAgICAgcmV0dXJuIGJyb2tlbkltYWdlKDEpLmZpcnN0OworICAg
IH0KKworICAgIGlmIChtX2ltYWdlKQorICAgICAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKKwor
ICAgIHJldHVybiBJbWFnZTo6bnVsbEltYWdlKCk7Cit9CisKK0ltYWdlKiBDYWNoZWRJbWFnZTo6
aW1hZ2VGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIGlm
IChlcnJvck9jY3VycmVkKCkgJiYgbV9zaG91bGRQYWludEJyb2tlbkltYWdlKSB7CisgICAgICAg
IC8vIFJldHVybmluZyB0aGUgMXggYnJva2VuIGltYWdlIGlzIG5vbi1pZGVhbCwgYnV0IHdlIGNh
bm5vdCByZWxpYWJseSBhY2Nlc3MgdGhlIGFwcHJvcHJpYXRlCisgICAgICAgIC8vIGRldmljZVNj
YWxlRmFjdG9yIGZyb20gaGVyZS4gSXQgaXMgY3JpdGljYWwgdGhhdCBjYWxsZXJzIHVzZSBDYWNo
ZWRJbWFnZTo6YnJva2VuSW1hZ2UoKSAKKyAgICAgICAgLy8gd2hlbiB0aGV5IG5lZWQgdGhlIHJl
YWwsIGRldmljZVNjYWxlRmFjdG9yLWFwcHJvcHJpYXRlIGJyb2tlbiBpbWFnZSBpY29uLiAKKyAg
ICAgICAgcmV0dXJuIGJyb2tlbkltYWdlKDEpLmZpcnN0OworICAgIH0KKworICAgIGlmICghbV9p
bWFnZSkKKyAgICAgICAgcmV0dXJuIEltYWdlOjpudWxsSW1hZ2UoKTsKKworICAgIGlmIChtX2lt
YWdlLT5pc1NWR0ltYWdlKCkpIHsKKyAgICAgICAgSW1hZ2UqIGltYWdlID0gbV9zdmdJbWFnZUNh
Y2hlLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKTsKKyAgICAgICAgaWYgKGltYWdlICE9IElt
YWdlOjpudWxsSW1hZ2UoKSkKKyAgICAgICAgICAgIHJldHVybiBpbWFnZTsKKyAgICB9CisgICAg
cmV0dXJuIG1faW1hZ2UuZ2V0KCk7Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OnNldENvbnRhaW5l
clNpemVGb3JSZW5kZXJlcihjb25zdCBDYWNoZWRJbWFnZUNsaWVudCogcmVuZGVyZXIsIGNvbnN0
IExheW91dFNpemUmIGNvbnRhaW5lclNpemUsIGZsb2F0IGNvbnRhaW5lclpvb20pCit7CisgICAg
aWYgKGNvbnRhaW5lclNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJU
KHJlbmRlcmVyKTsKKyAgICBBU1NFUlQoY29udGFpbmVyWm9vbSk7CisgICAgaWYgKCFtX2ltYWdl
KSB7CisgICAgICAgIG1fcGVuZGluZ0NvbnRhaW5lclNpemVSZXF1ZXN0cy5zZXQocmVuZGVyZXIs
IFNpemVBbmRab29tKGNvbnRhaW5lclNpemUsIGNvbnRhaW5lclpvb20pKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghbV9pbWFnZS0+aXNTVkdJbWFnZSgpKSB7CisgICAgICAg
IG1faW1hZ2UtPnNldENvbnRhaW5lclNpemUoY29udGFpbmVyU2l6ZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtX3N2Z0ltYWdlQ2FjaGUtPnNldENvbnRhaW5lclNpemVGb3JSZW5k
ZXJlcihyZW5kZXJlciwgY29udGFpbmVyU2l6ZSwgY29udGFpbmVyWm9vbSk7Cit9CisKK2Jvb2wg
Q2FjaGVkSW1hZ2U6OnVzZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdAoreworICAgIGlmICht
X2ltYWdlKQorICAgICAgICByZXR1cm4gbV9pbWFnZS0+dXNlc0NvbnRhaW5lclNpemUoKTsKKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDYWNoZWRJbWFnZTo6aW1hZ2VIYXNSZWxhdGl2
ZVdpZHRoKCkgY29uc3QKK3sKKyAgICBpZiAobV9pbWFnZSkKKyAgICAgICAgcmV0dXJuIG1faW1h
Z2UtPmhhc1JlbGF0aXZlV2lkdGgoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBD
YWNoZWRJbWFnZTo6aW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0Cit7CisgICAgaWYgKG1f
aW1hZ2UpCisgICAgICAgIHJldHVybiBtX2ltYWdlLT5oYXNSZWxhdGl2ZUhlaWdodCgpOworCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitMYXlvdXRTaXplIENhY2hlZEltYWdlOjppbWFnZVNpemVG
b3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBmbG9hdCBtdWx0aXBsaWVy
LCBTaXplVHlwZSBzaXplVHlwZSkKK3sKKyAgICBpZiAoIW1faW1hZ2UpCisgICAgICAgIHJldHVy
biBMYXlvdXRTaXplKCk7CisKKyAgICBMYXlvdXRTaXplIGltYWdlU2l6ZTsKKworICAgIGlmIChp
czxCaXRtYXBJbWFnZT4oKm1faW1hZ2UpICYmIHJlbmRlcmVyICYmIHJlbmRlcmVyLT5zaG91bGRS
ZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQorICAg
ICAgICBpbWFnZVNpemUgPSBMYXlvdXRTaXplKGRvd25jYXN0PEJpdG1hcEltYWdlPigqbV9pbWFn
ZSkuc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpKTsKKyAgICBlbHNlIGlmIChpczxTVkdJbWFn
ZT4oKm1faW1hZ2UpICYmIHNpemVUeXBlID09IFVzZWRTaXplKQorICAgICAgICBpbWFnZVNpemUg
PSBMYXlvdXRTaXplKG1fc3ZnSW1hZ2VDYWNoZS0+aW1hZ2VTaXplRm9yUmVuZGVyZXIocmVuZGVy
ZXIpKTsKKyAgICBlbHNlCisgICAgICAgIGltYWdlU2l6ZSA9IExheW91dFNpemUobV9pbWFnZS0+
c2l6ZSgpKTsKKworICAgIGlmIChtdWx0aXBsaWVyID09IDEuMGYpCisgICAgICAgIHJldHVybiBp
bWFnZVNpemU7CisgICAgICAgIAorICAgIC8vIERvbid0IGxldCBpbWFnZXMgdGhhdCBoYXZlIGEg
d2lkdGgvaGVpZ2h0ID49IDEgc2hyaW5rIGJlbG93IDEgd2hlbiB6b29tZWQuCisgICAgZmxvYXQg
d2lkdGhTY2FsZSA9IG1faW1hZ2UtPmhhc1JlbGF0aXZlV2lkdGgoKSA/IDEuMGYgOiBtdWx0aXBs
aWVyOworICAgIGZsb2F0IGhlaWdodFNjYWxlID0gbV9pbWFnZS0+aGFzUmVsYXRpdmVIZWlnaHQo
KSA/IDEuMGYgOiBtdWx0aXBsaWVyOworICAgIExheW91dFNpemUgbWluaW11bVNpemUoaW1hZ2VT
aXplLndpZHRoKCkgPiAwID8gMSA6IDAsIGltYWdlU2l6ZS5oZWlnaHQoKSA+IDAgPyAxIDogMCk7
CisgICAgaW1hZ2VTaXplLnNjYWxlKHdpZHRoU2NhbGUsIGhlaWdodFNjYWxlKTsKKyAgICBpbWFn
ZVNpemUuY2xhbXBUb01pbmltdW1TaXplKG1pbmltdW1TaXplKTsKKyAgICBBU1NFUlQobXVsdGlw
bGllciAhPSAxLjBmIHx8IChpbWFnZVNpemUud2lkdGgoKS5mcmFjdGlvbigpID09IDAuMGYgJiYg
aW1hZ2VTaXplLmhlaWdodCgpLmZyYWN0aW9uKCkgPT0gMC4wZikpOworICAgIHJldHVybiBpbWFn
ZVNpemU7Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OmNvbXB1dGVJbnRyaW5zaWNEaW1lbnNpb25z
KExlbmd0aCYgaW50cmluc2ljV2lkdGgsIExlbmd0aCYgaW50cmluc2ljSGVpZ2h0LCBGbG9hdFNp
emUmIGludHJpbnNpY1JhdGlvKQoreworICAgIGlmIChtX2ltYWdlKQorICAgICAgICBtX2ltYWdl
LT5jb21wdXRlSW50cmluc2ljRGltZW5zaW9ucyhpbnRyaW5zaWNXaWR0aCwgaW50cmluc2ljSGVp
Z2h0LCBpbnRyaW5zaWNSYXRpbyk7Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6Om5vdGlmeU9ic2Vy
dmVycyhjb25zdCBJbnRSZWN0KiBjaGFuZ2VSZWN0KQoreworICAgIENhY2hlZFJlc291cmNlQ2xp
ZW50V2Fsa2VyPENhY2hlZEltYWdlQ2xpZW50PiB3KG1fY2xpZW50cyk7CisgICAgd2hpbGUgKENh
Y2hlZEltYWdlQ2xpZW50KiBjID0gdy5uZXh0KCkpCisgICAgICAgIGMtPmltYWdlQ2hhbmdlZCh0
aGlzLCBjaGFuZ2VSZWN0KTsKK30KKwordm9pZCBDYWNoZWRJbWFnZTo6Y2hlY2tTaG91bGRQYWlu
dEJyb2tlbkltYWdlKCkKK3sKKyAgICBpZiAoIW1fbG9hZGVyIHx8IG1fbG9hZGVyLT5yZWFjaGVk
VGVybWluYWxTdGF0ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Nob3VsZFBhaW50QnJv
a2VuSW1hZ2UgPSBtX2xvYWRlci0+ZnJhbWVMb2FkZXIoKS0+Y2xpZW50KCkuc2hvdWxkUGFpbnRC
cm9rZW5JbWFnZSh1cmwoKSk7Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OmNsZWFyKCkKK3sKKyAg
ICBkZXN0cm95RGVjb2RlZERhdGEoKTsKKyAgICBjbGVhckltYWdlKCk7CisgICAgbV9wZW5kaW5n
Q29udGFpbmVyU2l6ZVJlcXVlc3RzLmNsZWFyKCk7CisgICAgc2V0RW5jb2RlZFNpemUoMCk7Cit9
CisKK2lubGluZSB2b2lkIENhY2hlZEltYWdlOjpjcmVhdGVJbWFnZSgpCit7CisgICAgLy8gQ3Jl
YXRlIHRoZSBpbWFnZSBpZiBpdCBkb2Vzbid0IHlldCBleGlzdC4KKyAgICBpZiAobV9pbWFnZSkK
KyAgICAgICAgcmV0dXJuOworCisjaWYgVVNFKENHKSAmJiAhVVNFKFdFQktJVF9JTUFHRV9ERUNP
REVSUykKKyAgICBlbHNlIGlmIChtX3Jlc3BvbnNlLm1pbWVUeXBlKCkgPT0gImFwcGxpY2F0aW9u
L3BkZiIpCisgICAgICAgIG1faW1hZ2UgPSBQREZEb2N1bWVudEltYWdlOjpjcmVhdGUodGhpcyk7
CisjZW5kaWYKKyAgICBlbHNlIGlmIChtX3Jlc3BvbnNlLm1pbWVUeXBlKCkgPT0gImltYWdlL3N2
Zyt4bWwiKSB7CisgICAgICAgIGF1dG8gc3ZnSW1hZ2UgPSBTVkdJbWFnZTo6Y3JlYXRlKCp0aGlz
LCB1cmwoKSk7CisgICAgICAgIG1fc3ZnSW1hZ2VDYWNoZSA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZH
SW1hZ2VDYWNoZT4oc3ZnSW1hZ2UucHRyKCkpOworICAgICAgICBtX2ltYWdlID0gV1RGTW92ZShz
dmdJbWFnZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9pbWFnZSA9IEJpdG1hcEltYWdlOjpj
cmVhdGUodGhpcyk7CisgICAgICAgIGRvd25jYXN0PEJpdG1hcEltYWdlPigqbV9pbWFnZSkuc2V0
QWxsb3dTdWJzYW1wbGluZyhtX2xvYWRlciAmJiBtX2xvYWRlci0+ZnJhbWVMb2FkZXIoKS0+ZnJh
bWUoKS5zZXR0aW5ncygpLmltYWdlU3Vic2FtcGxpbmdFbmFibGVkKCkpOworICAgIH0KKworICAg
IGlmIChtX2ltYWdlKSB7CisgICAgICAgIC8vIFNlbmQgcXVldWVkIGNvbnRhaW5lciBzaXplIHJl
cXVlc3RzLgorICAgICAgICBpZiAobV9pbWFnZS0+dXNlc0NvbnRhaW5lclNpemUoKSkgeworICAg
ICAgICAgICAgZm9yIChhdXRvJiByZXF1ZXN0IDogbV9wZW5kaW5nQ29udGFpbmVyU2l6ZVJlcXVl
c3RzKQorICAgICAgICAgICAgICAgIHNldENvbnRhaW5lclNpemVGb3JSZW5kZXJlcihyZXF1ZXN0
LmtleSwgcmVxdWVzdC52YWx1ZS5maXJzdCwgcmVxdWVzdC52YWx1ZS5zZWNvbmQpOworICAgICAg
ICB9CisgICAgICAgIG1fcGVuZGluZ0NvbnRhaW5lclNpemVSZXF1ZXN0cy5jbGVhcigpOworICAg
IH0KK30KKworaW5saW5lIHZvaWQgQ2FjaGVkSW1hZ2U6OmNsZWFySW1hZ2UoKQoreworICAgIC8v
IElmIG91ciBJbWFnZSBoYXMgYW4gb2JzZXJ2ZXIsIGl0J3MgYWx3YXlzIHVzIHNvIHdlIG5lZWQg
dG8gY2xlYXIgdGhlIGJhY2sgcG9pbnRlcgorICAgIC8vIGJlZm9yZSBkcm9wcGluZyBvdXIgcmVm
ZXJlbmNlLgorICAgIGlmIChtX2ltYWdlKQorICAgICAgICBtX2ltYWdlLT5zZXRJbWFnZU9ic2Vy
dmVyKG51bGxwdHIpOworICAgIG1faW1hZ2UgPSBudWxscHRyOworfQorCit2b2lkIENhY2hlZElt
YWdlOjphZGRJbmNyZW1lbnRhbERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJiBkYXRhKQoreworICAg
IG1fZGF0YSA9ICZkYXRhOworCisgICAgY3JlYXRlSW1hZ2UoKTsKKworICAgIC8vIEhhdmUgdGhl
IGltYWdlIHVwZGF0ZSBpdHMgZGF0YSBmcm9tIGl0cyBpbnRlcm5hbCBidWZmZXIuCisgICAgLy8g
SXQgd2lsbCBub3QgZG8gYW55dGhpbmcgbm93LCBidXQgd2lsbCBkZWxheSBkZWNvZGluZyB1bnRp
bAorICAgIC8vIHF1ZXJpZWQgZm9yIGluZm8gKGxpa2Ugc2l6ZSBvciBzcGVjaWZpYyBpbWFnZSBm
cmFtZXMpLgorICAgIGJvb2wgc2l6ZUF2YWlsYWJsZSA9IG1faW1hZ2UtPnNldERhdGEoJmRhdGEs
IGZhbHNlKTsKKyAgICBpZiAoIXNpemVBdmFpbGFibGUpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChtX2ltYWdlLT5pc051bGwoKSkgeworICAgICAgICAvLyBJbWFnZSBkZWNvZGluZyBmYWls
ZWQuIEVpdGhlciB3ZSBuZWVkIG1vcmUgaW1hZ2UgZGF0YSBvciB0aGUgaW1hZ2UgZGF0YSBpcyBt
YWxmb3JtZWQuCisgICAgICAgIGVycm9yKGVycm9yT2NjdXJyZWQoKSA/IHN0YXR1cygpIDogRGVj
b2RlRXJyb3IpOworICAgICAgICBpZiAoaW5DYWNoZSgpKQorICAgICAgICAgICAgTWVtb3J5Q2Fj
aGU6OnNpbmdsZXRvbigpLnJlbW92ZSgqdGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBUZWxsIG91ciBvYnNlcnZlcnMgdG8gdHJ5IHRvIGRyYXcuCisgICAgLy8gRWFjaCBj
aHVuayBmcm9tIHRoZSBuZXR3b3JrIGNhdXNlcyBvYnNlcnZlcnMgdG8gcmVwYWludCwgd2hpY2gg
d2lsbCBmb3JjZSB0aGF0IGNodW5rIHRvIGRlY29kZS4KKyAgICAvLyBJdCB3b3VsZCBiZSBuaWNl
IHRvIG9ubHkgcmVkcmF3IHRoZSBkZWNvZGVkIGJhbmQgb2YgdGhlIGltYWdlLCBidXQgd2l0aCB0
aGUgY3VycmVudCBkZXNpZ24KKyAgICAvLyAoZGVjb2RpbmcgZGVsYXllZCB1bnRpbCBwYWludGlu
ZykgdGhhdCBzZWVtcyBoYXJkLgorICAgIG5vdGlmeU9ic2VydmVycygpOworCisgICAgc2V0RW5j
b2RlZFNpemUobV9pbWFnZS0+ZGF0YSgpID8gbV9pbWFnZS0+ZGF0YSgpLT5zaXplKCkgOiAwKTsK
K30KKwordm9pZCBDYWNoZWRJbWFnZTo6YWRkRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXImIGRhdGEp
Cit7CisgICAgQVNTRVJUKGRhdGFCdWZmZXJpbmdQb2xpY3koKSA9PSBCdWZmZXJEYXRhKTsKKyAg
ICBhZGRJbmNyZW1lbnRhbERhdGFCdWZmZXIoZGF0YSk7CisgICAgQ2FjaGVkUmVzb3VyY2U6OmFk
ZERhdGFCdWZmZXIoZGF0YSk7Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OmFkZERhdGEoY29uc3Qg
Y2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIEFTU0VSVChkYXRhQnVmZmVyaW5n
UG9saWN5KCkgPT0gRG9Ob3RCdWZmZXJEYXRhKTsKKyAgICBhZGRJbmNyZW1lbnRhbERhdGFCdWZm
ZXIoU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YSwgbGVuZ3RoKSk7CisgICAgQ2FjaGVkUmVzb3Vy
Y2U6OmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBDYWNoZWRJbWFnZTo6ZmluaXNo
TG9hZGluZyhTaGFyZWRCdWZmZXIqIGRhdGEpCit7CisgICAgbV9kYXRhID0gZGF0YTsKKyAgICBp
ZiAoIW1faW1hZ2UgJiYgZGF0YSkKKyAgICAgICAgY3JlYXRlSW1hZ2UoKTsKKworICAgIGlmICht
X2ltYWdlKQorICAgICAgICBtX2ltYWdlLT5zZXREYXRhKGRhdGEsIHRydWUpOworCisgICAgaWYg
KCFtX2ltYWdlIHx8IG1faW1hZ2UtPmlzTnVsbCgpKSB7CisgICAgICAgIC8vIEltYWdlIGRlY29k
aW5nIGZhaWxlZDsgdGhlIGltYWdlIGRhdGEgaXMgbWFsZm9ybWVkLgorICAgICAgICBlcnJvcihl
cnJvck9jY3VycmVkKCkgPyBzdGF0dXMoKSA6IERlY29kZUVycm9yKTsKKyAgICAgICAgaWYgKGlu
Q2FjaGUoKSkKKyAgICAgICAgICAgIE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUoKnRo
aXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbm90aWZ5T2JzZXJ2ZXJzKCk7Cisg
ICAgaWYgKG1faW1hZ2UpCisgICAgICAgIHNldEVuY29kZWRTaXplKG1faW1hZ2UtPmRhdGEoKSA/
IG1faW1hZ2UtPmRhdGEoKS0+c2l6ZSgpIDogMCk7CisgICAgQ2FjaGVkUmVzb3VyY2U6OmZpbmlz
aExvYWRpbmcoZGF0YSk7Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OmRpZFJlcGxhY2VTaGFyZWRC
dWZmZXJDb250ZW50cygpCit7CisgICAgaWYgKG1faW1hZ2UpIHsKKyAgICAgICAgLy8gTGV0IHRo
ZSBJbWFnZSBrbm93IHRoYXQgdGhlIFNoYXJlZEJ1ZmZlciBoYXMgYmVlbiByZWppZ2dlZCwgc28g
aXQgY2FuIGxldCBnbyBvZiBhbnkgcmVmZXJlbmNlcyB0byB0aGUgaGVhcC1hbGxvY2F0ZWQgcmVz
b3VyY2UgYnVmZmVyLgorICAgICAgICAvLyBGSVhNRShyZGFyOi8vcHJvYmxlbS8yNDI3NTYxNyk6
IEl0IHdvdWxkIGJlIGJldHRlciBpZiB3ZSBjb3VsZCBzb21laG93IHRlbGwgdGhlIEltYWdlJ3Mg
ZGVjb2RlciB0byBzd2FwIGluIHRoZSBuZXcgY29udGVudHMgd2l0aG91dCBkZXN0cm95aW5nIGFu
eXRoaW5nLgorICAgICAgICBtX2ltYWdlLT5kZXN0cm95RGVjb2RlZERhdGEodHJ1ZSk7CisgICAg
fQorICAgIENhY2hlZFJlc291cmNlOjpkaWRSZXBsYWNlU2hhcmVkQnVmZmVyQ29udGVudHMoKTsK
K30KKwordm9pZCBDYWNoZWRJbWFnZTo6ZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OlN0YXR1cyBzdGF0
dXMpCit7CisgICAgY2hlY2tTaG91bGRQYWludEJyb2tlbkltYWdlKCk7CisgICAgY2xlYXIoKTsK
KyAgICBDYWNoZWRSZXNvdXJjZTo6ZXJyb3Ioc3RhdHVzKTsKKyAgICBub3RpZnlPYnNlcnZlcnMo
KTsKK30KKwordm9pZCBDYWNoZWRJbWFnZTo6cmVzcG9uc2VSZWNlaXZlZChjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBpZiAoIW1fcmVzcG9uc2UuaXNOdWxsKCkpCisg
ICAgICAgIGNsZWFyKCk7CisgICAgQ2FjaGVkUmVzb3VyY2U6OnJlc3BvbnNlUmVjZWl2ZWQocmVz
cG9uc2UpOworfQorCit2b2lkIENhY2hlZEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEoKQorewor
ICAgIGJvb2wgY2FuRGVsZXRlSW1hZ2UgPSAhbV9pbWFnZSB8fCAobV9pbWFnZS0+aGFzT25lUmVm
KCkgJiYgbV9pbWFnZS0+aXNCaXRtYXBJbWFnZSgpKTsKKyAgICBpZiAoY2FuRGVsZXRlSW1hZ2Ug
JiYgIWlzTG9hZGluZygpICYmICFoYXNDbGllbnRzKCkpIHsKKyAgICAgICAgbV9pbWFnZSA9IG51
bGxwdHI7CisgICAgICAgIHNldERlY29kZWRTaXplKDApOworICAgIH0gZWxzZSBpZiAobV9pbWFn
ZSAmJiAhZXJyb3JPY2N1cnJlZCgpKQorICAgICAgICBtX2ltYWdlLT5kZXN0cm95RGVjb2RlZERh
dGEoKTsKK30KKwordm9pZCBDYWNoZWRJbWFnZTo6ZGVjb2RlZFNpemVDaGFuZ2VkKGNvbnN0IElt
YWdlKiBpbWFnZSwgaW50IGRlbHRhKQoreworICAgIGlmICghaW1hZ2UgfHwgaW1hZ2UgIT0gbV9p
bWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHNldERlY29kZWRTaXplKGRlY29kZWRT
aXplKCkgKyBkZWx0YSk7Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OmRpZERyYXcoY29uc3QgSW1h
Z2UqIGltYWdlKQoreworICAgIGlmICghaW1hZ2UgfHwgaW1hZ2UgIT0gbV9pbWFnZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIGRvdWJsZSB0aW1lU3RhbXAgPSBGcmFtZVZpZXc6OmN1cnJl
bnRQYWludFRpbWVTdGFtcCgpOworICAgIGlmICghdGltZVN0YW1wKSAvLyBJZiBkaWREcmF3IGlz
IGNhbGxlZCBvdXRzaWRlIG9mIGEgRnJhbWUgcGFpbnQuCisgICAgICAgIHRpbWVTdGFtcCA9IG1v
bm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworICAgIAorICAgIENhY2hlZFJlc291cmNlOjpk
aWRBY2Nlc3NEZWNvZGVkRGF0YSh0aW1lU3RhbXApOworfQorCit2b2lkIENhY2hlZEltYWdlOjph
bmltYXRpb25BZHZhbmNlZChjb25zdCBJbWFnZSogaW1hZ2UpCit7CisgICAgaWYgKCFpbWFnZSB8
fCBpbWFnZSAhPSBtX2ltYWdlKQorICAgICAgICByZXR1cm47CisgICAgQ2FjaGVkUmVzb3VyY2VD
bGllbnRXYWxrZXI8Q2FjaGVkSW1hZ2VDbGllbnQ+IGNsaWVudFdhbGtlcihtX2NsaWVudHMpOwor
ICAgIHdoaWxlIChDYWNoZWRJbWFnZUNsaWVudCogY2xpZW50ID0gY2xpZW50V2Fsa2VyLm5leHQo
KSkKKyAgICAgICAgY2xpZW50LT5uZXdJbWFnZUFuaW1hdGlvbkZyYW1lQXZhaWxhYmxlKCp0aGlz
KTsKK30KKwordm9pZCBDYWNoZWRJbWFnZTo6Y2hhbmdlZEluUmVjdChjb25zdCBJbWFnZSogaW1h
Z2UsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFpbWFnZSB8fCBpbWFnZSAhPSBt
X2ltYWdlKQorICAgICAgICByZXR1cm47CisgICAgbm90aWZ5T2JzZXJ2ZXJzKCZyZWN0KTsKK30K
KworYm9vbCBDYWNoZWRJbWFnZTo6Y3VycmVudEZyYW1lS25vd25Ub0JlT3BhcXVlKGNvbnN0IFJl
bmRlckVsZW1lbnQqIHJlbmRlcmVyKQoreworICAgIEltYWdlKiBpbWFnZSA9IGltYWdlRm9yUmVu
ZGVyZXIocmVuZGVyZXIpOworICAgIHJldHVybiBpbWFnZS0+Y3VycmVudEZyYW1lS25vd25Ub0Jl
T3BhcXVlKCk7Cit9CisKK2Jvb2wgQ2FjaGVkSW1hZ2U6OmlzT3JpZ2luQ2xlYW4oU2VjdXJpdHlP
cmlnaW4qIHNlY3VyaXR5T3JpZ2luKQoreworICAgIGlmICghaW1hZ2UoKS0+aGFzU2luZ2xlU2Vj
dXJpdHlPcmlnaW4oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChwYXNzZXNBY2Nl
c3NDb250cm9sQ2hlY2soKnNlY3VyaXR5T3JpZ2luKSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuICFzZWN1cml0eU9yaWdpbi0+dGFpbnRzQ2FudmFzKHJlc3BvbnNlRm9yU2FtZU9y
aWdpblBvbGljeUNoZWNrcygpLnVybCgpKTsKK30KKworQ2FjaGVkUmVzb3VyY2U6OlJldmFsaWRh
dGlvbkRlY2lzaW9uIENhY2hlZEltYWdlOjptYWtlUmV2YWxpZGF0aW9uRGVjaXNpb24oQ2FjaGVQ
b2xpY3kgY2FjaGVQb2xpY3kpIGNvbnN0Cit7CisgICAgaWYgKFVOTElLRUxZKGlzTWFudWFsbHlD
YWNoZWQoKSkpIHsKKyAgICAgICAgLy8gRG8gbm90IHJldmFsaWRhdGUgbWFudWFsbHkgY2FjaGVk
IGltYWdlcy4gVGhpcyBtZWNoYW5pc20gaXMgdXNlZCBhcyBhCisgICAgICAgIC8vIHdheSB0byBl
ZmZpY2llbnRseSBzaGFyZSBhbiBpbWFnZSBmcm9tIHRoZSBjbGllbnQgdG8gY29udGVudCBhbmQK
KyAgICAgICAgLy8gdGhlIFVSTCBmb3IgdGhhdCBpbWFnZSBtYXkgbm90IHJlcHJlc2VudCBhIHJl
c291cmNlIHRoYXQgY2FuIGJlCisgICAgICAgIC8vIHJldHJpZXZlZCBieSBzdGFuZGFyZCBtZWFu
cy4gSWYgdGhlIG1hbnVhbCBjYWNoaW5nIFNQSSBpcyB1c2VkLCBpdCBpcworICAgICAgICAvLyBp
bmN1bWJlbnQgb24gdGhlIGNsaWVudCB0byBvbmx5IHVzZSB2YWxpZCByZXNvdXJjZXMuCisgICAg
ICAgIHJldHVybiBSZXZhbGlkYXRpb25EZWNpc2lvbjo6Tm87CisgICAgfQorICAgIHJldHVybiBD
YWNoZWRSZXNvdXJjZTo6bWFrZVJldmFsaWRhdGlvbkRlY2lzaW9uKGNhY2hlUG9saWN5KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2ZldGNoL0NhY2hlZEltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2Fj
aGVkSW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMGRiOTRkYzk2OTA5ZThhNjYxMDNiMTBlNTA5ZDA5Mzc2
ODE3OTAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0Nh
Y2hlZEltYWdlLmgKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAxOTk4
IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCisgICAgQ29weXJpZ2h0IChDKSAyMDAx
IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwNiBT
YW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisK
KyNpZm5kZWYgQ2FjaGVkSW1hZ2VfaAorI2RlZmluZSBDYWNoZWRJbWFnZV9oCisKKyNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VP
YnNlcnZlci5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXplSGFzaC5o
IgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIKKyNpbmNsdWRlICJTVkdJbWFnZUNhY2hlLmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBD
YWNoZWRJbWFnZUNsaWVudDsKK2NsYXNzIENhY2hlZFJlc291cmNlTG9hZGVyOworY2xhc3MgRmxv
YXRTaXplOworY2xhc3MgTWVtb3J5Q2FjaGU7CitjbGFzcyBSZW5kZXJFbGVtZW50OworY2xhc3Mg
UmVuZGVyT2JqZWN0OworY2xhc3MgU2VjdXJpdHlPcmlnaW47CisKK3N0cnVjdCBMZW5ndGg7CisK
K2NsYXNzIENhY2hlZEltYWdlIGZpbmFsIDogcHVibGljIENhY2hlZFJlc291cmNlLCBwdWJsaWMg
SW1hZ2VPYnNlcnZlciB7CisgICAgZnJpZW5kIGNsYXNzIE1lbW9yeUNhY2hlOworCitwdWJsaWM6
CisgICAgZW51bSBDYWNoZUJlaGF2aW9yVHlwZSB7IEF1dG9tYXRpY2FsbHlDYWNoZWQsIE1hbnVh
bGx5Q2FjaGVkIH07CisKKyAgICBDYWNoZWRJbWFnZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBT
ZXNzaW9uSUQpOworICAgIENhY2hlZEltYWdlKEltYWdlKiwgU2Vzc2lvbklEKTsKKyAgICBDYWNo
ZWRJbWFnZShjb25zdCBVUkwmLCBJbWFnZSosIFNlc3Npb25JRCk7CisgICAgQ2FjaGVkSW1hZ2Uo
Y29uc3QgVVJMJiwgSW1hZ2UqLCBDYWNoZUJlaGF2aW9yVHlwZSwgU2Vzc2lvbklEKTsKKyAgICB2
aXJ0dWFsIH5DYWNoZWRJbWFnZSgpOworCisgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2UqIGltYWdl
KCk7IC8vIFJldHVybnMgdGhlIG51bGxJbWFnZSgpIGlmIHRoZSBpbWFnZSBpcyBub3QgYXZhaWxh
YmxlIHlldC4KKyAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZSogaW1hZ2VGb3JSZW5kZXJlcihjb25z
dCBSZW5kZXJPYmplY3QqKTsgLy8gUmV0dXJucyB0aGUgbnVsbEltYWdlKCkgaWYgdGhlIGltYWdl
IGlzIG5vdCBhdmFpbGFibGUgeWV0LgorICAgIGJvb2wgaGFzSW1hZ2UoKSBjb25zdCB7IHJldHVy
biBtX2ltYWdlLmdldCgpOyB9CisgICAgYm9vbCBjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUo
Y29uc3QgUmVuZGVyRWxlbWVudCopOworCisgICAgc3RkOjpwYWlyPEltYWdlKiwgZmxvYXQ+IGJy
b2tlbkltYWdlKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKSBjb25zdDsgLy8gUmV0dXJucyBhbiBp
bWFnZSBhbmQgdGhlIGltYWdlJ3MgcmVzb2x1dGlvbiBzY2FsZSBmYWN0b3IuCisgICAgYm9vbCB3
aWxsUGFpbnRCcm9rZW5JbWFnZSgpIGNvbnN0OyAKKworICAgIGJvb2wgY2FuUmVuZGVyKGNvbnN0
IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGZsb2F0IG11bHRpcGxpZXIpIHsgcmV0dXJuICFlcnJv
ck9jY3VycmVkKCkgJiYgIWltYWdlU2l6ZUZvclJlbmRlcmVyKHJlbmRlcmVyLCBtdWx0aXBsaWVy
KS5pc0VtcHR5KCk7IH0KKworICAgIHZvaWQgc2V0Q29udGFpbmVyU2l6ZUZvclJlbmRlcmVyKGNv
bnN0IENhY2hlZEltYWdlQ2xpZW50KiwgY29uc3QgTGF5b3V0U2l6ZSYsIGZsb2F0KTsKKyAgICBi
b29sIHVzZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdDsKKyAgICBib29sIGltYWdlSGFzUmVs
YXRpdmVXaWR0aCgpIGNvbnN0OworICAgIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpIGNv
bnN0OworCisgICAgdm9pZCBhZGREYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZmluaXNoTG9hZGluZyhTaGFyZWRCdWZmZXIqKSBvdmVycmlkZTsKKworICAgIGVu
dW0gU2l6ZVR5cGUgeworICAgICAgICBVc2VkU2l6ZSwKKyAgICAgICAgSW50cmluc2ljU2l6ZQor
ICAgIH07CisgICAgLy8gVGhpcyBtZXRob2QgdGFrZXMgYSB6b29tIG11bHRpcGxpZXIgdGhhdCBj
YW4gYmUgdXNlZCB0byBpbmNyZWFzZSB0aGUgbmF0dXJhbCBzaXplIG9mIHRoZSBpbWFnZSBieSB0
aGUgem9vbS4KKyAgICBMYXlvdXRTaXplIGltYWdlU2l6ZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRl
ck9iamVjdCosIGZsb2F0IG11bHRpcGxpZXIsIFNpemVUeXBlID0gVXNlZFNpemUpOyAvLyByZXR1
cm5zIHRoZSBzaXplIG9mIHRoZSBjb21wbGV0ZSBpbWFnZS4KKyAgICB2b2lkIGNvbXB1dGVJbnRy
aW5zaWNEaW1lbnNpb25zKExlbmd0aCYgaW50cmluc2ljV2lkdGgsIExlbmd0aCYgaW50cmluc2lj
SGVpZ2h0LCBGbG9hdFNpemUmIGludHJpbnNpY1JhdGlvKTsKKworICAgIGJvb2wgaXNNYW51YWxs
eUNhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNNYW51YWxseUNhY2hlZDsgfQorICAgIFJldmFs
aWRhdGlvbkRlY2lzaW9uIG1ha2VSZXZhbGlkYXRpb25EZWNpc2lvbihDYWNoZVBvbGljeSkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyJiwgY29uc3Qg
UmVzb3VyY2VMb2FkZXJPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAgICBib29sIGlzT3JpZ2luQ2xl
YW4oU2VjdXJpdHlPcmlnaW4qKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAg
ICBDYWNoZWRJbWFnZShDYWNoZWRJbWFnZSYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFNlc3Np
b25JRCk7CisKKyAgICB2b2lkIHNldEJvZHlEYXRhRnJvbShjb25zdCBDYWNoZWRSZXNvdXJjZSYp
IGZpbmFsOworCisgICAgdm9pZCBjcmVhdGVJbWFnZSgpOworICAgIHZvaWQgY2xlYXJJbWFnZSgp
OworICAgIC8vIElmIG5vdCBudWxsLCBjaGFuZ2VSZWN0IGlzIHRoZSBjaGFuZ2VkIHBhcnQgb2Yg
dGhlIGltYWdlLgorICAgIHZvaWQgbm90aWZ5T2JzZXJ2ZXJzKGNvbnN0IEludFJlY3QqIGNoYW5n
ZVJlY3QgPSBudWxscHRyKTsKKyAgICB2b2lkIGNoZWNrU2hvdWxkUGFpbnRCcm9rZW5JbWFnZSgp
OworCisgICAgdm9pZCBzd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNlKCkgb3ZlcnJp
ZGU7CisgICAgYm9vbCBtYXlUcnlSZXBsYWNlRW5jb2RlZERhdGEoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9CisKKyAgICB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNs
aWVudCopIG92ZXJyaWRlOworICAgIHZvaWQgZGlkUmVtb3ZlQ2xpZW50KENhY2hlZFJlc291cmNl
Q2xpZW50Kikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGFsbENsaWVudHNSZW1vdmVkKCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoKSBvdmVycmlkZTsKKworICAgIHZvaWQg
YWRkRGF0YShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpIG92ZXJyaWRlOworICAg
IHZvaWQgZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OlN0YXR1cykgb3ZlcnJpZGU7CisgICAgdm9pZCBy
ZXNwb25zZVJlY2VpdmVkKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSBvdmVycmlkZTsKKworICAg
IC8vIEZvciBjb21wYXRpYmlsaXR5LCBpbWFnZXMga2VlcCBsb2FkaW5nIGV2ZW4gaWYgdGhlcmUg
YXJlIEhUVFAgZXJyb3JzLgorICAgIGJvb2wgc2hvdWxkSWdub3JlSFRUUFN0YXR1c0NvZGVFcnJv
cnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBib29sIHN0aWxsTmVl
ZHNMb2FkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIWVycm9yT2NjdXJyZWQoKSAmJiBzdGF0
dXMoKSA9PSBVbmtub3duICYmICFpc0xvYWRpbmcoKTsgfQorCisgICAgLy8gSW1hZ2VPYnNlcnZl
cgorICAgIHZvaWQgZGVjb2RlZFNpemVDaGFuZ2VkKGNvbnN0IEltYWdlKiwgaW50IGRlbHRhKSBv
dmVycmlkZTsKKyAgICB2b2lkIGRpZERyYXcoY29uc3QgSW1hZ2UqKSBvdmVycmlkZTsKKworICAg
IHZvaWQgYW5pbWF0aW9uQWR2YW5jZWQoY29uc3QgSW1hZ2UqKSBvdmVycmlkZTsKKyAgICB2b2lk
IGNoYW5nZWRJblJlY3QoY29uc3QgSW1hZ2UqLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisK
KyAgICB2b2lkIGFkZEluY3JlbWVudGFsRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXImKTsKKworICAg
IHZvaWQgZGlkUmVwbGFjZVNoYXJlZEJ1ZmZlckNvbnRlbnRzKCkgb3ZlcnJpZGU7CisKKyAgICB0
eXBlZGVmIHN0ZDo6cGFpcjxMYXlvdXRTaXplLCBmbG9hdD4gU2l6ZUFuZFpvb207CisgICAgdHlw
ZWRlZiBIYXNoTWFwPGNvbnN0IENhY2hlZEltYWdlQ2xpZW50KiwgU2l6ZUFuZFpvb20+IENvbnRh
aW5lclNpemVSZXF1ZXN0czsKKyAgICBDb250YWluZXJTaXplUmVxdWVzdHMgbV9wZW5kaW5nQ29u
dGFpbmVyU2l6ZVJlcXVlc3RzOworCisgICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxTVkdJbWFnZUNhY2hlPiBtX3N2Z0ltYWdlQ2FjaGU7CisgICAgdW5zaWdu
ZWQgbV9pc01hbnVhbGx5Q2FjaGVkIDogMTsKKyAgICB1bnNpZ25lZCBtX3Nob3VsZFBhaW50QnJv
a2VuSW1hZ2UgOiAxOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0NBQ0hFRF9SRVNPVVJDRShDYWNoZWRJbWFnZSwgQ2FjaGVkUmVzb3VyY2U6
OkltYWdlUmVzb3VyY2UpCisKKyNlbmRpZiAvLyBDYWNoZWRJbWFnZV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkSW1hZ2VDbGllbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRJbWFnZUNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcyMjM1
YWNiZjlhZmE0Y2U4YzlhNmFhMzYxOWYzNDk1ZDk0MTlhOWQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkSW1hZ2VDbGllbnQuaApAQCAtMCwwICsx
LDQ5IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGkt
aGQubXBnLmRlKQorICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJA
a2RlLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5p
Z0BnbWFpbC5jb20pCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIENhY2hlZEltYWdlQ2xp
ZW50X2gKKyNkZWZpbmUgQ2FjaGVkSW1hZ2VDbGllbnRfaAorCisjaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2VDbGllbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWNoZWRJbWFn
ZTsKK2NsYXNzIEludFJlY3Q7CisKK2NsYXNzIENhY2hlZEltYWdlQ2xpZW50IDogcHVibGljIENh
Y2hlZFJlc291cmNlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DYWNoZWRJbWFnZUNs
aWVudCgpIHsgfQorICAgIHN0YXRpYyBDYWNoZWRSZXNvdXJjZUNsaWVudFR5cGUgZXhwZWN0ZWRU
eXBlKCkgeyByZXR1cm4gSW1hZ2VUeXBlOyB9CisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRUeXBl
IHJlc291cmNlQ2xpZW50VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGV4cGVjdGVkVHlw
ZSgpOyB9CisKKyAgICAvLyBDYWxsZWQgd2hlbmV2ZXIgYSBmcmFtZSBvZiBhbiBpbWFnZSBjaGFu
Z2VzIGJlY2F1c2Ugd2UgZ290IG1vcmUgZGF0YSBmcm9tIHRoZSBuZXR3b3JrLgorICAgIC8vIElm
IG5vdCBudWxsLCB0aGUgSW50UmVjdCBpcyB0aGUgY2hhbmdlZCByZWN0IG9mIHRoZSBpbWFnZS4K
KyAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKENhY2hlZEltYWdlKiwgY29uc3QgSW50UmVj
dCogPSBudWxscHRyKSB7IH0KKworICAgIC8vIENhbGxlZCB3aGVuIEdJRiBhbmltYXRpb24gcHJv
Z3Jlc3Nlcy4KKyAgICB2aXJ0dWFsIHZvaWQgbmV3SW1hZ2VBbmltYXRpb25GcmFtZUF2YWlsYWJs
ZShDYWNoZWRJbWFnZSYgaW1hZ2UpIHsgaW1hZ2VDaGFuZ2VkKCZpbWFnZSk7IH0KK307CisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVk
UmF3UmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJhd1Jl
c291cmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYTBkZjhiMDRlY2U1NGRiMTA2NjI0NjI4ZjU4ZmJiYzc4
MWZkYzQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0Nh
Y2hlZFJhd1Jlc291cmNlLmNwcApAQCAtMCwwICsxLDI5NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJDYWNoZWRSYXdSZXNvdXJjZS5oIgorCisjaW5jbHVkZSAiQ2Fj
aGVkUmF3UmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudFdh
bGtlci5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiSFRU
UEhlYWRlck5hbWVzLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiU3Vi
cmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworQ2FjaGVkUmF3UmVzb3VyY2U6OkNhY2hlZFJhd1Jlc291cmNl
KFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBUeXBlIHR5cGUsIFNlc3Npb25JRCBz
ZXNzaW9uSUQpCisgICAgOiBDYWNoZWRSZXNvdXJjZShyZXNvdXJjZVJlcXVlc3QsIHR5cGUsIHNl
c3Npb25JRCkKKyAgICAsIG1faWRlbnRpZmllcigwKQorICAgICwgbV9hbGxvd0VuY29kZWREYXRh
UmVwbGFjZW1lbnQodHJ1ZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluT3JNZWRpYU9yUmF3UmVzb3Vy
Y2UoKSk7Cit9CisKK2NvbnN0IGNoYXIqIENhY2hlZFJhd1Jlc291cmNlOjpjYWxjdWxhdGVJbmNy
ZW1lbnRhbERhdGFDaHVuayhTaGFyZWRCdWZmZXIqIGRhdGEsIHVuc2lnbmVkJiBpbmNyZW1lbnRh
bERhdGFMZW5ndGgpCit7CisgICAgaW5jcmVtZW50YWxEYXRhTGVuZ3RoID0gMDsKKyAgICBpZiAo
IWRhdGEpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdW5zaWduZWQgcHJldmlvdXNE
YXRhTGVuZ3RoID0gZW5jb2RlZFNpemUoKTsKKyAgICBBU1NFUlQoZGF0YS0+c2l6ZSgpID49IHBy
ZXZpb3VzRGF0YUxlbmd0aCk7CisgICAgaW5jcmVtZW50YWxEYXRhTGVuZ3RoID0gZGF0YS0+c2l6
ZSgpIC0gcHJldmlvdXNEYXRhTGVuZ3RoOworICAgIHJldHVybiBkYXRhLT5kYXRhKCkgKyBwcmV2
aW91c0RhdGFMZW5ndGg7Cit9CisKK3ZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OmFkZERhdGFCdWZm
ZXIoU2hhcmVkQnVmZmVyJiBkYXRhKQoreworICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hl
ZFJhd1Jlc291cmNlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIEFTU0VSVChkYXRhQnVmZmVy
aW5nUG9saWN5KCkgPT0gQnVmZmVyRGF0YSk7CisgICAgbV9kYXRhID0gJmRhdGE7CisKKyAgICB1
bnNpZ25lZCBpbmNyZW1lbnRhbERhdGFMZW5ndGg7CisgICAgY29uc3QgY2hhciogaW5jcmVtZW50
YWxEYXRhID0gY2FsY3VsYXRlSW5jcmVtZW50YWxEYXRhQ2h1bmsoJmRhdGEsIGluY3JlbWVudGFs
RGF0YUxlbmd0aCk7CisgICAgc2V0RW5jb2RlZFNpemUoZGF0YS5zaXplKCkpOworICAgIG5vdGlm
eUNsaWVudHNEYXRhV2FzUmVjZWl2ZWQoaW5jcmVtZW50YWxEYXRhLCBpbmNyZW1lbnRhbERhdGFM
ZW5ndGgpOworICAgIGlmIChkYXRhQnVmZmVyaW5nUG9saWN5KCkgPT0gRG9Ob3RCdWZmZXJEYXRh
KSB7CisgICAgICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgICAgIG1fbG9hZGVyLT5zZXREYXRh
QnVmZmVyaW5nUG9saWN5KERvTm90QnVmZmVyRGF0YSk7CisgICAgICAgIGNsZWFyKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDYWNoZWRSZXNvdXJjZTo6YWRkRGF0YUJ1ZmZlcihk
YXRhKTsKK30KKwordm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6YWRkRGF0YShjb25zdCBjaGFyKiBk
YXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgQVNTRVJUKGRhdGFCdWZmZXJpbmdQb2xpY3ko
KSA9PSBEb05vdEJ1ZmZlckRhdGEpOworICAgIG5vdGlmeUNsaWVudHNEYXRhV2FzUmVjZWl2ZWQo
ZGF0YSwgbGVuZ3RoKTsKKyAgICBDYWNoZWRSZXNvdXJjZTo6YWRkRGF0YShkYXRhLCBsZW5ndGgp
OworfQorCit2b2lkIENhY2hlZFJhd1Jlc291cmNlOjpmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1ZmZl
ciogZGF0YSkKK3sKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBEYXRhQnVmZmVyaW5nUG9saWN5IGRhdGFCdWZmZXJp
bmdQb2xpY3kgPSB0aGlzLT5kYXRhQnVmZmVyaW5nUG9saWN5KCk7CisgICAgaWYgKGRhdGFCdWZm
ZXJpbmdQb2xpY3kgPT0gQnVmZmVyRGF0YSkgeworICAgICAgICBtX2RhdGEgPSBkYXRhOworCisg
ICAgICAgIHVuc2lnbmVkIGluY3JlbWVudGFsRGF0YUxlbmd0aDsKKyAgICAgICAgY29uc3QgY2hh
ciogaW5jcmVtZW50YWxEYXRhID0gY2FsY3VsYXRlSW5jcmVtZW50YWxEYXRhQ2h1bmsoZGF0YSwg
aW5jcmVtZW50YWxEYXRhTGVuZ3RoKTsKKyAgICAgICAgaWYgKGRhdGEpCisgICAgICAgICAgICBz
ZXRFbmNvZGVkU2l6ZShkYXRhLT5zaXplKCkpOworICAgICAgICBub3RpZnlDbGllbnRzRGF0YVdh
c1JlY2VpdmVkKGluY3JlbWVudGFsRGF0YSwgaW5jcmVtZW50YWxEYXRhTGVuZ3RoKTsKKyAgICB9
CisKKyAgICBtX2FsbG93RW5jb2RlZERhdGFSZXBsYWNlbWVudCA9ICFtX2xvYWRlci0+aXNRdWlj
a0xvb2tSZXNvdXJjZSgpOworCisgICAgQ2FjaGVkUmVzb3VyY2U6OmZpbmlzaExvYWRpbmcoZGF0
YSk7CisgICAgaWYgKGRhdGFCdWZmZXJpbmdQb2xpY3kgPT0gQnVmZmVyRGF0YSAmJiB0aGlzLT5k
YXRhQnVmZmVyaW5nUG9saWN5KCkgPT0gRG9Ob3RCdWZmZXJEYXRhKSB7CisgICAgICAgIGlmICht
X2xvYWRlcikKKyAgICAgICAgICAgIG1fbG9hZGVyLT5zZXREYXRhQnVmZmVyaW5nUG9saWN5KERv
Tm90QnVmZmVyRGF0YSk7CisgICAgICAgIGNsZWFyKCk7CisgICAgfQorfQorCit2b2lkIENhY2hl
ZFJhd1Jlc291cmNlOjpub3RpZnlDbGllbnRzRGF0YVdhc1JlY2VpdmVkKGNvbnN0IGNoYXIqIGRh
dGEsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+IHByb3RlY3Rl
ZFRoaXModGhpcyk7CisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI8Q2FjaGVkUmF3UmVz
b3VyY2VDbGllbnQ+IHcobV9jbGllbnRzKTsKKyAgICB3aGlsZSAoQ2FjaGVkUmF3UmVzb3VyY2VD
bGllbnQqIGMgPSB3Lm5leHQoKSkKKyAgICAgICAgYy0+ZGF0YVJlY2VpdmVkKHRoaXMsIGRhdGEs
IGxlbmd0aCk7Cit9CisKK3ZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OmRpZEFkZENsaWVudChDYWNo
ZWRSZXNvdXJjZUNsaWVudCogYykKK3sKKyAgICBpZiAoIWhhc0NsaWVudChjKSkKKyAgICAgICAg
cmV0dXJuOworICAgIC8vIFRoZSBjYWxscyB0byB0aGUgY2xpZW50IGNhbiByZXN1bHQgaW4gZXZl
bnRzIHJ1bm5pbmcsIHBvdGVudGlhbGx5IGNhdXNpbmcKKyAgICAvLyB0aGlzIHJlc291cmNlIHRv
IGJlIGV2aWN0ZWQgZnJvbSB0aGUgY2FjaGUgYW5kIGFsbCBjbGllbnRzIHRvIGJlIHJlbW92ZWQs
CisgICAgLy8gc28gYSBwcm90ZWN0b3IgaXMgbmVjZXNzYXJ5LgorICAgIENhY2hlZFJlc291cmNl
SGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIENhY2hl
ZFJhd1Jlc291cmNlQ2xpZW50KiBjbGllbnQgPSBzdGF0aWNfY2FzdDxDYWNoZWRSYXdSZXNvdXJj
ZUNsaWVudCo+KGMpOworICAgIHNpemVfdCByZWRpcmVjdENvdW50ID0gbV9yZWRpcmVjdENoYWlu
LnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZGlyZWN0Q291bnQ7IGkrKykg
eworICAgICAgICBSZWRpcmVjdFBhaXIgcmVkaXJlY3QgPSBtX3JlZGlyZWN0Q2hhaW5baV07Cisg
ICAgICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHJlZGlyZWN0Lm1fcmVxdWVzdCk7CisgICAg
ICAgIGNsaWVudC0+cmVkaXJlY3RSZWNlaXZlZCh0aGlzLCByZXF1ZXN0LCByZWRpcmVjdC5tX3Jl
ZGlyZWN0UmVzcG9uc2UpOworICAgICAgICBpZiAoIWhhc0NsaWVudChjKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKHJlZGlyZWN0Q291bnQgPT0gbV9yZWRpcmVjdENo
YWluLnNpemUoKSk7CisKKyAgICBpZiAoIW1fcmVzcG9uc2UuaXNOdWxsKCkpIHsKKyAgICAgICAg
UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZShtX3Jlc3BvbnNlKTsKKyAgICAgICAgaWYgKHZhbGlk
YXRpb25Db21wbGV0aW5nKCkpCisgICAgICAgICAgICByZXNwb25zZS5zZXRTb3VyY2UoUmVzb3Vy
Y2VSZXNwb25zZTo6U291cmNlOjpNZW1vcnlDYWNoZUFmdGVyVmFsaWRhdGlvbik7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKCF2YWxpZGF0aW9uSW5Qcm9ncmVzcygpKTsKKyAg
ICAgICAgICAgIHJlc3BvbnNlLnNldFNvdXJjZShSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Ok1l
bW9yeUNhY2hlKTsKKyAgICAgICAgfQorICAgICAgICBjbGllbnQtPnJlc3BvbnNlUmVjZWl2ZWQo
dGhpcywgcmVzcG9uc2UpOworICAgIH0KKyAgICBpZiAoIWhhc0NsaWVudChjKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChtX2RhdGEpCisgICAgICAgIGNsaWVudC0+ZGF0YVJlY2VpdmVkKHRo
aXMsIG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSk7CisgICAgaWYgKCFoYXNDbGllbnQo
YykpCisgICAgICAgcmV0dXJuOworICAgIENhY2hlZFJlc291cmNlOjpkaWRBZGRDbGllbnQoY2xp
ZW50KTsKK30KKwordm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6YWxsQ2xpZW50c1JlbW92ZWQoKQor
eworICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgbV9sb2FkZXItPmNhbmNlbElmTm90RmluaXNo
aW5nKCk7Cit9CisKK3ZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OnJlZGlyZWN0UmVjZWl2ZWQoUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
K3sKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKKyAgICBpZiAoIXJlc3BvbnNlLmlzTnVsbCgpKSB7CisgICAgICAgIENhY2hl
ZFJlc291cmNlQ2xpZW50V2Fsa2VyPENhY2hlZFJhd1Jlc291cmNlQ2xpZW50PiB3KG1fY2xpZW50
cyk7CisgICAgICAgIHdoaWxlIChDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgp
KQorICAgICAgICAgICAgYy0+cmVkaXJlY3RSZWNlaXZlZCh0aGlzLCByZXF1ZXN0LCByZXNwb25z
ZSk7CisgICAgICAgIG1fcmVkaXJlY3RDaGFpbi5hcHBlbmQoUmVkaXJlY3RQYWlyKHJlcXVlc3Qs
IHJlc3BvbnNlKSk7CisgICAgfQorICAgIENhY2hlZFJlc291cmNlOjpyZWRpcmVjdFJlY2VpdmVk
KHJlcXVlc3QsIHJlc3BvbnNlKTsKK30KKwordm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6cmVzcG9u
c2VSZWNlaXZlZChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBDYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
KyAgICBpZiAoIW1faWRlbnRpZmllcikKKyAgICAgICAgbV9pZGVudGlmaWVyID0gbV9sb2FkZXIt
PmlkZW50aWZpZXIoKTsKKyAgICBDYWNoZWRSZXNvdXJjZTo6cmVzcG9uc2VSZWNlaXZlZChyZXNw
b25zZSk7CisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI8Q2FjaGVkUmF3UmVzb3VyY2VD
bGllbnQ+IHcobV9jbGllbnRzKTsKKyAgICB3aGlsZSAoQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQq
IGMgPSB3Lm5leHQoKSkKKyAgICAgICAgYy0+cmVzcG9uc2VSZWNlaXZlZCh0aGlzLCBtX3Jlc3Bv
bnNlKTsKK30KKworYm9vbCBDYWNoZWRSYXdSZXNvdXJjZTo6c2hvdWxkQ2FjaGVSZXNwb25zZShj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBDYWNoZWRSZXNvdXJjZUNs
aWVudFdhbGtlcjxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudD4gdyhtX2NsaWVudHMpOworICAgIHdo
aWxlIChDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgpKSB7CisgICAgICAgIGlm
ICghYy0+c2hvdWxkQ2FjaGVSZXNwb25zZSh0aGlzLCByZXNwb25zZSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENhY2hlZFJh
d1Jlc291cmNlOjpkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNp
Z25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQoreworICAgIENhY2hlZFJlc291cmNl
Q2xpZW50V2Fsa2VyPENhY2hlZFJhd1Jlc291cmNlQ2xpZW50PiB3KG1fY2xpZW50cyk7CisgICAg
d2hpbGUgKENhY2hlZFJhd1Jlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkpCisgICAgICAgIGMt
PmRhdGFTZW50KHRoaXMsIGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVTZW50KTsKK30KKwordm9p
ZCBDYWNoZWRSYXdSZXNvdXJjZTo6c3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSgp
Cit7CisgICAgQVNTRVJUKG1fbG9hZGVyKTsKKyAgICAvLyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxl
IG9mIGEgc3VjY2Vzc2Z1bCByZXZhbGlkYXRpb24sIHJlc3BvbnNlUmVjZWl2ZWQoKSBoYXNuJ3Qg
YmVlbiBjYWxsZWQsIHNvIHdlIGhhdmVuJ3Qgc2V0IG1faWRlbnRpZmllci4KKyAgICBBU1NFUlQo
IW1faWRlbnRpZmllcik7CisgICAgZG93bmNhc3Q8Q2FjaGVkUmF3UmVzb3VyY2U+KCpyZXNvdXJj
ZVRvUmV2YWxpZGF0ZSgpKS5tX2lkZW50aWZpZXIgPSBtX2xvYWRlci0+aWRlbnRpZmllcigpOwor
ICAgIENhY2hlZFJlc291cmNlOjpzd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNlKCk7
Cit9CisKK3ZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZl
cnMpCit7CisgICAgaWYgKG1fbG9hZGVyKQorICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9h
ZGluZyhkZWZlcnMpOworfQorCit2b2lkIENhY2hlZFJhd1Jlc291cmNlOjpzZXREYXRhQnVmZmVy
aW5nUG9saWN5KERhdGFCdWZmZXJpbmdQb2xpY3kgZGF0YUJ1ZmZlcmluZ1BvbGljeSkKK3sKKyAg
ICBtX29wdGlvbnMuZGF0YUJ1ZmZlcmluZ1BvbGljeSA9IGRhdGFCdWZmZXJpbmdQb2xpY3k7Cit9
CisKK3N0YXRpYyBib29sIHNob3VsZElnbm9yZUhlYWRlckZvckNhY2hlUmV1c2UoSFRUUEhlYWRl
ck5hbWUgbmFtZSkKK3sKKyAgICBzd2l0Y2ggKG5hbWUpIHsKKyAgICAvLyBGSVhNRTogVGhpcyBs
aXN0IG9mIGhlYWRlcnMgdGhhdCBkb24ndCBhZmZlY3QgY2FjaGUgcG9saWN5IGFsbW9zdCBjZXJ0
YWlubHkgaXNuJ3QgY29tcGxldGUuCisgICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6QWNjZXB0Ogor
ICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OkNhY2hlQ29udHJvbDoKKyAgICBjYXNlIEhUVFBIZWFk
ZXJOYW1lOjpQcmFnbWE6CisgICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6UHVycG9zZToKKyAgICBj
YXNlIEhUVFBIZWFkZXJOYW1lOjpSZWZlcmVyOgorICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OlVz
ZXJBZ2VudDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIENhY2hlZFJhd1Jlc291cmNlOjpjYW5SZXVz
ZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QpIGNvbnN0Cit7CisgICAgaWYgKGRh
dGFCdWZmZXJpbmdQb2xpY3koKSA9PSBEb05vdEJ1ZmZlckRhdGEpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmIChtX3Jlc291cmNlUmVxdWVzdC5odHRwTWV0aG9kKCkgIT0gbmV3UmVx
dWVzdC5odHRwTWV0aG9kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX3Jl
c291cmNlUmVxdWVzdC5odHRwQm9keSgpICE9IG5ld1JlcXVlc3QuaHR0cEJvZHkoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fcmVzb3VyY2VSZXF1ZXN0LmFsbG93Q29va2ll
cygpICE9IG5ld1JlcXVlc3QuYWxsb3dDb29raWVzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmIChuZXdSZXF1ZXN0LmlzQ29uZGl0aW9uYWwoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gRW5zdXJlIG1vc3QgaGVhZGVycyBtYXRjaCB0aGUgZXhpc3RpbmcgaGVh
ZGVycyBiZWZvcmUgY29udGludWluZy4KKyAgICAvLyBOb3RlIHRoYXQgdGhlIGxpc3Qgb2YgaWdu
b3JlZCBoZWFkZXJzIGluY2x1ZGVzIHNvbWUgaGVhZGVycyBleHBsaWNpdGx5IHJlbGF0ZWQgdG8g
Y2FjaGluZy4KKyAgICAvLyBBIG1vcmUgZGV0YWlsZWQgY2hlY2sgb2YgY2FjaGluZyBwb2xpY3kg
d2lsbCBiZSBwZXJmb3JtZWQgbGF0ZXIsIHRoaXMgaXMgc2ltcGx5IGEgbGlzdCBvZgorICAgIC8v
IGhlYWRlcnMgdGhhdCB3ZSBtaWdodCBwZXJtaXQgdG8gYmUgZGlmZmVyZW50IGFuZCBzdGlsbCBy
ZXVzZSB0aGUgZXhpc3RpbmcgQ2FjaGVkUmVzb3VyY2UuCisgICAgY29uc3QgSFRUUEhlYWRlck1h
cCYgbmV3SGVhZGVycyA9IG5ld1JlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygpOworICAgIGNvbnN0
IEhUVFBIZWFkZXJNYXAmIG9sZEhlYWRlcnMgPSBtX3Jlc291cmNlUmVxdWVzdC5odHRwSGVhZGVy
RmllbGRzKCk7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IG5ld0hlYWRlcnMpIHsK
KyAgICAgICAgaWYgKGhlYWRlci5rZXlBc0hUVFBIZWFkZXJOYW1lKSB7CisgICAgICAgICAgICBp
ZiAoIXNob3VsZElnbm9yZUhlYWRlckZvckNhY2hlUmV1c2UoaGVhZGVyLmtleUFzSFRUUEhlYWRl
ck5hbWUudmFsdWUoKSkKKyAgICAgICAgICAgICAgICAmJiBoZWFkZXIudmFsdWUgIT0gb2xkSGVh
ZGVycy5jb21tb25IZWFkZXJzKCkuZ2V0KGhlYWRlci5rZXlBc0hUVFBIZWFkZXJOYW1lLnZhbHVl
KCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmICho
ZWFkZXIudmFsdWUgIT0gb2xkSGVhZGVycy51bmNvbW1vbkhlYWRlcnMoKS5nZXQoaGVhZGVyLmtl
eSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gRm9yIHRoaXMg
c2Vjb25kIGxvb3AsIHdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdG8gY29tcGFyZSB2YWx1ZXMsIGNo
ZWNraW5nIHRoYXQgdGhlCisgICAgLy8ga2V5IGlzIGNvbnRhaW5lZCBpbiBuZXdIZWFkZXJzIGlz
IHN1ZmZpY2llbnQgZHVlIHRvIHRoZSBwcmV2aW91cyBsb29wLgorICAgIGZvciAoY29uc3QgYXV0
byYgaGVhZGVyIDogb2xkSGVhZGVycykgeworICAgICAgICBpZiAoaGVhZGVyLmtleUFzSFRUUEhl
YWRlck5hbWUpIHsKKyAgICAgICAgICAgIGlmICghc2hvdWxkSWdub3JlSGVhZGVyRm9yQ2FjaGVS
ZXVzZShoZWFkZXIua2V5QXNIVFRQSGVhZGVyTmFtZS52YWx1ZSgpKQorICAgICAgICAgICAgICAg
ICYmICFuZXdIZWFkZXJzLmNvbW1vbkhlYWRlcnMoKS5jb250YWlucyhoZWFkZXIua2V5QXNIVFRQ
SGVhZGVyTmFtZS52YWx1ZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0gZWxzZSBpZiAoIW5ld0hlYWRlcnMudW5jb21tb25IZWFkZXJzKCkuY29udGFpbnMoaGVh
ZGVyLmtleSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OmNsZWFyKCkKK3sKKyAgICBtX2Rh
dGEgPSBudWxscHRyOworICAgIHNldEVuY29kZWRTaXplKDApOworICAgIGlmIChtX2xvYWRlcikK
KyAgICAgICAgbV9sb2FkZXItPmNsZWFyUmVzb3VyY2VEYXRhKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNo
ZWRSYXdSZXNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJhd1Jl
c291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNWZiNTRkODQ1ODJjOTUwMDgxMGNjOTYwZmEzNjE0NTliNzU4
OTYwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNo
ZWRSYXdSZXNvdXJjZS5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICAgIENvcHlyaWdodCAoQykg
MTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQorICAgIENvcHlyaWdodCAoQykg
MjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIw
MDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCisgICAgQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaWZuZGVmIENhY2hlZFJhd1Jlc291cmNlX2gKKyNkZWZpbmUgQ2FjaGVkUmF3UmVzb3Vy
Y2VfaAorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDYWNoZWRSZXNvdXJjZUNsaWVudDsKK2NsYXNzIFN1YnJlc291cmNlTG9hZGVy
OworCitjbGFzcyBDYWNoZWRSYXdSZXNvdXJjZSBmaW5hbCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJj
ZSB7CitwdWJsaWM6CisgICAgQ2FjaGVkUmF3UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0JiwgVHlw
ZSwgU2Vzc2lvbklEKTsKKworICAgIC8vIEZJWE1FOiBBc3NvY2lhdGVkVVJMTG9hZGVyIHNob3Vs
ZG4ndCBiZSBhIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciBhbmQgdGhlcmVmb3JlIHNob3VsZG4n
dAorICAgIC8vIHVzZSBDYWNoZWRSYXdSZXNvdXJjZS4gSG93ZXZlciwgaXQgaXMsIGFuZCBpdCBu
ZWVkcyB0byBiZSBhYmxlIHRvIGRlZmVyIGxvYWRpbmcuCisgICAgLy8gVGhpcyBjYW4gYmUgZml4
ZWQgYnkgc3BsaXR0aW5nIENPUlMgcHJlZmxpZ2h0aW5nIG91dCBvZiBEb2N1bWVudFRocmVhY2Fi
bGVMb2FkZXIuCisgICAgdmlydHVhbCB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0RGF0YUJ1ZmZlcmluZ1BvbGljeShEYXRhQnVmZmVyaW5nUG9saWN5
KTsKKyAgICAKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBleHBvc2VkIGZvciB0aGUgSW5wc2VjdG9y
SW5zdHJ1bWVudGF0aW9uIGZvciBwcmVmbGlnaHRzIGluIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
ci4gSXQncyBhbHNvIHJlYWxseSBsYW1lLgorICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcigp
IGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorCisgICAgdm9pZCBjbGVhcigpOworCisg
ICAgYm9vbCBjYW5SZXVzZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSBjb25zdDsKKworICAgIGJv
b2wgd2FzUmVkaXJlY3RlZCgpIGNvbnN0IHsgcmV0dXJuICFtX3JlZGlyZWN0Q2hhaW4uaXNFbXB0
eSgpOyB9OworCitwcml2YXRlOgorICAgIHZvaWQgZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNl
Q2xpZW50Kikgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGREYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYp
IG92ZXJyaWRlOworICAgIHZvaWQgYWRkRGF0YShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBs
ZW5ndGgpIG92ZXJyaWRlOworICAgIHZvaWQgZmluaXNoTG9hZGluZyhTaGFyZWRCdWZmZXIqKSBv
dmVycmlkZTsKKworICAgIGJvb2wgc2hvdWxkSWdub3JlSFRUUFN0YXR1c0NvZGVFcnJvcnMoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBhbGxDbGllbnRzUmVtb3Zl
ZCgpIG92ZXJyaWRlOworCisgICAgdm9pZCByZWRpcmVjdFJlY2VpdmVkKFJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlc3BvbnNl
UmVjZWl2ZWQoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIG92ZXJyaWRlOworICAgIGJvb2wgc2hv
dWxkQ2FjaGVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgb3ZlcnJpZGU7CisgICAg
dm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBs
b25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KSBvdmVycmlkZTsKKworICAgIHZvaWQgc3dpdGNo
Q2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSgpIG92ZXJyaWRlOworICAgIGJvb2wgbWF5VHJ5
UmVwbGFjZUVuY29kZWREYXRhKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9hbGxvd0VuY29k
ZWREYXRhUmVwbGFjZW1lbnQ7IH0KKworICAgIGNvbnN0IGNoYXIqIGNhbGN1bGF0ZUluY3JlbWVu
dGFsRGF0YUNodW5rKFNoYXJlZEJ1ZmZlciosIHVuc2lnbmVkJiBpbmNyZW1lbnRhbERhdGFMZW5n
dGgpOworICAgIHZvaWQgbm90aWZ5Q2xpZW50c0RhdGFXYXNSZWNlaXZlZChjb25zdCBjaGFyKiBk
YXRhLCB1bnNpZ25lZCBsZW5ndGgpOworCisjaWYgVVNFKFNPVVApCisgICAgY2hhciogZ2V0T3JD
cmVhdGVSZWFkQnVmZmVyKHNpemVfdCByZXF1ZXN0ZWRTaXplLCBzaXplX3QmIGFjdHVhbFNpemUp
IG92ZXJyaWRlOworI2VuZGlmCisKKyAgICB1bnNpZ25lZCBsb25nIG1faWRlbnRpZmllcjsKKyAg
ICBib29sIG1fYWxsb3dFbmNvZGVkRGF0YVJlcGxhY2VtZW50OworCisgICAgc3RydWN0IFJlZGly
ZWN0UGFpciB7CisgICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBSZWRpcmVjdFBhaXIoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRp
cmVjdFJlc3BvbnNlKQorICAgICAgICAgICAgOiBtX3JlcXVlc3QocmVxdWVzdCkKKyAgICAgICAg
ICAgICwgbV9yZWRpcmVjdFJlc3BvbnNlKHJlZGlyZWN0UmVzcG9uc2UpCisgICAgICAgIHsKKyAg
ICAgICAgfQorCisgICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCBtX3JlcXVlc3Q7CisgICAg
ICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UgbV9yZWRpcmVjdFJlc3BvbnNlOworICAgIH07CisK
KyAgICBWZWN0b3I8UmVkaXJlY3RQYWlyPiBtX3JlZGlyZWN0Q2hhaW47Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6
Q2FjaGVkUmF3UmVzb3VyY2UpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6
OkNhY2hlZFJlc291cmNlJiByZXNvdXJjZSkgeyByZXR1cm4gcmVzb3VyY2UuaXNNYWluT3JNZWRp
YU9yUmF3UmVzb3VyY2UoKTsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCisjZW5k
aWYgLy8gQ2FjaGVkUmF3UmVzb3VyY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2ZldGNoL0NhY2hlZFJhd1Jlc291cmNlQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvZmV0Y2gvQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZTBjOWZkZjkx
ODRjOTQ1YWZjZTI5Y2VkOGU5ZTA5YTZhYWIzYTNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJhd1Jlc291cmNlQ2xpZW50LmgKQEAgLTAsMCAr
MSw0OSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBp
LWhkLm1wZy5kZSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVy
QGtkZS5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWlu
aWdAZ21haWwuY29tKQorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIENhY2hlZFJlc291cmNlOworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworY2xhc3MgUmVzb3Vy
Y2VSZXNwb25zZTsKKworY2xhc3MgQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQgOiBwdWJsaWMgQ2Fj
aGVkUmVzb3VyY2VDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkNhY2hlZFJhd1Jlc291
cmNlQ2xpZW50KCkgeyB9CisgICAgc3RhdGljIENhY2hlZFJlc291cmNlQ2xpZW50VHlwZSBleHBl
Y3RlZFR5cGUoKSB7IHJldHVybiBSYXdSZXNvdXJjZVR5cGU7IH0KKyAgICBDYWNoZWRSZXNvdXJj
ZUNsaWVudFR5cGUgcmVzb3VyY2VDbGllbnRUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZXhwZWN0ZWRUeXBlKCk7IH0KKworICAgIHZpcnR1YWwgdm9pZCBkYXRhU2VudChDYWNoZWRSZXNv
dXJjZSosIHVuc2lnbmVkIGxvbmcgbG9uZyAvKiBieXRlc1NlbnQgKi8sIHVuc2lnbmVkIGxvbmcg
bG9uZyAvKiB0b3RhbEJ5dGVzVG9CZVNlbnQgKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZXNw
b25zZVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsg
fQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDYWNoZVJlc3BvbnNlKENhY2hlZFJlc291cmNlKiwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZGF0YVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgY29uc3QgY2hhciogLyogZGF0YSAqLywg
aW50IC8qIGxlbmd0aCAqLykgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlZGlyZWN0UmVjZWl2ZWQo
Q2FjaGVkUmVzb3VyY2UqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JikgeyB9CisjaWYgVVNFKFNPVVApCisgICAgdmlydHVhbCBjaGFyKiBnZXRPckNyZWF0ZVJlYWRC
dWZmZXIoQ2FjaGVkUmVzb3VyY2UqLCBzaXplX3QgLyogcmVxdWVzdGVkU2l6ZSAqLywgc2l6ZV90
JiAvKiBhY3R1YWxTaXplICovKSB7IHJldHVybiBudWxscHRyOyB9CisjZW5kaWYKK307CisKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2UuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmYxM2FlNjJhMTNhZDBjZDhmYjExMjlhM2JlMmNlMmNiOGZmYTM1YTYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2UuY3Bw
CkBAIC0wLDAgKzEsOTM1IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xs
IChrbm9sbEBtcGktaGQubXBnLmRlKQorICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxs
ZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDIgV2FsZG8gQmFzdGlh
biAoYmFzdGlhbkBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2Vpbmln
IChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMSwgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUNsaWVudC5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgiCisjaW5j
bHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxv
YWRlci5oIgorI2luY2x1ZGUgIkNyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5oIgorI2luY2x1ZGUg
IkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmgiCisjaW5jbHVkZSAiRGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5o
IgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQu
aCIKKyNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlICJMb2FkZXJTdHJhdGVn
eS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNYWluRnJhbWUuaCIKKyNpbmNs
dWRlICJNZW1vcnlDYWNoZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmF0ZWdpZXMuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlNj
aGVtZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJT
ZWN1cml0eVBvbGljeS5oIgorI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVk
ZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKyNpbmNsdWRlICJRdWlja0xvb2suaCIKKyNl
bmRpZgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Jl
c291cmNlTG9hZFByaW9yaXR5IENhY2hlZFJlc291cmNlOjpkZWZhdWx0UHJpb3JpdHlGb3JSZXNv
dXJjZVR5cGUoVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFBy
aW9yaXR5OjpWZXJ5SGlnaDsKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0
OgorICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkhpZ2g7CisgICAgY2FzZSBD
YWNoZWRSZXNvdXJjZTo6U2NyaXB0OgorI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgY2FzZSBD
YWNoZWRSZXNvdXJjZTo6U1ZHRm9udFJlc291cmNlOgorI2VuZGlmCisgICAgY2FzZSBDYWNoZWRS
ZXNvdXJjZTo6TWVkaWFSZXNvdXJjZToKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVz
b3VyY2U6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2U6CisgICAgICAgIHJl
dHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TWVkaXVtOworICAgIGNhc2UgQ2FjaGVkUmVzb3Vy
Y2U6OkltYWdlUmVzb3VyY2U6CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6
TG93OworI2lmIEVOQUJMRShYU0xUKQorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxl
U2hlZXQ6CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6SGlnaDsKKyNlbmRp
ZgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0RvY3VtZW50UmVzb3VyY2U6CisgICAgICAg
IHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TG93OworI2lmIEVOQUJMRShMSU5LX1BSRUZF
VENIKQorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRjaDoKKyAgICAgICAgcmV0
dXJuIFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5TG93OworICAgIGNhc2UgQ2FjaGVkUmVzb3Vy
Y2U6OkxpbmtTdWJyZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5
OjpWZXJ5TG93OworI2VuZGlmCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OlRleHRUcmFja1Jlc291cmNlOgorICAgICAgICByZXR1cm4gUmVzb3VyY2VM
b2FkUHJpb3JpdHk6OkxvdzsKKyNlbmRpZgorICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdzsKK30KKworc3RhdGljIHN0
ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbEZv
clJlc291cmNlVHlwZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlKQoreworICAgIGlmICh0eXBl
ID09IENhY2hlZFJlc291cmNlOjpTY3JpcHQpCisgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6
bWlsbGlzZWNvbmRzIHsgMCB9OworCisgICAgcmV0dXJuIE1lbW9yeUNhY2hlOjpzaW5nbGV0b24o
KS5kZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKCk7Cit9CisKK0RFRklORV9ERUJVR19P
TkxZX0dMT0JBTChSZWZDb3VudGVkTGVha0NvdW50ZXIsIGNhY2hlZFJlc291cmNlTGVha0NvdW50
ZXIsICgiQ2FjaGVkUmVzb3VyY2UiKSk7CisKK0NhY2hlZFJlc291cmNlOjpDYWNoZWRSZXNvdXJj
ZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFR5cGUgdHlwZSwgU2Vzc2lvbklEIHNl
c3Npb25JRCkKKyAgICA6IG1fcmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpCisgICAgLCBtX2RlY29k
ZWREYXRhRGVsZXRpb25UaW1lcigqdGhpcywgJkNhY2hlZFJlc291cmNlOjpkZXN0cm95RGVjb2Rl
ZERhdGEsIGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWxGb3JSZXNvdXJjZVR5cGUodHlw
ZSkpCisgICAgLCBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCisgICAgLCBtX2xvYWRQcmlvcml0eShk
ZWZhdWx0UHJpb3JpdHlGb3JSZXNvdXJjZVR5cGUodHlwZSkpCisgICAgLCBtX3Jlc3BvbnNlVGlt
ZXN0YW1wKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpKQorICAgICwgbV9sYXN0RGVj
b2RlZEFjY2Vzc1RpbWUoMCkKKyAgICAsIG1fbG9hZEZpbmlzaFRpbWUoMCkKKyAgICAsIG1fZW5j
b2RlZFNpemUoMCkKKyAgICAsIG1fZGVjb2RlZFNpemUoMCkKKyAgICAsIG1fYWNjZXNzQ291bnQo
MCkKKyAgICAsIG1faGFuZGxlQ291bnQoMCkKKyAgICAsIG1fcHJlbG9hZENvdW50KDApCisgICAg
LCBtX3ByZWxvYWRSZXN1bHQoUHJlbG9hZE5vdFJlZmVyZW5jZWQpCisgICAgLCBtX3JlcXVlc3Rl
ZEZyb21OZXR3b3JraW5nTGF5ZXIoZmFsc2UpCisgICAgLCBtX2luQ2FjaGUoZmFsc2UpCisgICAg
LCBtX2xvYWRpbmcoZmFsc2UpCisgICAgLCBtX3N3aXRjaGluZ0NsaWVudHNUb1JldmFsaWRhdGVk
UmVzb3VyY2UoZmFsc2UpCisgICAgLCBtX3R5cGUodHlwZSkKKyAgICAsIG1fc3RhdHVzKFBlbmRp
bmcpCisjaWZuZGVmIE5ERUJVRworICAgICwgbV9kZWxldGVkKGZhbHNlKQorICAgICwgbV9scnVJ
bmRleCgwKQorI2VuZGlmCisgICAgLCBtX293bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKG51bGxw
dHIpCisgICAgLCBtX3Jlc291cmNlVG9SZXZhbGlkYXRlKG51bGxwdHIpCisgICAgLCBtX3Byb3h5
UmVzb3VyY2UobnVsbHB0cikKK3sKKyAgICBBU1NFUlQobV90eXBlID09IHVuc2lnbmVkKHR5cGUp
KTsgLy8gbV90eXBlIGlzIGEgYml0ZmllbGQsIHNvIHRoaXMgdGVzdHMgY2FyZWxlc3MgdXBkYXRl
cyBvZiB0aGUgZW51bS4KKyAgICBBU1NFUlQoc2Vzc2lvbklELmlzVmFsaWQoKSk7CisjaWZuZGVm
IE5ERUJVRworICAgIGNhY2hlZFJlc291cmNlTGVha0NvdW50ZXIuaW5jcmVtZW50KCk7CisjZW5k
aWYKKworICAgIGlmICghbV9yZXNvdXJjZVJlcXVlc3QudXJsKCkuaGFzRnJhZ21lbnRJZGVudGlm
aWVyKCkpCisgICAgICAgIHJldHVybjsKKyAgICBVUkwgdXJsRm9yQ2FjaGUgPSBNZW1vcnlDYWNo
ZTo6cmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVySWZOZWVkZWQobV9yZXNvdXJjZVJlcXVlc3QudXJs
KCkpOworICAgIGlmICh1cmxGb3JDYWNoZS5oYXNGcmFnbWVudElkZW50aWZpZXIoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fZnJhZ21lbnRJZGVudGlmaWVyRm9yUmVxdWVzdCA9IG1fcmVzb3Vy
Y2VSZXF1ZXN0LnVybCgpLmZyYWdtZW50SWRlbnRpZmllcigpOworICAgIG1fcmVzb3VyY2VSZXF1
ZXN0LnNldFVSTCh1cmxGb3JDYWNoZSk7Cit9CisKK0NhY2hlZFJlc291cmNlOjp+Q2FjaGVkUmVz
b3VyY2UoKQoreworICAgIEFTU0VSVCghbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSk7IC8vIFNob3Vs
ZCBiZSB0cnVlIGJlY2F1c2UgY2FuRGVsZXRlKCkgY2hlY2tzIHRoaXMuCisgICAgQVNTRVJUKGNh
bkRlbGV0ZSgpKTsKKyAgICBBU1NFUlQoIWluQ2FjaGUoKSk7CisgICAgQVNTRVJUKCFtX2RlbGV0
ZWQpOworICAgIEFTU0VSVCh1cmwoKS5pc051bGwoKSB8fCAhYWxsb3dzQ2FjaGluZygpIHx8IE1l
bW9yeUNhY2hlOjpzaW5nbGV0b24oKS5yZXNvdXJjZUZvclJlcXVlc3QocmVzb3VyY2VSZXF1ZXN0
KCksIHNlc3Npb25JRCgpKSAhPSB0aGlzKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBtX2RlbGV0
ZWQgPSB0cnVlOworICAgIGNhY2hlZFJlc291cmNlTGVha0NvdW50ZXIuZGVjcmVtZW50KCk7Cisj
ZW5kaWYKKworICAgIGlmIChtX293bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKQorICAgICAgICBt
X293bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyLT5yZW1vdmVDYWNoZWRSZXNvdXJjZSgqdGhpcyk7
Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OmZhaWxCZWZvcmVTdGFydGluZygpCit7CisgICAg
Ly8gRklYTUU6IFdoYXQgaWYgcmVzb3VyY2VzIGluIG90aGVyIGZyYW1lcyB3ZXJlIHdhaXRpbmcg
Zm9yIHRoaXMgcmV2YWxpZGF0aW9uPworICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYW5ub3Qg
c3RhcnQgbG9hZGluZyAnJXMnIiwgdXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKKyAg
ICBpZiAoYWxsb3dzQ2FjaGluZygpICYmIG1fcmVzb3VyY2VUb1JldmFsaWRhdGUpCisgICAgICAg
IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5yZXZhbGlkYXRpb25GYWlsZWQoKnRoaXMpOworICAg
IGVycm9yKENhY2hlZFJlc291cmNlOjpMb2FkRXJyb3IpOworfQorCitzdGF0aWMgdm9pZCBhZGRB
ZGRpdGlvbmFsUmVxdWVzdEhlYWRlcnNUb1JlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBjb25zdCBDYWNoZWRSZXNvdXJjZUxvYWRlciYgY2FjaGVkUmVzb3VyY2VMb2FkZXIsIENhY2hl
ZFJlc291cmNlJiByZXNvdXJjZSkKK3sKKyAgICBpZiAocmVzb3VyY2UudHlwZSgpID09IENhY2hl
ZFJlc291cmNlOjpNYWluUmVzb3VyY2UpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBJbiBzb21l
IGNhc2VzIHdlIG1heSB0cnkgdG8gbG9hZCByZXNvdXJjZXMgaW4gZnJhbWVsZXNzIGRvY3VtZW50
cy4gU3VjaCBsb2FkcyBhbHdheXMgZmFpbC4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGdl
dCB0aGlzIGZhci4KKyAgICBpZiAoIWNhY2hlZFJlc291cmNlTG9hZGVyLmZyYW1lKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIE5vdGU6IFdlIHNraXAgdGhlIENvbnRlbnQtU2VjdXJpdHkt
UG9saWN5IGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjaGVjaworICAgIC8vIHRoZSBDb250ZW50LVNl
Y3VyaXR5LVBvbGljeSBhdCB0aGUgQ2FjaGVkUmVzb3VyY2VMb2FkZXIgbGF5ZXIgc28gd2UgY2Fu
CisgICAgLy8gaGFuZGxlIGRpZmZlcmVudCByZXNvdXJjZSB0eXBlcyBkaWZmZXJlbnRseS4KKyAg
ICBGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIgPSBjYWNoZWRSZXNvdXJjZUxvYWRlci5mcmFtZSgp
LT5sb2FkZXIoKTsKKyAgICBTdHJpbmcgb3V0Z29pbmdSZWZlcnJlcjsKKyAgICBTdHJpbmcgb3V0
Z29pbmdPcmlnaW47CisgICAgaWYgKHJlcXVlc3QuaHR0cFJlZmVycmVyKCkuaXNOdWxsKCkpIHsK
KyAgICAgICAgb3V0Z29pbmdSZWZlcnJlciA9IGZyYW1lTG9hZGVyLm91dGdvaW5nUmVmZXJyZXIo
KTsKKyAgICAgICAgb3V0Z29pbmdPcmlnaW4gPSBmcmFtZUxvYWRlci5vdXRnb2luZ09yaWdpbigp
OworICAgIH0gZWxzZSB7CisgICAgICAgIG91dGdvaW5nUmVmZXJyZXIgPSByZXF1ZXN0Lmh0dHBS
ZWZlcnJlcigpOworICAgICAgICBvdXRnb2luZ09yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVh
dGVGcm9tU3RyaW5nKG91dGdvaW5nUmVmZXJyZXIpLT50b1N0cmluZygpOworICAgIH0KKworICAg
IC8vIEZJWE1FOiBSZWZhY3RvciBTZWN1cml0eVBvbGljeTo6Z2VuZXJhdGVSZWZlcnJlckhlYWRl
ciB0byBhbGlnbiB3aXRoIG5ldyB0ZXJtaW5vbG9neSB1c2VkIGluIGh0dHBzOi8vdzNjLmdpdGh1
Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LgorICAgIHN3aXRjaCAocmVzb3VyY2Uub3B0
aW9ucygpLnJlZmVycmVyUG9saWN5KSB7CisgICAgY2FzZSBGZXRjaE9wdGlvbnM6OlJlZmVycmVy
UG9saWN5OjpFbXB0eVN0cmluZzogeworICAgICAgICBSZWZlcnJlclBvbGljeSByZWZlcnJlclBv
bGljeSA9IGNhY2hlZFJlc291cmNlTG9hZGVyLmRvY3VtZW50KCkgPyBjYWNoZWRSZXNvdXJjZUxv
YWRlci5kb2N1bWVudCgpLT5yZWZlcnJlclBvbGljeSgpIDogUmVmZXJyZXJQb2xpY3k6OkRlZmF1
bHQ7CisgICAgICAgIG91dGdvaW5nUmVmZXJyZXIgPSBTZWN1cml0eVBvbGljeTo6Z2VuZXJhdGVS
ZWZlcnJlckhlYWRlcihyZWZlcnJlclBvbGljeSwgcmVxdWVzdC51cmwoKSwgb3V0Z29pbmdSZWZl
cnJlcik7CisgICAgICAgIGJyZWFrOyB9CisgICAgY2FzZSBGZXRjaE9wdGlvbnM6OlJlZmVycmVy
UG9saWN5OjpOb1JlZmVycmVyV2hlbkRvd25ncmFkZToKKyAgICAgICAgb3V0Z29pbmdSZWZlcnJl
ciA9IFNlY3VyaXR5UG9saWN5OjpnZW5lcmF0ZVJlZmVycmVySGVhZGVyKFJlZmVycmVyUG9saWN5
OjpEZWZhdWx0LCByZXF1ZXN0LnVybCgpLCBvdXRnb2luZ1JlZmVycmVyKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBGZXRjaE9wdGlvbnM6OlJlZmVycmVyUG9saWN5OjpOb1JlZmVycmVyOgor
ICAgICAgICBvdXRnb2luZ1JlZmVycmVyID0gU3RyaW5nKCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRmV0Y2hPcHRpb25zOjpSZWZlcnJlclBvbGljeTo6T3JpZ2luOgorICAgICAgICBvdXRn
b2luZ1JlZmVycmVyID0gU2VjdXJpdHlQb2xpY3k6OmdlbmVyYXRlUmVmZXJyZXJIZWFkZXIoUmVm
ZXJyZXJQb2xpY3k6Ok9yaWdpbiwgcmVxdWVzdC51cmwoKSwgb3V0Z29pbmdSZWZlcnJlcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRmV0Y2hPcHRpb25zOjpSZWZlcnJlclBvbGljeTo6T3Jp
Z2luV2hlbkNyb3NzT3JpZ2luOgorICAgICAgICBpZiAocmVzb3VyY2UuaXNDcm9zc09yaWdpbigp
KQorICAgICAgICAgICAgb3V0Z29pbmdSZWZlcnJlciA9IFNlY3VyaXR5UG9saWN5OjpnZW5lcmF0
ZVJlZmVycmVySGVhZGVyKFJlZmVycmVyUG9saWN5OjpPcmlnaW4sIHJlcXVlc3QudXJsKCksIG91
dGdvaW5nUmVmZXJyZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZldGNoT3B0aW9uczo6
UmVmZXJyZXJQb2xpY3k6OlVuc2FmZVVybDoKKyAgICAgICAgYnJlYWs7CisgICAgfTsKKworICAg
IGlmIChvdXRnb2luZ1JlZmVycmVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmVxdWVzdC5jbGVhckhU
VFBSZWZlcnJlcigpOworICAgIGVsc2UKKyAgICAgICAgcmVxdWVzdC5zZXRIVFRQUmVmZXJyZXIo
b3V0Z29pbmdSZWZlcnJlcik7CisgICAgRnJhbWVMb2FkZXI6OmFkZEhUVFBPcmlnaW5JZk5lZWRl
ZChyZXF1ZXN0LCBvdXRnb2luZ09yaWdpbik7CisKKyAgICBmcmFtZUxvYWRlci5hZGRFeHRyYUZp
ZWxkc1RvU3VicmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpOworfQorCit2b2lkIENhY2hlZFJlc291
cmNlOjphZGRBZGRpdGlvbmFsUmVxdWVzdEhlYWRlcnMoQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGxv
YWRlcikKK3sKKyAgICBhZGRBZGRpdGlvbmFsUmVxdWVzdEhlYWRlcnNUb1JlcXVlc3QobV9yZXNv
dXJjZVJlcXVlc3QsIGxvYWRlciwgKnRoaXMpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlOjpj
b21wdXRlT3JpZ2luKENhY2hlZFJlc291cmNlTG9hZGVyJiBsb2FkZXIpCit7CisgICAgaWYgKHR5
cGUoKSA9PSBNYWluUmVzb3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChsb2Fk
ZXIuZG9jdW1lbnQoKSk7CisgICAgaWYgKG1fcmVzb3VyY2VSZXF1ZXN0Lmhhc0hUVFBPcmlnaW4o
KSkKKyAgICAgICAgbV9vcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyht
X3Jlc291cmNlUmVxdWVzdC5odHRwT3JpZ2luKCkpOworICAgIGVsc2UKKyAgICAgICAgbV9vcmln
aW4gPSBsb2FkZXIuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKTsKKyAgICBBU1NFUlQobV9v
cmlnaW4pOworCisgICAgaWYgKCEobV9yZXNvdXJjZVJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0Rh
dGEoKSAmJiBtX29wdGlvbnMuc2FtZU9yaWdpbkRhdGFVUkxGbGFnID09IFNhbWVPcmlnaW5EYXRh
VVJMRmxhZzo6U2V0KSAmJiAhbV9vcmlnaW4tPmNhblJlcXVlc3QobV9yZXNvdXJjZVJlcXVlc3Qu
dXJsKCkpKQorICAgICAgICBzZXRDcm9zc09yaWdpbigpOworCisgICAgYWRkQWRkaXRpb25hbFJl
cXVlc3RIZWFkZXJzKGxvYWRlcik7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OmxvYWQoQ2Fj
aGVkUmVzb3VyY2VMb2FkZXImIGNhY2hlZFJlc291cmNlTG9hZGVyLCBjb25zdCBSZXNvdXJjZUxv
YWRlck9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgaWYgKCFjYWNoZWRSZXNvdXJjZUxvYWRlci5m
cmFtZSgpKSB7CisgICAgICAgIGZhaWxCZWZvcmVTdGFydGluZygpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIEZyYW1lJiBmcmFtZSA9ICpjYWNoZWRSZXNvdXJjZUxvYWRlci5mcmFtZSgp
OworCisgICAgLy8gUHJldmVudCBuZXcgbG9hZHMgaWYgd2UgYXJlIGluIHRoZSBQYWdlQ2FjaGUg
b3IgYmVpbmcgYWRkZWQgdG8gdGhlIFBhZ2VDYWNoZS4KKyAgICBpZiAoZnJhbWUucGFnZSgpICYm
IGZyYW1lLnBhZ2UoKS0+aW5QYWdlQ2FjaGUoKSkgeworICAgICAgICBmYWlsQmVmb3JlU3RhcnRp
bmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEZyYW1lTG9hZGVyJiBmcmFtZUxv
YWRlciA9IGZyYW1lLmxvYWRlcigpOworICAgIGlmIChvcHRpb25zLnNlY3VyaXR5Q2hlY2sgPT0g
RG9TZWN1cml0eUNoZWNrICYmIChmcmFtZUxvYWRlci5zdGF0ZSgpID09IEZyYW1lU3RhdGVQcm92
aXNpb25hbCB8fCAhZnJhbWVMb2FkZXIuYWN0aXZlRG9jdW1lbnRMb2FkZXIoKSB8fCBmcmFtZUxv
YWRlci5hY3RpdmVEb2N1bWVudExvYWRlcigpLT5pc1N0b3BwaW5nKCkpKSB7CisgICAgICAgIGZh
aWxCZWZvcmVTdGFydGluZygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9vcHRp
b25zID0gb3B0aW9uczsKKyAgICBtX2xvYWRpbmcgPSB0cnVlOworCisjaWYgVVNFKFFVSUNLX0xP
T0spCisgICAgaWYgKCFtX3Jlc291cmNlUmVxdWVzdC5pc051bGwoKSAmJiBtX3Jlc291cmNlUmVx
dWVzdC51cmwoKS5wcm90b2NvbElzKFFMUHJldmlld1Byb3RvY29sKCkpKSB7CisgICAgICAgIC8v
IFdoZW4gUXVpY2tMb29rIGlzIGludm9rZWQgdG8gY29udmVydCBhIGRvY3VtZW50LCBpdCByZXR1
cm5zIGEgdW5pcXVlIFVSTCBpbiB0aGUKKyAgICAgICAgLy8gTlNVUkxSZXBvbnNlIGZvciB0aGUg
bWFpbiBkb2N1bWVudC4gVG8gbWFrZSBzYWZlUUxVUkxGb3JEb2N1bWVudFVSTEFuZFJlc291cmNl
VVJMKCkKKyAgICAgICAgLy8gd29yaywgd2UgbmVlZCB0byB1c2UgdGhlIFFMIFVSTCBub3QgdGhl
IG9yaWdpbmFsIFVSTC4KKyAgICAgICAgY29uc3QgVVJMJiBkb2N1bWVudFVSTCA9IGZyYW1lTG9h
ZGVyLmRvY3VtZW50TG9hZGVyKCktPnJlc3BvbnNlKCkudXJsKCk7CisgICAgICAgIG1fcmVzb3Vy
Y2VSZXF1ZXN0LnNldFVSTChzYWZlUUxVUkxGb3JEb2N1bWVudFVSTEFuZFJlc291cmNlVVJMKGRv
Y3VtZW50VVJMLCB1cmwoKSkpOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKCFhY2NlcHQoKS5p
c0VtcHR5KCkpCisgICAgICAgIG1fcmVzb3VyY2VSZXF1ZXN0LnNldEhUVFBBY2NlcHQoYWNjZXB0
KCkpOworCisgICAgaWYgKGlzQ2FjaGVWYWxpZGF0b3IoKSkgeworICAgICAgICBDYWNoZWRSZXNv
dXJjZSogcmVzb3VyY2VUb1JldmFsaWRhdGUgPSBtX3Jlc291cmNlVG9SZXZhbGlkYXRlOworICAg
ICAgICBBU1NFUlQocmVzb3VyY2VUb1JldmFsaWRhdGUtPmNhblVzZUNhY2hlVmFsaWRhdG9yKCkp
OworICAgICAgICBBU1NFUlQocmVzb3VyY2VUb1JldmFsaWRhdGUtPmlzTG9hZGVkKCkpOworICAg
ICAgICBjb25zdCBTdHJpbmcmIGxhc3RNb2RpZmllZCA9IHJlc291cmNlVG9SZXZhbGlkYXRlLT5y
ZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6TGFzdE1vZGlmaWVkKTsK
KyAgICAgICAgY29uc3QgU3RyaW5nJiBlVGFnID0gcmVzb3VyY2VUb1JldmFsaWRhdGUtPnJlc3Bv
bnNlKCkuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpFVGFnKTsKKyAgICAgICAgaWYg
KCFsYXN0TW9kaWZpZWQuaXNFbXB0eSgpIHx8ICFlVGFnLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgQVNTRVJUKGNhY2hlZFJlc291cmNlTG9hZGVyLmNhY2hlUG9saWN5KHR5cGUoKSkgIT0gQ2Fj
aGVQb2xpY3lSZWxvYWQpOworICAgICAgICAgICAgaWYgKGNhY2hlZFJlc291cmNlTG9hZGVyLmNh
Y2hlUG9saWN5KHR5cGUoKSkgPT0gQ2FjaGVQb2xpY3lSZXZhbGlkYXRlKQorICAgICAgICAgICAg
ICAgIG1fcmVzb3VyY2VSZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6
Q2FjaGVDb250cm9sLCAibWF4LWFnZT0wIik7CisgICAgICAgICAgICBpZiAoIWxhc3RNb2RpZmll
ZC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgbV9yZXNvdXJjZVJlcXVlc3Quc2V0SFRUUEhl
YWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpJZk1vZGlmaWVkU2luY2UsIGxhc3RNb2RpZmllZCk7
CisgICAgICAgICAgICBpZiAoIWVUYWcuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIG1fcmVz
b3VyY2VSZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6SWZOb25lTWF0
Y2gsIGVUYWcpOworICAgICAgICB9CisgICAgfQorCisjaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gp
CisgICAgaWYgKHR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6TGlua1ByZWZldGNoIHx8IHR5cGUo
KSA9PSBDYWNoZWRSZXNvdXJjZTo6TGlua1N1YnJlc291cmNlKQorICAgICAgICBtX3Jlc291cmNl
UmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlB1cnBvc2UsICJwcmVm
ZXRjaCIpOworI2VuZGlmCisgICAgbV9yZXNvdXJjZVJlcXVlc3Quc2V0UHJpb3JpdHkobG9hZFBy
aW9yaXR5KCkpOworCisgICAgY29tcHV0ZU9yaWdpbihjYWNoZWRSZXNvdXJjZUxvYWRlcik7CisK
KyAgICAvLyBGSVhNRTogSXQncyB1bmZvcnR1bmF0ZSB0aGF0IHRoZSBjYWNoZSBsYXllciBhbmQg
YmVsb3cgZ2V0IHRvIGtub3cgYW55dGhpbmcgYWJvdXQgZnJhZ21lbnQgaWRlbnRpZmllcnMuCisg
ICAgLy8gV2Ugc2hvdWxkIGxvb2sgaW50byByZW1vdmluZyB0aGUgZXhwZWN0YXRpb24gb2YgdGhh
dCBrbm93bGVkZ2UgZnJvbSB0aGUgcGxhdGZvcm0gbmV0d29yayBzdGFja3MuCisgICAgUmVzb3Vy
Y2VSZXF1ZXN0IHJlcXVlc3QobV9yZXNvdXJjZVJlcXVlc3QpOworICAgIGlmICghbV9mcmFnbWVu
dElkZW50aWZpZXJGb3JSZXF1ZXN0LmlzTnVsbCgpKSB7CisgICAgICAgIFVSTCB1cmwgPSByZXF1
ZXN0LnVybCgpOworICAgICAgICB1cmwuc2V0RnJhZ21lbnRJZGVudGlmaWVyKG1fZnJhZ21lbnRJ
ZGVudGlmaWVyRm9yUmVxdWVzdCk7CisgICAgICAgIHJlcXVlc3Quc2V0VVJMKHVybCk7CisgICAg
ICAgIG1fZnJhZ21lbnRJZGVudGlmaWVyRm9yUmVxdWVzdCA9IFN0cmluZygpOworICAgIH0KKwor
ICAgIG1fbG9hZGVyID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPmxv
YWRSZXNvdXJjZShmcmFtZSwgKnRoaXMsIHJlcXVlc3QsIG9wdGlvbnMpOworICAgIGlmICghbV9s
b2FkZXIpIHsKKyAgICAgICAgZmFpbEJlZm9yZVN0YXJ0aW5nKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBtX3N0YXR1cyA9IFBlbmRpbmc7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3Vy
Y2U6OmxvYWRGcm9tKGNvbnN0IENhY2hlZFJlc291cmNlJiByZXNvdXJjZSwgY29uc3QgUmVzb3Vy
Y2VMb2FkZXJPcHRpb25zJiBvcHRpb25zLCBDYWNoZWRSZXNvdXJjZUxvYWRlciYgY2FjaGVkUmVz
b3VyY2VMb2FkZXIpCit7CisgICAgQVNTRVJUKHVybCgpID09IHJlc291cmNlLnVybCgpKTsKKyAg
ICBBU1NFUlQodHlwZSgpID09IHJlc291cmNlLnR5cGUoKSk7CisgICAgQVNTRVJUKHJlc291cmNl
LnN0YXR1cygpID09IFN0YXR1czo6Q2FjaGVkKTsKKworICAgIG1fb3B0aW9ucyA9IG9wdGlvbnM7
CisgICAgY29tcHV0ZU9yaWdpbihjYWNoZWRSZXNvdXJjZUxvYWRlcik7CisKKyAgICBpZiAoaXND
cm9zc09yaWdpbigpICYmIG9wdGlvbnMubW9kZSA9PSBGZXRjaE9wdGlvbnM6Ok1vZGU6OkNvcnMp
IHsKKyAgICAgICAgQVNTRVJUKG1fb3JpZ2luKTsKKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2Fn
ZTsKKyAgICAgICAgaWYgKCFXZWJDb3JlOjpwYXNzZXNBY2Nlc3NDb250cm9sQ2hlY2socmVzb3Vy
Y2UucmVzcG9uc2UoKSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMsICptX29yaWdpbiwgZXJy
b3JNZXNzYWdlKSkgeworICAgICAgICAgICAgc2V0UmVzb3VyY2VFcnJvcihSZXNvdXJjZUVycm9y
KFN0cmluZygpLCAwLCB1cmwoKSwgZXJyb3JNZXNzYWdlLCBSZXNvdXJjZUVycm9yOjpUeXBlOjpB
Y2Nlc3NDb250cm9sKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBzZXRCb2R5RGF0YUZyb20ocmVzb3VyY2UpOworfQorCit2b2lkIENhY2hlZFJlc291cmNl
OjpjaGVja05vdGlmeSgpCit7CisgICAgaWYgKGlzTG9hZGluZygpIHx8IHN0aWxsTmVlZHNMb2Fk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyPENh
Y2hlZFJlc291cmNlQ2xpZW50PiB3YWxrZXIobV9jbGllbnRzKTsKKyAgICB3aGlsZSAoQ2FjaGVk
UmVzb3VyY2VDbGllbnQqIGNsaWVudCA9IHdhbGtlci5uZXh0KCkpCisgICAgICAgIGNsaWVudC0+
bm90aWZ5RmluaXNoZWQodGhpcyk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OmFkZERhdGFC
dWZmZXIoU2hhcmVkQnVmZmVyJikKK3sKKyAgICBBU1NFUlQoZGF0YUJ1ZmZlcmluZ1BvbGljeSgp
ID09IEJ1ZmZlckRhdGEpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlOjphZGREYXRhKGNvbnN0
IGNoYXIqLCB1bnNpZ25lZCkKK3sKKyAgICBBU1NFUlQoZGF0YUJ1ZmZlcmluZ1BvbGljeSgpID09
IERvTm90QnVmZmVyRGF0YSk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OmZpbmlzaExvYWRp
bmcoU2hhcmVkQnVmZmVyKikKK3sKKyAgICBzZXRMb2FkaW5nKGZhbHNlKTsKKyAgICBjaGVja05v
dGlmeSgpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlOjplcnJvcihDYWNoZWRSZXNvdXJjZTo6
U3RhdHVzIHN0YXR1cykKK3sKKyAgICBzZXRTdGF0dXMoc3RhdHVzKTsKKyAgICBBU1NFUlQoZXJy
b3JPY2N1cnJlZCgpKTsKKyAgICBtX2RhdGEgPSBudWxscHRyOworCisgICAgc2V0TG9hZGluZyhm
YWxzZSk7CisgICAgY2hlY2tOb3RpZnkoKTsKK30KKyAgICAKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6
OmNhbmNlbExvYWQoKQoreworICAgIGlmICghaXNMb2FkaW5nKCkgJiYgIXN0aWxsTmVlZHNMb2Fk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFN0YXR1cyhMb2FkRXJyb3IpOworICAgIHNl
dExvYWRpbmcoZmFsc2UpOworICAgIGNoZWNrTm90aWZ5KCk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVz
b3VyY2U6OmZpbmlzaCgpCit7CisgICAgaWYgKCFlcnJvck9jY3VycmVkKCkpCisgICAgICAgIG1f
c3RhdHVzID0gQ2FjaGVkOworfQorCitib29sIENhY2hlZFJlc291cmNlOjpwYXNzZXNBY2Nlc3ND
b250cm9sQ2hlY2soU2VjdXJpdHlPcmlnaW4mIHNlY3VyaXR5T3JpZ2luKQoreworICAgIFN0cmlu
ZyBlcnJvckRlc2NyaXB0aW9uOworICAgIHJldHVybiBXZWJDb3JlOjpwYXNzZXNBY2Nlc3NDb250
cm9sQ2hlY2socmVzcG9uc2UoKSwgcmVzb3VyY2VSZXF1ZXN0KCkuYWxsb3dDb29raWVzKCkgPyBB
bGxvd1N0b3JlZENyZWRlbnRpYWxzIDogRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBzZWN1
cml0eU9yaWdpbiwgZXJyb3JEZXNjcmlwdGlvbik7Cit9CisKK2Jvb2wgQ2FjaGVkUmVzb3VyY2U6
OnBhc3Nlc1NhbWVPcmlnaW5Qb2xpY3lDaGVjayhTZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlPcmln
aW4pCit7CisgICAgaWYgKHNlY3VyaXR5T3JpZ2luLmNhblJlcXVlc3QocmVzcG9uc2VGb3JTYW1l
T3JpZ2luUG9saWN5Q2hlY2tzKCkudXJsKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4gcGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKHNlY3VyaXR5T3JpZ2luKTsKK30KKwordm9p
ZCBDYWNoZWRSZXNvdXJjZTo6c2V0Q3Jvc3NPcmlnaW4oKQoreworICAgIEFTU0VSVChtX29wdGlv
bnMubW9kZSAhPSBGZXRjaE9wdGlvbnM6Ok1vZGU6OlNhbWVPcmlnaW4pOworICAgIG1fcmVzcG9u
c2VUYWludGluZyA9IChtX29wdGlvbnMubW9kZSA9PSBGZXRjaE9wdGlvbnM6Ok1vZGU6OkNvcnMp
ID8gUmVzb3VyY2VSZXNwb25zZTo6VGFpbnRpbmc6OkNvcnMgOiBSZXNvdXJjZVJlc3BvbnNlOjpU
YWludGluZzo6T3BhcXVlOworfQorCitib29sIENhY2hlZFJlc291cmNlOjppc0Nyb3NzT3JpZ2lu
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZXNwb25zZVRhaW50aW5nICE9IFJlc291cmNlUmVz
cG9uc2U6OlRhaW50aW5nOjpCYXNpYzsKK30KKworYm9vbCBDYWNoZWRSZXNvdXJjZTo6aXNDbGVh
bigpIGNvbnN0Cit7CisgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBh
Z2UvaW5mcmFzdHJ1Y3R1cmUuaHRtbCNjb3JzLXNhbWUtb3JpZ2luCisgICAgcmV0dXJuICFsb2Fk
RmFpbGVkT3JDYW5jZWxlZCgpICYmIG1fcmVzcG9uc2VUYWludGluZyAhPSBSZXNvdXJjZVJlc3Bv
bnNlOjpUYWludGluZzo6T3BhcXVlOworfQorCitib29sIENhY2hlZFJlc291cmNlOjppc0V4cGly
ZWQoKSBjb25zdAoreworICAgIGlmIChtX3Jlc3BvbnNlLmlzTnVsbCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gY29tcHV0ZUN1cnJlbnRBZ2UobV9yZXNwb25zZSwgbV9y
ZXNwb25zZVRpbWVzdGFtcCkgPiBmcmVzaG5lc3NMaWZldGltZShtX3Jlc3BvbnNlKTsKK30KKwor
c3RhdGljIGlubGluZSBib29sIHNob3VsZENhY2hlU2NoZW1lSW5kZWZpbml0ZWx5KGNvbnN0IFN0
cmluZyYgc2NoZW1lKQoreworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShzY2hlbWUsICJhcHBsZXdlYmRhdGEiKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisjZW5kaWYKKyNpZiBVU0UoU09VUCkKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2Uoc2NoZW1lLCAicmVzb3VyY2UiKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisjZW5kaWYKKyAgICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc2NoZW1l
LCAiZGF0YSIpOworfQorCitzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIENhY2hlZFJlc291cmNl
OjpmcmVzaG5lc3NMaWZldGltZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkgY29u
c3QKK3sKKyAgICBpZiAoIXJlc3BvbnNlLnVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkg
eworICAgICAgICBTdHJpbmcgcHJvdG9jb2wgPSByZXNwb25zZS51cmwoKS5wcm90b2NvbCgpOwor
ICAgICAgICBpZiAoIXNob3VsZENhY2hlU2NoZW1lSW5kZWZpbml0ZWx5KHByb3RvY29sKSkgewor
ICAgICAgICAgICAgLy8gRG9uJ3QgY2FjaGUgbm9uLUhUVFAgbWFpbiByZXNvdXJjZXMgc2luY2Ug
d2UgY2FuJ3QgY2hlY2sgZm9yIGZyZXNobmVzcy4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgbm90IGNhY2hlIHN1YnJlc291cmNlcyBlaXRoZXIsIGJ1dCB3aGVuIHdlIHRyaWVkIHRo
aXMKKyAgICAgICAgICAgIC8vIGl0IGNhdXNlZCBwZXJmb3JtYW5jZSBhbmQgZmxha2luZXNzIGlz
c3VlcyBpbiBvdXIgdGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgICAgIGlmIChtX3R5cGUg
PT0gTWFpblJlc291cmNlIHx8IFNjaGVtZVJlZ2lzdHJ5OjpzaG91bGRBbHdheXNSZXZhbGlkYXRl
VVJMU2NoZW1lKHByb3RvY29sKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMHVzOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHM6Om1heCgpOwor
ICAgIH0KKworICAgIHJldHVybiBjb21wdXRlRnJlc2huZXNzTGlmZXRpbWVGb3JIVFRQRmFtaWx5
KHJlc3BvbnNlLCBtX3Jlc3BvbnNlVGltZXN0YW1wKTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJj
ZTo6cmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIG1fcmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdM
YXllciA9IHRydWU7CisgICAgaWYgKHJlc3BvbnNlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBSZWRpcmVjdCB0byBkYXRhOiBVUkwgdXNlcyB0aGUgbGFzdCBIVFRQIHJlc3Bv
bnNlIGZvciBTT1AuCisgICAgaWYgKHJlc3BvbnNlLmlzSFRUUCgpICYmIHJlcXVlc3QudXJsKCku
cHJvdG9jb2xJc0RhdGEoKSkKKyAgICAgICAgbV9yZWRpcmVjdFJlc3BvbnNlRm9yU2FtZU9yaWdp
blBvbGljeUNoZWNrcyA9IHJlc3BvbnNlOworCisgICAgdXBkYXRlUmVkaXJlY3RDaGFpblN0YXR1
cyhtX3JlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1cywgcmVzcG9uc2UpOworfQorCitjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiBDYWNoZWRSZXNvdXJjZTo6cmVzcG9uc2VGb3JTYW1lT3JpZ2luUG9saWN5
Q2hlY2tzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZWRpcmVjdFJlc3BvbnNlRm9yU2FtZU9y
aWdpblBvbGljeUNoZWNrcy5pc051bGwoKSA/IG1fcmVzcG9uc2UgOiBtX3JlZGlyZWN0UmVzcG9u
c2VGb3JTYW1lT3JpZ2luUG9saWN5Q2hlY2tzOworfQorCit2b2lkIENhY2hlZFJlc291cmNlOjpz
ZXRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBBU1NF
UlQobV9yZXNwb25zZS50eXBlKCkgPT0gUmVzb3VyY2VSZXNwb25zZTo6VHlwZTo6RGVmYXVsdCk7
CisgICAgbV9yZXNwb25zZSA9IHJlc3BvbnNlOworICAgIG1fcmVzcG9uc2Uuc2V0UmVkaXJlY3Rl
ZChtX3JlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1cy5zdGF0dXMgIT0gUmVkaXJlY3RDaGFpbkNhY2hl
U3RhdHVzOjpOb1JlZGlyZWN0aW9uKTsKKworICAgIG1fdmFyeWluZ0hlYWRlclZhbHVlcyA9IGNv
bGxlY3RWYXJ5aW5nUmVxdWVzdEhlYWRlcnMobV9yZXNvdXJjZVJlcXVlc3QsIG1fcmVzcG9uc2Us
IG1fc2Vzc2lvbklEKTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6cmVzcG9uc2VSZWNlaXZl
ZChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBzZXRSZXNwb25zZShy
ZXNwb25zZSk7CisgICAgbV9yZXNwb25zZVRpbWVzdGFtcCA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1f
Y2xvY2s6Om5vdygpOworICAgIFN0cmluZyBlbmNvZGluZyA9IHJlc3BvbnNlLnRleHRFbmNvZGlu
Z05hbWUoKTsKKyAgICBpZiAoIWVuY29kaW5nLmlzTnVsbCgpKQorICAgICAgICBzZXRFbmNvZGlu
ZyhlbmNvZGluZyk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OmNsZWFyTG9hZGVyKCkKK3sK
KyAgICBBU1NFUlQobV9sb2FkZXIpOworICAgIG1faWRlbnRpZmllckZvckxvYWRXaXRob3V0UmVz
b3VyY2VMb2FkZXIgPSBtX2xvYWRlci0+aWRlbnRpZmllcigpOworICAgIG1fbG9hZGVyID0gbnVs
bHB0cjsKKyAgICBkZWxldGVJZlBvc3NpYmxlKCk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6
OmFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50KQoreworICAgIGlmIChhZGRD
bGllbnRUb1NldChjbGllbnQpKQorICAgICAgICBkaWRBZGRDbGllbnQoY2xpZW50KTsKK30KKwor
dm9pZCBDYWNoZWRSZXNvdXJjZTo6ZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50KiBj
bGllbnQpCit7CisgICAgaWYgKG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyLmlzQWN0aXZlKCkp
CisgICAgICAgIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyLnN0b3AoKTsKKworICAgIGlmICht
X2NsaWVudHNBd2FpdGluZ0NhbGxiYWNrLnJlbW92ZShjbGllbnQpKQorICAgICAgICBtX2NsaWVu
dHMuYWRkKGNsaWVudCk7CisgICAgaWYgKCFpc0xvYWRpbmcoKSAmJiAhc3RpbGxOZWVkc0xvYWQo
KSkKKyAgICAgICAgY2xpZW50LT5ub3RpZnlGaW5pc2hlZCh0aGlzKTsKK30KKworYm9vbCBDYWNo
ZWRSZXNvdXJjZTo6YWRkQ2xpZW50VG9TZXQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCkK
K3sKKyAgICBpZiAobV9wcmVsb2FkUmVzdWx0ID09IFByZWxvYWROb3RSZWZlcmVuY2VkKSB7Cisg
ICAgICAgIGlmIChpc0xvYWRlZCgpKQorICAgICAgICAgICAgbV9wcmVsb2FkUmVzdWx0ID0gUHJl
bG9hZFJlZmVyZW5jZWRXaGlsZUNvbXBsZXRlOworICAgICAgICBlbHNlIGlmIChtX3JlcXVlc3Rl
ZEZyb21OZXR3b3JraW5nTGF5ZXIpCisgICAgICAgICAgICBtX3ByZWxvYWRSZXN1bHQgPSBQcmVs
b2FkUmVmZXJlbmNlZFdoaWxlTG9hZGluZzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9w
cmVsb2FkUmVzdWx0ID0gUHJlbG9hZFJlZmVyZW5jZWQ7CisgICAgfQorICAgIGlmIChhbGxvd3ND
YWNoaW5nKCkgJiYgIWhhc0NsaWVudHMoKSAmJiBpbkNhY2hlKCkpCisgICAgICAgIE1lbW9yeUNh
Y2hlOjpzaW5nbGV0b24oKS5hZGRUb0xpdmVSZXNvdXJjZXNTaXplKCp0aGlzKTsKKworICAgIGlm
ICgobV90eXBlID09IFJhd1Jlc291cmNlIHx8IG1fdHlwZSA9PSBNYWluUmVzb3VyY2UpICYmICFt
X3Jlc3BvbnNlLmlzTnVsbCgpICYmICFtX3Byb3h5UmVzb3VyY2UpIHsKKyAgICAgICAgLy8gQ2Vy
dGFpbiByZXNvdXJjZXMgKGVzcGVjaWFsbHkgWEhScyBhbmQgbWFpbiByZXNvdXJjZXMpIGRvIGNy
YXp5IHRoaW5ncyBpZiBhbiBhc3luY2hyb25vdXMgbG9hZCByZXR1cm5zCisgICAgICAgIC8vIHN5
bmNocm9ub3VzbHkgKGUuZy4sIHNjcmlwdHMgbWF5IG5vdCBoYXZlIHNldCBhbGwgdGhlIHN0YXRl
IHRoZXkgbmVlZCB0byBoYW5kbGUgdGhlIGxvYWQpLgorICAgICAgICAvLyBUaGVyZWZvcmUsIHJh
dGhlciB0aGFuIGltbWVkaWF0ZWx5IHNlbmRpbmcgY2FsbGJhY2tzIG9uIGEgY2FjaGUgaGl0IGxp
a2Ugb3RoZXIgQ2FjaGVkUmVzb3VyY2VzLAorICAgICAgICAvLyB3ZSBzY2hlZHVsZSB0aGUgY2Fs
bGJhY2tzIGFuZCBlbnN1cmUgd2UgbmV2ZXIgZmluaXNoIHN5bmNocm9ub3VzbHkuCisgICAgICAg
IEFTU0VSVCghbV9jbGllbnRzQXdhaXRpbmdDYWxsYmFjay5jb250YWlucyhjbGllbnQpKTsKKyAg
ICAgICAgbV9jbGllbnRzQXdhaXRpbmdDYWxsYmFjay5hZGQoY2xpZW50LCBzdGQ6Om1ha2VfdW5p
cXVlPENhbGxiYWNrPigqdGhpcywgKmNsaWVudCkpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgbV9jbGllbnRzLmFkZChjbGllbnQpOworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIENhY2hlZFJlc291cmNlOjpyZW1vdmVDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQq
IGNsaWVudCkKK3sKKyAgICBhdXRvIGNhbGxiYWNrID0gbV9jbGllbnRzQXdhaXRpbmdDYWxsYmFj
ay50YWtlKGNsaWVudCk7CisgICAgaWYgKGNhbGxiYWNrKSB7CisgICAgICAgIEFTU0VSVCghbV9j
bGllbnRzLmNvbnRhaW5zKGNsaWVudCkpOworICAgICAgICBjYWxsYmFjay0+Y2FuY2VsKCk7Cisg
ICAgICAgIGNhbGxiYWNrID0gbnVsbHB0cjsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQo
bV9jbGllbnRzLmNvbnRhaW5zKGNsaWVudCkpOworICAgICAgICBtX2NsaWVudHMucmVtb3ZlKGNs
aWVudCk7CisgICAgICAgIGRpZFJlbW92ZUNsaWVudChjbGllbnQpOworICAgIH0KKworICAgIGlm
IChkZWxldGVJZlBvc3NpYmxlKCkpIHsKKyAgICAgICAgLy8gYHRoaXNgIG9iamVjdCBpcyBkZWFk
IGhlcmUuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaGFzQ2xpZW50cygpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBtZW1vcnlDYWNoZSA9IE1lbW9yeUNhY2hlOjpz
aW5nbGV0b24oKTsKKyAgICBpZiAoYWxsb3dzQ2FjaGluZygpICYmIGluQ2FjaGUoKSkgeworICAg
ICAgICBtZW1vcnlDYWNoZS5yZW1vdmVGcm9tTGl2ZVJlc291cmNlc1NpemUoKnRoaXMpOworICAg
ICAgICBtZW1vcnlDYWNoZS5yZW1vdmVGcm9tTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KCp0aGlz
KTsKKyAgICB9CisgICAgaWYgKCFtX3N3aXRjaGluZ0NsaWVudHNUb1JldmFsaWRhdGVkUmVzb3Vy
Y2UpCisgICAgICAgIGFsbENsaWVudHNSZW1vdmVkKCk7CisgICAgZGVzdHJveURlY29kZWREYXRh
SWZOZWVkZWQoKTsKKworICAgIGlmICghYWxsb3dzQ2FjaGluZygpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAocmVzcG9uc2UoKS5jYWNoZUNvbnRyb2xDb250YWluc05vU3RvcmUoKSAmJiB1
cmwoKS5wcm90b2NvbElzKCJodHRwcyIpKSB7CisgICAgICAgIC8vIFJGQzI2MTYgMTQuOS4yOgor
ICAgICAgICAvLyAibm8tc3RvcmU6IC4uLiBNVVNUIG1ha2UgYSBiZXN0LWVmZm9ydCBhdHRlbXB0
IHRvIHJlbW92ZSB0aGUgaW5mb3JtYXRpb24gZnJvbSB2b2xhdGlsZSBzdG9yYWdlIGFzIHByb21w
dGx5IGFzIHBvc3NpYmxlIgorICAgICAgICAvLyAiLi4uIEhpc3RvcnkgYnVmZmVycyBNQVkgc3Rv
cmUgc3VjaCByZXNwb25zZXMgYXMgcGFydCBvZiB0aGVpciBub3JtYWwgb3BlcmF0aW9uLiIKKyAg
ICAgICAgLy8gV2UgYWxsb3cgbm9uLXNlY3VyZSBjb250ZW50IHRvIGJlIHJldXNlZCBpbiBoaXN0
b3J5LCBidXQgd2UgZG8gbm90IGFsbG93IHNlY3VyZSBjb250ZW50IHRvIGJlIHJldXNlZC4KKyAg
ICAgICAgbWVtb3J5Q2FjaGUucmVtb3ZlKCp0aGlzKTsKKyAgICB9CisgICAgbWVtb3J5Q2FjaGUu
cHJ1bmVTb29uKCk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OmRlc3Ryb3lEZWNvZGVkRGF0
YUlmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fZGVjb2RlZFNpemUpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoIU1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5kZWFkRGVjb2RlZERhdGFEZWxldGlv
bkludGVydmFsKCkuY291bnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZGVjb2RlZERhdGFE
ZWxldGlvblRpbWVyLnJlc3RhcnQoKTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6ZGVjb2Rl
ZERhdGFEZWxldGlvblRpbWVyRmlyZWQoKQoreworICAgIGRlc3Ryb3lEZWNvZGVkRGF0YSgpOwor
fQorCitib29sIENhY2hlZFJlc291cmNlOjpkZWxldGVJZlBvc3NpYmxlKCkKK3sKKyAgICBpZiAo
Y2FuRGVsZXRlKCkpIHsKKyAgICAgICAgaWYgKCFpbkNhY2hlKCkpIHsKKyAgICAgICAgICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERlc3Ryb3lDYWNoZWRSZXNvdXJjZSgqdGhpcyk7
CisgICAgICAgICAgICBkZWxldGUgdGhpczsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIGlmIChtX2RhdGEpCisgICAgICAgICAgICBtX2RhdGEtPmhpbnRNZW1v
cnlOb3ROZWVkZWRTb29uKCk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBD
YWNoZWRSZXNvdXJjZTo6c2V0RGVjb2RlZFNpemUodW5zaWduZWQgc2l6ZSkKK3sKKyAgICBpZiAo
c2l6ZSA9PSBtX2RlY29kZWRTaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgZGVsdGEg
PSBzaXplIC0gbV9kZWNvZGVkU2l6ZTsKKworICAgIC8vIFRoZSBvYmplY3QgbXVzdCBiZSBtb3Zl
ZCB0byBhIGRpZmZlcmVudCBxdWV1ZSwgc2luY2UgaXRzIHNpemUgaGFzIGJlZW4gY2hhbmdlZC4K
KyAgICAvLyBSZW1vdmUgYmVmb3JlIHVwZGF0aW5nIG1fZGVjb2RlZFNpemUsIHNvIHdlIGZpbmQg
dGhlIHJlc291cmNlIGluIHRoZSBjb3JyZWN0IExSVSBsaXN0LgorICAgIGlmIChhbGxvd3NDYWNo
aW5nKCkgJiYgaW5DYWNoZSgpKQorICAgICAgICBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkucmVt
b3ZlRnJvbUxSVUxpc3QoKnRoaXMpOworICAgIAorICAgIG1fZGVjb2RlZFNpemUgPSBzaXplOwor
ICAgCisgICAgaWYgKGFsbG93c0NhY2hpbmcoKSAmJiBpbkNhY2hlKCkpIHsKKyAgICAgICAgYXV0
byYgbWVtb3J5Q2FjaGUgPSBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCk7CisgICAgICAgIC8vIE5v
dyBpbnNlcnQgaW50byB0aGUgbmV3IExSVSBsaXN0LgorICAgICAgICBtZW1vcnlDYWNoZS5pbnNl
cnRJbkxSVUxpc3QoKnRoaXMpOworICAgICAgICAKKyAgICAgICAgLy8gSW5zZXJ0IGludG8gb3Ig
cmVtb3ZlIGZyb20gdGhlIGxpdmUgZGVjb2RlZCBsaXN0IGlmIG5lY2Vzc2FyeS4KKyAgICAgICAg
Ly8gV2hlbiBpbnNlcnRpbmcgaW50byB0aGUgTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0IGl0IGlz
IHBvc3NpYmxlCisgICAgICAgIC8vIHRoYXQgdGhlIG1fbGFzdERlY29kZWRBY2Nlc3NUaW1lIGlz
IHN0aWxsIHplcm8gb3Igc21hbGxlciB0aGFuCisgICAgICAgIC8vIHRoZSBtX2xhc3REZWNvZGVk
QWNjZXNzVGltZSBvZiB0aGUgY3VycmVudCBsaXN0IGhlYWQuIFRoaXMgaXMgYQorICAgICAgICAv
LyB2aW9sYXRpb24gb2YgdGhlIGludmFyaWFudCB0aGF0IHRoZSBsaXN0IGlzIHRvIGJlIGtlcHQg
c29ydGVkCisgICAgICAgIC8vIGJ5IGFjY2VzcyB0aW1lLiBUaGUgd2Vha2VuaW5nIG9mIHRoZSBp
bnZhcmlhbnQgZG9lcyBub3QgcG9zZQorICAgICAgICAvLyBhIHByb2JsZW0uIEZvciBtb3JlIGRl
dGFpbHMgcGxlYXNlIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTMwMjA5CisgICAgICAgIGJvb2wgaW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QgPSBtZW1vcnlD
YWNoZS5pbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCgqdGhpcyk7CisgICAgICAgIGlmIChtX2Rl
Y29kZWRTaXplICYmICFpbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCAmJiBoYXNDbGllbnRzKCkp
CisgICAgICAgICAgICBtZW1vcnlDYWNoZS5pbnNlcnRJbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlz
dCgqdGhpcyk7CisgICAgICAgIGVsc2UgaWYgKCFtX2RlY29kZWRTaXplICYmIGluTGl2ZURlY29k
ZWRSZXNvdXJjZXNMaXN0KQorICAgICAgICAgICAgbWVtb3J5Q2FjaGUucmVtb3ZlRnJvbUxpdmVE
ZWNvZGVkUmVzb3VyY2VzTGlzdCgqdGhpcyk7CisKKyAgICAgICAgLy8gVXBkYXRlIHRoZSBjYWNo
ZSdzIHNpemUgdG90YWxzLgorICAgICAgICBtZW1vcnlDYWNoZS5hZGp1c3RTaXplKGhhc0NsaWVu
dHMoKSwgZGVsdGEpOworICAgIH0KK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0RW5jb2Rl
ZFNpemUodW5zaWduZWQgc2l6ZSkKK3sKKyAgICBpZiAoc2l6ZSA9PSBtX2VuY29kZWRTaXplKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpbnQgZGVsdGEgPSBzaXplIC0gbV9lbmNvZGVkU2l6ZTsK
KworICAgIC8vIFRoZSBvYmplY3QgbXVzdCBiZSBtb3ZlZCB0byBhIGRpZmZlcmVudCBxdWV1ZSwg
c2luY2UgaXRzIHNpemUgaGFzIGJlZW4gY2hhbmdlZC4KKyAgICAvLyBSZW1vdmUgYmVmb3JlIHVw
ZGF0aW5nIG1fZW5jb2RlZFNpemUsIHNvIHdlIGZpbmQgdGhlIHJlc291cmNlIGluIHRoZSBjb3Jy
ZWN0IExSVSBsaXN0LgorICAgIGlmIChhbGxvd3NDYWNoaW5nKCkgJiYgaW5DYWNoZSgpKQorICAg
ICAgICBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkucmVtb3ZlRnJvbUxSVUxpc3QoKnRoaXMpOwor
CisgICAgbV9lbmNvZGVkU2l6ZSA9IHNpemU7CisKKyAgICBpZiAoYWxsb3dzQ2FjaGluZygpICYm
IGluQ2FjaGUoKSkgeworICAgICAgICBhdXRvJiBtZW1vcnlDYWNoZSA9IE1lbW9yeUNhY2hlOjpz
aW5nbGV0b24oKTsKKyAgICAgICAgbWVtb3J5Q2FjaGUuaW5zZXJ0SW5MUlVMaXN0KCp0aGlzKTsK
KyAgICAgICAgbWVtb3J5Q2FjaGUuYWRqdXN0U2l6ZShoYXNDbGllbnRzKCksIGRlbHRhKTsKKyAg
ICB9Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OmRpZEFjY2Vzc0RlY29kZWREYXRhKGRvdWJs
ZSB0aW1lU3RhbXApCit7CisgICAgbV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWUgPSB0aW1lU3RhbXA7
CisgICAgCisgICAgaWYgKGFsbG93c0NhY2hpbmcoKSAmJiBpbkNhY2hlKCkpIHsKKyAgICAgICAg
YXV0byYgbWVtb3J5Q2FjaGUgPSBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCk7CisgICAgICAgIGlm
IChtZW1vcnlDYWNoZS5pbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCgqdGhpcykpIHsKKyAgICAg
ICAgICAgIG1lbW9yeUNhY2hlLnJlbW92ZUZyb21MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QoKnRo
aXMpOworICAgICAgICAgICAgbWVtb3J5Q2FjaGUuaW5zZXJ0SW5MaXZlRGVjb2RlZFJlc291cmNl
c0xpc3QoKnRoaXMpOworICAgICAgICB9CisgICAgICAgIG1lbW9yeUNhY2hlLnBydW5lU29vbigp
OworICAgIH0KK30KKyAgICAKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldFJlc291cmNlVG9SZXZh
bGlkYXRlKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkgCit7IAorICAgIEFTU0VSVChyZXNvdXJj
ZSk7CisgICAgQVNTRVJUKCFtX3Jlc291cmNlVG9SZXZhbGlkYXRlKTsKKyAgICBBU1NFUlQocmVz
b3VyY2UgIT0gdGhpcyk7CisgICAgQVNTRVJUKG1faGFuZGxlc1RvUmV2YWxpZGF0ZS5pc0VtcHR5
KCkpOworICAgIEFTU0VSVChyZXNvdXJjZS0+dHlwZSgpID09IHR5cGUoKSk7CisgICAgQVNTRVJU
KCFyZXNvdXJjZS0+bV9wcm94eVJlc291cmNlKTsKKworICAgIExPRyhSZXNvdXJjZUxvYWRpbmcs
ICJDYWNoZWRSZXNvdXJjZSAlcCBzZXRSZXNvdXJjZVRvUmV2YWxpZGF0ZSAlcCIsIHRoaXMsIHJl
c291cmNlKTsKKworICAgIHJlc291cmNlLT5tX3Byb3h5UmVzb3VyY2UgPSB0aGlzOworICAgIG1f
cmVzb3VyY2VUb1JldmFsaWRhdGUgPSByZXNvdXJjZTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJj
ZTo6Y2xlYXJSZXNvdXJjZVRvUmV2YWxpZGF0ZSgpIAoreworICAgIEFTU0VSVChtX3Jlc291cmNl
VG9SZXZhbGlkYXRlKTsKKyAgICBBU1NFUlQobV9yZXNvdXJjZVRvUmV2YWxpZGF0ZS0+bV9wcm94
eVJlc291cmNlID09IHRoaXMpOworCisgICAgaWYgKG1fc3dpdGNoaW5nQ2xpZW50c1RvUmV2YWxp
ZGF0ZWRSZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZXNvdXJjZVRvUmV2YWxp
ZGF0ZS0+bV9wcm94eVJlc291cmNlID0gbnVsbHB0cjsKKyAgICBtX3Jlc291cmNlVG9SZXZhbGlk
YXRlLT5kZWxldGVJZlBvc3NpYmxlKCk7CisKKyAgICBtX2hhbmRsZXNUb1JldmFsaWRhdGUuY2xl
YXIoKTsKKyAgICBtX3Jlc291cmNlVG9SZXZhbGlkYXRlID0gbnVsbHB0cjsKKyAgICBkZWxldGVJ
ZlBvc3NpYmxlKCk7Cit9CisgICAgCit2b2lkIENhY2hlZFJlc291cmNlOjpzd2l0Y2hDbGllbnRz
VG9SZXZhbGlkYXRlZFJlc291cmNlKCkKK3sKKyAgICBBU1NFUlQobV9yZXNvdXJjZVRvUmV2YWxp
ZGF0ZSk7CisgICAgQVNTRVJUKG1fcmVzb3VyY2VUb1JldmFsaWRhdGUtPmluQ2FjaGUoKSk7Cisg
ICAgQVNTRVJUKCFpbkNhY2hlKCkpOworCisgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hl
ZFJlc291cmNlICVwIHN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UgJXAiLCB0aGlz
LCBtX3Jlc291cmNlVG9SZXZhbGlkYXRlKTsKKworICAgIG1fc3dpdGNoaW5nQ2xpZW50c1RvUmV2
YWxpZGF0ZWRSZXNvdXJjZSA9IHRydWU7CisgICAgZm9yIChhdXRvJiBoYW5kbGUgOiBtX2hhbmRs
ZXNUb1JldmFsaWRhdGUpIHsKKyAgICAgICAgaGFuZGxlLT5tX3Jlc291cmNlID0gbV9yZXNvdXJj
ZVRvUmV2YWxpZGF0ZTsKKyAgICAgICAgbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZS0+cmVnaXN0ZXJI
YW5kbGUoaGFuZGxlKTsKKyAgICAgICAgLS1tX2hhbmRsZUNvdW50OworICAgIH0KKyAgICBBU1NF
UlQoIW1faGFuZGxlQ291bnQpOworICAgIG1faGFuZGxlc1RvUmV2YWxpZGF0ZS5jbGVhcigpOwor
CisgICAgVmVjdG9yPENhY2hlZFJlc291cmNlQ2xpZW50Kj4gY2xpZW50c1RvTW92ZTsKKyAgICBm
b3IgKGF1dG8mIGVudHJ5IDogbV9jbGllbnRzKSB7CisgICAgICAgIENhY2hlZFJlc291cmNlQ2xp
ZW50KiBjbGllbnQgPSBlbnRyeS5rZXk7CisgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gZW50cnku
dmFsdWU7CisgICAgICAgIHdoaWxlIChjb3VudCkgeworICAgICAgICAgICAgY2xpZW50c1RvTW92
ZS5hcHBlbmQoY2xpZW50KTsKKyAgICAgICAgICAgIC0tY291bnQ7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNsaWVudHNUb01vdmUpCisgICAgICAgIHJlbW92
ZUNsaWVudChjbGllbnQpOworICAgIEFTU0VSVChtX2NsaWVudHMuaXNFbXB0eSgpKTsKKworICAg
IGZvciAoYXV0byYgY2xpZW50IDogY2xpZW50c1RvTW92ZSkKKyAgICAgICAgbV9yZXNvdXJjZVRv
UmV2YWxpZGF0ZS0+YWRkQ2xpZW50VG9TZXQoY2xpZW50KTsKKyAgICBmb3IgKGF1dG8mIGNsaWVu
dCA6IGNsaWVudHNUb01vdmUpIHsKKyAgICAgICAgLy8gQ2FsbGluZyBkaWRBZGRDbGllbnQgbWF5
IGRvIGFueXRoaW5nLCBpbmNsdWRpbmcgdHJ5aW5nIHRvIGNhbmNlbCByZXZhbGlkYXRpb24uCisg
ICAgICAgIC8vIEFzc2VydCB0aGF0IGl0IGRpZG4ndCBzdWNjZWVkLgorICAgICAgICBBU1NFUlQo
bV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSk7CisgICAgICAgIC8vIENhbGxpbmcgZGlkQWRkQ2xpZW50
IGZvciBhIGNsaWVudCBtYXkgZW5kIHVwIHJlbW92aW5nIGFub3RoZXIgY2xpZW50LiBJbiB0aGF0
IGNhc2UgaXQgd29uJ3QgYmUgaW4gdGhlIHNldCBhbnltb3JlLgorICAgICAgICBpZiAobV9yZXNv
dXJjZVRvUmV2YWxpZGF0ZS0+bV9jbGllbnRzLmNvbnRhaW5zKGNsaWVudCkpCisgICAgICAgICAg
ICBtX3Jlc291cmNlVG9SZXZhbGlkYXRlLT5kaWRBZGRDbGllbnQoY2xpZW50KTsKKyAgICB9Cisg
ICAgbV9zd2l0Y2hpbmdDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNlID0gZmFsc2U7Cit9CisK
K3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OnVwZGF0ZVJlc3BvbnNlQWZ0ZXJSZXZhbGlkYXRpb24oY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgdmFsaWRhdGluZ1Jlc3BvbnNlKQoreworICAgIG1fcmVzcG9u
c2VUaW1lc3RhbXAgPSBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKKworICAgIHVw
ZGF0ZVJlc3BvbnNlSGVhZGVyc0FmdGVyUmV2YWxpZGF0aW9uKG1fcmVzcG9uc2UsIHZhbGlkYXRp
bmdSZXNwb25zZSk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OnJlZ2lzdGVySGFuZGxlKENh
Y2hlZFJlc291cmNlSGFuZGxlQmFzZSogaCkKK3sKKyAgICArK21faGFuZGxlQ291bnQ7CisgICAg
aWYgKG1fcmVzb3VyY2VUb1JldmFsaWRhdGUpCisgICAgICAgIG1faGFuZGxlc1RvUmV2YWxpZGF0
ZS5hZGQoaCk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OnVucmVnaXN0ZXJIYW5kbGUoQ2Fj
aGVkUmVzb3VyY2VIYW5kbGVCYXNlKiBoKQoreworICAgIEFTU0VSVChtX2hhbmRsZUNvdW50ID4g
MCk7CisgICAgLS1tX2hhbmRsZUNvdW50OworCisgICAgaWYgKG1fcmVzb3VyY2VUb1JldmFsaWRh
dGUpCisgICAgICAgICBtX2hhbmRsZXNUb1JldmFsaWRhdGUucmVtb3ZlKGgpOworCisgICAgaWYg
KCFtX2hhbmRsZUNvdW50KQorICAgICAgICBkZWxldGVJZlBvc3NpYmxlKCk7Cit9CisKK2Jvb2wg
Q2FjaGVkUmVzb3VyY2U6OmNhblVzZUNhY2hlVmFsaWRhdG9yKCkgY29uc3QKK3sKKyAgICBpZiAo
bV9sb2FkaW5nIHx8IGVycm9yT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKG1fcmVzcG9uc2UuY2FjaGVDb250cm9sQ29udGFpbnNOb1N0b3JlKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9yZXNwb25zZS5oYXNDYWNoZVZhbGlkYXRvckZp
ZWxkcygpOworfQorCitDYWNoZWRSZXNvdXJjZTo6UmV2YWxpZGF0aW9uRGVjaXNpb24gQ2FjaGVk
UmVzb3VyY2U6Om1ha2VSZXZhbGlkYXRpb25EZWNpc2lvbihDYWNoZVBvbGljeSBjYWNoZVBvbGlj
eSkgY29uc3QKK3sgICAgCisgICAgc3dpdGNoIChjYWNoZVBvbGljeSkgeworICAgIGNhc2UgQ2Fj
aGVQb2xpY3lIaXN0b3J5QnVmZmVyOgorICAgICAgICByZXR1cm4gUmV2YWxpZGF0aW9uRGVjaXNp
b246Ok5vOworCisgICAgY2FzZSBDYWNoZVBvbGljeVJlbG9hZDoKKyAgICBjYXNlIENhY2hlUG9s
aWN5UmV2YWxpZGF0ZToKKyAgICAgICAgcmV0dXJuIFJldmFsaWRhdGlvbkRlY2lzaW9uOjpZZXNE
dWVUb0NhY2hlUG9saWN5OworCisgICAgY2FzZSBDYWNoZVBvbGljeVZlcmlmeToKKyAgICAgICAg
aWYgKG1fcmVzcG9uc2UuY2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hlKCkpCisgICAgICAgICAg
ICByZXR1cm4gUmV2YWxpZGF0aW9uRGVjaXNpb246Olllc0R1ZVRvTm9DYWNoZTsKKyAgICAgICAg
Ly8gRklYTUU6IENhY2hlLUNvbnRyb2w6bm8tc3RvcmUgc2hvdWxkIHByZXZlbnQgc3RvcmluZywg
bm90IHJldXNlLgorICAgICAgICBpZiAobV9yZXNwb25zZS5jYWNoZUNvbnRyb2xDb250YWluc05v
U3RvcmUoKSkKKyAgICAgICAgICAgIHJldHVybiBSZXZhbGlkYXRpb25EZWNpc2lvbjo6WWVzRHVl
VG9Ob1N0b3JlOworCisgICAgICAgIGlmIChpc0V4cGlyZWQoKSkKKyAgICAgICAgICAgIHJldHVy
biBSZXZhbGlkYXRpb25EZWNpc2lvbjo6WWVzRHVlVG9FeHBpcmVkOworCisgICAgICAgIHJldHVy
biBSZXZhbGlkYXRpb25EZWNpc2lvbjo6Tm87CisgICAgfTsKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gUmV2YWxpZGF0aW9uRGVjaXNpb246Ok5vOworfQorCitib29sIENh
Y2hlZFJlc291cmNlOjpyZWRpcmVjdENoYWluQWxsb3dzUmV1c2UoUmV1c2VFeHBpcmVkUmVkaXJl
Y3Rpb25Pck5vdCByZXVzZUV4cGlyZWRSZWRpcmVjdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4g
V2ViQ29yZTo6cmVkaXJlY3RDaGFpbkFsbG93c1JldXNlKG1fcmVkaXJlY3RDaGFpbkNhY2hlU3Rh
dHVzLCByZXVzZUV4cGlyZWRSZWRpcmVjdGlvbik7Cit9CisKK2Jvb2wgQ2FjaGVkUmVzb3VyY2U6
OnZhcnlIZWFkZXJWYWx1ZXNNYXRjaChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IENhY2hlZFJlc291cmNlTG9hZGVyJiBjYWNoZWRSZXNvdXJjZUxvYWRlcikKK3sKKyAgICBp
ZiAobV92YXJ5aW5nSGVhZGVyVmFsdWVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdFdpdGhGdWxsSGVhZGVycyhyZXF1ZXN0KTsK
KyAgICBhZGRBZGRpdGlvbmFsUmVxdWVzdEhlYWRlcnNUb1JlcXVlc3QocmVxdWVzdFdpdGhGdWxs
SGVhZGVycywgY2FjaGVkUmVzb3VyY2VMb2FkZXIsICp0aGlzKTsKKworICAgIHJldHVybiB2ZXJp
ZnlWYXJ5aW5nUmVxdWVzdEhlYWRlcnMobV92YXJ5aW5nSGVhZGVyVmFsdWVzLCByZXF1ZXN0V2l0
aEZ1bGxIZWFkZXJzLCBtX3Nlc3Npb25JRCk7Cit9CisKK3Vuc2lnbmVkIENhY2hlZFJlc291cmNl
OjpvdmVyaGVhZFNpemUoKSBjb25zdAoreworICAgIHN0YXRpYyBjb25zdCBpbnQga0F2ZXJhZ2VD
bGllbnRzSGFzaE1hcFNpemUgPSAzODQ7CisgICAgcmV0dXJuIHNpemVvZihDYWNoZWRSZXNvdXJj
ZSkgKyBtX3Jlc3BvbnNlLm1lbW9yeVVzYWdlKCkgKyBrQXZlcmFnZUNsaWVudHNIYXNoTWFwU2l6
ZSArIG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLnN0cmluZygpLmxlbmd0aCgpICogMjsKK30KKwor
Ym9vbCBDYWNoZWRSZXNvdXJjZTo6YXJlQWxsQ2xpZW50c1hNTEh0dHBSZXF1ZXN0cygpIGNvbnN0
Cit7CisgICAgaWYgKHR5cGUoKSAhPSBSYXdSZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgZm9yIChhdXRvJiBjbGllbnQgOiBtX2NsaWVudHMpIHsKKyAgICAgICAgaWYgKCFj
bGllbnQua2V5LT5pc1hNTEh0dHBSZXF1ZXN0KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENhY2hlZFJlc291cmNlOjpzZXRM
b2FkUHJpb3JpdHkoY29uc3QgT3B0aW9uYWw8UmVzb3VyY2VMb2FkUHJpb3JpdHk+JiBsb2FkUHJp
b3JpdHkpCit7CisgICAgaWYgKGxvYWRQcmlvcml0eSkKKyAgICAgICAgbV9sb2FkUHJpb3JpdHkg
PSBsb2FkUHJpb3JpdHkudmFsdWUoKTsKKyAgICBlbHNlCisgICAgICAgIG1fbG9hZFByaW9yaXR5
ID0gZGVmYXVsdFByaW9yaXR5Rm9yUmVzb3VyY2VUeXBlKHR5cGUoKSk7Cit9CisKK2lubGluZSBD
YWNoZWRSZXNvdXJjZTo6Q2FsbGJhY2s6OkNhbGxiYWNrKENhY2hlZFJlc291cmNlJiByZXNvdXJj
ZSwgQ2FjaGVkUmVzb3VyY2VDbGllbnQmIGNsaWVudCkKKyAgICA6IG1fcmVzb3VyY2UocmVzb3Vy
Y2UpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX3RpbWVyKCp0aGlzLCAmQ2FsbGJh
Y2s6OnRpbWVyRmlyZWQpCit7CisgICAgbV90aW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK2lu
bGluZSB2b2lkIENhY2hlZFJlc291cmNlOjpDYWxsYmFjazo6Y2FuY2VsKCkKK3sKKyAgICBpZiAo
bV90aW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3RpbWVyLnN0b3AoKTsKK30KKwordm9pZCBD
YWNoZWRSZXNvdXJjZTo6Q2FsbGJhY2s6OnRpbWVyRmlyZWQoKQoreworICAgIG1fcmVzb3VyY2Uu
ZGlkQWRkQ2xpZW50KCZtX2NsaWVudCk7Cit9CisKKyNpZiBVU0UoRk9VTkRBVElPTikgfHwgVVNF
KFNPVVApCisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OnRyeVJlcGxhY2VFbmNvZGVkRGF0YShTaGFy
ZWRCdWZmZXImIG5ld0J1ZmZlcikKK3sKKyAgICBpZiAoIW1fZGF0YSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIGlmICghbWF5VHJ5UmVwbGFjZUVuY29kZWREYXRhKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIFdlIGhhdmUgdG8gZG8gdGhlIG1lbWNtcCBiZWNhdXNlIHdlIGNhbid0
IHRlbGwgaWYgdGhlIHJlcGxhY2VtZW50IGZpbGUgYmFja2VkIGRhdGEgaXMgZm9yIHRoZQorICAg
IC8vIHNhbWUgcmVzb3VyY2Ugb3IgaWYgd2UgbWFkZSBhIHNlY29uZCByZXF1ZXN0IHdpdGggdGhl
IHNhbWUgVVJMIHdoaWNoIGdhdmUgdXMgYSBkaWZmZXJlbnQKKyAgICAvLyByZXNvdXJjZS4gV2Ug
aGF2ZSBzZWVuIHRoaXMgaGFwcGVuIGZvciBjYWNoZWQgUE9TVCByZXNvdXJjZXMuCisgICAgaWYg
KG1fZGF0YS0+c2l6ZSgpICE9IG5ld0J1ZmZlci5zaXplKCkgfHwgbWVtY21wKG1fZGF0YS0+ZGF0
YSgpLCBuZXdCdWZmZXIuZGF0YSgpLCBtX2RhdGEtPnNpemUoKSkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChtX2RhdGEtPnRyeVJlcGxhY2VDb250ZW50c1dpdGhQbGF0Zm9ybUJ1ZmZlcihu
ZXdCdWZmZXIpKQorICAgICAgICBkaWRSZXBsYWNlU2hhcmVkQnVmZmVyQ29udGVudHMoKTsKK30K
KworI2VuZGlmCisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9D
YWNoZWRSZXNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291
cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNTRiOTU3ZDFiYjNjNTc5ZDVmOTk3ZGM5ZDg5ZDM1YWI4YTU3MzNh
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRS
ZXNvdXJjZS5oCkBAIC0wLDAgKzEsNDAwIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMTk5OCBM
YXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQorICAgIENvcHlyaWdodCAoQykgMjAwMSBE
aXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2Ft
dWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCisgICAgQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIENhY2hlZFJlc291cmNlX2gKKyNkZWZpbmUg
Q2FjaGVkUmVzb3VyY2VfaAorCisjaW5jbHVkZSAiQ2FjaGVQb2xpY3kuaCIKKyNpbmNsdWRlICJD
YWNoZVZhbGlkYXRpb24uaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VFcnJvci5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZFByaW9yaXR5LmgiCisj
aW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJPcHRpb25zLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1
ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIlNlc3Npb25J
RC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoQ291bnRlZFNldC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL1R5cGVDYXN0cy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNZW1vcnlD
YWNoZTsKK2NsYXNzIENhY2hlZFJlc291cmNlQ2xpZW50OworY2xhc3MgQ2FjaGVkUmVzb3VyY2VI
YW5kbGVCYXNlOworY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CitjbGFzcyBJbnNwZWN0b3JS
ZXNvdXJjZTsKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOworY2xhc3MgU2hhcmVkQnVmZmVyOworY2xh
c3MgU3VicmVzb3VyY2VMb2FkZXI7CitjbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyOworCisvLyBB
IHJlc291cmNlIHRoYXQgaXMgaGVsZCBpbiB0aGUgY2FjaGUuIENsYXNzZXMgd2hvIHdhbnQgdG8g
dXNlIHRoaXMgb2JqZWN0IHNob3VsZCBkZXJpdmUKKy8vIGZyb20gQ2FjaGVkUmVzb3VyY2VDbGll
bnQsIHRvIGdldCB0aGUgZnVuY3Rpb24gY2FsbHMgaW4gY2FzZSB0aGUgcmVxdWVzdGVkIGRhdGEg
aGFzIGFycml2ZWQuCisvLyBUaGlzIGNsYXNzIGFsc28gZG9lcyB0aGUgYWN0dWFsIGNvbW11bmlj
YXRpb24gd2l0aCB0aGUgbG9hZGVyIHRvIG9idGFpbiB0aGUgcmVzb3VyY2UgZnJvbSB0aGUgbmV0
d29yay4KK2NsYXNzIENhY2hlZFJlc291cmNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
YWNoZWRSZXNvdXJjZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIGZyaWVuZCBjbGFz
cyBNZW1vcnlDYWNoZTsKKyAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2U7CisgICAg
CitwdWJsaWM6CisgICAgZW51bSBUeXBlIHsKKyAgICAgICAgTWFpblJlc291cmNlLAorICAgICAg
ICBJbWFnZVJlc291cmNlLAorICAgICAgICBDU1NTdHlsZVNoZWV0LAorICAgICAgICBTY3JpcHQs
CisgICAgICAgIEZvbnRSZXNvdXJjZSwKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgICAgICBT
VkdGb250UmVzb3VyY2UsCisjZW5kaWYKKyAgICAgICAgTWVkaWFSZXNvdXJjZSwKKyAgICAgICAg
UmF3UmVzb3VyY2UsCisgICAgICAgIFNWR0RvY3VtZW50UmVzb3VyY2UKKyNpZiBFTkFCTEUoWFNM
VCkKKyAgICAgICAgLCBYU0xTdHlsZVNoZWV0CisjZW5kaWYKKyNpZiBFTkFCTEUoTElOS19QUkVG
RVRDSCkKKyAgICAgICAgLCBMaW5rUHJlZmV0Y2gKKyAgICAgICAgLCBMaW5rU3VicmVzb3VyY2UK
KyNlbmRpZgorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICAgICAgLCBUZXh0VHJhY2tSZXNv
dXJjZQorI2VuZGlmCisgICAgfTsKKworICAgIGVudW0gU3RhdHVzIHsKKyAgICAgICAgVW5rbm93
biwgICAgICAvLyBsZXQgY2FjaGUgZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCBpdAorICAgICAgICBQ
ZW5kaW5nLCAgICAgIC8vIG9ubHkgcGFydGlhbGx5IGxvYWRlZAorICAgICAgICBDYWNoZWQsICAg
ICAgIC8vIHJlZ3VsYXIgY2FzZQorICAgICAgICBMb2FkRXJyb3IsCisgICAgICAgIERlY29kZUVy
cm9yCisgICAgfTsKKworICAgIENhY2hlZFJlc291cmNlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IFR5cGUsIFNlc3Npb25JRCk7CisgICAgdmlydHVhbCB+Q2FjaGVkUmVzb3VyY2UoKTsKKworICAg
IHZpcnR1YWwgdm9pZCBsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyJiwgY29uc3QgUmVzb3VyY2VM
b2FkZXJPcHRpb25zJik7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RW5jb2RpbmcoY29uc3QgU3Ry
aW5nJikgeyB9CisgICAgdmlydHVhbCBTdHJpbmcgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBT
dHJpbmcoKTsgfQorICAgIHZpcnR1YWwgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogdGV4dFJl
c291cmNlRGVjb2RlcigpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgYWRkRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXImKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRGF0
YShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZpcnR1YWwgdm9pZCBm
aW5pc2hMb2FkaW5nKFNoYXJlZEJ1ZmZlciopOworICAgIHZpcnR1YWwgdm9pZCBlcnJvcihDYWNo
ZWRSZXNvdXJjZTo6U3RhdHVzKTsKKworICAgIHZvaWQgc2V0UmVzb3VyY2VFcnJvcihjb25zdCBS
ZXNvdXJjZUVycm9yJiBlcnJvcikgeyBtX2Vycm9yID0gZXJyb3I7IH0KKyAgICBjb25zdCBSZXNv
dXJjZUVycm9yJiByZXNvdXJjZUVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvcjsgfQorCisg
ICAgdmlydHVhbCBib29sIHNob3VsZElnbm9yZUhUVFBTdGF0dXNDb2RlRXJyb3JzKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKworICAgIFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0
KCkgeyByZXR1cm4gbV9yZXNvdXJjZVJlcXVlc3Q7IH0KKyAgICBjb25zdCBVUkwmIHVybCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpO30KKyNpZiBFTkFCTEUoQ0FDSEVf
UEFSVElUSU9OSU5HKQorICAgIGNvbnN0IFN0cmluZyYgY2FjaGVQYXJ0aXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3Jlc291cmNlUmVxdWVzdC5jYWNoZVBhcnRpdGlvbigpOyB9CisjZW5kaWYKKyAg
ICBTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KKyAg
ICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihtX3R5cGUpOyB9
CisgICAgCisgICAgUmVzb3VyY2VMb2FkUHJpb3JpdHkgbG9hZFByaW9yaXR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2FkUHJpb3JpdHk7IH0KKyAgICB2b2lkIHNldExvYWRQcmlvcml0eShjb25zdCBP
cHRpb25hbDxSZXNvdXJjZUxvYWRQcmlvcml0eT4mKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgYWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kik7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCByZW1vdmVDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKTsKKyAgICBib29sIGhhc0Ns
aWVudHMoKSBjb25zdCB7IHJldHVybiAhbV9jbGllbnRzLmlzRW1wdHkoKSB8fCAhbV9jbGllbnRz
QXdhaXRpbmdDYWxsYmFjay5pc0VtcHR5KCk7IH0KKyAgICBib29sIGhhc0NsaWVudChDYWNoZWRS
ZXNvdXJjZUNsaWVudCogY2xpZW50KSB7IHJldHVybiBtX2NsaWVudHMuY29udGFpbnMoY2xpZW50
KSB8fCBtX2NsaWVudHNBd2FpdGluZ0NhbGxiYWNrLmNvbnRhaW5zKGNsaWVudCk7IH0KKyAgICBi
b29sIGRlbGV0ZUlmUG9zc2libGUoKTsKKworICAgIGVudW0gUHJlbG9hZFJlc3VsdCB7CisgICAg
ICAgIFByZWxvYWROb3RSZWZlcmVuY2VkLAorICAgICAgICBQcmVsb2FkUmVmZXJlbmNlZCwKKyAg
ICAgICAgUHJlbG9hZFJlZmVyZW5jZWRXaGlsZUxvYWRpbmcsCisgICAgICAgIFByZWxvYWRSZWZl
cmVuY2VkV2hpbGVDb21wbGV0ZQorICAgIH07CisgICAgUHJlbG9hZFJlc3VsdCBwcmVsb2FkUmVz
dWx0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UHJlbG9hZFJlc3VsdD4obV9wcmVsb2Fk
UmVzdWx0KTsgfQorCisgICAgdmlydHVhbCB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJj
ZUNsaWVudCopOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZW1vdmVDbGllbnQoQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWxsQ2xpZW50c1JlbW92ZWQoKSB7IH0K
KyAgICB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVlZGVkKCk7CisKKyAgICB1bnNpZ25lZCBj
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50cy5zaXplKCk7IH0KKworICAgIFN0YXR1cyBz
dGF0dXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxTdGF0dXM+KG1fc3RhdHVzKTsgfQor
ICAgIHZvaWQgc2V0U3RhdHVzKFN0YXR1cyBzdGF0dXMpIHsgbV9zdGF0dXMgPSBzdGF0dXM7IH0K
KworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBlbmNvZGVkU2l6ZSgpICsgZGVj
b2RlZFNpemUoKSArIG92ZXJoZWFkU2l6ZSgpOyB9CisgICAgdW5zaWduZWQgZW5jb2RlZFNpemUo
KSBjb25zdCB7IHJldHVybiBtX2VuY29kZWRTaXplOyB9CisgICAgdW5zaWduZWQgZGVjb2RlZFNp
emUoKSBjb25zdCB7IHJldHVybiBtX2RlY29kZWRTaXplOyB9CisgICAgdW5zaWduZWQgb3Zlcmhl
YWRTaXplKCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBpc0xvYWRlZCgpIGNvbnN0IHsgcmV0dXJu
ICFtX2xvYWRpbmc7IH0gLy8gRklYTUUuIE1ldGhvZCBuYW1lIGlzIGluYWNjdXJhdGUuIExvYWRp
bmcgbWlnaHQgbm90IGhhdmUgc3RhcnRlZCB5ZXQuCisKKyAgICBib29sIGlzTG9hZGluZygpIGNv
bnN0IHsgcmV0dXJuIG1fbG9hZGluZzsgfQorICAgIHZvaWQgc2V0TG9hZGluZyhib29sIGIpIHsg
bV9sb2FkaW5nID0gYjsgfQorICAgIHZpcnR1YWwgYm9vbCBzdGlsbE5lZWRzTG9hZCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyKCkgeyBy
ZXR1cm4gbV9sb2FkZXIuZ2V0KCk7IH0KKworICAgIGJvb2wgYXJlQWxsQ2xpZW50c1hNTEh0dHBS
ZXF1ZXN0cygpIGNvbnN0OworCisgICAgYm9vbCBpc0ltYWdlKCkgY29uc3QgeyByZXR1cm4gdHlw
ZSgpID09IEltYWdlUmVzb3VyY2U7IH0KKyAgICAvLyBGSVhNRTogQ2FjaGVkUmF3UmVzb3VyY2Ug
Y291bGQgYmUgYSBtYWluIHJlc291cmNlLCBhbiBhdWRpby92aWRlbyByZXNvdXJjZSwgb3IgYSBy
YXcgWEhSL2ljb24gcmVzb3VyY2UuCisgICAgYm9vbCBpc01haW5Pck1lZGlhT3JSYXdSZXNvdXJj
ZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBNYWluUmVzb3VyY2UgfHwgdHlwZSgpID09IE1l
ZGlhUmVzb3VyY2UgfHwgdHlwZSgpID09IFJhd1Jlc291cmNlOyB9CisgICAgYm9vbCBpZ25vcmVG
b3JSZXF1ZXN0Q291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmVzb3VyY2VS
ZXF1ZXN0Lmlnbm9yZUZvclJlcXVlc3RDb3VudCgpCisgICAgICAgICAgICB8fCB0eXBlKCkgPT0g
TWFpblJlc291cmNlCisjaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCisgICAgICAgICAgICB8fCB0
eXBlKCkgPT0gTGlua1ByZWZldGNoCisgICAgICAgICAgICB8fCB0eXBlKCkgPT0gTGlua1N1YnJl
c291cmNlCisjZW5kaWYKKyAgICAgICAgICAgIHx8IHR5cGUoKSA9PSBSYXdSZXNvdXJjZTsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBhY2Nlc3NDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZXNz
Q291bnQ7IH0KKyAgICB2b2lkIGluY3JlYXNlQWNjZXNzQ291bnQoKSB7IG1fYWNjZXNzQ291bnQr
KzsgfQorCisgICAgLy8gQ29tcHV0ZXMgdGhlIHN0YXR1cyBvZiBhbiBvYmplY3QgYWZ0ZXIgbG9h
ZGluZy4gIAorICAgIC8vIFVwZGF0ZXMgdGhlIGV4cGlyZSBkYXRlIG9uIHRoZSBjYWNoZSBlbnRy
eSBmaWxlCisgICAgdm9pZCBmaW5pc2goKTsKKworICAgIGJvb2wgcGFzc2VzQWNjZXNzQ29udHJv
bENoZWNrKFNlY3VyaXR5T3JpZ2luJik7CisgICAgYm9vbCBwYXNzZXNTYW1lT3JpZ2luUG9saWN5
Q2hlY2soU2VjdXJpdHlPcmlnaW4mKTsKKworICAgIC8vIENhbGxlZCBieSB0aGUgY2FjaGUgaWYg
dGhlIG9iamVjdCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGNhY2hlCisgICAgLy8gd2hpbGUg
c3RpbGwgYmVpbmcgcmVmZXJlbmNlZC4gVGhpcyBtZWFucyB0aGUgb2JqZWN0IHNob3VsZCBkZWxl
dGUgaXRzZWxmCisgICAgLy8gaWYgdGhlIG51bWJlciBvZiBjbGllbnRzIG9ic2VydmluZyBpdCBl
dmVyIGRyb3BzIHRvIDAuCisgICAgLy8gVGhlIHJlc291cmNlIGNhbiBiZSBicm91Z2h0IGJhY2sg
dG8gY2FjaGUgYWZ0ZXIgc3VjY2Vzc2Z1bCByZXZhbGlkYXRpb24uCisgICAgdm9pZCBzZXRJbkNh
Y2hlKGJvb2wgaW5DYWNoZSkgeyBtX2luQ2FjaGUgPSBpbkNhY2hlOyB9CisgICAgYm9vbCBpbkNh
Y2hlKCkgY29uc3QgeyByZXR1cm4gbV9pbkNhY2hlOyB9CisgICAgCisgICAgdm9pZCBjbGVhckxv
YWRlcigpOworCisgICAgU2hhcmVkQnVmZmVyKiByZXNvdXJjZUJ1ZmZlcigpIGNvbnN0IHsgcmV0
dXJuIG1fZGF0YS5nZXQoKTsgfQorCisgICAgdmlydHVhbCB2b2lkIHJlZGlyZWN0UmVjZWl2ZWQo
UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZpcnR1YWwg
dm9pZCByZXNwb25zZVJlY2VpdmVkKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkQ2FjaGVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIHZvaWQgc2V0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpOworICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKCkgY29uc3QgeyByZXR1
cm4gbV9yZXNwb25zZTsgfQorICAgIC8vIFRoaXMgaXMgdGhlIHNhbWUgYXMgcmVzcG9uc2UoKSBl
eGNlcHQgYWZ0ZXIgSFRUUCByZWRpcmVjdCB0byBkYXRhOiBVUkwuCisgICAgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2VGb3JTYW1lT3JpZ2luUG9saWN5Q2hlY2tzKCkgY29uc3Q7CisK
KyAgICB2b2lkIHNldENyb3NzT3JpZ2luKCk7CisgICAgYm9vbCBpc0Nyb3NzT3JpZ2luKCkgY29u
c3Q7CisgICAgYm9vbCBpc0NsZWFuKCkgY29uc3Q7CisgICAgUmVzb3VyY2VSZXNwb25zZTo6VGFp
bnRpbmcgcmVzcG9uc2VUYWludGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2VUYWludGlu
ZzsgfQorCisgICAgdm9pZCBsb2FkRnJvbShjb25zdCBDYWNoZWRSZXNvdXJjZSYsIGNvbnN0IFJl
c291cmNlTG9hZGVyT3B0aW9ucyYsIENhY2hlZFJlc291cmNlTG9hZGVyJik7CisKKyAgICBTZWN1
cml0eU9yaWdpbiogb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW4uZ2V0KCk7IH0KKwor
ICAgIGJvb2wgY2FuRGVsZXRlKCkgY29uc3QgeyByZXR1cm4gIWhhc0NsaWVudHMoKSAmJiAhbV9s
b2FkZXIgJiYgIW1fcHJlbG9hZENvdW50ICYmICFtX2hhbmRsZUNvdW50ICYmICFtX3Jlc291cmNl
VG9SZXZhbGlkYXRlICYmICFtX3Byb3h5UmVzb3VyY2U7IH0KKyAgICBib29sIGhhc09uZUhhbmRs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlQ291bnQgPT0gMTsgfQorCisgICAgYm9vbCBpc0V4
cGlyZWQoKSBjb25zdDsKKworICAgIC8vIExpc3Qgb2YgYWNjZXB0YWJsZSBNSU1FIHR5cGVzIHNl
cGFyYXRlZCBieSAiLCIuCisgICAgLy8gQSBNSU1FIHR5cGUgbWF5IGNvbnRhaW4gYSB3aWxkY2Fy
ZCwgZS5nLiAidGV4dC8qIi4KKyAgICBTdHJpbmcgYWNjZXB0KCkgY29uc3QgeyByZXR1cm4gbV9h
Y2NlcHQ7IH0KKyAgICB2b2lkIHNldEFjY2VwdChjb25zdCBTdHJpbmcmIGFjY2VwdCkgeyBtX2Fj
Y2VwdCA9IGFjY2VwdDsgfQorCisgICAgdm9pZCBjYW5jZWxMb2FkKCk7CisgICAgYm9vbCB3YXND
YW5jZWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3IuaXNDYW5jZWxsYXRpb24oKTsgfQorICAg
IGJvb2wgZXJyb3JPY2N1cnJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzID09IExvYWRFcnJv
ciB8fCBtX3N0YXR1cyA9PSBEZWNvZGVFcnJvcjsgfQorICAgIGJvb2wgbG9hZEZhaWxlZE9yQ2Fu
Y2VsZWQoKSBjb25zdCB7IHJldHVybiAhbV9lcnJvci5pc051bGwoKTsgfQorCisgICAgYm9vbCBz
aG91bGRTZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9vcHRpb25z
LnNlbmRMb2FkQ2FsbGJhY2tzID09IFNlbmRDYWxsYmFja3M7IH0KKyAgICBEYXRhQnVmZmVyaW5n
UG9saWN5IGRhdGFCdWZmZXJpbmdQb2xpY3koKSBjb25zdCB7IHJldHVybiBtX29wdGlvbnMuZGF0
YUJ1ZmZlcmluZ1BvbGljeTsgfQorCisgICAgYm9vbCBhbGxvd3NDYWNoaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9vcHRpb25zLmNhY2hpbmdQb2xpY3kgPT0gQ2FjaGluZ1BvbGljeTo6QWxsb3dDYWNo
aW5nOyB9CisgICAgY29uc3QgRmV0Y2hPcHRpb25zJiBvcHRpb25zKCkgY29uc3QgeyByZXR1cm4g
bV9vcHRpb25zOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKCkgeyB9
CisKKyAgICB2b2lkIHNldE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKENhY2hlZFJlc291cmNl
TG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlcikgeyBtX293bmluZ0NhY2hlZFJlc291cmNlTG9h
ZGVyID0gY2FjaGVkUmVzb3VyY2VMb2FkZXI7IH0KKyAgICAKKyAgICBib29sIGlzUHJlbG9hZGVk
KCkgY29uc3QgeyByZXR1cm4gbV9wcmVsb2FkQ291bnQ7IH0KKyAgICB2b2lkIGluY3JlYXNlUHJl
bG9hZENvdW50KCkgeyArK21fcHJlbG9hZENvdW50OyB9CisgICAgdm9pZCBkZWNyZWFzZVByZWxv
YWRDb3VudCgpIHsgQVNTRVJUKG1fcHJlbG9hZENvdW50KTsgLS1tX3ByZWxvYWRDb3VudDsgfQor
ICAgIAorICAgIHZvaWQgcmVnaXN0ZXJIYW5kbGUoQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKiBo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVucmVnaXN0ZXJIYW5kbGUoQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGVCYXNlKiBoKTsKKyAgICAKKyAgICBib29sIGNhblVzZUNhY2hlVmFsaWRhdG9yKCkg
Y29uc3Q7CisKKyAgICBlbnVtIGNsYXNzIFJldmFsaWRhdGlvbkRlY2lzaW9uIHsgTm8sIFllc0R1
ZVRvQ2FjaGVQb2xpY3ksIFllc0R1ZVRvTm9TdG9yZSwgWWVzRHVlVG9Ob0NhY2hlLCBZZXNEdWVU
b0V4cGlyZWQgfTsKKyAgICB2aXJ0dWFsIFJldmFsaWRhdGlvbkRlY2lzaW9uIG1ha2VSZXZhbGlk
YXRpb25EZWNpc2lvbihDYWNoZVBvbGljeSkgY29uc3Q7CisgICAgYm9vbCByZWRpcmVjdENoYWlu
QWxsb3dzUmV1c2UoUmV1c2VFeHBpcmVkUmVkaXJlY3Rpb25Pck5vdCkgY29uc3Q7CisKKyAgICBi
b29sIHZhcnlIZWFkZXJWYWx1ZXNNYXRjaChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBD
YWNoZWRSZXNvdXJjZUxvYWRlciYpOworCisgICAgYm9vbCBpc0NhY2hlVmFsaWRhdG9yKCkgY29u
c3QgeyByZXR1cm4gbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZTsgfQorICAgIENhY2hlZFJlc291cmNl
KiByZXNvdXJjZVRvUmV2YWxpZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VUb1JldmFs
aWRhdGU7IH0KKyAgICAKKyAgICAvLyBIVFRQIHJldmFsaWRhdGlvbiBzdXBwb3J0IG1ldGhvZHMg
Zm9yIENhY2hlZFJlc291cmNlTG9hZGVyLgorICAgIHZvaWQgc2V0UmVzb3VyY2VUb1JldmFsaWRh
dGUoQ2FjaGVkUmVzb3VyY2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3dpdGNoQ2xpZW50c1RvUmV2
YWxpZGF0ZWRSZXNvdXJjZSgpOworICAgIHZvaWQgY2xlYXJSZXNvdXJjZVRvUmV2YWxpZGF0ZSgp
OworICAgIHZvaWQgdXBkYXRlUmVzcG9uc2VBZnRlclJldmFsaWRhdGlvbihjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiB2YWxpZGF0aW5nUmVzcG9uc2UpOworICAgIGJvb2wgdmFsaWRhdGlvbkluUHJv
Z3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX3Byb3h5UmVzb3VyY2U7IH0KKyAgICBib29sIHZhbGlk
YXRpb25Db21wbGV0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9wcm94eVJlc291cmNlICYmIG1fcHJv
eHlSZXNvdXJjZS0+bV9zd2l0Y2hpbmdDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNlOyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIC8qIGJ5dGVz
U2VudCAqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qIHRvdGFsQnl0ZXNUb0JlU2VudCAqLykgeyB9
CisKKyAgICB2b2lkIHNldExvYWRGaW5pc2hUaW1lKGRvdWJsZSBmaW5pc2hUaW1lKSB7IG1fbG9h
ZEZpbmlzaFRpbWUgPSBmaW5pc2hUaW1lOyB9CisgICAgZG91YmxlIGxvYWRGaW5pc2hUaW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2FkRmluaXNoVGltZTsgfQorCisjaWYgVVNFKEZPVU5EQVRJT04p
IHx8IFVTRShTT1VQKQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdHJ5UmVwbGFjZUVuY29kZWRE
YXRhKFNoYXJlZEJ1ZmZlciYpOworI2VuZGlmCisKKyNpZiBVU0UoU09VUCkKKyAgICB2aXJ0dWFs
IGNoYXIqIGdldE9yQ3JlYXRlUmVhZEJ1ZmZlcihzaXplX3QgLyogcmVxdWVzdGVkU2l6ZSAqLywg
c2l6ZV90JiAvKiBhY3R1YWxTaXplICovKSB7IHJldHVybiBudWxscHRyOyB9CisjZW5kaWYKKwor
ICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllckZvckxvYWRXaXRob3V0UmVzb3VyY2VMb2FkZXIo
KSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXJGb3JMb2FkV2l0aG91dFJlc291cmNlTG9hZGVy
OyB9CisgICAgc3RhdGljIFJlc291cmNlTG9hZFByaW9yaXR5IGRlZmF1bHRQcmlvcml0eUZvclJl
c291cmNlVHlwZShUeXBlKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgc2V0RW5jb2RlZFNpemUo
dW5zaWduZWQpOworICAgIHZvaWQgc2V0RGVjb2RlZFNpemUodW5zaWduZWQpOworICAgIHZvaWQg
ZGlkQWNjZXNzRGVjb2RlZERhdGEoZG91YmxlIHRpbWVTdGFtcCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVwbGFjZVNoYXJlZEJ1ZmZlckNvbnRlbnRzKCkgeyB9CisKKyAgICAvLyBGSVhNRTog
TWFrZSB0aGUgcmVzdCBvZiB0aGVzZSBkYXRhIG1lbWJlcnMgcHJpdmF0ZSBhbmQgdXNlIGZ1bmN0
aW9ucyBpbiBkZXJpdmVkIGNsYXNzZXMgaW5zdGVhZC4KKyAgICBIYXNoQ291bnRlZFNldDxDYWNo
ZWRSZXNvdXJjZUNsaWVudCo+IG1fY2xpZW50czsKKyAgICBSZXNvdXJjZVJlcXVlc3QgbV9yZXNv
dXJjZVJlcXVlc3Q7CisgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBtX2xvYWRlcjsKKyAg
ICBSZXNvdXJjZUxvYWRlck9wdGlvbnMgbV9vcHRpb25zOworICAgIFJlc291cmNlUmVzcG9uc2Ug
bV9yZXNwb25zZTsKKyAgICBSZXNvdXJjZVJlc3BvbnNlOjpUYWludGluZyBtX3Jlc3BvbnNlVGFp
bnRpbmcgeyBSZXNvdXJjZVJlc3BvbnNlOjpUYWludGluZzo6QmFzaWMgfTsKKyAgICBSZXNvdXJj
ZVJlc3BvbnNlIG1fcmVkaXJlY3RSZXNwb25zZUZvclNhbWVPcmlnaW5Qb2xpY3lDaGVja3M7Cisg
ICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOworICAgIERlZmVycmFibGVPbmVTaG90VGlt
ZXIgbV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXI7CisKK3ByaXZhdGU6CisgICAgY2xhc3MgQ2Fs
bGJhY2s7CisKKyAgICBib29sIGFkZENsaWVudFRvU2V0KENhY2hlZFJlc291cmNlQ2xpZW50Kik7
CisKKyAgICB2b2lkIGRlY29kZWREYXRhRGVsZXRpb25UaW1lckZpcmVkKCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgY2hlY2tOb3RpZnkoKTsKKyAgICB2aXJ0dWFsIGJvb2wgbWF5VHJ5UmVwbGFjZUVu
Y29kZWREYXRhKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Qm9keURhdGFGcm9tKGNvbnN0IENhY2hlZFJlc291cmNlJikgeyB9CisKKyAgICBzdGQ6OmNocm9u
bzo6bWljcm9zZWNvbmRzIGZyZXNobmVzc0xpZmV0aW1lKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
KSBjb25zdDsKKworICAgIHZvaWQgYWRkQWRkaXRpb25hbFJlcXVlc3RIZWFkZXJzKENhY2hlZFJl
c291cmNlTG9hZGVyJik7CisgICAgdm9pZCBjb21wdXRlT3JpZ2luKENhY2hlZFJlc291cmNlTG9h
ZGVyJik7CisgICAgdm9pZCBmYWlsQmVmb3JlU3RhcnRpbmcoKTsKKworICAgIEhhc2hNYXA8Q2Fj
aGVkUmVzb3VyY2VDbGllbnQqLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbGJhY2s+PiBtX2NsaWVudHNB
d2FpdGluZ0NhbGxiYWNrOworICAgIFNlc3Npb25JRCBtX3Nlc3Npb25JRDsKKyAgICBTdHJpbmcg
bV9hY2NlcHQ7CisgICAgUmVzb3VyY2VMb2FkUHJpb3JpdHkgbV9sb2FkUHJpb3JpdHk7CisgICAg
c3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtX3Jlc3BvbnNlVGltZXN0YW1w
OworCisgICAgU3RyaW5nIG1fZnJhZ21lbnRJZGVudGlmaWVyRm9yUmVxdWVzdDsKKworICAgIFJl
c291cmNlRXJyb3IgbV9lcnJvcjsKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1fb3JpZ2lu
OworCisgICAgZG91YmxlIG1fbGFzdERlY29kZWRBY2Nlc3NUaW1lOyAvLyBVc2VkIGFzIGEgInRo
cmFzaCBndWFyZCIgaW4gdGhlIGNhY2hlCisgICAgZG91YmxlIG1fbG9hZEZpbmlzaFRpbWU7CisK
KyAgICB1bnNpZ25lZCBtX2VuY29kZWRTaXplOworICAgIHVuc2lnbmVkIG1fZGVjb2RlZFNpemU7
CisgICAgdW5zaWduZWQgbV9hY2Nlc3NDb3VudDsKKyAgICB1bnNpZ25lZCBtX2hhbmRsZUNvdW50
OworICAgIHVuc2lnbmVkIG1fcHJlbG9hZENvdW50OworCisgICAgdW5zaWduZWQgbV9wcmVsb2Fk
UmVzdWx0IDogMjsgLy8gUHJlbG9hZFJlc3VsdAorCisgICAgYm9vbCBtX3JlcXVlc3RlZEZyb21O
ZXR3b3JraW5nTGF5ZXIgOiAxOworCisgICAgYm9vbCBtX2luQ2FjaGUgOiAxOworICAgIGJvb2wg
bV9sb2FkaW5nIDogMTsKKworICAgIGJvb2wgbV9zd2l0Y2hpbmdDbGllbnRzVG9SZXZhbGlkYXRl
ZFJlc291cmNlIDogMTsKKworICAgIHVuc2lnbmVkIG1fdHlwZSA6IDQ7IC8vIFR5cGUKKyAgICB1
bnNpZ25lZCBtX3N0YXR1cyA6IDM7IC8vIFN0YXR1cworCisjaWZuZGVmIE5ERUJVRworICAgIGJv
b2wgbV9kZWxldGVkOworICAgIHVuc2lnbmVkIG1fbHJ1SW5kZXg7CisjZW5kaWYKKworICAgIENh
Y2hlZFJlc291cmNlTG9hZGVyKiBtX293bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyOyAvLyBvbmx5
IG5vbi1udWxsIGZvciByZXNvdXJjZXMgdGhhdCBhcmUgbm90IGluIHRoZSBjYWNoZQorICAgIAor
ICAgIC8vIElmIHRoaXMgZmllbGQgaXMgbm9uLW51bGwgd2UgYXJlIHVzaW5nIHRoZSByZXNvdXJj
ZSBhcyBhIHByb3h5IGZvciBjaGVja2luZyB3aGV0aGVyIGFuIGV4aXN0aW5nIHJlc291cmNlIGlz
IHN0aWxsIHVwIHRvIGRhdGUKKyAgICAvLyB1c2luZyBIVFRQIElmLU1vZGlmaWVkLVNpbmNlL0lm
LU5vbmUtTWF0Y2ggaGVhZGVycy4gSWYgdGhlIHJlc3BvbnNlIGlzIDMwNCBhbGwgY2xpZW50cyBv
ZiB0aGlzIHJlc291cmNlIGFyZSBtb3ZlZAorICAgIC8vIHRvIHRvIGJlIGNsaWVudHMgb2YgbV9y
ZXNvdXJjZVRvUmV2YWxpZGF0ZSBhbmQgdGhlIHJlc291cmNlIGlzIGRlbGV0ZWQuIElmIG5vdCwg
dGhlIGZpZWxkIGlzIHplcm9lZCBhbmQgdGhpcworICAgIC8vIHJlc291cmNlcyBiZWNvbWVzIG5v
cm1hbCByZXNvdXJjZSBsb2FkLgorICAgIENhY2hlZFJlc291cmNlKiBtX3Jlc291cmNlVG9SZXZh
bGlkYXRlOworCisgICAgLy8gSWYgdGhpcyBmaWVsZCBpcyBub24tbnVsbCwgdGhlIHJlc291cmNl
IGhhcyBhIHByb3h5IGZvciBjaGVja2luZyB3aGV0aGVyIGl0IGlzIHN0aWxsIHVwIHRvIGRhdGUg
KHNlZSBtX3Jlc291cmNlVG9SZXZhbGlkYXRlKS4KKyAgICBDYWNoZWRSZXNvdXJjZSogbV9wcm94
eVJlc291cmNlOworCisgICAgLy8gVGhlc2UgaGFuZGxlcyB3aWxsIG5lZWQgdG8gYmUgdXBkYXRl
ZCB0byBwb2ludCB0byB0aGUgbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSBpbiBjYXNlIHdlIGdldCAz
MDQgcmVzcG9uc2UuCisgICAgSGFzaFNldDxDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UqPiBtX2hh
bmRsZXNUb1JldmFsaWRhdGU7CisKKyAgICBSZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMgbV9yZWRp
cmVjdENoYWluQ2FjaGVTdGF0dXM7CisKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3Ry
aW5nPj4gbV92YXJ5aW5nSGVhZGVyVmFsdWVzOworCisgICAgdW5zaWduZWQgbG9uZyBtX2lkZW50
aWZpZXJGb3JMb2FkV2l0aG91dFJlc291cmNlTG9hZGVyIHsgMCB9OworfTsKKworY2xhc3MgQ2Fj
aGVkUmVzb3VyY2U6OkNhbGxiYWNrIHsKKyNpZiAhQ09NUElMRVIoTVNWQykKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKKyNlbmRpZgorcHVibGljOgorICAgIENhbGxiYWNrKENhY2hlZFJl
c291cmNlJiwgQ2FjaGVkUmVzb3VyY2VDbGllbnQmKTsKKworICAgIHZvaWQgY2FuY2VsKCk7CisK
K3ByaXZhdGU6CisgICAgdm9pZCB0aW1lckZpcmVkKCk7CisKKyAgICBDYWNoZWRSZXNvdXJjZSYg
bV9yZXNvdXJjZTsKKyAgICBDYWNoZWRSZXNvdXJjZUNsaWVudCYgbV9jbGllbnQ7CisgICAgVGlt
ZXIgbV90aW1lcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2RlZmluZSBTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0NBQ0hFRF9SRVNPVVJDRShUb0NsYXNzTmFtZSwgQ2FjaGVkUmVz
b3VyY2VUeXBlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlRvQ2xh
c3NOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkNhY2hlZFJl
c291cmNlJiByZXNvdXJjZSkgeyByZXR1cm4gcmVzb3VyY2UudHlwZSgpID09IFdlYkNvcmU6OkNh
Y2hlZFJlc291cmNlVHlwZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNl
bmRpZiAvLyBDYWNoZWRSZXNvdXJjZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9m
ZXRjaC9DYWNoZWRSZXNvdXJjZUNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiNDU0M2Q1YTU5NzllY2M0
MmY2ZDI2NGI0NDJlNzQ5MzEzYTVjOWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaApAQCAtMCwwICsxLDU3IEBACisv
KgorICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRl
KQorICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4K
KyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIw
MTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgIFRoaXMgY2xhc3Mg
cHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5
bGUgc2hlZXRzIGFuZCBodG1sCisgICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1v
cnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCisqLworCisjaWZuZGVmIENhY2hlZFJlc291cmNl
Q2xpZW50X2gKKyNkZWZpbmUgQ2FjaGVkUmVzb3VyY2VDbGllbnRfaAorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIENhY2hlZFJlc291cmNlOworCitjbGFzcyBDYWNoZWRSZXNvdXJjZUNs
aWVudCB7CitwdWJsaWM6CisgICAgZW51bSBDYWNoZWRSZXNvdXJjZUNsaWVudFR5cGUgeworICAg
ICAgICBCYXNlUmVzb3VyY2VUeXBlLAorICAgICAgICBJbWFnZVR5cGUsCisgICAgICAgIEZvbnRU
eXBlLAorICAgICAgICBTdHlsZVNoZWV0VHlwZSwKKyAgICAgICAgU1ZHRG9jdW1lbnRUeXBlLAor
ICAgICAgICBSYXdSZXNvdXJjZVR5cGUKKyAgICB9OworCisgICAgdmlydHVhbCB+Q2FjaGVkUmVz
b3VyY2VDbGllbnQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVk
UmVzb3VyY2UqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVwcmVjYXRlZERpZFJlY2VpdmVDYWNo
ZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSopIHsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1hNTEh0
dHBSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHN0YXRpYyBDYWNoZWRS
ZXNvdXJjZUNsaWVudFR5cGUgZXhwZWN0ZWRUeXBlKCkgeyByZXR1cm4gQmFzZVJlc291cmNlVHlw
ZTsgfQorICAgIHZpcnR1YWwgQ2FjaGVkUmVzb3VyY2VDbGllbnRUeXBlIHJlc291cmNlQ2xpZW50
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIGV4cGVjdGVkVHlwZSgpOyB9CisKK3Byb3RlY3RlZDoKKyAg
ICBDYWNoZWRSZXNvdXJjZUNsaWVudCgpIHsgfQorfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtl
ci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fs
a2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzUxZWY4NjEwMTM2ZGIyZDM3NDQwNTlmMDRkZGQ3M2Q5NTc3NjZi
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRS
ZXNvdXJjZUNsaWVudFdhbGtlci5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCisgICAgQ29weXJpZ2h0
IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICAgIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
CisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxv
YWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKKyAgICBwYWdlcyBmcm9tIHRoZSB3
ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KKyovCisKKyNpZm5k
ZWYgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXJfaAorI2RlZmluZSBDYWNoZWRSZXNvdXJjZUNs
aWVudFdhbGtlcl9oCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisvLyBDYWxsIHRoaXMgIndhbGtlciIgaW5zdGVhZCBvZiBpdGVy
YXRvciBzbyBwZW9wbGUgd29uJ3QgZXhwZWN0IFF0IG9yIFNUTC1zdHlsZSBpdGVyYXRvciBpbnRl
cmZhY2UuCisvLyBKdXN0IGtlZXAgY2FsbGluZyBuZXh0KCkgb24gdGhpcy4gSXQncyBzYWZlIGZy
b20gZGVsZXRpb25zIG9mIGl0ZW1zLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgQ2FjaGVk
UmVzb3VyY2VDbGllbnRXYWxrZXIgeworcHVibGljOgorICAgIENhY2hlZFJlc291cmNlQ2xpZW50
V2Fsa2VyKGNvbnN0IEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj4mIHNldCkK
KyAgICAgICAgOiBtX2NsaWVudFNldChzZXQpLCBtX2NsaWVudFZlY3RvcihzZXQuc2l6ZSgpKSwg
bV9pbmRleCgwKQorICAgIHsKKyAgICAgICAgdHlwZWRlZiBIYXNoQ291bnRlZFNldDxDYWNoZWRS
ZXNvdXJjZUNsaWVudCo+Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsKKyAgICAgICAgSXRlcmF0
b3IgZW5kID0gc2V0LmVuZCgpOworICAgICAgICBzaXplX3QgY2xpZW50SW5kZXggPSAwOworICAg
ICAgICBmb3IgKEl0ZXJhdG9yIGN1cnJlbnQgPSBzZXQuYmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7
ICsrY3VycmVudCkKKyAgICAgICAgICAgIG1fY2xpZW50VmVjdG9yW2NsaWVudEluZGV4KytdID0g
Y3VycmVudC0+a2V5OworICAgIH0KKworICAgIFQqIG5leHQoKQorICAgIHsKKyAgICAgICAgc2l6
ZV90IHNpemUgPSBtX2NsaWVudFZlY3Rvci5zaXplKCk7CisgICAgICAgIHdoaWxlIChtX2luZGV4
IDwgc2l6ZSkgeworICAgICAgICAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIG5leHQgPSBtX2Ns
aWVudFZlY3RvclttX2luZGV4KytdOworICAgICAgICAgICAgaWYgKG1fY2xpZW50U2V0LmNvbnRh
aW5zKG5leHQpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oVDo6ZXhwZWN0ZWRUeXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2VDbGllbnQ6OmV4cGVjdGVk
VHlwZSgpIHx8IG5leHQtPnJlc291cmNlQ2xpZW50VHlwZSgpID09IFQ6OmV4cGVjdGVkVHlwZSgp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG5leHQpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9Citwcml2YXRlOgorICAgIGNvbnN0IEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xp
ZW50Kj4mIG1fY2xpZW50U2V0OworICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZUNsaWVudCo+IG1f
Y2xpZW50VmVjdG9yOworICAgIHNpemVfdCBtX2luZGV4OworfTsKKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZUhhbmRs
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VIYW5kbGUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjA5NzI3NmU5MzJiZDBlY2M4NjA3ZDNjZWNhYjQ1Mzc0YmEzOTNjMGMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkUmVz
b3VyY2VIYW5kbGUuY3BwCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlSGFuZGxlLmgiCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0NhY2hlZFJlc291cmNlSGFuZGxlQmFzZTo6Q2FjaGVkUmVz
b3VyY2VIYW5kbGVCYXNlKCkKKyAgICA6IG1fcmVzb3VyY2UobnVsbHB0cikKK3sKK30KKworQ2Fj
aGVkUmVzb3VyY2VIYW5kbGVCYXNlOjpDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UoQ2FjaGVkUmVz
b3VyY2UqIHJlc291cmNlKQorICAgIDogbV9yZXNvdXJjZShyZXNvdXJjZSkKK3sKKyAgICBpZiAo
bV9yZXNvdXJjZSkKKyAgICAgICAgbV9yZXNvdXJjZS0+cmVnaXN0ZXJIYW5kbGUodGhpcyk7Cit9
CisKK0NhY2hlZFJlc291cmNlSGFuZGxlQmFzZTo6Q2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKGNv
bnN0IENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSYgb3RoZXIpCisgICAgOiBtX3Jlc291cmNlKG90
aGVyLm1fcmVzb3VyY2UpCit7CisgICAgaWYgKG1fcmVzb3VyY2UpCisgICAgICAgIG1fcmVzb3Vy
Y2UtPnJlZ2lzdGVySGFuZGxlKHRoaXMpOworfQorCitDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2U6
On5DYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UoKQoreworICAgIGlmIChtX3Jlc291cmNlKQorICAg
ICAgICBtX3Jlc291cmNlLT51bnJlZ2lzdGVySGFuZGxlKHRoaXMpOworfQorCit2b2lkIENhY2hl
ZFJlc291cmNlSGFuZGxlQmFzZTo6c2V0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNl
KQoreworICAgIGlmIChyZXNvdXJjZSA9PSBtX3Jlc291cmNlKQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKG1fcmVzb3VyY2UpCisgICAgICAgIG1fcmVzb3VyY2UtPnVucmVnaXN0ZXJIYW5kbGUo
dGhpcyk7CisgICAgbV9yZXNvdXJjZSA9IHJlc291cmNlOworICAgIGlmIChtX3Jlc291cmNlKQor
ICAgICAgICBtX3Jlc291cmNlLT5yZWdpc3RlckhhbmRsZSh0aGlzKTsKK30KKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlSGFuZGxlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wM2U1ODQyZTMzNTQ0OWI1YTlkYTljY2I1N2NjNjU3NWQ1YmVhNWFiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlSGFu
ZGxlLmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBDYWNoZWRSZXNvdXJjZUhhbmRsZV9oCisjZGVmaW5lIENh
Y2hlZFJlc291cmNlSGFuZGxlX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtRXhwb3J0TWFjcm9zLmgi
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBDYWNoZWRSZXNvdXJjZTsKKworY2xhc3MgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlIHsKK3B1
YmxpYzoKKyAgICB+Q2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKCk7CisKKyAgICBDYWNoZWRSZXNv
dXJjZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZTsgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fcmVzb3VyY2U7IH0KKyAgICAKKyAgICAvLyBU
aGlzIGNvbnZlcnNpb24gb3BlcmF0b3IgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gYm9v
bCBidXQgbm90IHRvIG90aGVyIGludGVnZXIgdHlwZXMuCisgICAgdHlwZWRlZiBDYWNoZWRSZXNv
dXJjZSogQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlOjoqVW5zcGVjaWZpZWRCb29sVHlwZTsKKyAg
ICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJj
ZSA/ICZDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2U6Om1fcmVzb3VyY2UgOiAwOyB9CisKK3Byb3Rl
Y3RlZDoKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UoKTsKKyAgICBDYWNoZWRSZXNvdXJj
ZUhhbmRsZUJhc2UoQ2FjaGVkUmVzb3VyY2UqKTsKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZUJh
c2UoY29uc3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlJik7CisKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldFJlc291cmNlKENhY2hlZFJlc291cmNlKik7CisgICAgCitwcml2YXRlOgorICAg
IENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSYgb3BlcmF0b3I9KGNvbnN0IENhY2hlZFJlc291cmNl
SGFuZGxlQmFzZSYpIHsgcmV0dXJuICp0aGlzOyB9IAorICAgIAorICAgIGZyaWVuZCBjbGFzcyBD
YWNoZWRSZXNvdXJjZTsKKworICAgIENhY2hlZFJlc291cmNlKiBtX3Jlc291cmNlOworfTsKKyAg
ICAKK3RlbXBsYXRlIDxjbGFzcyBSPiBjbGFzcyBDYWNoZWRSZXNvdXJjZUhhbmRsZSA6IHB1Ymxp
YyBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UgeworcHVibGljOiAKKyAgICBDYWNoZWRSZXNvdXJj
ZUhhbmRsZSgpIHsgfQorICAgIENhY2hlZFJlc291cmNlSGFuZGxlKFIqIHJlcykgOiBDYWNoZWRS
ZXNvdXJjZUhhbmRsZUJhc2UocmVzKSB7IH0KKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZShjb25z
dCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxSPiYgbykgOiBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2Uo
bykgeyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gQ2FjaGVkUmVzb3VyY2VIYW5kbGUoY29u
c3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8VT4mIG8pIDogQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNl
KG8uZ2V0KCkpIHsgfQorCisgICAgUiogZ2V0KCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxSKj4oQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlOjpnZXQoKSk7IH0KKyAgICBSKiBvcGVy
YXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KKyAgICBSJiBvcGVyYXRvciooKSBjb25z
dCB7IEFTU0VSVChnZXQoKSk7IHJldHVybiAqZ2V0KCk7IH0KKworICAgIENhY2hlZFJlc291cmNl
SGFuZGxlJiBvcGVyYXRvcj0oUiogcmVzKSB7IHNldFJlc291cmNlKHJlcyk7IHJldHVybiAqdGhp
czsgfSAKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZSYgb3BlcmF0b3I9KGNvbnN0IENhY2hlZFJl
c291cmNlSGFuZGxlJiBvKSB7IHNldFJlc291cmNlKG8uZ2V0KCkpOyByZXR1cm4gKnRoaXM7IH0K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBDYWNoZWRSZXNvdXJjZUhhbmRsZSYgb3BlcmF0b3I9
KGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxlPFU+JiBvKSB7IHNldFJlc291cmNlKG8uZ2V0KCkp
OyByZXR1cm4gKnRoaXM7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWNoZWRSZXNv
dXJjZUhhbmRsZUJhc2UmIG8pIGNvbnN0IHsgcmV0dXJuIGdldCgpID09IG8uZ2V0KCk7IH0KKyAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlJiBvKSBjb25z
dCB7IHJldHVybiBnZXQoKSAhPSBvLmdldCgpOyB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgUiwg
Y2xhc3MgUlI+IGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxSPiYg
aCwgY29uc3QgUlIqIHJlcykgCit7IAorICAgIHJldHVybiBoLmdldCgpID09IHJlczsgCit9Cit0
ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUlI+IGJvb2wgb3BlcmF0b3I9PShjb25zdCBSUiogcmVz
LCBjb25zdCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxSPiYgaCkgCit7IAorICAgIHJldHVybiBoLmdl
dCgpID09IHJlczsgCit9Cit0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUlI+IGJvb2wgb3BlcmF0
b3IhPShjb25zdCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxSPiYgaCwgY29uc3QgUlIqIHJlcykgCit7
IAorICAgIHJldHVybiBoLmdldCgpICE9IHJlczsgCit9Cit0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xh
c3MgUlI+IGJvb2wgb3BlcmF0b3IhPShjb25zdCBSUiogcmVzLCBjb25zdCBDYWNoZWRSZXNvdXJj
ZUhhbmRsZTxSPiYgaCkgCit7IAorICAgIHJldHVybiBoLmdldCgpICE9IHJlczsgCit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENhY2hlZFJlc291cmNlSGFuZGxlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlTG9hZGVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kNWI3ZjhjZjZiMDA5ZWIwNGNjZDVhOTc5Y2UyNmUzOTdmNDM4Yjk1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJl
c291cmNlTG9hZGVyLmNwcApAQCAtMCwwICsxLDEyNTcgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCisgICAgQ29weXJpZ2h0IChD
KSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykg
MjAwMiBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAy
MDA0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgIENvcHlyaWdodCAo
QykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAg
ICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGlu
ZyBpbWFnZXMsIHN0eWxlIHNoZWV0cyBhbmQgaHRtbAorICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4g
SXQgaGFzIGEgbWVtb3J5IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgorKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisKKyNpbmNsdWRl
ICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJDYWNoZWRGb250LmgiCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNs
dWRlICJDYWNoZWRSYXdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVz
dC5oIgorI2luY2x1ZGUgIkNhY2hlZFNWR0ZvbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRTY3JpcHQu
aCIKKyNpbmNsdWRlICJDYWNoZWRYU0xTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiQ2hyb21lLmgi
CisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbkVy
cm9yLmgiCisjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvblJ1bGUuaCIKKyNpbmNsdWRlICJDb250
ZW50U2VjdXJpdHlQb2xpY3kuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJE
aWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oIgorI2luY2x1ZGUgIkRpYWdub3N0aWNMb2dnaW5nS2V5
cy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIK
KyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAi
RnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUg
IkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgorI2luY2x1ZGUgIkxvYWRlclN0cmF0ZWd5LmgiCisj
aW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNs
dWRlICJNYWluRnJhbWUuaCIKKyNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgorI2luY2x1ZGUgIlBh
Z2UuaCIKKyNpbmNsdWRlICJQZXJmb3JtYW5jZS5oIgorI2luY2x1ZGUgIlBpbmdMb2FkZXIuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKKyNpbmNsdWRlICJSZW5kZXJFbGVtZW50
LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkSW5mby5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTZXNzaW9uSUQuaCIKKyNpbmNsdWRlICJTZXR0
aW5ncy5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgorI2luY2x1ZGUgIlN1YnJl
c291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiVXNlckNvbnRlbnRDb250cm9sbGVyLmgiCisjaW5j
bHVkZSAiVXNlclN0eWxlU2hlZXQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0sp
CisjaW5jbHVkZSAiQ2FjaGVkVGV4dFRyYWNrLmgiCisjZW5kaWYKKworI2RlZmluZSBQUkVMT0FE
X0RFQlVHIDAKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgQ2FjaGVkUmVzb3VyY2Uq
IGNyZWF0ZVJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQor
eworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVz
b3VyY2U6CisgICAgICAgIHJldHVybiBuZXcgQ2FjaGVkSW1hZ2UocmVxdWVzdCwgc2Vzc2lvbklE
KTsKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OgorICAgICAgICByZXR1
cm4gbmV3IENhY2hlZENTU1N0eWxlU2hlZXQocmVxdWVzdCwgY2hhcnNldCwgc2Vzc2lvbklEKTsK
KyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6CisgICAgICAgIHJldHVybiBuZXcgQ2Fj
aGVkU2NyaXB0KHJlcXVlc3QsIGNoYXJzZXQsIHNlc3Npb25JRCk7CisgICAgY2FzZSBDYWNoZWRS
ZXNvdXJjZTo6U1ZHRG9jdW1lbnRSZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRT
VkdEb2N1bWVudChyZXF1ZXN0LCBzZXNzaW9uSUQpOworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisg
ICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U1ZHRm9udFJlc291cmNlOgorICAgICAgICByZXR1cm4g
bmV3IENhY2hlZFNWR0ZvbnQocmVxdWVzdCwgc2Vzc2lvbklEKTsKKyNlbmRpZgorICAgIGNhc2Ug
Q2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRG
b250KHJlcXVlc3QsIHNlc3Npb25JRCk7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TWVkaWFS
ZXNvdXJjZToKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpSYXdSZXNvdXJjZToKKyAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpNYWluUmVzb3VyY2U6CisgICAgICAgIHJldHVybiBuZXcgQ2FjaGVk
UmF3UmVzb3VyY2UocmVxdWVzdCwgdHlwZSwgc2Vzc2lvbklEKTsKKyNpZiBFTkFCTEUoWFNMVCkK
KyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgorICAgICAgICByZXR1cm4g
bmV3IENhY2hlZFhTTFN0eWxlU2hlZXQocmVxdWVzdCwgc2Vzc2lvbklEKTsKKyNlbmRpZgorI2lm
IEVOQUJMRShMSU5LX1BSRUZFVENIKQorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVm
ZXRjaDoKKyAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRSZXNvdXJjZShyZXF1ZXN0LCBDYWNoZWRS
ZXNvdXJjZTo6TGlua1ByZWZldGNoLCBzZXNzaW9uSUQpOworICAgIGNhc2UgQ2FjaGVkUmVzb3Vy
Y2U6OkxpbmtTdWJyZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRSZXNvdXJjZShy
ZXF1ZXN0LCBDYWNoZWRSZXNvdXJjZTo6TGlua1N1YnJlc291cmNlLCBzZXNzaW9uSUQpOworI2Vu
ZGlmCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlRl
eHRUcmFja1Jlc291cmNlOgorICAgICAgICByZXR1cm4gbmV3IENhY2hlZFRleHRUcmFjayhyZXF1
ZXN0LCBzZXNzaW9uSUQpOworI2VuZGlmCisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBudWxscHRyOworfQorCitDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Q2FjaGVk
UmVzb3VyY2VMb2FkZXIoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyKQorICAgIDogbV9k
b2N1bWVudChudWxscHRyKQorICAgICwgbV9kb2N1bWVudExvYWRlcihkb2N1bWVudExvYWRlcikK
KyAgICAsIG1fcmVxdWVzdENvdW50KDApCisgICAgLCBtX2dhcmJhZ2VDb2xsZWN0RG9jdW1lbnRS
ZXNvdXJjZXNUaW1lcigqdGhpcywgJkNhY2hlZFJlc291cmNlTG9hZGVyOjpnYXJiYWdlQ29sbGVj
dERvY3VtZW50UmVzb3VyY2VzKQorICAgICwgbV9hdXRvTG9hZEltYWdlcyh0cnVlKQorICAgICwg
bV9pbWFnZXNFbmFibGVkKHRydWUpCisgICAgLCBtX2FsbG93U3RhbGVSZXNvdXJjZXMoZmFsc2Up
Cit7Cit9CisKK0NhY2hlZFJlc291cmNlTG9hZGVyOjp+Q2FjaGVkUmVzb3VyY2VMb2FkZXIoKQor
eworICAgIG1fZG9jdW1lbnRMb2FkZXIgPSBudWxscHRyOworICAgIG1fZG9jdW1lbnQgPSBudWxs
cHRyOworCisgICAgY2xlYXJQcmVsb2FkcygpOworICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiBt
X2RvY3VtZW50UmVzb3VyY2VzLnZhbHVlcygpKQorICAgICAgICByZXNvdXJjZS0+c2V0T3duaW5n
Q2FjaGVkUmVzb3VyY2VMb2FkZXIobnVsbHB0cik7CisKKyAgICAvLyBNYWtlIHN1cmUgbm8gcmVx
dWVzdHMgc3RpbGwgcG9pbnQgdG8gdGhpcyBDYWNoZWRSZXNvdXJjZUxvYWRlcgorICAgIEFTU0VS
VChtX3JlcXVlc3RDb3VudCA9PSAwKTsKK30KKworQ2FjaGVkUmVzb3VyY2UqIENhY2hlZFJlc291
cmNlTG9hZGVyOjpjYWNoZWRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHJlc291cmNlVVJMKSBjb25z
dCAKK3sKKyAgICBBU1NFUlQoIXJlc291cmNlVVJMLmlzTnVsbCgpKTsKKyAgICBVUkwgdXJsID0g
bV9kb2N1bWVudC0+Y29tcGxldGVVUkwocmVzb3VyY2VVUkwpOworICAgIHJldHVybiBjYWNoZWRS
ZXNvdXJjZSh1cmwpOyAKK30KKworQ2FjaGVkUmVzb3VyY2UqIENhY2hlZFJlc291cmNlTG9hZGVy
OjpjYWNoZWRSZXNvdXJjZShjb25zdCBVUkwmIHJlc291cmNlVVJMKSBjb25zdAoreworICAgIFVS
TCB1cmwgPSBNZW1vcnlDYWNoZTo6cmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVySWZOZWVkZWQocmVz
b3VyY2VVUkwpOworICAgIHJldHVybiBtX2RvY3VtZW50UmVzb3VyY2VzLmdldCh1cmwpLmdldCgp
OyAKK30KKworRnJhbWUqIENhY2hlZFJlc291cmNlTG9hZGVyOjpmcmFtZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fZG9jdW1lbnRMb2FkZXIgPyBtX2RvY3VtZW50TG9hZGVyLT5mcmFtZSgpIDog
bnVsbHB0cjsKK30KKworU2Vzc2lvbklEIENhY2hlZFJlc291cmNlTG9hZGVyOjpzZXNzaW9uSUQo
KSBjb25zdAoreworICAgIFNlc3Npb25JRCBzZXNzaW9uSUQgPSBTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKTsKKworICAgIGlmIChGcmFtZSogZiA9IGZyYW1lKCkpCisgICAgICAgIHNlc3Np
b25JRCA9IGYtPnBhZ2UoKS0+c2Vzc2lvbklEKCk7CisKKyAgICByZXR1cm4gc2Vzc2lvbklEOwor
fQorCitDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRJbWFnZT4gQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXI6OnJlcXVlc3RJbWFnZShDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAg
aWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpIHsKKyAgICAgICAgaWYgKGZyYW1lLT5s
b2FkZXIoKS5wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rpc3BhdGNoZWQoKSAhPSBGcmFtZUxvYWRl
cjo6UGFnZURpc21pc3NhbFR5cGU6Ok5vbmUpIHsKKyAgICAgICAgICAgIGlmIChEb2N1bWVudCog
ZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgICAgICBkb2N1bWVudC0+
Y29udGVudFNlY3VyaXR5UG9saWN5KCktPnVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RJZk5lZWRlZChy
ZXF1ZXN0Lm11dGFibGVSZXNvdXJjZVJlcXVlc3QoKSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpJ
bnNlY3VyZVJlcXVlc3RUeXBlOjpMb2FkKTsKKyAgICAgICAgICAgIFVSTCByZXF1ZXN0VVJMID0g
cmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKTsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0
VVJMLmlzVmFsaWQoKSAmJiBjYW5SZXF1ZXN0KENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNl
LCByZXF1ZXN0VVJMLCByZXF1ZXN0Lm9wdGlvbnMoKSwgcmVxdWVzdC5mb3JQcmVsb2FkKCkpKQor
ICAgICAgICAgICAgICAgIFBpbmdMb2FkZXI6OmxvYWRJbWFnZSgqZnJhbWUsIHJlcXVlc3RVUkwp
OworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgcmVxdWVzdC5zZXREZWZlcihjbGllbnREZWZlcnNJbWFnZShyZXF1ZXN0LnJlc291cmNlUmVx
dWVzdCgpLnVybCgpKSA/IENhY2hlZFJlc291cmNlUmVxdWVzdDo6RGVmZXJyZWRCeUNsaWVudCA6
IENhY2hlZFJlc291cmNlUmVxdWVzdDo6Tm9EZWZlcik7CisgICAgcmV0dXJuIGRvd25jYXN0PENh
Y2hlZEltYWdlPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2Us
IHJlcXVlc3QpLmdldCgpKTsKK30KKworQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkRm9udD4g
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RGb250KENhY2hlZFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgYm9vbCBpc1NWRykKK3sKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgIGlmIChp
c1NWRykKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENhY2hlZFNWR0ZvbnQ+KHJlcXVlc3RSZXNv
dXJjZShDYWNoZWRSZXNvdXJjZTo6U1ZHRm9udFJlc291cmNlLCByZXF1ZXN0KS5nZXQoKSk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShpc1NWRyk7CisjZW5kaWYKKyAgICByZXR1cm4gZG93bmNh
c3Q8Q2FjaGVkRm9udD4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpGb250UmVzb3Vy
Y2UsIHJlcXVlc3QpLmdldCgpKTsKK30KKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKK0NhY2hl
ZFJlc291cmNlSGFuZGxlPENhY2hlZFRleHRUcmFjaz4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJl
cXVlc3RUZXh0VHJhY2soQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJl
dHVybiBkb3duY2FzdDxDYWNoZWRUZXh0VHJhY2s+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNv
dXJjZTo6VGV4dFRyYWNrUmVzb3VyY2UsIHJlcXVlc3QpLmdldCgpKTsKK30KKyNlbmRpZgorCitD
YWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRDU1NTdHlsZVNoZWV0PiBDYWNoZWRSZXNvdXJjZUxv
YWRlcjo6cmVxdWVzdENTU1N0eWxlU2hlZXQoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
KQoreworICAgIHJldHVybiBkb3duY2FzdDxDYWNoZWRDU1NTdHlsZVNoZWV0PihyZXF1ZXN0UmVz
b3VyY2UoQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQsIHJlcXVlc3QpLmdldCgpKTsKK30K
KworQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkQ1NTU3R5bGVTaGVldD4gQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OnJlcXVlc3RVc2VyQ1NTU3R5bGVTaGVldChDYWNoZWRSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QpCit7CisgICAgVVJMIHVybCA9IE1lbW9yeUNhY2hlOjpyZW1vdmVGcmFnbWVudElk
ZW50aWZpZXJJZk5lZWRlZChyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpKTsKKworI2lm
IEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCisgICAgcmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VS
ZXF1ZXN0KCkuc2V0RG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24oZG9jdW1lbnQoKS0+dG9wT3JpZ2lu
KCktPmRvbWFpbkZvckNhY2hlUGFydGl0aW9uKCkpOworI2VuZGlmCisKKyAgICBhdXRvJiBtZW1v
cnlDYWNoZSA9IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKTsKKyAgICBpZiAocmVxdWVzdC5hbGxv
d3NDYWNoaW5nKCkpIHsKKyAgICAgICAgaWYgKENhY2hlZFJlc291cmNlKiBleGlzdGluZyA9IG1l
bW9yeUNhY2hlLnJlc291cmNlRm9yUmVxdWVzdChyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLCBz
ZXNzaW9uSUQoKSkpIHsKKyAgICAgICAgICAgIGlmIChpczxDYWNoZWRDU1NTdHlsZVNoZWV0Pigq
ZXhpc3RpbmcpKQorICAgICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxDYWNoZWRDU1NTdHls
ZVNoZWV0PihleGlzdGluZyk7CisgICAgICAgICAgICBtZW1vcnlDYWNoZS5yZW1vdmUoKmV4aXN0
aW5nKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh1cmwuc3RyaW5nKCkgIT0gcmVxdWVz
dC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKSkKKyAgICAgICAgcmVxdWVzdC5tdXRhYmxlUmVzb3Vy
Y2VSZXF1ZXN0KCkuc2V0VVJMKHVybCk7CisKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNo
ZWRDU1NTdHlsZVNoZWV0PiB1c2VyU2hlZXQgPSBuZXcgQ2FjaGVkQ1NTU3R5bGVTaGVldChyZXF1
ZXN0LnJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LmNoYXJzZXQoKSwgc2Vzc2lvbklEKCkpOwor
CisgICAgaWYgKHJlcXVlc3QuYWxsb3dzQ2FjaGluZygpKQorICAgICAgICBtZW1vcnlDYWNoZS5h
ZGQoKnVzZXJTaGVldCk7CisgICAgLy8gRklYTUU6IGxvYWRSZXNvdXJjZSBjYWxscyBzZXRPd25p
bmdDYWNoZWRSZXNvdXJjZUxvYWRlcigpIGlmIHRoZSByZXNvdXJjZSBjb3VsZG4ndCBiZSBhZGRl
ZCB0byBjYWNoZS4gRG9lcyB0aGlzIGZ1bmN0aW9uIG5lZWQgdG8gY2FsbCBpdCwgdG9vPworCisg
ICAgdXNlclNoZWV0LT5sb2FkKCp0aGlzLCBSZXNvdXJjZUxvYWRlck9wdGlvbnMoRG9Ob3RTZW5k
Q2FsbGJhY2tzLCBTbmlmZkNvbnRlbnQsIEJ1ZmZlckRhdGEsIEFsbG93U3RvcmVkQ3JlZGVudGlh
bHMsIENsaWVudENyZWRlbnRpYWxQb2xpY3k6Ok1heUFza0NsaWVudEZvckNyZWRlbnRpYWxzLCBG
ZXRjaE9wdGlvbnM6OkNyZWRlbnRpYWxzOjpJbmNsdWRlLCBTa2lwU2VjdXJpdHlDaGVjaywgRmV0
Y2hPcHRpb25zOjpNb2RlOjpOb0NvcnMsIERvTm90SW5jbHVkZUNlcnRpZmljYXRlSW5mbywgQ29u
dGVudFNlY3VyaXR5UG9saWN5SW1wb3NpdGlvbjo6U2tpcFBvbGljeUNoZWNrLCBEZWZlcnNMb2Fk
aW5nUG9saWN5OjpBbGxvd0RlZmVyc0xvYWRpbmcsIENhY2hpbmdQb2xpY3k6OkFsbG93Q2FjaGlu
ZykpOworICAgIAorICAgIHJldHVybiB1c2VyU2hlZXQ7Cit9CisKK0NhY2hlZFJlc291cmNlSGFu
ZGxlPENhY2hlZFNjcmlwdD4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RTY3JpcHQoQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBkb3duY2FzdDxDYWNo
ZWRTY3JpcHQ+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6U2NyaXB0LCByZXF1ZXN0
KS5nZXQoKSk7Cit9CisKKyNpZiBFTkFCTEUoWFNMVCkKK0NhY2hlZFJlc291cmNlSGFuZGxlPENh
Y2hlZFhTTFN0eWxlU2hlZXQ+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0WFNMU3R5bGVT
aGVldChDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIGRvd25j
YXN0PENhY2hlZFhTTFN0eWxlU2hlZXQ+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6
WFNMU3R5bGVTaGVldCwgcmVxdWVzdCkuZ2V0KCkpOworfQorI2VuZGlmCisKK0NhY2hlZFJlc291
cmNlSGFuZGxlPENhY2hlZFNWR0RvY3VtZW50PiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVz
dFNWR0RvY3VtZW50KENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICByZXR1
cm4gZG93bmNhc3Q8Q2FjaGVkU1ZHRG9jdW1lbnQ+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNv
dXJjZTo6U1ZHRG9jdW1lbnRSZXNvdXJjZSwgcmVxdWVzdCkuZ2V0KCkpOworfQorCisjaWYgRU5B
QkxFKExJTktfUFJFRkVUQ0gpCitDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4g
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RMaW5rUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6
OlR5cGUgdHlwZSwgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIEFTU0VS
VChmcmFtZSgpKTsKKyAgICBBU1NFUlQodHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6TGlua1ByZWZl
dGNoIHx8IHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OkxpbmtTdWJyZXNvdXJjZSk7CisgICAgcmV0
dXJuIHJlcXVlc3RSZXNvdXJjZSh0eXBlLCByZXF1ZXN0KTsKK30KKyNlbmRpZgorCitDYWNoZWRS
ZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJl
cXVlc3RNZWRpYShDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgcmV0dXJu
IGRvd25jYXN0PENhY2hlZFJhd1Jlc291cmNlPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3Vy
Y2U6Ok1lZGlhUmVzb3VyY2UsIHJlcXVlc3QpLmdldCgpKTsKK30KKworQ2FjaGVkUmVzb3VyY2VI
YW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmF3
UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBk
b3duY2FzdDxDYWNoZWRSYXdSZXNvdXJjZT4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNl
OjpSYXdSZXNvdXJjZSwgcmVxdWVzdCkuZ2V0KCkpOworfQorCitDYWNoZWRSZXNvdXJjZUhhbmRs
ZTxDYWNoZWRSYXdSZXNvdXJjZT4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RNYWluUmVz
b3VyY2UoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBkb3du
Y2FzdDxDYWNoZWRSYXdSZXNvdXJjZT4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpN
YWluUmVzb3VyY2UsIHJlcXVlc3QpLmdldCgpKTsKK30KKworc3RhdGljIE1peGVkQ29udGVudENo
ZWNrZXI6OkNvbnRlbnRUeXBlIGNvbnRlbnRUeXBlRnJvbVJlc291cmNlVHlwZShDYWNoZWRSZXNv
dXJjZTo6VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIC8vIGh0dHBzOi8v
dzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtbWl4ZWQtY29udGVudC8jY2F0ZWdvcnktb3B0aW9uYWxs
eS1ibG9ja2FibGUKKyAgICAvLyBFZGl0b3IncyBEcmFmdCwgMTEgRmVicnVhcnkgMjAxNgorICAg
IC8vIDMuMS4gT3B0aW9uYWxseS1ibG9ja2FibGUgQ29udGVudAorICAgIGNhc2UgQ2FjaGVkUmVz
b3VyY2U6OkltYWdlUmVzb3VyY2U6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TWVkaWFSZXNv
dXJjZToKKyAgICAgICAgICAgIHJldHVybiBNaXhlZENvbnRlbnRDaGVja2VyOjpDb250ZW50VHlw
ZTo6QWN0aXZlQ2FuV2FybjsKKworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hl
ZXQ6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OgorICAgIGNhc2UgQ2FjaGVkUmVz
b3VyY2U6OkZvbnRSZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIE1peGVkQ29udGVudENoZWNrZXI6
OkNvbnRlbnRUeXBlOjpBY3RpdmU7CisKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgIGNhc2Ug
Q2FjaGVkUmVzb3VyY2U6OlNWR0ZvbnRSZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIE1peGVkQ29u
dGVudENoZWNrZXI6OkNvbnRlbnRUeXBlOjpBY3RpdmU7CisjZW5kaWYKKworICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0Rv
Y3VtZW50UmVzb3VyY2U6CisgICAgICAgIHJldHVybiBNaXhlZENvbnRlbnRDaGVja2VyOjpDb250
ZW50VHlwZTo6QWN0aXZlOworI2lmIEVOQUJMRShYU0xUKQorICAgIGNhc2UgQ2FjaGVkUmVzb3Vy
Y2U6OlhTTFN0eWxlU2hlZXQ6CisgICAgICAgIHJldHVybiBNaXhlZENvbnRlbnRDaGVja2VyOjpD
b250ZW50VHlwZTo6QWN0aXZlOworI2VuZGlmCisKKyNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkK
KyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rUHJlZmV0Y2g6CisgICAgY2FzZSBDYWNoZWRS
ZXNvdXJjZTo6TGlua1N1YnJlc291cmNlOgorICAgICAgICByZXR1cm4gTWl4ZWRDb250ZW50Q2hl
Y2tlcjo6Q29udGVudFR5cGU6OkFjdGl2ZTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlRleHRUcmFja1Jlc291cmNlOgorICAgICAg
ICByZXR1cm4gTWl4ZWRDb250ZW50Q2hlY2tlcjo6Q29udGVudFR5cGU6OkFjdGl2ZTsKKyNlbmRp
ZgorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gTWl4ZWRDb250ZW50Q2hlY2tlcjo6Q29udGVudFR5cGU6OkFjdGl2ZTsKKyAgICB9Cit9
CisKK2Jvb2wgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNoZWNrSW5zZWN1cmVDb250ZW50KENhY2hl
ZFJlc291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFVSTCYgdXJsKSBjb25zdAoreworICAgIHN3aXRj
aCAodHlwZSkgeworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKKyNpZiBFTkFCTEUo
WFNMVCkKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgorI2VuZGlmCisg
ICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U1ZHRG9jdW1lbnRSZXNvdXJjZToKKyAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OgorICAgICAgICAvLyBUaGVzZSByZXNvdXJjZSBj
YW4gaW5qZWN0IHNjcmlwdCBpbnRvIHRoZSBjdXJyZW50IGRvY3VtZW50IChTY3JpcHQsCisgICAg
ICAgIC8vIFhTTCkgb3IgZXhmaWx0cmF0ZSB0aGUgY29udGVudCBvZiB0aGUgY3VycmVudCBkb2N1
bWVudCAoQ1NTKS4KKyAgICAgICAgaWYgKEZyYW1lKiBmID0gZnJhbWUoKSkgeworICAgICAgICAg
ICAgaWYgKCFmLT5sb2FkZXIoKS5taXhlZENvbnRlbnRDaGVja2VyKCkuY2FuUnVuSW5zZWN1cmVD
b250ZW50KG1fZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIHVybCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgRnJhbWUmIHRvcCA9IGYtPnRyZWUoKS50b3Ao
KTsKKyAgICAgICAgICAgIGlmICgmdG9wICE9IGYgJiYgIXRvcC5sb2FkZXIoKS5taXhlZENvbnRl
bnRDaGVja2VyKCkuY2FuUnVuSW5zZWN1cmVDb250ZW50KHRvcC5kb2N1bWVudCgpLT5zZWN1cml0
eU9yaWdpbigpLCB1cmwpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6VGV4dFRyYWNrUmVzb3VyY2U6CisjZW5kaWYKKyAgICBjYXNlIENhY2hlZFJl
c291cmNlOjpNZWRpYVJlc291cmNlOgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291
cmNlOgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6CisjaWYgRU5BQkxF
KFNWR19GT05UUykKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdGb250UmVzb3VyY2U6Cisj
ZW5kaWYKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6IHsKKyAgICAgICAg
Ly8gVGhlc2UgcmVzb3VyY2VzIGNhbiBjb3JydXB0IG9ubHkgdGhlIGZyYW1lJ3MgcGl4ZWxzLgor
ICAgICAgICBpZiAoRnJhbWUqIGYgPSBmcmFtZSgpKSB7CisgICAgICAgICAgICBGcmFtZSYgdG9w
RnJhbWUgPSBmLT50cmVlKCkudG9wKCk7CisgICAgICAgICAgICBpZiAoIXRvcEZyYW1lLmxvYWRl
cigpLm1peGVkQ29udGVudENoZWNrZXIoKS5jYW5EaXNwbGF5SW5zZWN1cmVDb250ZW50KHRvcEZy
YW1lLmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIGNvbnRlbnRUeXBlRnJvbVJlc291cmNl
VHlwZSh0eXBlKSwgdXJsKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok1haW5S
ZXNvdXJjZToKKyNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKKyAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpMaW5rUHJlZmV0Y2g6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1N1YnJlc291
cmNlOgorICAgICAgICAvLyBQcmVmZXRjaCBjYW5ub3QgYWZmZWN0IHRoZSBjdXJyZW50IGRvY3Vt
ZW50LgorI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIGlzU2FtZU9yaWdpbkRhdGFVUkwoY29uc3QgVVJMJiB1cmws
IGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucywgYm9vbCBkaWRSZWNlaXZlUmVk
aXJlY3RSZXNwb25zZSkKK3sKKyAgICByZXR1cm4gIWRpZFJlY2VpdmVSZWRpcmVjdFJlc3BvbnNl
ICYmIHVybC5wcm90b2NvbElzRGF0YSgpICYmIG9wdGlvbnMuc2FtZU9yaWdpbkRhdGFVUkxGbGFn
ID09IFNhbWVPcmlnaW5EYXRhVVJMRmxhZzo6U2V0OworfQorCitib29sIENhY2hlZFJlc291cmNl
TG9hZGVyOjpjYW5SZXF1ZXN0KENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFVSTCYg
dXJsLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMsIGJvb2wgZm9yUHJlbG9h
ZCwgYm9vbCBkaWRSZWNlaXZlUmVkaXJlY3RSZXNwb25zZSkKK3sKKyAgICBpZiAoZG9jdW1lbnQo
KSAmJiAhZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuRGlzcGxheSh1cmwpKSB7Cisg
ICAgICAgIGlmICghZm9yUHJlbG9hZCkKKyAgICAgICAgICAgIEZyYW1lTG9hZGVyOjpyZXBvcnRM
b2NhbExvYWRGYWlsZWQoZnJhbWUoKSwgdXJsLnN0cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0
aCgpKTsKKyAgICAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlTG9hZGVy
OjpyZXF1ZXN0UmVzb3VyY2UgVVJMIHdhcyBub3QgYWxsb3dlZCBieSBTZWN1cml0eU9yaWdpbjo6
Y2FuRGlzcGxheSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBz
a2lwQ29udGVudFNlY3VyaXR5UG9saWN5Q2hlY2sgPSBvcHRpb25zLmNvbnRlbnRTZWN1cml0eVBv
bGljeUltcG9zaXRpb24gPT0gQ29udGVudFNlY3VyaXR5UG9saWN5SW1wb3NpdGlvbjo6U2tpcFBv
bGljeUNoZWNrOworICAgIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVkaXJlY3RSZXNwb25zZVJl
Y2VpdmVkIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCA9IGRpZFJlY2VpdmVSZWRpcmVjdFJlc3Bv
bnNlID8gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQ6Olll
cyA6IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkOjpObzsK
KworICAgIC8vIFNvbWUgdHlwZXMgb2YgcmVzb3VyY2VzIGNhbiBiZSBsb2FkZWQgb25seSBmcm9t
IHRoZSBzYW1lIG9yaWdpbi4gT3RoZXIgdHlwZXMgb2YgcmVzb3VyY2VzLCBsaWtlIEltYWdlcywg
U2NyaXB0cywgYW5kIENTUywgY2FuIGJlIGxvYWRlZCBmcm9tIGFueSBVUkwuCisgICAgLy8gRklY
TUU6IFdlIHNob3VsZCByZW1vdmUgdGhhdCBjaGVjayBhbmQgaGFuZGxlIGl0IGJ5IHNldHRpbmcg
dGhlIGNvcnJlY3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zOjptb2RlLgorICAgIHN3aXRjaCAodHlw
ZSkgeworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZToKKyAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNT
U1N0eWxlU2hlZXQ6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OgorI2lmIEVOQUJM
RShTVkdfRk9OVFMpCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U1ZHRm9udFJlc291cmNlOgor
I2VuZGlmCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TWVkaWFSZXNvdXJjZToKKyAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6
UmF3UmVzb3VyY2U6CisjaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCisgICAgY2FzZSBDYWNoZWRS
ZXNvdXJjZTo6TGlua1ByZWZldGNoOgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtTdWJy
ZXNvdXJjZToKKyNlbmRpZgorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpUZXh0VHJhY2tSZXNvdXJjZToKKyNlbmRpZgorICAgICAgICBpZiAob3B0aW9u
cy5tb2RlID09IEZldGNoT3B0aW9uczo6TW9kZTo6U2FtZU9yaWdpbiAmJiAhaXNTYW1lT3JpZ2lu
RGF0YVVSTCh1cmwsIG9wdGlvbnMsIGRpZFJlY2VpdmVSZWRpcmVjdFJlc3BvbnNlKSAmJiFtX2Rv
Y3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCkpIHsKKyAgICAgICAgICAg
IHByaW50QWNjZXNzRGVuaWVkTWVzc2FnZSh1cmwpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNW
R0RvY3VtZW50UmVzb3VyY2U6CisjaWYgRU5BQkxFKFhTTFQpCisgICAgY2FzZSBDYWNoZWRSZXNv
dXJjZTo6WFNMU3R5bGVTaGVldDoKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50LT5zZWN1cml0eU9y
aWdpbigpLT5jYW5SZXF1ZXN0KHVybCkpIHsKKyAgICAgICAgICAgIHByaW50QWNjZXNzRGVuaWVk
TWVzc2FnZSh1cmwpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisjZW5k
aWYKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoICh0eXBlKSB7CisjaWYgRU5B
QkxFKFhTTFQpCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldDoKKyAgICAg
ICAgaWYgKCFtX2RvY3VtZW50LT5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dTY3JpcHRG
cm9tU291cmNlKHVybCwgc2tpcENvbnRlbnRTZWN1cml0eVBvbGljeUNoZWNrLCByZWRpcmVjdFJl
c3BvbnNlUmVjZWl2ZWQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBicmVh
azsKKyNlbmRpZgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKKyAgICAgICAgaWYg
KCFtX2RvY3VtZW50LT5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dTY3JpcHRGcm9tU291
cmNlKHVybCwgc2tpcENvbnRlbnRTZWN1cml0eVBvbGljeUNoZWNrLCByZWRpcmVjdFJlc3BvbnNl
UmVjZWl2ZWQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoZnJhbWUo
KSAmJiAhZnJhbWUoKS0+c2V0dGluZ3MoKS5pc1NjcmlwdEVuYWJsZWQoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6
Q1NTU3R5bGVTaGVldDoKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50LT5jb250ZW50U2VjdXJpdHlQ
b2xpY3koKS0+YWxsb3dTdHlsZUZyb21Tb3VyY2UodXJsLCBza2lwQ29udGVudFNlY3VyaXR5UG9s
aWN5Q2hlY2ssIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0RvY3Vt
ZW50UmVzb3VyY2U6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKKyAg
ICAgICAgaWYgKCFtX2RvY3VtZW50LT5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dJbWFn
ZUZyb21Tb3VyY2UodXJsLCBza2lwQ29udGVudFNlY3VyaXR5UG9saWN5Q2hlY2ssIHJlZGlyZWN0
UmVzcG9uc2VSZWNlaXZlZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJy
ZWFrOworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U1ZH
Rm9udFJlc291cmNlOgorI2VuZGlmCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291
cmNlOiB7CisgICAgICAgIGlmICghbV9kb2N1bWVudC0+Y29udGVudFNlY3VyaXR5UG9saWN5KCkt
PmFsbG93Rm9udEZyb21Tb3VyY2UodXJsLCBza2lwQ29udGVudFNlY3VyaXR5UG9saWN5Q2hlY2ss
IHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpNYWluUmVzb3Vy
Y2U6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2U6CisjaWYgRU5BQkxFKExJ
TktfUFJFRkVUQ0gpCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1ByZWZldGNoOgorICAg
IGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtTdWJyZXNvdXJjZToKKyNlbmRpZgorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpNZWRpYVJlc291cmNlOgorI2lmIEVOQUJM
RShWSURFT19UUkFDSykKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpUZXh0VHJhY2tSZXNvdXJj
ZToKKyNlbmRpZgorICAgICAgICBpZiAoIW1fZG9jdW1lbnQtPmNvbnRlbnRTZWN1cml0eVBvbGlj
eSgpLT5hbGxvd01lZGlhRnJvbVNvdXJjZSh1cmwsIHNraXBDb250ZW50U2VjdXJpdHlQb2xpY3lD
aGVjaywgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gU1ZHIEltYWdlcyBoYXZlIHVuaXF1
ZSBzZWN1cml0eSBydWxlcyB0aGF0IHByZXZlbnQgYWxsIHN1YnJlc291cmNlIHJlcXVlc3RzIGV4
Y2VwdCBmb3IgZGF0YSB1cmxzLgorICAgIGlmICh0eXBlICE9IENhY2hlZFJlc291cmNlOjpNYWlu
UmVzb3VyY2UgJiYgZnJhbWUoKSAmJiBmcmFtZSgpLT5wYWdlKCkpIHsKKyAgICAgICAgaWYgKGZy
YW1lKCktPnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuaXNTVkdJbWFnZUNocm9tZUNsaWVudCgp
ICYmICF1cmwucHJvdG9jb2xJc0RhdGEoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBpZiAoIWNhblJlcXVlc3RJbkNvbnRlbnREaXNwb3NpdGlvbkF0dGFjaG1lbnRT
YW5kYm94KHR5cGUsIHVybCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIExhc3Qg
b2YgYWxsLCBjaGVjayBmb3IgaW5zZWN1cmUgY29udGVudC4gV2UgZG8gdGhpcyBsYXN0IHNvIHRo
YXQgd2hlbgorICAgIC8vIGZvbGtzIGJsb2NrIGluc2VjdXJlIGNvbnRlbnQgd2l0aCBhIENTUCBw
b2xpY3ksIHRoZXkgZG9uJ3QgZ2V0IGEgd2FybmluZy4KKyAgICAvLyBUaGV5J2xsIHN0aWxsIGdl
dCBhIHdhcm5pbmcgaW4gdGhlIGNvbnNvbGUgYWJvdXQgQ1NQIGJsb2NraW5nIHRoZSBsb2FkLgor
CisgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBjb25zaWRlciBmb3JQcmVsb2FkIGhlcmU/CisgICAg
aWYgKCFjaGVja0luc2VjdXJlQ29udGVudCh0eXBlLCB1cmwpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
Y2FuUmVxdWVzdEluQ29udGVudERpc3Bvc2l0aW9uQXR0YWNobWVudFNhbmRib3goQ2FjaGVkUmVz
b3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgVVJMJiB1cmwpIGNvbnN0Cit7CisgICAgRG9jdW1lbnQq
IGRvY3VtZW50OworICAgIAorICAgIC8vIEZJWE1FOiBEbyB3ZSB3YW50IHRvIGV4cGFuZCB0aGlz
IHRvIGFsbCByZXNvdXJjZSB0eXBlcyB0aGF0IHRoZSBtaXhlZCBjb250ZW50IGNoZWNrZXIgd291
bGQgY29uc2lkZXIgYWN0aXZlIGNvbnRlbnQ/CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6TWFpblJlc291cmNlOgorICAgICAgICBpZiAoYXV0byBvd25lckVs
ZW1lbnQgPSBmcmFtZSgpID8gZnJhbWUoKS0+b3duZXJFbGVtZW50KCkgOiBudWxscHRyKSB7Cisg
ICAgICAgICAgICBkb2N1bWVudCA9ICZvd25lckVsZW1lbnQtPmRvY3VtZW50KCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OgorICAgICAgICBkb2N1bWVudCA9IG1fZG9jdW1l
bnQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGlmICghZG9jdW1lbnQtPnNob3VsZEVuZm9yY2VDb250ZW50RGlzcG9zaXRp
b25BdHRhY2htZW50U2FuZGJveCgpIHx8IGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5S
ZXF1ZXN0KHVybCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgU3RyaW5nIG1lc3NhZ2Ug
PSAiVW5zYWZlIGF0dGVtcHQgdG8gbG9hZCBVUkwgIiArIHVybC5zdHJpbmdDZW50ZXJFbGxpcHNp
emVkVG9MZW5ndGgoKSArICIgZnJvbSBkb2N1bWVudCB3aXRoIENvbnRlbnQtRGlzcG9zaXRpb246
IGF0dGFjaG1lbnQgYXQgVVJMICIgKyBkb2N1bWVudC0+dXJsKCkuc3RyaW5nQ2VudGVyRWxsaXBz
aXplZFRvTGVuZ3RoKCkgKyAiLiI7CisgICAgZG9jdW1lbnQtPmFkZENvbnNvbGVNZXNzYWdlKE1l
c3NhZ2VTb3VyY2U6OlNlY3VyaXR5LCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBtZXNzYWdlKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnNob3VsZENv
bnRpbnVlQWZ0ZXJOb3RpZnlpbmdMb2FkZWRGcm9tTWVtb3J5Q2FjaGUoY29uc3QgQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCit7CisgICAg
aWYgKCFyZXNvdXJjZSB8fCAhZnJhbWUoKSB8fCByZXNvdXJjZS0+c3RhdHVzKCkgIT0gQ2FjaGVk
UmVzb3VyY2U6OkNhY2hlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBSZXNvdXJjZVJl
cXVlc3QgbmV3UmVxdWVzdCA9IFJlc291cmNlUmVxdWVzdChyZXNvdXJjZS0+dXJsKCkpOworICAg
IGlmIChyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmhpZGRlbkZyb21JbnNwZWN0b3IoKSkKKyAg
ICAgICAgbmV3UmVxdWVzdC5zZXRIaWRkZW5Gcm9tSW5zcGVjdG9yKHRydWUpOworICAgIGZyYW1l
KCktPmxvYWRlcigpLmxvYWRlZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKHJlc291cmNlLCBuZXdS
ZXF1ZXN0KTsKKworICAgIC8vIEZJWE1FIDxodHRwOi8vd2Via2l0Lm9yZy9iLzExMzI1MT46IElm
IHRoZSBkZWxlZ2F0ZSBtb2RpZmllcyB0aGUgcmVxdWVzdCdzCisgICAgLy8gVVJMLCBpdCBpcyBu
byBsb25nZXIgYXBwcm9wcmlhdGUgdG8gdXNlIHRoaXMgQ2FjaGVkUmVzb3VyY2UuCisgICAgcmV0
dXJuICFuZXdSZXF1ZXN0LmlzTnVsbCgpOworfQorCitib29sIENhY2hlZFJlc291cmNlTG9hZGVy
Ojp1cGRhdGVDYWNoZWRSZXNvdXJjZVdpdGhDdXJyZW50UmVxdWVzdChDYWNoZWRSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiYgcmVz
b3VyY2VIYW5kbGUpCit7CisgICAgQVNTRVJUKHJlc291cmNlSGFuZGxlKTsKKworICAgIENhY2hl
ZFJlc291cmNlJiByZXNvdXJjZSA9ICpyZXNvdXJjZUhhbmRsZTsKKworICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgcHJvZ3Jlc3NpdmVseSBleHRlbmQgdGhpcyB0byBvdGhlciByZXVzYWJsZSByZXNv
dXJjZXMKKyAgICBpZiAocmVzb3VyY2UudHlwZSgpICE9IENhY2hlZFJlc291cmNlOjpUeXBlOjpJ
bWFnZVJlc291cmNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIHNob3VsZFVw
ZGF0ZSA9IHJlc291cmNlLm9wdGlvbnMoKS5tb2RlICE9IHJlcXVlc3Qub3B0aW9ucygpLm1vZGUg
fHwgcmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwT3JpZ2luKCkgIT0gcmVzb3VyY2UucmVz
b3VyY2VSZXF1ZXN0KCkuaHR0cE9yaWdpbigpOworCisgICAgaWYgKCFzaG91bGRVcGRhdGUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBGb3IgYmVpbmcgbG9hZGVkIHJl
cXVlc3RzLCB3ZSBjdXJyZW50bHkgZG8gbm90IHVzZSB0aGUgc2FtZSByZXNvdXJjZSwgYXMgdGhp
cyBtYXkgaW5kdWNlIGVycm9ycyBpbiB0aGUgcmVzb3VyY2UgcmVzcG9uc2UgdGFpbnRpbmcuCisg
ICAgLy8gV2Ugc2hvdWxkIGZpbmQgYSB3YXkgdG8gaW1wcm92ZSB0aGlzLgorICAgIGlmIChyZXNv
dXJjZS5zdGF0dXMoKSAhPSBDYWNoZWRSZXNvdXJjZTo6Q2FjaGVkKSB7CisgICAgICAgIHJlcXVl
c3Quc2V0Q2FjaGluZ1BvbGljeShDYWNoaW5nUG9saWN5OjpEaXNhbGxvd0NhY2hpbmcpOworICAg
ICAgICByZXNvdXJjZUhhbmRsZSA9IGxvYWRSZXNvdXJjZShyZXNvdXJjZS50eXBlKCksIHJlcXVl
c3QpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXNvdXJjZUhhbmRsZSA9
IGNyZWF0ZVJlc291cmNlKHJlc291cmNlLnR5cGUoKSwgcmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VS
ZXF1ZXN0KCksIHJlcXVlc3QuY2hhcnNldCgpLCBzZXNzaW9uSUQoKSk7CisgICAgcmVzb3VyY2VI
YW5kbGUtPmxvYWRGcm9tKHJlc291cmNlLCByZXF1ZXN0Lm9wdGlvbnMoKSwgKnRoaXMpOworICAg
IHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9nTWVtb3J5Q2FjaGVSZXNv
dXJjZVJlcXVlc3QoRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBjb25z
dCBTdHJpbmcmIHZhbHVlID0gU3RyaW5nKCkpCit7CisgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUt
PnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICh2YWx1ZS5pc051bGwoKSkKKyAgICAg
ICAgZnJhbWUtPnBhZ2UoKS0+ZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQoKS5sb2dEaWFnbm9zdGlj
TWVzc2FnZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlUmVxdWVzdEtleSgpLCBkZXNj
cmlwdGlvbiwgU2hvdWxkU2FtcGxlOjpZZXMpOworICAgIGVsc2UKKyAgICAgICAgZnJhbWUtPnBh
Z2UoKS0+ZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQoKS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhW
YWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlUmVxdWVzdEtleSgpLCBkZXNjcmlw
dGlvbiwgdmFsdWUsIFNob3VsZFNhbXBsZTo6WWVzKTsKK30KKworQ2FjaGVkUmVzb3VyY2VIYW5k
bGU8Q2FjaGVkUmVzb3VyY2U+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmVzb3VyY2Uo
Q2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
KQoreworICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpKQorICAg
ICAgICBkb2N1bWVudC0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPnVwZ3JhZGVJbnNlY3VyZVJl
cXVlc3RJZk5lZWRlZChyZXF1ZXN0Lm11dGFibGVSZXNvdXJjZVJlcXVlc3QoKSwgQ29udGVudFNl
Y3VyaXR5UG9saWN5OjpJbnNlY3VyZVJlcXVlc3RUeXBlOjpMb2FkKTsKKyAgICAKKyAgICBVUkwg
dXJsID0gcmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKTsKKyAgICAKKyAgICBMT0coUmVz
b3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZSAnJXMn
LCBjaGFyc2V0ICclcycsIHByaW9yaXR5PSVkLCBmb3JQcmVsb2FkPSV1IiwgdXJsLnN0cmluZ0Nl
bnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpLmxhdGluMSgpLmRhdGEoKSwgcmVxdWVzdC5jaGFyc2V0
KCkubGF0aW4xKCkuZGF0YSgpLCByZXF1ZXN0LnByaW9yaXR5KCkgPyBzdGF0aWNfY2FzdDxpbnQ+
KHJlcXVlc3QucHJpb3JpdHkoKS52YWx1ZSgpKSA6IC0xLCByZXF1ZXN0LmZvclByZWxvYWQoKSk7
CisgICAgCisgICAgLy8gSWYgb25seSB0aGUgZnJhZ21lbnQgaWRlbnRpZmllcnMgZGlmZmVyLCBp
dCBpcyB0aGUgc2FtZSByZXNvdXJjZS4KKyAgICB1cmwgPSBNZW1vcnlDYWNoZTo6cmVtb3ZlRnJh
Z21lbnRJZGVudGlmaWVySWZOZWVkZWQodXJsKTsKKworICAgIGlmICghdXJsLmlzVmFsaWQoKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIWNhblJlcXVlc3QodHlwZSwgdXJs
LCByZXF1ZXN0Lm9wdGlvbnMoKSwgcmVxdWVzdC5mb3JQcmVsb2FkKCkpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAgaWYgKGZy
YW1lKCkgJiYgZnJhbWUoKS0+bWFpbkZyYW1lKCkucGFnZSgpICYmIG1fZG9jdW1lbnRMb2FkZXIp
IHsKKyAgICAgICAgYXV0byYgcmVzb3VyY2VSZXF1ZXN0ID0gcmVxdWVzdC5tdXRhYmxlUmVzb3Vy
Y2VSZXF1ZXN0KCk7CisgICAgICAgIGF1dG8gYmxvY2tlZFN0YXR1cyA9IGZyYW1lKCktPm1haW5G
cmFtZSgpLnBhZ2UoKS0+dXNlckNvbnRlbnRQcm92aWRlcigpLnByb2Nlc3NDb250ZW50RXh0ZW5z
aW9uUnVsZXNGb3JMb2FkKHJlc291cmNlUmVxdWVzdC51cmwoKSwgdG9SZXNvdXJjZVR5cGUodHlw
ZSksICptX2RvY3VtZW50TG9hZGVyKTsKKyAgICAgICAgYXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1
ZXN0KGJsb2NrZWRTdGF0dXMsIHJlc291cmNlUmVxdWVzdCk7CisgICAgICAgIGlmIChibG9ja2Vk
U3RhdHVzLmJsb2NrZWRMb2FkKSB7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBDYWNoZWRSZXNv
dXJjZTo6VHlwZTo6TWFpblJlc291cmNlKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXNvdXJj
ZSA9IGNyZWF0ZVJlc291cmNlKHR5cGUsIHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgp
LCByZXF1ZXN0LmNoYXJzZXQoKSwgc2Vzc2lvbklEKCkpOworICAgICAgICAgICAgICAgIEFTU0VS
VChyZXNvdXJjZSk7CisgICAgICAgICAgICAgICAgcmVzb3VyY2UtPmVycm9yKENhY2hlZFJlc291
cmNlOjpTdGF0dXM6OkxvYWRFcnJvcik7CisgICAgICAgICAgICAgICAgcmVzb3VyY2UtPnNldFJl
c291cmNlRXJyb3IoUmVzb3VyY2VFcnJvcihDb250ZW50RXh0ZW5zaW9uczo6V2ViS2l0Q29udGVu
dEJsb2NrZXJEb21haW4sIDAsIHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCksIFdFQl9V
SV9TVFJJTkcoIlRoZSBVUkwgd2FzIGJsb2NrZWQgYnkgYSBjb250ZW50IGJsb2NrZXIiLCAiV2Vi
S2l0RXJyb3JCbG9ja2VkQnlDb250ZW50QmxvY2tlciBkZXNjcmlwdGlvbiIpKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc291cmNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJsb2NrZWRTdGF0dXMubWFkZUhU
VFBTCisgICAgICAgICAgICAmJiB0eXBlID09IENhY2hlZFJlc291cmNlOjpUeXBlOjpNYWluUmVz
b3VyY2UKKyAgICAgICAgICAgICYmIG1fZG9jdW1lbnRMb2FkZXItPmlzTG9hZGluZ01haW5SZXNv
dXJjZSgpKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGUgY29ycmVj
dCAnbmV3JyBVUkwgc2hvd3MgaW4gdGhlIGxvY2F0aW9uIGJhci4KKyAgICAgICAgICAgIG1fZG9j
dW1lbnRMb2FkZXItPmZyYW1lTG9hZGVyKCktPmNsaWVudCgpLmRpc3BhdGNoRGlkQ2hhbmdlUHJv
dmlzaW9uYWxVUkwoKTsKKyAgICAgICAgfQorICAgICAgICB1cmwgPSByZXF1ZXN0LnJlc291cmNl
UmVxdWVzdCgpLnVybCgpOyAvLyBUaGUgY29udGVudCBleHRlbnNpb24gY291bGQgaGF2ZSBjaGFu
Z2VkIGl0IGZyb20gaHR0cCB0byBodHRwcy4KKyAgICAgICAgdXJsID0gTWVtb3J5Q2FjaGU6OnJl
bW92ZUZyYWdtZW50SWRlbnRpZmllcklmTmVlZGVkKHVybCk7IC8vIE1pZ2h0IG5lZWQgdG8gcmVt
b3ZlIGZyYWdtZW50IGlkZW50aWZpZXIgYWdhaW4uCisgICAgfQorI2VuZGlmCisKKyNpZiBFTkFC
TEUoV0VCX1RJTUlORykKKyAgICBMb2FkVGltaW5nIGxvYWRUaW1pbmc7CisgICAgbG9hZFRpbWlu
Zy5tYXJrU3RhcnRUaW1lQW5kRmV0Y2hTdGFydCgpOworI2VuZGlmCisKKyAgICBhdXRvJiBtZW1v
cnlDYWNoZSA9IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKTsKKyAgICBpZiAocmVxdWVzdC5hbGxv
d3NDYWNoaW5nKCkgJiYgbWVtb3J5Q2FjaGUuZGlzYWJsZWQoKSkgeworICAgICAgICBEb2N1bWVu
dFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZmluZCh1cmwu
c3RyaW5nKCkpOworICAgICAgICBpZiAoaXQgIT0gbV9kb2N1bWVudFJlc291cmNlcy5lbmQoKSkg
eworICAgICAgICAgICAgaXQtPnZhbHVlLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcihu
dWxscHRyKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnRSZXNvdXJjZXMucmVtb3ZlKGl0KTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIFNlZSBpZiB3ZSBjYW4gdXNlIGFuIGV4aXN0aW5nIHJl
c291cmNlIGZyb20gdGhlIGNhY2hlLgorICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJl
c291cmNlPiByZXNvdXJjZTsKKyNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQorICAgIGlm
IChkb2N1bWVudCgpKQorICAgICAgICByZXF1ZXN0Lm11dGFibGVSZXNvdXJjZVJlcXVlc3QoKS5z
ZXREb21haW5Gb3JDYWNoZVBhcnRpdGlvbihkb2N1bWVudCgpLT50b3BPcmlnaW4oKS0+ZG9tYWlu
Rm9yQ2FjaGVQYXJ0aXRpb24oKSk7CisjZW5kaWYKKworICAgIGlmIChyZXF1ZXN0LmFsbG93c0Nh
Y2hpbmcoKSkKKyAgICAgICAgcmVzb3VyY2UgPSBtZW1vcnlDYWNoZS5yZXNvdXJjZUZvclJlcXVl
c3QocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgc2Vzc2lvbklEKCkpOworCisgICAgbG9nTWVt
b3J5Q2FjaGVSZXNvdXJjZVJlcXVlc3QoZnJhbWUoKSwgcmVzb3VyY2UgPyBEaWFnbm9zdGljTG9n
Z2luZ0tleXM6OmluTWVtb3J5Q2FjaGVLZXkoKSA6IERpYWdub3N0aWNMb2dnaW5nS2V5czo6bm90
SW5NZW1vcnlDYWNoZUtleSgpKTsKKworICAgIGNvbnN0IFJldmFsaWRhdGlvblBvbGljeSBwb2xp
Y3kgPSBkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3kodHlwZSwgcmVxdWVzdCwgcmVzb3VyY2Uu
Z2V0KCkpOworICAgIHN3aXRjaCAocG9saWN5KSB7CisgICAgY2FzZSBSZWxvYWQ6CisgICAgICAg
IG1lbW9yeUNhY2hlLnJlbW92ZSgqcmVzb3VyY2UpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAg
ICBjYXNlIExvYWQ6CisgICAgICAgIGlmIChyZXNvdXJjZSkKKyAgICAgICAgICAgIGxvZ01lbW9y
eUNhY2hlUmVzb3VyY2VSZXF1ZXN0KGZyYW1lKCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6aW5N
ZW1vcnlDYWNoZUtleSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnVudXNlZEtleSgpKTsKKyAg
ICAgICAgcmVzb3VyY2UgPSBsb2FkUmVzb3VyY2UodHlwZSwgcmVxdWVzdCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUmV2YWxpZGF0ZToKKyAgICAgICAgaWYgKHJlc291cmNlKQorICAgICAg
ICAgICAgbG9nTWVtb3J5Q2FjaGVSZXNvdXJjZVJlcXVlc3QoZnJhbWUoKSwgRGlhZ25vc3RpY0xv
Z2dpbmdLZXlzOjppbk1lbW9yeUNhY2hlS2V5KCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmV2
YWxpZGF0aW5nS2V5KCkpOworICAgICAgICByZXNvdXJjZSA9IHJldmFsaWRhdGVSZXNvdXJjZShy
ZXF1ZXN0LCByZXNvdXJjZS5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVXNlOgor
ICAgICAgICBpZiAoIXVwZGF0ZUNhY2hlZFJlc291cmNlV2l0aEN1cnJlbnRSZXF1ZXN0KHJlcXVl
c3QsIHJlc291cmNlKSkgeworICAgICAgICAgICAgaWYgKCFzaG91bGRDb250aW51ZUFmdGVyTm90
aWZ5aW5nTG9hZGVkRnJvbU1lbW9yeUNhY2hlKHJlcXVlc3QsIHJlc291cmNlLmdldCgpKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIGxvZ01lbW9yeUNhY2hl
UmVzb3VyY2VSZXF1ZXN0KGZyYW1lKCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6aW5NZW1vcnlD
YWNoZUtleSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnVzZWRLZXkoKSk7CisgICAgICAgICAg
ICBtZW1vcnlDYWNoZS5yZXNvdXJjZUFjY2Vzc2VkKCpyZXNvdXJjZSk7CisjaWYgRU5BQkxFKFdF
Ql9USU1JTkcpCisgICAgICAgICAgICBpZiAoZG9jdW1lbnQoKSAmJiBSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnJlc291cmNlVGltaW5nRW5hYmxlZCgpKSB7CisgICAg
ICAgICAgICAgICAgLy8gRklYTUUgKDE2MTE3MCk6IFRoZSBuZXR3b3JrTG9hZFRpbWluZyBzaG91
bGRuJ3QgYmUgc3RvcmVkIG9uIHRoZSBSZXNvdXJjZVJlc3BvbnNlLgorICAgICAgICAgICAgICAg
IHJlc291cmNlLT5yZXNwb25zZSgpLm5ldHdvcmtMb2FkVGltaW5nKCkucmVzZXQoKTsKKyAgICAg
ICAgICAgICAgICBsb2FkVGltaW5nLnNldFJlc3BvbnNlRW5kKG1vbm90b25pY2FsbHlJbmNyZWFz
aW5nVGltZSgpKTsKKyAgICAgICAgICAgICAgICBtX3Jlc291cmNlVGltaW5nSW5mby5zdG9yZVJl
c291cmNlVGltaW5nSW5pdGlhdG9ySW5mb3JtYXRpb24ocmVzb3VyY2UsIHJlcXVlc3QsIGZyYW1l
KCkpOworICAgICAgICAgICAgICAgIG1fcmVzb3VyY2VUaW1pbmdJbmZvLmFkZFJlc291cmNlVGlt
aW5nKHJlc291cmNlLmdldCgpLCAqZG9jdW1lbnQoKSwgbG9hZFRpbWluZyk7CisgICAgICAgICAg
ICB9CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAo
IXJlc291cmNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmICghcmVxdWVzdC5m
b3JQcmVsb2FkKCkgfHwgcG9saWN5ICE9IFVzZSkKKyAgICAgICAgcmVzb3VyY2UtPnNldExvYWRQ
cmlvcml0eShyZXF1ZXN0LnByaW9yaXR5KCkpOworCisgICAgaWYgKCFyZXF1ZXN0LmZvclByZWxv
YWQoKSAmJiByZXNvdXJjZS0+bG9hZGVyKCkgJiYgcmVzb3VyY2UtPnJlc291cmNlUmVxdWVzdCgp
Lmlnbm9yZUZvclJlcXVlc3RDb3VudCgpKSB7CisgICAgICAgIHJlc291cmNlLT5yZXNvdXJjZVJl
cXVlc3QoKS5zZXRJZ25vcmVGb3JSZXF1ZXN0Q291bnQoZmFsc2UpOworICAgICAgICBpbmNyZW1l
bnRSZXF1ZXN0Q291bnQoKnJlc291cmNlKTsKKyAgICB9CisKKyAgICBpZiAoKHBvbGljeSAhPSBV
c2UgfHwgcmVzb3VyY2UtPnN0aWxsTmVlZHNMb2FkKCkpICYmIENhY2hlZFJlc291cmNlUmVxdWVz
dDo6Tm9EZWZlciA9PSByZXF1ZXN0LmRlZmVyKCkpIHsKKyAgICAgICAgcmVzb3VyY2UtPmxvYWQo
KnRoaXMsIHJlcXVlc3Qub3B0aW9ucygpKTsKKworICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0
IGltbWVkaWF0ZSBsb2FkcywgYnV0IHdlIGRvIHN1cHBvcnQgaW1tZWRpYXRlIGZhaWx1cmUuCisg
ICAgICAgIGlmIChyZXNvdXJjZS0+ZXJyb3JPY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBpZiAo
cmVzb3VyY2UtPmFsbG93c0NhY2hpbmcoKSAmJiByZXNvdXJjZS0+aW5DYWNoZSgpKQorICAgICAg
ICAgICAgICAgIG1lbW9yeUNhY2hlLnJlbW92ZSgqcmVzb3VyY2UpOworICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZG9jdW1lbnQoKSAmJiAh
ZG9jdW1lbnQoKS0+bG9hZEV2ZW50RmluaXNoZWQoKSAmJiAhcmVxdWVzdC5yZXNvdXJjZVJlcXVl
c3QoKS51cmwoKS5wcm90b2NvbElzRGF0YSgpKQorICAgICAgICBtX3ZhbGlkYXRlZFVSTHMuYWRk
KHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCkpOworCisgICAgQVNTRVJUKHJlc291cmNl
LT51cmwoKSA9PSB1cmwuc3RyaW5nKCkpOworICAgIG1fZG9jdW1lbnRSZXNvdXJjZXMuc2V0KHJl
c291cmNlLT51cmwoKSwgcmVzb3VyY2UpOworICAgIHJldHVybiByZXNvdXJjZTsKK30KKwordm9p
ZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZG9jdW1lbnREaWRGaW5pc2hMb2FkRXZlbnQoKQorewor
ICAgIG1fdmFsaWRhdGVkVVJMcy5jbGVhcigpOworfQorCitDYWNoZWRSZXNvdXJjZUhhbmRsZTxD
YWNoZWRSZXNvdXJjZT4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJldmFsaWRhdGVSZXNvdXJjZShj
b25zdCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIENhY2hlZFJlc291cmNlKiByZXNv
dXJjZSkKK3sKKyAgICBBU1NFUlQocmVzb3VyY2UpOworICAgIEFTU0VSVChyZXNvdXJjZS0+aW5D
YWNoZSgpKTsKKyAgICBhdXRvJiBtZW1vcnlDYWNoZSA9IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24o
KTsKKyAgICBBU1NFUlQoIW1lbW9yeUNhY2hlLmRpc2FibGVkKCkpOworICAgIEFTU0VSVChyZXNv
dXJjZS0+Y2FuVXNlQ2FjaGVWYWxpZGF0b3IoKSk7CisgICAgQVNTRVJUKCFyZXNvdXJjZS0+cmVz
b3VyY2VUb1JldmFsaWRhdGUoKSk7CisgICAgQVNTRVJUKHJlc291cmNlLT5zZXNzaW9uSUQoKSA9
PSBzZXNzaW9uSUQoKSk7CisgICAgQVNTRVJUKHJlc291cmNlLT5hbGxvd3NDYWNoaW5nKCkpOwor
CisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IG5ld1Jlc291cmNlID0g
Y3JlYXRlUmVzb3VyY2UocmVzb3VyY2UtPnR5cGUoKSwgcmVzb3VyY2UtPnJlc291cmNlUmVxdWVz
dCgpLCByZXNvdXJjZS0+ZW5jb2RpbmcoKSwgcmVzb3VyY2UtPnNlc3Npb25JRCgpKTsKKworICAg
IExPRyhSZXNvdXJjZUxvYWRpbmcsICJSZXNvdXJjZSAlcCBjcmVhdGVkIHRvIHJldmFsaWRhdGUg
JXAiLCBuZXdSZXNvdXJjZS5nZXQoKSwgcmVzb3VyY2UpOworICAgIG5ld1Jlc291cmNlLT5zZXRS
ZXNvdXJjZVRvUmV2YWxpZGF0ZShyZXNvdXJjZSk7CisgICAgCisgICAgbWVtb3J5Q2FjaGUucmVt
b3ZlKCpyZXNvdXJjZSk7CisgICAgbWVtb3J5Q2FjaGUuYWRkKCpuZXdSZXNvdXJjZSk7CisjaWYg
RU5BQkxFKFdFQl9USU1JTkcpCisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkucmVzb3VyY2VUaW1pbmdFbmFibGVkKCkpCisgICAgICAgIG1fcmVzb3VyY2VU
aW1pbmdJbmZvLnN0b3JlUmVzb3VyY2VUaW1pbmdJbml0aWF0b3JJbmZvcm1hdGlvbihuZXdSZXNv
dXJjZSwgcmVxdWVzdCwgZnJhbWUoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0
KTsKKyNlbmRpZgorICAgIHJldHVybiBuZXdSZXNvdXJjZTsKK30KKworQ2FjaGVkUmVzb3VyY2VI
YW5kbGU8Q2FjaGVkUmVzb3VyY2U+IENhY2hlZFJlc291cmNlTG9hZGVyOjpsb2FkUmVzb3VyY2Uo
Q2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
KQoreworICAgIGF1dG8mIG1lbW9yeUNhY2hlID0gTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpOwor
ICAgIEFTU0VSVCghcmVxdWVzdC5hbGxvd3NDYWNoaW5nKCkgfHwgIW1lbW9yeUNhY2hlLnJlc291
cmNlRm9yUmVxdWVzdChyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLCBzZXNzaW9uSUQoKSkpOwor
CisgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkxvYWRpbmcgQ2FjaGVkUmVzb3VyY2UgZm9yICcl
cycuIiwgcmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKS5zdHJpbmdDZW50ZXJFbGxpcHNp
emVkVG9MZW5ndGgoKS5sYXRpbjEoKS5kYXRhKCkpOworCisgICAgQ2FjaGVkUmVzb3VyY2VIYW5k
bGU8Q2FjaGVkUmVzb3VyY2U+IHJlc291cmNlID0gY3JlYXRlUmVzb3VyY2UodHlwZSwgcmVxdWVz
dC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCksIHJlcXVlc3QuY2hhcnNldCgpLCBzZXNzaW9uSUQo
KSk7CisKKyAgICBpZiAocmVxdWVzdC5hbGxvd3NDYWNoaW5nKCkgJiYgIW1lbW9yeUNhY2hlLmFk
ZCgqcmVzb3VyY2UpKQorICAgICAgICByZXNvdXJjZS0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VM
b2FkZXIodGhpcyk7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkucmVzb3VyY2VUaW1pbmdFbmFibGVkKCkpCisg
ICAgICAgIG1fcmVzb3VyY2VUaW1pbmdJbmZvLnN0b3JlUmVzb3VyY2VUaW1pbmdJbml0aWF0b3JJ
bmZvcm1hdGlvbihyZXNvdXJjZSwgcmVxdWVzdCwgZnJhbWUoKSk7CisjZW5kaWYKKyAgICByZXR1
cm4gcmVzb3VyY2U7Cit9CisKK3N0YXRpYyB2b2lkIGxvZ1JldmFsaWRhdGlvbihjb25zdCBTdHJp
bmcmIHJlYXNvbiwgRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQmIGxvZ0NsaWVudCkKK3sKKyAgICBs
b2dDbGllbnQubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzOjpjYWNoZWRSZXNvdXJjZVJldmFsaWRhdGlvbktleSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6OnJlYXNvbktleSgpLCByZWFzb24sIFNob3VsZFNhbXBsZTo6WWVzKTsKK30KKworc3RhdGlj
IHZvaWQgbG9nUmVzb3VyY2VSZXZhbGlkYXRpb25EZWNpc2lvbihDYWNoZWRSZXNvdXJjZTo6UmV2
YWxpZGF0aW9uRGVjaXNpb24gcmVhc29uLCBjb25zdCBGcmFtZSogZnJhbWUpCit7CisgICAgaWYg
KCFmcmFtZSB8fCAhZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8mIGxv
Z0NsaWVudCA9IGZyYW1lLT5wYWdlKCktPmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCk7CisgICAg
c3dpdGNoIChyZWFzb24pIHsKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpSZXZhbGlkYXRpb25E
ZWNpc2lvbjo6Tm86CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJl
dmFsaWRhdGlvbkRlY2lzaW9uOjpZZXNEdWVUb0V4cGlyZWQ6CisgICAgICAgIGxvZ1JldmFsaWRh
dGlvbihEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmlzRXhwaXJlZEtleSgpLCBsb2dDbGllbnQpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpSZXZhbGlkYXRpb25EZWNp
c2lvbjo6WWVzRHVlVG9Ob1N0b3JlOgorICAgICAgICBsb2dSZXZhbGlkYXRpb24oRGlhZ25vc3Rp
Y0xvZ2dpbmdLZXlzOjpub1N0b3JlS2V5KCksIGxvZ0NsaWVudCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJldmFsaWRhdGlvbkRlY2lzaW9uOjpZZXNEdWVUb05v
Q2FjaGU6CisgICAgICAgIGxvZ1JldmFsaWRhdGlvbihEaWFnbm9zdGljTG9nZ2luZ0tleXM6Om5v
Q2FjaGVLZXkoKSwgbG9nQ2xpZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWNoZWRS
ZXNvdXJjZTo6UmV2YWxpZGF0aW9uRGVjaXNpb246Olllc0R1ZVRvQ2FjaGVQb2xpY3k6CisgICAg
ICAgIGxvZ1JldmFsaWRhdGlvbihEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlbG9hZEtleSgpLCBs
b2dDbGllbnQpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0NhY2hlZFJlc291cmNlTG9h
ZGVyOjpSZXZhbGlkYXRpb25Qb2xpY3kgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRldGVybWluZVJl
dmFsaWRhdGlvblBvbGljeShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3QmIGNhY2hlZFJlc291cmNlUmVxdWVzdCwgQ2FjaGVkUmVzb3VyY2UqIGV4aXN0aW5n
UmVzb3VyY2UpIGNvbnN0Cit7CisgICAgYXV0byYgcmVxdWVzdCA9IGNhY2hlZFJlc291cmNlUmVx
dWVzdC5yZXNvdXJjZVJlcXVlc3QoKTsKKworICAgIGlmICghZXhpc3RpbmdSZXNvdXJjZSkKKyAg
ICAgICAgcmV0dXJuIExvYWQ7CisKKyAgICAvLyBXZSBhbHJlYWR5IGhhdmUgYSBwcmVsb2FkIGdv
aW5nIGZvciB0aGlzIFVSTC4KKyAgICBpZiAoY2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmZvclByZWxv
YWQoKSAmJiBleGlzdGluZ1Jlc291cmNlLT5pc1ByZWxvYWRlZCgpKQorICAgICAgICByZXR1cm4g
VXNlOworCisgICAgLy8gSWYgdGhlIHNhbWUgVVJMIGhhcyBiZWVuIGxvYWRlZCBhcyBhIGRpZmZl
cmVudCB0eXBlLCB3ZSBuZWVkIHRvIHJlbG9hZC4KKyAgICBpZiAoZXhpc3RpbmdSZXNvdXJjZS0+
dHlwZSgpICE9IHR5cGUpIHsKKyAgICAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJl
c291cmNlTG9hZGVyOjpkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3kgcmVsb2FkaW5nIGR1ZSB0
byB0eXBlIG1pc21hdGNoLiIpOworICAgICAgICBsb2dNZW1vcnlDYWNoZVJlc291cmNlUmVxdWVz
dChmcmFtZSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmluTWVtb3J5Q2FjaGVLZXkoKSwgRGlh
Z25vc3RpY0xvZ2dpbmdLZXlzOjp1bnVzZWRSZWFzb25UeXBlTWlzbWF0Y2hLZXkoKSk7CisgICAg
ICAgIHJldHVybiBSZWxvYWQ7CisgICAgfQorCisgICAgaWYgKCFleGlzdGluZ1Jlc291cmNlLT52
YXJ5SGVhZGVyVmFsdWVzTWF0Y2gocmVxdWVzdCwgKnRoaXMpKQorICAgICAgICByZXR1cm4gUmVs
b2FkOworCisgICAgYXV0byogdGV4dERlY29kZXIgPSBleGlzdGluZ1Jlc291cmNlLT50ZXh0UmVz
b3VyY2VEZWNvZGVyKCk7CisgICAgaWYgKHRleHREZWNvZGVyICYmICF0ZXh0RGVjb2Rlci0+aGFz
RXF1YWxFbmNvZGluZ0ZvckNoYXJzZXQoY2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNoYXJzZXQoKSkp
CisgICAgICAgIHJldHVybiBSZWxvYWQ7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSB0
aGUgc2FtZSBjYWNoZSBwb2xpY3kgZm9yIGFsbCByZXNvdXJjZSB0eXBlcy4gVGhlIHJhdyByZXNv
dXJjZSBwb2xpY3kgaXMgb3Zlcmx5IHN0cmljdAorICAgIC8vICAgICAgICB3aGlsZSB0aGUgbm9y
bWFsIHN1YnJlc291cmNlIHBvbGljeSBpcyB0b28gbG9vc2UuCisgICAgaWYgKGV4aXN0aW5nUmVz
b3VyY2UtPmlzTWFpbk9yTWVkaWFPclJhd1Jlc291cmNlKCkgJiYgZnJhbWUoKSkgeworICAgICAg
ICBib29sIHN0cmljdFBvbGljeURpc2FibGVkID0gZnJhbWUoKS0+bG9hZGVyKCkuaXNTdHJpY3RS
YXdSZXNvdXJjZVZhbGlkYXRpb25Qb2xpY3lEaXNhYmxlZEZvclRlc3RpbmcoKTsKKyAgICAgICAg
Ym9vbCBjYW5SZXVzZVJhd1Jlc291cmNlID0gc3RyaWN0UG9saWN5RGlzYWJsZWQgfHwgZG93bmNh
c3Q8Q2FjaGVkUmF3UmVzb3VyY2U+KCpleGlzdGluZ1Jlc291cmNlKS5jYW5SZXVzZShyZXF1ZXN0
KTsKKyAgICAgICAgaWYgKCFjYW5SZXVzZVJhd1Jlc291cmNlKQorICAgICAgICAgICAgcmV0dXJu
IFJlbG9hZDsKKyAgICB9CisKKyAgICAvLyBDb25kaXRpb25hbCByZXF1ZXN0cyBzaG91bGQgaGF2
ZSBmYWlsZWQgY2FuUmV1c2UgY2hlY2suCisgICAgQVNTRVJUKCFyZXF1ZXN0LmlzQ29uZGl0aW9u
YWwoKSk7CisKKyAgICAvLyBEbyBub3QgbG9hZCBmcm9tIGNhY2hlIGlmIGltYWdlcyBhcmUgbm90
IGVuYWJsZWQuIFRoZSBsb2FkIGZvciB0aGlzIGltYWdlIHdpbGwgYmUgYmxvY2tlZAorICAgIC8v
IGluIENhY2hlZEltYWdlOjpsb2FkLgorICAgIGlmIChjYWNoZWRSZXNvdXJjZVJlcXVlc3QuZGVm
ZXIoKSA9PSBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OkRlZmVycmVkQnlDbGllbnQpCisgICAgICAg
IHJldHVybiBSZWxvYWQ7CisKKyAgICAvLyBEb24ndCByZWxvYWQgcmVzb3VyY2VzIHdoaWxlIHBh
c3RpbmcuCisgICAgaWYgKG1fYWxsb3dTdGFsZVJlc291cmNlcykKKyAgICAgICAgcmV0dXJuIFVz
ZTsKKworICAgIC8vIEFsd2F5cyB1c2UgcHJlbG9hZHMuCisgICAgaWYgKGV4aXN0aW5nUmVzb3Vy
Y2UtPmlzUHJlbG9hZGVkKCkpCisgICAgICAgIHJldHVybiBVc2U7CisKKyAgICAvLyBXZSBjYW4g
ZmluZCByZXNvdXJjZXMgdGhhdCBhcmUgYmVpbmcgdmFsaWRhdGVkIGZyb20gY2FjaGUgb25seSB3
aGVuIHZhbGlkYXRpb24gaXMganVzdCBzdWNjZXNzZnVsbHkgY29tcGxldGluZy4KKyAgICBpZiAo
ZXhpc3RpbmdSZXNvdXJjZS0+dmFsaWRhdGlvbkNvbXBsZXRpbmcoKSkKKyAgICAgICAgcmV0dXJu
IFVzZTsKKyAgICBBU1NFUlQoIWV4aXN0aW5nUmVzb3VyY2UtPnZhbGlkYXRpb25JblByb2dyZXNz
KCkpOworCisgICAgLy8gVmFsaWRhdGUgdGhlIHJlZGlyZWN0IGNoYWluLgorICAgIGJvb2wgY2Fj
aGVQb2xpY3lJc0hpc3RvcnlCdWZmZXIgPSBjYWNoZVBvbGljeSh0eXBlKSA9PSBDYWNoZVBvbGlj
eUhpc3RvcnlCdWZmZXI7CisgICAgaWYgKCFleGlzdGluZ1Jlc291cmNlLT5yZWRpcmVjdENoYWlu
QWxsb3dzUmV1c2UoY2FjaGVQb2xpY3lJc0hpc3RvcnlCdWZmZXIgPyBSZXVzZUV4cGlyZWRSZWRp
cmVjdGlvbiA6IERvTm90UmV1c2VFeHBpcmVkUmVkaXJlY3Rpb24pKSB7CisgICAgICAgIExPRyhS
ZXNvdXJjZUxvYWRpbmcsICJDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGV0ZXJtaW5lUmV2YWxpZGF0
aW9uUG9saWN5IHJlbG9hZGluZyBkdWUgdG8gbm90IGNhY2hlZCBvciBleHBpcmVkIHJlZGlyZWN0
aW9ucy4iKTsKKyAgICAgICAgbG9nTWVtb3J5Q2FjaGVSZXNvdXJjZVJlcXVlc3QoZnJhbWUoKSwg
RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjppbk1lbW9yeUNhY2hlS2V5KCksIERpYWdub3N0aWNMb2dn
aW5nS2V5czo6dW51c2VkUmVhc29uUmVkaXJlY3RDaGFpbktleSgpKTsKKyAgICAgICAgcmV0dXJu
IFJlbG9hZDsKKyAgICB9CisKKyAgICAvLyBDYWNoZVBvbGljeUhpc3RvcnlCdWZmZXIgdXNlcyB0
aGUgY2FjaGUgZXhjZXB0IGlmIHRoaXMgaXMgYSBtYWluIHJlc291cmNlIHdpdGggImNhY2hlLWNv
bnRyb2w6IG5vLXN0b3JlIi4KKyAgICBpZiAoY2FjaGVQb2xpY3lJc0hpc3RvcnlCdWZmZXIpIHsK
KyAgICAgICAgLy8gRklYTUU6IElnbm9yaW5nICJjYWNoZS1jb250cm9sOiBuby1jYWNoZSIgZm9y
IHN1Yi1yZXNvdXJjZXMgb24gaGlzdG9yeSBuYXZpZ2F0aW9uIGJ1dCBub3QgdGhlIG1haW4KKyAg
ICAgICAgLy8gcmVzb3VyY2UgaXMgaW5jb25zaXN0ZW50LiBXZSBzaG91bGQgcHJvYmFibHkgaGFy
bW9uaXplIHRoaXMuCisgICAgICAgIGlmICghZXhpc3RpbmdSZXNvdXJjZS0+cmVzcG9uc2UoKS5j
YWNoZUNvbnRyb2xDb250YWluc05vU3RvcmUoKSB8fCB0eXBlICE9IENhY2hlZFJlc291cmNlOjpN
YWluUmVzb3VyY2UpCisgICAgICAgICAgICByZXR1cm4gVXNlOworICAgIH0KKworICAgIC8vIERv
bid0IHJldXNlIHJlc291cmNlcyB3aXRoIENhY2hlLWNvbnRyb2w6IG5vLXN0b3JlLgorICAgIGlm
IChleGlzdGluZ1Jlc291cmNlLT5yZXNwb25zZSgpLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9y
ZSgpKSB7CisgICAgICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6ZGV0ZXJtaW5lUmV2YWxpZGF0aW9uUG9saWN5IHJlbG9hZGluZyBkdWUgdG8gQ2FjaGUtY29u
dHJvbDogbm8tc3RvcmUuIik7CisgICAgICAgIGxvZ01lbW9yeUNhY2hlUmVzb3VyY2VSZXF1ZXN0
KGZyYW1lKCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6aW5NZW1vcnlDYWNoZUtleSgpLCBEaWFn
bm9zdGljTG9nZ2luZ0tleXM6OnVudXNlZFJlYXNvbk5vU3RvcmVLZXkoKSk7CisgICAgICAgIHJl
dHVybiBSZWxvYWQ7CisgICAgfQorCisgICAgLy8gSWYgY3JlZGVudGlhbHMgd2VyZSBzZW50IHdp
dGggdGhlIHByZXZpb3VzIHJlcXVlc3QgYW5kIHdvbid0IGJlCisgICAgLy8gd2l0aCB0aGlzIG9u
ZSwgb3IgdmljZSB2ZXJzYSwgcmUtZmV0Y2ggdGhlIHJlc291cmNlLgorICAgIC8vCisgICAgLy8g
VGhpcyBoZWxwcyB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZSBzZXJ2ZXIgc2VuZHMgYmFjaworICAg
IC8vICJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW46ICoiIGFsbCB0aGUgdGltZSwgYnV0IHNv
bWUgb2YgdGhlCisgICAgLy8gY2xpZW50J3MgcmVxdWVzdHMgYXJlIG1hZGUgd2l0aG91dCBDT1JT
IGFuZCBzb21lIHdpdGguCisgICAgaWYgKGV4aXN0aW5nUmVzb3VyY2UtPnJlc291cmNlUmVxdWVz
dCgpLmFsbG93Q29va2llcygpICE9IHJlcXVlc3QuYWxsb3dDb29raWVzKCkpIHsKKyAgICAgICAg
TE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlTG9hZGVyOjpkZXRlcm1pbmVSZXZh
bGlkYXRpb25Qb2xpY3kgcmVsb2FkaW5nIGR1ZSB0byBkaWZmZXJlbmNlIGluIGNyZWRlbnRpYWxz
IHNldHRpbmdzLiIpOworICAgICAgICBsb2dNZW1vcnlDYWNoZVJlc291cmNlUmVxdWVzdChmcmFt
ZSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmluTWVtb3J5Q2FjaGVLZXkoKSwgRGlhZ25vc3Rp
Y0xvZ2dpbmdLZXlzOjp1bnVzZWRSZWFzb25DcmVkZW50aWFsU2V0dGluZ3NLZXkoKSk7CisgICAg
ICAgIHJldHVybiBSZWxvYWQ7CisgICAgfQorCisgICAgLy8gRHVyaW5nIHRoZSBpbml0aWFsIGxv
YWQsIGF2b2lkIGxvYWRpbmcgdGhlIHNhbWUgcmVzb3VyY2UgbXVsdGlwbGUgdGltZXMgZm9yIGEg
c2luZ2xlIGRvY3VtZW50LCBldmVuIGlmIHRoZSBjYWNoZSBwb2xpY2llcyB3b3VsZCB0ZWxsIHVz
IHRvLgorICAgIGlmIChkb2N1bWVudCgpICYmICFkb2N1bWVudCgpLT5sb2FkRXZlbnRGaW5pc2hl
ZCgpICYmIG1fdmFsaWRhdGVkVVJMcy5jb250YWlucyhleGlzdGluZ1Jlc291cmNlLT51cmwoKSkp
CisgICAgICAgIHJldHVybiBVc2U7CisKKyAgICAvLyBDYWNoZVBvbGljeVJlbG9hZCBhbHdheXMg
cmVsb2FkcworICAgIGlmIChjYWNoZVBvbGljeSh0eXBlKSA9PSBDYWNoZVBvbGljeVJlbG9hZCkg
eworICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRl
dGVybWluZVJldmFsaWRhdGlvblBvbGljeSByZWxvYWRpbmcgZHVlIHRvIENhY2hlUG9saWN5UmVs
b2FkLiIpOworICAgICAgICBsb2dNZW1vcnlDYWNoZVJlc291cmNlUmVxdWVzdChmcmFtZSgpLCBE
aWFnbm9zdGljTG9nZ2luZ0tleXM6OmluTWVtb3J5Q2FjaGVLZXkoKSwgRGlhZ25vc3RpY0xvZ2dp
bmdLZXlzOjp1bnVzZWRSZWFzb25SZWxvYWRLZXkoKSk7CisgICAgICAgIHJldHVybiBSZWxvYWQ7
CisgICAgfQorICAgIAorICAgIC8vIFdlJ2xsIHRyeSB0byByZWxvYWQgdGhlIHJlc291cmNlIGlm
IGl0IGZhaWxlZCBsYXN0IHRpbWUuCisgICAgaWYgKGV4aXN0aW5nUmVzb3VyY2UtPmVycm9yT2Nj
dXJyZWQoKSkgeworICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2VM
b2FkZXI6OmRldGVybWluZVJldmFsaWRhdGlvblBvbGljeWUgcmVsb2FkaW5nIGR1ZSB0byByZXNv
dXJjZSBiZWluZyBpbiB0aGUgZXJyb3Igc3RhdGUiKTsKKyAgICAgICAgbG9nTWVtb3J5Q2FjaGVS
ZXNvdXJjZVJlcXVlc3QoZnJhbWUoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjppbk1lbW9yeUNh
Y2hlS2V5KCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6dW51c2VkUmVhc29uRXJyb3JLZXkoKSk7
CisgICAgICAgIHJldHVybiBSZWxvYWQ7CisgICAgfQorICAgIAorICAgIC8vIEZvciByZXNvdXJj
ZXMgdGhhdCBhcmUgbm90IHlldCBsb2FkZWQgd2UgaWdub3JlIHRoZSBjYWNoZSBwb2xpY3kuCisg
ICAgaWYgKGV4aXN0aW5nUmVzb3VyY2UtPmlzTG9hZGluZygpKQorICAgICAgICByZXR1cm4gVXNl
OworCisgICAgYXV0byByZXZhbGlkYXRpb25EZWNpc2lvbiA9IGV4aXN0aW5nUmVzb3VyY2UtPm1h
a2VSZXZhbGlkYXRpb25EZWNpc2lvbihjYWNoZVBvbGljeSh0eXBlKSk7CisgICAgbG9nUmVzb3Vy
Y2VSZXZhbGlkYXRpb25EZWNpc2lvbihyZXZhbGlkYXRpb25EZWNpc2lvbiwgZnJhbWUoKSk7CisK
KyAgICAvLyBDaGVjayBpZiB0aGUgY2FjaGUgaGVhZGVycyByZXF1aXJlcyB1cyB0byByZXZhbGlk
YXRlIChjYWNoZSBleHBpcmF0aW9uIGZvciBleGFtcGxlKS4KKyAgICBpZiAocmV2YWxpZGF0aW9u
RGVjaXNpb24gIT0gQ2FjaGVkUmVzb3VyY2U6OlJldmFsaWRhdGlvbkRlY2lzaW9uOjpObykgewor
ICAgICAgICAvLyBTZWUgaWYgdGhlIHJlc291cmNlIGhhcyB1c2FibGUgRVRhZyBvciBMYXN0LW1v
ZGlmaWVkIGhlYWRlcnMuCisgICAgICAgIGlmIChleGlzdGluZ1Jlc291cmNlLT5jYW5Vc2VDYWNo
ZVZhbGlkYXRvcigpKQorICAgICAgICAgICAgcmV0dXJuIFJldmFsaWRhdGU7CisgICAgICAgIAor
ICAgICAgICAvLyBObywgbXVzdCByZWxvYWQuCisgICAgICAgIExPRyhSZXNvdXJjZUxvYWRpbmcs
ICJDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGV0ZXJtaW5lUmV2YWxpZGF0aW9uUG9saWN5IHJlbG9h
ZGluZyBkdWUgdG8gbWlzc2luZyBjYWNoZSB2YWxpZGF0b3JzLiIpOworICAgICAgICBsb2dNZW1v
cnlDYWNoZVJlc291cmNlUmVxdWVzdChmcmFtZSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6Omlu
TWVtb3J5Q2FjaGVLZXkoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjp1bnVzZWRSZWFzb25NdXN0
UmV2YWxpZGF0ZU5vVmFsaWRhdG9yS2V5KCkpOworICAgICAgICByZXR1cm4gUmVsb2FkOworICAg
IH0KKworICAgIHJldHVybiBVc2U7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnBy
aW50QWNjZXNzRGVuaWVkTWVzc2FnZShjb25zdCBVUkwmIHVybCkgY29uc3QKK3sKKyAgICBpZiAo
dXJsLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWZyYW1lKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFN0cmluZyBtZXNzYWdlOworICAgIGlmICghbV9kb2N1bWVudCB8
fCBtX2RvY3VtZW50LT51cmwoKS5pc051bGwoKSkKKyAgICAgICAgbWVzc2FnZSA9ICJVbnNhZmUg
YXR0ZW1wdCB0byBsb2FkIFVSTCAiICsgdXJsLnN0cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0
aCgpICsgJy4nOworICAgIGVsc2UKKyAgICAgICAgbWVzc2FnZSA9ICJVbnNhZmUgYXR0ZW1wdCB0
byBsb2FkIFVSTCAiICsgdXJsLnN0cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpICsgIiBm
cm9tIGZyYW1lIHdpdGggVVJMICIgKyBtX2RvY3VtZW50LT51cmwoKS5zdHJpbmdDZW50ZXJFbGxp
cHNpemVkVG9MZW5ndGgoKSArICIuIERvbWFpbnMsIHByb3RvY29scyBhbmQgcG9ydHMgbXVzdCBt
YXRjaC5cbiI7CisKKyAgICBmcmFtZSgpLT5kb2N1bWVudCgpLT5hZGRDb25zb2xlTWVzc2FnZShN
ZXNzYWdlU291cmNlOjpTZWN1cml0eSwgTWVzc2FnZUxldmVsOjpFcnJvciwgbWVzc2FnZSk7Cit9
CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnNldEF1dG9Mb2FkSW1hZ2VzKGJvb2wgZW5h
YmxlKQoreworICAgIGlmIChlbmFibGUgPT0gbV9hdXRvTG9hZEltYWdlcykKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9hdXRvTG9hZEltYWdlcyA9IGVuYWJsZTsKKworICAgIGlmICghbV9hdXRv
TG9hZEltYWdlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVsb2FkSW1hZ2VzSWZOb3REZWZl
cnJlZCgpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpzZXRJbWFnZXNFbmFibGVk
KGJvb2wgZW5hYmxlKQoreworICAgIGlmIChlbmFibGUgPT0gbV9pbWFnZXNFbmFibGVkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2ltYWdlc0VuYWJsZWQgPSBlbmFibGU7CisKKyAgICBpZiAo
IW1faW1hZ2VzRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVsb2FkSW1hZ2VzSWZO
b3REZWZlcnJlZCgpOworfQorCitib29sIENhY2hlZFJlc291cmNlTG9hZGVyOjpjbGllbnREZWZl
cnNJbWFnZShjb25zdCBVUkwmKSBjb25zdAoreworICAgIHJldHVybiAhbV9pbWFnZXNFbmFibGVk
OworfQorCitib29sIENhY2hlZFJlc291cmNlTG9hZGVyOjpzaG91bGRQZXJmb3JtSW1hZ2VMb2Fk
KGNvbnN0IFVSTCYgdXJsKSBjb25zdAoreworICAgIHJldHVybiBtX2F1dG9Mb2FkSW1hZ2VzIHx8
IHVybC5wcm90b2NvbElzRGF0YSgpOworfQorCitib29sIENhY2hlZFJlc291cmNlTG9hZGVyOjpz
aG91bGREZWZlckltYWdlTG9hZChjb25zdCBVUkwmIHVybCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Y2xpZW50RGVmZXJzSW1hZ2UodXJsKSB8fCAhc2hvdWxkUGVyZm9ybUltYWdlTG9hZCh1cmwpOwor
fQorCit2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZWxvYWRJbWFnZXNJZk5vdERlZmVycmVk
KCkKK3sKKyAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogbV9kb2N1bWVudFJlc291cmNlcy52YWx1
ZXMoKSkgeworICAgICAgICBpZiAoaXM8Q2FjaGVkSW1hZ2U+KCpyZXNvdXJjZSkgJiYgcmVzb3Vy
Y2UtPnN0aWxsTmVlZHNMb2FkKCkgJiYgIWNsaWVudERlZmVyc0ltYWdlKHJlc291cmNlLT51cmwo
KSkpCisgICAgICAgICAgICBkb3duY2FzdDxDYWNoZWRJbWFnZT4oKnJlc291cmNlKS5sb2FkKCp0
aGlzLCBkZWZhdWx0Q2FjaGVkUmVzb3VyY2VPcHRpb25zKCkpOworICAgIH0KK30KKworQ2FjaGVQ
b2xpY3kgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNhY2hlUG9saWN5KENhY2hlZFJlc291cmNlOjpU
eXBlIHR5cGUpIGNvbnN0Cit7CisgICAgRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKKyAg
ICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gQ2FjaGVQb2xpY3lWZXJpZnk7CisKKyAgICBp
ZiAodHlwZSAhPSBDYWNoZWRSZXNvdXJjZTo6TWFpblJlc291cmNlKQorICAgICAgICByZXR1cm4g
ZnJhbWUtPmxvYWRlcigpLnN1YnJlc291cmNlQ2FjaGVQb2xpY3koKTsKKworICAgIGlmIChQYWdl
KiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkgeworICAgICAgICBpZiAocGFnZS0+aXNSZXNvdXJjZUNh
Y2hpbmdEaXNhYmxlZCgpKQorICAgICAgICAgICAgcmV0dXJuIENhY2hlUG9saWN5UmVsb2FkOwor
ICAgIH0KKworICAgIHN3aXRjaCAoZnJhbWUtPmxvYWRlcigpLmxvYWRUeXBlKCkpIHsKKyAgICBj
YXNlIEZyYW1lTG9hZFR5cGU6OlJlbG9hZEZyb21PcmlnaW46CisgICAgY2FzZSBGcmFtZUxvYWRU
eXBlOjpSZWxvYWQ6CisgICAgICAgIHJldHVybiBDYWNoZVBvbGljeVJlbG9hZDsKKyAgICBjYXNl
IEZyYW1lTG9hZFR5cGU6OkJhY2s6CisgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpGb3J3YXJkOgor
ICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkOgorICAgICAgICAvLyBE
byBub3QgcmV2YWxpZGF0ZSBjYWNoZWQgbWFpbiByZXNvdXJjZSBvbiBiYWNrL2ZvcndhcmQgbmF2
aWdhdGlvbi4KKyAgICAgICAgcmV0dXJuIENhY2hlUG9saWN5SGlzdG9yeUJ1ZmZlcjsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gQ2FjaGVQb2xpY3lWZXJpZnk7CisgICAgfQorfQorCit2
b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZW1vdmVDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNv
dXJjZSYgcmVzb3VyY2UpCit7CisjaWZuZGVmIE5ERUJVRworICAgIERvY3VtZW50UmVzb3VyY2VN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5maW5kKHJlc291cmNlLnVybCgp
KTsKKyAgICBpZiAoaXQgIT0gbV9kb2N1bWVudFJlc291cmNlcy5lbmQoKSkKKyAgICAgICAgQVNT
RVJUKGl0LT52YWx1ZS5nZXQoKSA9PSAmcmVzb3VyY2UpOworI2VuZGlmCisgICAgbV9kb2N1bWVu
dFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UudXJsKCkpOworfQorCit2b2lkIENhY2hlZFJlc291
cmNlTG9hZGVyOjpsb2FkRG9uZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGJvb2wgc2hvdWxk
UGVyZm9ybVBvc3RMb2FkQWN0aW9ucykKK3sKKyAgICBSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IHBy
b3RlY3REb2N1bWVudExvYWRlcihtX2RvY3VtZW50TG9hZGVyKTsKKyAgICBSZWZQdHI8RG9jdW1l
bnQ+IHByb3RlY3REb2N1bWVudChtX2RvY3VtZW50KTsKKworI2lmIEVOQUJMRShXRUJfVElNSU5H
KQorICAgIGlmIChyZXNvdXJjZSAmJiBkb2N1bWVudCgpICYmIFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkucmVzb3VyY2VUaW1pbmdFbmFibGVkKCkpCisgICAgICAgIG1f
cmVzb3VyY2VUaW1pbmdJbmZvLmFkZFJlc291cmNlVGltaW5nKHJlc291cmNlLCAqZG9jdW1lbnQo
KSwgcmVzb3VyY2UtPmxvYWRlcigpLT5sb2FkVGltaW5nKCkpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0ocmVzb3VyY2UpOworI2VuZGlmCisKKyAgICBpZiAoZnJhbWUoKSkKKyAgICAgICAgZnJh
bWUoKS0+bG9hZGVyKCkubG9hZERvbmUoKTsKKworICAgIGlmIChzaG91bGRQZXJmb3JtUG9zdExv
YWRBY3Rpb25zKQorICAgICAgICBwZXJmb3JtUG9zdExvYWRBY3Rpb25zKCk7CisKKyAgICBpZiAo
IW1fZ2FyYmFnZUNvbGxlY3REb2N1bWVudFJlc291cmNlc1RpbWVyLmlzQWN0aXZlKCkpCisgICAg
ICAgIG1fZ2FyYmFnZUNvbGxlY3REb2N1bWVudFJlc291cmNlc1RpbWVyLnN0YXJ0T25lU2hvdCgw
KTsKK30KKworLy8gR2FyYmFnZSBjb2xsZWN0aW5nIG1fZG9jdW1lbnRSZXNvdXJjZXMgaXMgYSB3
b3JrYXJvdW5kIGZvciB0aGUKKy8vIENhY2hlZFJlc291cmNlSGFuZGxlcyBvbiB0aGUgUkhTIGJl
aW5nIHN0cm9uZyByZWZlcmVuY2VzLiBJZGVhbGx5IHRoaXMKKy8vIHdvdWxkIGJlIGEgd2VhayBt
YXAsIGhvd2V2ZXIgQ2FjaGVkUmVzb3VyY2VIYW5kbGVzIHBlcmZvcm0gYWRkaXRpb25hbAorLy8g
Ym9va2tlZXBpbmcgb24gQ2FjaGVkUmVzb3VyY2VzLCBzbyBpbnN0ZWFkIHBzZXVkby1HQyB0aGVt
IC0tIHdoZW4gdGhlCisvLyByZWZlcmVuY2UgY291bnQgcmVhY2hlcyAxLCBtX2RvY3VtZW50UmVz
b3VyY2VzIGlzIHRoZSBvbmx5IHJlZmVyZW5jZSwgc28KKy8vIHJlbW92ZSBpdCBmcm9tIHRoZSBt
YXAuCit2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpnYXJiYWdlQ29sbGVjdERvY3VtZW50UmVz
b3VyY2VzKCkKK3sKKyAgICB0eXBlZGVmIFZlY3RvcjxTdHJpbmcsIDEwPiBTdHJpbmdWZWN0b3I7
CisgICAgU3RyaW5nVmVjdG9yIHJlc291cmNlc1RvRGVsZXRlOworCisgICAgZm9yIChhdXRvJiBy
ZXNvdXJjZSA6IG1fZG9jdW1lbnRSZXNvdXJjZXMpIHsKKyAgICAgICAgaWYgKHJlc291cmNlLnZh
bHVlLT5oYXNPbmVIYW5kbGUoKSkgeworICAgICAgICAgICAgcmVzb3VyY2VzVG9EZWxldGUuYXBw
ZW5kKHJlc291cmNlLmtleSk7CisgICAgICAgICAgICByZXNvdXJjZS52YWx1ZS0+c2V0T3duaW5n
Q2FjaGVkUmVzb3VyY2VMb2FkZXIobnVsbHB0cik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
b3IgKGF1dG8mIHJlc291cmNlIDogcmVzb3VyY2VzVG9EZWxldGUpCisgICAgICAgIG1fZG9jdW1l
bnRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlKTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZUxv
YWRlcjo6cGVyZm9ybVBvc3RMb2FkQWN0aW9ucygpCit7CisgICAgY2hlY2tGb3JQZW5kaW5nUHJl
bG9hZHMoKTsKKworICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5z
ZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpp
bmNyZW1lbnRSZXF1ZXN0Q291bnQoY29uc3QgQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQorewor
ICAgIGlmIChyZXNvdXJjZS5pZ25vcmVGb3JSZXF1ZXN0Q291bnQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgKyttX3JlcXVlc3RDb3VudDsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6ZGVjcmVtZW50UmVxdWVzdENvdW50KGNvbnN0IENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkK
K3sKKyAgICBpZiAocmVzb3VyY2UuaWdub3JlRm9yUmVxdWVzdENvdW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIC0tbV9yZXF1ZXN0Q291bnQ7CisgICAgQVNTRVJUKG1fcmVxdWVzdENvdW50
ID4gLTEpOworfQorCitDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OnByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIFByZWxvYWRU
eXBlIHByZWxvYWRUeXBlKQoreworICAgIC8vIFdlIGFsd2F5cyBwcmVsb2FkIHJlc291cmNlcyBv
biBpT1MuIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMjc2
Pi4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIGFkZGluZyBhIHNldHRpbmcgdG8g
dG9nZ2xlIGFnZ3Jlc3NpdmUgcHJlbG9hZGluZyBiZWhhdmlvciBhcyBvcHBvc2VkCisgICAgLy8g
dG8gbWFraW5nIHRoaXMgYmVoYXZpb3Igc3BlY2lmaWMgdG8gaU9TLgorI2lmICFQTEFURk9STShJ
T1MpCisgICAgYm9vbCBoYXNSZW5kZXJpbmcgPSBtX2RvY3VtZW50LT5ib2R5T3JGcmFtZXNldCgp
ICYmIG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKTsKKyAgICBib29sIGNhbkJsb2NrUGFyc2VyID0g
dHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0IHx8IHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6
OkNTU1N0eWxlU2hlZXQ7CisgICAgaWYgKCFoYXNSZW5kZXJpbmcgJiYgIWNhbkJsb2NrUGFyc2Vy
ICYmIHByZWxvYWRUeXBlID09IEltcGxpY2l0UHJlbG9hZCkgeworICAgICAgICAvLyBEb24ndCBw
cmVsb2FkIHN1YnJlc291cmNlcyB0aGF0IGNhbid0IGJsb2NrIHRoZSBwYXJzZXIgYmVmb3JlIHdl
IGhhdmUgc29tZXRoaW5nIHRvIGRyYXcuCisgICAgICAgIC8vIFRoaXMgaGVscHMgcHJldmVudCBw
cmVsb2FkcyBmcm9tIGRlbGF5aW5nIGZpcnN0IGRpc3BsYXkgd2hlbiBiYW5kd2lkdGggaXMgbGlt
aXRlZC4KKyAgICAgICAgUGVuZGluZ1ByZWxvYWQgcGVuZGluZ1ByZWxvYWQgPSB7IHR5cGUsIHJl
cXVlc3QsIGNoYXJzZXQgfTsKKyAgICAgICAgbV9wZW5kaW5nUHJlbG9hZHMuYXBwZW5kKHBlbmRp
bmdQcmVsb2FkKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0ocHJlbG9hZFR5cGUpOworI2VuZGlmCisgICAgcmV0dXJuIHJlcXVlc3RQcmVs
b2FkKHR5cGUsIHJlcXVlc3QsIGNoYXJzZXQpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlTG9h
ZGVyOjpjaGVja0ZvclBlbmRpbmdQcmVsb2FkcygpIAoreworICAgIGlmIChtX3BlbmRpbmdQcmVs
b2Fkcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBib2R5ID0gbV9kb2N1
bWVudC0+Ym9keU9yRnJhbWVzZXQoKTsKKyAgICBpZiAoIWJvZHkgfHwgIWJvZHktPnJlbmRlcmVy
KCkpCisgICAgICAgIHJldHVybjsKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gV2UgYWx3YXlz
IHByZWxvYWQgcmVzb3VyY2VzIG9uIGlPUy4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTEyNzY+LgorICAgIC8vIFNvLCB3ZSBzaG91bGQgbmV2ZXIgaGF2ZSBh
bnkgcGVuZGluZyBwcmVsb2Fkcy4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGxvb2sgdG8gYXZv
aWQgY29tcGlsaW5nIHRoaXMgY29kZSBlbnRpcmVseSB3aGVuIGJ1aWxkaW5nIGZvciBpT1MuCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICB3aGlsZSAoIW1fcGVuZGluZ1By
ZWxvYWRzLmlzRW1wdHkoKSkgeworICAgICAgICBQZW5kaW5nUHJlbG9hZCBwcmVsb2FkID0gbV9w
ZW5kaW5nUHJlbG9hZHMudGFrZUZpcnN0KCk7CisgICAgICAgIC8vIERvbid0IHJlcXVlc3QgcHJl
bG9hZCBpZiB0aGUgcmVzb3VyY2UgYWxyZWFkeSBsb2FkZWQgbm9ybWFsbHkgKHRoaXMgd2lsbCBy
ZXN1bHQgaW4gZG91YmxlIGxvYWQgaWYgdGhlIHBhZ2UgaXMgYmVpbmcgcmVsb2FkZWQgd2l0aCBj
YWNoZWQgcmVzdWx0cyBpZ25vcmVkKS4KKyAgICAgICAgaWYgKCFjYWNoZWRSZXNvdXJjZShwcmVs
b2FkLm1fcmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKSkpCisgICAgICAgICAgICByZXF1
ZXN0UHJlbG9hZChwcmVsb2FkLm1fdHlwZSwgcHJlbG9hZC5tX3JlcXVlc3QsIHByZWxvYWQubV9j
aGFyc2V0KTsKKyAgICB9CisgICAgbV9wZW5kaW5nUHJlbG9hZHMuY2xlYXIoKTsKK30KKworQ2Fj
aGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IENhY2hlZFJlc291cmNlTG9hZGVyOjpy
ZXF1ZXN0UHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBDYWNoZWRSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKK3sKKyAgICBTdHJpbmcgZW5j
b2Rpbmc7CisgICAgaWYgKHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdCB8fCB0eXBlID09
IENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0KQorICAgICAgICBlbmNvZGluZyA9IGNoYXJz
ZXQuaXNFbXB0eSgpID8gbV9kb2N1bWVudC0+Y2hhcnNldCgpIDogY2hhcnNldDsKKworICAgIHJl
cXVlc3Quc2V0Q2hhcnNldChlbmNvZGluZyk7CisgICAgcmVxdWVzdC5zZXRGb3JQcmVsb2FkKHRy
dWUpOworCisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IHJlc291cmNl
ID0gcmVxdWVzdFJlc291cmNlKHR5cGUsIHJlcXVlc3QpOworICAgIGlmICghcmVzb3VyY2UgfHwg
KG1fcHJlbG9hZHMgJiYgbV9wcmVsb2Fkcy0+Y29udGFpbnMocmVzb3VyY2UuZ2V0KCkpKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgLy8gRm9udHMgbmVlZCBzcGVjaWFsIHRyZWF0bWVu
dCBzaW5jZSBqdXN0IGNyZWF0aW5nIHRoZSByZXNvdXJjZSBkb2Vzbid0IHRyaWdnZXIgYSBsb2Fk
LgorICAgIGlmICh0eXBlID09IENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2UpCisgICAgICAg
IGRvd25jYXN0PENhY2hlZEZvbnQ+KHJlc291cmNlLmdldCgpKS0+YmVnaW5Mb2FkSWZOZWVkZWQo
KnRoaXMpOworICAgIHJlc291cmNlLT5pbmNyZWFzZVByZWxvYWRDb3VudCgpOworCisgICAgaWYg
KCFtX3ByZWxvYWRzKQorICAgICAgICBtX3ByZWxvYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxMaXN0
SGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+PigpOworICAgIG1fcHJlbG9hZHMtPmFkZChyZXNvdXJj
ZS5nZXQoKSk7CisKKyNpZiBQUkVMT0FEX0RFQlVHCisgICAgcHJpbnRmKCJQUkVMT0FESU5HICVz
XG4iLCAgcmVzb3VyY2UtPnVybCgpLmxhdGluMSgpLmRhdGEoKSk7CisjZW5kaWYKKyAgICByZXR1
cm4gcmVzb3VyY2U7Cit9CisKK2Jvb2wgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmlzUHJlbG9hZGVk
KGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBjb25zdAoreworICAgIGNvbnN0IFVSTCYgdXJsID0g
bV9kb2N1bWVudC0+Y29tcGxldGVVUkwodXJsU3RyaW5nKTsKKworICAgIGlmIChtX3ByZWxvYWRz
KSB7CisgICAgICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiAqbV9wcmVsb2FkcykgeworICAgICAg
ICAgICAgaWYgKHJlc291cmNlLT51cmwoKSA9PSB1cmwpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIHBlbmRpbmdQcmVsb2Fk
IDogbV9wZW5kaW5nUHJlbG9hZHMpIHsKKyAgICAgICAgaWYgKHBlbmRpbmdQcmVsb2FkLm1fcmVx
dWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKSA9PSB1cmwpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENhY2hlZFJlc291cmNl
TG9hZGVyOjpjbGVhclByZWxvYWRzKCkKK3sKKyNpZiBQUkVMT0FEX0RFQlVHCisgICAgcHJpbnRQ
cmVsb2FkU3RhdHMoKTsKKyNlbmRpZgorICAgIGlmICghbV9wcmVsb2FkcykKKyAgICAgICAgcmV0
dXJuOworCisgICAgZm9yIChhdXRvKiByZXNvdXJjZSA6ICptX3ByZWxvYWRzKSB7CisgICAgICAg
IHJlc291cmNlLT5kZWNyZWFzZVByZWxvYWRDb3VudCgpOworICAgICAgICBib29sIGRlbGV0ZWQg
PSByZXNvdXJjZS0+ZGVsZXRlSWZQb3NzaWJsZSgpOworICAgICAgICBpZiAoIWRlbGV0ZWQgJiYg
cmVzb3VyY2UtPnByZWxvYWRSZXN1bHQoKSA9PSBDYWNoZWRSZXNvdXJjZTo6UHJlbG9hZE5vdFJl
ZmVyZW5jZWQpCisgICAgICAgICAgICBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkucmVtb3ZlKCpy
ZXNvdXJjZSk7CisgICAgfQorICAgIG1fcHJlbG9hZHMgPSBudWxscHRyOworfQorCit2b2lkIENh
Y2hlZFJlc291cmNlTG9hZGVyOjpjbGVhclBlbmRpbmdQcmVsb2FkcygpCit7CisgICAgbV9wZW5k
aW5nUHJlbG9hZHMuY2xlYXIoKTsKK30KKworI2lmIFBSRUxPQURfREVCVUcKK3ZvaWQgQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OnByaW50UHJlbG9hZFN0YXRzKCkKK3sKKyAgICB1bnNpZ25lZCBzY3Jp
cHRzID0gMDsKKyAgICB1bnNpZ25lZCBzY3JpcHRNaXNzZXMgPSAwOworICAgIHVuc2lnbmVkIHN0
eWxlc2hlZXRzID0gMDsKKyAgICB1bnNpZ25lZCBzdHlsZXNoZWV0TWlzc2VzID0gMDsKKyAgICB1
bnNpZ25lZCBpbWFnZXMgPSAwOworICAgIHVuc2lnbmVkIGltYWdlTWlzc2VzID0gMDsKKyAgICBm
b3IgKGF1dG8mIHJlc291cmNlIDogbV9wcmVsb2FkcykgeworICAgICAgICBpZiAocmVzb3VyY2Ut
PnByZWxvYWRSZXN1bHQoKSA9PSBDYWNoZWRSZXNvdXJjZTo6UHJlbG9hZE5vdFJlZmVyZW5jZWQp
CisgICAgICAgICAgICBwcmludGYoIiEhIFVOUkVGRVJFTkNFRCBQUkVMT0FEICVzXG4iLCByZXNv
dXJjZS0+dXJsKCkubGF0aW4xKCkuZGF0YSgpKTsKKyAgICAgICAgZWxzZSBpZiAocmVzb3VyY2Ut
PnByZWxvYWRSZXN1bHQoKSA9PSBDYWNoZWRSZXNvdXJjZTo6UHJlbG9hZFJlZmVyZW5jZWRXaGls
ZUNvbXBsZXRlKQorICAgICAgICAgICAgcHJpbnRmKCJISVQgQ09NUExFVEUgUFJFTE9BRCAlc1xu
IiwgcmVzb3VyY2UtPnVybCgpLmxhdGluMSgpLmRhdGEoKSk7CisgICAgICAgIGVsc2UgaWYgKHJl
c291cmNlLT5wcmVsb2FkUmVzdWx0KCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlByZWxvYWRSZWZlcmVu
Y2VkV2hpbGVMb2FkaW5nKQorICAgICAgICAgICAgcHJpbnRmKCJISVQgTE9BRElORyBQUkVMT0FE
ICVzXG4iLCByZXNvdXJjZS0+dXJsKCkubGF0aW4xKCkuZGF0YSgpKTsKKworICAgICAgICBpZiAo
cmVzb3VyY2UtPnR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0KSB7CisgICAgICAgICAg
ICBzY3JpcHRzKys7CisgICAgICAgICAgICBpZiAocmVzb3VyY2UtPnByZWxvYWRSZXN1bHQoKSA8
IENhY2hlZFJlc291cmNlOjpQcmVsb2FkUmVmZXJlbmNlZFdoaWxlTG9hZGluZykKKyAgICAgICAg
ICAgICAgICBzY3JpcHRNaXNzZXMrKzsKKyAgICAgICAgfSBlbHNlIGlmIChyZXNvdXJjZS0+dHlw
ZSgpID09IENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0KSB7CisgICAgICAgICAgICBzdHls
ZXNoZWV0cysrOworICAgICAgICAgICAgaWYgKHJlc291cmNlLT5wcmVsb2FkUmVzdWx0KCkgPCBD
YWNoZWRSZXNvdXJjZTo6UHJlbG9hZFJlZmVyZW5jZWRXaGlsZUxvYWRpbmcpCisgICAgICAgICAg
ICAgICAgc3R5bGVzaGVldE1pc3NlcysrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aW1hZ2VzKys7CisgICAgICAgICAgICBpZiAocmVzb3VyY2UtPnByZWxvYWRSZXN1bHQoKSA8IENh
Y2hlZFJlc291cmNlOjpQcmVsb2FkUmVmZXJlbmNlZFdoaWxlTG9hZGluZykKKyAgICAgICAgICAg
ICAgICBpbWFnZU1pc3NlcysrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlc291cmNlLT5l
cnJvck9jY3VycmVkKCkgJiYgcmVzb3VyY2UtPnByZWxvYWRSZXN1bHQoKSA9PSBDYWNoZWRSZXNv
dXJjZTo6UHJlbG9hZE5vdFJlZmVyZW5jZWQpCisgICAgICAgICAgICBNZW1vcnlDYWNoZTo6c2lu
Z2xldG9uKCkucmVtb3ZlKHJlc291cmNlKTsKKworICAgICAgICByZXNvdXJjZS0+ZGVjcmVhc2VQ
cmVsb2FkQ291bnQoKTsKKyAgICB9CisgICAgbV9wcmVsb2FkcyA9IG51bGxwdHI7CisKKyAgICBp
ZiAoc2NyaXB0cykKKyAgICAgICAgcHJpbnRmKCJTQ1JJUFRTOiAlZCAoJWQgaGl0cywgaGl0IHJh
dGUgJWQlJSlcbiIsIHNjcmlwdHMsIHNjcmlwdHMgLSBzY3JpcHRNaXNzZXMsIChzY3JpcHRzIC0g
c2NyaXB0TWlzc2VzKSAqIDEwMCAvIHNjcmlwdHMpOworICAgIGlmIChzdHlsZXNoZWV0cykKKyAg
ICAgICAgcHJpbnRmKCJTVFlMRVNIRUVUUzogJWQgKCVkIGhpdHMsIGhpdCByYXRlICVkJSUpXG4i
LCBzdHlsZXNoZWV0cywgc3R5bGVzaGVldHMgLSBzdHlsZXNoZWV0TWlzc2VzLCAoc3R5bGVzaGVl
dHMgLSBzdHlsZXNoZWV0TWlzc2VzKSAqIDEwMCAvIHN0eWxlc2hlZXRzKTsKKyAgICBpZiAoaW1h
Z2VzKQorICAgICAgICBwcmludGYoIklNQUdFUzogICVkICglZCBoaXRzLCBoaXQgcmF0ZSAlZCUl
KVxuIiwgaW1hZ2VzLCBpbWFnZXMgLSBpbWFnZU1pc3NlcywgKGltYWdlcyAtIGltYWdlTWlzc2Vz
KSAqIDEwMCAvIGltYWdlcyk7Cit9CisjZW5kaWYKKworY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRp
b25zJiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygp
Cit7CisgICAgc3RhdGljIFJlc291cmNlTG9hZGVyT3B0aW9ucyBvcHRpb25zKFNlbmRDYWxsYmFj
a3MsIFNuaWZmQ29udGVudCwgQnVmZmVyRGF0YSwgQWxsb3dTdG9yZWRDcmVkZW50aWFscywgQ2xp
ZW50Q3JlZGVudGlhbFBvbGljeTo6TWF5QXNrQ2xpZW50Rm9yQ3JlZGVudGlhbHMsIEZldGNoT3B0
aW9uczo6Q3JlZGVudGlhbHM6OkluY2x1ZGUsIERvU2VjdXJpdHlDaGVjaywgRmV0Y2hPcHRpb25z
OjpNb2RlOjpOb0NvcnMsIERvTm90SW5jbHVkZUNlcnRpZmljYXRlSW5mbywgQ29udGVudFNlY3Vy
aXR5UG9saWN5SW1wb3NpdGlvbjo6RG9Qb2xpY3lDaGVjaywgRGVmZXJzTG9hZGluZ1BvbGljeTo6
QWxsb3dEZWZlcnNMb2FkaW5nLCBDYWNoaW5nUG9saWN5OjpBbGxvd0NhY2hpbmcpOworICAgIHJl
dHVybiBvcHRpb25zOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
ZmV0Y2gvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRj
aC9DYWNoZWRSZXNvdXJjZUxvYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRjYzhiMzgyODNhZGQ5ZWViMGEz
NTNhNjRhNDNhY2FhNWU5NDkwZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaApAQCAtMCwwICsxLDIxOCBAQAorLyoK
KyAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Cisg
ICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEw
LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMp
IDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICAg
VGhpcyBjbGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcg
aW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKKyAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0
IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KKyovCisKKyNpZm5kZWYgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXJfaAorI2RlZmluZSBDYWNoZWRSZXNvdXJjZUxvYWRlcl9oCisKKyNp
bmNsdWRlICJDYWNoZVBvbGljeS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCisjaW5j
bHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZVJl
cXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRQcmlvcml0eS5oIgorI2luY2x1ZGUgIlJl
c291cmNlVGltaW5nSW5mb3JtYXRpb24uaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUg
PHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FjaGVkQ1NT
U3R5bGVTaGVldDsKK2NsYXNzIENhY2hlZFNWR0RvY3VtZW50OworY2xhc3MgQ2FjaGVkRm9udDsK
K2NsYXNzIENhY2hlZEltYWdlOworY2xhc3MgQ2FjaGVkUmF3UmVzb3VyY2U7CitjbGFzcyBDYWNo
ZWRTY3JpcHQ7CitjbGFzcyBDYWNoZWRUZXh0VHJhY2s7CitjbGFzcyBDYWNoZWRYU0xTdHlsZVNo
ZWV0OworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBEb2N1bWVudExvYWRlcjsKK2NsYXNzIEZyYW1l
OworY2xhc3MgSW1hZ2VMb2FkZXI7CitjbGFzcyBVUkw7CisKKy8vIFRoZSBDYWNoZWRSZXNvdXJj
ZUxvYWRlciBwcm92aWRlcyBhIHBlci1jb250ZXh0IGludGVyZmFjZSB0byB0aGUgTWVtb3J5Q2Fj
aGUKKy8vIGFuZCBlbmZvcmNlcyBhIGJ1bmNoIG9mIHNlY3VyaXR5IGNoZWNrcyBhbmQgcnVsZXMg
Zm9yIHJlc291cmNlIHJldmFsaWRhdGlvbi4KKy8vIEl0cyBsaWZldGltZSBpcyByb3VnaGx5IHBl
ci1Eb2N1bWVudExvYWRlciwgaW4gdGhhdCBpdCBpcyBnZW5lcmFsbHkgY3JlYXRlZAorLy8gaW4g
dGhlIERvY3VtZW50TG9hZGVyIGNvbnN0cnVjdG9yIGFuZCBsb3NlcyBpdHMgYWJpbGl0eSB0byBn
ZW5lcmF0ZSBuZXR3b3JrCisvLyByZXF1ZXN0cyB3aGVuIHRoZSBEb2N1bWVudExvYWRlciBpcyBk
ZXN0cm95ZWQuIERvY3VtZW50cyBhbHNvIGhvbGQgYSAKKy8vIFJlZlB0cjxDYWNoZWRSZXNvdXJj
ZUxvYWRlcj4gZm9yIHRoZWlyIGxpZmV0aW1lIChhbmQgd2lsbCBjcmVhdGUgb25lIGlmIHRoZXkK
Ky8vIGFyZSBpbml0aWFsaXplZCB3aXRob3V0IGEgRnJhbWUpLCBzbyBhIERvY3VtZW50IGNhbiBr
ZWVwIGEgQ2FjaGVkUmVzb3VyY2VMb2FkZXIKKy8vIGFsaXZlIHBhc3QgZGV0YWNoIGlmIHNjcmlw
dHMgc3RpbGwgcmVmZXJlbmNlIHRoZSBEb2N1bWVudC4KK2NsYXNzIENhY2hlZFJlc291cmNlTG9h
ZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8Q2FjaGVkUmVzb3VyY2VMb2FkZXI+IHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDYWNoZWRSZXNvdXJjZUxvYWRlcik7IFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworZnJpZW5kIGNsYXNzIEltYWdlTG9hZGVyOworZnJpZW5kIGNsYXNzIFJlc291cmNl
Q2FjaGVWYWxpZGF0aW9uU3VwcHJlc3NvcjsKKworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Q2Fj
aGVkUmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIp
IHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2FjaGVkUmVzb3VyY2VMb2FkZXIoZG9jdW1lbnRMb2Fk
ZXIpKTsgfQorICAgIH5DYWNoZWRSZXNvdXJjZUxvYWRlcigpOworCisgICAgQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGU8Q2FjaGVkSW1hZ2U+IHJlcXVlc3RJbWFnZShDYWNoZWRSZXNvdXJjZVJlcXVlc3Qm
KTsKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRDU1NTdHlsZVNoZWV0PiByZXF1ZXN0
Q1NTU3R5bGVTaGVldChDYWNoZWRSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICBDYWNoZWRSZXNvdXJj
ZUhhbmRsZTxDYWNoZWRDU1NTdHlsZVNoZWV0PiByZXF1ZXN0VXNlckNTU1N0eWxlU2hlZXQoQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2Ny
aXB0PiByZXF1ZXN0U2NyaXB0KENhY2hlZFJlc291cmNlUmVxdWVzdCYpOworICAgIENhY2hlZFJl
c291cmNlSGFuZGxlPENhY2hlZEZvbnQ+IHJlcXVlc3RGb250KENhY2hlZFJlc291cmNlUmVxdWVz
dCYsIGJvb2wgaXNTVkcpOworICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291
cmNlPiByZXF1ZXN0TWVkaWEoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgQ2FjaGVkUmVz
b3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+IHJlcXVlc3RSYXdSZXNvdXJjZShDYWNoZWRS
ZXNvdXJjZVJlcXVlc3QmKTsKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNv
dXJjZT4gcmVxdWVzdE1haW5SZXNvdXJjZShDYWNoZWRSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICBD
YWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTVkdEb2N1bWVudD4gcmVxdWVzdFNWR0RvY3VtZW50
KENhY2hlZFJlc291cmNlUmVxdWVzdCYpOworI2lmIEVOQUJMRShYU0xUKQorICAgIENhY2hlZFJl
c291cmNlSGFuZGxlPENhY2hlZFhTTFN0eWxlU2hlZXQ+IHJlcXVlc3RYU0xTdHlsZVNoZWV0KENh
Y2hlZFJlc291cmNlUmVxdWVzdCYpOworI2VuZGlmCisjaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gp
CisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IHJlcXVlc3RMaW5rUmVz
b3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIENhY2hlZFJlc291cmNlUmVxdWVzdCYpOworI2Vu
ZGlmCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENh
Y2hlZFRleHRUcmFjaz4gcmVxdWVzdFRleHRUcmFjayhDYWNoZWRSZXNvdXJjZVJlcXVlc3QmKTsK
KyNlbmRpZgorCisgICAgLy8gTG9ncyBhbiBhY2Nlc3MgZGVuaWVkIG1lc3NhZ2UgdG8gdGhlIGNv
bnNvbGUgZm9yIHRoZSBzcGVjaWZpZWQgVVJMLgorICAgIHZvaWQgcHJpbnRBY2Nlc3NEZW5pZWRN
ZXNzYWdlKGNvbnN0IFVSTCYgdXJsKSBjb25zdDsKKworICAgIENhY2hlZFJlc291cmNlKiBjYWNo
ZWRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHVybCkgY29uc3Q7CisgICAgQ2FjaGVkUmVzb3VyY2Uq
IGNhY2hlZFJlc291cmNlKGNvbnN0IFVSTCYgdXJsKSBjb25zdDsKKyAgICAKKyAgICB0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4+IERv
Y3VtZW50UmVzb3VyY2VNYXA7CisgICAgY29uc3QgRG9jdW1lbnRSZXNvdXJjZU1hcCYgYWxsQ2Fj
aGVkUmVzb3VyY2VzKCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudFJlc291cmNlczsgfQorCisg
ICAgYm9vbCBhdXRvTG9hZEltYWdlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXV0b0xvYWRJbWFnZXM7
IH0KKyAgICB2b2lkIHNldEF1dG9Mb2FkSW1hZ2VzKGJvb2wpOworCisgICAgYm9vbCBpbWFnZXNF
bmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZXNFbmFibGVkOyB9CisgICAgdm9pZCBzZXRJ
bWFnZXNFbmFibGVkKGJvb2wpOworCisgICAgYm9vbCBzaG91bGREZWZlckltYWdlTG9hZChjb25z
dCBVUkwmKSBjb25zdDsKKyAgICBib29sIHNob3VsZFBlcmZvcm1JbWFnZUxvYWQoY29uc3QgVVJM
JikgY29uc3Q7CisgICAgCisgICAgQ2FjaGVQb2xpY3kgY2FjaGVQb2xpY3koQ2FjaGVkUmVzb3Vy
Y2U6OlR5cGUpIGNvbnN0OworICAgIAorICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0OyAvLyBDYW4g
YmUgbnVsbAorICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1l
bnQ7IH0gLy8gQ2FuIGJlIG51bGwKKyAgICB2b2lkIHNldERvY3VtZW50KERvY3VtZW50KiBkb2N1
bWVudCkgeyBtX2RvY3VtZW50ID0gZG9jdW1lbnQ7IH0KKyAgICB2b2lkIGNsZWFyRG9jdW1lbnRM
b2FkZXIoKSB7IG1fZG9jdW1lbnRMb2FkZXIgPSBudWxscHRyOyB9CisgICAgU2Vzc2lvbklEIHNl
c3Npb25JRCgpIGNvbnN0OworCisgICAgdm9pZCByZW1vdmVDYWNoZWRSZXNvdXJjZShDYWNoZWRS
ZXNvdXJjZSYpOworCisgICAgdm9pZCBsb2FkRG9uZShDYWNoZWRSZXNvdXJjZSosIGJvb2wgc2hv
dWxkUGVyZm9ybVBvc3RMb2FkQWN0aW9ucyA9IHRydWUpOworCisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBnYXJiYWdlQ29sbGVjdERvY3VtZW50UmVzb3VyY2VzKCk7CisgICAgCisgICAgdm9pZCBp
bmNyZW1lbnRSZXF1ZXN0Q291bnQoY29uc3QgQ2FjaGVkUmVzb3VyY2UmKTsKKyAgICB2b2lkIGRl
Y3JlbWVudFJlcXVlc3RDb3VudChjb25zdCBDYWNoZWRSZXNvdXJjZSYpOworICAgIGludCByZXF1
ZXN0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3JlcXVlc3RDb3VudDsgfQorCisgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBpc1ByZWxvYWRlZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykgY29uc3Q7
CisgICAgdm9pZCBjbGVhclByZWxvYWRzKCk7CisgICAgdm9pZCBjbGVhclBlbmRpbmdQcmVsb2Fk
cygpOworICAgIGVudW0gUHJlbG9hZFR5cGUgeyBJbXBsaWNpdFByZWxvYWQsIEV4cGxpY2l0UHJl
bG9hZCB9OworICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiBwcmVsb2Fk
KENhY2hlZFJlc291cmNlOjpUeXBlLCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJp
bmcmIGNoYXJzZXQsIFByZWxvYWRUeXBlKTsKKyAgICB2b2lkIGNoZWNrRm9yUGVuZGluZ1ByZWxv
YWRzKCk7CisgICAgdm9pZCBwcmludFByZWxvYWRTdGF0cygpOworCisgICAgYm9vbCBjYW5SZXF1
ZXN0KENhY2hlZFJlc291cmNlOjpUeXBlLCBjb25zdCBVUkwmLCBjb25zdCBSZXNvdXJjZUxvYWRl
ck9wdGlvbnMmLCBib29sIGZvclByZWxvYWQgPSBmYWxzZSwgYm9vbCBkaWRSZWNlaXZlUmVkaXJl
Y3RSZXNwb25zZSA9IGZhbHNlKTsKKworICAgIHN0YXRpYyBjb25zdCBSZXNvdXJjZUxvYWRlck9w
dGlvbnMmIGRlZmF1bHRDYWNoZWRSZXNvdXJjZU9wdGlvbnMoKTsKKworICAgIHZvaWQgZG9jdW1l
bnREaWRGaW5pc2hMb2FkRXZlbnQoKTsKKworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFJl
c291cmNlVGltaW5nSW5mb3JtYXRpb24mIHJlc291cmNlVGltaW5nSW5mb3JtYXRpb24oKSB7IHJl
dHVybiBtX3Jlc291cmNlVGltaW5nSW5mbzsgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgZXhw
bGljaXQgQ2FjaGVkUmVzb3VyY2VMb2FkZXIoRG9jdW1lbnRMb2FkZXIqKTsKKworICAgIENhY2hl
ZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiByZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVz
b3VyY2U6OlR5cGUsIENhY2hlZFJlc291cmNlUmVxdWVzdCYpOworICAgIENhY2hlZFJlc291cmNl
SGFuZGxlPENhY2hlZFJlc291cmNlPiByZXZhbGlkYXRlUmVzb3VyY2UoY29uc3QgQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0JiwgQ2FjaGVkUmVzb3VyY2UqKTsKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRs
ZTxDYWNoZWRSZXNvdXJjZT4gbG9hZFJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlLCBDYWNo
ZWRSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNv
dXJjZT4gcmVxdWVzdFByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIENhY2hlZFJlc291cmNl
UmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgY2hhcnNldCk7CisKKyAgICBlbnVtIFJldmFsaWRhdGlv
blBvbGljeSB7IFVzZSwgUmV2YWxpZGF0ZSwgUmVsb2FkLCBMb2FkIH07CisgICAgUmV2YWxpZGF0
aW9uUG9saWN5IGRldGVybWluZVJldmFsaWRhdGlvblBvbGljeShDYWNoZWRSZXNvdXJjZTo6VHlw
ZSwgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiwgQ2FjaGVkUmVzb3VyY2UqIGV4aXN0aW5nUmVzb3Vy
Y2UpIGNvbnN0OworCisgICAgYm9vbCB1cGRhdGVDYWNoZWRSZXNvdXJjZVdpdGhDdXJyZW50UmVx
dWVzdChDYWNoZWRSZXNvdXJjZVJlcXVlc3QmLCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRS
ZXNvdXJjZT4mKTsKKyAgICBib29sIHNob3VsZENvbnRpbnVlQWZ0ZXJOb3RpZnlpbmdMb2FkZWRG
cm9tTWVtb3J5Q2FjaGUoY29uc3QgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiwgQ2FjaGVkUmVzb3Vy
Y2UqKTsKKyAgICBib29sIGNoZWNrSW5zZWN1cmVDb250ZW50KENhY2hlZFJlc291cmNlOjpUeXBl
LCBjb25zdCBVUkwmKSBjb25zdDsKKworICAgIHZvaWQgcGVyZm9ybVBvc3RMb2FkQWN0aW9ucygp
OworCisgICAgYm9vbCBjbGllbnREZWZlcnNJbWFnZShjb25zdCBVUkwmKSBjb25zdDsKKyAgICB2
b2lkIHJlbG9hZEltYWdlc0lmTm90RGVmZXJyZWQoKTsKKworICAgIGJvb2wgY2FuUmVxdWVzdElu
Q29udGVudERpc3Bvc2l0aW9uQXR0YWNobWVudFNhbmRib3goQ2FjaGVkUmVzb3VyY2U6OlR5cGUs
IGNvbnN0IFVSTCYpIGNvbnN0OworICAgIAorICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3ZhbGlkYXRl
ZFVSTHM7CisgICAgbXV0YWJsZSBEb2N1bWVudFJlc291cmNlTWFwIG1fZG9jdW1lbnRSZXNvdXJj
ZXM7CisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CisgICAgRG9jdW1lbnRMb2FkZXIqIG1fZG9j
dW1lbnRMb2FkZXI7CisgICAgCisgICAgaW50IG1fcmVxdWVzdENvdW50OworICAgIAorICAgIHN0
ZDo6dW5pcXVlX3B0cjxMaXN0SGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+PiBtX3ByZWxvYWRzOwor
ICAgIHN0cnVjdCBQZW5kaW5nUHJlbG9hZCB7CisgICAgICAgIENhY2hlZFJlc291cmNlOjpUeXBl
IG1fdHlwZTsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IG1fcmVxdWVzdDsKKyAgICAg
ICAgU3RyaW5nIG1fY2hhcnNldDsKKyAgICB9OworICAgIERlcXVlPFBlbmRpbmdQcmVsb2FkPiBt
X3BlbmRpbmdQcmVsb2FkczsKKworICAgIFRpbWVyIG1fZ2FyYmFnZUNvbGxlY3REb2N1bWVudFJl
c291cmNlc1RpbWVyOworCisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgUmVzb3VyY2VUaW1p
bmdJbmZvcm1hdGlvbiBtX3Jlc291cmNlVGltaW5nSW5mbzsKKyNlbmRpZgorCisgICAgLy8gMjkg
Yml0cyBsZWZ0CisgICAgYm9vbCBtX2F1dG9Mb2FkSW1hZ2VzIDogMTsKKyAgICBib29sIG1faW1h
Z2VzRW5hYmxlZCA6IDE7CisgICAgYm9vbCBtX2FsbG93U3RhbGVSZXNvdXJjZXMgOiAxOworfTsK
KworY2xhc3MgUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29yIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShSZXNvdXJjZUNhY2hlVmFsaWRhdGlvblN1cHByZXNzb3IpOworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFJlc291cmNlQ2FjaGVWYWxpZGF0
aW9uU3VwcHJlc3NvcihDYWNoZWRSZXNvdXJjZUxvYWRlciYgbG9hZGVyKQorICAgICAgICA6IG1f
bG9hZGVyKGxvYWRlcikKKyAgICAgICAgLCBtX3ByZXZpb3VzU3RhdGUobV9sb2FkZXIubV9hbGxv
d1N0YWxlUmVzb3VyY2VzKQorICAgIHsKKyAgICAgICAgbV9sb2FkZXIubV9hbGxvd1N0YWxlUmVz
b3VyY2VzID0gdHJ1ZTsKKyAgICB9CisgICAgflJlc291cmNlQ2FjaGVWYWxpZGF0aW9uU3VwcHJl
c3NvcigpCisgICAgeworICAgICAgICBtX2xvYWRlci5tX2FsbG93U3RhbGVSZXNvdXJjZXMgPSBt
X3ByZXZpb3VzU3RhdGU7CisgICAgfQorcHJpdmF0ZToKKyAgICBDYWNoZWRSZXNvdXJjZUxvYWRl
ciYgbV9sb2FkZXI7CisgICAgYm9vbCBtX3ByZXZpb3VzU3RhdGU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2ZldGNoL0NhY2hlZFJlc291cmNlUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
ZmV0Y2gvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYzU0YmRmMTA0NTYx
N2QzYThjYzc0OTEyMWM3NGY5NzkxNWZiMjE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlUmVxdWVzdC5jcHAKQEAgLTAsMCArMSwx
MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBH
T09HTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgiCisK
KyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIkNyb3NzT3JpZ2lu
QWNjZXNzQ29udHJvbC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVu
dC5oIgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0NhY2hlZFJlc291cmNlUmVxdWVzdDo6Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0KGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQs
IE9wdGlvbmFsPFJlc291cmNlTG9hZFByaW9yaXR5PiBwcmlvcml0eSkKKyAgICA6IG1fcmVzb3Vy
Y2VSZXF1ZXN0KHJlc291cmNlUmVxdWVzdCkKKyAgICAsIG1fY2hhcnNldChjaGFyc2V0KQorICAg
ICwgbV9vcHRpb25zKENhY2hlZFJlc291cmNlTG9hZGVyOjpkZWZhdWx0Q2FjaGVkUmVzb3VyY2VP
cHRpb25zKCkpCisgICAgLCBtX3ByaW9yaXR5KHByaW9yaXR5KQorICAgICwgbV9mb3JQcmVsb2Fk
KGZhbHNlKQorICAgICwgbV9kZWZlcihOb0RlZmVyKQoreworfQorCitDYWNoZWRSZXNvdXJjZVJl
cXVlc3Q6OkNhY2hlZFJlc291cmNlUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiByZXNvdXJjZVJl
cXVlc3QsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKKyAgICA6IG1fcmVz
b3VyY2VSZXF1ZXN0KFdURk1vdmUocmVzb3VyY2VSZXF1ZXN0KSkKKyAgICAsIG1fb3B0aW9ucyhv
cHRpb25zKQorICAgICwgbV9mb3JQcmVsb2FkKGZhbHNlKQorICAgICwgbV9kZWZlcihOb0RlZmVy
KQoreworfQorCitDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OkNhY2hlZFJlc291cmNlUmVxdWVzdChj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgT3B0aW9uYWw8UmVzb3VyY2VM
b2FkUHJpb3JpdHk+IHByaW9yaXR5KQorICAgIDogbV9yZXNvdXJjZVJlcXVlc3QocmVzb3VyY2VS
ZXF1ZXN0KQorICAgICwgbV9vcHRpb25zKENhY2hlZFJlc291cmNlTG9hZGVyOjpkZWZhdWx0Q2Fj
aGVkUmVzb3VyY2VPcHRpb25zKCkpCisgICAgLCBtX3ByaW9yaXR5KHByaW9yaXR5KQorICAgICwg
bV9mb3JQcmVsb2FkKGZhbHNlKQorICAgICwgbV9kZWZlcihOb0RlZmVyKQoreworfQorCitDYWNo
ZWRSZXNvdXJjZVJlcXVlc3Q6On5DYWNoZWRSZXNvdXJjZVJlcXVlc3QoKQoreworfQorCit2b2lk
IENhY2hlZFJlc291cmNlUmVxdWVzdDo6c2V0SW5pdGlhdG9yKFBhc3NSZWZQdHI8RWxlbWVudD4g
ZWxlbWVudCkKK3sKKyAgICBBU1NFUlQoIW1faW5pdGlhdG9yRWxlbWVudCAmJiBtX2luaXRpYXRv
ck5hbWUuaXNFbXB0eSgpKTsKKyAgICBtX2luaXRpYXRvckVsZW1lbnQgPSBlbGVtZW50OworfQor
Cit2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6c2V0SW5pdGlhdG9yKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQoIW1faW5pdGlhdG9yRWxlbWVudCAmJiBtX2luaXRp
YXRvck5hbWUuaXNFbXB0eSgpKTsKKyAgICBtX2luaXRpYXRvck5hbWUgPSBuYW1lOworfQorCitj
b25zdCBBdG9taWNTdHJpbmcmIENhY2hlZFJlc291cmNlUmVxdWVzdDo6aW5pdGlhdG9yTmFtZSgp
IGNvbnN0Cit7CisgICAgaWYgKG1faW5pdGlhdG9yRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIG1f
aW5pdGlhdG9yRWxlbWVudC0+bG9jYWxOYW1lKCk7CisgICAgaWYgKCFtX2luaXRpYXRvck5hbWUu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9pbml0aWF0b3JOYW1lOworCisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZGVmYXVsdE5hbWUoInJlc291cmNlIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgcmV0dXJuIGRlZmF1bHROYW1l
OworfQorCit2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6c2V0QXNQb3RlbnRpYWxseUNyb3Nz
T3JpZ2luKGNvbnN0IFN0cmluZyYgbW9kZSwgRG9jdW1lbnQmIGRvY3VtZW50KQoreworICAgIEFT
U0VSVChtX29wdGlvbnMubW9kZSA9PSBGZXRjaE9wdGlvbnM6Ok1vZGU6Ok5vQ29ycyk7CisgICAg
aWYgKG1vZGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX29wdGlvbnMubW9kZSA9
IEZldGNoT3B0aW9uczo6TW9kZTo6Q29yczsKKyAgICBtX29wdGlvbnMuY3JlZGVudGlhbHMgPSBl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtb2RlLCAidXNlLWNyZWRlbnRpYWxzIikgPyBG
ZXRjaE9wdGlvbnM6OkNyZWRlbnRpYWxzOjpJbmNsdWRlIDogRmV0Y2hPcHRpb25zOjpDcmVkZW50
aWFsczo6U2FtZU9yaWdpbjsKKyAgICBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscyA9IGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1vZGUsICJ1c2UtY3JlZGVudGlhbHMiKSA/IEFsbG93
U3RvcmVkQ3JlZGVudGlhbHMgOiBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHM7CisKKyAgICBB
U1NFUlQoZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4oKSk7CisgICAgdXBkYXRlUmVxdWVzdEZvckFj
Y2Vzc0NvbnRyb2wobV9yZXNvdXJjZVJlcXVlc3QsICpkb2N1bWVudC5zZWN1cml0eU9yaWdpbigp
LCBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJj
ZVJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZVJl
cXVlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44MjdlYmJiZTU4NjY3NGViYmE3Njk4YjQ5NzgzYWQzZDhmZGZj
MDIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hl
ZFJlc291cmNlUmVxdWVzdC5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENhY2hlZFJlc291cmNlUmVxdWVz
dF9oCisjZGVmaW5lIENhY2hlZFJlc291cmNlUmVxdWVzdF9oCisKKyNpbmNsdWRlICJEb2N1bWVu
dExvYWRlci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRQ
cmlvcml0eS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyT3B0aW9ucy5oIgorI2luY2x1ZGUg
IlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRG9j
dW1lbnQ7CisKK2NsYXNzIENhY2hlZFJlc291cmNlUmVxdWVzdCB7CitwdWJsaWM6CisgICAgZW51
bSBEZWZlck9wdGlvbiB7IE5vRGVmZXIsIERlZmVycmVkQnlDbGllbnQgfTsKKworICAgIGV4cGxp
Y2l0IENhY2hlZFJlc291cmNlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBT
dHJpbmcmIGNoYXJzZXQgPSBTdHJpbmcoKSwgT3B0aW9uYWw8UmVzb3VyY2VMb2FkUHJpb3JpdHk+
ID0gTnVsbG9wdCk7CisgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYm
LCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKKyAgICBDYWNoZWRSZXNvdXJjZVJlcXVl
c3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgT3B0aW9uYWw8UmVzb3VyY2VMb2FkUHJpb3JpdHk+
KTsKKyAgICB+Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0KCk7CisKKyAgICBSZXNvdXJjZVJlcXVlc3Qm
IG11dGFibGVSZXNvdXJjZVJlcXVlc3QoKSB7IHJldHVybiBtX3Jlc291cmNlUmVxdWVzdDsgfQor
ICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KCkgY29uc3QgeyByZXR1
cm4gbV9yZXNvdXJjZVJlcXVlc3Q7IH0KKyAgICBjb25zdCBTdHJpbmcmIGNoYXJzZXQoKSBjb25z
dCB7IHJldHVybiBtX2NoYXJzZXQ7IH0KKyAgICB2b2lkIHNldENoYXJzZXQoY29uc3QgU3RyaW5n
JiBjaGFyc2V0KSB7IG1fY2hhcnNldCA9IGNoYXJzZXQ7IH0KKyAgICBjb25zdCBSZXNvdXJjZUxv
YWRlck9wdGlvbnMmIG9wdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX29wdGlvbnM7IH0KKyAgICB2
b2lkIHNldE9wdGlvbnMoY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKSB7IG1f
b3B0aW9ucyA9IG9wdGlvbnM7IH0KKyAgICBjb25zdCBPcHRpb25hbDxSZXNvdXJjZUxvYWRQcmlv
cml0eT4mIHByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gbV9wcmlvcml0eTsgfQorICAgIGJvb2wg
Zm9yUHJlbG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9yUHJlbG9hZDsgfQorICAgIHZvaWQgc2V0
Rm9yUHJlbG9hZChib29sIGZvclByZWxvYWQpIHsgbV9mb3JQcmVsb2FkID0gZm9yUHJlbG9hZDsg
fQorICAgIERlZmVyT3B0aW9uIGRlZmVyKCkgY29uc3QgeyByZXR1cm4gbV9kZWZlcjsgfQorICAg
IHZvaWQgc2V0RGVmZXIoRGVmZXJPcHRpb24gZGVmZXIpIHsgbV9kZWZlciA9IGRlZmVyOyB9Cisg
ICAgdm9pZCBzZXRJbml0aWF0b3IoUGFzc1JlZlB0cjxFbGVtZW50Pik7CisgICAgdm9pZCBzZXRJ
bml0aWF0b3IoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKTsKKyAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGluaXRpYXRvck5hbWUoKSBjb25zdDsKKyAgICBib29sIGFsbG93c0NhY2hpbmcoKSBjb25z
dCB7IHJldHVybiBtX29wdGlvbnMuY2FjaGluZ1BvbGljeSA9PSBDYWNoaW5nUG9saWN5OjpBbGxv
d0NhY2hpbmc7IH0KKyAgICB2b2lkIHNldENhY2hpbmdQb2xpY3koQ2FjaGluZ1BvbGljeSBwb2xp
Y3kpIHsgbV9vcHRpb25zLmNhY2hpbmdQb2xpY3kgPSBwb2xpY3k7IH0KKworICAgIHZvaWQgc2V0
QXNQb3RlbnRpYWxseUNyb3NzT3JpZ2luKGNvbnN0IFN0cmluZyYsIERvY3VtZW50Jik7CisKK3By
aXZhdGU6CisgICAgUmVzb3VyY2VSZXF1ZXN0IG1fcmVzb3VyY2VSZXF1ZXN0OworICAgIFN0cmlu
ZyBtX2NoYXJzZXQ7CisgICAgUmVzb3VyY2VMb2FkZXJPcHRpb25zIG1fb3B0aW9uczsKKyAgICBP
cHRpb25hbDxSZXNvdXJjZUxvYWRQcmlvcml0eT4gbV9wcmlvcml0eTsKKyAgICBib29sIG1fZm9y
UHJlbG9hZDsKKyAgICBEZWZlck9wdGlvbiBtX2RlZmVyOworICAgIFJlZlB0cjxFbGVtZW50PiBt
X2luaXRpYXRvckVsZW1lbnQ7CisgICAgQXRvbWljU3RyaW5nIG1faW5pdGlhdG9yTmFtZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlh
dG9ycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjMzOWE4ZTU4Y2RhYWQ1MWY1YWY4MGVhNDYzOTRiZDdiYzUw
MjgxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNo
ZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmNwcApAQCAtMCwwICsxLDM5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzOjpDYWNo
ZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzKCkKKyAgICA6IGNzcygiY3NzIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkKKyAgICAsIGZldGNoKCJmZXRjaCIsIEF0b21pY1N0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpCisgICAgLCBpY29uKCJpY29uIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkKKyAgICAsIHhtbGh0dHByZXF1ZXN0KCJ4bWxodHRw
cmVxdWVzdCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpCit7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9m
ZXRjaC9DYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmggYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmQ3Y2ZlMDFjOGQyMDAwODMyNmEwOTE5N2ViZmRmNDY0NTczODFmMjYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5p
dGlhdG9ycy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRv
cnNfaAorI2RlZmluZSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzX2gKKworI2luY2x1
ZGUgIlRocmVhZEdsb2JhbERhdGEuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0
SW5pdGlhdG9ycyB7CisgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycygpOworCisg
ICAgY29uc3QgQXRvbWljU3RyaW5nIGNzczsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcgZmV0Y2g7
CisgICAgY29uc3QgQXRvbWljU3RyaW5nIGljb247CisgICAgY29uc3QgQXRvbWljU3RyaW5nIHht
bGh0dHByZXF1ZXN0OworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENhY2hlZFJlc291cmNlUmVx
dWVzdEluaXRpYXRvcnMpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3ByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIFRocmVhZEdsb2JhbERhdGE7Cit9OworCitpbmxpbmUgY29uc3QgQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycyYgY2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9y
cygpCit7CisgICAgcmV0dXJuIHRocmVhZEdsb2JhbERhdGEoKS5jYWNoZWRSZXNvdXJjZVJlcXVl
c3RJbml0aWF0b3JzKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRG9jdW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFNWR0RvY3VtZW50LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hNTIzMDIwMWIwZjcxMGQzOWE1YmRiYjFhNmQ2YTJiODUyNjA3ZDMxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFNWR0RvY3Vt
ZW50LmNwcApAQCAtMCwwICsxLDYxIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMCBSb2Ig
QnVpcyA8cndsYnVpc0BnbWFpbC5jb20+CisgICAgQ29weXJpZ2h0IChDKSAyMDExIENvc21pbiBU
cnV0YSA8Y3RydXRhQGdtYWlsLmNvbT4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0
eSBvZiBTemVnZWQKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgUmVuYXRhIEhvZG92YW4gPHJlbmlA
d2Via2l0Lm9yZz4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FjaGVkU1ZH
RG9jdW1lbnQuaCIKKworI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0NhY2hlZFNWR0RvY3VtZW50OjpDYWNoZWRTVkdEb2N1bWVudChjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIFNlc3Npb25JRCBzZXNzaW9uSUQpCisgICAgOiBDYWNoZWRS
ZXNvdXJjZShyZXF1ZXN0LCBTVkdEb2N1bWVudFJlc291cmNlLCBzZXNzaW9uSUQpCisgICAgLCBt
X2RlY29kZXIoVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJhcHBsaWNhdGlvbi94bWwiKSkK
K3sKKyAgICBzZXRBY2NlcHQoImltYWdlL3N2Zyt4bWwiKTsKK30KKworQ2FjaGVkU1ZHRG9jdW1l
bnQ6On5DYWNoZWRTVkdEb2N1bWVudCgpCit7Cit9CisKK3ZvaWQgQ2FjaGVkU1ZHRG9jdW1lbnQ6
OnNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYgY2hzKQoreworICAgIG1fZGVjb2Rlci0+c2V0RW5j
b2RpbmcoY2hzLCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpFbmNvZGluZ0Zyb21IVFRQSGVhZGVyKTsK
K30KKworU3RyaW5nIENhY2hlZFNWR0RvY3VtZW50OjplbmNvZGluZygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKS5uYW1lKCk7Cit9CisKK3ZvaWQgQ2FjaGVkU1ZH
RG9jdW1lbnQ6OmZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKiBkYXRhKQoreworICAgIGlmIChk
YXRhKSB7CisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gY3JlYXRlIGEgbmV3IGZyYW1lIGJl
Y2F1c2UgdGhlIG5ldyBkb2N1bWVudCBiZWxvbmdzIHRvIHRoZSBwYXJlbnQgVXNlRWxlbWVudC4K
KyAgICAgICAgbV9kb2N1bWVudCA9IFNWR0RvY3VtZW50OjpjcmVhdGUobnVsbHB0ciwgcmVzcG9u
c2UoKS51cmwoKSk7CisgICAgICAgIG1fZG9jdW1lbnQtPnNldENvbnRlbnQobV9kZWNvZGVyLT5k
ZWNvZGVBbmRGbHVzaChkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSkpOworICAgIH0KKyAgICBD
YWNoZWRSZXNvdXJjZTo6ZmluaXNoTG9hZGluZyhkYXRhKTsKK30KKworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFNWR0RvY3VtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRG9jdW1lbnQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MjY0
MmZlM2U0MzVmYmM3ZjExOTNiZGZiNTU5NmIzNWY2OWQ5OWJlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFNWR0RvY3VtZW50LmgKQEAgLTAsMCAr
MSw1NSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgUm9iIEJ1aXMgPHJ3bGJ1aXNAZ21h
aWwuY29tPgorICAgIENvcHlyaWdodCAoQykgMjAxMSBDb3NtaW4gVHJ1dGEgPGN0cnV0YUBnbWFp
bC5jb20+CisgICAgQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgICAg
Q29weXJpZ2h0IChDKSAyMDEyIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+CisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKwor
I2lmbmRlZiBDYWNoZWRTVkdEb2N1bWVudF9oCisjZGVmaW5lIENhY2hlZFNWR0RvY3VtZW50X2gK
KworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VI
YW5kbGUuaCIKKyNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgorI2luY2x1ZGUgIlRleHRSZXNvdXJj
ZURlY29kZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWNoZWRTVkdEb2N1
bWVudCBmaW5hbCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSB7CitwdWJsaWM6CisgICAgZXhwbGlj
aXQgQ2FjaGVkU1ZHRG9jdW1lbnQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2Vzc2lvbklEKTsK
KyAgICB2aXJ0dWFsIH5DYWNoZWRTVkdEb2N1bWVudCgpOworCisgICAgU1ZHRG9jdW1lbnQqIGRv
Y3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudC5nZXQoKTsgfQorCitwcml2YXRlOgor
ICAgIGJvb2wgbWF5VHJ5UmVwbGFjZUVuY29kZWREYXRhKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIHZvaWQgc2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7
CisgICAgU3RyaW5nIGVuY29kaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgY29uc3QgVGV4dFJl
c291cmNlRGVjb2RlciogdGV4dFJlc291cmNlRGVjb2RlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fZGVjb2Rlci5nZXQoKTsgfQorICAgIHZvaWQgZmluaXNoTG9hZGluZyhTaGFyZWRCdWZm
ZXIqKSBvdmVycmlkZTsKKworICAgIFJlZlB0cjxTVkdEb2N1bWVudD4gbV9kb2N1bWVudDsKKyAg
ICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBQ0hFRF9SRVNPVVJDRShD
YWNoZWRTVkdEb2N1bWVudCwgQ2FjaGVkUmVzb3VyY2U6OlNWR0RvY3VtZW50UmVzb3VyY2UpCisK
KyNlbmRpZiAvLyBDYWNoZWRTVkdEb2N1bWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRG9jdW1lbnRDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9mZXRjaC9DYWNoZWRTVkdEb2N1bWVudENsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyMmVh
ZDBiODA2YzM4MDVkMWUzNzRmZmRhZjA3ZmVlMjdjNDlmMjEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRG9jdW1lbnRDbGllbnQuaApAQCAt
MCwwICsxLDM5IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMCBSb2IgQnVpcyA8cndsYnVp
c0BnbWFpbC5jb20+CisgICAgQ29weXJpZ2h0IChDKSAyMDExIENvc21pbiBUcnV0YSA8Y3RydXRh
QGdtYWlsLmNvbT4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgUmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaWZuZGVmIENhY2hlZFNWR0RvY3VtZW50Q2xpZW50X2gKKyNkZWZpbmUgQ2FjaGVkU1ZH
RG9jdW1lbnRDbGllbnRfaAorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWNoZWRTVkdEb2N1bWVudENsaWVudCA6IHB1
YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q2FjaGVk
U1ZHRG9jdW1lbnRDbGllbnQoKSB7IH0KKyAgICBzdGF0aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnRU
eXBlIGV4cGVjdGVkVHlwZSgpIHsgcmV0dXJuIFNWR0RvY3VtZW50VHlwZTsgfQorICAgIENhY2hl
ZFJlc291cmNlQ2xpZW50VHlwZSByZXNvdXJjZUNsaWVudFR5cGUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBleHBlY3RlZFR5cGUoKTsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gQ2FjaGVkU1ZHRG9jdW1lbnRDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNDc5MGY3MzQ5Mzg5NmVlM2I1MjUyMWQyYTc1ZTg4NzZkZDljNTgwMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRTVkdEb2N1
bWVudFJlZmVyZW5jZS5jcHAKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oIgorCisjaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRl
ci5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMuaCIKKyNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVu
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNl
OjpDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShjb25zdCBTdHJpbmcmIHVybCkKKyAgICA6IG1f
dXJsKHVybCkKKyAgICAsIG1fZG9jdW1lbnQobnVsbHB0cikKKyAgICAsIG1fbG9hZFJlcXVlc3Rl
ZChmYWxzZSkKK3sKK30KKworQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2U6On5DYWNoZWRTVkdE
b2N1bWVudFJlZmVyZW5jZSgpCit7CisgICAgaWYgKG1fZG9jdW1lbnQpCisgICAgICAgIG1fZG9j
dW1lbnQtPnJlbW92ZUNsaWVudCh0aGlzKTsKK30KKwordm9pZCBDYWNoZWRTVkdEb2N1bWVudFJl
ZmVyZW5jZTo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciYgbG9hZGVyLCBjb25zdCBSZXNvdXJj
ZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgaWYgKG1fbG9hZFJlcXVlc3RlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoUmVzb3Vy
Y2VSZXF1ZXN0KGxvYWRlci5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChtX3VybCkpLCBvcHRpb25z
KTsKKyAgICByZXF1ZXN0LnNldEluaXRpYXRvcihjYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0
b3JzKCkuY3NzKTsKKyAgICBtX2RvY3VtZW50ID0gbG9hZGVyLnJlcXVlc3RTVkdEb2N1bWVudChy
ZXF1ZXN0KTsKKyAgICBpZiAobV9kb2N1bWVudCkKKyAgICAgICAgbV9kb2N1bWVudC0+YWRkQ2xp
ZW50KHRoaXMpOworCisgICAgbV9sb2FkUmVxdWVzdGVkID0gdHJ1ZTsKK30KKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFNWR0RvY3VtZW50UmVmZXJl
bmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRG9jdW1lbnRSZWZl
cmVuY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mOTgwYTEzZjYxMjg5MTM1OGZkNmIzNjBiYWI2OWQxZmU0MTYw
ODlkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hl
ZFNWR0RvY3VtZW50UmVmZXJlbmNlLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2VfaAorI2RlZmluZSBDYWNoZWRTVkdEb2N1bWVudFJl
ZmVyZW5jZV9oCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUg
IkNhY2hlZFNWR0RvY3VtZW50Q2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FjaGVkU1ZHRG9jdW1lbnQ7Citj
bGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKK3N0cnVjdCBSZXNvdXJjZUxvYWRlck9wdGlvbnM7
CisKK2NsYXNzIENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlIDogcHVibGljIENhY2hlZFNWR0Rv
Y3VtZW50Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShj
b25zdCBTdHJpbmcmKTsKKworICAgIHZpcnR1YWwgfkNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNl
KCk7CisKKyAgICB2b2lkIGxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNvdXJj
ZUxvYWRlck9wdGlvbnMmKTsKKyAgICBib29sIGxvYWRSZXF1ZXN0ZWQoKSBjb25zdCB7IHJldHVy
biBtX2xvYWRSZXF1ZXN0ZWQ7IH0KKworICAgIENhY2hlZFNWR0RvY3VtZW50KiBkb2N1bWVudCgp
IHsgcmV0dXJuIG1fZG9jdW1lbnQuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV91
cmw7CisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU1ZHRG9jdW1lbnQ+IG1fZG9jdW1l
bnQ7CisgICAgYm9vbCBtX2xvYWRSZXF1ZXN0ZWQ7Cit9OworCit9OworCisjZW5kaWYgLy8gQ2Fj
aGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2ZldGNoL0NhY2hlZFNWR0ZvbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNo
L0NhY2hlZFNWR0ZvbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjczYjFiNmJhNDkyZGMwNThlZWRlOTcyNjc2
MThmOTc0ODZiZGMyNjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
ZmV0Y2gvQ2FjaGVkU1ZHRm9udC5jcHAKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkNhY2hlZFNWR0ZvbnQuaCIKKworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisKKyNpbmNsdWRl
ICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisjaW5j
bHVkZSAiTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uLmgiCisjaW5jbHVkZSAiU1ZHRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJTVkdGb250RWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxl
bWVudC5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHRSZXNvdXJj
ZURlY29kZXIuaCIKKyNpbmNsdWRlICJUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IuaCIK
KyNpbmNsdWRlICJTVkdUb09URkZvbnRDb252ZXJzaW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworQ2FjaGVkU1ZHRm9udDo6Q2FjaGVkU1ZHRm9udChjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlc291cmNlUmVxdWVzdCwgU2Vzc2lvbklEIHNlc3Npb25JRCkKKyAgICA6IENhY2hlZEZvbnQo
cmVzb3VyY2VSZXF1ZXN0LCBzZXNzaW9uSUQsIFNWR0ZvbnRSZXNvdXJjZSkKKyAgICAsIG1fZXh0
ZXJuYWxTVkdGb250RWxlbWVudChudWxscHRyKQoreworfQorCitSZWZQdHI8Rm9udD4gQ2FjaGVk
U1ZHRm9udDo6Y3JlYXRlRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgY29uc3QgQXRvbWljU3RyaW5nJiByZW1vdGVVUkksIGJvb2wgc3ludGhldGljQm9sZCwgYm9v
bCBzeW50aGV0aWNJdGFsaWMsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MmIGZvbnRGYWNlRmVh
dHVyZXMsIGNvbnN0IEZvbnRWYXJpYW50U2V0dGluZ3MmIGZvbnRGYWNlVmFyaWFudFNldHRpbmdz
KQoreworICAgIGlmIChmaXJzdEZvbnRGYWNlKHJlbW90ZVVSSSkpCisgICAgICAgIHJldHVybiBD
YWNoZWRGb250OjpjcmVhdGVGb250KGZvbnREZXNjcmlwdGlvbiwgcmVtb3RlVVJJLCBzeW50aGV0
aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlVmFyaWFu
dFNldHRpbmdzKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworRm9udFBsYXRmb3JtRGF0YSBD
YWNoZWRTVkdGb250OjpwbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgY29uc3QgRm9u
dEZlYXR1cmVTZXR0aW5ncyYgZm9udEZhY2VGZWF0dXJlcywgY29uc3QgRm9udFZhcmlhbnRTZXR0
aW5ncyYgZm9udEZhY2VWYXJpYW50U2V0dGluZ3MpCit7CisgICAgaWYgKG1fZXh0ZXJuYWxTVkdE
b2N1bWVudCkKKyAgICAgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9u
LmNvbXB1dGVkUGl4ZWxTaXplKCksIGJvbGQsIGl0YWxpYyk7CisgICAgcmV0dXJuIENhY2hlZEZv
bnQ6OnBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZvbnREZXNjcmlwdGlvbiwgYm9sZCwgaXRh
bGljLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFjZVZhcmlhbnRTZXR0aW5ncyk7Cit9CisKK2Jv
b2wgQ2FjaGVkU1ZHRm9udDo6ZW5zdXJlQ3VzdG9tRm9udERhdGEoY29uc3QgQXRvbWljU3RyaW5n
JiByZW1vdGVVUkkpCit7CisgICAgaWYgKCFtX2V4dGVybmFsU1ZHRG9jdW1lbnQgJiYgIWVycm9y
T2NjdXJyZWQoKSAmJiAhaXNMb2FkaW5nKCkgJiYgbV9kYXRhKSB7CisgICAgICAgIC8vIFdlIG1h
eSBnZXQgaGVyZSBkdXJpbmcgcmVuZGVyIHRyZWUgdXBkYXRlcyB3aGVuIGV2ZW50cyBhcmUgZm9y
YmlkZGVuLgorICAgICAgICAvLyBGcmFtZWxlc3MgZG9jdW1lbnQgY2FuJ3QgcnVuIHNjcmlwdHMg
b3IgY2FsbCBiYWNrIHRvIHRoZSBjbGllbnQgc28gdGhpcyBpcyBzYWZlLgorICAgICAgICBhdXRv
IGNvdW50ID0gTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOjpkcm9wVGVtcG9yYXJpbHkoKTsKKwor
ICAgICAgICBtX2V4dGVybmFsU1ZHRG9jdW1lbnQgPSBTVkdEb2N1bWVudDo6Y3JlYXRlKG51bGxw
dHIsIFVSTCgpKTsKKyAgICAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGRlY29kZXIg
PSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoImFwcGxpY2F0aW9uL3htbCIpOworICAgICAg
ICBtX2V4dGVybmFsU1ZHRG9jdW1lbnQtPnNldENvbnRlbnQoZGVjb2Rlci0+ZGVjb2RlQW5kRmx1
c2gobV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpKSk7CisKKyAgICAgICAgTm9FdmVudERp
c3BhdGNoQXNzZXJ0aW9uOjpyZXN0b3JlRHJvcHBlZChjb3VudCk7CisKKyAgICAgICAgaWYgKGRl
Y29kZXItPnNhd0Vycm9yKCkpCisgICAgICAgICAgICBtX2V4dGVybmFsU1ZHRG9jdW1lbnQgPSBu
dWxscHRyOworICAgICAgICBpZiAobV9leHRlcm5hbFNWR0RvY3VtZW50KQorICAgICAgICAgICAg
bWF5YmVJbml0aWFsaXplRXh0ZXJuYWxTVkdGb250RWxlbWVudChyZW1vdGVVUkkpOworICAgICAg
ICBpZiAoIW1fZXh0ZXJuYWxTVkdGb250RWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKGF1dG8gY29udmVydGVkRm9udCA9IGNvbnZlcnRTVkdUb09URkZvbnQo
Km1fZXh0ZXJuYWxTVkdGb250RWxlbWVudCkpCisgICAgICAgICAgICBtX2NvbnZlcnRlZEZvbnQg
PSBTaGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKGNvbnZlcnRlZEZvbnQudmFsdWUoKSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgbV9leHRlcm5hbFNWR0RvY3VtZW50ID0gbnVsbHB0cjsK
KyAgICAgICAgICAgIG1fZXh0ZXJuYWxTVkdGb250RWxlbWVudCA9IG51bGxwdHI7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbV9leHRl
cm5hbFNWR0RvY3VtZW50ICYmIENhY2hlZEZvbnQ6OmVuc3VyZUN1c3RvbUZvbnREYXRhKG1fY29u
dmVydGVkRm9udC5nZXQoKSk7Cit9CisKK1NWR0ZvbnRFbGVtZW50KiBDYWNoZWRTVkdGb250Ojpn
ZXRTVkdGb250QnlJZChjb25zdCBTdHJpbmcmIGZvbnROYW1lKSBjb25zdAoreworICAgIEFTU0VS
VChtX2V4dGVybmFsU1ZHRG9jdW1lbnQpOworICAgIGF1dG8gZWxlbWVudHMgPSBkZXNjZW5kYW50
c09mVHlwZTxTVkdGb250RWxlbWVudD4oKm1fZXh0ZXJuYWxTVkdEb2N1bWVudCk7CisKKyAgICBp
ZiAoZm9udE5hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZWxlbWVudHMuZmlyc3QoKTsK
KworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRzKSB7CisgICAgICAgIGlmIChlbGVt
ZW50LmdldElkQXR0cmlidXRlKCkgPT0gZm9udE5hbWUpCisgICAgICAgICAgICByZXR1cm4gJmVs
ZW1lbnQ7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCitTVkdGb250RWxlbWVudCog
Q2FjaGVkU1ZHRm9udDo6bWF5YmVJbml0aWFsaXplRXh0ZXJuYWxTVkdGb250RWxlbWVudChjb25z
dCBBdG9taWNTdHJpbmcmIHJlbW90ZVVSSSkKK3sKKyAgICBpZiAobV9leHRlcm5hbFNWR0ZvbnRF
bGVtZW50KQorICAgICAgICByZXR1cm4gbV9leHRlcm5hbFNWR0ZvbnRFbGVtZW50OworICAgIFN0
cmluZyBmcmFnbWVudElkZW50aWZpZXI7CisgICAgc2l6ZV90IHN0YXJ0ID0gcmVtb3RlVVJJLmZp
bmQoJyMnKTsKKyAgICBpZiAoc3RhcnQgIT0gbm90Rm91bmQpCisgICAgICAgIGZyYWdtZW50SWRl
bnRpZmllciA9IHJlbW90ZVVSSS5zdHJpbmcoKS5zdWJzdHJpbmcoc3RhcnQgKyAxKTsKKyAgICBt
X2V4dGVybmFsU1ZHRm9udEVsZW1lbnQgPSBnZXRTVkdGb250QnlJZChmcmFnbWVudElkZW50aWZp
ZXIpOworICAgIHJldHVybiBtX2V4dGVybmFsU1ZHRm9udEVsZW1lbnQ7Cit9CisKK1NWR0ZvbnRG
YWNlRWxlbWVudCogQ2FjaGVkU1ZHRm9udDo6Zmlyc3RGb250RmFjZShjb25zdCBBdG9taWNTdHJp
bmcmIHJlbW90ZVVSSSkKK3sKKyAgICBpZiAoIW1heWJlSW5pdGlhbGl6ZUV4dGVybmFsU1ZHRm9u
dEVsZW1lbnQocmVtb3RlVVJJKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAo
YXV0byogZmlyc3RGb250RmFjZSA9IGNoaWxkcmVuT2ZUeXBlPFNWR0ZvbnRGYWNlRWxlbWVudD4o
Km1fZXh0ZXJuYWxTVkdGb250RWxlbWVudCkuZmlyc3QoKSkKKyAgICAgICAgcmV0dXJuIGZpcnN0
Rm9udEZhY2U7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRm9udC5oIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFNWR0ZvbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NjFiYTVj
MjUzN2M3MjRiZjIyYzg0MDQzNzE0NWU0OTgyNzVkNzNiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFNWR0ZvbnQuaApAQCAtMCwwICsxLDY0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQ2FjaGVkU1ZHRm9udF9oCisjZGVmaW5lIENhY2hlZFNWR0ZvbnRfaAorCisjaWYgRU5B
QkxFKFNWR19GT05UUykKKworI2luY2x1ZGUgIkNhY2hlZEZvbnQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBTVkdGb250RmFjZUVsZW1lbnQ7CisKK2NsYXNzIENhY2hlZFNWR0Zv
bnQgZmluYWwgOiBwdWJsaWMgQ2FjaGVkRm9udCB7CitwdWJsaWM6CisgICAgQ2FjaGVkU1ZHRm9u
dChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTZXNzaW9uSUQpOworCisgICAgYm9vbCBlbnN1cmVD
dXN0b21Gb250RGF0YShjb25zdCBBdG9taWNTdHJpbmcmIHJlbW90ZVVSSSkgb3ZlcnJpZGU7Cisg
ICAgCisgICAgUmVmUHRyPEZvbnQ+IGNyZWF0ZUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
Y29uc3QgQXRvbWljU3RyaW5nJiByZW1vdGVVUkksIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBz
eW50aGV0aWNJdGFsaWMsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MmLCBjb25zdCBGb250VmFy
aWFudFNldHRpbmdzJikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgRm9udFBsYXRmb3JtRGF0
YSBwbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBib29s
IGJvbGQsIGJvb2wgaXRhbGljLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzJiwgY29uc3QgRm9u
dFZhcmlhbnRTZXR0aW5ncyYpOworCisgICAgU1ZHRm9udEVsZW1lbnQqIGdldFNWR0ZvbnRCeUlk
KGNvbnN0IFN0cmluZyYpIGNvbnN0OworCisgICAgU1ZHRm9udEVsZW1lbnQqIG1heWJlSW5pdGlh
bGl6ZUV4dGVybmFsU1ZHRm9udEVsZW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiByZW1vdGVVUkkp
OworICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogZmlyc3RGb250RmFjZShjb25zdCBBdG9taWNTdHJp
bmcmIHJlbW90ZVVSSSk7CisKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2NvbnZlcnRlZEZv
bnQ7CisgICAgUmVmUHRyPFNWR0RvY3VtZW50PiBtX2V4dGVybmFsU1ZHRG9jdW1lbnQ7CisgICAg
U1ZHRm9udEVsZW1lbnQqIG1fZXh0ZXJuYWxTVkdGb250RWxlbWVudDsKK307CisKK30KKworU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19DQUNIRURfUkVTT1VSQ0UoQ2FjaGVkU1ZHRm9udCwgQ2FjaGVk
UmVzb3VyY2U6OlNWR0ZvbnRSZXNvdXJjZSkKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFNjcmlwdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkU2NyaXB0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NDU4NGM5
ZTY0Njg1NDNjODE3NzFkOTAxZWFiMmY3ZWY4ZWY2NDM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFNjcmlwdC5jcHAKQEAgLTAsMCArMSwxNDkg
QEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5t
cGcuZGUpCisgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUu
b3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwMiBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5v
cmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21h
aWwuY29tKQorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBh
bGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMg
YW5kIGh0bWwKKyAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBm
b3IgdGhlc2Ugb2JqZWN0cy4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJD
YWNoZWRTY3JpcHQuaCIKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5j
bHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKKyNpbmNsdWRlICJIVFRQSGVhZGVy
TmFtZXMuaCIKKyNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVn
aXN0cnkuaCIKKyNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgorI2luY2x1ZGUgIlJ1bnRpbWVBcHBs
aWNhdGlvbkNoZWNrcy5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIlRl
eHRSZXNvdXJjZURlY29kZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDYWNoZWRTY3Jp
cHQ6OkNhY2hlZFNjcmlwdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwg
Y29uc3QgU3RyaW5nJiBjaGFyc2V0LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQorICAgIDogQ2FjaGVk
UmVzb3VyY2UocmVzb3VyY2VSZXF1ZXN0LCBTY3JpcHQsIHNlc3Npb25JRCkKKyAgICAsIG1fZGVj
b2RlcihUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoQVNDSUlMaXRlcmFsKCJhcHBsaWNhdGlv
bi9qYXZhc2NyaXB0IiksIGNoYXJzZXQpKQoreworICAgIC8vIEl0J3MgamF2YXNjcmlwdCB3ZSB3
YW50LgorICAgIC8vIEJ1dCBzb21lIHdlYnNpdGVzIHRoaW5rIHRoZWlyIHNjcmlwdHMgYXJlIDxz
b21lIHdyb25nIG1pbWV0eXBlIGhlcmU+CisgICAgLy8gYW5kIHJlZnVzZSB0byBzZXJ2ZSB0aGVt
IGlmIHdlIG9ubHkgYWNjZXB0IGFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdC4KKyAgICBzZXRBY2Nl
cHQoIiovKiIpOworfQorCitDYWNoZWRTY3JpcHQ6On5DYWNoZWRTY3JpcHQoKQoreworfQorCit2
b2lkIENhY2hlZFNjcmlwdDo6c2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJiBjaHMpCit7CisgICAg
bV9kZWNvZGVyLT5zZXRFbmNvZGluZyhjaHMsIFRleHRSZXNvdXJjZURlY29kZXI6OkVuY29kaW5n
RnJvbUhUVFBIZWFkZXIpOworfQorCitTdHJpbmcgQ2FjaGVkU2NyaXB0OjplbmNvZGluZygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKS5uYW1lKCk7Cit9CisKK1N0
cmluZyBDYWNoZWRTY3JpcHQ6Om1pbWVUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZXh0cmFj
dE1JTUVUeXBlRnJvbU1lZGlhVHlwZShtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVh
ZGVyTmFtZTo6Q29udGVudFR5cGUpKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOworfQorCitT
dHJpbmdWaWV3IENhY2hlZFNjcmlwdDo6c2NyaXB0KCkKK3sKKyAgICBpZiAoIW1fZGF0YSkKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmIChtX2RlY29kaW5nU3RhdGUgPT0gTmV2ZXJEZWNv
ZGVkCisgICAgICAgICYmIFRleHRFbmNvZGluZyhlbmNvZGluZygpKS5pc0J5dGVCYXNlZEVuY29k
aW5nKCkKKyAgICAgICAgJiYgbV9kYXRhLT5zaXplKCkKKyAgICAgICAgJiYgY2hhcmFjdGVyc0Fy
ZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihtX2RhdGEtPmRhdGEoKSks
IG1fZGF0YS0+c2l6ZSgpKSkgeworCisgICAgICAgIG1fZGVjb2RpbmdTdGF0ZSA9IERhdGFBbmRE
ZWNvZGVkU3RyaW5nSGF2ZVNhbWVCeXRlczsKKworICAgICAgICAvLyBJZiB0aGUgZW5jb2RlZCBh
bmQgZGVjb2RlZCBkYXRhIGFyZSB0aGUgc2FtZSwgdGhlcmUgaXMgbm8gZGVjb2RlZCBkYXRhIGNv
c3QhCisgICAgICAgIHNldERlY29kZWRTaXplKDApOworICAgICAgICBtX2RlY29kZWREYXRhRGVs
ZXRpb25UaW1lci5zdG9wKCk7CisKKyAgICAgICAgbV9zY3JpcHRIYXNoID0gU3RyaW5nSGFzaGVy
Ojpjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4obV9kYXRhLT5kYXRhKCkpLCBtX2RhdGEtPnNpemUoKSk7CisgICAgfQorCisgICAgaWYgKG1f
ZGVjb2RpbmdTdGF0ZSA9PSBEYXRhQW5kRGVjb2RlZFN0cmluZ0hhdmVTYW1lQnl0ZXMpCisgICAg
ICAgIHJldHVybiB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihtX2RhdGEtPmRhdGEo
KSksIG1fZGF0YS0+c2l6ZSgpIH07CisKKyAgICBpZiAoIW1fc2NyaXB0KSB7CisgICAgICAgIG1f
c2NyaXB0ID0gbV9kZWNvZGVyLT5kZWNvZGVBbmRGbHVzaChtX2RhdGEtPmRhdGEoKSwgZW5jb2Rl
ZFNpemUoKSk7CisgICAgICAgIEFTU0VSVCghbV9zY3JpcHRIYXNoIHx8IG1fc2NyaXB0SGFzaCA9
PSBtX3NjcmlwdC5pbXBsKCktPmhhc2goKSk7CisgICAgICAgIGlmIChtX2RlY29kaW5nU3RhdGUg
PT0gTmV2ZXJEZWNvZGVkKQorICAgICAgICAgICAgbV9zY3JpcHRIYXNoID0gbV9zY3JpcHQuaW1w
bCgpLT5oYXNoKCk7CisgICAgICAgIG1fZGVjb2RpbmdTdGF0ZSA9IERhdGFBbmREZWNvZGVkU3Ry
aW5nSGF2ZURpZmZlcmVudEJ5dGVzOworICAgICAgICBzZXREZWNvZGVkU2l6ZShtX3NjcmlwdC5z
aXplSW5CeXRlcygpKTsKKyAgICB9CisKKyAgICBtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lci5y
ZXN0YXJ0KCk7CisgICAgcmV0dXJuIG1fc2NyaXB0OworfQorCit1bnNpZ25lZCBDYWNoZWRTY3Jp
cHQ6OnNjcmlwdEhhc2goKQoreworICAgIGlmIChtX2RlY29kaW5nU3RhdGUgPT0gTmV2ZXJEZWNv
ZGVkKQorICAgICAgICBzY3JpcHQoKTsKKyAgICByZXR1cm4gbV9zY3JpcHRIYXNoOworfQorCit2
b2lkIENhY2hlZFNjcmlwdDo6ZmluaXNoTG9hZGluZyhTaGFyZWRCdWZmZXIqIGRhdGEpCit7Cisg
ICAgbV9kYXRhID0gZGF0YTsKKyAgICBzZXRFbmNvZGVkU2l6ZShkYXRhID8gZGF0YS0+c2l6ZSgp
IDogMCk7CisgICAgQ2FjaGVkUmVzb3VyY2U6OmZpbmlzaExvYWRpbmcoZGF0YSk7Cit9CisKK3Zv
aWQgQ2FjaGVkU2NyaXB0OjpkZXN0cm95RGVjb2RlZERhdGEoKQoreworICAgIG1fc2NyaXB0ID0g
U3RyaW5nKCk7CisgICAgc2V0RGVjb2RlZFNpemUoMCk7Cit9CisKKyNpZiBFTkFCTEUoTk9TTklG
RikKK2Jvb2wgQ2FjaGVkU2NyaXB0OjptaW1lVHlwZUFsbG93ZWRCeU5vc25pZmYoKSBjb25zdAor
eworICAgIHJldHVybiBwYXJzZUNvbnRlbnRUeXBlT3B0aW9uc0hlYWRlcihtX3Jlc3BvbnNlLmh0
dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6WENvbnRlbnRUeXBlT3B0aW9ucykpICE9IENv
bnRlbnRUeXBlT3B0aW9uc05vc25pZmYgfHwgTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRK
YXZhU2NyaXB0TUlNRVR5cGUobWltZVR5cGUoKSk7Cit9CisjZW5kaWYKKworYm9vbCBDYWNoZWRT
Y3JpcHQ6OnNob3VsZElnbm9yZUhUVFBTdGF0dXNDb2RlRXJyb3JzKCkgY29uc3QKK3sKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJv
YmxlbS8xMzkxNjI5MT4KKyAgICAvLyBSRUdSRVNTSU9OIChyMTE5NzU5KTogQWRvYmUgRmxhc2gg
UGxheWVyICJzbWFsbGVyIiBpbnN0YWxsZXIgcmVsaWVzIG9uIHRoZSBpbmNvcnJlY3QgZmlyaW5n
CisgICAgLy8gb2YgYSBsb2FkIGV2ZW50IGFuZCBuZWVkcyBhbiBhcHAtc3BlY2lmaWMgaGFjayBm
b3IgY29tcGF0aWJpbGl0eS4KKyAgICAvLyBUaGUgaW5zdGFsbGVyIGluIHF1ZXN0aW9uIHRyaWVz
IHRvIGxvYWQgLmpzIGZpbGUgdGhhdCBkb2Vzbid0IGV4aXN0LCBjYXVzaW5nIHRoZSBzZXJ2ZXIg
dG8KKyAgICAvLyByZXR1cm4gYSA0MDQgcmVzcG9uc2UuIE5vcm1hbGx5LCB0aGlzIHdvdWxkIHRy
aWdnZXIgYW4gZXJyb3IgZXZlbnQgdG8gYmUgZGlzcGF0Y2hlZCwgYnV0IHRoZQorICAgIC8vIGlu
c3RhbGxlciBleHBlY3RzIGEgbG9hZCBldmVudCBpbnN0ZWFkIHNvIHdlIHdvcmsgYXJvdW5kIGl0
IGhlcmUuCisgICAgaWYgKE1hY0FwcGxpY2F0aW9uOjppc1NvbGlkU3RhdGVOZXR3b3Jrc0Rvd25s
b2FkZXIoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKworICAgIHJldHVybiBDYWNo
ZWRSZXNvdXJjZTo6c2hvdWxkSWdub3JlSFRUUFN0YXR1c0NvZGVFcnJvcnMoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Zl
dGNoL0NhY2hlZFNjcmlwdC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFNj
cmlwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmRiZjFkMTQxNmM1MjBmOTE0NzcxZGI5MzA1ZjI1ODM3YmY0Y2Ix
ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVk
U2NyaXB0LmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFy
cyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGly
ayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVl
bCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQorICAgIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisg
ICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRp
bmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKKyAgICBwYWdlcyBmcm9tIHRoZSB3ZWIu
IEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KKyovCisKKyNpZm5kZWYg
Q2FjaGVkU2NyaXB0X2gKKyNkZWZpbmUgQ2FjaGVkU2NyaXB0X2gKKworI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGV4dFJlc291cmNl
RGVjb2RlcjsKKworY2xhc3MgQ2FjaGVkU2NyaXB0IGZpbmFsIDogcHVibGljIENhY2hlZFJlc291
cmNlIHsKK3B1YmxpYzoKKyAgICBDYWNoZWRTY3JpcHQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgU3RyaW5nJiBjaGFyc2V0LCBTZXNzaW9uSUQpOworICAgIHZpcnR1YWwgfkNhY2hlZFNj
cmlwdCgpOworCisgICAgU3RyaW5nVmlldyBzY3JpcHQoKTsKKyAgICB1bnNpZ25lZCBzY3JpcHRI
YXNoKCk7CisKKyAgICBTdHJpbmcgbWltZVR5cGUoKSBjb25zdDsKKworI2lmIEVOQUJMRShOT1NO
SUZGKQorICAgIGJvb2wgbWltZVR5cGVBbGxvd2VkQnlOb3NuaWZmKCkgY29uc3Q7CisjZW5kaWYK
KworcHJpdmF0ZToKKyAgICBib29sIG1heVRyeVJlcGxhY2VFbmNvZGVkRGF0YSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIGJvb2wgc2hvdWxkSWdub3JlSFRUUFN0YXR1
c0NvZGVFcnJvcnMoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0RW5jb2RpbmcoY29u
c3QgU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgU3RyaW5nIGVuY29kaW5nKCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogdGV4dFJlc291cmNlRGVjb2Rlcigp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVjb2Rlci5nZXQoKTsgfQorICAgIHZvaWQgZmlu
aXNoTG9hZGluZyhTaGFyZWRCdWZmZXIqKSBvdmVycmlkZTsKKworICAgIHZvaWQgZGVzdHJveURl
Y29kZWREYXRhKCkgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgbV9zY3JpcHQ7CisgICAgdW5zaWdu
ZWQgbV9zY3JpcHRIYXNoIHsgMCB9OworCisgICAgZW51bSBEZWNvZGluZ1N0YXRlIHsgTmV2ZXJE
ZWNvZGVkLCBEYXRhQW5kRGVjb2RlZFN0cmluZ0hhdmVTYW1lQnl0ZXMsIERhdGFBbmREZWNvZGVk
U3RyaW5nSGF2ZURpZmZlcmVudEJ5dGVzIH07CisgICAgRGVjb2RpbmdTdGF0ZSBtX2RlY29kaW5n
U3RhdGUgeyBOZXZlckRlY29kZWQgfTsKKworICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVy
PiBtX2RlY29kZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfQ0FDSEVEX1JFU09VUkNFKENhY2hlZFNjcmlwdCwgQ2FjaGVkUmVzb3VyY2U6
OlNjcmlwdCkKKworI2VuZGlmIC8vIENhY2hlZFNjcmlwdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkU3R5bGVTaGVldENsaWVudC5oIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFN0eWxlU2hlZXRDbGllbnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
YWEyOTJhNzFkZGRlYzlhNGI1NDkyY2YyNmU0YWY5OWVmZTEyZTI4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFN0eWxlU2hlZXRDbGllbnQuaApA
QCAtMCwwICsxLDQ4IEBACisvKgorIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9s
bEBtcGktaGQubXBnLmRlKQorIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxs
ZXJAa2RlLm9yZz4KKyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIAorIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAKKyBU
aGlzIGNsYXNzIHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBp
bWFnZXMsIHN0eWxlIHNoZWV0cyBhbmQgaHRtbAorIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFz
IGEgbWVtb3J5IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgorICovCisKKyNpZm5kZWYgQ2FjaGVk
U3R5bGVTaGVldENsaWVudF9oCisjZGVmaW5lIENhY2hlZFN0eWxlU2hlZXRDbGllbnRfaAorCisj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhY2hlZENTU1N0eWxlU2hlZXQ7Citj
bGFzcyBVUkw7CisKK2NsYXNzIENhY2hlZFN0eWxlU2hlZXRDbGllbnQgOiBwdWJsaWMgQ2FjaGVk
UmVzb3VyY2VDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkNhY2hlZFN0eWxlU2hlZXRD
bGllbnQoKSB7IH0KKyAgICBzdGF0aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnRUeXBlIGV4cGVjdGVk
VHlwZSgpIHsgcmV0dXJuIFN0eWxlU2hlZXRUeXBlOyB9CisgICAgQ2FjaGVkUmVzb3VyY2VDbGll
bnRUeXBlIHJlc291cmNlQ2xpZW50VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGV4cGVj
dGVkVHlwZSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldENTU1N0eWxlU2hlZXQoY29uc3QgU3Ry
aW5nJiAvKiBocmVmICovLCBjb25zdCBVUkwmIC8qIGJhc2VVUkwgKi8sIGNvbnN0IFN0cmluZyYg
LyogY2hhcnNldCAqLywgY29uc3QgQ2FjaGVkQ1NTU3R5bGVTaGVldCopIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBzZXRYU0xTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgLyogaHJlZiAqLywgY29uc3Qg
VVJMJiAvKiBiYXNlVVJMICovLCBjb25zdCBTdHJpbmcmIC8qIHNoZWV0ICovKSB7IH0KK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENhY2hlZFN0eWxlU2hlZXRDbGll
bnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFRleHRU
cmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkVGV4dFRyYWNrLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45NWNiNGFlODI0YTMwMzg4NTY1OGJiODY5NzBmZWU3ODhlOWQ5NGYxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFRleHRU
cmFjay5jcHAKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworI2luY2x1ZGUgIkNhY2hlZFRleHRUcmFj
ay5oIgorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVy
LmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVj
b2Rlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NhY2hlZFRleHRUcmFjazo6Q2FjaGVk
VGV4dFRyYWNrKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBTZXNzaW9u
SUQgc2Vzc2lvbklEKQorICAgIDogQ2FjaGVkUmVzb3VyY2UocmVzb3VyY2VSZXF1ZXN0LCBUZXh0
VHJhY2tSZXNvdXJjZSwgc2Vzc2lvbklEKQoreworfQorCit2b2lkIENhY2hlZFRleHRUcmFjazo6
dXBkYXRlRGF0YShTaGFyZWRCdWZmZXIqIGRhdGEpCit7CisgICAgQVNTRVJUKGRhdGFCdWZmZXJp
bmdQb2xpY3koKSA9PSBCdWZmZXJEYXRhKTsKKyAgICBtX2RhdGEgPSBkYXRhOworICAgIHNldEVu
Y29kZWRTaXplKGRhdGEgPyBkYXRhLT5zaXplKCkgOiAwKTsKKworICAgIENhY2hlZFJlc291cmNl
Q2xpZW50V2Fsa2VyPENhY2hlZFJlc291cmNlQ2xpZW50PiB3YWxrZXIobV9jbGllbnRzKTsKKyAg
ICB3aGlsZSAoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCA9IHdhbGtlci5uZXh0KCkpCisg
ICAgICAgIGNsaWVudC0+ZGVwcmVjYXRlZERpZFJlY2VpdmVDYWNoZWRSZXNvdXJjZSh0aGlzKTsK
K30KKwordm9pZCBDYWNoZWRUZXh0VHJhY2s6OmFkZERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJiBk
YXRhKQoreworICAgIHVwZGF0ZURhdGEoJmRhdGEpOworICAgIENhY2hlZFJlc291cmNlOjphZGRE
YXRhQnVmZmVyKGRhdGEpOworfQorCit2b2lkIENhY2hlZFRleHRUcmFjazo6ZmluaXNoTG9hZGlu
ZyhTaGFyZWRCdWZmZXIqIGRhdGEpCit7CisgICAgdXBkYXRlRGF0YShkYXRhKTsKKyAgICBDYWNo
ZWRSZXNvdXJjZTo6ZmluaXNoTG9hZGluZyhkYXRhKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRUZXh0VHJhY2suaCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRUZXh0VHJhY2suaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
NGU1MzRkMzUwY2FlZDNmYTYzY2EwOTMwZmQ4MmJlYWZlMjYwYTA2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFRleHRUcmFjay5oCkBAIC0wLDAg
KzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENhY2hlZFRleHRUcmFja19oCisjZGVmaW5l
IENhY2hlZFRleHRUcmFja19oCisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlRleHRGbGFncy5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIENhY2hlZFRleHRUcmFjayBmaW5hbCA6IHB1YmxpYyBDYWNoZWRS
ZXNvdXJjZSB7CitwdWJsaWM6CisgICAgQ2FjaGVkVGV4dFRyYWNrKGNvbnN0IFJlc291cmNlUmVx
dWVzdCYsIFNlc3Npb25JRCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBtYXlUcnlSZXBsYWNlRW5j
b2RlZERhdGEoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBhZGRE
YXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYpIG92ZXJyaWRlOworICAgIHZvaWQgZmluaXNoTG9hZGlu
ZyhTaGFyZWRCdWZmZXIqKSBvdmVycmlkZTsKKworICAgIHZvaWQgdXBkYXRlRGF0YShTaGFyZWRC
dWZmZXIqKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19DQUNIRURfUkVTT1VSQ0UoQ2FjaGVkVGV4dFRyYWNrLCBDYWNoZWRSZXNvdXJjZTo6
VGV4dFRyYWNrUmVzb3VyY2UpCisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNl
bmRpZiAvLyBDYWNoZWRUZXh0VHJhY2tfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2ZldGNoL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2ZldGNoL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiYzE0ZmZmMjYwNzhj
OGQyOWI2OGQyMmU5MjU4MGI0NWQ1M2IxNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAKQEAgLTAsMCArMSw5MSBA
QAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1w
Zy5kZSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9y
ZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFp
bC5jb20pCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFs
bCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxlIHNoZWV0cyBh
bmQgaHRtbAorICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hlIGZv
ciB0aGVzZSBvYmplY3RzLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNh
Y2hlZFhTTFN0eWxlU2hlZXQuaCIKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50V2Fs
a2VyLmgiCisjaW5jbHVkZSAiQ2FjaGVkU3R5bGVTaGVldENsaWVudC5oIgorI2luY2x1ZGUgIlNo
YXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisjaWYgRU5BQkxFKFhTTFQpCisKK0NhY2hlZFhTTFN0eWxlU2hlZXQ6
OkNhY2hlZFhTTFN0eWxlU2hlZXQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVl
c3QsIFNlc3Npb25JRCBzZXNzaW9uSUQpCisgICAgOiBDYWNoZWRSZXNvdXJjZShyZXNvdXJjZVJl
cXVlc3QsIFhTTFN0eWxlU2hlZXQsIHNlc3Npb25JRCkKKyAgICAsIG1fZGVjb2RlcihUZXh0UmVz
b3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQveHNsIikpCit7CisgICAgLy8gSXQncyBYTUwgd2Ug
d2FudC4KKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWNjZXB0IG1vcmUgZ2VuZXJhbCB4bWwg
Zm9ybWF0cyAqLyoreG1sLCBpbWFnZS9zdmcreG1sIGZvciBleGFtcGxlLgorICAgIHNldEFjY2Vw
dCgidGV4dC94bWwsIGFwcGxpY2F0aW9uL3htbCwgYXBwbGljYXRpb24veGh0bWwreG1sLCB0ZXh0
L3hzbCwgYXBwbGljYXRpb24vcnNzK3htbCwgYXBwbGljYXRpb24vYXRvbSt4bWwiKTsKK30KKwor
Q2FjaGVkWFNMU3R5bGVTaGVldDo6fkNhY2hlZFhTTFN0eWxlU2hlZXQoKQoreworfQorCit2b2lk
IENhY2hlZFhTTFN0eWxlU2hlZXQ6OmRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCog
YykKK3sgIAorICAgIEFTU0VSVChjLT5yZXNvdXJjZUNsaWVudFR5cGUoKSA9PSBDYWNoZWRTdHls
ZVNoZWV0Q2xpZW50OjpleHBlY3RlZFR5cGUoKSk7CisgICAgaWYgKCFpc0xvYWRpbmcoKSkKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8Q2FjaGVkU3R5bGVTaGVldENsaWVudCo+KGMpLT5zZXRYU0xTdHls
ZVNoZWV0KG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLCBtX3Jlc3BvbnNlLnVybCgpLCBtX3NoZWV0
KTsKK30KKwordm9pZCBDYWNoZWRYU0xTdHlsZVNoZWV0OjpzZXRFbmNvZGluZyhjb25zdCBTdHJp
bmcmIGNocykKK3sKKyAgICBtX2RlY29kZXItPnNldEVuY29kaW5nKGNocywgVGV4dFJlc291cmNl
RGVjb2Rlcjo6RW5jb2RpbmdGcm9tSFRUUEhlYWRlcik7Cit9CisKK1N0cmluZyBDYWNoZWRYU0xT
dHlsZVNoZWV0OjplbmNvZGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGVjb2Rlci0+ZW5j
b2RpbmcoKS5uYW1lKCk7Cit9CisKK3ZvaWQgQ2FjaGVkWFNMU3R5bGVTaGVldDo6ZmluaXNoTG9h
ZGluZyhTaGFyZWRCdWZmZXIqIGRhdGEpCit7CisgICAgbV9kYXRhID0gZGF0YTsKKyAgICBzZXRF
bmNvZGVkU2l6ZShkYXRhID8gZGF0YS0+c2l6ZSgpIDogMCk7CisgICAgaWYgKGRhdGEpCisgICAg
ICAgIG1fc2hlZXQgPSBtX2RlY29kZXItPmRlY29kZUFuZEZsdXNoKGRhdGEtPmRhdGEoKSwgZW5j
b2RlZFNpemUoKSk7CisgICAgc2V0TG9hZGluZyhmYWxzZSk7CisgICAgY2hlY2tOb3RpZnkoKTsK
K30KKwordm9pZCBDYWNoZWRYU0xTdHlsZVNoZWV0OjpjaGVja05vdGlmeSgpCit7CisgICAgaWYg
KGlzTG9hZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQ2FjaGVkUmVzb3VyY2VD
bGllbnRXYWxrZXI8Q2FjaGVkU3R5bGVTaGVldENsaWVudD4gdyhtX2NsaWVudHMpOworICAgIHdo
aWxlIChDYWNoZWRTdHlsZVNoZWV0Q2xpZW50KiBjID0gdy5uZXh0KCkpCisgICAgICAgIGMtPnNl
dFhTTFN0eWxlU2hlZXQobV9yZXNvdXJjZVJlcXVlc3QudXJsKCksIG1fcmVzcG9uc2UudXJsKCks
IG1fc2hlZXQpOworfQorCisjZW5kaWYKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2ZldGNoL0NhY2hlZFhTTFN0eWxlU2hlZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9mZXRjaC9DYWNoZWRYU0xTdHlsZVNoZWV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGVjZmY0NWVmNGRmMWYx
OTE3YmI4YzQ5NDVmZjJmYTlkNjY4ZjU2ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9mZXRjaC9DYWNoZWRYU0xTdHlsZVNoZWV0LmgKQEAgLTAsMCArMSw2MyBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5k
ZSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+
CisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwu
Y29tKQorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwg
ZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5k
IGh0bWwKKyAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3Ig
dGhlc2Ugb2JqZWN0cy4KKyovCisKKyNpZm5kZWYgQ2FjaGVkWFNMU3R5bGVTaGVldF9oCisjZGVm
aW5lIENhY2hlZFhTTFN0eWxlU2hlZXRfaAorCisjaWYgRU5BQkxFKFhTTFQpCisKKyNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHRS
ZXNvdXJjZURlY29kZXI7CisKK2NsYXNzIENhY2hlZFhTTFN0eWxlU2hlZXQgZmluYWwgOiBwdWJs
aWMgQ2FjaGVkUmVzb3VyY2UgeworcHVibGljOgorICAgIENhY2hlZFhTTFN0eWxlU2hlZXQoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2Vzc2lvbklEKTsKKyAgICB2aXJ0dWFsIH5DYWNoZWRYU0xT
dHlsZVNoZWV0KCk7CisKKyAgICBjb25zdCBTdHJpbmcmIHNoZWV0KCkgY29uc3QgeyByZXR1cm4g
bV9zaGVldDsgfQorCitwcml2YXRlOgorICAgIHZvaWQgY2hlY2tOb3RpZnkoKSBvdmVycmlkZTsK
KyAgICBib29sIG1heVRyeVJlcGxhY2VFbmNvZGVkRGF0YSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KKyAgICB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCop
IG92ZXJyaWRlOworICAgIHZvaWQgc2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7
CisgICAgU3RyaW5nIGVuY29kaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgY29uc3QgVGV4dFJl
c291cmNlRGVjb2RlciogdGV4dFJlc291cmNlRGVjb2RlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fZGVjb2Rlci5nZXQoKTsgfQorICAgIHZvaWQgZmluaXNoTG9hZGluZyhTaGFyZWRCdWZm
ZXIqKSBvdmVycmlkZTsKKworICAgIFN0cmluZyBtX3NoZWV0OworICAgIFJlZlB0cjxUZXh0UmVz
b3VyY2VEZWNvZGVyPiBtX2RlY29kZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FDSEVEX1JFU09VUkNFKENhY2hlZFhTTFN0eWxlU2hl
ZXQsIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0KQorCisjZW5kaWYgLy8gRU5BQkxFKFhT
TFQpCisKKyNlbmRpZiAvLyBDYWNoZWRYU0xTdHlsZVNoZWV0X2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9NZW1vcnlDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvZmV0Y2gvTWVtb3J5Q2FjaGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY5MzUwMWU0YjI5ZjZiODI5
YTYyNTE4YTg1ZDg1MGIxZWYwNDZkZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvZmV0Y2gvTWVtb3J5Q2FjaGUuY3BwCkBAIC0wLDAgKzEsODAwIEBACisvKgorICAg
IENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQorICAg
IENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDIgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQorICAgIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1lbW9y
eUNhY2hlLmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkNhY2hlZElt
YWdlLmgiCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2VDbGllbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyVHlwZXMuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgor
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQdWJsaWNTdWZmaXguaCIKKyNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJXb3JrZXJHbG9iYWxTY29wZS5oIgorI2luY2x1
ZGUgIldvcmtlckxvYWRlclByb3h5LmgiCisjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCisjaW5j
bHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1
ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGludCBjRGVmYXVsdENhY2hl
Q2FwYWNpdHkgPSA4MTkyICogMTAyNDsKK3N0YXRpYyBjb25zdCBkb3VibGUgY01pbkRlbGF5QmVm
b3JlTGl2ZURlY29kZWRQcnVuZSA9IDE7IC8vIFNlY29uZHMuCitzdGF0aWMgY29uc3QgZmxvYXQg
Y1RhcmdldFBydW5lUGVyY2VudGFnZSA9IC45NWY7IC8vIFBlcmNlbnRhZ2Ugb2YgY2FwYWNpdHkg
dG93YXJkIHdoaWNoIHdlIHBydW5lLCB0byBhdm9pZCBpbW1lZGlhdGVseSBwcnVuaW5nIGFnYWlu
Lgorc3RhdGljIGNvbnN0IGF1dG8gZGVmYXVsdERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCA9
IHN0ZDo6Y2hyb25vOjpzZWNvbmRzIHsgMCB9OworCitNZW1vcnlDYWNoZSYgTWVtb3J5Q2FjaGU6
OnNpbmdsZXRvbigpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1vcnlDYWNoZT4gbWVtb3J5Q2FjaGU7CisgICAgcmV0dXJu
IG1lbW9yeUNhY2hlOworfQorCitNZW1vcnlDYWNoZTo6TWVtb3J5Q2FjaGUoKQorICAgIDogbV9k
aXNhYmxlZChmYWxzZSkKKyAgICAsIG1faW5QcnVuZVJlc291cmNlcyhmYWxzZSkKKyAgICAsIG1f
Y2FwYWNpdHkoY0RlZmF1bHRDYWNoZUNhcGFjaXR5KQorICAgICwgbV9taW5EZWFkQ2FwYWNpdHko
MCkKKyAgICAsIG1fbWF4RGVhZENhcGFjaXR5KGNEZWZhdWx0Q2FjaGVDYXBhY2l0eSkKKyAgICAs
IG1fZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbChkZWZhdWx0RGVjb2RlZERhdGFEZWxl
dGlvbkludGVydmFsKQorICAgICwgbV9saXZlU2l6ZSgwKQorICAgICwgbV9kZWFkU2l6ZSgwKQor
ICAgICwgbV9wcnVuZVRpbWVyKCp0aGlzLCAmTWVtb3J5Q2FjaGU6OnBydW5lKQoreworfQorCith
dXRvIE1lbW9yeUNhY2hlOjpzZXNzaW9uUmVzb3VyY2VNYXAoU2Vzc2lvbklEIHNlc3Npb25JRCkg
Y29uc3QgLT4gQ2FjaGVkUmVzb3VyY2VNYXAqCit7CisgICAgQVNTRVJUKHNlc3Npb25JRC5pc1Zh
bGlkKCkpOworICAgIHJldHVybiBtX3Nlc3Npb25SZXNvdXJjZXMuZ2V0KHNlc3Npb25JRCk7Cit9
CisKK2F1dG8gTWVtb3J5Q2FjaGU6OmVuc3VyZVNlc3Npb25SZXNvdXJjZU1hcChTZXNzaW9uSUQg
c2Vzc2lvbklEKSAtPiBDYWNoZWRSZXNvdXJjZU1hcCYKK3sKKyAgICBBU1NFUlQoc2Vzc2lvbklE
LmlzVmFsaWQoKSk7CisgICAgYXV0byYgbWFwID0gbV9zZXNzaW9uUmVzb3VyY2VzLmFkZChzZXNz
aW9uSUQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAoIW1hcCkKKyAgICAgICAg
bWFwID0gc3RkOjptYWtlX3VuaXF1ZTxDYWNoZWRSZXNvdXJjZU1hcD4oKTsKKyAgICByZXR1cm4g
Km1hcDsKK30KKworVVJMIE1lbW9yeUNhY2hlOjpyZW1vdmVGcmFnbWVudElkZW50aWZpZXJJZk5l
ZWRlZChjb25zdCBVUkwmIG9yaWdpbmFsVVJMKQoreworICAgIGlmICghb3JpZ2luYWxVUkwuaGFz
RnJhZ21lbnRJZGVudGlmaWVyKCkpCisgICAgICAgIHJldHVybiBvcmlnaW5hbFVSTDsKKyAgICAv
LyBTdHJpcCBhd2F5IGZyYWdtZW50IGlkZW50aWZpZXIgZnJvbSBIVFRQIFVSTHMuCisgICAgLy8g
RGF0YSBVUkxzIG11c3QgYmUgdW5tb2RpZmllZC4gRm9yIGZpbGUgYW5kIGN1c3RvbSBVUkxzIGNs
aWVudHMgbWF5IGV4cGVjdCByZXNvdXJjZXMgCisgICAgLy8gdG8gYmUgdW5pcXVlIGV2ZW4gd2hl
biB0aGV5IGRpZmZlciBieSB0aGUgZnJhZ21lbnQgaWRlbnRpZmllciBvbmx5LgorICAgIGlmICgh
b3JpZ2luYWxVUkwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQorICAgICAgICByZXR1cm4gb3Jp
Z2luYWxVUkw7CisgICAgVVJMIHVybCA9IG9yaWdpbmFsVVJMOworICAgIHVybC5yZW1vdmVGcmFn
bWVudElkZW50aWZpZXIoKTsKKyAgICByZXR1cm4gdXJsOworfQorCitib29sIE1lbW9yeUNhY2hl
OjphZGQoQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQoreworICAgIGlmIChkaXNhYmxlZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7
CisKKyNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQorICAgIGF1dG8ga2V5ID0gc3RkOjpt
YWtlX3BhaXIocmVzb3VyY2UudXJsKCksIHJlc291cmNlLmNhY2hlUGFydGl0aW9uKCkpOworI2Vs
c2UKKyAgICBhdXRvJiBrZXkgPSByZXNvdXJjZS51cmwoKTsKKyNlbmRpZgorICAgIGVuc3VyZVNl
c3Npb25SZXNvdXJjZU1hcChyZXNvdXJjZS5zZXNzaW9uSUQoKSkuc2V0KGtleSwgJnJlc291cmNl
KTsKKyAgICByZXNvdXJjZS5zZXRJbkNhY2hlKHRydWUpOworICAgIAorICAgIHJlc291cmNlQWNj
ZXNzZWQocmVzb3VyY2UpOworICAgIAorICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJNZW1vcnlD
YWNoZTo6YWRkIEFkZGVkICclcycsIHJlc291cmNlICVwXG4iLCByZXNvdXJjZS51cmwoKS5zdHJp
bmcoKS5sYXRpbjEoKS5kYXRhKCksICZyZXNvdXJjZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgTWVtb3J5Q2FjaGU6OnJldmFsaWRhdGlvblN1Y2NlZWRlZChDYWNoZWRSZXNvdXJjZSYg
cmV2YWxpZGF0aW5nUmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQor
eworICAgIEFTU0VSVChyZXZhbGlkYXRpbmdSZXNvdXJjZS5yZXNvdXJjZVRvUmV2YWxpZGF0ZSgp
KTsKKyAgICBDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UgPSAqcmV2YWxpZGF0aW5nUmVzb3VyY2Uu
cmVzb3VyY2VUb1JldmFsaWRhdGUoKTsKKyAgICBBU1NFUlQoIXJlc291cmNlLmluQ2FjaGUoKSk7
CisgICAgQVNTRVJUKHJlc291cmNlLmlzTG9hZGVkKCkpOworCisgICAgLy8gQ2FsbGluZyByZW1v
dmUoKSBjYW4gcG90ZW50aWFsbHkgZGVsZXRlIHJldmFsaWRhdGluZ1Jlc291cmNlLCB3aGljaCB3
ZSB1c2UKKyAgICAvLyBiZWxvdy4gVGhpcyBtdXN0bid0IGJlIHRoZSBjYXNlIHNpbmNlIHJldmFs
aWRhdGlvbiBtZWFucyBpdCBpcyBsb2FkZWQKKyAgICAvLyBhbmQgc28gY2FuRGVsZXRlKCkgaXMg
ZmFsc2UuCisgICAgQVNTRVJUKCFyZXZhbGlkYXRpbmdSZXNvdXJjZS5jYW5EZWxldGUoKSk7CisK
KyAgICByZW1vdmUocmV2YWxpZGF0aW5nUmVzb3VyY2UpOworCisgICAgYXV0byYgcmVzb3VyY2Vz
ID0gZW5zdXJlU2Vzc2lvblJlc291cmNlTWFwKHJlc291cmNlLnNlc3Npb25JRCgpKTsKKyNpZiBF
TkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQorICAgIGF1dG8ga2V5ID0gc3RkOjptYWtlX3BhaXIo
cmVzb3VyY2UudXJsKCksIHJlc291cmNlLmNhY2hlUGFydGl0aW9uKCkpOworI2Vsc2UKKyAgICBh
dXRvJiBrZXkgPSByZXNvdXJjZS51cmwoKTsKKyNlbmRpZgorICAgIEFTU0VSVCghcmVzb3VyY2Vz
LmdldChrZXkpKTsKKyAgICByZXNvdXJjZXMuc2V0KGtleSwgJnJlc291cmNlKTsKKyAgICByZXNv
dXJjZS5zZXRJbkNhY2hlKHRydWUpOworICAgIHJlc291cmNlLnVwZGF0ZVJlc3BvbnNlQWZ0ZXJS
ZXZhbGlkYXRpb24ocmVzcG9uc2UpOworICAgIGluc2VydEluTFJVTGlzdChyZXNvdXJjZSk7Cisg
ICAgaW50IGRlbHRhID0gcmVzb3VyY2Uuc2l6ZSgpOworICAgIGlmIChyZXNvdXJjZS5kZWNvZGVk
U2l6ZSgpICYmIHJlc291cmNlLmhhc0NsaWVudHMoKSkKKyAgICAgICAgaW5zZXJ0SW5MaXZlRGVj
b2RlZFJlc291cmNlc0xpc3QocmVzb3VyY2UpOworICAgIGlmIChkZWx0YSkKKyAgICAgICAgYWRq
dXN0U2l6ZShyZXNvdXJjZS5oYXNDbGllbnRzKCksIGRlbHRhKTsKKyAgICAKKyAgICByZXZhbGlk
YXRpbmdSZXNvdXJjZS5zd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNlKCk7CisgICAg
QVNTRVJUKCFyZXZhbGlkYXRpbmdSZXNvdXJjZS5tX2RlbGV0ZWQpOworICAgIC8vIHRoaXMgZGVs
ZXRlcyB0aGUgcmV2YWxpZGF0aW5nIHJlc291cmNlCisgICAgcmV2YWxpZGF0aW5nUmVzb3VyY2Uu
Y2xlYXJSZXNvdXJjZVRvUmV2YWxpZGF0ZSgpOworfQorCit2b2lkIE1lbW9yeUNhY2hlOjpyZXZh
bGlkYXRpb25GYWlsZWQoQ2FjaGVkUmVzb3VyY2UmIHJldmFsaWRhdGluZ1Jlc291cmNlKQorewor
ICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKyAgICBMT0coUmVzb3VyY2VMb2FkaW5n
LCAiUmV2YWxpZGF0aW9uIGZhaWxlZCBmb3IgJXAiLCAmcmV2YWxpZGF0aW5nUmVzb3VyY2UpOwor
ICAgIEFTU0VSVChyZXZhbGlkYXRpbmdSZXNvdXJjZS5yZXNvdXJjZVRvUmV2YWxpZGF0ZSgpKTsK
KyAgICByZXZhbGlkYXRpbmdSZXNvdXJjZS5jbGVhclJlc291cmNlVG9SZXZhbGlkYXRlKCk7Cit9
CisKK0NhY2hlZFJlc291cmNlKiBNZW1vcnlDYWNoZTo6cmVzb3VyY2VGb3JSZXF1ZXN0KGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU2Vzc2lvbklEIHNlc3Npb25JRCkKK3sKKyAgICBh
dXRvKiByZXNvdXJjZXMgPSBzZXNzaW9uUmVzb3VyY2VNYXAoc2Vzc2lvbklEKTsKKyAgICBpZiAo
IXJlc291cmNlcykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHJlc291cmNl
Rm9yUmVxdWVzdEltcGwocmVxdWVzdCwgKnJlc291cmNlcyk7Cit9CisKK0NhY2hlZFJlc291cmNl
KiBNZW1vcnlDYWNoZTo6cmVzb3VyY2VGb3JSZXF1ZXN0SW1wbChjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIENhY2hlZFJlc291cmNlTWFwJiByZXNvdXJjZXMpCit7CisgICAgQVNTRVJU
KFdURjo6aXNNYWluVGhyZWFkKCkpOworICAgIFVSTCB1cmwgPSByZW1vdmVGcmFnbWVudElkZW50
aWZpZXJJZk5lZWRlZChyZXF1ZXN0LnVybCgpKTsKKworI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJ
T05JTkcpCisgICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcih1cmwsIHJlcXVlc3QuY2FjaGVQ
YXJ0aXRpb24oKSk7CisjZWxzZQorICAgIGF1dG8mIGtleSA9IHVybDsKKyNlbmRpZgorICAgIHJl
dHVybiByZXNvdXJjZXMuZ2V0KGtleSk7Cit9CisKK3Vuc2lnbmVkIE1lbW9yeUNhY2hlOjpkZWFk
Q2FwYWNpdHkoKSBjb25zdCAKK3sKKyAgICAvLyBEZWFkIHJlc291cmNlIGNhcGFjaXR5IGlzIHdo
YXRldmVyIHNwYWNlIGlzIG5vdCBvY2N1cGllZCBieSBsaXZlIHJlc291cmNlcywgYm91bmRlZCBi
eSBhbiBpbmRlcGVuZGVudCBtaW5pbXVtIGFuZCBtYXhpbXVtLgorICAgIHVuc2lnbmVkIGNhcGFj
aXR5ID0gbV9jYXBhY2l0eSAtIHN0ZDo6bWluKG1fbGl2ZVNpemUsIG1fY2FwYWNpdHkpOyAvLyBT
dGFydCB3aXRoIGF2YWlsYWJsZSBjYXBhY2l0eS4KKyAgICBjYXBhY2l0eSA9IHN0ZDo6bWF4KGNh
cGFjaXR5LCBtX21pbkRlYWRDYXBhY2l0eSk7IC8vIE1ha2Ugc3VyZSBpdCdzIGFib3ZlIHRoZSBt
aW5pbXVtLgorICAgIGNhcGFjaXR5ID0gc3RkOjptaW4oY2FwYWNpdHksIG1fbWF4RGVhZENhcGFj
aXR5KTsgLy8gTWFrZSBzdXJlIGl0J3MgYmVsb3cgdGhlIG1heGltdW0uCisgICAgcmV0dXJuIGNh
cGFjaXR5OworfQorCit1bnNpZ25lZCBNZW1vcnlDYWNoZTo6bGl2ZUNhcGFjaXR5KCkgY29uc3Qg
Cit7IAorICAgIC8vIExpdmUgcmVzb3VyY2UgY2FwYWNpdHkgaXMgd2hhdGV2ZXIgaXMgbGVmdCBv
dmVyIGFmdGVyIGNhbGN1bGF0aW5nIGRlYWQgcmVzb3VyY2UgY2FwYWNpdHkuCisgICAgcmV0dXJu
IG1fY2FwYWNpdHkgLSBkZWFkQ2FwYWNpdHkoKTsKK30KKworc3RhdGljIENhY2hlZEltYWdlQ2xp
ZW50JiBkdW1teUNhY2hlZEltYWdlQ2xpZW50KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Q2FjaGVkSW1hZ2VDbGllbnQ+IGNsaWVudDsKKyAgICByZXR1cm4gY2xpZW50OworfQorCiti
b29sIE1lbW9yeUNhY2hlOjphZGRJbWFnZVRvQ2FjaGUoTmF0aXZlSW1hZ2VQdHImJiBpbWFnZSwg
Y29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgZG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24pCit7
CisgICAgQVNTRVJUKGltYWdlKTsKKyAgICBTZXNzaW9uSUQgc2Vzc2lvbklEID0gU2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCk7CisgICAgcmVtb3ZlSW1hZ2VGcm9tQ2FjaGUodXJsLCBkb21h
aW5Gb3JDYWNoZVBhcnRpdGlvbik7IC8vIFJlbW92ZSBjYWNoZSBlbnRyeSBpZiBpdCBhbHJlYWR5
IGV4aXN0cy4KKworICAgIFJlZlB0cjxCaXRtYXBJbWFnZT4gYml0bWFwSW1hZ2UgPSBCaXRtYXBJ
bWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpLCBudWxscHRyKTsKKyAgICBpZiAoIWJpdG1hcElt
YWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVk
SW1hZ2U+IGNhY2hlZEltYWdlID0gc3RkOjptYWtlX3VuaXF1ZTxDYWNoZWRJbWFnZT4odXJsLCBi
aXRtYXBJbWFnZS5nZXQoKSwgQ2FjaGVkSW1hZ2U6Ok1hbnVhbGx5Q2FjaGVkLCBzZXNzaW9uSUQp
OworCisgICAgY2FjaGVkSW1hZ2UtPmFkZENsaWVudCgmZHVtbXlDYWNoZWRJbWFnZUNsaWVudCgp
KTsKKyAgICBjYWNoZWRJbWFnZS0+c2V0RGVjb2RlZFNpemUoYml0bWFwSW1hZ2UtPmRlY29kZWRT
aXplKCkpOworI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCisgICAgY2FjaGVkSW1hZ2Ut
PnJlc291cmNlUmVxdWVzdCgpLnNldERvbWFpbkZvckNhY2hlUGFydGl0aW9uKGRvbWFpbkZvckNh
Y2hlUGFydGl0aW9uKTsKKyNlbmRpZgorICAgIHJldHVybiBhZGQoKmNhY2hlZEltYWdlLnJlbGVh
c2UoKSk7Cit9CisKK3ZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZUltYWdlRnJvbUNhY2hlKGNvbnN0
IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGRvbWFpbkZvckNhY2hlUGFydGl0aW9uKQoreworICAg
IGF1dG8qIHJlc291cmNlcyA9IHNlc3Npb25SZXNvdXJjZU1hcChTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSk7CisgICAgaWYgKCFyZXNvdXJjZXMpCisgICAgICAgIHJldHVybjsKKworI2lm
IEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCisgICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFp
cih1cmwsIFJlc291cmNlUmVxdWVzdDo6cGFydGl0aW9uTmFtZShkb21haW5Gb3JDYWNoZVBhcnRp
dGlvbikpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24p
OworICAgIGF1dG8mIGtleSA9IHVybDsKKyNlbmRpZgorICAgIENhY2hlZFJlc291cmNlKiByZXNv
dXJjZSA9IHJlc291cmNlcy0+Z2V0KGtleSk7CisgICAgaWYgKCFyZXNvdXJjZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gQSByZXNvdXJjZSBleGlzdHMgYW5kIGlzIG5vdCBhIG1hbnVhbGx5
IGNhY2hlZCBpbWFnZSwgc28ganVzdCByZW1vdmUgaXQuCisgICAgaWYgKCFpczxDYWNoZWRJbWFn
ZT4oKnJlc291cmNlKSB8fCAhZG93bmNhc3Q8Q2FjaGVkSW1hZ2U+KCpyZXNvdXJjZSkuaXNNYW51
YWxseUNhY2hlZCgpKSB7CisgICAgICAgIHJlbW92ZSgqcmVzb3VyY2UpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gUmVtb3ZpbmcgdGhlIGxhc3QgY2xpZW50IG9mIGEgQ2FjaGVk
SW1hZ2UgdHVybnMgdGhlIHJlc291cmNlCisgICAgLy8gaW50byBhIGRlYWQgcmVzb3VyY2Ugd2hp
Y2ggd2lsbCBldmVudHVhbGx5IGJlIGV2aWN0ZWQgd2hlbgorICAgIC8vIGRlYWQgcmVzb3VyY2Vz
IGFyZSBwcnVuZWQuIFRoYXQgbWlnaHQgYmUgaW1tZWRpYXRlbHkgc2luY2UKKyAgICAvLyByZW1v
dmluZyB0aGUgbGFzdCBjbGllbnQgdHJpZ2dlcnMgYSBNZW1vcnlDYWNoZTo6cHJ1bmUsIHNvIHRo
ZQorICAgIC8vIHJlc291cmNlIG1heSBiZSBkZWxldGVkIGFmdGVyIHRoaXMgY2FsbC4KKyAgICBk
b3duY2FzdDxDYWNoZWRJbWFnZT4oKnJlc291cmNlKS5yZW1vdmVDbGllbnQoJmR1bW15Q2FjaGVk
SW1hZ2VDbGllbnQoKSk7Cit9CisKK3ZvaWQgTWVtb3J5Q2FjaGU6OnBydW5lTGl2ZVJlc291cmNl
cyhib29sIHNob3VsZERlc3Ryb3lEZWNvZGVkRGF0YUZvckFsbExpdmVSZXNvdXJjZXMpCit7Cisg
ICAgdW5zaWduZWQgY2FwYWNpdHkgPSBzaG91bGREZXN0cm95RGVjb2RlZERhdGFGb3JBbGxMaXZl
UmVzb3VyY2VzID8gMCA6IGxpdmVDYXBhY2l0eSgpOworICAgIGlmIChjYXBhY2l0eSAmJiBtX2xp
dmVTaXplIDw9IGNhcGFjaXR5KQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCB0YXJn
ZXRTaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNhcGFjaXR5ICogY1RhcmdldFBydW5lUGVy
Y2VudGFnZSk7IC8vIEN1dCBieSBhIHBlcmNlbnRhZ2UgdG8gYXZvaWQgaW1tZWRpYXRlbHkgcHJ1
bmluZyBhZ2Fpbi4KKworICAgIHBydW5lTGl2ZVJlc291cmNlc1RvU2l6ZSh0YXJnZXRTaXplLCBz
aG91bGREZXN0cm95RGVjb2RlZERhdGFGb3JBbGxMaXZlUmVzb3VyY2VzKTsKK30KKwordm9pZCBN
ZW1vcnlDYWNoZTo6Zm9yRWFjaFJlc291cmNlKGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChDYWNo
ZWRSZXNvdXJjZSYpPiYgZnVuY3Rpb24pCit7CisgICAgZm9yIChhdXRvJiB1bnByb3RlY3RlZExS
VUxpc3QgOiBtX2FsbFJlc291cmNlcykgeworICAgICAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2VI
YW5kbGU8Q2FjaGVkUmVzb3VyY2U+PiBscnVMaXN0OworICAgICAgICBjb3B5VG9WZWN0b3IoKnVu
cHJvdGVjdGVkTFJVTGlzdCwgbHJ1TGlzdCk7CisgICAgICAgIGZvciAoYXV0byYgcmVzb3VyY2Ug
OiBscnVMaXN0KQorICAgICAgICAgICAgZnVuY3Rpb24oKnJlc291cmNlKTsKKyAgICB9Cit9CisK
K3ZvaWQgTWVtb3J5Q2FjaGU6OmZvckVhY2hTZXNzaW9uUmVzb3VyY2UoU2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkIChDYWNoZWRSZXNvdXJjZSYpPiYgZnVuY3Rp
b24pCit7CisgICAgYXV0byBpdCA9IG1fc2Vzc2lvblJlc291cmNlcy5maW5kKHNlc3Npb25JRCk7
CisgICAgaWYgKGl0ID09IG1fc2Vzc2lvblJlc291cmNlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgVmVjdG9yPENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPj4gcmVz
b3VyY2VzRm9yU2Vzc2lvbjsKKyAgICBjb3B5VmFsdWVzVG9WZWN0b3IoKml0LT52YWx1ZSwgcmVz
b3VyY2VzRm9yU2Vzc2lvbik7CisKKyAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogcmVzb3VyY2Vz
Rm9yU2Vzc2lvbikKKyAgICAgICAgZnVuY3Rpb24oKnJlc291cmNlKTsKK30KKwordm9pZCBNZW1v
cnlDYWNoZTo6ZGVzdHJveURlY29kZWREYXRhRm9yQWxsSW1hZ2VzKCkKK3sKKyAgICBNZW1vcnlD
YWNoZTo6c2luZ2xldG9uKCkuZm9yRWFjaFJlc291cmNlKFtdKENhY2hlZFJlc291cmNlJiByZXNv
dXJjZSkgeworICAgICAgICBpZiAocmVzb3VyY2UuaXNJbWFnZSgpKQorICAgICAgICAgICAgcmVz
b3VyY2UuZGVzdHJveURlY29kZWREYXRhKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgTWVtb3J5Q2Fj
aGU6OnBydW5lTGl2ZVJlc291cmNlc1RvU2l6ZSh1bnNpZ25lZCB0YXJnZXRTaXplLCBib29sIHNo
b3VsZERlc3Ryb3lEZWNvZGVkRGF0YUZvckFsbExpdmVSZXNvdXJjZXMpCit7CisgICAgaWYgKG1f
aW5QcnVuZVJlc291cmNlcykKKyAgICAgICAgcmV0dXJuOworICAgIFRlbXBvcmFyeUNoYW5nZTxi
b29sPiByZWVudHJhbmN5UHJvdGVjdG9yKG1faW5QcnVuZVJlc291cmNlcywgdHJ1ZSk7CisKKyAg
ICBkb3VibGUgY3VycmVudFRpbWUgPSBGcmFtZVZpZXc6OmN1cnJlbnRQYWludFRpbWVTdGFtcCgp
OworICAgIGlmICghY3VycmVudFRpbWUpIC8vIEluIGNhc2UgcHJ1bmUgaXMgY2FsbGVkIGRpcmVj
dGx5LCBvdXRzaWRlIG9mIGEgRnJhbWUgcGFpbnQuCisgICAgICAgIGN1cnJlbnRUaW1lID0gbW9u
b3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisgICAgCisgICAgLy8gRGVzdHJveSBhbnkgZGVj
b2RlZCBkYXRhIGluIGxpdmUgb2JqZWN0cyB0aGF0IHdlIGNhbi4KKyAgICAvLyBTdGFydCBmcm9t
IHRoZSBoZWFkLCBzaW5jZSB0aGlzIGlzIHRoZSBsZWFzdCByZWNlbnRseSBhY2Nlc3NlZCBvZiB0
aGUgb2JqZWN0cy4KKworICAgIC8vIFRoZSBsaXN0IG1pZ2h0IG5vdCBiZSBzb3J0ZWQgYnkgdGhl
IG1fbGFzdERlY29kZWRBY2Nlc3NUaW1lLiBUaGUgaW1wYWN0CisgICAgLy8gb2YgdGhpcyB3ZWFr
ZXIgaW52YXJpYW50IGlzIG1pbm9yIGFzIHRoZSBiZWxvdyBpZiBzdGF0ZW1lbnQgdG8gY2hlY2sg
dGhlCisgICAgLy8gZWxhcHNlZFRpbWUgd2lsbCBldmFsdWF0ZSB0byBmYWxzZSBhcyB0aGUgY3Vy
cmVudFRpbWUgd2lsbCBiZSBhIGxvdAorICAgIC8vIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudC0+
bV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWUuCisgICAgLy8gRm9yIG1vcmUgZGV0YWlscyBzZWU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDIwOQorICAgIGF1dG8gaXQg
PSBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzLmJlZ2luKCk7CisgICAgd2hpbGUgKGl0ICE9IG1fbGl2
ZURlY29kZWRSZXNvdXJjZXMuZW5kKCkpIHsKKyAgICAgICAgYXV0byogY3VycmVudCA9ICppdDsK
KworICAgICAgICAvLyBJbmNyZW1lbnQgdGhlIGl0ZXJhdG9yIG5vdyBiZWNhdXNlIHRoZSBjYWxs
IHRvIGRlc3Ryb3lEZWNvZGVkRGF0YSgpIGJlbG93CisgICAgICAgIC8vIG1heSBjYXVzZSBhIGNh
bGwgdG8gTGlzdEhhc2hTZXQ6OnJlbW92ZSgpIGFuZCBpbnZhbGlkYXRlIHRoZSBjdXJyZW50Cisg
ICAgICAgIC8vIGl0ZXJhdG9yLiBOb3RlIHRoYXQgdGhpcyBpcyBzYWZlIGJlY2F1c2UgdW5saWtl
IGl0ZXJhdGlvbiBvZiBtb3N0CisgICAgICAgIC8vIFdURiBIYXNoIGRhdGEgc3RydWN0dXJlcywg
aXRlcmF0aW9uIGlzIGd1YXJhbnRlZWQgc2FmZSBhZ2FpbnN0IG11dGF0aW9uCisgICAgICAgIC8v
IG9mIHRoZSBMaXN0SGFzaFNldCwgZXhjZXB0IGZvciByZW1vdmFsIG9mIHRoZSBpdGVtIGN1cnJl
bnRseSBwb2ludGVkIHRvCisgICAgICAgIC8vIGJ5IGEgZ2l2ZW4gaXRlcmF0b3IuCisgICAgICAg
ICsraXQ7CisKKyAgICAgICAgQVNTRVJUKGN1cnJlbnQtPmhhc0NsaWVudHMoKSk7CisgICAgICAg
IGlmIChjdXJyZW50LT5pc0xvYWRlZCgpICYmIGN1cnJlbnQtPmRlY29kZWRTaXplKCkpIHsKKyAg
ICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgcmVtYWluaW5nIHJlc291cmNlcyBhcmUg
dG9vIG5ldyB0byBwcnVuZS4KKyAgICAgICAgICAgIGRvdWJsZSBlbGFwc2VkVGltZSA9IGN1cnJl
bnRUaW1lIC0gY3VycmVudC0+bV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWU7CisgICAgICAgICAgICBp
ZiAoIXNob3VsZERlc3Ryb3lEZWNvZGVkRGF0YUZvckFsbExpdmVSZXNvdXJjZXMgJiYgZWxhcHNl
ZFRpbWUgPCBjTWluRGVsYXlCZWZvcmVMaXZlRGVjb2RlZFBydW5lKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAgICAgLy8gRGVzdHJveSBvdXIgZGVjb2RlZCBkYXRhLiBUaGlz
IHdpbGwgcmVtb3ZlIHVzIGZyb20gbV9saXZlRGVjb2RlZFJlc291cmNlcywgYW5kIHBvc3NpYmx5
IG1vdmUgdXMKKyAgICAgICAgICAgIC8vIHRvIGEgZGlmZmVyZW50IExSVSBsaXN0IGluIG1fYWxs
UmVzb3VyY2VzLgorICAgICAgICAgICAgY3VycmVudC0+ZGVzdHJveURlY29kZWREYXRhKCk7CisK
KyAgICAgICAgICAgIGlmICh0YXJnZXRTaXplICYmIG1fbGl2ZVNpemUgPD0gdGFyZ2V0U2l6ZSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTWVt
b3J5Q2FjaGU6OnBydW5lRGVhZFJlc291cmNlcygpCit7CisgICAgdW5zaWduZWQgY2FwYWNpdHkg
PSBkZWFkQ2FwYWNpdHkoKTsKKyAgICBpZiAoY2FwYWNpdHkgJiYgbV9kZWFkU2l6ZSA8PSBjYXBh
Y2l0eSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgdGFyZ2V0U2l6ZSA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihjYXBhY2l0eSAqIGNUYXJnZXRQcnVuZVBlcmNlbnRhZ2UpOyAvLyBD
dXQgYnkgYSBwZXJjZW50YWdlIHRvIGF2b2lkIGltbWVkaWF0ZWx5IHBydW5pbmcgYWdhaW4uCisg
ICAgcHJ1bmVEZWFkUmVzb3VyY2VzVG9TaXplKHRhcmdldFNpemUpOworfQorCit2b2lkIE1lbW9y
eUNhY2hlOjpwcnVuZURlYWRSZXNvdXJjZXNUb1NpemUodW5zaWduZWQgdGFyZ2V0U2l6ZSkKK3sK
KyAgICBpZiAobV9pblBydW5lUmVzb3VyY2VzKQorICAgICAgICByZXR1cm47CisgICAgVGVtcG9y
YXJ5Q2hhbmdlPGJvb2w+IHJlZW50cmFuY3lQcm90ZWN0b3IobV9pblBydW5lUmVzb3VyY2VzLCB0
cnVlKTsKKyAKKyAgICBpZiAodGFyZ2V0U2l6ZSAmJiBtX2RlYWRTaXplIDw9IHRhcmdldFNpemUp
CisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgY2FuU2hyaW5rTFJVTGlzdHMgPSB0cnVlOwor
ICAgIGZvciAoaW50IGkgPSBtX2FsbFJlc291cmNlcy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkg
eworICAgICAgICAvLyBNYWtlIGEgY29weSBvZiB0aGUgTFJVTGlzdCBmaXJzdCAoYW5kIHJlZiB0
aGUgcmVzb3VyY2VzKSBhcyBjYWxsaW5nCisgICAgICAgIC8vIGRlc3Ryb3lEZWNvZGVkRGF0YSgp
IGNhbiBhbHRlciB0aGUgTFJVTGlzdC4KKyAgICAgICAgVmVjdG9yPENhY2hlZFJlc291cmNlSGFu
ZGxlPENhY2hlZFJlc291cmNlPj4gbHJ1TGlzdDsKKyAgICAgICAgY29weVRvVmVjdG9yKCptX2Fs
bFJlc291cmNlc1tpXSwgbHJ1TGlzdCk7CisKKyAgICAgICAgLy8gRmlyc3QgZmx1c2ggYWxsIHRo
ZSBkZWNvZGVkIGRhdGEgaW4gdGhpcyBxdWV1ZS4KKyAgICAgICAgLy8gUmVtb3ZlIGZyb20gdGhl
IGhlYWQsIHNpbmNlIHRoaXMgaXMgdGhlIGxlYXN0IGZyZXF1ZW50bHkgYWNjZXNzZWQgb2YgdGhl
IG9iamVjdHMuCisgICAgICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiBscnVMaXN0KSB7CisgICAg
ICAgICAgICBpZiAoIXJlc291cmNlLT5pbkNhY2hlKCkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgICAgIGlmICghcmVzb3VyY2UtPmhhc0NsaWVudHMoKSAmJiAhcmVzb3Vy
Y2UtPmlzUHJlbG9hZGVkKCkgJiYgcmVzb3VyY2UtPmlzTG9hZGVkKCkpIHsKKyAgICAgICAgICAg
ICAgICAvLyBEZXN0cm95IG91ciBkZWNvZGVkIGRhdGEuIFRoaXMgd2lsbCByZW1vdmUgdXMgZnJv
bSAKKyAgICAgICAgICAgICAgICAvLyBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzLCBhbmQgcG9zc2li
bHkgbW92ZSB1cyB0byBhIGRpZmZlcmVudCAKKyAgICAgICAgICAgICAgICAvLyBMUlUgbGlzdCBp
biBtX2FsbFJlc291cmNlcy4KKyAgICAgICAgICAgICAgICByZXNvdXJjZS0+ZGVzdHJveURlY29k
ZWREYXRhKCk7CisKKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0U2l6ZSAmJiBtX2RlYWRTaXpl
IDw9IHRhcmdldFNpemUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdyBldmljdCBvYmplY3RzIGZyb20gdGhpcyBs
aXN0LgorICAgICAgICAvLyBSZW1vdmUgZnJvbSB0aGUgaGVhZCwgc2luY2UgdGhpcyBpcyB0aGUg
bGVhc3QgZnJlcXVlbnRseSBhY2Nlc3NlZCBvZiB0aGUgb2JqZWN0cy4KKyAgICAgICAgZm9yIChh
dXRvJiByZXNvdXJjZSA6IGxydUxpc3QpIHsKKyAgICAgICAgICAgIGlmICghcmVzb3VyY2UtPmlu
Q2FjaGUoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKCFy
ZXNvdXJjZS0+aGFzQ2xpZW50cygpICYmICFyZXNvdXJjZS0+aXNQcmVsb2FkZWQoKSAmJiAhcmVz
b3VyY2UtPmlzQ2FjaGVWYWxpZGF0b3IoKSkgeworICAgICAgICAgICAgICAgIHJlbW92ZSgqcmVz
b3VyY2UpOworICAgICAgICAgICAgICAgIGlmICh0YXJnZXRTaXplICYmIG1fZGVhZFNpemUgPD0g
dGFyZ2V0U2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgLy8gU2hyaW5rIHRoZSB2ZWN0b3IgYmFj
ayBkb3duIHNvIHdlIGRvbid0IHdhc3RlIHRpbWUgaW5zcGVjdGluZworICAgICAgICAvLyBlbXB0
eSBMUlUgbGlzdHMgb24gZnV0dXJlIHBydW5lcy4KKyAgICAgICAgaWYgKCFtX2FsbFJlc291cmNl
c1tpXS0+aXNFbXB0eSgpKQorICAgICAgICAgICAgY2FuU2hyaW5rTFJVTGlzdHMgPSBmYWxzZTsK
KyAgICAgICAgZWxzZSBpZiAoY2FuU2hyaW5rTFJVTGlzdHMpCisgICAgICAgICAgICBtX2FsbFJl
c291cmNlcy5zaHJpbmsoaSk7CisgICAgfQorfQorCit2b2lkIE1lbW9yeUNhY2hlOjpzZXRDYXBh
Y2l0aWVzKHVuc2lnbmVkIG1pbkRlYWRCeXRlcywgdW5zaWduZWQgbWF4RGVhZEJ5dGVzLCB1bnNp
Z25lZCB0b3RhbEJ5dGVzKQoreworICAgIEFTU0VSVChtaW5EZWFkQnl0ZXMgPD0gbWF4RGVhZEJ5
dGVzKTsKKyAgICBBU1NFUlQobWF4RGVhZEJ5dGVzIDw9IHRvdGFsQnl0ZXMpOworICAgIG1fbWlu
RGVhZENhcGFjaXR5ID0gbWluRGVhZEJ5dGVzOworICAgIG1fbWF4RGVhZENhcGFjaXR5ID0gbWF4
RGVhZEJ5dGVzOworICAgIG1fY2FwYWNpdHkgPSB0b3RhbEJ5dGVzOworICAgIHBydW5lKCk7Cit9
CisKK3ZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZShDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpCit7
CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworICAgIExPRyhSZXNvdXJjZUxvYWRp
bmcsICJFdmljdGluZyByZXNvdXJjZSAlcCBmb3IgJyVzJyBmcm9tIGNhY2hlIiwgJnJlc291cmNl
LCByZXNvdXJjZS51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCkpOworICAgIC8vIFRoZSBy
ZXNvdXJjZSBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBieSBzb21lb25lIG90aGVyIHRo
YW4gb3VyIGNhbGxlciwKKyAgICAvLyB3aG8gbmVlZGVkIGEgZnJlc2ggY29weSBmb3IgYSByZWxv
YWQuIFNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0NzkjYzY+
LgorICAgIGlmIChhdXRvKiByZXNvdXJjZXMgPSBzZXNzaW9uUmVzb3VyY2VNYXAocmVzb3VyY2Uu
c2Vzc2lvbklEKCkpKSB7CisjaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKKyAgICAgICAg
YXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihyZXNvdXJjZS51cmwoKSwgcmVzb3VyY2UuY2FjaGVQ
YXJ0aXRpb24oKSk7CisjZWxzZQorICAgICAgICBhdXRvJiBrZXkgPSByZXNvdXJjZS51cmwoKTsK
KyNlbmRpZgorICAgICAgICBpZiAocmVzb3VyY2UuaW5DYWNoZSgpKSB7CisgICAgICAgICAgICAv
LyBSZW1vdmUgcmVzb3VyY2UgZnJvbSB0aGUgcmVzb3VyY2UgbWFwLgorICAgICAgICAgICAgcmVz
b3VyY2VzLT5yZW1vdmUoa2V5KTsKKyAgICAgICAgICAgIHJlc291cmNlLnNldEluQ2FjaGUoZmFs
c2UpOworCisgICAgICAgICAgICAvLyBJZiB0aGUgcmVzb3VyY2UgbWFwIGlzIG5vdyBlbXB0eSwg
cmVtb3ZlIGl0IGZyb20gbV9zZXNzaW9uUmVzb3VyY2VzLgorICAgICAgICAgICAgaWYgKHJlc291
cmNlcy0+aXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIG1fc2Vzc2lvblJlc291cmNlcy5yZW1v
dmUocmVzb3VyY2Uuc2Vzc2lvbklEKCkpOworCisgICAgICAgICAgICAvLyBSZW1vdmUgZnJvbSB0
aGUgYXBwcm9wcmlhdGUgTFJVIGxpc3QuCisgICAgICAgICAgICByZW1vdmVGcm9tTFJVTGlzdChy
ZXNvdXJjZSk7CisgICAgICAgICAgICByZW1vdmVGcm9tTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0
KHJlc291cmNlKTsKKyAgICAgICAgICAgIGFkanVzdFNpemUocmVzb3VyY2UuaGFzQ2xpZW50cygp
LCAtc3RhdGljX2Nhc3Q8aW50PihyZXNvdXJjZS5zaXplKCkpKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBBU1NFUlQocmVzb3VyY2VzLT5nZXQoa2V5KSAhPSAmcmVzb3VyY2UpOworICAg
IH0KKworICAgIHJlc291cmNlLmRlbGV0ZUlmUG9zc2libGUoKTsKK30KKworYXV0byBNZW1vcnlD
YWNoZTo6bHJ1TGlzdEZvcihDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpIC0+IExSVUxpc3QmCit7
CisgICAgdW5zaWduZWQgYWNjZXNzQ291bnQgPSBzdGQ6Om1heChyZXNvdXJjZS5hY2Nlc3NDb3Vu
dCgpLCAxVSk7CisgICAgdW5zaWduZWQgcXVldWVJbmRleCA9IFdURjo6ZmFzdExvZzIocmVzb3Vy
Y2Uuc2l6ZSgpIC8gYWNjZXNzQ291bnQpOworI2lmbmRlZiBOREVCVUcKKyAgICByZXNvdXJjZS5t
X2xydUluZGV4ID0gcXVldWVJbmRleDsKKyNlbmRpZgorCisgICAgbV9hbGxSZXNvdXJjZXMucmVz
ZXJ2ZUNhcGFjaXR5KHF1ZXVlSW5kZXggKyAxKTsKKyAgICB3aGlsZSAobV9hbGxSZXNvdXJjZXMu
c2l6ZSgpIDw9IHF1ZXVlSW5kZXgpCisgICAgICAgIG1fYWxsUmVzb3VyY2VzLnVuY2hlY2tlZEFw
cGVuZChzdGQ6Om1ha2VfdW5pcXVlPExSVUxpc3Q+KCkpOworICAgIHJldHVybiAqbV9hbGxSZXNv
dXJjZXNbcXVldWVJbmRleF07Cit9CisKK3ZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZUZyb21MUlVM
aXN0KENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkKK3sKKyAgICAvLyBJZiB3ZSd2ZSBuZXZlciBi
ZWVuIGFjY2Vzc2VkLCB0aGVuIHdlJ3JlIGJyYW5kIG5ldyBhbmQgbm90IGluIGFueSBsaXN0Lgor
ICAgIGlmICghcmVzb3VyY2UuYWNjZXNzQ291bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYg
IUFTU0VSVF9ESVNBQkxFRAorICAgIHVuc2lnbmVkIG9sZExpc3RJbmRleCA9IHJlc291cmNlLm1f
bHJ1SW5kZXg7CisjZW5kaWYKKworICAgIExSVUxpc3QmIGxpc3QgPSBscnVMaXN0Rm9yKHJlc291
cmNlKTsKKworICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBsaXN0IHdlIGdvdCBpcyB0aGUgbGlzdCB3
ZSB3YW50LgorICAgIEFTU0VSVChyZXNvdXJjZS5tX2xydUluZGV4ID09IG9sZExpc3RJbmRleCk7
CisKKyAgICBib29sIHJlbW92ZWQgPSBsaXN0LnJlbW92ZSgmcmVzb3VyY2UpOworICAgIEFTU0VS
VF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7Cit9CisKK3ZvaWQgTWVtb3J5Q2FjaGU6Omluc2Vy
dEluTFJVTGlzdChDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpCit7CisgICAgQVNTRVJUKHJlc291
cmNlLmluQ2FjaGUoKSk7CisgICAgQVNTRVJUKHJlc291cmNlLmFjY2Vzc0NvdW50KCkgPiAwKTsK
KyAgICAKKyAgICBhdXRvIGFkZFJlc3VsdCA9IGxydUxpc3RGb3IocmVzb3VyY2UpLmFkZCgmcmVz
b3VyY2UpOworICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRy
eSk7Cit9CisKK3ZvaWQgTWVtb3J5Q2FjaGU6OnJlc291cmNlQWNjZXNzZWQoQ2FjaGVkUmVzb3Vy
Y2UmIHJlc291cmNlKQoreworICAgIEFTU0VSVChyZXNvdXJjZS5pbkNhY2hlKCkpOworICAgIAor
ICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIHRvIHJlbW92ZSBiZWZvcmUgd2UgaW5jcmVhc2UgdGhl
IGFjY2VzcyBjb3VudCwgc2luY2UKKyAgICAvLyB0aGUgcXVldWUgd2lsbCBwb3NzaWJseSBjaGFu
Z2UuCisgICAgcmVtb3ZlRnJvbUxSVUxpc3QocmVzb3VyY2UpOworICAgIAorICAgIC8vIElmIHRo
aXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhlIHJlc291cmNlIGhhcyBiZWVuIGFjY2Vzc2VkLCBhZGp1
c3QgdGhlIHNpemUgb2YgdGhlIGNhY2hlIHRvIGFjY291bnQgZm9yIGl0cyBpbml0aWFsIHNpemUu
CisgICAgaWYgKCFyZXNvdXJjZS5hY2Nlc3NDb3VudCgpKQorICAgICAgICBhZGp1c3RTaXplKHJl
c291cmNlLmhhc0NsaWVudHMoKSwgcmVzb3VyY2Uuc2l6ZSgpKTsKKyAgICAKKyAgICAvLyBBZGQg
dG8gb3VyIGFjY2VzcyBjb3VudC4KKyAgICByZXNvdXJjZS5pbmNyZWFzZUFjY2Vzc0NvdW50KCk7
CisgICAgCisgICAgLy8gTm93IGluc2VydCBpbnRvIHRoZSBuZXcgcXVldWUuCisgICAgaW5zZXJ0
SW5MUlVMaXN0KHJlc291cmNlKTsKK30KKwordm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlUmVzb3Vy
Y2VzV2l0aE9yaWdpbihTZWN1cml0eU9yaWdpbiYgb3JpZ2luKQoreworI2lmIEVOQUJMRShDQUNI
RV9QQVJUSVRJT05JTkcpCisgICAgU3RyaW5nIG9yaWdpblBhcnRpdGlvbiA9IFJlc291cmNlUmVx
dWVzdDo6cGFydGl0aW9uTmFtZShvcmlnaW4uaG9zdCgpKTsKKyNlbmRpZgorCisgICAgVmVjdG9y
PENhY2hlZFJlc291cmNlKj4gcmVzb3VyY2VzV2l0aE9yaWdpbjsKKyAgICBmb3IgKGF1dG8mIHJl
c291cmNlcyA6IG1fc2Vzc2lvblJlc291cmNlcy52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGF1
dG8mIGtleVZhbHVlIDogKnJlc291cmNlcykgeworICAgICAgICAgICAgYXV0byYgcmVzb3VyY2Ug
PSAqa2V5VmFsdWUudmFsdWU7CisjaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKKyAgICAg
ICAgICAgIGF1dG8mIHBhcnRpdGlvbk5hbWUgPSBrZXlWYWx1ZS5rZXkuc2Vjb25kOworICAgICAg
ICAgICAgaWYgKHBhcnRpdGlvbk5hbWUgPT0gb3JpZ2luUGFydGl0aW9uKSB7CisgICAgICAgICAg
ICAgICAgcmVzb3VyY2VzV2l0aE9yaWdpbi5hcHBlbmQoJnJlc291cmNlKTsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiByZXNvdXJjZU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUo
cmVzb3VyY2UudXJsKCkpOworICAgICAgICAgICAgaWYgKHJlc291cmNlT3JpZ2luLT5lcXVhbCgm
b3JpZ2luKSkKKyAgICAgICAgICAgICAgICByZXNvdXJjZXNXaXRoT3JpZ2luLmFwcGVuZCgmcmVz
b3VyY2UpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChhdXRvKiByZXNvdXJjZSA6IHJl
c291cmNlc1dpdGhPcmlnaW4pCisgICAgICAgIHJlbW92ZSgqcmVzb3VyY2UpOworfQorCit2b2lk
IE1lbW9yeUNhY2hlOjpyZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2lucyhTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBIYXNoU2V0PFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+JiBvcmlnaW5zKQorewor
ICAgIGF1dG8qIHJlc291cmNlTWFwID0gc2Vzc2lvblJlc291cmNlTWFwKHNlc3Npb25JRCk7Cisg
ICAgaWYgKCFyZXNvdXJjZU1hcCkKKyAgICAgICAgcmV0dXJuOworCisjaWYgRU5BQkxFKENBQ0hF
X1BBUlRJVElPTklORykKKyAgICBIYXNoU2V0PFN0cmluZz4gb3JpZ2luUGFydGl0aW9uczsKKwor
ICAgIGZvciAoYXV0byYgb3JpZ2luIDogb3JpZ2lucykKKyAgICAgICAgb3JpZ2luUGFydGl0aW9u
cy5hZGQoUmVzb3VyY2VSZXF1ZXN0OjpwYXJ0aXRpb25OYW1lKG9yaWdpbi0+aG9zdCgpKSk7Cisj
ZW5kaWYKKworICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZSo+IHJlc291cmNlc1RvUmVtb3ZlOwor
ICAgIGZvciAoYXV0byYga2V5VmFsdWVQYWlyIDogKnJlc291cmNlTWFwKSB7CisgICAgICAgIGF1
dG8mIHJlc291cmNlID0gKmtleVZhbHVlUGFpci52YWx1ZTsKKworI2lmIEVOQUJMRShDQUNIRV9Q
QVJUSVRJT05JTkcpCisgICAgICAgIGF1dG8mIHBhcnRpdGlvbk5hbWUgPSBrZXlWYWx1ZVBhaXIu
a2V5LnNlY29uZDsKKyAgICAgICAgaWYgKG9yaWdpblBhcnRpdGlvbnMuY29udGFpbnMocGFydGl0
aW9uTmFtZSkpIHsKKyAgICAgICAgICAgIHJlc291cmNlc1RvUmVtb3ZlLmFwcGVuZCgmcmVzb3Vy
Y2UpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAg
IGlmIChvcmlnaW5zLmNvbnRhaW5zKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUocmVzb3VyY2UudXJs
KCkpLnB0cigpKSkKKyAgICAgICAgICAgIHJlc291cmNlc1RvUmVtb3ZlLmFwcGVuZCgmcmVzb3Vy
Y2UpOworICAgIH0KKworICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiByZXNvdXJjZXNUb1JlbW92
ZSkKKyAgICAgICAgcmVtb3ZlKCpyZXNvdXJjZSk7Cit9CisKK3ZvaWQgTWVtb3J5Q2FjaGU6Omdl
dE9yaWdpbnNXaXRoQ2FjaGUoU2VjdXJpdHlPcmlnaW5TZXQmIG9yaWdpbnMpCit7CisjaWYgRU5B
QkxFKENBQ0hFX1BBUlRJVElPTklORykKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5n
PiBodHRwU3RyaW5nKCJodHRwIik7CisjZW5kaWYKKyAgICBmb3IgKGF1dG8mIHJlc291cmNlcyA6
IG1fc2Vzc2lvblJlc291cmNlcy52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIGtleVZh
bHVlIDogKnJlc291cmNlcykgeworICAgICAgICAgICAgYXV0byYgcmVzb3VyY2UgPSAqa2V5VmFs
dWUudmFsdWU7CisjaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKKyAgICAgICAgICAgIGF1
dG8mIHBhcnRpdGlvbk5hbWUgPSBrZXlWYWx1ZS5rZXkuc2Vjb25kOworICAgICAgICAgICAgaWYg
KCFwYXJ0aXRpb25OYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBvcmlnaW5zLmFkZChT
ZWN1cml0eU9yaWdpbjo6Y3JlYXRlKGh0dHBTdHJpbmcsIHBhcnRpdGlvbk5hbWUsIDApKTsKKyAg
ICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgb3JpZ2lucy5hZGQoU2VjdXJpdHlP
cmlnaW46OmNyZWF0ZShyZXNvdXJjZS51cmwoKSkpOworICAgICAgICB9CisgICAgfQorfQorCitI
YXNoU2V0PFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+IE1lbW9yeUNhY2hlOjpvcmlnaW5zV2l0aENh
Y2hlKFNlc3Npb25JRCBzZXNzaW9uSUQpIGNvbnN0Cit7CisgICAgSGFzaFNldDxSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+PiBvcmlnaW5zOworCisgICAgYXV0byBpdCA9IG1fc2Vzc2lvblJlc291cmNl
cy5maW5kKHNlc3Npb25JRCk7CisgICAgaWYgKGl0ICE9IG1fc2Vzc2lvblJlc291cmNlcy5lbmQo
KSkgeworICAgICAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogKml0LT52YWx1ZSkgeworICAgICAg
ICAgICAgYXV0byYgcmVzb3VyY2UgPSAqa2V5VmFsdWUudmFsdWU7CisjaWYgRU5BQkxFKENBQ0hF
X1BBUlRJVElPTklORykKKyAgICAgICAgICAgIGF1dG8mIHBhcnRpdGlvbk5hbWUgPSBrZXlWYWx1
ZS5rZXkuc2Vjb25kOworICAgICAgICAgICAgaWYgKCFwYXJ0aXRpb25OYW1lLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICBvcmlnaW5zLmFkZChTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKCJodHRw
IiwgcGFydGl0aW9uTmFtZSwgMCkpOworICAgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAg
ICAgICBvcmlnaW5zLmFkZChTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHJlc291cmNlLnVybCgpKSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gb3JpZ2luczsKK30KKwordm9pZCBNZW1v
cnlDYWNoZTo6cmVtb3ZlRnJvbUxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdChDYWNoZWRSZXNvdXJj
ZSYgcmVzb3VyY2UpCit7CisgICAgbV9saXZlRGVjb2RlZFJlc291cmNlcy5yZW1vdmUoJnJlc291
cmNlKTsKK30KKwordm9pZCBNZW1vcnlDYWNoZTo6aW5zZXJ0SW5MaXZlRGVjb2RlZFJlc291cmNl
c0xpc3QoQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQoreworICAgIC8vIE1ha2Ugc3VyZSB3ZSBh
cmVuJ3QgaW4gdGhlIGxpc3QgYWxyZWFkeS4KKyAgICBBU1NFUlQoIW1fbGl2ZURlY29kZWRSZXNv
dXJjZXMuY29udGFpbnMoJnJlc291cmNlKSk7CisgICAgbV9saXZlRGVjb2RlZFJlc291cmNlcy5h
ZGQoJnJlc291cmNlKTsKK30KKwordm9pZCBNZW1vcnlDYWNoZTo6YWRkVG9MaXZlUmVzb3VyY2Vz
U2l6ZShDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpCit7CisgICAgbV9saXZlU2l6ZSArPSByZXNv
dXJjZS5zaXplKCk7CisgICAgbV9kZWFkU2l6ZSAtPSByZXNvdXJjZS5zaXplKCk7Cit9CisKK3Zv
aWQgTWVtb3J5Q2FjaGU6OnJlbW92ZUZyb21MaXZlUmVzb3VyY2VzU2l6ZShDYWNoZWRSZXNvdXJj
ZSYgcmVzb3VyY2UpCit7CisgICAgbV9saXZlU2l6ZSAtPSByZXNvdXJjZS5zaXplKCk7CisgICAg
bV9kZWFkU2l6ZSArPSByZXNvdXJjZS5zaXplKCk7Cit9CisKK3ZvaWQgTWVtb3J5Q2FjaGU6OmFk
anVzdFNpemUoYm9vbCBsaXZlLCBpbnQgZGVsdGEpCit7CisgICAgaWYgKGxpdmUpIHsKKyAgICAg
ICAgQVNTRVJUKGRlbHRhID49IDAgfHwgKChpbnQpbV9saXZlU2l6ZSArIGRlbHRhID49IDApKTsK
KyAgICAgICAgbV9saXZlU2l6ZSArPSBkZWx0YTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NF
UlQoZGVsdGEgPj0gMCB8fCAoKGludCltX2RlYWRTaXplICsgZGVsdGEgPj0gMCkpOworICAgICAg
ICBtX2RlYWRTaXplICs9IGRlbHRhOworICAgIH0KK30KKwordm9pZCBNZW1vcnlDYWNoZTo6cmVt
b3ZlUmVxdWVzdEZyb21TZXNzaW9uQ2FjaGVzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBpZiAoaXM8V29ya2Vy
R2xvYmFsU2NvcGU+KGNvbnRleHQpKSB7CisgICAgICAgIGRvd25jYXN0PFdvcmtlckdsb2JhbFNj
b3BlPihjb250ZXh0KS50aHJlYWQoKS53b3JrZXJMb2FkZXJQcm94eSgpLnBvc3RUYXNrVG9Mb2Fk
ZXIoW3JlcXVlc3QgPSByZXF1ZXN0Lmlzb2xhdGVkQ29weSgpXSAoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAgTWVtb3J5Q2FjaGU6OnJlbW92ZVJlcXVlc3RG
cm9tU2Vzc2lvbkNhY2hlcyhjb250ZXh0LCByZXF1ZXN0KTsKKyAgICAgICAgfSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvJiBtZW1vcnlDYWNoZSA9IE1lbW9yeUNhY2hlOjpz
aW5nbGV0b24oKTsKKyAgICBmb3IgKGF1dG8mIHJlc291cmNlcyA6IG1lbW9yeUNhY2hlLm1fc2Vz
c2lvblJlc291cmNlcykgeworICAgICAgICBpZiAoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0g
bWVtb3J5Q2FjaGUucmVzb3VyY2VGb3JSZXF1ZXN0SW1wbChyZXF1ZXN0LCAqcmVzb3VyY2VzLnZh
bHVlKSkKKyAgICAgICAgICAgIG1lbW9yeUNhY2hlLnJlbW92ZSgqcmVzb3VyY2UpOworICAgIH0K
K30KKwordm9pZCBNZW1vcnlDYWNoZTo6VHlwZVN0YXRpc3RpYzo6YWRkUmVzb3VyY2UoQ2FjaGVk
UmVzb3VyY2UmIHJlc291cmNlKQoreworICAgIGNvdW50Kys7CisgICAgc2l6ZSArPSByZXNvdXJj
ZS5zaXplKCk7CisgICAgbGl2ZVNpemUgKz0gcmVzb3VyY2UuaGFzQ2xpZW50cygpID8gcmVzb3Vy
Y2Uuc2l6ZSgpIDogMDsKKyAgICBkZWNvZGVkU2l6ZSArPSByZXNvdXJjZS5kZWNvZGVkU2l6ZSgp
OworfQorCitNZW1vcnlDYWNoZTo6U3RhdGlzdGljcyBNZW1vcnlDYWNoZTo6Z2V0U3RhdGlzdGlj
cygpCit7CisgICAgU3RhdGlzdGljcyBzdGF0czsKKworICAgIGZvciAoYXV0byYgcmVzb3VyY2Vz
IDogbV9zZXNzaW9uUmVzb3VyY2VzLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoYXV0byogcmVz
b3VyY2UgOiByZXNvdXJjZXMtPnZhbHVlcygpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHJlc291
cmNlLT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVz
b3VyY2U6CisgICAgICAgICAgICAgICAgc3RhdHMuaW1hZ2VzLmFkZFJlc291cmNlKCpyZXNvdXJj
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpDU1NTdHlsZVNoZWV0OgorICAgICAgICAgICAgICAgIHN0YXRzLmNzc1N0eWxlU2hlZXRz
LmFkZFJlc291cmNlKCpyZXNvdXJjZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6CisgICAgICAgICAgICAgICAgc3RhdHMu
c2NyaXB0cy5hZGRSZXNvdXJjZSgqcmVzb3VyY2UpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
I2lmIEVOQUJMRShYU0xUKQorICAgICAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5
bGVTaGVldDoKKyAgICAgICAgICAgICAgICBzdGF0cy54c2xTdHlsZVNoZWV0cy5hZGRSZXNvdXJj
ZSgqcmVzb3VyY2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWYgRU5BQkxF
KFNWR19GT05UUykKKyAgICAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0ZvbnRSZXNv
dXJjZToKKyNlbmRpZgorICAgICAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291
cmNlOgorICAgICAgICAgICAgICAgIHN0YXRzLmZvbnRzLmFkZFJlc291cmNlKCpyZXNvdXJjZSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biBzdGF0czsKK30KKwordm9pZCBNZW1vcnlDYWNoZTo6c2V0RGlzYWJsZWQoYm9vbCBkaXNhYmxl
ZCkKK3sKKyAgICBtX2Rpc2FibGVkID0gZGlzYWJsZWQ7CisgICAgaWYgKCFtX2Rpc2FibGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICB3aGlsZSAoIW1fc2Vzc2lvblJlc291cmNlcy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgYXV0byYgcmVzb3VyY2VzID0gKm1fc2Vzc2lvblJlc291cmNlcy5iZWdp
bigpLT52YWx1ZTsKKyAgICAgICAgQVNTRVJUKCFyZXNvdXJjZXMuaXNFbXB0eSgpKTsKKyAgICAg
ICAgcmVtb3ZlKCpyZXNvdXJjZXMuYmVnaW4oKS0+dmFsdWUpOworICAgIH0KK30KKwordm9pZCBN
ZW1vcnlDYWNoZTo6ZXZpY3RSZXNvdXJjZXMoKQoreworICAgIGlmIChkaXNhYmxlZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzZXREaXNhYmxlZCh0cnVlKTsKKyAgICBzZXREaXNhYmxlZChm
YWxzZSk7Cit9CisKK3ZvaWQgTWVtb3J5Q2FjaGU6OmV2aWN0UmVzb3VyY2VzKFNlc3Npb25JRCBz
ZXNzaW9uSUQpCit7CisgICAgaWYgKGRpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGZvckVhY2hTZXNzaW9uUmVzb3VyY2Uoc2Vzc2lvbklELCBbdGhpc10gKENhY2hlZFJlc291cmNl
JiByZXNvdXJjZSkgeyByZW1vdmUocmVzb3VyY2UpOyB9KTsKKworICAgIEFTU0VSVCghbV9zZXNz
aW9uUmVzb3VyY2VzLmNvbnRhaW5zKHNlc3Npb25JRCkpOworfQorCitib29sIE1lbW9yeUNhY2hl
OjpuZWVkc1BydW5pbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2xpdmVTaXplICsgbV9kZWFk
U2l6ZSA+IG1fY2FwYWNpdHkgfHwgbV9kZWFkU2l6ZSA+IG1fbWF4RGVhZENhcGFjaXR5OworfQor
Cit2b2lkIE1lbW9yeUNhY2hlOjpwcnVuZSgpCit7CisgICAgaWYgKCFuZWVkc1BydW5pbmcoKSkK
KyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBwcnVuZURlYWRSZXNvdXJjZXMoKTsgLy8g
UHJ1bmUgZGVhZCBmaXJzdCwgaW4gY2FzZSBpdCB3YXMgImJvcnJvd2luZyIgY2FwYWNpdHkgZnJv
bSBsaXZlLgorICAgIHBydW5lTGl2ZVJlc291cmNlcygpOworfQorCit2b2lkIE1lbW9yeUNhY2hl
OjpwcnVuZVNvb24oKQoreworICAgICBpZiAobV9wcnVuZVRpbWVyLmlzQWN0aXZlKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICAgaWYgKCFuZWVkc1BydW5pbmcoKSkKKyAgICAgICAgIHJldHVybjsK
KyAgICAgbV9wcnVuZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKworI2lmbmRlZiBOREVCVUcK
K3ZvaWQgTWVtb3J5Q2FjaGU6OmR1bXBTdGF0cygpCit7CisgICAgU3RhdGlzdGljcyBzID0gZ2V0
U3RhdGlzdGljcygpOworICAgIHByaW50ZigiJS0xM3MgJS0xM3MgJS0xM3MgJS0xM3MgJS0xM3Nc
biIsICIiLCAiQ291bnQiLCAiU2l6ZSIsICJMaXZlU2l6ZSIsICJEZWNvZGVkU2l6ZSIpOworICAg
IHByaW50ZigiJS0xM3MgJS0xM3MgJS0xM3MgJS0xM3MgJS0xM3NcbiIsICItLS0tLS0tLS0tLS0t
IiwgIi0tLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLS0tIiwgIi0t
LS0tLS0tLS0tLS0iKTsKKyAgICBwcmludGYoIiUtMTNzICUxM2QgJTEzZCAlMTNkICUxM2RcbiIs
ICJJbWFnZXMiLCBzLmltYWdlcy5jb3VudCwgcy5pbWFnZXMuc2l6ZSwgcy5pbWFnZXMubGl2ZVNp
emUsIHMuaW1hZ2VzLmRlY29kZWRTaXplKTsKKyAgICBwcmludGYoIiUtMTNzICUxM2QgJTEzZCAl
MTNkICUxM2RcbiIsICJDU1MiLCBzLmNzc1N0eWxlU2hlZXRzLmNvdW50LCBzLmNzc1N0eWxlU2hl
ZXRzLnNpemUsIHMuY3NzU3R5bGVTaGVldHMubGl2ZVNpemUsIHMuY3NzU3R5bGVTaGVldHMuZGVj
b2RlZFNpemUpOworI2lmIEVOQUJMRShYU0xUKQorICAgIHByaW50ZigiJS0xM3MgJTEzZCAlMTNk
ICUxM2QgJTEzZFxuIiwgIlhTTCIsIHMueHNsU3R5bGVTaGVldHMuY291bnQsIHMueHNsU3R5bGVT
aGVldHMuc2l6ZSwgcy54c2xTdHlsZVNoZWV0cy5saXZlU2l6ZSwgcy54c2xTdHlsZVNoZWV0cy5k
ZWNvZGVkU2l6ZSk7CisjZW5kaWYKKyAgICBwcmludGYoIiUtMTNzICUxM2QgJTEzZCAlMTNkICUx
M2RcbiIsICJKYXZhU2NyaXB0Iiwgcy5zY3JpcHRzLmNvdW50LCBzLnNjcmlwdHMuc2l6ZSwgcy5z
Y3JpcHRzLmxpdmVTaXplLCBzLnNjcmlwdHMuZGVjb2RlZFNpemUpOworICAgIHByaW50ZigiJS0x
M3MgJTEzZCAlMTNkICUxM2QgJTEzZFxuIiwgIkZvbnRzIiwgcy5mb250cy5jb3VudCwgcy5mb250
cy5zaXplLCBzLmZvbnRzLmxpdmVTaXplLCBzLmZvbnRzLmRlY29kZWRTaXplKTsKKyAgICBwcmlu
dGYoIiUtMTNzICUtMTNzICUtMTNzICUtMTNzICUtMTNzXG5cbiIsICItLS0tLS0tLS0tLS0tIiwg
Ii0tLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLS0tIiwgIi0tLS0t
LS0tLS0tLS0iKTsKK30KKwordm9pZCBNZW1vcnlDYWNoZTo6ZHVtcExSVUxpc3RzKGJvb2wgaW5j
bHVkZUxpdmUpIGNvbnN0Cit7CisgICAgcHJpbnRmKCJMUlUtU1AgbGlzdHMgaW4gZXZpY3Rpb24g
b3JkZXIgKEtpbG9ieXRlcyBkZWNvZGVkLCBLaWxvYnl0ZXMgZW5jb2RlZCwgQWNjZXNzIGNvdW50
LCBSZWZlcmVuY2VkKTpcbiIpOworCisgICAgaW50IHNpemUgPSBtX2FsbFJlc291cmNlcy5zaXpl
KCk7CisgICAgZm9yIChpbnQgaSA9IHNpemUgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICBw
cmludGYoIlxuXG5MaXN0ICVkOiAiLCBpKTsKKyAgICAgICAgZm9yIChhdXRvKiByZXNvdXJjZSA6
ICptX2FsbFJlc291cmNlc1tpXSkgeworICAgICAgICAgICAgaWYgKGluY2x1ZGVMaXZlIHx8ICFy
ZXNvdXJjZS0+aGFzQ2xpZW50cygpKQorICAgICAgICAgICAgICAgIHByaW50ZigiKCUuMWZLLCAl
LjFmSywgJXVBLCAlZFIpOyAiLCByZXNvdXJjZS0+ZGVjb2RlZFNpemUoKSAvIDEwMjQuMGYsIChy
ZXNvdXJjZS0+ZW5jb2RlZFNpemUoKSArIHJlc291cmNlLT5vdmVyaGVhZFNpemUoKSkgLyAxMDI0
LjBmLCByZXNvdXJjZS0+YWNjZXNzQ291bnQoKSwgcmVzb3VyY2UtPmhhc0NsaWVudHMoKSk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL01lbW9yeUNhY2hlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvTWVtb3J5Q2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YmUxNzQ3
YzJhM2JhZWI1ZjlhMGE4YmY1Nzk5NGE3MTI5MDQ1NzRjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL01lbW9yeUNhY2hlLmgKQEAgLTAsMCArMSwyMjUgQEAK
Ky8qCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcu
ZGUpCisgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3Jn
PgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwgZnVu
Y3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0
bWwKKyAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhl
c2Ugb2JqZWN0cy4KKyovCisKKyNpZm5kZWYgQ2FjaGVfaAorI2RlZmluZSBDYWNoZV9oCisKKyNp
bmNsdWRlICJOYXRpdmVJbWFnZVB0ci5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luSGFzaC5o
IgorI2luY2x1ZGUgIlNlc3Npb25JRC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgIHsKKworY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CitjbGFzcyBVUkw7CitjbGFz
cyBSZXNvdXJjZVJlcXVlc3Q7CitjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworY2xhc3MgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOworCisvLyBUaGlzIGNhY2hl
IGhvbGRzIHN1YnJlc291cmNlcyB1c2VkIGJ5IFdlYiBwYWdlczogaW1hZ2VzLCBzY3JpcHRzLCBz
dHlsZXNoZWV0cywgZXRjLgorCisvLyBUaGUgY2FjaGUga2VlcHMgYSBmbGV4aWJsZSBidXQgYm91
bmRlZCB3aW5kb3cgb2YgZGVhZCByZXNvdXJjZXMgdGhhdCBncm93cy9zaHJpbmtzIAorLy8gZGVw
ZW5kaW5nIG9uIHRoZSBsaXZlIHJlc291cmNlIGxvYWQuIEhlcmUncyBhbiBleGFtcGxlIG9mIGNh
Y2hlIGdyb3d0aCBvdmVyIHRpbWUsCisvLyB3aXRoIGEgbWluIGRlYWQgcmVzb3VyY2UgY2FwYWNp
dHkgb2YgMjUlIGFuZCBhIG1heCBkZWFkIHJlc291cmNlIGNhcGFjaXR5IG9mIDUwJToKKworLy8g
ICAgICAgIHwtLS0tLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWFkOiAtCisvLyAg
ICAgICAgfC0tLS0tLS0tLS18ICAgICAgICAgICAgICAgICAgICAgICAgIExpdmU6ICsKKy8vICAg
ICAgLS18LS0tLS0tLS0tLXwgICAgICAgICAgICAgICAgICAgICAgICAgQ2FjaGUgYm91bmRhcnk6
IHwgKG9iamVjdHMgb3V0c2lkZSB0aGlzIG1hcmsgaGF2ZSBiZWVuIGV2aWN0ZWQpCisvLyAgICAg
IC0tfC0tLS0tLS0tLS0rKysrKysrKysrfAorLy8gLS0tLS0tLXwtLS0tLSsrKysrKysrKysrKysr
K3wKKy8vIC0tLS0tLS18LS0tLS0rKysrKysrKysrKysrKyt8KysrKysKKworY2xhc3MgTWVtb3J5
Q2FjaGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1lbW9yeUNhY2hlKTsgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CisgICAgZnJpZW5kIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNhY2hlPjsK
KyAgICBmcmllbmQgY2xhc3MgSW50ZXJuYWxzOworcHVibGljOgorICAgIHN0cnVjdCBUeXBlU3Rh
dGlzdGljIHsKKyAgICAgICAgaW50IGNvdW50OworICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAg
aW50IGxpdmVTaXplOworICAgICAgICBpbnQgZGVjb2RlZFNpemU7CisKKyAgICAgICAgVHlwZVN0
YXRpc3RpYygpCisgICAgICAgICAgICA6IGNvdW50KDApCisgICAgICAgICAgICAsIHNpemUoMCkK
KyAgICAgICAgICAgICwgbGl2ZVNpemUoMCkKKyAgICAgICAgICAgICwgZGVjb2RlZFNpemUoMCkK
KyAgICAgICAgeyAKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYWRkUmVzb3VyY2UoQ2FjaGVk
UmVzb3VyY2UmKTsKKyAgICB9OworICAgIAorICAgIHN0cnVjdCBTdGF0aXN0aWNzIHsKKyAgICAg
ICAgVHlwZVN0YXRpc3RpYyBpbWFnZXM7CisgICAgICAgIFR5cGVTdGF0aXN0aWMgY3NzU3R5bGVT
aGVldHM7CisgICAgICAgIFR5cGVTdGF0aXN0aWMgc2NyaXB0czsKKyAgICAgICAgVHlwZVN0YXRp
c3RpYyB4c2xTdHlsZVNoZWV0czsKKyAgICAgICAgVHlwZVN0YXRpc3RpYyBmb250czsKKyAgICB9
OworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIE1lbW9yeUNhY2hlJiBzaW5nbGV0b24oKTsK
KworICAgIFdFQkNPUkVfRVhQT1JUIENhY2hlZFJlc291cmNlKiByZXNvdXJjZUZvclJlcXVlc3Qo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2Vzc2lvbklEKTsKKworICAgIGJvb2wgYWRkKENhY2hl
ZFJlc291cmNlJik7CisgICAgdm9pZCByZW1vdmUoQ2FjaGVkUmVzb3VyY2UmKTsKKworICAgIHN0
YXRpYyBVUkwgcmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVySWZOZWVkZWQoY29uc3QgVVJMJiBvcmln
aW5hbFVSTCk7CisgICAgCisgICAgdm9pZCByZXZhbGlkYXRpb25TdWNjZWVkZWQoQ2FjaGVkUmVz
b3VyY2UmIHJldmFsaWRhdGluZ1Jlc291cmNlLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Cisg
ICAgdm9pZCByZXZhbGlkYXRpb25GYWlsZWQoQ2FjaGVkUmVzb3VyY2UmIHJldmFsaWRhdGluZ1Jl
c291cmNlKTsKKworICAgIHZvaWQgZm9yRWFjaFJlc291cmNlKGNvbnN0IHN0ZDo6ZnVuY3Rpb248
dm9pZChDYWNoZWRSZXNvdXJjZSYpPiYpOworICAgIHZvaWQgZm9yRWFjaFNlc3Npb25SZXNvdXJj
ZShTZXNzaW9uSUQsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChDYWNoZWRSZXNvdXJjZSYpPiYp
OworICAgIHZvaWQgZGVzdHJveURlY29kZWREYXRhRm9yQWxsSW1hZ2VzKCk7CisgICAgCisgICAg
Ly8gU2V0cyB0aGUgY2FjaGUncyBtZW1vcnkgY2FwYWNpdGllcywgaW4gYnl0ZXMuIFRoZXNlIHdp
bGwgaG9sZCBvbmx5IGFwcHJveGltYXRlbHksIAorICAgIC8vIHNpbmNlIHRoZSBkZWNvZGVkIGNv
c3Qgb2YgcmVzb3VyY2VzIGxpa2Ugc2NyaXB0cyBhbmQgc3R5bGVzaGVldHMgaXMgbm90IGtub3du
LgorICAgIC8vICAtIG1pbkRlYWRCeXRlczogVGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRo
YXQgZGVhZCByZXNvdXJjZXMgc2hvdWxkIGNvbnN1bWUgd2hlbiB0aGUgY2FjaGUgaXMgdW5kZXIg
cHJlc3N1cmUuCisgICAgLy8gIC0gbWF4RGVhZEJ5dGVzOiBUaGUgbWF4aW11bSBudW1iZXIgb2Yg
Ynl0ZXMgdGhhdCBkZWFkIHJlc291cmNlcyBzaG91bGQgY29uc3VtZSB3aGVuIHRoZSBjYWNoZSBp
cyBub3QgdW5kZXIgcHJlc3N1cmUuCisgICAgLy8gIC0gdG90YWxCeXRlczogVGhlIG1heGltdW0g
bnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhlIGNhY2hlIHNob3VsZCBjb25zdW1lIG92ZXJhbGwuCisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDYXBhY2l0aWVzKHVuc2lnbmVkIG1pbkRlYWRCeXRl
cywgdW5zaWduZWQgbWF4RGVhZEJ5dGVzLCB1bnNpZ25lZCB0b3RhbEJ5dGVzKTsKKworICAgIC8v
IFR1cm4gdGhlIGNhY2hlIG9uIGFuZCBvZmYuICBEaXNhYmxpbmcgdGhlIGNhY2hlIHdpbGwgcmVt
b3ZlIGFsbCByZXNvdXJjZXMgZnJvbSB0aGUgY2FjaGUuICBUaGV5IG1heQorICAgIC8vIHN0aWxs
IGxpdmUgb24gaWYgdGhleSBhcmUgcmVmZXJlbmNlZCBieSBzb21lIFdlYiBwYWdlIHRob3VnaC4K
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldERpc2FibGVkKGJvb2wpOworICAgIGJvb2wgZGlz
YWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2Rpc2FibGVkOyB9CisKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGV2aWN0UmVzb3VyY2VzKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBldmljdFJl
c291cmNlcyhTZXNzaW9uSUQpOworICAgIAorICAgIHZvaWQgcHJ1bmUoKTsKKyAgICB2b2lkIHBy
dW5lU29vbigpOworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xpdmVTaXpl
ICsgbV9kZWFkU2l6ZTsgfQorCisgICAgdm9pZCBzZXREZWFkRGVjb2RlZERhdGFEZWxldGlvbklu
dGVydmFsKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgaW50ZXJ2YWwpIHsgbV9kZWFkRGVjb2Rl
ZERhdGFEZWxldGlvbkludGVydmFsID0gaW50ZXJ2YWw7IH0KKyAgICBzdGQ6OmNocm9ubzo6bWls
bGlzZWNvbmRzIGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwoKSBjb25zdCB7IHJldHVy
biBtX2RlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWw7IH0KKworICAgIC8vIENhbGxzIHRv
IHB1dCB0aGUgY2FjaGVkIHJlc291cmNlIGludG8gYW5kIG91dCBvZiBMUlUgbGlzdHMuCisgICAg
dm9pZCBpbnNlcnRJbkxSVUxpc3QoQ2FjaGVkUmVzb3VyY2UmKTsKKyAgICB2b2lkIHJlbW92ZUZy
b21MUlVMaXN0KENhY2hlZFJlc291cmNlJik7CisKKyAgICAvLyBDYWxsZWQgdG8gYWRqdXN0IHRo
ZSBjYWNoZSB0b3RhbHMgd2hlbiBhIHJlc291cmNlIGNoYW5nZXMgc2l6ZS4KKyAgICB2b2lkIGFk
anVzdFNpemUoYm9vbCBsaXZlLCBpbnQgZGVsdGEpOworCisgICAgLy8gVHJhY2sgZGVjb2RlZCBy
ZXNvdXJjZXMgdGhhdCBhcmUgaW4gdGhlIGNhY2hlIGFuZCByZWZlcmVuY2VkIGJ5IGEgV2ViIHBh
Z2UuCisgICAgdm9pZCBpbnNlcnRJbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdChDYWNoZWRSZXNv
dXJjZSYpOworICAgIHZvaWQgcmVtb3ZlRnJvbUxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdChDYWNo
ZWRSZXNvdXJjZSYpOworCisgICAgdm9pZCBhZGRUb0xpdmVSZXNvdXJjZXNTaXplKENhY2hlZFJl
c291cmNlJik7CisgICAgdm9pZCByZW1vdmVGcm9tTGl2ZVJlc291cmNlc1NpemUoQ2FjaGVkUmVz
b3VyY2UmKTsKKworICAgIHN0YXRpYyB2b2lkIHJlbW92ZVJlcXVlc3RGcm9tU2Vzc2lvbkNhY2hl
cyhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisKKyAg
ICAvLyBGdW5jdGlvbiB0byBjb2xsZWN0IGNhY2hlIHN0YXRpc3RpY3MgZm9yIHRoZSBjYWNoZXMg
d2luZG93IGluIHRoZSBTYWZhcmkgRGVidWcgbWVudS4KKyAgICBXRUJDT1JFX0VYUE9SVCBTdGF0
aXN0aWNzIGdldFN0YXRpc3RpY3MoKTsKKyAgICAKKyAgICB2b2lkIHJlc291cmNlQWNjZXNzZWQo
Q2FjaGVkUmVzb3VyY2UmKTsKKyAgICBib29sIGluTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KENh
Y2hlZFJlc291cmNlJiByZXNvdXJjZSkgY29uc3QgeyByZXR1cm4gbV9saXZlRGVjb2RlZFJlc291
cmNlcy5jb250YWlucygmcmVzb3VyY2UpOyB9CisKKyAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRy
PFNlY3VyaXR5T3JpZ2luPj4gU2VjdXJpdHlPcmlnaW5TZXQ7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCByZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2luKFNlY3VyaXR5T3JpZ2luJik7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCByZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2lucyhTZXNzaW9uSUQsIGNv
bnN0IEhhc2hTZXQ8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4mKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGdldE9yaWdpbnNXaXRoQ2FjaGUoU2VjdXJpdHlPcmlnaW5TZXQmIG9yaWdpbnMpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIEhhc2hTZXQ8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4gb3JpZ2lu
c1dpdGhDYWNoZShTZXNzaW9uSUQpIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBh
ZGRJbWFnZVRvQ2FjaGUoTmF0aXZlSW1hZ2VQdHImJiwgY29uc3QgVVJMJiwgY29uc3QgU3RyaW5n
JiBkb21haW5Gb3JDYWNoZVBhcnRpdGlvbik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1v
dmVJbWFnZUZyb21DYWNoZShjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIGRvbWFpbkZvckNhY2hl
UGFydGl0aW9uKTsKKworICAgIC8vIHBydW5lRGVhZCooKSAtIEZsdXNoIGRlY29kZWQgYW5kIGVu
Y29kZWQgZGF0YSBmcm9tIHJlc291cmNlcyBub3QgcmVmZXJlbmNlZCBieSBXZWIgcGFnZXMuCisg
ICAgLy8gcHJ1bmVMaXZlKigpIC0gRmx1c2ggZGVjb2RlZCBkYXRhIGZyb20gcmVzb3VyY2VzIHN0
aWxsIHJlZmVyZW5jZWQgYnkgV2ViIHBhZ2VzLgorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHJ1
bmVEZWFkUmVzb3VyY2VzKCk7IC8vIEF1dG9tYXRpY2FsbHkgZGVjaWRlIGhvdyBtdWNoIHRvIHBy
dW5lLgorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHJ1bmVMaXZlUmVzb3VyY2VzKGJvb2wgc2hv
dWxkRGVzdHJveURlY29kZWREYXRhRm9yQWxsTGl2ZVJlc291cmNlcyA9IGZhbHNlKTsKKworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgcHJ1bmVEZWFkUmVzb3VyY2VzVG9TaXplKHVuc2lnbmVkIHRh
cmdldFNpemUpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHJ1bmVMaXZlUmVzb3VyY2VzVG9T
aXplKHVuc2lnbmVkIHRhcmdldFNpemUsIGJvb2wgc2hvdWxkRGVzdHJveURlY29kZWREYXRhRm9y
QWxsTGl2ZVJlc291cmNlcyA9IGZhbHNlKTsKKworcHJpdmF0ZToKKyNpZiBFTkFCTEUoQ0FDSEVf
UEFSVElUSU9OSU5HKQorICAgIHR5cGVkZWYgSGFzaE1hcDxzdGQ6OnBhaXI8VVJMLCBTdHJpbmcg
LyogcGFydGl0aW9uTmFtZSAqLz4sIENhY2hlZFJlc291cmNlKj4gQ2FjaGVkUmVzb3VyY2VNYXA7
CisjZWxzZQorICAgIHR5cGVkZWYgSGFzaE1hcDxVUkwsIENhY2hlZFJlc291cmNlKj4gQ2FjaGVk
UmVzb3VyY2VNYXA7CisjZW5kaWYKKyAgICB0eXBlZGVmIExpc3RIYXNoU2V0PENhY2hlZFJlc291
cmNlKj4gTFJVTGlzdDsKKworICAgIE1lbW9yeUNhY2hlKCk7CisgICAgfk1lbW9yeUNhY2hlKCk7
IC8vIE5vdCBpbXBsZW1lbnRlZCB0byBtYWtlIHN1cmUgbm9ib2R5IGFjY2lkZW50YWxseSBjYWxs
cyBkZWxldGUgLS0gV2ViQ29yZSBkb2VzIG5vdCBkZWxldGUgc2luZ2xldG9ucy4KKworICAgIExS
VUxpc3QmIGxydUxpc3RGb3IoQ2FjaGVkUmVzb3VyY2UmKTsKKyNpZm5kZWYgTkRFQlVHCisgICAg
dm9pZCBkdW1wU3RhdHMoKTsKKyAgICB2b2lkIGR1bXBMUlVMaXN0cyhib29sIGluY2x1ZGVMaXZl
KSBjb25zdDsKKyNlbmRpZgorCisgICAgdW5zaWduZWQgbGl2ZUNhcGFjaXR5KCkgY29uc3Q7Cisg
ICAgdW5zaWduZWQgZGVhZENhcGFjaXR5KCkgY29uc3Q7CisgICAgYm9vbCBuZWVkc1BydW5pbmco
KSBjb25zdDsKKworICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZUZvclJlcXVlc3RJbXBsKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIENhY2hlZFJlc291cmNlTWFwJik7CisKKyAgICBDYWNoZWRS
ZXNvdXJjZU1hcCYgZW5zdXJlU2Vzc2lvblJlc291cmNlTWFwKFNlc3Npb25JRCk7CisgICAgQ2Fj
aGVkUmVzb3VyY2VNYXAqIHNlc3Npb25SZXNvdXJjZU1hcChTZXNzaW9uSUQpIGNvbnN0OworCisg
ICAgYm9vbCBtX2Rpc2FibGVkOyAgLy8gV2hldGhlciBvciBub3QgdGhlIGNhY2hlIGlzIGVuYWJs
ZWQuCisgICAgYm9vbCBtX2luUHJ1bmVSZXNvdXJjZXM7CisKKyAgICB1bnNpZ25lZCBtX2NhcGFj
aXR5OworICAgIHVuc2lnbmVkIG1fbWluRGVhZENhcGFjaXR5OworICAgIHVuc2lnbmVkIG1fbWF4
RGVhZENhcGFjaXR5OworICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgbV9kZWFkRGVjb2Rl
ZERhdGFEZWxldGlvbkludGVydmFsOworCisgICAgdW5zaWduZWQgbV9saXZlU2l6ZTsgLy8gVGhl
IG51bWJlciBvZiBieXRlcyBjdXJyZW50bHkgY29uc3VtZWQgYnkgImxpdmUiIHJlc291cmNlcyBp
biB0aGUgY2FjaGUuCisgICAgdW5zaWduZWQgbV9kZWFkU2l6ZTsgLy8gVGhlIG51bWJlciBvZiBi
eXRlcyBjdXJyZW50bHkgY29uc3VtZWQgYnkgImRlYWQiIHJlc291cmNlcyBpbiB0aGUgY2FjaGUu
CisKKyAgICAvLyBTaXplLWFkanVzdGVkIGFuZCBwb3B1bGFyaXR5LWF3YXJlIExSVSBsaXN0IGNv
bGxlY3Rpb24gZm9yIGNhY2hlIG9iamVjdHMuICBUaGlzIGNvbGxlY3Rpb24gY2FuIGhvbGQKKyAg
ICAvLyBtb3JlIHJlc291cmNlcyB0aGFuIHRoZSBjYWNoZWQgcmVzb3VyY2UgbWFwLCBzaW5jZSBp
dCBjYW4gYWxzbyBob2xkICJzdGFsZSIgbXVsdGlwbGUgdmVyc2lvbnMgb2Ygb2JqZWN0cyB0aGF0
IGFyZQorICAgIC8vIHdhaXRpbmcgdG8gZGllIHdoZW4gdGhlIGNsaWVudHMgcmVmZXJlbmNpbmcg
dGhlbSBnbyBhd2F5LgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TFJVTGlzdD4sIDMyPiBt
X2FsbFJlc291cmNlczsKKyAgICAKKyAgICAvLyBMaXN0IGp1c3QgZm9yIGxpdmUgcmVzb3VyY2Vz
IHdpdGggZGVjb2RlZCBkYXRhLiAgQWNjZXNzIHRvIHRoaXMgbGlzdCBpcyBiYXNlZCBvZmYgb2Yg
cGFpbnRpbmcgdGhlIHJlc291cmNlLgorICAgIExSVUxpc3QgbV9saXZlRGVjb2RlZFJlc291cmNl
czsKKyAgICAKKyAgICAvLyBBIFVSTC1iYXNlZCBtYXAgb2YgYWxsIHJlc291cmNlcyB0aGF0IGFy
ZSBpbiB0aGUgY2FjaGUgKGluY2x1ZGluZyB0aGUgZnJlc2hlc3QgdmVyc2lvbiBvZiBvYmplY3Rz
IHRoYXQgYXJlIGN1cnJlbnRseSBiZWluZyAKKyAgICAvLyByZWZlcmVuY2VkIGJ5IGEgV2ViIHBh
Z2UpLgorICAgIHR5cGVkZWYgSGFzaE1hcDxTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxDYWNo
ZWRSZXNvdXJjZU1hcD4+IFNlc3Npb25DYWNoZWRSZXNvdXJjZU1hcDsKKyAgICBTZXNzaW9uQ2Fj
aGVkUmVzb3VyY2VNYXAgbV9zZXNzaW9uUmVzb3VyY2VzOworCisgICAgVGltZXIgbV9wcnVuZVRp
bWVyOworfTsKKworfQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287956</attachid>
            <date>2016-09-05 07:42:39 -0700</date>
            <delta_ts>2016-09-05 08:32:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161602-20160905164012.patch</filename>
            <type>text/plain</type>
            <size>584765</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA1NDUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjM3MDBiZjE0OTMyMTgw
OTc5NjU0Yjk0MThmNWEzOTdhMTAyY2ZhMy4uNWUxYThmOTAwYWYzOTM4NzFiYTczZDdkZTFjM2U3
ZjYyZDE3ZDU1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU1IEBACiAyMDE2LTA5LTA1ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBbRmV0Y2ggQVBJXSBNb3Zl
IFdlYkNvcmUvbG9hZGVyL2NhY2hlIHRvIFdlYkNvcmUvbG9hZGVyL2ZldGNoCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE2MDIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBjaGFuZ2Ugb2YgYmVoYXZp
b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlUG9saWN5
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVQb2xpY3ku
aC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5j
cHAuCisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZENTU1N0eWxlU2hlZXQuaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0Lmgu
CisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZEZvbnQuY3BwOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwLgorICAgICAgICAqIGxvYWRl
ci9mZXRjaC9DYWNoZWRGb250Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkRm9udC5oLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRGb250Q2xp
ZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9u
dENsaWVudC5oLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRJbWFnZS5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwLgorICAg
ICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRJbWFnZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmguCisgICAgICAgICogbG9hZGVyL2ZldGNo
L0NhY2hlZEltYWdlQ2xpZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkSW1hZ2VDbGllbnQuaC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVk
UmF3UmVzb3VyY2UuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJhd1Jlc291cmNlLmNwcC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkUmF3
UmVzb3VyY2UuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSYXdSZXNvdXJjZS5oLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRSYXdSZXNvdXJj
ZUNsaWVudC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJhd1Jlc291cmNlQ2xpZW50LmguCisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291
cmNlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZS5jcHAuCisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaC4K
KyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVu
dFdhbGtlci5oLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZUhhbmRsZS5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGUuY3BwLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZUhhbmRs
ZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlSGFuZGxlLmguCisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlTG9hZGVy
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZUxvYWRlci5jcHAuCisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlUmVx
dWVzdC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0LmNwcC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0LmguCisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291
cmNlUmVxdWVzdEluaXRpYXRvcnMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMuY3BwLgorICAgICAgICAq
IGxvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5p
dGlhdG9ycy5oLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRTVkdEb2N1bWVudC5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRG9jdW1l
bnQuY3BwLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRTVkdEb2N1bWVudC5oOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0RvY3VtZW50Lmgu
CisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZFNWR0RvY3VtZW50Q2xpZW50Lmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRG9jdW1lbnRDbGll
bnQuaC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2Uu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0Rv
Y3VtZW50UmVmZXJlbmNlLmNwcC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRG9j
dW1lbnRSZWZlcmVuY2UuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9D
YWNoZWRTVkdGb250LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRTVkdGb250LmNwcC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRm9u
dC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0Zv
bnQuaC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkU2NyaXB0LmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwLgorICAgICAg
ICAqIGxvYWRlci9mZXRjaC9DYWNoZWRTY3JpcHQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuaC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gv
Q2FjaGVkU3R5bGVTaGVldENsaWVudC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFN0eWxlU2hlZXRDbGllbnQuaC4KKyAgICAgICAgKiBsb2FkZXIvZmV0
Y2gvQ2FjaGVkVGV4dFRyYWNrLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRUZXh0VHJhY2suY3BwLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9DYWNo
ZWRUZXh0VHJhY2suaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRUZXh0VHJhY2suaC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkWFNMU3R5bGVT
aGVldC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
WFNMU3R5bGVTaGVldC5jcHAuCisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZFhTTFN0eWxl
U2hlZXQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRY
U0xTdHlsZVNoZWV0LmguCisgICAgICAgICogbG9hZGVyL2ZldGNoL01lbW9yeUNhY2hlLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAu
CisgICAgICAgICogbG9hZGVyL2ZldGNoL01lbW9yeUNhY2hlLmg6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaC4KKworMjAxNi0wOS0wNSAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKICAgICAgICAgQ2FjaGVkUmVzb3VyY2VM
b2FkZXIgaXMgbm90IHRha2luZyBpbnRvIGFjY291bnQgZmV0Y2ggb3B0aW9ucyB0byB1c2Ugb3Ig
bm90IGNhY2hlZCByZXNvdXJjZXMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2MTM4OQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZmViMDUxNjM1YTFmZTgxZDA3NTc4
YWEzMGI3NDg0MTdmM2I4ZWJmYy4uYWE3NWU2Y2M3OGU2YmRkNmIyMTQ3Y2UyYmE5Mzg0Y2FhZTYw
MmQ5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE2LTA5LTA1ICBZb3Vlbm4gRmFi
bGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBbRmV0Y2ggQVBJXSBNb3ZlIFdlYkNv
cmUvbG9hZGVyL2NhY2hlIHRvIFdlYkNvcmUvbG9hZGVyL2ZldGNoCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE2MDIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorCiAyMDE2
LTA5LTA1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBbR1RLXSBTZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcgc2hvdWxkIG5v
dCBiZSBjb21waWxlZCBpbiBmb3Igd2F5bGFuZCBidWlsZApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRl
eCBlMWIzOWEwN2FkMzdjMDllYTFhOWVhNTk5ZjUxMDQ0OTE1NzM4YjVmLi5hNjFkNzMwZjBmNGI2
OGU2ZmEwOGM1NTNmNTUxNDQyMTE4ODYyMTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNjIs
NyArNjIsNyBAQCBzZXQoV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09S
RV9ESVJ9L2xvYWRlci9hcHBjYWNoZSIKICAgICAiJHtXRUJDT1JFX0RJUn0vbG9hZGVyL2FyY2hp
dmUiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2xvYWRlci9hcmNoaXZlL21odG1sIgotICAgICIke1dF
QkNPUkVfRElSfS9sb2FkZXIvY2FjaGUiCisgICAgIiR7V0VCQ09SRV9ESVJ9L2xvYWRlci9mZXRj
aCIKICAgICAiJHtXRUJDT1JFX0RJUn0vbG9hZGVyL2ljb24iCiAgICAgIiR7V0VCQ09SRV9ESVJ9
L21hdGhtbCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGFnZSIKQEAgLTE5ODksMjEgKzE5ODksMjEg
QEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGxvYWRlci9hcmNoaXZlL21odG1sL01IVE1MQXJj
aGl2ZS5jcHAKICAgICBsb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBhcnNlci5jcHAKIAotICAg
IGxvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAotICAgIGxvYWRlci9jYWNoZS9D
YWNoZWRGb250LmNwcAotICAgIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAKLSAgICBsb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCi0gICAgbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlLmNwcAotICAgIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAKLSAg
ICBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCi0gICAgbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlUmVxdWVzdC5jcHAKLSAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0SW5pdGlhdG9ycy5jcHAKLSAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRG9jdW1l
bnQuY3BwCi0gICAgbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmNwcAot
ICAgIGxvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250LmNwcAotICAgIGxvYWRlci9jYWNoZS9DYWNo
ZWRTY3JpcHQuY3BwCi0gICAgbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwCi0g
ICAgbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAorICAgIGxvYWRlci9mZXRjaC9DYWNoZWRD
U1NTdHlsZVNoZWV0LmNwcAorICAgIGxvYWRlci9mZXRjaC9DYWNoZWRGb250LmNwcAorICAgIGxv
YWRlci9mZXRjaC9DYWNoZWRJbWFnZS5jcHAKKyAgICBsb2FkZXIvZmV0Y2gvQ2FjaGVkUmF3UmVz
b3VyY2UuY3BwCisgICAgbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlLmNwcAorICAgIGxvYWRl
ci9mZXRjaC9DYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAKKyAgICBsb2FkZXIvZmV0Y2gvQ2FjaGVk
UmVzb3VyY2VMb2FkZXIuY3BwCisgICAgbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlUmVxdWVz
dC5jcHAKKyAgICBsb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5j
cHAKKyAgICBsb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRG9jdW1lbnQuY3BwCisgICAgbG9hZGVyL2Zl
dGNoL0NhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmNwcAorICAgIGxvYWRlci9mZXRjaC9DYWNo
ZWRTVkdGb250LmNwcAorICAgIGxvYWRlci9mZXRjaC9DYWNoZWRTY3JpcHQuY3BwCisgICAgbG9h
ZGVyL2ZldGNoL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwCisgICAgbG9hZGVyL2ZldGNoL01lbW9y
eUNhY2hlLmNwcAogCiAgICAgbG9hZGVyL2ljb24vSWNvbkNvbnRyb2xsZXIuY3BwCiAgICAgbG9h
ZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcApAQCAtMzE5Nyw3ICszMTk3LDcgQEAgaWYgKEVOQUJM
RV9WSURFT19UUkFDSykKICAgICAgICAgaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuY3BwCiAgICAg
ICAgIGh0bWwvdHJhY2svV2ViVlRUVG9rZW5pemVyLmNwcAogCi0gICAgICAgIGxvYWRlci9jYWNo
ZS9DYWNoZWRUZXh0VHJhY2suY3BwCisgICAgICAgIGxvYWRlci9mZXRjaC9DYWNoZWRUZXh0VHJh
Y2suY3BwCiAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFRyYWNrUmVwcmVzZW50YXRp
b24uY3BwCiAgICAgKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGFkZWFkNmQwODU2MWYyNThiNjRmMmQ3Y2I1ZmU2ZGNiYjExNDM5
ZjIuLmYyOTVkNmY3NDdmMzlhYTk0ZjA0NGNiOTBkOTkxZTBhZWI3MjE1ZWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE5NzE3
LDcgKzE5NzE3LDcgQEAKIAkJCW5hbWUgPSBYTUw7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwogCQl9OwotCQlBOEQyQjI1MjEyODdBNTYwMDBBRjREREEgLyogY2FjaGUgKi8gPSB7CisJCUE4
RDJCMjUyMTI4N0E1NjAwMEFGNEREQSAvKiBmZXRjaCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQkNCMTZDMDAwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hl
ZENTU1N0eWxlU2hlZXQuY3BwICovLApAQCAtMTk3NjEsNyArMTk3NjEsNyBAQAogCQkJCUJDQjE2
QkZFMDk3OUMzQkQwMDQ2Nzc0MSAvKiBNZW1vcnlDYWNoZS5jcHAgKi8sCiAJCQkJQkNCMTZCRkYw
OTc5QzNCRDAwNDY3NzQxIC8qIE1lbW9yeUNhY2hlLmggKi8sCiAJCQkpOwotCQkJcGF0aCA9IGNh
Y2hlOworCQkJcGF0aCA9IGZldGNoOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsK
IAkJQTlEMjQ3RjkwRDc1N0U0MTAwRkRGOTU5IC8qIFBsdWdpbnMgKi8gPSB7CkBAIC0yMTMyOSw3
ICsyMTMyOSw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkxQThGNkJCMDBEQjU1Q0RDMDAxREI3
OTQgLyogYXBwY2FjaGUgKi8sCiAJCQkJNTEyREQ4RTgwRDkxRTY5MTAwMEY4OUVFIC8qIGFyY2hp
dmUgKi8sCi0JCQkJQThEMkIyNTIxMjg3QTU2MDAwQUY0RERBIC8qIGNhY2hlICovLAorCQkJCUE4
RDJCMjUyMTI4N0E1NjAwMEFGNEREQSAvKiBmZXRjaCAqLywKIAkJCQk3RUU2ODQ3MzEyRDI2RTU1
MDBFNzk0MTUgLyogY2YgKi8sCiAJCQkJN0U0REUxMEIxOThCMTA4MTAwNTFDQjAyIC8qIGNvY29h
ICovLAogCQkJCTUxMjZFNkI2MEEyRTNBRUYwMDVDMjlGQSAvKiBpY29uICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlUG9saWN5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVQb2xpY3kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYjI3Njg1ZWU5MjA0MjEwNzQ1OTE5NTIwMTJkN2ViMTFiYWE5ODUwYS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVQb2xpY3kuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5k
ZWYgQ2FjaGVQb2xpY3lfaAotI2RlZmluZSBDYWNoZVBvbGljeV9oCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotICAgIGVudW0gQ2FjaGVQb2xpY3kgewotICAgICAgICBDYWNoZVBvbGljeVZlcmlm
eSwKLSAgICAgICAgQ2FjaGVQb2xpY3lSZXZhbGlkYXRlLAotICAgICAgICBDYWNoZVBvbGljeVJl
bG9hZCwKLSAgICAgICAgQ2FjaGVQb2xpY3lIaXN0b3J5QnVmZmVyCi0gICAgfTsKLQotfQotCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRDU1NT
dHlsZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHls
ZVNoZWV0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQzN2U1OGJkZjQ5ZTE0
ZWVkY2Q0ZjA5MGY5ZmFlNjZmMjRlZTkzOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5
bGVTaGVldC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotLyoKLSAgICBDb3B5
cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5
cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gICAgQ29weXJp
Z2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKLSAgICBDb3B5cmln
aHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gICAgQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIEluYy4KLQotICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSAgICBUaGlzIGNsYXNzIHBy
b3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxl
IHNoZWV0cyBhbmQgaHRtbAotICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5
IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKLQotI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQu
aCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIgotI2luY2x1ZGUgIkNh
Y2hlZFN0eWxlU2hlZXRDbGllbnQuaCIKLSNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKLSNp
bmNsdWRlICJIVFRQUGFyc2Vycy5oIgotI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCi0jaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCi0jaW5j
bHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNhY2hlZENTU1N0eWxlU2hlZXQ6OkNhY2hlZENT
U1N0eWxlU2hlZXQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0
IFN0cmluZyYgY2hhcnNldCwgU2Vzc2lvbklEIHNlc3Npb25JRCkKLSAgICA6IENhY2hlZFJlc291
cmNlKHJlc291cmNlUmVxdWVzdCwgQ1NTU3R5bGVTaGVldCwgc2Vzc2lvbklEKQotICAgICwgbV9k
ZWNvZGVyKFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9jc3MiLCBjaGFyc2V0KSkK
LXsKLSAgICAvLyBQcmVmZXIgdGV4dC9jc3MgYnV0IGFjY2VwdCBhbnkgdHlwZSAoZGVsbC5jb20g
c2VydmVzIGEgc3R5bGVzaGVldAotICAgIC8vIGFzIHRleHQvaHRtbDsgc2VlIDxodHRwOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ1MT4pLgotICAgIHNldEFjY2VwdCgidGV4
dC9jc3MsKi8qO3E9MC4xIik7Ci19Ci0KLUNhY2hlZENTU1N0eWxlU2hlZXQ6On5DYWNoZWRDU1NT
dHlsZVNoZWV0KCkKLXsKLSAgICBpZiAobV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUpCi0gICAgICAg
IG1fcGFyc2VkU3R5bGVTaGVldENhY2hlLT5yZW1vdmVkRnJvbU1lbW9yeUNhY2hlKCk7Ci19Ci0K
LXZvaWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6ZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xp
ZW50KiBjKQotewotICAgIEFTU0VSVChjLT5yZXNvdXJjZUNsaWVudFR5cGUoKSA9PSBDYWNoZWRT
dHlsZVNoZWV0Q2xpZW50OjpleHBlY3RlZFR5cGUoKSk7Ci0gICAgLy8gQ2FjaGVkUmVzb3VyY2U6
OmRpZEFkZENsaWVudCgpIG11c3QgYmUgYmVmb3JlIHNldENTU1N0eWxlU2hlZXQoKSwKLSAgICAv
LyBiZWNhdXNlIHNldENTU1N0eWxlU2hlZXQoKSBtYXkgY2F1c2Ugc2NyaXB0cyB0byBiZSBleGVj
dXRlZCwgd2hpY2ggY291bGQgZGVzdHJveSAnYycgaWYgaXQgaXMgYW4gaW5zdGFuY2Ugb2YgSFRN
TExpbmtFbGVtZW50LgotICAgIC8vIHNlZSB0aGUgY29tbWVudCBvZiBIVE1MTGlua0VsZW1lbnQ6
OnNldENTU1N0eWxlU2hlZXQuCi0gICAgQ2FjaGVkUmVzb3VyY2U6OmRpZEFkZENsaWVudChjKTsK
LQotICAgIGlmICghaXNMb2FkaW5nKCkpCi0gICAgICAgIHN0YXRpY19jYXN0PENhY2hlZFN0eWxl
U2hlZXRDbGllbnQqPihjKS0+c2V0Q1NTU3R5bGVTaGVldChtX3Jlc291cmNlUmVxdWVzdC51cmwo
KSwgbV9yZXNwb25zZS51cmwoKSwgbV9kZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKSwgdGhpcyk7
Ci19Ci0KLXZvaWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6c2V0RW5jb2RpbmcoY29uc3QgU3RyaW5n
JiBjaHMpCi17Ci0gICAgbV9kZWNvZGVyLT5zZXRFbmNvZGluZyhjaHMsIFRleHRSZXNvdXJjZURl
Y29kZXI6OkVuY29kaW5nRnJvbUhUVFBIZWFkZXIpOwotfQotCi1TdHJpbmcgQ2FjaGVkQ1NTU3R5
bGVTaGVldDo6ZW5jb2RpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtX2RlY29kZXItPmVuY29k
aW5nKCkubmFtZSgpOwotfQotICAgIAotY29uc3QgU3RyaW5nIENhY2hlZENTU1N0eWxlU2hlZXQ6
OnNoZWV0VGV4dChNSU1FVHlwZUNoZWNrIG1pbWVUeXBlQ2hlY2ssIGJvb2wqIGhhc1ZhbGlkTUlN
RVR5cGUpIGNvbnN0Ci17IAotICAgIGlmICghbV9kYXRhIHx8IG1fZGF0YS0+aXNFbXB0eSgpIHx8
ICFjYW5Vc2VTaGVldChtaW1lVHlwZUNoZWNrLCBoYXNWYWxpZE1JTUVUeXBlKSkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotICAgIAotICAgIGlmICghbV9kZWNvZGVkU2hlZXRUZXh0LmlzTnVs
bCgpKQotICAgICAgICByZXR1cm4gbV9kZWNvZGVkU2hlZXRUZXh0OwotICAgIAotICAgIC8vIERv
bid0IGNhY2hlIHRoZSBkZWNvZGVkIHRleHQsIHJlZ2VuZXJhdGluZyBpcyBjaGVhcCBhbmQgaXQg
Y2FuIHVzZSBxdWl0ZSBhIGJpdCBvZiBtZW1vcnkKLSAgICByZXR1cm4gbV9kZWNvZGVyLT5kZWNv
ZGVBbmRGbHVzaChtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpOwotfQotCi12b2lkIENh
Y2hlZENTU1N0eWxlU2hlZXQ6OmZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKiBkYXRhKQotewot
ICAgIG1fZGF0YSA9IGRhdGE7Ci0gICAgc2V0RW5jb2RlZFNpemUoZGF0YSA/IGRhdGEtPnNpemUo
KSA6IDApOwotICAgIC8vIERlY29kZSB0aGUgZGF0YSB0byBmaW5kIG91dCB0aGUgZW5jb2Rpbmcg
YW5kIGtlZXAgdGhlIHNoZWV0IHRleHQgYXJvdW5kIGR1cmluZyBjaGVja05vdGlmeSgpCi0gICAg
aWYgKGRhdGEpCi0gICAgICAgIG1fZGVjb2RlZFNoZWV0VGV4dCA9IG1fZGVjb2Rlci0+ZGVjb2Rl
QW5kRmx1c2goZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpOwotICAgIHNldExvYWRpbmcoZmFs
c2UpOwotICAgIGNoZWNrTm90aWZ5KCk7Ci0gICAgLy8gQ2xlYXIgdGhlIGRlY29kZWQgdGV4dCBh
cyBpdCBpcyB1bmxpa2VseSB0byBiZSBuZWVkZWQgaW1tZWRpYXRlbHkgYWdhaW4gYW5kIGlzIGNo
ZWFwIHRvIHJlZ2VuZXJhdGUuCi0gICAgbV9kZWNvZGVkU2hlZXRUZXh0ID0gU3RyaW5nKCk7Ci19
Ci0KLXZvaWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6Y2hlY2tOb3RpZnkoKQotewotICAgIGlmIChp
c0xvYWRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRX
YWxrZXI8Q2FjaGVkU3R5bGVTaGVldENsaWVudD4gdyhtX2NsaWVudHMpOwotICAgIHdoaWxlIChD
YWNoZWRTdHlsZVNoZWV0Q2xpZW50KiBjID0gdy5uZXh0KCkpCi0gICAgICAgIGMtPnNldENTU1N0
eWxlU2hlZXQobV9yZXNvdXJjZVJlcXVlc3QudXJsKCksIG1fcmVzcG9uc2UudXJsKCksIG1fZGVj
b2Rlci0+ZW5jb2RpbmcoKS5uYW1lKCksIHRoaXMpOwotfQotCi1ib29sIENhY2hlZENTU1N0eWxl
U2hlZXQ6OmNhblVzZVNoZWV0KE1JTUVUeXBlQ2hlY2sgbWltZVR5cGVDaGVjaywgYm9vbCogaGFz
VmFsaWRNSU1FVHlwZSkgY29uc3QKLXsKLSAgICBpZiAoZXJyb3JPY2N1cnJlZCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobWltZVR5cGVDaGVjayA9PSBNSU1FVHlwZUNoZWNr
OjpMYXgpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gVGhpcyBjaGVjayBleGFjdGx5
IG1hdGNoZXMgRmlyZWZveC4gIE5vdGUgdGhhdCB3ZSBncmFiIHRoZSBDb250ZW50LVR5cGUKLSAg
ICAvLyBoZWFkZXIgZGlyZWN0bHkgYmVjYXVzZSB3ZSB3YW50IHRvIHNlZSB3aGF0IHRoZSB2YWx1
ZSBpcyBCRUZPUkUgY29udGVudAotICAgIC8vIHNuaWZmaW5nLiAgRmlyZWZveCBkb2VzIHRoaXMg
Ynkgc2V0dGluZyBhICJ0eXBlIGhpbnQiIG9uIHRoZSBjaGFubmVsLgotICAgIC8vIFRoaXMgaW1w
bGVtZW50YXRpb24gc2hvdWxkIGJlIG9ic2VydmF0aW9uYWxseSBlcXVpdmFsZW50LgotICAgIC8v
Ci0gICAgLy8gVGhpcyBjb2RlIGRlZmF1bHRzIHRvIGFsbG93aW5nIHRoZSBzdHlsZXNoZWV0IGZv
ciBub24tSFRUUCBwcm90b2NvbHMgc28KLSAgICAvLyBmb2xrcyBjYW4gdXNlIHN0YW5kYXJkcyBt
b2RlIGZvciBsb2NhbCBIVE1MIGRvY3VtZW50cy4KLSAgICBTdHJpbmcgbWltZVR5cGUgPSBleHRy
YWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKHJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkKEhUVFBI
ZWFkZXJOYW1lOjpDb250ZW50VHlwZSkpOwotICAgIGJvb2wgdHlwZU9LID0gbWltZVR5cGUuaXNF
bXB0eSgpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAidGV4dC9j
c3MiKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImFwcGxpY2F0
aW9uL3gtdW5rbm93bi1jb250ZW50LXR5cGUiKTsKLSAgICBpZiAoaGFzVmFsaWRNSU1FVHlwZSkK
LSAgICAgICAgKmhhc1ZhbGlkTUlNRVR5cGUgPSB0eXBlT0s7Ci0gICAgcmV0dXJuIHR5cGVPSzsK
LX0KLQotdm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0OjpkZXN0cm95RGVjb2RlZERhdGEoKQotewot
ICAgIGlmICghbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fcGFyc2VkU3R5bGVTaGVldENhY2hlLT5yZW1vdmVkRnJvbU1lbW9yeUNhY2hlKCk7Ci0gICAg
bV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUgPSBudWxscHRyOwotCi0gICAgc2V0RGVjb2RlZFNpemUo
MCk7Ci19Ci0KLVBhc3NSZWZQdHI8U3R5bGVTaGVldENvbnRlbnRzPiBDYWNoZWRDU1NTdHlsZVNo
ZWV0OjpyZXN0b3JlUGFyc2VkU3R5bGVTaGVldChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250
ZXh0LCBDYWNoZVBvbGljeSBjYWNoZVBvbGljeSkKLXsKLSAgICBpZiAoIW1fcGFyc2VkU3R5bGVT
aGVldENhY2hlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIW1fcGFyc2VkU3R5
bGVTaGVldENhY2hlLT5zdWJyZXNvdXJjZXNBbGxvd1JldXNlKGNhY2hlUG9saWN5KSkgewotICAg
ICAgICBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+cmVtb3ZlZEZyb21NZW1vcnlDYWNoZSgpOwot
ICAgICAgICBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZSA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLQotICAgIEFTU0VSVChtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+
aXNDYWNoZWFibGUoKSk7Ci0gICAgQVNTRVJUKG1fcGFyc2VkU3R5bGVTaGVldENhY2hlLT5pc0lu
TWVtb3J5Q2FjaGUoKSk7Ci0KLSAgICAvLyBDb250ZXh0cyBtdXN0IGJlIGlkZW50aWNhbCBzbyB3
ZSBrbm93IHdlIHdvdWxkIGdldCB0aGUgc2FtZSBleGFjdCByZXN1bHQgaWYgd2UgcGFyc2VkIGFn
YWluLgotICAgIGlmIChtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+cGFyc2VyQ29udGV4dCgpICE9
IGNvbnRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgZGlkQWNjZXNzRGVjb2Rl
ZERhdGEobW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOwotCi0gICAgcmV0dXJuIG1fcGFy
c2VkU3R5bGVTaGVldENhY2hlOwotfQotCi12b2lkIENhY2hlZENTU1N0eWxlU2hlZXQ6OnNhdmVQ
YXJzZWRTdHlsZVNoZWV0KFJlZjxTdHlsZVNoZWV0Q29udGVudHM+JiYgc2hlZXQpCi17Ci0gICAg
QVNTRVJUKHNoZWV0LmdldCgpLmlzQ2FjaGVhYmxlKCkpOwotCi0gICAgaWYgKG1fcGFyc2VkU3R5
bGVTaGVldENhY2hlKQotICAgICAgICBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+cmVtb3ZlZEZy
b21NZW1vcnlDYWNoZSgpOwotICAgIG1fcGFyc2VkU3R5bGVTaGVldENhY2hlID0gV1RGTW92ZShz
aGVldCk7Ci0gICAgbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUtPmFkZGVkVG9NZW1vcnlDYWNoZSgp
OwotCi0gICAgc2V0RGVjb2RlZFNpemUobV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUtPmVzdGltYXRl
ZFNpemVJbkJ5dGVzKCkpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MzQyYThmZmVlNjBiNjA5ZTE5ZThmMGEwMjY2NDEwYjY3OTFlMmNkYy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAot
LyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5k
ZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+
Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwu
Y29tKQotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwg
ZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5k
IGh0bWwKLSAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3Ig
dGhlc2Ugb2JqZWN0cy4KLSovCi0KLSNpZm5kZWYgQ2FjaGVkQ1NTU3R5bGVTaGVldF9oCi0jZGVm
aW5lIENhY2hlZENTU1N0eWxlU2hlZXRfaAotCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgQ2FjaGVkUmVzb3VyY2VDbGllbnQ7
Ci0gICAgY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwotICAgIGNsYXNzIFRleHRSZXNvdXJjZURl
Y29kZXI7Ci0gICAgc3RydWN0IENTU1BhcnNlckNvbnRleHQ7Ci0KLSAgICBjbGFzcyBDYWNoZWRD
U1NTdHlsZVNoZWV0IGZpbmFsIDogcHVibGljIENhY2hlZFJlc291cmNlIHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIENhY2hlZENTU1N0eWxlU2hlZXQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29u
c3QgU3RyaW5nJiBjaGFyc2V0LCBTZXNzaW9uSUQpOwotICAgICAgICB2aXJ0dWFsIH5DYWNoZWRD
U1NTdHlsZVNoZWV0KCk7Ci0KLSAgICAgICAgZW51bSBjbGFzcyBNSU1FVHlwZUNoZWNrIHsgU3Ry
aWN0LCBMYXggfTsKLSAgICAgICAgY29uc3QgU3RyaW5nIHNoZWV0VGV4dChNSU1FVHlwZUNoZWNr
ID0gTUlNRVR5cGVDaGVjazo6U3RyaWN0LCBib29sKiBoYXNWYWxpZE1JTUVUeXBlID0gbnVsbHB0
cikgY29uc3Q7Ci0KLSAgICAgICAgUGFzc1JlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+IHJlc3Rv
cmVQYXJzZWRTdHlsZVNoZWV0KGNvbnN0IENTU1BhcnNlckNvbnRleHQmLCBDYWNoZVBvbGljeSk7
Ci0gICAgICAgIHZvaWQgc2F2ZVBhcnNlZFN0eWxlU2hlZXQoUmVmPFN0eWxlU2hlZXRDb250ZW50
cz4mJik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBib29sIGNhblVzZVNoZWV0KE1JTUVUeXBl
Q2hlY2ssIGJvb2wqIGhhc1ZhbGlkTUlNRVR5cGUpIGNvbnN0OwotICAgICAgICBib29sIG1heVRy
eVJlcGxhY2VFbmNvZGVkRGF0YSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQot
ICAgICAgICB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopIG92ZXJyaWRl
OwotCi0gICAgICAgIHZvaWQgc2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0g
ICAgICAgIFN0cmluZyBlbmNvZGluZygpIGNvbnN0IG92ZXJyaWRlOwotICAgICAgICBjb25zdCBU
ZXh0UmVzb3VyY2VEZWNvZGVyKiB0ZXh0UmVzb3VyY2VEZWNvZGVyKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbV9kZWNvZGVyLmdldCgpOyB9Ci0gICAgICAgIHZvaWQgZmluaXNoTG9hZGluZyhT
aGFyZWRCdWZmZXIqKSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEo
KSBvdmVycmlkZTsKLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgdm9pZCBjaGVja05vdGlmeSgp
IG92ZXJyaWRlOwotCi0gICAgICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBtX2RlY29k
ZXI7Ci0gICAgICAgIFN0cmluZyBtX2RlY29kZWRTaGVldFRleHQ7Ci0KLSAgICAgICAgUmVmUHRy
PFN0eWxlU2hlZXRDb250ZW50cz4gbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGU7Ci0gICAgfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBQ0hFRF9S
RVNPVVJDRShDYWNoZWRDU1NTdHlsZVNoZWV0LCBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVl
dCkKLQotI2VuZGlmIC8vIENhY2hlZENTU1N0eWxlU2hlZXRfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
NmNiNDFjMzI5MmYxZjk3YWMxYjRkM2MxOTk4ZGRkNTQxZmExZmI3Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRGb250LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJDYWNoZWRGb250LmgiCi0KLSNpbmNsdWRlICJDYWNoZWRGb250Q2xpZW50Lmgi
Ci0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKLSNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCIK
LSNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRh
LmgiCi0jaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
LSNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAiVHlwZWRFbGVtZW50
RGVzY2VuZGFudEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiV09GRkZpbGVGb3JtYXQuaCIKLSNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ2FjaGVkRm9udDo6
Q2FjaGVkRm9udChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgU2Vzc2lv
bklEIHNlc3Npb25JRCwgVHlwZSB0eXBlKQotICAgIDogQ2FjaGVkUmVzb3VyY2UocmVzb3VyY2VS
ZXF1ZXN0LCB0eXBlLCBzZXNzaW9uSUQpCi0gICAgLCBtX2xvYWRJbml0aWF0ZWQoZmFsc2UpCi0g
ICAgLCBtX2hhc0NyZWF0ZWRGb250RGF0YVdyYXBwaW5nUmVzb3VyY2UoZmFsc2UpCi17Ci19Ci0K
LUNhY2hlZEZvbnQ6On5DYWNoZWRGb250KCkKLXsKLX0KLQotdm9pZCBDYWNoZWRGb250Ojpsb2Fk
KENhY2hlZFJlc291cmNlTG9hZGVyJiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRp
b25zKQotewotICAgIC8vIERvbid0IGxvYWQgdGhlIGZpbGUgeWV0LiAgV2FpdCBmb3IgYW4gYWNj
ZXNzIGJlZm9yZSB0cmlnZ2VyaW5nIHRoZSBsb2FkLgotICAgIHNldExvYWRpbmcodHJ1ZSk7Ci0g
ICAgbV9vcHRpb25zID0gb3B0aW9uczsKLX0KLQotdm9pZCBDYWNoZWRGb250OjpkaWRBZGRDbGll
bnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCkKLXsKLSAgICBBU1NFUlQoY2xpZW50LT5y
ZXNvdXJjZUNsaWVudFR5cGUoKSA9PSBDYWNoZWRGb250Q2xpZW50OjpleHBlY3RlZFR5cGUoKSk7
Ci0gICAgaWYgKCFpc0xvYWRpbmcoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8Q2FjaGVkRm9udENs
aWVudCo+KGNsaWVudCktPmZvbnRMb2FkZWQoKnRoaXMpOwotfQotCi12b2lkIENhY2hlZEZvbnQ6
OmZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKiBkYXRhKQotewotICAgIG1fZGF0YSA9IGRhdGE7
Ci0gICAgc2V0RW5jb2RlZFNpemUobV9kYXRhLmdldCgpID8gbV9kYXRhLT5zaXplKCkgOiAwKTsK
LSAgICBzZXRMb2FkaW5nKGZhbHNlKTsKLSAgICBjaGVja05vdGlmeSgpOwotfQotCi12b2lkIENh
Y2hlZEZvbnQ6OmJlZ2luTG9hZElmTmVlZGVkKENhY2hlZFJlc291cmNlTG9hZGVyJiBsb2FkZXIp
Ci17Ci0gICAgaWYgKCFtX2xvYWRJbml0aWF0ZWQpIHsKLSAgICAgICAgbV9sb2FkSW5pdGlhdGVk
ID0gdHJ1ZTsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2U6OmxvYWQobG9hZGVyLCBtX29wdGlvbnMp
OwotICAgIH0KLX0KLQotYm9vbCBDYWNoZWRGb250OjplbnN1cmVDdXN0b21Gb250RGF0YShjb25z
dCBBdG9taWNTdHJpbmcmKQotewotICAgIHJldHVybiBlbnN1cmVDdXN0b21Gb250RGF0YShtX2Rh
dGEuZ2V0KCkpOwotfQotCi1ib29sIENhY2hlZEZvbnQ6OmVuc3VyZUN1c3RvbUZvbnREYXRhKFNo
YXJlZEJ1ZmZlciogZGF0YSkKLXsKLSAgICBpZiAoIW1fZm9udEN1c3RvbVBsYXRmb3JtRGF0YSAm
JiAhZXJyb3JPY2N1cnJlZCgpICYmICFpc0xvYWRpbmcoKSAmJiBkYXRhKSB7Ci0gICAgICAgIGJv
b2wgd3JhcHBpbmc7Ci0gICAgICAgIG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0YSA9IGNyZWF0ZUN1
c3RvbUZvbnREYXRhKCpkYXRhLCB3cmFwcGluZyk7Ci0gICAgICAgIG1faGFzQ3JlYXRlZEZvbnRE
YXRhV3JhcHBpbmdSZXNvdXJjZSA9IG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0YSAmJiB3cmFwcGlu
ZzsKLSAgICAgICAgaWYgKCFtX2ZvbnRDdXN0b21QbGF0Zm9ybURhdGEpCi0gICAgICAgICAgICBz
ZXRTdGF0dXMoRGVjb2RlRXJyb3IpOwotICAgIH0KLQotICAgIHJldHVybiBtX2ZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEuZ2V0KCk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxGb250Q3VzdG9tUGxhdGZv
cm1EYXRhPiBDYWNoZWRGb250OjpjcmVhdGVDdXN0b21Gb250RGF0YShTaGFyZWRCdWZmZXImIGJ5
dGVzLCBib29sJiB3cmFwcGluZykKLXsKLSAgICB3cmFwcGluZyA9IHRydWU7Ci0KLSNpZiAhUExB
VEZPUk0oQ09DT0EpCi0gICAgaWYgKGlzV09GRihieXRlcykpIHsKLSAgICAgICAgd3JhcHBpbmcg
PSBmYWxzZTsKLSAgICAgICAgVmVjdG9yPGNoYXI+IGNvbnZlcnRlZEZvbnQ7Ci0gICAgICAgIGlm
ICghY29udmVydFdPRkZUb1NmbnQoYnl0ZXMsIGNvbnZlcnRlZEZvbnQpKQotICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgYXV0byBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OmFk
b3B0VmVjdG9yKGNvbnZlcnRlZEZvbnQpOwotICAgICAgICByZXR1cm4gY3JlYXRlRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YShidWZmZXIpOwotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuIGNyZWF0
ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEoYnl0ZXMpOwotfQotCi1SZWZQdHI8Rm9udD4gQ2FjaGVk
Rm9udDo6Y3JlYXRlRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
Y29uc3QgQXRvbWljU3RyaW5nJiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0
YWxpYywgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyYgZm9udEZhY2VGZWF0dXJlcywgY29uc3Qg
Rm9udFZhcmlhbnRTZXR0aW5ncyYgZm9udEZhY2VWYXJpYW50U2V0dGluZ3MpCi17Ci0gICAgcmV0
dXJuIEZvbnQ6OmNyZWF0ZShwbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShmb250RGVzY3JpcHRp
b24sIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywgZm9udEZhY2VGZWF0dXJlcywgZm9u
dEZhY2VWYXJpYW50U2V0dGluZ3MpLCB0cnVlKTsKLX0KLQotRm9udFBsYXRmb3JtRGF0YSBDYWNo
ZWRGb250OjpwbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgY29uc3QgRm9udEZlYXR1
cmVTZXR0aW5ncyYgZm9udEZhY2VGZWF0dXJlcywgY29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYg
Zm9udEZhY2VWYXJpYW50U2V0dGluZ3MpCi17Ci0gICAgQVNTRVJUKG1fZm9udEN1c3RvbVBsYXRm
b3JtRGF0YSk7Ci0gICAgcmV0dXJuIHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKCptX2ZvbnRD
dXN0b21QbGF0Zm9ybURhdGEsIGZvbnREZXNjcmlwdGlvbiwgYm9sZCwgaXRhbGljLCBmb250RmFj
ZUZlYXR1cmVzLCBmb250RmFjZVZhcmlhbnRTZXR0aW5ncyk7Ci19Ci0KLUZvbnRQbGF0Zm9ybURh
dGEgQ2FjaGVkRm9udDo6cGxhdGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoRm9udEN1c3RvbVBsYXRm
b3JtRGF0YSYgZm9udEN1c3RvbVBsYXRmb3JtRGF0YSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIGNvbnN0IEZvbnRGZWF0dXJl
U2V0dGluZ3MmIGZvbnRGYWNlRmVhdHVyZXMsIGNvbnN0IEZvbnRWYXJpYW50U2V0dGluZ3MmIGZv
bnRGYWNlVmFyaWFudFNldHRpbmdzKQotewotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHJldHVy
biBmb250Q3VzdG9tUGxhdGZvcm1EYXRhLmZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9u
LCBib2xkLCBpdGFsaWMsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlVmFyaWFudFNldHRpbmdz
KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGZvbnRGYWNlRmVhdHVyZXMpOwotICAgIFVOVVNF
RF9QQVJBTShmb250RmFjZVZhcmlhbnRTZXR0aW5ncyk7Ci0gICAgcmV0dXJuIGZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEuZm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGJvbGQsIGl0YWxp
Yyk7Ci0jZW5kaWYKLX0KLQotdm9pZCBDYWNoZWRGb250OjphbGxDbGllbnRzUmVtb3ZlZCgpCi17
Ci0gICAgbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhID0gbnVsbHB0cjsKLX0KLQotdm9pZCBDYWNo
ZWRGb250OjpjaGVja05vdGlmeSgpCi17Ci0gICAgaWYgKGlzTG9hZGluZygpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI8Q2FjaGVkRm9udENs
aWVudD4gd2Fsa2VyKG1fY2xpZW50cyk7Ci0gICAgd2hpbGUgKENhY2hlZEZvbnRDbGllbnQqIGNs
aWVudCA9IHdhbGtlci5uZXh0KCkpCi0gICAgICAgIGNsaWVudC0+Zm9udExvYWRlZCgqdGhpcyk7
Ci19Ci0KLWJvb2wgQ2FjaGVkRm9udDo6bWF5VHJ5UmVwbGFjZUVuY29kZWREYXRhKCkgY29uc3QK
LXsKLSAgICAvLyBJZiBhIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEgaGFzIGV2ZXIgYmVlbiBjb25z
dHJ1Y3RlZCB0byB3cmFwIHRoZSBpbnRlcm5hbCByZXNvdXJjZSBidWZmZXIgdGhlbiBpdCBzdGls
bCBtaWdodCBiZSBpbiB1c2Ugc29tZXdoZXJlLgotICAgIC8vIFRoYXQgcGxhdGZvcm0gZm9udCBv
YmplY3QgbWlnaHQgZGlyZWN0bHkgcmVmZXJlbmNlIHRoZSBlbmNvZGVkIGRhdGEgYnVmZmVyIGJl
aGluZCB0aGlzIENhY2hlZEZvbnQsCi0gICAgLy8gc28gcmVwbGFjaW5nIGl0IGlzIHVuc2FmZS4K
LQotICAgIHJldHVybiAhbV9oYXNDcmVhdGVkRm9udERhdGFXcmFwcGluZ1Jlc291cmNlOwotfQot
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5o
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZTU4YzllMDk1YzQ5ZmVmZTIxN2EzYTY3YjAwNmY1ZjU0NTFhYzBj
MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5oCisrKyAvZGV2L251bGwKQEAgLTEsODYg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaWZuZGVmIENhY2hlZEZvbnRfaAotI2RlZmluZSBDYWNoZWRGb250X2gKLQotI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIK
LSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiVGV4dEZsYWdzLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7Ci1jbGFzcyBGb250RGVzY3Jp
cHRpb247Ci1jbGFzcyBGb250RmVhdHVyZVNldHRpbmdzOwotY2xhc3MgRm9udFBsYXRmb3JtRGF0
YTsKLWNsYXNzIFNWR0RvY3VtZW50OwotY2xhc3MgU1ZHRm9udEVsZW1lbnQ7Ci1zdHJ1Y3QgRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YTsKLQotY2xhc3MgQ2FjaGVkRm9udCA6IHB1YmxpYyBDYWNoZWRS
ZXNvdXJjZSB7Ci1wdWJsaWM6Ci0gICAgQ2FjaGVkRm9udChjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
LCBTZXNzaW9uSUQsIFR5cGUgPSBGb250UmVzb3VyY2UpOwotICAgIHZpcnR1YWwgfkNhY2hlZEZv
bnQoKTsKLQotICAgIHZvaWQgYmVnaW5Mb2FkSWZOZWVkZWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIm
KTsKLSAgICBib29sIHN0aWxsTmVlZHNMb2FkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIW1f
bG9hZEluaXRpYXRlZDsgfQotCi0gICAgdmlydHVhbCBib29sIGVuc3VyZUN1c3RvbUZvbnREYXRh
KGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJKTsKLQotICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8Rm9udEN1c3RvbVBsYXRmb3JtRGF0YT4gY3JlYXRlQ3VzdG9tRm9udERhdGEoU2hhcmVk
QnVmZmVyJiwgYm9vbCYgd3JhcHBpbmcpOwotICAgIHN0YXRpYyBGb250UGxhdGZvcm1EYXRhIHBs
YXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKEZvbnRDdXN0b21QbGF0Zm9ybURhdGEmLCBjb25zdCBG
b250RGVzY3JpcHRpb24mLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBjb25zdCBGb250RmVhdHVy
ZVNldHRpbmdzJiwgY29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYpOwotCi0gICAgdmlydHVhbCBS
ZWZQdHI8Rm9udD4gY3JlYXRlRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHJlbW90ZVVSSSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0
YWxpYywgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyYsIGNvbnN0IEZvbnRWYXJpYW50U2V0dGlu
Z3MmKTsKLQotcHJvdGVjdGVkOgotICAgIEZvbnRQbGF0Zm9ybURhdGEgcGxhdGZvcm1EYXRhRnJv
bUN1c3RvbURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBib2xkLCBib29sIGl0YWxp
YywgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyYsIGNvbnN0IEZvbnRWYXJpYW50U2V0dGluZ3Mm
KTsKLQotICAgIGJvb2wgZW5zdXJlQ3VzdG9tRm9udERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhKTsK
LQotcHJpdmF0ZToKLSAgICB2b2lkIGNoZWNrTm90aWZ5KCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBt
YXlUcnlSZXBsYWNlRW5jb2RlZERhdGEoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZvaWQgbG9h
ZChDYWNoZWRSZXNvdXJjZUxvYWRlciYsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYpIG92
ZXJyaWRlOwotCi0gICAgdm9pZCBkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKSBv
dmVycmlkZTsKLSAgICB2b2lkIGZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKikgb3ZlcnJpZGU7
Ci0KLSAgICB2b2lkIGFsbENsaWVudHNSZW1vdmVkKCkgb3ZlcnJpZGU7Ci0KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8Rm9udEN1c3RvbVBsYXRmb3JtRGF0YT4gbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRh
OwotICAgIGJvb2wgbV9sb2FkSW5pdGlhdGVkOwotICAgIGJvb2wgbV9oYXNDcmVhdGVkRm9udERh
dGFXcmFwcGluZ1Jlc291cmNlOwotCi0gICAgZnJpZW5kIGNsYXNzIE1lbW9yeUNhY2hlOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBQ0hF
RF9SRVNPVVJDRShDYWNoZWRGb250LCBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlKQotCi0j
ZW5kaWYgLy8gQ2FjaGVkRm9udF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkRm9udENsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZEZvbnRDbGllbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDkzMjQxYTYw
ZjQwMWUzYWI1NzExNzJmMWM5YjkxYmZiZjExZWI1NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
Rm9udENsaWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgQ2FjaGVkRm9udENsaWVudF9oCi0jZGVmaW5lIENhY2hlZEZvbnRDbGllbnRfaAot
Ci0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBDYWNoZWRGb250OwotCi1jbGFzcyBDYWNoZWRGb250Q2xpZW50IDogcHVibGlj
IENhY2hlZFJlc291cmNlQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5DYWNoZWRGb250
Q2xpZW50KCkgeyB9Ci0gICAgc3RhdGljIENhY2hlZFJlc291cmNlQ2xpZW50VHlwZSBleHBlY3Rl
ZFR5cGUoKSB7IHJldHVybiBGb250VHlwZTsgfQotICAgIENhY2hlZFJlc291cmNlQ2xpZW50VHlw
ZSByZXNvdXJjZUNsaWVudFR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBleHBlY3RlZFR5
cGUoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBmb250TG9hZGVkKENhY2hlZEZvbnQmKSB7IH0KLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIENhY2hlZEZvbnRDbGllbnRf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1ZDBlZDdiYjExZWJiMGFiMDU5YTliNjRiNGE3YTY5ZGRk
YjIyMTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDU0MSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChr
bm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIg
KG11ZWxsZXJAa2RlLm9yZykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDIgV2FsZG8gQmFzdGlhbiAo
YmFzdGlhbkBrZGUub3JnKQotICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChz
YW0ud2VpbmlnQGdtYWlsLmNvbSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2Uu
aCIKLSNpbmNsdWRlICJDYWNoZWRJbWFnZUNsaWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlQ2xpZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKLSNp
bmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNs
dWRlICJNZW1vcnlDYWNoZS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJF
bGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHSW1hZ2UuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0j
aW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUu
aD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+Ci0KLSNpZiBQTEFURk9STShJT1MpCi0jaW5jbHVkZSAiU3lzdGVtTWVtb3J5Lmgi
Ci0jZW5kaWYKLQotI2lmIFVTRShDRykKLSNpbmNsdWRlICJQREZEb2N1bWVudEltYWdlLmgiCi0j
ZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1DYWNoZWRJbWFnZTo6Q2FjaGVkSW1hZ2Uo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIFNlc3Npb25JRCBzZXNzaW9u
SUQpCi0gICAgOiBDYWNoZWRSZXNvdXJjZShyZXNvdXJjZVJlcXVlc3QsIEltYWdlUmVzb3VyY2Us
IHNlc3Npb25JRCkKLSAgICAsIG1faW1hZ2UobnVsbHB0cikKLSAgICAsIG1faXNNYW51YWxseUNh
Y2hlZChmYWxzZSkKLSAgICAsIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSh0cnVlKQotewotICAg
IHNldFN0YXR1cyhVbmtub3duKTsKLX0KLQotQ2FjaGVkSW1hZ2U6OkNhY2hlZEltYWdlKEltYWdl
KiBpbWFnZSwgU2Vzc2lvbklEIHNlc3Npb25JRCkKLSAgICA6IENhY2hlZFJlc291cmNlKFJlc291
cmNlUmVxdWVzdCgpLCBJbWFnZVJlc291cmNlLCBzZXNzaW9uSUQpCi0gICAgLCBtX2ltYWdlKGlt
YWdlKQotICAgICwgbV9pc01hbnVhbGx5Q2FjaGVkKGZhbHNlKQotICAgICwgbV9zaG91bGRQYWlu
dEJyb2tlbkltYWdlKHRydWUpCi17Ci0gICAgc2V0U3RhdHVzKENhY2hlZCk7Ci0gICAgc2V0TG9h
ZGluZyhmYWxzZSk7Ci19Ci0KLUNhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShjb25zdCBVUkwmIHVy
bCwgSW1hZ2UqIGltYWdlLCBTZXNzaW9uSUQgc2Vzc2lvbklEKQotICAgIDogQ2FjaGVkUmVzb3Vy
Y2UoUmVzb3VyY2VSZXF1ZXN0KHVybCksIEltYWdlUmVzb3VyY2UsIHNlc3Npb25JRCkKLSAgICAs
IG1faW1hZ2UoaW1hZ2UpCi0gICAgLCBtX2lzTWFudWFsbHlDYWNoZWQoZmFsc2UpCi0gICAgLCBt
X3Nob3VsZFBhaW50QnJva2VuSW1hZ2UodHJ1ZSkKLXsKLSAgICBzZXRTdGF0dXMoQ2FjaGVkKTsK
LSAgICBzZXRMb2FkaW5nKGZhbHNlKTsKLX0KLQotQ2FjaGVkSW1hZ2U6OkNhY2hlZEltYWdlKGNv
bnN0IFVSTCYgdXJsLCBJbWFnZSogaW1hZ2UsIENhY2hlZEltYWdlOjpDYWNoZUJlaGF2aW9yVHlw
ZSB0eXBlLCBTZXNzaW9uSUQgc2Vzc2lvbklEKQotICAgIDogQ2FjaGVkUmVzb3VyY2UoUmVzb3Vy
Y2VSZXF1ZXN0KHVybCksIEltYWdlUmVzb3VyY2UsIHNlc3Npb25JRCkKLSAgICAsIG1faW1hZ2Uo
aW1hZ2UpCi0gICAgLCBtX2lzTWFudWFsbHlDYWNoZWQodHlwZSA9PSBDYWNoZWRJbWFnZTo6TWFu
dWFsbHlDYWNoZWQpCi0gICAgLCBtX3Nob3VsZFBhaW50QnJva2VuSW1hZ2UodHJ1ZSkKLXsKLSAg
ICBzZXRTdGF0dXMoQ2FjaGVkKTsKLSAgICBzZXRMb2FkaW5nKGZhbHNlKTsKLSAgICBpZiAoVU5M
SUtFTFkoaXNNYW51YWxseUNhY2hlZCgpKSkgewotICAgICAgICAvLyBVc2UgdGhlIGluY29taW5n
IFVSTCBpbiB0aGUgcmVzcG9uc2UgZmllbGQuIFRoaXMgZW5zdXJlcyB0aGF0IGNvZGUKLSAgICAg
ICAgLy8gdXNpbmcgdGhlIHJlc3BvbnNlIGRpcmVjdGx5LCBzdWNoIGFzIG9yaWdpbiBjaGVja3Mg
Zm9yIHNlY3VyaXR5LAotICAgICAgICAvLyBhY3R1YWxseSBzZWUgc29tZXRoaW5nLgotICAgICAg
ICBtX3Jlc3BvbnNlLnNldFVSTCh1cmwpOwotICAgIH0KLX0KLQotQ2FjaGVkSW1hZ2U6On5DYWNo
ZWRJbWFnZSgpCi17Ci0gICAgY2xlYXJJbWFnZSgpOwotfQotCi12b2lkIENhY2hlZEltYWdlOjps
b2FkKENhY2hlZFJlc291cmNlTG9hZGVyJiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgY29uc3QgUmVz
b3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlmIChjYWNoZWRSZXNvdXJjZUxv
YWRlci5zaG91bGRQZXJmb3JtSW1hZ2VMb2FkKHVybCgpKSkKLSAgICAgICAgQ2FjaGVkUmVzb3Vy
Y2U6OmxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIsIG9wdGlvbnMpOwotICAgIGVsc2UKLSAgICAg
ICAgc2V0TG9hZGluZyhmYWxzZSk7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6OnNldEJvZHlEYXRh
RnJvbShjb25zdCBDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpCi17Ci0gICAgQVNTRVJUKHJlc291
cmNlLnR5cGUoKSA9PSB0eXBlKCkpOwotICAgIGNvbnN0IENhY2hlZEltYWdlJiBpbWFnZSA9IHN0
YXRpY19jYXN0PGNvbnN0IENhY2hlZEltYWdlJj4ocmVzb3VyY2UpOwotCi0gICAgc2V0TG9hZGlu
ZyhmYWxzZSk7Ci0gICAgbV9pbWFnZSA9IGltYWdlLm1faW1hZ2U7Ci0KLSAgICBpZiAobV9pbWFn
ZSAmJiBpczxTVkdJbWFnZT4oKm1faW1hZ2UpKQotICAgICAgICBtX3N2Z0ltYWdlQ2FjaGUgPSBz
dGQ6Om1ha2VfdW5pcXVlPFNWR0ltYWdlQ2FjaGU+KCZkb3duY2FzdDxTVkdJbWFnZT4oKm1faW1h
Z2UpKTsKLX0KLQotdm9pZCBDYWNoZWRJbWFnZTo6ZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNl
Q2xpZW50KiBjbGllbnQpCi17Ci0gICAgaWYgKG1fZGF0YSAmJiAhbV9pbWFnZSAmJiAhZXJyb3JP
Y2N1cnJlZCgpKSB7Ci0gICAgICAgIGNyZWF0ZUltYWdlKCk7Ci0gICAgICAgIG1faW1hZ2UtPnNl
dERhdGEobV9kYXRhLmNvcHlSZWYoKSwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGNsaWVu
dC0+cmVzb3VyY2VDbGllbnRUeXBlKCkgPT0gQ2FjaGVkSW1hZ2VDbGllbnQ6OmV4cGVjdGVkVHlw
ZSgpKTsKLSAgICBpZiAobV9pbWFnZSAmJiAhbV9pbWFnZS0+aXNOdWxsKCkpCi0gICAgICAgIHN0
YXRpY19jYXN0PENhY2hlZEltYWdlQ2xpZW50Kj4oY2xpZW50KS0+aW1hZ2VDaGFuZ2VkKHRoaXMp
OwotCi0gICAgQ2FjaGVkUmVzb3VyY2U6OmRpZEFkZENsaWVudChjbGllbnQpOwotfQotCi12b2lk
IENhY2hlZEltYWdlOjpkaWRSZW1vdmVDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVu
dCkKLXsKLSAgICBBU1NFUlQoY2xpZW50KTsKLSAgICBBU1NFUlQoY2xpZW50LT5yZXNvdXJjZUNs
aWVudFR5cGUoKSA9PSBDYWNoZWRJbWFnZUNsaWVudDo6ZXhwZWN0ZWRUeXBlKCkpOwotCi0gICAg
bV9wZW5kaW5nQ29udGFpbmVyU2l6ZVJlcXVlc3RzLnJlbW92ZShzdGF0aWNfY2FzdDxDYWNoZWRJ
bWFnZUNsaWVudCo+KGNsaWVudCkpOwotCi0gICAgaWYgKG1fc3ZnSW1hZ2VDYWNoZSkKLSAgICAg
ICAgbV9zdmdJbWFnZUNhY2hlLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUoc3RhdGljX2Nhc3Q8Q2Fj
aGVkSW1hZ2VDbGllbnQqPihjbGllbnQpKTsKLQotICAgIENhY2hlZFJlc291cmNlOjpkaWRSZW1v
dmVDbGllbnQoY2xpZW50KTsKLX0KLQotdm9pZCBDYWNoZWRJbWFnZTo6c3dpdGNoQ2xpZW50c1Rv
UmV2YWxpZGF0ZWRSZXNvdXJjZSgpCi17Ci0gICAgQVNTRVJUKGlzPENhY2hlZEltYWdlPihyZXNv
dXJjZVRvUmV2YWxpZGF0ZSgpKSk7Ci0gICAgLy8gUGVuZGluZyBjb250YWluZXIgc2l6ZSByZXF1
ZXN0cyBuZWVkIHRvIGJlIHRyYW5zZmVycmVkIHRvIHRoZSByZXZhbGlkYXRlZCByZXNvdXJjZS4K
LSAgICBpZiAoIW1fcGVuZGluZ0NvbnRhaW5lclNpemVSZXF1ZXN0cy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgLy8gQSBjb3B5IG9mIHBlbmRpbmcgc2l6ZSByZXF1ZXN0cyBpcyBuZWVkZWQgYXMgdGhl
eSBhcmUgZGVsZXRlZCBkdXJpbmcgQ2FjaGVkUmVzb3VyY2U6OnN3aXRjaENsaWVudHNUb1JldmFs
aWRhdGVSZXNvdWNlKCkuCi0gICAgICAgIENvbnRhaW5lclNpemVSZXF1ZXN0cyBzd2l0Y2hDb250
YWluZXJTaXplUmVxdWVzdHM7Ci0gICAgICAgIGZvciAoYXV0byYgcmVxdWVzdCA6IG1fcGVuZGlu
Z0NvbnRhaW5lclNpemVSZXF1ZXN0cykKLSAgICAgICAgICAgIHN3aXRjaENvbnRhaW5lclNpemVS
ZXF1ZXN0cy5zZXQocmVxdWVzdC5rZXksIHJlcXVlc3QudmFsdWUpOwotICAgICAgICBDYWNoZWRS
ZXNvdXJjZTo6c3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSgpOwotICAgICAgICBD
YWNoZWRJbWFnZSYgcmV2YWxpZGF0ZWRDYWNoZWRJbWFnZSA9IGRvd25jYXN0PENhY2hlZEltYWdl
PigqcmVzb3VyY2VUb1JldmFsaWRhdGUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYgcmVxdWVzdCA6
IHN3aXRjaENvbnRhaW5lclNpemVSZXF1ZXN0cykKLSAgICAgICAgICAgIHJldmFsaWRhdGVkQ2Fj
aGVkSW1hZ2Uuc2V0Q29udGFpbmVyU2l6ZUZvclJlbmRlcmVyKHJlcXVlc3Qua2V5LCByZXF1ZXN0
LnZhbHVlLmZpcnN0LCByZXF1ZXN0LnZhbHVlLnNlY29uZCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBDYWNoZWRSZXNvdXJjZTo6c3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNv
dXJjZSgpOwotfQotCi12b2lkIENhY2hlZEltYWdlOjphbGxDbGllbnRzUmVtb3ZlZCgpCi17Ci0g
ICAgbV9wZW5kaW5nQ29udGFpbmVyU2l6ZVJlcXVlc3RzLmNsZWFyKCk7Ci0gICAgaWYgKG1faW1h
Z2UgJiYgIWVycm9yT2NjdXJyZWQoKSkKLSAgICAgICAgbV9pbWFnZS0+cmVzZXRBbmltYXRpb24o
KTsKLX0KLQotc3RkOjpwYWlyPEltYWdlKiwgZmxvYXQ+IENhY2hlZEltYWdlOjpicm9rZW5JbWFn
ZShmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikgY29uc3QKLXsKLSAgICBpZiAoZGV2aWNlU2NhbGVG
YWN0b3IgPj0gMykgewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiBicm9r
ZW5JbWFnZVZlcnlIaVJlcyhJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1pc3NpbmdJbWFn
ZUAzeCIpLmxlYWtSZWYoKSk7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihicm9rZW5J
bWFnZVZlcnlIaVJlcywgMyk7Ci0gICAgfQotCi0gICAgaWYgKGRldmljZVNjYWxlRmFjdG9yID49
IDIpIHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gYnJva2VuSW1hZ2VI
aVJlcyhJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1pc3NpbmdJbWFnZUAyeCIpLmxlYWtS
ZWYoKSk7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihicm9rZW5JbWFnZUhpUmVzLCAy
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiBicm9rZW5JbWFn
ZUxvUmVzKEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWlzc2luZ0ltYWdlIikubGVha1Jl
ZigpKTsKLSAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoYnJva2VuSW1hZ2VMb1JlcywgMSk7Ci19
Ci0KLWJvb2wgQ2FjaGVkSW1hZ2U6OndpbGxQYWludEJyb2tlbkltYWdlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZXJyb3JPY2N1cnJlZCgpICYmIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZTsKLX0K
LQotSW1hZ2UqIENhY2hlZEltYWdlOjppbWFnZSgpCi17Ci0gICAgaWYgKGVycm9yT2NjdXJyZWQo
KSAmJiBtX3Nob3VsZFBhaW50QnJva2VuSW1hZ2UpIHsKLSAgICAgICAgLy8gUmV0dXJuaW5nIHRo
ZSAxeCBicm9rZW4gaW1hZ2UgaXMgbm9uLWlkZWFsLCBidXQgd2UgY2Fubm90IHJlbGlhYmx5IGFj
Y2VzcyB0aGUgYXBwcm9wcmlhdGUKLSAgICAgICAgLy8gZGV2aWNlU2NhbGVGYWN0b3IgZnJvbSBo
ZXJlLiBJdCBpcyBjcml0aWNhbCB0aGF0IGNhbGxlcnMgdXNlIENhY2hlZEltYWdlOjpicm9rZW5J
bWFnZSgpIAotICAgICAgICAvLyB3aGVuIHRoZXkgbmVlZCB0aGUgcmVhbCwgZGV2aWNlU2NhbGVG
YWN0b3ItYXBwcm9wcmlhdGUgYnJva2VuIGltYWdlIGljb24uIAotICAgICAgICByZXR1cm4gYnJv
a2VuSW1hZ2UoMSkuZmlyc3Q7Ci0gICAgfQotCi0gICAgaWYgKG1faW1hZ2UpCi0gICAgICAgIHJl
dHVybiBtX2ltYWdlLmdldCgpOwotCi0gICAgcmV0dXJuIEltYWdlOjpudWxsSW1hZ2UoKTsKLX0K
LQotSW1hZ2UqIENhY2hlZEltYWdlOjppbWFnZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVj
dCogcmVuZGVyZXIpCi17Ci0gICAgaWYgKGVycm9yT2NjdXJyZWQoKSAmJiBtX3Nob3VsZFBhaW50
QnJva2VuSW1hZ2UpIHsKLSAgICAgICAgLy8gUmV0dXJuaW5nIHRoZSAxeCBicm9rZW4gaW1hZ2Ug
aXMgbm9uLWlkZWFsLCBidXQgd2UgY2Fubm90IHJlbGlhYmx5IGFjY2VzcyB0aGUgYXBwcm9wcmlh
dGUKLSAgICAgICAgLy8gZGV2aWNlU2NhbGVGYWN0b3IgZnJvbSBoZXJlLiBJdCBpcyBjcml0aWNh
bCB0aGF0IGNhbGxlcnMgdXNlIENhY2hlZEltYWdlOjpicm9rZW5JbWFnZSgpIAotICAgICAgICAv
LyB3aGVuIHRoZXkgbmVlZCB0aGUgcmVhbCwgZGV2aWNlU2NhbGVGYWN0b3ItYXBwcm9wcmlhdGUg
YnJva2VuIGltYWdlIGljb24uIAotICAgICAgICByZXR1cm4gYnJva2VuSW1hZ2UoMSkuZmlyc3Q7
Ci0gICAgfQotCi0gICAgaWYgKCFtX2ltYWdlKQotICAgICAgICByZXR1cm4gSW1hZ2U6Om51bGxJ
bWFnZSgpOwotCi0gICAgaWYgKG1faW1hZ2UtPmlzU1ZHSW1hZ2UoKSkgewotICAgICAgICBJbWFn
ZSogaW1hZ2UgPSBtX3N2Z0ltYWdlQ2FjaGUtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIpOwot
ICAgICAgICBpZiAoaW1hZ2UgIT0gSW1hZ2U6Om51bGxJbWFnZSgpKQotICAgICAgICAgICAgcmV0
dXJuIGltYWdlOwotICAgIH0KLSAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKLX0KLQotdm9pZCBD
YWNoZWRJbWFnZTo6c2V0Q29udGFpbmVyU2l6ZUZvclJlbmRlcmVyKGNvbnN0IENhY2hlZEltYWdl
Q2xpZW50KiByZW5kZXJlciwgY29uc3QgTGF5b3V0U2l6ZSYgY29udGFpbmVyU2l6ZSwgZmxvYXQg
Y29udGFpbmVyWm9vbSkKLXsKLSAgICBpZiAoY29udGFpbmVyU2l6ZS5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBBU1NFUlQocmVuZGVyZXIpOwotICAgIEFTU0VSVChjb250YWluZXJa
b29tKTsKLSAgICBpZiAoIW1faW1hZ2UpIHsKLSAgICAgICAgbV9wZW5kaW5nQ29udGFpbmVyU2l6
ZVJlcXVlc3RzLnNldChyZW5kZXJlciwgU2l6ZUFuZFpvb20oY29udGFpbmVyU2l6ZSwgY29udGFp
bmVyWm9vbSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX2ltYWdlLT5p
c1NWR0ltYWdlKCkpIHsKLSAgICAgICAgbV9pbWFnZS0+c2V0Q29udGFpbmVyU2l6ZShjb250YWlu
ZXJTaXplKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc3ZnSW1hZ2VDYWNoZS0+
c2V0Q29udGFpbmVyU2l6ZUZvclJlbmRlcmVyKHJlbmRlcmVyLCBjb250YWluZXJTaXplLCBjb250
YWluZXJab29tKTsKLX0KLQotYm9vbCBDYWNoZWRJbWFnZTo6dXNlc0ltYWdlQ29udGFpbmVyU2l6
ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1faW1hZ2UpCi0gICAgICAgIHJldHVybiBtX2ltYWdlLT51
c2VzQ29udGFpbmVyU2l6ZSgpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENhY2hl
ZEltYWdlOjppbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdAotewotICAgIGlmIChtX2ltYWdl
KQotICAgICAgICByZXR1cm4gbV9pbWFnZS0+aGFzUmVsYXRpdmVXaWR0aCgpOwotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIENhY2hlZEltYWdlOjppbWFnZUhhc1JlbGF0aXZlSGVpZ2h0
KCkgY29uc3QKLXsKLSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgcmV0dXJuIG1faW1hZ2UtPmhh
c1JlbGF0aXZlSGVpZ2h0KCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUxheW91dFNpemUg
Q2FjaGVkSW1hZ2U6OmltYWdlU2l6ZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVu
ZGVyZXIsIGZsb2F0IG11bHRpcGxpZXIsIFNpemVUeXBlIHNpemVUeXBlKQotewotICAgIGlmICgh
bV9pbWFnZSkKLSAgICAgICAgcmV0dXJuIExheW91dFNpemUoKTsKLQotICAgIExheW91dFNpemUg
aW1hZ2VTaXplOwotCi0gICAgaWYgKGlzPEJpdG1hcEltYWdlPigqbV9pbWFnZSkgJiYgcmVuZGVy
ZXIgJiYgcmVuZGVyZXItPnNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVj
dEltYWdlT3JpZW50YXRpb24pCi0gICAgICAgIGltYWdlU2l6ZSA9IExheW91dFNpemUoZG93bmNh
c3Q8Qml0bWFwSW1hZ2U+KCptX2ltYWdlKS5zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkpOwot
ICAgIGVsc2UgaWYgKGlzPFNWR0ltYWdlPigqbV9pbWFnZSkgJiYgc2l6ZVR5cGUgPT0gVXNlZFNp
emUpCi0gICAgICAgIGltYWdlU2l6ZSA9IExheW91dFNpemUobV9zdmdJbWFnZUNhY2hlLT5pbWFn
ZVNpemVGb3JSZW5kZXJlcihyZW5kZXJlcikpOwotICAgIGVsc2UKLSAgICAgICAgaW1hZ2VTaXpl
ID0gTGF5b3V0U2l6ZShtX2ltYWdlLT5zaXplKCkpOwotCi0gICAgaWYgKG11bHRpcGxpZXIgPT0g
MS4wZikKLSAgICAgICAgcmV0dXJuIGltYWdlU2l6ZTsKLSAgICAgICAgCi0gICAgLy8gRG9uJ3Qg
bGV0IGltYWdlcyB0aGF0IGhhdmUgYSB3aWR0aC9oZWlnaHQgPj0gMSBzaHJpbmsgYmVsb3cgMSB3
aGVuIHpvb21lZC4KLSAgICBmbG9hdCB3aWR0aFNjYWxlID0gbV9pbWFnZS0+aGFzUmVsYXRpdmVX
aWR0aCgpID8gMS4wZiA6IG11bHRpcGxpZXI7Ci0gICAgZmxvYXQgaGVpZ2h0U2NhbGUgPSBtX2lt
YWdlLT5oYXNSZWxhdGl2ZUhlaWdodCgpID8gMS4wZiA6IG11bHRpcGxpZXI7Ci0gICAgTGF5b3V0
U2l6ZSBtaW5pbXVtU2l6ZShpbWFnZVNpemUud2lkdGgoKSA+IDAgPyAxIDogMCwgaW1hZ2VTaXpl
LmhlaWdodCgpID4gMCA/IDEgOiAwKTsKLSAgICBpbWFnZVNpemUuc2NhbGUod2lkdGhTY2FsZSwg
aGVpZ2h0U2NhbGUpOwotICAgIGltYWdlU2l6ZS5jbGFtcFRvTWluaW11bVNpemUobWluaW11bVNp
emUpOwotICAgIEFTU0VSVChtdWx0aXBsaWVyICE9IDEuMGYgfHwgKGltYWdlU2l6ZS53aWR0aCgp
LmZyYWN0aW9uKCkgPT0gMC4wZiAmJiBpbWFnZVNpemUuaGVpZ2h0KCkuZnJhY3Rpb24oKSA9PSAw
LjBmKSk7Ci0gICAgcmV0dXJuIGltYWdlU2l6ZTsKLX0KLQotdm9pZCBDYWNoZWRJbWFnZTo6Y29t
cHV0ZUludHJpbnNpY0RpbWVuc2lvbnMoTGVuZ3RoJiBpbnRyaW5zaWNXaWR0aCwgTGVuZ3RoJiBp
bnRyaW5zaWNIZWlnaHQsIEZsb2F0U2l6ZSYgaW50cmluc2ljUmF0aW8pCi17Ci0gICAgaWYgKG1f
aW1hZ2UpCi0gICAgICAgIG1faW1hZ2UtPmNvbXB1dGVJbnRyaW5zaWNEaW1lbnNpb25zKGludHJp
bnNpY1dpZHRoLCBpbnRyaW5zaWNIZWlnaHQsIGludHJpbnNpY1JhdGlvKTsKLX0KLQotdm9pZCBD
YWNoZWRJbWFnZTo6bm90aWZ5T2JzZXJ2ZXJzKGNvbnN0IEludFJlY3QqIGNoYW5nZVJlY3QpCi17
Ci0gICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI8Q2FjaGVkSW1hZ2VDbGllbnQ+IHcobV9j
bGllbnRzKTsKLSAgICB3aGlsZSAoQ2FjaGVkSW1hZ2VDbGllbnQqIGMgPSB3Lm5leHQoKSkKLSAg
ICAgICAgYy0+aW1hZ2VDaGFuZ2VkKHRoaXMsIGNoYW5nZVJlY3QpOwotfQotCi12b2lkIENhY2hl
ZEltYWdlOjpjaGVja1Nob3VsZFBhaW50QnJva2VuSW1hZ2UoKQotewotICAgIGlmICghbV9sb2Fk
ZXIgfHwgbV9sb2FkZXItPnJlYWNoZWRUZXJtaW5hbFN0YXRlKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSA9IG1fbG9hZGVyLT5mcmFtZUxvYWRlcigp
LT5jbGllbnQoKS5zaG91bGRQYWludEJyb2tlbkltYWdlKHVybCgpKTsKLX0KLQotdm9pZCBDYWNo
ZWRJbWFnZTo6Y2xlYXIoKQotewotICAgIGRlc3Ryb3lEZWNvZGVkRGF0YSgpOwotICAgIGNsZWFy
SW1hZ2UoKTsKLSAgICBtX3BlbmRpbmdDb250YWluZXJTaXplUmVxdWVzdHMuY2xlYXIoKTsKLSAg
ICBzZXRFbmNvZGVkU2l6ZSgwKTsKLX0KLQotaW5saW5lIHZvaWQgQ2FjaGVkSW1hZ2U6OmNyZWF0
ZUltYWdlKCkKLXsKLSAgICAvLyBDcmVhdGUgdGhlIGltYWdlIGlmIGl0IGRvZXNuJ3QgeWV0IGV4
aXN0LgotICAgIGlmIChtX2ltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBVU0UoQ0cpICYm
ICFVU0UoV0VCS0lUX0lNQUdFX0RFQ09ERVJTKQotICAgIGVsc2UgaWYgKG1fcmVzcG9uc2UubWlt
ZVR5cGUoKSA9PSAiYXBwbGljYXRpb24vcGRmIikKLSAgICAgICAgbV9pbWFnZSA9IFBERkRvY3Vt
ZW50SW1hZ2U6OmNyZWF0ZSh0aGlzKTsKLSNlbmRpZgotICAgIGVsc2UgaWYgKG1fcmVzcG9uc2Uu
bWltZVR5cGUoKSA9PSAiaW1hZ2Uvc3ZnK3htbCIpIHsKLSAgICAgICAgYXV0byBzdmdJbWFnZSA9
IFNWR0ltYWdlOjpjcmVhdGUoKnRoaXMsIHVybCgpKTsKLSAgICAgICAgbV9zdmdJbWFnZUNhY2hl
ID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdJbWFnZUNhY2hlPihzdmdJbWFnZS5wdHIoKSk7Ci0gICAg
ICAgIG1faW1hZ2UgPSBXVEZNb3ZlKHN2Z0ltYWdlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBt
X2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSh0aGlzKTsKLSAgICAgICAgZG93bmNhc3Q8Qml0
bWFwSW1hZ2U+KCptX2ltYWdlKS5zZXRBbGxvd1N1YnNhbXBsaW5nKG1fbG9hZGVyICYmIG1fbG9h
ZGVyLT5mcmFtZUxvYWRlcigpLT5mcmFtZSgpLnNldHRpbmdzKCkuaW1hZ2VTdWJzYW1wbGluZ0Vu
YWJsZWQoKSk7Ci0gICAgfQotCi0gICAgaWYgKG1faW1hZ2UpIHsKLSAgICAgICAgLy8gU2VuZCBx
dWV1ZWQgY29udGFpbmVyIHNpemUgcmVxdWVzdHMuCi0gICAgICAgIGlmIChtX2ltYWdlLT51c2Vz
Q29udGFpbmVyU2l6ZSgpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHJlcXVlc3QgOiBtX3Bl
bmRpbmdDb250YWluZXJTaXplUmVxdWVzdHMpCi0gICAgICAgICAgICAgICAgc2V0Q29udGFpbmVy
U2l6ZUZvclJlbmRlcmVyKHJlcXVlc3Qua2V5LCByZXF1ZXN0LnZhbHVlLmZpcnN0LCByZXF1ZXN0
LnZhbHVlLnNlY29uZCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9wZW5kaW5nQ29udGFpbmVyU2l6
ZVJlcXVlc3RzLmNsZWFyKCk7Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBDYWNoZWRJbWFnZTo6
Y2xlYXJJbWFnZSgpCi17Ci0gICAgLy8gSWYgb3VyIEltYWdlIGhhcyBhbiBvYnNlcnZlciwgaXQn
cyBhbHdheXMgdXMgc28gd2UgbmVlZCB0byBjbGVhciB0aGUgYmFjayBwb2ludGVyCi0gICAgLy8g
YmVmb3JlIGRyb3BwaW5nIG91ciByZWZlcmVuY2UuCi0gICAgaWYgKG1faW1hZ2UpCi0gICAgICAg
IG1faW1hZ2UtPnNldEltYWdlT2JzZXJ2ZXIobnVsbHB0cik7Ci0gICAgbV9pbWFnZSA9IG51bGxw
dHI7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6OmFkZEluY3JlbWVudGFsRGF0YUJ1ZmZlcihTaGFy
ZWRCdWZmZXImIGRhdGEpCi17Ci0gICAgbV9kYXRhID0gJmRhdGE7Ci0KLSAgICBjcmVhdGVJbWFn
ZSgpOwotCi0gICAgLy8gSGF2ZSB0aGUgaW1hZ2UgdXBkYXRlIGl0cyBkYXRhIGZyb20gaXRzIGlu
dGVybmFsIGJ1ZmZlci4KLSAgICAvLyBJdCB3aWxsIG5vdCBkbyBhbnl0aGluZyBub3csIGJ1dCB3
aWxsIGRlbGF5IGRlY29kaW5nIHVudGlsCi0gICAgLy8gcXVlcmllZCBmb3IgaW5mbyAobGlrZSBz
aXplIG9yIHNwZWNpZmljIGltYWdlIGZyYW1lcykuCi0gICAgYm9vbCBzaXplQXZhaWxhYmxlID0g
bV9pbWFnZS0+c2V0RGF0YSgmZGF0YSwgZmFsc2UpOwotICAgIGlmICghc2l6ZUF2YWlsYWJsZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1hZ2UtPmlzTnVsbCgpKSB7Ci0gICAgICAg
IC8vIEltYWdlIGRlY29kaW5nIGZhaWxlZC4gRWl0aGVyIHdlIG5lZWQgbW9yZSBpbWFnZSBkYXRh
IG9yIHRoZSBpbWFnZSBkYXRhIGlzIG1hbGZvcm1lZC4KLSAgICAgICAgZXJyb3IoZXJyb3JPY2N1
cnJlZCgpID8gc3RhdHVzKCkgOiBEZWNvZGVFcnJvcik7Ci0gICAgICAgIGlmIChpbkNhY2hlKCkp
Ci0gICAgICAgICAgICBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkucmVtb3ZlKCp0aGlzKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFRlbGwgb3VyIG9ic2VydmVycyB0byB0cnkg
dG8gZHJhdy4KLSAgICAvLyBFYWNoIGNodW5rIGZyb20gdGhlIG5ldHdvcmsgY2F1c2VzIG9ic2Vy
dmVycyB0byByZXBhaW50LCB3aGljaCB3aWxsIGZvcmNlIHRoYXQgY2h1bmsgdG8gZGVjb2RlLgot
ICAgIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8gb25seSByZWRyYXcgdGhlIGRlY29kZWQgYmFuZCBv
ZiB0aGUgaW1hZ2UsIGJ1dCB3aXRoIHRoZSBjdXJyZW50IGRlc2lnbgotICAgIC8vIChkZWNvZGlu
ZyBkZWxheWVkIHVudGlsIHBhaW50aW5nKSB0aGF0IHNlZW1zIGhhcmQuCi0gICAgbm90aWZ5T2Jz
ZXJ2ZXJzKCk7Ci0KLSAgICBzZXRFbmNvZGVkU2l6ZShtX2ltYWdlLT5kYXRhKCkgPyBtX2ltYWdl
LT5kYXRhKCktPnNpemUoKSA6IDApOwotfQotCi12b2lkIENhY2hlZEltYWdlOjphZGREYXRhQnVm
ZmVyKFNoYXJlZEJ1ZmZlciYgZGF0YSkKLXsKLSAgICBBU1NFUlQoZGF0YUJ1ZmZlcmluZ1BvbGlj
eSgpID09IEJ1ZmZlckRhdGEpOwotICAgIGFkZEluY3JlbWVudGFsRGF0YUJ1ZmZlcihkYXRhKTsK
LSAgICBDYWNoZWRSZXNvdXJjZTo6YWRkRGF0YUJ1ZmZlcihkYXRhKTsKLX0KLQotdm9pZCBDYWNo
ZWRJbWFnZTo6YWRkRGF0YShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0g
ICAgQVNTRVJUKGRhdGFCdWZmZXJpbmdQb2xpY3koKSA9PSBEb05vdEJ1ZmZlckRhdGEpOwotICAg
IGFkZEluY3JlbWVudGFsRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXI6OmNyZWF0ZShkYXRhLCBsZW5n
dGgpKTsKLSAgICBDYWNoZWRSZXNvdXJjZTo6YWRkRGF0YShkYXRhLCBsZW5ndGgpOwotfQotCi12
b2lkIENhY2hlZEltYWdlOjpmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1ZmZlciogZGF0YSkKLXsKLSAg
ICBtX2RhdGEgPSBkYXRhOwotICAgIGlmICghbV9pbWFnZSAmJiBkYXRhKQotICAgICAgICBjcmVh
dGVJbWFnZSgpOwotCi0gICAgaWYgKG1faW1hZ2UpCi0gICAgICAgIG1faW1hZ2UtPnNldERhdGEo
ZGF0YSwgdHJ1ZSk7Ci0KLSAgICBpZiAoIW1faW1hZ2UgfHwgbV9pbWFnZS0+aXNOdWxsKCkpIHsK
LSAgICAgICAgLy8gSW1hZ2UgZGVjb2RpbmcgZmFpbGVkOyB0aGUgaW1hZ2UgZGF0YSBpcyBtYWxm
b3JtZWQuCi0gICAgICAgIGVycm9yKGVycm9yT2NjdXJyZWQoKSA/IHN0YXR1cygpIDogRGVjb2Rl
RXJyb3IpOwotICAgICAgICBpZiAoaW5DYWNoZSgpKQotICAgICAgICAgICAgTWVtb3J5Q2FjaGU6
OnNpbmdsZXRvbigpLnJlbW92ZSgqdGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBub3RpZnlPYnNlcnZlcnMoKTsKLSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgc2V0RW5jb2Rl
ZFNpemUobV9pbWFnZS0+ZGF0YSgpID8gbV9pbWFnZS0+ZGF0YSgpLT5zaXplKCkgOiAwKTsKLSAg
ICBDYWNoZWRSZXNvdXJjZTo6ZmluaXNoTG9hZGluZyhkYXRhKTsKLX0KLQotdm9pZCBDYWNoZWRJ
bWFnZTo6ZGlkUmVwbGFjZVNoYXJlZEJ1ZmZlckNvbnRlbnRzKCkKLXsKLSAgICBpZiAobV9pbWFn
ZSkgewotICAgICAgICAvLyBMZXQgdGhlIEltYWdlIGtub3cgdGhhdCB0aGUgU2hhcmVkQnVmZmVy
IGhhcyBiZWVuIHJlamlnZ2VkLCBzbyBpdCBjYW4gbGV0IGdvIG9mIGFueSByZWZlcmVuY2VzIHRv
IHRoZSBoZWFwLWFsbG9jYXRlZCByZXNvdXJjZSBidWZmZXIuCi0gICAgICAgIC8vIEZJWE1FKHJk
YXI6Ly9wcm9ibGVtLzI0Mjc1NjE3KTogSXQgd291bGQgYmUgYmV0dGVyIGlmIHdlIGNvdWxkIHNv
bWVob3cgdGVsbCB0aGUgSW1hZ2UncyBkZWNvZGVyIHRvIHN3YXAgaW4gdGhlIG5ldyBjb250ZW50
cyB3aXRob3V0IGRlc3Ryb3lpbmcgYW55dGhpbmcuCi0gICAgICAgIG1faW1hZ2UtPmRlc3Ryb3lE
ZWNvZGVkRGF0YSh0cnVlKTsKLSAgICB9Ci0gICAgQ2FjaGVkUmVzb3VyY2U6OmRpZFJlcGxhY2VT
aGFyZWRCdWZmZXJDb250ZW50cygpOwotfQotCi12b2lkIENhY2hlZEltYWdlOjplcnJvcihDYWNo
ZWRSZXNvdXJjZTo6U3RhdHVzIHN0YXR1cykKLXsKLSAgICBjaGVja1Nob3VsZFBhaW50QnJva2Vu
SW1hZ2UoKTsKLSAgICBjbGVhcigpOwotICAgIENhY2hlZFJlc291cmNlOjplcnJvcihzdGF0dXMp
OwotICAgIG5vdGlmeU9ic2VydmVycygpOwotfQotCi12b2lkIENhY2hlZEltYWdlOjpyZXNwb25z
ZVJlY2VpdmVkKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIGlmICgh
bV9yZXNwb25zZS5pc051bGwoKSkKLSAgICAgICAgY2xlYXIoKTsKLSAgICBDYWNoZWRSZXNvdXJj
ZTo6cmVzcG9uc2VSZWNlaXZlZChyZXNwb25zZSk7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6OmRl
c3Ryb3lEZWNvZGVkRGF0YSgpCi17Ci0gICAgYm9vbCBjYW5EZWxldGVJbWFnZSA9ICFtX2ltYWdl
IHx8IChtX2ltYWdlLT5oYXNPbmVSZWYoKSAmJiBtX2ltYWdlLT5pc0JpdG1hcEltYWdlKCkpOwot
ICAgIGlmIChjYW5EZWxldGVJbWFnZSAmJiAhaXNMb2FkaW5nKCkgJiYgIWhhc0NsaWVudHMoKSkg
ewotICAgICAgICBtX2ltYWdlID0gbnVsbHB0cjsKLSAgICAgICAgc2V0RGVjb2RlZFNpemUoMCk7
Ci0gICAgfSBlbHNlIGlmIChtX2ltYWdlICYmICFlcnJvck9jY3VycmVkKCkpCi0gICAgICAgIG1f
aW1hZ2UtPmRlc3Ryb3lEZWNvZGVkRGF0YSgpOwotfQotCi12b2lkIENhY2hlZEltYWdlOjpkZWNv
ZGVkU2l6ZUNoYW5nZWQoY29uc3QgSW1hZ2UqIGltYWdlLCBpbnQgZGVsdGEpCi17Ci0gICAgaWYg
KCFpbWFnZSB8fCBpbWFnZSAhPSBtX2ltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
c2V0RGVjb2RlZFNpemUoZGVjb2RlZFNpemUoKSArIGRlbHRhKTsKLX0KLQotdm9pZCBDYWNoZWRJ
bWFnZTo6ZGlkRHJhdyhjb25zdCBJbWFnZSogaW1hZ2UpCi17Ci0gICAgaWYgKCFpbWFnZSB8fCBp
bWFnZSAhPSBtX2ltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgZG91YmxlIHRpbWVT
dGFtcCA9IEZyYW1lVmlldzo6Y3VycmVudFBhaW50VGltZVN0YW1wKCk7Ci0gICAgaWYgKCF0aW1l
U3RhbXApIC8vIElmIGRpZERyYXcgaXMgY2FsbGVkIG91dHNpZGUgb2YgYSBGcmFtZSBwYWludC4K
LSAgICAgICAgdGltZVN0YW1wID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7Ci0gICAg
Ci0gICAgQ2FjaGVkUmVzb3VyY2U6OmRpZEFjY2Vzc0RlY29kZWREYXRhKHRpbWVTdGFtcCk7Ci19
Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6OmFuaW1hdGlvbkFkdmFuY2VkKGNvbnN0IEltYWdlKiBpbWFn
ZSkKLXsKLSAgICBpZiAoIWltYWdlIHx8IGltYWdlICE9IG1faW1hZ2UpCi0gICAgICAgIHJldHVy
bjsKLSAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRJbWFnZUNsaWVudD4gY2xp
ZW50V2Fsa2VyKG1fY2xpZW50cyk7Ci0gICAgd2hpbGUgKENhY2hlZEltYWdlQ2xpZW50KiBjbGll
bnQgPSBjbGllbnRXYWxrZXIubmV4dCgpKQotICAgICAgICBjbGllbnQtPm5ld0ltYWdlQW5pbWF0
aW9uRnJhbWVBdmFpbGFibGUoKnRoaXMpOwotfQotCi12b2lkIENhY2hlZEltYWdlOjpjaGFuZ2Vk
SW5SZWN0KGNvbnN0IEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBp
ZiAoIWltYWdlIHx8IGltYWdlICE9IG1faW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBub3Rp
ZnlPYnNlcnZlcnMoJnJlY3QpOwotfQotCi1ib29sIENhY2hlZEltYWdlOjpjdXJyZW50RnJhbWVL
bm93blRvQmVPcGFxdWUoY29uc3QgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIpCi17Ci0gICAgSW1h
Z2UqIGltYWdlID0gaW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlcik7Ci0gICAgcmV0dXJuIGltYWdl
LT5jdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKTsKLX0KLQotYm9vbCBDYWNoZWRJbWFnZTo6
aXNPcmlnaW5DbGVhbihTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pCi17Ci0gICAgaWYg
KCFpbWFnZSgpLT5oYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKHBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjaygqc2VjdXJpdHlPcmlnaW4pKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gIXNlY3VyaXR5T3JpZ2luLT50YWludHND
YW52YXMocmVzcG9uc2VGb3JTYW1lT3JpZ2luUG9saWN5Q2hlY2tzKCkudXJsKCkpOwotfQotCi1D
YWNoZWRSZXNvdXJjZTo6UmV2YWxpZGF0aW9uRGVjaXNpb24gQ2FjaGVkSW1hZ2U6Om1ha2VSZXZh
bGlkYXRpb25EZWNpc2lvbihDYWNoZVBvbGljeSBjYWNoZVBvbGljeSkgY29uc3QKLXsKLSAgICBp
ZiAoVU5MSUtFTFkoaXNNYW51YWxseUNhY2hlZCgpKSkgewotICAgICAgICAvLyBEbyBub3QgcmV2
YWxpZGF0ZSBtYW51YWxseSBjYWNoZWQgaW1hZ2VzLiBUaGlzIG1lY2hhbmlzbSBpcyB1c2VkIGFz
IGEKLSAgICAgICAgLy8gd2F5IHRvIGVmZmljaWVudGx5IHNoYXJlIGFuIGltYWdlIGZyb20gdGhl
IGNsaWVudCB0byBjb250ZW50IGFuZAotICAgICAgICAvLyB0aGUgVVJMIGZvciB0aGF0IGltYWdl
IG1heSBub3QgcmVwcmVzZW50IGEgcmVzb3VyY2UgdGhhdCBjYW4gYmUKLSAgICAgICAgLy8gcmV0
cmlldmVkIGJ5IHN0YW5kYXJkIG1lYW5zLiBJZiB0aGUgbWFudWFsIGNhY2hpbmcgU1BJIGlzIHVz
ZWQsIGl0IGlzCi0gICAgICAgIC8vIGluY3VtYmVudCBvbiB0aGUgY2xpZW50IHRvIG9ubHkgdXNl
IHZhbGlkIHJlc291cmNlcy4KLSAgICAgICAgcmV0dXJuIFJldmFsaWRhdGlvbkRlY2lzaW9uOjpO
bzsKLSAgICB9Ci0gICAgcmV0dXJuIENhY2hlZFJlc291cmNlOjptYWtlUmV2YWxpZGF0aW9uRGVj
aXNpb24oY2FjaGVQb2xpY3kpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBhMGRiOTRkYzk2OTA5ZThhNjYxMDNiMTBlNTA5ZDA5Mzc2ODE3OTAwLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAK
LS8qCi0gICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcu
ZGUpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3Jn
PgotICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWls
LmNvbSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpZm5kZWYgQ2FjaGVkSW1hZ2VfaAotI2RlZmlu
ZSBDYWNoZWRJbWFnZV9oCi0KLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgotI2luY2x1ZGUg
IkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgotI2luY2x1ZGUgIkludFJlY3Qu
aCIKLSNpbmNsdWRlICJJbnRTaXplSGFzaC5oIgotI2luY2x1ZGUgIkxheW91dFNpemUuaCIKLSNp
bmNsdWRlICJTVkdJbWFnZUNhY2hlLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDYWNoZWRJbWFnZUNsaWVudDsKLWNsYXNzIENhY2hl
ZFJlc291cmNlTG9hZGVyOwotY2xhc3MgRmxvYXRTaXplOwotY2xhc3MgTWVtb3J5Q2FjaGU7Ci1j
bGFzcyBSZW5kZXJFbGVtZW50OwotY2xhc3MgUmVuZGVyT2JqZWN0OwotY2xhc3MgU2VjdXJpdHlP
cmlnaW47Ci0KLXN0cnVjdCBMZW5ndGg7Ci0KLWNsYXNzIENhY2hlZEltYWdlIGZpbmFsIDogcHVi
bGljIENhY2hlZFJlc291cmNlLCBwdWJsaWMgSW1hZ2VPYnNlcnZlciB7Ci0gICAgZnJpZW5kIGNs
YXNzIE1lbW9yeUNhY2hlOwotCi1wdWJsaWM6Ci0gICAgZW51bSBDYWNoZUJlaGF2aW9yVHlwZSB7
IEF1dG9tYXRpY2FsbHlDYWNoZWQsIE1hbnVhbGx5Q2FjaGVkIH07Ci0KLSAgICBDYWNoZWRJbWFn
ZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTZXNzaW9uSUQpOwotICAgIENhY2hlZEltYWdlKElt
YWdlKiwgU2Vzc2lvbklEKTsKLSAgICBDYWNoZWRJbWFnZShjb25zdCBVUkwmLCBJbWFnZSosIFNl
c3Npb25JRCk7Ci0gICAgQ2FjaGVkSW1hZ2UoY29uc3QgVVJMJiwgSW1hZ2UqLCBDYWNoZUJlaGF2
aW9yVHlwZSwgU2Vzc2lvbklEKTsKLSAgICB2aXJ0dWFsIH5DYWNoZWRJbWFnZSgpOwotCi0gICAg
V0VCQ09SRV9FWFBPUlQgSW1hZ2UqIGltYWdlKCk7IC8vIFJldHVybnMgdGhlIG51bGxJbWFnZSgp
IGlmIHRoZSBpbWFnZSBpcyBub3QgYXZhaWxhYmxlIHlldC4KLSAgICBXRUJDT1JFX0VYUE9SVCBJ
bWFnZSogaW1hZ2VGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqKTsgLy8gUmV0dXJucyB0
aGUgbnVsbEltYWdlKCkgaWYgdGhlIGltYWdlIGlzIG5vdCBhdmFpbGFibGUgeWV0LgotICAgIGJv
b2wgaGFzSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9Ci0gICAgYm9vbCBj
dXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoY29uc3QgUmVuZGVyRWxlbWVudCopOwotCi0gICAg
c3RkOjpwYWlyPEltYWdlKiwgZmxvYXQ+IGJyb2tlbkltYWdlKGZsb2F0IGRldmljZVNjYWxlRmFj
dG9yKSBjb25zdDsgLy8gUmV0dXJucyBhbiBpbWFnZSBhbmQgdGhlIGltYWdlJ3MgcmVzb2x1dGlv
biBzY2FsZSBmYWN0b3IuCi0gICAgYm9vbCB3aWxsUGFpbnRCcm9rZW5JbWFnZSgpIGNvbnN0OyAK
LQotICAgIGJvb2wgY2FuUmVuZGVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGZsb2F0
IG11bHRpcGxpZXIpIHsgcmV0dXJuICFlcnJvck9jY3VycmVkKCkgJiYgIWltYWdlU2l6ZUZvclJl
bmRlcmVyKHJlbmRlcmVyLCBtdWx0aXBsaWVyKS5pc0VtcHR5KCk7IH0KLQotICAgIHZvaWQgc2V0
Q29udGFpbmVyU2l6ZUZvclJlbmRlcmVyKGNvbnN0IENhY2hlZEltYWdlQ2xpZW50KiwgY29uc3Qg
TGF5b3V0U2l6ZSYsIGZsb2F0KTsKLSAgICBib29sIHVzZXNJbWFnZUNvbnRhaW5lclNpemUoKSBj
b25zdDsKLSAgICBib29sIGltYWdlSGFzUmVsYXRpdmVXaWR0aCgpIGNvbnN0OwotICAgIGJvb2wg
aW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0OwotCi0gICAgdm9pZCBhZGREYXRhQnVmZmVy
KFNoYXJlZEJ1ZmZlciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmluaXNoTG9hZGluZyhTaGFyZWRC
dWZmZXIqKSBvdmVycmlkZTsKLQotICAgIGVudW0gU2l6ZVR5cGUgewotICAgICAgICBVc2VkU2l6
ZSwKLSAgICAgICAgSW50cmluc2ljU2l6ZQotICAgIH07Ci0gICAgLy8gVGhpcyBtZXRob2QgdGFr
ZXMgYSB6b29tIG11bHRpcGxpZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBpbmNyZWFzZSB0aGUgbmF0
dXJhbCBzaXplIG9mIHRoZSBpbWFnZSBieSB0aGUgem9vbS4KLSAgICBMYXlvdXRTaXplIGltYWdl
U2l6ZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCosIGZsb2F0IG11bHRpcGxpZXIsIFNp
emVUeXBlID0gVXNlZFNpemUpOyAvLyByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBjb21wbGV0ZSBp
bWFnZS4KLSAgICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNEaW1lbnNpb25zKExlbmd0aCYgaW50cmlu
c2ljV2lkdGgsIExlbmd0aCYgaW50cmluc2ljSGVpZ2h0LCBGbG9hdFNpemUmIGludHJpbnNpY1Jh
dGlvKTsKLQotICAgIGJvb2wgaXNNYW51YWxseUNhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNN
YW51YWxseUNhY2hlZDsgfQotICAgIFJldmFsaWRhdGlvbkRlY2lzaW9uIG1ha2VSZXZhbGlkYXRp
b25EZWNpc2lvbihDYWNoZVBvbGljeSkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBsb2FkKENh
Y2hlZFJlc291cmNlTG9hZGVyJiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJikgb3ZlcnJp
ZGU7Ci0KLSAgICBib29sIGlzT3JpZ2luQ2xlYW4oU2VjdXJpdHlPcmlnaW4qKTsKLQotcHJpdmF0
ZToKLSAgICB2b2lkIGNsZWFyKCk7Ci0KLSAgICBDYWNoZWRJbWFnZShDYWNoZWRJbWFnZSYsIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIFNlc3Npb25JRCk7Ci0KLSAgICB2b2lkIHNldEJvZHlEYXRh
RnJvbShjb25zdCBDYWNoZWRSZXNvdXJjZSYpIGZpbmFsOwotCi0gICAgdm9pZCBjcmVhdGVJbWFn
ZSgpOwotICAgIHZvaWQgY2xlYXJJbWFnZSgpOwotICAgIC8vIElmIG5vdCBudWxsLCBjaGFuZ2VS
ZWN0IGlzIHRoZSBjaGFuZ2VkIHBhcnQgb2YgdGhlIGltYWdlLgotICAgIHZvaWQgbm90aWZ5T2Jz
ZXJ2ZXJzKGNvbnN0IEludFJlY3QqIGNoYW5nZVJlY3QgPSBudWxscHRyKTsKLSAgICB2b2lkIGNo
ZWNrU2hvdWxkUGFpbnRCcm9rZW5JbWFnZSgpOwotCi0gICAgdm9pZCBzd2l0Y2hDbGllbnRzVG9S
ZXZhbGlkYXRlZFJlc291cmNlKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBtYXlUcnlSZXBsYWNlRW5j
b2RlZERhdGEoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2b2lkIGRp
ZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopIG92ZXJyaWRlOwotICAgIHZvaWQgZGlk
UmVtb3ZlQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lk
IGFsbENsaWVudHNSZW1vdmVkKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXN0cm95RGVjb2RlZERh
dGEoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgYWRkRGF0YShjb25zdCBjaGFyKiBkYXRhLCB1bnNp
Z25lZCBsZW5ndGgpIG92ZXJyaWRlOwotICAgIHZvaWQgZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OlN0
YXR1cykgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNwb25zZVJlY2VpdmVkKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKSBvdmVycmlkZTsKLQotICAgIC8vIEZvciBjb21wYXRpYmlsaXR5LCBpbWFnZXMg
a2VlcCBsb2FkaW5nIGV2ZW4gaWYgdGhlcmUgYXJlIEhUVFAgZXJyb3JzLgotICAgIGJvb2wgc2hv
dWxkSWdub3JlSFRUUFN0YXR1c0NvZGVFcnJvcnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9Ci0KLSAgICBib29sIHN0aWxsTmVlZHNMb2FkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gIWVycm9yT2NjdXJyZWQoKSAmJiBzdGF0dXMoKSA9PSBVbmtub3duICYmICFpc0xvYWRpbmco
KTsgfQotCi0gICAgLy8gSW1hZ2VPYnNlcnZlcgotICAgIHZvaWQgZGVjb2RlZFNpemVDaGFuZ2Vk
KGNvbnN0IEltYWdlKiwgaW50IGRlbHRhKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZERyYXcoY29u
c3QgSW1hZ2UqKSBvdmVycmlkZTsKLQotICAgIHZvaWQgYW5pbWF0aW9uQWR2YW5jZWQoY29uc3Qg
SW1hZ2UqKSBvdmVycmlkZTsKLSAgICB2b2lkIGNoYW5nZWRJblJlY3QoY29uc3QgSW1hZ2UqLCBj
b25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGFkZEluY3JlbWVudGFsRGF0YUJ1
ZmZlcihTaGFyZWRCdWZmZXImKTsKLQotICAgIHZvaWQgZGlkUmVwbGFjZVNoYXJlZEJ1ZmZlckNv
bnRlbnRzKCkgb3ZlcnJpZGU7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6cGFpcjxMYXlvdXRTaXplLCBm
bG9hdD4gU2l6ZUFuZFpvb207Ci0gICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IENhY2hlZEltYWdl
Q2xpZW50KiwgU2l6ZUFuZFpvb20+IENvbnRhaW5lclNpemVSZXF1ZXN0czsKLSAgICBDb250YWlu
ZXJTaXplUmVxdWVzdHMgbV9wZW5kaW5nQ29udGFpbmVyU2l6ZVJlcXVlc3RzOwotCi0gICAgUmVm
UHRyPEltYWdlPiBtX2ltYWdlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdJbWFnZUNhY2hlPiBt
X3N2Z0ltYWdlQ2FjaGU7Ci0gICAgdW5zaWduZWQgbV9pc01hbnVhbGx5Q2FjaGVkIDogMTsKLSAg
ICB1bnNpZ25lZCBtX3Nob3VsZFBhaW50QnJva2VuSW1hZ2UgOiAxOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBQ0hFRF9SRVNPVVJDRShD
YWNoZWRJbWFnZSwgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UpCi0KLSNlbmRpZiAvLyBD
YWNoZWRJbWFnZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkSW1hZ2VDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFn
ZUNsaWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjIzNWFjYmY5YWZhNGNl
OGM5YTZhYTM2MTlmMzQ5NWQ5NDE5YTlkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZUNs
aWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQg
KEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQg
KEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChD
KSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQotICAgIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotKi8KLQotI2lmbmRlZiBDYWNoZWRJbWFnZUNsaWVudF9oCi0jZGVmaW5lIENhY2hlZEltYWdl
Q2xpZW50X2gKLQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgQ2FjaGVkSW1hZ2U7Ci1jbGFzcyBJbnRSZWN0OwotCi1jbGFz
cyBDYWNoZWRJbWFnZUNsaWVudCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7Ci1wdWJs
aWM6Ci0gICAgdmlydHVhbCB+Q2FjaGVkSW1hZ2VDbGllbnQoKSB7IH0KLSAgICBzdGF0aWMgQ2Fj
aGVkUmVzb3VyY2VDbGllbnRUeXBlIGV4cGVjdGVkVHlwZSgpIHsgcmV0dXJuIEltYWdlVHlwZTsg
fQotICAgIENhY2hlZFJlc291cmNlQ2xpZW50VHlwZSByZXNvdXJjZUNsaWVudFR5cGUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBleHBlY3RlZFR5cGUoKTsgfQotCi0gICAgLy8gQ2FsbGVkIHdo
ZW5ldmVyIGEgZnJhbWUgb2YgYW4gaW1hZ2UgY2hhbmdlcyBiZWNhdXNlIHdlIGdvdCBtb3JlIGRh
dGEgZnJvbSB0aGUgbmV0d29yay4KLSAgICAvLyBJZiBub3QgbnVsbCwgdGhlIEludFJlY3QgaXMg
dGhlIGNoYW5nZWQgcmVjdCBvZiB0aGUgaW1hZ2UuCi0gICAgdmlydHVhbCB2b2lkIGltYWdlQ2hh
bmdlZChDYWNoZWRJbWFnZSosIGNvbnN0IEludFJlY3QqID0gbnVsbHB0cikgeyB9Ci0KLSAgICAv
LyBDYWxsZWQgd2hlbiBHSUYgYW5pbWF0aW9uIHByb2dyZXNzZXMuCi0gICAgdmlydHVhbCB2b2lk
IG5ld0ltYWdlQW5pbWF0aW9uRnJhbWVBdmFpbGFibGUoQ2FjaGVkSW1hZ2UmIGltYWdlKSB7IGlt
YWdlQ2hhbmdlZCgmaW1hZ2UpOyB9Ci19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGZhMGRmOGIwNGVjZTU0ZGIxMDY2MjQ2MjhmNThmYmJjNzgxZmRjNDIu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDI5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNh
Y2hlZFJhd1Jlc291cmNlLmgiCi0KLSNpbmNsdWRlICJDYWNoZWRSYXdSZXNvdXJjZUNsaWVudC5o
IgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgiCi0jaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIuaCIKLSNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKLSNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1D
YWNoZWRSYXdSZXNvdXJjZTo6Q2FjaGVkUmF3UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0JiByZXNv
dXJjZVJlcXVlc3QsIFR5cGUgdHlwZSwgU2Vzc2lvbklEIHNlc3Npb25JRCkKLSAgICA6IENhY2hl
ZFJlc291cmNlKHJlc291cmNlUmVxdWVzdCwgdHlwZSwgc2Vzc2lvbklEKQotICAgICwgbV9pZGVu
dGlmaWVyKDApCi0gICAgLCBtX2FsbG93RW5jb2RlZERhdGFSZXBsYWNlbWVudCh0cnVlKQotewot
ICAgIEFTU0VSVChpc01haW5Pck1lZGlhT3JSYXdSZXNvdXJjZSgpKTsKLX0KLQotY29uc3QgY2hh
ciogQ2FjaGVkUmF3UmVzb3VyY2U6OmNhbGN1bGF0ZUluY3JlbWVudGFsRGF0YUNodW5rKFNoYXJl
ZEJ1ZmZlciogZGF0YSwgdW5zaWduZWQmIGluY3JlbWVudGFsRGF0YUxlbmd0aCkKLXsKLSAgICBp
bmNyZW1lbnRhbERhdGFMZW5ndGggPSAwOwotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICB1bnNpZ25lZCBwcmV2aW91c0RhdGFMZW5ndGggPSBlbmNvZGVkU2l6
ZSgpOwotICAgIEFTU0VSVChkYXRhLT5zaXplKCkgPj0gcHJldmlvdXNEYXRhTGVuZ3RoKTsKLSAg
ICBpbmNyZW1lbnRhbERhdGFMZW5ndGggPSBkYXRhLT5zaXplKCkgLSBwcmV2aW91c0RhdGFMZW5n
dGg7Ci0gICAgcmV0dXJuIGRhdGEtPmRhdGEoKSArIHByZXZpb3VzRGF0YUxlbmd0aDsKLX0KLQot
dm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6YWRkRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXImIGRhdGEp
Ci17Ci0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+IHByb3RlY3Rl
ZFRoaXModGhpcyk7Ci0gICAgQVNTRVJUKGRhdGFCdWZmZXJpbmdQb2xpY3koKSA9PSBCdWZmZXJE
YXRhKTsKLSAgICBtX2RhdGEgPSAmZGF0YTsKLQotICAgIHVuc2lnbmVkIGluY3JlbWVudGFsRGF0
YUxlbmd0aDsKLSAgICBjb25zdCBjaGFyKiBpbmNyZW1lbnRhbERhdGEgPSBjYWxjdWxhdGVJbmNy
ZW1lbnRhbERhdGFDaHVuaygmZGF0YSwgaW5jcmVtZW50YWxEYXRhTGVuZ3RoKTsKLSAgICBzZXRF
bmNvZGVkU2l6ZShkYXRhLnNpemUoKSk7Ci0gICAgbm90aWZ5Q2xpZW50c0RhdGFXYXNSZWNlaXZl
ZChpbmNyZW1lbnRhbERhdGEsIGluY3JlbWVudGFsRGF0YUxlbmd0aCk7Ci0gICAgaWYgKGRhdGFC
dWZmZXJpbmdQb2xpY3koKSA9PSBEb05vdEJ1ZmZlckRhdGEpIHsKLSAgICAgICAgaWYgKG1fbG9h
ZGVyKQotICAgICAgICAgICAgbV9sb2FkZXItPnNldERhdGFCdWZmZXJpbmdQb2xpY3koRG9Ob3RC
dWZmZXJEYXRhKTsKLSAgICAgICAgY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIENhY2hlZFJlc291cmNlOjphZGREYXRhQnVmZmVyKGRhdGEpOwotfQotCi12b2lkIENhY2hl
ZFJhd1Jlc291cmNlOjphZGREYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICBBU1NFUlQoZGF0YUJ1ZmZlcmluZ1BvbGljeSgpID09IERvTm90QnVmZmVyRGF0YSk7
Ci0gICAgbm90aWZ5Q2xpZW50c0RhdGFXYXNSZWNlaXZlZChkYXRhLCBsZW5ndGgpOwotICAgIENh
Y2hlZFJlc291cmNlOjphZGREYXRhKGRhdGEsIGxlbmd0aCk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmF3
UmVzb3VyY2U6OmZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKiBkYXRhKQotewotICAgIENhY2hl
ZFJlc291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwot
ICAgIERhdGFCdWZmZXJpbmdQb2xpY3kgZGF0YUJ1ZmZlcmluZ1BvbGljeSA9IHRoaXMtPmRhdGFC
dWZmZXJpbmdQb2xpY3koKTsKLSAgICBpZiAoZGF0YUJ1ZmZlcmluZ1BvbGljeSA9PSBCdWZmZXJE
YXRhKSB7Ci0gICAgICAgIG1fZGF0YSA9IGRhdGE7Ci0KLSAgICAgICAgdW5zaWduZWQgaW5jcmVt
ZW50YWxEYXRhTGVuZ3RoOwotICAgICAgICBjb25zdCBjaGFyKiBpbmNyZW1lbnRhbERhdGEgPSBj
YWxjdWxhdGVJbmNyZW1lbnRhbERhdGFDaHVuayhkYXRhLCBpbmNyZW1lbnRhbERhdGFMZW5ndGgp
OwotICAgICAgICBpZiAoZGF0YSkKLSAgICAgICAgICAgIHNldEVuY29kZWRTaXplKGRhdGEtPnNp
emUoKSk7Ci0gICAgICAgIG5vdGlmeUNsaWVudHNEYXRhV2FzUmVjZWl2ZWQoaW5jcmVtZW50YWxE
YXRhLCBpbmNyZW1lbnRhbERhdGFMZW5ndGgpOwotICAgIH0KLQotICAgIG1fYWxsb3dFbmNvZGVk
RGF0YVJlcGxhY2VtZW50ID0gIW1fbG9hZGVyLT5pc1F1aWNrTG9va1Jlc291cmNlKCk7Ci0KLSAg
ICBDYWNoZWRSZXNvdXJjZTo6ZmluaXNoTG9hZGluZyhkYXRhKTsKLSAgICBpZiAoZGF0YUJ1ZmZl
cmluZ1BvbGljeSA9PSBCdWZmZXJEYXRhICYmIHRoaXMtPmRhdGFCdWZmZXJpbmdQb2xpY3koKSA9
PSBEb05vdEJ1ZmZlckRhdGEpIHsKLSAgICAgICAgaWYgKG1fbG9hZGVyKQotICAgICAgICAgICAg
bV9sb2FkZXItPnNldERhdGFCdWZmZXJpbmdQb2xpY3koRG9Ob3RCdWZmZXJEYXRhKTsKLSAgICAg
ICAgY2xlYXIoKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6Om5vdGlmeUNs
aWVudHNEYXRhV2FzUmVjZWl2ZWQoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQot
ewotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDYWNoZWRSZXNvdXJj
ZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBDYWNo
ZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudD4gdyhtX2NsaWVu
dHMpOwotICAgIHdoaWxlIChDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgpKQot
ICAgICAgICBjLT5kYXRhUmVjZWl2ZWQodGhpcywgZGF0YSwgbGVuZ3RoKTsKLX0KLQotdm9pZCBD
YWNoZWRSYXdSZXNvdXJjZTo6ZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50KiBjKQot
ewotICAgIGlmICghaGFzQ2xpZW50KGMpKQotICAgICAgICByZXR1cm47Ci0gICAgLy8gVGhlIGNh
bGxzIHRvIHRoZSBjbGllbnQgY2FuIHJlc3VsdCBpbiBldmVudHMgcnVubmluZywgcG90ZW50aWFs
bHkgY2F1c2luZwotICAgIC8vIHRoaXMgcmVzb3VyY2UgdG8gYmUgZXZpY3RlZCBmcm9tIHRoZSBj
YWNoZSBhbmQgYWxsIGNsaWVudHMgdG8gYmUgcmVtb3ZlZCwKLSAgICAvLyBzbyBhIHByb3RlY3Rv
ciBpcyBuZWNlc3NhcnkuCi0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3Vy
Y2U+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQqIGNs
aWVudCA9IHN0YXRpY19jYXN0PENhY2hlZFJhd1Jlc291cmNlQ2xpZW50Kj4oYyk7Ci0gICAgc2l6
ZV90IHJlZGlyZWN0Q291bnQgPSBtX3JlZGlyZWN0Q2hhaW4uc2l6ZSgpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcmVkaXJlY3RDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZGlyZWN0UGFp
ciByZWRpcmVjdCA9IG1fcmVkaXJlY3RDaGFpbltpXTsKLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0
IHJlcXVlc3QocmVkaXJlY3QubV9yZXF1ZXN0KTsKLSAgICAgICAgY2xpZW50LT5yZWRpcmVjdFJl
Y2VpdmVkKHRoaXMsIHJlcXVlc3QsIHJlZGlyZWN0Lm1fcmVkaXJlY3RSZXNwb25zZSk7Ci0gICAg
ICAgIGlmICghaGFzQ2xpZW50KGMpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBB
U1NFUlQocmVkaXJlY3RDb3VudCA9PSBtX3JlZGlyZWN0Q2hhaW4uc2l6ZSgpKTsKLQotICAgIGlm
ICghbV9yZXNwb25zZS5pc051bGwoKSkgewotICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3Bv
bnNlKG1fcmVzcG9uc2UpOwotICAgICAgICBpZiAodmFsaWRhdGlvbkNvbXBsZXRpbmcoKSkKLSAg
ICAgICAgICAgIHJlc3BvbnNlLnNldFNvdXJjZShSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Ok1l
bW9yeUNhY2hlQWZ0ZXJWYWxpZGF0aW9uKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBB
U1NFUlQoIXZhbGlkYXRpb25JblByb2dyZXNzKCkpOwotICAgICAgICAgICAgcmVzcG9uc2Uuc2V0
U291cmNlKFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6TWVtb3J5Q2FjaGUpOwotICAgICAgICB9
Ci0gICAgICAgIGNsaWVudC0+cmVzcG9uc2VSZWNlaXZlZCh0aGlzLCByZXNwb25zZSk7Ci0gICAg
fQotICAgIGlmICghaGFzQ2xpZW50KGMpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fZGF0
YSkKLSAgICAgICAgY2xpZW50LT5kYXRhUmVjZWl2ZWQodGhpcywgbV9kYXRhLT5kYXRhKCksIG1f
ZGF0YS0+c2l6ZSgpKTsKLSAgICBpZiAoIWhhc0NsaWVudChjKSkKLSAgICAgICByZXR1cm47Ci0g
ICAgQ2FjaGVkUmVzb3VyY2U6OmRpZEFkZENsaWVudChjbGllbnQpOwotfQotCi12b2lkIENhY2hl
ZFJhd1Jlc291cmNlOjphbGxDbGllbnRzUmVtb3ZlZCgpCi17Ci0gICAgaWYgKG1fbG9hZGVyKQot
ICAgICAgICBtX2xvYWRlci0+Y2FuY2VsSWZOb3RGaW5pc2hpbmcoKTsKLX0KLQotdm9pZCBDYWNo
ZWRSYXdSZXNvdXJjZTo6cmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIENhY2hlZFJlc291cmNl
SGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIGlmICgh
cmVzcG9uc2UuaXNOdWxsKCkpIHsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI8
Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQ+IHcobV9jbGllbnRzKTsKLSAgICAgICAgd2hpbGUgKENh
Y2hlZFJhd1Jlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkpCi0gICAgICAgICAgICBjLT5yZWRp
cmVjdFJlY2VpdmVkKHRoaXMsIHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICAgICAgbV9yZWRpcmVj
dENoYWluLmFwcGVuZChSZWRpcmVjdFBhaXIocmVxdWVzdCwgcmVzcG9uc2UpKTsKLSAgICB9Ci0g
ICAgQ2FjaGVkUmVzb3VyY2U6OnJlZGlyZWN0UmVjZWl2ZWQocmVxdWVzdCwgcmVzcG9uc2UpOwot
fQotCi12b2lkIENhY2hlZFJhd1Jlc291cmNlOjpyZXNwb25zZVJlY2VpdmVkKGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hl
ZFJhd1Jlc291cmNlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIGlmICghbV9pZGVudGlmaWVy
KQotICAgICAgICBtX2lkZW50aWZpZXIgPSBtX2xvYWRlci0+aWRlbnRpZmllcigpOwotICAgIENh
Y2hlZFJlc291cmNlOjpyZXNwb25zZVJlY2VpdmVkKHJlc3BvbnNlKTsKLSAgICBDYWNoZWRSZXNv
dXJjZUNsaWVudFdhbGtlcjxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudD4gdyhtX2NsaWVudHMpOwot
ICAgIHdoaWxlIChDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgpKQotICAgICAg
ICBjLT5yZXNwb25zZVJlY2VpdmVkKHRoaXMsIG1fcmVzcG9uc2UpOwotfQotCi1ib29sIENhY2hl
ZFJhd1Jlc291cmNlOjpzaG91bGRDYWNoZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQotewotICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyPENhY2hlZFJhd1Jl
c291cmNlQ2xpZW50PiB3KG1fY2xpZW50cyk7Ci0gICAgd2hpbGUgKENhY2hlZFJhd1Jlc291cmNl
Q2xpZW50KiBjID0gdy5uZXh0KCkpIHsKLSAgICAgICAgaWYgKCFjLT5zaG91bGRDYWNoZVJlc3Bv
bnNlKHRoaXMsIHJlc3BvbnNlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OmRpZFNlbmREYXRh
KHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5
dGVzVG9CZVNlbnQpCi17Ci0gICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI8Q2FjaGVkUmF3
UmVzb3VyY2VDbGllbnQ+IHcobV9jbGllbnRzKTsKLSAgICB3aGlsZSAoQ2FjaGVkUmF3UmVzb3Vy
Y2VDbGllbnQqIGMgPSB3Lm5leHQoKSkKLSAgICAgICAgYy0+ZGF0YVNlbnQodGhpcywgYnl0ZXNT
ZW50LCB0b3RhbEJ5dGVzVG9CZVNlbnQpOwotfQotCi12b2lkIENhY2hlZFJhd1Jlc291cmNlOjpz
d2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNlKCkKLXsKLSAgICBBU1NFUlQobV9sb2Fk
ZXIpOwotICAgIC8vIElmIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgYSBzdWNjZXNzZnVsIHJldmFs
aWRhdGlvbiwgcmVzcG9uc2VSZWNlaXZlZCgpIGhhc24ndCBiZWVuIGNhbGxlZCwgc28gd2UgaGF2
ZW4ndCBzZXQgbV9pZGVudGlmaWVyLgotICAgIEFTU0VSVCghbV9pZGVudGlmaWVyKTsKLSAgICBk
b3duY2FzdDxDYWNoZWRSYXdSZXNvdXJjZT4oKnJlc291cmNlVG9SZXZhbGlkYXRlKCkpLm1faWRl
bnRpZmllciA9IG1fbG9hZGVyLT5pZGVudGlmaWVyKCk7Ci0gICAgQ2FjaGVkUmVzb3VyY2U6OnN3
aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UoKTsKLX0KLQotdm9pZCBDYWNoZWRSYXdS
ZXNvdXJjZTo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKLXsKLSAgICBpZiAobV9sb2Fk
ZXIpCi0gICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKGRlZmVycyk7Ci19Ci0KLXZv
aWQgQ2FjaGVkUmF3UmVzb3VyY2U6OnNldERhdGFCdWZmZXJpbmdQb2xpY3koRGF0YUJ1ZmZlcmlu
Z1BvbGljeSBkYXRhQnVmZmVyaW5nUG9saWN5KQotewotICAgIG1fb3B0aW9ucy5kYXRhQnVmZmVy
aW5nUG9saWN5ID0gZGF0YUJ1ZmZlcmluZ1BvbGljeTsKLX0KLQotc3RhdGljIGJvb2wgc2hvdWxk
SWdub3JlSGVhZGVyRm9yQ2FjaGVSZXVzZShIVFRQSGVhZGVyTmFtZSBuYW1lKQotewotICAgIHN3
aXRjaCAobmFtZSkgewotICAgIC8vIEZJWE1FOiBUaGlzIGxpc3Qgb2YgaGVhZGVycyB0aGF0IGRv
bid0IGFmZmVjdCBjYWNoZSBwb2xpY3kgYWxtb3N0IGNlcnRhaW5seSBpc24ndCBjb21wbGV0ZS4K
LSAgICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpBY2NlcHQ6Ci0gICAgY2FzZSBIVFRQSGVhZGVyTmFt
ZTo6Q2FjaGVDb250cm9sOgotICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OlByYWdtYToKLSAgICBj
YXNlIEhUVFBIZWFkZXJOYW1lOjpQdXJwb3NlOgotICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OlJl
ZmVyZXI6Ci0gICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50OgotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19
Ci0KLWJvb2wgQ2FjaGVkUmF3UmVzb3VyY2U6OmNhblJldXNlKGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgbmV3UmVxdWVzdCkgY29uc3QKLXsKLSAgICBpZiAoZGF0YUJ1ZmZlcmluZ1BvbGljeSgpID09
IERvTm90QnVmZmVyRGF0YSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fcmVz
b3VyY2VSZXF1ZXN0Lmh0dHBNZXRob2QoKSAhPSBuZXdSZXF1ZXN0Lmh0dHBNZXRob2QoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fcmVzb3VyY2VSZXF1ZXN0Lmh0dHBCb2R5
KCkgIT0gbmV3UmVxdWVzdC5odHRwQm9keSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAobV9yZXNvdXJjZVJlcXVlc3QuYWxsb3dDb29raWVzKCkgIT0gbmV3UmVxdWVzdC5hbGxv
d0Nvb2tpZXMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG5ld1JlcXVlc3Qu
aXNDb25kaXRpb25hbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBFbnN1cmUg
bW9zdCBoZWFkZXJzIG1hdGNoIHRoZSBleGlzdGluZyBoZWFkZXJzIGJlZm9yZSBjb250aW51aW5n
LgotICAgIC8vIE5vdGUgdGhhdCB0aGUgbGlzdCBvZiBpZ25vcmVkIGhlYWRlcnMgaW5jbHVkZXMg
c29tZSBoZWFkZXJzIGV4cGxpY2l0bHkgcmVsYXRlZCB0byBjYWNoaW5nLgotICAgIC8vIEEgbW9y
ZSBkZXRhaWxlZCBjaGVjayBvZiBjYWNoaW5nIHBvbGljeSB3aWxsIGJlIHBlcmZvcm1lZCBsYXRl
ciwgdGhpcyBpcyBzaW1wbHkgYSBsaXN0IG9mCi0gICAgLy8gaGVhZGVycyB0aGF0IHdlIG1pZ2h0
IHBlcm1pdCB0byBiZSBkaWZmZXJlbnQgYW5kIHN0aWxsIHJldXNlIHRoZSBleGlzdGluZyBDYWNo
ZWRSZXNvdXJjZS4KLSAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBuZXdIZWFkZXJzID0gbmV3UmVx
dWVzdC5odHRwSGVhZGVyRmllbGRzKCk7Ci0gICAgY29uc3QgSFRUUEhlYWRlck1hcCYgb2xkSGVh
ZGVycyA9IG1fcmVzb3VyY2VSZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKTsKLQotICAgIGZvciAo
Y29uc3QgYXV0byYgaGVhZGVyIDogbmV3SGVhZGVycykgewotICAgICAgICBpZiAoaGVhZGVyLmtl
eUFzSFRUUEhlYWRlck5hbWUpIHsKLSAgICAgICAgICAgIGlmICghc2hvdWxkSWdub3JlSGVhZGVy
Rm9yQ2FjaGVSZXVzZShoZWFkZXIua2V5QXNIVFRQSGVhZGVyTmFtZS52YWx1ZSgpKQotICAgICAg
ICAgICAgICAgICYmIGhlYWRlci52YWx1ZSAhPSBvbGRIZWFkZXJzLmNvbW1vbkhlYWRlcnMoKS5n
ZXQoaGVhZGVyLmtleUFzSFRUUEhlYWRlck5hbWUudmFsdWUoKSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKGhlYWRlci52YWx1ZSAhPSBvbGRIZWFk
ZXJzLnVuY29tbW9uSGVhZGVycygpLmdldChoZWFkZXIua2V5KSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBGb3IgdGhpcyBzZWNvbmQgbG9vcCwgd2UgZG9uJ3Qg
YWN0dWFsbHkgbmVlZCB0byBjb21wYXJlIHZhbHVlcywgY2hlY2tpbmcgdGhhdCB0aGUKLSAgICAv
LyBrZXkgaXMgY29udGFpbmVkIGluIG5ld0hlYWRlcnMgaXMgc3VmZmljaWVudCBkdWUgdG8gdGhl
IHByZXZpb3VzIGxvb3AuCi0gICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBvbGRIZWFkZXJz
KSB7Ci0gICAgICAgIGlmIChoZWFkZXIua2V5QXNIVFRQSGVhZGVyTmFtZSkgewotICAgICAgICAg
ICAgaWYgKCFzaG91bGRJZ25vcmVIZWFkZXJGb3JDYWNoZVJldXNlKGhlYWRlci5rZXlBc0hUVFBI
ZWFkZXJOYW1lLnZhbHVlKCkpCi0gICAgICAgICAgICAgICAgJiYgIW5ld0hlYWRlcnMuY29tbW9u
SGVhZGVycygpLmNvbnRhaW5zKGhlYWRlci5rZXlBc0hUVFBIZWFkZXJOYW1lLnZhbHVlKCkpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIGlmICghbmV3SGVh
ZGVycy51bmNvbW1vbkhlYWRlcnMoKS5jb250YWlucyhoZWFkZXIua2V5KSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDYWNo
ZWRSYXdSZXNvdXJjZTo6Y2xlYXIoKQotewotICAgIG1fZGF0YSA9IG51bGxwdHI7Ci0gICAgc2V0
RW5jb2RlZFNpemUoMCk7Ci0gICAgaWYgKG1fbG9hZGVyKQotICAgICAgICBtX2xvYWRlci0+Y2xl
YXJSZXNvdXJjZURhdGEoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNWZiNTRkODQ1ODJjOTUwMDgxMGNjOTYwZmEzNjE0NTliNzU4OTYw
Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuaAorKysgL2Rldi9udWxsCkBA
IC0xLDEwMSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChr
bm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIg
PG11ZWxsZXJAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAo
c2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVmIENhY2hl
ZFJhd1Jlc291cmNlX2gKLSNkZWZpbmUgQ2FjaGVkUmF3UmVzb3VyY2VfaAotCi0jaW5jbHVkZSAi
Q2FjaGVkUmVzb3VyY2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDYWNoZWRS
ZXNvdXJjZUNsaWVudDsKLWNsYXNzIFN1YnJlc291cmNlTG9hZGVyOwotCi1jbGFzcyBDYWNoZWRS
YXdSZXNvdXJjZSBmaW5hbCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSB7Ci1wdWJsaWM6Ci0gICAg
Q2FjaGVkUmF3UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0JiwgVHlwZSwgU2Vzc2lvbklEKTsKLQot
ICAgIC8vIEZJWE1FOiBBc3NvY2lhdGVkVVJMTG9hZGVyIHNob3VsZG4ndCBiZSBhIERvY3VtZW50
VGhyZWFkYWJsZUxvYWRlciBhbmQgdGhlcmVmb3JlIHNob3VsZG4ndAotICAgIC8vIHVzZSBDYWNo
ZWRSYXdSZXNvdXJjZS4gSG93ZXZlciwgaXQgaXMsIGFuZCBpdCBuZWVkcyB0byBiZSBhYmxlIHRv
IGRlZmVyIGxvYWRpbmcuCi0gICAgLy8gVGhpcyBjYW4gYmUgZml4ZWQgYnkgc3BsaXR0aW5nIENP
UlMgcHJlZmxpZ2h0aW5nIG91dCBvZiBEb2N1bWVudFRocmVhY2FibGVMb2FkZXIuCi0gICAgdmly
dHVhbCB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
RGF0YUJ1ZmZlcmluZ1BvbGljeShEYXRhQnVmZmVyaW5nUG9saWN5KTsKLSAgICAKLSAgICAvLyBG
SVhNRTogVGhpcyBpcyBleHBvc2VkIGZvciB0aGUgSW5wc2VjdG9ySW5zdHJ1bWVudGF0aW9uIGZv
ciBwcmVmbGlnaHRzIGluIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlci4gSXQncyBhbHNvIHJlYWxs
eSBsYW1lLgotICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1f
aWRlbnRpZmllcjsgfQotCi0gICAgdm9pZCBjbGVhcigpOwotCi0gICAgYm9vbCBjYW5SZXVzZShj
b25zdCBSZXNvdXJjZVJlcXVlc3QmKSBjb25zdDsKLQotICAgIGJvb2wgd2FzUmVkaXJlY3RlZCgp
IGNvbnN0IHsgcmV0dXJuICFtX3JlZGlyZWN0Q2hhaW4uaXNFbXB0eSgpOyB9OwotCi1wcml2YXRl
OgotICAgIHZvaWQgZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBhZGREYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYpIG92ZXJyaWRlOwotICAgIHZv
aWQgYWRkRGF0YShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZmluaXNoTG9hZGluZyhTaGFyZWRCdWZmZXIqKSBvdmVycmlkZTsKLQotICAgIGJv
b2wgc2hvdWxkSWdub3JlSFRUUFN0YXR1c0NvZGVFcnJvcnMoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9Ci0gICAgdm9pZCBhbGxDbGllbnRzUmVtb3ZlZCgpIG92ZXJyaWRlOwotCi0g
ICAgdm9pZCByZWRpcmVjdFJlY2VpdmVkKFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpIG92ZXJyaWRlOwotICAgIGJvb2wgc2hvdWxkQ2FjaGVSZXNwb25zZShj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRTZW5kRGF0YSh1
bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRl
c1RvQmVTZW50KSBvdmVycmlkZTsKLQotICAgIHZvaWQgc3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0
ZWRSZXNvdXJjZSgpIG92ZXJyaWRlOwotICAgIGJvb2wgbWF5VHJ5UmVwbGFjZUVuY29kZWREYXRh
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9hbGxvd0VuY29kZWREYXRhUmVwbGFjZW1lbnQ7
IH0KLQotICAgIGNvbnN0IGNoYXIqIGNhbGN1bGF0ZUluY3JlbWVudGFsRGF0YUNodW5rKFNoYXJl
ZEJ1ZmZlciosIHVuc2lnbmVkJiBpbmNyZW1lbnRhbERhdGFMZW5ndGgpOwotICAgIHZvaWQgbm90
aWZ5Q2xpZW50c0RhdGFXYXNSZWNlaXZlZChjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5n
dGgpOwotCi0jaWYgVVNFKFNPVVApCi0gICAgY2hhciogZ2V0T3JDcmVhdGVSZWFkQnVmZmVyKHNp
emVfdCByZXF1ZXN0ZWRTaXplLCBzaXplX3QmIGFjdHVhbFNpemUpIG92ZXJyaWRlOwotI2VuZGlm
Ci0KLSAgICB1bnNpZ25lZCBsb25nIG1faWRlbnRpZmllcjsKLSAgICBib29sIG1fYWxsb3dFbmNv
ZGVkRGF0YVJlcGxhY2VtZW50OwotCi0gICAgc3RydWN0IFJlZGlyZWN0UGFpciB7Ci0gICAgcHVi
bGljOgotICAgICAgICBleHBsaWNpdCBSZWRpcmVjdFBhaXIoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQotICAg
ICAgICAgICAgOiBtX3JlcXVlc3QocmVxdWVzdCkKLSAgICAgICAgICAgICwgbV9yZWRpcmVjdFJl
c3BvbnNlKHJlZGlyZWN0UmVzcG9uc2UpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAg
IGNvbnN0IFJlc291cmNlUmVxdWVzdCBtX3JlcXVlc3Q7Ci0gICAgICAgIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UgbV9yZWRpcmVjdFJlc3BvbnNlOwotICAgIH07Ci0KLSAgICBWZWN0b3I8UmVkaXJl
Y3RQYWlyPiBtX3JlZGlyZWN0Q2hhaW47Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6Q2FjaGVkUmF3UmVzb3VyY2Up
Ci0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkNhY2hlZFJlc291cmNlJiBy
ZXNvdXJjZSkgeyByZXR1cm4gcmVzb3VyY2UuaXNNYWluT3JNZWRpYU9yUmF3UmVzb3VyY2UoKTsg
fQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQotCi0jZW5kaWYgLy8gQ2FjaGVkUmF3UmVz
b3VyY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJh
d1Jlc291cmNlQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3
UmVzb3VyY2VDbGllbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUwYzlmZGY5
MTg0Yzk0NWFmY2UyOWNlZDhlOWUwOWE2YWFiM2EzYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmF3UmVzb3VyY2VDbGllbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0g
ICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCi0g
ICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgotICAg
IENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkK
LSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2VDbGllbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDYWNoZWRSZXNv
dXJjZTsKLWNsYXNzIFJlc291cmNlUmVxdWVzdDsKLWNsYXNzIFJlc291cmNlUmVzcG9uc2U7Ci0K
LWNsYXNzIENhY2hlZFJhd1Jlc291cmNlQ2xpZW50IDogcHVibGljIENhY2hlZFJlc291cmNlQ2xp
ZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5DYWNoZWRSYXdSZXNvdXJjZUNsaWVudCgpIHsg
fQotICAgIHN0YXRpYyBDYWNoZWRSZXNvdXJjZUNsaWVudFR5cGUgZXhwZWN0ZWRUeXBlKCkgeyBy
ZXR1cm4gUmF3UmVzb3VyY2VUeXBlOyB9Ci0gICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRUeXBlIHJl
c291cmNlQ2xpZW50VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGV4cGVjdGVkVHlwZSgp
OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGF0YVNlbnQoQ2FjaGVkUmVzb3VyY2UqLCB1bnNpZ25l
ZCBsb25nIGxvbmcgLyogYnl0ZXNTZW50ICovLCB1bnNpZ25lZCBsb25nIGxvbmcgLyogdG90YWxC
eXRlc1RvQmVTZW50ICovKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzcG9uc2VSZWNlaXZlZChD
YWNoZWRSZXNvdXJjZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkQ2FjaGVSZXNwb25zZShDYWNoZWRSZXNvdXJjZSosIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRhdGFSZWNlaXZl
ZChDYWNoZWRSZXNvdXJjZSosIGNvbnN0IGNoYXIqIC8qIGRhdGEgKi8sIGludCAvKiBsZW5ndGgg
Ki8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCByZWRpcmVjdFJlY2VpdmVkKENhY2hlZFJlc291cmNl
KiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgfQotI2lmIFVT
RShTT1VQKQotICAgIHZpcnR1YWwgY2hhciogZ2V0T3JDcmVhdGVSZWFkQnVmZmVyKENhY2hlZFJl
c291cmNlKiwgc2l6ZV90IC8qIHJlcXVlc3RlZFNpemUgKi8sIHNpemVfdCYgLyogYWN0dWFsU2l6
ZSAqLykgeyByZXR1cm4gbnVsbHB0cjsgfQotI2VuZGlmCi19OwotCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZjEzYWU2MmExM2FkMGNkOGZiMTEyOWEzYmUyY2UyY2I4ZmZhMzVhNi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTM1
ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1w
aS1oZC5tcGcuZGUpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxl
ckBrZGUub3JnKQotICAgIENvcHlyaWdodCAoQykgMjAwMiBXYWxkbyBCYXN0aWFuIChiYXN0aWFu
QGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWlu
aWdAZ21haWwuY29tKQotICAgIENvcHlyaWdodCAoQykgMjAwNC0yMDExLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2UuaCIKLQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50Lmgi
Ci0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKLSNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCi0j
aW5jbHVkZSAiQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmgiCi0jaW5jbHVkZSAiRGlhZ25vc3Rp
Y0xvZ2dpbmdDbGllbnQuaCIKLSNpbmNsdWRlICJEaWFnbm9zdGljTG9nZ2luZ0tleXMuaCIKLSNp
bmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2luY2x1
ZGUgIkhUVFBIZWFkZXJOYW1lcy5oIgotI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlv
bi5oIgotI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgIkxvYWRlclN0cmF0ZWd5LmgiCi0jaW5j
bHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk1haW5GcmFtZS5oIgotI2luY2x1ZGUgIk1lbW9y
eUNhY2hlLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2ll
cy5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiU2NoZW1lUmVnaXN0
cnkuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlNlY3VyaXR5UG9s
aWN5LmgiCi0jaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKLSNpbmNsdWRlIDx3dGYvQ3Vy
cmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQot
I2lmIFVTRShRVUlDS19MT09LKQotI2luY2x1ZGUgIlF1aWNrTG9vay5oIgotI2VuZGlmCi0KLXVz
aW5nIG5hbWVzcGFjZSBXVEY7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVzb3VyY2VMb2Fk
UHJpb3JpdHkgQ2FjaGVkUmVzb3VyY2U6OmRlZmF1bHRQcmlvcml0eUZvclJlc291cmNlVHlwZShU
eXBlIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJj
ZTo6TWFpblJlc291cmNlOgotICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZl
cnlIaWdoOwotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6Ci0gICAgICAg
IHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6SGlnaDsKLSAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpTY3JpcHQ6Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpTVkdGb250UmVzb3VyY2U6Ci0jZW5kaWYKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpN
ZWRpYVJlc291cmNlOgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZToKLSAg
ICBjYXNlIENhY2hlZFJlc291cmNlOjpSYXdSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIFJlc291
cmNlTG9hZFByaW9yaXR5OjpNZWRpdW07Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VS
ZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5OjpMb3c7Ci0jaWYg
RU5BQkxFKFhTTFQpCi0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldDoKLSAg
ICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5OjpIaWdoOwotI2VuZGlmCi0gICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6U1ZHRG9jdW1lbnRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIFJl
c291cmNlTG9hZFByaW9yaXR5OjpMb3c7Ci0jaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCi0gICAg
Y2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1ByZWZldGNoOgotICAgICAgICByZXR1cm4gUmVzb3Vy
Y2VMb2FkUHJpb3JpdHk6OlZlcnlMb3c7Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1N1
YnJlc291cmNlOgotICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3c7
Ci0jZW5kaWYKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgY2FzZSBDYWNoZWRSZXNvdXJj
ZTo6VGV4dFRyYWNrUmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0
eTo6TG93OwotI2VuZGlmCi0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TG93OwotfQotCi1zdGF0aWMgc3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kcyBkZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsRm9yUmVzb3VyY2VU
eXBlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gQ2FjaGVk
UmVzb3VyY2U6OlNjcmlwdCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29u
ZHMgeyAwIH07Ci0KLSAgICByZXR1cm4gTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpLmRlYWREZWNv
ZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwoKTsKLX0KLQotREVGSU5FX0RFQlVHX09OTFlfR0xPQkFM
KFJlZkNvdW50ZWRMZWFrQ291bnRlciwgY2FjaGVkUmVzb3VyY2VMZWFrQ291bnRlciwgKCJDYWNo
ZWRSZXNvdXJjZSIpKTsKLQotQ2FjaGVkUmVzb3VyY2U6OkNhY2hlZFJlc291cmNlKGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgVHlwZSB0eXBlLCBTZXNzaW9uSUQgc2Vzc2lvbklEKQot
ICAgIDogbV9yZXNvdXJjZVJlcXVlc3QocmVxdWVzdCkKLSAgICAsIG1fZGVjb2RlZERhdGFEZWxl
dGlvblRpbWVyKCp0aGlzLCAmQ2FjaGVkUmVzb3VyY2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSwgZGVh
ZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbEZvclJlc291cmNlVHlwZSh0eXBlKSkKLSAgICAs
IG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKLSAgICAsIG1fbG9hZFByaW9yaXR5KGRlZmF1bHRQcmlv
cml0eUZvclJlc291cmNlVHlwZSh0eXBlKSkKLSAgICAsIG1fcmVzcG9uc2VUaW1lc3RhbXAoc3Rk
OjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCkpCi0gICAgLCBtX2xhc3REZWNvZGVkQWNjZXNz
VGltZSgwKQotICAgICwgbV9sb2FkRmluaXNoVGltZSgwKQotICAgICwgbV9lbmNvZGVkU2l6ZSgw
KQotICAgICwgbV9kZWNvZGVkU2l6ZSgwKQotICAgICwgbV9hY2Nlc3NDb3VudCgwKQotICAgICwg
bV9oYW5kbGVDb3VudCgwKQotICAgICwgbV9wcmVsb2FkQ291bnQoMCkKLSAgICAsIG1fcHJlbG9h
ZFJlc3VsdChQcmVsb2FkTm90UmVmZXJlbmNlZCkKLSAgICAsIG1fcmVxdWVzdGVkRnJvbU5ldHdv
cmtpbmdMYXllcihmYWxzZSkKLSAgICAsIG1faW5DYWNoZShmYWxzZSkKLSAgICAsIG1fbG9hZGlu
ZyhmYWxzZSkKLSAgICAsIG1fc3dpdGNoaW5nQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZShm
YWxzZSkKLSAgICAsIG1fdHlwZSh0eXBlKQotICAgICwgbV9zdGF0dXMoUGVuZGluZykKLSNpZm5k
ZWYgTkRFQlVHCi0gICAgLCBtX2RlbGV0ZWQoZmFsc2UpCi0gICAgLCBtX2xydUluZGV4KDApCi0j
ZW5kaWYKLSAgICAsIG1fb3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIobnVsbHB0cikKLSAgICAs
IG1fcmVzb3VyY2VUb1JldmFsaWRhdGUobnVsbHB0cikKLSAgICAsIG1fcHJveHlSZXNvdXJjZShu
dWxscHRyKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0gdW5zaWduZWQodHlwZSkpOyAvLyBtX3R5
cGUgaXMgYSBiaXRmaWVsZCwgc28gdGhpcyB0ZXN0cyBjYXJlbGVzcyB1cGRhdGVzIG9mIHRoZSBl
bnVtLgotICAgIEFTU0VSVChzZXNzaW9uSUQuaXNWYWxpZCgpKTsKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgY2FjaGVkUmVzb3VyY2VMZWFrQ291bnRlci5pbmNyZW1lbnQoKTsKLSNlbmRpZgotCi0gICAg
aWYgKCFtX3Jlc291cmNlUmVxdWVzdC51cmwoKS5oYXNGcmFnbWVudElkZW50aWZpZXIoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIFVSTCB1cmxGb3JDYWNoZSA9IE1lbW9yeUNhY2hlOjpyZW1vdmVG
cmFnbWVudElkZW50aWZpZXJJZk5lZWRlZChtX3Jlc291cmNlUmVxdWVzdC51cmwoKSk7Ci0gICAg
aWYgKHVybEZvckNhY2hlLmhhc0ZyYWdtZW50SWRlbnRpZmllcigpKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9mcmFnbWVudElkZW50aWZpZXJGb3JSZXF1ZXN0ID0gbV9yZXNvdXJjZVJlcXVlc3Qu
dXJsKCkuZnJhZ21lbnRJZGVudGlmaWVyKCk7Ci0gICAgbV9yZXNvdXJjZVJlcXVlc3Quc2V0VVJM
KHVybEZvckNhY2hlKTsKLX0KLQotQ2FjaGVkUmVzb3VyY2U6On5DYWNoZWRSZXNvdXJjZSgpCi17
Ci0gICAgQVNTRVJUKCFtX3Jlc291cmNlVG9SZXZhbGlkYXRlKTsgLy8gU2hvdWxkIGJlIHRydWUg
YmVjYXVzZSBjYW5EZWxldGUoKSBjaGVja3MgdGhpcy4KLSAgICBBU1NFUlQoY2FuRGVsZXRlKCkp
OwotICAgIEFTU0VSVCghaW5DYWNoZSgpKTsKLSAgICBBU1NFUlQoIW1fZGVsZXRlZCk7Ci0gICAg
QVNTRVJUKHVybCgpLmlzTnVsbCgpIHx8ICFhbGxvd3NDYWNoaW5nKCkgfHwgTWVtb3J5Q2FjaGU6
OnNpbmdsZXRvbigpLnJlc291cmNlRm9yUmVxdWVzdChyZXNvdXJjZVJlcXVlc3QoKSwgc2Vzc2lv
bklEKCkpICE9IHRoaXMpOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIG1fZGVsZXRlZCA9IHRydWU7
Ci0gICAgY2FjaGVkUmVzb3VyY2VMZWFrQ291bnRlci5kZWNyZW1lbnQoKTsKLSNlbmRpZgotCi0g
ICAgaWYgKG1fb3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIpCi0gICAgICAgIG1fb3duaW5nQ2Fj
aGVkUmVzb3VyY2VMb2FkZXItPnJlbW92ZUNhY2hlZFJlc291cmNlKCp0aGlzKTsKLX0KLQotdm9p
ZCBDYWNoZWRSZXNvdXJjZTo6ZmFpbEJlZm9yZVN0YXJ0aW5nKCkKLXsKLSAgICAvLyBGSVhNRTog
V2hhdCBpZiByZXNvdXJjZXMgaW4gb3RoZXIgZnJhbWVzIHdlcmUgd2FpdGluZyBmb3IgdGhpcyBy
ZXZhbGlkYXRpb24/Ci0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhbm5vdCBzdGFydCBsb2Fk
aW5nICclcyciLCB1cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCkpOwotICAgIGlmIChhbGxv
d3NDYWNoaW5nKCkgJiYgbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSkKLSAgICAgICAgTWVtb3J5Q2Fj
aGU6OnNpbmdsZXRvbigpLnJldmFsaWRhdGlvbkZhaWxlZCgqdGhpcyk7Ci0gICAgZXJyb3IoQ2Fj
aGVkUmVzb3VyY2U6OkxvYWRFcnJvcik7Ci19Ci0KLXN0YXRpYyB2b2lkIGFkZEFkZGl0aW9uYWxS
ZXF1ZXN0SGVhZGVyc1RvUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IENh
Y2hlZFJlc291cmNlTG9hZGVyJiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgQ2FjaGVkUmVzb3VyY2Um
IHJlc291cmNlKQotewotICAgIGlmIChyZXNvdXJjZS50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6
Ok1haW5SZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIEluIHNvbWUgY2FzZXMgd2Ug
bWF5IHRyeSB0byBsb2FkIHJlc291cmNlcyBpbiBmcmFtZWxlc3MgZG9jdW1lbnRzLiBTdWNoIGxv
YWRzIGFsd2F5cyBmYWlsLgotICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgZ2V0IHRoaXMgZmFy
LgotICAgIGlmICghY2FjaGVkUmVzb3VyY2VMb2FkZXIuZnJhbWUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gTm90ZTogV2Ugc2tpcCB0aGUgQ29udGVudC1TZWN1cml0eS1Qb2xpY3kgY2hl
Y2sgaGVyZSBiZWNhdXNlIHdlIGNoZWNrCi0gICAgLy8gdGhlIENvbnRlbnQtU2VjdXJpdHktUG9s
aWN5IGF0IHRoZSBDYWNoZWRSZXNvdXJjZUxvYWRlciBsYXllciBzbyB3ZSBjYW4KLSAgICAvLyBo
YW5kbGUgZGlmZmVyZW50IHJlc291cmNlIHR5cGVzIGRpZmZlcmVudGx5LgotICAgIEZyYW1lTG9h
ZGVyJiBmcmFtZUxvYWRlciA9IGNhY2hlZFJlc291cmNlTG9hZGVyLmZyYW1lKCktPmxvYWRlcigp
OwotICAgIFN0cmluZyBvdXRnb2luZ1JlZmVycmVyOwotICAgIFN0cmluZyBvdXRnb2luZ09yaWdp
bjsKLSAgICBpZiAocmVxdWVzdC5odHRwUmVmZXJyZXIoKS5pc051bGwoKSkgewotICAgICAgICBv
dXRnb2luZ1JlZmVycmVyID0gZnJhbWVMb2FkZXIub3V0Z29pbmdSZWZlcnJlcigpOwotICAgICAg
ICBvdXRnb2luZ09yaWdpbiA9IGZyYW1lTG9hZGVyLm91dGdvaW5nT3JpZ2luKCk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgb3V0Z29pbmdSZWZlcnJlciA9IHJlcXVlc3QuaHR0cFJlZmVycmVyKCk7
Ci0gICAgICAgIG91dGdvaW5nT3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJp
bmcob3V0Z29pbmdSZWZlcnJlciktPnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6
IFJlZmFjdG9yIFNlY3VyaXR5UG9saWN5OjpnZW5lcmF0ZVJlZmVycmVySGVhZGVyIHRvIGFsaWdu
IHdpdGggbmV3IHRlcm1pbm9sb2d5IHVzZWQgaW4gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFw
cHNlYy1yZWZlcnJlci1wb2xpY3kuCi0gICAgc3dpdGNoIChyZXNvdXJjZS5vcHRpb25zKCkucmVm
ZXJyZXJQb2xpY3kpIHsKLSAgICBjYXNlIEZldGNoT3B0aW9uczo6UmVmZXJyZXJQb2xpY3k6OkVt
cHR5U3RyaW5nOiB7Ci0gICAgICAgIFJlZmVycmVyUG9saWN5IHJlZmVycmVyUG9saWN5ID0gY2Fj
aGVkUmVzb3VyY2VMb2FkZXIuZG9jdW1lbnQoKSA/IGNhY2hlZFJlc291cmNlTG9hZGVyLmRvY3Vt
ZW50KCktPnJlZmVycmVyUG9saWN5KCkgOiBSZWZlcnJlclBvbGljeTo6RGVmYXVsdDsKLSAgICAg
ICAgb3V0Z29pbmdSZWZlcnJlciA9IFNlY3VyaXR5UG9saWN5OjpnZW5lcmF0ZVJlZmVycmVySGVh
ZGVyKHJlZmVycmVyUG9saWN5LCByZXF1ZXN0LnVybCgpLCBvdXRnb2luZ1JlZmVycmVyKTsKLSAg
ICAgICAgYnJlYWs7IH0KLSAgICBjYXNlIEZldGNoT3B0aW9uczo6UmVmZXJyZXJQb2xpY3k6Ok5v
UmVmZXJyZXJXaGVuRG93bmdyYWRlOgotICAgICAgICBvdXRnb2luZ1JlZmVycmVyID0gU2VjdXJp
dHlQb2xpY3k6OmdlbmVyYXRlUmVmZXJyZXJIZWFkZXIoUmVmZXJyZXJQb2xpY3k6OkRlZmF1bHQs
IHJlcXVlc3QudXJsKCksIG91dGdvaW5nUmVmZXJyZXIpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZldGNoT3B0aW9uczo6UmVmZXJyZXJQb2xpY3k6Ok5vUmVmZXJyZXI6Ci0gICAgICAgIG91
dGdvaW5nUmVmZXJyZXIgPSBTdHJpbmcoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGZXRj
aE9wdGlvbnM6OlJlZmVycmVyUG9saWN5OjpPcmlnaW46Ci0gICAgICAgIG91dGdvaW5nUmVmZXJy
ZXIgPSBTZWN1cml0eVBvbGljeTo6Z2VuZXJhdGVSZWZlcnJlckhlYWRlcihSZWZlcnJlclBvbGlj
eTo6T3JpZ2luLCByZXF1ZXN0LnVybCgpLCBvdXRnb2luZ1JlZmVycmVyKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBGZXRjaE9wdGlvbnM6OlJlZmVycmVyUG9saWN5OjpPcmlnaW5XaGVuQ3Jv
c3NPcmlnaW46Ci0gICAgICAgIGlmIChyZXNvdXJjZS5pc0Nyb3NzT3JpZ2luKCkpCi0gICAgICAg
ICAgICBvdXRnb2luZ1JlZmVycmVyID0gU2VjdXJpdHlQb2xpY3k6OmdlbmVyYXRlUmVmZXJyZXJI
ZWFkZXIoUmVmZXJyZXJQb2xpY3k6Ok9yaWdpbiwgcmVxdWVzdC51cmwoKSwgb3V0Z29pbmdSZWZl
cnJlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmV0Y2hPcHRpb25zOjpSZWZlcnJlclBv
bGljeTo6VW5zYWZlVXJsOgotICAgICAgICBicmVhazsKLSAgICB9OwotCi0gICAgaWYgKG91dGdv
aW5nUmVmZXJyZXIuaXNFbXB0eSgpKQotICAgICAgICByZXF1ZXN0LmNsZWFySFRUUFJlZmVycmVy
KCk7Ci0gICAgZWxzZQotICAgICAgICByZXF1ZXN0LnNldEhUVFBSZWZlcnJlcihvdXRnb2luZ1Jl
ZmVycmVyKTsKLSAgICBGcmFtZUxvYWRlcjo6YWRkSFRUUE9yaWdpbklmTmVlZGVkKHJlcXVlc3Qs
IG91dGdvaW5nT3JpZ2luKTsKLQotICAgIGZyYW1lTG9hZGVyLmFkZEV4dHJhRmllbGRzVG9TdWJy
ZXNvdXJjZVJlcXVlc3QocmVxdWVzdCk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OmFkZEFk
ZGl0aW9uYWxSZXF1ZXN0SGVhZGVycyhDYWNoZWRSZXNvdXJjZUxvYWRlciYgbG9hZGVyKQotewot
ICAgIGFkZEFkZGl0aW9uYWxSZXF1ZXN0SGVhZGVyc1RvUmVxdWVzdChtX3Jlc291cmNlUmVxdWVz
dCwgbG9hZGVyLCAqdGhpcyk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OmNvbXB1dGVPcmln
aW4oQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlcikKLXsKLSAgICBpZiAodHlwZSgpID09IE1h
aW5SZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGxvYWRlci5kb2N1bWVu
dCgpKTsKLSAgICBpZiAobV9yZXNvdXJjZVJlcXVlc3QuaGFzSFRUUE9yaWdpbigpKQotICAgICAg
ICBtX29yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKG1fcmVzb3VyY2VS
ZXF1ZXN0Lmh0dHBPcmlnaW4oKSk7Ci0gICAgZWxzZQotICAgICAgICBtX29yaWdpbiA9IGxvYWRl
ci5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpOwotICAgIEFTU0VSVChtX29yaWdpbik7Ci0K
LSAgICBpZiAoIShtX3Jlc291cmNlUmVxdWVzdC51cmwoKS5wcm90b2NvbElzRGF0YSgpICYmIG1f
b3B0aW9ucy5zYW1lT3JpZ2luRGF0YVVSTEZsYWcgPT0gU2FtZU9yaWdpbkRhdGFVUkxGbGFnOjpT
ZXQpICYmICFtX29yaWdpbi0+Y2FuUmVxdWVzdChtX3Jlc291cmNlUmVxdWVzdC51cmwoKSkpCi0g
ICAgICAgIHNldENyb3NzT3JpZ2luKCk7Ci0KLSAgICBhZGRBZGRpdGlvbmFsUmVxdWVzdEhlYWRl
cnMobG9hZGVyKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6bG9hZChDYWNoZWRSZXNvdXJj
ZUxvYWRlciYgY2FjaGVkUmVzb3VyY2VMb2FkZXIsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9u
cyYgb3B0aW9ucykKLXsKLSAgICBpZiAoIWNhY2hlZFJlc291cmNlTG9hZGVyLmZyYW1lKCkpIHsK
LSAgICAgICAgZmFpbEJlZm9yZVN0YXJ0aW5nKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgRnJhbWUmIGZyYW1lID0gKmNhY2hlZFJlc291cmNlTG9hZGVyLmZyYW1lKCk7Ci0KLSAgICAv
LyBQcmV2ZW50IG5ldyBsb2FkcyBpZiB3ZSBhcmUgaW4gdGhlIFBhZ2VDYWNoZSBvciBiZWluZyBh
ZGRlZCB0byB0aGUgUGFnZUNhY2hlLgotICAgIGlmIChmcmFtZS5wYWdlKCkgJiYgZnJhbWUucGFn
ZSgpLT5pblBhZ2VDYWNoZSgpKSB7Ci0gICAgICAgIGZhaWxCZWZvcmVTdGFydGluZygpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRnJhbWVMb2FkZXImIGZyYW1lTG9hZGVyID0gZnJh
bWUubG9hZGVyKCk7Ci0gICAgaWYgKG9wdGlvbnMuc2VjdXJpdHlDaGVjayA9PSBEb1NlY3VyaXR5
Q2hlY2sgJiYgKGZyYW1lTG9hZGVyLnN0YXRlKCkgPT0gRnJhbWVTdGF0ZVByb3Zpc2lvbmFsIHx8
ICFmcmFtZUxvYWRlci5hY3RpdmVEb2N1bWVudExvYWRlcigpIHx8IGZyYW1lTG9hZGVyLmFjdGl2
ZURvY3VtZW50TG9hZGVyKCktPmlzU3RvcHBpbmcoKSkpIHsKLSAgICAgICAgZmFpbEJlZm9yZVN0
YXJ0aW5nKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX29wdGlvbnMgPSBvcHRp
b25zOwotICAgIG1fbG9hZGluZyA9IHRydWU7Ci0KLSNpZiBVU0UoUVVJQ0tfTE9PSykKLSAgICBp
ZiAoIW1fcmVzb3VyY2VSZXF1ZXN0LmlzTnVsbCgpICYmIG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgp
LnByb3RvY29sSXMoUUxQcmV2aWV3UHJvdG9jb2woKSkpIHsKLSAgICAgICAgLy8gV2hlbiBRdWlj
a0xvb2sgaXMgaW52b2tlZCB0byBjb252ZXJ0IGEgZG9jdW1lbnQsIGl0IHJldHVybnMgYSB1bmlx
dWUgVVJMIGluIHRoZQotICAgICAgICAvLyBOU1VSTFJlcG9uc2UgZm9yIHRoZSBtYWluIGRvY3Vt
ZW50LiBUbyBtYWtlIHNhZmVRTFVSTEZvckRvY3VtZW50VVJMQW5kUmVzb3VyY2VVUkwoKQotICAg
ICAgICAvLyB3b3JrLCB3ZSBuZWVkIHRvIHVzZSB0aGUgUUwgVVJMIG5vdCB0aGUgb3JpZ2luYWwg
VVJMLgotICAgICAgICBjb25zdCBVUkwmIGRvY3VtZW50VVJMID0gZnJhbWVMb2FkZXIuZG9jdW1l
bnRMb2FkZXIoKS0+cmVzcG9uc2UoKS51cmwoKTsKLSAgICAgICAgbV9yZXNvdXJjZVJlcXVlc3Qu
c2V0VVJMKHNhZmVRTFVSTEZvckRvY3VtZW50VVJMQW5kUmVzb3VyY2VVUkwoZG9jdW1lbnRVUkws
IHVybCgpKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpZiAoIWFjY2VwdCgpLmlzRW1wdHkoKSkK
LSAgICAgICAgbV9yZXNvdXJjZVJlcXVlc3Quc2V0SFRUUEFjY2VwdChhY2NlcHQoKSk7Ci0KLSAg
ICBpZiAoaXNDYWNoZVZhbGlkYXRvcigpKSB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlKiByZXNv
dXJjZVRvUmV2YWxpZGF0ZSA9IG1fcmVzb3VyY2VUb1JldmFsaWRhdGU7Ci0gICAgICAgIEFTU0VS
VChyZXNvdXJjZVRvUmV2YWxpZGF0ZS0+Y2FuVXNlQ2FjaGVWYWxpZGF0b3IoKSk7Ci0gICAgICAg
IEFTU0VSVChyZXNvdXJjZVRvUmV2YWxpZGF0ZS0+aXNMb2FkZWQoKSk7Ci0gICAgICAgIGNvbnN0
IFN0cmluZyYgbGFzdE1vZGlmaWVkID0gcmVzb3VyY2VUb1JldmFsaWRhdGUtPnJlc3BvbnNlKCku
aHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpMYXN0TW9kaWZpZWQpOwotICAgICAgICBj
b25zdCBTdHJpbmcmIGVUYWcgPSByZXNvdXJjZVRvUmV2YWxpZGF0ZS0+cmVzcG9uc2UoKS5odHRw
SGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkVUYWcpOwotICAgICAgICBpZiAoIWxhc3RNb2Rp
ZmllZC5pc0VtcHR5KCkgfHwgIWVUYWcuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
Y2FjaGVkUmVzb3VyY2VMb2FkZXIuY2FjaGVQb2xpY3kodHlwZSgpKSAhPSBDYWNoZVBvbGljeVJl
bG9hZCk7Ci0gICAgICAgICAgICBpZiAoY2FjaGVkUmVzb3VyY2VMb2FkZXIuY2FjaGVQb2xpY3ko
dHlwZSgpKSA9PSBDYWNoZVBvbGljeVJldmFsaWRhdGUpCi0gICAgICAgICAgICAgICAgbV9yZXNv
dXJjZVJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDYWNoZUNvbnRy
b2wsICJtYXgtYWdlPTAiKTsKLSAgICAgICAgICAgIGlmICghbGFzdE1vZGlmaWVkLmlzRW1wdHko
KSkKLSAgICAgICAgICAgICAgICBtX3Jlc291cmNlUmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQo
SFRUUEhlYWRlck5hbWU6OklmTW9kaWZpZWRTaW5jZSwgbGFzdE1vZGlmaWVkKTsKLSAgICAgICAg
ICAgIGlmICghZVRhZy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgbV9yZXNvdXJjZVJlcXVl
c3Quc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpJZk5vbmVNYXRjaCwgZVRhZyk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKLSAgICBpZiAo
dHlwZSgpID09IENhY2hlZFJlc291cmNlOjpMaW5rUHJlZmV0Y2ggfHwgdHlwZSgpID09IENhY2hl
ZFJlc291cmNlOjpMaW5rU3VicmVzb3VyY2UpCi0gICAgICAgIG1fcmVzb3VyY2VSZXF1ZXN0LnNl
dEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6UHVycG9zZSwgInByZWZldGNoIik7Ci0j
ZW5kaWYKLSAgICBtX3Jlc291cmNlUmVxdWVzdC5zZXRQcmlvcml0eShsb2FkUHJpb3JpdHkoKSk7
Ci0KLSAgICBjb21wdXRlT3JpZ2luKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKLQotICAgIC8vIEZJ
WE1FOiBJdCdzIHVuZm9ydHVuYXRlIHRoYXQgdGhlIGNhY2hlIGxheWVyIGFuZCBiZWxvdyBnZXQg
dG8ga25vdyBhbnl0aGluZyBhYm91dCBmcmFnbWVudCBpZGVudGlmaWVycy4KLSAgICAvLyBXZSBz
aG91bGQgbG9vayBpbnRvIHJlbW92aW5nIHRoZSBleHBlY3RhdGlvbiBvZiB0aGF0IGtub3dsZWRn
ZSBmcm9tIHRoZSBwbGF0Zm9ybSBuZXR3b3JrIHN0YWNrcy4KLSAgICBSZXNvdXJjZVJlcXVlc3Qg
cmVxdWVzdChtX3Jlc291cmNlUmVxdWVzdCk7Ci0gICAgaWYgKCFtX2ZyYWdtZW50SWRlbnRpZmll
ckZvclJlcXVlc3QuaXNOdWxsKCkpIHsKLSAgICAgICAgVVJMIHVybCA9IHJlcXVlc3QudXJsKCk7
Ci0gICAgICAgIHVybC5zZXRGcmFnbWVudElkZW50aWZpZXIobV9mcmFnbWVudElkZW50aWZpZXJG
b3JSZXF1ZXN0KTsKLSAgICAgICAgcmVxdWVzdC5zZXRVUkwodXJsKTsKLSAgICAgICAgbV9mcmFn
bWVudElkZW50aWZpZXJGb3JSZXF1ZXN0ID0gU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgbV9sb2Fk
ZXIgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+bG9hZFJlc291cmNl
KGZyYW1lLCAqdGhpcywgcmVxdWVzdCwgb3B0aW9ucyk7Ci0gICAgaWYgKCFtX2xvYWRlcikgewot
ICAgICAgICBmYWlsQmVmb3JlU3RhcnRpbmcoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIG1fc3RhdHVzID0gUGVuZGluZzsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6bG9hZEZy
b20oY29uc3QgQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlLCBjb25zdCBSZXNvdXJjZUxvYWRlck9w
dGlvbnMmIG9wdGlvbnMsIENhY2hlZFJlc291cmNlTG9hZGVyJiBjYWNoZWRSZXNvdXJjZUxvYWRl
cikKLXsKLSAgICBBU1NFUlQodXJsKCkgPT0gcmVzb3VyY2UudXJsKCkpOwotICAgIEFTU0VSVCh0
eXBlKCkgPT0gcmVzb3VyY2UudHlwZSgpKTsKLSAgICBBU1NFUlQocmVzb3VyY2Uuc3RhdHVzKCkg
PT0gU3RhdHVzOjpDYWNoZWQpOwotCi0gICAgbV9vcHRpb25zID0gb3B0aW9uczsKLSAgICBjb21w
dXRlT3JpZ2luKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKLQotICAgIGlmIChpc0Nyb3NzT3JpZ2lu
KCkgJiYgb3B0aW9ucy5tb2RlID09IEZldGNoT3B0aW9uczo6TW9kZTo6Q29ycykgewotICAgICAg
ICBBU1NFUlQobV9vcmlnaW4pOwotICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgICAg
ICBpZiAoIVdlYkNvcmU6OnBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhyZXNvdXJjZS5yZXNwb25z
ZSgpLCBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscywgKm1fb3JpZ2luLCBlcnJvck1lc3NhZ2Up
KSB7Ci0gICAgICAgICAgICBzZXRSZXNvdXJjZUVycm9yKFJlc291cmNlRXJyb3IoU3RyaW5nKCks
IDAsIHVybCgpLCBlcnJvck1lc3NhZ2UsIFJlc291cmNlRXJyb3I6OlR5cGU6OkFjY2Vzc0NvbnRy
b2wpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHNldEJv
ZHlEYXRhRnJvbShyZXNvdXJjZSk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OmNoZWNrTm90
aWZ5KCkKLXsKLSAgICBpZiAoaXNMb2FkaW5nKCkgfHwgc3RpbGxOZWVkc0xvYWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI8Q2FjaGVkUmVzb3Vy
Y2VDbGllbnQ+IHdhbGtlcihtX2NsaWVudHMpOwotICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNs
aWVudCogY2xpZW50ID0gd2Fsa2VyLm5leHQoKSkKLSAgICAgICAgY2xpZW50LT5ub3RpZnlGaW5p
c2hlZCh0aGlzKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6YWRkRGF0YUJ1ZmZlcihTaGFy
ZWRCdWZmZXImKQotewotICAgIEFTU0VSVChkYXRhQnVmZmVyaW5nUG9saWN5KCkgPT0gQnVmZmVy
RGF0YSk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OmFkZERhdGEoY29uc3QgY2hhciosIHVu
c2lnbmVkKQotewotICAgIEFTU0VSVChkYXRhQnVmZmVyaW5nUG9saWN5KCkgPT0gRG9Ob3RCdWZm
ZXJEYXRhKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6ZmluaXNoTG9hZGluZyhTaGFyZWRC
dWZmZXIqKQotewotICAgIHNldExvYWRpbmcoZmFsc2UpOwotICAgIGNoZWNrTm90aWZ5KCk7Ci19
Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OmVycm9yKENhY2hlZFJlc291cmNlOjpTdGF0dXMgc3Rh
dHVzKQotewotICAgIHNldFN0YXR1cyhzdGF0dXMpOwotICAgIEFTU0VSVChlcnJvck9jY3VycmVk
KCkpOwotICAgIG1fZGF0YSA9IG51bGxwdHI7Ci0KLSAgICBzZXRMb2FkaW5nKGZhbHNlKTsKLSAg
ICBjaGVja05vdGlmeSgpOwotfQotICAgIAotdm9pZCBDYWNoZWRSZXNvdXJjZTo6Y2FuY2VsTG9h
ZCgpCi17Ci0gICAgaWYgKCFpc0xvYWRpbmcoKSAmJiAhc3RpbGxOZWVkc0xvYWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgc2V0U3RhdHVzKExvYWRFcnJvcik7Ci0gICAgc2V0TG9hZGluZyhm
YWxzZSk7Ci0gICAgY2hlY2tOb3RpZnkoKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6Zmlu
aXNoKCkKLXsKLSAgICBpZiAoIWVycm9yT2NjdXJyZWQoKSkKLSAgICAgICAgbV9zdGF0dXMgPSBD
YWNoZWQ7Ci19Ci0KLWJvb2wgQ2FjaGVkUmVzb3VyY2U6OnBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVj
ayhTZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlPcmlnaW4pCi17Ci0gICAgU3RyaW5nIGVycm9yRGVz
Y3JpcHRpb247Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhy
ZXNwb25zZSgpLCByZXNvdXJjZVJlcXVlc3QoKS5hbGxvd0Nvb2tpZXMoKSA/IEFsbG93U3RvcmVk
Q3JlZGVudGlhbHMgOiBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIHNlY3VyaXR5T3JpZ2lu
LCBlcnJvckRlc2NyaXB0aW9uKTsKLX0KLQotYm9vbCBDYWNoZWRSZXNvdXJjZTo6cGFzc2VzU2Ft
ZU9yaWdpblBvbGljeUNoZWNrKFNlY3VyaXR5T3JpZ2luJiBzZWN1cml0eU9yaWdpbikKLXsKLSAg
ICBpZiAoc2VjdXJpdHlPcmlnaW4uY2FuUmVxdWVzdChyZXNwb25zZUZvclNhbWVPcmlnaW5Qb2xp
Y3lDaGVja3MoKS51cmwoKSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBwYXNz
ZXNBY2Nlc3NDb250cm9sQ2hlY2soc2VjdXJpdHlPcmlnaW4pOwotfQotCi12b2lkIENhY2hlZFJl
c291cmNlOjpzZXRDcm9zc09yaWdpbigpCi17Ci0gICAgQVNTRVJUKG1fb3B0aW9ucy5tb2RlICE9
IEZldGNoT3B0aW9uczo6TW9kZTo6U2FtZU9yaWdpbik7Ci0gICAgbV9yZXNwb25zZVRhaW50aW5n
ID0gKG1fb3B0aW9ucy5tb2RlID09IEZldGNoT3B0aW9uczo6TW9kZTo6Q29ycykgPyBSZXNvdXJj
ZVJlc3BvbnNlOjpUYWludGluZzo6Q29ycyA6IFJlc291cmNlUmVzcG9uc2U6OlRhaW50aW5nOjpP
cGFxdWU7Ci19Ci0KLWJvb2wgQ2FjaGVkUmVzb3VyY2U6OmlzQ3Jvc3NPcmlnaW4oKSBjb25zdAot
ewotICAgIHJldHVybiBtX3Jlc3BvbnNlVGFpbnRpbmcgIT0gUmVzb3VyY2VSZXNwb25zZTo6VGFp
bnRpbmc6OkJhc2ljOwotfQotCi1ib29sIENhY2hlZFJlc291cmNlOjppc0NsZWFuKCkgY29uc3QK
LXsKLSAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9pbmZyYXN0
cnVjdHVyZS5odG1sI2NvcnMtc2FtZS1vcmlnaW4KLSAgICByZXR1cm4gIWxvYWRGYWlsZWRPckNh
bmNlbGVkKCkgJiYgbV9yZXNwb25zZVRhaW50aW5nICE9IFJlc291cmNlUmVzcG9uc2U6OlRhaW50
aW5nOjpPcGFxdWU7Ci19Ci0KLWJvb2wgQ2FjaGVkUmVzb3VyY2U6OmlzRXhwaXJlZCgpIGNvbnN0
Ci17Ci0gICAgaWYgKG1fcmVzcG9uc2UuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiBjb21wdXRlQ3VycmVudEFnZShtX3Jlc3BvbnNlLCBtX3Jlc3BvbnNlVGlt
ZXN0YW1wKSA+IGZyZXNobmVzc0xpZmV0aW1lKG1fcmVzcG9uc2UpOwotfQotCi1zdGF0aWMgaW5s
aW5lIGJvb2wgc2hvdWxkQ2FjaGVTY2hlbWVJbmRlZmluaXRlbHkoY29uc3QgU3RyaW5nJiBzY2hl
bWUpCi17Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKHNjaGVtZSwgImFwcGxld2ViZGF0YSIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSNlbmRpZgotI2lmIFVTRShTT1VQKQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShzY2hlbWUsICJyZXNvdXJjZSIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgot
ICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzY2hlbWUsICJkYXRhIik7
Ci19Ci0KLXN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgQ2FjaGVkUmVzb3VyY2U6OmZyZXNobmVz
c0xpZmV0aW1lKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKSBjb25zdAotewotICAg
IGlmICghcmVzcG9uc2UudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKSB7Ci0gICAgICAg
IFN0cmluZyBwcm90b2NvbCA9IHJlc3BvbnNlLnVybCgpLnByb3RvY29sKCk7Ci0gICAgICAgIGlm
ICghc2hvdWxkQ2FjaGVTY2hlbWVJbmRlZmluaXRlbHkocHJvdG9jb2wpKSB7Ci0gICAgICAgICAg
ICAvLyBEb24ndCBjYWNoZSBub24tSFRUUCBtYWluIHJlc291cmNlcyBzaW5jZSB3ZSBjYW4ndCBj
aGVjayBmb3IgZnJlc2huZXNzLgotICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3Qg
Y2FjaGUgc3VicmVzb3VyY2VzIGVpdGhlciwgYnV0IHdoZW4gd2UgdHJpZWQgdGhpcwotICAgICAg
ICAgICAgLy8gaXQgY2F1c2VkIHBlcmZvcm1hbmNlIGFuZCBmbGFraW5lc3MgaXNzdWVzIGluIG91
ciB0ZXN0IGluZnJhc3RydWN0dXJlLgotICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBNYWluUmVz
b3VyY2UgfHwgU2NoZW1lUmVnaXN0cnk6OnNob3VsZEFsd2F5c1JldmFsaWRhdGVVUkxTY2hlbWUo
cHJvdG9jb2wpKQotICAgICAgICAgICAgICAgIHJldHVybiAwdXM7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kczo6bWF4KCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGNvbXB1dGVGcmVzaG5lc3NMaWZldGltZUZvckhUVFBGYW1pbHkocmVzcG9uc2Us
IG1fcmVzcG9uc2VUaW1lc3RhbXApOwotfQotCi12b2lkIENhY2hlZFJlc291cmNlOjpyZWRpcmVj
dFJlY2VpdmVkKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UpCi17Ci0gICAgbV9yZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyID0gdHJ1
ZTsKLSAgICBpZiAocmVzcG9uc2UuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IFJlZGlyZWN0IHRvIGRhdGE6IFVSTCB1c2VzIHRoZSBsYXN0IEhUVFAgcmVzcG9uc2UgZm9yIFNP
UC4KLSAgICBpZiAocmVzcG9uc2UuaXNIVFRQKCkgJiYgcmVxdWVzdC51cmwoKS5wcm90b2NvbElz
RGF0YSgpKQotICAgICAgICBtX3JlZGlyZWN0UmVzcG9uc2VGb3JTYW1lT3JpZ2luUG9saWN5Q2hl
Y2tzID0gcmVzcG9uc2U7Ci0KLSAgICB1cGRhdGVSZWRpcmVjdENoYWluU3RhdHVzKG1fcmVkaXJl
Y3RDaGFpbkNhY2hlU3RhdHVzLCByZXNwb25zZSk7Ci19Ci0KLWNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIENhY2hlZFJlc291cmNlOjpyZXNwb25zZUZvclNhbWVPcmlnaW5Qb2xpY3lDaGVja3MoKSBj
b25zdAotewotICAgIHJldHVybiBtX3JlZGlyZWN0UmVzcG9uc2VGb3JTYW1lT3JpZ2luUG9saWN5
Q2hlY2tzLmlzTnVsbCgpID8gbV9yZXNwb25zZSA6IG1fcmVkaXJlY3RSZXNwb25zZUZvclNhbWVP
cmlnaW5Qb2xpY3lDaGVja3M7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldFJlc3BvbnNl
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIEFTU0VSVChtX3Jlc3Bv
bnNlLnR5cGUoKSA9PSBSZXNvdXJjZVJlc3BvbnNlOjpUeXBlOjpEZWZhdWx0KTsKLSAgICBtX3Jl
c3BvbnNlID0gcmVzcG9uc2U7Ci0gICAgbV9yZXNwb25zZS5zZXRSZWRpcmVjdGVkKG1fcmVkaXJl
Y3RDaGFpbkNhY2hlU3RhdHVzLnN0YXR1cyAhPSBSZWRpcmVjdENoYWluQ2FjaGVTdGF0dXM6Ok5v
UmVkaXJlY3Rpb24pOwotCi0gICAgbV92YXJ5aW5nSGVhZGVyVmFsdWVzID0gY29sbGVjdFZhcnlp
bmdSZXF1ZXN0SGVhZGVycyhtX3Jlc291cmNlUmVxdWVzdCwgbV9yZXNwb25zZSwgbV9zZXNzaW9u
SUQpOwotfQotCi12b2lkIENhY2hlZFJlc291cmNlOjpyZXNwb25zZVJlY2VpdmVkKGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIHNldFJlc3BvbnNlKHJlc3BvbnNlKTsK
LSAgICBtX3Jlc3BvbnNlVGltZXN0YW1wID0gc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93
KCk7Ci0gICAgU3RyaW5nIGVuY29kaW5nID0gcmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpOwot
ICAgIGlmICghZW5jb2RpbmcuaXNOdWxsKCkpCi0gICAgICAgIHNldEVuY29kaW5nKGVuY29kaW5n
KTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6Y2xlYXJMb2FkZXIoKQotewotICAgIEFTU0VS
VChtX2xvYWRlcik7Ci0gICAgbV9pZGVudGlmaWVyRm9yTG9hZFdpdGhvdXRSZXNvdXJjZUxvYWRl
ciA9IG1fbG9hZGVyLT5pZGVudGlmaWVyKCk7Ci0gICAgbV9sb2FkZXIgPSBudWxscHRyOwotICAg
IGRlbGV0ZUlmUG9zc2libGUoKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6YWRkQ2xpZW50
KENhY2hlZFJlc291cmNlQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgaWYgKGFkZENsaWVudFRvU2V0
KGNsaWVudCkpCi0gICAgICAgIGRpZEFkZENsaWVudChjbGllbnQpOwotfQotCi12b2lkIENhY2hl
ZFJlc291cmNlOjpkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCkKLXsK
LSAgICBpZiAobV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAg
bV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXIuc3RvcCgpOwotCi0gICAgaWYgKG1fY2xpZW50c0F3
YWl0aW5nQ2FsbGJhY2sucmVtb3ZlKGNsaWVudCkpCi0gICAgICAgIG1fY2xpZW50cy5hZGQoY2xp
ZW50KTsKLSAgICBpZiAoIWlzTG9hZGluZygpICYmICFzdGlsbE5lZWRzTG9hZCgpKQotICAgICAg
ICBjbGllbnQtPm5vdGlmeUZpbmlzaGVkKHRoaXMpOwotfQotCi1ib29sIENhY2hlZFJlc291cmNl
OjphZGRDbGllbnRUb1NldChDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50KQotewotICAgIGlm
IChtX3ByZWxvYWRSZXN1bHQgPT0gUHJlbG9hZE5vdFJlZmVyZW5jZWQpIHsKLSAgICAgICAgaWYg
KGlzTG9hZGVkKCkpCi0gICAgICAgICAgICBtX3ByZWxvYWRSZXN1bHQgPSBQcmVsb2FkUmVmZXJl
bmNlZFdoaWxlQ29tcGxldGU7Ci0gICAgICAgIGVsc2UgaWYgKG1fcmVxdWVzdGVkRnJvbU5ldHdv
cmtpbmdMYXllcikKLSAgICAgICAgICAgIG1fcHJlbG9hZFJlc3VsdCA9IFByZWxvYWRSZWZlcmVu
Y2VkV2hpbGVMb2FkaW5nOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3ByZWxvYWRSZXN1
bHQgPSBQcmVsb2FkUmVmZXJlbmNlZDsKLSAgICB9Ci0gICAgaWYgKGFsbG93c0NhY2hpbmcoKSAm
JiAhaGFzQ2xpZW50cygpICYmIGluQ2FjaGUoKSkKLSAgICAgICAgTWVtb3J5Q2FjaGU6OnNpbmds
ZXRvbigpLmFkZFRvTGl2ZVJlc291cmNlc1NpemUoKnRoaXMpOwotCi0gICAgaWYgKChtX3R5cGUg
PT0gUmF3UmVzb3VyY2UgfHwgbV90eXBlID09IE1haW5SZXNvdXJjZSkgJiYgIW1fcmVzcG9uc2Uu
aXNOdWxsKCkgJiYgIW1fcHJveHlSZXNvdXJjZSkgewotICAgICAgICAvLyBDZXJ0YWluIHJlc291
cmNlcyAoZXNwZWNpYWxseSBYSFJzIGFuZCBtYWluIHJlc291cmNlcykgZG8gY3JhenkgdGhpbmdz
IGlmIGFuIGFzeW5jaHJvbm91cyBsb2FkIHJldHVybnMKLSAgICAgICAgLy8gc3luY2hyb25vdXNs
eSAoZS5nLiwgc2NyaXB0cyBtYXkgbm90IGhhdmUgc2V0IGFsbCB0aGUgc3RhdGUgdGhleSBuZWVk
IHRvIGhhbmRsZSB0aGUgbG9hZCkuCi0gICAgICAgIC8vIFRoZXJlZm9yZSwgcmF0aGVyIHRoYW4g
aW1tZWRpYXRlbHkgc2VuZGluZyBjYWxsYmFja3Mgb24gYSBjYWNoZSBoaXQgbGlrZSBvdGhlciBD
YWNoZWRSZXNvdXJjZXMsCi0gICAgICAgIC8vIHdlIHNjaGVkdWxlIHRoZSBjYWxsYmFja3MgYW5k
IGVuc3VyZSB3ZSBuZXZlciBmaW5pc2ggc3luY2hyb25vdXNseS4KLSAgICAgICAgQVNTRVJUKCFt
X2NsaWVudHNBd2FpdGluZ0NhbGxiYWNrLmNvbnRhaW5zKGNsaWVudCkpOwotICAgICAgICBtX2Ns
aWVudHNBd2FpdGluZ0NhbGxiYWNrLmFkZChjbGllbnQsIHN0ZDo6bWFrZV91bmlxdWU8Q2FsbGJh
Y2s+KCp0aGlzLCAqY2xpZW50KSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBtX2NsaWVudHMuYWRkKGNsaWVudCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ2Fj
aGVkUmVzb3VyY2U6OnJlbW92ZUNsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50KQot
ewotICAgIGF1dG8gY2FsbGJhY2sgPSBtX2NsaWVudHNBd2FpdGluZ0NhbGxiYWNrLnRha2UoY2xp
ZW50KTsKLSAgICBpZiAoY2FsbGJhY2spIHsKLSAgICAgICAgQVNTRVJUKCFtX2NsaWVudHMuY29u
dGFpbnMoY2xpZW50KSk7Ci0gICAgICAgIGNhbGxiYWNrLT5jYW5jZWwoKTsKLSAgICAgICAgY2Fs
bGJhY2sgPSBudWxscHRyOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtX2NsaWVudHMu
Y29udGFpbnMoY2xpZW50KSk7Ci0gICAgICAgIG1fY2xpZW50cy5yZW1vdmUoY2xpZW50KTsKLSAg
ICAgICAgZGlkUmVtb3ZlQ2xpZW50KGNsaWVudCk7Ci0gICAgfQotCi0gICAgaWYgKGRlbGV0ZUlm
UG9zc2libGUoKSkgewotICAgICAgICAvLyBgdGhpc2Agb2JqZWN0IGlzIGRlYWQgaGVyZS4KLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChoYXNDbGllbnRzKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8mIG1lbW9yeUNhY2hlID0gTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigp
OwotICAgIGlmIChhbGxvd3NDYWNoaW5nKCkgJiYgaW5DYWNoZSgpKSB7Ci0gICAgICAgIG1lbW9y
eUNhY2hlLnJlbW92ZUZyb21MaXZlUmVzb3VyY2VzU2l6ZSgqdGhpcyk7Ci0gICAgICAgIG1lbW9y
eUNhY2hlLnJlbW92ZUZyb21MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QoKnRoaXMpOwotICAgIH0K
LSAgICBpZiAoIW1fc3dpdGNoaW5nQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSkKLSAgICAg
ICAgYWxsQ2xpZW50c1JlbW92ZWQoKTsKLSAgICBkZXN0cm95RGVjb2RlZERhdGFJZk5lZWRlZCgp
OwotCi0gICAgaWYgKCFhbGxvd3NDYWNoaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChyZXNwb25zZSgpLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgpICYmIHVybCgpLnByb3Rv
Y29sSXMoImh0dHBzIikpIHsKLSAgICAgICAgLy8gUkZDMjYxNiAxNC45LjI6Ci0gICAgICAgIC8v
ICJuby1zdG9yZTogLi4uIE1VU1QgbWFrZSBhIGJlc3QtZWZmb3J0IGF0dGVtcHQgdG8gcmVtb3Zl
IHRoZSBpbmZvcm1hdGlvbiBmcm9tIHZvbGF0aWxlIHN0b3JhZ2UgYXMgcHJvbXB0bHkgYXMgcG9z
c2libGUiCi0gICAgICAgIC8vICIuLi4gSGlzdG9yeSBidWZmZXJzIE1BWSBzdG9yZSBzdWNoIHJl
c3BvbnNlcyBhcyBwYXJ0IG9mIHRoZWlyIG5vcm1hbCBvcGVyYXRpb24uIgotICAgICAgICAvLyBX
ZSBhbGxvdyBub24tc2VjdXJlIGNvbnRlbnQgdG8gYmUgcmV1c2VkIGluIGhpc3RvcnksIGJ1dCB3
ZSBkbyBub3QgYWxsb3cgc2VjdXJlIGNvbnRlbnQgdG8gYmUgcmV1c2VkLgotICAgICAgICBtZW1v
cnlDYWNoZS5yZW1vdmUoKnRoaXMpOwotICAgIH0KLSAgICBtZW1vcnlDYWNoZS5wcnVuZVNvb24o
KTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWVkZWQo
KQotewotICAgIGlmICghbV9kZWNvZGVkU2l6ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICgh
TWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpLmRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwo
KS5jb3VudCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9kZWNvZGVkRGF0YURlbGV0aW9uVGlt
ZXIucmVzdGFydCgpOwotfQotCi12b2lkIENhY2hlZFJlc291cmNlOjpkZWNvZGVkRGF0YURlbGV0
aW9uVGltZXJGaXJlZCgpCi17Ci0gICAgZGVzdHJveURlY29kZWREYXRhKCk7Ci19Ci0KLWJvb2wg
Q2FjaGVkUmVzb3VyY2U6OmRlbGV0ZUlmUG9zc2libGUoKQotewotICAgIGlmIChjYW5EZWxldGUo
KSkgewotICAgICAgICBpZiAoIWluQ2FjaGUoKSkgewotICAgICAgICAgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjp3aWxsRGVzdHJveUNhY2hlZFJlc291cmNlKCp0aGlzKTsKLSAgICAgICAg
ICAgIGRlbGV0ZSB0aGlzOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKG1fZGF0YSkKLSAgICAgICAgICAgIG1fZGF0YS0+aGludE1lbW9yeU5vdE5lZWRl
ZFNvb24oKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENhY2hlZFJlc291
cmNlOjpzZXREZWNvZGVkU2l6ZSh1bnNpZ25lZCBzaXplKQotewotICAgIGlmIChzaXplID09IG1f
ZGVjb2RlZFNpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCBkZWx0YSA9IHNpemUgLSBt
X2RlY29kZWRTaXplOwotCi0gICAgLy8gVGhlIG9iamVjdCBtdXN0IGJlIG1vdmVkIHRvIGEgZGlm
ZmVyZW50IHF1ZXVlLCBzaW5jZSBpdHMgc2l6ZSBoYXMgYmVlbiBjaGFuZ2VkLgotICAgIC8vIFJl
bW92ZSBiZWZvcmUgdXBkYXRpbmcgbV9kZWNvZGVkU2l6ZSwgc28gd2UgZmluZCB0aGUgcmVzb3Vy
Y2UgaW4gdGhlIGNvcnJlY3QgTFJVIGxpc3QuCi0gICAgaWYgKGFsbG93c0NhY2hpbmcoKSAmJiBp
bkNhY2hlKCkpCi0gICAgICAgIE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmVGcm9tTFJV
TGlzdCgqdGhpcyk7Ci0gICAgCi0gICAgbV9kZWNvZGVkU2l6ZSA9IHNpemU7Ci0gICAKLSAgICBp
ZiAoYWxsb3dzQ2FjaGluZygpICYmIGluQ2FjaGUoKSkgewotICAgICAgICBhdXRvJiBtZW1vcnlD
YWNoZSA9IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKTsKLSAgICAgICAgLy8gTm93IGluc2VydCBp
bnRvIHRoZSBuZXcgTFJVIGxpc3QuCi0gICAgICAgIG1lbW9yeUNhY2hlLmluc2VydEluTFJVTGlz
dCgqdGhpcyk7Ci0gICAgICAgIAotICAgICAgICAvLyBJbnNlcnQgaW50byBvciByZW1vdmUgZnJv
bSB0aGUgbGl2ZSBkZWNvZGVkIGxpc3QgaWYgbmVjZXNzYXJ5LgotICAgICAgICAvLyBXaGVuIGlu
c2VydGluZyBpbnRvIHRoZSBMaXZlRGVjb2RlZFJlc291cmNlc0xpc3QgaXQgaXMgcG9zc2libGUK
LSAgICAgICAgLy8gdGhhdCB0aGUgbV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWUgaXMgc3RpbGwgemVy
byBvciBzbWFsbGVyIHRoYW4KLSAgICAgICAgLy8gdGhlIG1fbGFzdERlY29kZWRBY2Nlc3NUaW1l
IG9mIHRoZSBjdXJyZW50IGxpc3QgaGVhZC4gVGhpcyBpcyBhCi0gICAgICAgIC8vIHZpb2xhdGlv
biBvZiB0aGUgaW52YXJpYW50IHRoYXQgdGhlIGxpc3QgaXMgdG8gYmUga2VwdCBzb3J0ZWQKLSAg
ICAgICAgLy8gYnkgYWNjZXNzIHRpbWUuIFRoZSB3ZWFrZW5pbmcgb2YgdGhlIGludmFyaWFudCBk
b2VzIG5vdCBwb3NlCi0gICAgICAgIC8vIGEgcHJvYmxlbS4gRm9yIG1vcmUgZGV0YWlscyBwbGVh
c2Ugc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAyMDkKLSAg
ICAgICAgYm9vbCBpbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCA9IG1lbW9yeUNhY2hlLmluTGl2
ZURlY29kZWRSZXNvdXJjZXNMaXN0KCp0aGlzKTsKLSAgICAgICAgaWYgKG1fZGVjb2RlZFNpemUg
JiYgIWluTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0ICYmIGhhc0NsaWVudHMoKSkKLSAgICAgICAg
ICAgIG1lbW9yeUNhY2hlLmluc2VydEluTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KCp0aGlzKTsK
LSAgICAgICAgZWxzZSBpZiAoIW1fZGVjb2RlZFNpemUgJiYgaW5MaXZlRGVjb2RlZFJlc291cmNl
c0xpc3QpCi0gICAgICAgICAgICBtZW1vcnlDYWNoZS5yZW1vdmVGcm9tTGl2ZURlY29kZWRSZXNv
dXJjZXNMaXN0KCp0aGlzKTsKLQotICAgICAgICAvLyBVcGRhdGUgdGhlIGNhY2hlJ3Mgc2l6ZSB0
b3RhbHMuCi0gICAgICAgIG1lbW9yeUNhY2hlLmFkanVzdFNpemUoaGFzQ2xpZW50cygpLCBkZWx0
YSk7Ci0gICAgfQotfQotCi12b2lkIENhY2hlZFJlc291cmNlOjpzZXRFbmNvZGVkU2l6ZSh1bnNp
Z25lZCBzaXplKQotewotICAgIGlmIChzaXplID09IG1fZW5jb2RlZFNpemUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGludCBkZWx0YSA9IHNpemUgLSBtX2VuY29kZWRTaXplOwotCi0gICAgLy8g
VGhlIG9iamVjdCBtdXN0IGJlIG1vdmVkIHRvIGEgZGlmZmVyZW50IHF1ZXVlLCBzaW5jZSBpdHMg
c2l6ZSBoYXMgYmVlbiBjaGFuZ2VkLgotICAgIC8vIFJlbW92ZSBiZWZvcmUgdXBkYXRpbmcgbV9l
bmNvZGVkU2l6ZSwgc28gd2UgZmluZCB0aGUgcmVzb3VyY2UgaW4gdGhlIGNvcnJlY3QgTFJVIGxp
c3QuCi0gICAgaWYgKGFsbG93c0NhY2hpbmcoKSAmJiBpbkNhY2hlKCkpCi0gICAgICAgIE1lbW9y
eUNhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmVGcm9tTFJVTGlzdCgqdGhpcyk7Ci0KLSAgICBtX2Vu
Y29kZWRTaXplID0gc2l6ZTsKLQotICAgIGlmIChhbGxvd3NDYWNoaW5nKCkgJiYgaW5DYWNoZSgp
KSB7Ci0gICAgICAgIGF1dG8mIG1lbW9yeUNhY2hlID0gTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigp
OwotICAgICAgICBtZW1vcnlDYWNoZS5pbnNlcnRJbkxSVUxpc3QoKnRoaXMpOwotICAgICAgICBt
ZW1vcnlDYWNoZS5hZGp1c3RTaXplKGhhc0NsaWVudHMoKSwgZGVsdGEpOwotICAgIH0KLX0KLQot
dm9pZCBDYWNoZWRSZXNvdXJjZTo6ZGlkQWNjZXNzRGVjb2RlZERhdGEoZG91YmxlIHRpbWVTdGFt
cCkKLXsKLSAgICBtX2xhc3REZWNvZGVkQWNjZXNzVGltZSA9IHRpbWVTdGFtcDsKLSAgICAKLSAg
ICBpZiAoYWxsb3dzQ2FjaGluZygpICYmIGluQ2FjaGUoKSkgewotICAgICAgICBhdXRvJiBtZW1v
cnlDYWNoZSA9IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKTsKLSAgICAgICAgaWYgKG1lbW9yeUNh
Y2hlLmluTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KCp0aGlzKSkgewotICAgICAgICAgICAgbWVt
b3J5Q2FjaGUucmVtb3ZlRnJvbUxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCgqdGhpcyk7Ci0gICAg
ICAgICAgICBtZW1vcnlDYWNoZS5pbnNlcnRJbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCgqdGhp
cyk7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtb3J5Q2FjaGUucHJ1bmVTb29uKCk7Ci0gICAgfQot
fQotICAgIAotdm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0UmVzb3VyY2VUb1JldmFsaWRhdGUoQ2Fj
aGVkUmVzb3VyY2UqIHJlc291cmNlKSAKLXsgCi0gICAgQVNTRVJUKHJlc291cmNlKTsKLSAgICBB
U1NFUlQoIW1fcmVzb3VyY2VUb1JldmFsaWRhdGUpOwotICAgIEFTU0VSVChyZXNvdXJjZSAhPSB0
aGlzKTsKLSAgICBBU1NFUlQobV9oYW5kbGVzVG9SZXZhbGlkYXRlLmlzRW1wdHkoKSk7Ci0gICAg
QVNTRVJUKHJlc291cmNlLT50eXBlKCkgPT0gdHlwZSgpKTsKLSAgICBBU1NFUlQoIXJlc291cmNl
LT5tX3Byb3h5UmVzb3VyY2UpOwotCi0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJl
c291cmNlICVwIHNldFJlc291cmNlVG9SZXZhbGlkYXRlICVwIiwgdGhpcywgcmVzb3VyY2UpOwot
Ci0gICAgcmVzb3VyY2UtPm1fcHJveHlSZXNvdXJjZSA9IHRoaXM7Ci0gICAgbV9yZXNvdXJjZVRv
UmV2YWxpZGF0ZSA9IHJlc291cmNlOwotfQotCi12b2lkIENhY2hlZFJlc291cmNlOjpjbGVhclJl
c291cmNlVG9SZXZhbGlkYXRlKCkgCi17Ci0gICAgQVNTRVJUKG1fcmVzb3VyY2VUb1JldmFsaWRh
dGUpOwotICAgIEFTU0VSVChtX3Jlc291cmNlVG9SZXZhbGlkYXRlLT5tX3Byb3h5UmVzb3VyY2Ug
PT0gdGhpcyk7Ci0KLSAgICBpZiAobV9zd2l0Y2hpbmdDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291
cmNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jlc291cmNlVG9SZXZhbGlkYXRlLT5tX3By
b3h5UmVzb3VyY2UgPSBudWxscHRyOwotICAgIG1fcmVzb3VyY2VUb1JldmFsaWRhdGUtPmRlbGV0
ZUlmUG9zc2libGUoKTsKLQotICAgIG1faGFuZGxlc1RvUmV2YWxpZGF0ZS5jbGVhcigpOwotICAg
IG1fcmVzb3VyY2VUb1JldmFsaWRhdGUgPSBudWxscHRyOwotICAgIGRlbGV0ZUlmUG9zc2libGUo
KTsKLX0KLSAgICAKLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OnN3aXRjaENsaWVudHNUb1JldmFsaWRh
dGVkUmVzb3VyY2UoKQotewotICAgIEFTU0VSVChtX3Jlc291cmNlVG9SZXZhbGlkYXRlKTsKLSAg
ICBBU1NFUlQobV9yZXNvdXJjZVRvUmV2YWxpZGF0ZS0+aW5DYWNoZSgpKTsKLSAgICBBU1NFUlQo
IWluQ2FjaGUoKSk7Ci0KLSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2Ug
JXAgc3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSAlcCIsIHRoaXMsIG1fcmVzb3Vy
Y2VUb1JldmFsaWRhdGUpOwotCi0gICAgbV9zd2l0Y2hpbmdDbGllbnRzVG9SZXZhbGlkYXRlZFJl
c291cmNlID0gdHJ1ZTsKLSAgICBmb3IgKGF1dG8mIGhhbmRsZSA6IG1faGFuZGxlc1RvUmV2YWxp
ZGF0ZSkgewotICAgICAgICBoYW5kbGUtPm1fcmVzb3VyY2UgPSBtX3Jlc291cmNlVG9SZXZhbGlk
YXRlOwotICAgICAgICBtX3Jlc291cmNlVG9SZXZhbGlkYXRlLT5yZWdpc3RlckhhbmRsZShoYW5k
bGUpOwotICAgICAgICAtLW1faGFuZGxlQ291bnQ7Ci0gICAgfQotICAgIEFTU0VSVCghbV9oYW5k
bGVDb3VudCk7Ci0gICAgbV9oYW5kbGVzVG9SZXZhbGlkYXRlLmNsZWFyKCk7Ci0KLSAgICBWZWN0
b3I8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPiBjbGllbnRzVG9Nb3ZlOwotICAgIGZvciAoYXV0byYg
ZW50cnkgOiBtX2NsaWVudHMpIHsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVu
dCA9IGVudHJ5LmtleTsKLSAgICAgICAgdW5zaWduZWQgY291bnQgPSBlbnRyeS52YWx1ZTsKLSAg
ICAgICAgd2hpbGUgKGNvdW50KSB7Ci0gICAgICAgICAgICBjbGllbnRzVG9Nb3ZlLmFwcGVuZChj
bGllbnQpOwotICAgICAgICAgICAgLS1jb3VudDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZv
ciAoYXV0byYgY2xpZW50IDogY2xpZW50c1RvTW92ZSkKLSAgICAgICAgcmVtb3ZlQ2xpZW50KGNs
aWVudCk7Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5pc0VtcHR5KCkpOwotCi0gICAgZm9yIChhdXRv
JiBjbGllbnQgOiBjbGllbnRzVG9Nb3ZlKQotICAgICAgICBtX3Jlc291cmNlVG9SZXZhbGlkYXRl
LT5hZGRDbGllbnRUb1NldChjbGllbnQpOwotICAgIGZvciAoYXV0byYgY2xpZW50IDogY2xpZW50
c1RvTW92ZSkgewotICAgICAgICAvLyBDYWxsaW5nIGRpZEFkZENsaWVudCBtYXkgZG8gYW55dGhp
bmcsIGluY2x1ZGluZyB0cnlpbmcgdG8gY2FuY2VsIHJldmFsaWRhdGlvbi4KLSAgICAgICAgLy8g
QXNzZXJ0IHRoYXQgaXQgZGlkbid0IHN1Y2NlZWQuCi0gICAgICAgIEFTU0VSVChtX3Jlc291cmNl
VG9SZXZhbGlkYXRlKTsKLSAgICAgICAgLy8gQ2FsbGluZyBkaWRBZGRDbGllbnQgZm9yIGEgY2xp
ZW50IG1heSBlbmQgdXAgcmVtb3ZpbmcgYW5vdGhlciBjbGllbnQuIEluIHRoYXQgY2FzZSBpdCB3
b24ndCBiZSBpbiB0aGUgc2V0IGFueW1vcmUuCi0gICAgICAgIGlmIChtX3Jlc291cmNlVG9SZXZh
bGlkYXRlLT5tX2NsaWVudHMuY29udGFpbnMoY2xpZW50KSkKLSAgICAgICAgICAgIG1fcmVzb3Vy
Y2VUb1JldmFsaWRhdGUtPmRpZEFkZENsaWVudChjbGllbnQpOwotICAgIH0KLSAgICBtX3N3aXRj
aGluZ0NsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UgPSBmYWxzZTsKLX0KLQotdm9pZCBDYWNo
ZWRSZXNvdXJjZTo6dXBkYXRlUmVzcG9uc2VBZnRlclJldmFsaWRhdGlvbihjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiB2YWxpZGF0aW5nUmVzcG9uc2UpCi17Ci0gICAgbV9yZXNwb25zZVRpbWVzdGFt
cCA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOwotCi0gICAgdXBkYXRlUmVzcG9u
c2VIZWFkZXJzQWZ0ZXJSZXZhbGlkYXRpb24obV9yZXNwb25zZSwgdmFsaWRhdGluZ1Jlc3BvbnNl
KTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6cmVnaXN0ZXJIYW5kbGUoQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGVCYXNlKiBoKQotewotICAgICsrbV9oYW5kbGVDb3VudDsKLSAgICBpZiAobV9yZXNv
dXJjZVRvUmV2YWxpZGF0ZSkKLSAgICAgICAgbV9oYW5kbGVzVG9SZXZhbGlkYXRlLmFkZChoKTsK
LX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6dW5yZWdpc3RlckhhbmRsZShDYWNoZWRSZXNvdXJj
ZUhhbmRsZUJhc2UqIGgpCi17Ci0gICAgQVNTRVJUKG1faGFuZGxlQ291bnQgPiAwKTsKLSAgICAt
LW1faGFuZGxlQ291bnQ7Ci0KLSAgICBpZiAobV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSkKLSAgICAg
ICAgIG1faGFuZGxlc1RvUmV2YWxpZGF0ZS5yZW1vdmUoaCk7Ci0KLSAgICBpZiAoIW1faGFuZGxl
Q291bnQpCi0gICAgICAgIGRlbGV0ZUlmUG9zc2libGUoKTsKLX0KLQotYm9vbCBDYWNoZWRSZXNv
dXJjZTo6Y2FuVXNlQ2FjaGVWYWxpZGF0b3IoKSBjb25zdAotewotICAgIGlmIChtX2xvYWRpbmcg
fHwgZXJyb3JPY2N1cnJlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9y
ZXNwb25zZS5jYWNoZUNvbnRyb2xDb250YWluc05vU3RvcmUoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJldHVybiBtX3Jlc3BvbnNlLmhhc0NhY2hlVmFsaWRhdG9yRmllbGRzKCk7Ci19
Ci0KLUNhY2hlZFJlc291cmNlOjpSZXZhbGlkYXRpb25EZWNpc2lvbiBDYWNoZWRSZXNvdXJjZTo6
bWFrZVJldmFsaWRhdGlvbkRlY2lzaW9uKENhY2hlUG9saWN5IGNhY2hlUG9saWN5KSBjb25zdAot
eyAgICAKLSAgICBzd2l0Y2ggKGNhY2hlUG9saWN5KSB7Ci0gICAgY2FzZSBDYWNoZVBvbGljeUhp
c3RvcnlCdWZmZXI6Ci0gICAgICAgIHJldHVybiBSZXZhbGlkYXRpb25EZWNpc2lvbjo6Tm87Ci0K
LSAgICBjYXNlIENhY2hlUG9saWN5UmVsb2FkOgotICAgIGNhc2UgQ2FjaGVQb2xpY3lSZXZhbGlk
YXRlOgotICAgICAgICByZXR1cm4gUmV2YWxpZGF0aW9uRGVjaXNpb246Olllc0R1ZVRvQ2FjaGVQ
b2xpY3k7Ci0KLSAgICBjYXNlIENhY2hlUG9saWN5VmVyaWZ5OgotICAgICAgICBpZiAobV9yZXNw
b25zZS5jYWNoZUNvbnRyb2xDb250YWluc05vQ2FjaGUoKSkKLSAgICAgICAgICAgIHJldHVybiBS
ZXZhbGlkYXRpb25EZWNpc2lvbjo6WWVzRHVlVG9Ob0NhY2hlOwotICAgICAgICAvLyBGSVhNRTog
Q2FjaGUtQ29udHJvbDpuby1zdG9yZSBzaG91bGQgcHJldmVudCBzdG9yaW5nLCBub3QgcmV1c2Uu
Ci0gICAgICAgIGlmIChtX3Jlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgpKQot
ICAgICAgICAgICAgcmV0dXJuIFJldmFsaWRhdGlvbkRlY2lzaW9uOjpZZXNEdWVUb05vU3RvcmU7
Ci0KLSAgICAgICAgaWYgKGlzRXhwaXJlZCgpKQotICAgICAgICAgICAgcmV0dXJuIFJldmFsaWRh
dGlvbkRlY2lzaW9uOjpZZXNEdWVUb0V4cGlyZWQ7Ci0KLSAgICAgICAgcmV0dXJuIFJldmFsaWRh
dGlvbkRlY2lzaW9uOjpObzsKLSAgICB9OwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiBSZXZhbGlkYXRpb25EZWNpc2lvbjo6Tm87Ci19Ci0KLWJvb2wgQ2FjaGVkUmVzb3Vy
Y2U6OnJlZGlyZWN0Q2hhaW5BbGxvd3NSZXVzZShSZXVzZUV4cGlyZWRSZWRpcmVjdGlvbk9yTm90
IHJldXNlRXhwaXJlZFJlZGlyZWN0aW9uKSBjb25zdAotewotICAgIHJldHVybiBXZWJDb3JlOjpy
ZWRpcmVjdENoYWluQWxsb3dzUmV1c2UobV9yZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMsIHJldXNl
RXhwaXJlZFJlZGlyZWN0aW9uKTsKLX0KLQotYm9vbCBDYWNoZWRSZXNvdXJjZTo6dmFyeUhlYWRl
clZhbHVlc01hdGNoKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgQ2FjaGVk
UmVzb3VyY2VMb2FkZXImIGNhY2hlZFJlc291cmNlTG9hZGVyKQotewotICAgIGlmIChtX3Zhcnlp
bmdIZWFkZXJWYWx1ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFJl
c291cmNlUmVxdWVzdCByZXF1ZXN0V2l0aEZ1bGxIZWFkZXJzKHJlcXVlc3QpOwotICAgIGFkZEFk
ZGl0aW9uYWxSZXF1ZXN0SGVhZGVyc1RvUmVxdWVzdChyZXF1ZXN0V2l0aEZ1bGxIZWFkZXJzLCBj
YWNoZWRSZXNvdXJjZUxvYWRlciwgKnRoaXMpOwotCi0gICAgcmV0dXJuIHZlcmlmeVZhcnlpbmdS
ZXF1ZXN0SGVhZGVycyhtX3ZhcnlpbmdIZWFkZXJWYWx1ZXMsIHJlcXVlc3RXaXRoRnVsbEhlYWRl
cnMsIG1fc2Vzc2lvbklEKTsKLX0KLQotdW5zaWduZWQgQ2FjaGVkUmVzb3VyY2U6Om92ZXJoZWFk
U2l6ZSgpIGNvbnN0Ci17Ci0gICAgc3RhdGljIGNvbnN0IGludCBrQXZlcmFnZUNsaWVudHNIYXNo
TWFwU2l6ZSA9IDM4NDsKLSAgICByZXR1cm4gc2l6ZW9mKENhY2hlZFJlc291cmNlKSArIG1fcmVz
cG9uc2UubWVtb3J5VXNhZ2UoKSArIGtBdmVyYWdlQ2xpZW50c0hhc2hNYXBTaXplICsgbV9yZXNv
dXJjZVJlcXVlc3QudXJsKCkuc3RyaW5nKCkubGVuZ3RoKCkgKiAyOwotfQotCi1ib29sIENhY2hl
ZFJlc291cmNlOjphcmVBbGxDbGllbnRzWE1MSHR0cFJlcXVlc3RzKCkgY29uc3QKLXsKLSAgICBp
ZiAodHlwZSgpICE9IFJhd1Jlc291cmNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBm
b3IgKGF1dG8mIGNsaWVudCA6IG1fY2xpZW50cykgewotICAgICAgICBpZiAoIWNsaWVudC5rZXkt
PmlzWE1MSHR0cFJlcXVlc3QoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldExvYWRQcmlvcml0
eShjb25zdCBPcHRpb25hbDxSZXNvdXJjZUxvYWRQcmlvcml0eT4mIGxvYWRQcmlvcml0eSkKLXsK
LSAgICBpZiAobG9hZFByaW9yaXR5KQotICAgICAgICBtX2xvYWRQcmlvcml0eSA9IGxvYWRQcmlv
cml0eS52YWx1ZSgpOwotICAgIGVsc2UKLSAgICAgICAgbV9sb2FkUHJpb3JpdHkgPSBkZWZhdWx0
UHJpb3JpdHlGb3JSZXNvdXJjZVR5cGUodHlwZSgpKTsKLX0KLQotaW5saW5lIENhY2hlZFJlc291
cmNlOjpDYWxsYmFjazo6Q2FsbGJhY2soQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlLCBDYWNoZWRS
ZXNvdXJjZUNsaWVudCYgY2xpZW50KQotICAgIDogbV9yZXNvdXJjZShyZXNvdXJjZSkKLSAgICAs
IG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1fdGltZXIoKnRoaXMsICZDYWxsYmFjazo6dGltZXJG
aXJlZCkKLXsKLSAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotaW5saW5lIHZvaWQg
Q2FjaGVkUmVzb3VyY2U6OkNhbGxiYWNrOjpjYW5jZWwoKQotewotICAgIGlmIChtX3RpbWVyLmlz
QWN0aXZlKCkpCi0gICAgICAgIG1fdGltZXIuc3RvcCgpOwotfQotCi12b2lkIENhY2hlZFJlc291
cmNlOjpDYWxsYmFjazo6dGltZXJGaXJlZCgpCi17Ci0gICAgbV9yZXNvdXJjZS5kaWRBZGRDbGll
bnQoJm1fY2xpZW50KTsKLX0KLQotI2lmIFVTRShGT1VOREFUSU9OKSB8fCBVU0UoU09VUCkKLQot
dm9pZCBDYWNoZWRSZXNvdXJjZTo6dHJ5UmVwbGFjZUVuY29kZWREYXRhKFNoYXJlZEJ1ZmZlciYg
bmV3QnVmZmVyKQotewotICAgIGlmICghbV9kYXRhKQotICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgaWYgKCFtYXlUcnlSZXBsYWNlRW5jb2RlZERhdGEoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gV2UgaGF2ZSB0byBkbyB0aGUgbWVtY21wIGJlY2F1c2Ugd2UgY2FuJ3QgdGVsbCBpZiB0
aGUgcmVwbGFjZW1lbnQgZmlsZSBiYWNrZWQgZGF0YSBpcyBmb3IgdGhlCi0gICAgLy8gc2FtZSBy
ZXNvdXJjZSBvciBpZiB3ZSBtYWRlIGEgc2Vjb25kIHJlcXVlc3Qgd2l0aCB0aGUgc2FtZSBVUkwg
d2hpY2ggZ2F2ZSB1cyBhIGRpZmZlcmVudAotICAgIC8vIHJlc291cmNlLiBXZSBoYXZlIHNlZW4g
dGhpcyBoYXBwZW4gZm9yIGNhY2hlZCBQT1NUIHJlc291cmNlcy4KLSAgICBpZiAobV9kYXRhLT5z
aXplKCkgIT0gbmV3QnVmZmVyLnNpemUoKSB8fCBtZW1jbXAobV9kYXRhLT5kYXRhKCksIG5ld0J1
ZmZlci5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1fZGF0YS0+dHJ5UmVwbGFjZUNvbnRlbnRzV2l0aFBsYXRmb3JtQnVmZmVyKG5ld0J1ZmZlcikp
Ci0gICAgICAgIGRpZFJlcGxhY2VTaGFyZWRCdWZmZXJDb250ZW50cygpOwotfQotCi0jZW5kaWYK
LQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRiOTU3ZDFiYjNjNTc5ZDVmOTk3ZGM5ZDg5ZDM1
YWI4YTU3MzNhNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDQwMCArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtu
b2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11
ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdl
aW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0qLwotCi0jaWZuZGVmIENhY2hlZFJlc291cmNlX2gKLSNkZWZpbmUgQ2FjaGVk
UmVzb3VyY2VfaAotCi0jaW5jbHVkZSAiQ2FjaGVQb2xpY3kuaCIKLSNpbmNsdWRlICJDYWNoZVZh
bGlkYXRpb24uaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCi0jaW5jbHVkZSAiUmVz
b3VyY2VFcnJvci5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFByaW9yaXR5LmgiCi0jaW5jbHVk
ZSAiUmVzb3VyY2VMb2FkZXJPcHRpb25zLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0Lmgi
Ci0jaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgotI2luY2x1ZGUgIlNlc3Npb25JRC5oIgot
I2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8dGltZS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNo
Q291bnRlZFNldC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1R5
cGVDYXN0cy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBNZW1vcnlDYWNoZTsK
LWNsYXNzIENhY2hlZFJlc291cmNlQ2xpZW50OwotY2xhc3MgQ2FjaGVkUmVzb3VyY2VIYW5kbGVC
YXNlOwotY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7Ci1jbGFzcyBJbnNwZWN0b3JSZXNvdXJj
ZTsKLWNsYXNzIFNlY3VyaXR5T3JpZ2luOwotY2xhc3MgU2hhcmVkQnVmZmVyOwotY2xhc3MgU3Vi
cmVzb3VyY2VMb2FkZXI7Ci1jbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyOwotCi0vLyBBIHJlc291
cmNlIHRoYXQgaXMgaGVsZCBpbiB0aGUgY2FjaGUuIENsYXNzZXMgd2hvIHdhbnQgdG8gdXNlIHRo
aXMgb2JqZWN0IHNob3VsZCBkZXJpdmUKLS8vIGZyb20gQ2FjaGVkUmVzb3VyY2VDbGllbnQsIHRv
IGdldCB0aGUgZnVuY3Rpb24gY2FsbHMgaW4gY2FzZSB0aGUgcmVxdWVzdGVkIGRhdGEgaGFzIGFy
cml2ZWQuCi0vLyBUaGlzIGNsYXNzIGFsc28gZG9lcyB0aGUgYWN0dWFsIGNvbW11bmljYXRpb24g
d2l0aCB0aGUgbG9hZGVyIHRvIG9idGFpbiB0aGUgcmVzb3VyY2UgZnJvbSB0aGUgbmV0d29yay4K
LWNsYXNzIENhY2hlZFJlc291cmNlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDYWNoZWRS
ZXNvdXJjZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIGZyaWVuZCBjbGFzcyBNZW1v
cnlDYWNoZTsKLSAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2U7Ci0gICAgCi1wdWJs
aWM6Ci0gICAgZW51bSBUeXBlIHsKLSAgICAgICAgTWFpblJlc291cmNlLAotICAgICAgICBJbWFn
ZVJlc291cmNlLAotICAgICAgICBDU1NTdHlsZVNoZWV0LAotICAgICAgICBTY3JpcHQsCi0gICAg
ICAgIEZvbnRSZXNvdXJjZSwKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgICAgICBTVkdGb250
UmVzb3VyY2UsCi0jZW5kaWYKLSAgICAgICAgTWVkaWFSZXNvdXJjZSwKLSAgICAgICAgUmF3UmVz
b3VyY2UsCi0gICAgICAgIFNWR0RvY3VtZW50UmVzb3VyY2UKLSNpZiBFTkFCTEUoWFNMVCkKLSAg
ICAgICAgLCBYU0xTdHlsZVNoZWV0Ci0jZW5kaWYKLSNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkK
LSAgICAgICAgLCBMaW5rUHJlZmV0Y2gKLSAgICAgICAgLCBMaW5rU3VicmVzb3VyY2UKLSNlbmRp
ZgotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICAgICAgLCBUZXh0VHJhY2tSZXNvdXJjZQot
I2VuZGlmCi0gICAgfTsKLQotICAgIGVudW0gU3RhdHVzIHsKLSAgICAgICAgVW5rbm93biwgICAg
ICAvLyBsZXQgY2FjaGUgZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCBpdAotICAgICAgICBQZW5kaW5n
LCAgICAgIC8vIG9ubHkgcGFydGlhbGx5IGxvYWRlZAotICAgICAgICBDYWNoZWQsICAgICAgIC8v
IHJlZ3VsYXIgY2FzZQotICAgICAgICBMb2FkRXJyb3IsCi0gICAgICAgIERlY29kZUVycm9yCi0g
ICAgfTsKLQotICAgIENhY2hlZFJlc291cmNlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFR5cGUs
IFNlc3Npb25JRCk7Ci0gICAgdmlydHVhbCB+Q2FjaGVkUmVzb3VyY2UoKTsKLQotICAgIHZpcnR1
YWwgdm9pZCBsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyJiwgY29uc3QgUmVzb3VyY2VMb2FkZXJP
cHRpb25zJik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJikg
eyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmco
KTsgfQotICAgIHZpcnR1YWwgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogdGV4dFJlc291cmNl
RGVjb2RlcigpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYWRk
RGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXImKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkRGF0YShjb25z
dCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hM
b2FkaW5nKFNoYXJlZEJ1ZmZlciopOwotICAgIHZpcnR1YWwgdm9pZCBlcnJvcihDYWNoZWRSZXNv
dXJjZTo6U3RhdHVzKTsKLQotICAgIHZvaWQgc2V0UmVzb3VyY2VFcnJvcihjb25zdCBSZXNvdXJj
ZUVycm9yJiBlcnJvcikgeyBtX2Vycm9yID0gZXJyb3I7IH0KLSAgICBjb25zdCBSZXNvdXJjZUVy
cm9yJiByZXNvdXJjZUVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvcjsgfQotCi0gICAgdmly
dHVhbCBib29sIHNob3VsZElnbm9yZUhUVFBTdGF0dXNDb2RlRXJyb3JzKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KLQotICAgIFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KCkgeyBy
ZXR1cm4gbV9yZXNvdXJjZVJlcXVlc3Q7IH0KLSAgICBjb25zdCBVUkwmIHVybCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpO30KLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElU
SU9OSU5HKQotICAgIGNvbnN0IFN0cmluZyYgY2FjaGVQYXJ0aXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3Jlc291cmNlUmVxdWVzdC5jYWNoZVBhcnRpdGlvbigpOyB9Ci0jZW5kaWYKLSAgICBTZXNz
aW9uSUQgc2Vzc2lvbklEKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KLSAgICBUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihtX3R5cGUpOyB9Ci0gICAg
Ci0gICAgUmVzb3VyY2VMb2FkUHJpb3JpdHkgbG9hZFByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4g
bV9sb2FkUHJpb3JpdHk7IH0KLSAgICB2b2lkIHNldExvYWRQcmlvcml0eShjb25zdCBPcHRpb25h
bDxSZXNvdXJjZUxvYWRQcmlvcml0eT4mKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRk
Q2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBy
ZW1vdmVDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKTsKLSAgICBib29sIGhhc0NsaWVudHMo
KSBjb25zdCB7IHJldHVybiAhbV9jbGllbnRzLmlzRW1wdHkoKSB8fCAhbV9jbGllbnRzQXdhaXRp
bmdDYWxsYmFjay5pc0VtcHR5KCk7IH0KLSAgICBib29sIGhhc0NsaWVudChDYWNoZWRSZXNvdXJj
ZUNsaWVudCogY2xpZW50KSB7IHJldHVybiBtX2NsaWVudHMuY29udGFpbnMoY2xpZW50KSB8fCBt
X2NsaWVudHNBd2FpdGluZ0NhbGxiYWNrLmNvbnRhaW5zKGNsaWVudCk7IH0KLSAgICBib29sIGRl
bGV0ZUlmUG9zc2libGUoKTsKLQotICAgIGVudW0gUHJlbG9hZFJlc3VsdCB7Ci0gICAgICAgIFBy
ZWxvYWROb3RSZWZlcmVuY2VkLAotICAgICAgICBQcmVsb2FkUmVmZXJlbmNlZCwKLSAgICAgICAg
UHJlbG9hZFJlZmVyZW5jZWRXaGlsZUxvYWRpbmcsCi0gICAgICAgIFByZWxvYWRSZWZlcmVuY2Vk
V2hpbGVDb21wbGV0ZQotICAgIH07Ci0gICAgUHJlbG9hZFJlc3VsdCBwcmVsb2FkUmVzdWx0KCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UHJlbG9hZFJlc3VsdD4obV9wcmVsb2FkUmVzdWx0
KTsgfQotCi0gICAgdmlydHVhbCB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVu
dCopOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZW1vdmVDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGll
bnQqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYWxsQ2xpZW50c1JlbW92ZWQoKSB7IH0KLSAgICB2
b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVlZGVkKCk7Ci0KLSAgICB1bnNpZ25lZCBjb3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50cy5zaXplKCk7IH0KLQotICAgIFN0YXR1cyBzdGF0dXMo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxTdGF0dXM+KG1fc3RhdHVzKTsgfQotICAgIHZv
aWQgc2V0U3RhdHVzKFN0YXR1cyBzdGF0dXMpIHsgbV9zdGF0dXMgPSBzdGF0dXM7IH0KLQotICAg
IHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBlbmNvZGVkU2l6ZSgpICsgZGVjb2RlZFNp
emUoKSArIG92ZXJoZWFkU2l6ZSgpOyB9Ci0gICAgdW5zaWduZWQgZW5jb2RlZFNpemUoKSBjb25z
dCB7IHJldHVybiBtX2VuY29kZWRTaXplOyB9Ci0gICAgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBj
b25zdCB7IHJldHVybiBtX2RlY29kZWRTaXplOyB9Ci0gICAgdW5zaWduZWQgb3ZlcmhlYWRTaXpl
KCkgY29uc3Q7Ci0gICAgCi0gICAgYm9vbCBpc0xvYWRlZCgpIGNvbnN0IHsgcmV0dXJuICFtX2xv
YWRpbmc7IH0gLy8gRklYTUUuIE1ldGhvZCBuYW1lIGlzIGluYWNjdXJhdGUuIExvYWRpbmcgbWln
aHQgbm90IGhhdmUgc3RhcnRlZCB5ZXQuCi0KLSAgICBib29sIGlzTG9hZGluZygpIGNvbnN0IHsg
cmV0dXJuIG1fbG9hZGluZzsgfQotICAgIHZvaWQgc2V0TG9hZGluZyhib29sIGIpIHsgbV9sb2Fk
aW5nID0gYjsgfQotICAgIHZpcnR1YWwgYm9vbCBzdGlsbE5lZWRzTG9hZCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9Ci0KLSAgICBTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyKCkgeyByZXR1cm4g
bV9sb2FkZXIuZ2V0KCk7IH0KLQotICAgIGJvb2wgYXJlQWxsQ2xpZW50c1hNTEh0dHBSZXF1ZXN0
cygpIGNvbnN0OwotCi0gICAgYm9vbCBpc0ltYWdlKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09
IEltYWdlUmVzb3VyY2U7IH0KLSAgICAvLyBGSVhNRTogQ2FjaGVkUmF3UmVzb3VyY2UgY291bGQg
YmUgYSBtYWluIHJlc291cmNlLCBhbiBhdWRpby92aWRlbyByZXNvdXJjZSwgb3IgYSByYXcgWEhS
L2ljb24gcmVzb3VyY2UuCi0gICAgYm9vbCBpc01haW5Pck1lZGlhT3JSYXdSZXNvdXJjZSgpIGNv
bnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBNYWluUmVzb3VyY2UgfHwgdHlwZSgpID09IE1lZGlhUmVz
b3VyY2UgfHwgdHlwZSgpID09IFJhd1Jlc291cmNlOyB9Ci0gICAgYm9vbCBpZ25vcmVGb3JSZXF1
ZXN0Q291bnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcmVzb3VyY2VSZXF1ZXN0
Lmlnbm9yZUZvclJlcXVlc3RDb3VudCgpCi0gICAgICAgICAgICB8fCB0eXBlKCkgPT0gTWFpblJl
c291cmNlCi0jaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCi0gICAgICAgICAgICB8fCB0eXBlKCkg
PT0gTGlua1ByZWZldGNoCi0gICAgICAgICAgICB8fCB0eXBlKCkgPT0gTGlua1N1YnJlc291cmNl
Ci0jZW5kaWYKLSAgICAgICAgICAgIHx8IHR5cGUoKSA9PSBSYXdSZXNvdXJjZTsKLSAgICB9Ci0K
LSAgICB1bnNpZ25lZCBhY2Nlc3NDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZXNzQ291bnQ7
IH0KLSAgICB2b2lkIGluY3JlYXNlQWNjZXNzQ291bnQoKSB7IG1fYWNjZXNzQ291bnQrKzsgfQot
Ci0gICAgLy8gQ29tcHV0ZXMgdGhlIHN0YXR1cyBvZiBhbiBvYmplY3QgYWZ0ZXIgbG9hZGluZy4g
IAotICAgIC8vIFVwZGF0ZXMgdGhlIGV4cGlyZSBkYXRlIG9uIHRoZSBjYWNoZSBlbnRyeSBmaWxl
Ci0gICAgdm9pZCBmaW5pc2goKTsKLQotICAgIGJvb2wgcGFzc2VzQWNjZXNzQ29udHJvbENoZWNr
KFNlY3VyaXR5T3JpZ2luJik7Ci0gICAgYm9vbCBwYXNzZXNTYW1lT3JpZ2luUG9saWN5Q2hlY2so
U2VjdXJpdHlPcmlnaW4mKTsKLQotICAgIC8vIENhbGxlZCBieSB0aGUgY2FjaGUgaWYgdGhlIG9i
amVjdCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGNhY2hlCi0gICAgLy8gd2hpbGUgc3RpbGwg
YmVpbmcgcmVmZXJlbmNlZC4gVGhpcyBtZWFucyB0aGUgb2JqZWN0IHNob3VsZCBkZWxldGUgaXRz
ZWxmCi0gICAgLy8gaWYgdGhlIG51bWJlciBvZiBjbGllbnRzIG9ic2VydmluZyBpdCBldmVyIGRy
b3BzIHRvIDAuCi0gICAgLy8gVGhlIHJlc291cmNlIGNhbiBiZSBicm91Z2h0IGJhY2sgdG8gY2Fj
aGUgYWZ0ZXIgc3VjY2Vzc2Z1bCByZXZhbGlkYXRpb24uCi0gICAgdm9pZCBzZXRJbkNhY2hlKGJv
b2wgaW5DYWNoZSkgeyBtX2luQ2FjaGUgPSBpbkNhY2hlOyB9Ci0gICAgYm9vbCBpbkNhY2hlKCkg
Y29uc3QgeyByZXR1cm4gbV9pbkNhY2hlOyB9Ci0gICAgCi0gICAgdm9pZCBjbGVhckxvYWRlcigp
OwotCi0gICAgU2hhcmVkQnVmZmVyKiByZXNvdXJjZUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YS5nZXQoKTsgfQotCi0gICAgdmlydHVhbCB2b2lkIHJlZGlyZWN0UmVjZWl2ZWQoUmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgIHZpcnR1YWwgdm9pZCBy
ZXNwb25zZVJlY2VpdmVkKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLSAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkQ2FjaGVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyByZXR1cm4g
dHJ1ZTsgfQotICAgIHZvaWQgc2V0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwot
ICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKCkgY29uc3QgeyByZXR1cm4gbV9y
ZXNwb25zZTsgfQotICAgIC8vIFRoaXMgaXMgdGhlIHNhbWUgYXMgcmVzcG9uc2UoKSBleGNlcHQg
YWZ0ZXIgSFRUUCByZWRpcmVjdCB0byBkYXRhOiBVUkwuCi0gICAgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2VGb3JTYW1lT3JpZ2luUG9saWN5Q2hlY2tzKCkgY29uc3Q7Ci0KLSAgICB2
b2lkIHNldENyb3NzT3JpZ2luKCk7Ci0gICAgYm9vbCBpc0Nyb3NzT3JpZ2luKCkgY29uc3Q7Ci0g
ICAgYm9vbCBpc0NsZWFuKCkgY29uc3Q7Ci0gICAgUmVzb3VyY2VSZXNwb25zZTo6VGFpbnRpbmcg
cmVzcG9uc2VUYWludGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2VUYWludGluZzsgfQot
Ci0gICAgdm9pZCBsb2FkRnJvbShjb25zdCBDYWNoZWRSZXNvdXJjZSYsIGNvbnN0IFJlc291cmNl
TG9hZGVyT3B0aW9ucyYsIENhY2hlZFJlc291cmNlTG9hZGVyJik7Ci0KLSAgICBTZWN1cml0eU9y
aWdpbiogb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW4uZ2V0KCk7IH0KLQotICAgIGJv
b2wgY2FuRGVsZXRlKCkgY29uc3QgeyByZXR1cm4gIWhhc0NsaWVudHMoKSAmJiAhbV9sb2FkZXIg
JiYgIW1fcHJlbG9hZENvdW50ICYmICFtX2hhbmRsZUNvdW50ICYmICFtX3Jlc291cmNlVG9SZXZh
bGlkYXRlICYmICFtX3Byb3h5UmVzb3VyY2U7IH0KLSAgICBib29sIGhhc09uZUhhbmRsZSgpIGNv
bnN0IHsgcmV0dXJuIG1faGFuZGxlQ291bnQgPT0gMTsgfQotCi0gICAgYm9vbCBpc0V4cGlyZWQo
KSBjb25zdDsKLQotICAgIC8vIExpc3Qgb2YgYWNjZXB0YWJsZSBNSU1FIHR5cGVzIHNlcGFyYXRl
ZCBieSAiLCIuCi0gICAgLy8gQSBNSU1FIHR5cGUgbWF5IGNvbnRhaW4gYSB3aWxkY2FyZCwgZS5n
LiAidGV4dC8qIi4KLSAgICBTdHJpbmcgYWNjZXB0KCkgY29uc3QgeyByZXR1cm4gbV9hY2NlcHQ7
IH0KLSAgICB2b2lkIHNldEFjY2VwdChjb25zdCBTdHJpbmcmIGFjY2VwdCkgeyBtX2FjY2VwdCA9
IGFjY2VwdDsgfQotCi0gICAgdm9pZCBjYW5jZWxMb2FkKCk7Ci0gICAgYm9vbCB3YXNDYW5jZWxl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3IuaXNDYW5jZWxsYXRpb24oKTsgfQotICAgIGJvb2wg
ZXJyb3JPY2N1cnJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzID09IExvYWRFcnJvciB8fCBt
X3N0YXR1cyA9PSBEZWNvZGVFcnJvcjsgfQotICAgIGJvb2wgbG9hZEZhaWxlZE9yQ2FuY2VsZWQo
KSBjb25zdCB7IHJldHVybiAhbV9lcnJvci5pc051bGwoKTsgfQotCi0gICAgYm9vbCBzaG91bGRT
ZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9vcHRpb25zLnNlbmRM
b2FkQ2FsbGJhY2tzID09IFNlbmRDYWxsYmFja3M7IH0KLSAgICBEYXRhQnVmZmVyaW5nUG9saWN5
IGRhdGFCdWZmZXJpbmdQb2xpY3koKSBjb25zdCB7IHJldHVybiBtX29wdGlvbnMuZGF0YUJ1ZmZl
cmluZ1BvbGljeTsgfQotCi0gICAgYm9vbCBhbGxvd3NDYWNoaW5nKCkgY29uc3QgeyByZXR1cm4g
bV9vcHRpb25zLmNhY2hpbmdQb2xpY3kgPT0gQ2FjaGluZ1BvbGljeTo6QWxsb3dDYWNoaW5nOyB9
Ci0gICAgY29uc3QgRmV0Y2hPcHRpb25zJiBvcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9vcHRp
b25zOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKCkgeyB9Ci0KLSAg
ICB2b2lkIHNldE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKENhY2hlZFJlc291cmNlTG9hZGVy
KiBjYWNoZWRSZXNvdXJjZUxvYWRlcikgeyBtX293bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyID0g
Y2FjaGVkUmVzb3VyY2VMb2FkZXI7IH0KLSAgICAKLSAgICBib29sIGlzUHJlbG9hZGVkKCkgY29u
c3QgeyByZXR1cm4gbV9wcmVsb2FkQ291bnQ7IH0KLSAgICB2b2lkIGluY3JlYXNlUHJlbG9hZENv
dW50KCkgeyArK21fcHJlbG9hZENvdW50OyB9Ci0gICAgdm9pZCBkZWNyZWFzZVByZWxvYWRDb3Vu
dCgpIHsgQVNTRVJUKG1fcHJlbG9hZENvdW50KTsgLS1tX3ByZWxvYWRDb3VudDsgfQotICAgIAot
ICAgIHZvaWQgcmVnaXN0ZXJIYW5kbGUoQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKiBoKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVucmVnaXN0ZXJIYW5kbGUoQ2FjaGVkUmVzb3VyY2VIYW5k
bGVCYXNlKiBoKTsKLSAgICAKLSAgICBib29sIGNhblVzZUNhY2hlVmFsaWRhdG9yKCkgY29uc3Q7
Ci0KLSAgICBlbnVtIGNsYXNzIFJldmFsaWRhdGlvbkRlY2lzaW9uIHsgTm8sIFllc0R1ZVRvQ2Fj
aGVQb2xpY3ksIFllc0R1ZVRvTm9TdG9yZSwgWWVzRHVlVG9Ob0NhY2hlLCBZZXNEdWVUb0V4cGly
ZWQgfTsKLSAgICB2aXJ0dWFsIFJldmFsaWRhdGlvbkRlY2lzaW9uIG1ha2VSZXZhbGlkYXRpb25E
ZWNpc2lvbihDYWNoZVBvbGljeSkgY29uc3Q7Ci0gICAgYm9vbCByZWRpcmVjdENoYWluQWxsb3dz
UmV1c2UoUmV1c2VFeHBpcmVkUmVkaXJlY3Rpb25Pck5vdCkgY29uc3Q7Ci0KLSAgICBib29sIHZh
cnlIZWFkZXJWYWx1ZXNNYXRjaChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBDYWNoZWRS
ZXNvdXJjZUxvYWRlciYpOwotCi0gICAgYm9vbCBpc0NhY2hlVmFsaWRhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZTsgfQotICAgIENhY2hlZFJlc291cmNlKiByZXNv
dXJjZVRvUmV2YWxpZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VUb1JldmFsaWRhdGU7
IH0KLSAgICAKLSAgICAvLyBIVFRQIHJldmFsaWRhdGlvbiBzdXBwb3J0IG1ldGhvZHMgZm9yIENh
Y2hlZFJlc291cmNlTG9hZGVyLgotICAgIHZvaWQgc2V0UmVzb3VyY2VUb1JldmFsaWRhdGUoQ2Fj
aGVkUmVzb3VyY2UqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0
ZWRSZXNvdXJjZSgpOwotICAgIHZvaWQgY2xlYXJSZXNvdXJjZVRvUmV2YWxpZGF0ZSgpOwotICAg
IHZvaWQgdXBkYXRlUmVzcG9uc2VBZnRlclJldmFsaWRhdGlvbihjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiB2YWxpZGF0aW5nUmVzcG9uc2UpOwotICAgIGJvb2wgdmFsaWRhdGlvbkluUHJvZ3Jlc3Mo
KSBjb25zdCB7IHJldHVybiBtX3Byb3h5UmVzb3VyY2U7IH0KLSAgICBib29sIHZhbGlkYXRpb25D
b21wbGV0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9wcm94eVJlc291cmNlICYmIG1fcHJveHlSZXNv
dXJjZS0+bV9zd2l0Y2hpbmdDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNlOyB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIC8qIGJ5dGVzU2VudCAq
LywgdW5zaWduZWQgbG9uZyBsb25nIC8qIHRvdGFsQnl0ZXNUb0JlU2VudCAqLykgeyB9Ci0KLSAg
ICB2b2lkIHNldExvYWRGaW5pc2hUaW1lKGRvdWJsZSBmaW5pc2hUaW1lKSB7IG1fbG9hZEZpbmlz
aFRpbWUgPSBmaW5pc2hUaW1lOyB9Ci0gICAgZG91YmxlIGxvYWRGaW5pc2hUaW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9sb2FkRmluaXNoVGltZTsgfQotCi0jaWYgVVNFKEZPVU5EQVRJT04pIHx8IFVT
RShTT1VQKQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdHJ5UmVwbGFjZUVuY29kZWREYXRhKFNo
YXJlZEJ1ZmZlciYpOwotI2VuZGlmCi0KLSNpZiBVU0UoU09VUCkKLSAgICB2aXJ0dWFsIGNoYXIq
IGdldE9yQ3JlYXRlUmVhZEJ1ZmZlcihzaXplX3QgLyogcmVxdWVzdGVkU2l6ZSAqLywgc2l6ZV90
JiAvKiBhY3R1YWxTaXplICovKSB7IHJldHVybiBudWxscHRyOyB9Ci0jZW5kaWYKLQotICAgIHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllckZvckxvYWRXaXRob3V0UmVzb3VyY2VMb2FkZXIoKSBjb25z
dCB7IHJldHVybiBtX2lkZW50aWZpZXJGb3JMb2FkV2l0aG91dFJlc291cmNlTG9hZGVyOyB9Ci0g
ICAgc3RhdGljIFJlc291cmNlTG9hZFByaW9yaXR5IGRlZmF1bHRQcmlvcml0eUZvclJlc291cmNl
VHlwZShUeXBlKTsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgc2V0RW5jb2RlZFNpemUodW5zaWdu
ZWQpOwotICAgIHZvaWQgc2V0RGVjb2RlZFNpemUodW5zaWduZWQpOwotICAgIHZvaWQgZGlkQWNj
ZXNzRGVjb2RlZERhdGEoZG91YmxlIHRpbWVTdGFtcCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVwbGFjZVNoYXJlZEJ1ZmZlckNvbnRlbnRzKCkgeyB9Ci0KLSAgICAvLyBGSVhNRTogTWFrZSB0
aGUgcmVzdCBvZiB0aGVzZSBkYXRhIG1lbWJlcnMgcHJpdmF0ZSBhbmQgdXNlIGZ1bmN0aW9ucyBp
biBkZXJpdmVkIGNsYXNzZXMgaW5zdGVhZC4KLSAgICBIYXNoQ291bnRlZFNldDxDYWNoZWRSZXNv
dXJjZUNsaWVudCo+IG1fY2xpZW50czsKLSAgICBSZXNvdXJjZVJlcXVlc3QgbV9yZXNvdXJjZVJl
cXVlc3Q7Ci0gICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBtX2xvYWRlcjsKLSAgICBSZXNv
dXJjZUxvYWRlck9wdGlvbnMgbV9vcHRpb25zOwotICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNw
b25zZTsKLSAgICBSZXNvdXJjZVJlc3BvbnNlOjpUYWludGluZyBtX3Jlc3BvbnNlVGFpbnRpbmcg
eyBSZXNvdXJjZVJlc3BvbnNlOjpUYWludGluZzo6QmFzaWMgfTsKLSAgICBSZXNvdXJjZVJlc3Bv
bnNlIG1fcmVkaXJlY3RSZXNwb25zZUZvclNhbWVPcmlnaW5Qb2xpY3lDaGVja3M7Ci0gICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOwotICAgIERlZmVycmFibGVPbmVTaG90VGltZXIgbV9k
ZWNvZGVkRGF0YURlbGV0aW9uVGltZXI7Ci0KLXByaXZhdGU6Ci0gICAgY2xhc3MgQ2FsbGJhY2s7
Ci0KLSAgICBib29sIGFkZENsaWVudFRvU2V0KENhY2hlZFJlc291cmNlQ2xpZW50Kik7Ci0KLSAg
ICB2b2lkIGRlY29kZWREYXRhRGVsZXRpb25UaW1lckZpcmVkKCk7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgY2hlY2tOb3RpZnkoKTsKLSAgICB2aXJ0dWFsIGJvb2wgbWF5VHJ5UmVwbGFjZUVuY29kZWRE
YXRhKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Qm9keURh
dGFGcm9tKGNvbnN0IENhY2hlZFJlc291cmNlJikgeyB9Ci0KLSAgICBzdGQ6OmNocm9ubzo6bWlj
cm9zZWNvbmRzIGZyZXNobmVzc0xpZmV0aW1lKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSBjb25z
dDsKLQotICAgIHZvaWQgYWRkQWRkaXRpb25hbFJlcXVlc3RIZWFkZXJzKENhY2hlZFJlc291cmNl
TG9hZGVyJik7Ci0gICAgdm9pZCBjb21wdXRlT3JpZ2luKENhY2hlZFJlc291cmNlTG9hZGVyJik7
Ci0gICAgdm9pZCBmYWlsQmVmb3JlU3RhcnRpbmcoKTsKLQotICAgIEhhc2hNYXA8Q2FjaGVkUmVz
b3VyY2VDbGllbnQqLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbGJhY2s+PiBtX2NsaWVudHNBd2FpdGlu
Z0NhbGxiYWNrOwotICAgIFNlc3Npb25JRCBtX3Nlc3Npb25JRDsKLSAgICBTdHJpbmcgbV9hY2Nl
cHQ7Ci0gICAgUmVzb3VyY2VMb2FkUHJpb3JpdHkgbV9sb2FkUHJpb3JpdHk7Ci0gICAgc3RkOjpj
aHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtX3Jlc3BvbnNlVGltZXN0YW1wOwotCi0g
ICAgU3RyaW5nIG1fZnJhZ21lbnRJZGVudGlmaWVyRm9yUmVxdWVzdDsKLQotICAgIFJlc291cmNl
RXJyb3IgbV9lcnJvcjsKLSAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1fb3JpZ2luOwotCi0g
ICAgZG91YmxlIG1fbGFzdERlY29kZWRBY2Nlc3NUaW1lOyAvLyBVc2VkIGFzIGEgInRocmFzaCBn
dWFyZCIgaW4gdGhlIGNhY2hlCi0gICAgZG91YmxlIG1fbG9hZEZpbmlzaFRpbWU7Ci0KLSAgICB1
bnNpZ25lZCBtX2VuY29kZWRTaXplOwotICAgIHVuc2lnbmVkIG1fZGVjb2RlZFNpemU7Ci0gICAg
dW5zaWduZWQgbV9hY2Nlc3NDb3VudDsKLSAgICB1bnNpZ25lZCBtX2hhbmRsZUNvdW50OwotICAg
IHVuc2lnbmVkIG1fcHJlbG9hZENvdW50OwotCi0gICAgdW5zaWduZWQgbV9wcmVsb2FkUmVzdWx0
IDogMjsgLy8gUHJlbG9hZFJlc3VsdAotCi0gICAgYm9vbCBtX3JlcXVlc3RlZEZyb21OZXR3b3Jr
aW5nTGF5ZXIgOiAxOwotCi0gICAgYm9vbCBtX2luQ2FjaGUgOiAxOwotICAgIGJvb2wgbV9sb2Fk
aW5nIDogMTsKLQotICAgIGJvb2wgbV9zd2l0Y2hpbmdDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291
cmNlIDogMTsKLQotICAgIHVuc2lnbmVkIG1fdHlwZSA6IDQ7IC8vIFR5cGUKLSAgICB1bnNpZ25l
ZCBtX3N0YXR1cyA6IDM7IC8vIFN0YXR1cwotCi0jaWZuZGVmIE5ERUJVRwotICAgIGJvb2wgbV9k
ZWxldGVkOwotICAgIHVuc2lnbmVkIG1fbHJ1SW5kZXg7Ci0jZW5kaWYKLQotICAgIENhY2hlZFJl
c291cmNlTG9hZGVyKiBtX293bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyOyAvLyBvbmx5IG5vbi1u
dWxsIGZvciByZXNvdXJjZXMgdGhhdCBhcmUgbm90IGluIHRoZSBjYWNoZQotICAgIAotICAgIC8v
IElmIHRoaXMgZmllbGQgaXMgbm9uLW51bGwgd2UgYXJlIHVzaW5nIHRoZSByZXNvdXJjZSBhcyBh
IHByb3h5IGZvciBjaGVja2luZyB3aGV0aGVyIGFuIGV4aXN0aW5nIHJlc291cmNlIGlzIHN0aWxs
IHVwIHRvIGRhdGUKLSAgICAvLyB1c2luZyBIVFRQIElmLU1vZGlmaWVkLVNpbmNlL0lmLU5vbmUt
TWF0Y2ggaGVhZGVycy4gSWYgdGhlIHJlc3BvbnNlIGlzIDMwNCBhbGwgY2xpZW50cyBvZiB0aGlz
IHJlc291cmNlIGFyZSBtb3ZlZAotICAgIC8vIHRvIHRvIGJlIGNsaWVudHMgb2YgbV9yZXNvdXJj
ZVRvUmV2YWxpZGF0ZSBhbmQgdGhlIHJlc291cmNlIGlzIGRlbGV0ZWQuIElmIG5vdCwgdGhlIGZp
ZWxkIGlzIHplcm9lZCBhbmQgdGhpcwotICAgIC8vIHJlc291cmNlcyBiZWNvbWVzIG5vcm1hbCBy
ZXNvdXJjZSBsb2FkLgotICAgIENhY2hlZFJlc291cmNlKiBtX3Jlc291cmNlVG9SZXZhbGlkYXRl
OwotCi0gICAgLy8gSWYgdGhpcyBmaWVsZCBpcyBub24tbnVsbCwgdGhlIHJlc291cmNlIGhhcyBh
IHByb3h5IGZvciBjaGVja2luZyB3aGV0aGVyIGl0IGlzIHN0aWxsIHVwIHRvIGRhdGUgKHNlZSBt
X3Jlc291cmNlVG9SZXZhbGlkYXRlKS4KLSAgICBDYWNoZWRSZXNvdXJjZSogbV9wcm94eVJlc291
cmNlOwotCi0gICAgLy8gVGhlc2UgaGFuZGxlcyB3aWxsIG5lZWQgdG8gYmUgdXBkYXRlZCB0byBw
b2ludCB0byB0aGUgbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSBpbiBjYXNlIHdlIGdldCAzMDQgcmVz
cG9uc2UuCi0gICAgSGFzaFNldDxDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UqPiBtX2hhbmRsZXNU
b1JldmFsaWRhdGU7Ci0KLSAgICBSZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMgbV9yZWRpcmVjdENo
YWluQ2FjaGVTdGF0dXM7Ci0KLSAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4g
bV92YXJ5aW5nSGVhZGVyVmFsdWVzOwotCi0gICAgdW5zaWduZWQgbG9uZyBtX2lkZW50aWZpZXJG
b3JMb2FkV2l0aG91dFJlc291cmNlTG9hZGVyIHsgMCB9OwotfTsKLQotY2xhc3MgQ2FjaGVkUmVz
b3VyY2U6OkNhbGxiYWNrIHsKLSNpZiAhQ09NUElMRVIoTVNWQykKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLSNlbmRpZgotcHVibGljOgotICAgIENhbGxiYWNrKENhY2hlZFJlc291cmNl
JiwgQ2FjaGVkUmVzb3VyY2VDbGllbnQmKTsKLQotICAgIHZvaWQgY2FuY2VsKCk7Ci0KLXByaXZh
dGU6Ci0gICAgdm9pZCB0aW1lckZpcmVkKCk7Ci0KLSAgICBDYWNoZWRSZXNvdXJjZSYgbV9yZXNv
dXJjZTsKLSAgICBDYWNoZWRSZXNvdXJjZUNsaWVudCYgbV9jbGllbnQ7Ci0gICAgVGltZXIgbV90
aW1lcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2RlZmluZSBTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0NBQ0hFRF9SRVNPVVJDRShUb0NsYXNzTmFtZSwgQ2FjaGVkUmVzb3VyY2VU
eXBlKSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlRvQ2xhc3NOYW1l
KSBcCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkNhY2hlZFJlc291cmNl
JiByZXNvdXJjZSkgeyByZXR1cm4gcmVzb3VyY2UudHlwZSgpID09IFdlYkNvcmU6OkNhY2hlZFJl
c291cmNlVHlwZTsgfSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCi0KLSNlbmRpZiAv
LyBDYWNoZWRSZXNvdXJjZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZUNsaWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjQ1
NDNkNWE1OTc5ZWNjNDJmNmQyNjRiNDQyZTc0OTMxM2E1YzlkLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZUNsaWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoK
LSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkK
LSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0g
ICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEw
LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSAgICBUaGlzIGNsYXNzIHBy
b3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxl
IHNoZWV0cyBhbmQgaHRtbAotICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5
IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgotKi8KLQotI2lmbmRlZiBDYWNoZWRSZXNvdXJjZUNs
aWVudF9oCi0jZGVmaW5lIENhY2hlZFJlc291cmNlQ2xpZW50X2gKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBDYWNoZWRSZXNvdXJjZTsKLQotY2xhc3MgQ2FjaGVkUmVzb3VyY2VDbGll
bnQgewotcHVibGljOgotICAgIGVudW0gQ2FjaGVkUmVzb3VyY2VDbGllbnRUeXBlIHsKLSAgICAg
ICAgQmFzZVJlc291cmNlVHlwZSwKLSAgICAgICAgSW1hZ2VUeXBlLAotICAgICAgICBGb250VHlw
ZSwKLSAgICAgICAgU3R5bGVTaGVldFR5cGUsCi0gICAgICAgIFNWR0RvY3VtZW50VHlwZSwKLSAg
ICAgICAgUmF3UmVzb3VyY2VUeXBlCi0gICAgfTsKLQotICAgIHZpcnR1YWwgfkNhY2hlZFJlc291
cmNlQ2xpZW50KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJl
c291cmNlKikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlcHJlY2F0ZWREaWRSZWNlaXZlQ2FjaGVk
UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNYTUxIdHRw
UmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICBzdGF0aWMgQ2FjaGVkUmVz
b3VyY2VDbGllbnRUeXBlIGV4cGVjdGVkVHlwZSgpIHsgcmV0dXJuIEJhc2VSZXNvdXJjZVR5cGU7
IH0KLSAgICB2aXJ0dWFsIENhY2hlZFJlc291cmNlQ2xpZW50VHlwZSByZXNvdXJjZUNsaWVudFR5
cGUoKSBjb25zdCB7IHJldHVybiBleHBlY3RlZFR5cGUoKTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAg
Q2FjaGVkUmVzb3VyY2VDbGllbnQoKSB7IH0KLX07Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtl
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTFlZjg2MTAxMzZkYjJkMzc0NDA1
OWYwNGRkZDczZDk1Nzc2NmJjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVu
dFdhbGtlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAgICBDb3B5cmln
aHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmln
aHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3Ig
bG9hZGluZyBpbWFnZXMsIHN0eWxlIHNoZWV0cyBhbmQgaHRtbAotICAgIHBhZ2VzIGZyb20gdGhl
IHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgotKi8KLQotI2lm
bmRlZiBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcl9oCi0jZGVmaW5lIENhY2hlZFJlc291cmNl
Q2xpZW50V2Fsa2VyX2gKLQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCi0jaW5j
bHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIENhbGwgdGhpcyAid2Fsa2VyIiBpbnN0ZWFkIG9mIGl0
ZXJhdG9yIHNvIHBlb3BsZSB3b24ndCBleHBlY3QgUXQgb3IgU1RMLXN0eWxlIGl0ZXJhdG9yIGlu
dGVyZmFjZS4KLS8vIEp1c3Qga2VlcCBjYWxsaW5nIG5leHQoKSBvbiB0aGlzLiBJdCdzIHNhZmUg
ZnJvbSBkZWxldGlvbnMgb2YgaXRlbXMuCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBDYWNo
ZWRSZXNvdXJjZUNsaWVudFdhbGtlciB7Ci1wdWJsaWM6Ci0gICAgQ2FjaGVkUmVzb3VyY2VDbGll
bnRXYWxrZXIoY29uc3QgSGFzaENvdW50ZWRTZXQ8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPiYgc2V0
KQotICAgICAgICA6IG1fY2xpZW50U2V0KHNldCksIG1fY2xpZW50VmVjdG9yKHNldC5zaXplKCkp
LCBtX2luZGV4KDApCi0gICAgewotICAgICAgICB0eXBlZGVmIEhhc2hDb3VudGVkU2V0PENhY2hl
ZFJlc291cmNlQ2xpZW50Kj46OmNvbnN0X2l0ZXJhdG9yIEl0ZXJhdG9yOwotICAgICAgICBJdGVy
YXRvciBlbmQgPSBzZXQuZW5kKCk7Ci0gICAgICAgIHNpemVfdCBjbGllbnRJbmRleCA9IDA7Ci0g
ICAgICAgIGZvciAoSXRlcmF0b3IgY3VycmVudCA9IHNldC5iZWdpbigpOyBjdXJyZW50ICE9IGVu
ZDsgKytjdXJyZW50KQotICAgICAgICAgICAgbV9jbGllbnRWZWN0b3JbY2xpZW50SW5kZXgrK10g
PSBjdXJyZW50LT5rZXk7Ci0gICAgfQotCi0gICAgVCogbmV4dCgpCi0gICAgewotICAgICAgICBz
aXplX3Qgc2l6ZSA9IG1fY2xpZW50VmVjdG9yLnNpemUoKTsKLSAgICAgICAgd2hpbGUgKG1faW5k
ZXggPCBzaXplKSB7Ci0gICAgICAgICAgICBDYWNoZWRSZXNvdXJjZUNsaWVudCogbmV4dCA9IG1f
Y2xpZW50VmVjdG9yW21faW5kZXgrK107Ci0gICAgICAgICAgICBpZiAobV9jbGllbnRTZXQuY29u
dGFpbnMobmV4dCkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihUOjpleHBlY3RlZFR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZUNsaWVudDo6ZXhwZWN0
ZWRUeXBlKCkgfHwgbmV4dC0+cmVzb3VyY2VDbGllbnRUeXBlKCkgPT0gVDo6ZXhwZWN0ZWRUeXBl
KCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4obmV4dCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KLXByaXZhdGU6Ci0gICAgY29uc3QgSGFzaENvdW50ZWRTZXQ8Q2FjaGVkUmVzb3VyY2VD
bGllbnQqPiYgbV9jbGllbnRTZXQ7Ci0gICAgVmVjdG9yPENhY2hlZFJlc291cmNlQ2xpZW50Kj4g
bV9jbGllbnRWZWN0b3I7Ci0gICAgc2l6ZV90IG1faW5kZXg7Ci19OwotCi19Ci0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlSGFu
ZGxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUhhbmRs
ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5NzI3NmU5MzJiZDBlY2M4NjA3
ZDNjZWNhYjQ1Mzc0YmEzOTNjMGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlSGFu
ZGxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCi0KLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNhY2hlZFJlc291cmNlSGFuZGxlQmFzZTo6Q2Fj
aGVkUmVzb3VyY2VIYW5kbGVCYXNlKCkKLSAgICA6IG1fcmVzb3VyY2UobnVsbHB0cikKLXsKLX0K
LQotQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlOjpDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UoQ2Fj
aGVkUmVzb3VyY2UqIHJlc291cmNlKQotICAgIDogbV9yZXNvdXJjZShyZXNvdXJjZSkKLXsKLSAg
ICBpZiAobV9yZXNvdXJjZSkKLSAgICAgICAgbV9yZXNvdXJjZS0+cmVnaXN0ZXJIYW5kbGUodGhp
cyk7Ci19Ci0KLUNhY2hlZFJlc291cmNlSGFuZGxlQmFzZTo6Q2FjaGVkUmVzb3VyY2VIYW5kbGVC
YXNlKGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSYgb3RoZXIpCi0gICAgOiBtX3Jlc291
cmNlKG90aGVyLm1fcmVzb3VyY2UpCi17Ci0gICAgaWYgKG1fcmVzb3VyY2UpCi0gICAgICAgIG1f
cmVzb3VyY2UtPnJlZ2lzdGVySGFuZGxlKHRoaXMpOwotfQotCi1DYWNoZWRSZXNvdXJjZUhhbmRs
ZUJhc2U6On5DYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UoKQotewotICAgIGlmIChtX3Jlc291cmNl
KQotICAgICAgICBtX3Jlc291cmNlLT51bnJlZ2lzdGVySGFuZGxlKHRoaXMpOwotfQotCi12b2lk
IENhY2hlZFJlc291cmNlSGFuZGxlQmFzZTo6c2V0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqIHJl
c291cmNlKQotewotICAgIGlmIChyZXNvdXJjZSA9PSBtX3Jlc291cmNlKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKG1fcmVzb3VyY2UpCi0gICAgICAgIG1fcmVzb3VyY2UtPnVucmVnaXN0ZXJI
YW5kbGUodGhpcyk7Ci0gICAgbV9yZXNvdXJjZSA9IHJlc291cmNlOwotICAgIGlmIChtX3Jlc291
cmNlKQotICAgICAgICBtX3Jlc291cmNlLT5yZWdpc3RlckhhbmRsZSh0aGlzKTsKLX0KLQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlSGFu
ZGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VIYW5kbGUu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNlNTg0MmUzMzU0NDliNWE5ZGE5Y2Ni
NTdjYzY1NzVkNWJlYTVhYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VIYW5kbGUu
aAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQ2FjaGVkUmVzb3VyY2VIYW5kbGVfaAot
I2RlZmluZSBDYWNoZWRSZXNvdXJjZUhhbmRsZV9oCi0KLSNpbmNsdWRlICJQbGF0Zm9ybUV4cG9y
dE1hY3Jvcy5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgQ2FjaGVkUmVzb3VyY2U7Ci0KLWNsYXNzIENhY2hlZFJlc291cmNlSGFuZGxl
QmFzZSB7Ci1wdWJsaWM6Ci0gICAgfkNhY2hlZFJlc291cmNlSGFuZGxlQmFzZSgpOwotCi0gICAg
Q2FjaGVkUmVzb3VyY2UqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2U7IH0KLSAgICAK
LSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3Jlc291cmNlOyB9Ci0gICAg
Ci0gICAgLy8gVGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJz
aW9uIHRvIGJvb2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgotICAgIHR5cGVkZWYg
Q2FjaGVkUmVzb3VyY2UqIENhY2hlZFJlc291cmNlSGFuZGxlQmFzZTo6KlVuc3BlY2lmaWVkQm9v
bFR5cGU7Ci0gICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVzb3VyY2UgPyAmQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlOjptX3Jlc291cmNlIDogMDsg
fQotCi1wcm90ZWN0ZWQ6Ci0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKCk7Ci0gICAgQ2Fj
aGVkUmVzb3VyY2VIYW5kbGVCYXNlKENhY2hlZFJlc291cmNlKik7Ci0gICAgQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGVCYXNlKGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSYpOwotCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSopOwotICAgIAotcHJp
dmF0ZToKLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UmIG9wZXJhdG9yPShjb25zdCBDYWNo
ZWRSZXNvdXJjZUhhbmRsZUJhc2UmKSB7IHJldHVybiAqdGhpczsgfSAKLSAgICAKLSAgICBmcmll
bmQgY2xhc3MgQ2FjaGVkUmVzb3VyY2U7Ci0KLSAgICBDYWNoZWRSZXNvdXJjZSogbV9yZXNvdXJj
ZTsKLX07Ci0gICAgCi10ZW1wbGF0ZSA8Y2xhc3MgUj4gY2xhc3MgQ2FjaGVkUmVzb3VyY2VIYW5k
bGUgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlIHsKLXB1YmxpYzogCi0gICAgQ2Fj
aGVkUmVzb3VyY2VIYW5kbGUoKSB7IH0KLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZShSKiByZXMp
IDogQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKHJlcykgeyB9Ci0gICAgQ2FjaGVkUmVzb3VyY2VI
YW5kbGUoY29uc3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Uj4mIG8pIDogQ2FjaGVkUmVzb3VyY2VI
YW5kbGVCYXNlKG8pIHsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IENhY2hlZFJlc291cmNl
SGFuZGxlKGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxlPFU+JiBvKSA6IENhY2hlZFJlc291cmNl
SGFuZGxlQmFzZShvLmdldCgpKSB7IH0KLQotICAgIFIqIGdldCgpIGNvbnN0IHsgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Uio+KENhY2hlZFJlc291cmNlSGFuZGxlQmFzZTo6Z2V0KCkpOyB9Ci0g
ICAgUiogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9Ci0gICAgUiYgb3BlcmF0
b3IqKCkgY29uc3QgeyBBU1NFUlQoZ2V0KCkpOyByZXR1cm4gKmdldCgpOyB9Ci0KLSAgICBDYWNo
ZWRSZXNvdXJjZUhhbmRsZSYgb3BlcmF0b3I9KFIqIHJlcykgeyBzZXRSZXNvdXJjZShyZXMpOyBy
ZXR1cm4gKnRoaXM7IH0gCi0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGUmIG9wZXJhdG9yPShjb25z
dCBDYWNoZWRSZXNvdXJjZUhhbmRsZSYgbykgeyBzZXRSZXNvdXJjZShvLmdldCgpKTsgcmV0dXJu
ICp0aGlzOyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gQ2FjaGVkUmVzb3VyY2VIYW5kbGUm
IG9wZXJhdG9yPShjb25zdCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxVPiYgbykgeyBzZXRSZXNvdXJj
ZShvLmdldCgpKTsgcmV0dXJuICp0aGlzOyB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Q2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlJiBvKSBjb25zdCB7IHJldHVybiBnZXQoKSA9PSBvLmdl
dCgpOyB9Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxlQmFz
ZSYgbykgY29uc3QgeyByZXR1cm4gZ2V0KCkgIT0gby5nZXQoKTsgfQotfTsKLQotdGVtcGxhdGUg
PGNsYXNzIFIsIGNsYXNzIFJSPiBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FjaGVkUmVzb3VyY2VI
YW5kbGU8Uj4mIGgsIGNvbnN0IFJSKiByZXMpIAoteyAKLSAgICByZXR1cm4gaC5nZXQoKSA9PSBy
ZXM7IAotfQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFJSPiBib29sIG9wZXJhdG9yPT0oY29u
c3QgUlIqIHJlcywgY29uc3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Uj4mIGgpIAoteyAKLSAgICBy
ZXR1cm4gaC5nZXQoKSA9PSByZXM7IAotfQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFJSPiBi
b29sIG9wZXJhdG9yIT0oY29uc3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Uj4mIGgsIGNvbnN0IFJS
KiByZXMpIAoteyAKLSAgICByZXR1cm4gaC5nZXQoKSAhPSByZXM7IAotfQotdGVtcGxhdGUgPGNs
YXNzIFIsIGNsYXNzIFJSPiBib29sIG9wZXJhdG9yIT0oY29uc3QgUlIqIHJlcywgY29uc3QgQ2Fj
aGVkUmVzb3VyY2VIYW5kbGU8Uj4mIGgpIAoteyAKLSAgICByZXR1cm4gaC5nZXQoKSAhPSByZXM7
IAotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBDYWNoZWRSZXNvdXJj
ZUhhbmRsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZUxvYWRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1YjdmOGNmNmIw
MDllYjA0Y2NkNWE5NzljZTI2ZTM5N2Y0MzhiOTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlTG9hZGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyNTcgKzAsMCBAQAotLyoKLSAg
ICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAg
ICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gICAg
Q29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKLSAgICBD
b3B5cmlnaHQgKEMpIDIwMDQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
ICAgQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIGh0dHA6Ly93d3cudG9yY2ht
b2JpbGUuY29tLwotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLQotICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVl
ZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUgc2hlZXRzIGFuZCBodG1sCi0gICAgcGFnZXMg
ZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCi0q
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIu
aCIKLQotI2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKLSNpbmNsdWRlICJDYWNoZWRT
VkdEb2N1bWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZEZvbnQuaCIKLSNpbmNsdWRlICJDYWNoZWRJ
bWFnZS5oIgotI2luY2x1ZGUgIkNhY2hlZFJhd1Jlc291cmNlLmgiCi0jaW5jbHVkZSAiQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiQ2FjaGVkU1ZHRm9udC5oIgotI2luY2x1ZGUg
IkNhY2hlZFNjcmlwdC5oIgotI2luY2x1ZGUgIkNhY2hlZFhTTFN0eWxlU2hlZXQuaCIKLSNpbmNs
dWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKLSNpbmNsdWRlICJDb250
ZW50RXh0ZW5zaW9uRXJyb3IuaCIKLSNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uUnVsZS5oIgot
I2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgotI2luY2x1ZGUgIkRPTVdpbmRvdy5o
IgotI2luY2x1ZGUgIkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmgiCi0jaW5jbHVkZSAiRGlhZ25v
c3RpY0xvZ2dpbmdLZXlzLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1
bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIu
aCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgIkhUTUxFbGVtZW50
LmgiCi0jaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAiTG9hZGVy
U3RyYXRlZ3kuaCIKLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCi0jaW5jbHVkZSAiTG9n
Z2luZy5oIgotI2luY2x1ZGUgIk1haW5GcmFtZS5oIgotI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgi
Ci0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBlcmZvcm1hbmNlLmgiCi0jaW5jbHVkZSAi
UGluZ0xvYWRlci5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgotI2luY2x1ZGUg
IlJlbmRlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRJbmZvLmgiCi0jaW5jbHVk
ZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgotI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIu
aCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlNlc3Npb25JRC5oIgot
I2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCi0j
aW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKLSNpbmNsdWRlICJVc2VyQ29udGVudENvbnRy
b2xsZXIuaCIKLSNpbmNsdWRlICJVc2VyU3R5bGVTaGVldC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIEVOQUJM
RShWSURFT19UUkFDSykKLSNpbmNsdWRlICJDYWNoZWRUZXh0VHJhY2suaCIKLSNlbmRpZgotCi0j
ZGVmaW5lIFBSRUxPQURfREVCVUcgMAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBD
YWNoZWRSZXNvdXJjZSogY3JlYXRlUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIFNlc3Npb25J
RCBzZXNzaW9uSUQpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBDYWNoZWRSZXNv
dXJjZTo6SW1hZ2VSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRJbWFnZShyZXF1
ZXN0LCBzZXNzaW9uSUQpOwotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6
Ci0gICAgICAgIHJldHVybiBuZXcgQ2FjaGVkQ1NTU3R5bGVTaGVldChyZXF1ZXN0LCBjaGFyc2V0
LCBzZXNzaW9uSUQpOwotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKLSAgICAgICAg
cmV0dXJuIG5ldyBDYWNoZWRTY3JpcHQocmVxdWVzdCwgY2hhcnNldCwgc2Vzc2lvbklEKTsKLSAg
ICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdEb2N1bWVudFJlc291cmNlOgotICAgICAgICByZXR1
cm4gbmV3IENhY2hlZFNWR0RvY3VtZW50KHJlcXVlc3QsIHNlc3Npb25JRCk7Ci0jaWYgRU5BQkxF
KFNWR19GT05UUykKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdGb250UmVzb3VyY2U6Ci0g
ICAgICAgIHJldHVybiBuZXcgQ2FjaGVkU1ZHRm9udChyZXF1ZXN0LCBzZXNzaW9uSUQpOwotI2Vu
ZGlmCi0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlOgotICAgICAgICByZXR1
cm4gbmV3IENhY2hlZEZvbnQocmVxdWVzdCwgc2Vzc2lvbklEKTsKLSAgICBjYXNlIENhY2hlZFJl
c291cmNlOjpNZWRpYVJlc291cmNlOgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291
cmNlOgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZToKLSAgICAgICAgcmV0
dXJuIG5ldyBDYWNoZWRSYXdSZXNvdXJjZShyZXF1ZXN0LCB0eXBlLCBzZXNzaW9uSUQpOwotI2lm
IEVOQUJMRShYU0xUKQotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6Ci0g
ICAgICAgIHJldHVybiBuZXcgQ2FjaGVkWFNMU3R5bGVTaGVldChyZXF1ZXN0LCBzZXNzaW9uSUQp
OwotI2VuZGlmCi0jaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCi0gICAgY2FzZSBDYWNoZWRSZXNv
dXJjZTo6TGlua1ByZWZldGNoOgotICAgICAgICByZXR1cm4gbmV3IENhY2hlZFJlc291cmNlKHJl
cXVlc3QsIENhY2hlZFJlc291cmNlOjpMaW5rUHJlZmV0Y2gsIHNlc3Npb25JRCk7Ci0gICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6TGlua1N1YnJlc291cmNlOgotICAgICAgICByZXR1cm4gbmV3IENh
Y2hlZFJlc291cmNlKHJlcXVlc3QsIENhY2hlZFJlc291cmNlOjpMaW5rU3VicmVzb3VyY2UsIHNl
c3Npb25JRCk7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6VGV4dFRyYWNrUmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBuZXcgQ2FjaGVk
VGV4dFRyYWNrKHJlcXVlc3QsIHNlc3Npb25JRCk7Ci0jZW5kaWYKLSAgICB9Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUNhY2hlZFJlc291cmNl
TG9hZGVyOjpDYWNoZWRSZXNvdXJjZUxvYWRlcihEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2Fk
ZXIpCi0gICAgOiBtX2RvY3VtZW50KG51bGxwdHIpCi0gICAgLCBtX2RvY3VtZW50TG9hZGVyKGRv
Y3VtZW50TG9hZGVyKQotICAgICwgbV9yZXF1ZXN0Q291bnQoMCkKLSAgICAsIG1fZ2FyYmFnZUNv
bGxlY3REb2N1bWVudFJlc291cmNlc1RpbWVyKCp0aGlzLCAmQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
OmdhcmJhZ2VDb2xsZWN0RG9jdW1lbnRSZXNvdXJjZXMpCi0gICAgLCBtX2F1dG9Mb2FkSW1hZ2Vz
KHRydWUpCi0gICAgLCBtX2ltYWdlc0VuYWJsZWQodHJ1ZSkKLSAgICAsIG1fYWxsb3dTdGFsZVJl
c291cmNlcyhmYWxzZSkKLXsKLX0KLQotQ2FjaGVkUmVzb3VyY2VMb2FkZXI6On5DYWNoZWRSZXNv
dXJjZUxvYWRlcigpCi17Ci0gICAgbV9kb2N1bWVudExvYWRlciA9IG51bGxwdHI7Ci0gICAgbV9k
b2N1bWVudCA9IG51bGxwdHI7Ci0KLSAgICBjbGVhclByZWxvYWRzKCk7Ci0gICAgZm9yIChhdXRv
JiByZXNvdXJjZSA6IG1fZG9jdW1lbnRSZXNvdXJjZXMudmFsdWVzKCkpCi0gICAgICAgIHJlc291
cmNlLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcihudWxscHRyKTsKLQotICAgIC8vIE1h
a2Ugc3VyZSBubyByZXF1ZXN0cyBzdGlsbCBwb2ludCB0byB0aGlzIENhY2hlZFJlc291cmNlTG9h
ZGVyCi0gICAgQVNTRVJUKG1fcmVxdWVzdENvdW50ID09IDApOwotfQotCi1DYWNoZWRSZXNvdXJj
ZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNhY2hlZFJlc291cmNlKGNvbnN0IFN0cmluZyYgcmVz
b3VyY2VVUkwpIGNvbnN0IAotewotICAgIEFTU0VSVCghcmVzb3VyY2VVUkwuaXNOdWxsKCkpOwot
ICAgIFVSTCB1cmwgPSBtX2RvY3VtZW50LT5jb21wbGV0ZVVSTChyZXNvdXJjZVVSTCk7Ci0gICAg
cmV0dXJuIGNhY2hlZFJlc291cmNlKHVybCk7IAotfQotCi1DYWNoZWRSZXNvdXJjZSogQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OmNhY2hlZFJlc291cmNlKGNvbnN0IFVSTCYgcmVzb3VyY2VVUkwpIGNv
bnN0Ci17Ci0gICAgVVJMIHVybCA9IE1lbW9yeUNhY2hlOjpyZW1vdmVGcmFnbWVudElkZW50aWZp
ZXJJZk5lZWRlZChyZXNvdXJjZVVSTCk7Ci0gICAgcmV0dXJuIG1fZG9jdW1lbnRSZXNvdXJjZXMu
Z2V0KHVybCkuZ2V0KCk7IAotfQotCi1GcmFtZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmZyYW1l
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kb2N1bWVudExvYWRlciA/IG1fZG9jdW1lbnRMb2Fk
ZXItPmZyYW1lKCkgOiBudWxscHRyOwotfQotCi1TZXNzaW9uSUQgQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXI6OnNlc3Npb25JRCgpIGNvbnN0Ci17Ci0gICAgU2Vzc2lvbklEIHNlc3Npb25JRCA9IFNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpOwotCi0gICAgaWYgKEZyYW1lKiBmID0gZnJhbWUoKSkK
LSAgICAgICAgc2Vzc2lvbklEID0gZi0+cGFnZSgpLT5zZXNzaW9uSUQoKTsKLQotICAgIHJldHVy
biBzZXNzaW9uSUQ7Ci19Ci0KLUNhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZEltYWdlPiBDYWNo
ZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdEltYWdlKENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkKLXsKLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkgewotICAgICAg
ICBpZiAoZnJhbWUtPmxvYWRlcigpLnBhZ2VEaXNtaXNzYWxFdmVudEJlaW5nRGlzcGF0Y2hlZCgp
ICE9IEZyYW1lTG9hZGVyOjpQYWdlRGlzbWlzc2FsVHlwZTo6Tm9uZSkgewotICAgICAgICAgICAg
aWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAg
ICAgIGRvY3VtZW50LT5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+dXBncmFkZUluc2VjdXJlUmVx
dWVzdElmTmVlZGVkKHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLCBDb250ZW50U2Vj
dXJpdHlQb2xpY3k6Okluc2VjdXJlUmVxdWVzdFR5cGU6OkxvYWQpOwotICAgICAgICAgICAgVVJM
IHJlcXVlc3RVUkwgPSByZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpOwotICAgICAgICAg
ICAgaWYgKHJlcXVlc3RVUkwuaXNWYWxpZCgpICYmIGNhblJlcXVlc3QoQ2FjaGVkUmVzb3VyY2U6
OkltYWdlUmVzb3VyY2UsIHJlcXVlc3RVUkwsIHJlcXVlc3Qub3B0aW9ucygpLCByZXF1ZXN0LmZv
clByZWxvYWQoKSkpCi0gICAgICAgICAgICAgICAgUGluZ0xvYWRlcjo6bG9hZEltYWdlKCpmcmFt
ZSwgcmVxdWVzdFVSTCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQot
ICAgIH0KLSAgICAKLSAgICByZXF1ZXN0LnNldERlZmVyKGNsaWVudERlZmVyc0ltYWdlKHJlcXVl
c3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCkpID8gQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpEZWZl
cnJlZEJ5Q2xpZW50IDogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpOb0RlZmVyKTsKLSAgICByZXR1
cm4gZG93bmNhc3Q8Q2FjaGVkSW1hZ2U+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6
SW1hZ2VSZXNvdXJjZSwgcmVxdWVzdCkuZ2V0KCkpOwotfQotCi1DYWNoZWRSZXNvdXJjZUhhbmRs
ZTxDYWNoZWRGb250PiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdEZvbnQoQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIGlzU1ZHKQotewotI2lmIEVOQUJMRShTVkdfRk9O
VFMpCi0gICAgaWYgKGlzU1ZHKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2FjaGVkU1ZHRm9u
dD4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpTVkdGb250UmVzb3VyY2UsIHJlcXVl
c3QpLmdldCgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGlzU1ZHKTsKLSNlbmRpZgotICAg
IHJldHVybiBkb3duY2FzdDxDYWNoZWRGb250PihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3Vy
Y2U6OkZvbnRSZXNvdXJjZSwgcmVxdWVzdCkuZ2V0KCkpOwotfQotCi0jaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQotQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkVGV4dFRyYWNrPiBDYWNoZWRSZXNv
dXJjZUxvYWRlcjo6cmVxdWVzdFRleHRUcmFjayhDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QpCi17Ci0gICAgcmV0dXJuIGRvd25jYXN0PENhY2hlZFRleHRUcmFjaz4ocmVxdWVzdFJlc291
cmNlKENhY2hlZFJlc291cmNlOjpUZXh0VHJhY2tSZXNvdXJjZSwgcmVxdWVzdCkuZ2V0KCkpOwot
fQotI2VuZGlmCi0KLUNhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZENTU1N0eWxlU2hlZXQ+IENh
Y2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0Q1NTU3R5bGVTaGVldChDYWNoZWRSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIGRvd25jYXN0PENhY2hlZENTU1N0eWxlU2hl
ZXQ+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCwgcmVxdWVz
dCkuZ2V0KCkpOwotfQotCi1DYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRDU1NTdHlsZVNoZWV0
PiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFVzZXJDU1NTdHlsZVNoZWV0KENhY2hlZFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICBVUkwgdXJsID0gTWVtb3J5Q2FjaGU6OnJl
bW92ZUZyYWdtZW50SWRlbnRpZmllcklmTmVlZGVkKHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCku
dXJsKCkpOwotCi0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKLSAgICByZXF1ZXN0Lm11
dGFibGVSZXNvdXJjZVJlcXVlc3QoKS5zZXREb21haW5Gb3JDYWNoZVBhcnRpdGlvbihkb2N1bWVu
dCgpLT50b3BPcmlnaW4oKS0+ZG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24oKSk7Ci0jZW5kaWYKLQot
ICAgIGF1dG8mIG1lbW9yeUNhY2hlID0gTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpOwotICAgIGlm
IChyZXF1ZXN0LmFsbG93c0NhY2hpbmcoKSkgewotICAgICAgICBpZiAoQ2FjaGVkUmVzb3VyY2Uq
IGV4aXN0aW5nID0gbWVtb3J5Q2FjaGUucmVzb3VyY2VGb3JSZXF1ZXN0KHJlcXVlc3QucmVzb3Vy
Y2VSZXF1ZXN0KCksIHNlc3Npb25JRCgpKSkgewotICAgICAgICAgICAgaWYgKGlzPENhY2hlZENT
U1N0eWxlU2hlZXQ+KCpleGlzdGluZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENhY2hlZENTU1N0eWxlU2hlZXQ+KGV4aXN0aW5nKTsKLSAgICAgICAgICAgIG1lbW9yeUNhY2hl
LnJlbW92ZSgqZXhpc3RpbmcpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHVybC5zdHJp
bmcoKSAhPSByZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpKQotICAgICAgICByZXF1ZXN0
Lm11dGFibGVSZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwodXJsKTsKLQotICAgIENhY2hlZFJlc291
cmNlSGFuZGxlPENhY2hlZENTU1N0eWxlU2hlZXQ+IHVzZXJTaGVldCA9IG5ldyBDYWNoZWRDU1NT
dHlsZVNoZWV0KHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCksIHJlcXVlc3QuY2hhcnNldCgpLCBz
ZXNzaW9uSUQoKSk7Ci0KLSAgICBpZiAocmVxdWVzdC5hbGxvd3NDYWNoaW5nKCkpCi0gICAgICAg
IG1lbW9yeUNhY2hlLmFkZCgqdXNlclNoZWV0KTsKLSAgICAvLyBGSVhNRTogbG9hZFJlc291cmNl
IGNhbGxzIHNldE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKCkgaWYgdGhlIHJlc291cmNlIGNv
dWxkbid0IGJlIGFkZGVkIHRvIGNhY2hlLiBEb2VzIHRoaXMgZnVuY3Rpb24gbmVlZCB0byBjYWxs
IGl0LCB0b28/Ci0KLSAgICB1c2VyU2hlZXQtPmxvYWQoKnRoaXMsIFJlc291cmNlTG9hZGVyT3B0
aW9ucyhEb05vdFNlbmRDYWxsYmFja3MsIFNuaWZmQ29udGVudCwgQnVmZmVyRGF0YSwgQWxsb3dT
dG9yZWRDcmVkZW50aWFscywgQ2xpZW50Q3JlZGVudGlhbFBvbGljeTo6TWF5QXNrQ2xpZW50Rm9y
Q3JlZGVudGlhbHMsIEZldGNoT3B0aW9uczo6Q3JlZGVudGlhbHM6OkluY2x1ZGUsIFNraXBTZWN1
cml0eUNoZWNrLCBGZXRjaE9wdGlvbnM6Ok1vZGU6Ok5vQ29ycywgRG9Ob3RJbmNsdWRlQ2VydGlm
aWNhdGVJbmZvLCBDb250ZW50U2VjdXJpdHlQb2xpY3lJbXBvc2l0aW9uOjpTa2lwUG9saWN5Q2hl
Y2ssIERlZmVyc0xvYWRpbmdQb2xpY3k6OkFsbG93RGVmZXJzTG9hZGluZywgQ2FjaGluZ1BvbGlj
eTo6QWxsb3dDYWNoaW5nKSk7Ci0gICAgCi0gICAgcmV0dXJuIHVzZXJTaGVldDsKLX0KLQotQ2Fj
aGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVx
dWVzdFNjcmlwdChDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJu
IGRvd25jYXN0PENhY2hlZFNjcmlwdD4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpT
Y3JpcHQsIHJlcXVlc3QpLmdldCgpKTsKLX0KLQotI2lmIEVOQUJMRShYU0xUKQotQ2FjaGVkUmVz
b3VyY2VIYW5kbGU8Q2FjaGVkWFNMU3R5bGVTaGVldD4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJl
cXVlc3RYU0xTdHlsZVNoZWV0KENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAg
ICByZXR1cm4gZG93bmNhc3Q8Q2FjaGVkWFNMU3R5bGVTaGVldD4ocmVxdWVzdFJlc291cmNlKENh
Y2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0LCByZXF1ZXN0KS5nZXQoKSk7Ci19Ci0jZW5kaWYK
LQotQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU1ZHRG9jdW1lbnQ+IENhY2hlZFJlc291cmNl
TG9hZGVyOjpyZXF1ZXN0U1ZHRG9jdW1lbnQoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
KQotewotICAgIHJldHVybiBkb3duY2FzdDxDYWNoZWRTVkdEb2N1bWVudD4ocmVxdWVzdFJlc291
cmNlKENhY2hlZFJlc291cmNlOjpTVkdEb2N1bWVudFJlc291cmNlLCByZXF1ZXN0KS5nZXQoKSk7
Ci19Ci0KLSNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKLUNhY2hlZFJlc291cmNlSGFuZGxlPENh
Y2hlZFJlc291cmNlPiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdExpbmtSZXNvdXJjZShD
YWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qp
Ci17Ci0gICAgQVNTRVJUKGZyYW1lKCkpOwotICAgIEFTU0VSVCh0eXBlID09IENhY2hlZFJlc291
cmNlOjpMaW5rUHJlZmV0Y2ggfHwgdHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6TGlua1N1YnJlc291
cmNlKTsKLSAgICByZXR1cm4gcmVxdWVzdFJlc291cmNlKHR5cGUsIHJlcXVlc3QpOwotfQotI2Vu
ZGlmCi0KLUNhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiBDYWNoZWRSZXNv
dXJjZUxvYWRlcjo6cmVxdWVzdE1lZGlhKENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkK
LXsKLSAgICByZXR1cm4gZG93bmNhc3Q8Q2FjaGVkUmF3UmVzb3VyY2U+KHJlcXVlc3RSZXNvdXJj
ZShDYWNoZWRSZXNvdXJjZTo6TWVkaWFSZXNvdXJjZSwgcmVxdWVzdCkuZ2V0KCkpOwotfQotCi1D
YWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXI6OnJlcXVlc3RSYXdSZXNvdXJjZShDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17
Ci0gICAgcmV0dXJuIGRvd25jYXN0PENhY2hlZFJhd1Jlc291cmNlPihyZXF1ZXN0UmVzb3VyY2Uo
Q2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlLCByZXF1ZXN0KS5nZXQoKSk7Ci19Ci0KLUNhY2hl
ZFJlc291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
cmVxdWVzdE1haW5SZXNvdXJjZShDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0g
ICAgcmV0dXJuIGRvd25jYXN0PENhY2hlZFJhd1Jlc291cmNlPihyZXF1ZXN0UmVzb3VyY2UoQ2Fj
aGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZSwgcmVxdWVzdCkuZ2V0KCkpOwotfQotCi1zdGF0aWMg
TWl4ZWRDb250ZW50Q2hlY2tlcjo6Q29udGVudFR5cGUgY29udGVudFR5cGVGcm9tUmVzb3VyY2VU
eXBlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0g
ICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1taXhlZC1jb250ZW50LyNjYXRl
Z29yeS1vcHRpb25hbGx5LWJsb2NrYWJsZQotICAgIC8vIEVkaXRvcidzIERyYWZ0LCAxMSBGZWJy
dWFyeSAyMDE2Ci0gICAgLy8gMy4xLiBPcHRpb25hbGx5LWJsb2NrYWJsZSBDb250ZW50Ci0gICAg
Y2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKLSAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpNZWRpYVJlc291cmNlOgotICAgICAgICAgICAgcmV0dXJuIE1peGVkQ29udGVudENoZWNr
ZXI6OkNvbnRlbnRUeXBlOjpBY3RpdmVDYW5XYXJuOwotCi0gICAgY2FzZSBDYWNoZWRSZXNvdXJj
ZTo6Q1NTU3R5bGVTaGVldDoKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6Ci0gICAg
Y2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlOgotICAgICAgICByZXR1cm4gTWl4ZWRD
b250ZW50Q2hlY2tlcjo6Q29udGVudFR5cGU6OkFjdGl2ZTsKLQotI2lmIEVOQUJMRShTVkdfRk9O
VFMpCi0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U1ZHRm9udFJlc291cmNlOgotICAgICAgICBy
ZXR1cm4gTWl4ZWRDb250ZW50Q2hlY2tlcjo6Q29udGVudFR5cGU6OkFjdGl2ZTsKLSNlbmRpZgot
Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2U6Ci0gICAgY2FzZSBDYWNoZWRS
ZXNvdXJjZTo6U1ZHRG9jdW1lbnRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIE1peGVkQ29udGVu
dENoZWNrZXI6OkNvbnRlbnRUeXBlOjpBY3RpdmU7Ci0jaWYgRU5BQkxFKFhTTFQpCi0gICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldDoKLSAgICAgICAgcmV0dXJuIE1peGVkQ29u
dGVudENoZWNrZXI6OkNvbnRlbnRUeXBlOjpBY3RpdmU7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShM
SU5LX1BSRUZFVENIKQotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRjaDoKLSAg
ICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rU3VicmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBN
aXhlZENvbnRlbnRDaGVja2VyOjpDb250ZW50VHlwZTo6QWN0aXZlOwotI2VuZGlmCi0KLSNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCi0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6VGV4dFRyYWNrUmVz
b3VyY2U6Ci0gICAgICAgIHJldHVybiBNaXhlZENvbnRlbnRDaGVja2VyOjpDb250ZW50VHlwZTo6
QWN0aXZlOwotI2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybiBNaXhlZENvbnRlbnRDaGVja2VyOjpDb250ZW50VHlwZTo6QWN0
aXZlOwotICAgIH0KLX0KLQotYm9vbCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2hlY2tJbnNlY3Vy
ZUNvbnRlbnQoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgVVJMJiB1cmwpIGNvbnN0
Ci17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0
OgotI2lmIEVOQUJMRShYU0xUKQotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hl
ZXQ6Ci0jZW5kaWYKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdEb2N1bWVudFJlc291cmNl
OgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6Ci0gICAgICAgIC8vIFRo
ZXNlIHJlc291cmNlIGNhbiBpbmplY3Qgc2NyaXB0IGludG8gdGhlIGN1cnJlbnQgZG9jdW1lbnQg
KFNjcmlwdCwKLSAgICAgICAgLy8gWFNMKSBvciBleGZpbHRyYXRlIHRoZSBjb250ZW50IG9mIHRo
ZSBjdXJyZW50IGRvY3VtZW50IChDU1MpLgotICAgICAgICBpZiAoRnJhbWUqIGYgPSBmcmFtZSgp
KSB7Ci0gICAgICAgICAgICBpZiAoIWYtPmxvYWRlcigpLm1peGVkQ29udGVudENoZWNrZXIoKS5j
YW5SdW5JbnNlY3VyZUNvbnRlbnQobV9kb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgdXJsKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBGcmFtZSYgdG9wID0g
Zi0+dHJlZSgpLnRvcCgpOwotICAgICAgICAgICAgaWYgKCZ0b3AgIT0gZiAmJiAhdG9wLmxvYWRl
cigpLm1peGVkQ29udGVudENoZWNrZXIoKS5jYW5SdW5JbnNlY3VyZUNvbnRlbnQodG9wLmRvY3Vt
ZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIHVybCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShWSURFT19UUkFDSykK
LSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpUZXh0VHJhY2tSZXNvdXJjZToKLSNlbmRpZgotICAg
IGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok1lZGlhUmVzb3VyY2U6Ci0gICAgY2FzZSBDYWNoZWRSZXNv
dXJjZTo6UmF3UmVzb3VyY2U6Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJj
ZToKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0Zv
bnRSZXNvdXJjZToKLSNlbmRpZgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJj
ZTogewotICAgICAgICAvLyBUaGVzZSByZXNvdXJjZXMgY2FuIGNvcnJ1cHQgb25seSB0aGUgZnJh
bWUncyBwaXhlbHMuCi0gICAgICAgIGlmIChGcmFtZSogZiA9IGZyYW1lKCkpIHsKLSAgICAgICAg
ICAgIEZyYW1lJiB0b3BGcmFtZSA9IGYtPnRyZWUoKS50b3AoKTsKLSAgICAgICAgICAgIGlmICgh
dG9wRnJhbWUubG9hZGVyKCkubWl4ZWRDb250ZW50Q2hlY2tlcigpLmNhbkRpc3BsYXlJbnNlY3Vy
ZUNvbnRlbnQodG9wRnJhbWUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgY29udGVudFR5
cGVGcm9tUmVzb3VyY2VUeXBlKHR5cGUpLCB1cmwpKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBDYWNoZWRS
ZXNvdXJjZTo6TWFpblJlc291cmNlOgotI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQotICAgIGNh
c2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRjaDoKLSAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpMaW5rU3VicmVzb3VyY2U6Ci0gICAgICAgIC8vIFByZWZldGNoIGNhbm5vdCBhZmZlY3QgdGhl
IGN1cnJlbnQgZG9jdW1lbnQuCi0jZW5kaWYKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNTYW1lT3JpZ2luRGF0YVVSTChj
b25zdCBVUkwmIHVybCwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zLCBib29s
IGRpZFJlY2VpdmVSZWRpcmVjdFJlc3BvbnNlKQotewotICAgIHJldHVybiAhZGlkUmVjZWl2ZVJl
ZGlyZWN0UmVzcG9uc2UgJiYgdXJsLnByb3RvY29sSXNEYXRhKCkgJiYgb3B0aW9ucy5zYW1lT3Jp
Z2luRGF0YVVSTEZsYWcgPT0gU2FtZU9yaWdpbkRhdGFVUkxGbGFnOjpTZXQ7Ci19Ci0KLWJvb2wg
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNhblJlcXVlc3QoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlw
ZSwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucywg
Ym9vbCBmb3JQcmVsb2FkLCBib29sIGRpZFJlY2VpdmVSZWRpcmVjdFJlc3BvbnNlKQotewotICAg
IGlmIChkb2N1bWVudCgpICYmICFkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5EaXNw
bGF5KHVybCkpIHsKLSAgICAgICAgaWYgKCFmb3JQcmVsb2FkKQotICAgICAgICAgICAgRnJhbWVM
b2FkZXI6OnJlcG9ydExvY2FsTG9hZEZhaWxlZChmcmFtZSgpLCB1cmwuc3RyaW5nQ2VudGVyRWxs
aXBzaXplZFRvTGVuZ3RoKCkpOwotICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZSBVUkwgd2FzIG5vdCBhbGxvd2VkIGJ5IFNl
Y3VyaXR5T3JpZ2luOjpjYW5EaXNwbGF5Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBib29sIHNraXBDb250ZW50U2VjdXJpdHlQb2xpY3lDaGVjayA9IG9wdGlvbnMuY29u
dGVudFNlY3VyaXR5UG9saWN5SW1wb3NpdGlvbiA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3lJbXBv
c2l0aW9uOjpTa2lwUG9saWN5Q2hlY2s7Ci0gICAgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZWRp
cmVjdFJlc3BvbnNlUmVjZWl2ZWQgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkID0gZGlkUmVjZWl2
ZVJlZGlyZWN0UmVzcG9uc2UgPyBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlZGlyZWN0UmVzcG9u
c2VSZWNlaXZlZDo6WWVzIDogQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZWRpcmVjdFJlc3BvbnNl
UmVjZWl2ZWQ6Ok5vOwotCi0gICAgLy8gU29tZSB0eXBlcyBvZiByZXNvdXJjZXMgY2FuIGJlIGxv
YWRlZCBvbmx5IGZyb20gdGhlIHNhbWUgb3JpZ2luLiBPdGhlciB0eXBlcyBvZiByZXNvdXJjZXMs
IGxpa2UgSW1hZ2VzLCBTY3JpcHRzLCBhbmQgQ1NTLCBjYW4gYmUgbG9hZGVkIGZyb20gYW55IFVS
TC4KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlbW92ZSB0aGF0IGNoZWNrIGFuZCBoYW5kbGUg
aXQgYnkgc2V0dGluZyB0aGUgY29ycmVjdCBSZXNvdXJjZUxvYWRlck9wdGlvbnM6Om1vZGUuCi0g
ICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TWFpblJlc291cmNl
OgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6Ci0gICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTY3Jp
cHQ6Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdG
b250UmVzb3VyY2U6Ci0jZW5kaWYKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpNZWRpYVJlc291
cmNlOgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZToKLSAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpSYXdSZXNvdXJjZToKLSNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKLSAg
ICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rUHJlZmV0Y2g6Ci0gICAgY2FzZSBDYWNoZWRSZXNv
dXJjZTo6TGlua1N1YnJlc291cmNlOgotI2VuZGlmCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQot
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlRleHRUcmFja1Jlc291cmNlOgotI2VuZGlmCi0gICAg
ICAgIGlmIChvcHRpb25zLm1vZGUgPT0gRmV0Y2hPcHRpb25zOjpNb2RlOjpTYW1lT3JpZ2luICYm
ICFpc1NhbWVPcmlnaW5EYXRhVVJMKHVybCwgb3B0aW9ucywgZGlkUmVjZWl2ZVJlZGlyZWN0UmVz
cG9uc2UpICYmIW1fZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKSkg
ewotICAgICAgICAgICAgcHJpbnRBY2Nlc3NEZW5pZWRNZXNzYWdlKHVybCk7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6U1ZHRG9jdW1lbnRSZXNvdXJjZToKLSNpZiBFTkFCTEUoWFNMVCkKLSAgICBj
YXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgotICAgICAgICBpZiAoIW1fZG9jdW1l
bnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKSkgewotICAgICAgICAgICAgcHJp
bnRBY2Nlc3NEZW5pZWRNZXNzYWdlKHVybCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSNlbmRpZgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHR5
cGUpIHsKLSNpZiBFTkFCTEUoWFNMVCkKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHls
ZVNoZWV0OgotICAgICAgICBpZiAoIW1fZG9jdW1lbnQtPmNvbnRlbnRTZWN1cml0eVBvbGljeSgp
LT5hbGxvd1NjcmlwdEZyb21Tb3VyY2UodXJsLCBza2lwQ29udGVudFNlY3VyaXR5UG9saWN5Q2hl
Y2ssIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0
OgotICAgICAgICBpZiAoIW1fZG9jdW1lbnQtPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxv
d1NjcmlwdEZyb21Tb3VyY2UodXJsLCBza2lwQ29udGVudFNlY3VyaXR5UG9saWN5Q2hlY2ssIHJl
ZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGlmIChmcmFtZSgpICYmICFmcmFtZSgpLT5zZXR0aW5ncygpLmlzU2NyaXB0RW5hYmxlZCgp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OgotICAgICAgICBpZiAoIW1fZG9jdW1lbnQtPmNv
bnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd1N0eWxlRnJvbVNvdXJjZSh1cmwsIHNraXBDb250
ZW50U2VjdXJpdHlQb2xpY3lDaGVjaywgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDYWNoZWRSZXNv
dXJjZTo6U1ZHRG9jdW1lbnRSZXNvdXJjZToKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFn
ZVJlc291cmNlOgotICAgICAgICBpZiAoIW1fZG9jdW1lbnQtPmNvbnRlbnRTZWN1cml0eVBvbGlj
eSgpLT5hbGxvd0ltYWdlRnJvbVNvdXJjZSh1cmwsIHNraXBDb250ZW50U2VjdXJpdHlQb2xpY3lD
aGVjaywgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpTVkdGb250UmVzb3VyY2U6Ci0jZW5kaWYKLSAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpGb250UmVzb3VyY2U6IHsKLSAgICAgICAgaWYgKCFtX2RvY3VtZW50LT5jb250ZW50U2Vj
dXJpdHlQb2xpY3koKS0+YWxsb3dGb250RnJvbVNvdXJjZSh1cmwsIHNraXBDb250ZW50U2VjdXJp
dHlQb2xpY3lDaGVjaywgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ2FjaGVkUmVzb3Vy
Y2U6Ok1haW5SZXNvdXJjZToKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpSYXdSZXNvdXJjZToK
LSNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5r
UHJlZmV0Y2g6Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1N1YnJlc291cmNlOgotI2Vu
ZGlmCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok1lZGlhUmVzb3Vy
Y2U6Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlRl
eHRUcmFja1Jlc291cmNlOgotI2VuZGlmCi0gICAgICAgIGlmICghbV9kb2N1bWVudC0+Y29udGVu
dFNlY3VyaXR5UG9saWN5KCktPmFsbG93TWVkaWFGcm9tU291cmNlKHVybCwgc2tpcENvbnRlbnRT
ZWN1cml0eVBvbGljeUNoZWNrLCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICAvLyBTVkcgSW1h
Z2VzIGhhdmUgdW5pcXVlIHNlY3VyaXR5IHJ1bGVzIHRoYXQgcHJldmVudCBhbGwgc3VicmVzb3Vy
Y2UgcmVxdWVzdHMgZXhjZXB0IGZvciBkYXRhIHVybHMuCi0gICAgaWYgKHR5cGUgIT0gQ2FjaGVk
UmVzb3VyY2U6Ok1haW5SZXNvdXJjZSAmJiBmcmFtZSgpICYmIGZyYW1lKCktPnBhZ2UoKSkgewot
ICAgICAgICBpZiAoZnJhbWUoKS0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5pc1NWR0ltYWdl
Q2hyb21lQ2xpZW50KCkgJiYgIXVybC5wcm90b2NvbElzRGF0YSgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghY2FuUmVxdWVzdEluQ29udGVudERpc3Bvc2l0
aW9uQXR0YWNobWVudFNhbmRib3godHlwZSwgdXJsKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgLy8gTGFzdCBvZiBhbGwsIGNoZWNrIGZvciBpbnNlY3VyZSBjb250ZW50LiBXZSBkbyB0
aGlzIGxhc3Qgc28gdGhhdCB3aGVuCi0gICAgLy8gZm9sa3MgYmxvY2sgaW5zZWN1cmUgY29udGVu
dCB3aXRoIGEgQ1NQIHBvbGljeSwgdGhleSBkb24ndCBnZXQgYSB3YXJuaW5nLgotICAgIC8vIFRo
ZXknbGwgc3RpbGwgZ2V0IGEgd2FybmluZyBpbiB0aGUgY29uc29sZSBhYm91dCBDU1AgYmxvY2tp
bmcgdGhlIGxvYWQuCi0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGNvbnNpZGVyIGZvclByZWxv
YWQgaGVyZT8KLSAgICBpZiAoIWNoZWNrSW5zZWN1cmVDb250ZW50KHR5cGUsIHVybCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENhY2hlZFJl
c291cmNlTG9hZGVyOjpjYW5SZXF1ZXN0SW5Db250ZW50RGlzcG9zaXRpb25BdHRhY2htZW50U2Fu
ZGJveChDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBVUkwmIHVybCkgY29uc3QKLXsK
LSAgICBEb2N1bWVudCogZG9jdW1lbnQ7Ci0gICAgCi0gICAgLy8gRklYTUU6IERvIHdlIHdhbnQg
dG8gZXhwYW5kIHRoaXMgdG8gYWxsIHJlc291cmNlIHR5cGVzIHRoYXQgdGhlIG1peGVkIGNvbnRl
bnQgY2hlY2tlciB3b3VsZCBjb25zaWRlciBhY3RpdmUgY29udGVudD8KLSAgICBzd2l0Y2ggKHR5
cGUpIHsKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpNYWluUmVzb3VyY2U6Ci0gICAgICAgIGlm
IChhdXRvIG93bmVyRWxlbWVudCA9IGZyYW1lKCkgPyBmcmFtZSgpLT5vd25lckVsZW1lbnQoKSA6
IG51bGxwdHIpIHsKLSAgICAgICAgICAgIGRvY3VtZW50ID0gJm93bmVyRWxlbWVudC0+ZG9jdW1l
bnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6Ci0gICAgICAgIGRvY3Vt
ZW50ID0gbV9kb2N1bWVudDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFkb2N1bWVudC0+c2hvdWxkRW5mb3JjZUNv
bnRlbnREaXNwb3NpdGlvbkF0dGFjaG1lbnRTYW5kYm94KCkgfHwgZG9jdW1lbnQtPnNlY3VyaXR5
T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBT
dHJpbmcgbWVzc2FnZSA9ICJVbnNhZmUgYXR0ZW1wdCB0byBsb2FkIFVSTCAiICsgdXJsLnN0cmlu
Z0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpICsgIiBmcm9tIGRvY3VtZW50IHdpdGggQ29udGVu
dC1EaXNwb3NpdGlvbjogYXR0YWNobWVudCBhdCBVUkwgIiArIGRvY3VtZW50LT51cmwoKS5zdHJp
bmdDZW50ZXJFbGxpcHNpemVkVG9MZW5ndGgoKSArICIuIjsKLSAgICBkb2N1bWVudC0+YWRkQ29u
c29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6U2VjdXJpdHksIE1lc3NhZ2VMZXZlbDo6RXJyb3Is
IG1lc3NhZ2UpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDYWNoZWRSZXNvdXJjZUxv
YWRlcjo6c2hvdWxkQ29udGludWVBZnRlck5vdGlmeWluZ0xvYWRlZEZyb21NZW1vcnlDYWNoZShj
b25zdCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIENhY2hlZFJlc291cmNlKiByZXNv
dXJjZSkKLXsKLSAgICBpZiAoIXJlc291cmNlIHx8ICFmcmFtZSgpIHx8IHJlc291cmNlLT5zdGF0
dXMoKSAhPSBDYWNoZWRSZXNvdXJjZTo6Q2FjaGVkKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIFJlc291cmNlUmVxdWVzdCBuZXdSZXF1ZXN0ID0gUmVzb3VyY2VSZXF1ZXN0KHJlc291cmNl
LT51cmwoKSk7Ci0gICAgaWYgKHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaGlkZGVuRnJvbUlu
c3BlY3RvcigpKQotICAgICAgICBuZXdSZXF1ZXN0LnNldEhpZGRlbkZyb21JbnNwZWN0b3IodHJ1
ZSk7Ci0gICAgZnJhbWUoKS0+bG9hZGVyKCkubG9hZGVkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUo
cmVzb3VyY2UsIG5ld1JlcXVlc3QpOwotCi0gICAgLy8gRklYTUUgPGh0dHA6Ly93ZWJraXQub3Jn
L2IvMTEzMjUxPjogSWYgdGhlIGRlbGVnYXRlIG1vZGlmaWVzIHRoZSByZXF1ZXN0J3MKLSAgICAv
LyBVUkwsIGl0IGlzIG5vIGxvbmdlciBhcHByb3ByaWF0ZSB0byB1c2UgdGhpcyBDYWNoZWRSZXNv
dXJjZS4KLSAgICByZXR1cm4gIW5ld1JlcXVlc3QuaXNOdWxsKCk7Ci19Ci0KLWJvb2wgQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OnVwZGF0ZUNhY2hlZFJlc291cmNlV2l0aEN1cnJlbnRSZXF1ZXN0KENh
Y2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
UmVzb3VyY2U+JiByZXNvdXJjZUhhbmRsZSkKLXsKLSAgICBBU1NFUlQocmVzb3VyY2VIYW5kbGUp
OwotCi0gICAgQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlID0gKnJlc291cmNlSGFuZGxlOwotCi0g
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBwcm9ncmVzc2l2ZWx5IGV4dGVuZCB0aGlzIHRvIG90aGVy
IHJldXNhYmxlIHJlc291cmNlcwotICAgIGlmIChyZXNvdXJjZS50eXBlKCkgIT0gQ2FjaGVkUmVz
b3VyY2U6OlR5cGU6OkltYWdlUmVzb3VyY2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGJvb2wgc2hvdWxkVXBkYXRlID0gcmVzb3VyY2Uub3B0aW9ucygpLm1vZGUgIT0gcmVxdWVzdC5v
cHRpb25zKCkubW9kZSB8fCByZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmh0dHBPcmlnaW4oKSAh
PSByZXNvdXJjZS5yZXNvdXJjZVJlcXVlc3QoKS5odHRwT3JpZ2luKCk7Ci0KLSAgICBpZiAoIXNo
b3VsZFVwZGF0ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRklYTUU6IEZvciBi
ZWluZyBsb2FkZWQgcmVxdWVzdHMsIHdlIGN1cnJlbnRseSBkbyBub3QgdXNlIHRoZSBzYW1lIHJl
c291cmNlLCBhcyB0aGlzIG1heSBpbmR1Y2UgZXJyb3JzIGluIHRoZSByZXNvdXJjZSByZXNwb25z
ZSB0YWludGluZy4KLSAgICAvLyBXZSBzaG91bGQgZmluZCBhIHdheSB0byBpbXByb3ZlIHRoaXMu
Ci0gICAgaWYgKHJlc291cmNlLnN0YXR1cygpICE9IENhY2hlZFJlc291cmNlOjpDYWNoZWQpIHsK
LSAgICAgICAgcmVxdWVzdC5zZXRDYWNoaW5nUG9saWN5KENhY2hpbmdQb2xpY3k6OkRpc2FsbG93
Q2FjaGluZyk7Ci0gICAgICAgIHJlc291cmNlSGFuZGxlID0gbG9hZFJlc291cmNlKHJlc291cmNl
LnR5cGUoKSwgcmVxdWVzdCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJl
c291cmNlSGFuZGxlID0gY3JlYXRlUmVzb3VyY2UocmVzb3VyY2UudHlwZSgpLCByZXF1ZXN0Lm11
dGFibGVSZXNvdXJjZVJlcXVlc3QoKSwgcmVxdWVzdC5jaGFyc2V0KCksIHNlc3Npb25JRCgpKTsK
LSAgICByZXNvdXJjZUhhbmRsZS0+bG9hZEZyb20ocmVzb3VyY2UsIHJlcXVlc3Qub3B0aW9ucygp
LCAqdGhpcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBsb2dN
ZW1vcnlDYWNoZVJlc291cmNlUmVxdWVzdChGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgZGVz
Y3JpcHRpb24sIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBTdHJpbmcoKSkKLXsKLSAgICBpZiAoIWZy
YW1lIHx8ICFmcmFtZS0+cGFnZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHZhbHVlLmlz
TnVsbCgpKQotICAgICAgICBmcmFtZS0+cGFnZSgpLT5kaWFnbm9zdGljTG9nZ2luZ0NsaWVudCgp
LmxvZ0RpYWdub3N0aWNNZXNzYWdlKERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VSZXF1
ZXN0S2V5KCksIGRlc2NyaXB0aW9uLCBTaG91bGRTYW1wbGU6Olllcyk7Ci0gICAgZWxzZQotICAg
ICAgICBmcmFtZS0+cGFnZSgpLT5kaWFnbm9zdGljTG9nZ2luZ0NsaWVudCgpLmxvZ0RpYWdub3N0
aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VSZXF1ZXN0
S2V5KCksIGRlc2NyaXB0aW9uLCB2YWx1ZSwgU2hvdWxkU2FtcGxlOjpZZXMpOwotfQotCi1DYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJl
cXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBDYWNoZWRSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXMtPmRv
Y3VtZW50KCkpCi0gICAgICAgIGRvY3VtZW50LT5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+dXBn
cmFkZUluc2VjdXJlUmVxdWVzdElmTmVlZGVkKHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVz
dCgpLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6Okluc2VjdXJlUmVxdWVzdFR5cGU6OkxvYWQpOwot
ICAgIAotICAgIFVSTCB1cmwgPSByZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpOwotICAg
IAotICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVz
dFJlc291cmNlICclcycsIGNoYXJzZXQgJyVzJywgcHJpb3JpdHk9JWQsIGZvclByZWxvYWQ9JXUi
LCB1cmwuc3RyaW5nQ2VudGVyRWxsaXBzaXplZFRvTGVuZ3RoKCkubGF0aW4xKCkuZGF0YSgpLCBy
ZXF1ZXN0LmNoYXJzZXQoKS5sYXRpbjEoKS5kYXRhKCksIHJlcXVlc3QucHJpb3JpdHkoKSA/IHN0
YXRpY19jYXN0PGludD4ocmVxdWVzdC5wcmlvcml0eSgpLnZhbHVlKCkpIDogLTEsIHJlcXVlc3Qu
Zm9yUHJlbG9hZCgpKTsKLSAgICAKLSAgICAvLyBJZiBvbmx5IHRoZSBmcmFnbWVudCBpZGVudGlm
aWVycyBkaWZmZXIsIGl0IGlzIHRoZSBzYW1lIHJlc291cmNlLgotICAgIHVybCA9IE1lbW9yeUNh
Y2hlOjpyZW1vdmVGcmFnbWVudElkZW50aWZpZXJJZk5lZWRlZCh1cmwpOwotCi0gICAgaWYgKCF1
cmwuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghY2FuUmVx
dWVzdCh0eXBlLCB1cmwsIHJlcXVlc3Qub3B0aW9ucygpLCByZXF1ZXN0LmZvclByZWxvYWQoKSkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0jaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKLSAgICBpZiAoZnJhbWUoKSAmJiBmcmFtZSgpLT5tYWluRnJhbWUoKS5wYWdlKCkgJiYgbV9k
b2N1bWVudExvYWRlcikgewotICAgICAgICBhdXRvJiByZXNvdXJjZVJlcXVlc3QgPSByZXF1ZXN0
Lm11dGFibGVSZXNvdXJjZVJlcXVlc3QoKTsKLSAgICAgICAgYXV0byBibG9ja2VkU3RhdHVzID0g
ZnJhbWUoKS0+bWFpbkZyYW1lKCkucGFnZSgpLT51c2VyQ29udGVudFByb3ZpZGVyKCkucHJvY2Vz
c0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQocmVzb3VyY2VSZXF1ZXN0LnVybCgpLCB0b1Jl
c291cmNlVHlwZSh0eXBlKSwgKm1fZG9jdW1lbnRMb2FkZXIpOwotICAgICAgICBhcHBseUJsb2Nr
ZWRTdGF0dXNUb1JlcXVlc3QoYmxvY2tlZFN0YXR1cywgcmVzb3VyY2VSZXF1ZXN0KTsKLSAgICAg
ICAgaWYgKGJsb2NrZWRTdGF0dXMuYmxvY2tlZExvYWQpIHsKLSAgICAgICAgICAgIGlmICh0eXBl
ID09IENhY2hlZFJlc291cmNlOjpUeXBlOjpNYWluUmVzb3VyY2UpIHsKLSAgICAgICAgICAgICAg
ICBhdXRvIHJlc291cmNlID0gY3JlYXRlUmVzb3VyY2UodHlwZSwgcmVxdWVzdC5tdXRhYmxlUmVz
b3VyY2VSZXF1ZXN0KCksIHJlcXVlc3QuY2hhcnNldCgpLCBzZXNzaW9uSUQoKSk7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKHJlc291cmNlKTsKLSAgICAgICAgICAgICAgICByZXNvdXJjZS0+ZXJy
b3IoQ2FjaGVkUmVzb3VyY2U6OlN0YXR1czo6TG9hZEVycm9yKTsKLSAgICAgICAgICAgICAgICBy
ZXNvdXJjZS0+c2V0UmVzb3VyY2VFcnJvcihSZXNvdXJjZUVycm9yKENvbnRlbnRFeHRlbnNpb25z
OjpXZWJLaXRDb250ZW50QmxvY2tlckRvbWFpbiwgMCwgcmVxdWVzdC5yZXNvdXJjZVJlcXVlc3Qo
KS51cmwoKSwgV0VCX1VJX1NUUklORygiVGhlIFVSTCB3YXMgYmxvY2tlZCBieSBhIGNvbnRlbnQg
YmxvY2tlciIsICJXZWJLaXRFcnJvckJsb2NrZWRCeUNvbnRlbnRCbG9ja2VyIGRlc2NyaXB0aW9u
IikpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzb3VyY2U7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICBpZiAoYmxvY2tl
ZFN0YXR1cy5tYWRlSFRUUFMKLSAgICAgICAgICAgICYmIHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6
OlR5cGU6Ok1haW5SZXNvdXJjZQotICAgICAgICAgICAgJiYgbV9kb2N1bWVudExvYWRlci0+aXNM
b2FkaW5nTWFpblJlc291cmNlKCkpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgdG8gbWFrZSBz
dXJlIHRoZSBjb3JyZWN0ICduZXcnIFVSTCBzaG93cyBpbiB0aGUgbG9jYXRpb24gYmFyLgotICAg
ICAgICAgICAgbV9kb2N1bWVudExvYWRlci0+ZnJhbWVMb2FkZXIoKS0+Y2xpZW50KCkuZGlzcGF0
Y2hEaWRDaGFuZ2VQcm92aXNpb25hbFVSTCgpOwotICAgICAgICB9Ci0gICAgICAgIHVybCA9IHJl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7IC8vIFRoZSBjb250ZW50IGV4dGVuc2lvbiBj
b3VsZCBoYXZlIGNoYW5nZWQgaXQgZnJvbSBodHRwIHRvIGh0dHBzLgotICAgICAgICB1cmwgPSBN
ZW1vcnlDYWNoZTo6cmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVySWZOZWVkZWQodXJsKTsgLy8gTWln
aHQgbmVlZCB0byByZW1vdmUgZnJhZ21lbnQgaWRlbnRpZmllciBhZ2Fpbi4KLSAgICB9Ci0jZW5k
aWYKLQotI2lmIEVOQUJMRShXRUJfVElNSU5HKQotICAgIExvYWRUaW1pbmcgbG9hZFRpbWluZzsK
LSAgICBsb2FkVGltaW5nLm1hcmtTdGFydFRpbWVBbmRGZXRjaFN0YXJ0KCk7Ci0jZW5kaWYKLQot
ICAgIGF1dG8mIG1lbW9yeUNhY2hlID0gTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpOwotICAgIGlm
IChyZXF1ZXN0LmFsbG93c0NhY2hpbmcoKSAmJiBtZW1vcnlDYWNoZS5kaXNhYmxlZCgpKSB7Ci0g
ICAgICAgIERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291
cmNlcy5maW5kKHVybC5zdHJpbmcoKSk7Ci0gICAgICAgIGlmIChpdCAhPSBtX2RvY3VtZW50UmVz
b3VyY2VzLmVuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+dmFsdWUtPnNldE93bmluZ0NhY2hlZFJl
c291cmNlTG9hZGVyKG51bGxwdHIpOwotICAgICAgICAgICAgbV9kb2N1bWVudFJlc291cmNlcy5y
ZW1vdmUoaXQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gU2VlIGlmIHdlIGNhbiB1c2Ug
YW4gZXhpc3RpbmcgcmVzb3VyY2UgZnJvbSB0aGUgY2FjaGUuCi0gICAgQ2FjaGVkUmVzb3VyY2VI
YW5kbGU8Q2FjaGVkUmVzb3VyY2U+IHJlc291cmNlOwotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJ
T05JTkcpCi0gICAgaWYgKGRvY3VtZW50KCkpCi0gICAgICAgIHJlcXVlc3QubXV0YWJsZVJlc291
cmNlUmVxdWVzdCgpLnNldERvbWFpbkZvckNhY2hlUGFydGl0aW9uKGRvY3VtZW50KCktPnRvcE9y
aWdpbigpLT5kb21haW5Gb3JDYWNoZVBhcnRpdGlvbigpKTsKLSNlbmRpZgotCi0gICAgaWYgKHJl
cXVlc3QuYWxsb3dzQ2FjaGluZygpKQotICAgICAgICByZXNvdXJjZSA9IG1lbW9yeUNhY2hlLnJl
c291cmNlRm9yUmVxdWVzdChyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLCBzZXNzaW9uSUQoKSk7
Ci0KLSAgICBsb2dNZW1vcnlDYWNoZVJlc291cmNlUmVxdWVzdChmcmFtZSgpLCByZXNvdXJjZSA/
IERpYWdub3N0aWNMb2dnaW5nS2V5czo6aW5NZW1vcnlDYWNoZUtleSgpIDogRGlhZ25vc3RpY0xv
Z2dpbmdLZXlzOjpub3RJbk1lbW9yeUNhY2hlS2V5KCkpOwotCi0gICAgY29uc3QgUmV2YWxpZGF0
aW9uUG9saWN5IHBvbGljeSA9IGRldGVybWluZVJldmFsaWRhdGlvblBvbGljeSh0eXBlLCByZXF1
ZXN0LCByZXNvdXJjZS5nZXQoKSk7Ci0gICAgc3dpdGNoIChwb2xpY3kpIHsKLSAgICBjYXNlIFJl
bG9hZDoKLSAgICAgICAgbWVtb3J5Q2FjaGUucmVtb3ZlKCpyZXNvdXJjZSk7Ci0gICAgICAgIEZB
TExUSFJPVUdIOwotICAgIGNhc2UgTG9hZDoKLSAgICAgICAgaWYgKHJlc291cmNlKQotICAgICAg
ICAgICAgbG9nTWVtb3J5Q2FjaGVSZXNvdXJjZVJlcXVlc3QoZnJhbWUoKSwgRGlhZ25vc3RpY0xv
Z2dpbmdLZXlzOjppbk1lbW9yeUNhY2hlS2V5KCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6dW51
c2VkS2V5KCkpOwotICAgICAgICByZXNvdXJjZSA9IGxvYWRSZXNvdXJjZSh0eXBlLCByZXF1ZXN0
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZXZhbGlkYXRlOgotICAgICAgICBpZiAocmVz
b3VyY2UpCi0gICAgICAgICAgICBsb2dNZW1vcnlDYWNoZVJlc291cmNlUmVxdWVzdChmcmFtZSgp
LCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmluTWVtb3J5Q2FjaGVLZXkoKSwgRGlhZ25vc3RpY0xv
Z2dpbmdLZXlzOjpyZXZhbGlkYXRpbmdLZXkoKSk7Ci0gICAgICAgIHJlc291cmNlID0gcmV2YWxp
ZGF0ZVJlc291cmNlKHJlcXVlc3QsIHJlc291cmNlLmdldCgpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBVc2U6Ci0gICAgICAgIGlmICghdXBkYXRlQ2FjaGVkUmVzb3VyY2VXaXRoQ3VycmVu
dFJlcXVlc3QocmVxdWVzdCwgcmVzb3VyY2UpKSB7Ci0gICAgICAgICAgICBpZiAoIXNob3VsZENv
bnRpbnVlQWZ0ZXJOb3RpZnlpbmdMb2FkZWRGcm9tTWVtb3J5Q2FjaGUocmVxdWVzdCwgcmVzb3Vy
Y2UuZ2V0KCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAg
bG9nTWVtb3J5Q2FjaGVSZXNvdXJjZVJlcXVlc3QoZnJhbWUoKSwgRGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzOjppbk1lbW9yeUNhY2hlS2V5KCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6dXNlZEtleSgp
KTsKLSAgICAgICAgICAgIG1lbW9yeUNhY2hlLnJlc291cmNlQWNjZXNzZWQoKnJlc291cmNlKTsK
LSNpZiBFTkFCTEUoV0VCX1RJTUlORykKLSAgICAgICAgICAgIGlmIChkb2N1bWVudCgpICYmIFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkucmVzb3VyY2VUaW1pbmdFbmFi
bGVkKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRSAoMTYxMTcwKTogVGhlIG5ldHdvcmtM
b2FkVGltaW5nIHNob3VsZG4ndCBiZSBzdG9yZWQgb24gdGhlIFJlc291cmNlUmVzcG9uc2UuCi0g
ICAgICAgICAgICAgICAgcmVzb3VyY2UtPnJlc3BvbnNlKCkubmV0d29ya0xvYWRUaW1pbmcoKS5y
ZXNldCgpOwotICAgICAgICAgICAgICAgIGxvYWRUaW1pbmcuc2V0UmVzcG9uc2VFbmQobW9ub3Rv
bmljYWxseUluY3JlYXNpbmdUaW1lKCkpOwotICAgICAgICAgICAgICAgIG1fcmVzb3VyY2VUaW1p
bmdJbmZvLnN0b3JlUmVzb3VyY2VUaW1pbmdJbml0aWF0b3JJbmZvcm1hdGlvbihyZXNvdXJjZSwg
cmVxdWVzdCwgZnJhbWUoKSk7Ci0gICAgICAgICAgICAgICAgbV9yZXNvdXJjZVRpbWluZ0luZm8u
YWRkUmVzb3VyY2VUaW1pbmcocmVzb3VyY2UuZ2V0KCksICpkb2N1bWVudCgpLCBsb2FkVGltaW5n
KTsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIGlmICghcmVzb3VyY2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
aWYgKCFyZXF1ZXN0LmZvclByZWxvYWQoKSB8fCBwb2xpY3kgIT0gVXNlKQotICAgICAgICByZXNv
dXJjZS0+c2V0TG9hZFByaW9yaXR5KHJlcXVlc3QucHJpb3JpdHkoKSk7Ci0KLSAgICBpZiAoIXJl
cXVlc3QuZm9yUHJlbG9hZCgpICYmIHJlc291cmNlLT5sb2FkZXIoKSAmJiByZXNvdXJjZS0+cmVz
b3VyY2VSZXF1ZXN0KCkuaWdub3JlRm9yUmVxdWVzdENvdW50KCkpIHsKLSAgICAgICAgcmVzb3Vy
Y2UtPnJlc291cmNlUmVxdWVzdCgpLnNldElnbm9yZUZvclJlcXVlc3RDb3VudChmYWxzZSk7Ci0g
ICAgICAgIGluY3JlbWVudFJlcXVlc3RDb3VudCgqcmVzb3VyY2UpOwotICAgIH0KLQotICAgIGlm
ICgocG9saWN5ICE9IFVzZSB8fCByZXNvdXJjZS0+c3RpbGxOZWVkc0xvYWQoKSkgJiYgQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0OjpOb0RlZmVyID09IHJlcXVlc3QuZGVmZXIoKSkgewotICAgICAgICBy
ZXNvdXJjZS0+bG9hZCgqdGhpcywgcmVxdWVzdC5vcHRpb25zKCkpOwotCi0gICAgICAgIC8vIFdl
IGRvbid0IHN1cHBvcnQgaW1tZWRpYXRlIGxvYWRzLCBidXQgd2UgZG8gc3VwcG9ydCBpbW1lZGlh
dGUgZmFpbHVyZS4KLSAgICAgICAgaWYgKHJlc291cmNlLT5lcnJvck9jY3VycmVkKCkpIHsKLSAg
ICAgICAgICAgIGlmIChyZXNvdXJjZS0+YWxsb3dzQ2FjaGluZygpICYmIHJlc291cmNlLT5pbkNh
Y2hlKCkpCi0gICAgICAgICAgICAgICAgbWVtb3J5Q2FjaGUucmVtb3ZlKCpyZXNvdXJjZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChk
b2N1bWVudCgpICYmICFkb2N1bWVudCgpLT5sb2FkRXZlbnRGaW5pc2hlZCgpICYmICFyZXF1ZXN0
LnJlc291cmNlUmVxdWVzdCgpLnVybCgpLnByb3RvY29sSXNEYXRhKCkpCi0gICAgICAgIG1fdmFs
aWRhdGVkVVJMcy5hZGQocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKSk7Ci0KLSAgICBB
U1NFUlQocmVzb3VyY2UtPnVybCgpID09IHVybC5zdHJpbmcoKSk7Ci0gICAgbV9kb2N1bWVudFJl
c291cmNlcy5zZXQocmVzb3VyY2UtPnVybCgpLCByZXNvdXJjZSk7Ci0gICAgcmV0dXJuIHJlc291
cmNlOwotfQotCi12b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpkb2N1bWVudERpZEZpbmlzaExv
YWRFdmVudCgpCi17Ci0gICAgbV92YWxpZGF0ZWRVUkxzLmNsZWFyKCk7Ci19Ci0KLUNhY2hlZFJl
c291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmV2YWxp
ZGF0ZVJlc291cmNlKGNvbnN0IENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgQ2FjaGVk
UmVzb3VyY2UqIHJlc291cmNlKQotewotICAgIEFTU0VSVChyZXNvdXJjZSk7Ci0gICAgQVNTRVJU
KHJlc291cmNlLT5pbkNhY2hlKCkpOwotICAgIGF1dG8mIG1lbW9yeUNhY2hlID0gTWVtb3J5Q2Fj
aGU6OnNpbmdsZXRvbigpOwotICAgIEFTU0VSVCghbWVtb3J5Q2FjaGUuZGlzYWJsZWQoKSk7Ci0g
ICAgQVNTRVJUKHJlc291cmNlLT5jYW5Vc2VDYWNoZVZhbGlkYXRvcigpKTsKLSAgICBBU1NFUlQo
IXJlc291cmNlLT5yZXNvdXJjZVRvUmV2YWxpZGF0ZSgpKTsKLSAgICBBU1NFUlQocmVzb3VyY2Ut
PnNlc3Npb25JRCgpID09IHNlc3Npb25JRCgpKTsKLSAgICBBU1NFUlQocmVzb3VyY2UtPmFsbG93
c0NhY2hpbmcoKSk7Ci0KLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4g
bmV3UmVzb3VyY2UgPSBjcmVhdGVSZXNvdXJjZShyZXNvdXJjZS0+dHlwZSgpLCByZXNvdXJjZS0+
cmVzb3VyY2VSZXF1ZXN0KCksIHJlc291cmNlLT5lbmNvZGluZygpLCByZXNvdXJjZS0+c2Vzc2lv
bklEKCkpOwotCi0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNlICVwIGNyZWF0ZWQg
dG8gcmV2YWxpZGF0ZSAlcCIsIG5ld1Jlc291cmNlLmdldCgpLCByZXNvdXJjZSk7Ci0gICAgbmV3
UmVzb3VyY2UtPnNldFJlc291cmNlVG9SZXZhbGlkYXRlKHJlc291cmNlKTsKLSAgICAKLSAgICBt
ZW1vcnlDYWNoZS5yZW1vdmUoKnJlc291cmNlKTsKLSAgICBtZW1vcnlDYWNoZS5hZGQoKm5ld1Jl
c291cmNlKTsKLSNpZiBFTkFCTEUoV0VCX1RJTUlORykKLSAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5yZXNvdXJjZVRpbWluZ0VuYWJsZWQoKSkKLSAgICAg
ICAgbV9yZXNvdXJjZVRpbWluZ0luZm8uc3RvcmVSZXNvdXJjZVRpbWluZ0luaXRpYXRvckluZm9y
bWF0aW9uKG5ld1Jlc291cmNlLCByZXF1ZXN0LCBmcmFtZSgpKTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKHJlcXVlc3QpOwotI2VuZGlmCi0gICAgcmV0dXJuIG5ld1Jlc291cmNlOwotfQotCi1D
YWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
OmxvYWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBDYWNoZWRSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgYXV0byYgbWVtb3J5Q2FjaGUgPSBNZW1vcnlDYWNoZTo6
c2luZ2xldG9uKCk7Ci0gICAgQVNTRVJUKCFyZXF1ZXN0LmFsbG93c0NhY2hpbmcoKSB8fCAhbWVt
b3J5Q2FjaGUucmVzb3VyY2VGb3JSZXF1ZXN0KHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCksIHNl
c3Npb25JRCgpKSk7Ci0KLSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiTG9hZGluZyBDYWNoZWRS
ZXNvdXJjZSBmb3IgJyVzJy4iLCByZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpLnN0cmlu
Z0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpLmxhdGluMSgpLmRhdGEoKSk7Ci0KLSAgICBDYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gcmVzb3VyY2UgPSBjcmVhdGVSZXNvdXJj
ZSh0eXBlLCByZXF1ZXN0Lm11dGFibGVSZXNvdXJjZVJlcXVlc3QoKSwgcmVxdWVzdC5jaGFyc2V0
KCksIHNlc3Npb25JRCgpKTsKLQotICAgIGlmIChyZXF1ZXN0LmFsbG93c0NhY2hpbmcoKSAmJiAh
bWVtb3J5Q2FjaGUuYWRkKCpyZXNvdXJjZSkpCi0gICAgICAgIHJlc291cmNlLT5zZXRPd25pbmdD
YWNoZWRSZXNvdXJjZUxvYWRlcih0aGlzKTsKLSNpZiBFTkFCTEUoV0VCX1RJTUlORykKLSAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5yZXNvdXJjZVRpbWlu
Z0VuYWJsZWQoKSkKLSAgICAgICAgbV9yZXNvdXJjZVRpbWluZ0luZm8uc3RvcmVSZXNvdXJjZVRp
bWluZ0luaXRpYXRvckluZm9ybWF0aW9uKHJlc291cmNlLCByZXF1ZXN0LCBmcmFtZSgpKTsKLSNl
bmRpZgotICAgIHJldHVybiByZXNvdXJjZTsKLX0KLQotc3RhdGljIHZvaWQgbG9nUmV2YWxpZGF0
aW9uKGNvbnN0IFN0cmluZyYgcmVhc29uLCBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudCYgbG9nQ2xp
ZW50KQotewotICAgIGxvZ0NsaWVudC5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFn
bm9zdGljTG9nZ2luZ0tleXM6OmNhY2hlZFJlc291cmNlUmV2YWxpZGF0aW9uS2V5KCksIERpYWdu
b3N0aWNMb2dnaW5nS2V5czo6cmVhc29uS2V5KCksIHJlYXNvbiwgU2hvdWxkU2FtcGxlOjpZZXMp
OwotfQotCi1zdGF0aWMgdm9pZCBsb2dSZXNvdXJjZVJldmFsaWRhdGlvbkRlY2lzaW9uKENhY2hl
ZFJlc291cmNlOjpSZXZhbGlkYXRpb25EZWNpc2lvbiByZWFzb24sIGNvbnN0IEZyYW1lKiBmcmFt
ZSkKLXsKLSAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+cGFnZSgpKQotICAgICAgICByZXR1cm47
Ci0gICAgYXV0byYgbG9nQ2xpZW50ID0gZnJhbWUtPnBhZ2UoKS0+ZGlhZ25vc3RpY0xvZ2dpbmdD
bGllbnQoKTsKLSAgICBzd2l0Y2ggKHJlYXNvbikgewotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OlJldmFsaWRhdGlvbkRlY2lzaW9uOjpObzoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6UmV2YWxpZGF0aW9uRGVjaXNpb246Olllc0R1ZVRvRXhwaXJlZDoKLSAgICAg
ICAgbG9nUmV2YWxpZGF0aW9uKERpYWdub3N0aWNMb2dnaW5nS2V5czo6aXNFeHBpcmVkS2V5KCks
IGxvZ0NsaWVudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJl
dmFsaWRhdGlvbkRlY2lzaW9uOjpZZXNEdWVUb05vU3RvcmU6Ci0gICAgICAgIGxvZ1JldmFsaWRh
dGlvbihEaWFnbm9zdGljTG9nZ2luZ0tleXM6Om5vU3RvcmVLZXkoKSwgbG9nQ2xpZW50KTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmV2YWxpZGF0aW9uRGVjaXNp
b246Olllc0R1ZVRvTm9DYWNoZToKLSAgICAgICAgbG9nUmV2YWxpZGF0aW9uKERpYWdub3N0aWNM
b2dnaW5nS2V5czo6bm9DYWNoZUtleSgpLCBsb2dDbGllbnQpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIENhY2hlZFJlc291cmNlOjpSZXZhbGlkYXRpb25EZWNpc2lvbjo6WWVzRHVlVG9DYWNo
ZVBvbGljeToKLSAgICAgICAgbG9nUmV2YWxpZGF0aW9uKERpYWdub3N0aWNMb2dnaW5nS2V5czo6
cmVsb2FkS2V5KCksIGxvZ0NsaWVudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OlJldmFsaWRhdGlvblBvbGljeSBDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6ZGV0ZXJtaW5lUmV2YWxpZGF0aW9uUG9saWN5KENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUs
IENhY2hlZFJlc291cmNlUmVxdWVzdCYgY2FjaGVkUmVzb3VyY2VSZXF1ZXN0LCBDYWNoZWRSZXNv
dXJjZSogZXhpc3RpbmdSZXNvdXJjZSkgY29uc3QKLXsKLSAgICBhdXRvJiByZXF1ZXN0ID0gY2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpOwotCi0gICAgaWYgKCFleGlzdGlu
Z1Jlc291cmNlKQotICAgICAgICByZXR1cm4gTG9hZDsKLQotICAgIC8vIFdlIGFscmVhZHkgaGF2
ZSBhIHByZWxvYWQgZ29pbmcgZm9yIHRoaXMgVVJMLgotICAgIGlmIChjYWNoZWRSZXNvdXJjZVJl
cXVlc3QuZm9yUHJlbG9hZCgpICYmIGV4aXN0aW5nUmVzb3VyY2UtPmlzUHJlbG9hZGVkKCkpCi0g
ICAgICAgIHJldHVybiBVc2U7Ci0KLSAgICAvLyBJZiB0aGUgc2FtZSBVUkwgaGFzIGJlZW4gbG9h
ZGVkIGFzIGEgZGlmZmVyZW50IHR5cGUsIHdlIG5lZWQgdG8gcmVsb2FkLgotICAgIGlmIChleGlz
dGluZ1Jlc291cmNlLT50eXBlKCkgIT0gdHlwZSkgewotICAgICAgICBMT0coUmVzb3VyY2VMb2Fk
aW5nLCAiQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRldGVybWluZVJldmFsaWRhdGlvblBvbGljeSBy
ZWxvYWRpbmcgZHVlIHRvIHR5cGUgbWlzbWF0Y2guIik7Ci0gICAgICAgIGxvZ01lbW9yeUNhY2hl
UmVzb3VyY2VSZXF1ZXN0KGZyYW1lKCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6aW5NZW1vcnlD
YWNoZUtleSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnVudXNlZFJlYXNvblR5cGVNaXNtYXRj
aEtleSgpKTsKLSAgICAgICAgcmV0dXJuIFJlbG9hZDsKLSAgICB9Ci0KLSAgICBpZiAoIWV4aXN0
aW5nUmVzb3VyY2UtPnZhcnlIZWFkZXJWYWx1ZXNNYXRjaChyZXF1ZXN0LCAqdGhpcykpCi0gICAg
ICAgIHJldHVybiBSZWxvYWQ7Ci0KLSAgICBhdXRvKiB0ZXh0RGVjb2RlciA9IGV4aXN0aW5nUmVz
b3VyY2UtPnRleHRSZXNvdXJjZURlY29kZXIoKTsKLSAgICBpZiAodGV4dERlY29kZXIgJiYgIXRl
eHREZWNvZGVyLT5oYXNFcXVhbEVuY29kaW5nRm9yQ2hhcnNldChjYWNoZWRSZXNvdXJjZVJlcXVl
c3QuY2hhcnNldCgpKSkKLSAgICAgICAgcmV0dXJuIFJlbG9hZDsKLQotICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgdXNlIHRoZSBzYW1lIGNhY2hlIHBvbGljeSBmb3IgYWxsIHJlc291cmNlIHR5cGVz
LiBUaGUgcmF3IHJlc291cmNlIHBvbGljeSBpcyBvdmVybHkgc3RyaWN0Ci0gICAgLy8gICAgICAg
IHdoaWxlIHRoZSBub3JtYWwgc3VicmVzb3VyY2UgcG9saWN5IGlzIHRvbyBsb29zZS4KLSAgICBp
ZiAoZXhpc3RpbmdSZXNvdXJjZS0+aXNNYWluT3JNZWRpYU9yUmF3UmVzb3VyY2UoKSAmJiBmcmFt
ZSgpKSB7Ci0gICAgICAgIGJvb2wgc3RyaWN0UG9saWN5RGlzYWJsZWQgPSBmcmFtZSgpLT5sb2Fk
ZXIoKS5pc1N0cmljdFJhd1Jlc291cmNlVmFsaWRhdGlvblBvbGljeURpc2FibGVkRm9yVGVzdGlu
ZygpOwotICAgICAgICBib29sIGNhblJldXNlUmF3UmVzb3VyY2UgPSBzdHJpY3RQb2xpY3lEaXNh
YmxlZCB8fCBkb3duY2FzdDxDYWNoZWRSYXdSZXNvdXJjZT4oKmV4aXN0aW5nUmVzb3VyY2UpLmNh
blJldXNlKHJlcXVlc3QpOwotICAgICAgICBpZiAoIWNhblJldXNlUmF3UmVzb3VyY2UpCi0gICAg
ICAgICAgICByZXR1cm4gUmVsb2FkOwotICAgIH0KLQotICAgIC8vIENvbmRpdGlvbmFsIHJlcXVl
c3RzIHNob3VsZCBoYXZlIGZhaWxlZCBjYW5SZXVzZSBjaGVjay4KLSAgICBBU1NFUlQoIXJlcXVl
c3QuaXNDb25kaXRpb25hbCgpKTsKLQotICAgIC8vIERvIG5vdCBsb2FkIGZyb20gY2FjaGUgaWYg
aW1hZ2VzIGFyZSBub3QgZW5hYmxlZC4gVGhlIGxvYWQgZm9yIHRoaXMgaW1hZ2Ugd2lsbCBiZSBi
bG9ja2VkCi0gICAgLy8gaW4gQ2FjaGVkSW1hZ2U6OmxvYWQuCi0gICAgaWYgKGNhY2hlZFJlc291
cmNlUmVxdWVzdC5kZWZlcigpID09IENhY2hlZFJlc291cmNlUmVxdWVzdDo6RGVmZXJyZWRCeUNs
aWVudCkKLSAgICAgICAgcmV0dXJuIFJlbG9hZDsKLQotICAgIC8vIERvbid0IHJlbG9hZCByZXNv
dXJjZXMgd2hpbGUgcGFzdGluZy4KLSAgICBpZiAobV9hbGxvd1N0YWxlUmVzb3VyY2VzKQotICAg
ICAgICByZXR1cm4gVXNlOwotCi0gICAgLy8gQWx3YXlzIHVzZSBwcmVsb2Fkcy4KLSAgICBpZiAo
ZXhpc3RpbmdSZXNvdXJjZS0+aXNQcmVsb2FkZWQoKSkKLSAgICAgICAgcmV0dXJuIFVzZTsKLQot
ICAgIC8vIFdlIGNhbiBmaW5kIHJlc291cmNlcyB0aGF0IGFyZSBiZWluZyB2YWxpZGF0ZWQgZnJv
bSBjYWNoZSBvbmx5IHdoZW4gdmFsaWRhdGlvbiBpcyBqdXN0IHN1Y2Nlc3NmdWxseSBjb21wbGV0
aW5nLgotICAgIGlmIChleGlzdGluZ1Jlc291cmNlLT52YWxpZGF0aW9uQ29tcGxldGluZygpKQot
ICAgICAgICByZXR1cm4gVXNlOwotICAgIEFTU0VSVCghZXhpc3RpbmdSZXNvdXJjZS0+dmFsaWRh
dGlvbkluUHJvZ3Jlc3MoKSk7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgcmVkaXJlY3QgY2hhaW4u
Ci0gICAgYm9vbCBjYWNoZVBvbGljeUlzSGlzdG9yeUJ1ZmZlciA9IGNhY2hlUG9saWN5KHR5cGUp
ID09IENhY2hlUG9saWN5SGlzdG9yeUJ1ZmZlcjsKLSAgICBpZiAoIWV4aXN0aW5nUmVzb3VyY2Ut
PnJlZGlyZWN0Q2hhaW5BbGxvd3NSZXVzZShjYWNoZVBvbGljeUlzSGlzdG9yeUJ1ZmZlciA/IFJl
dXNlRXhwaXJlZFJlZGlyZWN0aW9uIDogRG9Ob3RSZXVzZUV4cGlyZWRSZWRpcmVjdGlvbikpIHsK
LSAgICAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlTG9hZGVyOjpkZXRl
cm1pbmVSZXZhbGlkYXRpb25Qb2xpY3kgcmVsb2FkaW5nIGR1ZSB0byBub3QgY2FjaGVkIG9yIGV4
cGlyZWQgcmVkaXJlY3Rpb25zLiIpOwotICAgICAgICBsb2dNZW1vcnlDYWNoZVJlc291cmNlUmVx
dWVzdChmcmFtZSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmluTWVtb3J5Q2FjaGVLZXkoKSwg
RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjp1bnVzZWRSZWFzb25SZWRpcmVjdENoYWluS2V5KCkpOwot
ICAgICAgICByZXR1cm4gUmVsb2FkOwotICAgIH0KLQotICAgIC8vIENhY2hlUG9saWN5SGlzdG9y
eUJ1ZmZlciB1c2VzIHRoZSBjYWNoZSBleGNlcHQgaWYgdGhpcyBpcyBhIG1haW4gcmVzb3VyY2Ug
d2l0aCAiY2FjaGUtY29udHJvbDogbm8tc3RvcmUiLgotICAgIGlmIChjYWNoZVBvbGljeUlzSGlz
dG9yeUJ1ZmZlcikgewotICAgICAgICAvLyBGSVhNRTogSWdub3JpbmcgImNhY2hlLWNvbnRyb2w6
IG5vLWNhY2hlIiBmb3Igc3ViLXJlc291cmNlcyBvbiBoaXN0b3J5IG5hdmlnYXRpb24gYnV0IG5v
dCB0aGUgbWFpbgotICAgICAgICAvLyByZXNvdXJjZSBpcyBpbmNvbnNpc3RlbnQuIFdlIHNob3Vs
ZCBwcm9iYWJseSBoYXJtb25pemUgdGhpcy4KLSAgICAgICAgaWYgKCFleGlzdGluZ1Jlc291cmNl
LT5yZXNwb25zZSgpLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgpIHx8IHR5cGUgIT0gQ2Fj
aGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZSkKLSAgICAgICAgICAgIHJldHVybiBVc2U7Ci0gICAg
fQotCi0gICAgLy8gRG9uJ3QgcmV1c2UgcmVzb3VyY2VzIHdpdGggQ2FjaGUtY29udHJvbDogbm8t
c3RvcmUuCi0gICAgaWYgKGV4aXN0aW5nUmVzb3VyY2UtPnJlc3BvbnNlKCkuY2FjaGVDb250cm9s
Q29udGFpbnNOb1N0b3JlKCkpIHsKLSAgICAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hl
ZFJlc291cmNlTG9hZGVyOjpkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3kgcmVsb2FkaW5nIGR1
ZSB0byBDYWNoZS1jb250cm9sOiBuby1zdG9yZS4iKTsKLSAgICAgICAgbG9nTWVtb3J5Q2FjaGVS
ZXNvdXJjZVJlcXVlc3QoZnJhbWUoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjppbk1lbW9yeUNh
Y2hlS2V5KCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6dW51c2VkUmVhc29uTm9TdG9yZUtleSgp
KTsKLSAgICAgICAgcmV0dXJuIFJlbG9hZDsKLSAgICB9Ci0KLSAgICAvLyBJZiBjcmVkZW50aWFs
cyB3ZXJlIHNlbnQgd2l0aCB0aGUgcHJldmlvdXMgcmVxdWVzdCBhbmQgd29uJ3QgYmUKLSAgICAv
LyB3aXRoIHRoaXMgb25lLCBvciB2aWNlIHZlcnNhLCByZS1mZXRjaCB0aGUgcmVzb3VyY2UuCi0g
ICAgLy8KLSAgICAvLyBUaGlzIGhlbHBzIHdpdGggdGhlIGNhc2Ugd2hlcmUgdGhlIHNlcnZlciBz
ZW5kcyBiYWNrCi0gICAgLy8gIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbjogKiIgYWxsIHRo
ZSB0aW1lLCBidXQgc29tZSBvZiB0aGUKLSAgICAvLyBjbGllbnQncyByZXF1ZXN0cyBhcmUgbWFk
ZSB3aXRob3V0IENPUlMgYW5kIHNvbWUgd2l0aC4KLSAgICBpZiAoZXhpc3RpbmdSZXNvdXJjZS0+
cmVzb3VyY2VSZXF1ZXN0KCkuYWxsb3dDb29raWVzKCkgIT0gcmVxdWVzdC5hbGxvd0Nvb2tpZXMo
KSkgewotICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
OmRldGVybWluZVJldmFsaWRhdGlvblBvbGljeSByZWxvYWRpbmcgZHVlIHRvIGRpZmZlcmVuY2Ug
aW4gY3JlZGVudGlhbHMgc2V0dGluZ3MuIik7Ci0gICAgICAgIGxvZ01lbW9yeUNhY2hlUmVzb3Vy
Y2VSZXF1ZXN0KGZyYW1lKCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6aW5NZW1vcnlDYWNoZUtl
eSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnVudXNlZFJlYXNvbkNyZWRlbnRpYWxTZXR0aW5n
c0tleSgpKTsKLSAgICAgICAgcmV0dXJuIFJlbG9hZDsKLSAgICB9Ci0KLSAgICAvLyBEdXJpbmcg
dGhlIGluaXRpYWwgbG9hZCwgYXZvaWQgbG9hZGluZyB0aGUgc2FtZSByZXNvdXJjZSBtdWx0aXBs
ZSB0aW1lcyBmb3IgYSBzaW5nbGUgZG9jdW1lbnQsIGV2ZW4gaWYgdGhlIGNhY2hlIHBvbGljaWVz
IHdvdWxkIHRlbGwgdXMgdG8uCi0gICAgaWYgKGRvY3VtZW50KCkgJiYgIWRvY3VtZW50KCktPmxv
YWRFdmVudEZpbmlzaGVkKCkgJiYgbV92YWxpZGF0ZWRVUkxzLmNvbnRhaW5zKGV4aXN0aW5nUmVz
b3VyY2UtPnVybCgpKSkKLSAgICAgICAgcmV0dXJuIFVzZTsKLQotICAgIC8vIENhY2hlUG9saWN5
UmVsb2FkIGFsd2F5cyByZWxvYWRzCi0gICAgaWYgKGNhY2hlUG9saWN5KHR5cGUpID09IENhY2hl
UG9saWN5UmVsb2FkKSB7Ci0gICAgICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZWRSZXNv
dXJjZUxvYWRlcjo6ZGV0ZXJtaW5lUmV2YWxpZGF0aW9uUG9saWN5IHJlbG9hZGluZyBkdWUgdG8g
Q2FjaGVQb2xpY3lSZWxvYWQuIik7Ci0gICAgICAgIGxvZ01lbW9yeUNhY2hlUmVzb3VyY2VSZXF1
ZXN0KGZyYW1lKCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6aW5NZW1vcnlDYWNoZUtleSgpLCBE
aWFnbm9zdGljTG9nZ2luZ0tleXM6OnVudXNlZFJlYXNvblJlbG9hZEtleSgpKTsKLSAgICAgICAg
cmV0dXJuIFJlbG9hZDsKLSAgICB9Ci0gICAgCi0gICAgLy8gV2UnbGwgdHJ5IHRvIHJlbG9hZCB0
aGUgcmVzb3VyY2UgaWYgaXQgZmFpbGVkIGxhc3QgdGltZS4KLSAgICBpZiAoZXhpc3RpbmdSZXNv
dXJjZS0+ZXJyb3JPY2N1cnJlZCgpKSB7Ci0gICAgICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJD
YWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGV0ZXJtaW5lUmV2YWxpZGF0aW9uUG9saWN5ZSByZWxvYWRp
bmcgZHVlIHRvIHJlc291cmNlIGJlaW5nIGluIHRoZSBlcnJvciBzdGF0ZSIpOwotICAgICAgICBs
b2dNZW1vcnlDYWNoZVJlc291cmNlUmVxdWVzdChmcmFtZSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6OmluTWVtb3J5Q2FjaGVLZXkoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjp1bnVzZWRSZWFz
b25FcnJvcktleSgpKTsKLSAgICAgICAgcmV0dXJuIFJlbG9hZDsKLSAgICB9Ci0gICAgCi0gICAg
Ly8gRm9yIHJlc291cmNlcyB0aGF0IGFyZSBub3QgeWV0IGxvYWRlZCB3ZSBpZ25vcmUgdGhlIGNh
Y2hlIHBvbGljeS4KLSAgICBpZiAoZXhpc3RpbmdSZXNvdXJjZS0+aXNMb2FkaW5nKCkpCi0gICAg
ICAgIHJldHVybiBVc2U7Ci0KLSAgICBhdXRvIHJldmFsaWRhdGlvbkRlY2lzaW9uID0gZXhpc3Rp
bmdSZXNvdXJjZS0+bWFrZVJldmFsaWRhdGlvbkRlY2lzaW9uKGNhY2hlUG9saWN5KHR5cGUpKTsK
LSAgICBsb2dSZXNvdXJjZVJldmFsaWRhdGlvbkRlY2lzaW9uKHJldmFsaWRhdGlvbkRlY2lzaW9u
LCBmcmFtZSgpKTsKLQotICAgIC8vIENoZWNrIGlmIHRoZSBjYWNoZSBoZWFkZXJzIHJlcXVpcmVz
IHVzIHRvIHJldmFsaWRhdGUgKGNhY2hlIGV4cGlyYXRpb24gZm9yIGV4YW1wbGUpLgotICAgIGlm
IChyZXZhbGlkYXRpb25EZWNpc2lvbiAhPSBDYWNoZWRSZXNvdXJjZTo6UmV2YWxpZGF0aW9uRGVj
aXNpb246Ok5vKSB7Ci0gICAgICAgIC8vIFNlZSBpZiB0aGUgcmVzb3VyY2UgaGFzIHVzYWJsZSBF
VGFnIG9yIExhc3QtbW9kaWZpZWQgaGVhZGVycy4KLSAgICAgICAgaWYgKGV4aXN0aW5nUmVzb3Vy
Y2UtPmNhblVzZUNhY2hlVmFsaWRhdG9yKCkpCi0gICAgICAgICAgICByZXR1cm4gUmV2YWxpZGF0
ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIE5vLCBtdXN0IHJlbG9hZC4KLSAgICAgICAgTE9HKFJl
c291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlTG9hZGVyOjpkZXRlcm1pbmVSZXZhbGlkYXRp
b25Qb2xpY3kgcmVsb2FkaW5nIGR1ZSB0byBtaXNzaW5nIGNhY2hlIHZhbGlkYXRvcnMuIik7Ci0g
ICAgICAgIGxvZ01lbW9yeUNhY2hlUmVzb3VyY2VSZXF1ZXN0KGZyYW1lKCksIERpYWdub3N0aWNM
b2dnaW5nS2V5czo6aW5NZW1vcnlDYWNoZUtleSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnVu
dXNlZFJlYXNvbk11c3RSZXZhbGlkYXRlTm9WYWxpZGF0b3JLZXkoKSk7Ci0gICAgICAgIHJldHVy
biBSZWxvYWQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIFVzZTsKLX0KLQotdm9pZCBDYWNoZWRSZXNv
dXJjZUxvYWRlcjo6cHJpbnRBY2Nlc3NEZW5pZWRNZXNzYWdlKGNvbnN0IFVSTCYgdXJsKSBjb25z
dAotewotICAgIGlmICh1cmwuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgh
ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIG1lc3NhZ2U7Ci0gICAgaWYg
KCFtX2RvY3VtZW50IHx8IG1fZG9jdW1lbnQtPnVybCgpLmlzTnVsbCgpKQotICAgICAgICBtZXNz
YWdlID0gIlVuc2FmZSBhdHRlbXB0IHRvIGxvYWQgVVJMICIgKyB1cmwuc3RyaW5nQ2VudGVyRWxs
aXBzaXplZFRvTGVuZ3RoKCkgKyAnLic7Ci0gICAgZWxzZQotICAgICAgICBtZXNzYWdlID0gIlVu
c2FmZSBhdHRlbXB0IHRvIGxvYWQgVVJMICIgKyB1cmwuc3RyaW5nQ2VudGVyRWxsaXBzaXplZFRv
TGVuZ3RoKCkgKyAiIGZyb20gZnJhbWUgd2l0aCBVUkwgIiArIG1fZG9jdW1lbnQtPnVybCgpLnN0
cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpICsgIi4gRG9tYWlucywgcHJvdG9jb2xzIGFu
ZCBwb3J0cyBtdXN0IG1hdGNoLlxuIjsKLQotICAgIGZyYW1lKCktPmRvY3VtZW50KCktPmFkZENv
bnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlNlY3VyaXR5LCBNZXNzYWdlTGV2ZWw6OkVycm9y
LCBtZXNzYWdlKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6c2V0QXV0b0xvYWRJ
bWFnZXMoYm9vbCBlbmFibGUpCi17Ci0gICAgaWYgKGVuYWJsZSA9PSBtX2F1dG9Mb2FkSW1hZ2Vz
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2F1dG9Mb2FkSW1hZ2VzID0gZW5hYmxlOwotCi0g
ICAgaWYgKCFtX2F1dG9Mb2FkSW1hZ2VzKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZWxvYWRJ
bWFnZXNJZk5vdERlZmVycmVkKCk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnNl
dEltYWdlc0VuYWJsZWQoYm9vbCBlbmFibGUpCi17Ci0gICAgaWYgKGVuYWJsZSA9PSBtX2ltYWdl
c0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faW1hZ2VzRW5hYmxlZCA9IGVuYWJs
ZTsKLQotICAgIGlmICghbV9pbWFnZXNFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBy
ZWxvYWRJbWFnZXNJZk5vdERlZmVycmVkKCk7Ci19Ci0KLWJvb2wgQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXI6OmNsaWVudERlZmVyc0ltYWdlKGNvbnN0IFVSTCYpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFt
X2ltYWdlc0VuYWJsZWQ7Ci19Ci0KLWJvb2wgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnNob3VsZFBl
cmZvcm1JbWFnZUxvYWQoY29uc3QgVVJMJiB1cmwpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYXV0
b0xvYWRJbWFnZXMgfHwgdXJsLnByb3RvY29sSXNEYXRhKCk7Ci19Ci0KLWJvb2wgQ2FjaGVkUmVz
b3VyY2VMb2FkZXI6OnNob3VsZERlZmVySW1hZ2VMb2FkKGNvbnN0IFVSTCYgdXJsKSBjb25zdAot
ewotICAgIHJldHVybiBjbGllbnREZWZlcnNJbWFnZSh1cmwpIHx8ICFzaG91bGRQZXJmb3JtSW1h
Z2VMb2FkKHVybCk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlbG9hZEltYWdl
c0lmTm90RGVmZXJyZWQoKQotewotICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiBtX2RvY3VtZW50
UmVzb3VyY2VzLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChpczxDYWNoZWRJbWFnZT4oKnJlc291
cmNlKSAmJiByZXNvdXJjZS0+c3RpbGxOZWVkc0xvYWQoKSAmJiAhY2xpZW50RGVmZXJzSW1hZ2Uo
cmVzb3VyY2UtPnVybCgpKSkKLSAgICAgICAgICAgIGRvd25jYXN0PENhY2hlZEltYWdlPigqcmVz
b3VyY2UpLmxvYWQoKnRoaXMsIGRlZmF1bHRDYWNoZWRSZXNvdXJjZU9wdGlvbnMoKSk7Ci0gICAg
fQotfQotCi1DYWNoZVBvbGljeSBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2FjaGVQb2xpY3koQ2Fj
aGVkUmVzb3VyY2U6OlR5cGUgdHlwZSkgY29uc3QKLXsKLSAgICBGcmFtZSogZnJhbWUgPSB0aGlz
LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBDYWNoZVBvbGljeVZl
cmlmeTsKLQotICAgIGlmICh0eXBlICE9IENhY2hlZFJlc291cmNlOjpNYWluUmVzb3VyY2UpCi0g
ICAgICAgIHJldHVybiBmcmFtZS0+bG9hZGVyKCkuc3VicmVzb3VyY2VDYWNoZVBvbGljeSgpOwot
Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKSB7Ci0gICAgICAgIGlmIChwYWdl
LT5pc1Jlc291cmNlQ2FjaGluZ0Rpc2FibGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gQ2FjaGVQ
b2xpY3lSZWxvYWQ7Ci0gICAgfQotCi0gICAgc3dpdGNoIChmcmFtZS0+bG9hZGVyKCkubG9hZFR5
cGUoKSkgewotICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6UmVsb2FkRnJvbU9yaWdpbjoKLSAgICBj
YXNlIEZyYW1lTG9hZFR5cGU6OlJlbG9hZDoKLSAgICAgICAgcmV0dXJuIENhY2hlUG9saWN5UmVs
b2FkOwotICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6QmFjazoKLSAgICBjYXNlIEZyYW1lTG9hZFR5
cGU6OkZvcndhcmQ6Ci0gICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQ6
Ci0gICAgICAgIC8vIERvIG5vdCByZXZhbGlkYXRlIGNhY2hlZCBtYWluIHJlc291cmNlIG9uIGJh
Y2svZm9yd2FyZCBuYXZpZ2F0aW9uLgotICAgICAgICByZXR1cm4gQ2FjaGVQb2xpY3lIaXN0b3J5
QnVmZmVyOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBDYWNoZVBvbGljeVZlcmlmeTsK
LSAgICB9Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlbW92ZUNhY2hlZFJlc291
cmNlKENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAgRG9j
dW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmZpbmQo
cmVzb3VyY2UudXJsKCkpOwotICAgIGlmIChpdCAhPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgp
KQotICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmdldCgpID09ICZyZXNvdXJjZSk7Ci0jZW5kaWYK
LSAgICBtX2RvY3VtZW50UmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZS51cmwoKSk7Ci19Ci0KLXZv
aWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmxvYWREb25lKENhY2hlZFJlc291cmNlKiByZXNvdXJj
ZSwgYm9vbCBzaG91bGRQZXJmb3JtUG9zdExvYWRBY3Rpb25zKQotewotICAgIFJlZlB0cjxEb2N1
bWVudExvYWRlcj4gcHJvdGVjdERvY3VtZW50TG9hZGVyKG1fZG9jdW1lbnRMb2FkZXIpOwotICAg
IFJlZlB0cjxEb2N1bWVudD4gcHJvdGVjdERvY3VtZW50KG1fZG9jdW1lbnQpOwotCi0jaWYgRU5B
QkxFKFdFQl9USU1JTkcpCi0gICAgaWYgKHJlc291cmNlICYmIGRvY3VtZW50KCkgJiYgUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5yZXNvdXJjZVRpbWluZ0VuYWJsZWQo
KSkKLSAgICAgICAgbV9yZXNvdXJjZVRpbWluZ0luZm8uYWRkUmVzb3VyY2VUaW1pbmcocmVzb3Vy
Y2UsICpkb2N1bWVudCgpLCByZXNvdXJjZS0+bG9hZGVyKCktPmxvYWRUaW1pbmcoKSk7Ci0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShyZXNvdXJjZSk7Ci0jZW5kaWYKLQotICAgIGlmIChmcmFtZSgp
KQotICAgICAgICBmcmFtZSgpLT5sb2FkZXIoKS5sb2FkRG9uZSgpOwotCi0gICAgaWYgKHNob3Vs
ZFBlcmZvcm1Qb3N0TG9hZEFjdGlvbnMpCi0gICAgICAgIHBlcmZvcm1Qb3N0TG9hZEFjdGlvbnMo
KTsKLQotICAgIGlmICghbV9nYXJiYWdlQ29sbGVjdERvY3VtZW50UmVzb3VyY2VzVGltZXIuaXNB
Y3RpdmUoKSkKLSAgICAgICAgbV9nYXJiYWdlQ29sbGVjdERvY3VtZW50UmVzb3VyY2VzVGltZXIu
c3RhcnRPbmVTaG90KDApOwotfQotCi0vLyBHYXJiYWdlIGNvbGxlY3RpbmcgbV9kb2N1bWVudFJl
c291cmNlcyBpcyBhIHdvcmthcm91bmQgZm9yIHRoZQotLy8gQ2FjaGVkUmVzb3VyY2VIYW5kbGVz
IG9uIHRoZSBSSFMgYmVpbmcgc3Ryb25nIHJlZmVyZW5jZXMuIElkZWFsbHkgdGhpcwotLy8gd291
bGQgYmUgYSB3ZWFrIG1hcCwgaG93ZXZlciBDYWNoZWRSZXNvdXJjZUhhbmRsZXMgcGVyZm9ybSBh
ZGRpdGlvbmFsCi0vLyBib29ra2VlcGluZyBvbiBDYWNoZWRSZXNvdXJjZXMsIHNvIGluc3RlYWQg
cHNldWRvLUdDIHRoZW0gLS0gd2hlbiB0aGUKLS8vIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIDEs
IG1fZG9jdW1lbnRSZXNvdXJjZXMgaXMgdGhlIG9ubHkgcmVmZXJlbmNlLCBzbwotLy8gcmVtb3Zl
IGl0IGZyb20gdGhlIG1hcC4KLXZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmdhcmJhZ2VDb2xs
ZWN0RG9jdW1lbnRSZXNvdXJjZXMoKQotewotICAgIHR5cGVkZWYgVmVjdG9yPFN0cmluZywgMTA+
IFN0cmluZ1ZlY3RvcjsKLSAgICBTdHJpbmdWZWN0b3IgcmVzb3VyY2VzVG9EZWxldGU7Ci0KLSAg
ICBmb3IgKGF1dG8mIHJlc291cmNlIDogbV9kb2N1bWVudFJlc291cmNlcykgewotICAgICAgICBp
ZiAocmVzb3VyY2UudmFsdWUtPmhhc09uZUhhbmRsZSgpKSB7Ci0gICAgICAgICAgICByZXNvdXJj
ZXNUb0RlbGV0ZS5hcHBlbmQocmVzb3VyY2Uua2V5KTsKLSAgICAgICAgICAgIHJlc291cmNlLnZh
bHVlLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcihudWxscHRyKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiByZXNvdXJjZXNUb0RlbGV0ZSkKLSAg
ICAgICAgbV9kb2N1bWVudFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UpOwotfQotCi12b2lkIENh
Y2hlZFJlc291cmNlTG9hZGVyOjpwZXJmb3JtUG9zdExvYWRBY3Rpb25zKCkKLXsKLSAgICBjaGVj
a0ZvclBlbmRpbmdQcmVsb2FkcygpOwotCi0gICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRl
clN0cmF0ZWd5KCktPnNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVz
b3VyY2VMb2FkZXI6OmluY3JlbWVudFJlcXVlc3RDb3VudChjb25zdCBDYWNoZWRSZXNvdXJjZSYg
cmVzb3VyY2UpCi17Ci0gICAgaWYgKHJlc291cmNlLmlnbm9yZUZvclJlcXVlc3RDb3VudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICArK21fcmVxdWVzdENvdW50OwotfQotCi12b2lkIENhY2hl
ZFJlc291cmNlTG9hZGVyOjpkZWNyZW1lbnRSZXF1ZXN0Q291bnQoY29uc3QgQ2FjaGVkUmVzb3Vy
Y2UmIHJlc291cmNlKQotewotICAgIGlmIChyZXNvdXJjZS5pZ25vcmVGb3JSZXF1ZXN0Q291bnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLS1tX3JlcXVlc3RDb3VudDsKLSAgICBBU1NFUlQo
bV9yZXF1ZXN0Q291bnQgPiAtMSk7Ci19Ci0KLUNhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJl
c291cmNlPiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6VHlw
ZSB0eXBlLCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgY2hh
cnNldCwgUHJlbG9hZFR5cGUgcHJlbG9hZFR5cGUpCi17Ci0gICAgLy8gV2UgYWx3YXlzIHByZWxv
YWQgcmVzb3VyY2VzIG9uIGlPUy4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTEyNzY+LgotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY29uc2lkZXIgYWRkaW5n
IGEgc2V0dGluZyB0byB0b2dnbGUgYWdncmVzc2l2ZSBwcmVsb2FkaW5nIGJlaGF2aW9yIGFzIG9w
cG9zZWQKLSAgICAvLyB0byBtYWtpbmcgdGhpcyBiZWhhdmlvciBzcGVjaWZpYyB0byBpT1MuCi0j
aWYgIVBMQVRGT1JNKElPUykKLSAgICBib29sIGhhc1JlbmRlcmluZyA9IG1fZG9jdW1lbnQtPmJv
ZHlPckZyYW1lc2V0KCkgJiYgbV9kb2N1bWVudC0+cmVuZGVyVmlldygpOwotICAgIGJvb2wgY2Fu
QmxvY2tQYXJzZXIgPSB0eXBlID09IENhY2hlZFJlc291cmNlOjpTY3JpcHQgfHwgdHlwZSA9PSBD
YWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDsKLSAgICBpZiAoIWhhc1JlbmRlcmluZyAmJiAh
Y2FuQmxvY2tQYXJzZXIgJiYgcHJlbG9hZFR5cGUgPT0gSW1wbGljaXRQcmVsb2FkKSB7Ci0gICAg
ICAgIC8vIERvbid0IHByZWxvYWQgc3VicmVzb3VyY2VzIHRoYXQgY2FuJ3QgYmxvY2sgdGhlIHBh
cnNlciBiZWZvcmUgd2UgaGF2ZSBzb21ldGhpbmcgdG8gZHJhdy4KLSAgICAgICAgLy8gVGhpcyBo
ZWxwcyBwcmV2ZW50IHByZWxvYWRzIGZyb20gZGVsYXlpbmcgZmlyc3QgZGlzcGxheSB3aGVuIGJh
bmR3aWR0aCBpcyBsaW1pdGVkLgotICAgICAgICBQZW5kaW5nUHJlbG9hZCBwZW5kaW5nUHJlbG9h
ZCA9IHsgdHlwZSwgcmVxdWVzdCwgY2hhcnNldCB9OwotICAgICAgICBtX3BlbmRpbmdQcmVsb2Fk
cy5hcHBlbmQocGVuZGluZ1ByZWxvYWQpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9
Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShwcmVsb2FkVHlwZSk7Ci0jZW5kaWYKLSAgICByZXR1
cm4gcmVxdWVzdFByZWxvYWQodHlwZSwgcmVxdWVzdCwgY2hhcnNldCk7Ci19Ci0KLXZvaWQgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OmNoZWNrRm9yUGVuZGluZ1ByZWxvYWRzKCkgCi17Ci0gICAgaWYg
KG1fcGVuZGluZ1ByZWxvYWRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGF1dG8q
IGJvZHkgPSBtX2RvY3VtZW50LT5ib2R5T3JGcmFtZXNldCgpOwotICAgIGlmICghYm9keSB8fCAh
Ym9keS0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuOwotI2lmIFBMQVRGT1JNKElPUykKLSAg
ICAvLyBXZSBhbHdheXMgcHJlbG9hZCByZXNvdXJjZXMgb24gaU9TLiBTZWUgPGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTI3Nj4uCi0gICAgLy8gU28sIHdlIHNob3Vs
ZCBuZXZlciBoYXZlIGFueSBwZW5kaW5nIHByZWxvYWRzLgotICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgbG9vayB0byBhdm9pZCBjb21waWxpbmcgdGhpcyBjb2RlIGVudGlyZWx5IHdoZW4gYnVpbGRp
bmcgZm9yIGlPUy4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgIHdoaWxl
ICghbV9wZW5kaW5nUHJlbG9hZHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFBlbmRpbmdQcmVsb2Fk
IHByZWxvYWQgPSBtX3BlbmRpbmdQcmVsb2Fkcy50YWtlRmlyc3QoKTsKLSAgICAgICAgLy8gRG9u
J3QgcmVxdWVzdCBwcmVsb2FkIGlmIHRoZSByZXNvdXJjZSBhbHJlYWR5IGxvYWRlZCBub3JtYWxs
eSAodGhpcyB3aWxsIHJlc3VsdCBpbiBkb3VibGUgbG9hZCBpZiB0aGUgcGFnZSBpcyBiZWluZyBy
ZWxvYWRlZCB3aXRoIGNhY2hlZCByZXN1bHRzIGlnbm9yZWQpLgotICAgICAgICBpZiAoIWNhY2hl
ZFJlc291cmNlKHByZWxvYWQubV9yZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpKSkKLSAg
ICAgICAgICAgIHJlcXVlc3RQcmVsb2FkKHByZWxvYWQubV90eXBlLCBwcmVsb2FkLm1fcmVxdWVz
dCwgcHJlbG9hZC5tX2NoYXJzZXQpOwotICAgIH0KLSAgICBtX3BlbmRpbmdQcmVsb2Fkcy5jbGVh
cigpOwotfQotCi1DYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gQ2FjaGVkUmVz
b3VyY2VMb2FkZXI6OnJlcXVlc3RQcmVsb2FkKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIENh
Y2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQotewot
ICAgIFN0cmluZyBlbmNvZGluZzsKLSAgICBpZiAodHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6U2Ny
aXB0IHx8IHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQpCi0gICAgICAgIGVu
Y29kaW5nID0gY2hhcnNldC5pc0VtcHR5KCkgPyBtX2RvY3VtZW50LT5jaGFyc2V0KCkgOiBjaGFy
c2V0OwotCi0gICAgcmVxdWVzdC5zZXRDaGFyc2V0KGVuY29kaW5nKTsKLSAgICByZXF1ZXN0LnNl
dEZvclByZWxvYWQodHJ1ZSk7Ci0KLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNv
dXJjZT4gcmVzb3VyY2UgPSByZXF1ZXN0UmVzb3VyY2UodHlwZSwgcmVxdWVzdCk7Ci0gICAgaWYg
KCFyZXNvdXJjZSB8fCAobV9wcmVsb2FkcyAmJiBtX3ByZWxvYWRzLT5jb250YWlucyhyZXNvdXJj
ZS5nZXQoKSkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAvLyBGb250cyBuZWVkIHNw
ZWNpYWwgdHJlYXRtZW50IHNpbmNlIGp1c3QgY3JlYXRpbmcgdGhlIHJlc291cmNlIGRvZXNuJ3Qg
dHJpZ2dlciBhIGxvYWQuCi0gICAgaWYgKHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNv
dXJjZSkKLSAgICAgICAgZG93bmNhc3Q8Q2FjaGVkRm9udD4ocmVzb3VyY2UuZ2V0KCkpLT5iZWdp
bkxvYWRJZk5lZWRlZCgqdGhpcyk7Ci0gICAgcmVzb3VyY2UtPmluY3JlYXNlUHJlbG9hZENvdW50
KCk7Ci0KLSAgICBpZiAoIW1fcHJlbG9hZHMpCi0gICAgICAgIG1fcHJlbG9hZHMgPSBzdGQ6Om1h
a2VfdW5pcXVlPExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNlKj4+KCk7Ci0gICAgbV9wcmVsb2Fk
cy0+YWRkKHJlc291cmNlLmdldCgpKTsKLQotI2lmIFBSRUxPQURfREVCVUcKLSAgICBwcmludGYo
IlBSRUxPQURJTkcgJXNcbiIsICByZXNvdXJjZS0+dXJsKCkubGF0aW4xKCkuZGF0YSgpKTsKLSNl
bmRpZgotICAgIHJldHVybiByZXNvdXJjZTsKLX0KLQotYm9vbCBDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6aXNQcmVsb2FkZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGNvbnN0Ci17Ci0gICAgY29u
c3QgVVJMJiB1cmwgPSBtX2RvY3VtZW50LT5jb21wbGV0ZVVSTCh1cmxTdHJpbmcpOwotCi0gICAg
aWYgKG1fcHJlbG9hZHMpIHsKLSAgICAgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6ICptX3ByZWxv
YWRzKSB7Ci0gICAgICAgICAgICBpZiAocmVzb3VyY2UtPnVybCgpID09IHVybCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoYXV0byYg
cGVuZGluZ1ByZWxvYWQgOiBtX3BlbmRpbmdQcmVsb2FkcykgewotICAgICAgICBpZiAocGVuZGlu
Z1ByZWxvYWQubV9yZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpID09IHVybCkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNsZWFyUHJlbG9hZHMoKQotewotI2lmIFBSRUxPQURfREVC
VUcKLSAgICBwcmludFByZWxvYWRTdGF0cygpOwotI2VuZGlmCi0gICAgaWYgKCFtX3ByZWxvYWRz
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGF1dG8qIHJlc291cmNlIDogKm1fcHJlbG9h
ZHMpIHsKLSAgICAgICAgcmVzb3VyY2UtPmRlY3JlYXNlUHJlbG9hZENvdW50KCk7Ci0gICAgICAg
IGJvb2wgZGVsZXRlZCA9IHJlc291cmNlLT5kZWxldGVJZlBvc3NpYmxlKCk7Ci0gICAgICAgIGlm
ICghZGVsZXRlZCAmJiByZXNvdXJjZS0+cHJlbG9hZFJlc3VsdCgpID09IENhY2hlZFJlc291cmNl
OjpQcmVsb2FkTm90UmVmZXJlbmNlZCkKLSAgICAgICAgICAgIE1lbW9yeUNhY2hlOjpzaW5nbGV0
b24oKS5yZW1vdmUoKnJlc291cmNlKTsKLSAgICB9Ci0gICAgbV9wcmVsb2FkcyA9IG51bGxwdHI7
Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNsZWFyUGVuZGluZ1ByZWxvYWRzKCkK
LXsKLSAgICBtX3BlbmRpbmdQcmVsb2Fkcy5jbGVhcigpOwotfQotCi0jaWYgUFJFTE9BRF9ERUJV
Rwotdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cHJpbnRQcmVsb2FkU3RhdHMoKQotewotICAg
IHVuc2lnbmVkIHNjcmlwdHMgPSAwOwotICAgIHVuc2lnbmVkIHNjcmlwdE1pc3NlcyA9IDA7Ci0g
ICAgdW5zaWduZWQgc3R5bGVzaGVldHMgPSAwOwotICAgIHVuc2lnbmVkIHN0eWxlc2hlZXRNaXNz
ZXMgPSAwOwotICAgIHVuc2lnbmVkIGltYWdlcyA9IDA7Ci0gICAgdW5zaWduZWQgaW1hZ2VNaXNz
ZXMgPSAwOwotICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiBtX3ByZWxvYWRzKSB7Ci0gICAgICAg
IGlmIChyZXNvdXJjZS0+cHJlbG9hZFJlc3VsdCgpID09IENhY2hlZFJlc291cmNlOjpQcmVsb2Fk
Tm90UmVmZXJlbmNlZCkKLSAgICAgICAgICAgIHByaW50ZigiISEgVU5SRUZFUkVOQ0VEIFBSRUxP
QUQgJXNcbiIsIHJlc291cmNlLT51cmwoKS5sYXRpbjEoKS5kYXRhKCkpOwotICAgICAgICBlbHNl
IGlmIChyZXNvdXJjZS0+cHJlbG9hZFJlc3VsdCgpID09IENhY2hlZFJlc291cmNlOjpQcmVsb2Fk
UmVmZXJlbmNlZFdoaWxlQ29tcGxldGUpCi0gICAgICAgICAgICBwcmludGYoIkhJVCBDT01QTEVU
RSBQUkVMT0FEICVzXG4iLCByZXNvdXJjZS0+dXJsKCkubGF0aW4xKCkuZGF0YSgpKTsKLSAgICAg
ICAgZWxzZSBpZiAocmVzb3VyY2UtPnByZWxvYWRSZXN1bHQoKSA9PSBDYWNoZWRSZXNvdXJjZTo6
UHJlbG9hZFJlZmVyZW5jZWRXaGlsZUxvYWRpbmcpCi0gICAgICAgICAgICBwcmludGYoIkhJVCBM
T0FESU5HIFBSRUxPQUQgJXNcbiIsIHJlc291cmNlLT51cmwoKS5sYXRpbjEoKS5kYXRhKCkpOwot
Ci0gICAgICAgIGlmIChyZXNvdXJjZS0+dHlwZSgpID09IENhY2hlZFJlc291cmNlOjpTY3JpcHQp
IHsKLSAgICAgICAgICAgIHNjcmlwdHMrKzsKLSAgICAgICAgICAgIGlmIChyZXNvdXJjZS0+cHJl
bG9hZFJlc3VsdCgpIDwgQ2FjaGVkUmVzb3VyY2U6OlByZWxvYWRSZWZlcmVuY2VkV2hpbGVMb2Fk
aW5nKQotICAgICAgICAgICAgICAgIHNjcmlwdE1pc3NlcysrOwotICAgICAgICB9IGVsc2UgaWYg
KHJlc291cmNlLT50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQpIHsKLSAg
ICAgICAgICAgIHN0eWxlc2hlZXRzKys7Ci0gICAgICAgICAgICBpZiAocmVzb3VyY2UtPnByZWxv
YWRSZXN1bHQoKSA8IENhY2hlZFJlc291cmNlOjpQcmVsb2FkUmVmZXJlbmNlZFdoaWxlTG9hZGlu
ZykKLSAgICAgICAgICAgICAgICBzdHlsZXNoZWV0TWlzc2VzKys7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBpbWFnZXMrKzsKLSAgICAgICAgICAgIGlmIChyZXNvdXJjZS0+cHJlbG9h
ZFJlc3VsdCgpIDwgQ2FjaGVkUmVzb3VyY2U6OlByZWxvYWRSZWZlcmVuY2VkV2hpbGVMb2FkaW5n
KQotICAgICAgICAgICAgICAgIGltYWdlTWlzc2VzKys7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAocmVzb3VyY2UtPmVycm9yT2NjdXJyZWQoKSAmJiByZXNvdXJjZS0+cHJlbG9hZFJlc3VsdCgp
ID09IENhY2hlZFJlc291cmNlOjpQcmVsb2FkTm90UmVmZXJlbmNlZCkKLSAgICAgICAgICAgIE1l
bW9yeUNhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUocmVzb3VyY2UpOwotCi0gICAgICAgIHJlc291
cmNlLT5kZWNyZWFzZVByZWxvYWRDb3VudCgpOwotICAgIH0KLSAgICBtX3ByZWxvYWRzID0gbnVs
bHB0cjsKLQotICAgIGlmIChzY3JpcHRzKQotICAgICAgICBwcmludGYoIlNDUklQVFM6ICVkICgl
ZCBoaXRzLCBoaXQgcmF0ZSAlZCUlKVxuIiwgc2NyaXB0cywgc2NyaXB0cyAtIHNjcmlwdE1pc3Nl
cywgKHNjcmlwdHMgLSBzY3JpcHRNaXNzZXMpICogMTAwIC8gc2NyaXB0cyk7Ci0gICAgaWYgKHN0
eWxlc2hlZXRzKQotICAgICAgICBwcmludGYoIlNUWUxFU0hFRVRTOiAlZCAoJWQgaGl0cywgaGl0
IHJhdGUgJWQlJSlcbiIsIHN0eWxlc2hlZXRzLCBzdHlsZXNoZWV0cyAtIHN0eWxlc2hlZXRNaXNz
ZXMsIChzdHlsZXNoZWV0cyAtIHN0eWxlc2hlZXRNaXNzZXMpICogMTAwIC8gc3R5bGVzaGVldHMp
OwotICAgIGlmIChpbWFnZXMpCi0gICAgICAgIHByaW50ZigiSU1BR0VTOiAgJWQgKCVkIGhpdHMs
IGhpdCByYXRlICVkJSUpXG4iLCBpbWFnZXMsIGltYWdlcyAtIGltYWdlTWlzc2VzLCAoaW1hZ2Vz
IC0gaW1hZ2VNaXNzZXMpICogMTAwIC8gaW1hZ2VzKTsKLX0KLSNlbmRpZgotCi1jb25zdCBSZXNv
dXJjZUxvYWRlck9wdGlvbnMmIENhY2hlZFJlc291cmNlTG9hZGVyOjpkZWZhdWx0Q2FjaGVkUmVz
b3VyY2VPcHRpb25zKCkKLXsKLSAgICBzdGF0aWMgUmVzb3VyY2VMb2FkZXJPcHRpb25zIG9wdGlv
bnMoU2VuZENhbGxiYWNrcywgU25pZmZDb250ZW50LCBCdWZmZXJEYXRhLCBBbGxvd1N0b3JlZENy
ZWRlbnRpYWxzLCBDbGllbnRDcmVkZW50aWFsUG9saWN5OjpNYXlBc2tDbGllbnRGb3JDcmVkZW50
aWFscywgRmV0Y2hPcHRpb25zOjpDcmVkZW50aWFsczo6SW5jbHVkZSwgRG9TZWN1cml0eUNoZWNr
LCBGZXRjaE9wdGlvbnM6Ok1vZGU6Ok5vQ29ycywgRG9Ob3RJbmNsdWRlQ2VydGlmaWNhdGVJbmZv
LCBDb250ZW50U2VjdXJpdHlQb2xpY3lJbXBvc2l0aW9uOjpEb1BvbGljeUNoZWNrLCBEZWZlcnNM
b2FkaW5nUG9saWN5OjpBbGxvd0RlZmVyc0xvYWRpbmcsIENhY2hpbmdQb2xpY3k6OkFsbG93Q2Fj
aGluZyk7Ci0gICAgcmV0dXJuIG9wdGlvbnM7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDRjYzhiMzgyODNhZGQ5ZWViMGEzNTNhNjRhNDNhY2FhNWU5NDkwZDkuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwyMTggKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25v
bGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxt
dWVsbGVyQGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAgICBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0K
LSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBu
ZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKLSAgICBwYWdl
cyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4K
LSovCi0KLSNpZm5kZWYgQ2FjaGVkUmVzb3VyY2VMb2FkZXJfaAotI2RlZmluZSBDYWNoZWRSZXNv
dXJjZUxvYWRlcl9oCi0KLSNpbmNsdWRlICJDYWNoZVBvbGljeS5oIgotI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRQcmlvcml0
eS5oIgotI2luY2x1ZGUgIlJlc291cmNlVGltaW5nSW5mb3JtYXRpb24uaCIKLSNpbmNsdWRlICJU
aW1lci5oIgotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVldDsKLWNsYXNzIENhY2hlZFNWR0RvY3VtZW50Owot
Y2xhc3MgQ2FjaGVkRm9udDsKLWNsYXNzIENhY2hlZEltYWdlOwotY2xhc3MgQ2FjaGVkUmF3UmVz
b3VyY2U7Ci1jbGFzcyBDYWNoZWRTY3JpcHQ7Ci1jbGFzcyBDYWNoZWRUZXh0VHJhY2s7Ci1jbGFz
cyBDYWNoZWRYU0xTdHlsZVNoZWV0OwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBEb2N1bWVudExv
YWRlcjsKLWNsYXNzIEZyYW1lOwotY2xhc3MgSW1hZ2VMb2FkZXI7Ci1jbGFzcyBVUkw7Ci0KLS8v
IFRoZSBDYWNoZWRSZXNvdXJjZUxvYWRlciBwcm92aWRlcyBhIHBlci1jb250ZXh0IGludGVyZmFj
ZSB0byB0aGUgTWVtb3J5Q2FjaGUKLS8vIGFuZCBlbmZvcmNlcyBhIGJ1bmNoIG9mIHNlY3VyaXR5
IGNoZWNrcyBhbmQgcnVsZXMgZm9yIHJlc291cmNlIHJldmFsaWRhdGlvbi4KLS8vIEl0cyBsaWZl
dGltZSBpcyByb3VnaGx5IHBlci1Eb2N1bWVudExvYWRlciwgaW4gdGhhdCBpdCBpcyBnZW5lcmFs
bHkgY3JlYXRlZAotLy8gaW4gdGhlIERvY3VtZW50TG9hZGVyIGNvbnN0cnVjdG9yIGFuZCBsb3Nl
cyBpdHMgYWJpbGl0eSB0byBnZW5lcmF0ZSBuZXR3b3JrCi0vLyByZXF1ZXN0cyB3aGVuIHRoZSBE
b2N1bWVudExvYWRlciBpcyBkZXN0cm95ZWQuIERvY3VtZW50cyBhbHNvIGhvbGQgYSAKLS8vIFJl
ZlB0cjxDYWNoZWRSZXNvdXJjZUxvYWRlcj4gZm9yIHRoZWlyIGxpZmV0aW1lIChhbmQgd2lsbCBj
cmVhdGUgb25lIGlmIHRoZXkKLS8vIGFyZSBpbml0aWFsaXplZCB3aXRob3V0IGEgRnJhbWUpLCBz
byBhIERvY3VtZW50IGNhbiBrZWVwIGEgQ2FjaGVkUmVzb3VyY2VMb2FkZXIKLS8vIGFsaXZlIHBh
c3QgZGV0YWNoIGlmIHNjcmlwdHMgc3RpbGwgcmVmZXJlbmNlIHRoZSBEb2N1bWVudC4KLWNsYXNz
IENhY2hlZFJlc291cmNlTG9hZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8Q2FjaGVkUmVzb3VyY2VM
b2FkZXI+IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDYWNoZWRSZXNvdXJjZUxvYWRlcik7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotZnJpZW5kIGNsYXNzIEltYWdlTG9hZGVyOwotZnJp
ZW5kIGNsYXNzIFJlc291cmNlQ2FjaGVWYWxpZGF0aW9uU3VwcHJlc3NvcjsKLQotcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8Q2FjaGVkUmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShEb2N1bWVudExvYWRl
ciogZG9jdW1lbnRMb2FkZXIpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2FjaGVkUmVzb3VyY2VM
b2FkZXIoZG9jdW1lbnRMb2FkZXIpKTsgfQotICAgIH5DYWNoZWRSZXNvdXJjZUxvYWRlcigpOwot
Ci0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkSW1hZ2U+IHJlcXVlc3RJbWFnZShDYWNo
ZWRSZXNvdXJjZVJlcXVlc3QmKTsKLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRDU1NT
dHlsZVNoZWV0PiByZXF1ZXN0Q1NTU3R5bGVTaGVldChDYWNoZWRSZXNvdXJjZVJlcXVlc3QmKTsK
LSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRDU1NTdHlsZVNoZWV0PiByZXF1ZXN0VXNl
ckNTU1N0eWxlU2hlZXQoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiByZXF1ZXN0U2NyaXB0KENhY2hlZFJlc291cmNlUmVxdWVz
dCYpOwotICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZEZvbnQ+IHJlcXVlc3RGb250KENh
Y2hlZFJlc291cmNlUmVxdWVzdCYsIGJvb2wgaXNTVkcpOwotICAgIENhY2hlZFJlc291cmNlSGFu
ZGxlPENhY2hlZFJhd1Jlc291cmNlPiByZXF1ZXN0TWVkaWEoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0
Jik7Ci0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+IHJlcXVlc3RS
YXdSZXNvdXJjZShDYWNoZWRSZXNvdXJjZVJlcXVlc3QmKTsKLSAgICBDYWNoZWRSZXNvdXJjZUhh
bmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gcmVxdWVzdE1haW5SZXNvdXJjZShDYWNoZWRSZXNvdXJj
ZVJlcXVlc3QmKTsKLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTVkdEb2N1bWVudD4g
cmVxdWVzdFNWR0RvY3VtZW50KENhY2hlZFJlc291cmNlUmVxdWVzdCYpOwotI2lmIEVOQUJMRShY
U0xUKQotICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFhTTFN0eWxlU2hlZXQ+IHJlcXVl
c3RYU0xTdHlsZVNoZWV0KENhY2hlZFJlc291cmNlUmVxdWVzdCYpOwotI2VuZGlmCi0jaWYgRU5B
QkxFKExJTktfUFJFRkVUQ0gpCi0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3Vy
Y2U+IHJlcXVlc3RMaW5rUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIENhY2hlZFJlc291
cmNlUmVxdWVzdCYpOwotI2VuZGlmCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIENhY2hl
ZFJlc291cmNlSGFuZGxlPENhY2hlZFRleHRUcmFjaz4gcmVxdWVzdFRleHRUcmFjayhDYWNoZWRS
ZXNvdXJjZVJlcXVlc3QmKTsKLSNlbmRpZgotCi0gICAgLy8gTG9ncyBhbiBhY2Nlc3MgZGVuaWVk
IG1lc3NhZ2UgdG8gdGhlIGNvbnNvbGUgZm9yIHRoZSBzcGVjaWZpZWQgVVJMLgotICAgIHZvaWQg
cHJpbnRBY2Nlc3NEZW5pZWRNZXNzYWdlKGNvbnN0IFVSTCYgdXJsKSBjb25zdDsKLQotICAgIENh
Y2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHVybCkgY29uc3Q7Ci0g
ICAgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKGNvbnN0IFVSTCYgdXJsKSBjb25zdDsK
LSAgICAKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxD
YWNoZWRSZXNvdXJjZT4+IERvY3VtZW50UmVzb3VyY2VNYXA7Ci0gICAgY29uc3QgRG9jdW1lbnRS
ZXNvdXJjZU1hcCYgYWxsQ2FjaGVkUmVzb3VyY2VzKCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVu
dFJlc291cmNlczsgfQotCi0gICAgYm9vbCBhdXRvTG9hZEltYWdlcygpIGNvbnN0IHsgcmV0dXJu
IG1fYXV0b0xvYWRJbWFnZXM7IH0KLSAgICB2b2lkIHNldEF1dG9Mb2FkSW1hZ2VzKGJvb2wpOwot
Ci0gICAgYm9vbCBpbWFnZXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZXNFbmFibGVk
OyB9Ci0gICAgdm9pZCBzZXRJbWFnZXNFbmFibGVkKGJvb2wpOwotCi0gICAgYm9vbCBzaG91bGRE
ZWZlckltYWdlTG9hZChjb25zdCBVUkwmKSBjb25zdDsKLSAgICBib29sIHNob3VsZFBlcmZvcm1J
bWFnZUxvYWQoY29uc3QgVVJMJikgY29uc3Q7Ci0gICAgCi0gICAgQ2FjaGVQb2xpY3kgY2FjaGVQ
b2xpY3koQ2FjaGVkUmVzb3VyY2U6OlR5cGUpIGNvbnN0OwotICAgIAotICAgIEZyYW1lKiBmcmFt
ZSgpIGNvbnN0OyAvLyBDYW4gYmUgbnVsbAotICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0gLy8gQ2FuIGJlIG51bGwKLSAgICB2b2lkIHNldERvY3Vt
ZW50KERvY3VtZW50KiBkb2N1bWVudCkgeyBtX2RvY3VtZW50ID0gZG9jdW1lbnQ7IH0KLSAgICB2
b2lkIGNsZWFyRG9jdW1lbnRMb2FkZXIoKSB7IG1fZG9jdW1lbnRMb2FkZXIgPSBudWxscHRyOyB9
Ci0gICAgU2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0OwotCi0gICAgdm9pZCByZW1vdmVDYWNo
ZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSYpOwotCi0gICAgdm9pZCBsb2FkRG9uZShDYWNoZWRS
ZXNvdXJjZSosIGJvb2wgc2hvdWxkUGVyZm9ybVBvc3RMb2FkQWN0aW9ucyA9IHRydWUpOwotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnYXJiYWdlQ29sbGVjdERvY3VtZW50UmVzb3VyY2VzKCk7
Ci0gICAgCi0gICAgdm9pZCBpbmNyZW1lbnRSZXF1ZXN0Q291bnQoY29uc3QgQ2FjaGVkUmVzb3Vy
Y2UmKTsKLSAgICB2b2lkIGRlY3JlbWVudFJlcXVlc3RDb3VudChjb25zdCBDYWNoZWRSZXNvdXJj
ZSYpOwotICAgIGludCByZXF1ZXN0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3JlcXVlc3RDb3Vu
dDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1ByZWxvYWRlZChjb25zdCBTdHJpbmcm
IHVybFN0cmluZykgY29uc3Q7Ci0gICAgdm9pZCBjbGVhclByZWxvYWRzKCk7Ci0gICAgdm9pZCBj
bGVhclBlbmRpbmdQcmVsb2FkcygpOwotICAgIGVudW0gUHJlbG9hZFR5cGUgeyBJbXBsaWNpdFBy
ZWxvYWQsIEV4cGxpY2l0UHJlbG9hZCB9OwotICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hl
ZFJlc291cmNlPiBwcmVsb2FkKENhY2hlZFJlc291cmNlOjpUeXBlLCBDYWNoZWRSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIFByZWxvYWRUeXBlKTsKLSAgICB2b2lkIGNo
ZWNrRm9yUGVuZGluZ1ByZWxvYWRzKCk7Ci0gICAgdm9pZCBwcmludFByZWxvYWRTdGF0cygpOwot
Ci0gICAgYm9vbCBjYW5SZXF1ZXN0KENhY2hlZFJlc291cmNlOjpUeXBlLCBjb25zdCBVUkwmLCBj
b25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmLCBib29sIGZvclByZWxvYWQgPSBmYWxzZSwgYm9v
bCBkaWRSZWNlaXZlUmVkaXJlY3RSZXNwb25zZSA9IGZhbHNlKTsKLQotICAgIHN0YXRpYyBjb25z
dCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIGRlZmF1bHRDYWNoZWRSZXNvdXJjZU9wdGlvbnMoKTsK
LQotICAgIHZvaWQgZG9jdW1lbnREaWRGaW5pc2hMb2FkRXZlbnQoKTsKLQotI2lmIEVOQUJMRShX
RUJfVElNSU5HKQotICAgIFJlc291cmNlVGltaW5nSW5mb3JtYXRpb24mIHJlc291cmNlVGltaW5n
SW5mb3JtYXRpb24oKSB7IHJldHVybiBtX3Jlc291cmNlVGltaW5nSW5mbzsgfQotI2VuZGlmCi0K
LXByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ2FjaGVkUmVzb3VyY2VMb2FkZXIoRG9jdW1lbnRMb2Fk
ZXIqKTsKLQotICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiByZXF1ZXN0
UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIENhY2hlZFJlc291cmNlUmVxdWVzdCYpOwot
ICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiByZXZhbGlkYXRlUmVzb3Vy
Y2UoY29uc3QgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiwgQ2FjaGVkUmVzb3VyY2UqKTsKLSAgICBD
YWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gbG9hZFJlc291cmNlKENhY2hlZFJl
c291cmNlOjpUeXBlLCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QmKTsKLSAgICBDYWNoZWRSZXNvdXJj
ZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gcmVxdWVzdFByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OlR5
cGUsIENhY2hlZFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgY2hhcnNldCk7Ci0KLSAg
ICBlbnVtIFJldmFsaWRhdGlvblBvbGljeSB7IFVzZSwgUmV2YWxpZGF0ZSwgUmVsb2FkLCBMb2Fk
IH07Ci0gICAgUmV2YWxpZGF0aW9uUG9saWN5IGRldGVybWluZVJldmFsaWRhdGlvblBvbGljeShD
YWNoZWRSZXNvdXJjZTo6VHlwZSwgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiwgQ2FjaGVkUmVzb3Vy
Y2UqIGV4aXN0aW5nUmVzb3VyY2UpIGNvbnN0OwotCi0gICAgYm9vbCB1cGRhdGVDYWNoZWRSZXNv
dXJjZVdpdGhDdXJyZW50UmVxdWVzdChDYWNoZWRSZXNvdXJjZVJlcXVlc3QmLCBDYWNoZWRSZXNv
dXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4mKTsKLSAgICBib29sIHNob3VsZENvbnRpbnVlQWZ0
ZXJOb3RpZnlpbmdMb2FkZWRGcm9tTWVtb3J5Q2FjaGUoY29uc3QgQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0JiwgQ2FjaGVkUmVzb3VyY2UqKTsKLSAgICBib29sIGNoZWNrSW5zZWN1cmVDb250ZW50KENh
Y2hlZFJlc291cmNlOjpUeXBlLCBjb25zdCBVUkwmKSBjb25zdDsKLQotICAgIHZvaWQgcGVyZm9y
bVBvc3RMb2FkQWN0aW9ucygpOwotCi0gICAgYm9vbCBjbGllbnREZWZlcnNJbWFnZShjb25zdCBV
UkwmKSBjb25zdDsKLSAgICB2b2lkIHJlbG9hZEltYWdlc0lmTm90RGVmZXJyZWQoKTsKLQotICAg
IGJvb2wgY2FuUmVxdWVzdEluQ29udGVudERpc3Bvc2l0aW9uQXR0YWNobWVudFNhbmRib3goQ2Fj
aGVkUmVzb3VyY2U6OlR5cGUsIGNvbnN0IFVSTCYpIGNvbnN0OwotICAgIAotICAgIEhhc2hTZXQ8
U3RyaW5nPiBtX3ZhbGlkYXRlZFVSTHM7Ci0gICAgbXV0YWJsZSBEb2N1bWVudFJlc291cmNlTWFw
IG1fZG9jdW1lbnRSZXNvdXJjZXM7Ci0gICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7Ci0gICAgRG9j
dW1lbnRMb2FkZXIqIG1fZG9jdW1lbnRMb2FkZXI7Ci0gICAgCi0gICAgaW50IG1fcmVxdWVzdENv
dW50OwotICAgIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxMaXN0SGFzaFNldDxDYWNoZWRSZXNvdXJj
ZSo+PiBtX3ByZWxvYWRzOwotICAgIHN0cnVjdCBQZW5kaW5nUHJlbG9hZCB7Ci0gICAgICAgIENh
Y2hlZFJlc291cmNlOjpUeXBlIG1fdHlwZTsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0
IG1fcmVxdWVzdDsKLSAgICAgICAgU3RyaW5nIG1fY2hhcnNldDsKLSAgICB9OwotICAgIERlcXVl
PFBlbmRpbmdQcmVsb2FkPiBtX3BlbmRpbmdQcmVsb2FkczsKLQotICAgIFRpbWVyIG1fZ2FyYmFn
ZUNvbGxlY3REb2N1bWVudFJlc291cmNlc1RpbWVyOwotCi0jaWYgRU5BQkxFKFdFQl9USU1JTkcp
Ci0gICAgUmVzb3VyY2VUaW1pbmdJbmZvcm1hdGlvbiBtX3Jlc291cmNlVGltaW5nSW5mbzsKLSNl
bmRpZgotCi0gICAgLy8gMjkgYml0cyBsZWZ0Ci0gICAgYm9vbCBtX2F1dG9Mb2FkSW1hZ2VzIDog
MTsKLSAgICBib29sIG1faW1hZ2VzRW5hYmxlZCA6IDE7Ci0gICAgYm9vbCBtX2FsbG93U3RhbGVS
ZXNvdXJjZXMgOiAxOwotfTsKLQotY2xhc3MgUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVz
c29yIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZXNvdXJjZUNhY2hlVmFsaWRhdGlvblN1
cHByZXNzb3IpOwotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFJl
c291cmNlQ2FjaGVWYWxpZGF0aW9uU3VwcHJlc3NvcihDYWNoZWRSZXNvdXJjZUxvYWRlciYgbG9h
ZGVyKQotICAgICAgICA6IG1fbG9hZGVyKGxvYWRlcikKLSAgICAgICAgLCBtX3ByZXZpb3VzU3Rh
dGUobV9sb2FkZXIubV9hbGxvd1N0YWxlUmVzb3VyY2VzKQotICAgIHsKLSAgICAgICAgbV9sb2Fk
ZXIubV9hbGxvd1N0YWxlUmVzb3VyY2VzID0gdHJ1ZTsKLSAgICB9Ci0gICAgflJlc291cmNlQ2Fj
aGVWYWxpZGF0aW9uU3VwcHJlc3NvcigpCi0gICAgewotICAgICAgICBtX2xvYWRlci5tX2FsbG93
U3RhbGVSZXNvdXJjZXMgPSBtX3ByZXZpb3VzU3RhdGU7Ci0gICAgfQotcHJpdmF0ZToKLSAgICBD
YWNoZWRSZXNvdXJjZUxvYWRlciYgbV9sb2FkZXI7Ci0gICAgYm9vbCBtX3ByZXZpb3VzU3RhdGU7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM1NGJkZjEwNDU2MTdkM2E4Y2M3NDkxMjFjNzRmOTc5
MTVmYjIxNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlUmVxdWVzdC5oIgotCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIK
LSNpbmNsdWRlICJDcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaCIKLSNpbmNsdWRlICJEb2N1bWVu
dC5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1DYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OkNhY2hl
ZFJlc291cmNlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwg
Y29uc3QgU3RyaW5nJiBjaGFyc2V0LCBPcHRpb25hbDxSZXNvdXJjZUxvYWRQcmlvcml0eT4gcHJp
b3JpdHkpCi0gICAgOiBtX3Jlc291cmNlUmVxdWVzdChyZXNvdXJjZVJlcXVlc3QpCi0gICAgLCBt
X2NoYXJzZXQoY2hhcnNldCkKLSAgICAsIG1fb3B0aW9ucyhDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
ZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygpKQotICAgICwgbV9wcmlvcml0eShwcmlvcml0
eSkKLSAgICAsIG1fZm9yUHJlbG9hZChmYWxzZSkKLSAgICAsIG1fZGVmZXIoTm9EZWZlcikKLXsK
LX0KLQotQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpDYWNoZWRSZXNvdXJjZVJlcXVlc3QoUmVzb3Vy
Y2VSZXF1ZXN0JiYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMm
IG9wdGlvbnMpCi0gICAgOiBtX3Jlc291cmNlUmVxdWVzdChXVEZNb3ZlKHJlc291cmNlUmVxdWVz
dCkpCi0gICAgLCBtX29wdGlvbnMob3B0aW9ucykKLSAgICAsIG1fZm9yUHJlbG9hZChmYWxzZSkK
LSAgICAsIG1fZGVmZXIoTm9EZWZlcikKLXsKLX0KLQotQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpD
YWNoZWRSZXNvdXJjZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVl
c3QsIE9wdGlvbmFsPFJlc291cmNlTG9hZFByaW9yaXR5PiBwcmlvcml0eSkKLSAgICA6IG1fcmVz
b3VyY2VSZXF1ZXN0KHJlc291cmNlUmVxdWVzdCkKLSAgICAsIG1fb3B0aW9ucyhDYWNoZWRSZXNv
dXJjZUxvYWRlcjo6ZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygpKQotICAgICwgbV9wcmlv
cml0eShwcmlvcml0eSkKLSAgICAsIG1fZm9yUHJlbG9hZChmYWxzZSkKLSAgICAsIG1fZGVmZXIo
Tm9EZWZlcikKLXsKLX0KLQotQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Ojp+Q2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0KCkKLXsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OnNldEluaXRpYXRv
cihQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQpCi17Ci0gICAgQVNTRVJUKCFtX2luaXRpYXRv
ckVsZW1lbnQgJiYgbV9pbml0aWF0b3JOYW1lLmlzRW1wdHkoKSk7Ci0gICAgbV9pbml0aWF0b3JF
bGVtZW50ID0gZWxlbWVudDsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OnNldElu
aXRpYXRvcihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKCFtX2luaXRp
YXRvckVsZW1lbnQgJiYgbV9pbml0aWF0b3JOYW1lLmlzRW1wdHkoKSk7Ci0gICAgbV9pbml0aWF0
b3JOYW1lID0gbmFtZTsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBDYWNoZWRSZXNvdXJjZVJl
cXVlc3Q6OmluaXRpYXRvck5hbWUoKSBjb25zdAotewotICAgIGlmIChtX2luaXRpYXRvckVsZW1l
bnQpCi0gICAgICAgIHJldHVybiBtX2luaXRpYXRvckVsZW1lbnQtPmxvY2FsTmFtZSgpOwotICAg
IGlmICghbV9pbml0aWF0b3JOYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1faW5pdGlh
dG9yTmFtZTsKLQotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGRlZmF1
bHROYW1lKCJyZXNvdXJjZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwot
ICAgIHJldHVybiBkZWZhdWx0TmFtZTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6
OnNldEFzUG90ZW50aWFsbHlDcm9zc09yaWdpbihjb25zdCBTdHJpbmcmIG1vZGUsIERvY3VtZW50
JiBkb2N1bWVudCkKLXsKLSAgICBBU1NFUlQobV9vcHRpb25zLm1vZGUgPT0gRmV0Y2hPcHRpb25z
OjpNb2RlOjpOb0NvcnMpOwotICAgIGlmIChtb2RlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9vcHRpb25zLm1vZGUgPSBGZXRjaE9wdGlvbnM6Ok1vZGU6OkNvcnM7Ci0gICAgbV9v
cHRpb25zLmNyZWRlbnRpYWxzID0gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobW9kZSwg
InVzZS1jcmVkZW50aWFscyIpID8gRmV0Y2hPcHRpb25zOjpDcmVkZW50aWFsczo6SW5jbHVkZSA6
IEZldGNoT3B0aW9uczo6Q3JlZGVudGlhbHM6OlNhbWVPcmlnaW47Ci0gICAgbV9vcHRpb25zLmFs
bG93Q3JlZGVudGlhbHMgPSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtb2RlLCAidXNl
LWNyZWRlbnRpYWxzIikgPyBBbGxvd1N0b3JlZENyZWRlbnRpYWxzIDogRG9Ob3RBbGxvd1N0b3Jl
ZENyZWRlbnRpYWxzOwotCi0gICAgQVNTRVJUKGRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCkpOwot
ICAgIHVwZGF0ZVJlcXVlc3RGb3JBY2Nlc3NDb250cm9sKG1fcmVzb3VyY2VSZXF1ZXN0LCAqZG9j
dW1lbnQuc2VjdXJpdHlPcmlnaW4oKSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDgyN2ViYmJlNTg2Njc0ZWJiYTc2OThiNDk3ODNhZDNkOGZkZmMwMjAuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdP
T0dMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0X2gKLSNkZWZpbmUgQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0X2gKLQotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW5jbHVkZSAiRWxlbWVudC5o
IgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFByaW9yaXR5LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VM
b2FkZXJPcHRpb25zLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBEb2N1bWVudDsKLQotY2xhc3MgQ2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0IHsKLXB1YmxpYzoKLSAgICBlbnVtIERlZmVyT3B0aW9uIHsgTm9EZWZlciwgRGVmZXJy
ZWRCeUNsaWVudCB9OwotCi0gICAgZXhwbGljaXQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0KGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgY2hhcnNldCA9IFN0cmluZygpLCBPcHRp
b25hbDxSZXNvdXJjZUxvYWRQcmlvcml0eT4gPSBOdWxsb3B0KTsKLSAgICBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYp
OwotICAgIENhY2hlZFJlc291cmNlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBPcHRp
b25hbDxSZXNvdXJjZUxvYWRQcmlvcml0eT4pOwotICAgIH5DYWNoZWRSZXNvdXJjZVJlcXVlc3Qo
KTsKLQotICAgIFJlc291cmNlUmVxdWVzdCYgbXV0YWJsZVJlc291cmNlUmVxdWVzdCgpIHsgcmV0
dXJuIG1fcmVzb3VyY2VSZXF1ZXN0OyB9Ci0gICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNv
dXJjZVJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlUmVxdWVzdDsgfQotICAgIGNv
bnN0IFN0cmluZyYgY2hhcnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcnNldDsgfQotICAgIHZv
aWQgc2V0Q2hhcnNldChjb25zdCBTdHJpbmcmIGNoYXJzZXQpIHsgbV9jaGFyc2V0ID0gY2hhcnNl
dDsgfQotICAgIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucygpIGNvbnN0IHsg
cmV0dXJuIG1fb3B0aW9uczsgfQotICAgIHZvaWQgc2V0T3B0aW9ucyhjb25zdCBSZXNvdXJjZUxv
YWRlck9wdGlvbnMmIG9wdGlvbnMpIHsgbV9vcHRpb25zID0gb3B0aW9uczsgfQotICAgIGNvbnN0
IE9wdGlvbmFsPFJlc291cmNlTG9hZFByaW9yaXR5PiYgcHJpb3JpdHkoKSBjb25zdCB7IHJldHVy
biBtX3ByaW9yaXR5OyB9Ci0gICAgYm9vbCBmb3JQcmVsb2FkKCkgY29uc3QgeyByZXR1cm4gbV9m
b3JQcmVsb2FkOyB9Ci0gICAgdm9pZCBzZXRGb3JQcmVsb2FkKGJvb2wgZm9yUHJlbG9hZCkgeyBt
X2ZvclByZWxvYWQgPSBmb3JQcmVsb2FkOyB9Ci0gICAgRGVmZXJPcHRpb24gZGVmZXIoKSBjb25z
dCB7IHJldHVybiBtX2RlZmVyOyB9Ci0gICAgdm9pZCBzZXREZWZlcihEZWZlck9wdGlvbiBkZWZl
cikgeyBtX2RlZmVyID0gZGVmZXI7IH0KLSAgICB2b2lkIHNldEluaXRpYXRvcihQYXNzUmVmUHRy
PEVsZW1lbnQ+KTsKLSAgICB2b2lkIHNldEluaXRpYXRvcihjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWUpOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaW5pdGlhdG9yTmFtZSgpIGNvbnN0OwotICAg
IGJvb2wgYWxsb3dzQ2FjaGluZygpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9ucy5jYWNoaW5nUG9s
aWN5ID09IENhY2hpbmdQb2xpY3k6OkFsbG93Q2FjaGluZzsgfQotICAgIHZvaWQgc2V0Q2FjaGlu
Z1BvbGljeShDYWNoaW5nUG9saWN5IHBvbGljeSkgeyBtX29wdGlvbnMuY2FjaGluZ1BvbGljeSA9
IHBvbGljeTsgfQotCi0gICAgdm9pZCBzZXRBc1BvdGVudGlhbGx5Q3Jvc3NPcmlnaW4oY29uc3Qg
U3RyaW5nJiwgRG9jdW1lbnQmKTsKLQotcHJpdmF0ZToKLSAgICBSZXNvdXJjZVJlcXVlc3QgbV9y
ZXNvdXJjZVJlcXVlc3Q7Ci0gICAgU3RyaW5nIG1fY2hhcnNldDsKLSAgICBSZXNvdXJjZUxvYWRl
ck9wdGlvbnMgbV9vcHRpb25zOwotICAgIE9wdGlvbmFsPFJlc291cmNlTG9hZFByaW9yaXR5PiBt
X3ByaW9yaXR5OwotICAgIGJvb2wgbV9mb3JQcmVsb2FkOwotICAgIERlZmVyT3B0aW9uIG1fZGVm
ZXI7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IG1faW5pdGlhdG9yRWxlbWVudDsKLSAgICBBdG9taWNT
dHJpbmcgbV9pbml0aWF0b3JOYW1lOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZVJlcXVlc3RJbml0aWF0b3JzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYjMzOWE4ZTU4Y2RhYWQ1MWY1YWY4MGVhNDYzOTRiZDdiYzUwMjgxNS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgR09PR0xFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlUmVxdWVzdEluaXRpYXRvcnMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1DYWNoZWRS
ZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzOjpDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3Jz
KCkKLSAgICA6IGNzcygiY3NzIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkK
LSAgICAsIGZldGNoKCJmZXRjaCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
Ci0gICAgLCBpY29uKCJpY29uIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkK
LSAgICAsIHhtbGh0dHByZXF1ZXN0KCJ4bWxodHRwcmVxdWVzdCIsIEF0b21pY1N0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3RJ
bml0aWF0b3JzLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0SW5pdGlhdG9ycy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2NmZTAx
YzhkMjAwMDgzMjZhMDkxOTdlYmZkZjQ2NDU3MzgxZjI2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09P
R0xFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzX2gKLSNkZWZpbmUgQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0SW5pdGlhdG9yc19oCi0KLSNpbmNsdWRlICJUaHJlYWRHbG9iYWxEYXRhLmgi
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotc3RydWN0IENhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMgewotICAgIENhY2hl
ZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMoKTsKLQotICAgIGNvbnN0IEF0b21pY1N0cmluZyBj
c3M7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nIGZldGNoOwotICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyBpY29uOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyB4bWxodHRwcmVxdWVzdDsKLSAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzKTsgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBUaHJlYWRHbG9i
YWxEYXRhOwotfTsKLQotaW5saW5lIGNvbnN0IENhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRv
cnMmIGNhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMoKQotewotICAgIHJldHVybiB0aHJl
YWRHbG9iYWxEYXRhKCkuY2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycygpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRTVkdEb2N1bWVudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGE1MjMwMjAxYjBmNzEwZDM5YTViZGJiMWE2ZDZhMmI4NTI2MDdkMzEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFNWR0RvY3VtZW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYxICsw
LDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDEwIFJvYiBCdWlzIDxyd2xidWlzQGdtYWls
LmNvbT4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMTEgQ29zbWluIFRydXRhIDxjdHJ1dGFAZ21haWwu
Y29tPgotICAgIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotICAgIENv
cHlyaWdodCAoQykgMjAxMiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgotCi0gICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudC5oIgotCi0jaW5j
bHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ2FjaGVkU1ZH
RG9jdW1lbnQ6OkNhY2hlZFNWR0RvY3VtZW50KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgU2Vzc2lvbklEIHNlc3Npb25JRCkKLSAgICA6IENhY2hlZFJlc291cmNlKHJlcXVlc3QsIFNW
R0RvY3VtZW50UmVzb3VyY2UsIHNlc3Npb25JRCkKLSAgICAsIG1fZGVjb2RlcihUZXh0UmVzb3Vy
Y2VEZWNvZGVyOjpjcmVhdGUoImFwcGxpY2F0aW9uL3htbCIpKQotewotICAgIHNldEFjY2VwdCgi
aW1hZ2Uvc3ZnK3htbCIpOwotfQotCi1DYWNoZWRTVkdEb2N1bWVudDo6fkNhY2hlZFNWR0RvY3Vt
ZW50KCkKLXsKLX0KLQotdm9pZCBDYWNoZWRTVkdEb2N1bWVudDo6c2V0RW5jb2RpbmcoY29uc3Qg
U3RyaW5nJiBjaHMpCi17Ci0gICAgbV9kZWNvZGVyLT5zZXRFbmNvZGluZyhjaHMsIFRleHRSZXNv
dXJjZURlY29kZXI6OkVuY29kaW5nRnJvbUhUVFBIZWFkZXIpOwotfQotCi1TdHJpbmcgQ2FjaGVk
U1ZHRG9jdW1lbnQ6OmVuY29kaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZWNvZGVyLT5l
bmNvZGluZygpLm5hbWUoKTsKLX0KLQotdm9pZCBDYWNoZWRTVkdEb2N1bWVudDo6ZmluaXNoTG9h
ZGluZyhTaGFyZWRCdWZmZXIqIGRhdGEpCi17Ci0gICAgaWYgKGRhdGEpIHsKLSAgICAgICAgLy8g
V2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUgYSBuZXcgZnJhbWUgYmVjYXVzZSB0aGUgbmV3IGRvY3Vt
ZW50IGJlbG9uZ3MgdG8gdGhlIHBhcmVudCBVc2VFbGVtZW50LgotICAgICAgICBtX2RvY3VtZW50
ID0gU1ZHRG9jdW1lbnQ6OmNyZWF0ZShudWxscHRyLCByZXNwb25zZSgpLnVybCgpKTsKLSAgICAg
ICAgbV9kb2N1bWVudC0+c2V0Q29udGVudChtX2RlY29kZXItPmRlY29kZUFuZEZsdXNoKGRhdGEt
PmRhdGEoKSwgZGF0YS0+c2l6ZSgpKSk7Ci0gICAgfQotICAgIENhY2hlZFJlc291cmNlOjpmaW5p
c2hMb2FkaW5nKGRhdGEpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkU1ZHRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRTVkdEb2N1bWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjY0
MmZlM2U0MzVmYmM3ZjExOTNiZGZiNTU5NmIzNWY2OWQ5OWJlLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRTVkdEb2N1bWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAg
ICBDb3B5cmlnaHQgKEMpIDIwMTAgUm9iIEJ1aXMgPHJ3bGJ1aXNAZ21haWwuY29tPgotICAgIENv
cHlyaWdodCAoQykgMjAxMSBDb3NtaW4gVHJ1dGEgPGN0cnV0YUBnbWFpbC5jb20+Ci0gICAgQ29w
eXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gICAgQ29weXJpZ2h0IChDKSAy
MDEyIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+Ci0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lmbmRlZiBDYWNoZWRT
VkdEb2N1bWVudF9oCi0jZGVmaW5lIENhY2hlZFNWR0RvY3VtZW50X2gKLQotI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNs
dWRlICJTVkdEb2N1bWVudC5oIgotI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDYWNoZWRTVkdEb2N1bWVudCBmaW5hbCA6IHB1
YmxpYyBDYWNoZWRSZXNvdXJjZSB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQ2FjaGVkU1ZHRG9j
dW1lbnQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2Vzc2lvbklEKTsKLSAgICB2aXJ0dWFsIH5D
YWNoZWRTVkdEb2N1bWVudCgpOwotCi0gICAgU1ZHRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9kb2N1bWVudC5nZXQoKTsgfQotCi1wcml2YXRlOgotICAgIGJvb2wgbWF5VHJ5
UmVwbGFjZUVuY29kZWREYXRhKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAg
IHZvaWQgc2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIGVu
Y29kaW5nKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgY29uc3QgVGV4dFJlc291cmNlRGVjb2Rlciog
dGV4dFJlc291cmNlRGVjb2RlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVjb2Rlci5n
ZXQoKTsgfQotICAgIHZvaWQgZmluaXNoTG9hZGluZyhTaGFyZWRCdWZmZXIqKSBvdmVycmlkZTsK
LQotICAgIFJlZlB0cjxTVkdEb2N1bWVudD4gbV9kb2N1bWVudDsKLSAgICBSZWZQdHI8VGV4dFJl
c291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBQ0hFRF9SRVNPVVJDRShDYWNoZWRTVkdEb2N1bWVu
dCwgQ2FjaGVkUmVzb3VyY2U6OlNWR0RvY3VtZW50UmVzb3VyY2UpCi0KLSNlbmRpZiAvLyBDYWNo
ZWRTVkdEb2N1bWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkU1ZHRG9jdW1lbnRDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRTVkdEb2N1bWVudENsaWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
MjJlYWQwYjgwNmMzODA1ZDFlMzc0ZmZkYWYwN2ZlZTI3YzQ5ZjIxLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRTVkdEb2N1bWVudENsaWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBA
QAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTAgUm9iIEJ1aXMgPHJ3bGJ1aXNAZ21haWwuY29t
PgotICAgIENvcHlyaWdodCAoQykgMjAxMSBDb3NtaW4gVHJ1dGEgPGN0cnV0YUBnbWFpbC5jb20+
Ci0gICAgQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gICAgQ29weXJp
Z2h0IChDKSAyMDEyIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+Ci0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lmbmRl
ZiBDYWNoZWRTVkdEb2N1bWVudENsaWVudF9oCi0jZGVmaW5lIENhY2hlZFNWR0RvY3VtZW50Q2xp
ZW50X2gKLQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgQ2FjaGVkU1ZHRG9jdW1lbnRDbGllbnQgOiBwdWJsaWMgQ2FjaGVk
UmVzb3VyY2VDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgfkNhY2hlZFNWR0RvY3VtZW50
Q2xpZW50KCkgeyB9Ci0gICAgc3RhdGljIENhY2hlZFJlc291cmNlQ2xpZW50VHlwZSBleHBlY3Rl
ZFR5cGUoKSB7IHJldHVybiBTVkdEb2N1bWVudFR5cGU7IH0KLSAgICBDYWNoZWRSZXNvdXJjZUNs
aWVudFR5cGUgcmVzb3VyY2VDbGllbnRUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZXhw
ZWN0ZWRUeXBlKCk7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IENhY2hlZFNWR0RvY3VtZW50Q2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA0NzkwZjczNDkzODk2ZWUzYjUyNTIxZDJhNzVlODg3NmRkOWM1
ODAyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmgiCi0KLSNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCi0j
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0SW5pdGlhdG9ycy5oIgotI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50LmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2U6OkNhY2hl
ZFNWR0RvY3VtZW50UmVmZXJlbmNlKGNvbnN0IFN0cmluZyYgdXJsKQotICAgIDogbV91cmwodXJs
KQotICAgICwgbV9kb2N1bWVudChudWxscHRyKQotICAgICwgbV9sb2FkUmVxdWVzdGVkKGZhbHNl
KQotewotfQotCi1DYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZTo6fkNhY2hlZFNWR0RvY3VtZW50
UmVmZXJlbmNlKCkKLXsKLSAgICBpZiAobV9kb2N1bWVudCkKLSAgICAgICAgbV9kb2N1bWVudC0+
cmVtb3ZlQ2xpZW50KHRoaXMpOwotfQotCi12b2lkIENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNl
Ojpsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyJiBsb2FkZXIsIGNvbnN0IFJlc291cmNlTG9hZGVy
T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAobV9sb2FkUmVxdWVzdGVkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJjZVJlcXVl
c3QobG9hZGVyLmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKG1fdXJsKSksIG9wdGlvbnMpOwotICAg
IHJlcXVlc3Quc2V0SW5pdGlhdG9yKGNhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMoKS5j
c3MpOwotICAgIG1fZG9jdW1lbnQgPSBsb2FkZXIucmVxdWVzdFNWR0RvY3VtZW50KHJlcXVlc3Qp
OwotICAgIGlmIChtX2RvY3VtZW50KQotICAgICAgICBtX2RvY3VtZW50LT5hZGRDbGllbnQodGhp
cyk7Ci0KLSAgICBtX2xvYWRSZXF1ZXN0ZWQgPSB0cnVlOwotfQotCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTgwYTEzZjYxMjg5MTM1OGZkNmIzNjBi
YWI2OWQxZmU0MTYwODlkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdEb2N1bWVudFJlZmVy
ZW5jZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ2Fj
aGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2VfaAotI2RlZmluZSBDYWNoZWRTVkdEb2N1bWVudFJlZmVy
ZW5jZV9oCi0KLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIkNh
Y2hlZFNWR0RvY3VtZW50Q2xpZW50LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ2FjaGVkU1ZHRG9jdW1lbnQ7Ci1jbGFz
cyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKLXN0cnVjdCBSZXNvdXJjZUxvYWRlck9wdGlvbnM7Ci0K
LWNsYXNzIENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlIDogcHVibGljIENhY2hlZFNWR0RvY3Vt
ZW50Q2xpZW50IHsKLXB1YmxpYzoKLSAgICBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShjb25z
dCBTdHJpbmcmKTsKLQotICAgIHZpcnR1YWwgfkNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKCk7
Ci0KLSAgICB2b2lkIGxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNvdXJjZUxv
YWRlck9wdGlvbnMmKTsKLSAgICBib29sIGxvYWRSZXF1ZXN0ZWQoKSBjb25zdCB7IHJldHVybiBt
X2xvYWRSZXF1ZXN0ZWQ7IH0KLQotICAgIENhY2hlZFNWR0RvY3VtZW50KiBkb2N1bWVudCgpIHsg
cmV0dXJuIG1fZG9jdW1lbnQuZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBTdHJpbmcgbV91cmw7
Ci0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU1ZHRG9jdW1lbnQ+IG1fZG9jdW1lbnQ7
Ci0gICAgYm9vbCBtX2xvYWRSZXF1ZXN0ZWQ7Ci19OwotCi19OwotCi0jZW5kaWYgLy8gQ2FjaGVk
U1ZHRG9jdW1lbnRSZWZlcmVuY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZFNWR0ZvbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFNWR0ZvbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2IxYjZiYTQ5
MmRjMDU4ZWVkZTk3MjY3NjE4Zjk3NDg2YmRjMjYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRT
VkdGb250LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJDYWNoZWRTVkdGb250LmgiCi0KLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotCi0jaW5jbHVk
ZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotI2lu
Y2x1ZGUgIk5vRXZlbnREaXNwYXRjaEFzc2VydGlvbi5oIgotI2luY2x1ZGUgIlNWR0RvY3VtZW50
LmgiCi0jaW5jbHVkZSAiU1ZHRm9udEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdGb250RmFjZUVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJUZXh0UmVzb3Vy
Y2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAiVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yLmgi
Ci0jaW5jbHVkZSAiU1ZHVG9PVEZGb250Q29udmVyc2lvbi5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLUNhY2hlZFNWR0ZvbnQ6OkNhY2hlZFNWR0ZvbnQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXNvdXJjZVJlcXVlc3QsIFNlc3Npb25JRCBzZXNzaW9uSUQpCi0gICAgOiBDYWNoZWRGb250
KHJlc291cmNlUmVxdWVzdCwgc2Vzc2lvbklELCBTVkdGb250UmVzb3VyY2UpCi0gICAgLCBtX2V4
dGVybmFsU1ZHRm9udEVsZW1lbnQobnVsbHB0cikKLXsKLX0KLQotUmVmUHRyPEZvbnQ+IENhY2hl
ZFNWR0ZvbnQ6OmNyZWF0ZUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRpY0JvbGQsIGJv
b2wgc3ludGhldGljSXRhbGljLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzJiBmb250RmFjZUZl
YXR1cmVzLCBjb25zdCBGb250VmFyaWFudFNldHRpbmdzJiBmb250RmFjZVZhcmlhbnRTZXR0aW5n
cykKLXsKLSAgICBpZiAoZmlyc3RGb250RmFjZShyZW1vdGVVUkkpKQotICAgICAgICByZXR1cm4g
Q2FjaGVkRm9udDo6Y3JlYXRlRm9udChmb250RGVzY3JpcHRpb24sIHJlbW90ZVVSSSwgc3ludGhl
dGljQm9sZCwgc3ludGhldGljSXRhbGljLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFjZVZhcmlh
bnRTZXR0aW5ncyk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGEg
Q2FjaGVkU1ZHRm9udDo6cGxhdGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIGNvbnN0IEZv
bnRGZWF0dXJlU2V0dGluZ3MmIGZvbnRGYWNlRmVhdHVyZXMsIGNvbnN0IEZvbnRWYXJpYW50U2V0
dGluZ3MmIGZvbnRGYWNlVmFyaWFudFNldHRpbmdzKQotewotICAgIGlmIChtX2V4dGVybmFsU1ZH
RG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlv
bi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBib2xkLCBpdGFsaWMpOwotICAgIHJldHVybiBDYWNoZWRG
b250OjpwbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShmb250RGVzY3JpcHRpb24sIGJvbGQsIGl0
YWxpYywgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VWYXJpYW50U2V0dGluZ3MpOwotfQotCi1i
b29sIENhY2hlZFNWR0ZvbnQ6OmVuc3VyZUN1c3RvbUZvbnREYXRhKGNvbnN0IEF0b21pY1N0cmlu
ZyYgcmVtb3RlVVJJKQotewotICAgIGlmICghbV9leHRlcm5hbFNWR0RvY3VtZW50ICYmICFlcnJv
ck9jY3VycmVkKCkgJiYgIWlzTG9hZGluZygpICYmIG1fZGF0YSkgewotICAgICAgICAvLyBXZSBt
YXkgZ2V0IGhlcmUgZHVyaW5nIHJlbmRlciB0cmVlIHVwZGF0ZXMgd2hlbiBldmVudHMgYXJlIGZv
cmJpZGRlbi4KLSAgICAgICAgLy8gRnJhbWVsZXNzIGRvY3VtZW50IGNhbid0IHJ1biBzY3JpcHRz
IG9yIGNhbGwgYmFjayB0byB0aGUgY2xpZW50IHNvIHRoaXMgaXMgc2FmZS4KLSAgICAgICAgYXV0
byBjb3VudCA9IE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6ZHJvcFRlbXBvcmFyaWx5KCk7Ci0K
LSAgICAgICAgbV9leHRlcm5hbFNWR0RvY3VtZW50ID0gU1ZHRG9jdW1lbnQ6OmNyZWF0ZShudWxs
cHRyLCBVUkwoKSk7Ci0gICAgICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBkZWNvZGVy
ID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJhcHBsaWNhdGlvbi94bWwiKTsKLSAgICAg
ICAgbV9leHRlcm5hbFNWR0RvY3VtZW50LT5zZXRDb250ZW50KGRlY29kZXItPmRlY29kZUFuZEZs
dXNoKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSkpOwotCi0gICAgICAgIE5vRXZlbnRE
aXNwYXRjaEFzc2VydGlvbjo6cmVzdG9yZURyb3BwZWQoY291bnQpOwotCi0gICAgICAgIGlmIChk
ZWNvZGVyLT5zYXdFcnJvcigpKQotICAgICAgICAgICAgbV9leHRlcm5hbFNWR0RvY3VtZW50ID0g
bnVsbHB0cjsKLSAgICAgICAgaWYgKG1fZXh0ZXJuYWxTVkdEb2N1bWVudCkKLSAgICAgICAgICAg
IG1heWJlSW5pdGlhbGl6ZUV4dGVybmFsU1ZHRm9udEVsZW1lbnQocmVtb3RlVVJJKTsKLSAgICAg
ICAgaWYgKCFtX2V4dGVybmFsU1ZHRm9udEVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZEZvbnQgPSBjb252ZXJ0U1ZHVG9PVEZGb250
KCptX2V4dGVybmFsU1ZHRm9udEVsZW1lbnQpKQotICAgICAgICAgICAgbV9jb252ZXJ0ZWRGb250
ID0gU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcihjb252ZXJ0ZWRGb250LnZhbHVlKCkpOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1fZXh0ZXJuYWxTVkdEb2N1bWVudCA9IG51bGxwdHI7
Ci0gICAgICAgICAgICBtX2V4dGVybmFsU1ZHRm9udEVsZW1lbnQgPSBudWxscHRyOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fZXh0
ZXJuYWxTVkdEb2N1bWVudCAmJiBDYWNoZWRGb250OjplbnN1cmVDdXN0b21Gb250RGF0YShtX2Nv
bnZlcnRlZEZvbnQuZ2V0KCkpOwotfQotCi1TVkdGb250RWxlbWVudCogQ2FjaGVkU1ZHRm9udDo6
Z2V0U1ZHRm9udEJ5SWQoY29uc3QgU3RyaW5nJiBmb250TmFtZSkgY29uc3QKLXsKLSAgICBBU1NF
UlQobV9leHRlcm5hbFNWR0RvY3VtZW50KTsKLSAgICBhdXRvIGVsZW1lbnRzID0gZGVzY2VuZGFu
dHNPZlR5cGU8U1ZHRm9udEVsZW1lbnQ+KCptX2V4dGVybmFsU1ZHRG9jdW1lbnQpOwotCi0gICAg
aWYgKGZvbnROYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGVsZW1lbnRzLmZpcnN0KCk7
Ci0KLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50cykgewotICAgICAgICBpZiAoZWxl
bWVudC5nZXRJZEF0dHJpYnV0ZSgpID09IGZvbnROYW1lKQotICAgICAgICAgICAgcmV0dXJuICZl
bGVtZW50OwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotU1ZHRm9udEVsZW1lbnQq
IENhY2hlZFNWR0ZvbnQ6Om1heWJlSW5pdGlhbGl6ZUV4dGVybmFsU1ZHRm9udEVsZW1lbnQoY29u
c3QgQXRvbWljU3RyaW5nJiByZW1vdGVVUkkpCi17Ci0gICAgaWYgKG1fZXh0ZXJuYWxTVkdGb250
RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIG1fZXh0ZXJuYWxTVkdGb250RWxlbWVudDsKLSAgICBT
dHJpbmcgZnJhZ21lbnRJZGVudGlmaWVyOwotICAgIHNpemVfdCBzdGFydCA9IHJlbW90ZVVSSS5m
aW5kKCcjJyk7Ci0gICAgaWYgKHN0YXJ0ICE9IG5vdEZvdW5kKQotICAgICAgICBmcmFnbWVudElk
ZW50aWZpZXIgPSByZW1vdGVVUkkuc3RyaW5nKCkuc3Vic3RyaW5nKHN0YXJ0ICsgMSk7Ci0gICAg
bV9leHRlcm5hbFNWR0ZvbnRFbGVtZW50ID0gZ2V0U1ZHRm9udEJ5SWQoZnJhZ21lbnRJZGVudGlm
aWVyKTsKLSAgICByZXR1cm4gbV9leHRlcm5hbFNWR0ZvbnRFbGVtZW50OwotfQotCi1TVkdGb250
RmFjZUVsZW1lbnQqIENhY2hlZFNWR0ZvbnQ6OmZpcnN0Rm9udEZhY2UoY29uc3QgQXRvbWljU3Ry
aW5nJiByZW1vdGVVUkkpCi17Ci0gICAgaWYgKCFtYXliZUluaXRpYWxpemVFeHRlcm5hbFNWR0Zv
bnRFbGVtZW50KHJlbW90ZVVSSSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYg
KGF1dG8qIGZpcnN0Rm9udEZhY2UgPSBjaGlsZHJlbk9mVHlwZTxTVkdGb250RmFjZUVsZW1lbnQ+
KCptX2V4dGVybmFsU1ZHRm9udEVsZW1lbnQpLmZpcnN0KCkpCi0gICAgICAgIHJldHVybiBmaXJz
dEZvbnRGYWNlOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0ZvbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDY2MWJhNWMyNTM3YzcyNGJmMjJjODQwNDM3MTQ1ZTQ5ODI3NWQ3M2IuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0ZvbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2lmbmRlZiBDYWNoZWRTVkdGb250X2gKLSNkZWZpbmUgQ2FjaGVkU1ZHRm9udF9oCi0KLSNp
ZiBFTkFCTEUoU1ZHX0ZPTlRTKQotCi0jaW5jbHVkZSAiQ2FjaGVkRm9udC5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNWR0ZvbnRGYWNlRWxlbWVudDsKLQotY2xhc3MgQ2FjaGVk
U1ZHRm9udCBmaW5hbCA6IHB1YmxpYyBDYWNoZWRGb250IHsKLXB1YmxpYzoKLSAgICBDYWNoZWRT
VkdGb250KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFNlc3Npb25JRCk7Ci0KLSAgICBib29sIGVu
c3VyZUN1c3RvbUZvbnREYXRhKGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJKSBvdmVycmlk
ZTsKLSAgICAKLSAgICBSZWZQdHI8Rm9udD4gY3JlYXRlRm9udChjb25zdCBGb250RGVzY3JpcHRp
b24mLCBjb25zdCBBdG9taWNTdHJpbmcmIHJlbW90ZVVSSSwgYm9vbCBzeW50aGV0aWNCb2xkLCBi
b29sIHN5bnRoZXRpY0l0YWxpYywgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyYsIGNvbnN0IEZv
bnRWYXJpYW50U2V0dGluZ3MmKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBGb250UGxhdGZv
cm1EYXRhIHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MmLCBjb25z
dCBGb250VmFyaWFudFNldHRpbmdzJik7Ci0KLSAgICBTVkdGb250RWxlbWVudCogZ2V0U1ZHRm9u
dEJ5SWQoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0KLSAgICBTVkdGb250RWxlbWVudCogbWF5YmVJ
bml0aWFsaXplRXh0ZXJuYWxTVkdGb250RWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIHJlbW90
ZVVSSSk7Ci0gICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmaXJzdEZvbnRGYWNlKGNvbnN0IEF0b21p
Y1N0cmluZyYgcmVtb3RlVVJJKTsKLQotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fY29udmVy
dGVkRm9udDsKLSAgICBSZWZQdHI8U1ZHRG9jdW1lbnQ+IG1fZXh0ZXJuYWxTVkdEb2N1bWVudDsK
LSAgICBTVkdGb250RWxlbWVudCogbV9leHRlcm5hbFNWR0ZvbnRFbGVtZW50OwotfTsKLQotfQot
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBQ0hFRF9SRVNPVVJDRShDYWNoZWRTVkdGb250LCBD
YWNoZWRSZXNvdXJjZTo6U1ZHRm9udFJlc291cmNlKQotCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA3NDU4NGM5ZTY0Njg1NDNjODE3NzFkOTAxZWFiMmY3ZWY4ZWY2NDM1
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTQ5ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xs
QG1waS1oZC5tcGcuZGUpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVl
bGxlckBrZGUub3JnKQotICAgIENvcHlyaWdodCAoQykgMjAwMiBXYWxkbyBCYXN0aWFuIChiYXN0
aWFuQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53
ZWluaWdAZ21haWwuY29tKQotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotCi0gICAgVGhpcyBjbGFzcyBw
cm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHls
ZSBzaGVldHMgYW5kIGh0bWwKLSAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9y
eSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKLQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50
LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKLSNpbmNsdWRlICJI
VFRQSGVhZGVyTmFtZXMuaCIKLSNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgotI2luY2x1ZGUgIk1J
TUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgotI2luY2x1ZGUgIlJ1
bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2lu
Y2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1D
YWNoZWRTY3JpcHQ6OkNhY2hlZFNjcmlwdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNl
UmVxdWVzdCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQotICAg
IDogQ2FjaGVkUmVzb3VyY2UocmVzb3VyY2VSZXF1ZXN0LCBTY3JpcHQsIHNlc3Npb25JRCkKLSAg
ICAsIG1fZGVjb2RlcihUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoQVNDSUlMaXRlcmFsKCJh
cHBsaWNhdGlvbi9qYXZhc2NyaXB0IiksIGNoYXJzZXQpKQotewotICAgIC8vIEl0J3MgamF2YXNj
cmlwdCB3ZSB3YW50LgotICAgIC8vIEJ1dCBzb21lIHdlYnNpdGVzIHRoaW5rIHRoZWlyIHNjcmlw
dHMgYXJlIDxzb21lIHdyb25nIG1pbWV0eXBlIGhlcmU+Ci0gICAgLy8gYW5kIHJlZnVzZSB0byBz
ZXJ2ZSB0aGVtIGlmIHdlIG9ubHkgYWNjZXB0IGFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdC4KLSAg
ICBzZXRBY2NlcHQoIiovKiIpOwotfQotCi1DYWNoZWRTY3JpcHQ6On5DYWNoZWRTY3JpcHQoKQot
ewotfQotCi12b2lkIENhY2hlZFNjcmlwdDo6c2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJiBjaHMp
Ci17Ci0gICAgbV9kZWNvZGVyLT5zZXRFbmNvZGluZyhjaHMsIFRleHRSZXNvdXJjZURlY29kZXI6
OkVuY29kaW5nRnJvbUhUVFBIZWFkZXIpOwotfQotCi1TdHJpbmcgQ2FjaGVkU2NyaXB0OjplbmNv
ZGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKS5uYW1lKCk7
Ci19Ci0KLVN0cmluZyBDYWNoZWRTY3JpcHQ6Om1pbWVUeXBlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVs
ZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5cGUpKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgp
OwotfQotCi1TdHJpbmdWaWV3IENhY2hlZFNjcmlwdDo6c2NyaXB0KCkKLXsKLSAgICBpZiAoIW1f
ZGF0YSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmIChtX2RlY29kaW5nU3RhdGUgPT0g
TmV2ZXJEZWNvZGVkCi0gICAgICAgICYmIFRleHRFbmNvZGluZyhlbmNvZGluZygpKS5pc0J5dGVC
YXNlZEVuY29kaW5nKCkKLSAgICAgICAgJiYgbV9kYXRhLT5zaXplKCkKLSAgICAgICAgJiYgY2hh
cmFjdGVyc0FyZUFsbEFTQ0lJKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihtX2RhdGEt
PmRhdGEoKSksIG1fZGF0YS0+c2l6ZSgpKSkgewotCi0gICAgICAgIG1fZGVjb2RpbmdTdGF0ZSA9
IERhdGFBbmREZWNvZGVkU3RyaW5nSGF2ZVNhbWVCeXRlczsKLQotICAgICAgICAvLyBJZiB0aGUg
ZW5jb2RlZCBhbmQgZGVjb2RlZCBkYXRhIGFyZSB0aGUgc2FtZSwgdGhlcmUgaXMgbm8gZGVjb2Rl
ZCBkYXRhIGNvc3QhCi0gICAgICAgIHNldERlY29kZWRTaXplKDApOwotICAgICAgICBtX2RlY29k
ZWREYXRhRGVsZXRpb25UaW1lci5zdG9wKCk7Ci0KLSAgICAgICAgbV9zY3JpcHRIYXNoID0gU3Ry
aW5nSGFzaGVyOjpjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhyZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4obV9kYXRhLT5kYXRhKCkpLCBtX2RhdGEtPnNpemUoKSk7Ci0gICAgfQotCi0g
ICAgaWYgKG1fZGVjb2RpbmdTdGF0ZSA9PSBEYXRhQW5kRGVjb2RlZFN0cmluZ0hhdmVTYW1lQnl0
ZXMpCi0gICAgICAgIHJldHVybiB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihtX2Rh
dGEtPmRhdGEoKSksIG1fZGF0YS0+c2l6ZSgpIH07Ci0KLSAgICBpZiAoIW1fc2NyaXB0KSB7Ci0g
ICAgICAgIG1fc2NyaXB0ID0gbV9kZWNvZGVyLT5kZWNvZGVBbmRGbHVzaChtX2RhdGEtPmRhdGEo
KSwgZW5jb2RlZFNpemUoKSk7Ci0gICAgICAgIEFTU0VSVCghbV9zY3JpcHRIYXNoIHx8IG1fc2Ny
aXB0SGFzaCA9PSBtX3NjcmlwdC5pbXBsKCktPmhhc2goKSk7Ci0gICAgICAgIGlmIChtX2RlY29k
aW5nU3RhdGUgPT0gTmV2ZXJEZWNvZGVkKQotICAgICAgICAgICAgbV9zY3JpcHRIYXNoID0gbV9z
Y3JpcHQuaW1wbCgpLT5oYXNoKCk7Ci0gICAgICAgIG1fZGVjb2RpbmdTdGF0ZSA9IERhdGFBbmRE
ZWNvZGVkU3RyaW5nSGF2ZURpZmZlcmVudEJ5dGVzOwotICAgICAgICBzZXREZWNvZGVkU2l6ZSht
X3NjcmlwdC5zaXplSW5CeXRlcygpKTsKLSAgICB9Ci0KLSAgICBtX2RlY29kZWREYXRhRGVsZXRp
b25UaW1lci5yZXN0YXJ0KCk7Ci0gICAgcmV0dXJuIG1fc2NyaXB0OwotfQotCi11bnNpZ25lZCBD
YWNoZWRTY3JpcHQ6OnNjcmlwdEhhc2goKQotewotICAgIGlmIChtX2RlY29kaW5nU3RhdGUgPT0g
TmV2ZXJEZWNvZGVkKQotICAgICAgICBzY3JpcHQoKTsKLSAgICByZXR1cm4gbV9zY3JpcHRIYXNo
OwotfQotCi12b2lkIENhY2hlZFNjcmlwdDo6ZmluaXNoTG9hZGluZyhTaGFyZWRCdWZmZXIqIGRh
dGEpCi17Ci0gICAgbV9kYXRhID0gZGF0YTsKLSAgICBzZXRFbmNvZGVkU2l6ZShkYXRhID8gZGF0
YS0+c2l6ZSgpIDogMCk7Ci0gICAgQ2FjaGVkUmVzb3VyY2U6OmZpbmlzaExvYWRpbmcoZGF0YSk7
Ci19Ci0KLXZvaWQgQ2FjaGVkU2NyaXB0OjpkZXN0cm95RGVjb2RlZERhdGEoKQotewotICAgIG1f
c2NyaXB0ID0gU3RyaW5nKCk7Ci0gICAgc2V0RGVjb2RlZFNpemUoMCk7Ci19Ci0KLSNpZiBFTkFC
TEUoTk9TTklGRikKLWJvb2wgQ2FjaGVkU2NyaXB0OjptaW1lVHlwZUFsbG93ZWRCeU5vc25pZmYo
KSBjb25zdAotewotICAgIHJldHVybiBwYXJzZUNvbnRlbnRUeXBlT3B0aW9uc0hlYWRlcihtX3Jl
c3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6WENvbnRlbnRUeXBlT3B0aW9u
cykpICE9IENvbnRlbnRUeXBlT3B0aW9uc05vc25pZmYgfHwgTUlNRVR5cGVSZWdpc3RyeTo6aXNT
dXBwb3J0ZWRKYXZhU2NyaXB0TUlNRVR5cGUobWltZVR5cGUoKSk7Ci19Ci0jZW5kaWYKLQotYm9v
bCBDYWNoZWRTY3JpcHQ6OnNob3VsZElnbm9yZUhUVFBTdGF0dXNDb2RlRXJyb3JzKCkgY29uc3QK
LXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIDxy
ZGFyOi8vcHJvYmxlbS8xMzkxNjI5MT4KLSAgICAvLyBSRUdSRVNTSU9OIChyMTE5NzU5KTogQWRv
YmUgRmxhc2ggUGxheWVyICJzbWFsbGVyIiBpbnN0YWxsZXIgcmVsaWVzIG9uIHRoZSBpbmNvcnJl
Y3QgZmlyaW5nCi0gICAgLy8gb2YgYSBsb2FkIGV2ZW50IGFuZCBuZWVkcyBhbiBhcHAtc3BlY2lm
aWMgaGFjayBmb3IgY29tcGF0aWJpbGl0eS4KLSAgICAvLyBUaGUgaW5zdGFsbGVyIGluIHF1ZXN0
aW9uIHRyaWVzIHRvIGxvYWQgLmpzIGZpbGUgdGhhdCBkb2Vzbid0IGV4aXN0LCBjYXVzaW5nIHRo
ZSBzZXJ2ZXIgdG8KLSAgICAvLyByZXR1cm4gYSA0MDQgcmVzcG9uc2UuIE5vcm1hbGx5LCB0aGlz
IHdvdWxkIHRyaWdnZXIgYW4gZXJyb3IgZXZlbnQgdG8gYmUgZGlzcGF0Y2hlZCwgYnV0IHRoZQot
ICAgIC8vIGluc3RhbGxlciBleHBlY3RzIGEgbG9hZCBldmVudCBpbnN0ZWFkIHNvIHdlIHdvcmsg
YXJvdW5kIGl0IGhlcmUuCi0gICAgaWYgKE1hY0FwcGxpY2F0aW9uOjppc1NvbGlkU3RhdGVOZXR3
b3Jrc0Rvd25sb2FkZXIoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLQotICAgIHJl
dHVybiBDYWNoZWRSZXNvdXJjZTo6c2hvdWxkSWdub3JlSFRUUFN0YXR1c0NvZGVFcnJvcnMoKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFNjcmlwdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmYxZDE0MTZj
NTIwZjkxNDc3MWRiOTMwNWYyNTgzN2JmNGNiMWVmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRT
Y3JpcHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0
IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCi0gICAgQ29weXJpZ2h0
IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgotICAgIENvcHlyaWdodCAo
QykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKLSAgICBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLQotICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVl
ZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUgc2hlZXRzIGFuZCBodG1sCi0gICAgcGFnZXMg
ZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCi0q
LwotCi0jaWZuZGVmIENhY2hlZFNjcmlwdF9oCi0jZGVmaW5lIENhY2hlZFNjcmlwdF9oCi0KLSNp
bmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IFRleHRSZXNvdXJjZURlY29kZXI7Ci0KLWNsYXNzIENhY2hlZFNjcmlwdCBmaW5hbCA6IHB1Ymxp
YyBDYWNoZWRSZXNvdXJjZSB7Ci1wdWJsaWM6Ci0gICAgQ2FjaGVkU2NyaXB0KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgU2Vzc2lvbklEKTsKLSAgICB2aXJ0
dWFsIH5DYWNoZWRTY3JpcHQoKTsKLQotICAgIFN0cmluZ1ZpZXcgc2NyaXB0KCk7Ci0gICAgdW5z
aWduZWQgc2NyaXB0SGFzaCgpOwotCi0gICAgU3RyaW5nIG1pbWVUeXBlKCkgY29uc3Q7Ci0KLSNp
ZiBFTkFCTEUoTk9TTklGRikKLSAgICBib29sIG1pbWVUeXBlQWxsb3dlZEJ5Tm9zbmlmZigpIGNv
bnN0OwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgYm9vbCBtYXlUcnlSZXBsYWNlRW5jb2RlZERh
dGEoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBib29sIHNob3VsZEln
bm9yZUhUVFBTdGF0dXNDb2RlRXJyb3JzKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNl
dEVuY29kaW5nKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotICAgIFN0cmluZyBlbmNvZGluZygp
IGNvbnN0IG92ZXJyaWRlOwotICAgIGNvbnN0IFRleHRSZXNvdXJjZURlY29kZXIqIHRleHRSZXNv
dXJjZURlY29kZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2RlY29kZXIuZ2V0KCk7IH0K
LSAgICB2b2lkIGZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKikgb3ZlcnJpZGU7Ci0KLSAgICB2
b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YSgpIG92ZXJyaWRlOwotCi0gICAgU3RyaW5nIG1fc2NyaXB0
OwotICAgIHVuc2lnbmVkIG1fc2NyaXB0SGFzaCB7IDAgfTsKLQotICAgIGVudW0gRGVjb2RpbmdT
dGF0ZSB7IE5ldmVyRGVjb2RlZCwgRGF0YUFuZERlY29kZWRTdHJpbmdIYXZlU2FtZUJ5dGVzLCBE
YXRhQW5kRGVjb2RlZFN0cmluZ0hhdmVEaWZmZXJlbnRCeXRlcyB9OwotICAgIERlY29kaW5nU3Rh
dGUgbV9kZWNvZGluZ1N0YXRlIHsgTmV2ZXJEZWNvZGVkIH07Ci0KLSAgICBSZWZQdHI8VGV4dFJl
c291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBQ0hFRF9SRVNPVVJDRShDYWNoZWRTY3JpcHQsIENh
Y2hlZFJlc291cmNlOjpTY3JpcHQpCi0KLSNlbmRpZiAvLyBDYWNoZWRTY3JpcHRfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFN0eWxlU2hlZXRDbGllbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTdHlsZVNoZWV0Q2xpZW50LmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhYTI5MmE3MWRkZGVjOWE0YjU0OTJjZjI2
ZTRhZjk5ZWZlMTJlMjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFN0eWxlU2hlZXRDbGllbnQu
aAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAxOTk4
IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCi0gQ29weXJpZ2h0IChDKSAyMDAxIERp
cmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgotIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gCi0gVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotIAotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAKLSBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotIAotIFRoaXMgY2xhc3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVl
ZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUgc2hlZXRzIGFuZCBodG1sCi0gcGFnZXMgZnJv
bSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCi0gKi8K
LQotI2lmbmRlZiBDYWNoZWRTdHlsZVNoZWV0Q2xpZW50X2gKLSNkZWZpbmUgQ2FjaGVkU3R5bGVT
aGVldENsaWVudF9oCi0KLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgotI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ2FjaGVk
Q1NTU3R5bGVTaGVldDsKLWNsYXNzIFVSTDsKLQotY2xhc3MgQ2FjaGVkU3R5bGVTaGVldENsaWVu
dCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+
Q2FjaGVkU3R5bGVTaGVldENsaWVudCgpIHsgfQotICAgIHN0YXRpYyBDYWNoZWRSZXNvdXJjZUNs
aWVudFR5cGUgZXhwZWN0ZWRUeXBlKCkgeyByZXR1cm4gU3R5bGVTaGVldFR5cGU7IH0KLSAgICBD
YWNoZWRSZXNvdXJjZUNsaWVudFR5cGUgcmVzb3VyY2VDbGllbnRUeXBlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZXhwZWN0ZWRUeXBlKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q1NTU3R5
bGVTaGVldChjb25zdCBTdHJpbmcmIC8qIGhyZWYgKi8sIGNvbnN0IFVSTCYgLyogYmFzZVVSTCAq
LywgY29uc3QgU3RyaW5nJiAvKiBjaGFyc2V0ICovLCBjb25zdCBDYWNoZWRDU1NTdHlsZVNoZWV0
KikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFhTTFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiAv
KiBocmVmICovLCBjb25zdCBVUkwmIC8qIGJhc2VVUkwgKi8sIGNvbnN0IFN0cmluZyYgLyogc2hl
ZXQgKi8pIHsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQ2Fj
aGVkU3R5bGVTaGVldENsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkVGV4dFRyYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRUZXh0VHJhY2suY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWNiNGFl
ODI0YTMwMzg4NTY1OGJiODY5NzBmZWU3ODhlOWQ5NGYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRUZXh0VHJhY2suY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLQotI2lu
Y2x1ZGUgIkNhY2hlZFRleHRUcmFjay5oIgotCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGll
bnQuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIgotI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5j
bHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNh
Y2hlZFRleHRUcmFjazo6Q2FjaGVkVGV4dFRyYWNrKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVz
b3VyY2VSZXF1ZXN0LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQotICAgIDogQ2FjaGVkUmVzb3VyY2Uo
cmVzb3VyY2VSZXF1ZXN0LCBUZXh0VHJhY2tSZXNvdXJjZSwgc2Vzc2lvbklEKQotewotfQotCi12
b2lkIENhY2hlZFRleHRUcmFjazo6dXBkYXRlRGF0YShTaGFyZWRCdWZmZXIqIGRhdGEpCi17Ci0g
ICAgQVNTRVJUKGRhdGFCdWZmZXJpbmdQb2xpY3koKSA9PSBCdWZmZXJEYXRhKTsKLSAgICBtX2Rh
dGEgPSBkYXRhOwotICAgIHNldEVuY29kZWRTaXplKGRhdGEgPyBkYXRhLT5zaXplKCkgOiAwKTsK
LQotICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyPENhY2hlZFJlc291cmNlQ2xpZW50PiB3
YWxrZXIobV9jbGllbnRzKTsKLSAgICB3aGlsZSAoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVu
dCA9IHdhbGtlci5uZXh0KCkpCi0gICAgICAgIGNsaWVudC0+ZGVwcmVjYXRlZERpZFJlY2VpdmVD
YWNoZWRSZXNvdXJjZSh0aGlzKTsKLX0KLQotdm9pZCBDYWNoZWRUZXh0VHJhY2s6OmFkZERhdGFC
dWZmZXIoU2hhcmVkQnVmZmVyJiBkYXRhKQotewotICAgIHVwZGF0ZURhdGEoJmRhdGEpOwotICAg
IENhY2hlZFJlc291cmNlOjphZGREYXRhQnVmZmVyKGRhdGEpOwotfQotCi12b2lkIENhY2hlZFRl
eHRUcmFjazo6ZmluaXNoTG9hZGluZyhTaGFyZWRCdWZmZXIqIGRhdGEpCi17Ci0gICAgdXBkYXRl
RGF0YShkYXRhKTsKLSAgICBDYWNoZWRSZXNvdXJjZTo6ZmluaXNoTG9hZGluZyhkYXRhKTsKLX0K
LQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRUZXh0VHJhY2suaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRUZXh0
VHJhY2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRlNTM0ZDM1MGNhZWQzZmE2
M2NhMDkzMGZkODJiZWFmZTI2MGEwNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkVGV4dFRyYWNr
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBD
YWNoZWRUZXh0VHJhY2tfaAotI2RlZmluZSBDYWNoZWRUZXh0VHJhY2tfaAotCi0jaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQotCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKLSNpbmNsdWRlICJU
ZXh0RmxhZ3MuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDYWNoZWRUZXh0VHJh
Y2sgZmluYWwgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2UgewotcHVibGljOgotICAgIENhY2hlZFRl
eHRUcmFjayhjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTZXNzaW9uSUQpOwotCi1wcml2YXRlOgot
ICAgIGJvb2wgbWF5VHJ5UmVwbGFjZUVuY29kZWREYXRhKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQotICAgIHZvaWQgYWRkRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXImKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKikgb3ZlcnJpZGU7Ci0KLSAg
ICB2b2lkIHVwZGF0ZURhdGEoU2hhcmVkQnVmZmVyKik7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FDSEVEX1JFU09VUkNFKENhY2hlZFRl
eHRUcmFjaywgQ2FjaGVkUmVzb3VyY2U6OlRleHRUcmFja1Jlc291cmNlKQotCi0jZW5kaWYgLy8g
RU5BQkxFKFZJREVPX1RSQUNLKQotCi0jZW5kaWYgLy8gQ2FjaGVkVGV4dFRyYWNrX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJjMTRmZmYyNjA3OGM4ZDI5YjY4ZDIyZTky
NTgwYjQ1ZDUzYjE0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMTk5
OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHlyaWdodCAoQykgMjAw
MSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDIg
V2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQotICAgIENvcHlyaWdodCAoQykgMjAwNiBT
YW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKLSAgICBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LQotICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBs
b2FkaW5nIGltYWdlcywgc3R5bGUgc2hlZXRzIGFuZCBodG1sCi0gICAgcGFnZXMgZnJvbSB0aGUg
d2ViLiBJdCBoYXMgYSBtZW1vcnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCi0qLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2FjaGVkWFNMU3R5bGVTaGVldC5oIgotCi0jaW5j
bHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKLSNpbmNsdWRlICJDYWNoZWRTdHls
ZVNoZWV0Q2xpZW50LmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSAiVGV4
dFJlc291cmNlRGVjb2Rlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBFTkFCTEUo
WFNMVCkKLQotQ2FjaGVkWFNMU3R5bGVTaGVldDo6Q2FjaGVkWFNMU3R5bGVTaGVldChjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgU2Vzc2lvbklEIHNlc3Npb25JRCkKLSAg
ICA6IENhY2hlZFJlc291cmNlKHJlc291cmNlUmVxdWVzdCwgWFNMU3R5bGVTaGVldCwgc2Vzc2lv
bklEKQotICAgICwgbV9kZWNvZGVyKFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC94
c2wiKSkKLXsKLSAgICAvLyBJdCdzIFhNTCB3ZSB3YW50LgotICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBhY2NlcHQgbW9yZSBnZW5lcmFsIHhtbCBmb3JtYXRzICovKit4bWwsIGltYWdlL3N2Zyt4
bWwgZm9yIGV4YW1wbGUuCi0gICAgc2V0QWNjZXB0KCJ0ZXh0L3htbCwgYXBwbGljYXRpb24veG1s
LCBhcHBsaWNhdGlvbi94aHRtbCt4bWwsIHRleHQveHNsLCBhcHBsaWNhdGlvbi9yc3MreG1sLCBh
cHBsaWNhdGlvbi9hdG9tK3htbCIpOwotfQotCi1DYWNoZWRYU0xTdHlsZVNoZWV0Ojp+Q2FjaGVk
WFNMU3R5bGVTaGVldCgpCi17Ci19Ci0KLXZvaWQgQ2FjaGVkWFNMU3R5bGVTaGVldDo6ZGlkQWRk
Q2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50KiBjKQoteyAgCi0gICAgQVNTRVJUKGMtPnJlc291
cmNlQ2xpZW50VHlwZSgpID09IENhY2hlZFN0eWxlU2hlZXRDbGllbnQ6OmV4cGVjdGVkVHlwZSgp
KTsKLSAgICBpZiAoIWlzTG9hZGluZygpKQotICAgICAgICBzdGF0aWNfY2FzdDxDYWNoZWRTdHls
ZVNoZWV0Q2xpZW50Kj4oYyktPnNldFhTTFN0eWxlU2hlZXQobV9yZXNvdXJjZVJlcXVlc3QudXJs
KCksIG1fcmVzcG9uc2UudXJsKCksIG1fc2hlZXQpOwotfQotCi12b2lkIENhY2hlZFhTTFN0eWxl
U2hlZXQ6OnNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYgY2hzKQotewotICAgIG1fZGVjb2Rlci0+
c2V0RW5jb2RpbmcoY2hzLCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpFbmNvZGluZ0Zyb21IVFRQSGVh
ZGVyKTsKLX0KLQotU3RyaW5nIENhY2hlZFhTTFN0eWxlU2hlZXQ6OmVuY29kaW5nKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9kZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKTsKLX0KLQotdm9pZCBD
YWNoZWRYU0xTdHlsZVNoZWV0OjpmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1ZmZlciogZGF0YSkKLXsK
LSAgICBtX2RhdGEgPSBkYXRhOwotICAgIHNldEVuY29kZWRTaXplKGRhdGEgPyBkYXRhLT5zaXpl
KCkgOiAwKTsKLSAgICBpZiAoZGF0YSkKLSAgICAgICAgbV9zaGVldCA9IG1fZGVjb2Rlci0+ZGVj
b2RlQW5kRmx1c2goZGF0YS0+ZGF0YSgpLCBlbmNvZGVkU2l6ZSgpKTsKLSAgICBzZXRMb2FkaW5n
KGZhbHNlKTsKLSAgICBjaGVja05vdGlmeSgpOwotfQotCi12b2lkIENhY2hlZFhTTFN0eWxlU2hl
ZXQ6OmNoZWNrTm90aWZ5KCkKLXsKLSAgICBpZiAoaXNMb2FkaW5nKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRTdHlsZVNoZWV0
Q2xpZW50PiB3KG1fY2xpZW50cyk7Ci0gICAgd2hpbGUgKENhY2hlZFN0eWxlU2hlZXRDbGllbnQq
IGMgPSB3Lm5leHQoKSkKLSAgICAgICAgYy0+c2V0WFNMU3R5bGVTaGVldChtX3Jlc291cmNlUmVx
dWVzdC51cmwoKSwgbV9yZXNwb25zZS51cmwoKSwgbV9zaGVldCk7Ci19Ci0KLSNlbmRpZgotCi19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVT
aGVldC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVjZmY0NWVmNGRmMWYxOTE3YmI4YzQ5
NDVmZjJmYTlkNjY4ZjU2ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5o
CisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5
OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIw
MDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA2
IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQotICAgIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9y
IGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKLSAgICBwYWdlcyBmcm9tIHRo
ZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KLSovCi0KLSNp
Zm5kZWYgQ2FjaGVkWFNMU3R5bGVTaGVldF9oCi0jZGVmaW5lIENhY2hlZFhTTFN0eWxlU2hlZXRf
aAotCi0jaWYgRU5BQkxFKFhTTFQpCi0KLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7Ci0KLWNsYXNz
IENhY2hlZFhTTFN0eWxlU2hlZXQgZmluYWwgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2UgewotcHVi
bGljOgotICAgIENhY2hlZFhTTFN0eWxlU2hlZXQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2Vz
c2lvbklEKTsKLSAgICB2aXJ0dWFsIH5DYWNoZWRYU0xTdHlsZVNoZWV0KCk7Ci0KLSAgICBjb25z
dCBTdHJpbmcmIHNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldDsgfQotCi1wcml2YXRlOgot
ICAgIHZvaWQgY2hlY2tOb3RpZnkoKSBvdmVycmlkZTsKLSAgICBib29sIG1heVRyeVJlcGxhY2VF
bmNvZGVkRGF0YSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2b2lkIGRp
ZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0
RW5jb2RpbmcoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIGVuY29kaW5nKCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogdGV4dFJlc291
cmNlRGVjb2RlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVjb2Rlci5nZXQoKTsgfQot
ICAgIHZvaWQgZmluaXNoTG9hZGluZyhTaGFyZWRCdWZmZXIqKSBvdmVycmlkZTsKLQotICAgIFN0
cmluZyBtX3NoZWV0OwotICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBtX2RlY29kZXI7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
Q0FDSEVEX1JFU09VUkNFKENhY2hlZFhTTFN0eWxlU2hlZXQsIENhY2hlZFJlc291cmNlOjpYU0xT
dHlsZVNoZWV0KQotCi0jZW5kaWYgLy8gRU5BQkxFKFhTTFQpCi0KLSNlbmRpZiAvLyBDYWNoZWRY
U0xTdHlsZVNoZWV0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9N
ZW1vcnlDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTM1MDFlNGIyOWY2YjgyOWE2MjUx
OGE4NWQ4NTBiMWVmMDQ2ZGZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw4MDAgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTgg
TGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEg
RGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAyIFdh
bGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgotCi0jaW5jbHVk
ZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkNh
Y2hlZEltYWdlQ2xpZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKLSNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCi0jaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgi
Ci0jaW5jbHVkZSAiUHVibGljU3VmZml4LmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0j
aW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGUuaCIKLSNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94
eS5oIgotI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hh
bmdlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLXN0YXRpYyBjb25zdCBpbnQgY0RlZmF1bHRDYWNoZUNhcGFjaXR5ID0gODE5MiAqIDEw
MjQ7Ci1zdGF0aWMgY29uc3QgZG91YmxlIGNNaW5EZWxheUJlZm9yZUxpdmVEZWNvZGVkUHJ1bmUg
PSAxOyAvLyBTZWNvbmRzLgotc3RhdGljIGNvbnN0IGZsb2F0IGNUYXJnZXRQcnVuZVBlcmNlbnRh
Z2UgPSAuOTVmOyAvLyBQZXJjZW50YWdlIG9mIGNhcGFjaXR5IHRvd2FyZCB3aGljaCB3ZSBwcnVu
ZSwgdG8gYXZvaWQgaW1tZWRpYXRlbHkgcHJ1bmluZyBhZ2Fpbi4KLXN0YXRpYyBjb25zdCBhdXRv
IGRlZmF1bHREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwgPSBzdGQ6OmNocm9ubzo6c2Vjb25k
cyB7IDAgfTsKLQotTWVtb3J5Q2FjaGUmIE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKQotewotICAg
IEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
TWVtb3J5Q2FjaGU+IG1lbW9yeUNhY2hlOwotICAgIHJldHVybiBtZW1vcnlDYWNoZTsKLX0KLQot
TWVtb3J5Q2FjaGU6Ok1lbW9yeUNhY2hlKCkKLSAgICA6IG1fZGlzYWJsZWQoZmFsc2UpCi0gICAg
LCBtX2luUHJ1bmVSZXNvdXJjZXMoZmFsc2UpCi0gICAgLCBtX2NhcGFjaXR5KGNEZWZhdWx0Q2Fj
aGVDYXBhY2l0eSkKLSAgICAsIG1fbWluRGVhZENhcGFjaXR5KDApCi0gICAgLCBtX21heERlYWRD
YXBhY2l0eShjRGVmYXVsdENhY2hlQ2FwYWNpdHkpCi0gICAgLCBtX2RlYWREZWNvZGVkRGF0YURl
bGV0aW9uSW50ZXJ2YWwoZGVmYXVsdERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCkKLSAgICAs
IG1fbGl2ZVNpemUoMCkKLSAgICAsIG1fZGVhZFNpemUoMCkKLSAgICAsIG1fcHJ1bmVUaW1lcigq
dGhpcywgJk1lbW9yeUNhY2hlOjpwcnVuZSkKLXsKLX0KLQotYXV0byBNZW1vcnlDYWNoZTo6c2Vz
c2lvblJlc291cmNlTWFwKFNlc3Npb25JRCBzZXNzaW9uSUQpIGNvbnN0IC0+IENhY2hlZFJlc291
cmNlTWFwKgotewotICAgIEFTU0VSVChzZXNzaW9uSUQuaXNWYWxpZCgpKTsKLSAgICByZXR1cm4g
bV9zZXNzaW9uUmVzb3VyY2VzLmdldChzZXNzaW9uSUQpOwotfQotCi1hdXRvIE1lbW9yeUNhY2hl
OjplbnN1cmVTZXNzaW9uUmVzb3VyY2VNYXAoU2Vzc2lvbklEIHNlc3Npb25JRCkgLT4gQ2FjaGVk
UmVzb3VyY2VNYXAmCi17Ci0gICAgQVNTRVJUKHNlc3Npb25JRC5pc1ZhbGlkKCkpOwotICAgIGF1
dG8mIG1hcCA9IG1fc2Vzc2lvblJlc291cmNlcy5hZGQoc2Vzc2lvbklELCBudWxscHRyKS5pdGVy
YXRvci0+dmFsdWU7Ci0gICAgaWYgKCFtYXApCi0gICAgICAgIG1hcCA9IHN0ZDo6bWFrZV91bmlx
dWU8Q2FjaGVkUmVzb3VyY2VNYXA+KCk7Ci0gICAgcmV0dXJuICptYXA7Ci19Ci0KLVVSTCBNZW1v
cnlDYWNoZTo6cmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVySWZOZWVkZWQoY29uc3QgVVJMJiBvcmln
aW5hbFVSTCkKLXsKLSAgICBpZiAoIW9yaWdpbmFsVVJMLmhhc0ZyYWdtZW50SWRlbnRpZmllcigp
KQotICAgICAgICByZXR1cm4gb3JpZ2luYWxVUkw7Ci0gICAgLy8gU3RyaXAgYXdheSBmcmFnbWVu
dCBpZGVudGlmaWVyIGZyb20gSFRUUCBVUkxzLgotICAgIC8vIERhdGEgVVJMcyBtdXN0IGJlIHVu
bW9kaWZpZWQuIEZvciBmaWxlIGFuZCBjdXN0b20gVVJMcyBjbGllbnRzIG1heSBleHBlY3QgcmVz
b3VyY2VzIAotICAgIC8vIHRvIGJlIHVuaXF1ZSBldmVuIHdoZW4gdGhleSBkaWZmZXIgYnkgdGhl
IGZyYWdtZW50IGlkZW50aWZpZXIgb25seS4KLSAgICBpZiAoIW9yaWdpbmFsVVJMLnByb3RvY29s
SXNJbkhUVFBGYW1pbHkoKSkKLSAgICAgICAgcmV0dXJuIG9yaWdpbmFsVVJMOwotICAgIFVSTCB1
cmwgPSBvcmlnaW5hbFVSTDsKLSAgICB1cmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7Ci0g
ICAgcmV0dXJuIHVybDsKLX0KLQotYm9vbCBNZW1vcnlDYWNoZTo6YWRkKENhY2hlZFJlc291cmNl
JiByZXNvdXJjZSkKLXsKLSAgICBpZiAoZGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOwotCi0jaWYgRU5BQkxFKENBQ0hF
X1BBUlRJVElPTklORykKLSAgICBhdXRvIGtleSA9IHN0ZDo6bWFrZV9wYWlyKHJlc291cmNlLnVy
bCgpLCByZXNvdXJjZS5jYWNoZVBhcnRpdGlvbigpKTsKLSNlbHNlCi0gICAgYXV0byYga2V5ID0g
cmVzb3VyY2UudXJsKCk7Ci0jZW5kaWYKLSAgICBlbnN1cmVTZXNzaW9uUmVzb3VyY2VNYXAocmVz
b3VyY2Uuc2Vzc2lvbklEKCkpLnNldChrZXksICZyZXNvdXJjZSk7Ci0gICAgcmVzb3VyY2Uuc2V0
SW5DYWNoZSh0cnVlKTsKLSAgICAKLSAgICByZXNvdXJjZUFjY2Vzc2VkKHJlc291cmNlKTsKLSAg
ICAKLSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiTWVtb3J5Q2FjaGU6OmFkZCBBZGRlZCAnJXMn
LCByZXNvdXJjZSAlcFxuIiwgcmVzb3VyY2UudXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgp
LCAmcmVzb3VyY2UpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIE1lbW9yeUNhY2hlOjpy
ZXZhbGlkYXRpb25TdWNjZWVkZWQoQ2FjaGVkUmVzb3VyY2UmIHJldmFsaWRhdGluZ1Jlc291cmNl
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBBU1NFUlQocmV2YWxp
ZGF0aW5nUmVzb3VyY2UucmVzb3VyY2VUb1JldmFsaWRhdGUoKSk7Ci0gICAgQ2FjaGVkUmVzb3Vy
Y2UmIHJlc291cmNlID0gKnJldmFsaWRhdGluZ1Jlc291cmNlLnJlc291cmNlVG9SZXZhbGlkYXRl
KCk7Ci0gICAgQVNTRVJUKCFyZXNvdXJjZS5pbkNhY2hlKCkpOwotICAgIEFTU0VSVChyZXNvdXJj
ZS5pc0xvYWRlZCgpKTsKLQotICAgIC8vIENhbGxpbmcgcmVtb3ZlKCkgY2FuIHBvdGVudGlhbGx5
IGRlbGV0ZSByZXZhbGlkYXRpbmdSZXNvdXJjZSwgd2hpY2ggd2UgdXNlCi0gICAgLy8gYmVsb3cu
IFRoaXMgbXVzdG4ndCBiZSB0aGUgY2FzZSBzaW5jZSByZXZhbGlkYXRpb24gbWVhbnMgaXQgaXMg
bG9hZGVkCi0gICAgLy8gYW5kIHNvIGNhbkRlbGV0ZSgpIGlzIGZhbHNlLgotICAgIEFTU0VSVCgh
cmV2YWxpZGF0aW5nUmVzb3VyY2UuY2FuRGVsZXRlKCkpOwotCi0gICAgcmVtb3ZlKHJldmFsaWRh
dGluZ1Jlc291cmNlKTsKLQotICAgIGF1dG8mIHJlc291cmNlcyA9IGVuc3VyZVNlc3Npb25SZXNv
dXJjZU1hcChyZXNvdXJjZS5zZXNzaW9uSUQoKSk7Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElP
TklORykKLSAgICBhdXRvIGtleSA9IHN0ZDo6bWFrZV9wYWlyKHJlc291cmNlLnVybCgpLCByZXNv
dXJjZS5jYWNoZVBhcnRpdGlvbigpKTsKLSNlbHNlCi0gICAgYXV0byYga2V5ID0gcmVzb3VyY2Uu
dXJsKCk7Ci0jZW5kaWYKLSAgICBBU1NFUlQoIXJlc291cmNlcy5nZXQoa2V5KSk7Ci0gICAgcmVz
b3VyY2VzLnNldChrZXksICZyZXNvdXJjZSk7Ci0gICAgcmVzb3VyY2Uuc2V0SW5DYWNoZSh0cnVl
KTsKLSAgICByZXNvdXJjZS51cGRhdGVSZXNwb25zZUFmdGVyUmV2YWxpZGF0aW9uKHJlc3BvbnNl
KTsKLSAgICBpbnNlcnRJbkxSVUxpc3QocmVzb3VyY2UpOwotICAgIGludCBkZWx0YSA9IHJlc291
cmNlLnNpemUoKTsKLSAgICBpZiAocmVzb3VyY2UuZGVjb2RlZFNpemUoKSAmJiByZXNvdXJjZS5o
YXNDbGllbnRzKCkpCi0gICAgICAgIGluc2VydEluTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KHJl
c291cmNlKTsKLSAgICBpZiAoZGVsdGEpCi0gICAgICAgIGFkanVzdFNpemUocmVzb3VyY2UuaGFz
Q2xpZW50cygpLCBkZWx0YSk7Ci0gICAgCi0gICAgcmV2YWxpZGF0aW5nUmVzb3VyY2Uuc3dpdGNo
Q2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSgpOwotICAgIEFTU0VSVCghcmV2YWxpZGF0aW5n
UmVzb3VyY2UubV9kZWxldGVkKTsKLSAgICAvLyB0aGlzIGRlbGV0ZXMgdGhlIHJldmFsaWRhdGlu
ZyByZXNvdXJjZQotICAgIHJldmFsaWRhdGluZ1Jlc291cmNlLmNsZWFyUmVzb3VyY2VUb1JldmFs
aWRhdGUoKTsKLX0KLQotdm9pZCBNZW1vcnlDYWNoZTo6cmV2YWxpZGF0aW9uRmFpbGVkKENhY2hl
ZFJlc291cmNlJiByZXZhbGlkYXRpbmdSZXNvdXJjZSkKLXsKLSAgICBBU1NFUlQoV1RGOjppc01h
aW5UaHJlYWQoKSk7Ci0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJldmFsaWRhdGlvbiBmYWls
ZWQgZm9yICVwIiwgJnJldmFsaWRhdGluZ1Jlc291cmNlKTsKLSAgICBBU1NFUlQocmV2YWxpZGF0
aW5nUmVzb3VyY2UucmVzb3VyY2VUb1JldmFsaWRhdGUoKSk7Ci0gICAgcmV2YWxpZGF0aW5nUmVz
b3VyY2UuY2xlYXJSZXNvdXJjZVRvUmV2YWxpZGF0ZSgpOwotfQotCi1DYWNoZWRSZXNvdXJjZSog
TWVtb3J5Q2FjaGU6OnJlc291cmNlRm9yUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIFNlc3Npb25JRCBzZXNzaW9uSUQpCi17Ci0gICAgYXV0byogcmVzb3VyY2VzID0gc2Vz
c2lvblJlc291cmNlTWFwKHNlc3Npb25JRCk7Ci0gICAgaWYgKCFyZXNvdXJjZXMpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIHJldHVybiByZXNvdXJjZUZvclJlcXVlc3RJbXBsKHJlcXVl
c3QsICpyZXNvdXJjZXMpOwotfQotCi1DYWNoZWRSZXNvdXJjZSogTWVtb3J5Q2FjaGU6OnJlc291
cmNlRm9yUmVxdWVzdEltcGwoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBDYWNoZWRS
ZXNvdXJjZU1hcCYgcmVzb3VyY2VzKQotewotICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgp
KTsKLSAgICBVUkwgdXJsID0gcmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVySWZOZWVkZWQocmVxdWVz
dC51cmwoKSk7Ci0KLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQotICAgIGF1dG8ga2V5
ID0gc3RkOjptYWtlX3BhaXIodXJsLCByZXF1ZXN0LmNhY2hlUGFydGl0aW9uKCkpOwotI2Vsc2UK
LSAgICBhdXRvJiBrZXkgPSB1cmw7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzb3VyY2VzLmdldChr
ZXkpOwotfQotCi11bnNpZ25lZCBNZW1vcnlDYWNoZTo6ZGVhZENhcGFjaXR5KCkgY29uc3QgCi17
Ci0gICAgLy8gRGVhZCByZXNvdXJjZSBjYXBhY2l0eSBpcyB3aGF0ZXZlciBzcGFjZSBpcyBub3Qg
b2NjdXBpZWQgYnkgbGl2ZSByZXNvdXJjZXMsIGJvdW5kZWQgYnkgYW4gaW5kZXBlbmRlbnQgbWlu
aW11bSBhbmQgbWF4aW11bS4KLSAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IG1fY2FwYWNpdHkgLSBz
dGQ6Om1pbihtX2xpdmVTaXplLCBtX2NhcGFjaXR5KTsgLy8gU3RhcnQgd2l0aCBhdmFpbGFibGUg
Y2FwYWNpdHkuCi0gICAgY2FwYWNpdHkgPSBzdGQ6Om1heChjYXBhY2l0eSwgbV9taW5EZWFkQ2Fw
YWNpdHkpOyAvLyBNYWtlIHN1cmUgaXQncyBhYm92ZSB0aGUgbWluaW11bS4KLSAgICBjYXBhY2l0
eSA9IHN0ZDo6bWluKGNhcGFjaXR5LCBtX21heERlYWRDYXBhY2l0eSk7IC8vIE1ha2Ugc3VyZSBp
dCdzIGJlbG93IHRoZSBtYXhpbXVtLgotICAgIHJldHVybiBjYXBhY2l0eTsKLX0KLQotdW5zaWdu
ZWQgTWVtb3J5Q2FjaGU6OmxpdmVDYXBhY2l0eSgpIGNvbnN0IAoteyAKLSAgICAvLyBMaXZlIHJl
c291cmNlIGNhcGFjaXR5IGlzIHdoYXRldmVyIGlzIGxlZnQgb3ZlciBhZnRlciBjYWxjdWxhdGlu
ZyBkZWFkIHJlc291cmNlIGNhcGFjaXR5LgotICAgIHJldHVybiBtX2NhcGFjaXR5IC0gZGVhZENh
cGFjaXR5KCk7Ci19Ci0KLXN0YXRpYyBDYWNoZWRJbWFnZUNsaWVudCYgZHVtbXlDYWNoZWRJbWFn
ZUNsaWVudCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENhY2hlZEltYWdlQ2xpZW50
PiBjbGllbnQ7Ci0gICAgcmV0dXJuIGNsaWVudDsKLX0KLQotYm9vbCBNZW1vcnlDYWNoZTo6YWRk
SW1hZ2VUb0NhY2hlKE5hdGl2ZUltYWdlUHRyJiYgaW1hZ2UsIGNvbnN0IFVSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIGRvbWFpbkZvckNhY2hlUGFydGl0aW9uKQotewotICAgIEFTU0VSVChpbWFnZSk7
Ci0gICAgU2Vzc2lvbklEIHNlc3Npb25JRCA9IFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
OwotICAgIHJlbW92ZUltYWdlRnJvbUNhY2hlKHVybCwgZG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24p
OyAvLyBSZW1vdmUgY2FjaGUgZW50cnkgaWYgaXQgYWxyZWFkeSBleGlzdHMuCi0KLSAgICBSZWZQ
dHI8Qml0bWFwSW1hZ2U+IGJpdG1hcEltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3Zl
KGltYWdlKSwgbnVsbHB0cik7Ci0gICAgaWYgKCFiaXRtYXBJbWFnZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPENhY2hlZEltYWdlPiBjYWNoZWRJbWFnZSA9
IHN0ZDo6bWFrZV91bmlxdWU8Q2FjaGVkSW1hZ2U+KHVybCwgYml0bWFwSW1hZ2UuZ2V0KCksIENh
Y2hlZEltYWdlOjpNYW51YWxseUNhY2hlZCwgc2Vzc2lvbklEKTsKLQotICAgIGNhY2hlZEltYWdl
LT5hZGRDbGllbnQoJmR1bW15Q2FjaGVkSW1hZ2VDbGllbnQoKSk7Ci0gICAgY2FjaGVkSW1hZ2Ut
PnNldERlY29kZWRTaXplKGJpdG1hcEltYWdlLT5kZWNvZGVkU2l6ZSgpKTsKLSNpZiBFTkFCTEUo
Q0FDSEVfUEFSVElUSU9OSU5HKQotICAgIGNhY2hlZEltYWdlLT5yZXNvdXJjZVJlcXVlc3QoKS5z
ZXREb21haW5Gb3JDYWNoZVBhcnRpdGlvbihkb21haW5Gb3JDYWNoZVBhcnRpdGlvbik7Ci0jZW5k
aWYKLSAgICByZXR1cm4gYWRkKCpjYWNoZWRJbWFnZS5yZWxlYXNlKCkpOwotfQotCi12b2lkIE1l
bW9yeUNhY2hlOjpyZW1vdmVJbWFnZUZyb21DYWNoZShjb25zdCBVUkwmIHVybCwgY29uc3QgU3Ry
aW5nJiBkb21haW5Gb3JDYWNoZVBhcnRpdGlvbikKLXsKLSAgICBhdXRvKiByZXNvdXJjZXMgPSBz
ZXNzaW9uUmVzb3VyY2VNYXAoU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotICAgIGlm
ICghcmVzb3VyY2VzKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElU
SU9OSU5HKQotICAgIGF1dG8ga2V5ID0gc3RkOjptYWtlX3BhaXIodXJsLCBSZXNvdXJjZVJlcXVl
c3Q6OnBhcnRpdGlvbk5hbWUoZG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24pKTsKLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKGRvbWFpbkZvckNhY2hlUGFydGl0aW9uKTsKLSAgICBhdXRvJiBrZXkgPSB1
cmw7Ci0jZW5kaWYKLSAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSByZXNvdXJjZXMtPmdl
dChrZXkpOwotICAgIGlmICghcmVzb3VyY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEEg
cmVzb3VyY2UgZXhpc3RzIGFuZCBpcyBub3QgYSBtYW51YWxseSBjYWNoZWQgaW1hZ2UsIHNvIGp1
c3QgcmVtb3ZlIGl0LgotICAgIGlmICghaXM8Q2FjaGVkSW1hZ2U+KCpyZXNvdXJjZSkgfHwgIWRv
d25jYXN0PENhY2hlZEltYWdlPigqcmVzb3VyY2UpLmlzTWFudWFsbHlDYWNoZWQoKSkgewotICAg
ICAgICByZW1vdmUoKnJlc291cmNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8v
IFJlbW92aW5nIHRoZSBsYXN0IGNsaWVudCBvZiBhIENhY2hlZEltYWdlIHR1cm5zIHRoZSByZXNv
dXJjZQotICAgIC8vIGludG8gYSBkZWFkIHJlc291cmNlIHdoaWNoIHdpbGwgZXZlbnR1YWxseSBi
ZSBldmljdGVkIHdoZW4KLSAgICAvLyBkZWFkIHJlc291cmNlcyBhcmUgcHJ1bmVkLiBUaGF0IG1p
Z2h0IGJlIGltbWVkaWF0ZWx5IHNpbmNlCi0gICAgLy8gcmVtb3ZpbmcgdGhlIGxhc3QgY2xpZW50
IHRyaWdnZXJzIGEgTWVtb3J5Q2FjaGU6OnBydW5lLCBzbyB0aGUKLSAgICAvLyByZXNvdXJjZSBt
YXkgYmUgZGVsZXRlZCBhZnRlciB0aGlzIGNhbGwuCi0gICAgZG93bmNhc3Q8Q2FjaGVkSW1hZ2U+
KCpyZXNvdXJjZSkucmVtb3ZlQ2xpZW50KCZkdW1teUNhY2hlZEltYWdlQ2xpZW50KCkpOwotfQot
Ci12b2lkIE1lbW9yeUNhY2hlOjpwcnVuZUxpdmVSZXNvdXJjZXMoYm9vbCBzaG91bGREZXN0cm95
RGVjb2RlZERhdGFGb3JBbGxMaXZlUmVzb3VyY2VzKQotewotICAgIHVuc2lnbmVkIGNhcGFjaXR5
ID0gc2hvdWxkRGVzdHJveURlY29kZWREYXRhRm9yQWxsTGl2ZVJlc291cmNlcyA/IDAgOiBsaXZl
Q2FwYWNpdHkoKTsKLSAgICBpZiAoY2FwYWNpdHkgJiYgbV9saXZlU2l6ZSA8PSBjYXBhY2l0eSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgdGFyZ2V0U2l6ZSA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihjYXBhY2l0eSAqIGNUYXJnZXRQcnVuZVBlcmNlbnRhZ2UpOyAvLyBDdXQgYnkg
YSBwZXJjZW50YWdlIHRvIGF2b2lkIGltbWVkaWF0ZWx5IHBydW5pbmcgYWdhaW4uCi0KLSAgICBw
cnVuZUxpdmVSZXNvdXJjZXNUb1NpemUodGFyZ2V0U2l6ZSwgc2hvdWxkRGVzdHJveURlY29kZWRE
YXRhRm9yQWxsTGl2ZVJlc291cmNlcyk7Ci19Ci0KLXZvaWQgTWVtb3J5Q2FjaGU6OmZvckVhY2hS
ZXNvdXJjZShjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoQ2FjaGVkUmVzb3VyY2UmKT4mIGZ1bmN0
aW9uKQotewotICAgIGZvciAoYXV0byYgdW5wcm90ZWN0ZWRMUlVMaXN0IDogbV9hbGxSZXNvdXJj
ZXMpIHsKLSAgICAgICAgVmVjdG9yPENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNl
Pj4gbHJ1TGlzdDsKLSAgICAgICAgY29weVRvVmVjdG9yKCp1bnByb3RlY3RlZExSVUxpc3QsIGxy
dUxpc3QpOwotICAgICAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogbHJ1TGlzdCkKLSAgICAgICAg
ICAgIGZ1bmN0aW9uKCpyZXNvdXJjZSk7Ci0gICAgfQotfQotCi12b2lkIE1lbW9yeUNhY2hlOjpm
b3JFYWNoU2Vzc2lvblJlc291cmNlKFNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoQ2FjaGVkUmVzb3VyY2UmKT4mIGZ1bmN0aW9uKQotewotICAgIGF1dG8gaXQg
PSBtX3Nlc3Npb25SZXNvdXJjZXMuZmluZChzZXNzaW9uSUQpOwotICAgIGlmIChpdCA9PSBtX3Nl
c3Npb25SZXNvdXJjZXMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxDYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4+IHJlc291cmNlc0ZvclNlc3Npb247Ci0g
ICAgY29weVZhbHVlc1RvVmVjdG9yKCppdC0+dmFsdWUsIHJlc291cmNlc0ZvclNlc3Npb24pOwot
Ci0gICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IHJlc291cmNlc0ZvclNlc3Npb24pCi0gICAgICAg
IGZ1bmN0aW9uKCpyZXNvdXJjZSk7Ci19Ci0KLXZvaWQgTWVtb3J5Q2FjaGU6OmRlc3Ryb3lEZWNv
ZGVkRGF0YUZvckFsbEltYWdlcygpCi17Ci0gICAgTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpLmZv
ckVhY2hSZXNvdXJjZShbXShDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpIHsKLSAgICAgICAgaWYg
KHJlc291cmNlLmlzSW1hZ2UoKSkKLSAgICAgICAgICAgIHJlc291cmNlLmRlc3Ryb3lEZWNvZGVk
RGF0YSgpOwotICAgIH0pOwotfQotCi12b2lkIE1lbW9yeUNhY2hlOjpwcnVuZUxpdmVSZXNvdXJj
ZXNUb1NpemUodW5zaWduZWQgdGFyZ2V0U2l6ZSwgYm9vbCBzaG91bGREZXN0cm95RGVjb2RlZERh
dGFGb3JBbGxMaXZlUmVzb3VyY2VzKQotewotICAgIGlmIChtX2luUHJ1bmVSZXNvdXJjZXMpCi0g
ICAgICAgIHJldHVybjsKLSAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gcmVlbnRyYW5jeVByb3Rl
Y3RvcihtX2luUHJ1bmVSZXNvdXJjZXMsIHRydWUpOwotCi0gICAgZG91YmxlIGN1cnJlbnRUaW1l
ID0gRnJhbWVWaWV3OjpjdXJyZW50UGFpbnRUaW1lU3RhbXAoKTsKLSAgICBpZiAoIWN1cnJlbnRU
aW1lKSAvLyBJbiBjYXNlIHBydW5lIGlzIGNhbGxlZCBkaXJlY3RseSwgb3V0c2lkZSBvZiBhIEZy
YW1lIHBhaW50LgotICAgICAgICBjdXJyZW50VGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5n
VGltZSgpOwotICAgIAotICAgIC8vIERlc3Ryb3kgYW55IGRlY29kZWQgZGF0YSBpbiBsaXZlIG9i
amVjdHMgdGhhdCB3ZSBjYW4uCi0gICAgLy8gU3RhcnQgZnJvbSB0aGUgaGVhZCwgc2luY2UgdGhp
cyBpcyB0aGUgbGVhc3QgcmVjZW50bHkgYWNjZXNzZWQgb2YgdGhlIG9iamVjdHMuCi0KLSAgICAv
LyBUaGUgbGlzdCBtaWdodCBub3QgYmUgc29ydGVkIGJ5IHRoZSBtX2xhc3REZWNvZGVkQWNjZXNz
VGltZS4gVGhlIGltcGFjdAotICAgIC8vIG9mIHRoaXMgd2Vha2VyIGludmFyaWFudCBpcyBtaW5v
ciBhcyB0aGUgYmVsb3cgaWYgc3RhdGVtZW50IHRvIGNoZWNrIHRoZQotICAgIC8vIGVsYXBzZWRU
aW1lIHdpbGwgZXZhbHVhdGUgdG8gZmFsc2UgYXMgdGhlIGN1cnJlbnRUaW1lIHdpbGwgYmUgYSBs
b3QKLSAgICAvLyBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQtPm1fbGFzdERlY29kZWRBY2Nlc3NU
aW1lLgotICAgIC8vIEZvciBtb3JlIGRldGFpbHMgc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzAyMDkKLSAgICBhdXRvIGl0ID0gbV9saXZlRGVjb2RlZFJlc291
cmNlcy5iZWdpbigpOwotICAgIHdoaWxlIChpdCAhPSBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzLmVu
ZCgpKSB7Ci0gICAgICAgIGF1dG8qIGN1cnJlbnQgPSAqaXQ7Ci0KLSAgICAgICAgLy8gSW5jcmVt
ZW50IHRoZSBpdGVyYXRvciBub3cgYmVjYXVzZSB0aGUgY2FsbCB0byBkZXN0cm95RGVjb2RlZERh
dGEoKSBiZWxvdwotICAgICAgICAvLyBtYXkgY2F1c2UgYSBjYWxsIHRvIExpc3RIYXNoU2V0Ojpy
ZW1vdmUoKSBhbmQgaW52YWxpZGF0ZSB0aGUgY3VycmVudAotICAgICAgICAvLyBpdGVyYXRvci4g
Tm90ZSB0aGF0IHRoaXMgaXMgc2FmZSBiZWNhdXNlIHVubGlrZSBpdGVyYXRpb24gb2YgbW9zdAot
ICAgICAgICAvLyBXVEYgSGFzaCBkYXRhIHN0cnVjdHVyZXMsIGl0ZXJhdGlvbiBpcyBndWFyYW50
ZWVkIHNhZmUgYWdhaW5zdCBtdXRhdGlvbgotICAgICAgICAvLyBvZiB0aGUgTGlzdEhhc2hTZXQs
IGV4Y2VwdCBmb3IgcmVtb3ZhbCBvZiB0aGUgaXRlbSBjdXJyZW50bHkgcG9pbnRlZCB0bwotICAg
ICAgICAvLyBieSBhIGdpdmVuIGl0ZXJhdG9yLgotICAgICAgICArK2l0OwotCi0gICAgICAgIEFT
U0VSVChjdXJyZW50LT5oYXNDbGllbnRzKCkpOwotICAgICAgICBpZiAoY3VycmVudC0+aXNMb2Fk
ZWQoKSAmJiBjdXJyZW50LT5kZWNvZGVkU2l6ZSgpKSB7Ci0gICAgICAgICAgICAvLyBDaGVjayB0
byBzZWUgaWYgdGhlIHJlbWFpbmluZyByZXNvdXJjZXMgYXJlIHRvbyBuZXcgdG8gcHJ1bmUuCi0g
ICAgICAgICAgICBkb3VibGUgZWxhcHNlZFRpbWUgPSBjdXJyZW50VGltZSAtIGN1cnJlbnQtPm1f
bGFzdERlY29kZWRBY2Nlc3NUaW1lOwotICAgICAgICAgICAgaWYgKCFzaG91bGREZXN0cm95RGVj
b2RlZERhdGFGb3JBbGxMaXZlUmVzb3VyY2VzICYmIGVsYXBzZWRUaW1lIDwgY01pbkRlbGF5QmVm
b3JlTGl2ZURlY29kZWRQcnVuZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
ICAgIC8vIERlc3Ryb3kgb3VyIGRlY29kZWQgZGF0YS4gVGhpcyB3aWxsIHJlbW92ZSB1cyBmcm9t
IG1fbGl2ZURlY29kZWRSZXNvdXJjZXMsIGFuZCBwb3NzaWJseSBtb3ZlIHVzCi0gICAgICAgICAg
ICAvLyB0byBhIGRpZmZlcmVudCBMUlUgbGlzdCBpbiBtX2FsbFJlc291cmNlcy4KLSAgICAgICAg
ICAgIGN1cnJlbnQtPmRlc3Ryb3lEZWNvZGVkRGF0YSgpOwotCi0gICAgICAgICAgICBpZiAodGFy
Z2V0U2l6ZSAmJiBtX2xpdmVTaXplIDw9IHRhcmdldFNpemUpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIE1lbW9yeUNhY2hlOjpwcnVuZURlYWRS
ZXNvdXJjZXMoKQotewotICAgIHVuc2lnbmVkIGNhcGFjaXR5ID0gZGVhZENhcGFjaXR5KCk7Ci0g
ICAgaWYgKGNhcGFjaXR5ICYmIG1fZGVhZFNpemUgPD0gY2FwYWNpdHkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHVuc2lnbmVkIHRhcmdldFNpemUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2Fw
YWNpdHkgKiBjVGFyZ2V0UHJ1bmVQZXJjZW50YWdlKTsgLy8gQ3V0IGJ5IGEgcGVyY2VudGFnZSB0
byBhdm9pZCBpbW1lZGlhdGVseSBwcnVuaW5nIGFnYWluLgotICAgIHBydW5lRGVhZFJlc291cmNl
c1RvU2l6ZSh0YXJnZXRTaXplKTsKLX0KLQotdm9pZCBNZW1vcnlDYWNoZTo6cHJ1bmVEZWFkUmVz
b3VyY2VzVG9TaXplKHVuc2lnbmVkIHRhcmdldFNpemUpCi17Ci0gICAgaWYgKG1faW5QcnVuZVJl
c291cmNlcykKLSAgICAgICAgcmV0dXJuOwotICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiByZWVu
dHJhbmN5UHJvdGVjdG9yKG1faW5QcnVuZVJlc291cmNlcywgdHJ1ZSk7Ci0gCi0gICAgaWYgKHRh
cmdldFNpemUgJiYgbV9kZWFkU2l6ZSA8PSB0YXJnZXRTaXplKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBib29sIGNhblNocmlua0xSVUxpc3RzID0gdHJ1ZTsKLSAgICBmb3IgKGludCBpID0gbV9h
bGxSZXNvdXJjZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgLy8gTWFrZSBh
IGNvcHkgb2YgdGhlIExSVUxpc3QgZmlyc3QgKGFuZCByZWYgdGhlIHJlc291cmNlcykgYXMgY2Fs
bGluZwotICAgICAgICAvLyBkZXN0cm95RGVjb2RlZERhdGEoKSBjYW4gYWx0ZXIgdGhlIExSVUxp
c3QuCi0gICAgICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4+
IGxydUxpc3Q7Ci0gICAgICAgIGNvcHlUb1ZlY3RvcigqbV9hbGxSZXNvdXJjZXNbaV0sIGxydUxp
c3QpOwotCi0gICAgICAgIC8vIEZpcnN0IGZsdXNoIGFsbCB0aGUgZGVjb2RlZCBkYXRhIGluIHRo
aXMgcXVldWUuCi0gICAgICAgIC8vIFJlbW92ZSBmcm9tIHRoZSBoZWFkLCBzaW5jZSB0aGlzIGlz
IHRoZSBsZWFzdCBmcmVxdWVudGx5IGFjY2Vzc2VkIG9mIHRoZSBvYmplY3RzLgotICAgICAgICBm
b3IgKGF1dG8mIHJlc291cmNlIDogbHJ1TGlzdCkgewotICAgICAgICAgICAgaWYgKCFyZXNvdXJj
ZS0+aW5DYWNoZSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBp
ZiAoIXJlc291cmNlLT5oYXNDbGllbnRzKCkgJiYgIXJlc291cmNlLT5pc1ByZWxvYWRlZCgpICYm
IHJlc291cmNlLT5pc0xvYWRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRGVzdHJveSBvdXIg
ZGVjb2RlZCBkYXRhLiBUaGlzIHdpbGwgcmVtb3ZlIHVzIGZyb20gCi0gICAgICAgICAgICAgICAg
Ly8gbV9saXZlRGVjb2RlZFJlc291cmNlcywgYW5kIHBvc3NpYmx5IG1vdmUgdXMgdG8gYSBkaWZm
ZXJlbnQgCi0gICAgICAgICAgICAgICAgLy8gTFJVIGxpc3QgaW4gbV9hbGxSZXNvdXJjZXMuCi0g
ICAgICAgICAgICAgICAgcmVzb3VyY2UtPmRlc3Ryb3lEZWNvZGVkRGF0YSgpOwotCi0gICAgICAg
ICAgICAgICAgaWYgKHRhcmdldFNpemUgJiYgbV9kZWFkU2l6ZSA8PSB0YXJnZXRTaXplKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBOb3cgZXZpY3Qgb2JqZWN0cyBmcm9tIHRoaXMgbGlzdC4KLSAgICAgICAgLy8gUmVt
b3ZlIGZyb20gdGhlIGhlYWQsIHNpbmNlIHRoaXMgaXMgdGhlIGxlYXN0IGZyZXF1ZW50bHkgYWNj
ZXNzZWQgb2YgdGhlIG9iamVjdHMuCi0gICAgICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiBscnVM
aXN0KSB7Ci0gICAgICAgICAgICBpZiAoIXJlc291cmNlLT5pbkNhY2hlKCkpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmICghcmVzb3VyY2UtPmhhc0NsaWVudHMo
KSAmJiAhcmVzb3VyY2UtPmlzUHJlbG9hZGVkKCkgJiYgIXJlc291cmNlLT5pc0NhY2hlVmFsaWRh
dG9yKCkpIHsKLSAgICAgICAgICAgICAgICByZW1vdmUoKnJlc291cmNlKTsKLSAgICAgICAgICAg
ICAgICBpZiAodGFyZ2V0U2l6ZSAmJiBtX2RlYWRTaXplIDw9IHRhcmdldFNpemUpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgIC8vIFNocmluayB0aGUgdmVjdG9yIGJhY2sgZG93biBzbyB3ZSBkb24ndCB3
YXN0ZSB0aW1lIGluc3BlY3RpbmcKLSAgICAgICAgLy8gZW1wdHkgTFJVIGxpc3RzIG9uIGZ1dHVy
ZSBwcnVuZXMuCi0gICAgICAgIGlmICghbV9hbGxSZXNvdXJjZXNbaV0tPmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIGNhblNocmlua0xSVUxpc3RzID0gZmFsc2U7Ci0gICAgICAgIGVsc2UgaWYgKGNh
blNocmlua0xSVUxpc3RzKQotICAgICAgICAgICAgbV9hbGxSZXNvdXJjZXMuc2hyaW5rKGkpOwot
ICAgIH0KLX0KLQotdm9pZCBNZW1vcnlDYWNoZTo6c2V0Q2FwYWNpdGllcyh1bnNpZ25lZCBtaW5E
ZWFkQnl0ZXMsIHVuc2lnbmVkIG1heERlYWRCeXRlcywgdW5zaWduZWQgdG90YWxCeXRlcykKLXsK
LSAgICBBU1NFUlQobWluRGVhZEJ5dGVzIDw9IG1heERlYWRCeXRlcyk7Ci0gICAgQVNTRVJUKG1h
eERlYWRCeXRlcyA8PSB0b3RhbEJ5dGVzKTsKLSAgICBtX21pbkRlYWRDYXBhY2l0eSA9IG1pbkRl
YWRCeXRlczsKLSAgICBtX21heERlYWRDYXBhY2l0eSA9IG1heERlYWRCeXRlczsKLSAgICBtX2Nh
cGFjaXR5ID0gdG90YWxCeXRlczsKLSAgICBwcnVuZSgpOwotfQotCi12b2lkIE1lbW9yeUNhY2hl
OjpyZW1vdmUoQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQotewotICAgIEFTU0VSVChXVEY6Omlz
TWFpblRocmVhZCgpKTsKLSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiRXZpY3RpbmcgcmVzb3Vy
Y2UgJXAgZm9yICclcycgZnJvbSBjYWNoZSIsICZyZXNvdXJjZSwgcmVzb3VyY2UudXJsKCkuc3Ry
aW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKLSAgICAvLyBUaGUgcmVzb3VyY2UgbWF5IGhhdmUgYWxy
ZWFkeSBiZWVuIHJlbW92ZWQgYnkgc29tZW9uZSBvdGhlciB0aGFuIG91ciBjYWxsZXIsCi0gICAg
Ly8gd2hvIG5lZWRlZCBhIGZyZXNoIGNvcHkgZm9yIGEgcmVsb2FkLiBTZWUgPGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDc5I2M2Pi4KLSAgICBpZiAoYXV0byogcmVz
b3VyY2VzID0gc2Vzc2lvblJlc291cmNlTWFwKHJlc291cmNlLnNlc3Npb25JRCgpKSkgewotI2lm
IEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCi0gICAgICAgIGF1dG8ga2V5ID0gc3RkOjptYWtl
X3BhaXIocmVzb3VyY2UudXJsKCksIHJlc291cmNlLmNhY2hlUGFydGl0aW9uKCkpOwotI2Vsc2UK
LSAgICAgICAgYXV0byYga2V5ID0gcmVzb3VyY2UudXJsKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYg
KHJlc291cmNlLmluQ2FjaGUoKSkgewotICAgICAgICAgICAgLy8gUmVtb3ZlIHJlc291cmNlIGZy
b20gdGhlIHJlc291cmNlIG1hcC4KLSAgICAgICAgICAgIHJlc291cmNlcy0+cmVtb3ZlKGtleSk7
Ci0gICAgICAgICAgICByZXNvdXJjZS5zZXRJbkNhY2hlKGZhbHNlKTsKLQotICAgICAgICAgICAg
Ly8gSWYgdGhlIHJlc291cmNlIG1hcCBpcyBub3cgZW1wdHksIHJlbW92ZSBpdCBmcm9tIG1fc2Vz
c2lvblJlc291cmNlcy4KLSAgICAgICAgICAgIGlmIChyZXNvdXJjZXMtPmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgICAgICBtX3Nlc3Npb25SZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlLnNlc3Npb25J
RCgpKTsKLQotICAgICAgICAgICAgLy8gUmVtb3ZlIGZyb20gdGhlIGFwcHJvcHJpYXRlIExSVSBs
aXN0LgotICAgICAgICAgICAgcmVtb3ZlRnJvbUxSVUxpc3QocmVzb3VyY2UpOwotICAgICAgICAg
ICAgcmVtb3ZlRnJvbUxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdChyZXNvdXJjZSk7Ci0gICAgICAg
ICAgICBhZGp1c3RTaXplKHJlc291cmNlLmhhc0NsaWVudHMoKSwgLXN0YXRpY19jYXN0PGludD4o
cmVzb3VyY2Uuc2l6ZSgpKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgQVNTRVJUKHJl
c291cmNlcy0+Z2V0KGtleSkgIT0gJnJlc291cmNlKTsKLSAgICB9Ci0KLSAgICByZXNvdXJjZS5k
ZWxldGVJZlBvc3NpYmxlKCk7Ci19Ci0KLWF1dG8gTWVtb3J5Q2FjaGU6OmxydUxpc3RGb3IoQ2Fj
aGVkUmVzb3VyY2UmIHJlc291cmNlKSAtPiBMUlVMaXN0JgotewotICAgIHVuc2lnbmVkIGFjY2Vz
c0NvdW50ID0gc3RkOjptYXgocmVzb3VyY2UuYWNjZXNzQ291bnQoKSwgMVUpOwotICAgIHVuc2ln
bmVkIHF1ZXVlSW5kZXggPSBXVEY6OmZhc3RMb2cyKHJlc291cmNlLnNpemUoKSAvIGFjY2Vzc0Nv
dW50KTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgcmVzb3VyY2UubV9scnVJbmRleCA9IHF1ZXVlSW5k
ZXg7Ci0jZW5kaWYKLQotICAgIG1fYWxsUmVzb3VyY2VzLnJlc2VydmVDYXBhY2l0eShxdWV1ZUlu
ZGV4ICsgMSk7Ci0gICAgd2hpbGUgKG1fYWxsUmVzb3VyY2VzLnNpemUoKSA8PSBxdWV1ZUluZGV4
KQotICAgICAgICBtX2FsbFJlc291cmNlcy51bmNoZWNrZWRBcHBlbmQoc3RkOjptYWtlX3VuaXF1
ZTxMUlVMaXN0PigpKTsKLSAgICByZXR1cm4gKm1fYWxsUmVzb3VyY2VzW3F1ZXVlSW5kZXhdOwot
fQotCi12b2lkIE1lbW9yeUNhY2hlOjpyZW1vdmVGcm9tTFJVTGlzdChDYWNoZWRSZXNvdXJjZSYg
cmVzb3VyY2UpCi17Ci0gICAgLy8gSWYgd2UndmUgbmV2ZXIgYmVlbiBhY2Nlc3NlZCwgdGhlbiB3
ZSdyZSBicmFuZCBuZXcgYW5kIG5vdCBpbiBhbnkgbGlzdC4KLSAgICBpZiAoIXJlc291cmNlLmFj
Y2Vzc0NvdW50KCkpCi0gICAgICAgIHJldHVybjsKLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAg
ICB1bnNpZ25lZCBvbGRMaXN0SW5kZXggPSByZXNvdXJjZS5tX2xydUluZGV4OwotI2VuZGlmCi0K
LSAgICBMUlVMaXN0JiBsaXN0ID0gbHJ1TGlzdEZvcihyZXNvdXJjZSk7Ci0KLSAgICAvLyBWZXJp
ZnkgdGhhdCB0aGUgbGlzdCB3ZSBnb3QgaXMgdGhlIGxpc3Qgd2Ugd2FudC4KLSAgICBBU1NFUlQo
cmVzb3VyY2UubV9scnVJbmRleCA9PSBvbGRMaXN0SW5kZXgpOwotCi0gICAgYm9vbCByZW1vdmVk
ID0gbGlzdC5yZW1vdmUoJnJlc291cmNlKTsKLSAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJl
bW92ZWQpOwotfQotCi12b2lkIE1lbW9yeUNhY2hlOjppbnNlcnRJbkxSVUxpc3QoQ2FjaGVkUmVz
b3VyY2UmIHJlc291cmNlKQotewotICAgIEFTU0VSVChyZXNvdXJjZS5pbkNhY2hlKCkpOwotICAg
IEFTU0VSVChyZXNvdXJjZS5hY2Nlc3NDb3VudCgpID4gMCk7Ci0gICAgCi0gICAgYXV0byBhZGRS
ZXN1bHQgPSBscnVMaXN0Rm9yKHJlc291cmNlKS5hZGQoJnJlc291cmNlKTsKLSAgICBBU1NFUlRf
VU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwotfQotCi12b2lkIE1lbW9y
eUNhY2hlOjpyZXNvdXJjZUFjY2Vzc2VkKENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkKLXsKLSAg
ICBBU1NFUlQocmVzb3VyY2UuaW5DYWNoZSgpKTsKLSAgICAKLSAgICAvLyBOZWVkIHRvIG1ha2Ug
c3VyZSB0byByZW1vdmUgYmVmb3JlIHdlIGluY3JlYXNlIHRoZSBhY2Nlc3MgY291bnQsIHNpbmNl
Ci0gICAgLy8gdGhlIHF1ZXVlIHdpbGwgcG9zc2libHkgY2hhbmdlLgotICAgIHJlbW92ZUZyb21M
UlVMaXN0KHJlc291cmNlKTsKLSAgICAKLSAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1l
IHRoZSByZXNvdXJjZSBoYXMgYmVlbiBhY2Nlc3NlZCwgYWRqdXN0IHRoZSBzaXplIG9mIHRoZSBj
YWNoZSB0byBhY2NvdW50IGZvciBpdHMgaW5pdGlhbCBzaXplLgotICAgIGlmICghcmVzb3VyY2Uu
YWNjZXNzQ291bnQoKSkKLSAgICAgICAgYWRqdXN0U2l6ZShyZXNvdXJjZS5oYXNDbGllbnRzKCks
IHJlc291cmNlLnNpemUoKSk7Ci0gICAgCi0gICAgLy8gQWRkIHRvIG91ciBhY2Nlc3MgY291bnQu
Ci0gICAgcmVzb3VyY2UuaW5jcmVhc2VBY2Nlc3NDb3VudCgpOwotICAgIAotICAgIC8vIE5vdyBp
bnNlcnQgaW50byB0aGUgbmV3IHF1ZXVlLgotICAgIGluc2VydEluTFJVTGlzdChyZXNvdXJjZSk7
Ci19Ci0KLXZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZVJlc291cmNlc1dpdGhPcmlnaW4oU2VjdXJp
dHlPcmlnaW4mIG9yaWdpbikKLXsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQotICAg
IFN0cmluZyBvcmlnaW5QYXJ0aXRpb24gPSBSZXNvdXJjZVJlcXVlc3Q6OnBhcnRpdGlvbk5hbWUo
b3JpZ2luLmhvc3QoKSk7Ci0jZW5kaWYKLQotICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZSo+IHJl
c291cmNlc1dpdGhPcmlnaW47Ci0gICAgZm9yIChhdXRvJiByZXNvdXJjZXMgOiBtX3Nlc3Npb25S
ZXNvdXJjZXMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6ICpyZXNv
dXJjZXMpIHsKLSAgICAgICAgICAgIGF1dG8mIHJlc291cmNlID0gKmtleVZhbHVlLnZhbHVlOwot
I2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCi0gICAgICAgICAgICBhdXRvJiBwYXJ0aXRp
b25OYW1lID0ga2V5VmFsdWUua2V5LnNlY29uZDsKLSAgICAgICAgICAgIGlmIChwYXJ0aXRpb25O
YW1lID09IG9yaWdpblBhcnRpdGlvbikgewotICAgICAgICAgICAgICAgIHJlc291cmNlc1dpdGhP
cmlnaW4uYXBwZW5kKCZyZXNvdXJjZSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gcmVz
b3VyY2VPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHJlc291cmNlLnVybCgpKTsKLSAg
ICAgICAgICAgIGlmIChyZXNvdXJjZU9yaWdpbi0+ZXF1YWwoJm9yaWdpbikpCi0gICAgICAgICAg
ICAgICAgcmVzb3VyY2VzV2l0aE9yaWdpbi5hcHBlbmQoJnJlc291cmNlKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGZvciAoYXV0byogcmVzb3VyY2UgOiByZXNvdXJjZXNXaXRoT3JpZ2luKQot
ICAgICAgICByZW1vdmUoKnJlc291cmNlKTsKLX0KLQotdm9pZCBNZW1vcnlDYWNoZTo6cmVtb3Zl
UmVzb3VyY2VzV2l0aE9yaWdpbnMoU2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgSGFzaFNldDxS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+PiYgb3JpZ2lucykKLXsKLSAgICBhdXRvKiByZXNvdXJjZU1h
cCA9IHNlc3Npb25SZXNvdXJjZU1hcChzZXNzaW9uSUQpOwotICAgIGlmICghcmVzb3VyY2VNYXAp
Ci0gICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCi0gICAg
SGFzaFNldDxTdHJpbmc+IG9yaWdpblBhcnRpdGlvbnM7Ci0KLSAgICBmb3IgKGF1dG8mIG9yaWdp
biA6IG9yaWdpbnMpCi0gICAgICAgIG9yaWdpblBhcnRpdGlvbnMuYWRkKFJlc291cmNlUmVxdWVz
dDo6cGFydGl0aW9uTmFtZShvcmlnaW4tPmhvc3QoKSkpOwotI2VuZGlmCi0KLSAgICBWZWN0b3I8
Q2FjaGVkUmVzb3VyY2UqPiByZXNvdXJjZXNUb1JlbW92ZTsKLSAgICBmb3IgKGF1dG8mIGtleVZh
bHVlUGFpciA6ICpyZXNvdXJjZU1hcCkgewotICAgICAgICBhdXRvJiByZXNvdXJjZSA9ICprZXlW
YWx1ZVBhaXIudmFsdWU7Ci0KLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQotICAgICAg
ICBhdXRvJiBwYXJ0aXRpb25OYW1lID0ga2V5VmFsdWVQYWlyLmtleS5zZWNvbmQ7Ci0gICAgICAg
IGlmIChvcmlnaW5QYXJ0aXRpb25zLmNvbnRhaW5zKHBhcnRpdGlvbk5hbWUpKSB7Ci0gICAgICAg
ICAgICByZXNvdXJjZXNUb1JlbW92ZS5hcHBlbmQoJnJlc291cmNlKTsKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBpZiAob3JpZ2lucy5jb250YWlu
cyhTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHJlc291cmNlLnVybCgpKS5wdHIoKSkpCi0gICAgICAg
ICAgICByZXNvdXJjZXNUb1JlbW92ZS5hcHBlbmQoJnJlc291cmNlKTsKLSAgICB9Ci0KLSAgICBm
b3IgKGF1dG8mIHJlc291cmNlIDogcmVzb3VyY2VzVG9SZW1vdmUpCi0gICAgICAgIHJlbW92ZSgq
cmVzb3VyY2UpOwotfQotCi12b2lkIE1lbW9yeUNhY2hlOjpnZXRPcmlnaW5zV2l0aENhY2hlKFNl
Y3VyaXR5T3JpZ2luU2V0JiBvcmlnaW5zKQotewotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05J
TkcpCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gaHR0cFN0cmluZygiaHR0cCIp
OwotI2VuZGlmCi0gICAgZm9yIChhdXRvJiByZXNvdXJjZXMgOiBtX3Nlc3Npb25SZXNvdXJjZXMu
dmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6ICpyZXNvdXJjZXMpIHsK
LSAgICAgICAgICAgIGF1dG8mIHJlc291cmNlID0gKmtleVZhbHVlLnZhbHVlOwotI2lmIEVOQUJM
RShDQUNIRV9QQVJUSVRJT05JTkcpCi0gICAgICAgICAgICBhdXRvJiBwYXJ0aXRpb25OYW1lID0g
a2V5VmFsdWUua2V5LnNlY29uZDsKLSAgICAgICAgICAgIGlmICghcGFydGl0aW9uTmFtZS5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICAgICAgb3JpZ2lucy5hZGQoU2VjdXJpdHlPcmlnaW46OmNyZWF0
ZShodHRwU3RyaW5nLCBwYXJ0aXRpb25OYW1lLCAwKSk7Ci0gICAgICAgICAgICBlbHNlCi0jZW5k
aWYKLSAgICAgICAgICAgIG9yaWdpbnMuYWRkKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUocmVzb3Vy
Y2UudXJsKCkpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotSGFzaFNldDxSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+PiBNZW1vcnlDYWNoZTo6b3JpZ2luc1dpdGhDYWNoZShTZXNzaW9uSUQgc2Vzc2lv
bklEKSBjb25zdAotewotICAgIEhhc2hTZXQ8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4gb3JpZ2lu
czsKLQotICAgIGF1dG8gaXQgPSBtX3Nlc3Npb25SZXNvdXJjZXMuZmluZChzZXNzaW9uSUQpOwot
ICAgIGlmIChpdCAhPSBtX3Nlc3Npb25SZXNvdXJjZXMuZW5kKCkpIHsKLSAgICAgICAgZm9yIChh
dXRvJiBrZXlWYWx1ZSA6ICppdC0+dmFsdWUpIHsKLSAgICAgICAgICAgIGF1dG8mIHJlc291cmNl
ID0gKmtleVZhbHVlLnZhbHVlOwotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCi0gICAg
ICAgICAgICBhdXRvJiBwYXJ0aXRpb25OYW1lID0ga2V5VmFsdWUua2V5LnNlY29uZDsKLSAgICAg
ICAgICAgIGlmICghcGFydGl0aW9uTmFtZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgb3Jp
Z2lucy5hZGQoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZSgiaHR0cCIsIHBhcnRpdGlvbk5hbWUsIDAp
KTsKLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgb3JpZ2lucy5hZGQoU2Vj
dXJpdHlPcmlnaW46OmNyZWF0ZShyZXNvdXJjZS51cmwoKSkpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG9yaWdpbnM7Ci19Ci0KLXZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZUZyb21M
aXZlRGVjb2RlZFJlc291cmNlc0xpc3QoQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQotewotICAg
IG1fbGl2ZURlY29kZWRSZXNvdXJjZXMucmVtb3ZlKCZyZXNvdXJjZSk7Ci19Ci0KLXZvaWQgTWVt
b3J5Q2FjaGU6Omluc2VydEluTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KENhY2hlZFJlc291cmNl
JiByZXNvdXJjZSkKLXsKLSAgICAvLyBNYWtlIHN1cmUgd2UgYXJlbid0IGluIHRoZSBsaXN0IGFs
cmVhZHkuCi0gICAgQVNTRVJUKCFtX2xpdmVEZWNvZGVkUmVzb3VyY2VzLmNvbnRhaW5zKCZyZXNv
dXJjZSkpOwotICAgIG1fbGl2ZURlY29kZWRSZXNvdXJjZXMuYWRkKCZyZXNvdXJjZSk7Ci19Ci0K
LXZvaWQgTWVtb3J5Q2FjaGU6OmFkZFRvTGl2ZVJlc291cmNlc1NpemUoQ2FjaGVkUmVzb3VyY2Um
IHJlc291cmNlKQotewotICAgIG1fbGl2ZVNpemUgKz0gcmVzb3VyY2Uuc2l6ZSgpOwotICAgIG1f
ZGVhZFNpemUgLT0gcmVzb3VyY2Uuc2l6ZSgpOwotfQotCi12b2lkIE1lbW9yeUNhY2hlOjpyZW1v
dmVGcm9tTGl2ZVJlc291cmNlc1NpemUoQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQotewotICAg
IG1fbGl2ZVNpemUgLT0gcmVzb3VyY2Uuc2l6ZSgpOwotICAgIG1fZGVhZFNpemUgKz0gcmVzb3Vy
Y2Uuc2l6ZSgpOwotfQotCi12b2lkIE1lbW9yeUNhY2hlOjphZGp1c3RTaXplKGJvb2wgbGl2ZSwg
aW50IGRlbHRhKQotewotICAgIGlmIChsaXZlKSB7Ci0gICAgICAgIEFTU0VSVChkZWx0YSA+PSAw
IHx8ICgoaW50KW1fbGl2ZVNpemUgKyBkZWx0YSA+PSAwKSk7Ci0gICAgICAgIG1fbGl2ZVNpemUg
Kz0gZGVsdGE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKGRlbHRhID49IDAgfHwgKChp
bnQpbV9kZWFkU2l6ZSArIGRlbHRhID49IDApKTsKLSAgICAgICAgbV9kZWFkU2l6ZSArPSBkZWx0
YTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZVJlcXVlc3RGcm9tU2Vzc2lv
bkNhY2hlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgaWYgKGlzPFdvcmtlckdsb2JhbFNjb3BlPihjb250ZXh0
KSkgewotICAgICAgICBkb3duY2FzdDxXb3JrZXJHbG9iYWxTY29wZT4oY29udGV4dCkudGhyZWFk
KCkud29ya2VyTG9hZGVyUHJveHkoKS5wb3N0VGFza1RvTG9hZGVyKFtyZXF1ZXN0ID0gcmVxdWVz
dC5pc29sYXRlZENvcHkoKV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAg
ICAgICAgICAgIE1lbW9yeUNhY2hlOjpyZW1vdmVSZXF1ZXN0RnJvbVNlc3Npb25DYWNoZXMoY29u
dGV4dCwgcmVxdWVzdCk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgYXV0byYgbWVtb3J5Q2FjaGUgPSBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCk7Ci0gICAgZm9y
IChhdXRvJiByZXNvdXJjZXMgOiBtZW1vcnlDYWNoZS5tX3Nlc3Npb25SZXNvdXJjZXMpIHsKLSAg
ICAgICAgaWYgKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IG1lbW9yeUNhY2hlLnJlc291cmNl
Rm9yUmVxdWVzdEltcGwocmVxdWVzdCwgKnJlc291cmNlcy52YWx1ZSkpCi0gICAgICAgICAgICBt
ZW1vcnlDYWNoZS5yZW1vdmUoKnJlc291cmNlKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVtb3J5Q2Fj
aGU6OlR5cGVTdGF0aXN0aWM6OmFkZFJlc291cmNlKENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkK
LXsKLSAgICBjb3VudCsrOwotICAgIHNpemUgKz0gcmVzb3VyY2Uuc2l6ZSgpOwotICAgIGxpdmVT
aXplICs9IHJlc291cmNlLmhhc0NsaWVudHMoKSA/IHJlc291cmNlLnNpemUoKSA6IDA7Ci0gICAg
ZGVjb2RlZFNpemUgKz0gcmVzb3VyY2UuZGVjb2RlZFNpemUoKTsKLX0KLQotTWVtb3J5Q2FjaGU6
OlN0YXRpc3RpY3MgTWVtb3J5Q2FjaGU6OmdldFN0YXRpc3RpY3MoKQotewotICAgIFN0YXRpc3Rp
Y3Mgc3RhdHM7Ci0KLSAgICBmb3IgKGF1dG8mIHJlc291cmNlcyA6IG1fc2Vzc2lvblJlc291cmNl
cy52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8qIHJlc291cmNlIDogcmVzb3VyY2VzLT52
YWx1ZXMoKSkgewotICAgICAgICAgICAgc3dpdGNoIChyZXNvdXJjZS0+dHlwZSgpKSB7Ci0gICAg
ICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgotICAgICAgICAgICAg
ICAgIHN0YXRzLmltYWdlcy5hZGRSZXNvdXJjZSgqcmVzb3VyY2UpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoK
LSAgICAgICAgICAgICAgICBzdGF0cy5jc3NTdHlsZVNoZWV0cy5hZGRSZXNvdXJjZSgqcmVzb3Vy
Y2UpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDYWNoZWRSZXNv
dXJjZTo6U2NyaXB0OgotICAgICAgICAgICAgICAgIHN0YXRzLnNjcmlwdHMuYWRkUmVzb3VyY2Uo
KnJlc291cmNlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoWFNMVCkKLSAg
ICAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6Ci0gICAgICAgICAg
ICAgICAgc3RhdHMueHNsU3R5bGVTaGVldHMuYWRkUmVzb3VyY2UoKnJlc291cmNlKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSNlbmRpZgotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgICAg
ICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdGb250UmVzb3VyY2U6Ci0jZW5kaWYKLSAgICAg
ICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZToKLSAgICAgICAgICAgICAg
ICBzdGF0cy5mb250cy5hZGRSZXNvdXJjZSgqcmVzb3VyY2UpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gc3RhdHM7Ci19Ci0KLXZvaWQg
TWVtb3J5Q2FjaGU6OnNldERpc2FibGVkKGJvb2wgZGlzYWJsZWQpCi17Ci0gICAgbV9kaXNhYmxl
ZCA9IGRpc2FibGVkOwotICAgIGlmICghbV9kaXNhYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgd2hpbGUgKCFtX3Nlc3Npb25SZXNvdXJjZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8m
IHJlc291cmNlcyA9ICptX3Nlc3Npb25SZXNvdXJjZXMuYmVnaW4oKS0+dmFsdWU7Ci0gICAgICAg
IEFTU0VSVCghcmVzb3VyY2VzLmlzRW1wdHkoKSk7Ci0gICAgICAgIHJlbW92ZSgqcmVzb3VyY2Vz
LmJlZ2luKCktPnZhbHVlKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVtb3J5Q2FjaGU6OmV2aWN0UmVz
b3VyY2VzKCkKLXsKLSAgICBpZiAoZGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
c2V0RGlzYWJsZWQodHJ1ZSk7Ci0gICAgc2V0RGlzYWJsZWQoZmFsc2UpOwotfQotCi12b2lkIE1l
bW9yeUNhY2hlOjpldmljdFJlc291cmNlcyhTZXNzaW9uSUQgc2Vzc2lvbklEKQotewotICAgIGlm
IChkaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3JFYWNoU2Vzc2lvblJlc291
cmNlKHNlc3Npb25JRCwgW3RoaXNdIChDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpIHsgcmVtb3Zl
KHJlc291cmNlKTsgfSk7Ci0KLSAgICBBU1NFUlQoIW1fc2Vzc2lvblJlc291cmNlcy5jb250YWlu
cyhzZXNzaW9uSUQpKTsKLX0KLQotYm9vbCBNZW1vcnlDYWNoZTo6bmVlZHNQcnVuaW5nKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9saXZlU2l6ZSArIG1fZGVhZFNpemUgPiBtX2NhcGFjaXR5IHx8
IG1fZGVhZFNpemUgPiBtX21heERlYWRDYXBhY2l0eTsKLX0KLQotdm9pZCBNZW1vcnlDYWNoZTo6
cHJ1bmUoKQotewotICAgIGlmICghbmVlZHNQcnVuaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgcHJ1bmVEZWFkUmVzb3VyY2VzKCk7IC8vIFBydW5lIGRlYWQgZmlyc3QsIGlu
IGNhc2UgaXQgd2FzICJib3Jyb3dpbmciIGNhcGFjaXR5IGZyb20gbGl2ZS4KLSAgICBwcnVuZUxp
dmVSZXNvdXJjZXMoKTsKLX0KLQotdm9pZCBNZW1vcnlDYWNoZTo6cHJ1bmVTb29uKCkKLXsKLSAg
ICAgaWYgKG1fcHJ1bmVUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgIGlm
ICghbmVlZHNQcnVuaW5nKCkpCi0gICAgICAgICByZXR1cm47Ci0gICAgIG1fcHJ1bmVUaW1lci5z
dGFydE9uZVNob3QoMCk7Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi12b2lkIE1lbW9yeUNhY2hlOjpk
dW1wU3RhdHMoKQotewotICAgIFN0YXRpc3RpY3MgcyA9IGdldFN0YXRpc3RpY3MoKTsKLSAgICBw
cmludGYoIiUtMTNzICUtMTNzICUtMTNzICUtMTNzICUtMTNzXG4iLCAiIiwgIkNvdW50IiwgIlNp
emUiLCAiTGl2ZVNpemUiLCAiRGVjb2RlZFNpemUiKTsKLSAgICBwcmludGYoIiUtMTNzICUtMTNz
ICUtMTNzICUtMTNzICUtMTNzXG4iLCAiLS0tLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLS0tIiwg
Ii0tLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLS0tIik7Ci0gICAg
cHJpbnRmKCIlLTEzcyAlMTNkICUxM2QgJTEzZCAlMTNkXG4iLCAiSW1hZ2VzIiwgcy5pbWFnZXMu
Y291bnQsIHMuaW1hZ2VzLnNpemUsIHMuaW1hZ2VzLmxpdmVTaXplLCBzLmltYWdlcy5kZWNvZGVk
U2l6ZSk7Ci0gICAgcHJpbnRmKCIlLTEzcyAlMTNkICUxM2QgJTEzZCAlMTNkXG4iLCAiQ1NTIiwg
cy5jc3NTdHlsZVNoZWV0cy5jb3VudCwgcy5jc3NTdHlsZVNoZWV0cy5zaXplLCBzLmNzc1N0eWxl
U2hlZXRzLmxpdmVTaXplLCBzLmNzc1N0eWxlU2hlZXRzLmRlY29kZWRTaXplKTsKLSNpZiBFTkFC
TEUoWFNMVCkKLSAgICBwcmludGYoIiUtMTNzICUxM2QgJTEzZCAlMTNkICUxM2RcbiIsICJYU0wi
LCBzLnhzbFN0eWxlU2hlZXRzLmNvdW50LCBzLnhzbFN0eWxlU2hlZXRzLnNpemUsIHMueHNsU3R5
bGVTaGVldHMubGl2ZVNpemUsIHMueHNsU3R5bGVTaGVldHMuZGVjb2RlZFNpemUpOwotI2VuZGlm
Ci0gICAgcHJpbnRmKCIlLTEzcyAlMTNkICUxM2QgJTEzZCAlMTNkXG4iLCAiSmF2YVNjcmlwdCIs
IHMuc2NyaXB0cy5jb3VudCwgcy5zY3JpcHRzLnNpemUsIHMuc2NyaXB0cy5saXZlU2l6ZSwgcy5z
Y3JpcHRzLmRlY29kZWRTaXplKTsKLSAgICBwcmludGYoIiUtMTNzICUxM2QgJTEzZCAlMTNkICUx
M2RcbiIsICJGb250cyIsIHMuZm9udHMuY291bnQsIHMuZm9udHMuc2l6ZSwgcy5mb250cy5saXZl
U2l6ZSwgcy5mb250cy5kZWNvZGVkU2l6ZSk7Ci0gICAgcHJpbnRmKCIlLTEzcyAlLTEzcyAlLTEz
cyAlLTEzcyAlLTEzc1xuXG4iLCAiLS0tLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLS0tIiwgIi0t
LS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLS0tIik7Ci19Ci0KLXZv
aWQgTWVtb3J5Q2FjaGU6OmR1bXBMUlVMaXN0cyhib29sIGluY2x1ZGVMaXZlKSBjb25zdAotewot
ICAgIHByaW50ZigiTFJVLVNQIGxpc3RzIGluIGV2aWN0aW9uIG9yZGVyIChLaWxvYnl0ZXMgZGVj
b2RlZCwgS2lsb2J5dGVzIGVuY29kZWQsIEFjY2VzcyBjb3VudCwgUmVmZXJlbmNlZCk6XG4iKTsK
LQotICAgIGludCBzaXplID0gbV9hbGxSZXNvdXJjZXMuc2l6ZSgpOwotICAgIGZvciAoaW50IGkg
PSBzaXplIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgcHJpbnRmKCJcblxuTGlzdCAlZDog
IiwgaSk7Ci0gICAgICAgIGZvciAoYXV0byogcmVzb3VyY2UgOiAqbV9hbGxSZXNvdXJjZXNbaV0p
IHsKLSAgICAgICAgICAgIGlmIChpbmNsdWRlTGl2ZSB8fCAhcmVzb3VyY2UtPmhhc0NsaWVudHMo
KSkKLSAgICAgICAgICAgICAgICBwcmludGYoIiglLjFmSywgJS4xZkssICV1QSwgJWRSKTsgIiwg
cmVzb3VyY2UtPmRlY29kZWRTaXplKCkgLyAxMDI0LjBmLCAocmVzb3VyY2UtPmVuY29kZWRTaXpl
KCkgKyByZXNvdXJjZS0+b3ZlcmhlYWRTaXplKCkpIC8gMTAyNC4wZiwgcmVzb3VyY2UtPmFjY2Vz
c0NvdW50KCksIHJlc291cmNlLT5oYXNDbGllbnRzKCkpOwotICAgICAgICB9Ci0gICAgfQotfQot
I2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL01lbW9yeUNhY2hlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiZTE3NDdj
MmEzYmFlYjVmOWEwYThiZjU3OTk0YTcxMjkwNDU3NGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9y
eUNhY2hlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotLyoKLSAgICBDb3B5cmln
aHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmln
aHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRl
ZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxlIHNoZWV0cyBhbmQgaHRtbAotICAgIHBhZ2VzIGZy
b20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgotKi8K
LQotI2lmbmRlZiBDYWNoZV9oCi0jZGVmaW5lIENhY2hlX2gKLQotI2luY2x1ZGUgIk5hdGl2ZUlt
YWdlUHRyLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5IYXNoLmgiCi0jaW5jbHVkZSAiU2Vz
c2lvbklELmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgot
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNs
dWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSAgewot
Ci1jbGFzcyBDYWNoZWRSZXNvdXJjZTsKLWNsYXNzIFVSTDsKLWNsYXNzIFJlc291cmNlUmVxdWVz
dDsKLWNsYXNzIFJlc291cmNlUmVzcG9uc2U7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OwotY2xhc3MgU2VjdXJpdHlPcmlnaW47Ci0KLS8vIFRoaXMgY2FjaGUgaG9sZHMgc3VicmVzb3Vy
Y2VzIHVzZWQgYnkgV2ViIHBhZ2VzOiBpbWFnZXMsIHNjcmlwdHMsIHN0eWxlc2hlZXRzLCBldGMu
Ci0KLS8vIFRoZSBjYWNoZSBrZWVwcyBhIGZsZXhpYmxlIGJ1dCBib3VuZGVkIHdpbmRvdyBvZiBk
ZWFkIHJlc291cmNlcyB0aGF0IGdyb3dzL3Nocmlua3MgCi0vLyBkZXBlbmRpbmcgb24gdGhlIGxp
dmUgcmVzb3VyY2UgbG9hZC4gSGVyZSdzIGFuIGV4YW1wbGUgb2YgY2FjaGUgZ3Jvd3RoIG92ZXIg
dGltZSwKLS8vIHdpdGggYSBtaW4gZGVhZCByZXNvdXJjZSBjYXBhY2l0eSBvZiAyNSUgYW5kIGEg
bWF4IGRlYWQgcmVzb3VyY2UgY2FwYWNpdHkgb2YgNTAlOgotCi0vLyAgICAgICAgfC0tLS0tfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlYWQ6IC0KLS8vICAgICAgICB8LS0tLS0tLS0t
LXwgICAgICAgICAgICAgICAgICAgICAgICAgTGl2ZTogKwotLy8gICAgICAtLXwtLS0tLS0tLS0t
fCAgICAgICAgICAgICAgICAgICAgICAgICBDYWNoZSBib3VuZGFyeTogfCAob2JqZWN0cyBvdXRz
aWRlIHRoaXMgbWFyayBoYXZlIGJlZW4gZXZpY3RlZCkKLS8vICAgICAgLS18LS0tLS0tLS0tLSsr
KysrKysrKyt8Ci0vLyAtLS0tLS0tfC0tLS0tKysrKysrKysrKysrKysrfAotLy8gLS0tLS0tLXwt
LS0tLSsrKysrKysrKysrKysrK3wrKysrKwotCi1jbGFzcyBNZW1vcnlDYWNoZSB7Ci0gICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoTWVtb3J5Q2FjaGUpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LSAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q2FjaGU+OwotICAgIGZyaWVuZCBjbGFz
cyBJbnRlcm5hbHM7Ci1wdWJsaWM6Ci0gICAgc3RydWN0IFR5cGVTdGF0aXN0aWMgewotICAgICAg
ICBpbnQgY291bnQ7Ci0gICAgICAgIGludCBzaXplOwotICAgICAgICBpbnQgbGl2ZVNpemU7Ci0g
ICAgICAgIGludCBkZWNvZGVkU2l6ZTsKLQotICAgICAgICBUeXBlU3RhdGlzdGljKCkKLSAgICAg
ICAgICAgIDogY291bnQoMCkKLSAgICAgICAgICAgICwgc2l6ZSgwKQotICAgICAgICAgICAgLCBs
aXZlU2l6ZSgwKQotICAgICAgICAgICAgLCBkZWNvZGVkU2l6ZSgwKQotICAgICAgICB7IAotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCBhZGRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSYpOwotICAg
IH07Ci0gICAgCi0gICAgc3RydWN0IFN0YXRpc3RpY3MgewotICAgICAgICBUeXBlU3RhdGlzdGlj
IGltYWdlczsKLSAgICAgICAgVHlwZVN0YXRpc3RpYyBjc3NTdHlsZVNoZWV0czsKLSAgICAgICAg
VHlwZVN0YXRpc3RpYyBzY3JpcHRzOwotICAgICAgICBUeXBlU3RhdGlzdGljIHhzbFN0eWxlU2hl
ZXRzOwotICAgICAgICBUeXBlU3RhdGlzdGljIGZvbnRzOwotICAgIH07Ci0KLSAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgTWVtb3J5Q2FjaGUmIHNpbmdsZXRvbigpOwotCi0gICAgV0VCQ09SRV9F
WFBPUlQgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlRm9yUmVxdWVzdChjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBTZXNzaW9uSUQpOwotCi0gICAgYm9vbCBhZGQoQ2FjaGVkUmVzb3VyY2UmKTsKLSAg
ICB2b2lkIHJlbW92ZShDYWNoZWRSZXNvdXJjZSYpOwotCi0gICAgc3RhdGljIFVSTCByZW1vdmVG
cmFnbWVudElkZW50aWZpZXJJZk5lZWRlZChjb25zdCBVUkwmIG9yaWdpbmFsVVJMKTsKLSAgICAK
LSAgICB2b2lkIHJldmFsaWRhdGlvblN1Y2NlZWRlZChDYWNoZWRSZXNvdXJjZSYgcmV2YWxpZGF0
aW5nUmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLSAgICB2b2lkIHJldmFsaWRh
dGlvbkZhaWxlZChDYWNoZWRSZXNvdXJjZSYgcmV2YWxpZGF0aW5nUmVzb3VyY2UpOwotCi0gICAg
dm9pZCBmb3JFYWNoUmVzb3VyY2UoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKENhY2hlZFJlc291
cmNlJik+Jik7Ci0gICAgdm9pZCBmb3JFYWNoU2Vzc2lvblJlc291cmNlKFNlc3Npb25JRCwgY29u
c3Qgc3RkOjpmdW5jdGlvbjx2b2lkKENhY2hlZFJlc291cmNlJik+Jik7Ci0gICAgdm9pZCBkZXN0
cm95RGVjb2RlZERhdGFGb3JBbGxJbWFnZXMoKTsKLSAgICAKLSAgICAvLyBTZXRzIHRoZSBjYWNo
ZSdzIG1lbW9yeSBjYXBhY2l0aWVzLCBpbiBieXRlcy4gVGhlc2Ugd2lsbCBob2xkIG9ubHkgYXBw
cm94aW1hdGVseSwgCi0gICAgLy8gc2luY2UgdGhlIGRlY29kZWQgY29zdCBvZiByZXNvdXJjZXMg
bGlrZSBzY3JpcHRzIGFuZCBzdHlsZXNoZWV0cyBpcyBub3Qga25vd24uCi0gICAgLy8gIC0gbWlu
RGVhZEJ5dGVzOiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBkZWFkIHJlc291cmNl
cyBzaG91bGQgY29uc3VtZSB3aGVuIHRoZSBjYWNoZSBpcyB1bmRlciBwcmVzc3VyZS4KLSAgICAv
LyAgLSBtYXhEZWFkQnl0ZXM6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGF0IGRlYWQg
cmVzb3VyY2VzIHNob3VsZCBjb25zdW1lIHdoZW4gdGhlIGNhY2hlIGlzIG5vdCB1bmRlciBwcmVz
c3VyZS4KLSAgICAvLyAgLSB0b3RhbEJ5dGVzOiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMg
dGhhdCB0aGUgY2FjaGUgc2hvdWxkIGNvbnN1bWUgb3ZlcmFsbC4KLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldENhcGFjaXRpZXModW5zaWduZWQgbWluRGVhZEJ5dGVzLCB1bnNpZ25lZCBtYXhE
ZWFkQnl0ZXMsIHVuc2lnbmVkIHRvdGFsQnl0ZXMpOwotCi0gICAgLy8gVHVybiB0aGUgY2FjaGUg
b24gYW5kIG9mZi4gIERpc2FibGluZyB0aGUgY2FjaGUgd2lsbCByZW1vdmUgYWxsIHJlc291cmNl
cyBmcm9tIHRoZSBjYWNoZS4gIFRoZXkgbWF5Ci0gICAgLy8gc3RpbGwgbGl2ZSBvbiBpZiB0aGV5
IGFyZSByZWZlcmVuY2VkIGJ5IHNvbWUgV2ViIHBhZ2UgdGhvdWdoLgotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0RGlzYWJsZWQoYm9vbCk7Ci0gICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGlzYWJsZWQ7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXZpY3RSZXNv
dXJjZXMoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV2aWN0UmVzb3VyY2VzKFNlc3Npb25J
RCk7Ci0gICAgCi0gICAgdm9pZCBwcnVuZSgpOwotICAgIHZvaWQgcHJ1bmVTb29uKCk7Ci0gICAg
dW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGl2ZVNpemUgKyBtX2RlYWRTaXplOyB9
Ci0KLSAgICB2b2lkIHNldERlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwoc3RkOjpjaHJv
bm86Om1pbGxpc2Vjb25kcyBpbnRlcnZhbCkgeyBtX2RlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50
ZXJ2YWwgPSBpbnRlcnZhbDsgfQotICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgZGVhZERl
Y29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVhZERlY29kZWRE
YXRhRGVsZXRpb25JbnRlcnZhbDsgfQotCi0gICAgLy8gQ2FsbHMgdG8gcHV0IHRoZSBjYWNoZWQg
cmVzb3VyY2UgaW50byBhbmQgb3V0IG9mIExSVSBsaXN0cy4KLSAgICB2b2lkIGluc2VydEluTFJV
TGlzdChDYWNoZWRSZXNvdXJjZSYpOwotICAgIHZvaWQgcmVtb3ZlRnJvbUxSVUxpc3QoQ2FjaGVk
UmVzb3VyY2UmKTsKLQotICAgIC8vIENhbGxlZCB0byBhZGp1c3QgdGhlIGNhY2hlIHRvdGFscyB3
aGVuIGEgcmVzb3VyY2UgY2hhbmdlcyBzaXplLgotICAgIHZvaWQgYWRqdXN0U2l6ZShib29sIGxp
dmUsIGludCBkZWx0YSk7Ci0KLSAgICAvLyBUcmFjayBkZWNvZGVkIHJlc291cmNlcyB0aGF0IGFy
ZSBpbiB0aGUgY2FjaGUgYW5kIHJlZmVyZW5jZWQgYnkgYSBXZWIgcGFnZS4KLSAgICB2b2lkIGlu
c2VydEluTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KENhY2hlZFJlc291cmNlJik7Ci0gICAgdm9p
ZCByZW1vdmVGcm9tTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KENhY2hlZFJlc291cmNlJik7Ci0K
LSAgICB2b2lkIGFkZFRvTGl2ZVJlc291cmNlc1NpemUoQ2FjaGVkUmVzb3VyY2UmKTsKLSAgICB2
b2lkIHJlbW92ZUZyb21MaXZlUmVzb3VyY2VzU2l6ZShDYWNoZWRSZXNvdXJjZSYpOwotCi0gICAg
c3RhdGljIHZvaWQgcmVtb3ZlUmVxdWVzdEZyb21TZXNzaW9uQ2FjaGVzKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKLQotICAgIC8vIEZ1bmN0aW9uIHRv
IGNvbGxlY3QgY2FjaGUgc3RhdGlzdGljcyBmb3IgdGhlIGNhY2hlcyB3aW5kb3cgaW4gdGhlIFNh
ZmFyaSBEZWJ1ZyBtZW51LgotICAgIFdFQkNPUkVfRVhQT1JUIFN0YXRpc3RpY3MgZ2V0U3RhdGlz
dGljcygpOwotICAgIAotICAgIHZvaWQgcmVzb3VyY2VBY2Nlc3NlZChDYWNoZWRSZXNvdXJjZSYp
OwotICAgIGJvb2wgaW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QoQ2FjaGVkUmVzb3VyY2UmIHJl
c291cmNlKSBjb25zdCB7IHJldHVybiBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzLmNvbnRhaW5zKCZy
ZXNvdXJjZSk7IH0KLQotICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
PiBTZWN1cml0eU9yaWdpblNldDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVJlc291
cmNlc1dpdGhPcmlnaW4oU2VjdXJpdHlPcmlnaW4mKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHJlbW92ZVJlc291cmNlc1dpdGhPcmlnaW5zKFNlc3Npb25JRCwgY29uc3QgSGFzaFNldDxSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+PiYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0T3JpZ2lu
c1dpdGhDYWNoZShTZWN1cml0eU9yaWdpblNldCYgb3JpZ2lucyk7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgSGFzaFNldDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+PiBvcmlnaW5zV2l0aENhY2hlKFNlc3Np
b25JRCkgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGFkZEltYWdlVG9DYWNoZShO
YXRpdmVJbWFnZVB0ciYmLCBjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIGRvbWFpbkZvckNhY2hl
UGFydGl0aW9uKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUltYWdlRnJvbUNhY2hl
KGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYgZG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24pOwotCi0g
ICAgLy8gcHJ1bmVEZWFkKigpIC0gRmx1c2ggZGVjb2RlZCBhbmQgZW5jb2RlZCBkYXRhIGZyb20g
cmVzb3VyY2VzIG5vdCByZWZlcmVuY2VkIGJ5IFdlYiBwYWdlcy4KLSAgICAvLyBwcnVuZUxpdmUq
KCkgLSBGbHVzaCBkZWNvZGVkIGRhdGEgZnJvbSByZXNvdXJjZXMgc3RpbGwgcmVmZXJlbmNlZCBi
eSBXZWIgcGFnZXMuCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcnVuZURlYWRSZXNvdXJjZXMo
KTsgLy8gQXV0b21hdGljYWxseSBkZWNpZGUgaG93IG11Y2ggdG8gcHJ1bmUuCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBwcnVuZUxpdmVSZXNvdXJjZXMoYm9vbCBzaG91bGREZXN0cm95RGVjb2Rl
ZERhdGFGb3JBbGxMaXZlUmVzb3VyY2VzID0gZmFsc2UpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBwcnVuZURlYWRSZXNvdXJjZXNUb1NpemUodW5zaWduZWQgdGFyZ2V0U2l6ZSk7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBwcnVuZUxpdmVSZXNvdXJjZXNUb1NpemUodW5zaWduZWQgdGFy
Z2V0U2l6ZSwgYm9vbCBzaG91bGREZXN0cm95RGVjb2RlZERhdGFGb3JBbGxMaXZlUmVzb3VyY2Vz
ID0gZmFsc2UpOwotCi1wcml2YXRlOgotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCi0g
ICAgdHlwZWRlZiBIYXNoTWFwPHN0ZDo6cGFpcjxVUkwsIFN0cmluZyAvKiBwYXJ0aXRpb25OYW1l
ICovPiwgQ2FjaGVkUmVzb3VyY2UqPiBDYWNoZWRSZXNvdXJjZU1hcDsKLSNlbHNlCi0gICAgdHlw
ZWRlZiBIYXNoTWFwPFVSTCwgQ2FjaGVkUmVzb3VyY2UqPiBDYWNoZWRSZXNvdXJjZU1hcDsKLSNl
bmRpZgotICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2UqPiBMUlVMaXN0Owot
Ci0gICAgTWVtb3J5Q2FjaGUoKTsKLSAgICB+TWVtb3J5Q2FjaGUoKTsgLy8gTm90IGltcGxlbWVu
dGVkIHRvIG1ha2Ugc3VyZSBub2JvZHkgYWNjaWRlbnRhbGx5IGNhbGxzIGRlbGV0ZSAtLSBXZWJD
b3JlIGRvZXMgbm90IGRlbGV0ZSBzaW5nbGV0b25zLgotCi0gICAgTFJVTGlzdCYgbHJ1TGlzdEZv
cihDYWNoZWRSZXNvdXJjZSYpOwotI2lmbmRlZiBOREVCVUcKLSAgICB2b2lkIGR1bXBTdGF0cygp
OwotICAgIHZvaWQgZHVtcExSVUxpc3RzKGJvb2wgaW5jbHVkZUxpdmUpIGNvbnN0OwotI2VuZGlm
Ci0KLSAgICB1bnNpZ25lZCBsaXZlQ2FwYWNpdHkoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBkZWFk
Q2FwYWNpdHkoKSBjb25zdDsKLSAgICBib29sIG5lZWRzUHJ1bmluZygpIGNvbnN0OwotCi0gICAg
Q2FjaGVkUmVzb3VyY2UqIHJlc291cmNlRm9yUmVxdWVzdEltcGwoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwgQ2FjaGVkUmVzb3VyY2VNYXAmKTsKLQotICAgIENhY2hlZFJlc291cmNlTWFwJiBlbnN1
cmVTZXNzaW9uUmVzb3VyY2VNYXAoU2Vzc2lvbklEKTsKLSAgICBDYWNoZWRSZXNvdXJjZU1hcCog
c2Vzc2lvblJlc291cmNlTWFwKFNlc3Npb25JRCkgY29uc3Q7Ci0KLSAgICBib29sIG1fZGlzYWJs
ZWQ7ICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgY2FjaGUgaXMgZW5hYmxlZC4KLSAgICBib29sIG1f
aW5QcnVuZVJlc291cmNlczsKLQotICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7Ci0gICAgdW5zaWdu
ZWQgbV9taW5EZWFkQ2FwYWNpdHk7Ci0gICAgdW5zaWduZWQgbV9tYXhEZWFkQ2FwYWNpdHk7Ci0g
ICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBtX2RlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50
ZXJ2YWw7Ci0KLSAgICB1bnNpZ25lZCBtX2xpdmVTaXplOyAvLyBUaGUgbnVtYmVyIG9mIGJ5dGVz
IGN1cnJlbnRseSBjb25zdW1lZCBieSAibGl2ZSIgcmVzb3VyY2VzIGluIHRoZSBjYWNoZS4KLSAg
ICB1bnNpZ25lZCBtX2RlYWRTaXplOyAvLyBUaGUgbnVtYmVyIG9mIGJ5dGVzIGN1cnJlbnRseSBj
b25zdW1lZCBieSAiZGVhZCIgcmVzb3VyY2VzIGluIHRoZSBjYWNoZS4KLQotICAgIC8vIFNpemUt
YWRqdXN0ZWQgYW5kIHBvcHVsYXJpdHktYXdhcmUgTFJVIGxpc3QgY29sbGVjdGlvbiBmb3IgY2Fj
aGUgb2JqZWN0cy4gIFRoaXMgY29sbGVjdGlvbiBjYW4gaG9sZAotICAgIC8vIG1vcmUgcmVzb3Vy
Y2VzIHRoYW4gdGhlIGNhY2hlZCByZXNvdXJjZSBtYXAsIHNpbmNlIGl0IGNhbiBhbHNvIGhvbGQg
InN0YWxlIiBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBvYmplY3RzIHRoYXQgYXJlCi0gICAgLy8gd2Fp
dGluZyB0byBkaWUgd2hlbiB0aGUgY2xpZW50cyByZWZlcmVuY2luZyB0aGVtIGdvIGF3YXkuCi0g
ICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxMUlVMaXN0PiwgMzI+IG1fYWxsUmVzb3VyY2VzOwot
ICAgIAotICAgIC8vIExpc3QganVzdCBmb3IgbGl2ZSByZXNvdXJjZXMgd2l0aCBkZWNvZGVkIGRh
dGEuICBBY2Nlc3MgdG8gdGhpcyBsaXN0IGlzIGJhc2VkIG9mZiBvZiBwYWludGluZyB0aGUgcmVz
b3VyY2UuCi0gICAgTFJVTGlzdCBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzOwotICAgIAotICAgIC8v
IEEgVVJMLWJhc2VkIG1hcCBvZiBhbGwgcmVzb3VyY2VzIHRoYXQgYXJlIGluIHRoZSBjYWNoZSAo
aW5jbHVkaW5nIHRoZSBmcmVzaGVzdCB2ZXJzaW9uIG9mIG9iamVjdHMgdGhhdCBhcmUgY3VycmVu
dGx5IGJlaW5nIAotICAgIC8vIHJlZmVyZW5jZWQgYnkgYSBXZWIgcGFnZSkuCi0gICAgdHlwZWRl
ZiBIYXNoTWFwPFNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPENhY2hlZFJlc291cmNlTWFwPj4g
U2Vzc2lvbkNhY2hlZFJlc291cmNlTWFwOwotICAgIFNlc3Npb25DYWNoZWRSZXNvdXJjZU1hcCBt
X3Nlc3Npb25SZXNvdXJjZXM7Ci0KLSAgICBUaW1lciBtX3BydW5lVGltZXI7Ci19OwotCi19Ci0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlUG9s
aWN5LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVQb2xpY3kuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iMjc2ODVlZTkyMDQyMTA3NDU5MTk1MjAxMmQ3ZWIxMWJhYTk4NTBhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlUG9saWN5LmgKQEAgLTAs
MCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBDYWNoZVBvbGljeV9oCisjZGVmaW5lIENhY2hlUG9saWN5X2gKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgZW51bSBDYWNoZVBvbGljeSB7CisgICAgICAgIENh
Y2hlUG9saWN5VmVyaWZ5LAorICAgICAgICBDYWNoZVBvbGljeVJldmFsaWRhdGUsCisgICAgICAg
IENhY2hlUG9saWN5UmVsb2FkLAorICAgICAgICBDYWNoZVBvbGljeUhpc3RvcnlCdWZmZXIKKyAg
ICB9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Zl
dGNoL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNo
L0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkMzdlNThiZGY0OWUxNGVlZGNk
NGYwOTBmOWZhZTY2ZjI0ZWU5MzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvZmV0Y2gvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAKQEAgLTAsMCArMSwxODIgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUp
CisgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQor
ICAgIENvcHlyaWdodCAoQykgMjAwMiBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29t
KQorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBJbmMuCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICAgVGhp
cyBjbGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1h
Z2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKKyAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhh
cyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KKyovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCisKKyNpbmNsdWRlICJDU1NT
dHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKKyNp
bmNsdWRlICJDYWNoZWRTdHlsZVNoZWV0Q2xpZW50LmgiCisjaW5jbHVkZSAiSFRUUEhlYWRlck5h
bWVzLmgiCisjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKKyNpbmNsdWRlICJNZW1vcnlDYWNoZS5o
IgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50
cy5oIgorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlIDx3dGYvQ3Vy
cmVudFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDYWNoZWRDU1NTdHlsZVNoZWV0
OjpDYWNoZWRDU1NTdHlsZVNoZWV0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1
ZXN0LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIFNlc3Npb25JRCBzZXNzaW9uSUQpCisgICAgOiBD
YWNoZWRSZXNvdXJjZShyZXNvdXJjZVJlcXVlc3QsIENTU1N0eWxlU2hlZXQsIHNlc3Npb25JRCkK
KyAgICAsIG1fZGVjb2RlcihUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQvY3NzIiwg
Y2hhcnNldCkpCit7CisgICAgLy8gUHJlZmVyIHRleHQvY3NzIGJ1dCBhY2NlcHQgYW55IHR5cGUg
KGRlbGwuY29tIHNlcnZlcyBhIHN0eWxlc2hlZXQKKyAgICAvLyBhcyB0ZXh0L2h0bWw7IHNlZSA8
aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0NTE+KS4KKyAgICBzZXRB
Y2NlcHQoInRleHQvY3NzLCovKjtxPTAuMSIpOworfQorCitDYWNoZWRDU1NTdHlsZVNoZWV0Ojp+
Q2FjaGVkQ1NTU3R5bGVTaGVldCgpCit7CisgICAgaWYgKG1fcGFyc2VkU3R5bGVTaGVldENhY2hl
KQorICAgICAgICBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+cmVtb3ZlZEZyb21NZW1vcnlDYWNo
ZSgpOworfQorCit2b2lkIENhY2hlZENTU1N0eWxlU2hlZXQ6OmRpZEFkZENsaWVudChDYWNoZWRS
ZXNvdXJjZUNsaWVudCogYykKK3sKKyAgICBBU1NFUlQoYy0+cmVzb3VyY2VDbGllbnRUeXBlKCkg
PT0gQ2FjaGVkU3R5bGVTaGVldENsaWVudDo6ZXhwZWN0ZWRUeXBlKCkpOworICAgIC8vIENhY2hl
ZFJlc291cmNlOjpkaWRBZGRDbGllbnQoKSBtdXN0IGJlIGJlZm9yZSBzZXRDU1NTdHlsZVNoZWV0
KCksCisgICAgLy8gYmVjYXVzZSBzZXRDU1NTdHlsZVNoZWV0KCkgbWF5IGNhdXNlIHNjcmlwdHMg
dG8gYmUgZXhlY3V0ZWQsIHdoaWNoIGNvdWxkIGRlc3Ryb3kgJ2MnIGlmIGl0IGlzIGFuIGluc3Rh
bmNlIG9mIEhUTUxMaW5rRWxlbWVudC4KKyAgICAvLyBzZWUgdGhlIGNvbW1lbnQgb2YgSFRNTExp
bmtFbGVtZW50OjpzZXRDU1NTdHlsZVNoZWV0LgorICAgIENhY2hlZFJlc291cmNlOjpkaWRBZGRD
bGllbnQoYyk7CisKKyAgICBpZiAoIWlzTG9hZGluZygpKQorICAgICAgICBzdGF0aWNfY2FzdDxD
YWNoZWRTdHlsZVNoZWV0Q2xpZW50Kj4oYyktPnNldENTU1N0eWxlU2hlZXQobV9yZXNvdXJjZVJl
cXVlc3QudXJsKCksIG1fcmVzcG9uc2UudXJsKCksIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKS5uYW1l
KCksIHRoaXMpOworfQorCit2b2lkIENhY2hlZENTU1N0eWxlU2hlZXQ6OnNldEVuY29kaW5nKGNv
bnN0IFN0cmluZyYgY2hzKQoreworICAgIG1fZGVjb2Rlci0+c2V0RW5jb2RpbmcoY2hzLCBUZXh0
UmVzb3VyY2VEZWNvZGVyOjpFbmNvZGluZ0Zyb21IVFRQSGVhZGVyKTsKK30KKworU3RyaW5nIENh
Y2hlZENTU1N0eWxlU2hlZXQ6OmVuY29kaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWNv
ZGVyLT5lbmNvZGluZygpLm5hbWUoKTsKK30KKyAgICAKK2NvbnN0IFN0cmluZyBDYWNoZWRDU1NT
dHlsZVNoZWV0OjpzaGVldFRleHQoTUlNRVR5cGVDaGVjayBtaW1lVHlwZUNoZWNrLCBib29sKiBo
YXNWYWxpZE1JTUVUeXBlKSBjb25zdAoreyAKKyAgICBpZiAoIW1fZGF0YSB8fCBtX2RhdGEtPmlz
RW1wdHkoKSB8fCAhY2FuVXNlU2hlZXQobWltZVR5cGVDaGVjaywgaGFzVmFsaWRNSU1FVHlwZSkp
CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAKKyAgICBpZiAoIW1fZGVjb2RlZFNoZWV0
VGV4dC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIG1fZGVjb2RlZFNoZWV0VGV4dDsKKyAgICAK
KyAgICAvLyBEb24ndCBjYWNoZSB0aGUgZGVjb2RlZCB0ZXh0LCByZWdlbmVyYXRpbmcgaXMgY2hl
YXAgYW5kIGl0IGNhbiB1c2UgcXVpdGUgYSBiaXQgb2YgbWVtb3J5CisgICAgcmV0dXJuIG1fZGVj
b2Rlci0+ZGVjb2RlQW5kRmx1c2gobV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpKTsKK30K
Kwordm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0OjpmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1ZmZlciog
ZGF0YSkKK3sKKyAgICBtX2RhdGEgPSBkYXRhOworICAgIHNldEVuY29kZWRTaXplKGRhdGEgPyBk
YXRhLT5zaXplKCkgOiAwKTsKKyAgICAvLyBEZWNvZGUgdGhlIGRhdGEgdG8gZmluZCBvdXQgdGhl
IGVuY29kaW5nIGFuZCBrZWVwIHRoZSBzaGVldCB0ZXh0IGFyb3VuZCBkdXJpbmcgY2hlY2tOb3Rp
ZnkoKQorICAgIGlmIChkYXRhKQorICAgICAgICBtX2RlY29kZWRTaGVldFRleHQgPSBtX2RlY29k
ZXItPmRlY29kZUFuZEZsdXNoKGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpKTsKKyAgICBzZXRM
b2FkaW5nKGZhbHNlKTsKKyAgICBjaGVja05vdGlmeSgpOworICAgIC8vIENsZWFyIHRoZSBkZWNv
ZGVkIHRleHQgYXMgaXQgaXMgdW5saWtlbHkgdG8gYmUgbmVlZGVkIGltbWVkaWF0ZWx5IGFnYWlu
IGFuZCBpcyBjaGVhcCB0byByZWdlbmVyYXRlLgorICAgIG1fZGVjb2RlZFNoZWV0VGV4dCA9IFN0
cmluZygpOworfQorCit2b2lkIENhY2hlZENTU1N0eWxlU2hlZXQ6OmNoZWNrTm90aWZ5KCkKK3sK
KyAgICBpZiAoaXNMb2FkaW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAgIENhY2hlZFJlc291
cmNlQ2xpZW50V2Fsa2VyPENhY2hlZFN0eWxlU2hlZXRDbGllbnQ+IHcobV9jbGllbnRzKTsKKyAg
ICB3aGlsZSAoQ2FjaGVkU3R5bGVTaGVldENsaWVudCogYyA9IHcubmV4dCgpKQorICAgICAgICBj
LT5zZXRDU1NTdHlsZVNoZWV0KG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLCBtX3Jlc3BvbnNlLnVy
bCgpLCBtX2RlY29kZXItPmVuY29kaW5nKCkubmFtZSgpLCB0aGlzKTsKK30KKworYm9vbCBDYWNo
ZWRDU1NTdHlsZVNoZWV0OjpjYW5Vc2VTaGVldChNSU1FVHlwZUNoZWNrIG1pbWVUeXBlQ2hlY2ss
IGJvb2wqIGhhc1ZhbGlkTUlNRVR5cGUpIGNvbnN0Cit7CisgICAgaWYgKGVycm9yT2NjdXJyZWQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1pbWVUeXBlQ2hlY2sgPT0gTUlN
RVR5cGVDaGVjazo6TGF4KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFRoaXMgY2hl
Y2sgZXhhY3RseSBtYXRjaGVzIEZpcmVmb3guICBOb3RlIHRoYXQgd2UgZ3JhYiB0aGUgQ29udGVu
dC1UeXBlCisgICAgLy8gaGVhZGVyIGRpcmVjdGx5IGJlY2F1c2Ugd2Ugd2FudCB0byBzZWUgd2hh
dCB0aGUgdmFsdWUgaXMgQkVGT1JFIGNvbnRlbnQKKyAgICAvLyBzbmlmZmluZy4gIEZpcmVmb3gg
ZG9lcyB0aGlzIGJ5IHNldHRpbmcgYSAidHlwZSBoaW50IiBvbiB0aGUgY2hhbm5lbC4KKyAgICAv
LyBUaGlzIGltcGxlbWVudGF0aW9uIHNob3VsZCBiZSBvYnNlcnZhdGlvbmFsbHkgZXF1aXZhbGVu
dC4KKyAgICAvLworICAgIC8vIFRoaXMgY29kZSBkZWZhdWx0cyB0byBhbGxvd2luZyB0aGUgc3R5
bGVzaGVldCBmb3Igbm9uLUhUVFAgcHJvdG9jb2xzIHNvCisgICAgLy8gZm9sa3MgY2FuIHVzZSBz
dGFuZGFyZHMgbW9kZSBmb3IgbG9jYWwgSFRNTCBkb2N1bWVudHMuCisgICAgU3RyaW5nIG1pbWVU
eXBlID0gZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShyZXNwb25zZSgpLmh0dHBIZWFkZXJG
aWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5cGUpKTsKKyAgICBib29sIHR5cGVPSyA9IG1p
bWVUeXBlLmlzRW1wdHkoKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlw
ZSwgInRleHQvY3NzIikgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUs
ICJhcHBsaWNhdGlvbi94LXVua25vd24tY29udGVudC10eXBlIik7CisgICAgaWYgKGhhc1ZhbGlk
TUlNRVR5cGUpCisgICAgICAgICpoYXNWYWxpZE1JTUVUeXBlID0gdHlwZU9LOworICAgIHJldHVy
biB0eXBlT0s7Cit9CisKK3ZvaWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6ZGVzdHJveURlY29kZWRE
YXRhKCkKK3sKKyAgICBpZiAoIW1fcGFyc2VkU3R5bGVTaGVldENhY2hlKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+cmVtb3ZlZEZyb21NZW1vcnlDYWNo
ZSgpOworICAgIG1fcGFyc2VkU3R5bGVTaGVldENhY2hlID0gbnVsbHB0cjsKKworICAgIHNldERl
Y29kZWRTaXplKDApOworfQorCitQYXNzUmVmUHRyPFN0eWxlU2hlZXRDb250ZW50cz4gQ2FjaGVk
Q1NTU3R5bGVTaGVldDo6cmVzdG9yZVBhcnNlZFN0eWxlU2hlZXQoY29uc3QgQ1NTUGFyc2VyQ29u
dGV4dCYgY29udGV4dCwgQ2FjaGVQb2xpY3kgY2FjaGVQb2xpY3kpCit7CisgICAgaWYgKCFtX3Bh
cnNlZFN0eWxlU2hlZXRDYWNoZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCFt
X3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+c3VicmVzb3VyY2VzQWxsb3dSZXVzZShjYWNoZVBvbGlj
eSkpIHsKKyAgICAgICAgbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUtPnJlbW92ZWRGcm9tTWVtb3J5
Q2FjaGUoKTsKKyAgICAgICAgbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUgPSBudWxscHRyOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBBU1NFUlQobV9wYXJzZWRTdHlsZVNo
ZWV0Q2FjaGUtPmlzQ2FjaGVhYmxlKCkpOworICAgIEFTU0VSVChtX3BhcnNlZFN0eWxlU2hlZXRD
YWNoZS0+aXNJbk1lbW9yeUNhY2hlKCkpOworCisgICAgLy8gQ29udGV4dHMgbXVzdCBiZSBpZGVu
dGljYWwgc28gd2Uga25vdyB3ZSB3b3VsZCBnZXQgdGhlIHNhbWUgZXhhY3QgcmVzdWx0IGlmIHdl
IHBhcnNlZCBhZ2Fpbi4KKyAgICBpZiAobV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUtPnBhcnNlckNv
bnRleHQoKSAhPSBjb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGRpZEFj
Y2Vzc0RlY29kZWREYXRhKG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsKKworICAgIHJl
dHVybiBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZTsKK30KKwordm9pZCBDYWNoZWRDU1NTdHlsZVNo
ZWV0OjpzYXZlUGFyc2VkU3R5bGVTaGVldChSZWY8U3R5bGVTaGVldENvbnRlbnRzPiYmIHNoZWV0
KQoreworICAgIEFTU0VSVChzaGVldC5nZXQoKS5pc0NhY2hlYWJsZSgpKTsKKworICAgIGlmICht
X3BhcnNlZFN0eWxlU2hlZXRDYWNoZSkKKyAgICAgICAgbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUt
PnJlbW92ZWRGcm9tTWVtb3J5Q2FjaGUoKTsKKyAgICBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZSA9
IFdURk1vdmUoc2hlZXQpOworICAgIG1fcGFyc2VkU3R5bGVTaGVldENhY2hlLT5hZGRlZFRvTWVt
b3J5Q2FjaGUoKTsKKworICAgIHNldERlY29kZWRTaXplKG1fcGFyc2VkU3R5bGVTaGVldENhY2hl
LT5lc3RpbWF0ZWRTaXplSW5CeXRlcygpKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZENTU1N0eWxlU2hlZXQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9mZXRjaC9DYWNoZWRDU1NTdHlsZVNoZWV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzQyYThmZmVl
NjBiNjA5ZTE5ZThmMGEwMjY2NDEwYjY3OTFlMmNkYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRDU1NTdHlsZVNoZWV0LmgKQEAgLTAsMCArMSw3
NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhk
Lm1wZy5kZSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtk
ZS5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdA
Z21haWwuY29tKQorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRl
cyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVl
dHMgYW5kIGh0bWwKKyAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNo
ZSBmb3IgdGhlc2Ugb2JqZWN0cy4KKyovCisKKyNpZm5kZWYgQ2FjaGVkQ1NTU3R5bGVTaGVldF9o
CisjZGVmaW5lIENhY2hlZENTU1N0eWxlU2hlZXRfaAorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3Vy
Y2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgQ2FjaGVkUmVzb3VyY2VD
bGllbnQ7CisgICAgY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOworICAgIGNsYXNzIFRleHRSZXNv
dXJjZURlY29kZXI7CisgICAgc3RydWN0IENTU1BhcnNlckNvbnRleHQ7CisKKyAgICBjbGFzcyBD
YWNoZWRDU1NTdHlsZVNoZWV0IGZpbmFsIDogcHVibGljIENhY2hlZFJlc291cmNlIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIENhY2hlZENTU1N0eWxlU2hlZXQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBTZXNzaW9uSUQpOworICAgICAgICB2aXJ0dWFsIH5D
YWNoZWRDU1NTdHlsZVNoZWV0KCk7CisKKyAgICAgICAgZW51bSBjbGFzcyBNSU1FVHlwZUNoZWNr
IHsgU3RyaWN0LCBMYXggfTsKKyAgICAgICAgY29uc3QgU3RyaW5nIHNoZWV0VGV4dChNSU1FVHlw
ZUNoZWNrID0gTUlNRVR5cGVDaGVjazo6U3RyaWN0LCBib29sKiBoYXNWYWxpZE1JTUVUeXBlID0g
bnVsbHB0cikgY29uc3Q7CisKKyAgICAgICAgUGFzc1JlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+
IHJlc3RvcmVQYXJzZWRTdHlsZVNoZWV0KGNvbnN0IENTU1BhcnNlckNvbnRleHQmLCBDYWNoZVBv
bGljeSk7CisgICAgICAgIHZvaWQgc2F2ZVBhcnNlZFN0eWxlU2hlZXQoUmVmPFN0eWxlU2hlZXRD
b250ZW50cz4mJik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBib29sIGNhblVzZVNoZWV0KE1J
TUVUeXBlQ2hlY2ssIGJvb2wqIGhhc1ZhbGlkTUlNRVR5cGUpIGNvbnN0OworICAgICAgICBib29s
IG1heVRyeVJlcGxhY2VFbmNvZGVkRGF0YSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KKworICAgICAgICB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopIG92
ZXJyaWRlOworCisgICAgICAgIHZvaWQgc2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJikgb3ZlcnJp
ZGU7CisgICAgICAgIFN0cmluZyBlbmNvZGluZygpIGNvbnN0IG92ZXJyaWRlOworICAgICAgICBj
b25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKiB0ZXh0UmVzb3VyY2VEZWNvZGVyKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9kZWNvZGVyLmdldCgpOyB9CisgICAgICAgIHZvaWQgZmluaXNoTG9h
ZGluZyhTaGFyZWRCdWZmZXIqKSBvdmVycmlkZTsKKyAgICAgICAgdm9pZCBkZXN0cm95RGVjb2Rl
ZERhdGEoKSBvdmVycmlkZTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgdm9pZCBjaGVja05v
dGlmeSgpIG92ZXJyaWRlOworCisgICAgICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBt
X2RlY29kZXI7CisgICAgICAgIFN0cmluZyBtX2RlY29kZWRTaGVldFRleHQ7CisKKyAgICAgICAg
UmVmUHRyPFN0eWxlU2hlZXRDb250ZW50cz4gbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGU7CisgICAg
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NB
Q0hFRF9SRVNPVVJDRShDYWNoZWRDU1NTdHlsZVNoZWV0LCBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5
bGVTaGVldCkKKworI2VuZGlmIC8vIENhY2hlZENTU1N0eWxlU2hlZXRfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZEZvbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2ZldGNoL0NhY2hlZEZvbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2Y2I0MWMzMjkyZjFm
OTdhYzFiNGQzYzE5OThkZGQ1NDFmYTFmYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkRm9udC5jcHAKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkNhY2hlZEZvbnQuaCIKKworI2luY2x1ZGUgIkNhY2hlZEZvbnRDbGllbnQu
aCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIgorI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5o
IgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURh
dGEuaCIKKyNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlICJUeXBlZEVsZW1l
bnREZXNjZW5kYW50SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJXT0ZGRmlsZUZvcm1hdC5oIgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDYWNoZWRGb250
OjpDYWNoZWRGb250KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBTZXNz
aW9uSUQgc2Vzc2lvbklELCBUeXBlIHR5cGUpCisgICAgOiBDYWNoZWRSZXNvdXJjZShyZXNvdXJj
ZVJlcXVlc3QsIHR5cGUsIHNlc3Npb25JRCkKKyAgICAsIG1fbG9hZEluaXRpYXRlZChmYWxzZSkK
KyAgICAsIG1faGFzQ3JlYXRlZEZvbnREYXRhV3JhcHBpbmdSZXNvdXJjZShmYWxzZSkKK3sKK30K
KworQ2FjaGVkRm9udDo6fkNhY2hlZEZvbnQoKQoreworfQorCit2b2lkIENhY2hlZEZvbnQ6Omxv
YWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9w
dGlvbnMpCit7CisgICAgLy8gRG9uJ3QgbG9hZCB0aGUgZmlsZSB5ZXQuICBXYWl0IGZvciBhbiBh
Y2Nlc3MgYmVmb3JlIHRyaWdnZXJpbmcgdGhlIGxvYWQuCisgICAgc2V0TG9hZGluZyh0cnVlKTsK
KyAgICBtX29wdGlvbnMgPSBvcHRpb25zOworfQorCit2b2lkIENhY2hlZEZvbnQ6OmRpZEFkZENs
aWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50KQoreworICAgIEFTU0VSVChjbGllbnQt
PnJlc291cmNlQ2xpZW50VHlwZSgpID09IENhY2hlZEZvbnRDbGllbnQ6OmV4cGVjdGVkVHlwZSgp
KTsKKyAgICBpZiAoIWlzTG9hZGluZygpKQorICAgICAgICBzdGF0aWNfY2FzdDxDYWNoZWRGb250
Q2xpZW50Kj4oY2xpZW50KS0+Zm9udExvYWRlZCgqdGhpcyk7Cit9CisKK3ZvaWQgQ2FjaGVkRm9u
dDo6ZmluaXNoTG9hZGluZyhTaGFyZWRCdWZmZXIqIGRhdGEpCit7CisgICAgbV9kYXRhID0gZGF0
YTsKKyAgICBzZXRFbmNvZGVkU2l6ZShtX2RhdGEuZ2V0KCkgPyBtX2RhdGEtPnNpemUoKSA6IDAp
OworICAgIHNldExvYWRpbmcoZmFsc2UpOworICAgIGNoZWNrTm90aWZ5KCk7Cit9CisKK3ZvaWQg
Q2FjaGVkRm9udDo6YmVnaW5Mb2FkSWZOZWVkZWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRl
cikKK3sKKyAgICBpZiAoIW1fbG9hZEluaXRpYXRlZCkgeworICAgICAgICBtX2xvYWRJbml0aWF0
ZWQgPSB0cnVlOworICAgICAgICBDYWNoZWRSZXNvdXJjZTo6bG9hZChsb2FkZXIsIG1fb3B0aW9u
cyk7CisgICAgfQorfQorCitib29sIENhY2hlZEZvbnQ6OmVuc3VyZUN1c3RvbUZvbnREYXRhKGNv
bnN0IEF0b21pY1N0cmluZyYpCit7CisgICAgcmV0dXJuIGVuc3VyZUN1c3RvbUZvbnREYXRhKG1f
ZGF0YS5nZXQoKSk7Cit9CisKK2Jvb2wgQ2FjaGVkRm9udDo6ZW5zdXJlQ3VzdG9tRm9udERhdGEo
U2hhcmVkQnVmZmVyKiBkYXRhKQoreworICAgIGlmICghbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRh
ICYmICFlcnJvck9jY3VycmVkKCkgJiYgIWlzTG9hZGluZygpICYmIGRhdGEpIHsKKyAgICAgICAg
Ym9vbCB3cmFwcGluZzsKKyAgICAgICAgbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhID0gY3JlYXRl
Q3VzdG9tRm9udERhdGEoKmRhdGEsIHdyYXBwaW5nKTsKKyAgICAgICAgbV9oYXNDcmVhdGVkRm9u
dERhdGFXcmFwcGluZ1Jlc291cmNlID0gbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhICYmIHdyYXBw
aW5nOworICAgICAgICBpZiAoIW1fZm9udEN1c3RvbVBsYXRmb3JtRGF0YSkKKyAgICAgICAgICAg
IHNldFN0YXR1cyhEZWNvZGVFcnJvcik7CisgICAgfQorCisgICAgcmV0dXJuIG1fZm9udEN1c3Rv
bVBsYXRmb3JtRGF0YS5nZXQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEZvbnRDdXN0b21QbGF0
Zm9ybURhdGE+IENhY2hlZEZvbnQ6OmNyZWF0ZUN1c3RvbUZvbnREYXRhKFNoYXJlZEJ1ZmZlciYg
Ynl0ZXMsIGJvb2wmIHdyYXBwaW5nKQoreworICAgIHdyYXBwaW5nID0gdHJ1ZTsKKworI2lmICFQ
TEFURk9STShDT0NPQSkKKyAgICBpZiAoaXNXT0ZGKGJ5dGVzKSkgeworICAgICAgICB3cmFwcGlu
ZyA9IGZhbHNlOworICAgICAgICBWZWN0b3I8Y2hhcj4gY29udmVydGVkRm9udDsKKyAgICAgICAg
aWYgKCFjb252ZXJ0V09GRlRvU2ZudChieXRlcywgY29udmVydGVkRm9udCkpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBhdXRvIGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6
YWRvcHRWZWN0b3IoY29udmVydGVkRm9udCk7CisgICAgICAgIHJldHVybiBjcmVhdGVGb250Q3Vz
dG9tUGxhdGZvcm1EYXRhKGJ1ZmZlcik7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gY3Jl
YXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YShieXRlcyk7Cit9CisKK1JlZlB0cjxGb250PiBDYWNo
ZWRGb250OjpjcmVhdGVGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBjb25zdCBBdG9taWNTdHJpbmcmLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGlj
SXRhbGljLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzJiBmb250RmFjZUZlYXR1cmVzLCBjb25z
dCBGb250VmFyaWFudFNldHRpbmdzJiBmb250RmFjZVZhcmlhbnRTZXR0aW5ncykKK3sKKyAgICBy
ZXR1cm4gRm9udDo6Y3JlYXRlKHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGZvbnREZXNjcmlw
dGlvbiwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljLCBmb250RmFjZUZlYXR1cmVzLCBm
b250RmFjZVZhcmlhbnRTZXR0aW5ncyksIHRydWUpOworfQorCitGb250UGxhdGZvcm1EYXRhIENh
Y2hlZEZvbnQ6OnBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBjb25zdCBGb250RmVh
dHVyZVNldHRpbmdzJiBmb250RmFjZUZlYXR1cmVzLCBjb25zdCBGb250VmFyaWFudFNldHRpbmdz
JiBmb250RmFjZVZhcmlhbnRTZXR0aW5ncykKK3sKKyAgICBBU1NFUlQobV9mb250Q3VzdG9tUGxh
dGZvcm1EYXRhKTsKKyAgICByZXR1cm4gcGxhdGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoKm1fZm9u
dEN1c3RvbVBsYXRmb3JtRGF0YSwgZm9udERlc2NyaXB0aW9uLCBib2xkLCBpdGFsaWMsIGZvbnRG
YWNlRmVhdHVyZXMsIGZvbnRGYWNlVmFyaWFudFNldHRpbmdzKTsKK30KKworRm9udFBsYXRmb3Jt
RGF0YSBDYWNoZWRGb250OjpwbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShGb250Q3VzdG9tUGxh
dGZvcm1EYXRhJiBmb250Q3VzdG9tUGxhdGZvcm1EYXRhLCBjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgY29uc3QgRm9udEZlYXR1
cmVTZXR0aW5ncyYgZm9udEZhY2VGZWF0dXJlcywgY29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYg
Zm9udEZhY2VWYXJpYW50U2V0dGluZ3MpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcmV0
dXJuIGZvbnRDdXN0b21QbGF0Zm9ybURhdGEuZm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRp
b24sIGJvbGQsIGl0YWxpYywgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VWYXJpYW50U2V0dGlu
Z3MpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZm9udEZhY2VGZWF0dXJlcyk7CisgICAgVU5V
U0VEX1BBUkFNKGZvbnRGYWNlVmFyaWFudFNldHRpbmdzKTsKKyAgICByZXR1cm4gZm9udEN1c3Rv
bVBsYXRmb3JtRGF0YS5mb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgYm9sZCwgaXRh
bGljKTsKKyNlbmRpZgorfQorCit2b2lkIENhY2hlZEZvbnQ6OmFsbENsaWVudHNSZW1vdmVkKCkK
K3sKKyAgICBtX2ZvbnRDdXN0b21QbGF0Zm9ybURhdGEgPSBudWxscHRyOworfQorCit2b2lkIENh
Y2hlZEZvbnQ6OmNoZWNrTm90aWZ5KCkKK3sKKyAgICBpZiAoaXNMb2FkaW5nKCkpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRGb250
Q2xpZW50PiB3YWxrZXIobV9jbGllbnRzKTsKKyAgICB3aGlsZSAoQ2FjaGVkRm9udENsaWVudCog
Y2xpZW50ID0gd2Fsa2VyLm5leHQoKSkKKyAgICAgICAgY2xpZW50LT5mb250TG9hZGVkKCp0aGlz
KTsKK30KKworYm9vbCBDYWNoZWRGb250OjptYXlUcnlSZXBsYWNlRW5jb2RlZERhdGEoKSBjb25z
dAoreworICAgIC8vIElmIGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YSBoYXMgZXZlciBiZWVuIGNv
bnN0cnVjdGVkIHRvIHdyYXAgdGhlIGludGVybmFsIHJlc291cmNlIGJ1ZmZlciB0aGVuIGl0IHN0
aWxsIG1pZ2h0IGJlIGluIHVzZSBzb21ld2hlcmUuCisgICAgLy8gVGhhdCBwbGF0Zm9ybSBmb250
IG9iamVjdCBtaWdodCBkaXJlY3RseSByZWZlcmVuY2UgdGhlIGVuY29kZWQgZGF0YSBidWZmZXIg
YmVoaW5kIHRoaXMgQ2FjaGVkRm9udCwKKyAgICAvLyBzbyByZXBsYWNpbmcgaXQgaXMgdW5zYWZl
LgorCisgICAgcmV0dXJuICFtX2hhc0NyZWF0ZWRGb250RGF0YVdyYXBwaW5nUmVzb3VyY2U7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRGb250
LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkRm9udC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmU1OGM5ZTA5NWM0OWZlZmUyMTdhM2E2N2IwMDZmNWY1NDUxYWMwYzEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkRm9udC5oCkBAIC0wLDAgKzEs
ODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBDYWNoZWRGb250X2gKKyNkZWZpbmUgQ2FjaGVkRm9udF9oCisKKyNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisj
aW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIlRleHRGbGFncy5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIENhY2hlZFJlc291cmNlTG9hZGVyOworY2xhc3MgRm9udERlc2NyaXB0
aW9uOworY2xhc3MgRm9udEZlYXR1cmVTZXR0aW5nczsKK2NsYXNzIEZvbnRQbGF0Zm9ybURhdGE7
CitjbGFzcyBTVkdEb2N1bWVudDsKK2NsYXNzIFNWR0ZvbnRFbGVtZW50Oworc3RydWN0IEZvbnRD
dXN0b21QbGF0Zm9ybURhdGE7CisKK2NsYXNzIENhY2hlZEZvbnQgOiBwdWJsaWMgQ2FjaGVkUmVz
b3VyY2UgeworcHVibGljOgorICAgIENhY2hlZEZvbnQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
U2Vzc2lvbklELCBUeXBlID0gRm9udFJlc291cmNlKTsKKyAgICB2aXJ0dWFsIH5DYWNoZWRGb250
KCk7CisKKyAgICB2b2lkIGJlZ2luTG9hZElmTmVlZGVkKENhY2hlZFJlc291cmNlTG9hZGVyJik7
CisgICAgYm9vbCBzdGlsbE5lZWRzTG9hZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICFtX2xv
YWRJbml0aWF0ZWQ7IH0KKworICAgIHZpcnR1YWwgYm9vbCBlbnN1cmVDdXN0b21Gb250RGF0YShj
b25zdCBBdG9taWNTdHJpbmcmIHJlbW90ZVVSSSk7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEZvbnRDdXN0b21QbGF0Zm9ybURhdGE+IGNyZWF0ZUN1c3RvbUZvbnREYXRhKFNoYXJlZEJ1
ZmZlciYsIGJvb2wmIHdyYXBwaW5nKTsKKyAgICBzdGF0aWMgRm9udFBsYXRmb3JtRGF0YSBwbGF0
Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShGb250Q3VzdG9tUGxhdGZvcm1EYXRhJiwgY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgY29uc3QgRm9udEZlYXR1cmVT
ZXR0aW5ncyYsIGNvbnN0IEZvbnRWYXJpYW50U2V0dGluZ3MmKTsKKworICAgIHZpcnR1YWwgUmVm
UHRyPEZvbnQ+IGNyZWF0ZUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWlj
U3RyaW5nJiByZW1vdGVVUkksIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFs
aWMsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MmLCBjb25zdCBGb250VmFyaWFudFNldHRpbmdz
Jik7CisKK3Byb3RlY3RlZDoKKyAgICBGb250UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0YUZyb21D
dXN0b21EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMs
IGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MmLCBjb25zdCBGb250VmFyaWFudFNldHRpbmdzJik7
CisKKyAgICBib29sIGVuc3VyZUN1c3RvbUZvbnREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSk7CisK
K3ByaXZhdGU6CisgICAgdm9pZCBjaGVja05vdGlmeSgpIG92ZXJyaWRlOworICAgIGJvb2wgbWF5
VHJ5UmVwbGFjZUVuY29kZWREYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGxvYWQo
Q2FjaGVkUmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKSBvdmVy
cmlkZTsKKworICAgIHZvaWQgZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kikgb3Zl
cnJpZGU7CisgICAgdm9pZCBmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1ZmZlciopIG92ZXJyaWRlOwor
CisgICAgdm9pZCBhbGxDbGllbnRzUmVtb3ZlZCgpIG92ZXJyaWRlOworCisgICAgc3RkOjp1bmlx
dWVfcHRyPEZvbnRDdXN0b21QbGF0Zm9ybURhdGE+IG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0YTsK
KyAgICBib29sIG1fbG9hZEluaXRpYXRlZDsKKyAgICBib29sIG1faGFzQ3JlYXRlZEZvbnREYXRh
V3JhcHBpbmdSZXNvdXJjZTsKKworICAgIGZyaWVuZCBjbGFzcyBNZW1vcnlDYWNoZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUNIRURf
UkVTT1VSQ0UoQ2FjaGVkRm9udCwgQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZSkKKworI2Vu
ZGlmIC8vIENhY2hlZEZvbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Zl
dGNoL0NhY2hlZEZvbnRDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNo
ZWRGb250Q2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDkzMjQxYTYwZjQwMWUzYWI1NzExNzJmMWM5Yjkx
YmZiZjExZWI1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRj
aC9DYWNoZWRGb250Q2xpZW50LmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQ2FjaGVkRm9udENsaWVudF9oCisjZGVmaW5lIENhY2hlZEZvbnRDbGllbnRfaAorCisjaW5j
bHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBDYWNoZWRGb250OworCitjbGFzcyBDYWNoZWRGb250Q2xpZW50IDogcHVibGljIENhY2hl
ZFJlc291cmNlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DYWNoZWRGb250Q2xpZW50
KCkgeyB9CisgICAgc3RhdGljIENhY2hlZFJlc291cmNlQ2xpZW50VHlwZSBleHBlY3RlZFR5cGUo
KSB7IHJldHVybiBGb250VHlwZTsgfQorICAgIENhY2hlZFJlc291cmNlQ2xpZW50VHlwZSByZXNv
dXJjZUNsaWVudFR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBleHBlY3RlZFR5cGUoKTsg
fQorICAgIHZpcnR1YWwgdm9pZCBmb250TG9hZGVkKENhY2hlZEZvbnQmKSB7IH0KK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENhY2hlZEZvbnRDbGllbnRfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZEltYWdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRJbWFnZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjVk
MGVkN2JiMTFlYmIwYWIwNTlhOWI2NGI0YTdhNjlkZGRiMjIxNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRJbWFnZS5jcHAKQEAgLTAsMCArMSw1
NDEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1o
ZC5tcGcuZGUpCisgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBr
ZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwMiBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtk
ZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdA
Z21haWwuY29tKQorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkNhY2hlZEltYWdlLmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1
ZGUgIkNhY2hlZEltYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQu
aCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIgorI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFt
ZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiRnJh
bWVMb2FkZXJUeXBlcy5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIk1lbW9y
eUNhY2hlLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIK
KyNpbmNsdWRlICJTVkdJbWFnZS5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJT
dWJyZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
KworI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJTeXN0ZW1NZW1vcnkuaCIKKyNlbmRpZgor
CisjaWYgVVNFKENHKQorI2luY2x1ZGUgIlBERkRvY3VtZW50SW1hZ2UuaCIKKyNlbmRpZgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0NhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgU2Vzc2lvbklEIHNlc3Npb25JRCkKKyAgICA6
IENhY2hlZFJlc291cmNlKHJlc291cmNlUmVxdWVzdCwgSW1hZ2VSZXNvdXJjZSwgc2Vzc2lvbklE
KQorICAgICwgbV9pbWFnZShudWxscHRyKQorICAgICwgbV9pc01hbnVhbGx5Q2FjaGVkKGZhbHNl
KQorICAgICwgbV9zaG91bGRQYWludEJyb2tlbkltYWdlKHRydWUpCit7CisgICAgc2V0U3RhdHVz
KFVua25vd24pOworfQorCitDYWNoZWRJbWFnZTo6Q2FjaGVkSW1hZ2UoSW1hZ2UqIGltYWdlLCBT
ZXNzaW9uSUQgc2Vzc2lvbklEKQorICAgIDogQ2FjaGVkUmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0
KCksIEltYWdlUmVzb3VyY2UsIHNlc3Npb25JRCkKKyAgICAsIG1faW1hZ2UoaW1hZ2UpCisgICAg
LCBtX2lzTWFudWFsbHlDYWNoZWQoZmFsc2UpCisgICAgLCBtX3Nob3VsZFBhaW50QnJva2VuSW1h
Z2UodHJ1ZSkKK3sKKyAgICBzZXRTdGF0dXMoQ2FjaGVkKTsKKyAgICBzZXRMb2FkaW5nKGZhbHNl
KTsKK30KKworQ2FjaGVkSW1hZ2U6OkNhY2hlZEltYWdlKGNvbnN0IFVSTCYgdXJsLCBJbWFnZSog
aW1hZ2UsIFNlc3Npb25JRCBzZXNzaW9uSUQpCisgICAgOiBDYWNoZWRSZXNvdXJjZShSZXNvdXJj
ZVJlcXVlc3QodXJsKSwgSW1hZ2VSZXNvdXJjZSwgc2Vzc2lvbklEKQorICAgICwgbV9pbWFnZShp
bWFnZSkKKyAgICAsIG1faXNNYW51YWxseUNhY2hlZChmYWxzZSkKKyAgICAsIG1fc2hvdWxkUGFp
bnRCcm9rZW5JbWFnZSh0cnVlKQoreworICAgIHNldFN0YXR1cyhDYWNoZWQpOworICAgIHNldExv
YWRpbmcoZmFsc2UpOworfQorCitDYWNoZWRJbWFnZTo6Q2FjaGVkSW1hZ2UoY29uc3QgVVJMJiB1
cmwsIEltYWdlKiBpbWFnZSwgQ2FjaGVkSW1hZ2U6OkNhY2hlQmVoYXZpb3JUeXBlIHR5cGUsIFNl
c3Npb25JRCBzZXNzaW9uSUQpCisgICAgOiBDYWNoZWRSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3Qo
dXJsKSwgSW1hZ2VSZXNvdXJjZSwgc2Vzc2lvbklEKQorICAgICwgbV9pbWFnZShpbWFnZSkKKyAg
ICAsIG1faXNNYW51YWxseUNhY2hlZCh0eXBlID09IENhY2hlZEltYWdlOjpNYW51YWxseUNhY2hl
ZCkKKyAgICAsIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSh0cnVlKQoreworICAgIHNldFN0YXR1
cyhDYWNoZWQpOworICAgIHNldExvYWRpbmcoZmFsc2UpOworICAgIGlmIChVTkxJS0VMWShpc01h
bnVhbGx5Q2FjaGVkKCkpKSB7CisgICAgICAgIC8vIFVzZSB0aGUgaW5jb21pbmcgVVJMIGluIHRo
ZSByZXNwb25zZSBmaWVsZC4gVGhpcyBlbnN1cmVzIHRoYXQgY29kZQorICAgICAgICAvLyB1c2lu
ZyB0aGUgcmVzcG9uc2UgZGlyZWN0bHksIHN1Y2ggYXMgb3JpZ2luIGNoZWNrcyBmb3Igc2VjdXJp
dHksCisgICAgICAgIC8vIGFjdHVhbGx5IHNlZSBzb21ldGhpbmcuCisgICAgICAgIG1fcmVzcG9u
c2Uuc2V0VVJMKHVybCk7CisgICAgfQorfQorCitDYWNoZWRJbWFnZTo6fkNhY2hlZEltYWdlKCkK
K3sKKyAgICBjbGVhckltYWdlKCk7Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OmxvYWQoQ2FjaGVk
UmVzb3VyY2VMb2FkZXImIGNhY2hlZFJlc291cmNlTG9hZGVyLCBjb25zdCBSZXNvdXJjZUxvYWRl
ck9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgaWYgKGNhY2hlZFJlc291cmNlTG9hZGVyLnNob3Vs
ZFBlcmZvcm1JbWFnZUxvYWQodXJsKCkpKQorICAgICAgICBDYWNoZWRSZXNvdXJjZTo6bG9hZChj
YWNoZWRSZXNvdXJjZUxvYWRlciwgb3B0aW9ucyk7CisgICAgZWxzZQorICAgICAgICBzZXRMb2Fk
aW5nKGZhbHNlKTsKK30KKwordm9pZCBDYWNoZWRJbWFnZTo6c2V0Qm9keURhdGFGcm9tKGNvbnN0
IENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkKK3sKKyAgICBBU1NFUlQocmVzb3VyY2UudHlwZSgp
ID09IHR5cGUoKSk7CisgICAgY29uc3QgQ2FjaGVkSW1hZ2UmIGltYWdlID0gc3RhdGljX2Nhc3Q8
Y29uc3QgQ2FjaGVkSW1hZ2UmPihyZXNvdXJjZSk7CisKKyAgICBzZXRMb2FkaW5nKGZhbHNlKTsK
KyAgICBtX2ltYWdlID0gaW1hZ2UubV9pbWFnZTsKKworICAgIGlmIChtX2ltYWdlICYmIGlzPFNW
R0ltYWdlPigqbV9pbWFnZSkpCisgICAgICAgIG1fc3ZnSW1hZ2VDYWNoZSA9IHN0ZDo6bWFrZV91
bmlxdWU8U1ZHSW1hZ2VDYWNoZT4oJmRvd25jYXN0PFNWR0ltYWdlPigqbV9pbWFnZSkpOworfQor
Cit2b2lkIENhY2hlZEltYWdlOjpkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNs
aWVudCkKK3sKKyAgICBpZiAobV9kYXRhICYmICFtX2ltYWdlICYmICFlcnJvck9jY3VycmVkKCkp
IHsKKyAgICAgICAgY3JlYXRlSW1hZ2UoKTsKKyAgICAgICAgbV9pbWFnZS0+c2V0RGF0YShtX2Rh
dGEuY29weVJlZigpLCB0cnVlKTsKKyAgICB9CisKKyAgICBBU1NFUlQoY2xpZW50LT5yZXNvdXJj
ZUNsaWVudFR5cGUoKSA9PSBDYWNoZWRJbWFnZUNsaWVudDo6ZXhwZWN0ZWRUeXBlKCkpOworICAg
IGlmIChtX2ltYWdlICYmICFtX2ltYWdlLT5pc051bGwoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8
Q2FjaGVkSW1hZ2VDbGllbnQqPihjbGllbnQpLT5pbWFnZUNoYW5nZWQodGhpcyk7CisKKyAgICBD
YWNoZWRSZXNvdXJjZTo6ZGlkQWRkQ2xpZW50KGNsaWVudCk7Cit9CisKK3ZvaWQgQ2FjaGVkSW1h
Z2U6OmRpZFJlbW92ZUNsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50KQoreworICAg
IEFTU0VSVChjbGllbnQpOworICAgIEFTU0VSVChjbGllbnQtPnJlc291cmNlQ2xpZW50VHlwZSgp
ID09IENhY2hlZEltYWdlQ2xpZW50OjpleHBlY3RlZFR5cGUoKSk7CisKKyAgICBtX3BlbmRpbmdD
b250YWluZXJTaXplUmVxdWVzdHMucmVtb3ZlKHN0YXRpY19jYXN0PENhY2hlZEltYWdlQ2xpZW50
Kj4oY2xpZW50KSk7CisKKyAgICBpZiAobV9zdmdJbWFnZUNhY2hlKQorICAgICAgICBtX3N2Z0lt
YWdlQ2FjaGUtPnJlbW92ZUNsaWVudEZyb21DYWNoZShzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZUNs
aWVudCo+KGNsaWVudCkpOworCisgICAgQ2FjaGVkUmVzb3VyY2U6OmRpZFJlbW92ZUNsaWVudChj
bGllbnQpOworfQorCit2b2lkIENhY2hlZEltYWdlOjpzd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRl
ZFJlc291cmNlKCkKK3sKKyAgICBBU1NFUlQoaXM8Q2FjaGVkSW1hZ2U+KHJlc291cmNlVG9SZXZh
bGlkYXRlKCkpKTsKKyAgICAvLyBQZW5kaW5nIGNvbnRhaW5lciBzaXplIHJlcXVlc3RzIG5lZWQg
dG8gYmUgdHJhbnNmZXJyZWQgdG8gdGhlIHJldmFsaWRhdGVkIHJlc291cmNlLgorICAgIGlmICgh
bV9wZW5kaW5nQ29udGFpbmVyU2l6ZVJlcXVlc3RzLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBB
IGNvcHkgb2YgcGVuZGluZyBzaXplIHJlcXVlc3RzIGlzIG5lZWRlZCBhcyB0aGV5IGFyZSBkZWxl
dGVkIGR1cmluZyBDYWNoZWRSZXNvdXJjZTo6c3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZVJlc291
Y2UoKS4KKyAgICAgICAgQ29udGFpbmVyU2l6ZVJlcXVlc3RzIHN3aXRjaENvbnRhaW5lclNpemVS
ZXF1ZXN0czsKKyAgICAgICAgZm9yIChhdXRvJiByZXF1ZXN0IDogbV9wZW5kaW5nQ29udGFpbmVy
U2l6ZVJlcXVlc3RzKQorICAgICAgICAgICAgc3dpdGNoQ29udGFpbmVyU2l6ZVJlcXVlc3RzLnNl
dChyZXF1ZXN0LmtleSwgcmVxdWVzdC52YWx1ZSk7CisgICAgICAgIENhY2hlZFJlc291cmNlOjpz
d2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNlKCk7CisgICAgICAgIENhY2hlZEltYWdl
JiByZXZhbGlkYXRlZENhY2hlZEltYWdlID0gZG93bmNhc3Q8Q2FjaGVkSW1hZ2U+KCpyZXNvdXJj
ZVRvUmV2YWxpZGF0ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiByZXF1ZXN0IDogc3dpdGNoQ29u
dGFpbmVyU2l6ZVJlcXVlc3RzKQorICAgICAgICAgICAgcmV2YWxpZGF0ZWRDYWNoZWRJbWFnZS5z
ZXRDb250YWluZXJTaXplRm9yUmVuZGVyZXIocmVxdWVzdC5rZXksIHJlcXVlc3QudmFsdWUuZmly
c3QsIHJlcXVlc3QudmFsdWUuc2Vjb25kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IENhY2hlZFJlc291cmNlOjpzd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNlKCk7Cit9
CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OmFsbENsaWVudHNSZW1vdmVkKCkKK3sKKyAgICBtX3BlbmRp
bmdDb250YWluZXJTaXplUmVxdWVzdHMuY2xlYXIoKTsKKyAgICBpZiAobV9pbWFnZSAmJiAhZXJy
b3JPY2N1cnJlZCgpKQorICAgICAgICBtX2ltYWdlLT5yZXNldEFuaW1hdGlvbigpOworfQorCitz
dGQ6OnBhaXI8SW1hZ2UqLCBmbG9hdD4gQ2FjaGVkSW1hZ2U6OmJyb2tlbkltYWdlKGZsb2F0IGRl
dmljZVNjYWxlRmFjdG9yKSBjb25zdAoreworICAgIGlmIChkZXZpY2VTY2FsZUZhY3RvciA+PSAz
KSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IGJyb2tlbkltYWdlVmVy
eUhpUmVzKEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWlzc2luZ0ltYWdlQDN4IikubGVh
a1JlZigpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGJyb2tlbkltYWdlVmVyeUhp
UmVzLCAzKTsKKyAgICB9CisKKyAgICBpZiAoZGV2aWNlU2NhbGVGYWN0b3IgPj0gMikgeworICAg
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiBicm9rZW5JbWFnZUhpUmVzKEltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWlzc2luZ0ltYWdlQDJ4IikubGVha1JlZigpKTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGJyb2tlbkltYWdlSGlSZXMsIDIpOworICAgIH0K
KworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IGJyb2tlbkltYWdlTG9SZXMoSW1h
Z2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtaXNzaW5nSW1hZ2UiKS5sZWFrUmVmKCkpOworICAg
IHJldHVybiBzdGQ6Om1ha2VfcGFpcihicm9rZW5JbWFnZUxvUmVzLCAxKTsKK30KKworYm9vbCBD
YWNoZWRJbWFnZTo6d2lsbFBhaW50QnJva2VuSW1hZ2UoKSBjb25zdAoreworICAgIHJldHVybiBl
cnJvck9jY3VycmVkKCkgJiYgbV9zaG91bGRQYWludEJyb2tlbkltYWdlOworfQorCitJbWFnZSog
Q2FjaGVkSW1hZ2U6OmltYWdlKCkKK3sKKyAgICBpZiAoZXJyb3JPY2N1cnJlZCgpICYmIG1fc2hv
dWxkUGFpbnRCcm9rZW5JbWFnZSkgeworICAgICAgICAvLyBSZXR1cm5pbmcgdGhlIDF4IGJyb2tl
biBpbWFnZSBpcyBub24taWRlYWwsIGJ1dCB3ZSBjYW5ub3QgcmVsaWFibHkgYWNjZXNzIHRoZSBh
cHByb3ByaWF0ZQorICAgICAgICAvLyBkZXZpY2VTY2FsZUZhY3RvciBmcm9tIGhlcmUuIEl0IGlz
IGNyaXRpY2FsIHRoYXQgY2FsbGVycyB1c2UgQ2FjaGVkSW1hZ2U6OmJyb2tlbkltYWdlKCkgCisg
ICAgICAgIC8vIHdoZW4gdGhleSBuZWVkIHRoZSByZWFsLCBkZXZpY2VTY2FsZUZhY3Rvci1hcHBy
b3ByaWF0ZSBicm9rZW4gaW1hZ2UgaWNvbi4gCisgICAgICAgIHJldHVybiBicm9rZW5JbWFnZSgx
KS5maXJzdDsKKyAgICB9CisKKyAgICBpZiAobV9pbWFnZSkKKyAgICAgICAgcmV0dXJuIG1faW1h
Z2UuZ2V0KCk7CisKKyAgICByZXR1cm4gSW1hZ2U6Om51bGxJbWFnZSgpOworfQorCitJbWFnZSog
Q2FjaGVkSW1hZ2U6OmltYWdlRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJl
cikKK3sKKyAgICBpZiAoZXJyb3JPY2N1cnJlZCgpICYmIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFn
ZSkgeworICAgICAgICAvLyBSZXR1cm5pbmcgdGhlIDF4IGJyb2tlbiBpbWFnZSBpcyBub24taWRl
YWwsIGJ1dCB3ZSBjYW5ub3QgcmVsaWFibHkgYWNjZXNzIHRoZSBhcHByb3ByaWF0ZQorICAgICAg
ICAvLyBkZXZpY2VTY2FsZUZhY3RvciBmcm9tIGhlcmUuIEl0IGlzIGNyaXRpY2FsIHRoYXQgY2Fs
bGVycyB1c2UgQ2FjaGVkSW1hZ2U6OmJyb2tlbkltYWdlKCkgCisgICAgICAgIC8vIHdoZW4gdGhl
eSBuZWVkIHRoZSByZWFsLCBkZXZpY2VTY2FsZUZhY3Rvci1hcHByb3ByaWF0ZSBicm9rZW4gaW1h
Z2UgaWNvbi4gCisgICAgICAgIHJldHVybiBicm9rZW5JbWFnZSgxKS5maXJzdDsKKyAgICB9CisK
KyAgICBpZiAoIW1faW1hZ2UpCisgICAgICAgIHJldHVybiBJbWFnZTo6bnVsbEltYWdlKCk7CisK
KyAgICBpZiAobV9pbWFnZS0+aXNTVkdJbWFnZSgpKSB7CisgICAgICAgIEltYWdlKiBpbWFnZSA9
IG1fc3ZnSW1hZ2VDYWNoZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlcik7CisgICAgICAgIGlm
IChpbWFnZSAhPSBJbWFnZTo6bnVsbEltYWdlKCkpCisgICAgICAgICAgICByZXR1cm4gaW1hZ2U7
CisgICAgfQorICAgIHJldHVybiBtX2ltYWdlLmdldCgpOworfQorCit2b2lkIENhY2hlZEltYWdl
OjpzZXRDb250YWluZXJTaXplRm9yUmVuZGVyZXIoY29uc3QgQ2FjaGVkSW1hZ2VDbGllbnQqIHJl
bmRlcmVyLCBjb25zdCBMYXlvdXRTaXplJiBjb250YWluZXJTaXplLCBmbG9hdCBjb250YWluZXJa
b29tKQoreworICAgIGlmIChjb250YWluZXJTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIEFTU0VSVChyZW5kZXJlcik7CisgICAgQVNTRVJUKGNvbnRhaW5lclpvb20pOworICAg
IGlmICghbV9pbWFnZSkgeworICAgICAgICBtX3BlbmRpbmdDb250YWluZXJTaXplUmVxdWVzdHMu
c2V0KHJlbmRlcmVyLCBTaXplQW5kWm9vbShjb250YWluZXJTaXplLCBjb250YWluZXJab29tKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1faW1hZ2UtPmlzU1ZHSW1hZ2Uo
KSkgeworICAgICAgICBtX2ltYWdlLT5zZXRDb250YWluZXJTaXplKGNvbnRhaW5lclNpemUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zdmdJbWFnZUNhY2hlLT5zZXRDb250YWlu
ZXJTaXplRm9yUmVuZGVyZXIocmVuZGVyZXIsIGNvbnRhaW5lclNpemUsIGNvbnRhaW5lclpvb20p
OworfQorCitib29sIENhY2hlZEltYWdlOjp1c2VzSW1hZ2VDb250YWluZXJTaXplKCkgY29uc3QK
K3sKKyAgICBpZiAobV9pbWFnZSkKKyAgICAgICAgcmV0dXJuIG1faW1hZ2UtPnVzZXNDb250YWlu
ZXJTaXplKCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ2FjaGVkSW1hZ2U6Omlt
YWdlSGFzUmVsYXRpdmVXaWR0aCgpIGNvbnN0Cit7CisgICAgaWYgKG1faW1hZ2UpCisgICAgICAg
IHJldHVybiBtX2ltYWdlLT5oYXNSZWxhdGl2ZVdpZHRoKCk7CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgQ2FjaGVkSW1hZ2U6OmltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdAor
eworICAgIGlmIChtX2ltYWdlKQorICAgICAgICByZXR1cm4gbV9pbWFnZS0+aGFzUmVsYXRpdmVI
ZWlnaHQoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworTGF5b3V0U2l6ZSBDYWNoZWRJbWFn
ZTo6aW1hZ2VTaXplRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgZmxv
YXQgbXVsdGlwbGllciwgU2l6ZVR5cGUgc2l6ZVR5cGUpCit7CisgICAgaWYgKCFtX2ltYWdlKQor
ICAgICAgICByZXR1cm4gTGF5b3V0U2l6ZSgpOworCisgICAgTGF5b3V0U2l6ZSBpbWFnZVNpemU7
CisKKyAgICBpZiAoaXM8Qml0bWFwSW1hZ2U+KCptX2ltYWdlKSAmJiByZW5kZXJlciAmJiByZW5k
ZXJlci0+c2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmll
bnRhdGlvbikKKyAgICAgICAgaW1hZ2VTaXplID0gTGF5b3V0U2l6ZShkb3duY2FzdDxCaXRtYXBJ
bWFnZT4oKm1faW1hZ2UpLnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSk7CisgICAgZWxzZSBp
ZiAoaXM8U1ZHSW1hZ2U+KCptX2ltYWdlKSAmJiBzaXplVHlwZSA9PSBVc2VkU2l6ZSkKKyAgICAg
ICAgaW1hZ2VTaXplID0gTGF5b3V0U2l6ZShtX3N2Z0ltYWdlQ2FjaGUtPmltYWdlU2l6ZUZvclJl
bmRlcmVyKHJlbmRlcmVyKSk7CisgICAgZWxzZQorICAgICAgICBpbWFnZVNpemUgPSBMYXlvdXRT
aXplKG1faW1hZ2UtPnNpemUoKSk7CisKKyAgICBpZiAobXVsdGlwbGllciA9PSAxLjBmKQorICAg
ICAgICByZXR1cm4gaW1hZ2VTaXplOworICAgICAgICAKKyAgICAvLyBEb24ndCBsZXQgaW1hZ2Vz
IHRoYXQgaGF2ZSBhIHdpZHRoL2hlaWdodCA+PSAxIHNocmluayBiZWxvdyAxIHdoZW4gem9vbWVk
LgorICAgIGZsb2F0IHdpZHRoU2NhbGUgPSBtX2ltYWdlLT5oYXNSZWxhdGl2ZVdpZHRoKCkgPyAx
LjBmIDogbXVsdGlwbGllcjsKKyAgICBmbG9hdCBoZWlnaHRTY2FsZSA9IG1faW1hZ2UtPmhhc1Jl
bGF0aXZlSGVpZ2h0KCkgPyAxLjBmIDogbXVsdGlwbGllcjsKKyAgICBMYXlvdXRTaXplIG1pbmlt
dW1TaXplKGltYWdlU2l6ZS53aWR0aCgpID4gMCA/IDEgOiAwLCBpbWFnZVNpemUuaGVpZ2h0KCkg
PiAwID8gMSA6IDApOworICAgIGltYWdlU2l6ZS5zY2FsZSh3aWR0aFNjYWxlLCBoZWlnaHRTY2Fs
ZSk7CisgICAgaW1hZ2VTaXplLmNsYW1wVG9NaW5pbXVtU2l6ZShtaW5pbXVtU2l6ZSk7CisgICAg
QVNTRVJUKG11bHRpcGxpZXIgIT0gMS4wZiB8fCAoaW1hZ2VTaXplLndpZHRoKCkuZnJhY3Rpb24o
KSA9PSAwLjBmICYmIGltYWdlU2l6ZS5oZWlnaHQoKS5mcmFjdGlvbigpID09IDAuMGYpKTsKKyAg
ICByZXR1cm4gaW1hZ2VTaXplOworfQorCit2b2lkIENhY2hlZEltYWdlOjpjb21wdXRlSW50cmlu
c2ljRGltZW5zaW9ucyhMZW5ndGgmIGludHJpbnNpY1dpZHRoLCBMZW5ndGgmIGludHJpbnNpY0hl
aWdodCwgRmxvYXRTaXplJiBpbnRyaW5zaWNSYXRpbykKK3sKKyAgICBpZiAobV9pbWFnZSkKKyAg
ICAgICAgbV9pbWFnZS0+Y29tcHV0ZUludHJpbnNpY0RpbWVuc2lvbnMoaW50cmluc2ljV2lkdGgs
IGludHJpbnNpY0hlaWdodCwgaW50cmluc2ljUmF0aW8pOworfQorCit2b2lkIENhY2hlZEltYWdl
Ojpub3RpZnlPYnNlcnZlcnMoY29uc3QgSW50UmVjdCogY2hhbmdlUmVjdCkKK3sKKyAgICBDYWNo
ZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRJbWFnZUNsaWVudD4gdyhtX2NsaWVudHMpOwor
ICAgIHdoaWxlIChDYWNoZWRJbWFnZUNsaWVudCogYyA9IHcubmV4dCgpKQorICAgICAgICBjLT5p
bWFnZUNoYW5nZWQodGhpcywgY2hhbmdlUmVjdCk7Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OmNo
ZWNrU2hvdWxkUGFpbnRCcm9rZW5JbWFnZSgpCit7CisgICAgaWYgKCFtX2xvYWRlciB8fCBtX2xv
YWRlci0+cmVhY2hlZFRlcm1pbmFsU3RhdGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9z
aG91bGRQYWludEJyb2tlbkltYWdlID0gbV9sb2FkZXItPmZyYW1lTG9hZGVyKCktPmNsaWVudCgp
LnNob3VsZFBhaW50QnJva2VuSW1hZ2UodXJsKCkpOworfQorCit2b2lkIENhY2hlZEltYWdlOjpj
bGVhcigpCit7CisgICAgZGVzdHJveURlY29kZWREYXRhKCk7CisgICAgY2xlYXJJbWFnZSgpOwor
ICAgIG1fcGVuZGluZ0NvbnRhaW5lclNpemVSZXF1ZXN0cy5jbGVhcigpOworICAgIHNldEVuY29k
ZWRTaXplKDApOworfQorCitpbmxpbmUgdm9pZCBDYWNoZWRJbWFnZTo6Y3JlYXRlSW1hZ2UoKQor
eworICAgIC8vIENyZWF0ZSB0aGUgaW1hZ2UgaWYgaXQgZG9lc24ndCB5ZXQgZXhpc3QuCisgICAg
aWYgKG1faW1hZ2UpCisgICAgICAgIHJldHVybjsKKworI2lmIFVTRShDRykgJiYgIVVTRShXRUJL
SVRfSU1BR0VfREVDT0RFUlMpCisgICAgZWxzZSBpZiAobV9yZXNwb25zZS5taW1lVHlwZSgpID09
ICJhcHBsaWNhdGlvbi9wZGYiKQorICAgICAgICBtX2ltYWdlID0gUERGRG9jdW1lbnRJbWFnZTo6
Y3JlYXRlKHRoaXMpOworI2VuZGlmCisgICAgZWxzZSBpZiAobV9yZXNwb25zZS5taW1lVHlwZSgp
ID09ICJpbWFnZS9zdmcreG1sIikgeworICAgICAgICBhdXRvIHN2Z0ltYWdlID0gU1ZHSW1hZ2U6
OmNyZWF0ZSgqdGhpcywgdXJsKCkpOworICAgICAgICBtX3N2Z0ltYWdlQ2FjaGUgPSBzdGQ6Om1h
a2VfdW5pcXVlPFNWR0ltYWdlQ2FjaGU+KHN2Z0ltYWdlLnB0cigpKTsKKyAgICAgICAgbV9pbWFn
ZSA9IFdURk1vdmUoc3ZnSW1hZ2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1faW1hZ2UgPSBC
aXRtYXBJbWFnZTo6Y3JlYXRlKHRoaXMpOworICAgICAgICBkb3duY2FzdDxCaXRtYXBJbWFnZT4o
Km1faW1hZ2UpLnNldEFsbG93U3Vic2FtcGxpbmcobV9sb2FkZXIgJiYgbV9sb2FkZXItPmZyYW1l
TG9hZGVyKCktPmZyYW1lKCkuc2V0dGluZ3MoKS5pbWFnZVN1YnNhbXBsaW5nRW5hYmxlZCgpKTsK
KyAgICB9CisKKyAgICBpZiAobV9pbWFnZSkgeworICAgICAgICAvLyBTZW5kIHF1ZXVlZCBjb250
YWluZXIgc2l6ZSByZXF1ZXN0cy4KKyAgICAgICAgaWYgKG1faW1hZ2UtPnVzZXNDb250YWluZXJT
aXplKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcmVxdWVzdCA6IG1fcGVuZGluZ0NvbnRh
aW5lclNpemVSZXF1ZXN0cykKKyAgICAgICAgICAgICAgICBzZXRDb250YWluZXJTaXplRm9yUmVu
ZGVyZXIocmVxdWVzdC5rZXksIHJlcXVlc3QudmFsdWUuZmlyc3QsIHJlcXVlc3QudmFsdWUuc2Vj
b25kKTsKKyAgICAgICAgfQorICAgICAgICBtX3BlbmRpbmdDb250YWluZXJTaXplUmVxdWVzdHMu
Y2xlYXIoKTsKKyAgICB9Cit9CisKK2lubGluZSB2b2lkIENhY2hlZEltYWdlOjpjbGVhckltYWdl
KCkKK3sKKyAgICAvLyBJZiBvdXIgSW1hZ2UgaGFzIGFuIG9ic2VydmVyLCBpdCdzIGFsd2F5cyB1
cyBzbyB3ZSBuZWVkIHRvIGNsZWFyIHRoZSBiYWNrIHBvaW50ZXIKKyAgICAvLyBiZWZvcmUgZHJv
cHBpbmcgb3VyIHJlZmVyZW5jZS4KKyAgICBpZiAobV9pbWFnZSkKKyAgICAgICAgbV9pbWFnZS0+
c2V0SW1hZ2VPYnNlcnZlcihudWxscHRyKTsKKyAgICBtX2ltYWdlID0gbnVsbHB0cjsKK30KKwor
dm9pZCBDYWNoZWRJbWFnZTo6YWRkSW5jcmVtZW50YWxEYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYg
ZGF0YSkKK3sKKyAgICBtX2RhdGEgPSAmZGF0YTsKKworICAgIGNyZWF0ZUltYWdlKCk7CisKKyAg
ICAvLyBIYXZlIHRoZSBpbWFnZSB1cGRhdGUgaXRzIGRhdGEgZnJvbSBpdHMgaW50ZXJuYWwgYnVm
ZmVyLgorICAgIC8vIEl0IHdpbGwgbm90IGRvIGFueXRoaW5nIG5vdywgYnV0IHdpbGwgZGVsYXkg
ZGVjb2RpbmcgdW50aWwKKyAgICAvLyBxdWVyaWVkIGZvciBpbmZvIChsaWtlIHNpemUgb3Igc3Bl
Y2lmaWMgaW1hZ2UgZnJhbWVzKS4KKyAgICBib29sIHNpemVBdmFpbGFibGUgPSBtX2ltYWdlLT5z
ZXREYXRhKCZkYXRhLCBmYWxzZSk7CisgICAgaWYgKCFzaXplQXZhaWxhYmxlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAobV9pbWFnZS0+aXNOdWxsKCkpIHsKKyAgICAgICAgLy8gSW1hZ2Ug
ZGVjb2RpbmcgZmFpbGVkLiBFaXRoZXIgd2UgbmVlZCBtb3JlIGltYWdlIGRhdGEgb3IgdGhlIGlt
YWdlIGRhdGEgaXMgbWFsZm9ybWVkLgorICAgICAgICBlcnJvcihlcnJvck9jY3VycmVkKCkgPyBz
dGF0dXMoKSA6IERlY29kZUVycm9yKTsKKyAgICAgICAgaWYgKGluQ2FjaGUoKSkKKyAgICAgICAg
ICAgIE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUoKnRoaXMpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gVGVsbCBvdXIgb2JzZXJ2ZXJzIHRvIHRyeSB0byBkcmF3Lgor
ICAgIC8vIEVhY2ggY2h1bmsgZnJvbSB0aGUgbmV0d29yayBjYXVzZXMgb2JzZXJ2ZXJzIHRvIHJl
cGFpbnQsIHdoaWNoIHdpbGwgZm9yY2UgdGhhdCBjaHVuayB0byBkZWNvZGUuCisgICAgLy8gSXQg
d291bGQgYmUgbmljZSB0byBvbmx5IHJlZHJhdyB0aGUgZGVjb2RlZCBiYW5kIG9mIHRoZSBpbWFn
ZSwgYnV0IHdpdGggdGhlIGN1cnJlbnQgZGVzaWduCisgICAgLy8gKGRlY29kaW5nIGRlbGF5ZWQg
dW50aWwgcGFpbnRpbmcpIHRoYXQgc2VlbXMgaGFyZC4KKyAgICBub3RpZnlPYnNlcnZlcnMoKTsK
KworICAgIHNldEVuY29kZWRTaXplKG1faW1hZ2UtPmRhdGEoKSA/IG1faW1hZ2UtPmRhdGEoKS0+
c2l6ZSgpIDogMCk7Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OmFkZERhdGFCdWZmZXIoU2hhcmVk
QnVmZmVyJiBkYXRhKQoreworICAgIEFTU0VSVChkYXRhQnVmZmVyaW5nUG9saWN5KCkgPT0gQnVm
ZmVyRGF0YSk7CisgICAgYWRkSW5jcmVtZW50YWxEYXRhQnVmZmVyKGRhdGEpOworICAgIENhY2hl
ZFJlc291cmNlOjphZGREYXRhQnVmZmVyKGRhdGEpOworfQorCit2b2lkIENhY2hlZEltYWdlOjph
ZGREYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBBU1NFUlQo
ZGF0YUJ1ZmZlcmluZ1BvbGljeSgpID09IERvTm90QnVmZmVyRGF0YSk7CisgICAgYWRkSW5jcmVt
ZW50YWxEYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEsIGxlbmd0aCkpOworICAg
IENhY2hlZFJlc291cmNlOjphZGREYXRhKGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgQ2FjaGVk
SW1hZ2U6OmZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKiBkYXRhKQoreworICAgIG1fZGF0YSA9
IGRhdGE7CisgICAgaWYgKCFtX2ltYWdlICYmIGRhdGEpCisgICAgICAgIGNyZWF0ZUltYWdlKCk7
CisKKyAgICBpZiAobV9pbWFnZSkKKyAgICAgICAgbV9pbWFnZS0+c2V0RGF0YShkYXRhLCB0cnVl
KTsKKworICAgIGlmICghbV9pbWFnZSB8fCBtX2ltYWdlLT5pc051bGwoKSkgeworICAgICAgICAv
LyBJbWFnZSBkZWNvZGluZyBmYWlsZWQ7IHRoZSBpbWFnZSBkYXRhIGlzIG1hbGZvcm1lZC4KKyAg
ICAgICAgZXJyb3IoZXJyb3JPY2N1cnJlZCgpID8gc3RhdHVzKCkgOiBEZWNvZGVFcnJvcik7Cisg
ICAgICAgIGlmIChpbkNhY2hlKCkpCisgICAgICAgICAgICBNZW1vcnlDYWNoZTo6c2luZ2xldG9u
KCkucmVtb3ZlKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG5vdGlmeU9i
c2VydmVycygpOworICAgIGlmIChtX2ltYWdlKQorICAgICAgICBzZXRFbmNvZGVkU2l6ZShtX2lt
YWdlLT5kYXRhKCkgPyBtX2ltYWdlLT5kYXRhKCktPnNpemUoKSA6IDApOworICAgIENhY2hlZFJl
c291cmNlOjpmaW5pc2hMb2FkaW5nKGRhdGEpOworfQorCit2b2lkIENhY2hlZEltYWdlOjpkaWRS
ZXBsYWNlU2hhcmVkQnVmZmVyQ29udGVudHMoKQoreworICAgIGlmIChtX2ltYWdlKSB7CisgICAg
ICAgIC8vIExldCB0aGUgSW1hZ2Uga25vdyB0aGF0IHRoZSBTaGFyZWRCdWZmZXIgaGFzIGJlZW4g
cmVqaWdnZWQsIHNvIGl0IGNhbiBsZXQgZ28gb2YgYW55IHJlZmVyZW5jZXMgdG8gdGhlIGhlYXAt
YWxsb2NhdGVkIHJlc291cmNlIGJ1ZmZlci4KKyAgICAgICAgLy8gRklYTUUocmRhcjovL3Byb2Js
ZW0vMjQyNzU2MTcpOiBJdCB3b3VsZCBiZSBiZXR0ZXIgaWYgd2UgY291bGQgc29tZWhvdyB0ZWxs
IHRoZSBJbWFnZSdzIGRlY29kZXIgdG8gc3dhcCBpbiB0aGUgbmV3IGNvbnRlbnRzIHdpdGhvdXQg
ZGVzdHJveWluZyBhbnl0aGluZy4KKyAgICAgICAgbV9pbWFnZS0+ZGVzdHJveURlY29kZWREYXRh
KHRydWUpOworICAgIH0KKyAgICBDYWNoZWRSZXNvdXJjZTo6ZGlkUmVwbGFjZVNoYXJlZEJ1ZmZl
ckNvbnRlbnRzKCk7Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OmVycm9yKENhY2hlZFJlc291cmNl
OjpTdGF0dXMgc3RhdHVzKQoreworICAgIGNoZWNrU2hvdWxkUGFpbnRCcm9rZW5JbWFnZSgpOwor
ICAgIGNsZWFyKCk7CisgICAgQ2FjaGVkUmVzb3VyY2U6OmVycm9yKHN0YXR1cyk7CisgICAgbm90
aWZ5T2JzZXJ2ZXJzKCk7Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OnJlc3BvbnNlUmVjZWl2ZWQo
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgaWYgKCFtX3Jlc3BvbnNl
LmlzTnVsbCgpKQorICAgICAgICBjbGVhcigpOworICAgIENhY2hlZFJlc291cmNlOjpyZXNwb25z
ZVJlY2VpdmVkKHJlc3BvbnNlKTsKK30KKwordm9pZCBDYWNoZWRJbWFnZTo6ZGVzdHJveURlY29k
ZWREYXRhKCkKK3sKKyAgICBib29sIGNhbkRlbGV0ZUltYWdlID0gIW1faW1hZ2UgfHwgKG1faW1h
Z2UtPmhhc09uZVJlZigpICYmIG1faW1hZ2UtPmlzQml0bWFwSW1hZ2UoKSk7CisgICAgaWYgKGNh
bkRlbGV0ZUltYWdlICYmICFpc0xvYWRpbmcoKSAmJiAhaGFzQ2xpZW50cygpKSB7CisgICAgICAg
IG1faW1hZ2UgPSBudWxscHRyOworICAgICAgICBzZXREZWNvZGVkU2l6ZSgwKTsKKyAgICB9IGVs
c2UgaWYgKG1faW1hZ2UgJiYgIWVycm9yT2NjdXJyZWQoKSkKKyAgICAgICAgbV9pbWFnZS0+ZGVz
dHJveURlY29kZWREYXRhKCk7Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OmRlY29kZWRTaXplQ2hh
bmdlZChjb25zdCBJbWFnZSogaW1hZ2UsIGludCBkZWx0YSkKK3sKKyAgICBpZiAoIWltYWdlIHx8
IGltYWdlICE9IG1faW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBzZXREZWNvZGVk
U2l6ZShkZWNvZGVkU2l6ZSgpICsgZGVsdGEpOworfQorCit2b2lkIENhY2hlZEltYWdlOjpkaWRE
cmF3KGNvbnN0IEltYWdlKiBpbWFnZSkKK3sKKyAgICBpZiAoIWltYWdlIHx8IGltYWdlICE9IG1f
aW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBkb3VibGUgdGltZVN0YW1wID0gRnJh
bWVWaWV3OjpjdXJyZW50UGFpbnRUaW1lU3RhbXAoKTsKKyAgICBpZiAoIXRpbWVTdGFtcCkgLy8g
SWYgZGlkRHJhdyBpcyBjYWxsZWQgb3V0c2lkZSBvZiBhIEZyYW1lIHBhaW50LgorICAgICAgICB0
aW1lU3RhbXAgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICAKKyAgICBDYWNo
ZWRSZXNvdXJjZTo6ZGlkQWNjZXNzRGVjb2RlZERhdGEodGltZVN0YW1wKTsKK30KKwordm9pZCBD
YWNoZWRJbWFnZTo6YW5pbWF0aW9uQWR2YW5jZWQoY29uc3QgSW1hZ2UqIGltYWdlKQoreworICAg
IGlmICghaW1hZ2UgfHwgaW1hZ2UgIT0gbV9pbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIENh
Y2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyPENhY2hlZEltYWdlQ2xpZW50PiBjbGllbnRXYWxrZXIo
bV9jbGllbnRzKTsKKyAgICB3aGlsZSAoQ2FjaGVkSW1hZ2VDbGllbnQqIGNsaWVudCA9IGNsaWVu
dFdhbGtlci5uZXh0KCkpCisgICAgICAgIGNsaWVudC0+bmV3SW1hZ2VBbmltYXRpb25GcmFtZUF2
YWlsYWJsZSgqdGhpcyk7Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OmNoYW5nZWRJblJlY3QoY29u
c3QgSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghaW1hZ2Ug
fHwgaW1hZ2UgIT0gbV9pbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIG5vdGlmeU9ic2VydmVy
cygmcmVjdCk7Cit9CisKK2Jvb2wgQ2FjaGVkSW1hZ2U6OmN1cnJlbnRGcmFtZUtub3duVG9CZU9w
YXF1ZShjb25zdCBSZW5kZXJFbGVtZW50KiByZW5kZXJlcikKK3sKKyAgICBJbWFnZSogaW1hZ2Ug
PSBpbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKTsKKyAgICByZXR1cm4gaW1hZ2UtPmN1cnJlbnRG
cmFtZUtub3duVG9CZU9wYXF1ZSgpOworfQorCitib29sIENhY2hlZEltYWdlOjppc09yaWdpbkNs
ZWFuKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKK3sKKyAgICBpZiAoIWltYWdlKCkt
Pmhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAocGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKCpzZWN1cml0eU9yaWdpbikpCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiAhc2VjdXJpdHlPcmlnaW4tPnRhaW50c0NhbnZhcyhyZXNw
b25zZUZvclNhbWVPcmlnaW5Qb2xpY3lDaGVja3MoKS51cmwoKSk7Cit9CisKK0NhY2hlZFJlc291
cmNlOjpSZXZhbGlkYXRpb25EZWNpc2lvbiBDYWNoZWRJbWFnZTo6bWFrZVJldmFsaWRhdGlvbkRl
Y2lzaW9uKENhY2hlUG9saWN5IGNhY2hlUG9saWN5KSBjb25zdAoreworICAgIGlmIChVTkxJS0VM
WShpc01hbnVhbGx5Q2FjaGVkKCkpKSB7CisgICAgICAgIC8vIERvIG5vdCByZXZhbGlkYXRlIG1h
bnVhbGx5IGNhY2hlZCBpbWFnZXMuIFRoaXMgbWVjaGFuaXNtIGlzIHVzZWQgYXMgYQorICAgICAg
ICAvLyB3YXkgdG8gZWZmaWNpZW50bHkgc2hhcmUgYW4gaW1hZ2UgZnJvbSB0aGUgY2xpZW50IHRv
IGNvbnRlbnQgYW5kCisgICAgICAgIC8vIHRoZSBVUkwgZm9yIHRoYXQgaW1hZ2UgbWF5IG5vdCBy
ZXByZXNlbnQgYSByZXNvdXJjZSB0aGF0IGNhbiBiZQorICAgICAgICAvLyByZXRyaWV2ZWQgYnkg
c3RhbmRhcmQgbWVhbnMuIElmIHRoZSBtYW51YWwgY2FjaGluZyBTUEkgaXMgdXNlZCwgaXQgaXMK
KyAgICAgICAgLy8gaW5jdW1iZW50IG9uIHRoZSBjbGllbnQgdG8gb25seSB1c2UgdmFsaWQgcmVz
b3VyY2VzLgorICAgICAgICByZXR1cm4gUmV2YWxpZGF0aW9uRGVjaXNpb246Ok5vOworICAgIH0K
KyAgICByZXR1cm4gQ2FjaGVkUmVzb3VyY2U6Om1ha2VSZXZhbGlkYXRpb25EZWNpc2lvbihjYWNo
ZVBvbGljeSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2ZldGNoL0NhY2hlZEltYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTBkYjk0ZGM5NjkwOWU4YTY2MTAz
YjEwZTUwOWQwOTM3NjgxNzkwMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9mZXRjaC9DYWNoZWRJbWFnZS5oCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICAgIENvcHly
aWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQorICAgIENvcHly
aWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAgICBDb3B5cmln
aHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCisgICAgQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisqLworCisjaWZuZGVmIENhY2hlZEltYWdlX2gKKyNkZWZpbmUgQ2FjaGVkSW1hZ2Vf
aAorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2lu
Y2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAi
SW50U2l6ZUhhc2guaCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCisjaW5jbHVkZSAiU1ZHSW1h
Z2VDYWNoZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ2FjaGVkSW1hZ2VDbGllbnQ7CitjbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRl
cjsKK2NsYXNzIEZsb2F0U2l6ZTsKK2NsYXNzIE1lbW9yeUNhY2hlOworY2xhc3MgUmVuZGVyRWxl
bWVudDsKK2NsYXNzIFJlbmRlck9iamVjdDsKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOworCitzdHJ1
Y3QgTGVuZ3RoOworCitjbGFzcyBDYWNoZWRJbWFnZSBmaW5hbCA6IHB1YmxpYyBDYWNoZWRSZXNv
dXJjZSwgcHVibGljIEltYWdlT2JzZXJ2ZXIgeworICAgIGZyaWVuZCBjbGFzcyBNZW1vcnlDYWNo
ZTsKKworcHVibGljOgorICAgIGVudW0gQ2FjaGVCZWhhdmlvclR5cGUgeyBBdXRvbWF0aWNhbGx5
Q2FjaGVkLCBNYW51YWxseUNhY2hlZCB9OworCisgICAgQ2FjaGVkSW1hZ2UoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiwgU2Vzc2lvbklEKTsKKyAgICBDYWNoZWRJbWFnZShJbWFnZSosIFNlc3Npb25J
RCk7CisgICAgQ2FjaGVkSW1hZ2UoY29uc3QgVVJMJiwgSW1hZ2UqLCBTZXNzaW9uSUQpOworICAg
IENhY2hlZEltYWdlKGNvbnN0IFVSTCYsIEltYWdlKiwgQ2FjaGVCZWhhdmlvclR5cGUsIFNlc3Np
b25JRCk7CisgICAgdmlydHVhbCB+Q2FjaGVkSW1hZ2UoKTsKKworICAgIFdFQkNPUkVfRVhQT1JU
IEltYWdlKiBpbWFnZSgpOyAvLyBSZXR1cm5zIHRoZSBudWxsSW1hZ2UoKSBpZiB0aGUgaW1hZ2Ug
aXMgbm90IGF2YWlsYWJsZSB5ZXQuCisgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2UqIGltYWdlRm9y
UmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0Kik7IC8vIFJldHVybnMgdGhlIG51bGxJbWFnZSgp
IGlmIHRoZSBpbWFnZSBpcyBub3QgYXZhaWxhYmxlIHlldC4KKyAgICBib29sIGhhc0ltYWdlKCkg
Y29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQorICAgIGJvb2wgY3VycmVudEZyYW1lS25v
d25Ub0JlT3BhcXVlKGNvbnN0IFJlbmRlckVsZW1lbnQqKTsKKworICAgIHN0ZDo6cGFpcjxJbWFn
ZSosIGZsb2F0PiBicm9rZW5JbWFnZShmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikgY29uc3Q7IC8v
IFJldHVybnMgYW4gaW1hZ2UgYW5kIHRoZSBpbWFnZSdzIHJlc29sdXRpb24gc2NhbGUgZmFjdG9y
LgorICAgIGJvb2wgd2lsbFBhaW50QnJva2VuSW1hZ2UoKSBjb25zdDsgCisKKyAgICBib29sIGNh
blJlbmRlcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBmbG9hdCBtdWx0aXBsaWVyKSB7
IHJldHVybiAhZXJyb3JPY2N1cnJlZCgpICYmICFpbWFnZVNpemVGb3JSZW5kZXJlcihyZW5kZXJl
ciwgbXVsdGlwbGllcikuaXNFbXB0eSgpOyB9CisKKyAgICB2b2lkIHNldENvbnRhaW5lclNpemVG
b3JSZW5kZXJlcihjb25zdCBDYWNoZWRJbWFnZUNsaWVudCosIGNvbnN0IExheW91dFNpemUmLCBm
bG9hdCk7CisgICAgYm9vbCB1c2VzSW1hZ2VDb250YWluZXJTaXplKCkgY29uc3Q7CisgICAgYm9v
bCBpbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdDsKKyAgICBib29sIGltYWdlSGFzUmVsYXRp
dmVIZWlnaHQoKSBjb25zdDsKKworICAgIHZvaWQgYWRkRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXIm
KSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKikgb3ZlcnJp
ZGU7CisKKyAgICBlbnVtIFNpemVUeXBlIHsKKyAgICAgICAgVXNlZFNpemUsCisgICAgICAgIElu
dHJpbnNpY1NpemUKKyAgICB9OworICAgIC8vIFRoaXMgbWV0aG9kIHRha2VzIGEgem9vbSBtdWx0
aXBsaWVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gaW5jcmVhc2UgdGhlIG5hdHVyYWwgc2l6ZSBvZiB0
aGUgaW1hZ2UgYnkgdGhlIHpvb20uCisgICAgTGF5b3V0U2l6ZSBpbWFnZVNpemVGb3JSZW5kZXJl
cihjb25zdCBSZW5kZXJPYmplY3QqLCBmbG9hdCBtdWx0aXBsaWVyLCBTaXplVHlwZSA9IFVzZWRT
aXplKTsgLy8gcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgY29tcGxldGUgaW1hZ2UuCisgICAgdm9p
ZCBjb21wdXRlSW50cmluc2ljRGltZW5zaW9ucyhMZW5ndGgmIGludHJpbnNpY1dpZHRoLCBMZW5n
dGgmIGludHJpbnNpY0hlaWdodCwgRmxvYXRTaXplJiBpbnRyaW5zaWNSYXRpbyk7CisKKyAgICBi
b29sIGlzTWFudWFsbHlDYWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2lzTWFudWFsbHlDYWNoZWQ7
IH0KKyAgICBSZXZhbGlkYXRpb25EZWNpc2lvbiBtYWtlUmV2YWxpZGF0aW9uRGVjaXNpb24oQ2Fj
aGVQb2xpY3kpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgbG9hZChDYWNoZWRSZXNvdXJjZUxv
YWRlciYsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgYm9v
bCBpc09yaWdpbkNsZWFuKFNlY3VyaXR5T3JpZ2luKik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBj
bGVhcigpOworCisgICAgQ2FjaGVkSW1hZ2UoQ2FjaGVkSW1hZ2UmLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBTZXNzaW9uSUQpOworCisgICAgdm9pZCBzZXRCb2R5RGF0YUZyb20oY29uc3QgQ2Fj
aGVkUmVzb3VyY2UmKSBmaW5hbDsKKworICAgIHZvaWQgY3JlYXRlSW1hZ2UoKTsKKyAgICB2b2lk
IGNsZWFySW1hZ2UoKTsKKyAgICAvLyBJZiBub3QgbnVsbCwgY2hhbmdlUmVjdCBpcyB0aGUgY2hh
bmdlZCBwYXJ0IG9mIHRoZSBpbWFnZS4KKyAgICB2b2lkIG5vdGlmeU9ic2VydmVycyhjb25zdCBJ
bnRSZWN0KiBjaGFuZ2VSZWN0ID0gbnVsbHB0cik7CisgICAgdm9pZCBjaGVja1Nob3VsZFBhaW50
QnJva2VuSW1hZ2UoKTsKKworICAgIHZvaWQgc3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNv
dXJjZSgpIG92ZXJyaWRlOworICAgIGJvb2wgbWF5VHJ5UmVwbGFjZUVuY29kZWREYXRhKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdm9pZCBkaWRBZGRDbGllbnQoQ2Fj
aGVkUmVzb3VyY2VDbGllbnQqKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZFJlbW92ZUNsaWVudChD
YWNoZWRSZXNvdXJjZUNsaWVudCopIG92ZXJyaWRlOworCisgICAgdm9pZCBhbGxDbGllbnRzUmVt
b3ZlZCgpIG92ZXJyaWRlOworICAgIHZvaWQgZGVzdHJveURlY29kZWREYXRhKCkgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIGFkZERhdGEoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKSBv
dmVycmlkZTsKKyAgICB2b2lkIGVycm9yKENhY2hlZFJlc291cmNlOjpTdGF0dXMpIG92ZXJyaWRl
OworICAgIHZvaWQgcmVzcG9uc2VSZWNlaXZlZChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgb3Zl
cnJpZGU7CisKKyAgICAvLyBGb3IgY29tcGF0aWJpbGl0eSwgaW1hZ2VzIGtlZXAgbG9hZGluZyBl
dmVuIGlmIHRoZXJlIGFyZSBIVFRQIGVycm9ycy4KKyAgICBib29sIHNob3VsZElnbm9yZUhUVFBT
dGF0dXNDb2RlRXJyb3JzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAg
Ym9vbCBzdGlsbE5lZWRzTG9hZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICFlcnJvck9jY3Vy
cmVkKCkgJiYgc3RhdHVzKCkgPT0gVW5rbm93biAmJiAhaXNMb2FkaW5nKCk7IH0KKworICAgIC8v
IEltYWdlT2JzZXJ2ZXIKKyAgICB2b2lkIGRlY29kZWRTaXplQ2hhbmdlZChjb25zdCBJbWFnZSos
IGludCBkZWx0YSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWREcmF3KGNvbnN0IEltYWdlKikgb3Zl
cnJpZGU7CisKKyAgICB2b2lkIGFuaW1hdGlvbkFkdmFuY2VkKGNvbnN0IEltYWdlKikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBjaGFuZ2VkSW5SZWN0KGNvbnN0IEltYWdlKiwgY29uc3QgSW50UmVjdCYp
IG92ZXJyaWRlOworCisgICAgdm9pZCBhZGRJbmNyZW1lbnRhbERhdGFCdWZmZXIoU2hhcmVkQnVm
ZmVyJik7CisKKyAgICB2b2lkIGRpZFJlcGxhY2VTaGFyZWRCdWZmZXJDb250ZW50cygpIG92ZXJy
aWRlOworCisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8TGF5b3V0U2l6ZSwgZmxvYXQ+IFNpemVBbmRa
b29tOworICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBDYWNoZWRJbWFnZUNsaWVudCosIFNpemVB
bmRab29tPiBDb250YWluZXJTaXplUmVxdWVzdHM7CisgICAgQ29udGFpbmVyU2l6ZVJlcXVlc3Rz
IG1fcGVuZGluZ0NvbnRhaW5lclNpemVSZXF1ZXN0czsKKworICAgIFJlZlB0cjxJbWFnZT4gbV9p
bWFnZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHSW1hZ2VDYWNoZT4gbV9zdmdJbWFnZUNhY2hl
OworICAgIHVuc2lnbmVkIG1faXNNYW51YWxseUNhY2hlZCA6IDE7CisgICAgdW5zaWduZWQgbV9z
aG91bGRQYWludEJyb2tlbkltYWdlIDogMTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUNIRURfUkVTT1VSQ0UoQ2FjaGVkSW1hZ2UsIENh
Y2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlKQorCisjZW5kaWYgLy8gQ2FjaGVkSW1hZ2VfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZEltYWdlQ2xpZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkSW1hZ2VDbGllbnQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43MjIzNWFjYmY5YWZhNGNlOGM5YTZhYTM2MTlmMzQ5NWQ5NDE5YTlkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZEltYWdlQ2xpZW50
LmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9s
bCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVs
bGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWlu
aWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBD
YWNoZWRJbWFnZUNsaWVudF9oCisjZGVmaW5lIENhY2hlZEltYWdlQ2xpZW50X2gKKworI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQ2FjaGVkSW1hZ2U7CitjbGFzcyBJbnRSZWN0OworCitjbGFzcyBDYWNoZWRJbWFnZUNsaWVu
dCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+
Q2FjaGVkSW1hZ2VDbGllbnQoKSB7IH0KKyAgICBzdGF0aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnRU
eXBlIGV4cGVjdGVkVHlwZSgpIHsgcmV0dXJuIEltYWdlVHlwZTsgfQorICAgIENhY2hlZFJlc291
cmNlQ2xpZW50VHlwZSByZXNvdXJjZUNsaWVudFR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBleHBlY3RlZFR5cGUoKTsgfQorCisgICAgLy8gQ2FsbGVkIHdoZW5ldmVyIGEgZnJhbWUgb2Yg
YW4gaW1hZ2UgY2hhbmdlcyBiZWNhdXNlIHdlIGdvdCBtb3JlIGRhdGEgZnJvbSB0aGUgbmV0d29y
ay4KKyAgICAvLyBJZiBub3QgbnVsbCwgdGhlIEludFJlY3QgaXMgdGhlIGNoYW5nZWQgcmVjdCBv
ZiB0aGUgaW1hZ2UuCisgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChDYWNoZWRJbWFnZSos
IGNvbnN0IEludFJlY3QqID0gbnVsbHB0cikgeyB9CisKKyAgICAvLyBDYWxsZWQgd2hlbiBHSUYg
YW5pbWF0aW9uIHByb2dyZXNzZXMuCisgICAgdmlydHVhbCB2b2lkIG5ld0ltYWdlQW5pbWF0aW9u
RnJhbWVBdmFpbGFibGUoQ2FjaGVkSW1hZ2UmIGltYWdlKSB7IGltYWdlQ2hhbmdlZCgmaW1hZ2Up
OyB9Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2ZldGNoL0NhY2hlZFJhd1Jlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRj
aC9DYWNoZWRSYXdSZXNvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmEwZGY4YjA0ZWNlNTRkYjEwNjYy
NDYyOGY1OGZiYmM3ODFmZGM0MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9mZXRjaC9DYWNoZWRSYXdSZXNvdXJjZS5jcHAKQEAgLTAsMCArMSwyOTcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmF3UmVzb3VyY2UuaCIKKwor
I2luY2x1ZGUgIkNhY2hlZFJhd1Jlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2VDbGllbnRXYWxrZXIuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgor
I2luY2x1ZGUgIkhUVFBIZWFkZXJOYW1lcy5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgor
I2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
Vmlldy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NhY2hlZFJhd1Jlc291cmNlOjpDYWNo
ZWRSYXdSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgVHlwZSB0eXBl
LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQorICAgIDogQ2FjaGVkUmVzb3VyY2UocmVzb3VyY2VSZXF1
ZXN0LCB0eXBlLCBzZXNzaW9uSUQpCisgICAgLCBtX2lkZW50aWZpZXIoMCkKKyAgICAsIG1fYWxs
b3dFbmNvZGVkRGF0YVJlcGxhY2VtZW50KHRydWUpCit7CisgICAgQVNTRVJUKGlzTWFpbk9yTWVk
aWFPclJhd1Jlc291cmNlKCkpOworfQorCitjb25zdCBjaGFyKiBDYWNoZWRSYXdSZXNvdXJjZTo6
Y2FsY3VsYXRlSW5jcmVtZW50YWxEYXRhQ2h1bmsoU2hhcmVkQnVmZmVyKiBkYXRhLCB1bnNpZ25l
ZCYgaW5jcmVtZW50YWxEYXRhTGVuZ3RoKQoreworICAgIGluY3JlbWVudGFsRGF0YUxlbmd0aCA9
IDA7CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHVuc2ln
bmVkIHByZXZpb3VzRGF0YUxlbmd0aCA9IGVuY29kZWRTaXplKCk7CisgICAgQVNTRVJUKGRhdGEt
PnNpemUoKSA+PSBwcmV2aW91c0RhdGFMZW5ndGgpOworICAgIGluY3JlbWVudGFsRGF0YUxlbmd0
aCA9IGRhdGEtPnNpemUoKSAtIHByZXZpb3VzRGF0YUxlbmd0aDsKKyAgICByZXR1cm4gZGF0YS0+
ZGF0YSgpICsgcHJldmlvdXNEYXRhTGVuZ3RoOworfQorCit2b2lkIENhY2hlZFJhd1Jlc291cmNl
OjphZGREYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYgZGF0YSkKK3sKKyAgICBDYWNoZWRSZXNvdXJj
ZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBBU1NF
UlQoZGF0YUJ1ZmZlcmluZ1BvbGljeSgpID09IEJ1ZmZlckRhdGEpOworICAgIG1fZGF0YSA9ICZk
YXRhOworCisgICAgdW5zaWduZWQgaW5jcmVtZW50YWxEYXRhTGVuZ3RoOworICAgIGNvbnN0IGNo
YXIqIGluY3JlbWVudGFsRGF0YSA9IGNhbGN1bGF0ZUluY3JlbWVudGFsRGF0YUNodW5rKCZkYXRh
LCBpbmNyZW1lbnRhbERhdGFMZW5ndGgpOworICAgIHNldEVuY29kZWRTaXplKGRhdGEuc2l6ZSgp
KTsKKyAgICBub3RpZnlDbGllbnRzRGF0YVdhc1JlY2VpdmVkKGluY3JlbWVudGFsRGF0YSwgaW5j
cmVtZW50YWxEYXRhTGVuZ3RoKTsKKyAgICBpZiAoZGF0YUJ1ZmZlcmluZ1BvbGljeSgpID09IERv
Tm90QnVmZmVyRGF0YSkgeworICAgICAgICBpZiAobV9sb2FkZXIpCisgICAgICAgICAgICBtX2xv
YWRlci0+c2V0RGF0YUJ1ZmZlcmluZ1BvbGljeShEb05vdEJ1ZmZlckRhdGEpOworICAgICAgICBj
bGVhcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ2FjaGVkUmVzb3VyY2U6OmFk
ZERhdGFCdWZmZXIoZGF0YSk7Cit9CisKK3ZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OmFkZERhdGEo
Y29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIEFTU0VSVChkYXRhQnVm
ZmVyaW5nUG9saWN5KCkgPT0gRG9Ob3RCdWZmZXJEYXRhKTsKKyAgICBub3RpZnlDbGllbnRzRGF0
YVdhc1JlY2VpdmVkKGRhdGEsIGxlbmd0aCk7CisgICAgQ2FjaGVkUmVzb3VyY2U6OmFkZERhdGEo
ZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6ZmluaXNoTG9hZGlu
ZyhTaGFyZWRCdWZmZXIqIGRhdGEpCit7CisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
UmF3UmVzb3VyY2U+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgRGF0YUJ1ZmZlcmluZ1BvbGlj
eSBkYXRhQnVmZmVyaW5nUG9saWN5ID0gdGhpcy0+ZGF0YUJ1ZmZlcmluZ1BvbGljeSgpOworICAg
IGlmIChkYXRhQnVmZmVyaW5nUG9saWN5ID09IEJ1ZmZlckRhdGEpIHsKKyAgICAgICAgbV9kYXRh
ID0gZGF0YTsKKworICAgICAgICB1bnNpZ25lZCBpbmNyZW1lbnRhbERhdGFMZW5ndGg7CisgICAg
ICAgIGNvbnN0IGNoYXIqIGluY3JlbWVudGFsRGF0YSA9IGNhbGN1bGF0ZUluY3JlbWVudGFsRGF0
YUNodW5rKGRhdGEsIGluY3JlbWVudGFsRGF0YUxlbmd0aCk7CisgICAgICAgIGlmIChkYXRhKQor
ICAgICAgICAgICAgc2V0RW5jb2RlZFNpemUoZGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgbm90aWZ5
Q2xpZW50c0RhdGFXYXNSZWNlaXZlZChpbmNyZW1lbnRhbERhdGEsIGluY3JlbWVudGFsRGF0YUxl
bmd0aCk7CisgICAgfQorCisgICAgbV9hbGxvd0VuY29kZWREYXRhUmVwbGFjZW1lbnQgPSAhbV9s
b2FkZXItPmlzUXVpY2tMb29rUmVzb3VyY2UoKTsKKworICAgIENhY2hlZFJlc291cmNlOjpmaW5p
c2hMb2FkaW5nKGRhdGEpOworICAgIGlmIChkYXRhQnVmZmVyaW5nUG9saWN5ID09IEJ1ZmZlckRh
dGEgJiYgdGhpcy0+ZGF0YUJ1ZmZlcmluZ1BvbGljeSgpID09IERvTm90QnVmZmVyRGF0YSkgewor
ICAgICAgICBpZiAobV9sb2FkZXIpCisgICAgICAgICAgICBtX2xvYWRlci0+c2V0RGF0YUJ1ZmZl
cmluZ1BvbGljeShEb05vdEJ1ZmZlckRhdGEpOworICAgICAgICBjbGVhcigpOworICAgIH0KK30K
Kwordm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6bm90aWZ5Q2xpZW50c0RhdGFXYXNSZWNlaXZlZChj
b25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgaWYgKCFsZW5ndGgpCisg
ICAgICAgIHJldHVybjsKKworICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291
cmNlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2Vy
PENhY2hlZFJhd1Jlc291cmNlQ2xpZW50PiB3KG1fY2xpZW50cyk7CisgICAgd2hpbGUgKENhY2hl
ZFJhd1Jlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkpCisgICAgICAgIGMtPmRhdGFSZWNlaXZl
ZCh0aGlzLCBkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIENhY2hlZFJhd1Jlc291cmNlOjpkaWRB
ZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGMpCit7CisgICAgaWYgKCFoYXNDbGllbnQo
YykpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBUaGUgY2FsbHMgdG8gdGhlIGNsaWVudCBjYW4g
cmVzdWx0IGluIGV2ZW50cyBydW5uaW5nLCBwb3RlbnRpYWxseSBjYXVzaW5nCisgICAgLy8gdGhp
cyByZXNvdXJjZSB0byBiZSBldmljdGVkIGZyb20gdGhlIGNhY2hlIGFuZCBhbGwgY2xpZW50cyB0
byBiZSByZW1vdmVkLAorICAgIC8vIHNvIGEgcHJvdGVjdG9yIGlzIG5lY2Vzc2FyeS4KKyAgICBD
YWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKKyAgICBDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCogY2xpZW50ID0gc3RhdGljX2Nhc3Q8Q2Fj
aGVkUmF3UmVzb3VyY2VDbGllbnQqPihjKTsKKyAgICBzaXplX3QgcmVkaXJlY3RDb3VudCA9IG1f
cmVkaXJlY3RDaGFpbi5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWRpcmVj
dENvdW50OyBpKyspIHsKKyAgICAgICAgUmVkaXJlY3RQYWlyIHJlZGlyZWN0ID0gbV9yZWRpcmVj
dENoYWluW2ldOworICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChyZWRpcmVjdC5tX3Jl
cXVlc3QpOworICAgICAgICBjbGllbnQtPnJlZGlyZWN0UmVjZWl2ZWQodGhpcywgcmVxdWVzdCwg
cmVkaXJlY3QubV9yZWRpcmVjdFJlc3BvbnNlKTsKKyAgICAgICAgaWYgKCFoYXNDbGllbnQoYykp
CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVChyZWRpcmVjdENvdW50ID09
IG1fcmVkaXJlY3RDaGFpbi5zaXplKCkpOworCisgICAgaWYgKCFtX3Jlc3BvbnNlLmlzTnVsbCgp
KSB7CisgICAgICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UobV9yZXNwb25zZSk7CisgICAg
ICAgIGlmICh2YWxpZGF0aW9uQ29tcGxldGluZygpKQorICAgICAgICAgICAgcmVzcG9uc2Uuc2V0
U291cmNlKFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6TWVtb3J5Q2FjaGVBZnRlclZhbGlkYXRp
b24pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCghdmFsaWRhdGlvbkluUHJv
Z3Jlc3MoKSk7CisgICAgICAgICAgICByZXNwb25zZS5zZXRTb3VyY2UoUmVzb3VyY2VSZXNwb25z
ZTo6U291cmNlOjpNZW1vcnlDYWNoZSk7CisgICAgICAgIH0KKyAgICAgICAgY2xpZW50LT5yZXNw
b25zZVJlY2VpdmVkKHRoaXMsIHJlc3BvbnNlKTsKKyAgICB9CisgICAgaWYgKCFoYXNDbGllbnQo
YykpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9kYXRhKQorICAgICAgICBjbGllbnQtPmRh
dGFSZWNlaXZlZCh0aGlzLCBtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpOworICAgIGlm
ICghaGFzQ2xpZW50KGMpKQorICAgICAgIHJldHVybjsKKyAgICBDYWNoZWRSZXNvdXJjZTo6ZGlk
QWRkQ2xpZW50KGNsaWVudCk7Cit9CisKK3ZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OmFsbENsaWVu
dHNSZW1vdmVkKCkKK3sKKyAgICBpZiAobV9sb2FkZXIpCisgICAgICAgIG1fbG9hZGVyLT5jYW5j
ZWxJZk5vdEZpbmlzaGluZygpOworfQorCit2b2lkIENhY2hlZFJhd1Jlc291cmNlOjpyZWRpcmVj
dFJlY2VpdmVkKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UpCit7CisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3Vy
Y2U+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgaWYgKCFyZXNwb25zZS5pc051bGwoKSkgewor
ICAgICAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRSYXdSZXNvdXJjZUNsaWVu
dD4gdyhtX2NsaWVudHMpOworICAgICAgICB3aGlsZSAoQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQq
IGMgPSB3Lm5leHQoKSkKKyAgICAgICAgICAgIGMtPnJlZGlyZWN0UmVjZWl2ZWQodGhpcywgcmVx
dWVzdCwgcmVzcG9uc2UpOworICAgICAgICBtX3JlZGlyZWN0Q2hhaW4uYXBwZW5kKFJlZGlyZWN0
UGFpcihyZXF1ZXN0LCByZXNwb25zZSkpOworICAgIH0KKyAgICBDYWNoZWRSZXNvdXJjZTo6cmVk
aXJlY3RSZWNlaXZlZChyZXF1ZXN0LCByZXNwb25zZSk7Cit9CisKK3ZvaWQgQ2FjaGVkUmF3UmVz
b3VyY2U6OnJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Up
Cit7CisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+IHByb3RlY3Rl
ZFRoaXModGhpcyk7CisgICAgaWYgKCFtX2lkZW50aWZpZXIpCisgICAgICAgIG1faWRlbnRpZmll
ciA9IG1fbG9hZGVyLT5pZGVudGlmaWVyKCk7CisgICAgQ2FjaGVkUmVzb3VyY2U6OnJlc3BvbnNl
UmVjZWl2ZWQocmVzcG9uc2UpOworICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyPENhY2hl
ZFJhd1Jlc291cmNlQ2xpZW50PiB3KG1fY2xpZW50cyk7CisgICAgd2hpbGUgKENhY2hlZFJhd1Jl
c291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkpCisgICAgICAgIGMtPnJlc3BvbnNlUmVjZWl2ZWQo
dGhpcywgbV9yZXNwb25zZSk7Cit9CisKK2Jvb2wgQ2FjaGVkUmF3UmVzb3VyY2U6OnNob3VsZENh
Y2hlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgQ2Fj
aGVkUmVzb3VyY2VDbGllbnRXYWxrZXI8Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQ+IHcobV9jbGll
bnRzKTsKKyAgICB3aGlsZSAoQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQqIGMgPSB3Lm5leHQoKSkg
eworICAgICAgICBpZiAoIWMtPnNob3VsZENhY2hlUmVzcG9uc2UodGhpcywgcmVzcG9uc2UpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6ZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5
dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKK3sKKyAgICBD
YWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudD4gdyhtX2Ns
aWVudHMpOworICAgIHdoaWxlIChDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgp
KQorICAgICAgICBjLT5kYXRhU2VudCh0aGlzLCBieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2Vu
dCk7Cit9CisKK3ZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OnN3aXRjaENsaWVudHNUb1JldmFsaWRh
dGVkUmVzb3VyY2UoKQoreworICAgIEFTU0VSVChtX2xvYWRlcik7CisgICAgLy8gSWYgd2UncmUg
aW4gdGhlIG1pZGRsZSBvZiBhIHN1Y2Nlc3NmdWwgcmV2YWxpZGF0aW9uLCByZXNwb25zZVJlY2Vp
dmVkKCkgaGFzbid0IGJlZW4gY2FsbGVkLCBzbyB3ZSBoYXZlbid0IHNldCBtX2lkZW50aWZpZXIu
CisgICAgQVNTRVJUKCFtX2lkZW50aWZpZXIpOworICAgIGRvd25jYXN0PENhY2hlZFJhd1Jlc291
cmNlPigqcmVzb3VyY2VUb1JldmFsaWRhdGUoKSkubV9pZGVudGlmaWVyID0gbV9sb2FkZXItPmlk
ZW50aWZpZXIoKTsKKyAgICBDYWNoZWRSZXNvdXJjZTo6c3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0
ZWRSZXNvdXJjZSgpOworfQorCit2b2lkIENhY2hlZFJhd1Jlc291cmNlOjpzZXREZWZlcnNMb2Fk
aW5nKGJvb2wgZGVmZXJzKQoreworICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgbV9sb2FkZXIt
PnNldERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKK30KKwordm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6
c2V0RGF0YUJ1ZmZlcmluZ1BvbGljeShEYXRhQnVmZmVyaW5nUG9saWN5IGRhdGFCdWZmZXJpbmdQ
b2xpY3kpCit7CisgICAgbV9vcHRpb25zLmRhdGFCdWZmZXJpbmdQb2xpY3kgPSBkYXRhQnVmZmVy
aW5nUG9saWN5OworfQorCitzdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVIZWFkZXJGb3JDYWNoZVJl
dXNlKEhUVFBIZWFkZXJOYW1lIG5hbWUpCit7CisgICAgc3dpdGNoIChuYW1lKSB7CisgICAgLy8g
RklYTUU6IFRoaXMgbGlzdCBvZiBoZWFkZXJzIHRoYXQgZG9uJ3QgYWZmZWN0IGNhY2hlIHBvbGlj
eSBhbG1vc3QgY2VydGFpbmx5IGlzbid0IGNvbXBsZXRlLgorICAgIGNhc2UgSFRUUEhlYWRlck5h
bWU6OkFjY2VwdDoKKyAgICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpDYWNoZUNvbnRyb2w6CisgICAg
Y2FzZSBIVFRQSGVhZGVyTmFtZTo6UHJhZ21hOgorICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OlB1
cnBvc2U6CisgICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6UmVmZXJlcjoKKyAgICBjYXNlIEhUVFBI
ZWFkZXJOYW1lOjpVc2VyQWdlbnQ6CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBDYWNoZWRSYXdSZXNv
dXJjZTo6Y2FuUmV1c2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0KSBjb25zdAor
eworICAgIGlmIChkYXRhQnVmZmVyaW5nUG9saWN5KCkgPT0gRG9Ob3RCdWZmZXJEYXRhKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9yZXNvdXJjZVJlcXVlc3QuaHR0cE1ldGhv
ZCgpICE9IG5ld1JlcXVlc3QuaHR0cE1ldGhvZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAobV9yZXNvdXJjZVJlcXVlc3QuaHR0cEJvZHkoKSAhPSBuZXdSZXF1ZXN0Lmh0dHBC
b2R5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX3Jlc291cmNlUmVxdWVz
dC5hbGxvd0Nvb2tpZXMoKSAhPSBuZXdSZXF1ZXN0LmFsbG93Q29va2llcygpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobmV3UmVxdWVzdC5pc0NvbmRpdGlvbmFsKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEVuc3VyZSBtb3N0IGhlYWRlcnMgbWF0Y2ggdGhl
IGV4aXN0aW5nIGhlYWRlcnMgYmVmb3JlIGNvbnRpbnVpbmcuCisgICAgLy8gTm90ZSB0aGF0IHRo
ZSBsaXN0IG9mIGlnbm9yZWQgaGVhZGVycyBpbmNsdWRlcyBzb21lIGhlYWRlcnMgZXhwbGljaXRs
eSByZWxhdGVkIHRvIGNhY2hpbmcuCisgICAgLy8gQSBtb3JlIGRldGFpbGVkIGNoZWNrIG9mIGNh
Y2hpbmcgcG9saWN5IHdpbGwgYmUgcGVyZm9ybWVkIGxhdGVyLCB0aGlzIGlzIHNpbXBseSBhIGxp
c3Qgb2YKKyAgICAvLyBoZWFkZXJzIHRoYXQgd2UgbWlnaHQgcGVybWl0IHRvIGJlIGRpZmZlcmVu
dCBhbmQgc3RpbGwgcmV1c2UgdGhlIGV4aXN0aW5nIENhY2hlZFJlc291cmNlLgorICAgIGNvbnN0
IEhUVFBIZWFkZXJNYXAmIG5ld0hlYWRlcnMgPSBuZXdSZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMo
KTsKKyAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBvbGRIZWFkZXJzID0gbV9yZXNvdXJjZVJlcXVl
c3QuaHR0cEhlYWRlckZpZWxkcygpOworCisgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBu
ZXdIZWFkZXJzKSB7CisgICAgICAgIGlmIChoZWFkZXIua2V5QXNIVFRQSGVhZGVyTmFtZSkgewor
ICAgICAgICAgICAgaWYgKCFzaG91bGRJZ25vcmVIZWFkZXJGb3JDYWNoZVJldXNlKGhlYWRlci5r
ZXlBc0hUVFBIZWFkZXJOYW1lLnZhbHVlKCkpCisgICAgICAgICAgICAgICAgJiYgaGVhZGVyLnZh
bHVlICE9IG9sZEhlYWRlcnMuY29tbW9uSGVhZGVycygpLmdldChoZWFkZXIua2V5QXNIVFRQSGVh
ZGVyTmFtZS52YWx1ZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0gZWxzZSBpZiAoaGVhZGVyLnZhbHVlICE9IG9sZEhlYWRlcnMudW5jb21tb25IZWFkZXJzKCku
Z2V0KGhlYWRlci5rZXkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IC8vIEZvciB0aGlzIHNlY29uZCBsb29wLCB3ZSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIGNvbXBh
cmUgdmFsdWVzLCBjaGVja2luZyB0aGF0IHRoZQorICAgIC8vIGtleSBpcyBjb250YWluZWQgaW4g
bmV3SGVhZGVycyBpcyBzdWZmaWNpZW50IGR1ZSB0byB0aGUgcHJldmlvdXMgbG9vcC4KKyAgICBm
b3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IG9sZEhlYWRlcnMpIHsKKyAgICAgICAgaWYgKGhlYWRl
ci5rZXlBc0hUVFBIZWFkZXJOYW1lKSB7CisgICAgICAgICAgICBpZiAoIXNob3VsZElnbm9yZUhl
YWRlckZvckNhY2hlUmV1c2UoaGVhZGVyLmtleUFzSFRUUEhlYWRlck5hbWUudmFsdWUoKSkKKyAg
ICAgICAgICAgICAgICAmJiAhbmV3SGVhZGVycy5jb21tb25IZWFkZXJzKCkuY29udGFpbnMoaGVh
ZGVyLmtleUFzSFRUUEhlYWRlck5hbWUudmFsdWUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKCFuZXdIZWFkZXJzLnVuY29tbW9uSGVhZGVycygp
LmNvbnRhaW5zKGhlYWRlci5rZXkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENhY2hlZFJhd1Jlc291cmNlOjpjbGVhcigp
Cit7CisgICAgbV9kYXRhID0gbnVsbHB0cjsKKyAgICBzZXRFbmNvZGVkU2l6ZSgwKTsKKyAgICBp
ZiAobV9sb2FkZXIpCisgICAgICAgIG1fbG9hZGVyLT5jbGVhclJlc291cmNlRGF0YSgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvZmV0Y2gvQ2FjaGVkUmF3UmVzb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRj
aC9DYWNoZWRSYXdSZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmYjU0ZDg0NTgyYzk1MDA4MTBjYzk2
MGZhMzYxNDU5Yjc1ODk2MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvZmV0Y2gvQ2FjaGVkUmF3UmVzb3VyY2UuaApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgICAgQ29w
eXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQorICAg
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBDYWNoZWRSYXdSZXNvdXJjZV9oCisjZGVmaW5lIENh
Y2hlZFJhd1Jlc291cmNlX2gKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FjaGVkUmVzb3VyY2VDbGllbnQ7CitjbGFzcyBTdWJy
ZXNvdXJjZUxvYWRlcjsKKworY2xhc3MgQ2FjaGVkUmF3UmVzb3VyY2UgZmluYWwgOiBwdWJsaWMg
Q2FjaGVkUmVzb3VyY2UgeworcHVibGljOgorICAgIENhY2hlZFJhd1Jlc291cmNlKFJlc291cmNl
UmVxdWVzdCYsIFR5cGUsIFNlc3Npb25JRCk7CisKKyAgICAvLyBGSVhNRTogQXNzb2NpYXRlZFVS
TExvYWRlciBzaG91bGRuJ3QgYmUgYSBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIgYW5kIHRoZXJl
Zm9yZSBzaG91bGRuJ3QKKyAgICAvLyB1c2UgQ2FjaGVkUmF3UmVzb3VyY2UuIEhvd2V2ZXIsIGl0
IGlzLCBhbmQgaXQgbmVlZHMgdG8gYmUgYWJsZSB0byBkZWZlciBsb2FkaW5nLgorICAgIC8vIFRo
aXMgY2FuIGJlIGZpeGVkIGJ5IHNwbGl0dGluZyBDT1JTIHByZWZsaWdodGluZyBvdXQgb2YgRG9j
dW1lbnRUaHJlYWNhYmxlTG9hZGVyLgorICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnNMb2FkaW5n
KGJvb2wpOworCisgICAgdmlydHVhbCB2b2lkIHNldERhdGFCdWZmZXJpbmdQb2xpY3koRGF0YUJ1
ZmZlcmluZ1BvbGljeSk7CisgICAgCisgICAgLy8gRklYTUU6IFRoaXMgaXMgZXhwb3NlZCBmb3Ig
dGhlIElucHNlY3Rvckluc3RydW1lbnRhdGlvbiBmb3IgcHJlZmxpZ2h0cyBpbiBEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXIuIEl0J3MgYWxzbyByZWFsbHkgbGFtZS4KKyAgICB1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKworICAgIHZvaWQg
Y2xlYXIoKTsKKworICAgIGJvb2wgY2FuUmV1c2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgY29u
c3Q7CisKKyAgICBib29sIHdhc1JlZGlyZWN0ZWQoKSBjb25zdCB7IHJldHVybiAhbV9yZWRpcmVj
dENoYWluLmlzRW1wdHkoKTsgfTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGRpZEFkZENsaWVudChD
YWNoZWRSZXNvdXJjZUNsaWVudCopIG92ZXJyaWRlOworICAgIHZvaWQgYWRkRGF0YUJ1ZmZlcihT
aGFyZWRCdWZmZXImKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZERhdGEoY29uc3QgY2hhciogZGF0
YSwgdW5zaWduZWQgbGVuZ3RoKSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbmlzaExvYWRpbmcoU2hh
cmVkQnVmZmVyKikgb3ZlcnJpZGU7CisKKyAgICBib29sIHNob3VsZElnbm9yZUhUVFBTdGF0dXND
b2RlRXJyb3JzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZvaWQgYWxs
Q2xpZW50c1JlbW92ZWQoKSBvdmVycmlkZTsKKworICAgIHZvaWQgcmVkaXJlY3RSZWNlaXZlZChS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgb3ZlcnJpZGU7CisgICAg
dm9pZCByZXNwb25zZVJlY2VpdmVkKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSBvdmVycmlkZTsK
KyAgICBib29sIHNob3VsZENhY2hlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIG92
ZXJyaWRlOworICAgIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2Vu
dCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIHN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UoKSBvdmVycmlkZTsKKyAg
ICBib29sIG1heVRyeVJlcGxhY2VFbmNvZGVkRGF0YSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fYWxsb3dFbmNvZGVkRGF0YVJlcGxhY2VtZW50OyB9CisKKyAgICBjb25zdCBjaGFyKiBjYWxj
dWxhdGVJbmNyZW1lbnRhbERhdGFDaHVuayhTaGFyZWRCdWZmZXIqLCB1bnNpZ25lZCYgaW5jcmVt
ZW50YWxEYXRhTGVuZ3RoKTsKKyAgICB2b2lkIG5vdGlmeUNsaWVudHNEYXRhV2FzUmVjZWl2ZWQo
Y29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKTsKKworI2lmIFVTRShTT1VQKQorICAg
IGNoYXIqIGdldE9yQ3JlYXRlUmVhZEJ1ZmZlcihzaXplX3QgcmVxdWVzdGVkU2l6ZSwgc2l6ZV90
JiBhY3R1YWxTaXplKSBvdmVycmlkZTsKKyNlbmRpZgorCisgICAgdW5zaWduZWQgbG9uZyBtX2lk
ZW50aWZpZXI7CisgICAgYm9vbCBtX2FsbG93RW5jb2RlZERhdGFSZXBsYWNlbWVudDsKKworICAg
IHN0cnVjdCBSZWRpcmVjdFBhaXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGljaXQgUmVk
aXJlY3RQYWlyKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKKyAgICAgICAgICAgIDogbV9yZXF1ZXN0KHJlcXVl
c3QpCisgICAgICAgICAgICAsIG1fcmVkaXJlY3RSZXNwb25zZShyZWRpcmVjdFJlc3BvbnNlKQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QgbV9y
ZXF1ZXN0OworICAgICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlIG1fcmVkaXJlY3RSZXNwb25z
ZTsKKyAgICB9OworCisgICAgVmVjdG9yPFJlZGlyZWN0UGFpcj4gbV9yZWRpcmVjdENoYWluOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JF
R0lOKFdlYkNvcmU6OkNhY2hlZFJhd1Jlc291cmNlKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShj
b25zdCBXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpIHsgcmV0dXJuIHJlc291cmNl
LmlzTWFpbk9yTWVkaWFPclJhd1Jlc291cmNlKCk7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RU5EKCkKKworI2VuZGlmIC8vIENhY2hlZFJhd1Jlc291cmNlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRSYXdSZXNvdXJjZUNsaWVudC5oIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJhd1Jlc291cmNlQ2xpZW50LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMWUwYzlmZGY5MTg0Yzk0NWFmY2UyOWNlZDhlOWUwOWE2YWFiM2EzYgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRSYXdSZXNvdXJjZUNsaWVu
dC5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25v
bGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCisgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVl
bGxlciA8bXVlbGxlckBrZGUub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2Vp
bmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBDYWNoZWRSZXNvdXJjZTsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsK
K2NsYXNzIFJlc291cmNlUmVzcG9uc2U7CisKK2NsYXNzIENhY2hlZFJhd1Jlc291cmNlQ2xpZW50
IDogcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5D
YWNoZWRSYXdSZXNvdXJjZUNsaWVudCgpIHsgfQorICAgIHN0YXRpYyBDYWNoZWRSZXNvdXJjZUNs
aWVudFR5cGUgZXhwZWN0ZWRUeXBlKCkgeyByZXR1cm4gUmF3UmVzb3VyY2VUeXBlOyB9CisgICAg
Q2FjaGVkUmVzb3VyY2VDbGllbnRUeXBlIHJlc291cmNlQ2xpZW50VHlwZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGV4cGVjdGVkVHlwZSgpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGF0YVNl
bnQoQ2FjaGVkUmVzb3VyY2UqLCB1bnNpZ25lZCBsb25nIGxvbmcgLyogYnl0ZXNTZW50ICovLCB1
bnNpZ25lZCBsb25nIGxvbmcgLyogdG90YWxCeXRlc1RvQmVTZW50ICovKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgcmVzcG9uc2VSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSosIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2FjaGVSZXNwb25zZShDYWNo
ZWRSZXNvdXJjZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGRhdGFSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSosIGNvbnN0IGNoYXIq
IC8qIGRhdGEgKi8sIGludCAvKiBsZW5ndGggKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZWRp
cmVjdFJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpIHsgfQorI2lmIFVTRShTT1VQKQorICAgIHZpcnR1YWwgY2hhciogZ2V0
T3JDcmVhdGVSZWFkQnVmZmVyKENhY2hlZFJlc291cmNlKiwgc2l6ZV90IC8qIHJlcXVlc3RlZFNp
emUgKi8sIHNpemVfdCYgLyogYWN0dWFsU2l6ZSAqLykgeyByZXR1cm4gbnVsbHB0cjsgfQorI2Vu
ZGlmCit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2Fj
aGVkUmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291
cmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mMTNhZTYyYTEzYWQwY2Q4ZmIxMTI5YTNiZTJjZTJjYjhmZmEz
NWE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hl
ZFJlc291cmNlLmNwcApAQCAtMCwwICsxLDkzNSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5
OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDAy
IFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYg
U2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCisgICAgQ29weXJpZ2h0IChDKSAy
MDA0LTIwMTEsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgorCisjaW5jbHVkZSAi
Q2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudFdh
bGtlci5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJDcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wu
aCIKKyNpbmNsdWRlICJEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oIgorI2luY2x1ZGUgIkRpYWdu
b3N0aWNMb2dnaW5nS2V5cy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9j
dW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1l
TG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiSFRUUEhlYWRlck5hbWVzLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiVVJMLmgiCisjaW5jbHVkZSAi
TG9hZGVyU3RyYXRlZ3kuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTWFpbkZy
YW1lLmgiCisjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIK
KyNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgi
CisjaW5jbHVkZSAiU2VjdXJpdHlQb2xpY3kuaCIKKyNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRl
ci5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgorI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgVVNFKFFVSUNLX0xPT0spCisjaW5jbHVkZSAiUXVp
Y2tMb29rLmgiCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitSZXNvdXJjZUxvYWRQcmlvcml0eSBDYWNoZWRSZXNvdXJjZTo6ZGVmYXVsdFBy
aW9yaXR5Rm9yUmVzb3VyY2VUeXBlKFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpNYWluUmVzb3VyY2U6CisgICAgICAgIHJldHVybiBS
ZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUhpZ2g7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6
Q1NTU3R5bGVTaGVldDoKKyAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5OjpIaWdo
OworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRT
KQorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0ZvbnRSZXNvdXJjZToKKyNlbmRpZgorICAg
IGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok1lZGlhUmVzb3VyY2U6CisgICAgY2FzZSBDYWNoZWRSZXNv
dXJjZTo6Rm9udFJlc291cmNlOgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNl
OgorICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6Ok1lZGl1bTsKKyAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgorICAgICAgICByZXR1cm4gUmVzb3VyY2VM
b2FkUHJpb3JpdHk6OkxvdzsKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpYU0xTdHlsZVNoZWV0OgorICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6
OkhpZ2g7CisjZW5kaWYKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdEb2N1bWVudFJlc291
cmNlOgorICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdzsKKyNpZiBFTkFC
TEUoTElOS19QUkVGRVRDSCkKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rUHJlZmV0Y2g6
CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6VmVyeUxvdzsKKyAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpMaW5rU3VicmVzb3VyY2U6CisgICAgICAgIHJldHVybiBSZXNvdXJj
ZUxvYWRQcmlvcml0eTo6VmVyeUxvdzsKKyNlbmRpZgorI2lmIEVOQUJMRShWSURFT19UUkFDSykK
KyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpUZXh0VHJhY2tSZXNvdXJjZToKKyAgICAgICAgcmV0
dXJuIFJlc291cmNlTG9hZFByaW9yaXR5OjpMb3c7CisjZW5kaWYKKyAgICB9CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5OjpMb3c7Cit9
CisKK3N0YXRpYyBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIGRlYWREZWNvZGVkRGF0YURlbGV0
aW9uSW50ZXJ2YWxGb3JSZXNvdXJjZVR5cGUoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSkKK3sK
KyAgICBpZiAodHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0KQorICAgICAgICByZXR1cm4g
c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB7IDAgfTsKKworICAgIHJldHVybiBNZW1vcnlDYWNo
ZTo6c2luZ2xldG9uKCkuZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCgpOworfQorCitE
RUZJTkVfREVCVUdfT05MWV9HTE9CQUwoUmVmQ291bnRlZExlYWtDb3VudGVyLCBjYWNoZWRSZXNv
dXJjZUxlYWtDb3VudGVyLCAoIkNhY2hlZFJlc291cmNlIikpOworCitDYWNoZWRSZXNvdXJjZTo6
Q2FjaGVkUmVzb3VyY2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBUeXBlIHR5cGUs
IFNlc3Npb25JRCBzZXNzaW9uSUQpCisgICAgOiBtX3Jlc291cmNlUmVxdWVzdChyZXF1ZXN0KQor
ICAgICwgbV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXIoKnRoaXMsICZDYWNoZWRSZXNvdXJjZTo6
ZGVzdHJveURlY29kZWREYXRhLCBkZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsRm9yUmVz
b3VyY2VUeXBlKHR5cGUpKQorICAgICwgbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQorICAgICwgbV9s
b2FkUHJpb3JpdHkoZGVmYXVsdFByaW9yaXR5Rm9yUmVzb3VyY2VUeXBlKHR5cGUpKQorICAgICwg
bV9yZXNwb25zZVRpbWVzdGFtcChzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKSkKKyAg
ICAsIG1fbGFzdERlY29kZWRBY2Nlc3NUaW1lKDApCisgICAgLCBtX2xvYWRGaW5pc2hUaW1lKDAp
CisgICAgLCBtX2VuY29kZWRTaXplKDApCisgICAgLCBtX2RlY29kZWRTaXplKDApCisgICAgLCBt
X2FjY2Vzc0NvdW50KDApCisgICAgLCBtX2hhbmRsZUNvdW50KDApCisgICAgLCBtX3ByZWxvYWRD
b3VudCgwKQorICAgICwgbV9wcmVsb2FkUmVzdWx0KFByZWxvYWROb3RSZWZlcmVuY2VkKQorICAg
ICwgbV9yZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyKGZhbHNlKQorICAgICwgbV9pbkNhY2hl
KGZhbHNlKQorICAgICwgbV9sb2FkaW5nKGZhbHNlKQorICAgICwgbV9zd2l0Y2hpbmdDbGllbnRz
VG9SZXZhbGlkYXRlZFJlc291cmNlKGZhbHNlKQorICAgICwgbV90eXBlKHR5cGUpCisgICAgLCBt
X3N0YXR1cyhQZW5kaW5nKQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1fZGVsZXRlZChmYWxzZSkK
KyAgICAsIG1fbHJ1SW5kZXgoMCkKKyNlbmRpZgorICAgICwgbV9vd25pbmdDYWNoZWRSZXNvdXJj
ZUxvYWRlcihudWxscHRyKQorICAgICwgbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZShudWxscHRyKQor
ICAgICwgbV9wcm94eVJlc291cmNlKG51bGxwdHIpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSB1
bnNpZ25lZCh0eXBlKSk7IC8vIG1fdHlwZSBpcyBhIGJpdGZpZWxkLCBzbyB0aGlzIHRlc3RzIGNh
cmVsZXNzIHVwZGF0ZXMgb2YgdGhlIGVudW0uCisgICAgQVNTRVJUKHNlc3Npb25JRC5pc1ZhbGlk
KCkpOworI2lmbmRlZiBOREVCVUcKKyAgICBjYWNoZWRSZXNvdXJjZUxlYWtDb3VudGVyLmluY3Jl
bWVudCgpOworI2VuZGlmCisKKyAgICBpZiAoIW1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLmhhc0Zy
YWdtZW50SWRlbnRpZmllcigpKQorICAgICAgICByZXR1cm47CisgICAgVVJMIHVybEZvckNhY2hl
ID0gTWVtb3J5Q2FjaGU6OnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcklmTmVlZGVkKG1fcmVzb3Vy
Y2VSZXF1ZXN0LnVybCgpKTsKKyAgICBpZiAodXJsRm9yQ2FjaGUuaGFzRnJhZ21lbnRJZGVudGlm
aWVyKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2ZyYWdtZW50SWRlbnRpZmllckZvclJlcXVl
c3QgPSBtX3Jlc291cmNlUmVxdWVzdC51cmwoKS5mcmFnbWVudElkZW50aWZpZXIoKTsKKyAgICBt
X3Jlc291cmNlUmVxdWVzdC5zZXRVUkwodXJsRm9yQ2FjaGUpOworfQorCitDYWNoZWRSZXNvdXJj
ZTo6fkNhY2hlZFJlc291cmNlKCkKK3sKKyAgICBBU1NFUlQoIW1fcmVzb3VyY2VUb1JldmFsaWRh
dGUpOyAvLyBTaG91bGQgYmUgdHJ1ZSBiZWNhdXNlIGNhbkRlbGV0ZSgpIGNoZWNrcyB0aGlzLgor
ICAgIEFTU0VSVChjYW5EZWxldGUoKSk7CisgICAgQVNTRVJUKCFpbkNhY2hlKCkpOworICAgIEFT
U0VSVCghbV9kZWxldGVkKTsKKyAgICBBU1NFUlQodXJsKCkuaXNOdWxsKCkgfHwgIWFsbG93c0Nh
Y2hpbmcoKSB8fCBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkucmVzb3VyY2VGb3JSZXF1ZXN0KHJl
c291cmNlUmVxdWVzdCgpLCBzZXNzaW9uSUQoKSkgIT0gdGhpcyk7CisKKyNpZm5kZWYgTkRFQlVH
CisgICAgbV9kZWxldGVkID0gdHJ1ZTsKKyAgICBjYWNoZWRSZXNvdXJjZUxlYWtDb3VudGVyLmRl
Y3JlbWVudCgpOworI2VuZGlmCisKKyAgICBpZiAobV9vd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRl
cikKKyAgICAgICAgbV9vd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlci0+cmVtb3ZlQ2FjaGVkUmVz
b3VyY2UoKnRoaXMpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlOjpmYWlsQmVmb3JlU3RhcnRp
bmcoKQoreworICAgIC8vIEZJWE1FOiBXaGF0IGlmIHJlc291cmNlcyBpbiBvdGhlciBmcmFtZXMg
d2VyZSB3YWl0aW5nIGZvciB0aGlzIHJldmFsaWRhdGlvbj8KKyAgICBMT0coUmVzb3VyY2VMb2Fk
aW5nLCAiQ2Fubm90IHN0YXJ0IGxvYWRpbmcgJyVzJyIsIHVybCgpLnN0cmluZygpLmxhdGluMSgp
LmRhdGEoKSk7CisgICAgaWYgKGFsbG93c0NhY2hpbmcoKSAmJiBtX3Jlc291cmNlVG9SZXZhbGlk
YXRlKQorICAgICAgICBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkucmV2YWxpZGF0aW9uRmFpbGVk
KCp0aGlzKTsKKyAgICBlcnJvcihDYWNoZWRSZXNvdXJjZTo6TG9hZEVycm9yKTsKK30KKworc3Rh
dGljIHZvaWQgYWRkQWRkaXRpb25hbFJlcXVlc3RIZWFkZXJzVG9SZXF1ZXN0KFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGNhY2hlZFJlc291cmNl
TG9hZGVyLCBDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpCit7CisgICAgaWYgKHJlc291cmNlLnR5
cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6TWFpblJlc291cmNlKQorICAgICAgICByZXR1cm47Cisg
ICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBtYXkgdHJ5IHRvIGxvYWQgcmVzb3VyY2VzIGluIGZyYW1l
bGVzcyBkb2N1bWVudHMuIFN1Y2ggbG9hZHMgYWx3YXlzIGZhaWwuCisgICAgLy8gRklYTUU6IFdl
IHNob3VsZG4ndCBnZXQgdGhpcyBmYXIuCisgICAgaWYgKCFjYWNoZWRSZXNvdXJjZUxvYWRlci5m
cmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBOb3RlOiBXZSBza2lwIHRoZSBDb250
ZW50LVNlY3VyaXR5LVBvbGljeSBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2hlY2sKKyAgICAvLyB0
aGUgQ29udGVudC1TZWN1cml0eS1Qb2xpY3kgYXQgdGhlIENhY2hlZFJlc291cmNlTG9hZGVyIGxh
eWVyIHNvIHdlIGNhbgorICAgIC8vIGhhbmRsZSBkaWZmZXJlbnQgcmVzb3VyY2UgdHlwZXMgZGlm
ZmVyZW50bHkuCisgICAgRnJhbWVMb2FkZXImIGZyYW1lTG9hZGVyID0gY2FjaGVkUmVzb3VyY2VM
b2FkZXIuZnJhbWUoKS0+bG9hZGVyKCk7CisgICAgU3RyaW5nIG91dGdvaW5nUmVmZXJyZXI7Cisg
ICAgU3RyaW5nIG91dGdvaW5nT3JpZ2luOworICAgIGlmIChyZXF1ZXN0Lmh0dHBSZWZlcnJlcigp
LmlzTnVsbCgpKSB7CisgICAgICAgIG91dGdvaW5nUmVmZXJyZXIgPSBmcmFtZUxvYWRlci5vdXRn
b2luZ1JlZmVycmVyKCk7CisgICAgICAgIG91dGdvaW5nT3JpZ2luID0gZnJhbWVMb2FkZXIub3V0
Z29pbmdPcmlnaW4oKTsKKyAgICB9IGVsc2UgeworICAgICAgICBvdXRnb2luZ1JlZmVycmVyID0g
cmVxdWVzdC5odHRwUmVmZXJyZXIoKTsKKyAgICAgICAgb3V0Z29pbmdPcmlnaW4gPSBTZWN1cml0
eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhvdXRnb2luZ1JlZmVycmVyKS0+dG9TdHJpbmcoKTsK
KyAgICB9CisKKyAgICAvLyBGSVhNRTogUmVmYWN0b3IgU2VjdXJpdHlQb2xpY3k6OmdlbmVyYXRl
UmVmZXJyZXJIZWFkZXIgdG8gYWxpZ24gd2l0aCBuZXcgdGVybWlub2xvZ3kgdXNlZCBpbiBodHRw
czovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS4KKyAgICBzd2l0Y2gg
KHJlc291cmNlLm9wdGlvbnMoKS5yZWZlcnJlclBvbGljeSkgeworICAgIGNhc2UgRmV0Y2hPcHRp
b25zOjpSZWZlcnJlclBvbGljeTo6RW1wdHlTdHJpbmc6IHsKKyAgICAgICAgUmVmZXJyZXJQb2xp
Y3kgcmVmZXJyZXJQb2xpY3kgPSBjYWNoZWRSZXNvdXJjZUxvYWRlci5kb2N1bWVudCgpID8gY2Fj
aGVkUmVzb3VyY2VMb2FkZXIuZG9jdW1lbnQoKS0+cmVmZXJyZXJQb2xpY3koKSA6IFJlZmVycmVy
UG9saWN5OjpEZWZhdWx0OworICAgICAgICBvdXRnb2luZ1JlZmVycmVyID0gU2VjdXJpdHlQb2xp
Y3k6OmdlbmVyYXRlUmVmZXJyZXJIZWFkZXIocmVmZXJyZXJQb2xpY3ksIHJlcXVlc3QudXJsKCks
IG91dGdvaW5nUmVmZXJyZXIpOworICAgICAgICBicmVhazsgfQorICAgIGNhc2UgRmV0Y2hPcHRp
b25zOjpSZWZlcnJlclBvbGljeTo6Tm9SZWZlcnJlcldoZW5Eb3duZ3JhZGU6CisgICAgICAgIG91
dGdvaW5nUmVmZXJyZXIgPSBTZWN1cml0eVBvbGljeTo6Z2VuZXJhdGVSZWZlcnJlckhlYWRlcihS
ZWZlcnJlclBvbGljeTo6RGVmYXVsdCwgcmVxdWVzdC51cmwoKSwgb3V0Z29pbmdSZWZlcnJlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmV0Y2hPcHRpb25zOjpSZWZlcnJlclBvbGljeTo6
Tm9SZWZlcnJlcjoKKyAgICAgICAgb3V0Z29pbmdSZWZlcnJlciA9IFN0cmluZygpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEZldGNoT3B0aW9uczo6UmVmZXJyZXJQb2xpY3k6Ok9yaWdpbjoK
KyAgICAgICAgb3V0Z29pbmdSZWZlcnJlciA9IFNlY3VyaXR5UG9saWN5OjpnZW5lcmF0ZVJlZmVy
cmVySGVhZGVyKFJlZmVycmVyUG9saWN5OjpPcmlnaW4sIHJlcXVlc3QudXJsKCksIG91dGdvaW5n
UmVmZXJyZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZldGNoT3B0aW9uczo6UmVmZXJy
ZXJQb2xpY3k6Ok9yaWdpbldoZW5Dcm9zc09yaWdpbjoKKyAgICAgICAgaWYgKHJlc291cmNlLmlz
Q3Jvc3NPcmlnaW4oKSkKKyAgICAgICAgICAgIG91dGdvaW5nUmVmZXJyZXIgPSBTZWN1cml0eVBv
bGljeTo6Z2VuZXJhdGVSZWZlcnJlckhlYWRlcihSZWZlcnJlclBvbGljeTo6T3JpZ2luLCByZXF1
ZXN0LnVybCgpLCBvdXRnb2luZ1JlZmVycmVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
ZXRjaE9wdGlvbnM6OlJlZmVycmVyUG9saWN5OjpVbnNhZmVVcmw6CisgICAgICAgIGJyZWFrOwor
ICAgIH07CisKKyAgICBpZiAob3V0Z29pbmdSZWZlcnJlci5pc0VtcHR5KCkpCisgICAgICAgIHJl
cXVlc3QuY2xlYXJIVFRQUmVmZXJyZXIoKTsKKyAgICBlbHNlCisgICAgICAgIHJlcXVlc3Quc2V0
SFRUUFJlZmVycmVyKG91dGdvaW5nUmVmZXJyZXIpOworICAgIEZyYW1lTG9hZGVyOjphZGRIVFRQ
T3JpZ2luSWZOZWVkZWQocmVxdWVzdCwgb3V0Z29pbmdPcmlnaW4pOworCisgICAgZnJhbWVMb2Fk
ZXIuYWRkRXh0cmFGaWVsZHNUb1N1YnJlc291cmNlUmVxdWVzdChyZXF1ZXN0KTsKK30KKwordm9p
ZCBDYWNoZWRSZXNvdXJjZTo6YWRkQWRkaXRpb25hbFJlcXVlc3RIZWFkZXJzKENhY2hlZFJlc291
cmNlTG9hZGVyJiBsb2FkZXIpCit7CisgICAgYWRkQWRkaXRpb25hbFJlcXVlc3RIZWFkZXJzVG9S
ZXF1ZXN0KG1fcmVzb3VyY2VSZXF1ZXN0LCBsb2FkZXIsICp0aGlzKTsKK30KKwordm9pZCBDYWNo
ZWRSZXNvdXJjZTo6Y29tcHV0ZU9yaWdpbihDYWNoZWRSZXNvdXJjZUxvYWRlciYgbG9hZGVyKQor
eworICAgIGlmICh0eXBlKCkgPT0gTWFpblJlc291cmNlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBBU1NFUlQobG9hZGVyLmRvY3VtZW50KCkpOworICAgIGlmIChtX3Jlc291cmNlUmVxdWVzdC5o
YXNIVFRQT3JpZ2luKCkpCisgICAgICAgIG1fb3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0
ZUZyb21TdHJpbmcobV9yZXNvdXJjZVJlcXVlc3QuaHR0cE9yaWdpbigpKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fb3JpZ2luID0gbG9hZGVyLmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCk7Cisg
ICAgQVNTRVJUKG1fb3JpZ2luKTsKKworICAgIGlmICghKG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgp
LnByb3RvY29sSXNEYXRhKCkgJiYgbV9vcHRpb25zLnNhbWVPcmlnaW5EYXRhVVJMRmxhZyA9PSBT
YW1lT3JpZ2luRGF0YVVSTEZsYWc6OlNldCkgJiYgIW1fb3JpZ2luLT5jYW5SZXF1ZXN0KG1fcmVz
b3VyY2VSZXF1ZXN0LnVybCgpKSkKKyAgICAgICAgc2V0Q3Jvc3NPcmlnaW4oKTsKKworICAgIGFk
ZEFkZGl0aW9uYWxSZXF1ZXN0SGVhZGVycyhsb2FkZXIpOworfQorCit2b2lkIENhY2hlZFJlc291
cmNlOjpsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyJiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgY29u
c3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKQoreworICAgIGlmICghY2FjaGVkUmVz
b3VyY2VMb2FkZXIuZnJhbWUoKSkgeworICAgICAgICBmYWlsQmVmb3JlU3RhcnRpbmcoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGcmFtZSYgZnJhbWUgPSAqY2FjaGVkUmVzb3VyY2VM
b2FkZXIuZnJhbWUoKTsKKworICAgIC8vIFByZXZlbnQgbmV3IGxvYWRzIGlmIHdlIGFyZSBpbiB0
aGUgUGFnZUNhY2hlIG9yIGJlaW5nIGFkZGVkIHRvIHRoZSBQYWdlQ2FjaGUuCisgICAgaWYgKGZy
YW1lLnBhZ2UoKSAmJiBmcmFtZS5wYWdlKCktPmluUGFnZUNhY2hlKCkpIHsKKyAgICAgICAgZmFp
bEJlZm9yZVN0YXJ0aW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGcmFtZUxv
YWRlciYgZnJhbWVMb2FkZXIgPSBmcmFtZS5sb2FkZXIoKTsKKyAgICBpZiAob3B0aW9ucy5zZWN1
cml0eUNoZWNrID09IERvU2VjdXJpdHlDaGVjayAmJiAoZnJhbWVMb2FkZXIuc3RhdGUoKSA9PSBG
cmFtZVN0YXRlUHJvdmlzaW9uYWwgfHwgIWZyYW1lTG9hZGVyLmFjdGl2ZURvY3VtZW50TG9hZGVy
KCkgfHwgZnJhbWVMb2FkZXIuYWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+aXNTdG9wcGluZygpKSkg
eworICAgICAgICBmYWlsQmVmb3JlU3RhcnRpbmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fb3B0aW9ucyA9IG9wdGlvbnM7CisgICAgbV9sb2FkaW5nID0gdHJ1ZTsKKworI2lm
IFVTRShRVUlDS19MT09LKQorICAgIGlmICghbV9yZXNvdXJjZVJlcXVlc3QuaXNOdWxsKCkgJiYg
bV9yZXNvdXJjZVJlcXVlc3QudXJsKCkucHJvdG9jb2xJcyhRTFByZXZpZXdQcm90b2NvbCgpKSkg
eworICAgICAgICAvLyBXaGVuIFF1aWNrTG9vayBpcyBpbnZva2VkIHRvIGNvbnZlcnQgYSBkb2N1
bWVudCwgaXQgcmV0dXJucyBhIHVuaXF1ZSBVUkwgaW4gdGhlCisgICAgICAgIC8vIE5TVVJMUmVw
b25zZSBmb3IgdGhlIG1haW4gZG9jdW1lbnQuIFRvIG1ha2Ugc2FmZVFMVVJMRm9yRG9jdW1lbnRV
UkxBbmRSZXNvdXJjZVVSTCgpCisgICAgICAgIC8vIHdvcmssIHdlIG5lZWQgdG8gdXNlIHRoZSBR
TCBVUkwgbm90IHRoZSBvcmlnaW5hbCBVUkwuCisgICAgICAgIGNvbnN0IFVSTCYgZG9jdW1lbnRV
UkwgPSBmcmFtZUxvYWRlci5kb2N1bWVudExvYWRlcigpLT5yZXNwb25zZSgpLnVybCgpOworICAg
ICAgICBtX3Jlc291cmNlUmVxdWVzdC5zZXRVUkwoc2FmZVFMVVJMRm9yRG9jdW1lbnRVUkxBbmRS
ZXNvdXJjZVVSTChkb2N1bWVudFVSTCwgdXJsKCkpKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlm
ICghYWNjZXB0KCkuaXNFbXB0eSgpKQorICAgICAgICBtX3Jlc291cmNlUmVxdWVzdC5zZXRIVFRQ
QWNjZXB0KGFjY2VwdCgpKTsKKworICAgIGlmIChpc0NhY2hlVmFsaWRhdG9yKCkpIHsKKyAgICAg
ICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlVG9SZXZhbGlkYXRlID0gbV9yZXNvdXJjZVRvUmV2
YWxpZGF0ZTsKKyAgICAgICAgQVNTRVJUKHJlc291cmNlVG9SZXZhbGlkYXRlLT5jYW5Vc2VDYWNo
ZVZhbGlkYXRvcigpKTsKKyAgICAgICAgQVNTRVJUKHJlc291cmNlVG9SZXZhbGlkYXRlLT5pc0xv
YWRlZCgpKTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBsYXN0TW9kaWZpZWQgPSByZXNvdXJjZVRv
UmV2YWxpZGF0ZS0+cmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6Okxh
c3RNb2RpZmllZCk7CisgICAgICAgIGNvbnN0IFN0cmluZyYgZVRhZyA9IHJlc291cmNlVG9SZXZh
bGlkYXRlLT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6RVRhZyk7
CisgICAgICAgIGlmICghbGFzdE1vZGlmaWVkLmlzRW1wdHkoKSB8fCAhZVRhZy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIEFTU0VSVChjYWNoZWRSZXNvdXJjZUxvYWRlci5jYWNoZVBvbGljeSh0
eXBlKCkpICE9IENhY2hlUG9saWN5UmVsb2FkKTsKKyAgICAgICAgICAgIGlmIChjYWNoZWRSZXNv
dXJjZUxvYWRlci5jYWNoZVBvbGljeSh0eXBlKCkpID09IENhY2hlUG9saWN5UmV2YWxpZGF0ZSkK
KyAgICAgICAgICAgICAgICBtX3Jlc291cmNlUmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoSFRU
UEhlYWRlck5hbWU6OkNhY2hlQ29udHJvbCwgIm1heC1hZ2U9MCIpOworICAgICAgICAgICAgaWYg
KCFsYXN0TW9kaWZpZWQuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIG1fcmVzb3VyY2VSZXF1
ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6SWZNb2RpZmllZFNpbmNlLCBs
YXN0TW9kaWZpZWQpOworICAgICAgICAgICAgaWYgKCFlVGFnLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICBtX3Jlc291cmNlUmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5h
bWU6OklmTm9uZU1hdGNoLCBlVGFnKTsKKyAgICAgICAgfQorICAgIH0KKworI2lmIEVOQUJMRShM
SU5LX1BSRUZFVENIKQorICAgIGlmICh0eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVm
ZXRjaCB8fCB0eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OkxpbmtTdWJyZXNvdXJjZSkKKyAgICAg
ICAgbV9yZXNvdXJjZVJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpQ
dXJwb3NlLCAicHJlZmV0Y2giKTsKKyNlbmRpZgorICAgIG1fcmVzb3VyY2VSZXF1ZXN0LnNldFBy
aW9yaXR5KGxvYWRQcmlvcml0eSgpKTsKKworICAgIGNvbXB1dGVPcmlnaW4oY2FjaGVkUmVzb3Vy
Y2VMb2FkZXIpOworCisgICAgLy8gRklYTUU6IEl0J3MgdW5mb3J0dW5hdGUgdGhhdCB0aGUgY2Fj
aGUgbGF5ZXIgYW5kIGJlbG93IGdldCB0byBrbm93IGFueXRoaW5nIGFib3V0IGZyYWdtZW50IGlk
ZW50aWZpZXJzLgorICAgIC8vIFdlIHNob3VsZCBsb29rIGludG8gcmVtb3ZpbmcgdGhlIGV4cGVj
dGF0aW9uIG9mIHRoYXQga25vd2xlZGdlIGZyb20gdGhlIHBsYXRmb3JtIG5ldHdvcmsgc3RhY2tz
LgorICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KG1fcmVzb3VyY2VSZXF1ZXN0KTsKKyAgICBp
ZiAoIW1fZnJhZ21lbnRJZGVudGlmaWVyRm9yUmVxdWVzdC5pc051bGwoKSkgeworICAgICAgICBV
UkwgdXJsID0gcmVxdWVzdC51cmwoKTsKKyAgICAgICAgdXJsLnNldEZyYWdtZW50SWRlbnRpZmll
cihtX2ZyYWdtZW50SWRlbnRpZmllckZvclJlcXVlc3QpOworICAgICAgICByZXF1ZXN0LnNldFVS
TCh1cmwpOworICAgICAgICBtX2ZyYWdtZW50SWRlbnRpZmllckZvclJlcXVlc3QgPSBTdHJpbmco
KTsKKyAgICB9CisKKyAgICBtX2xvYWRlciA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJT
dHJhdGVneSgpLT5sb2FkUmVzb3VyY2UoZnJhbWUsICp0aGlzLCByZXF1ZXN0LCBvcHRpb25zKTsK
KyAgICBpZiAoIW1fbG9hZGVyKSB7CisgICAgICAgIGZhaWxCZWZvcmVTdGFydGluZygpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zdGF0dXMgPSBQZW5kaW5nOworfQorCit2b2lk
IENhY2hlZFJlc291cmNlOjpsb2FkRnJvbShjb25zdCBDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2Us
IGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucywgQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXImIGNhY2hlZFJlc291cmNlTG9hZGVyKQoreworICAgIEFTU0VSVCh1cmwoKSA9PSByZXNvdXJj
ZS51cmwoKSk7CisgICAgQVNTRVJUKHR5cGUoKSA9PSByZXNvdXJjZS50eXBlKCkpOworICAgIEFT
U0VSVChyZXNvdXJjZS5zdGF0dXMoKSA9PSBTdGF0dXM6OkNhY2hlZCk7CisKKyAgICBtX29wdGlv
bnMgPSBvcHRpb25zOworICAgIGNvbXB1dGVPcmlnaW4oY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwor
CisgICAgaWYgKGlzQ3Jvc3NPcmlnaW4oKSAmJiBvcHRpb25zLm1vZGUgPT0gRmV0Y2hPcHRpb25z
OjpNb2RlOjpDb3JzKSB7CisgICAgICAgIEFTU0VSVChtX29yaWdpbik7CisgICAgICAgIFN0cmlu
ZyBlcnJvck1lc3NhZ2U7CisgICAgICAgIGlmICghV2ViQ29yZTo6cGFzc2VzQWNjZXNzQ29udHJv
bENoZWNrKHJlc291cmNlLnJlc3BvbnNlKCksIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzLCAq
bV9vcmlnaW4sIGVycm9yTWVzc2FnZSkpIHsKKyAgICAgICAgICAgIHNldFJlc291cmNlRXJyb3Io
UmVzb3VyY2VFcnJvcihTdHJpbmcoKSwgMCwgdXJsKCksIGVycm9yTWVzc2FnZSwgUmVzb3VyY2VF
cnJvcjo6VHlwZTo6QWNjZXNzQ29udHJvbCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorCisgICAgc2V0Qm9keURhdGFGcm9tKHJlc291cmNlKTsKK30KKwordm9pZCBD
YWNoZWRSZXNvdXJjZTo6Y2hlY2tOb3RpZnkoKQoreworICAgIGlmIChpc0xvYWRpbmcoKSB8fCBz
dGlsbE5lZWRzTG9hZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDYWNoZWRSZXNvdXJjZUNs
aWVudFdhbGtlcjxDYWNoZWRSZXNvdXJjZUNsaWVudD4gd2Fsa2VyKG1fY2xpZW50cyk7CisgICAg
d2hpbGUgKENhY2hlZFJlc291cmNlQ2xpZW50KiBjbGllbnQgPSB3YWxrZXIubmV4dCgpKQorICAg
ICAgICBjbGllbnQtPm5vdGlmeUZpbmlzaGVkKHRoaXMpOworfQorCit2b2lkIENhY2hlZFJlc291
cmNlOjphZGREYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYpCit7CisgICAgQVNTRVJUKGRhdGFCdWZm
ZXJpbmdQb2xpY3koKSA9PSBCdWZmZXJEYXRhKTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6
YWRkRGF0YShjb25zdCBjaGFyKiwgdW5zaWduZWQpCit7CisgICAgQVNTRVJUKGRhdGFCdWZmZXJp
bmdQb2xpY3koKSA9PSBEb05vdEJ1ZmZlckRhdGEpOworfQorCit2b2lkIENhY2hlZFJlc291cmNl
OjpmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1ZmZlciopCit7CisgICAgc2V0TG9hZGluZyhmYWxzZSk7
CisgICAgY2hlY2tOb3RpZnkoKTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6ZXJyb3IoQ2Fj
aGVkUmVzb3VyY2U6OlN0YXR1cyBzdGF0dXMpCit7CisgICAgc2V0U3RhdHVzKHN0YXR1cyk7Cisg
ICAgQVNTRVJUKGVycm9yT2NjdXJyZWQoKSk7CisgICAgbV9kYXRhID0gbnVsbHB0cjsKKworICAg
IHNldExvYWRpbmcoZmFsc2UpOworICAgIGNoZWNrTm90aWZ5KCk7Cit9CisgICAgCit2b2lkIENh
Y2hlZFJlc291cmNlOjpjYW5jZWxMb2FkKCkKK3sKKyAgICBpZiAoIWlzTG9hZGluZygpICYmICFz
dGlsbE5lZWRzTG9hZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRTdGF0dXMoTG9hZEVy
cm9yKTsKKyAgICBzZXRMb2FkaW5nKGZhbHNlKTsKKyAgICBjaGVja05vdGlmeSgpOworfQorCit2
b2lkIENhY2hlZFJlc291cmNlOjpmaW5pc2goKQoreworICAgIGlmICghZXJyb3JPY2N1cnJlZCgp
KQorICAgICAgICBtX3N0YXR1cyA9IENhY2hlZDsKK30KKworYm9vbCBDYWNoZWRSZXNvdXJjZTo6
cGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKFNlY3VyaXR5T3JpZ2luJiBzZWN1cml0eU9yaWdpbikK
K3sKKyAgICBTdHJpbmcgZXJyb3JEZXNjcmlwdGlvbjsKKyAgICByZXR1cm4gV2ViQ29yZTo6cGFz
c2VzQWNjZXNzQ29udHJvbENoZWNrKHJlc3BvbnNlKCksIHJlc291cmNlUmVxdWVzdCgpLmFsbG93
Q29va2llcygpID8gQWxsb3dTdG9yZWRDcmVkZW50aWFscyA6IERvTm90QWxsb3dTdG9yZWRDcmVk
ZW50aWFscywgc2VjdXJpdHlPcmlnaW4sIGVycm9yRGVzY3JpcHRpb24pOworfQorCitib29sIENh
Y2hlZFJlc291cmNlOjpwYXNzZXNTYW1lT3JpZ2luUG9saWN5Q2hlY2soU2VjdXJpdHlPcmlnaW4m
IHNlY3VyaXR5T3JpZ2luKQoreworICAgIGlmIChzZWN1cml0eU9yaWdpbi5jYW5SZXF1ZXN0KHJl
c3BvbnNlRm9yU2FtZU9yaWdpblBvbGljeUNoZWNrcygpLnVybCgpKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhzZWN1cml0eU9yaWdp
bik7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldENyb3NzT3JpZ2luKCkKK3sKKyAgICBB
U1NFUlQobV9vcHRpb25zLm1vZGUgIT0gRmV0Y2hPcHRpb25zOjpNb2RlOjpTYW1lT3JpZ2luKTsK
KyAgICBtX3Jlc3BvbnNlVGFpbnRpbmcgPSAobV9vcHRpb25zLm1vZGUgPT0gRmV0Y2hPcHRpb25z
OjpNb2RlOjpDb3JzKSA/IFJlc291cmNlUmVzcG9uc2U6OlRhaW50aW5nOjpDb3JzIDogUmVzb3Vy
Y2VSZXNwb25zZTo6VGFpbnRpbmc6Ok9wYXF1ZTsKK30KKworYm9vbCBDYWNoZWRSZXNvdXJjZTo6
aXNDcm9zc09yaWdpbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVzcG9uc2VUYWludGluZyAh
PSBSZXNvdXJjZVJlc3BvbnNlOjpUYWludGluZzo6QmFzaWM7Cit9CisKK2Jvb2wgQ2FjaGVkUmVz
b3VyY2U6OmlzQ2xlYW4oKSBjb25zdAoreworICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3
Zy5vcmcvbXVsdGlwYWdlL2luZnJhc3RydWN0dXJlLmh0bWwjY29ycy1zYW1lLW9yaWdpbgorICAg
IHJldHVybiAhbG9hZEZhaWxlZE9yQ2FuY2VsZWQoKSAmJiBtX3Jlc3BvbnNlVGFpbnRpbmcgIT0g
UmVzb3VyY2VSZXNwb25zZTo6VGFpbnRpbmc6Ok9wYXF1ZTsKK30KKworYm9vbCBDYWNoZWRSZXNv
dXJjZTo6aXNFeHBpcmVkKCkgY29uc3QKK3sKKyAgICBpZiAobV9yZXNwb25zZS5pc051bGwoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGNvbXB1dGVDdXJyZW50QWdlKG1f
cmVzcG9uc2UsIG1fcmVzcG9uc2VUaW1lc3RhbXApID4gZnJlc2huZXNzTGlmZXRpbWUobV9yZXNw
b25zZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRDYWNoZVNjaGVtZUluZGVmaW5p
dGVseShjb25zdCBTdHJpbmcmIHNjaGVtZSkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBp
ZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc2NoZW1lLCAiYXBwbGV3ZWJkYXRhIikp
CisgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCisjaWYgVVNFKFNPVVApCisgICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHNjaGVtZSwgInJlc291cmNlIikpCisgICAgICAg
IHJldHVybiB0cnVlOworI2VuZGlmCisgICAgcmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKHNjaGVtZSwgImRhdGEiKTsKK30KKworc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBD
YWNoZWRSZXNvdXJjZTo6ZnJlc2huZXNzTGlmZXRpbWUoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UpIGNvbnN0Cit7CisgICAgaWYgKCFyZXNwb25zZS51cmwoKS5wcm90b2NvbElzSW5I
VFRQRmFtaWx5KCkpIHsKKyAgICAgICAgU3RyaW5nIHByb3RvY29sID0gcmVzcG9uc2UudXJsKCku
cHJvdG9jb2woKTsKKyAgICAgICAgaWYgKCFzaG91bGRDYWNoZVNjaGVtZUluZGVmaW5pdGVseShw
cm90b2NvbCkpIHsKKyAgICAgICAgICAgIC8vIERvbid0IGNhY2hlIG5vbi1IVFRQIG1haW4gcmVz
b3VyY2VzIHNpbmNlIHdlIGNhbid0IGNoZWNrIGZvciBmcmVzaG5lc3MuCisgICAgICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBjYWNoZSBzdWJyZXNvdXJjZXMgZWl0aGVyLCBidXQgd2hl
biB3ZSB0cmllZCB0aGlzCisgICAgICAgICAgICAvLyBpdCBjYXVzZWQgcGVyZm9ybWFuY2UgYW5k
IGZsYWtpbmVzcyBpc3N1ZXMgaW4gb3VyIHRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgICAg
ICBpZiAobV90eXBlID09IE1haW5SZXNvdXJjZSB8fCBTY2hlbWVSZWdpc3RyeTo6c2hvdWxkQWx3
YXlzUmV2YWxpZGF0ZVVSTFNjaGVtZShwcm90b2NvbCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IDB1czsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6bWljcm9zZWNv
bmRzOjptYXgoKTsKKyAgICB9CisKKyAgICByZXR1cm4gY29tcHV0ZUZyZXNobmVzc0xpZmV0aW1l
Rm9ySFRUUEZhbWlseShyZXNwb25zZSwgbV9yZXNwb25zZVRpbWVzdGFtcCk7Cit9CisKK3ZvaWQg
Q2FjaGVkUmVzb3VyY2U6OnJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBtX3JlcXVlc3RlZEZy
b21OZXR3b3JraW5nTGF5ZXIgPSB0cnVlOworICAgIGlmIChyZXNwb25zZS5pc051bGwoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gUmVkaXJlY3QgdG8gZGF0YTogVVJMIHVzZXMgdGhlIGxh
c3QgSFRUUCByZXNwb25zZSBmb3IgU09QLgorICAgIGlmIChyZXNwb25zZS5pc0hUVFAoKSAmJiBy
ZXF1ZXN0LnVybCgpLnByb3RvY29sSXNEYXRhKCkpCisgICAgICAgIG1fcmVkaXJlY3RSZXNwb25z
ZUZvclNhbWVPcmlnaW5Qb2xpY3lDaGVja3MgPSByZXNwb25zZTsKKworICAgIHVwZGF0ZVJlZGly
ZWN0Q2hhaW5TdGF0dXMobV9yZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMsIHJlc3BvbnNlKTsKK30K
KworY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgQ2FjaGVkUmVzb3VyY2U6OnJlc3BvbnNlRm9yU2Ft
ZU9yaWdpblBvbGljeUNoZWNrcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVkaXJlY3RSZXNw
b25zZUZvclNhbWVPcmlnaW5Qb2xpY3lDaGVja3MuaXNOdWxsKCkgPyBtX3Jlc3BvbnNlIDogbV9y
ZWRpcmVjdFJlc3BvbnNlRm9yU2FtZU9yaWdpblBvbGljeUNoZWNrczsKK30KKwordm9pZCBDYWNo
ZWRSZXNvdXJjZTo6c2V0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Up
Cit7CisgICAgQVNTRVJUKG1fcmVzcG9uc2UudHlwZSgpID09IFJlc291cmNlUmVzcG9uc2U6OlR5
cGU6OkRlZmF1bHQpOworICAgIG1fcmVzcG9uc2UgPSByZXNwb25zZTsKKyAgICBtX3Jlc3BvbnNl
LnNldFJlZGlyZWN0ZWQobV9yZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMuc3RhdHVzICE9IFJlZGly
ZWN0Q2hhaW5DYWNoZVN0YXR1czo6Tm9SZWRpcmVjdGlvbik7CisKKyAgICBtX3ZhcnlpbmdIZWFk
ZXJWYWx1ZXMgPSBjb2xsZWN0VmFyeWluZ1JlcXVlc3RIZWFkZXJzKG1fcmVzb3VyY2VSZXF1ZXN0
LCBtX3Jlc3BvbnNlLCBtX3Nlc3Npb25JRCk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OnJl
c3BvbnNlUmVjZWl2ZWQoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAg
c2V0UmVzcG9uc2UocmVzcG9uc2UpOworICAgIG1fcmVzcG9uc2VUaW1lc3RhbXAgPSBzdGQ6OmNo
cm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKKyAgICBTdHJpbmcgZW5jb2RpbmcgPSByZXNwb25z
ZS50ZXh0RW5jb2RpbmdOYW1lKCk7CisgICAgaWYgKCFlbmNvZGluZy5pc051bGwoKSkKKyAgICAg
ICAgc2V0RW5jb2RpbmcoZW5jb2RpbmcpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlOjpjbGVh
ckxvYWRlcigpCit7CisgICAgQVNTRVJUKG1fbG9hZGVyKTsKKyAgICBtX2lkZW50aWZpZXJGb3JM
b2FkV2l0aG91dFJlc291cmNlTG9hZGVyID0gbV9sb2FkZXItPmlkZW50aWZpZXIoKTsKKyAgICBt
X2xvYWRlciA9IG51bGxwdHI7CisgICAgZGVsZXRlSWZQb3NzaWJsZSgpOworfQorCit2b2lkIENh
Y2hlZFJlc291cmNlOjphZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCkKK3sK
KyAgICBpZiAoYWRkQ2xpZW50VG9TZXQoY2xpZW50KSkKKyAgICAgICAgZGlkQWRkQ2xpZW50KGNs
aWVudCk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OmRpZEFkZENsaWVudChDYWNoZWRSZXNv
dXJjZUNsaWVudCogY2xpZW50KQoreworICAgIGlmIChtX2RlY29kZWREYXRhRGVsZXRpb25UaW1l
ci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lci5zdG9wKCk7
CisKKyAgICBpZiAobV9jbGllbnRzQXdhaXRpbmdDYWxsYmFjay5yZW1vdmUoY2xpZW50KSkKKyAg
ICAgICAgbV9jbGllbnRzLmFkZChjbGllbnQpOworICAgIGlmICghaXNMb2FkaW5nKCkgJiYgIXN0
aWxsTmVlZHNMb2FkKCkpCisgICAgICAgIGNsaWVudC0+bm90aWZ5RmluaXNoZWQodGhpcyk7Cit9
CisKK2Jvb2wgQ2FjaGVkUmVzb3VyY2U6OmFkZENsaWVudFRvU2V0KENhY2hlZFJlc291cmNlQ2xp
ZW50KiBjbGllbnQpCit7CisgICAgaWYgKG1fcHJlbG9hZFJlc3VsdCA9PSBQcmVsb2FkTm90UmVm
ZXJlbmNlZCkgeworICAgICAgICBpZiAoaXNMb2FkZWQoKSkKKyAgICAgICAgICAgIG1fcHJlbG9h
ZFJlc3VsdCA9IFByZWxvYWRSZWZlcmVuY2VkV2hpbGVDb21wbGV0ZTsKKyAgICAgICAgZWxzZSBp
ZiAobV9yZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyKQorICAgICAgICAgICAgbV9wcmVsb2Fk
UmVzdWx0ID0gUHJlbG9hZFJlZmVyZW5jZWRXaGlsZUxvYWRpbmc7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1fcHJlbG9hZFJlc3VsdCA9IFByZWxvYWRSZWZlcmVuY2VkOworICAgIH0KKyAg
ICBpZiAoYWxsb3dzQ2FjaGluZygpICYmICFoYXNDbGllbnRzKCkgJiYgaW5DYWNoZSgpKQorICAg
ICAgICBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkuYWRkVG9MaXZlUmVzb3VyY2VzU2l6ZSgqdGhp
cyk7CisKKyAgICBpZiAoKG1fdHlwZSA9PSBSYXdSZXNvdXJjZSB8fCBtX3R5cGUgPT0gTWFpblJl
c291cmNlKSAmJiAhbV9yZXNwb25zZS5pc051bGwoKSAmJiAhbV9wcm94eVJlc291cmNlKSB7Cisg
ICAgICAgIC8vIENlcnRhaW4gcmVzb3VyY2VzIChlc3BlY2lhbGx5IFhIUnMgYW5kIG1haW4gcmVz
b3VyY2VzKSBkbyBjcmF6eSB0aGluZ3MgaWYgYW4gYXN5bmNocm9ub3VzIGxvYWQgcmV0dXJucwor
ICAgICAgICAvLyBzeW5jaHJvbm91c2x5IChlLmcuLCBzY3JpcHRzIG1heSBub3QgaGF2ZSBzZXQg
YWxsIHRoZSBzdGF0ZSB0aGV5IG5lZWQgdG8gaGFuZGxlIHRoZSBsb2FkKS4KKyAgICAgICAgLy8g
VGhlcmVmb3JlLCByYXRoZXIgdGhhbiBpbW1lZGlhdGVseSBzZW5kaW5nIGNhbGxiYWNrcyBvbiBh
IGNhY2hlIGhpdCBsaWtlIG90aGVyIENhY2hlZFJlc291cmNlcywKKyAgICAgICAgLy8gd2Ugc2No
ZWR1bGUgdGhlIGNhbGxiYWNrcyBhbmQgZW5zdXJlIHdlIG5ldmVyIGZpbmlzaCBzeW5jaHJvbm91
c2x5LgorICAgICAgICBBU1NFUlQoIW1fY2xpZW50c0F3YWl0aW5nQ2FsbGJhY2suY29udGFpbnMo
Y2xpZW50KSk7CisgICAgICAgIG1fY2xpZW50c0F3YWl0aW5nQ2FsbGJhY2suYWRkKGNsaWVudCwg
c3RkOjptYWtlX3VuaXF1ZTxDYWxsYmFjaz4oKnRoaXMsICpjbGllbnQpKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIG1fY2xpZW50cy5hZGQoY2xpZW50KTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6cmVtb3ZlQ2xpZW50KENhY2hlZFJl
c291cmNlQ2xpZW50KiBjbGllbnQpCit7CisgICAgYXV0byBjYWxsYmFjayA9IG1fY2xpZW50c0F3
YWl0aW5nQ2FsbGJhY2sudGFrZShjbGllbnQpOworICAgIGlmIChjYWxsYmFjaykgeworICAgICAg
ICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucyhjbGllbnQpKTsKKyAgICAgICAgY2FsbGJhY2st
PmNhbmNlbCgpOworICAgICAgICBjYWxsYmFjayA9IG51bGxwdHI7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucyhjbGllbnQpKTsKKyAgICAgICAgbV9jbGll
bnRzLnJlbW92ZShjbGllbnQpOworICAgICAgICBkaWRSZW1vdmVDbGllbnQoY2xpZW50KTsKKyAg
ICB9CisKKyAgICBpZiAoZGVsZXRlSWZQb3NzaWJsZSgpKSB7CisgICAgICAgIC8vIGB0aGlzYCBv
YmplY3QgaXMgZGVhZCBoZXJlLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGhh
c0NsaWVudHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgbWVtb3J5Q2FjaGUgPSBN
ZW1vcnlDYWNoZTo6c2luZ2xldG9uKCk7CisgICAgaWYgKGFsbG93c0NhY2hpbmcoKSAmJiBpbkNh
Y2hlKCkpIHsKKyAgICAgICAgbWVtb3J5Q2FjaGUucmVtb3ZlRnJvbUxpdmVSZXNvdXJjZXNTaXpl
KCp0aGlzKTsKKyAgICAgICAgbWVtb3J5Q2FjaGUucmVtb3ZlRnJvbUxpdmVEZWNvZGVkUmVzb3Vy
Y2VzTGlzdCgqdGhpcyk7CisgICAgfQorICAgIGlmICghbV9zd2l0Y2hpbmdDbGllbnRzVG9SZXZh
bGlkYXRlZFJlc291cmNlKQorICAgICAgICBhbGxDbGllbnRzUmVtb3ZlZCgpOworICAgIGRlc3Ry
b3lEZWNvZGVkRGF0YUlmTmVlZGVkKCk7CisKKyAgICBpZiAoIWFsbG93c0NhY2hpbmcoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKHJlc3BvbnNlKCkuY2FjaGVDb250cm9sQ29udGFpbnNO
b1N0b3JlKCkgJiYgdXJsKCkucHJvdG9jb2xJcygiaHR0cHMiKSkgeworICAgICAgICAvLyBSRkMy
NjE2IDE0LjkuMjoKKyAgICAgICAgLy8gIm5vLXN0b3JlOiAuLi4gTVVTVCBtYWtlIGEgYmVzdC1l
ZmZvcnQgYXR0ZW1wdCB0byByZW1vdmUgdGhlIGluZm9ybWF0aW9uIGZyb20gdm9sYXRpbGUgc3Rv
cmFnZSBhcyBwcm9tcHRseSBhcyBwb3NzaWJsZSIKKyAgICAgICAgLy8gIi4uLiBIaXN0b3J5IGJ1
ZmZlcnMgTUFZIHN0b3JlIHN1Y2ggcmVzcG9uc2VzIGFzIHBhcnQgb2YgdGhlaXIgbm9ybWFsIG9w
ZXJhdGlvbi4iCisgICAgICAgIC8vIFdlIGFsbG93IG5vbi1zZWN1cmUgY29udGVudCB0byBiZSBy
ZXVzZWQgaW4gaGlzdG9yeSwgYnV0IHdlIGRvIG5vdCBhbGxvdyBzZWN1cmUgY29udGVudCB0byBi
ZSByZXVzZWQuCisgICAgICAgIG1lbW9yeUNhY2hlLnJlbW92ZSgqdGhpcyk7CisgICAgfQorICAg
IG1lbW9yeUNhY2hlLnBydW5lU29vbigpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlOjpkZXN0
cm95RGVjb2RlZERhdGFJZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX2RlY29kZWRTaXplKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKCFNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkuZGVhZERlY29k
ZWREYXRhRGVsZXRpb25JbnRlcnZhbCgpLmNvdW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICBt
X2RlY29kZWREYXRhRGVsZXRpb25UaW1lci5yZXN0YXJ0KCk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVz
b3VyY2U6OmRlY29kZWREYXRhRGVsZXRpb25UaW1lckZpcmVkKCkKK3sKKyAgICBkZXN0cm95RGVj
b2RlZERhdGEoKTsKK30KKworYm9vbCBDYWNoZWRSZXNvdXJjZTo6ZGVsZXRlSWZQb3NzaWJsZSgp
Cit7CisgICAgaWYgKGNhbkRlbGV0ZSgpKSB7CisgICAgICAgIGlmICghaW5DYWNoZSgpKSB7Cisg
ICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEZXN0cm95Q2FjaGVkUmVz
b3VyY2UoKnRoaXMpOworICAgICAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9kYXRhKQorICAgICAgICAgICAgbV9k
YXRhLT5oaW50TWVtb3J5Tm90TmVlZGVkU29vbigpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldERlY29kZWRTaXplKHVuc2lnbmVkIHNpemUp
Cit7CisgICAgaWYgKHNpemUgPT0gbV9kZWNvZGVkU2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaW50IGRlbHRhID0gc2l6ZSAtIG1fZGVjb2RlZFNpemU7CisKKyAgICAvLyBUaGUgb2JqZWN0
IG11c3QgYmUgbW92ZWQgdG8gYSBkaWZmZXJlbnQgcXVldWUsIHNpbmNlIGl0cyBzaXplIGhhcyBi
ZWVuIGNoYW5nZWQuCisgICAgLy8gUmVtb3ZlIGJlZm9yZSB1cGRhdGluZyBtX2RlY29kZWRTaXpl
LCBzbyB3ZSBmaW5kIHRoZSByZXNvdXJjZSBpbiB0aGUgY29ycmVjdCBMUlUgbGlzdC4KKyAgICBp
ZiAoYWxsb3dzQ2FjaGluZygpICYmIGluQ2FjaGUoKSkKKyAgICAgICAgTWVtb3J5Q2FjaGU6OnNp
bmdsZXRvbigpLnJlbW92ZUZyb21MUlVMaXN0KCp0aGlzKTsKKyAgICAKKyAgICBtX2RlY29kZWRT
aXplID0gc2l6ZTsKKyAgIAorICAgIGlmIChhbGxvd3NDYWNoaW5nKCkgJiYgaW5DYWNoZSgpKSB7
CisgICAgICAgIGF1dG8mIG1lbW9yeUNhY2hlID0gTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpOwor
ICAgICAgICAvLyBOb3cgaW5zZXJ0IGludG8gdGhlIG5ldyBMUlUgbGlzdC4KKyAgICAgICAgbWVt
b3J5Q2FjaGUuaW5zZXJ0SW5MUlVMaXN0KCp0aGlzKTsKKyAgICAgICAgCisgICAgICAgIC8vIElu
c2VydCBpbnRvIG9yIHJlbW92ZSBmcm9tIHRoZSBsaXZlIGRlY29kZWQgbGlzdCBpZiBuZWNlc3Nh
cnkuCisgICAgICAgIC8vIFdoZW4gaW5zZXJ0aW5nIGludG8gdGhlIExpdmVEZWNvZGVkUmVzb3Vy
Y2VzTGlzdCBpdCBpcyBwb3NzaWJsZQorICAgICAgICAvLyB0aGF0IHRoZSBtX2xhc3REZWNvZGVk
QWNjZXNzVGltZSBpcyBzdGlsbCB6ZXJvIG9yIHNtYWxsZXIgdGhhbgorICAgICAgICAvLyB0aGUg
bV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWUgb2YgdGhlIGN1cnJlbnQgbGlzdCBoZWFkLiBUaGlzIGlz
IGEKKyAgICAgICAgLy8gdmlvbGF0aW9uIG9mIHRoZSBpbnZhcmlhbnQgdGhhdCB0aGUgbGlzdCBp
cyB0byBiZSBrZXB0IHNvcnRlZAorICAgICAgICAvLyBieSBhY2Nlc3MgdGltZS4gVGhlIHdlYWtl
bmluZyBvZiB0aGUgaW52YXJpYW50IGRvZXMgbm90IHBvc2UKKyAgICAgICAgLy8gYSBwcm9ibGVt
LiBGb3IgbW9yZSBkZXRhaWxzIHBsZWFzZSBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zMDIwOQorICAgICAgICBib29sIGluTGl2ZURlY29kZWRSZXNvdXJjZXNM
aXN0ID0gbWVtb3J5Q2FjaGUuaW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QoKnRoaXMpOworICAg
ICAgICBpZiAobV9kZWNvZGVkU2l6ZSAmJiAhaW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QgJiYg
aGFzQ2xpZW50cygpKQorICAgICAgICAgICAgbWVtb3J5Q2FjaGUuaW5zZXJ0SW5MaXZlRGVjb2Rl
ZFJlc291cmNlc0xpc3QoKnRoaXMpOworICAgICAgICBlbHNlIGlmICghbV9kZWNvZGVkU2l6ZSAm
JiBpbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCkKKyAgICAgICAgICAgIG1lbW9yeUNhY2hlLnJl
bW92ZUZyb21MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QoKnRoaXMpOworCisgICAgICAgIC8vIFVw
ZGF0ZSB0aGUgY2FjaGUncyBzaXplIHRvdGFscy4KKyAgICAgICAgbWVtb3J5Q2FjaGUuYWRqdXN0
U2l6ZShoYXNDbGllbnRzKCksIGRlbHRhKTsKKyAgICB9Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3Vy
Y2U6OnNldEVuY29kZWRTaXplKHVuc2lnbmVkIHNpemUpCit7CisgICAgaWYgKHNpemUgPT0gbV9l
bmNvZGVkU2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IGRlbHRhID0gc2l6ZSAtIG1f
ZW5jb2RlZFNpemU7CisKKyAgICAvLyBUaGUgb2JqZWN0IG11c3QgYmUgbW92ZWQgdG8gYSBkaWZm
ZXJlbnQgcXVldWUsIHNpbmNlIGl0cyBzaXplIGhhcyBiZWVuIGNoYW5nZWQuCisgICAgLy8gUmVt
b3ZlIGJlZm9yZSB1cGRhdGluZyBtX2VuY29kZWRTaXplLCBzbyB3ZSBmaW5kIHRoZSByZXNvdXJj
ZSBpbiB0aGUgY29ycmVjdCBMUlUgbGlzdC4KKyAgICBpZiAoYWxsb3dzQ2FjaGluZygpICYmIGlu
Q2FjaGUoKSkKKyAgICAgICAgTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpLnJlbW92ZUZyb21MUlVM
aXN0KCp0aGlzKTsKKworICAgIG1fZW5jb2RlZFNpemUgPSBzaXplOworCisgICAgaWYgKGFsbG93
c0NhY2hpbmcoKSAmJiBpbkNhY2hlKCkpIHsKKyAgICAgICAgYXV0byYgbWVtb3J5Q2FjaGUgPSBN
ZW1vcnlDYWNoZTo6c2luZ2xldG9uKCk7CisgICAgICAgIG1lbW9yeUNhY2hlLmluc2VydEluTFJV
TGlzdCgqdGhpcyk7CisgICAgICAgIG1lbW9yeUNhY2hlLmFkanVzdFNpemUoaGFzQ2xpZW50cygp
LCBkZWx0YSk7CisgICAgfQorfQorCit2b2lkIENhY2hlZFJlc291cmNlOjpkaWRBY2Nlc3NEZWNv
ZGVkRGF0YShkb3VibGUgdGltZVN0YW1wKQoreworICAgIG1fbGFzdERlY29kZWRBY2Nlc3NUaW1l
ID0gdGltZVN0YW1wOworICAgIAorICAgIGlmIChhbGxvd3NDYWNoaW5nKCkgJiYgaW5DYWNoZSgp
KSB7CisgICAgICAgIGF1dG8mIG1lbW9yeUNhY2hlID0gTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigp
OworICAgICAgICBpZiAobWVtb3J5Q2FjaGUuaW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QoKnRo
aXMpKSB7CisgICAgICAgICAgICBtZW1vcnlDYWNoZS5yZW1vdmVGcm9tTGl2ZURlY29kZWRSZXNv
dXJjZXNMaXN0KCp0aGlzKTsKKyAgICAgICAgICAgIG1lbW9yeUNhY2hlLmluc2VydEluTGl2ZURl
Y29kZWRSZXNvdXJjZXNMaXN0KCp0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBtZW1vcnlDYWNo
ZS5wcnVuZVNvb24oKTsKKyAgICB9Cit9CisgICAgCit2b2lkIENhY2hlZFJlc291cmNlOjpzZXRS
ZXNvdXJjZVRvUmV2YWxpZGF0ZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpIAoreyAKKyAgICBB
U1NFUlQocmVzb3VyY2UpOworICAgIEFTU0VSVCghbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSk7Cisg
ICAgQVNTRVJUKHJlc291cmNlICE9IHRoaXMpOworICAgIEFTU0VSVChtX2hhbmRsZXNUb1JldmFs
aWRhdGUuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQocmVzb3VyY2UtPnR5cGUoKSA9PSB0eXBlKCkp
OworICAgIEFTU0VSVCghcmVzb3VyY2UtPm1fcHJveHlSZXNvdXJjZSk7CisKKyAgICBMT0coUmVz
b3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2UgJXAgc2V0UmVzb3VyY2VUb1JldmFsaWRhdGUg
JXAiLCB0aGlzLCByZXNvdXJjZSk7CisKKyAgICByZXNvdXJjZS0+bV9wcm94eVJlc291cmNlID0g
dGhpczsKKyAgICBtX3Jlc291cmNlVG9SZXZhbGlkYXRlID0gcmVzb3VyY2U7Cit9CisKK3ZvaWQg
Q2FjaGVkUmVzb3VyY2U6OmNsZWFyUmVzb3VyY2VUb1JldmFsaWRhdGUoKSAKK3sKKyAgICBBU1NF
UlQobV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSk7CisgICAgQVNTRVJUKG1fcmVzb3VyY2VUb1JldmFs
aWRhdGUtPm1fcHJveHlSZXNvdXJjZSA9PSB0aGlzKTsKKworICAgIGlmIChtX3N3aXRjaGluZ0Ns
aWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVz
b3VyY2VUb1JldmFsaWRhdGUtPm1fcHJveHlSZXNvdXJjZSA9IG51bGxwdHI7CisgICAgbV9yZXNv
dXJjZVRvUmV2YWxpZGF0ZS0+ZGVsZXRlSWZQb3NzaWJsZSgpOworCisgICAgbV9oYW5kbGVzVG9S
ZXZhbGlkYXRlLmNsZWFyKCk7CisgICAgbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSA9IG51bGxwdHI7
CisgICAgZGVsZXRlSWZQb3NzaWJsZSgpOworfQorICAgIAordm9pZCBDYWNoZWRSZXNvdXJjZTo6
c3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSgpCit7CisgICAgQVNTRVJUKG1fcmVz
b3VyY2VUb1JldmFsaWRhdGUpOworICAgIEFTU0VSVChtX3Jlc291cmNlVG9SZXZhbGlkYXRlLT5p
bkNhY2hlKCkpOworICAgIEFTU0VSVCghaW5DYWNoZSgpKTsKKworICAgIExPRyhSZXNvdXJjZUxv
YWRpbmcsICJDYWNoZWRSZXNvdXJjZSAlcCBzd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291
cmNlICVwIiwgdGhpcywgbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSk7CisKKyAgICBtX3N3aXRjaGlu
Z0NsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UgPSB0cnVlOworICAgIGZvciAoYXV0byYgaGFu
ZGxlIDogbV9oYW5kbGVzVG9SZXZhbGlkYXRlKSB7CisgICAgICAgIGhhbmRsZS0+bV9yZXNvdXJj
ZSA9IG1fcmVzb3VyY2VUb1JldmFsaWRhdGU7CisgICAgICAgIG1fcmVzb3VyY2VUb1JldmFsaWRh
dGUtPnJlZ2lzdGVySGFuZGxlKGhhbmRsZSk7CisgICAgICAgIC0tbV9oYW5kbGVDb3VudDsKKyAg
ICB9CisgICAgQVNTRVJUKCFtX2hhbmRsZUNvdW50KTsKKyAgICBtX2hhbmRsZXNUb1JldmFsaWRh
dGUuY2xlYXIoKTsKKworICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZUNsaWVudCo+IGNsaWVudHNU
b01vdmU7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fY2xpZW50cykgeworICAgICAgICBDYWNo
ZWRSZXNvdXJjZUNsaWVudCogY2xpZW50ID0gZW50cnkua2V5OworICAgICAgICB1bnNpZ25lZCBj
b3VudCA9IGVudHJ5LnZhbHVlOworICAgICAgICB3aGlsZSAoY291bnQpIHsKKyAgICAgICAgICAg
IGNsaWVudHNUb01vdmUuYXBwZW5kKGNsaWVudCk7CisgICAgICAgICAgICAtLWNvdW50OworICAg
ICAgICB9CisgICAgfQorCisgICAgZm9yIChhdXRvJiBjbGllbnQgOiBjbGllbnRzVG9Nb3ZlKQor
ICAgICAgICByZW1vdmVDbGllbnQoY2xpZW50KTsKKyAgICBBU1NFUlQobV9jbGllbnRzLmlzRW1w
dHkoKSk7CisKKyAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNsaWVudHNUb01vdmUpCisgICAgICAg
IG1fcmVzb3VyY2VUb1JldmFsaWRhdGUtPmFkZENsaWVudFRvU2V0KGNsaWVudCk7CisgICAgZm9y
IChhdXRvJiBjbGllbnQgOiBjbGllbnRzVG9Nb3ZlKSB7CisgICAgICAgIC8vIENhbGxpbmcgZGlk
QWRkQ2xpZW50IG1heSBkbyBhbnl0aGluZywgaW5jbHVkaW5nIHRyeWluZyB0byBjYW5jZWwgcmV2
YWxpZGF0aW9uLgorICAgICAgICAvLyBBc3NlcnQgdGhhdCBpdCBkaWRuJ3Qgc3VjY2VlZC4KKyAg
ICAgICAgQVNTRVJUKG1fcmVzb3VyY2VUb1JldmFsaWRhdGUpOworICAgICAgICAvLyBDYWxsaW5n
IGRpZEFkZENsaWVudCBmb3IgYSBjbGllbnQgbWF5IGVuZCB1cCByZW1vdmluZyBhbm90aGVyIGNs
aWVudC4gSW4gdGhhdCBjYXNlIGl0IHdvbid0IGJlIGluIHRoZSBzZXQgYW55bW9yZS4KKyAgICAg
ICAgaWYgKG1fcmVzb3VyY2VUb1JldmFsaWRhdGUtPm1fY2xpZW50cy5jb250YWlucyhjbGllbnQp
KQorICAgICAgICAgICAgbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZS0+ZGlkQWRkQ2xpZW50KGNsaWVu
dCk7CisgICAgfQorICAgIG1fc3dpdGNoaW5nQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSA9
IGZhbHNlOworfQorCit2b2lkIENhY2hlZFJlc291cmNlOjp1cGRhdGVSZXNwb25zZUFmdGVyUmV2
YWxpZGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHZhbGlkYXRpbmdSZXNwb25zZSkKK3sK
KyAgICBtX3Jlc3BvbnNlVGltZXN0YW1wID0gc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93
KCk7CisKKyAgICB1cGRhdGVSZXNwb25zZUhlYWRlcnNBZnRlclJldmFsaWRhdGlvbihtX3Jlc3Bv
bnNlLCB2YWxpZGF0aW5nUmVzcG9uc2UpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlOjpyZWdp
c3RlckhhbmRsZShDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UqIGgpCit7CisgICAgKyttX2hhbmRs
ZUNvdW50OworICAgIGlmIChtX3Jlc291cmNlVG9SZXZhbGlkYXRlKQorICAgICAgICBtX2hhbmRs
ZXNUb1JldmFsaWRhdGUuYWRkKGgpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlOjp1bnJlZ2lz
dGVySGFuZGxlKENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSogaCkKK3sKKyAgICBBU1NFUlQobV9o
YW5kbGVDb3VudCA+IDApOworICAgIC0tbV9oYW5kbGVDb3VudDsKKworICAgIGlmIChtX3Jlc291
cmNlVG9SZXZhbGlkYXRlKQorICAgICAgICAgbV9oYW5kbGVzVG9SZXZhbGlkYXRlLnJlbW92ZSho
KTsKKworICAgIGlmICghbV9oYW5kbGVDb3VudCkKKyAgICAgICAgZGVsZXRlSWZQb3NzaWJsZSgp
OworfQorCitib29sIENhY2hlZFJlc291cmNlOjpjYW5Vc2VDYWNoZVZhbGlkYXRvcigpIGNvbnN0
Cit7CisgICAgaWYgKG1fbG9hZGluZyB8fCBlcnJvck9jY3VycmVkKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmIChtX3Jlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9y
ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fcmVzcG9uc2UuaGFzQ2Fj
aGVWYWxpZGF0b3JGaWVsZHMoKTsKK30KKworQ2FjaGVkUmVzb3VyY2U6OlJldmFsaWRhdGlvbkRl
Y2lzaW9uIENhY2hlZFJlc291cmNlOjptYWtlUmV2YWxpZGF0aW9uRGVjaXNpb24oQ2FjaGVQb2xp
Y3kgY2FjaGVQb2xpY3kpIGNvbnN0Cit7ICAgIAorICAgIHN3aXRjaCAoY2FjaGVQb2xpY3kpIHsK
KyAgICBjYXNlIENhY2hlUG9saWN5SGlzdG9yeUJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIFJldmFs
aWRhdGlvbkRlY2lzaW9uOjpObzsKKworICAgIGNhc2UgQ2FjaGVQb2xpY3lSZWxvYWQ6CisgICAg
Y2FzZSBDYWNoZVBvbGljeVJldmFsaWRhdGU6CisgICAgICAgIHJldHVybiBSZXZhbGlkYXRpb25E
ZWNpc2lvbjo6WWVzRHVlVG9DYWNoZVBvbGljeTsKKworICAgIGNhc2UgQ2FjaGVQb2xpY3lWZXJp
Znk6CisgICAgICAgIGlmIChtX3Jlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSgp
KQorICAgICAgICAgICAgcmV0dXJuIFJldmFsaWRhdGlvbkRlY2lzaW9uOjpZZXNEdWVUb05vQ2Fj
aGU7CisgICAgICAgIC8vIEZJWE1FOiBDYWNoZS1Db250cm9sOm5vLXN0b3JlIHNob3VsZCBwcmV2
ZW50IHN0b3JpbmcsIG5vdCByZXVzZS4KKyAgICAgICAgaWYgKG1fcmVzcG9uc2UuY2FjaGVDb250
cm9sQ29udGFpbnNOb1N0b3JlKCkpCisgICAgICAgICAgICByZXR1cm4gUmV2YWxpZGF0aW9uRGVj
aXNpb246Olllc0R1ZVRvTm9TdG9yZTsKKworICAgICAgICBpZiAoaXNFeHBpcmVkKCkpCisgICAg
ICAgICAgICByZXR1cm4gUmV2YWxpZGF0aW9uRGVjaXNpb246Olllc0R1ZVRvRXhwaXJlZDsKKwor
ICAgICAgICByZXR1cm4gUmV2YWxpZGF0aW9uRGVjaXNpb246Ok5vOworICAgIH07CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJldmFsaWRhdGlvbkRlY2lzaW9uOjpObzsK
K30KKworYm9vbCBDYWNoZWRSZXNvdXJjZTo6cmVkaXJlY3RDaGFpbkFsbG93c1JldXNlKFJldXNl
RXhwaXJlZFJlZGlyZWN0aW9uT3JOb3QgcmV1c2VFeHBpcmVkUmVkaXJlY3Rpb24pIGNvbnN0Cit7
CisgICAgcmV0dXJuIFdlYkNvcmU6OnJlZGlyZWN0Q2hhaW5BbGxvd3NSZXVzZShtX3JlZGlyZWN0
Q2hhaW5DYWNoZVN0YXR1cywgcmV1c2VFeHBpcmVkUmVkaXJlY3Rpb24pOworfQorCitib29sIENh
Y2hlZFJlc291cmNlOjp2YXJ5SGVhZGVyVmFsdWVzTWF0Y2goY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBjb25zdCBDYWNoZWRSZXNvdXJjZUxvYWRlciYgY2FjaGVkUmVzb3VyY2VMb2Fk
ZXIpCit7CisgICAgaWYgKG1fdmFyeWluZ0hlYWRlclZhbHVlcy5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3RXaXRoRnVsbEhlYWRl
cnMocmVxdWVzdCk7CisgICAgYWRkQWRkaXRpb25hbFJlcXVlc3RIZWFkZXJzVG9SZXF1ZXN0KHJl
cXVlc3RXaXRoRnVsbEhlYWRlcnMsIGNhY2hlZFJlc291cmNlTG9hZGVyLCAqdGhpcyk7CisKKyAg
ICByZXR1cm4gdmVyaWZ5VmFyeWluZ1JlcXVlc3RIZWFkZXJzKG1fdmFyeWluZ0hlYWRlclZhbHVl
cywgcmVxdWVzdFdpdGhGdWxsSGVhZGVycywgbV9zZXNzaW9uSUQpOworfQorCit1bnNpZ25lZCBD
YWNoZWRSZXNvdXJjZTo6b3ZlcmhlYWRTaXplKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgY29uc3Qg
aW50IGtBdmVyYWdlQ2xpZW50c0hhc2hNYXBTaXplID0gMzg0OworICAgIHJldHVybiBzaXplb2Yo
Q2FjaGVkUmVzb3VyY2UpICsgbV9yZXNwb25zZS5tZW1vcnlVc2FnZSgpICsga0F2ZXJhZ2VDbGll
bnRzSGFzaE1hcFNpemUgKyBtX3Jlc291cmNlUmVxdWVzdC51cmwoKS5zdHJpbmcoKS5sZW5ndGgo
KSAqIDI7Cit9CisKK2Jvb2wgQ2FjaGVkUmVzb3VyY2U6OmFyZUFsbENsaWVudHNYTUxIdHRwUmVx
dWVzdHMoKSBjb25zdAoreworICAgIGlmICh0eXBlKCkgIT0gUmF3UmVzb3VyY2UpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGZvciAoYXV0byYgY2xpZW50IDogbV9jbGllbnRzKSB7Cisg
ICAgICAgIGlmICghY2xpZW50LmtleS0+aXNYTUxIdHRwUmVxdWVzdCgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDYWNoZWRS
ZXNvdXJjZTo6c2V0TG9hZFByaW9yaXR5KGNvbnN0IE9wdGlvbmFsPFJlc291cmNlTG9hZFByaW9y
aXR5PiYgbG9hZFByaW9yaXR5KQoreworICAgIGlmIChsb2FkUHJpb3JpdHkpCisgICAgICAgIG1f
bG9hZFByaW9yaXR5ID0gbG9hZFByaW9yaXR5LnZhbHVlKCk7CisgICAgZWxzZQorICAgICAgICBt
X2xvYWRQcmlvcml0eSA9IGRlZmF1bHRQcmlvcml0eUZvclJlc291cmNlVHlwZSh0eXBlKCkpOwor
fQorCitpbmxpbmUgQ2FjaGVkUmVzb3VyY2U6OkNhbGxiYWNrOjpDYWxsYmFjayhDYWNoZWRSZXNv
dXJjZSYgcmVzb3VyY2UsIENhY2hlZFJlc291cmNlQ2xpZW50JiBjbGllbnQpCisgICAgOiBtX3Jl
c291cmNlKHJlc291cmNlKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV90aW1lcigq
dGhpcywgJkNhbGxiYWNrOjp0aW1lckZpcmVkKQoreworICAgIG1fdGltZXIuc3RhcnRPbmVTaG90
KDApOworfQorCitpbmxpbmUgdm9pZCBDYWNoZWRSZXNvdXJjZTo6Q2FsbGJhY2s6OmNhbmNlbCgp
Cit7CisgICAgaWYgKG1fdGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV90aW1lci5zdG9wKCk7
Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OkNhbGxiYWNrOjp0aW1lckZpcmVkKCkKK3sKKyAg
ICBtX3Jlc291cmNlLmRpZEFkZENsaWVudCgmbV9jbGllbnQpOworfQorCisjaWYgVVNFKEZPVU5E
QVRJT04pIHx8IFVTRShTT1VQKQorCit2b2lkIENhY2hlZFJlc291cmNlOjp0cnlSZXBsYWNlRW5j
b2RlZERhdGEoU2hhcmVkQnVmZmVyJiBuZXdCdWZmZXIpCit7CisgICAgaWYgKCFtX2RhdGEpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoIW1heVRyeVJlcGxhY2VFbmNvZGVkRGF0YSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBoYXZlIHRvIGRvIHRoZSBtZW1jbXAgYmVj
YXVzZSB3ZSBjYW4ndCB0ZWxsIGlmIHRoZSByZXBsYWNlbWVudCBmaWxlIGJhY2tlZCBkYXRhIGlz
IGZvciB0aGUKKyAgICAvLyBzYW1lIHJlc291cmNlIG9yIGlmIHdlIG1hZGUgYSBzZWNvbmQgcmVx
dWVzdCB3aXRoIHRoZSBzYW1lIFVSTCB3aGljaCBnYXZlIHVzIGEgZGlmZmVyZW50CisgICAgLy8g
cmVzb3VyY2UuIFdlIGhhdmUgc2VlbiB0aGlzIGhhcHBlbiBmb3IgY2FjaGVkIFBPU1QgcmVzb3Vy
Y2VzLgorICAgIGlmIChtX2RhdGEtPnNpemUoKSAhPSBuZXdCdWZmZXIuc2l6ZSgpIHx8IG1lbWNt
cChtX2RhdGEtPmRhdGEoKSwgbmV3QnVmZmVyLmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAobV9kYXRhLT50cnlSZXBsYWNlQ29udGVudHNXaXRoUGxh
dGZvcm1CdWZmZXIobmV3QnVmZmVyKSkKKyAgICAgICAgZGlkUmVwbGFjZVNoYXJlZEJ1ZmZlckNv
bnRlbnRzKCk7Cit9CisKKyNlbmRpZgorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRj
aC9DYWNoZWRSZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU0Yjk1N2QxYmIzYzU3OWQ1Zjk5N2RjOWQ4
OWQzNWFiOGE1NzMzYTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
ZmV0Y2gvQ2FjaGVkUmVzb3VyY2UuaApAQCAtMCwwICsxLDQwMCBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgICAgQ29weXJpZ2h0
IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQorICAgIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBDYWNoZWRSZXNvdXJj
ZV9oCisjZGVmaW5lIENhY2hlZFJlc291cmNlX2gKKworI2luY2x1ZGUgIkNhY2hlUG9saWN5Lmgi
CisjaW5jbHVkZSAiQ2FjaGVWYWxpZGF0aW9uLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBl
cy5oIgorI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRQ
cmlvcml0eS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyT3B0aW9ucy5oIgorI2luY2x1ZGUg
IlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNs
dWRlICJTZXNzaW9uSUQuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHRpbWUuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgorI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgTWVtb3J5Q2FjaGU7CitjbGFzcyBDYWNoZWRSZXNvdXJjZUNsaWVudDsKK2NsYXNzIENh
Y2hlZFJlc291cmNlSGFuZGxlQmFzZTsKK2NsYXNzIENhY2hlZFJlc291cmNlTG9hZGVyOworY2xh
c3MgSW5zcGVjdG9yUmVzb3VyY2U7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKK2NsYXNzIFNoYXJl
ZEJ1ZmZlcjsKK2NsYXNzIFN1YnJlc291cmNlTG9hZGVyOworY2xhc3MgVGV4dFJlc291cmNlRGVj
b2RlcjsKKworLy8gQSByZXNvdXJjZSB0aGF0IGlzIGhlbGQgaW4gdGhlIGNhY2hlLiBDbGFzc2Vz
IHdobyB3YW50IHRvIHVzZSB0aGlzIG9iamVjdCBzaG91bGQgZGVyaXZlCisvLyBmcm9tIENhY2hl
ZFJlc291cmNlQ2xpZW50LCB0byBnZXQgdGhlIGZ1bmN0aW9uIGNhbGxzIGluIGNhc2UgdGhlIHJl
cXVlc3RlZCBkYXRhIGhhcyBhcnJpdmVkLgorLy8gVGhpcyBjbGFzcyBhbHNvIGRvZXMgdGhlIGFj
dHVhbCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGxvYWRlciB0byBvYnRhaW4gdGhlIHJlc291cmNl
IGZyb20gdGhlIG5ldHdvcmsuCitjbGFzcyBDYWNoZWRSZXNvdXJjZSB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQ2FjaGVkUmVzb3VyY2UpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAg
ICBmcmllbmQgY2xhc3MgTWVtb3J5Q2FjaGU7CisgICAgZnJpZW5kIGNsYXNzIEluc3BlY3RvclJl
c291cmNlOworICAgIAorcHVibGljOgorICAgIGVudW0gVHlwZSB7CisgICAgICAgIE1haW5SZXNv
dXJjZSwKKyAgICAgICAgSW1hZ2VSZXNvdXJjZSwKKyAgICAgICAgQ1NTU3R5bGVTaGVldCwKKyAg
ICAgICAgU2NyaXB0LAorICAgICAgICBGb250UmVzb3VyY2UsCisjaWYgRU5BQkxFKFNWR19GT05U
UykKKyAgICAgICAgU1ZHRm9udFJlc291cmNlLAorI2VuZGlmCisgICAgICAgIE1lZGlhUmVzb3Vy
Y2UsCisgICAgICAgIFJhd1Jlc291cmNlLAorICAgICAgICBTVkdEb2N1bWVudFJlc291cmNlCisj
aWYgRU5BQkxFKFhTTFQpCisgICAgICAgICwgWFNMU3R5bGVTaGVldAorI2VuZGlmCisjaWYgRU5B
QkxFKExJTktfUFJFRkVUQ0gpCisgICAgICAgICwgTGlua1ByZWZldGNoCisgICAgICAgICwgTGlu
a1N1YnJlc291cmNlCisjZW5kaWYKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgICAgICwg
VGV4dFRyYWNrUmVzb3VyY2UKKyNlbmRpZgorICAgIH07CisKKyAgICBlbnVtIFN0YXR1cyB7Cisg
ICAgICAgIFVua25vd24sICAgICAgLy8gbGV0IGNhY2hlIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGgg
aXQKKyAgICAgICAgUGVuZGluZywgICAgICAvLyBvbmx5IHBhcnRpYWxseSBsb2FkZWQKKyAgICAg
ICAgQ2FjaGVkLCAgICAgICAvLyByZWd1bGFyIGNhc2UKKyAgICAgICAgTG9hZEVycm9yLAorICAg
ICAgICBEZWNvZGVFcnJvcgorICAgIH07CisKKyAgICBDYWNoZWRSZXNvdXJjZShjb25zdCBSZXNv
dXJjZVJlcXVlc3QmLCBUeXBlLCBTZXNzaW9uSUQpOworICAgIHZpcnR1YWwgfkNhY2hlZFJlc291
cmNlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciYsIGNv
bnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYpOworCisgICAgdmlydHVhbCB2b2lkIHNldEVuY29k
aW5nKGNvbnN0IFN0cmluZyYpIHsgfQorICAgIHZpcnR1YWwgU3RyaW5nIGVuY29kaW5nKCkgY29u
c3QgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFRleHRSZXNvdXJjZURl
Y29kZXIqIHRleHRSZXNvdXJjZURlY29kZXIoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGFkZERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJik7CisgICAgdmlydHVh
bCB2b2lkIGFkZERhdGEoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZmluaXNoTG9hZGluZyhTaGFyZWRCdWZmZXIqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OlN0YXR1cyk7CisKKyAgICB2b2lkIHNldFJlc291cmNl
RXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpIHsgbV9lcnJvciA9IGVycm9yOyB9Cisg
ICAgY29uc3QgUmVzb3VyY2VFcnJvciYgcmVzb3VyY2VFcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1f
ZXJyb3I7IH0KKworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJZ25vcmVIVFRQU3RhdHVzQ29kZUVy
cm9ycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBSZXNvdXJjZVJlcXVlc3QmIHJl
c291cmNlUmVxdWVzdCgpIHsgcmV0dXJuIG1fcmVzb3VyY2VSZXF1ZXN0OyB9CisgICAgY29uc3Qg
VVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlUmVxdWVzdC51cmwoKTt9CisjaWYg
RU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKKyAgICBjb25zdCBTdHJpbmcmIGNhY2hlUGFydGl0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVJlcXVlc3QuY2FjaGVQYXJ0aXRpb24oKTsg
fQorI2VuZGlmCisgICAgU2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vz
c2lvbklEOyB9CisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VHlw
ZT4obV90eXBlKTsgfQorICAgIAorICAgIFJlc291cmNlTG9hZFByaW9yaXR5IGxvYWRQcmlvcml0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZFByaW9yaXR5OyB9CisgICAgdm9pZCBzZXRMb2FkUHJp
b3JpdHkoY29uc3QgT3B0aW9uYWw8UmVzb3VyY2VMb2FkUHJpb3JpdHk+Jik7CisKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kik7Cisg
ICAgYm9vbCBoYXNDbGllbnRzKCkgY29uc3QgeyByZXR1cm4gIW1fY2xpZW50cy5pc0VtcHR5KCkg
fHwgIW1fY2xpZW50c0F3YWl0aW5nQ2FsbGJhY2suaXNFbXB0eSgpOyB9CisgICAgYm9vbCBoYXND
bGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCkgeyByZXR1cm4gbV9jbGllbnRzLmNv
bnRhaW5zKGNsaWVudCkgfHwgbV9jbGllbnRzQXdhaXRpbmdDYWxsYmFjay5jb250YWlucyhjbGll
bnQpOyB9CisgICAgYm9vbCBkZWxldGVJZlBvc3NpYmxlKCk7CisKKyAgICBlbnVtIFByZWxvYWRS
ZXN1bHQgeworICAgICAgICBQcmVsb2FkTm90UmVmZXJlbmNlZCwKKyAgICAgICAgUHJlbG9hZFJl
ZmVyZW5jZWQsCisgICAgICAgIFByZWxvYWRSZWZlcmVuY2VkV2hpbGVMb2FkaW5nLAorICAgICAg
ICBQcmVsb2FkUmVmZXJlbmNlZFdoaWxlQ29tcGxldGUKKyAgICB9OworICAgIFByZWxvYWRSZXN1
bHQgcHJlbG9hZFJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFByZWxvYWRSZXN1
bHQ+KG1fcHJlbG9hZFJlc3VsdCk7IH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRDbGllbnQo
Q2FjaGVkUmVzb3VyY2VDbGllbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlQ2xpZW50
KENhY2hlZFJlc291cmNlQ2xpZW50KikgeyB9CisgICAgdmlydHVhbCB2b2lkIGFsbENsaWVudHNS
ZW1vdmVkKCkgeyB9CisgICAgdm9pZCBkZXN0cm95RGVjb2RlZERhdGFJZk5lZWRlZCgpOworCisg
ICAgdW5zaWduZWQgY291bnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudHMuc2l6ZSgpOyB9CisK
KyAgICBTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U3RhdHVzPiht
X3N0YXR1cyk7IH0KKyAgICB2b2lkIHNldFN0YXR1cyhTdGF0dXMgc3RhdHVzKSB7IG1fc3RhdHVz
ID0gc3RhdHVzOyB9CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gZW5jb2Rl
ZFNpemUoKSArIGRlY29kZWRTaXplKCkgKyBvdmVyaGVhZFNpemUoKTsgfQorICAgIHVuc2lnbmVk
IGVuY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGVkU2l6ZTsgfQorICAgIHVuc2ln
bmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9kZWNvZGVkU2l6ZTsgfQorICAgIHVu
c2lnbmVkIG92ZXJoZWFkU2l6ZSgpIGNvbnN0OworICAgIAorICAgIGJvb2wgaXNMb2FkZWQoKSBj
b25zdCB7IHJldHVybiAhbV9sb2FkaW5nOyB9IC8vIEZJWE1FLiBNZXRob2QgbmFtZSBpcyBpbmFj
Y3VyYXRlLiBMb2FkaW5nIG1pZ2h0IG5vdCBoYXZlIHN0YXJ0ZWQgeWV0LgorCisgICAgYm9vbCBp
c0xvYWRpbmcoKSBjb25zdCB7IHJldHVybiBtX2xvYWRpbmc7IH0KKyAgICB2b2lkIHNldExvYWRp
bmcoYm9vbCBiKSB7IG1fbG9hZGluZyA9IGI7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc3RpbGxOZWVk
c0xvYWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgU3VicmVzb3VyY2VMb2FkZXIq
IGxvYWRlcigpIHsgcmV0dXJuIG1fbG9hZGVyLmdldCgpOyB9CisKKyAgICBib29sIGFyZUFsbENs
aWVudHNYTUxIdHRwUmVxdWVzdHMoKSBjb25zdDsKKworICAgIGJvb2wgaXNJbWFnZSgpIGNvbnN0
IHsgcmV0dXJuIHR5cGUoKSA9PSBJbWFnZVJlc291cmNlOyB9CisgICAgLy8gRklYTUU6IENhY2hl
ZFJhd1Jlc291cmNlIGNvdWxkIGJlIGEgbWFpbiByZXNvdXJjZSwgYW4gYXVkaW8vdmlkZW8gcmVz
b3VyY2UsIG9yIGEgcmF3IFhIUi9pY29uIHJlc291cmNlLgorICAgIGJvb2wgaXNNYWluT3JNZWRp
YU9yUmF3UmVzb3VyY2UoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gTWFpblJlc291cmNlIHx8
IHR5cGUoKSA9PSBNZWRpYVJlc291cmNlIHx8IHR5cGUoKSA9PSBSYXdSZXNvdXJjZTsgfQorICAg
IGJvb2wgaWdub3JlRm9yUmVxdWVzdENvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3Jlc291cmNlUmVxdWVzdC5pZ25vcmVGb3JSZXF1ZXN0Q291bnQoKQorICAgICAgICAgICAg
fHwgdHlwZSgpID09IE1haW5SZXNvdXJjZQorI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQorICAg
ICAgICAgICAgfHwgdHlwZSgpID09IExpbmtQcmVmZXRjaAorICAgICAgICAgICAgfHwgdHlwZSgp
ID09IExpbmtTdWJyZXNvdXJjZQorI2VuZGlmCisgICAgICAgICAgICB8fCB0eXBlKCkgPT0gUmF3
UmVzb3VyY2U7CisgICAgfQorCisgICAgdW5zaWduZWQgYWNjZXNzQ291bnQoKSBjb25zdCB7IHJl
dHVybiBtX2FjY2Vzc0NvdW50OyB9CisgICAgdm9pZCBpbmNyZWFzZUFjY2Vzc0NvdW50KCkgeyBt
X2FjY2Vzc0NvdW50Kys7IH0KKworICAgIC8vIENvbXB1dGVzIHRoZSBzdGF0dXMgb2YgYW4gb2Jq
ZWN0IGFmdGVyIGxvYWRpbmcuICAKKyAgICAvLyBVcGRhdGVzIHRoZSBleHBpcmUgZGF0ZSBvbiB0
aGUgY2FjaGUgZW50cnkgZmlsZQorICAgIHZvaWQgZmluaXNoKCk7CisKKyAgICBib29sIHBhc3Nl
c0FjY2Vzc0NvbnRyb2xDaGVjayhTZWN1cml0eU9yaWdpbiYpOworICAgIGJvb2wgcGFzc2VzU2Ft
ZU9yaWdpblBvbGljeUNoZWNrKFNlY3VyaXR5T3JpZ2luJik7CisKKyAgICAvLyBDYWxsZWQgYnkg
dGhlIGNhY2hlIGlmIHRoZSBvYmplY3QgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZQor
ICAgIC8vIHdoaWxlIHN0aWxsIGJlaW5nIHJlZmVyZW5jZWQuIFRoaXMgbWVhbnMgdGhlIG9iamVj
dCBzaG91bGQgZGVsZXRlIGl0c2VsZgorICAgIC8vIGlmIHRoZSBudW1iZXIgb2YgY2xpZW50cyBv
YnNlcnZpbmcgaXQgZXZlciBkcm9wcyB0byAwLgorICAgIC8vIFRoZSByZXNvdXJjZSBjYW4gYmUg
YnJvdWdodCBiYWNrIHRvIGNhY2hlIGFmdGVyIHN1Y2Nlc3NmdWwgcmV2YWxpZGF0aW9uLgorICAg
IHZvaWQgc2V0SW5DYWNoZShib29sIGluQ2FjaGUpIHsgbV9pbkNhY2hlID0gaW5DYWNoZTsgfQor
ICAgIGJvb2wgaW5DYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5DYWNoZTsgfQorICAgIAorICAg
IHZvaWQgY2xlYXJMb2FkZXIoKTsKKworICAgIFNoYXJlZEJ1ZmZlciogcmVzb3VyY2VCdWZmZXIo
KSBjb25zdCB7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KKworICAgIHZpcnR1YWwgdm9pZCByZWRp
cmVjdFJlY2VpdmVkKFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVzcG9uc2VSZWNlaXZlZChjb25zdCBSZXNvdXJjZVJlc3BvbnNl
Jik7CisgICAgdmlydHVhbCBib29sIHNob3VsZENhY2hlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2b2lkIHNldFJlc3BvbnNlKGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmKTsKKyAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2U7IH0KKyAgICAvLyBUaGlzIGlzIHRoZSBzYW1lIGFz
IHJlc3BvbnNlKCkgZXhjZXB0IGFmdGVyIEhUVFAgcmVkaXJlY3QgdG8gZGF0YTogVVJMLgorICAg
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlRm9yU2FtZU9yaWdpblBvbGljeUNoZWNr
cygpIGNvbnN0OworCisgICAgdm9pZCBzZXRDcm9zc09yaWdpbigpOworICAgIGJvb2wgaXNDcm9z
c09yaWdpbigpIGNvbnN0OworICAgIGJvb2wgaXNDbGVhbigpIGNvbnN0OworICAgIFJlc291cmNl
UmVzcG9uc2U6OlRhaW50aW5nIHJlc3BvbnNlVGFpbnRpbmcoKSBjb25zdCB7IHJldHVybiBtX3Jl
c3BvbnNlVGFpbnRpbmc7IH0KKworICAgIHZvaWQgbG9hZEZyb20oY29uc3QgQ2FjaGVkUmVzb3Vy
Y2UmLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmLCBDYWNoZWRSZXNvdXJjZUxvYWRlciYp
OworCisgICAgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2lu
LmdldCgpOyB9CisKKyAgICBib29sIGNhbkRlbGV0ZSgpIGNvbnN0IHsgcmV0dXJuICFoYXNDbGll
bnRzKCkgJiYgIW1fbG9hZGVyICYmICFtX3ByZWxvYWRDb3VudCAmJiAhbV9oYW5kbGVDb3VudCAm
JiAhbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSAmJiAhbV9wcm94eVJlc291cmNlOyB9CisgICAgYm9v
bCBoYXNPbmVIYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsZUNvdW50ID09IDE7IH0KKwor
ICAgIGJvb2wgaXNFeHBpcmVkKCkgY29uc3Q7CisKKyAgICAvLyBMaXN0IG9mIGFjY2VwdGFibGUg
TUlNRSB0eXBlcyBzZXBhcmF0ZWQgYnkgIiwiLgorICAgIC8vIEEgTUlNRSB0eXBlIG1heSBjb250
YWluIGEgd2lsZGNhcmQsIGUuZy4gInRleHQvKiIuCisgICAgU3RyaW5nIGFjY2VwdCgpIGNvbnN0
IHsgcmV0dXJuIG1fYWNjZXB0OyB9CisgICAgdm9pZCBzZXRBY2NlcHQoY29uc3QgU3RyaW5nJiBh
Y2NlcHQpIHsgbV9hY2NlcHQgPSBhY2NlcHQ7IH0KKworICAgIHZvaWQgY2FuY2VsTG9hZCgpOwor
ICAgIGJvb2wgd2FzQ2FuY2VsZWQoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yLmlzQ2FuY2VsbGF0
aW9uKCk7IH0KKyAgICBib29sIGVycm9yT2NjdXJyZWQoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1
cyA9PSBMb2FkRXJyb3IgfHwgbV9zdGF0dXMgPT0gRGVjb2RlRXJyb3I7IH0KKyAgICBib29sIGxv
YWRGYWlsZWRPckNhbmNlbGVkKCkgY29uc3QgeyByZXR1cm4gIW1fZXJyb3IuaXNOdWxsKCk7IH0K
KworICAgIGJvb2wgc2hvdWxkU2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygpIGNvbnN0IHsgcmV0
dXJuIG1fb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9PSBTZW5kQ2FsbGJhY2tzOyB9CisgICAg
RGF0YUJ1ZmZlcmluZ1BvbGljeSBkYXRhQnVmZmVyaW5nUG9saWN5KCkgY29uc3QgeyByZXR1cm4g
bV9vcHRpb25zLmRhdGFCdWZmZXJpbmdQb2xpY3k7IH0KKworICAgIGJvb2wgYWxsb3dzQ2FjaGlu
ZygpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9ucy5jYWNoaW5nUG9saWN5ID09IENhY2hpbmdQb2xp
Y3k6OkFsbG93Q2FjaGluZzsgfQorICAgIGNvbnN0IEZldGNoT3B0aW9ucyYgb3B0aW9ucygpIGNv
bnN0IHsgcmV0dXJuIG1fb3B0aW9uczsgfQorCisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNv
ZGVkRGF0YSgpIHsgfQorCisgICAgdm9pZCBzZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcihD
YWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIpIHsgbV9vd25pbmdDYWNo
ZWRSZXNvdXJjZUxvYWRlciA9IGNhY2hlZFJlc291cmNlTG9hZGVyOyB9CisgICAgCisgICAgYm9v
bCBpc1ByZWxvYWRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlbG9hZENvdW50OyB9CisgICAgdm9p
ZCBpbmNyZWFzZVByZWxvYWRDb3VudCgpIHsgKyttX3ByZWxvYWRDb3VudDsgfQorICAgIHZvaWQg
ZGVjcmVhc2VQcmVsb2FkQ291bnQoKSB7IEFTU0VSVChtX3ByZWxvYWRDb3VudCk7IC0tbV9wcmVs
b2FkQ291bnQ7IH0KKyAgICAKKyAgICB2b2lkIHJlZ2lzdGVySGFuZGxlKENhY2hlZFJlc291cmNl
SGFuZGxlQmFzZSogaCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1bnJlZ2lzdGVySGFuZGxl
KENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSogaCk7CisgICAgCisgICAgYm9vbCBjYW5Vc2VDYWNo
ZVZhbGlkYXRvcigpIGNvbnN0OworCisgICAgZW51bSBjbGFzcyBSZXZhbGlkYXRpb25EZWNpc2lv
biB7IE5vLCBZZXNEdWVUb0NhY2hlUG9saWN5LCBZZXNEdWVUb05vU3RvcmUsIFllc0R1ZVRvTm9D
YWNoZSwgWWVzRHVlVG9FeHBpcmVkIH07CisgICAgdmlydHVhbCBSZXZhbGlkYXRpb25EZWNpc2lv
biBtYWtlUmV2YWxpZGF0aW9uRGVjaXNpb24oQ2FjaGVQb2xpY3kpIGNvbnN0OworICAgIGJvb2wg
cmVkaXJlY3RDaGFpbkFsbG93c1JldXNlKFJldXNlRXhwaXJlZFJlZGlyZWN0aW9uT3JOb3QpIGNv
bnN0OworCisgICAgYm9vbCB2YXJ5SGVhZGVyVmFsdWVzTWF0Y2goY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwgY29uc3QgQ2FjaGVkUmVzb3VyY2VMb2FkZXImKTsKKworICAgIGJvb2wgaXNDYWNoZVZh
bGlkYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VUb1JldmFsaWRhdGU7IH0KKyAgICBD
YWNoZWRSZXNvdXJjZSogcmVzb3VyY2VUb1JldmFsaWRhdGUoKSBjb25zdCB7IHJldHVybiBtX3Jl
c291cmNlVG9SZXZhbGlkYXRlOyB9CisgICAgCisgICAgLy8gSFRUUCByZXZhbGlkYXRpb24gc3Vw
cG9ydCBtZXRob2RzIGZvciBDYWNoZWRSZXNvdXJjZUxvYWRlci4KKyAgICB2b2lkIHNldFJlc291
cmNlVG9SZXZhbGlkYXRlKENhY2hlZFJlc291cmNlKik7CisgICAgdmlydHVhbCB2b2lkIHN3aXRj
aENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UoKTsKKyAgICB2b2lkIGNsZWFyUmVzb3VyY2VU
b1JldmFsaWRhdGUoKTsKKyAgICB2b2lkIHVwZGF0ZVJlc3BvbnNlQWZ0ZXJSZXZhbGlkYXRpb24o
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgdmFsaWRhdGluZ1Jlc3BvbnNlKTsKKyAgICBib29sIHZh
bGlkYXRpb25JblByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9wcm94eVJlc291cmNlOyB9Cisg
ICAgYm9vbCB2YWxpZGF0aW9uQ29tcGxldGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcHJveHlSZXNv
dXJjZSAmJiBtX3Byb3h5UmVzb3VyY2UtPm1fc3dpdGNoaW5nQ2xpZW50c1RvUmV2YWxpZGF0ZWRS
ZXNvdXJjZTsgfQorCisgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcg
bG9uZyAvKiBieXRlc1NlbnQgKi8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKiB0b3RhbEJ5dGVzVG9C
ZVNlbnQgKi8pIHsgfQorCisgICAgdm9pZCBzZXRMb2FkRmluaXNoVGltZShkb3VibGUgZmluaXNo
VGltZSkgeyBtX2xvYWRGaW5pc2hUaW1lID0gZmluaXNoVGltZTsgfQorICAgIGRvdWJsZSBsb2Fk
RmluaXNoVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZEZpbmlzaFRpbWU7IH0KKworI2lmIFVT
RShGT1VOREFUSU9OKSB8fCBVU0UoU09VUCkKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRyeVJl
cGxhY2VFbmNvZGVkRGF0YShTaGFyZWRCdWZmZXImKTsKKyNlbmRpZgorCisjaWYgVVNFKFNPVVAp
CisgICAgdmlydHVhbCBjaGFyKiBnZXRPckNyZWF0ZVJlYWRCdWZmZXIoc2l6ZV90IC8qIHJlcXVl
c3RlZFNpemUgKi8sIHNpemVfdCYgLyogYWN0dWFsU2l6ZSAqLykgeyByZXR1cm4gbnVsbHB0cjsg
fQorI2VuZGlmCisKKyAgICB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXJGb3JMb2FkV2l0aG91dFJl
c291cmNlTG9hZGVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyRm9yTG9hZFdpdGhvdXRS
ZXNvdXJjZUxvYWRlcjsgfQorICAgIHN0YXRpYyBSZXNvdXJjZUxvYWRQcmlvcml0eSBkZWZhdWx0
UHJpb3JpdHlGb3JSZXNvdXJjZVR5cGUoVHlwZSk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHNl
dEVuY29kZWRTaXplKHVuc2lnbmVkKTsKKyAgICB2b2lkIHNldERlY29kZWRTaXplKHVuc2lnbmVk
KTsKKyAgICB2b2lkIGRpZEFjY2Vzc0RlY29kZWREYXRhKGRvdWJsZSB0aW1lU3RhbXApOworCisg
ICAgdmlydHVhbCB2b2lkIGRpZFJlcGxhY2VTaGFyZWRCdWZmZXJDb250ZW50cygpIHsgfQorCisg
ICAgLy8gRklYTUU6IE1ha2UgdGhlIHJlc3Qgb2YgdGhlc2UgZGF0YSBtZW1iZXJzIHByaXZhdGUg
YW5kIHVzZSBmdW5jdGlvbnMgaW4gZGVyaXZlZCBjbGFzc2VzIGluc3RlYWQuCisgICAgSGFzaENv
dW50ZWRTZXQ8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPiBtX2NsaWVudHM7CisgICAgUmVzb3VyY2VS
ZXF1ZXN0IG1fcmVzb3VyY2VSZXF1ZXN0OworICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4g
bV9sb2FkZXI7CisgICAgUmVzb3VyY2VMb2FkZXJPcHRpb25zIG1fb3B0aW9uczsKKyAgICBSZXNv
dXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CisgICAgUmVzb3VyY2VSZXNwb25zZTo6VGFpbnRpbmcg
bV9yZXNwb25zZVRhaW50aW5nIHsgUmVzb3VyY2VSZXNwb25zZTo6VGFpbnRpbmc6OkJhc2ljIH07
CisgICAgUmVzb3VyY2VSZXNwb25zZSBtX3JlZGlyZWN0UmVzcG9uc2VGb3JTYW1lT3JpZ2luUG9s
aWN5Q2hlY2tzOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBEZWZlcnJh
YmxlT25lU2hvdFRpbWVyIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyOworCitwcml2YXRlOgor
ICAgIGNsYXNzIENhbGxiYWNrOworCisgICAgYm9vbCBhZGRDbGllbnRUb1NldChDYWNoZWRSZXNv
dXJjZUNsaWVudCopOworCisgICAgdm9pZCBkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJGaXJlZCgp
OworCisgICAgdmlydHVhbCB2b2lkIGNoZWNrTm90aWZ5KCk7CisgICAgdmlydHVhbCBib29sIG1h
eVRyeVJlcGxhY2VFbmNvZGVkRGF0YSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCB2b2lkIHNldEJvZHlEYXRhRnJvbShjb25zdCBDYWNoZWRSZXNvdXJjZSYpIHsgfQorCisg
ICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBmcmVzaG5lc3NMaWZldGltZShjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJikgY29uc3Q7CisKKyAgICB2b2lkIGFkZEFkZGl0aW9uYWxSZXF1ZXN0SGVh
ZGVycyhDYWNoZWRSZXNvdXJjZUxvYWRlciYpOworICAgIHZvaWQgY29tcHV0ZU9yaWdpbihDYWNo
ZWRSZXNvdXJjZUxvYWRlciYpOworICAgIHZvaWQgZmFpbEJlZm9yZVN0YXJ0aW5nKCk7CisKKyAg
ICBIYXNoTWFwPENhY2hlZFJlc291cmNlQ2xpZW50Kiwgc3RkOjp1bmlxdWVfcHRyPENhbGxiYWNr
Pj4gbV9jbGllbnRzQXdhaXRpbmdDYWxsYmFjazsKKyAgICBTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7
CisgICAgU3RyaW5nIG1fYWNjZXB0OworICAgIFJlc291cmNlTG9hZFByaW9yaXR5IG1fbG9hZFBy
aW9yaXR5OworICAgIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbV9yZXNw
b25zZVRpbWVzdGFtcDsKKworICAgIFN0cmluZyBtX2ZyYWdtZW50SWRlbnRpZmllckZvclJlcXVl
c3Q7CisKKyAgICBSZXNvdXJjZUVycm9yIG1fZXJyb3I7CisgICAgUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiBtX29yaWdpbjsKKworICAgIGRvdWJsZSBtX2xhc3REZWNvZGVkQWNjZXNzVGltZTsgLy8g
VXNlZCBhcyBhICJ0aHJhc2ggZ3VhcmQiIGluIHRoZSBjYWNoZQorICAgIGRvdWJsZSBtX2xvYWRG
aW5pc2hUaW1lOworCisgICAgdW5zaWduZWQgbV9lbmNvZGVkU2l6ZTsKKyAgICB1bnNpZ25lZCBt
X2RlY29kZWRTaXplOworICAgIHVuc2lnbmVkIG1fYWNjZXNzQ291bnQ7CisgICAgdW5zaWduZWQg
bV9oYW5kbGVDb3VudDsKKyAgICB1bnNpZ25lZCBtX3ByZWxvYWRDb3VudDsKKworICAgIHVuc2ln
bmVkIG1fcHJlbG9hZFJlc3VsdCA6IDI7IC8vIFByZWxvYWRSZXN1bHQKKworICAgIGJvb2wgbV9y
ZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyIDogMTsKKworICAgIGJvb2wgbV9pbkNhY2hlIDog
MTsKKyAgICBib29sIG1fbG9hZGluZyA6IDE7CisKKyAgICBib29sIG1fc3dpdGNoaW5nQ2xpZW50
c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSA6IDE7CisKKyAgICB1bnNpZ25lZCBtX3R5cGUgOiA0OyAv
LyBUeXBlCisgICAgdW5zaWduZWQgbV9zdGF0dXMgOiAzOyAvLyBTdGF0dXMKKworI2lmbmRlZiBO
REVCVUcKKyAgICBib29sIG1fZGVsZXRlZDsKKyAgICB1bnNpZ25lZCBtX2xydUluZGV4OworI2Vu
ZGlmCisKKyAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogbV9vd25pbmdDYWNoZWRSZXNvdXJjZUxv
YWRlcjsgLy8gb25seSBub24tbnVsbCBmb3IgcmVzb3VyY2VzIHRoYXQgYXJlIG5vdCBpbiB0aGUg
Y2FjaGUKKyAgICAKKyAgICAvLyBJZiB0aGlzIGZpZWxkIGlzIG5vbi1udWxsIHdlIGFyZSB1c2lu
ZyB0aGUgcmVzb3VyY2UgYXMgYSBwcm94eSBmb3IgY2hlY2tpbmcgd2hldGhlciBhbiBleGlzdGlu
ZyByZXNvdXJjZSBpcyBzdGlsbCB1cCB0byBkYXRlCisgICAgLy8gdXNpbmcgSFRUUCBJZi1Nb2Rp
ZmllZC1TaW5jZS9JZi1Ob25lLU1hdGNoIGhlYWRlcnMuIElmIHRoZSByZXNwb25zZSBpcyAzMDQg
YWxsIGNsaWVudHMgb2YgdGhpcyByZXNvdXJjZSBhcmUgbW92ZWQKKyAgICAvLyB0byB0byBiZSBj
bGllbnRzIG9mIG1fcmVzb3VyY2VUb1JldmFsaWRhdGUgYW5kIHRoZSByZXNvdXJjZSBpcyBkZWxl
dGVkLiBJZiBub3QsIHRoZSBmaWVsZCBpcyB6ZXJvZWQgYW5kIHRoaXMKKyAgICAvLyByZXNvdXJj
ZXMgYmVjb21lcyBub3JtYWwgcmVzb3VyY2UgbG9hZC4KKyAgICBDYWNoZWRSZXNvdXJjZSogbV9y
ZXNvdXJjZVRvUmV2YWxpZGF0ZTsKKworICAgIC8vIElmIHRoaXMgZmllbGQgaXMgbm9uLW51bGws
IHRoZSByZXNvdXJjZSBoYXMgYSBwcm94eSBmb3IgY2hlY2tpbmcgd2hldGhlciBpdCBpcyBzdGls
bCB1cCB0byBkYXRlIChzZWUgbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSkuCisgICAgQ2FjaGVkUmVz
b3VyY2UqIG1fcHJveHlSZXNvdXJjZTsKKworICAgIC8vIFRoZXNlIGhhbmRsZXMgd2lsbCBuZWVk
IHRvIGJlIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlIG1fcmVzb3VyY2VUb1JldmFsaWRhdGUgaW4g
Y2FzZSB3ZSBnZXQgMzA0IHJlc3BvbnNlLgorICAgIEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2VIYW5k
bGVCYXNlKj4gbV9oYW5kbGVzVG9SZXZhbGlkYXRlOworCisgICAgUmVkaXJlY3RDaGFpbkNhY2hl
U3RhdHVzIG1fcmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzOworCisgICAgVmVjdG9yPHN0ZDo6cGFp
cjxTdHJpbmcsIFN0cmluZz4+IG1fdmFyeWluZ0hlYWRlclZhbHVlczsKKworICAgIHVuc2lnbmVk
IGxvbmcgbV9pZGVudGlmaWVyRm9yTG9hZFdpdGhvdXRSZXNvdXJjZUxvYWRlciB7IDAgfTsKK307
CisKK2NsYXNzIENhY2hlZFJlc291cmNlOjpDYWxsYmFjayB7CisjaWYgIUNPTVBJTEVSKE1TVkMp
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisjZW5kaWYKK3B1YmxpYzoKKyAgICBDYWxs
YmFjayhDYWNoZWRSZXNvdXJjZSYsIENhY2hlZFJlc291cmNlQ2xpZW50Jik7CisKKyAgICB2b2lk
IGNhbmNlbCgpOworCitwcml2YXRlOgorICAgIHZvaWQgdGltZXJGaXJlZCgpOworCisgICAgQ2Fj
aGVkUmVzb3VyY2UmIG1fcmVzb3VyY2U7CisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnQmIG1fY2xp
ZW50OworICAgIFRpbWVyIG1fdGltZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUNIRURfUkVTT1VSQ0UoVG9DbGFzc05h
bWUsIENhY2hlZFJlc291cmNlVHlwZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihX
ZWJDb3JlOjpUb0NsYXNzTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJD
b3JlOjpDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpIHsgcmV0dXJuIHJlc291cmNlLnR5cGUoKSA9
PSBXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZVR5cGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19FTkQoKQorCisjZW5kaWYgLy8gQ2FjaGVkUmVzb3VyY2VfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYjQ1
NDNkNWE1OTc5ZWNjNDJmNmQyNjRiNDQyZTc0OTMxM2E1YzlkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlQ2xpZW50LmgKQEAgLTAs
MCArMSw1NyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxA
bXBpLWhkLm1wZy5kZSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVs
bGVyQGtkZS5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAg
ICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGlu
ZyBpbWFnZXMsIHN0eWxlIHNoZWV0cyBhbmQgaHRtbAorICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4g
SXQgaGFzIGEgbWVtb3J5IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgorKi8KKworI2lmbmRlZiBD
YWNoZWRSZXNvdXJjZUNsaWVudF9oCisjZGVmaW5lIENhY2hlZFJlc291cmNlQ2xpZW50X2gKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWNoZWRSZXNvdXJjZTsKKworY2xhc3MgQ2Fj
aGVkUmVzb3VyY2VDbGllbnQgeworcHVibGljOgorICAgIGVudW0gQ2FjaGVkUmVzb3VyY2VDbGll
bnRUeXBlIHsKKyAgICAgICAgQmFzZVJlc291cmNlVHlwZSwKKyAgICAgICAgSW1hZ2VUeXBlLAor
ICAgICAgICBGb250VHlwZSwKKyAgICAgICAgU3R5bGVTaGVldFR5cGUsCisgICAgICAgIFNWR0Rv
Y3VtZW50VHlwZSwKKyAgICAgICAgUmF3UmVzb3VyY2VUeXBlCisgICAgfTsKKworICAgIHZpcnR1
YWwgfkNhY2hlZFJlc291cmNlQ2xpZW50KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZp
bmlzaGVkKENhY2hlZFJlc291cmNlKikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRlcHJlY2F0ZWRE
aWRSZWNlaXZlQ2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqKSB7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgaXNYTUxIdHRwUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBz
dGF0aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnRUeXBlIGV4cGVjdGVkVHlwZSgpIHsgcmV0dXJuIEJh
c2VSZXNvdXJjZVR5cGU7IH0KKyAgICB2aXJ0dWFsIENhY2hlZFJlc291cmNlQ2xpZW50VHlwZSBy
ZXNvdXJjZUNsaWVudFR5cGUoKSBjb25zdCB7IHJldHVybiBleHBlY3RlZFR5cGUoKTsgfQorCitw
cm90ZWN0ZWQ6CisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnQoKSB7IH0KK307CisKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3Vy
Y2VDbGllbnRXYWxrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRSZXNv
dXJjZUNsaWVudFdhbGtlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1MWVmODYxMDEzNmRiMmQzNzQ0MDU5ZjA0
ZGRkNzNkOTU3NzY2YmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
ZmV0Y2gvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaApAQCAtMCwwICsxLDY5IEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQor
ICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKworICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkg
bmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUgc2hlZXRzIGFuZCBodG1sCisgICAgcGFn
ZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMu
CisqLworCisjaWZuZGVmIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyX2gKKyNkZWZpbmUgQ2Fj
aGVkUmVzb3VyY2VDbGllbnRXYWxrZXJfaAorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGll
bnQuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQ2FsbCB0aGlzICJ3YWxrZXIiIGlu
c3RlYWQgb2YgaXRlcmF0b3Igc28gcGVvcGxlIHdvbid0IGV4cGVjdCBRdCBvciBTVEwtc3R5bGUg
aXRlcmF0b3IgaW50ZXJmYWNlLgorLy8gSnVzdCBrZWVwIGNhbGxpbmcgbmV4dCgpIG9uIHRoaXMu
IEl0J3Mgc2FmZSBmcm9tIGRlbGV0aW9ucyBvZiBpdGVtcy4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNsYXNzIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyIHsKK3B1YmxpYzoKKyAgICBDYWNoZWRS
ZXNvdXJjZUNsaWVudFdhbGtlcihjb25zdCBIYXNoQ291bnRlZFNldDxDYWNoZWRSZXNvdXJjZUNs
aWVudCo+JiBzZXQpCisgICAgICAgIDogbV9jbGllbnRTZXQoc2V0KSwgbV9jbGllbnRWZWN0b3Io
c2V0LnNpemUoKSksIG1faW5kZXgoMCkKKyAgICB7CisgICAgICAgIHR5cGVkZWYgSGFzaENvdW50
ZWRTZXQ8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPjo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7Cisg
ICAgICAgIEl0ZXJhdG9yIGVuZCA9IHNldC5lbmQoKTsKKyAgICAgICAgc2l6ZV90IGNsaWVudElu
ZGV4ID0gMDsKKyAgICAgICAgZm9yIChJdGVyYXRvciBjdXJyZW50ID0gc2V0LmJlZ2luKCk7IGN1
cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQpCisgICAgICAgICAgICBtX2NsaWVudFZlY3RvcltjbGll
bnRJbmRleCsrXSA9IGN1cnJlbnQtPmtleTsKKyAgICB9CisKKyAgICBUKiBuZXh0KCkKKyAgICB7
CisgICAgICAgIHNpemVfdCBzaXplID0gbV9jbGllbnRWZWN0b3Iuc2l6ZSgpOworICAgICAgICB3
aGlsZSAobV9pbmRleCA8IHNpemUpIHsKKyAgICAgICAgICAgIENhY2hlZFJlc291cmNlQ2xpZW50
KiBuZXh0ID0gbV9jbGllbnRWZWN0b3JbbV9pbmRleCsrXTsKKyAgICAgICAgICAgIGlmIChtX2Ns
aWVudFNldC5jb250YWlucyhuZXh0KSkgeworICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKFQ6OmV4cGVjdGVkVHlwZSgpID09IENhY2hlZFJlc291cmNlQ2xp
ZW50OjpleHBlY3RlZFR5cGUoKSB8fCBuZXh0LT5yZXNvdXJjZUNsaWVudFR5cGUoKSA9PSBUOjpl
eHBlY3RlZFR5cGUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihu
ZXh0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorcHJpdmF0ZToKKyAgICBjb25zdCBIYXNoQ291bnRlZFNldDxDYWNo
ZWRSZXNvdXJjZUNsaWVudCo+JiBtX2NsaWVudFNldDsKKyAgICBWZWN0b3I8Q2FjaGVkUmVzb3Vy
Y2VDbGllbnQqPiBtX2NsaWVudFZlY3RvcjsKKyAgICBzaXplX3QgbV9pbmRleDsKK307CisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVk
UmVzb3VyY2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJl
c291cmNlSGFuZGxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOTcyNzZlOTMyYmQwZWNjODYwN2QzY2VjYWI0
NTM3NGJhMzkzYzBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Zl
dGNoL0NhY2hlZFJlc291cmNlSGFuZGxlLmNwcApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgorCisjaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDYWNoZWRSZXNvdXJjZUhhbmRsZUJh
c2U6OkNhY2hlZFJlc291cmNlSGFuZGxlQmFzZSgpCisgICAgOiBtX3Jlc291cmNlKG51bGxwdHIp
Cit7Cit9CisKK0NhY2hlZFJlc291cmNlSGFuZGxlQmFzZTo6Q2FjaGVkUmVzb3VyY2VIYW5kbGVC
YXNlKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKKyAgICA6IG1fcmVzb3VyY2UocmVzb3VyY2Up
Cit7CisgICAgaWYgKG1fcmVzb3VyY2UpCisgICAgICAgIG1fcmVzb3VyY2UtPnJlZ2lzdGVySGFu
ZGxlKHRoaXMpOworfQorCitDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2U6OkNhY2hlZFJlc291cmNl
SGFuZGxlQmFzZShjb25zdCBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UmIG90aGVyKQorICAgIDog
bV9yZXNvdXJjZShvdGhlci5tX3Jlc291cmNlKQoreworICAgIGlmIChtX3Jlc291cmNlKQorICAg
ICAgICBtX3Jlc291cmNlLT5yZWdpc3RlckhhbmRsZSh0aGlzKTsKK30KKworQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGVCYXNlOjp+Q2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKCkKK3sKKyAgICBpZiAobV9y
ZXNvdXJjZSkKKyAgICAgICAgbV9yZXNvdXJjZS0+dW5yZWdpc3RlckhhbmRsZSh0aGlzKTsKK30K
Kwordm9pZCBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2U6OnNldFJlc291cmNlKENhY2hlZFJlc291
cmNlKiByZXNvdXJjZSkKK3sKKyAgICBpZiAocmVzb3VyY2UgPT0gbV9yZXNvdXJjZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmIChtX3Jlc291cmNlKQorICAgICAgICBtX3Jlc291cmNlLT51bnJl
Z2lzdGVySGFuZGxlKHRoaXMpOworICAgIG1fcmVzb3VyY2UgPSByZXNvdXJjZTsKKyAgICBpZiAo
bV9yZXNvdXJjZSkKKyAgICAgICAgbV9yZXNvdXJjZS0+cmVnaXN0ZXJIYW5kbGUodGhpcyk7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRSZXNv
dXJjZUhhbmRsZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNl
SGFuZGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMDNlNTg0MmUzMzU0NDliNWE5ZGE5Y2NiNTdjYzY1NzVkNWJl
YTVhYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNo
ZWRSZXNvdXJjZUhhbmRsZS5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ2FjaGVkUmVzb3VyY2VIYW5kbGVf
aAorI2RlZmluZSBDYWNoZWRSZXNvdXJjZUhhbmRsZV9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybUV4
cG9ydE1hY3Jvcy5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CisKK2NsYXNzIENhY2hlZFJlc291cmNlSGFu
ZGxlQmFzZSB7CitwdWJsaWM6CisgICAgfkNhY2hlZFJlc291cmNlSGFuZGxlQmFzZSgpOworCisg
ICAgQ2FjaGVkUmVzb3VyY2UqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2U7IH0KKyAg
ICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3Jlc291cmNlOyB9Cisg
ICAgCisgICAgLy8gVGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252
ZXJzaW9uIHRvIGJvb2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgorICAgIHR5cGVk
ZWYgQ2FjaGVkUmVzb3VyY2UqIENhY2hlZFJlc291cmNlSGFuZGxlQmFzZTo6KlVuc3BlY2lmaWVk
Qm9vbFR5cGU7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVzb3VyY2UgPyAmQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlOjptX3Jlc291cmNlIDog
MDsgfQorCitwcm90ZWN0ZWQ6CisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKCk7CisgICAg
Q2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKENhY2hlZFJlc291cmNlKik7CisgICAgQ2FjaGVkUmVz
b3VyY2VIYW5kbGVCYXNlKGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSYpOworCisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSopOworICAgIAor
cHJpdmF0ZToKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UmIG9wZXJhdG9yPShjb25zdCBD
YWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UmKSB7IHJldHVybiAqdGhpczsgfSAKKyAgICAKKyAgICBm
cmllbmQgY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CisKKyAgICBDYWNoZWRSZXNvdXJjZSogbV9yZXNv
dXJjZTsKK307CisgICAgCit0ZW1wbGF0ZSA8Y2xhc3MgUj4gY2xhc3MgQ2FjaGVkUmVzb3VyY2VI
YW5kbGUgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlIHsKK3B1YmxpYzogCisgICAg
Q2FjaGVkUmVzb3VyY2VIYW5kbGUoKSB7IH0KKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZShSKiBy
ZXMpIDogQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKHJlcykgeyB9CisgICAgQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGUoY29uc3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Uj4mIG8pIDogQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGVCYXNlKG8pIHsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IENhY2hlZFJlc291
cmNlSGFuZGxlKGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxlPFU+JiBvKSA6IENhY2hlZFJlc291
cmNlSGFuZGxlQmFzZShvLmdldCgpKSB7IH0KKworICAgIFIqIGdldCgpIGNvbnN0IHsgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Uio+KENhY2hlZFJlc291cmNlSGFuZGxlQmFzZTo6Z2V0KCkpOyB9
CisgICAgUiogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CisgICAgUiYgb3Bl
cmF0b3IqKCkgY29uc3QgeyBBU1NFUlQoZ2V0KCkpOyByZXR1cm4gKmdldCgpOyB9CisKKyAgICBD
YWNoZWRSZXNvdXJjZUhhbmRsZSYgb3BlcmF0b3I9KFIqIHJlcykgeyBzZXRSZXNvdXJjZShyZXMp
OyByZXR1cm4gKnRoaXM7IH0gCisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGUmIG9wZXJhdG9yPShj
b25zdCBDYWNoZWRSZXNvdXJjZUhhbmRsZSYgbykgeyBzZXRSZXNvdXJjZShvLmdldCgpKTsgcmV0
dXJuICp0aGlzOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gQ2FjaGVkUmVzb3VyY2VIYW5k
bGUmIG9wZXJhdG9yPShjb25zdCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxVPiYgbykgeyBzZXRSZXNv
dXJjZShvLmdldCgpKTsgcmV0dXJuICp0aGlzOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlJiBvKSBjb25zdCB7IHJldHVybiBnZXQoKSA9PSBv
LmdldCgpOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxl
QmFzZSYgbykgY29uc3QgeyByZXR1cm4gZ2V0KCkgIT0gby5nZXQoKTsgfQorfTsKKwordGVtcGxh
dGUgPGNsYXNzIFIsIGNsYXNzIFJSPiBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGU8Uj4mIGgsIGNvbnN0IFJSKiByZXMpIAoreyAKKyAgICByZXR1cm4gaC5nZXQoKSA9
PSByZXM7IAorfQordGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFJSPiBib29sIG9wZXJhdG9yPT0o
Y29uc3QgUlIqIHJlcywgY29uc3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Uj4mIGgpIAoreyAKKyAg
ICByZXR1cm4gaC5nZXQoKSA9PSByZXM7IAorfQordGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFJS
PiBib29sIG9wZXJhdG9yIT0oY29uc3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Uj4mIGgsIGNvbnN0
IFJSKiByZXMpIAoreyAKKyAgICByZXR1cm4gaC5nZXQoKSAhPSByZXM7IAorfQordGVtcGxhdGUg
PGNsYXNzIFIsIGNsYXNzIFJSPiBib29sIG9wZXJhdG9yIT0oY29uc3QgUlIqIHJlcywgY29uc3Qg
Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Uj4mIGgpIAoreyAKKyAgICByZXR1cm4gaC5nZXQoKSAhPSBy
ZXM7IAorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDYWNoZWRSZXNv
dXJjZUhhbmRsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hl
ZFJlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRS
ZXNvdXJjZUxvYWRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDViN2Y4Y2Y2YjAwOWViMDRjY2Q1YTk3OWNl
MjZlMzk3ZjQzOGI5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9m
ZXRjaC9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKQEAgLTAsMCArMSwxMjU3IEBACisvKgorICAg
IENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQorICAg
IENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDIgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQorICAgIENv
cHlyaWdodCAoQykgMjAwNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gaHR0cDovL3d3dy50b3JjaG1v
YmlsZS5jb20vCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVk
ZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKKyAgICBwYWdlcyBm
cm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KKyov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5o
IgorCisjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkNhY2hlZFNW
R0RvY3VtZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkRm9udC5oIgorI2luY2x1ZGUgIkNhY2hlZElt
YWdlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmF3UmVzb3VyY2UuaCIKKyNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJDYWNoZWRTVkdGb250LmgiCisjaW5jbHVkZSAi
Q2FjaGVkU2NyaXB0LmgiCisjaW5jbHVkZSAiQ2FjaGVkWFNMU3R5bGVTaGVldC5oIgorI2luY2x1
ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIkNvbnRl
bnRFeHRlbnNpb25FcnJvci5oIgorI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25SdWxlLmgiCisj
aW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCisjaW5jbHVkZSAiRE9NV2luZG93Lmgi
CisjaW5jbHVkZSAiRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCIKKyNpbmNsdWRlICJEaWFnbm9z
dGljTG9nZ2luZ0tleXMuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3Vt
ZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5o
IgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJMb2FkZXJT
dHJhdGVneS5oIgorI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKKyNpbmNsdWRlICJMb2dn
aW5nLmgiCisjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCisjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIK
KyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGVyZm9ybWFuY2UuaCIKKyNpbmNsdWRlICJQ
aW5nTG9hZGVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCisjaW5jbHVkZSAi
UmVuZGVyRWxlbWVudC5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZEluZm8uaCIKKyNpbmNsdWRl
ICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5o
IgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU2Vzc2lvbklELmgiCisj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKKyNp
bmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIlVzZXJDb250ZW50Q29udHJv
bGxlci5oIgorI2luY2x1ZGUgIlVzZXJTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQorI2luY2x1ZGUgIkNhY2hlZFRleHRUcmFjay5oIgorI2VuZGlmCisKKyNk
ZWZpbmUgUFJFTE9BRF9ERUJVRyAwCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIENh
Y2hlZFJlc291cmNlKiBjcmVhdGVSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgU2Vzc2lvbklE
IHNlc3Npb25JRCkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpJbWFnZVJlc291cmNlOgorICAgICAgICByZXR1cm4gbmV3IENhY2hlZEltYWdlKHJlcXVl
c3QsIHNlc3Npb25JRCk7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoK
KyAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRDU1NTdHlsZVNoZWV0KHJlcXVlc3QsIGNoYXJzZXQs
IHNlc3Npb25JRCk7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OgorICAgICAgICBy
ZXR1cm4gbmV3IENhY2hlZFNjcmlwdChyZXF1ZXN0LCBjaGFyc2V0LCBzZXNzaW9uSUQpOworICAg
IGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0RvY3VtZW50UmVzb3VyY2U6CisgICAgICAgIHJldHVy
biBuZXcgQ2FjaGVkU1ZHRG9jdW1lbnQocmVxdWVzdCwgc2Vzc2lvbklEKTsKKyNpZiBFTkFCTEUo
U1ZHX0ZPTlRTKQorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0ZvbnRSZXNvdXJjZToKKyAg
ICAgICAgcmV0dXJuIG5ldyBDYWNoZWRTVkdGb250KHJlcXVlc3QsIHNlc3Npb25JRCk7CisjZW5k
aWYKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6CisgICAgICAgIHJldHVy
biBuZXcgQ2FjaGVkRm9udChyZXF1ZXN0LCBzZXNzaW9uSUQpOworICAgIGNhc2UgQ2FjaGVkUmVz
b3VyY2U6Ok1lZGlhUmVzb3VyY2U6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmF3UmVzb3Vy
Y2U6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TWFpblJlc291cmNlOgorICAgICAgICByZXR1
cm4gbmV3IENhY2hlZFJhd1Jlc291cmNlKHJlcXVlc3QsIHR5cGUsIHNlc3Npb25JRCk7CisjaWYg
RU5BQkxFKFhTTFQpCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldDoKKyAg
ICAgICAgcmV0dXJuIG5ldyBDYWNoZWRYU0xTdHlsZVNoZWV0KHJlcXVlc3QsIHNlc3Npb25JRCk7
CisjZW5kaWYKKyNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKKyAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpMaW5rUHJlZmV0Y2g6CisgICAgICAgIHJldHVybiBuZXcgQ2FjaGVkUmVzb3VyY2UocmVx
dWVzdCwgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRjaCwgc2Vzc2lvbklEKTsKKyAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpMaW5rU3VicmVzb3VyY2U6CisgICAgICAgIHJldHVybiBuZXcgQ2Fj
aGVkUmVzb3VyY2UocmVxdWVzdCwgQ2FjaGVkUmVzb3VyY2U6OkxpbmtTdWJyZXNvdXJjZSwgc2Vz
c2lvbklEKTsKKyNlbmRpZgorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpUZXh0VHJhY2tSZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRU
ZXh0VHJhY2socmVxdWVzdCwgc2Vzc2lvbklEKTsKKyNlbmRpZgorICAgIH0KKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQ2FjaGVkUmVzb3VyY2VM
b2FkZXI6OkNhY2hlZFJlc291cmNlTG9hZGVyKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRl
cikKKyAgICA6IG1fZG9jdW1lbnQobnVsbHB0cikKKyAgICAsIG1fZG9jdW1lbnRMb2FkZXIoZG9j
dW1lbnRMb2FkZXIpCisgICAgLCBtX3JlcXVlc3RDb3VudCgwKQorICAgICwgbV9nYXJiYWdlQ29s
bGVjdERvY3VtZW50UmVzb3VyY2VzVGltZXIoKnRoaXMsICZDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
Z2FyYmFnZUNvbGxlY3REb2N1bWVudFJlc291cmNlcykKKyAgICAsIG1fYXV0b0xvYWRJbWFnZXMo
dHJ1ZSkKKyAgICAsIG1faW1hZ2VzRW5hYmxlZCh0cnVlKQorICAgICwgbV9hbGxvd1N0YWxlUmVz
b3VyY2VzKGZhbHNlKQoreworfQorCitDYWNoZWRSZXNvdXJjZUxvYWRlcjo6fkNhY2hlZFJlc291
cmNlTG9hZGVyKCkKK3sKKyAgICBtX2RvY3VtZW50TG9hZGVyID0gbnVsbHB0cjsKKyAgICBtX2Rv
Y3VtZW50ID0gbnVsbHB0cjsKKworICAgIGNsZWFyUHJlbG9hZHMoKTsKKyAgICBmb3IgKGF1dG8m
IHJlc291cmNlIDogbV9kb2N1bWVudFJlc291cmNlcy52YWx1ZXMoKSkKKyAgICAgICAgcmVzb3Vy
Y2UtPnNldE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKG51bGxwdHIpOworCisgICAgLy8gTWFr
ZSBzdXJlIG5vIHJlcXVlc3RzIHN0aWxsIHBvaW50IHRvIHRoaXMgQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIKKyAgICBBU1NFUlQobV9yZXF1ZXN0Q291bnQgPT0gMCk7Cit9CisKK0NhY2hlZFJlc291cmNl
KiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2FjaGVkUmVzb3VyY2UoY29uc3QgU3RyaW5nJiByZXNv
dXJjZVVSTCkgY29uc3QgCit7CisgICAgQVNTRVJUKCFyZXNvdXJjZVVSTC5pc051bGwoKSk7Cisg
ICAgVVJMIHVybCA9IG1fZG9jdW1lbnQtPmNvbXBsZXRlVVJMKHJlc291cmNlVVJMKTsKKyAgICBy
ZXR1cm4gY2FjaGVkUmVzb3VyY2UodXJsKTsgCit9CisKK0NhY2hlZFJlc291cmNlKiBDYWNoZWRS
ZXNvdXJjZUxvYWRlcjo6Y2FjaGVkUmVzb3VyY2UoY29uc3QgVVJMJiByZXNvdXJjZVVSTCkgY29u
c3QKK3sKKyAgICBVUkwgdXJsID0gTWVtb3J5Q2FjaGU6OnJlbW92ZUZyYWdtZW50SWRlbnRpZmll
cklmTmVlZGVkKHJlc291cmNlVVJMKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudFJlc291cmNlcy5n
ZXQodXJsKS5nZXQoKTsgCit9CisKK0ZyYW1lKiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZnJhbWUo
KSBjb25zdAoreworICAgIHJldHVybiBtX2RvY3VtZW50TG9hZGVyID8gbV9kb2N1bWVudExvYWRl
ci0+ZnJhbWUoKSA6IG51bGxwdHI7Cit9CisKK1Nlc3Npb25JRCBDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6c2Vzc2lvbklEKCkgY29uc3QKK3sKKyAgICBTZXNzaW9uSUQgc2Vzc2lvbklEID0gU2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCk7CisKKyAgICBpZiAoRnJhbWUqIGYgPSBmcmFtZSgpKQor
ICAgICAgICBzZXNzaW9uSUQgPSBmLT5wYWdlKCktPnNlc3Npb25JRCgpOworCisgICAgcmV0dXJu
IHNlc3Npb25JRDsKK30KKworQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkSW1hZ2U+IENhY2hl
ZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0SW1hZ2UoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0KQoreworICAgIGlmIChGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKSB7CisgICAgICAg
IGlmIChmcmFtZS0+bG9hZGVyKCkucGFnZURpc21pc3NhbEV2ZW50QmVpbmdEaXNwYXRjaGVkKCkg
IT0gRnJhbWVMb2FkZXI6OlBhZ2VEaXNtaXNzYWxUeXBlOjpOb25lKSB7CisgICAgICAgICAgICBp
ZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgICAgICAg
ICAgZG9jdW1lbnQtPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT51cGdyYWRlSW5zZWN1cmVSZXF1
ZXN0SWZOZWVkZWQocmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCksIENvbnRlbnRTZWN1
cml0eVBvbGljeTo6SW5zZWN1cmVSZXF1ZXN0VHlwZTo6TG9hZCk7CisgICAgICAgICAgICBVUkwg
cmVxdWVzdFVSTCA9IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7CisgICAgICAgICAg
ICBpZiAocmVxdWVzdFVSTC5pc1ZhbGlkKCkgJiYgY2FuUmVxdWVzdChDYWNoZWRSZXNvdXJjZTo6
SW1hZ2VSZXNvdXJjZSwgcmVxdWVzdFVSTCwgcmVxdWVzdC5vcHRpb25zKCksIHJlcXVlc3QuZm9y
UHJlbG9hZCgpKSkKKyAgICAgICAgICAgICAgICBQaW5nTG9hZGVyOjpsb2FkSW1hZ2UoKmZyYW1l
LCByZXF1ZXN0VVJMKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIHJlcXVlc3Quc2V0RGVmZXIoY2xpZW50RGVmZXJzSW1hZ2UocmVxdWVz
dC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKSkgPyBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OkRlZmVy
cmVkQnlDbGllbnQgOiBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6Ok5vRGVmZXIpOworICAgIHJldHVy
biBkb3duY2FzdDxDYWNoZWRJbWFnZT4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpJ
bWFnZVJlc291cmNlLCByZXF1ZXN0KS5nZXQoKSk7Cit9CisKK0NhY2hlZFJlc291cmNlSGFuZGxl
PENhY2hlZEZvbnQ+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0Rm9udChDYWNoZWRSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgaXNTVkcpCit7CisjaWYgRU5BQkxFKFNWR19GT05U
UykKKyAgICBpZiAoaXNTVkcpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxDYWNoZWRTVkdGb250
PihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlNWR0ZvbnRSZXNvdXJjZSwgcmVxdWVz
dCkuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaXNTVkcpOworI2VuZGlmCisgICAg
cmV0dXJuIGRvd25jYXN0PENhY2hlZEZvbnQ+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJj
ZTo6Rm9udFJlc291cmNlLCByZXF1ZXN0KS5nZXQoKSk7Cit9CisKKyNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCitDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRUZXh0VHJhY2s+IENhY2hlZFJlc291
cmNlTG9hZGVyOjpyZXF1ZXN0VGV4dFRyYWNrKENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCkKK3sKKyAgICByZXR1cm4gZG93bmNhc3Q8Q2FjaGVkVGV4dFRyYWNrPihyZXF1ZXN0UmVzb3Vy
Y2UoQ2FjaGVkUmVzb3VyY2U6OlRleHRUcmFja1Jlc291cmNlLCByZXF1ZXN0KS5nZXQoKSk7Cit9
CisjZW5kaWYKKworQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkQ1NTU3R5bGVTaGVldD4gQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RDU1NTdHlsZVNoZWV0KENhY2hlZFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gZG93bmNhc3Q8Q2FjaGVkQ1NTU3R5bGVTaGVl
dD4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0LCByZXF1ZXN0
KS5nZXQoKSk7Cit9CisKK0NhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZENTU1N0eWxlU2hlZXQ+
IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0VXNlckNTU1N0eWxlU2hlZXQoQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIFVSTCB1cmwgPSBNZW1vcnlDYWNoZTo6cmVt
b3ZlRnJhZ21lbnRJZGVudGlmaWVySWZOZWVkZWQocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51
cmwoKSk7CisKKyNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQorICAgIHJlcXVlc3QubXV0
YWJsZVJlc291cmNlUmVxdWVzdCgpLnNldERvbWFpbkZvckNhY2hlUGFydGl0aW9uKGRvY3VtZW50
KCktPnRvcE9yaWdpbigpLT5kb21haW5Gb3JDYWNoZVBhcnRpdGlvbigpKTsKKyNlbmRpZgorCisg
ICAgYXV0byYgbWVtb3J5Q2FjaGUgPSBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCk7CisgICAgaWYg
KHJlcXVlc3QuYWxsb3dzQ2FjaGluZygpKSB7CisgICAgICAgIGlmIChDYWNoZWRSZXNvdXJjZSog
ZXhpc3RpbmcgPSBtZW1vcnlDYWNoZS5yZXNvdXJjZUZvclJlcXVlc3QocmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKSwgc2Vzc2lvbklEKCkpKSB7CisgICAgICAgICAgICBpZiAoaXM8Q2FjaGVkQ1NT
U3R5bGVTaGVldD4oKmV4aXN0aW5nKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q2FjaGVkQ1NTU3R5bGVTaGVldD4oZXhpc3RpbmcpOworICAgICAgICAgICAgbWVtb3J5Q2FjaGUu
cmVtb3ZlKCpleGlzdGluZyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodXJsLnN0cmlu
ZygpICE9IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCkpCisgICAgICAgIHJlcXVlc3Qu
bXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLnNldFVSTCh1cmwpOworCisgICAgQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGU8Q2FjaGVkQ1NTU3R5bGVTaGVldD4gdXNlclNoZWV0ID0gbmV3IENhY2hlZENTU1N0
eWxlU2hlZXQocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgcmVxdWVzdC5jaGFyc2V0KCksIHNl
c3Npb25JRCgpKTsKKworICAgIGlmIChyZXF1ZXN0LmFsbG93c0NhY2hpbmcoKSkKKyAgICAgICAg
bWVtb3J5Q2FjaGUuYWRkKCp1c2VyU2hlZXQpOworICAgIC8vIEZJWE1FOiBsb2FkUmVzb3VyY2Ug
Y2FsbHMgc2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoKSBpZiB0aGUgcmVzb3VyY2UgY291
bGRuJ3QgYmUgYWRkZWQgdG8gY2FjaGUuIERvZXMgdGhpcyBmdW5jdGlvbiBuZWVkIHRvIGNhbGwg
aXQsIHRvbz8KKworICAgIHVzZXJTaGVldC0+bG9hZCgqdGhpcywgUmVzb3VyY2VMb2FkZXJPcHRp
b25zKERvTm90U2VuZENhbGxiYWNrcywgU25pZmZDb250ZW50LCBCdWZmZXJEYXRhLCBBbGxvd1N0
b3JlZENyZWRlbnRpYWxzLCBDbGllbnRDcmVkZW50aWFsUG9saWN5OjpNYXlBc2tDbGllbnRGb3JD
cmVkZW50aWFscywgRmV0Y2hPcHRpb25zOjpDcmVkZW50aWFsczo6SW5jbHVkZSwgU2tpcFNlY3Vy
aXR5Q2hlY2ssIEZldGNoT3B0aW9uczo6TW9kZTo6Tm9Db3JzLCBEb05vdEluY2x1ZGVDZXJ0aWZp
Y2F0ZUluZm8sIENvbnRlbnRTZWN1cml0eVBvbGljeUltcG9zaXRpb246OlNraXBQb2xpY3lDaGVj
aywgRGVmZXJzTG9hZGluZ1BvbGljeTo6QWxsb3dEZWZlcnNMb2FkaW5nLCBDYWNoaW5nUG9saWN5
OjpBbGxvd0NhY2hpbmcpKTsKKyAgICAKKyAgICByZXR1cm4gdXNlclNoZWV0OworfQorCitDYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1
ZXN0U2NyaXB0KENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICByZXR1cm4g
ZG93bmNhc3Q8Q2FjaGVkU2NyaXB0PihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlNj
cmlwdCwgcmVxdWVzdCkuZ2V0KCkpOworfQorCisjaWYgRU5BQkxFKFhTTFQpCitDYWNoZWRSZXNv
dXJjZUhhbmRsZTxDYWNoZWRYU0xTdHlsZVNoZWV0PiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVx
dWVzdFhTTFN0eWxlU2hlZXQoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAg
IHJldHVybiBkb3duY2FzdDxDYWNoZWRYU0xTdHlsZVNoZWV0PihyZXF1ZXN0UmVzb3VyY2UoQ2Fj
aGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQsIHJlcXVlc3QpLmdldCgpKTsKK30KKyNlbmRpZgor
CitDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTVkdEb2N1bWVudD4gQ2FjaGVkUmVzb3VyY2VM
b2FkZXI6OnJlcXVlc3RTVkdEb2N1bWVudChDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qp
Cit7CisgICAgcmV0dXJuIGRvd25jYXN0PENhY2hlZFNWR0RvY3VtZW50PihyZXF1ZXN0UmVzb3Vy
Y2UoQ2FjaGVkUmVzb3VyY2U6OlNWR0RvY3VtZW50UmVzb3VyY2UsIHJlcXVlc3QpLmdldCgpKTsK
K30KKworI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQorQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2Fj
aGVkUmVzb3VyY2U+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0TGlua1Jlc291cmNlKENh
Y2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkK
K3sKKyAgICBBU1NFUlQoZnJhbWUoKSk7CisgICAgQVNTRVJUKHR5cGUgPT0gQ2FjaGVkUmVzb3Vy
Y2U6OkxpbmtQcmVmZXRjaCB8fCB0eXBlID09IENhY2hlZFJlc291cmNlOjpMaW5rU3VicmVzb3Vy
Y2UpOworICAgIHJldHVybiByZXF1ZXN0UmVzb3VyY2UodHlwZSwgcmVxdWVzdCk7Cit9CisjZW5k
aWYKKworQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+IENhY2hlZFJlc291
cmNlTG9hZGVyOjpyZXF1ZXN0TWVkaWEoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQor
eworICAgIHJldHVybiBkb3duY2FzdDxDYWNoZWRSYXdSZXNvdXJjZT4ocmVxdWVzdFJlc291cmNl
KENhY2hlZFJlc291cmNlOjpNZWRpYVJlc291cmNlLCByZXF1ZXN0KS5nZXQoKSk7Cit9CisKK0Nh
Y2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiBDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6cmVxdWVzdFJhd1Jlc291cmNlKENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sK
KyAgICByZXR1cm4gZG93bmNhc3Q8Q2FjaGVkUmF3UmVzb3VyY2U+KHJlcXVlc3RSZXNvdXJjZShD
YWNoZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2UsIHJlcXVlc3QpLmdldCgpKTsKK30KKworQ2FjaGVk
UmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+IENhY2hlZFJlc291cmNlTG9hZGVyOjpy
ZXF1ZXN0TWFpblJlc291cmNlKENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAg
ICByZXR1cm4gZG93bmNhc3Q8Q2FjaGVkUmF3UmVzb3VyY2U+KHJlcXVlc3RSZXNvdXJjZShDYWNo
ZWRSZXNvdXJjZTo6TWFpblJlc291cmNlLCByZXF1ZXN0KS5nZXQoKSk7Cit9CisKK3N0YXRpYyBN
aXhlZENvbnRlbnRDaGVja2VyOjpDb250ZW50VHlwZSBjb250ZW50VHlwZUZyb21SZXNvdXJjZVR5
cGUoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICAvLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLW1peGVkLWNvbnRlbnQvI2NhdGVn
b3J5LW9wdGlvbmFsbHktYmxvY2thYmxlCisgICAgLy8gRWRpdG9yJ3MgRHJhZnQsIDExIEZlYnJ1
YXJ5IDIwMTYKKyAgICAvLyAzLjEuIE9wdGlvbmFsbHktYmxvY2thYmxlIENvbnRlbnQKKyAgICBj
YXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgorICAgIGNhc2UgQ2FjaGVkUmVzb3Vy
Y2U6Ok1lZGlhUmVzb3VyY2U6CisgICAgICAgICAgICByZXR1cm4gTWl4ZWRDb250ZW50Q2hlY2tl
cjo6Q29udGVudFR5cGU6OkFjdGl2ZUNhbldhcm47CisKKyAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpDU1NTdHlsZVNoZWV0OgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKKyAgICBj
YXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6CisgICAgICAgIHJldHVybiBNaXhlZENv
bnRlbnRDaGVja2VyOjpDb250ZW50VHlwZTo6QWN0aXZlOworCisjaWYgRU5BQkxFKFNWR19GT05U
UykKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdGb250UmVzb3VyY2U6CisgICAgICAgIHJl
dHVybiBNaXhlZENvbnRlbnRDaGVja2VyOjpDb250ZW50VHlwZTo6QWN0aXZlOworI2VuZGlmCisK
KyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpSYXdSZXNvdXJjZToKKyAgICBjYXNlIENhY2hlZFJl
c291cmNlOjpTVkdEb2N1bWVudFJlc291cmNlOgorICAgICAgICByZXR1cm4gTWl4ZWRDb250ZW50
Q2hlY2tlcjo6Q29udGVudFR5cGU6OkFjdGl2ZTsKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgorICAgICAgICByZXR1cm4gTWl4ZWRDb250
ZW50Q2hlY2tlcjo6Q29udGVudFR5cGU6OkFjdGl2ZTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKExJ
TktfUFJFRkVUQ0gpCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1ByZWZldGNoOgorICAg
IGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtTdWJyZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIE1p
eGVkQ29udGVudENoZWNrZXI6OkNvbnRlbnRUeXBlOjpBY3RpdmU7CisjZW5kaWYKKworI2lmIEVO
QUJMRShWSURFT19UUkFDSykKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpUZXh0VHJhY2tSZXNv
dXJjZToKKyAgICAgICAgcmV0dXJuIE1peGVkQ29udGVudENoZWNrZXI6OkNvbnRlbnRUeXBlOjpB
Y3RpdmU7CisjZW5kaWYKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIE1peGVkQ29udGVudENoZWNrZXI6OkNvbnRlbnRUeXBlOjpBY3Rp
dmU7CisgICAgfQorfQorCitib29sIENhY2hlZFJlc291cmNlTG9hZGVyOjpjaGVja0luc2VjdXJl
Q29udGVudChDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBVUkwmIHVybCkgY29uc3QK
K3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6
CisjaWYgRU5BQkxFKFhTTFQpCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVl
dDoKKyNlbmRpZgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0RvY3VtZW50UmVzb3VyY2U6
CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKKyAgICAgICAgLy8gVGhl
c2UgcmVzb3VyY2UgY2FuIGluamVjdCBzY3JpcHQgaW50byB0aGUgY3VycmVudCBkb2N1bWVudCAo
U2NyaXB0LAorICAgICAgICAvLyBYU0wpIG9yIGV4ZmlsdHJhdGUgdGhlIGNvbnRlbnQgb2YgdGhl
IGN1cnJlbnQgZG9jdW1lbnQgKENTUykuCisgICAgICAgIGlmIChGcmFtZSogZiA9IGZyYW1lKCkp
IHsKKyAgICAgICAgICAgIGlmICghZi0+bG9hZGVyKCkubWl4ZWRDb250ZW50Q2hlY2tlcigpLmNh
blJ1bkluc2VjdXJlQ29udGVudChtX2RvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCB1cmwpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIEZyYW1lJiB0b3AgPSBm
LT50cmVlKCkudG9wKCk7CisgICAgICAgICAgICBpZiAoJnRvcCAhPSBmICYmICF0b3AubG9hZGVy
KCkubWl4ZWRDb250ZW50Q2hlY2tlcigpLmNhblJ1bkluc2VjdXJlQ29udGVudCh0b3AuZG9jdW1l
bnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgdXJsKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQor
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlRleHRUcmFja1Jlc291cmNlOgorI2VuZGlmCisgICAg
Y2FzZSBDYWNoZWRSZXNvdXJjZTo6TWVkaWFSZXNvdXJjZToKKyAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpSYXdSZXNvdXJjZToKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNl
OgorI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U1ZHRm9u
dFJlc291cmNlOgorI2VuZGlmCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNl
OiB7CisgICAgICAgIC8vIFRoZXNlIHJlc291cmNlcyBjYW4gY29ycnVwdCBvbmx5IHRoZSBmcmFt
ZSdzIHBpeGVscy4KKyAgICAgICAgaWYgKEZyYW1lKiBmID0gZnJhbWUoKSkgeworICAgICAgICAg
ICAgRnJhbWUmIHRvcEZyYW1lID0gZi0+dHJlZSgpLnRvcCgpOworICAgICAgICAgICAgaWYgKCF0
b3BGcmFtZS5sb2FkZXIoKS5taXhlZENvbnRlbnRDaGVja2VyKCkuY2FuRGlzcGxheUluc2VjdXJl
Q29udGVudCh0b3BGcmFtZS5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBjb250ZW50VHlw
ZUZyb21SZXNvdXJjZVR5cGUodHlwZSksIHVybCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIENhY2hlZFJl
c291cmNlOjpNYWluUmVzb3VyY2U6CisjaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCisgICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6TGlua1ByZWZldGNoOgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OkxpbmtTdWJyZXNvdXJjZToKKyAgICAgICAgLy8gUHJlZmV0Y2ggY2Fubm90IGFmZmVjdCB0aGUg
Y3VycmVudCBkb2N1bWVudC4KKyNlbmRpZgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1NhbWVPcmlnaW5EYXRhVVJMKGNv
bnN0IFVSTCYgdXJsLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMsIGJvb2wg
ZGlkUmVjZWl2ZVJlZGlyZWN0UmVzcG9uc2UpCit7CisgICAgcmV0dXJuICFkaWRSZWNlaXZlUmVk
aXJlY3RSZXNwb25zZSAmJiB1cmwucHJvdG9jb2xJc0RhdGEoKSAmJiBvcHRpb25zLnNhbWVPcmln
aW5EYXRhVVJMRmxhZyA9PSBTYW1lT3JpZ2luRGF0YVVSTEZsYWc6OlNldDsKK30KKworYm9vbCBD
YWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2FuUmVxdWVzdChDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBl
LCBjb25zdCBVUkwmIHVybCwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zLCBi
b29sIGZvclByZWxvYWQsIGJvb2wgZGlkUmVjZWl2ZVJlZGlyZWN0UmVzcG9uc2UpCit7CisgICAg
aWYgKGRvY3VtZW50KCkgJiYgIWRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkRpc3Bs
YXkodXJsKSkgeworICAgICAgICBpZiAoIWZvclByZWxvYWQpCisgICAgICAgICAgICBGcmFtZUxv
YWRlcjo6cmVwb3J0TG9jYWxMb2FkRmFpbGVkKGZyYW1lKCksIHVybC5zdHJpbmdDZW50ZXJFbGxp
cHNpemVkVG9MZW5ndGgoKSk7CisgICAgICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZWRS
ZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJlc291cmNlIFVSTCB3YXMgbm90IGFsbG93ZWQgYnkgU2Vj
dXJpdHlPcmlnaW46OmNhbkRpc3BsYXkiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGJvb2wgc2tpcENvbnRlbnRTZWN1cml0eVBvbGljeUNoZWNrID0gb3B0aW9ucy5jb250
ZW50U2VjdXJpdHlQb2xpY3lJbXBvc2l0aW9uID09IENvbnRlbnRTZWN1cml0eVBvbGljeUltcG9z
aXRpb246OlNraXBQb2xpY3lDaGVjazsKKyAgICBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlZGly
ZWN0UmVzcG9uc2VSZWNlaXZlZCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgPSBkaWRSZWNlaXZl
UmVkaXJlY3RSZXNwb25zZSA/IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVkaXJlY3RSZXNwb25z
ZVJlY2VpdmVkOjpZZXMgOiBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlZGlyZWN0UmVzcG9uc2VS
ZWNlaXZlZDo6Tm87CisKKyAgICAvLyBTb21lIHR5cGVzIG9mIHJlc291cmNlcyBjYW4gYmUgbG9h
ZGVkIG9ubHkgZnJvbSB0aGUgc2FtZSBvcmlnaW4uIE90aGVyIHR5cGVzIG9mIHJlc291cmNlcywg
bGlrZSBJbWFnZXMsIFNjcmlwdHMsIGFuZCBDU1MsIGNhbiBiZSBsb2FkZWQgZnJvbSBhbnkgVVJM
LgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVtb3ZlIHRoYXQgY2hlY2sgYW5kIGhhbmRsZSBp
dCBieSBzZXR0aW5nIHRoZSBjb3JyZWN0IFJlc291cmNlTG9hZGVyT3B0aW9uczo6bW9kZS4KKyAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpNYWluUmVzb3VyY2U6
CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKKyAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlw
dDoKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0Zv
bnRSZXNvdXJjZToKKyNlbmRpZgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok1lZGlhUmVzb3Vy
Y2U6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlOgorICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOgorI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQorICAg
IGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRjaDoKKyAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpMaW5rU3VicmVzb3VyY2U6CisjZW5kaWYKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisg
ICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6VGV4dFRyYWNrUmVzb3VyY2U6CisjZW5kaWYKKyAgICAg
ICAgaWYgKG9wdGlvbnMubW9kZSA9PSBGZXRjaE9wdGlvbnM6Ok1vZGU6OlNhbWVPcmlnaW4gJiYg
IWlzU2FtZU9yaWdpbkRhdGFVUkwodXJsLCBvcHRpb25zLCBkaWRSZWNlaXZlUmVkaXJlY3RSZXNw
b25zZSkgJiYhbV9kb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpKSB7
CisgICAgICAgICAgICBwcmludEFjY2Vzc0RlbmllZE1lc3NhZ2UodXJsKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpTVkdEb2N1bWVudFJlc291cmNlOgorI2lmIEVOQUJMRShYU0xUKQorICAgIGNh
c2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6CisgICAgICAgIGlmICghbV9kb2N1bWVu
dC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpKSB7CisgICAgICAgICAgICBwcmlu
dEFjY2Vzc0RlbmllZE1lc3NhZ2UodXJsKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAodHlw
ZSkgeworI2lmIEVOQUJMRShYU0xUKQorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxl
U2hlZXQ6CisgICAgICAgIGlmICghbV9kb2N1bWVudC0+Y29udGVudFNlY3VyaXR5UG9saWN5KCkt
PmFsbG93U2NyaXB0RnJvbVNvdXJjZSh1cmwsIHNraXBDb250ZW50U2VjdXJpdHlQb2xpY3lDaGVj
aywgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6
CisgICAgICAgIGlmICghbV9kb2N1bWVudC0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93
U2NyaXB0RnJvbVNvdXJjZSh1cmwsIHNraXBDb250ZW50U2VjdXJpdHlQb2xpY3lDaGVjaywgcmVk
aXJlY3RSZXNwb25zZVJlY2VpdmVkKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgaWYgKGZyYW1lKCkgJiYgIWZyYW1lKCktPnNldHRpbmdzKCkuaXNTY3JpcHRFbmFibGVkKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6CisgICAgICAgIGlmICghbV9kb2N1bWVudC0+Y29u
dGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93U3R5bGVGcm9tU291cmNlKHVybCwgc2tpcENvbnRl
bnRTZWN1cml0eVBvbGljeUNoZWNrLCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpTVkdEb2N1bWVudFJlc291cmNlOgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdl
UmVzb3VyY2U6CisgICAgICAgIGlmICghbV9kb2N1bWVudC0+Y29udGVudFNlY3VyaXR5UG9saWN5
KCktPmFsbG93SW1hZ2VGcm9tU291cmNlKHVybCwgc2tpcENvbnRlbnRTZWN1cml0eVBvbGljeUNo
ZWNrLCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBicmVhazsKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgIGNhc2UgQ2FjaGVk
UmVzb3VyY2U6OlNWR0ZvbnRSZXNvdXJjZToKKyNlbmRpZgorICAgIGNhc2UgQ2FjaGVkUmVzb3Vy
Y2U6OkZvbnRSZXNvdXJjZTogeworICAgICAgICBpZiAoIW1fZG9jdW1lbnQtPmNvbnRlbnRTZWN1
cml0eVBvbGljeSgpLT5hbGxvd0ZvbnRGcm9tU291cmNlKHVybCwgc2tpcENvbnRlbnRTZWN1cml0
eVBvbGljeUNoZWNrLCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBDYWNoZWRSZXNvdXJj
ZTo6TWFpblJlc291cmNlOgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOgor
I2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQ
cmVmZXRjaDoKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rU3VicmVzb3VyY2U6CisjZW5k
aWYKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TWVkaWFSZXNvdXJj
ZToKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6VGV4
dFRyYWNrUmVzb3VyY2U6CisjZW5kaWYKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50LT5jb250ZW50
U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dNZWRpYUZyb21Tb3VyY2UodXJsLCBza2lwQ29udGVudFNl
Y3VyaXR5UG9saWN5Q2hlY2ssIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIFNWRyBJbWFn
ZXMgaGF2ZSB1bmlxdWUgc2VjdXJpdHkgcnVsZXMgdGhhdCBwcmV2ZW50IGFsbCBzdWJyZXNvdXJj
ZSByZXF1ZXN0cyBleGNlcHQgZm9yIGRhdGEgdXJscy4KKyAgICBpZiAodHlwZSAhPSBDYWNoZWRS
ZXNvdXJjZTo6TWFpblJlc291cmNlICYmIGZyYW1lKCkgJiYgZnJhbWUoKS0+cGFnZSgpKSB7Cisg
ICAgICAgIGlmIChmcmFtZSgpLT5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLmlzU1ZHSW1hZ2VD
aHJvbWVDbGllbnQoKSAmJiAhdXJsLnByb3RvY29sSXNEYXRhKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFjYW5SZXF1ZXN0SW5Db250ZW50RGlzcG9zaXRp
b25BdHRhY2htZW50U2FuZGJveCh0eXBlLCB1cmwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAvLyBMYXN0IG9mIGFsbCwgY2hlY2sgZm9yIGluc2VjdXJlIGNvbnRlbnQuIFdlIGRvIHRo
aXMgbGFzdCBzbyB0aGF0IHdoZW4KKyAgICAvLyBmb2xrcyBibG9jayBpbnNlY3VyZSBjb250ZW50
IHdpdGggYSBDU1AgcG9saWN5LCB0aGV5IGRvbid0IGdldCBhIHdhcm5pbmcuCisgICAgLy8gVGhl
eSdsbCBzdGlsbCBnZXQgYSB3YXJuaW5nIGluIHRoZSBjb25zb2xlIGFib3V0IENTUCBibG9ja2lu
ZyB0aGUgbG9hZC4KKworICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgY29uc2lkZXIgZm9yUHJlbG9h
ZCBoZXJlPworICAgIGlmICghY2hlY2tJbnNlY3VyZUNvbnRlbnQodHlwZSwgdXJsKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ2FjaGVkUmVz
b3VyY2VMb2FkZXI6OmNhblJlcXVlc3RJbkNvbnRlbnREaXNwb3NpdGlvbkF0dGFjaG1lbnRTYW5k
Ym94KENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFVSTCYgdXJsKSBjb25zdAorewor
ICAgIERvY3VtZW50KiBkb2N1bWVudDsKKyAgICAKKyAgICAvLyBGSVhNRTogRG8gd2Ugd2FudCB0
byBleHBhbmQgdGhpcyB0byBhbGwgcmVzb3VyY2UgdHlwZXMgdGhhdCB0aGUgbWl4ZWQgY29udGVu
dCBjaGVja2VyIHdvdWxkIGNvbnNpZGVyIGFjdGl2ZSBjb250ZW50PworICAgIHN3aXRjaCAodHlw
ZSkgeworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZToKKyAgICAgICAgaWYg
KGF1dG8gb3duZXJFbGVtZW50ID0gZnJhbWUoKSA/IGZyYW1lKCktPm93bmVyRWxlbWVudCgpIDog
bnVsbHB0cikgeworICAgICAgICAgICAgZG9jdW1lbnQgPSAmb3duZXJFbGVtZW50LT5kb2N1bWVu
dCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKKyAgICAgICAgZG9jdW1l
bnQgPSBtX2RvY3VtZW50OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIWRvY3VtZW50LT5zaG91bGRFbmZvcmNlQ29u
dGVudERpc3Bvc2l0aW9uQXR0YWNobWVudFNhbmRib3goKSB8fCBkb2N1bWVudC0+c2VjdXJpdHlP
cmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFN0
cmluZyBtZXNzYWdlID0gIlVuc2FmZSBhdHRlbXB0IHRvIGxvYWQgVVJMICIgKyB1cmwuc3RyaW5n
Q2VudGVyRWxsaXBzaXplZFRvTGVuZ3RoKCkgKyAiIGZyb20gZG9jdW1lbnQgd2l0aCBDb250ZW50
LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50IGF0IFVSTCAiICsgZG9jdW1lbnQtPnVybCgpLnN0cmlu
Z0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpICsgIi4iOworICAgIGRvY3VtZW50LT5hZGRDb25z
b2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpTZWN1cml0eSwgTWVzc2FnZUxldmVsOjpFcnJvciwg
bWVzc2FnZSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIENhY2hlZFJlc291cmNlTG9h
ZGVyOjpzaG91bGRDb250aW51ZUFmdGVyTm90aWZ5aW5nTG9hZGVkRnJvbU1lbW9yeUNhY2hlKGNv
bnN0IENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgQ2FjaGVkUmVzb3VyY2UqIHJlc291
cmNlKQoreworICAgIGlmICghcmVzb3VyY2UgfHwgIWZyYW1lKCkgfHwgcmVzb3VyY2UtPnN0YXR1
cygpICE9IENhY2hlZFJlc291cmNlOjpDYWNoZWQpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1JlcXVlc3QgPSBSZXNvdXJjZVJlcXVlc3QocmVzb3VyY2Ut
PnVybCgpKTsKKyAgICBpZiAocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5oaWRkZW5Gcm9tSW5z
cGVjdG9yKCkpCisgICAgICAgIG5ld1JlcXVlc3Quc2V0SGlkZGVuRnJvbUluc3BlY3Rvcih0cnVl
KTsKKyAgICBmcmFtZSgpLT5sb2FkZXIoKS5sb2FkZWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShy
ZXNvdXJjZSwgbmV3UmVxdWVzdCk7CisKKyAgICAvLyBGSVhNRSA8aHR0cDovL3dlYmtpdC5vcmcv
Yi8xMTMyNTE+OiBJZiB0aGUgZGVsZWdhdGUgbW9kaWZpZXMgdGhlIHJlcXVlc3QncworICAgIC8v
IFVSTCwgaXQgaXMgbm8gbG9uZ2VyIGFwcHJvcHJpYXRlIHRvIHVzZSB0aGlzIENhY2hlZFJlc291
cmNlLgorICAgIHJldHVybiAhbmV3UmVxdWVzdC5pc051bGwoKTsKK30KKworYm9vbCBDYWNoZWRS
ZXNvdXJjZUxvYWRlcjo6dXBkYXRlQ2FjaGVkUmVzb3VyY2VXaXRoQ3VycmVudFJlcXVlc3QoQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRS
ZXNvdXJjZT4mIHJlc291cmNlSGFuZGxlKQoreworICAgIEFTU0VSVChyZXNvdXJjZUhhbmRsZSk7
CisKKyAgICBDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UgPSAqcmVzb3VyY2VIYW5kbGU7CisKKyAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb2dyZXNzaXZlbHkgZXh0ZW5kIHRoaXMgdG8gb3RoZXIg
cmV1c2FibGUgcmVzb3VyY2VzCisgICAgaWYgKHJlc291cmNlLnR5cGUoKSAhPSBDYWNoZWRSZXNv
dXJjZTo6VHlwZTo6SW1hZ2VSZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ym9vbCBzaG91bGRVcGRhdGUgPSByZXNvdXJjZS5vcHRpb25zKCkubW9kZSAhPSByZXF1ZXN0Lm9w
dGlvbnMoKS5tb2RlIHx8IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cE9yaWdpbigpICE9
IHJlc291cmNlLnJlc291cmNlUmVxdWVzdCgpLmh0dHBPcmlnaW4oKTsKKworICAgIGlmICghc2hv
dWxkVXBkYXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogRm9yIGJl
aW5nIGxvYWRlZCByZXF1ZXN0cywgd2UgY3VycmVudGx5IGRvIG5vdCB1c2UgdGhlIHNhbWUgcmVz
b3VyY2UsIGFzIHRoaXMgbWF5IGluZHVjZSBlcnJvcnMgaW4gdGhlIHJlc291cmNlIHJlc3BvbnNl
IHRhaW50aW5nLgorICAgIC8vIFdlIHNob3VsZCBmaW5kIGEgd2F5IHRvIGltcHJvdmUgdGhpcy4K
KyAgICBpZiAocmVzb3VyY2Uuc3RhdHVzKCkgIT0gQ2FjaGVkUmVzb3VyY2U6OkNhY2hlZCkgewor
ICAgICAgICByZXF1ZXN0LnNldENhY2hpbmdQb2xpY3koQ2FjaGluZ1BvbGljeTo6RGlzYWxsb3dD
YWNoaW5nKTsKKyAgICAgICAgcmVzb3VyY2VIYW5kbGUgPSBsb2FkUmVzb3VyY2UocmVzb3VyY2Uu
dHlwZSgpLCByZXF1ZXN0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmVz
b3VyY2VIYW5kbGUgPSBjcmVhdGVSZXNvdXJjZShyZXNvdXJjZS50eXBlKCksIHJlcXVlc3QubXV0
YWJsZVJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LmNoYXJzZXQoKSwgc2Vzc2lvbklEKCkpOwor
ICAgIHJlc291cmNlSGFuZGxlLT5sb2FkRnJvbShyZXNvdXJjZSwgcmVxdWVzdC5vcHRpb25zKCks
ICp0aGlzKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxvZ01l
bW9yeUNhY2hlUmVzb3VyY2VSZXF1ZXN0KEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBkZXNj
cmlwdGlvbiwgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IFN0cmluZygpKQoreworICAgIGlmICghZnJh
bWUgfHwgIWZyYW1lLT5wYWdlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAodmFsdWUuaXNO
dWxsKCkpCisgICAgICAgIGZyYW1lLT5wYWdlKCktPmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCku
bG9nRGlhZ25vc3RpY01lc3NhZ2UoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZVJlcXVl
c3RLZXkoKSwgZGVzY3JpcHRpb24sIFNob3VsZFNhbXBsZTo6WWVzKTsKKyAgICBlbHNlCisgICAg
ICAgIGZyYW1lLT5wYWdlKCktPmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCkubG9nRGlhZ25vc3Rp
Y01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZVJlcXVlc3RL
ZXkoKSwgZGVzY3JpcHRpb24sIHZhbHVlLCBTaG91bGRTYW1wbGU6Olllcyk7Cit9CisKK0NhY2hl
ZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVx
dWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIENhY2hlZFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCkKK3sKKyAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+ZG9j
dW1lbnQoKSkKKyAgICAgICAgZG9jdW1lbnQtPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT51cGdy
YWRlSW5zZWN1cmVSZXF1ZXN0SWZOZWVkZWQocmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0
KCksIENvbnRlbnRTZWN1cml0eVBvbGljeTo6SW5zZWN1cmVSZXF1ZXN0VHlwZTo6TG9hZCk7Cisg
ICAgCisgICAgVVJMIHVybCA9IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7CisgICAg
CisgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0
UmVzb3VyY2UgJyVzJywgY2hhcnNldCAnJXMnLCBwcmlvcml0eT0lZCwgZm9yUHJlbG9hZD0ldSIs
IHVybC5zdHJpbmdDZW50ZXJFbGxpcHNpemVkVG9MZW5ndGgoKS5sYXRpbjEoKS5kYXRhKCksIHJl
cXVlc3QuY2hhcnNldCgpLmxhdGluMSgpLmRhdGEoKSwgcmVxdWVzdC5wcmlvcml0eSgpID8gc3Rh
dGljX2Nhc3Q8aW50PihyZXF1ZXN0LnByaW9yaXR5KCkudmFsdWUoKSkgOiAtMSwgcmVxdWVzdC5m
b3JQcmVsb2FkKCkpOworICAgIAorICAgIC8vIElmIG9ubHkgdGhlIGZyYWdtZW50IGlkZW50aWZp
ZXJzIGRpZmZlciwgaXQgaXMgdGhlIHNhbWUgcmVzb3VyY2UuCisgICAgdXJsID0gTWVtb3J5Q2Fj
aGU6OnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcklmTmVlZGVkKHVybCk7CisKKyAgICBpZiAoIXVy
bC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFjYW5SZXF1
ZXN0KHR5cGUsIHVybCwgcmVxdWVzdC5vcHRpb25zKCksIHJlcXVlc3QuZm9yUHJlbG9hZCgpKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQorICAgIGlmIChmcmFtZSgpICYmIGZyYW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKSAmJiBtX2Rv
Y3VtZW50TG9hZGVyKSB7CisgICAgICAgIGF1dG8mIHJlc291cmNlUmVxdWVzdCA9IHJlcXVlc3Qu
bXV0YWJsZVJlc291cmNlUmVxdWVzdCgpOworICAgICAgICBhdXRvIGJsb2NrZWRTdGF0dXMgPSBm
cmFtZSgpLT5tYWluRnJhbWUoKS5wYWdlKCktPnVzZXJDb250ZW50UHJvdmlkZXIoKS5wcm9jZXNz
Q29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9hZChyZXNvdXJjZVJlcXVlc3QudXJsKCksIHRvUmVz
b3VyY2VUeXBlKHR5cGUpLCAqbV9kb2N1bWVudExvYWRlcik7CisgICAgICAgIGFwcGx5QmxvY2tl
ZFN0YXR1c1RvUmVxdWVzdChibG9ja2VkU3RhdHVzLCByZXNvdXJjZVJlcXVlc3QpOworICAgICAg
ICBpZiAoYmxvY2tlZFN0YXR1cy5ibG9ja2VkTG9hZCkgeworICAgICAgICAgICAgaWYgKHR5cGUg
PT0gQ2FjaGVkUmVzb3VyY2U6OlR5cGU6Ok1haW5SZXNvdXJjZSkgeworICAgICAgICAgICAgICAg
IGF1dG8gcmVzb3VyY2UgPSBjcmVhdGVSZXNvdXJjZSh0eXBlLCByZXF1ZXN0Lm11dGFibGVSZXNv
dXJjZVJlcXVlc3QoKSwgcmVxdWVzdC5jaGFyc2V0KCksIHNlc3Npb25JRCgpKTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQocmVzb3VyY2UpOworICAgICAgICAgICAgICAgIHJlc291cmNlLT5lcnJv
cihDYWNoZWRSZXNvdXJjZTo6U3RhdHVzOjpMb2FkRXJyb3IpOworICAgICAgICAgICAgICAgIHJl
c291cmNlLT5zZXRSZXNvdXJjZUVycm9yKFJlc291cmNlRXJyb3IoQ29udGVudEV4dGVuc2lvbnM6
OldlYktpdENvbnRlbnRCbG9ja2VyRG9tYWluLCAwLCByZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgp
LnVybCgpLCBXRUJfVUlfU1RSSU5HKCJUaGUgVVJMIHdhcyBibG9ja2VkIGJ5IGEgY29udGVudCBi
bG9ja2VyIiwgIldlYktpdEVycm9yQmxvY2tlZEJ5Q29udGVudEJsb2NrZXIgZGVzY3JpcHRpb24i
KSkpOworICAgICAgICAgICAgICAgIHJldHVybiByZXNvdXJjZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIGlmIChibG9ja2Vk
U3RhdHVzLm1hZGVIVFRQUworICAgICAgICAgICAgJiYgdHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6
VHlwZTo6TWFpblJlc291cmNlCisgICAgICAgICAgICAmJiBtX2RvY3VtZW50TG9hZGVyLT5pc0xv
YWRpbmdNYWluUmVzb3VyY2UoKSkgeworICAgICAgICAgICAgLy8gVGhpcyBpcyB0byBtYWtlIHN1
cmUgdGhlIGNvcnJlY3QgJ25ldycgVVJMIHNob3dzIGluIHRoZSBsb2NhdGlvbiBiYXIuCisgICAg
ICAgICAgICBtX2RvY3VtZW50TG9hZGVyLT5mcmFtZUxvYWRlcigpLT5jbGllbnQoKS5kaXNwYXRj
aERpZENoYW5nZVByb3Zpc2lvbmFsVVJMKCk7CisgICAgICAgIH0KKyAgICAgICAgdXJsID0gcmVx
dWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKTsgLy8gVGhlIGNvbnRlbnQgZXh0ZW5zaW9uIGNv
dWxkIGhhdmUgY2hhbmdlZCBpdCBmcm9tIGh0dHAgdG8gaHR0cHMuCisgICAgICAgIHVybCA9IE1l
bW9yeUNhY2hlOjpyZW1vdmVGcmFnbWVudElkZW50aWZpZXJJZk5lZWRlZCh1cmwpOyAvLyBNaWdo
dCBuZWVkIHRvIHJlbW92ZSBmcmFnbWVudCBpZGVudGlmaWVyIGFnYWluLgorICAgIH0KKyNlbmRp
ZgorCisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgTG9hZFRpbWluZyBsb2FkVGltaW5nOwor
ICAgIGxvYWRUaW1pbmcubWFya1N0YXJ0VGltZUFuZEZldGNoU3RhcnQoKTsKKyNlbmRpZgorCisg
ICAgYXV0byYgbWVtb3J5Q2FjaGUgPSBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCk7CisgICAgaWYg
KHJlcXVlc3QuYWxsb3dzQ2FjaGluZygpICYmIG1lbW9yeUNhY2hlLmRpc2FibGVkKCkpIHsKKyAg
ICAgICAgRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50UmVzb3Vy
Y2VzLmZpbmQodXJsLnN0cmluZygpKTsKKyAgICAgICAgaWYgKGl0ICE9IG1fZG9jdW1lbnRSZXNv
dXJjZXMuZW5kKCkpIHsKKyAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0T3duaW5nQ2FjaGVkUmVz
b3VyY2VMb2FkZXIobnVsbHB0cik7CisgICAgICAgICAgICBtX2RvY3VtZW50UmVzb3VyY2VzLnJl
bW92ZShpdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTZWUgaWYgd2UgY2FuIHVzZSBh
biBleGlzdGluZyByZXNvdXJjZSBmcm9tIHRoZSBjYWNoZS4KKyAgICBDYWNoZWRSZXNvdXJjZUhh
bmRsZTxDYWNoZWRSZXNvdXJjZT4gcmVzb3VyY2U7CisjaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElP
TklORykKKyAgICBpZiAoZG9jdW1lbnQoKSkKKyAgICAgICAgcmVxdWVzdC5tdXRhYmxlUmVzb3Vy
Y2VSZXF1ZXN0KCkuc2V0RG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24oZG9jdW1lbnQoKS0+dG9wT3Jp
Z2luKCktPmRvbWFpbkZvckNhY2hlUGFydGl0aW9uKCkpOworI2VuZGlmCisKKyAgICBpZiAocmVx
dWVzdC5hbGxvd3NDYWNoaW5nKCkpCisgICAgICAgIHJlc291cmNlID0gbWVtb3J5Q2FjaGUucmVz
b3VyY2VGb3JSZXF1ZXN0KHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCksIHNlc3Npb25JRCgpKTsK
KworICAgIGxvZ01lbW9yeUNhY2hlUmVzb3VyY2VSZXF1ZXN0KGZyYW1lKCksIHJlc291cmNlID8g
RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjppbk1lbW9yeUNhY2hlS2V5KCkgOiBEaWFnbm9zdGljTG9n
Z2luZ0tleXM6Om5vdEluTWVtb3J5Q2FjaGVLZXkoKSk7CisKKyAgICBjb25zdCBSZXZhbGlkYXRp
b25Qb2xpY3kgcG9saWN5ID0gZGV0ZXJtaW5lUmV2YWxpZGF0aW9uUG9saWN5KHR5cGUsIHJlcXVl
c3QsIHJlc291cmNlLmdldCgpKTsKKyAgICBzd2l0Y2ggKHBvbGljeSkgeworICAgIGNhc2UgUmVs
b2FkOgorICAgICAgICBtZW1vcnlDYWNoZS5yZW1vdmUoKnJlc291cmNlKTsKKyAgICAgICAgRkFM
TFRIUk9VR0g7CisgICAgY2FzZSBMb2FkOgorICAgICAgICBpZiAocmVzb3VyY2UpCisgICAgICAg
ICAgICBsb2dNZW1vcnlDYWNoZVJlc291cmNlUmVxdWVzdChmcmFtZSgpLCBEaWFnbm9zdGljTG9n
Z2luZ0tleXM6OmluTWVtb3J5Q2FjaGVLZXkoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjp1bnVz
ZWRLZXkoKSk7CisgICAgICAgIHJlc291cmNlID0gbG9hZFJlc291cmNlKHR5cGUsIHJlcXVlc3Qp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJldmFsaWRhdGU6CisgICAgICAgIGlmIChyZXNv
dXJjZSkKKyAgICAgICAgICAgIGxvZ01lbW9yeUNhY2hlUmVzb3VyY2VSZXF1ZXN0KGZyYW1lKCks
IERpYWdub3N0aWNMb2dnaW5nS2V5czo6aW5NZW1vcnlDYWNoZUtleSgpLCBEaWFnbm9zdGljTG9n
Z2luZ0tleXM6OnJldmFsaWRhdGluZ0tleSgpKTsKKyAgICAgICAgcmVzb3VyY2UgPSByZXZhbGlk
YXRlUmVzb3VyY2UocmVxdWVzdCwgcmVzb3VyY2UuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFVzZToKKyAgICAgICAgaWYgKCF1cGRhdGVDYWNoZWRSZXNvdXJjZVdpdGhDdXJyZW50
UmVxdWVzdChyZXF1ZXN0LCByZXNvdXJjZSkpIHsKKyAgICAgICAgICAgIGlmICghc2hvdWxkQ29u
dGludWVBZnRlck5vdGlmeWluZ0xvYWRlZEZyb21NZW1vcnlDYWNoZShyZXF1ZXN0LCByZXNvdXJj
ZS5nZXQoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBs
b2dNZW1vcnlDYWNoZVJlc291cmNlUmVxdWVzdChmcmFtZSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6OmluTWVtb3J5Q2FjaGVLZXkoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjp1c2VkS2V5KCkp
OworICAgICAgICAgICAgbWVtb3J5Q2FjaGUucmVzb3VyY2VBY2Nlc3NlZCgqcmVzb3VyY2UpOwor
I2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgICAgICAgICAgaWYgKGRvY3VtZW50KCkgJiYgUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5yZXNvdXJjZVRpbWluZ0VuYWJs
ZWQoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FICgxNjExNzApOiBUaGUgbmV0d29ya0xv
YWRUaW1pbmcgc2hvdWxkbid0IGJlIHN0b3JlZCBvbiB0aGUgUmVzb3VyY2VSZXNwb25zZS4KKyAg
ICAgICAgICAgICAgICByZXNvdXJjZS0+cmVzcG9uc2UoKS5uZXR3b3JrTG9hZFRpbWluZygpLnJl
c2V0KCk7CisgICAgICAgICAgICAgICAgbG9hZFRpbWluZy5zZXRSZXNwb25zZUVuZChtb25vdG9u
aWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7CisgICAgICAgICAgICAgICAgbV9yZXNvdXJjZVRpbWlu
Z0luZm8uc3RvcmVSZXNvdXJjZVRpbWluZ0luaXRpYXRvckluZm9ybWF0aW9uKHJlc291cmNlLCBy
ZXF1ZXN0LCBmcmFtZSgpKTsKKyAgICAgICAgICAgICAgICBtX3Jlc291cmNlVGltaW5nSW5mby5h
ZGRSZXNvdXJjZVRpbWluZyhyZXNvdXJjZS5nZXQoKSwgKmRvY3VtZW50KCksIGxvYWRUaW1pbmcp
OworICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgaWYgKCFyZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBp
ZiAoIXJlcXVlc3QuZm9yUHJlbG9hZCgpIHx8IHBvbGljeSAhPSBVc2UpCisgICAgICAgIHJlc291
cmNlLT5zZXRMb2FkUHJpb3JpdHkocmVxdWVzdC5wcmlvcml0eSgpKTsKKworICAgIGlmICghcmVx
dWVzdC5mb3JQcmVsb2FkKCkgJiYgcmVzb3VyY2UtPmxvYWRlcigpICYmIHJlc291cmNlLT5yZXNv
dXJjZVJlcXVlc3QoKS5pZ25vcmVGb3JSZXF1ZXN0Q291bnQoKSkgeworICAgICAgICByZXNvdXJj
ZS0+cmVzb3VyY2VSZXF1ZXN0KCkuc2V0SWdub3JlRm9yUmVxdWVzdENvdW50KGZhbHNlKTsKKyAg
ICAgICAgaW5jcmVtZW50UmVxdWVzdENvdW50KCpyZXNvdXJjZSk7CisgICAgfQorCisgICAgaWYg
KChwb2xpY3kgIT0gVXNlIHx8IHJlc291cmNlLT5zdGlsbE5lZWRzTG9hZCgpKSAmJiBDYWNoZWRS
ZXNvdXJjZVJlcXVlc3Q6Ok5vRGVmZXIgPT0gcmVxdWVzdC5kZWZlcigpKSB7CisgICAgICAgIHJl
c291cmNlLT5sb2FkKCp0aGlzLCByZXF1ZXN0Lm9wdGlvbnMoKSk7CisKKyAgICAgICAgLy8gV2Ug
ZG9uJ3Qgc3VwcG9ydCBpbW1lZGlhdGUgbG9hZHMsIGJ1dCB3ZSBkbyBzdXBwb3J0IGltbWVkaWF0
ZSBmYWlsdXJlLgorICAgICAgICBpZiAocmVzb3VyY2UtPmVycm9yT2NjdXJyZWQoKSkgeworICAg
ICAgICAgICAgaWYgKHJlc291cmNlLT5hbGxvd3NDYWNoaW5nKCkgJiYgcmVzb3VyY2UtPmluQ2Fj
aGUoKSkKKyAgICAgICAgICAgICAgICBtZW1vcnlDYWNoZS5yZW1vdmUoKnJlc291cmNlKTsKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRv
Y3VtZW50KCkgJiYgIWRvY3VtZW50KCktPmxvYWRFdmVudEZpbmlzaGVkKCkgJiYgIXJlcXVlc3Qu
cmVzb3VyY2VSZXF1ZXN0KCkudXJsKCkucHJvdG9jb2xJc0RhdGEoKSkKKyAgICAgICAgbV92YWxp
ZGF0ZWRVUkxzLmFkZChyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpKTsKKworICAgIEFT
U0VSVChyZXNvdXJjZS0+dXJsKCkgPT0gdXJsLnN0cmluZygpKTsKKyAgICBtX2RvY3VtZW50UmVz
b3VyY2VzLnNldChyZXNvdXJjZS0+dXJsKCksIHJlc291cmNlKTsKKyAgICByZXR1cm4gcmVzb3Vy
Y2U7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRvY3VtZW50RGlkRmluaXNoTG9h
ZEV2ZW50KCkKK3sKKyAgICBtX3ZhbGlkYXRlZFVSTHMuY2xlYXIoKTsKK30KKworQ2FjaGVkUmVz
b3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXZhbGlk
YXRlUmVzb3VyY2UoY29uc3QgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBDYWNoZWRS
ZXNvdXJjZSogcmVzb3VyY2UpCit7CisgICAgQVNTRVJUKHJlc291cmNlKTsKKyAgICBBU1NFUlQo
cmVzb3VyY2UtPmluQ2FjaGUoKSk7CisgICAgYXV0byYgbWVtb3J5Q2FjaGUgPSBNZW1vcnlDYWNo
ZTo6c2luZ2xldG9uKCk7CisgICAgQVNTRVJUKCFtZW1vcnlDYWNoZS5kaXNhYmxlZCgpKTsKKyAg
ICBBU1NFUlQocmVzb3VyY2UtPmNhblVzZUNhY2hlVmFsaWRhdG9yKCkpOworICAgIEFTU0VSVCgh
cmVzb3VyY2UtPnJlc291cmNlVG9SZXZhbGlkYXRlKCkpOworICAgIEFTU0VSVChyZXNvdXJjZS0+
c2Vzc2lvbklEKCkgPT0gc2Vzc2lvbklEKCkpOworICAgIEFTU0VSVChyZXNvdXJjZS0+YWxsb3dz
Q2FjaGluZygpKTsKKworICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiBu
ZXdSZXNvdXJjZSA9IGNyZWF0ZVJlc291cmNlKHJlc291cmNlLT50eXBlKCksIHJlc291cmNlLT5y
ZXNvdXJjZVJlcXVlc3QoKSwgcmVzb3VyY2UtPmVuY29kaW5nKCksIHJlc291cmNlLT5zZXNzaW9u
SUQoKSk7CisKKyAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVzb3VyY2UgJXAgY3JlYXRlZCB0
byByZXZhbGlkYXRlICVwIiwgbmV3UmVzb3VyY2UuZ2V0KCksIHJlc291cmNlKTsKKyAgICBuZXdS
ZXNvdXJjZS0+c2V0UmVzb3VyY2VUb1JldmFsaWRhdGUocmVzb3VyY2UpOworICAgIAorICAgIG1l
bW9yeUNhY2hlLnJlbW92ZSgqcmVzb3VyY2UpOworICAgIG1lbW9yeUNhY2hlLmFkZCgqbmV3UmVz
b3VyY2UpOworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnJlc291cmNlVGltaW5nRW5hYmxlZCgpKQorICAgICAg
ICBtX3Jlc291cmNlVGltaW5nSW5mby5zdG9yZVJlc291cmNlVGltaW5nSW5pdGlhdG9ySW5mb3Jt
YXRpb24obmV3UmVzb3VyY2UsIHJlcXVlc3QsIGZyYW1lKCkpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0ocmVxdWVzdCk7CisjZW5kaWYKKyAgICByZXR1cm4gbmV3UmVzb3VyY2U7Cit9CisKK0Nh
Y2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
bG9hZFJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIENhY2hlZFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCkKK3sKKyAgICBhdXRvJiBtZW1vcnlDYWNoZSA9IE1lbW9yeUNhY2hlOjpz
aW5nbGV0b24oKTsKKyAgICBBU1NFUlQoIXJlcXVlc3QuYWxsb3dzQ2FjaGluZygpIHx8ICFtZW1v
cnlDYWNoZS5yZXNvdXJjZUZvclJlcXVlc3QocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgc2Vz
c2lvbklEKCkpKTsKKworICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJMb2FkaW5nIENhY2hlZFJl
c291cmNlIGZvciAnJXMnLiIsIHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCkuc3RyaW5n
Q2VudGVyRWxsaXBzaXplZFRvTGVuZ3RoKCkubGF0aW4xKCkuZGF0YSgpKTsKKworICAgIENhY2hl
ZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiByZXNvdXJjZSA9IGNyZWF0ZVJlc291cmNl
KHR5cGUsIHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LmNoYXJzZXQo
KSwgc2Vzc2lvbklEKCkpOworCisgICAgaWYgKHJlcXVlc3QuYWxsb3dzQ2FjaGluZygpICYmICFt
ZW1vcnlDYWNoZS5hZGQoKnJlc291cmNlKSkKKyAgICAgICAgcmVzb3VyY2UtPnNldE93bmluZ0Nh
Y2hlZFJlc291cmNlTG9hZGVyKHRoaXMpOworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnJlc291cmNlVGltaW5n
RW5hYmxlZCgpKQorICAgICAgICBtX3Jlc291cmNlVGltaW5nSW5mby5zdG9yZVJlc291cmNlVGlt
aW5nSW5pdGlhdG9ySW5mb3JtYXRpb24ocmVzb3VyY2UsIHJlcXVlc3QsIGZyYW1lKCkpOworI2Vu
ZGlmCisgICAgcmV0dXJuIHJlc291cmNlOworfQorCitzdGF0aWMgdm9pZCBsb2dSZXZhbGlkYXRp
b24oY29uc3QgU3RyaW5nJiByZWFzb24sIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50JiBsb2dDbGll
bnQpCit7CisgICAgbG9nQ2xpZW50LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdu
b3N0aWNMb2dnaW5nS2V5czo6Y2FjaGVkUmVzb3VyY2VSZXZhbGlkYXRpb25LZXkoKSwgRGlhZ25v
c3RpY0xvZ2dpbmdLZXlzOjpyZWFzb25LZXkoKSwgcmVhc29uLCBTaG91bGRTYW1wbGU6Olllcyk7
Cit9CisKK3N0YXRpYyB2b2lkIGxvZ1Jlc291cmNlUmV2YWxpZGF0aW9uRGVjaXNpb24oQ2FjaGVk
UmVzb3VyY2U6OlJldmFsaWRhdGlvbkRlY2lzaW9uIHJlYXNvbiwgY29uc3QgRnJhbWUqIGZyYW1l
KQoreworICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5wYWdlKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBhdXRvJiBsb2dDbGllbnQgPSBmcmFtZS0+cGFnZSgpLT5kaWFnbm9zdGljTG9nZ2luZ0Ns
aWVudCgpOworICAgIHN3aXRjaCAocmVhc29uKSB7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6
UmV2YWxpZGF0aW9uRGVjaXNpb246Ok5vOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpSZXZhbGlkYXRpb25EZWNpc2lvbjo6WWVzRHVlVG9FeHBpcmVkOgorICAgICAg
ICBsb2dSZXZhbGlkYXRpb24oRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjppc0V4cGlyZWRLZXkoKSwg
bG9nQ2xpZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmV2
YWxpZGF0aW9uRGVjaXNpb246Olllc0R1ZVRvTm9TdG9yZToKKyAgICAgICAgbG9nUmV2YWxpZGF0
aW9uKERpYWdub3N0aWNMb2dnaW5nS2V5czo6bm9TdG9yZUtleSgpLCBsb2dDbGllbnQpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpSZXZhbGlkYXRpb25EZWNpc2lv
bjo6WWVzRHVlVG9Ob0NhY2hlOgorICAgICAgICBsb2dSZXZhbGlkYXRpb24oRGlhZ25vc3RpY0xv
Z2dpbmdLZXlzOjpub0NhY2hlS2V5KCksIGxvZ0NsaWVudCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJldmFsaWRhdGlvbkRlY2lzaW9uOjpZZXNEdWVUb0NhY2hl
UG9saWN5OgorICAgICAgICBsb2dSZXZhbGlkYXRpb24oRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpy
ZWxvYWRLZXkoKSwgbG9nQ2xpZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitDYWNo
ZWRSZXNvdXJjZUxvYWRlcjo6UmV2YWxpZGF0aW9uUG9saWN5IENhY2hlZFJlc291cmNlTG9hZGVy
OjpkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3koQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwg
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiBjYWNoZWRSZXNvdXJjZVJlcXVlc3QsIENhY2hlZFJlc291
cmNlKiBleGlzdGluZ1Jlc291cmNlKSBjb25zdAoreworICAgIGF1dG8mIHJlcXVlc3QgPSBjYWNo
ZWRSZXNvdXJjZVJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCk7CisKKyAgICBpZiAoIWV4aXN0aW5n
UmVzb3VyY2UpCisgICAgICAgIHJldHVybiBMb2FkOworCisgICAgLy8gV2UgYWxyZWFkeSBoYXZl
IGEgcHJlbG9hZCBnb2luZyBmb3IgdGhpcyBVUkwuCisgICAgaWYgKGNhY2hlZFJlc291cmNlUmVx
dWVzdC5mb3JQcmVsb2FkKCkgJiYgZXhpc3RpbmdSZXNvdXJjZS0+aXNQcmVsb2FkZWQoKSkKKyAg
ICAgICAgcmV0dXJuIFVzZTsKKworICAgIC8vIElmIHRoZSBzYW1lIFVSTCBoYXMgYmVlbiBsb2Fk
ZWQgYXMgYSBkaWZmZXJlbnQgdHlwZSwgd2UgbmVlZCB0byByZWxvYWQuCisgICAgaWYgKGV4aXN0
aW5nUmVzb3VyY2UtPnR5cGUoKSAhPSB0eXBlKSB7CisgICAgICAgIExPRyhSZXNvdXJjZUxvYWRp
bmcsICJDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGV0ZXJtaW5lUmV2YWxpZGF0aW9uUG9saWN5IHJl
bG9hZGluZyBkdWUgdG8gdHlwZSBtaXNtYXRjaC4iKTsKKyAgICAgICAgbG9nTWVtb3J5Q2FjaGVS
ZXNvdXJjZVJlcXVlc3QoZnJhbWUoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjppbk1lbW9yeUNh
Y2hlS2V5KCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6dW51c2VkUmVhc29uVHlwZU1pc21hdGNo
S2V5KCkpOworICAgICAgICByZXR1cm4gUmVsb2FkOworICAgIH0KKworICAgIGlmICghZXhpc3Rp
bmdSZXNvdXJjZS0+dmFyeUhlYWRlclZhbHVlc01hdGNoKHJlcXVlc3QsICp0aGlzKSkKKyAgICAg
ICAgcmV0dXJuIFJlbG9hZDsKKworICAgIGF1dG8qIHRleHREZWNvZGVyID0gZXhpc3RpbmdSZXNv
dXJjZS0+dGV4dFJlc291cmNlRGVjb2RlcigpOworICAgIGlmICh0ZXh0RGVjb2RlciAmJiAhdGV4
dERlY29kZXItPmhhc0VxdWFsRW5jb2RpbmdGb3JDaGFyc2V0KGNhY2hlZFJlc291cmNlUmVxdWVz
dC5jaGFyc2V0KCkpKQorICAgICAgICByZXR1cm4gUmVsb2FkOworCisgICAgLy8gRklYTUU6IFdl
IHNob3VsZCB1c2UgdGhlIHNhbWUgY2FjaGUgcG9saWN5IGZvciBhbGwgcmVzb3VyY2UgdHlwZXMu
IFRoZSByYXcgcmVzb3VyY2UgcG9saWN5IGlzIG92ZXJseSBzdHJpY3QKKyAgICAvLyAgICAgICAg
d2hpbGUgdGhlIG5vcm1hbCBzdWJyZXNvdXJjZSBwb2xpY3kgaXMgdG9vIGxvb3NlLgorICAgIGlm
IChleGlzdGluZ1Jlc291cmNlLT5pc01haW5Pck1lZGlhT3JSYXdSZXNvdXJjZSgpICYmIGZyYW1l
KCkpIHsKKyAgICAgICAgYm9vbCBzdHJpY3RQb2xpY3lEaXNhYmxlZCA9IGZyYW1lKCktPmxvYWRl
cigpLmlzU3RyaWN0UmF3UmVzb3VyY2VWYWxpZGF0aW9uUG9saWN5RGlzYWJsZWRGb3JUZXN0aW5n
KCk7CisgICAgICAgIGJvb2wgY2FuUmV1c2VSYXdSZXNvdXJjZSA9IHN0cmljdFBvbGljeURpc2Fi
bGVkIHx8IGRvd25jYXN0PENhY2hlZFJhd1Jlc291cmNlPigqZXhpc3RpbmdSZXNvdXJjZSkuY2Fu
UmV1c2UocmVxdWVzdCk7CisgICAgICAgIGlmICghY2FuUmV1c2VSYXdSZXNvdXJjZSkKKyAgICAg
ICAgICAgIHJldHVybiBSZWxvYWQ7CisgICAgfQorCisgICAgLy8gQ29uZGl0aW9uYWwgcmVxdWVz
dHMgc2hvdWxkIGhhdmUgZmFpbGVkIGNhblJldXNlIGNoZWNrLgorICAgIEFTU0VSVCghcmVxdWVz
dC5pc0NvbmRpdGlvbmFsKCkpOworCisgICAgLy8gRG8gbm90IGxvYWQgZnJvbSBjYWNoZSBpZiBp
bWFnZXMgYXJlIG5vdCBlbmFibGVkLiBUaGUgbG9hZCBmb3IgdGhpcyBpbWFnZSB3aWxsIGJlIGJs
b2NrZWQKKyAgICAvLyBpbiBDYWNoZWRJbWFnZTo6bG9hZC4KKyAgICBpZiAoY2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0LmRlZmVyKCkgPT0gQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpEZWZlcnJlZEJ5Q2xp
ZW50KQorICAgICAgICByZXR1cm4gUmVsb2FkOworCisgICAgLy8gRG9uJ3QgcmVsb2FkIHJlc291
cmNlcyB3aGlsZSBwYXN0aW5nLgorICAgIGlmIChtX2FsbG93U3RhbGVSZXNvdXJjZXMpCisgICAg
ICAgIHJldHVybiBVc2U7CisKKyAgICAvLyBBbHdheXMgdXNlIHByZWxvYWRzLgorICAgIGlmIChl
eGlzdGluZ1Jlc291cmNlLT5pc1ByZWxvYWRlZCgpKQorICAgICAgICByZXR1cm4gVXNlOworCisg
ICAgLy8gV2UgY2FuIGZpbmQgcmVzb3VyY2VzIHRoYXQgYXJlIGJlaW5nIHZhbGlkYXRlZCBmcm9t
IGNhY2hlIG9ubHkgd2hlbiB2YWxpZGF0aW9uIGlzIGp1c3Qgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRp
bmcuCisgICAgaWYgKGV4aXN0aW5nUmVzb3VyY2UtPnZhbGlkYXRpb25Db21wbGV0aW5nKCkpCisg
ICAgICAgIHJldHVybiBVc2U7CisgICAgQVNTRVJUKCFleGlzdGluZ1Jlc291cmNlLT52YWxpZGF0
aW9uSW5Qcm9ncmVzcygpKTsKKworICAgIC8vIFZhbGlkYXRlIHRoZSByZWRpcmVjdCBjaGFpbi4K
KyAgICBib29sIGNhY2hlUG9saWN5SXNIaXN0b3J5QnVmZmVyID0gY2FjaGVQb2xpY3kodHlwZSkg
PT0gQ2FjaGVQb2xpY3lIaXN0b3J5QnVmZmVyOworICAgIGlmICghZXhpc3RpbmdSZXNvdXJjZS0+
cmVkaXJlY3RDaGFpbkFsbG93c1JldXNlKGNhY2hlUG9saWN5SXNIaXN0b3J5QnVmZmVyID8gUmV1
c2VFeHBpcmVkUmVkaXJlY3Rpb24gOiBEb05vdFJldXNlRXhwaXJlZFJlZGlyZWN0aW9uKSkgewor
ICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRldGVy
bWluZVJldmFsaWRhdGlvblBvbGljeSByZWxvYWRpbmcgZHVlIHRvIG5vdCBjYWNoZWQgb3IgZXhw
aXJlZCByZWRpcmVjdGlvbnMuIik7CisgICAgICAgIGxvZ01lbW9yeUNhY2hlUmVzb3VyY2VSZXF1
ZXN0KGZyYW1lKCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6aW5NZW1vcnlDYWNoZUtleSgpLCBE
aWFnbm9zdGljTG9nZ2luZ0tleXM6OnVudXNlZFJlYXNvblJlZGlyZWN0Q2hhaW5LZXkoKSk7Cisg
ICAgICAgIHJldHVybiBSZWxvYWQ7CisgICAgfQorCisgICAgLy8gQ2FjaGVQb2xpY3lIaXN0b3J5
QnVmZmVyIHVzZXMgdGhlIGNhY2hlIGV4Y2VwdCBpZiB0aGlzIGlzIGEgbWFpbiByZXNvdXJjZSB3
aXRoICJjYWNoZS1jb250cm9sOiBuby1zdG9yZSIuCisgICAgaWYgKGNhY2hlUG9saWN5SXNIaXN0
b3J5QnVmZmVyKSB7CisgICAgICAgIC8vIEZJWE1FOiBJZ25vcmluZyAiY2FjaGUtY29udHJvbDog
bm8tY2FjaGUiIGZvciBzdWItcmVzb3VyY2VzIG9uIGhpc3RvcnkgbmF2aWdhdGlvbiBidXQgbm90
IHRoZSBtYWluCisgICAgICAgIC8vIHJlc291cmNlIGlzIGluY29uc2lzdGVudC4gV2Ugc2hvdWxk
IHByb2JhYmx5IGhhcm1vbml6ZSB0aGlzLgorICAgICAgICBpZiAoIWV4aXN0aW5nUmVzb3VyY2Ut
PnJlc3BvbnNlKCkuY2FjaGVDb250cm9sQ29udGFpbnNOb1N0b3JlKCkgfHwgdHlwZSAhPSBDYWNo
ZWRSZXNvdXJjZTo6TWFpblJlc291cmNlKQorICAgICAgICAgICAgcmV0dXJuIFVzZTsKKyAgICB9
CisKKyAgICAvLyBEb24ndCByZXVzZSByZXNvdXJjZXMgd2l0aCBDYWNoZS1jb250cm9sOiBuby1z
dG9yZS4KKyAgICBpZiAoZXhpc3RpbmdSZXNvdXJjZS0+cmVzcG9uc2UoKS5jYWNoZUNvbnRyb2xD
b250YWluc05vU3RvcmUoKSkgeworICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OmRldGVybWluZVJldmFsaWRhdGlvblBvbGljeSByZWxvYWRpbmcgZHVl
IHRvIENhY2hlLWNvbnRyb2w6IG5vLXN0b3JlLiIpOworICAgICAgICBsb2dNZW1vcnlDYWNoZVJl
c291cmNlUmVxdWVzdChmcmFtZSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmluTWVtb3J5Q2Fj
aGVLZXkoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjp1bnVzZWRSZWFzb25Ob1N0b3JlS2V5KCkp
OworICAgICAgICByZXR1cm4gUmVsb2FkOworICAgIH0KKworICAgIC8vIElmIGNyZWRlbnRpYWxz
IHdlcmUgc2VudCB3aXRoIHRoZSBwcmV2aW91cyByZXF1ZXN0IGFuZCB3b24ndCBiZQorICAgIC8v
IHdpdGggdGhpcyBvbmUsIG9yIHZpY2UgdmVyc2EsIHJlLWZldGNoIHRoZSByZXNvdXJjZS4KKyAg
ICAvLworICAgIC8vIFRoaXMgaGVscHMgd2l0aCB0aGUgY2FzZSB3aGVyZSB0aGUgc2VydmVyIHNl
bmRzIGJhY2sKKyAgICAvLyAiQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luOiAqIiBhbGwgdGhl
IHRpbWUsIGJ1dCBzb21lIG9mIHRoZQorICAgIC8vIGNsaWVudCdzIHJlcXVlc3RzIGFyZSBtYWRl
IHdpdGhvdXQgQ09SUyBhbmQgc29tZSB3aXRoLgorICAgIGlmIChleGlzdGluZ1Jlc291cmNlLT5y
ZXNvdXJjZVJlcXVlc3QoKS5hbGxvd0Nvb2tpZXMoKSAhPSByZXF1ZXN0LmFsbG93Q29va2llcygp
KSB7CisgICAgICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
ZGV0ZXJtaW5lUmV2YWxpZGF0aW9uUG9saWN5IHJlbG9hZGluZyBkdWUgdG8gZGlmZmVyZW5jZSBp
biBjcmVkZW50aWFscyBzZXR0aW5ncy4iKTsKKyAgICAgICAgbG9nTWVtb3J5Q2FjaGVSZXNvdXJj
ZVJlcXVlc3QoZnJhbWUoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjppbk1lbW9yeUNhY2hlS2V5
KCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6dW51c2VkUmVhc29uQ3JlZGVudGlhbFNldHRpbmdz
S2V5KCkpOworICAgICAgICByZXR1cm4gUmVsb2FkOworICAgIH0KKworICAgIC8vIER1cmluZyB0
aGUgaW5pdGlhbCBsb2FkLCBhdm9pZCBsb2FkaW5nIHRoZSBzYW1lIHJlc291cmNlIG11bHRpcGxl
IHRpbWVzIGZvciBhIHNpbmdsZSBkb2N1bWVudCwgZXZlbiBpZiB0aGUgY2FjaGUgcG9saWNpZXMg
d291bGQgdGVsbCB1cyB0by4KKyAgICBpZiAoZG9jdW1lbnQoKSAmJiAhZG9jdW1lbnQoKS0+bG9h
ZEV2ZW50RmluaXNoZWQoKSAmJiBtX3ZhbGlkYXRlZFVSTHMuY29udGFpbnMoZXhpc3RpbmdSZXNv
dXJjZS0+dXJsKCkpKQorICAgICAgICByZXR1cm4gVXNlOworCisgICAgLy8gQ2FjaGVQb2xpY3lS
ZWxvYWQgYWx3YXlzIHJlbG9hZHMKKyAgICBpZiAoY2FjaGVQb2xpY3kodHlwZSkgPT0gQ2FjaGVQ
b2xpY3lSZWxvYWQpIHsKKyAgICAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJlc291
cmNlTG9hZGVyOjpkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3kgcmVsb2FkaW5nIGR1ZSB0byBD
YWNoZVBvbGljeVJlbG9hZC4iKTsKKyAgICAgICAgbG9nTWVtb3J5Q2FjaGVSZXNvdXJjZVJlcXVl
c3QoZnJhbWUoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjppbk1lbW9yeUNhY2hlS2V5KCksIERp
YWdub3N0aWNMb2dnaW5nS2V5czo6dW51c2VkUmVhc29uUmVsb2FkS2V5KCkpOworICAgICAgICBy
ZXR1cm4gUmVsb2FkOworICAgIH0KKyAgICAKKyAgICAvLyBXZSdsbCB0cnkgdG8gcmVsb2FkIHRo
ZSByZXNvdXJjZSBpZiBpdCBmYWlsZWQgbGFzdCB0aW1lLgorICAgIGlmIChleGlzdGluZ1Jlc291
cmNlLT5lcnJvck9jY3VycmVkKCkpIHsKKyAgICAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNh
Y2hlZFJlc291cmNlTG9hZGVyOjpkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3llIHJlbG9hZGlu
ZyBkdWUgdG8gcmVzb3VyY2UgYmVpbmcgaW4gdGhlIGVycm9yIHN0YXRlIik7CisgICAgICAgIGxv
Z01lbW9yeUNhY2hlUmVzb3VyY2VSZXF1ZXN0KGZyYW1lKCksIERpYWdub3N0aWNMb2dnaW5nS2V5
czo6aW5NZW1vcnlDYWNoZUtleSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnVudXNlZFJlYXNv
bkVycm9yS2V5KCkpOworICAgICAgICByZXR1cm4gUmVsb2FkOworICAgIH0KKyAgICAKKyAgICAv
LyBGb3IgcmVzb3VyY2VzIHRoYXQgYXJlIG5vdCB5ZXQgbG9hZGVkIHdlIGlnbm9yZSB0aGUgY2Fj
aGUgcG9saWN5LgorICAgIGlmIChleGlzdGluZ1Jlc291cmNlLT5pc0xvYWRpbmcoKSkKKyAgICAg
ICAgcmV0dXJuIFVzZTsKKworICAgIGF1dG8gcmV2YWxpZGF0aW9uRGVjaXNpb24gPSBleGlzdGlu
Z1Jlc291cmNlLT5tYWtlUmV2YWxpZGF0aW9uRGVjaXNpb24oY2FjaGVQb2xpY3kodHlwZSkpOwor
ICAgIGxvZ1Jlc291cmNlUmV2YWxpZGF0aW9uRGVjaXNpb24ocmV2YWxpZGF0aW9uRGVjaXNpb24s
IGZyYW1lKCkpOworCisgICAgLy8gQ2hlY2sgaWYgdGhlIGNhY2hlIGhlYWRlcnMgcmVxdWlyZXMg
dXMgdG8gcmV2YWxpZGF0ZSAoY2FjaGUgZXhwaXJhdGlvbiBmb3IgZXhhbXBsZSkuCisgICAgaWYg
KHJldmFsaWRhdGlvbkRlY2lzaW9uICE9IENhY2hlZFJlc291cmNlOjpSZXZhbGlkYXRpb25EZWNp
c2lvbjo6Tm8pIHsKKyAgICAgICAgLy8gU2VlIGlmIHRoZSByZXNvdXJjZSBoYXMgdXNhYmxlIEVU
YWcgb3IgTGFzdC1tb2RpZmllZCBoZWFkZXJzLgorICAgICAgICBpZiAoZXhpc3RpbmdSZXNvdXJj
ZS0+Y2FuVXNlQ2FjaGVWYWxpZGF0b3IoKSkKKyAgICAgICAgICAgIHJldHVybiBSZXZhbGlkYXRl
OworICAgICAgICAKKyAgICAgICAgLy8gTm8sIG11c3QgcmVsb2FkLgorICAgICAgICBMT0coUmVz
b3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRldGVybWluZVJldmFsaWRhdGlv
blBvbGljeSByZWxvYWRpbmcgZHVlIHRvIG1pc3NpbmcgY2FjaGUgdmFsaWRhdG9ycy4iKTsKKyAg
ICAgICAgbG9nTWVtb3J5Q2FjaGVSZXNvdXJjZVJlcXVlc3QoZnJhbWUoKSwgRGlhZ25vc3RpY0xv
Z2dpbmdLZXlzOjppbk1lbW9yeUNhY2hlS2V5KCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6dW51
c2VkUmVhc29uTXVzdFJldmFsaWRhdGVOb1ZhbGlkYXRvcktleSgpKTsKKyAgICAgICAgcmV0dXJu
IFJlbG9hZDsKKyAgICB9CisKKyAgICByZXR1cm4gVXNlOworfQorCit2b2lkIENhY2hlZFJlc291
cmNlTG9hZGVyOjpwcmludEFjY2Vzc0RlbmllZE1lc3NhZ2UoY29uc3QgVVJMJiB1cmwpIGNvbnN0
Cit7CisgICAgaWYgKHVybC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFm
cmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgbWVzc2FnZTsKKyAgICBpZiAo
IW1fZG9jdW1lbnQgfHwgbV9kb2N1bWVudC0+dXJsKCkuaXNOdWxsKCkpCisgICAgICAgIG1lc3Nh
Z2UgPSAiVW5zYWZlIGF0dGVtcHQgdG8gbG9hZCBVUkwgIiArIHVybC5zdHJpbmdDZW50ZXJFbGxp
cHNpemVkVG9MZW5ndGgoKSArICcuJzsKKyAgICBlbHNlCisgICAgICAgIG1lc3NhZ2UgPSAiVW5z
YWZlIGF0dGVtcHQgdG8gbG9hZCBVUkwgIiArIHVybC5zdHJpbmdDZW50ZXJFbGxpcHNpemVkVG9M
ZW5ndGgoKSArICIgZnJvbSBmcmFtZSB3aXRoIFVSTCAiICsgbV9kb2N1bWVudC0+dXJsKCkuc3Ry
aW5nQ2VudGVyRWxsaXBzaXplZFRvTGVuZ3RoKCkgKyAiLiBEb21haW5zLCBwcm90b2NvbHMgYW5k
IHBvcnRzIG11c3QgbWF0Y2guXG4iOworCisgICAgZnJhbWUoKS0+ZG9jdW1lbnQoKS0+YWRkQ29u
c29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6U2VjdXJpdHksIE1lc3NhZ2VMZXZlbDo6RXJyb3Is
IG1lc3NhZ2UpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpzZXRBdXRvTG9hZElt
YWdlcyhib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxlID09IG1fYXV0b0xvYWRJbWFnZXMp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fYXV0b0xvYWRJbWFnZXMgPSBlbmFibGU7CisKKyAg
ICBpZiAoIW1fYXV0b0xvYWRJbWFnZXMpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbG9hZElt
YWdlc0lmTm90RGVmZXJyZWQoKTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6c2V0
SW1hZ2VzRW5hYmxlZChib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxlID09IG1faW1hZ2Vz
RW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbWFnZXNFbmFibGVkID0gZW5hYmxl
OworCisgICAgaWYgKCFtX2ltYWdlc0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIHJl
bG9hZEltYWdlc0lmTm90RGVmZXJyZWQoKTsKK30KKworYm9vbCBDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6Y2xpZW50RGVmZXJzSW1hZ2UoY29uc3QgVVJMJikgY29uc3QKK3sKKyAgICByZXR1cm4gIW1f
aW1hZ2VzRW5hYmxlZDsKK30KKworYm9vbCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6c2hvdWxkUGVy
Zm9ybUltYWdlTG9hZChjb25zdCBVUkwmIHVybCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hdXRv
TG9hZEltYWdlcyB8fCB1cmwucHJvdG9jb2xJc0RhdGEoKTsKK30KKworYm9vbCBDYWNoZWRSZXNv
dXJjZUxvYWRlcjo6c2hvdWxkRGVmZXJJbWFnZUxvYWQoY29uc3QgVVJMJiB1cmwpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGNsaWVudERlZmVyc0ltYWdlKHVybCkgfHwgIXNob3VsZFBlcmZvcm1JbWFn
ZUxvYWQodXJsKTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVsb2FkSW1hZ2Vz
SWZOb3REZWZlcnJlZCgpCit7CisgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IG1fZG9jdW1lbnRS
ZXNvdXJjZXMudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKGlzPENhY2hlZEltYWdlPigqcmVzb3Vy
Y2UpICYmIHJlc291cmNlLT5zdGlsbE5lZWRzTG9hZCgpICYmICFjbGllbnREZWZlcnNJbWFnZShy
ZXNvdXJjZS0+dXJsKCkpKQorICAgICAgICAgICAgZG93bmNhc3Q8Q2FjaGVkSW1hZ2U+KCpyZXNv
dXJjZSkubG9hZCgqdGhpcywgZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygpKTsKKyAgICB9
Cit9CisKK0NhY2hlUG9saWN5IENhY2hlZFJlc291cmNlTG9hZGVyOjpjYWNoZVBvbGljeShDYWNo
ZWRSZXNvdXJjZTo6VHlwZSB0eXBlKSBjb25zdAoreworICAgIEZyYW1lKiBmcmFtZSA9IHRoaXMt
PmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIENhY2hlUG9saWN5VmVy
aWZ5OworCisgICAgaWYgKHR5cGUgIT0gQ2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZSkKKyAg
ICAgICAgcmV0dXJuIGZyYW1lLT5sb2FkZXIoKS5zdWJyZXNvdXJjZUNhY2hlUG9saWN5KCk7CisK
KyAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpIHsKKyAgICAgICAgaWYgKHBhZ2Ut
PmlzUmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBDYWNoZVBv
bGljeVJlbG9hZDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGZyYW1lLT5sb2FkZXIoKS5sb2FkVHlw
ZSgpKSB7CisgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpSZWxvYWRGcm9tT3JpZ2luOgorICAgIGNh
c2UgRnJhbWVMb2FkVHlwZTo6UmVsb2FkOgorICAgICAgICByZXR1cm4gQ2FjaGVQb2xpY3lSZWxv
YWQ7CisgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpCYWNrOgorICAgIGNhc2UgRnJhbWVMb2FkVHlw
ZTo6Rm9yd2FyZDoKKyAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OkluZGV4ZWRCYWNrRm9yd2FyZDoK
KyAgICAgICAgLy8gRG8gbm90IHJldmFsaWRhdGUgY2FjaGVkIG1haW4gcmVzb3VyY2Ugb24gYmFj
ay9mb3J3YXJkIG5hdmlnYXRpb24uCisgICAgICAgIHJldHVybiBDYWNoZVBvbGljeUhpc3RvcnlC
dWZmZXI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIENhY2hlUG9saWN5VmVyaWZ5Owor
ICAgIH0KK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVtb3ZlQ2FjaGVkUmVzb3Vy
Y2UoQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBEb2N1
bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZmluZChy
ZXNvdXJjZS51cmwoKSk7CisgICAgaWYgKGl0ICE9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZW5kKCkp
CisgICAgICAgIEFTU0VSVChpdC0+dmFsdWUuZ2V0KCkgPT0gJnJlc291cmNlKTsKKyNlbmRpZgor
ICAgIG1fZG9jdW1lbnRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlLnVybCgpKTsKK30KKwordm9p
ZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6bG9hZERvbmUoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNl
LCBib29sIHNob3VsZFBlcmZvcm1Qb3N0TG9hZEFjdGlvbnMpCit7CisgICAgUmVmUHRyPERvY3Vt
ZW50TG9hZGVyPiBwcm90ZWN0RG9jdW1lbnRMb2FkZXIobV9kb2N1bWVudExvYWRlcik7CisgICAg
UmVmUHRyPERvY3VtZW50PiBwcm90ZWN0RG9jdW1lbnQobV9kb2N1bWVudCk7CisKKyNpZiBFTkFC
TEUoV0VCX1RJTUlORykKKyAgICBpZiAocmVzb3VyY2UgJiYgZG9jdW1lbnQoKSAmJiBSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnJlc291cmNlVGltaW5nRW5hYmxlZCgp
KQorICAgICAgICBtX3Jlc291cmNlVGltaW5nSW5mby5hZGRSZXNvdXJjZVRpbWluZyhyZXNvdXJj
ZSwgKmRvY3VtZW50KCksIHJlc291cmNlLT5sb2FkZXIoKS0+bG9hZFRpbWluZygpKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHJlc291cmNlKTsKKyNlbmRpZgorCisgICAgaWYgKGZyYW1lKCkp
CisgICAgICAgIGZyYW1lKCktPmxvYWRlcigpLmxvYWREb25lKCk7CisKKyAgICBpZiAoc2hvdWxk
UGVyZm9ybVBvc3RMb2FkQWN0aW9ucykKKyAgICAgICAgcGVyZm9ybVBvc3RMb2FkQWN0aW9ucygp
OworCisgICAgaWYgKCFtX2dhcmJhZ2VDb2xsZWN0RG9jdW1lbnRSZXNvdXJjZXNUaW1lci5pc0Fj
dGl2ZSgpKQorICAgICAgICBtX2dhcmJhZ2VDb2xsZWN0RG9jdW1lbnRSZXNvdXJjZXNUaW1lci5z
dGFydE9uZVNob3QoMCk7Cit9CisKKy8vIEdhcmJhZ2UgY29sbGVjdGluZyBtX2RvY3VtZW50UmVz
b3VyY2VzIGlzIGEgd29ya2Fyb3VuZCBmb3IgdGhlCisvLyBDYWNoZWRSZXNvdXJjZUhhbmRsZXMg
b24gdGhlIFJIUyBiZWluZyBzdHJvbmcgcmVmZXJlbmNlcy4gSWRlYWxseSB0aGlzCisvLyB3b3Vs
ZCBiZSBhIHdlYWsgbWFwLCBob3dldmVyIENhY2hlZFJlc291cmNlSGFuZGxlcyBwZXJmb3JtIGFk
ZGl0aW9uYWwKKy8vIGJvb2trZWVwaW5nIG9uIENhY2hlZFJlc291cmNlcywgc28gaW5zdGVhZCBw
c2V1ZG8tR0MgdGhlbSAtLSB3aGVuIHRoZQorLy8gcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgMSwg
bV9kb2N1bWVudFJlc291cmNlcyBpcyB0aGUgb25seSByZWZlcmVuY2UsIHNvCisvLyByZW1vdmUg
aXQgZnJvbSB0aGUgbWFwLgordm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Z2FyYmFnZUNvbGxl
Y3REb2N1bWVudFJlc291cmNlcygpCit7CisgICAgdHlwZWRlZiBWZWN0b3I8U3RyaW5nLCAxMD4g
U3RyaW5nVmVjdG9yOworICAgIFN0cmluZ1ZlY3RvciByZXNvdXJjZXNUb0RlbGV0ZTsKKworICAg
IGZvciAoYXV0byYgcmVzb3VyY2UgOiBtX2RvY3VtZW50UmVzb3VyY2VzKSB7CisgICAgICAgIGlm
IChyZXNvdXJjZS52YWx1ZS0+aGFzT25lSGFuZGxlKCkpIHsKKyAgICAgICAgICAgIHJlc291cmNl
c1RvRGVsZXRlLmFwcGVuZChyZXNvdXJjZS5rZXkpOworICAgICAgICAgICAgcmVzb3VyY2UudmFs
dWUtPnNldE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKG51bGxwdHIpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IHJlc291cmNlc1RvRGVsZXRlKQorICAg
ICAgICBtX2RvY3VtZW50UmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZSk7Cit9CisKK3ZvaWQgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OnBlcmZvcm1Qb3N0TG9hZEFjdGlvbnMoKQoreworICAgIGNoZWNr
Rm9yUGVuZGluZ1ByZWxvYWRzKCk7CisKKyAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVy
U3RyYXRlZ3koKS0+c2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKK30KKwordm9pZCBDYWNoZWRSZXNv
dXJjZUxvYWRlcjo6aW5jcmVtZW50UmVxdWVzdENvdW50KGNvbnN0IENhY2hlZFJlc291cmNlJiBy
ZXNvdXJjZSkKK3sKKyAgICBpZiAocmVzb3VyY2UuaWdub3JlRm9yUmVxdWVzdENvdW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgICsrbV9yZXF1ZXN0Q291bnQ7Cit9CisKK3ZvaWQgQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OmRlY3JlbWVudFJlcXVlc3RDb3VudChjb25zdCBDYWNoZWRSZXNvdXJj
ZSYgcmVzb3VyY2UpCit7CisgICAgaWYgKHJlc291cmNlLmlnbm9yZUZvclJlcXVlc3RDb3VudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICAtLW1fcmVxdWVzdENvdW50OworICAgIEFTU0VSVCht
X3JlcXVlc3RDb3VudCA+IC0xKTsKK30KKworQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVz
b3VyY2U+IENhY2hlZFJlc291cmNlTG9hZGVyOjpwcmVsb2FkKENhY2hlZFJlc291cmNlOjpUeXBl
IHR5cGUsIENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBjaGFy
c2V0LCBQcmVsb2FkVHlwZSBwcmVsb2FkVHlwZSkKK3sKKyAgICAvLyBXZSBhbHdheXMgcHJlbG9h
ZCByZXNvdXJjZXMgb24gaU9TLiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05MTI3Nj4uCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjb25zaWRlciBhZGRpbmcg
YSBzZXR0aW5nIHRvIHRvZ2dsZSBhZ2dyZXNzaXZlIHByZWxvYWRpbmcgYmVoYXZpb3IgYXMgb3Bw
b3NlZAorICAgIC8vIHRvIG1ha2luZyB0aGlzIGJlaGF2aW9yIHNwZWNpZmljIHRvIGlPUy4KKyNp
ZiAhUExBVEZPUk0oSU9TKQorICAgIGJvb2wgaGFzUmVuZGVyaW5nID0gbV9kb2N1bWVudC0+Ym9k
eU9yRnJhbWVzZXQoKSAmJiBtX2RvY3VtZW50LT5yZW5kZXJWaWV3KCk7CisgICAgYm9vbCBjYW5C
bG9ja1BhcnNlciA9IHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdCB8fCB0eXBlID09IENh
Y2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OworICAgIGlmICghaGFzUmVuZGVyaW5nICYmICFj
YW5CbG9ja1BhcnNlciAmJiBwcmVsb2FkVHlwZSA9PSBJbXBsaWNpdFByZWxvYWQpIHsKKyAgICAg
ICAgLy8gRG9uJ3QgcHJlbG9hZCBzdWJyZXNvdXJjZXMgdGhhdCBjYW4ndCBibG9jayB0aGUgcGFy
c2VyIGJlZm9yZSB3ZSBoYXZlIHNvbWV0aGluZyB0byBkcmF3LgorICAgICAgICAvLyBUaGlzIGhl
bHBzIHByZXZlbnQgcHJlbG9hZHMgZnJvbSBkZWxheWluZyBmaXJzdCBkaXNwbGF5IHdoZW4gYmFu
ZHdpZHRoIGlzIGxpbWl0ZWQuCisgICAgICAgIFBlbmRpbmdQcmVsb2FkIHBlbmRpbmdQcmVsb2Fk
ID0geyB0eXBlLCByZXF1ZXN0LCBjaGFyc2V0IH07CisgICAgICAgIG1fcGVuZGluZ1ByZWxvYWRz
LmFwcGVuZChwZW5kaW5nUHJlbG9hZCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHByZWxvYWRUeXBlKTsKKyNlbmRpZgorICAgIHJldHVy
biByZXF1ZXN0UHJlbG9hZCh0eXBlLCByZXF1ZXN0LCBjaGFyc2V0KTsKK30KKwordm9pZCBDYWNo
ZWRSZXNvdXJjZUxvYWRlcjo6Y2hlY2tGb3JQZW5kaW5nUHJlbG9hZHMoKSAKK3sKKyAgICBpZiAo
bV9wZW5kaW5nUHJlbG9hZHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgYXV0byog
Ym9keSA9IG1fZG9jdW1lbnQtPmJvZHlPckZyYW1lc2V0KCk7CisgICAgaWYgKCFib2R5IHx8ICFi
b2R5LT5yZW5kZXJlcigpKQorICAgICAgICByZXR1cm47CisjaWYgUExBVEZPUk0oSU9TKQorICAg
IC8vIFdlIGFsd2F5cyBwcmVsb2FkIHJlc291cmNlcyBvbiBpT1MuIFNlZSA8aHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMjc2Pi4KKyAgICAvLyBTbywgd2Ugc2hvdWxk
IG5ldmVyIGhhdmUgYW55IHBlbmRpbmcgcHJlbG9hZHMuCisgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBsb29rIHRvIGF2b2lkIGNvbXBpbGluZyB0aGlzIGNvZGUgZW50aXJlbHkgd2hlbiBidWlsZGlu
ZyBmb3IgaU9TLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgd2hpbGUg
KCFtX3BlbmRpbmdQcmVsb2Fkcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgUGVuZGluZ1ByZWxvYWQg
cHJlbG9hZCA9IG1fcGVuZGluZ1ByZWxvYWRzLnRha2VGaXJzdCgpOworICAgICAgICAvLyBEb24n
dCByZXF1ZXN0IHByZWxvYWQgaWYgdGhlIHJlc291cmNlIGFscmVhZHkgbG9hZGVkIG5vcm1hbGx5
ICh0aGlzIHdpbGwgcmVzdWx0IGluIGRvdWJsZSBsb2FkIGlmIHRoZSBwYWdlIGlzIGJlaW5nIHJl
bG9hZGVkIHdpdGggY2FjaGVkIHJlc3VsdHMgaWdub3JlZCkuCisgICAgICAgIGlmICghY2FjaGVk
UmVzb3VyY2UocHJlbG9hZC5tX3JlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCkpKQorICAg
ICAgICAgICAgcmVxdWVzdFByZWxvYWQocHJlbG9hZC5tX3R5cGUsIHByZWxvYWQubV9yZXF1ZXN0
LCBwcmVsb2FkLm1fY2hhcnNldCk7CisgICAgfQorICAgIG1fcGVuZGluZ1ByZWxvYWRzLmNsZWFy
KCk7Cit9CisKK0NhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiBDYWNoZWRSZXNv
dXJjZUxvYWRlcjo6cmVxdWVzdFByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCit7Cisg
ICAgU3RyaW5nIGVuY29kaW5nOworICAgIGlmICh0eXBlID09IENhY2hlZFJlc291cmNlOjpTY3Jp
cHQgfHwgdHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCkKKyAgICAgICAgZW5j
b2RpbmcgPSBjaGFyc2V0LmlzRW1wdHkoKSA/IG1fZG9jdW1lbnQtPmNoYXJzZXQoKSA6IGNoYXJz
ZXQ7CisKKyAgICByZXF1ZXN0LnNldENoYXJzZXQoZW5jb2RpbmcpOworICAgIHJlcXVlc3Quc2V0
Rm9yUHJlbG9hZCh0cnVlKTsKKworICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291
cmNlPiByZXNvdXJjZSA9IHJlcXVlc3RSZXNvdXJjZSh0eXBlLCByZXF1ZXN0KTsKKyAgICBpZiAo
IXJlc291cmNlIHx8IChtX3ByZWxvYWRzICYmIG1fcHJlbG9hZHMtPmNvbnRhaW5zKHJlc291cmNl
LmdldCgpKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIC8vIEZvbnRzIG5lZWQgc3Bl
Y2lhbCB0cmVhdG1lbnQgc2luY2UganVzdCBjcmVhdGluZyB0aGUgcmVzb3VyY2UgZG9lc24ndCB0
cmlnZ2VyIGEgbG9hZC4KKyAgICBpZiAodHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291
cmNlKQorICAgICAgICBkb3duY2FzdDxDYWNoZWRGb250PihyZXNvdXJjZS5nZXQoKSktPmJlZ2lu
TG9hZElmTmVlZGVkKCp0aGlzKTsKKyAgICByZXNvdXJjZS0+aW5jcmVhc2VQcmVsb2FkQ291bnQo
KTsKKworICAgIGlmICghbV9wcmVsb2FkcykKKyAgICAgICAgbV9wcmVsb2FkcyA9IHN0ZDo6bWFr
ZV91bmlxdWU8TGlzdEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2UqPj4oKTsKKyAgICBtX3ByZWxvYWRz
LT5hZGQocmVzb3VyY2UuZ2V0KCkpOworCisjaWYgUFJFTE9BRF9ERUJVRworICAgIHByaW50Zigi
UFJFTE9BRElORyAlc1xuIiwgIHJlc291cmNlLT51cmwoKS5sYXRpbjEoKS5kYXRhKCkpOworI2Vu
ZGlmCisgICAgcmV0dXJuIHJlc291cmNlOworfQorCitib29sIENhY2hlZFJlc291cmNlTG9hZGVy
Ojppc1ByZWxvYWRlZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykgY29uc3QKK3sKKyAgICBjb25z
dCBVUkwmIHVybCA9IG1fZG9jdW1lbnQtPmNvbXBsZXRlVVJMKHVybFN0cmluZyk7CisKKyAgICBp
ZiAobV9wcmVsb2FkcykgeworICAgICAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogKm1fcHJlbG9h
ZHMpIHsKKyAgICAgICAgICAgIGlmIChyZXNvdXJjZS0+dXJsKCkgPT0gdXJsKQorICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChhdXRvJiBw
ZW5kaW5nUHJlbG9hZCA6IG1fcGVuZGluZ1ByZWxvYWRzKSB7CisgICAgICAgIGlmIChwZW5kaW5n
UHJlbG9hZC5tX3JlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCkgPT0gdXJsKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBD
YWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2xlYXJQcmVsb2FkcygpCit7CisjaWYgUFJFTE9BRF9ERUJV
RworICAgIHByaW50UHJlbG9hZFN0YXRzKCk7CisjZW5kaWYKKyAgICBpZiAoIW1fcHJlbG9hZHMp
CisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoYXV0byogcmVzb3VyY2UgOiAqbV9wcmVsb2Fk
cykgeworICAgICAgICByZXNvdXJjZS0+ZGVjcmVhc2VQcmVsb2FkQ291bnQoKTsKKyAgICAgICAg
Ym9vbCBkZWxldGVkID0gcmVzb3VyY2UtPmRlbGV0ZUlmUG9zc2libGUoKTsKKyAgICAgICAgaWYg
KCFkZWxldGVkICYmIHJlc291cmNlLT5wcmVsb2FkUmVzdWx0KCkgPT0gQ2FjaGVkUmVzb3VyY2U6
OlByZWxvYWROb3RSZWZlcmVuY2VkKQorICAgICAgICAgICAgTWVtb3J5Q2FjaGU6OnNpbmdsZXRv
bigpLnJlbW92ZSgqcmVzb3VyY2UpOworICAgIH0KKyAgICBtX3ByZWxvYWRzID0gbnVsbHB0cjsK
K30KKwordm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2xlYXJQZW5kaW5nUHJlbG9hZHMoKQor
eworICAgIG1fcGVuZGluZ1ByZWxvYWRzLmNsZWFyKCk7Cit9CisKKyNpZiBQUkVMT0FEX0RFQlVH
Cit2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpwcmludFByZWxvYWRTdGF0cygpCit7CisgICAg
dW5zaWduZWQgc2NyaXB0cyA9IDA7CisgICAgdW5zaWduZWQgc2NyaXB0TWlzc2VzID0gMDsKKyAg
ICB1bnNpZ25lZCBzdHlsZXNoZWV0cyA9IDA7CisgICAgdW5zaWduZWQgc3R5bGVzaGVldE1pc3Nl
cyA9IDA7CisgICAgdW5zaWduZWQgaW1hZ2VzID0gMDsKKyAgICB1bnNpZ25lZCBpbWFnZU1pc3Nl
cyA9IDA7CisgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IG1fcHJlbG9hZHMpIHsKKyAgICAgICAg
aWYgKHJlc291cmNlLT5wcmVsb2FkUmVzdWx0KCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlByZWxvYWRO
b3RSZWZlcmVuY2VkKQorICAgICAgICAgICAgcHJpbnRmKCIhISBVTlJFRkVSRU5DRUQgUFJFTE9B
RCAlc1xuIiwgcmVzb3VyY2UtPnVybCgpLmxhdGluMSgpLmRhdGEoKSk7CisgICAgICAgIGVsc2Ug
aWYgKHJlc291cmNlLT5wcmVsb2FkUmVzdWx0KCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlByZWxvYWRS
ZWZlcmVuY2VkV2hpbGVDb21wbGV0ZSkKKyAgICAgICAgICAgIHByaW50ZigiSElUIENPTVBMRVRF
IFBSRUxPQUQgJXNcbiIsIHJlc291cmNlLT51cmwoKS5sYXRpbjEoKS5kYXRhKCkpOworICAgICAg
ICBlbHNlIGlmIChyZXNvdXJjZS0+cHJlbG9hZFJlc3VsdCgpID09IENhY2hlZFJlc291cmNlOjpQ
cmVsb2FkUmVmZXJlbmNlZFdoaWxlTG9hZGluZykKKyAgICAgICAgICAgIHByaW50ZigiSElUIExP
QURJTkcgUFJFTE9BRCAlc1xuIiwgcmVzb3VyY2UtPnVybCgpLmxhdGluMSgpLmRhdGEoKSk7CisK
KyAgICAgICAgaWYgKHJlc291cmNlLT50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdCkg
eworICAgICAgICAgICAgc2NyaXB0cysrOworICAgICAgICAgICAgaWYgKHJlc291cmNlLT5wcmVs
b2FkUmVzdWx0KCkgPCBDYWNoZWRSZXNvdXJjZTo6UHJlbG9hZFJlZmVyZW5jZWRXaGlsZUxvYWRp
bmcpCisgICAgICAgICAgICAgICAgc2NyaXB0TWlzc2VzKys7CisgICAgICAgIH0gZWxzZSBpZiAo
cmVzb3VyY2UtPnR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCkgeworICAg
ICAgICAgICAgc3R5bGVzaGVldHMrKzsKKyAgICAgICAgICAgIGlmIChyZXNvdXJjZS0+cHJlbG9h
ZFJlc3VsdCgpIDwgQ2FjaGVkUmVzb3VyY2U6OlByZWxvYWRSZWZlcmVuY2VkV2hpbGVMb2FkaW5n
KQorICAgICAgICAgICAgICAgIHN0eWxlc2hlZXRNaXNzZXMrKzsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGltYWdlcysrOworICAgICAgICAgICAgaWYgKHJlc291cmNlLT5wcmVsb2Fk
UmVzdWx0KCkgPCBDYWNoZWRSZXNvdXJjZTo6UHJlbG9hZFJlZmVyZW5jZWRXaGlsZUxvYWRpbmcp
CisgICAgICAgICAgICAgICAgaW1hZ2VNaXNzZXMrKzsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChyZXNvdXJjZS0+ZXJyb3JPY2N1cnJlZCgpICYmIHJlc291cmNlLT5wcmVsb2FkUmVzdWx0KCkg
PT0gQ2FjaGVkUmVzb3VyY2U6OlByZWxvYWROb3RSZWZlcmVuY2VkKQorICAgICAgICAgICAgTWVt
b3J5Q2FjaGU6OnNpbmdsZXRvbigpLnJlbW92ZShyZXNvdXJjZSk7CisKKyAgICAgICAgcmVzb3Vy
Y2UtPmRlY3JlYXNlUHJlbG9hZENvdW50KCk7CisgICAgfQorICAgIG1fcHJlbG9hZHMgPSBudWxs
cHRyOworCisgICAgaWYgKHNjcmlwdHMpCisgICAgICAgIHByaW50ZigiU0NSSVBUUzogJWQgKCVk
IGhpdHMsIGhpdCByYXRlICVkJSUpXG4iLCBzY3JpcHRzLCBzY3JpcHRzIC0gc2NyaXB0TWlzc2Vz
LCAoc2NyaXB0cyAtIHNjcmlwdE1pc3NlcykgKiAxMDAgLyBzY3JpcHRzKTsKKyAgICBpZiAoc3R5
bGVzaGVldHMpCisgICAgICAgIHByaW50ZigiU1RZTEVTSEVFVFM6ICVkICglZCBoaXRzLCBoaXQg
cmF0ZSAlZCUlKVxuIiwgc3R5bGVzaGVldHMsIHN0eWxlc2hlZXRzIC0gc3R5bGVzaGVldE1pc3Nl
cywgKHN0eWxlc2hlZXRzIC0gc3R5bGVzaGVldE1pc3NlcykgKiAxMDAgLyBzdHlsZXNoZWV0cyk7
CisgICAgaWYgKGltYWdlcykKKyAgICAgICAgcHJpbnRmKCJJTUFHRVM6ICAlZCAoJWQgaGl0cywg
aGl0IHJhdGUgJWQlJSlcbiIsIGltYWdlcywgaW1hZ2VzIC0gaW1hZ2VNaXNzZXMsIChpbWFnZXMg
LSBpbWFnZU1pc3NlcykgKiAxMDAgLyBpbWFnZXMpOworfQorI2VuZGlmCisKK2NvbnN0IFJlc291
cmNlTG9hZGVyT3B0aW9ucyYgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRlZmF1bHRDYWNoZWRSZXNv
dXJjZU9wdGlvbnMoKQoreworICAgIHN0YXRpYyBSZXNvdXJjZUxvYWRlck9wdGlvbnMgb3B0aW9u
cyhTZW5kQ2FsbGJhY2tzLCBTbmlmZkNvbnRlbnQsIEJ1ZmZlckRhdGEsIEFsbG93U3RvcmVkQ3Jl
ZGVudGlhbHMsIENsaWVudENyZWRlbnRpYWxQb2xpY3k6Ok1heUFza0NsaWVudEZvckNyZWRlbnRp
YWxzLCBGZXRjaE9wdGlvbnM6OkNyZWRlbnRpYWxzOjpJbmNsdWRlLCBEb1NlY3VyaXR5Q2hlY2ss
IEZldGNoT3B0aW9uczo6TW9kZTo6Tm9Db3JzLCBEb05vdEluY2x1ZGVDZXJ0aWZpY2F0ZUluZm8s
IENvbnRlbnRTZWN1cml0eVBvbGljeUltcG9zaXRpb246OkRvUG9saWN5Q2hlY2ssIERlZmVyc0xv
YWRpbmdQb2xpY3k6OkFsbG93RGVmZXJzTG9hZGluZywgQ2FjaGluZ1BvbGljeTo6QWxsb3dDYWNo
aW5nKTsKKyAgICByZXR1cm4gb3B0aW9uczsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40Y2M4YjM4
MjgzYWRkOWVlYjBhMzUzYTY0YTQzYWNhYTVlOTQ5MGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlTG9hZGVyLmgKQEAgLTAsMCAr
MSwyMTggQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1w
aS1oZC5tcGcuZGUpCisgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxl
ckBrZGUub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAg
Q29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIGh0dHA6Ly93d3cudG9yY2htb2Jp
bGUuY29tLworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKworICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVk
IGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUgc2hlZXRzIGFuZCBodG1sCisgICAgcGFnZXMgZnJv
bSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCisqLwor
CisjaWZuZGVmIENhY2hlZFJlc291cmNlTG9hZGVyX2gKKyNkZWZpbmUgQ2FjaGVkUmVzb3VyY2VM
b2FkZXJfaAorCisjaW5jbHVkZSAiQ2FjaGVQb2xpY3kuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCIK
KyNpbmNsdWRlICJSZXNvdXJjZVRpbWluZ0luZm9ybWF0aW9uLmgiCisjaW5jbHVkZSAiVGltZXIu
aCIKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIENhY2hlZENTU1N0eWxlU2hlZXQ7CitjbGFzcyBDYWNoZWRTVkdEb2N1bWVudDsKK2NsYXNz
IENhY2hlZEZvbnQ7CitjbGFzcyBDYWNoZWRJbWFnZTsKK2NsYXNzIENhY2hlZFJhd1Jlc291cmNl
OworY2xhc3MgQ2FjaGVkU2NyaXB0OworY2xhc3MgQ2FjaGVkVGV4dFRyYWNrOworY2xhc3MgQ2Fj
aGVkWFNMU3R5bGVTaGVldDsKK2NsYXNzIERvY3VtZW50OworY2xhc3MgRG9jdW1lbnRMb2FkZXI7
CitjbGFzcyBGcmFtZTsKK2NsYXNzIEltYWdlTG9hZGVyOworY2xhc3MgVVJMOworCisvLyBUaGUg
Q2FjaGVkUmVzb3VyY2VMb2FkZXIgcHJvdmlkZXMgYSBwZXItY29udGV4dCBpbnRlcmZhY2UgdG8g
dGhlIE1lbW9yeUNhY2hlCisvLyBhbmQgZW5mb3JjZXMgYSBidW5jaCBvZiBzZWN1cml0eSBjaGVj
a3MgYW5kIHJ1bGVzIGZvciByZXNvdXJjZSByZXZhbGlkYXRpb24uCisvLyBJdHMgbGlmZXRpbWUg
aXMgcm91Z2hseSBwZXItRG9jdW1lbnRMb2FkZXIsIGluIHRoYXQgaXQgaXMgZ2VuZXJhbGx5IGNy
ZWF0ZWQKKy8vIGluIHRoZSBEb2N1bWVudExvYWRlciBjb25zdHJ1Y3RvciBhbmQgbG9zZXMgaXRz
IGFiaWxpdHkgdG8gZ2VuZXJhdGUgbmV0d29yaworLy8gcmVxdWVzdHMgd2hlbiB0aGUgRG9jdW1l
bnRMb2FkZXIgaXMgZGVzdHJveWVkLiBEb2N1bWVudHMgYWxzbyBob2xkIGEgCisvLyBSZWZQdHI8
Q2FjaGVkUmVzb3VyY2VMb2FkZXI+IGZvciB0aGVpciBsaWZldGltZSAoYW5kIHdpbGwgY3JlYXRl
IG9uZSBpZiB0aGV5CisvLyBhcmUgaW5pdGlhbGl6ZWQgd2l0aG91dCBhIEZyYW1lKSwgc28gYSBE
b2N1bWVudCBjYW4ga2VlcCBhIENhY2hlZFJlc291cmNlTG9hZGVyCisvLyBhbGl2ZSBwYXN0IGRl
dGFjaCBpZiBzY3JpcHRzIHN0aWxsIHJlZmVyZW5jZSB0aGUgRG9jdW1lbnQuCitjbGFzcyBDYWNo
ZWRSZXNvdXJjZUxvYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPENhY2hlZFJlc291cmNlTG9hZGVy
PiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2FjaGVkUmVzb3VyY2VMb2FkZXIpOyBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK2ZyaWVuZCBjbGFzcyBJbWFnZUxvYWRlcjsKK2ZyaWVuZCBj
bGFzcyBSZXNvdXJjZUNhY2hlVmFsaWRhdGlvblN1cHByZXNzb3I7CisKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUmVmPENhY2hlZFJlc291cmNlTG9hZGVyPiBjcmVhdGUoRG9jdW1lbnRMb2FkZXIqIGRv
Y3VtZW50TG9hZGVyKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IENhY2hlZFJlc291cmNlTG9hZGVy
KGRvY3VtZW50TG9hZGVyKSk7IH0KKyAgICB+Q2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKKworICAg
IENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZEltYWdlPiByZXF1ZXN0SW1hZ2UoQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0Jik7CisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkQ1NTU3R5bGVT
aGVldD4gcmVxdWVzdENTU1N0eWxlU2hlZXQoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAg
Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkQ1NTU3R5bGVTaGVldD4gcmVxdWVzdFVzZXJDU1NT
dHlsZVNoZWV0KENhY2hlZFJlc291cmNlUmVxdWVzdCYpOworICAgIENhY2hlZFJlc291cmNlSGFu
ZGxlPENhY2hlZFNjcmlwdD4gcmVxdWVzdFNjcmlwdChDYWNoZWRSZXNvdXJjZVJlcXVlc3QmKTsK
KyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRGb250PiByZXF1ZXN0Rm9udChDYWNoZWRS
ZXNvdXJjZVJlcXVlc3QmLCBib29sIGlzU1ZHKTsKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxD
YWNoZWRSYXdSZXNvdXJjZT4gcmVxdWVzdE1lZGlhKENhY2hlZFJlc291cmNlUmVxdWVzdCYpOwor
ICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiByZXF1ZXN0UmF3UmVz
b3VyY2UoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8
Q2FjaGVkUmF3UmVzb3VyY2U+IHJlcXVlc3RNYWluUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0Jik7CisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU1ZHRG9jdW1lbnQ+IHJlcXVl
c3RTVkdEb2N1bWVudChDYWNoZWRSZXNvdXJjZVJlcXVlc3QmKTsKKyNpZiBFTkFCTEUoWFNMVCkK
KyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRYU0xTdHlsZVNoZWV0PiByZXF1ZXN0WFNM
U3R5bGVTaGVldChDYWNoZWRSZXNvdXJjZVJlcXVlc3QmKTsKKyNlbmRpZgorI2lmIEVOQUJMRShM
SU5LX1BSRUZFVENIKQorICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiBy
ZXF1ZXN0TGlua1Jlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlLCBDYWNoZWRSZXNvdXJjZVJl
cXVlc3QmKTsKKyNlbmRpZgorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBDYWNoZWRSZXNv
dXJjZUhhbmRsZTxDYWNoZWRUZXh0VHJhY2s+IHJlcXVlc3RUZXh0VHJhY2soQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0Jik7CisjZW5kaWYKKworICAgIC8vIExvZ3MgYW4gYWNjZXNzIGRlbmllZCBtZXNz
YWdlIHRvIHRoZSBjb25zb2xlIGZvciB0aGUgc3BlY2lmaWVkIFVSTC4KKyAgICB2b2lkIHByaW50
QWNjZXNzRGVuaWVkTWVzc2FnZShjb25zdCBVUkwmIHVybCkgY29uc3Q7CisKKyAgICBDYWNoZWRS
ZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0OworICAgIENh
Y2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZShjb25zdCBVUkwmIHVybCkgY29uc3Q7CisgICAg
CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
UmVzb3VyY2U+PiBEb2N1bWVudFJlc291cmNlTWFwOworICAgIGNvbnN0IERvY3VtZW50UmVzb3Vy
Y2VNYXAmIGFsbENhY2hlZFJlc291cmNlcygpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnRSZXNv
dXJjZXM7IH0KKworICAgIGJvb2wgYXV0b0xvYWRJbWFnZXMoKSBjb25zdCB7IHJldHVybiBtX2F1
dG9Mb2FkSW1hZ2VzOyB9CisgICAgdm9pZCBzZXRBdXRvTG9hZEltYWdlcyhib29sKTsKKworICAg
IGJvb2wgaW1hZ2VzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VzRW5hYmxlZDsgfQor
ICAgIHZvaWQgc2V0SW1hZ2VzRW5hYmxlZChib29sKTsKKworICAgIGJvb2wgc2hvdWxkRGVmZXJJ
bWFnZUxvYWQoY29uc3QgVVJMJikgY29uc3Q7CisgICAgYm9vbCBzaG91bGRQZXJmb3JtSW1hZ2VM
b2FkKGNvbnN0IFVSTCYpIGNvbnN0OworICAgIAorICAgIENhY2hlUG9saWN5IGNhY2hlUG9saWN5
KENhY2hlZFJlc291cmNlOjpUeXBlKSBjb25zdDsKKyAgICAKKyAgICBGcmFtZSogZnJhbWUoKSBj
b25zdDsgLy8gQ2FuIGJlIG51bGwKKyAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJl
dHVybiBtX2RvY3VtZW50OyB9IC8vIENhbiBiZSBudWxsCisgICAgdm9pZCBzZXREb2N1bWVudChE
b2N1bWVudCogZG9jdW1lbnQpIHsgbV9kb2N1bWVudCA9IGRvY3VtZW50OyB9CisgICAgdm9pZCBj
bGVhckRvY3VtZW50TG9hZGVyKCkgeyBtX2RvY3VtZW50TG9hZGVyID0gbnVsbHB0cjsgfQorICAg
IFNlc3Npb25JRCBzZXNzaW9uSUQoKSBjb25zdDsKKworICAgIHZvaWQgcmVtb3ZlQ2FjaGVkUmVz
b3VyY2UoQ2FjaGVkUmVzb3VyY2UmKTsKKworICAgIHZvaWQgbG9hZERvbmUoQ2FjaGVkUmVzb3Vy
Y2UqLCBib29sIHNob3VsZFBlcmZvcm1Qb3N0TG9hZEFjdGlvbnMgPSB0cnVlKTsKKworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZ2FyYmFnZUNvbGxlY3REb2N1bWVudFJlc291cmNlcygpOworICAg
IAorICAgIHZvaWQgaW5jcmVtZW50UmVxdWVzdENvdW50KGNvbnN0IENhY2hlZFJlc291cmNlJik7
CisgICAgdm9pZCBkZWNyZW1lbnRSZXF1ZXN0Q291bnQoY29uc3QgQ2FjaGVkUmVzb3VyY2UmKTsK
KyAgICBpbnQgcmVxdWVzdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0Q291bnQ7IH0K
KworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNQcmVsb2FkZWQoY29uc3QgU3RyaW5nJiB1cmxT
dHJpbmcpIGNvbnN0OworICAgIHZvaWQgY2xlYXJQcmVsb2FkcygpOworICAgIHZvaWQgY2xlYXJQ
ZW5kaW5nUHJlbG9hZHMoKTsKKyAgICBlbnVtIFByZWxvYWRUeXBlIHsgSW1wbGljaXRQcmVsb2Fk
LCBFeHBsaWNpdFByZWxvYWQgfTsKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNv
dXJjZT4gcHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6VHlwZSwgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBQcmVsb2FkVHlwZSk7CisgICAgdm9pZCBjaGVja0Zv
clBlbmRpbmdQcmVsb2FkcygpOworICAgIHZvaWQgcHJpbnRQcmVsb2FkU3RhdHMoKTsKKworICAg
IGJvb2wgY2FuUmVxdWVzdChDYWNoZWRSZXNvdXJjZTo6VHlwZSwgY29uc3QgVVJMJiwgY29uc3Qg
UmVzb3VyY2VMb2FkZXJPcHRpb25zJiwgYm9vbCBmb3JQcmVsb2FkID0gZmFsc2UsIGJvb2wgZGlk
UmVjZWl2ZVJlZGlyZWN0UmVzcG9uc2UgPSBmYWxzZSk7CisKKyAgICBzdGF0aWMgY29uc3QgUmVz
b3VyY2VMb2FkZXJPcHRpb25zJiBkZWZhdWx0Q2FjaGVkUmVzb3VyY2VPcHRpb25zKCk7CisKKyAg
ICB2b2lkIGRvY3VtZW50RGlkRmluaXNoTG9hZEV2ZW50KCk7CisKKyNpZiBFTkFCTEUoV0VCX1RJ
TUlORykKKyAgICBSZXNvdXJjZVRpbWluZ0luZm9ybWF0aW9uJiByZXNvdXJjZVRpbWluZ0luZm9y
bWF0aW9uKCkgeyByZXR1cm4gbV9yZXNvdXJjZVRpbWluZ0luZm87IH0KKyNlbmRpZgorCitwcml2
YXRlOgorICAgIGV4cGxpY2l0IENhY2hlZFJlc291cmNlTG9hZGVyKERvY3VtZW50TG9hZGVyKik7
CisKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gcmVxdWVzdFJlc291
cmNlKENhY2hlZFJlc291cmNlOjpUeXBlLCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICBD
YWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gcmV2YWxpZGF0ZVJlc291cmNlKGNv
bnN0IENhY2hlZFJlc291cmNlUmVxdWVzdCYsIENhY2hlZFJlc291cmNlKik7CisgICAgQ2FjaGVk
UmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IGxvYWRSZXNvdXJjZShDYWNoZWRSZXNvdXJj
ZTo6VHlwZSwgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgQ2FjaGVkUmVzb3VyY2VIYW5k
bGU8Q2FjaGVkUmVzb3VyY2U+IHJlcXVlc3RQcmVsb2FkKENhY2hlZFJlc291cmNlOjpUeXBlLCBD
YWNoZWRSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOworCisgICAgZW51
bSBSZXZhbGlkYXRpb25Qb2xpY3kgeyBVc2UsIFJldmFsaWRhdGUsIFJlbG9hZCwgTG9hZCB9Owor
ICAgIFJldmFsaWRhdGlvblBvbGljeSBkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3koQ2FjaGVk
UmVzb3VyY2U6OlR5cGUsIENhY2hlZFJlc291cmNlUmVxdWVzdCYsIENhY2hlZFJlc291cmNlKiBl
eGlzdGluZ1Jlc291cmNlKSBjb25zdDsKKworICAgIGJvb2wgdXBkYXRlQ2FjaGVkUmVzb3VyY2VX
aXRoQ3VycmVudFJlcXVlc3QoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiwgQ2FjaGVkUmVzb3VyY2VI
YW5kbGU8Q2FjaGVkUmVzb3VyY2U+Jik7CisgICAgYm9vbCBzaG91bGRDb250aW51ZUFmdGVyTm90
aWZ5aW5nTG9hZGVkRnJvbU1lbW9yeUNhY2hlKGNvbnN0IENhY2hlZFJlc291cmNlUmVxdWVzdCYs
IENhY2hlZFJlc291cmNlKik7CisgICAgYm9vbCBjaGVja0luc2VjdXJlQ29udGVudChDYWNoZWRS
ZXNvdXJjZTo6VHlwZSwgY29uc3QgVVJMJikgY29uc3Q7CisKKyAgICB2b2lkIHBlcmZvcm1Qb3N0
TG9hZEFjdGlvbnMoKTsKKworICAgIGJvb2wgY2xpZW50RGVmZXJzSW1hZ2UoY29uc3QgVVJMJikg
Y29uc3Q7CisgICAgdm9pZCByZWxvYWRJbWFnZXNJZk5vdERlZmVycmVkKCk7CisKKyAgICBib29s
IGNhblJlcXVlc3RJbkNvbnRlbnREaXNwb3NpdGlvbkF0dGFjaG1lbnRTYW5kYm94KENhY2hlZFJl
c291cmNlOjpUeXBlLCBjb25zdCBVUkwmKSBjb25zdDsKKyAgICAKKyAgICBIYXNoU2V0PFN0cmlu
Zz4gbV92YWxpZGF0ZWRVUkxzOworICAgIG11dGFibGUgRG9jdW1lbnRSZXNvdXJjZU1hcCBtX2Rv
Y3VtZW50UmVzb3VyY2VzOworICAgIERvY3VtZW50KiBtX2RvY3VtZW50OworICAgIERvY3VtZW50
TG9hZGVyKiBtX2RvY3VtZW50TG9hZGVyOworICAgIAorICAgIGludCBtX3JlcXVlc3RDb3VudDsK
KyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TGlzdEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2UqPj4g
bV9wcmVsb2FkczsKKyAgICBzdHJ1Y3QgUGVuZGluZ1ByZWxvYWQgeworICAgICAgICBDYWNoZWRS
ZXNvdXJjZTo6VHlwZSBtX3R5cGU7CisgICAgICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCBtX3Jl
cXVlc3Q7CisgICAgICAgIFN0cmluZyBtX2NoYXJzZXQ7CisgICAgfTsKKyAgICBEZXF1ZTxQZW5k
aW5nUHJlbG9hZD4gbV9wZW5kaW5nUHJlbG9hZHM7CisKKyAgICBUaW1lciBtX2dhcmJhZ2VDb2xs
ZWN0RG9jdW1lbnRSZXNvdXJjZXNUaW1lcjsKKworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAg
IFJlc291cmNlVGltaW5nSW5mb3JtYXRpb24gbV9yZXNvdXJjZVRpbWluZ0luZm87CisjZW5kaWYK
KworICAgIC8vIDI5IGJpdHMgbGVmdAorICAgIGJvb2wgbV9hdXRvTG9hZEltYWdlcyA6IDE7Cisg
ICAgYm9vbCBtX2ltYWdlc0VuYWJsZWQgOiAxOworICAgIGJvb2wgbV9hbGxvd1N0YWxlUmVzb3Vy
Y2VzIDogMTsKK307CisKK2NsYXNzIFJlc291cmNlQ2FjaGVWYWxpZGF0aW9uU3VwcHJlc3NvciB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVz
c29yKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBSZXNvdXJj
ZUNhY2hlVmFsaWRhdGlvblN1cHByZXNzb3IoQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlcikK
KyAgICAgICAgOiBtX2xvYWRlcihsb2FkZXIpCisgICAgICAgICwgbV9wcmV2aW91c1N0YXRlKG1f
bG9hZGVyLm1fYWxsb3dTdGFsZVJlc291cmNlcykKKyAgICB7CisgICAgICAgIG1fbG9hZGVyLm1f
YWxsb3dTdGFsZVJlc291cmNlcyA9IHRydWU7CisgICAgfQorICAgIH5SZXNvdXJjZUNhY2hlVmFs
aWRhdGlvblN1cHByZXNzb3IoKQorICAgIHsKKyAgICAgICAgbV9sb2FkZXIubV9hbGxvd1N0YWxl
UmVzb3VyY2VzID0gbV9wcmV2aW91c1N0YXRlOworICAgIH0KK3ByaXZhdGU6CisgICAgQ2FjaGVk
UmVzb3VyY2VMb2FkZXImIG1fbG9hZGVyOworICAgIGJvb2wgbV9wcmV2aW91c1N0YXRlOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlUmVxdWVzdC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZGM1NGJkZjEwNDU2MTdkM2E4Y2M3NDkxMjFjNzRmOTc5MTVmYjIxNwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3Bw
CkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgR09PR0xFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
UmVxdWVzdC5oIgorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRl
ICJDcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OkNhY2hlZFJlc291cmNl
UmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgU3Ry
aW5nJiBjaGFyc2V0LCBPcHRpb25hbDxSZXNvdXJjZUxvYWRQcmlvcml0eT4gcHJpb3JpdHkpCisg
ICAgOiBtX3Jlc291cmNlUmVxdWVzdChyZXNvdXJjZVJlcXVlc3QpCisgICAgLCBtX2NoYXJzZXQo
Y2hhcnNldCkKKyAgICAsIG1fb3B0aW9ucyhDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGVmYXVsdENh
Y2hlZFJlc291cmNlT3B0aW9ucygpKQorICAgICwgbV9wcmlvcml0eShwcmlvcml0eSkKKyAgICAs
IG1fZm9yUHJlbG9hZChmYWxzZSkKKyAgICAsIG1fZGVmZXIoTm9EZWZlcikKK3sKK30KKworQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0OjpDYWNoZWRSZXNvdXJjZVJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0
JiYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMp
CisgICAgOiBtX3Jlc291cmNlUmVxdWVzdChXVEZNb3ZlKHJlc291cmNlUmVxdWVzdCkpCisgICAg
LCBtX29wdGlvbnMob3B0aW9ucykKKyAgICAsIG1fZm9yUHJlbG9hZChmYWxzZSkKKyAgICAsIG1f
ZGVmZXIoTm9EZWZlcikKK3sKK30KKworQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpDYWNoZWRSZXNv
dXJjZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIE9wdGlv
bmFsPFJlc291cmNlTG9hZFByaW9yaXR5PiBwcmlvcml0eSkKKyAgICA6IG1fcmVzb3VyY2VSZXF1
ZXN0KHJlc291cmNlUmVxdWVzdCkKKyAgICAsIG1fb3B0aW9ucyhDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6ZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygpKQorICAgICwgbV9wcmlvcml0eShwcmlv
cml0eSkKKyAgICAsIG1fZm9yUHJlbG9hZChmYWxzZSkKKyAgICAsIG1fZGVmZXIoTm9EZWZlcikK
K3sKK30KKworQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Ojp+Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0KCkK
K3sKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OnNldEluaXRpYXRvcihQYXNzUmVm
UHRyPEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgQVNTRVJUKCFtX2luaXRpYXRvckVsZW1lbnQg
JiYgbV9pbml0aWF0b3JOYW1lLmlzRW1wdHkoKSk7CisgICAgbV9pbml0aWF0b3JFbGVtZW50ID0g
ZWxlbWVudDsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OnNldEluaXRpYXRvcihj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKCFtX2luaXRpYXRvckVsZW1l
bnQgJiYgbV9pbml0aWF0b3JOYW1lLmlzRW1wdHkoKSk7CisgICAgbV9pbml0aWF0b3JOYW1lID0g
bmFtZTsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6Omlu
aXRpYXRvck5hbWUoKSBjb25zdAoreworICAgIGlmIChtX2luaXRpYXRvckVsZW1lbnQpCisgICAg
ICAgIHJldHVybiBtX2luaXRpYXRvckVsZW1lbnQtPmxvY2FsTmFtZSgpOworICAgIGlmICghbV9p
bml0aWF0b3JOYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG1faW5pdGlhdG9yTmFtZTsK
KworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGRlZmF1bHROYW1lKCJy
ZXNvdXJjZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHJldHVy
biBkZWZhdWx0TmFtZTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OnNldEFzUG90
ZW50aWFsbHlDcm9zc09yaWdpbihjb25zdCBTdHJpbmcmIG1vZGUsIERvY3VtZW50JiBkb2N1bWVu
dCkKK3sKKyAgICBBU1NFUlQobV9vcHRpb25zLm1vZGUgPT0gRmV0Y2hPcHRpb25zOjpNb2RlOjpO
b0NvcnMpOworICAgIGlmIChtb2RlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisgICAgbV9v
cHRpb25zLm1vZGUgPSBGZXRjaE9wdGlvbnM6Ok1vZGU6OkNvcnM7CisgICAgbV9vcHRpb25zLmNy
ZWRlbnRpYWxzID0gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobW9kZSwgInVzZS1jcmVk
ZW50aWFscyIpID8gRmV0Y2hPcHRpb25zOjpDcmVkZW50aWFsczo6SW5jbHVkZSA6IEZldGNoT3B0
aW9uczo6Q3JlZGVudGlhbHM6OlNhbWVPcmlnaW47CisgICAgbV9vcHRpb25zLmFsbG93Q3JlZGVu
dGlhbHMgPSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtb2RlLCAidXNlLWNyZWRlbnRp
YWxzIikgPyBBbGxvd1N0b3JlZENyZWRlbnRpYWxzIDogRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRp
YWxzOworCisgICAgQVNTRVJUKGRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCkpOworICAgIHVwZGF0
ZVJlcXVlc3RGb3JBY2Nlc3NDb250cm9sKG1fcmVzb3VyY2VSZXF1ZXN0LCAqZG9jdW1lbnQuc2Vj
dXJpdHlPcmlnaW4oKSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gv
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODI3ZWJiYmU1ODY2NzRlYmJhNzY5OGI0
OTc4M2FkM2Q4ZmRmYzAyMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9mZXRjaC9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaApAQCAtMCwwICsxLDgxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDYWNoZWRS
ZXNvdXJjZVJlcXVlc3RfaAorI2RlZmluZSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RfaAorCisjaW5j
bHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAi
UmVzb3VyY2VMb2FkUHJpb3JpdHkuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRlck9wdGlvbnMu
aCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK2NsYXNzIERvY3VtZW50OworCitjbGFzcyBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgeworcHVi
bGljOgorICAgIGVudW0gRGVmZXJPcHRpb24geyBOb0RlZmVyLCBEZWZlcnJlZEJ5Q2xpZW50IH07
CisKKyAgICBleHBsaWNpdCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwgY29uc3QgU3RyaW5nJiBjaGFyc2V0ID0gU3RyaW5nKCksIE9wdGlvbmFsPFJlc291cmNl
TG9hZFByaW9yaXR5PiA9IE51bGxvcHQpOworICAgIENhY2hlZFJlc291cmNlUmVxdWVzdChSZXNv
dXJjZVJlcXVlc3QmJiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJik7CisgICAgQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIE9wdGlvbmFsPFJlc291cmNl
TG9hZFByaW9yaXR5Pik7CisgICAgfkNhY2hlZFJlc291cmNlUmVxdWVzdCgpOworCisgICAgUmVz
b3VyY2VSZXF1ZXN0JiBtdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCkgeyByZXR1cm4gbV9yZXNvdXJj
ZVJlcXVlc3Q7IH0KKyAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VSZXF1ZXN0OyB9CisgICAgY29uc3QgU3RyaW5nJiBj
aGFyc2V0KCkgY29uc3QgeyByZXR1cm4gbV9jaGFyc2V0OyB9CisgICAgdm9pZCBzZXRDaGFyc2V0
KGNvbnN0IFN0cmluZyYgY2hhcnNldCkgeyBtX2NoYXJzZXQgPSBjaGFyc2V0OyB9CisgICAgY29u
c3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9vcHRp
b25zOyB9CisgICAgdm9pZCBzZXRPcHRpb25zKGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYg
b3B0aW9ucykgeyBtX29wdGlvbnMgPSBvcHRpb25zOyB9CisgICAgY29uc3QgT3B0aW9uYWw8UmVz
b3VyY2VMb2FkUHJpb3JpdHk+JiBwcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpb3JpdHk7
IH0KKyAgICBib29sIGZvclByZWxvYWQoKSBjb25zdCB7IHJldHVybiBtX2ZvclByZWxvYWQ7IH0K
KyAgICB2b2lkIHNldEZvclByZWxvYWQoYm9vbCBmb3JQcmVsb2FkKSB7IG1fZm9yUHJlbG9hZCA9
IGZvclByZWxvYWQ7IH0KKyAgICBEZWZlck9wdGlvbiBkZWZlcigpIGNvbnN0IHsgcmV0dXJuIG1f
ZGVmZXI7IH0KKyAgICB2b2lkIHNldERlZmVyKERlZmVyT3B0aW9uIGRlZmVyKSB7IG1fZGVmZXIg
PSBkZWZlcjsgfQorICAgIHZvaWQgc2V0SW5pdGlhdG9yKFBhc3NSZWZQdHI8RWxlbWVudD4pOwor
ICAgIHZvaWQgc2V0SW5pdGlhdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSk7CisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBpbml0aWF0b3JOYW1lKCkgY29uc3Q7CisgICAgYm9vbCBhbGxvd3ND
YWNoaW5nKCkgY29uc3QgeyByZXR1cm4gbV9vcHRpb25zLmNhY2hpbmdQb2xpY3kgPT0gQ2FjaGlu
Z1BvbGljeTo6QWxsb3dDYWNoaW5nOyB9CisgICAgdm9pZCBzZXRDYWNoaW5nUG9saWN5KENhY2hp
bmdQb2xpY3kgcG9saWN5KSB7IG1fb3B0aW9ucy5jYWNoaW5nUG9saWN5ID0gcG9saWN5OyB9CisK
KyAgICB2b2lkIHNldEFzUG90ZW50aWFsbHlDcm9zc09yaWdpbihjb25zdCBTdHJpbmcmLCBEb2N1
bWVudCYpOworCitwcml2YXRlOgorICAgIFJlc291cmNlUmVxdWVzdCBtX3Jlc291cmNlUmVxdWVz
dDsKKyAgICBTdHJpbmcgbV9jaGFyc2V0OworICAgIFJlc291cmNlTG9hZGVyT3B0aW9ucyBtX29w
dGlvbnM7CisgICAgT3B0aW9uYWw8UmVzb3VyY2VMb2FkUHJpb3JpdHk+IG1fcHJpb3JpdHk7Cisg
ICAgYm9vbCBtX2ZvclByZWxvYWQ7CisgICAgRGVmZXJPcHRpb24gbV9kZWZlcjsKKyAgICBSZWZQ
dHI8RWxlbWVudD4gbV9pbml0aWF0b3JFbGVtZW50OworICAgIEF0b21pY1N0cmluZyBtX2luaXRp
YXRvck5hbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlUmVxdWVzdElu
aXRpYXRvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNl
UmVxdWVzdEluaXRpYXRvcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzMzlhOGU1OGNkYWFkNTFmNWFmODBl
YTQ2Mzk0YmQ3YmM1MDI4MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5jcHAKQEAgLTAsMCArMSwz
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdP
T0dMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0
b3JzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5p
dGlhdG9yczo6Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycygpCisgICAgOiBjc3MoImNz
cyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpCisgICAgLCBmZXRjaCgiZmV0
Y2giLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKQorICAgICwgaWNvbigiaWNv
biIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpCisgICAgLCB4bWxodHRwcmVx
dWVzdCgieG1saHR0cHJlcXVlc3QiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5oIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kN2NmZTAxYzhkMjAwMDgzMjZhMDkxOTdlYmZkZjQ2NDU3MzgxZjI2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291
cmNlUmVxdWVzdEluaXRpYXRvcnMuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDYWNoZWRSZXNvdXJjZVJl
cXVlc3RJbml0aWF0b3JzX2gKKyNkZWZpbmUgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9y
c19oCisKKyNpbmNsdWRlICJUaHJlYWRHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSA8d3RmL3RleHQv
QXRvbWljU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IENhY2hlZFJl
c291cmNlUmVxdWVzdEluaXRpYXRvcnMgeworICAgIENhY2hlZFJlc291cmNlUmVxdWVzdEluaXRp
YXRvcnMoKTsKKworICAgIGNvbnN0IEF0b21pY1N0cmluZyBjc3M7CisgICAgY29uc3QgQXRvbWlj
U3RyaW5nIGZldGNoOworICAgIGNvbnN0IEF0b21pY1N0cmluZyBpY29uOworICAgIGNvbnN0IEF0
b21pY1N0cmluZyB4bWxodHRwcmVxdWVzdDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDYWNo
ZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBUaHJlYWRHbG9iYWxEYXRhOworfTsKKworaW5saW5l
IGNvbnN0IENhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMmIGNhY2hlZFJlc291cmNlUmVx
dWVzdEluaXRpYXRvcnMoKQoreworICAgIHJldHVybiB0aHJlYWRHbG9iYWxEYXRhKCkuY2FjaGVk
UmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hl
ZFNWR0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRTVkdE
b2N1bWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTUyMzAyMDFiMGY3MTBkMzlhNWJkYmIxYTZkNmEyYjg1
MjYwN2QzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9D
YWNoZWRTVkdEb2N1bWVudC5jcHAKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMTAgUm9iIEJ1aXMgPHJ3bGJ1aXNAZ21haWwuY29tPgorICAgIENvcHlyaWdodCAoQykg
MjAxMSBDb3NtaW4gVHJ1dGEgPGN0cnV0YUBnbWFpbC5jb20+CisgICAgQ29weXJpZ2h0IChDKSAy
MDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIFJlbmF0YSBI
b2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkNhY2hlZFNWR0RvY3VtZW50LmgiCisKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitDYWNoZWRTVkdEb2N1bWVudDo6Q2FjaGVkU1ZHRG9jdW1l
bnQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQor
ICAgIDogQ2FjaGVkUmVzb3VyY2UocmVxdWVzdCwgU1ZHRG9jdW1lbnRSZXNvdXJjZSwgc2Vzc2lv
bklEKQorICAgICwgbV9kZWNvZGVyKFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgiYXBwbGlj
YXRpb24veG1sIikpCit7CisgICAgc2V0QWNjZXB0KCJpbWFnZS9zdmcreG1sIik7Cit9CisKK0Nh
Y2hlZFNWR0RvY3VtZW50Ojp+Q2FjaGVkU1ZHRG9jdW1lbnQoKQoreworfQorCit2b2lkIENhY2hl
ZFNWR0RvY3VtZW50OjpzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmIGNocykKK3sKKyAgICBtX2Rl
Y29kZXItPnNldEVuY29kaW5nKGNocywgVGV4dFJlc291cmNlRGVjb2Rlcjo6RW5jb2RpbmdGcm9t
SFRUUEhlYWRlcik7Cit9CisKK1N0cmluZyBDYWNoZWRTVkdEb2N1bWVudDo6ZW5jb2RpbmcoKSBj
b25zdAoreworICAgIHJldHVybiBtX2RlY29kZXItPmVuY29kaW5nKCkubmFtZSgpOworfQorCit2
b2lkIENhY2hlZFNWR0RvY3VtZW50OjpmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1ZmZlciogZGF0YSkK
K3sKKyAgICBpZiAoZGF0YSkgeworICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGNyZWF0ZSBh
IG5ldyBmcmFtZSBiZWNhdXNlIHRoZSBuZXcgZG9jdW1lbnQgYmVsb25ncyB0byB0aGUgcGFyZW50
IFVzZUVsZW1lbnQuCisgICAgICAgIG1fZG9jdW1lbnQgPSBTVkdEb2N1bWVudDo6Y3JlYXRlKG51
bGxwdHIsIHJlc3BvbnNlKCkudXJsKCkpOworICAgICAgICBtX2RvY3VtZW50LT5zZXRDb250ZW50
KG1fZGVjb2Rlci0+ZGVjb2RlQW5kRmx1c2goZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpKTsK
KyAgICB9CisgICAgQ2FjaGVkUmVzb3VyY2U6OmZpbmlzaExvYWRpbmcoZGF0YSk7Cit9CisKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRTVkdEb2N1bWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFNWR0RvY3VtZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNjI2NDJmZTNlNDM1ZmJjN2YxMTkzYmRmYjU1OTZiMzVmNjlkOTliZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRTVkdEb2N1bWVu
dC5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEwIFJvYiBCdWlz
IDxyd2xidWlzQGdtYWlsLmNvbT4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgQ29zbWluIFRydXRh
IDxjdHJ1dGFAZ21haWwuY29tPgorICAgIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9m
IFN6ZWdlZAorICAgIENvcHlyaWdodCAoQykgMjAxMiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJr
aXQub3JnPgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyovCisKKyNpZm5kZWYgQ2FjaGVkU1ZHRG9jdW1lbnRfaAorI2RlZmluZSBDYWNoZWRT
VkdEb2N1bWVudF9oCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q2FjaGVkU1ZHRG9jdW1lbnQgZmluYWwgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2UgeworcHVibGlj
OgorICAgIGV4cGxpY2l0IENhY2hlZFNWR0RvY3VtZW50KGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IFNlc3Npb25JRCk7CisgICAgdmlydHVhbCB+Q2FjaGVkU1ZHRG9jdW1lbnQoKTsKKworICAgIFNW
R0RvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQuZ2V0KCk7IH0K
KworcHJpdmF0ZToKKyAgICBib29sIG1heVRyeVJlcGxhY2VFbmNvZGVkRGF0YSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2b2lkIHNldEVuY29kaW5nKGNvbnN0IFN0cmlu
ZyYpIG92ZXJyaWRlOworICAgIFN0cmluZyBlbmNvZGluZygpIGNvbnN0IG92ZXJyaWRlOworICAg
IGNvbnN0IFRleHRSZXNvdXJjZURlY29kZXIqIHRleHRSZXNvdXJjZURlY29kZXIoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX2RlY29kZXIuZ2V0KCk7IH0KKyAgICB2b2lkIGZpbmlzaExvYWRp
bmcoU2hhcmVkQnVmZmVyKikgb3ZlcnJpZGU7CisKKyAgICBSZWZQdHI8U1ZHRG9jdW1lbnQ+IG1f
ZG9jdW1lbnQ7CisgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUNI
RURfUkVTT1VSQ0UoQ2FjaGVkU1ZHRG9jdW1lbnQsIENhY2hlZFJlc291cmNlOjpTVkdEb2N1bWVu
dFJlc291cmNlKQorCisjZW5kaWYgLy8gQ2FjaGVkU1ZHRG9jdW1lbnRfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFNWR0RvY3VtZW50Q2xpZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRG9jdW1lbnRDbGllbnQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iMjJlYWQwYjgwNmMzODA1ZDFlMzc0ZmZkYWYwN2ZlZTI3YzQ5ZjIxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFNWR0RvY3VtZW50
Q2xpZW50LmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgUm9i
IEJ1aXMgPHJ3bGJ1aXNAZ21haWwuY29tPgorICAgIENvcHlyaWdodCAoQykgMjAxMSBDb3NtaW4g
VHJ1dGEgPGN0cnV0YUBnbWFpbC5jb20+CisgICAgQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNp
dHkgb2YgU3plZ2VkCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIFJlbmF0YSBIb2RvdmFuIDxyZW5p
QHdlYmtpdC5vcmc+CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBDYWNoZWRTVkdEb2N1bWVudENsaWVudF9oCisjZGVm
aW5lIENhY2hlZFNWR0RvY3VtZW50Q2xpZW50X2gKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
Q2xpZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FjaGVkU1ZHRG9jdW1l
bnRDbGllbnQgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworcHVibGljOgorICAgIHZp
cnR1YWwgfkNhY2hlZFNWR0RvY3VtZW50Q2xpZW50KCkgeyB9CisgICAgc3RhdGljIENhY2hlZFJl
c291cmNlQ2xpZW50VHlwZSBleHBlY3RlZFR5cGUoKSB7IHJldHVybiBTVkdEb2N1bWVudFR5cGU7
IH0KKyAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFR5cGUgcmVzb3VyY2VDbGllbnRUeXBlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gZXhwZWN0ZWRUeXBlKCk7IH0KK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENhY2hlZFNWR0RvY3VtZW50Q2xpZW50X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRTVkdEb2N1bWVudFJlZmVy
ZW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRG9jdW1lbnRS
ZWZlcmVuY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3OTBmNzM0OTM4OTZlZTNiNTI1MjFkMmE3NWU4ODc2
ZGQ5YzU4MDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gv
Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuY3BwCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2Uu
aCIKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiQ2FjaGVk
UmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZVJlcXVlc3QuaCIKKyNp
bmNsdWRlICJDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmgiCisjaW5jbHVkZSAiQ2Fj
aGVkU1ZHRG9jdW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDYWNoZWRTVkdEb2N1
bWVudFJlZmVyZW5jZTo6Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UoY29uc3QgU3RyaW5nJiB1
cmwpCisgICAgOiBtX3VybCh1cmwpCisgICAgLCBtX2RvY3VtZW50KG51bGxwdHIpCisgICAgLCBt
X2xvYWRSZXF1ZXN0ZWQoZmFsc2UpCit7Cit9CisKK0NhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNl
Ojp+Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UoKQoreworICAgIGlmIChtX2RvY3VtZW50KQor
ICAgICAgICBtX2RvY3VtZW50LT5yZW1vdmVDbGllbnQodGhpcyk7Cit9CisKK3ZvaWQgQ2FjaGVk
U1ZHRG9jdW1lbnRSZWZlcmVuY2U6OmxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlciwg
Y29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKQoreworICAgIGlmIChtX2xvYWRS
ZXF1ZXN0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCBy
ZXF1ZXN0KFJlc291cmNlUmVxdWVzdChsb2FkZXIuZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwobV91
cmwpKSwgb3B0aW9ucyk7CisgICAgcmVxdWVzdC5zZXRJbml0aWF0b3IoY2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0SW5pdGlhdG9ycygpLmNzcyk7CisgICAgbV9kb2N1bWVudCA9IGxvYWRlci5yZXF1ZXN0
U1ZHRG9jdW1lbnQocmVxdWVzdCk7CisgICAgaWYgKG1fZG9jdW1lbnQpCisgICAgICAgIG1fZG9j
dW1lbnQtPmFkZENsaWVudCh0aGlzKTsKKworICAgIG1fbG9hZFJlcXVlc3RlZCA9IHRydWU7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRTVkdE
b2N1bWVudFJlZmVyZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFNW
R0RvY3VtZW50UmVmZXJlbmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjk4MGExM2Y2MTI4OTEzNThmZDZiMzYw
YmFiNjlkMWZlNDE2MDg5ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9mZXRjaC9DYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oCkBAIC0wLDAgKzEsNTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlX2gKKyNkZWZpbmUgQ2FjaGVk
U1ZHRG9jdW1lbnRSZWZlcmVuY2VfaAorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUu
aCIKKyNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudENsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhY2hlZFNW
R0RvY3VtZW50OworY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CitzdHJ1Y3QgUmVzb3VyY2VM
b2FkZXJPcHRpb25zOworCitjbGFzcyBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZSA6IHB1Ymxp
YyBDYWNoZWRTVkdEb2N1bWVudENsaWVudCB7CitwdWJsaWM6CisgICAgQ2FjaGVkU1ZHRG9jdW1l
bnRSZWZlcmVuY2UoY29uc3QgU3RyaW5nJik7CisKKyAgICB2aXJ0dWFsIH5DYWNoZWRTVkdEb2N1
bWVudFJlZmVyZW5jZSgpOworCisgICAgdm9pZCBsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyJiwg
Y29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJik7CisgICAgYm9vbCBsb2FkUmVxdWVzdGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2FkUmVxdWVzdGVkOyB9CisKKyAgICBDYWNoZWRTVkdEb2N1bWVu
dCogZG9jdW1lbnQoKSB7IHJldHVybiBtX2RvY3VtZW50LmdldCgpOyB9CisKK3ByaXZhdGU6Cisg
ICAgU3RyaW5nIG1fdXJsOworICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNWR0RvY3Vt
ZW50PiBtX2RvY3VtZW50OworICAgIGJvb2wgbV9sb2FkUmVxdWVzdGVkOworfTsKKworfTsKKwor
I2VuZGlmIC8vIENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRTVkdGb250LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9mZXRjaC9DYWNoZWRTVkdGb250LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43M2IxYjZiYTQ5MmRj
MDU4ZWVkZTk3MjY3NjE4Zjk3NDg2YmRjMjYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFNWR0ZvbnQuY3BwCkBAIC0wLDAgKzEsMTM1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJDYWNoZWRTVkdGb250LmgiCisKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRT
KQorCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3Jt
RGF0YS5oIgorI2luY2x1ZGUgIk5vRXZlbnREaXNwYXRjaEFzc2VydGlvbi5oIgorI2luY2x1ZGUg
IlNWR0RvY3VtZW50LmgiCisjaW5jbHVkZSAiU1ZHRm9udEVsZW1lbnQuaCIKKyNpbmNsdWRlICJT
VkdGb250RmFjZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRl
ICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiVHlwZWRFbGVtZW50RGVzY2VuZGFu
dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiU1ZHVG9PVEZGb250Q29udmVyc2lvbi5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0NhY2hlZFNWR0ZvbnQ6OkNhY2hlZFNWR0ZvbnQoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIFNlc3Npb25JRCBzZXNzaW9uSUQpCisgICAg
OiBDYWNoZWRGb250KHJlc291cmNlUmVxdWVzdCwgc2Vzc2lvbklELCBTVkdGb250UmVzb3VyY2Up
CisgICAgLCBtX2V4dGVybmFsU1ZHRm9udEVsZW1lbnQobnVsbHB0cikKK3sKK30KKworUmVmUHRy
PEZvbnQ+IENhY2hlZFNWR0ZvbnQ6OmNyZWF0ZUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRo
ZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdz
JiBmb250RmFjZUZlYXR1cmVzLCBjb25zdCBGb250VmFyaWFudFNldHRpbmdzJiBmb250RmFjZVZh
cmlhbnRTZXR0aW5ncykKK3sKKyAgICBpZiAoZmlyc3RGb250RmFjZShyZW1vdGVVUkkpKQorICAg
ICAgICByZXR1cm4gQ2FjaGVkRm9udDo6Y3JlYXRlRm9udChmb250RGVzY3JpcHRpb24sIHJlbW90
ZVVSSSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljLCBmb250RmFjZUZlYXR1cmVzLCBm
b250RmFjZVZhcmlhbnRTZXR0aW5ncyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0ZvbnRQ
bGF0Zm9ybURhdGEgQ2FjaGVkU1ZHRm9udDo6cGxhdGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGJvb2wgYm9sZCwgYm9vbCBpdGFs
aWMsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MmIGZvbnRGYWNlRmVhdHVyZXMsIGNvbnN0IEZv
bnRWYXJpYW50U2V0dGluZ3MmIGZvbnRGYWNlVmFyaWFudFNldHRpbmdzKQoreworICAgIGlmICht
X2V4dGVybmFsU1ZHRG9jdW1lbnQpCisgICAgICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKGZv
bnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBib2xkLCBpdGFsaWMpOworICAgIHJl
dHVybiBDYWNoZWRGb250OjpwbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShmb250RGVzY3JpcHRp
b24sIGJvbGQsIGl0YWxpYywgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VWYXJpYW50U2V0dGlu
Z3MpOworfQorCitib29sIENhY2hlZFNWR0ZvbnQ6OmVuc3VyZUN1c3RvbUZvbnREYXRhKGNvbnN0
IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJKQoreworICAgIGlmICghbV9leHRlcm5hbFNWR0RvY3Vt
ZW50ICYmICFlcnJvck9jY3VycmVkKCkgJiYgIWlzTG9hZGluZygpICYmIG1fZGF0YSkgeworICAg
ICAgICAvLyBXZSBtYXkgZ2V0IGhlcmUgZHVyaW5nIHJlbmRlciB0cmVlIHVwZGF0ZXMgd2hlbiBl
dmVudHMgYXJlIGZvcmJpZGRlbi4KKyAgICAgICAgLy8gRnJhbWVsZXNzIGRvY3VtZW50IGNhbid0
IHJ1biBzY3JpcHRzIG9yIGNhbGwgYmFjayB0byB0aGUgY2xpZW50IHNvIHRoaXMgaXMgc2FmZS4K
KyAgICAgICAgYXV0byBjb3VudCA9IE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6ZHJvcFRlbXBv
cmFyaWx5KCk7CisKKyAgICAgICAgbV9leHRlcm5hbFNWR0RvY3VtZW50ID0gU1ZHRG9jdW1lbnQ6
OmNyZWF0ZShudWxscHRyLCBVUkwoKSk7CisgICAgICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNv
ZGVyPiBkZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJhcHBsaWNhdGlvbi94
bWwiKTsKKyAgICAgICAgbV9leHRlcm5hbFNWR0RvY3VtZW50LT5zZXRDb250ZW50KGRlY29kZXIt
PmRlY29kZUFuZEZsdXNoKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSkpOworCisgICAg
ICAgIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6cmVzdG9yZURyb3BwZWQoY291bnQpOworCisg
ICAgICAgIGlmIChkZWNvZGVyLT5zYXdFcnJvcigpKQorICAgICAgICAgICAgbV9leHRlcm5hbFNW
R0RvY3VtZW50ID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKG1fZXh0ZXJuYWxTVkdEb2N1bWVudCkK
KyAgICAgICAgICAgIG1heWJlSW5pdGlhbGl6ZUV4dGVybmFsU1ZHRm9udEVsZW1lbnQocmVtb3Rl
VVJJKTsKKyAgICAgICAgaWYgKCFtX2V4dGVybmFsU1ZHRm9udEVsZW1lbnQpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZEZvbnQgPSBjb252ZXJ0
U1ZHVG9PVEZGb250KCptX2V4dGVybmFsU1ZHRm9udEVsZW1lbnQpKQorICAgICAgICAgICAgbV9j
b252ZXJ0ZWRGb250ID0gU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcihjb252ZXJ0ZWRGb250LnZh
bHVlKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fZXh0ZXJuYWxTVkdEb2N1bWVu
dCA9IG51bGxwdHI7CisgICAgICAgICAgICBtX2V4dGVybmFsU1ZHRm9udEVsZW1lbnQgPSBudWxs
cHRyOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIG1fZXh0ZXJuYWxTVkdEb2N1bWVudCAmJiBDYWNoZWRGb250OjplbnN1cmVDdXN0b21G
b250RGF0YShtX2NvbnZlcnRlZEZvbnQuZ2V0KCkpOworfQorCitTVkdGb250RWxlbWVudCogQ2Fj
aGVkU1ZHRm9udDo6Z2V0U1ZHRm9udEJ5SWQoY29uc3QgU3RyaW5nJiBmb250TmFtZSkgY29uc3QK
K3sKKyAgICBBU1NFUlQobV9leHRlcm5hbFNWR0RvY3VtZW50KTsKKyAgICBhdXRvIGVsZW1lbnRz
ID0gZGVzY2VuZGFudHNPZlR5cGU8U1ZHRm9udEVsZW1lbnQ+KCptX2V4dGVybmFsU1ZHRG9jdW1l
bnQpOworCisgICAgaWYgKGZvbnROYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGVsZW1l
bnRzLmZpcnN0KCk7CisKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50cykgeworICAg
ICAgICBpZiAoZWxlbWVudC5nZXRJZEF0dHJpYnV0ZSgpID09IGZvbnROYW1lKQorICAgICAgICAg
ICAgcmV0dXJuICZlbGVtZW50OworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworU1ZH
Rm9udEVsZW1lbnQqIENhY2hlZFNWR0ZvbnQ6Om1heWJlSW5pdGlhbGl6ZUV4dGVybmFsU1ZHRm9u
dEVsZW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiByZW1vdGVVUkkpCit7CisgICAgaWYgKG1fZXh0
ZXJuYWxTVkdGb250RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIG1fZXh0ZXJuYWxTVkdGb250RWxl
bWVudDsKKyAgICBTdHJpbmcgZnJhZ21lbnRJZGVudGlmaWVyOworICAgIHNpemVfdCBzdGFydCA9
IHJlbW90ZVVSSS5maW5kKCcjJyk7CisgICAgaWYgKHN0YXJ0ICE9IG5vdEZvdW5kKQorICAgICAg
ICBmcmFnbWVudElkZW50aWZpZXIgPSByZW1vdGVVUkkuc3RyaW5nKCkuc3Vic3RyaW5nKHN0YXJ0
ICsgMSk7CisgICAgbV9leHRlcm5hbFNWR0ZvbnRFbGVtZW50ID0gZ2V0U1ZHRm9udEJ5SWQoZnJh
Z21lbnRJZGVudGlmaWVyKTsKKyAgICByZXR1cm4gbV9leHRlcm5hbFNWR0ZvbnRFbGVtZW50Owor
fQorCitTVkdGb250RmFjZUVsZW1lbnQqIENhY2hlZFNWR0ZvbnQ6OmZpcnN0Rm9udEZhY2UoY29u
c3QgQXRvbWljU3RyaW5nJiByZW1vdGVVUkkpCit7CisgICAgaWYgKCFtYXliZUluaXRpYWxpemVF
eHRlcm5hbFNWR0ZvbnRFbGVtZW50KHJlbW90ZVVSSSkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgaWYgKGF1dG8qIGZpcnN0Rm9udEZhY2UgPSBjaGlsZHJlbk9mVHlwZTxTVkdGb250
RmFjZUVsZW1lbnQ+KCptX2V4dGVybmFsU1ZHRm9udEVsZW1lbnQpLmZpcnN0KCkpCisgICAgICAg
IHJldHVybiBmaXJzdEZvbnRGYWNlOworICAgIHJldHVybiBudWxscHRyOworfQorCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFNWR0Zv
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRTVkdGb250LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNjYxYmE1YzI1MzdjNzI0YmYyMmM4NDA0MzcxNDVlNDk4Mjc1ZDczYgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRTVkdGb250LmgKQEAg
LTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIENhY2hlZFNWR0ZvbnRfaAorI2RlZmluZSBDYWNoZWRTVkdGb250
X2gKKworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisKKyNpbmNsdWRlICJDYWNoZWRGb250LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHRm9udEZhY2VFbGVtZW50OworCitjbGFz
cyBDYWNoZWRTVkdGb250IGZpbmFsIDogcHVibGljIENhY2hlZEZvbnQgeworcHVibGljOgorICAg
IENhY2hlZFNWR0ZvbnQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2Vzc2lvbklEKTsKKworICAg
IGJvb2wgZW5zdXJlQ3VzdG9tRm9udERhdGEoY29uc3QgQXRvbWljU3RyaW5nJiByZW1vdGVVUkkp
IG92ZXJyaWRlOworICAgIAorICAgIFJlZlB0cjxGb250PiBjcmVhdGVGb250KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5bnRoZXRp
Y0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzJiwg
Y29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIEZv
bnRQbGF0Zm9ybURhdGEgcGxhdGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5n
cyYsIGNvbnN0IEZvbnRWYXJpYW50U2V0dGluZ3MmKTsKKworICAgIFNWR0ZvbnRFbGVtZW50KiBn
ZXRTVkdGb250QnlJZChjb25zdCBTdHJpbmcmKSBjb25zdDsKKworICAgIFNWR0ZvbnRFbGVtZW50
KiBtYXliZUluaXRpYWxpemVFeHRlcm5hbFNWR0ZvbnRFbGVtZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyYgcmVtb3RlVVJJKTsKKyAgICBTVkdGb250RmFjZUVsZW1lbnQqIGZpcnN0Rm9udEZhY2UoY29u
c3QgQXRvbWljU3RyaW5nJiByZW1vdGVVUkkpOworCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
bV9jb252ZXJ0ZWRGb250OworICAgIFJlZlB0cjxTVkdEb2N1bWVudD4gbV9leHRlcm5hbFNWR0Rv
Y3VtZW50OworICAgIFNWR0ZvbnRFbGVtZW50KiBtX2V4dGVybmFsU1ZHRm9udEVsZW1lbnQ7Cit9
OworCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FDSEVEX1JFU09VUkNFKENhY2hlZFNW
R0ZvbnQsIENhY2hlZFJlc291cmNlOjpTVkdGb250UmVzb3VyY2UpCisKKyNlbmRpZgorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRTY3JpcHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFNjcmlwdC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNzQ1ODRjOWU2NDY4NTQzYzgxNzcxZDkwMWVhYjJmN2VmOGVmNjQzNQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRTY3JpcHQuY3BwCkBA
IC0wLDAgKzEsMTQ5IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChr
bm9sbEBtcGktaGQubXBnLmRlKQorICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIg
KG11ZWxsZXJAa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDIgV2FsZG8gQmFzdGlhbiAo
YmFzdGlhbkBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChz
YW0ud2VpbmlnQGdtYWlsLmNvbSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgIFRoaXMgY2xh
c3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywg
c3R5bGUgc2hlZXRzIGFuZCBodG1sCisgICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBt
ZW1vcnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNs
aWVudC5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgiCisjaW5jbHVk
ZSAiSFRUUEhlYWRlck5hbWVzLmgiCisjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKKyNpbmNsdWRl
ICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKKyNpbmNsdWRl
ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
KyNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworQ2FjaGVkU2NyaXB0OjpDYWNoZWRTY3JpcHQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNv
dXJjZVJlcXVlc3QsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgU2Vzc2lvbklEIHNlc3Npb25JRCkK
KyAgICA6IENhY2hlZFJlc291cmNlKHJlc291cmNlUmVxdWVzdCwgU2NyaXB0LCBzZXNzaW9uSUQp
CisgICAgLCBtX2RlY29kZXIoVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKEFTQ0lJTGl0ZXJh
bCgiYXBwbGljYXRpb24vamF2YXNjcmlwdCIpLCBjaGFyc2V0KSkKK3sKKyAgICAvLyBJdCdzIGph
dmFzY3JpcHQgd2Ugd2FudC4KKyAgICAvLyBCdXQgc29tZSB3ZWJzaXRlcyB0aGluayB0aGVpciBz
Y3JpcHRzIGFyZSA8c29tZSB3cm9uZyBtaW1ldHlwZSBoZXJlPgorICAgIC8vIGFuZCByZWZ1c2Ug
dG8gc2VydmUgdGhlbSBpZiB3ZSBvbmx5IGFjY2VwdCBhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQu
CisgICAgc2V0QWNjZXB0KCIqLyoiKTsKK30KKworQ2FjaGVkU2NyaXB0Ojp+Q2FjaGVkU2NyaXB0
KCkKK3sKK30KKwordm9pZCBDYWNoZWRTY3JpcHQ6OnNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYg
Y2hzKQoreworICAgIG1fZGVjb2Rlci0+c2V0RW5jb2RpbmcoY2hzLCBUZXh0UmVzb3VyY2VEZWNv
ZGVyOjpFbmNvZGluZ0Zyb21IVFRQSGVhZGVyKTsKK30KKworU3RyaW5nIENhY2hlZFNjcmlwdDo6
ZW5jb2RpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2RlY29kZXItPmVuY29kaW5nKCkubmFt
ZSgpOworfQorCitTdHJpbmcgQ2FjaGVkU2NyaXB0OjptaW1lVHlwZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUobV9yZXNwb25zZS5odHRwSGVhZGVy
RmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlKSkuY29udmVydFRvQVNDSUlMb3dlcmNh
c2UoKTsKK30KKworU3RyaW5nVmlldyBDYWNoZWRTY3JpcHQ6OnNjcmlwdCgpCit7CisgICAgaWYg
KCFtX2RhdGEpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAobV9kZWNvZGluZ1N0YXRl
ID09IE5ldmVyRGVjb2RlZAorICAgICAgICAmJiBUZXh0RW5jb2RpbmcoZW5jb2RpbmcoKSkuaXNC
eXRlQmFzZWRFbmNvZGluZygpCisgICAgICAgICYmIG1fZGF0YS0+c2l6ZSgpCisgICAgICAgICYm
IGNoYXJhY3RlcnNBcmVBbGxBU0NJSShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4obV9k
YXRhLT5kYXRhKCkpLCBtX2RhdGEtPnNpemUoKSkpIHsKKworICAgICAgICBtX2RlY29kaW5nU3Rh
dGUgPSBEYXRhQW5kRGVjb2RlZFN0cmluZ0hhdmVTYW1lQnl0ZXM7CisKKyAgICAgICAgLy8gSWYg
dGhlIGVuY29kZWQgYW5kIGRlY29kZWQgZGF0YSBhcmUgdGhlIHNhbWUsIHRoZXJlIGlzIG5vIGRl
Y29kZWQgZGF0YSBjb3N0IQorICAgICAgICBzZXREZWNvZGVkU2l6ZSgwKTsKKyAgICAgICAgbV9k
ZWNvZGVkRGF0YURlbGV0aW9uVGltZXIuc3RvcCgpOworCisgICAgICAgIG1fc2NyaXB0SGFzaCA9
IFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KG1fZGF0YS0+ZGF0YSgpKSwgbV9kYXRhLT5zaXplKCkpOworICAgIH0K
KworICAgIGlmIChtX2RlY29kaW5nU3RhdGUgPT0gRGF0YUFuZERlY29kZWRTdHJpbmdIYXZlU2Ft
ZUJ5dGVzKQorICAgICAgICByZXR1cm4geyByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
bV9kYXRhLT5kYXRhKCkpLCBtX2RhdGEtPnNpemUoKSB9OworCisgICAgaWYgKCFtX3NjcmlwdCkg
eworICAgICAgICBtX3NjcmlwdCA9IG1fZGVjb2Rlci0+ZGVjb2RlQW5kRmx1c2gobV9kYXRhLT5k
YXRhKCksIGVuY29kZWRTaXplKCkpOworICAgICAgICBBU1NFUlQoIW1fc2NyaXB0SGFzaCB8fCBt
X3NjcmlwdEhhc2ggPT0gbV9zY3JpcHQuaW1wbCgpLT5oYXNoKCkpOworICAgICAgICBpZiAobV9k
ZWNvZGluZ1N0YXRlID09IE5ldmVyRGVjb2RlZCkKKyAgICAgICAgICAgIG1fc2NyaXB0SGFzaCA9
IG1fc2NyaXB0LmltcGwoKS0+aGFzaCgpOworICAgICAgICBtX2RlY29kaW5nU3RhdGUgPSBEYXRh
QW5kRGVjb2RlZFN0cmluZ0hhdmVEaWZmZXJlbnRCeXRlczsKKyAgICAgICAgc2V0RGVjb2RlZFNp
emUobV9zY3JpcHQuc2l6ZUluQnl0ZXMoKSk7CisgICAgfQorCisgICAgbV9kZWNvZGVkRGF0YURl
bGV0aW9uVGltZXIucmVzdGFydCgpOworICAgIHJldHVybiBtX3NjcmlwdDsKK30KKwordW5zaWdu
ZWQgQ2FjaGVkU2NyaXB0OjpzY3JpcHRIYXNoKCkKK3sKKyAgICBpZiAobV9kZWNvZGluZ1N0YXRl
ID09IE5ldmVyRGVjb2RlZCkKKyAgICAgICAgc2NyaXB0KCk7CisgICAgcmV0dXJuIG1fc2NyaXB0
SGFzaDsKK30KKwordm9pZCBDYWNoZWRTY3JpcHQ6OmZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVy
KiBkYXRhKQoreworICAgIG1fZGF0YSA9IGRhdGE7CisgICAgc2V0RW5jb2RlZFNpemUoZGF0YSA/
IGRhdGEtPnNpemUoKSA6IDApOworICAgIENhY2hlZFJlc291cmNlOjpmaW5pc2hMb2FkaW5nKGRh
dGEpOworfQorCit2b2lkIENhY2hlZFNjcmlwdDo6ZGVzdHJveURlY29kZWREYXRhKCkKK3sKKyAg
ICBtX3NjcmlwdCA9IFN0cmluZygpOworICAgIHNldERlY29kZWRTaXplKDApOworfQorCisjaWYg
RU5BQkxFKE5PU05JRkYpCitib29sIENhY2hlZFNjcmlwdDo6bWltZVR5cGVBbGxvd2VkQnlOb3Nu
aWZmKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcGFyc2VDb250ZW50VHlwZU9wdGlvbnNIZWFkZXIo
bV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlhDb250ZW50VHlwZU9w
dGlvbnMpKSAhPSBDb250ZW50VHlwZU9wdGlvbnNOb3NuaWZmIHx8IE1JTUVUeXBlUmVnaXN0cnk6
OmlzU3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKG1pbWVUeXBlKCkpOworfQorI2VuZGlmCisK
K2Jvb2wgQ2FjaGVkU2NyaXB0OjpzaG91bGRJZ25vcmVIVFRQU3RhdHVzQ29kZUVycm9ycygpIGNv
bnN0Cit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIC8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZv
ciA8cmRhcjovL3Byb2JsZW0vMTM5MTYyOTE+CisgICAgLy8gUkVHUkVTU0lPTiAocjExOTc1OSk6
IEFkb2JlIEZsYXNoIFBsYXllciAic21hbGxlciIgaW5zdGFsbGVyIHJlbGllcyBvbiB0aGUgaW5j
b3JyZWN0IGZpcmluZworICAgIC8vIG9mIGEgbG9hZCBldmVudCBhbmQgbmVlZHMgYW4gYXBwLXNw
ZWNpZmljIGhhY2sgZm9yIGNvbXBhdGliaWxpdHkuCisgICAgLy8gVGhlIGluc3RhbGxlciBpbiBx
dWVzdGlvbiB0cmllcyB0byBsb2FkIC5qcyBmaWxlIHRoYXQgZG9lc24ndCBleGlzdCwgY2F1c2lu
ZyB0aGUgc2VydmVyIHRvCisgICAgLy8gcmV0dXJuIGEgNDA0IHJlc3BvbnNlLiBOb3JtYWxseSwg
dGhpcyB3b3VsZCB0cmlnZ2VyIGFuIGVycm9yIGV2ZW50IHRvIGJlIGRpc3BhdGNoZWQsIGJ1dCB0
aGUKKyAgICAvLyBpbnN0YWxsZXIgZXhwZWN0cyBhIGxvYWQgZXZlbnQgaW5zdGVhZCBzbyB3ZSB3
b3JrIGFyb3VuZCBpdCBoZXJlLgorICAgIGlmIChNYWNBcHBsaWNhdGlvbjo6aXNTb2xpZFN0YXRl
TmV0d29ya3NEb3dubG9hZGVyKCkpCisgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCisKKyAg
ICByZXR1cm4gQ2FjaGVkUmVzb3VyY2U6OnNob3VsZElnbm9yZUhUVFBTdGF0dXNDb2RlRXJyb3Jz
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9mZXRjaC9DYWNoZWRTY3JpcHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9m
ZXRjaC9DYWNoZWRTY3JpcHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYmYxZDE0MTZjNTIwZjkxNDc3MWRiOTMw
NWYyNTgzN2JmNGNiMWVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2ZldGNoL0NhY2hlZFNjcmlwdC5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCisgICAgQ29weXJpZ2h0
IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICAgIENvcHlyaWdodCAo
QykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKworICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVl
ZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUgc2hlZXRzIGFuZCBodG1sCisgICAgcGFnZXMg
ZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCisq
LworCisjaWZuZGVmIENhY2hlZFNjcmlwdF9oCisjZGVmaW5lIENhY2hlZFNjcmlwdF9oCisKKyNp
bmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFRleHRSZXNvdXJjZURlY29kZXI7CisKK2NsYXNzIENhY2hlZFNjcmlwdCBmaW5hbCA6IHB1Ymxp
YyBDYWNoZWRSZXNvdXJjZSB7CitwdWJsaWM6CisgICAgQ2FjaGVkU2NyaXB0KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgU2Vzc2lvbklEKTsKKyAgICB2aXJ0
dWFsIH5DYWNoZWRTY3JpcHQoKTsKKworICAgIFN0cmluZ1ZpZXcgc2NyaXB0KCk7CisgICAgdW5z
aWduZWQgc2NyaXB0SGFzaCgpOworCisgICAgU3RyaW5nIG1pbWVUeXBlKCkgY29uc3Q7CisKKyNp
ZiBFTkFCTEUoTk9TTklGRikKKyAgICBib29sIG1pbWVUeXBlQWxsb3dlZEJ5Tm9zbmlmZigpIGNv
bnN0OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgYm9vbCBtYXlUcnlSZXBsYWNlRW5jb2RlZERh
dGEoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBib29sIHNob3VsZEln
bm9yZUhUVFBTdGF0dXNDb2RlRXJyb3JzKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNl
dEVuY29kaW5nKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIFN0cmluZyBlbmNvZGluZygp
IGNvbnN0IG92ZXJyaWRlOworICAgIGNvbnN0IFRleHRSZXNvdXJjZURlY29kZXIqIHRleHRSZXNv
dXJjZURlY29kZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2RlY29kZXIuZ2V0KCk7IH0K
KyAgICB2b2lkIGZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKikgb3ZlcnJpZGU7CisKKyAgICB2
b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YSgpIG92ZXJyaWRlOworCisgICAgU3RyaW5nIG1fc2NyaXB0
OworICAgIHVuc2lnbmVkIG1fc2NyaXB0SGFzaCB7IDAgfTsKKworICAgIGVudW0gRGVjb2RpbmdT
dGF0ZSB7IE5ldmVyRGVjb2RlZCwgRGF0YUFuZERlY29kZWRTdHJpbmdIYXZlU2FtZUJ5dGVzLCBE
YXRhQW5kRGVjb2RlZFN0cmluZ0hhdmVEaWZmZXJlbnRCeXRlcyB9OworICAgIERlY29kaW5nU3Rh
dGUgbV9kZWNvZGluZ1N0YXRlIHsgTmV2ZXJEZWNvZGVkIH07CisKKyAgICBSZWZQdHI8VGV4dFJl
c291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBQ0hFRF9SRVNPVVJDRShDYWNoZWRTY3JpcHQsIENh
Y2hlZFJlc291cmNlOjpTY3JpcHQpCisKKyNlbmRpZiAvLyBDYWNoZWRTY3JpcHRfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFN0eWxlU2hlZXRDbGllbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRTdHlsZVNoZWV0Q2xpZW50LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMmFhMjkyYTcxZGRkZWM5YTRiNTQ5MmNmMjZlNGFmOTllZmUxMmUyOAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRTdHlsZVNo
ZWV0Q2xpZW50LmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDE5OTggTGFy
cyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKKyBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBN
dWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAKKyBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgCisgVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQg
Zm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKKyBwYWdlcyBmcm9tIHRo
ZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KKyAqLworCisj
aWZuZGVmIENhY2hlZFN0eWxlU2hlZXRDbGllbnRfaAorI2RlZmluZSBDYWNoZWRTdHlsZVNoZWV0
Q2xpZW50X2gKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWNoZWRDU1NT
dHlsZVNoZWV0OworY2xhc3MgVVJMOworCitjbGFzcyBDYWNoZWRTdHlsZVNoZWV0Q2xpZW50IDog
cHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DYWNo
ZWRTdHlsZVNoZWV0Q2xpZW50KCkgeyB9CisgICAgc3RhdGljIENhY2hlZFJlc291cmNlQ2xpZW50
VHlwZSBleHBlY3RlZFR5cGUoKSB7IHJldHVybiBTdHlsZVNoZWV0VHlwZTsgfQorICAgIENhY2hl
ZFJlc291cmNlQ2xpZW50VHlwZSByZXNvdXJjZUNsaWVudFR5cGUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBleHBlY3RlZFR5cGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRDU1NTdHlsZVNo
ZWV0KGNvbnN0IFN0cmluZyYgLyogaHJlZiAqLywgY29uc3QgVVJMJiAvKiBiYXNlVVJMICovLCBj
b25zdCBTdHJpbmcmIC8qIGNoYXJzZXQgKi8sIGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQqKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0WFNMU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIC8qIGhy
ZWYgKi8sIGNvbnN0IFVSTCYgLyogYmFzZVVSTCAqLywgY29uc3QgU3RyaW5nJiAvKiBzaGVldCAq
LykgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDYWNoZWRT
dHlsZVNoZWV0Q2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRj
aC9DYWNoZWRUZXh0VHJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hl
ZFRleHRUcmFjay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTVjYjRhZTgyNGEzMDM4ODU2NThiYjg2OTcwZmVl
Nzg4ZTlkOTRmMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRj
aC9DYWNoZWRUZXh0VHJhY2suY3BwCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpbmNsdWRlICJD
YWNoZWRUZXh0VHJhY2suaCIKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKKyNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIlRl
eHRSZXNvdXJjZURlY29kZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDYWNoZWRUZXh0
VHJhY2s6OkNhY2hlZFRleHRUcmFjayhjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVx
dWVzdCwgU2Vzc2lvbklEIHNlc3Npb25JRCkKKyAgICA6IENhY2hlZFJlc291cmNlKHJlc291cmNl
UmVxdWVzdCwgVGV4dFRyYWNrUmVzb3VyY2UsIHNlc3Npb25JRCkKK3sKK30KKwordm9pZCBDYWNo
ZWRUZXh0VHJhY2s6OnVwZGF0ZURhdGEoU2hhcmVkQnVmZmVyKiBkYXRhKQoreworICAgIEFTU0VS
VChkYXRhQnVmZmVyaW5nUG9saWN5KCkgPT0gQnVmZmVyRGF0YSk7CisgICAgbV9kYXRhID0gZGF0
YTsKKyAgICBzZXRFbmNvZGVkU2l6ZShkYXRhID8gZGF0YS0+c2l6ZSgpIDogMCk7CisKKyAgICBD
YWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRSZXNvdXJjZUNsaWVudD4gd2Fsa2VyKG1f
Y2xpZW50cyk7CisgICAgd2hpbGUgKENhY2hlZFJlc291cmNlQ2xpZW50KiBjbGllbnQgPSB3YWxr
ZXIubmV4dCgpKQorICAgICAgICBjbGllbnQtPmRlcHJlY2F0ZWREaWRSZWNlaXZlQ2FjaGVkUmVz
b3VyY2UodGhpcyk7Cit9CisKK3ZvaWQgQ2FjaGVkVGV4dFRyYWNrOjphZGREYXRhQnVmZmVyKFNo
YXJlZEJ1ZmZlciYgZGF0YSkKK3sKKyAgICB1cGRhdGVEYXRhKCZkYXRhKTsKKyAgICBDYWNoZWRS
ZXNvdXJjZTo6YWRkRGF0YUJ1ZmZlcihkYXRhKTsKK30KKwordm9pZCBDYWNoZWRUZXh0VHJhY2s6
OmZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKiBkYXRhKQoreworICAgIHVwZGF0ZURhdGEoZGF0
YSk7CisgICAgQ2FjaGVkUmVzb3VyY2U6OmZpbmlzaExvYWRpbmcoZGF0YSk7Cit9CisKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkVGV4
dFRyYWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkVGV4dFRyYWNrLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZjRlNTM0ZDM1MGNhZWQzZmE2M2NhMDkzMGZkODJiZWFmZTI2MGEwNgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRUZXh0VHJh
Y2suaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDYWNoZWRUZXh0VHJh
Y2tfaAorI2RlZmluZSBDYWNoZWRUZXh0VHJhY2tfaAorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJUZXh0RmxhZ3MuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWNoZWRUZXh0VHJhY2sgZmluYWwgOiBw
dWJsaWMgQ2FjaGVkUmVzb3VyY2UgeworcHVibGljOgorICAgIENhY2hlZFRleHRUcmFjayhjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBTZXNzaW9uSUQpOworCitwcml2YXRlOgorICAgIGJvb2wgbWF5
VHJ5UmVwbGFjZUVuY29kZWREYXRhKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZvaWQgYWRkRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXImKSBvdmVycmlkZTsKKyAgICB2b2lk
IGZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHVwZGF0
ZURhdGEoU2hhcmVkQnVmZmVyKik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FDSEVEX1JFU09VUkNFKENhY2hlZFRleHRUcmFjaywgQ2Fj
aGVkUmVzb3VyY2U6OlRleHRUcmFja1Jlc291cmNlKQorCisjZW5kaWYgLy8gRU5BQkxFKFZJREVP
X1RSQUNLKQorCisjZW5kaWYgLy8gQ2FjaGVkVGV4dFRyYWNrX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
YmMxNGZmZjI2MDc4YzhkMjliNjhkMjJlOTI1ODBiNDVkNTNiMTQ5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwCkBA
IC0wLDAgKzEsOTEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtu
b2xsQG1waS1oZC5tcGcuZGUpCisgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciAo
bXVlbGxlckBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwMiBXYWxkbyBCYXN0aWFuIChi
YXN0aWFuQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNh
bS53ZWluaWdAZ21haWwuY29tKQorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICAgVGhpcyBjbGFz
cyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBz
dHlsZSBzaGVldHMgYW5kIGh0bWwKKyAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1l
bW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJDYWNoZWRYU0xTdHlsZVNoZWV0LmgiCisKKyNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZUNsaWVudFdhbGtlci5oIgorI2luY2x1ZGUgIkNhY2hlZFN0eWxlU2hlZXRDbGllbnQuaCIK
KyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVy
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShYU0xUKQorCitDYWNoZWRY
U0xTdHlsZVNoZWV0OjpDYWNoZWRYU0xTdHlsZVNoZWV0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVzb3VyY2VSZXF1ZXN0LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQorICAgIDogQ2FjaGVkUmVzb3Vy
Y2UocmVzb3VyY2VSZXF1ZXN0LCBYU0xTdHlsZVNoZWV0LCBzZXNzaW9uSUQpCisgICAgLCBtX2Rl
Y29kZXIoVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L3hzbCIpKQoreworICAgIC8v
IEl0J3MgWE1MIHdlIHdhbnQuCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFjY2VwdCBtb3Jl
IGdlbmVyYWwgeG1sIGZvcm1hdHMgKi8qK3htbCwgaW1hZ2Uvc3ZnK3htbCBmb3IgZXhhbXBsZS4K
KyAgICBzZXRBY2NlcHQoInRleHQveG1sLCBhcHBsaWNhdGlvbi94bWwsIGFwcGxpY2F0aW9uL3ho
dG1sK3htbCwgdGV4dC94c2wsIGFwcGxpY2F0aW9uL3Jzcyt4bWwsIGFwcGxpY2F0aW9uL2F0b20r
eG1sIik7Cit9CisKK0NhY2hlZFhTTFN0eWxlU2hlZXQ6On5DYWNoZWRYU0xTdHlsZVNoZWV0KCkK
K3sKK30KKwordm9pZCBDYWNoZWRYU0xTdHlsZVNoZWV0OjpkaWRBZGRDbGllbnQoQ2FjaGVkUmVz
b3VyY2VDbGllbnQqIGMpCit7ICAKKyAgICBBU1NFUlQoYy0+cmVzb3VyY2VDbGllbnRUeXBlKCkg
PT0gQ2FjaGVkU3R5bGVTaGVldENsaWVudDo6ZXhwZWN0ZWRUeXBlKCkpOworICAgIGlmICghaXNM
b2FkaW5nKCkpCisgICAgICAgIHN0YXRpY19jYXN0PENhY2hlZFN0eWxlU2hlZXRDbGllbnQqPihj
KS0+c2V0WFNMU3R5bGVTaGVldChtX3Jlc291cmNlUmVxdWVzdC51cmwoKSwgbV9yZXNwb25zZS51
cmwoKSwgbV9zaGVldCk7Cit9CisKK3ZvaWQgQ2FjaGVkWFNMU3R5bGVTaGVldDo6c2V0RW5jb2Rp
bmcoY29uc3QgU3RyaW5nJiBjaHMpCit7CisgICAgbV9kZWNvZGVyLT5zZXRFbmNvZGluZyhjaHMs
IFRleHRSZXNvdXJjZURlY29kZXI6OkVuY29kaW5nRnJvbUhUVFBIZWFkZXIpOworfQorCitTdHJp
bmcgQ2FjaGVkWFNMU3R5bGVTaGVldDo6ZW5jb2RpbmcoKSBjb25zdAoreworICAgIHJldHVybiBt
X2RlY29kZXItPmVuY29kaW5nKCkubmFtZSgpOworfQorCit2b2lkIENhY2hlZFhTTFN0eWxlU2hl
ZXQ6OmZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKiBkYXRhKQoreworICAgIG1fZGF0YSA9IGRh
dGE7CisgICAgc2V0RW5jb2RlZFNpemUoZGF0YSA/IGRhdGEtPnNpemUoKSA6IDApOworICAgIGlm
IChkYXRhKQorICAgICAgICBtX3NoZWV0ID0gbV9kZWNvZGVyLT5kZWNvZGVBbmRGbHVzaChkYXRh
LT5kYXRhKCksIGVuY29kZWRTaXplKCkpOworICAgIHNldExvYWRpbmcoZmFsc2UpOworICAgIGNo
ZWNrTm90aWZ5KCk7Cit9CisKK3ZvaWQgQ2FjaGVkWFNMU3R5bGVTaGVldDo6Y2hlY2tOb3RpZnko
KQoreworICAgIGlmIChpc0xvYWRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIENh
Y2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyPENhY2hlZFN0eWxlU2hlZXRDbGllbnQ+IHcobV9jbGll
bnRzKTsKKyAgICB3aGlsZSAoQ2FjaGVkU3R5bGVTaGVldENsaWVudCogYyA9IHcubmV4dCgpKQor
ICAgICAgICBjLT5zZXRYU0xTdHlsZVNoZWV0KG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLCBtX3Jl
c3BvbnNlLnVybCgpLCBtX3NoZWV0KTsKK30KKworI2VuZGlmCisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRYU0xTdHlsZVNoZWV0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkWFNMU3R5bGVTaGVldC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhl
Y2ZmNDVlZjRkZjFmMTkxN2JiOGM0OTQ1ZmYyZmE5ZDY2OGY1NmQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkWFNMU3R5bGVTaGVldC5oCkBAIC0w
LDAgKzEsNjMgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xs
QG1waS1oZC5tcGcuZGUpCisgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVl
bGxlckBrZGUub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0u
d2VpbmlnQGdtYWlsLmNvbSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgIFRoaXMgY2xhc3Mg
cHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5
bGUgc2hlZXRzIGFuZCBodG1sCisgICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1v
cnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCisqLworCisjaWZuZGVmIENhY2hlZFhTTFN0eWxl
U2hlZXRfaAorI2RlZmluZSBDYWNoZWRYU0xTdHlsZVNoZWV0X2gKKworI2lmIEVOQUJMRShYU0xU
KQorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyOworCitjbGFzcyBDYWNoZWRYU0xTdHlsZVNoZWV0
IGZpbmFsIDogcHVibGljIENhY2hlZFJlc291cmNlIHsKK3B1YmxpYzoKKyAgICBDYWNoZWRYU0xT
dHlsZVNoZWV0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFNlc3Npb25JRCk7CisgICAgdmlydHVh
bCB+Q2FjaGVkWFNMU3R5bGVTaGVldCgpOworCisgICAgY29uc3QgU3RyaW5nJiBzaGVldCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2hlZXQ7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGNoZWNrTm90aWZ5
KCkgb3ZlcnJpZGU7CisgICAgYm9vbCBtYXlUcnlSZXBsYWNlRW5jb2RlZERhdGEoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBkaWRBZGRDbGllbnQoQ2FjaGVkUmVz
b3VyY2VDbGllbnQqKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldEVuY29kaW5nKGNvbnN0IFN0cmlu
ZyYpIG92ZXJyaWRlOworICAgIFN0cmluZyBlbmNvZGluZygpIGNvbnN0IG92ZXJyaWRlOworICAg
IGNvbnN0IFRleHRSZXNvdXJjZURlY29kZXIqIHRleHRSZXNvdXJjZURlY29kZXIoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX2RlY29kZXIuZ2V0KCk7IH0KKyAgICB2b2lkIGZpbmlzaExvYWRp
bmcoU2hhcmVkQnVmZmVyKikgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgbV9zaGVldDsKKyAgICBS
ZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBQ0hFRF9SRVNPVVJDRShDYWNo
ZWRYU0xTdHlsZVNoZWV0LCBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldCkKKworI2VuZGlm
IC8vIEVOQUJMRShYU0xUKQorCisjZW5kaWYgLy8gQ2FjaGVkWFNMU3R5bGVTaGVldF9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvTWVtb3J5Q2FjaGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL01lbW9yeUNhY2hlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42OTM1
MDFlNGIyOWY2YjgyOWE2MjUxOGE4NWQ4NTBiMWVmMDQ2ZGZjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL01lbW9yeUNhY2hlLmNwcApAQCAtMCwwICsxLDgw
MCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhk
Lm1wZy5kZSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtk
ZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2Rl
Lm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJNZW1vcnlDYWNoZS5oIgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNs
dWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlQ2xpZW50LmgiCisjaW5j
bHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5o
IgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNs
dWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVk
ZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUHVibGljU3VmZml4
LmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiV29ya2VyR2xvYmFsU2Nv
cGUuaCIKKyNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgorI2luY2x1ZGUgIldvcmtlclRo
cmVhZC5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBpbnQg
Y0RlZmF1bHRDYWNoZUNhcGFjaXR5ID0gODE5MiAqIDEwMjQ7CitzdGF0aWMgY29uc3QgZG91Ymxl
IGNNaW5EZWxheUJlZm9yZUxpdmVEZWNvZGVkUHJ1bmUgPSAxOyAvLyBTZWNvbmRzLgorc3RhdGlj
IGNvbnN0IGZsb2F0IGNUYXJnZXRQcnVuZVBlcmNlbnRhZ2UgPSAuOTVmOyAvLyBQZXJjZW50YWdl
IG9mIGNhcGFjaXR5IHRvd2FyZCB3aGljaCB3ZSBwcnVuZSwgdG8gYXZvaWQgaW1tZWRpYXRlbHkg
cHJ1bmluZyBhZ2Fpbi4KK3N0YXRpYyBjb25zdCBhdXRvIGRlZmF1bHREZWNvZGVkRGF0YURlbGV0
aW9uSW50ZXJ2YWwgPSBzdGQ6OmNocm9ubzo6c2Vjb25kcyB7IDAgfTsKKworTWVtb3J5Q2FjaGUm
IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVh
ZCgpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q2FjaGU+IG1lbW9yeUNhY2hl
OworICAgIHJldHVybiBtZW1vcnlDYWNoZTsKK30KKworTWVtb3J5Q2FjaGU6Ok1lbW9yeUNhY2hl
KCkKKyAgICA6IG1fZGlzYWJsZWQoZmFsc2UpCisgICAgLCBtX2luUHJ1bmVSZXNvdXJjZXMoZmFs
c2UpCisgICAgLCBtX2NhcGFjaXR5KGNEZWZhdWx0Q2FjaGVDYXBhY2l0eSkKKyAgICAsIG1fbWlu
RGVhZENhcGFjaXR5KDApCisgICAgLCBtX21heERlYWRDYXBhY2l0eShjRGVmYXVsdENhY2hlQ2Fw
YWNpdHkpCisgICAgLCBtX2RlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwoZGVmYXVsdERl
Y29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCkKKyAgICAsIG1fbGl2ZVNpemUoMCkKKyAgICAsIG1f
ZGVhZFNpemUoMCkKKyAgICAsIG1fcHJ1bmVUaW1lcigqdGhpcywgJk1lbW9yeUNhY2hlOjpwcnVu
ZSkKK3sKK30KKworYXV0byBNZW1vcnlDYWNoZTo6c2Vzc2lvblJlc291cmNlTWFwKFNlc3Npb25J
RCBzZXNzaW9uSUQpIGNvbnN0IC0+IENhY2hlZFJlc291cmNlTWFwKgoreworICAgIEFTU0VSVChz
ZXNzaW9uSUQuaXNWYWxpZCgpKTsKKyAgICByZXR1cm4gbV9zZXNzaW9uUmVzb3VyY2VzLmdldChz
ZXNzaW9uSUQpOworfQorCithdXRvIE1lbW9yeUNhY2hlOjplbnN1cmVTZXNzaW9uUmVzb3VyY2VN
YXAoU2Vzc2lvbklEIHNlc3Npb25JRCkgLT4gQ2FjaGVkUmVzb3VyY2VNYXAmCit7CisgICAgQVNT
RVJUKHNlc3Npb25JRC5pc1ZhbGlkKCkpOworICAgIGF1dG8mIG1hcCA9IG1fc2Vzc2lvblJlc291
cmNlcy5hZGQoc2Vzc2lvbklELCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgaWYgKCFt
YXApCisgICAgICAgIG1hcCA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FjaGVkUmVzb3VyY2VNYXA+KCk7
CisgICAgcmV0dXJuICptYXA7Cit9CisKK1VSTCBNZW1vcnlDYWNoZTo6cmVtb3ZlRnJhZ21lbnRJ
ZGVudGlmaWVySWZOZWVkZWQoY29uc3QgVVJMJiBvcmlnaW5hbFVSTCkKK3sKKyAgICBpZiAoIW9y
aWdpbmFsVVJMLmhhc0ZyYWdtZW50SWRlbnRpZmllcigpKQorICAgICAgICByZXR1cm4gb3JpZ2lu
YWxVUkw7CisgICAgLy8gU3RyaXAgYXdheSBmcmFnbWVudCBpZGVudGlmaWVyIGZyb20gSFRUUCBV
UkxzLgorICAgIC8vIERhdGEgVVJMcyBtdXN0IGJlIHVubW9kaWZpZWQuIEZvciBmaWxlIGFuZCBj
dXN0b20gVVJMcyBjbGllbnRzIG1heSBleHBlY3QgcmVzb3VyY2VzIAorICAgIC8vIHRvIGJlIHVu
aXF1ZSBldmVuIHdoZW4gdGhleSBkaWZmZXIgYnkgdGhlIGZyYWdtZW50IGlkZW50aWZpZXIgb25s
eS4KKyAgICBpZiAoIW9yaWdpbmFsVVJMLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKKyAgICAg
ICAgcmV0dXJuIG9yaWdpbmFsVVJMOworICAgIFVSTCB1cmwgPSBvcmlnaW5hbFVSTDsKKyAgICB1
cmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CisgICAgcmV0dXJuIHVybDsKK30KKworYm9v
bCBNZW1vcnlDYWNoZTo6YWRkKENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkKK3sKKyAgICBpZiAo
ZGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKFdURjo6aXNN
YWluVGhyZWFkKCkpOworCisjaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKKyAgICBhdXRv
IGtleSA9IHN0ZDo6bWFrZV9wYWlyKHJlc291cmNlLnVybCgpLCByZXNvdXJjZS5jYWNoZVBhcnRp
dGlvbigpKTsKKyNlbHNlCisgICAgYXV0byYga2V5ID0gcmVzb3VyY2UudXJsKCk7CisjZW5kaWYK
KyAgICBlbnN1cmVTZXNzaW9uUmVzb3VyY2VNYXAocmVzb3VyY2Uuc2Vzc2lvbklEKCkpLnNldChr
ZXksICZyZXNvdXJjZSk7CisgICAgcmVzb3VyY2Uuc2V0SW5DYWNoZSh0cnVlKTsKKyAgICAKKyAg
ICByZXNvdXJjZUFjY2Vzc2VkKHJlc291cmNlKTsKKyAgICAKKyAgICBMT0coUmVzb3VyY2VMb2Fk
aW5nLCAiTWVtb3J5Q2FjaGU6OmFkZCBBZGRlZCAnJXMnLCByZXNvdXJjZSAlcFxuIiwgcmVzb3Vy
Y2UudXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpLCAmcmVzb3VyY2UpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIE1lbW9yeUNhY2hlOjpyZXZhbGlkYXRpb25TdWNjZWVkZWQoQ2Fj
aGVkUmVzb3VyY2UmIHJldmFsaWRhdGluZ1Jlc291cmNlLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKK3sKKyAgICBBU1NFUlQocmV2YWxpZGF0aW5nUmVzb3VyY2UucmVzb3VyY2VU
b1JldmFsaWRhdGUoKSk7CisgICAgQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlID0gKnJldmFsaWRh
dGluZ1Jlc291cmNlLnJlc291cmNlVG9SZXZhbGlkYXRlKCk7CisgICAgQVNTRVJUKCFyZXNvdXJj
ZS5pbkNhY2hlKCkpOworICAgIEFTU0VSVChyZXNvdXJjZS5pc0xvYWRlZCgpKTsKKworICAgIC8v
IENhbGxpbmcgcmVtb3ZlKCkgY2FuIHBvdGVudGlhbGx5IGRlbGV0ZSByZXZhbGlkYXRpbmdSZXNv
dXJjZSwgd2hpY2ggd2UgdXNlCisgICAgLy8gYmVsb3cuIFRoaXMgbXVzdG4ndCBiZSB0aGUgY2Fz
ZSBzaW5jZSByZXZhbGlkYXRpb24gbWVhbnMgaXQgaXMgbG9hZGVkCisgICAgLy8gYW5kIHNvIGNh
bkRlbGV0ZSgpIGlzIGZhbHNlLgorICAgIEFTU0VSVCghcmV2YWxpZGF0aW5nUmVzb3VyY2UuY2Fu
RGVsZXRlKCkpOworCisgICAgcmVtb3ZlKHJldmFsaWRhdGluZ1Jlc291cmNlKTsKKworICAgIGF1
dG8mIHJlc291cmNlcyA9IGVuc3VyZVNlc3Npb25SZXNvdXJjZU1hcChyZXNvdXJjZS5zZXNzaW9u
SUQoKSk7CisjaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKKyAgICBhdXRvIGtleSA9IHN0
ZDo6bWFrZV9wYWlyKHJlc291cmNlLnVybCgpLCByZXNvdXJjZS5jYWNoZVBhcnRpdGlvbigpKTsK
KyNlbHNlCisgICAgYXV0byYga2V5ID0gcmVzb3VyY2UudXJsKCk7CisjZW5kaWYKKyAgICBBU1NF
UlQoIXJlc291cmNlcy5nZXQoa2V5KSk7CisgICAgcmVzb3VyY2VzLnNldChrZXksICZyZXNvdXJj
ZSk7CisgICAgcmVzb3VyY2Uuc2V0SW5DYWNoZSh0cnVlKTsKKyAgICByZXNvdXJjZS51cGRhdGVS
ZXNwb25zZUFmdGVyUmV2YWxpZGF0aW9uKHJlc3BvbnNlKTsKKyAgICBpbnNlcnRJbkxSVUxpc3Qo
cmVzb3VyY2UpOworICAgIGludCBkZWx0YSA9IHJlc291cmNlLnNpemUoKTsKKyAgICBpZiAocmVz
b3VyY2UuZGVjb2RlZFNpemUoKSAmJiByZXNvdXJjZS5oYXNDbGllbnRzKCkpCisgICAgICAgIGlu
c2VydEluTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KHJlc291cmNlKTsKKyAgICBpZiAoZGVsdGEp
CisgICAgICAgIGFkanVzdFNpemUocmVzb3VyY2UuaGFzQ2xpZW50cygpLCBkZWx0YSk7CisgICAg
CisgICAgcmV2YWxpZGF0aW5nUmVzb3VyY2Uuc3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNv
dXJjZSgpOworICAgIEFTU0VSVCghcmV2YWxpZGF0aW5nUmVzb3VyY2UubV9kZWxldGVkKTsKKyAg
ICAvLyB0aGlzIGRlbGV0ZXMgdGhlIHJldmFsaWRhdGluZyByZXNvdXJjZQorICAgIHJldmFsaWRh
dGluZ1Jlc291cmNlLmNsZWFyUmVzb3VyY2VUb1JldmFsaWRhdGUoKTsKK30KKwordm9pZCBNZW1v
cnlDYWNoZTo6cmV2YWxpZGF0aW9uRmFpbGVkKENhY2hlZFJlc291cmNlJiByZXZhbGlkYXRpbmdS
ZXNvdXJjZSkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisgICAgTE9HKFJl
c291cmNlTG9hZGluZywgIlJldmFsaWRhdGlvbiBmYWlsZWQgZm9yICVwIiwgJnJldmFsaWRhdGlu
Z1Jlc291cmNlKTsKKyAgICBBU1NFUlQocmV2YWxpZGF0aW5nUmVzb3VyY2UucmVzb3VyY2VUb1Jl
dmFsaWRhdGUoKSk7CisgICAgcmV2YWxpZGF0aW5nUmVzb3VyY2UuY2xlYXJSZXNvdXJjZVRvUmV2
YWxpZGF0ZSgpOworfQorCitDYWNoZWRSZXNvdXJjZSogTWVtb3J5Q2FjaGU6OnJlc291cmNlRm9y
UmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFNlc3Npb25JRCBzZXNzaW9u
SUQpCit7CisgICAgYXV0byogcmVzb3VyY2VzID0gc2Vzc2lvblJlc291cmNlTWFwKHNlc3Npb25J
RCk7CisgICAgaWYgKCFyZXNvdXJjZXMpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJl
dHVybiByZXNvdXJjZUZvclJlcXVlc3RJbXBsKHJlcXVlc3QsICpyZXNvdXJjZXMpOworfQorCitD
YWNoZWRSZXNvdXJjZSogTWVtb3J5Q2FjaGU6OnJlc291cmNlRm9yUmVxdWVzdEltcGwoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBDYWNoZWRSZXNvdXJjZU1hcCYgcmVzb3VyY2VzKQor
eworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKyAgICBVUkwgdXJsID0gcmVtb3Zl
RnJhZ21lbnRJZGVudGlmaWVySWZOZWVkZWQocmVxdWVzdC51cmwoKSk7CisKKyNpZiBFTkFCTEUo
Q0FDSEVfUEFSVElUSU9OSU5HKQorICAgIGF1dG8ga2V5ID0gc3RkOjptYWtlX3BhaXIodXJsLCBy
ZXF1ZXN0LmNhY2hlUGFydGl0aW9uKCkpOworI2Vsc2UKKyAgICBhdXRvJiBrZXkgPSB1cmw7Cisj
ZW5kaWYKKyAgICByZXR1cm4gcmVzb3VyY2VzLmdldChrZXkpOworfQorCit1bnNpZ25lZCBNZW1v
cnlDYWNoZTo6ZGVhZENhcGFjaXR5KCkgY29uc3QgCit7CisgICAgLy8gRGVhZCByZXNvdXJjZSBj
YXBhY2l0eSBpcyB3aGF0ZXZlciBzcGFjZSBpcyBub3Qgb2NjdXBpZWQgYnkgbGl2ZSByZXNvdXJj
ZXMsIGJvdW5kZWQgYnkgYW4gaW5kZXBlbmRlbnQgbWluaW11bSBhbmQgbWF4aW11bS4KKyAgICB1
bnNpZ25lZCBjYXBhY2l0eSA9IG1fY2FwYWNpdHkgLSBzdGQ6Om1pbihtX2xpdmVTaXplLCBtX2Nh
cGFjaXR5KTsgLy8gU3RhcnQgd2l0aCBhdmFpbGFibGUgY2FwYWNpdHkuCisgICAgY2FwYWNpdHkg
PSBzdGQ6Om1heChjYXBhY2l0eSwgbV9taW5EZWFkQ2FwYWNpdHkpOyAvLyBNYWtlIHN1cmUgaXQn
cyBhYm92ZSB0aGUgbWluaW11bS4KKyAgICBjYXBhY2l0eSA9IHN0ZDo6bWluKGNhcGFjaXR5LCBt
X21heERlYWRDYXBhY2l0eSk7IC8vIE1ha2Ugc3VyZSBpdCdzIGJlbG93IHRoZSBtYXhpbXVtLgor
ICAgIHJldHVybiBjYXBhY2l0eTsKK30KKwordW5zaWduZWQgTWVtb3J5Q2FjaGU6OmxpdmVDYXBh
Y2l0eSgpIGNvbnN0IAoreyAKKyAgICAvLyBMaXZlIHJlc291cmNlIGNhcGFjaXR5IGlzIHdoYXRl
dmVyIGlzIGxlZnQgb3ZlciBhZnRlciBjYWxjdWxhdGluZyBkZWFkIHJlc291cmNlIGNhcGFjaXR5
LgorICAgIHJldHVybiBtX2NhcGFjaXR5IC0gZGVhZENhcGFjaXR5KCk7Cit9CisKK3N0YXRpYyBD
YWNoZWRJbWFnZUNsaWVudCYgZHVtbXlDYWNoZWRJbWFnZUNsaWVudCgpCit7CisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPENhY2hlZEltYWdlQ2xpZW50PiBjbGllbnQ7CisgICAgcmV0dXJuIGNs
aWVudDsKK30KKworYm9vbCBNZW1vcnlDYWNoZTo6YWRkSW1hZ2VUb0NhY2hlKE5hdGl2ZUltYWdl
UHRyJiYgaW1hZ2UsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGRvbWFpbkZvckNhY2hl
UGFydGl0aW9uKQoreworICAgIEFTU0VSVChpbWFnZSk7CisgICAgU2Vzc2lvbklEIHNlc3Npb25J
RCA9IFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpOworICAgIHJlbW92ZUltYWdlRnJvbUNh
Y2hlKHVybCwgZG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24pOyAvLyBSZW1vdmUgY2FjaGUgZW50cnkg
aWYgaXQgYWxyZWFkeSBleGlzdHMuCisKKyAgICBSZWZQdHI8Qml0bWFwSW1hZ2U+IGJpdG1hcElt
YWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSwgbnVsbHB0cik7CisgICAg
aWYgKCFiaXRtYXBJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3RkOjp1bmlx
dWVfcHRyPENhY2hlZEltYWdlPiBjYWNoZWRJbWFnZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FjaGVk
SW1hZ2U+KHVybCwgYml0bWFwSW1hZ2UuZ2V0KCksIENhY2hlZEltYWdlOjpNYW51YWxseUNhY2hl
ZCwgc2Vzc2lvbklEKTsKKworICAgIGNhY2hlZEltYWdlLT5hZGRDbGllbnQoJmR1bW15Q2FjaGVk
SW1hZ2VDbGllbnQoKSk7CisgICAgY2FjaGVkSW1hZ2UtPnNldERlY29kZWRTaXplKGJpdG1hcElt
YWdlLT5kZWNvZGVkU2l6ZSgpKTsKKyNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQorICAg
IGNhY2hlZEltYWdlLT5yZXNvdXJjZVJlcXVlc3QoKS5zZXREb21haW5Gb3JDYWNoZVBhcnRpdGlv
bihkb21haW5Gb3JDYWNoZVBhcnRpdGlvbik7CisjZW5kaWYKKyAgICByZXR1cm4gYWRkKCpjYWNo
ZWRJbWFnZS5yZWxlYXNlKCkpOworfQorCit2b2lkIE1lbW9yeUNhY2hlOjpyZW1vdmVJbWFnZUZy
b21DYWNoZShjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBkb21haW5Gb3JDYWNoZVBhcnRp
dGlvbikKK3sKKyAgICBhdXRvKiByZXNvdXJjZXMgPSBzZXNzaW9uUmVzb3VyY2VNYXAoU2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOworICAgIGlmICghcmVzb3VyY2VzKQorICAgICAgICBy
ZXR1cm47CisKKyNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQorICAgIGF1dG8ga2V5ID0g
c3RkOjptYWtlX3BhaXIodXJsLCBSZXNvdXJjZVJlcXVlc3Q6OnBhcnRpdGlvbk5hbWUoZG9tYWlu
Rm9yQ2FjaGVQYXJ0aXRpb24pKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGRvbWFpbkZvckNh
Y2hlUGFydGl0aW9uKTsKKyAgICBhdXRvJiBrZXkgPSB1cmw7CisjZW5kaWYKKyAgICBDYWNoZWRS
ZXNvdXJjZSogcmVzb3VyY2UgPSByZXNvdXJjZXMtPmdldChrZXkpOworICAgIGlmICghcmVzb3Vy
Y2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEEgcmVzb3VyY2UgZXhpc3RzIGFuZCBpcyBu
b3QgYSBtYW51YWxseSBjYWNoZWQgaW1hZ2UsIHNvIGp1c3QgcmVtb3ZlIGl0LgorICAgIGlmICgh
aXM8Q2FjaGVkSW1hZ2U+KCpyZXNvdXJjZSkgfHwgIWRvd25jYXN0PENhY2hlZEltYWdlPigqcmVz
b3VyY2UpLmlzTWFudWFsbHlDYWNoZWQoKSkgeworICAgICAgICByZW1vdmUoKnJlc291cmNlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFJlbW92aW5nIHRoZSBsYXN0IGNsaWVu
dCBvZiBhIENhY2hlZEltYWdlIHR1cm5zIHRoZSByZXNvdXJjZQorICAgIC8vIGludG8gYSBkZWFk
IHJlc291cmNlIHdoaWNoIHdpbGwgZXZlbnR1YWxseSBiZSBldmljdGVkIHdoZW4KKyAgICAvLyBk
ZWFkIHJlc291cmNlcyBhcmUgcHJ1bmVkLiBUaGF0IG1pZ2h0IGJlIGltbWVkaWF0ZWx5IHNpbmNl
CisgICAgLy8gcmVtb3ZpbmcgdGhlIGxhc3QgY2xpZW50IHRyaWdnZXJzIGEgTWVtb3J5Q2FjaGU6
OnBydW5lLCBzbyB0aGUKKyAgICAvLyByZXNvdXJjZSBtYXkgYmUgZGVsZXRlZCBhZnRlciB0aGlz
IGNhbGwuCisgICAgZG93bmNhc3Q8Q2FjaGVkSW1hZ2U+KCpyZXNvdXJjZSkucmVtb3ZlQ2xpZW50
KCZkdW1teUNhY2hlZEltYWdlQ2xpZW50KCkpOworfQorCit2b2lkIE1lbW9yeUNhY2hlOjpwcnVu
ZUxpdmVSZXNvdXJjZXMoYm9vbCBzaG91bGREZXN0cm95RGVjb2RlZERhdGFGb3JBbGxMaXZlUmVz
b3VyY2VzKQoreworICAgIHVuc2lnbmVkIGNhcGFjaXR5ID0gc2hvdWxkRGVzdHJveURlY29kZWRE
YXRhRm9yQWxsTGl2ZVJlc291cmNlcyA/IDAgOiBsaXZlQ2FwYWNpdHkoKTsKKyAgICBpZiAoY2Fw
YWNpdHkgJiYgbV9saXZlU2l6ZSA8PSBjYXBhY2l0eSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
dW5zaWduZWQgdGFyZ2V0U2l6ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYXBhY2l0eSAqIGNU
YXJnZXRQcnVuZVBlcmNlbnRhZ2UpOyAvLyBDdXQgYnkgYSBwZXJjZW50YWdlIHRvIGF2b2lkIGlt
bWVkaWF0ZWx5IHBydW5pbmcgYWdhaW4uCisKKyAgICBwcnVuZUxpdmVSZXNvdXJjZXNUb1NpemUo
dGFyZ2V0U2l6ZSwgc2hvdWxkRGVzdHJveURlY29kZWREYXRhRm9yQWxsTGl2ZVJlc291cmNlcyk7
Cit9CisKK3ZvaWQgTWVtb3J5Q2FjaGU6OmZvckVhY2hSZXNvdXJjZShjb25zdCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoQ2FjaGVkUmVzb3VyY2UmKT4mIGZ1bmN0aW9uKQoreworICAgIGZvciAoYXV0byYg
dW5wcm90ZWN0ZWRMUlVMaXN0IDogbV9hbGxSZXNvdXJjZXMpIHsKKyAgICAgICAgVmVjdG9yPENh
Y2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPj4gbHJ1TGlzdDsKKyAgICAgICAgY29w
eVRvVmVjdG9yKCp1bnByb3RlY3RlZExSVUxpc3QsIGxydUxpc3QpOworICAgICAgICBmb3IgKGF1
dG8mIHJlc291cmNlIDogbHJ1TGlzdCkKKyAgICAgICAgICAgIGZ1bmN0aW9uKCpyZXNvdXJjZSk7
CisgICAgfQorfQorCit2b2lkIE1lbW9yeUNhY2hlOjpmb3JFYWNoU2Vzc2lvblJlc291cmNlKFNl
c3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAoQ2FjaGVkUmVzb3Vy
Y2UmKT4mIGZ1bmN0aW9uKQoreworICAgIGF1dG8gaXQgPSBtX3Nlc3Npb25SZXNvdXJjZXMuZmlu
ZChzZXNzaW9uSUQpOworICAgIGlmIChpdCA9PSBtX3Nlc3Npb25SZXNvdXJjZXMuZW5kKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRS
ZXNvdXJjZT4+IHJlc291cmNlc0ZvclNlc3Npb247CisgICAgY29weVZhbHVlc1RvVmVjdG9yKCpp
dC0+dmFsdWUsIHJlc291cmNlc0ZvclNlc3Npb24pOworCisgICAgZm9yIChhdXRvJiByZXNvdXJj
ZSA6IHJlc291cmNlc0ZvclNlc3Npb24pCisgICAgICAgIGZ1bmN0aW9uKCpyZXNvdXJjZSk7Cit9
CisKK3ZvaWQgTWVtb3J5Q2FjaGU6OmRlc3Ryb3lEZWNvZGVkRGF0YUZvckFsbEltYWdlcygpCit7
CisgICAgTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpLmZvckVhY2hSZXNvdXJjZShbXShDYWNoZWRS
ZXNvdXJjZSYgcmVzb3VyY2UpIHsKKyAgICAgICAgaWYgKHJlc291cmNlLmlzSW1hZ2UoKSkKKyAg
ICAgICAgICAgIHJlc291cmNlLmRlc3Ryb3lEZWNvZGVkRGF0YSgpOworICAgIH0pOworfQorCit2
b2lkIE1lbW9yeUNhY2hlOjpwcnVuZUxpdmVSZXNvdXJjZXNUb1NpemUodW5zaWduZWQgdGFyZ2V0
U2l6ZSwgYm9vbCBzaG91bGREZXN0cm95RGVjb2RlZERhdGFGb3JBbGxMaXZlUmVzb3VyY2VzKQor
eworICAgIGlmIChtX2luUHJ1bmVSZXNvdXJjZXMpCisgICAgICAgIHJldHVybjsKKyAgICBUZW1w
b3JhcnlDaGFuZ2U8Ym9vbD4gcmVlbnRyYW5jeVByb3RlY3RvcihtX2luUHJ1bmVSZXNvdXJjZXMs
IHRydWUpOworCisgICAgZG91YmxlIGN1cnJlbnRUaW1lID0gRnJhbWVWaWV3OjpjdXJyZW50UGFp
bnRUaW1lU3RhbXAoKTsKKyAgICBpZiAoIWN1cnJlbnRUaW1lKSAvLyBJbiBjYXNlIHBydW5lIGlz
IGNhbGxlZCBkaXJlY3RseSwgb3V0c2lkZSBvZiBhIEZyYW1lIHBhaW50LgorICAgICAgICBjdXJy
ZW50VGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworICAgIAorICAgIC8vIERl
c3Ryb3kgYW55IGRlY29kZWQgZGF0YSBpbiBsaXZlIG9iamVjdHMgdGhhdCB3ZSBjYW4uCisgICAg
Ly8gU3RhcnQgZnJvbSB0aGUgaGVhZCwgc2luY2UgdGhpcyBpcyB0aGUgbGVhc3QgcmVjZW50bHkg
YWNjZXNzZWQgb2YgdGhlIG9iamVjdHMuCisKKyAgICAvLyBUaGUgbGlzdCBtaWdodCBub3QgYmUg
c29ydGVkIGJ5IHRoZSBtX2xhc3REZWNvZGVkQWNjZXNzVGltZS4gVGhlIGltcGFjdAorICAgIC8v
IG9mIHRoaXMgd2Vha2VyIGludmFyaWFudCBpcyBtaW5vciBhcyB0aGUgYmVsb3cgaWYgc3RhdGVt
ZW50IHRvIGNoZWNrIHRoZQorICAgIC8vIGVsYXBzZWRUaW1lIHdpbGwgZXZhbHVhdGUgdG8gZmFs
c2UgYXMgdGhlIGN1cnJlbnRUaW1lIHdpbGwgYmUgYSBsb3QKKyAgICAvLyBncmVhdGVyIHRoYW4g
dGhlIGN1cnJlbnQtPm1fbGFzdERlY29kZWRBY2Nlc3NUaW1lLgorICAgIC8vIEZvciBtb3JlIGRl
dGFpbHMgc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAyMDkK
KyAgICBhdXRvIGl0ID0gbV9saXZlRGVjb2RlZFJlc291cmNlcy5iZWdpbigpOworICAgIHdoaWxl
IChpdCAhPSBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzLmVuZCgpKSB7CisgICAgICAgIGF1dG8qIGN1
cnJlbnQgPSAqaXQ7CisKKyAgICAgICAgLy8gSW5jcmVtZW50IHRoZSBpdGVyYXRvciBub3cgYmVj
YXVzZSB0aGUgY2FsbCB0byBkZXN0cm95RGVjb2RlZERhdGEoKSBiZWxvdworICAgICAgICAvLyBt
YXkgY2F1c2UgYSBjYWxsIHRvIExpc3RIYXNoU2V0OjpyZW1vdmUoKSBhbmQgaW52YWxpZGF0ZSB0
aGUgY3VycmVudAorICAgICAgICAvLyBpdGVyYXRvci4gTm90ZSB0aGF0IHRoaXMgaXMgc2FmZSBi
ZWNhdXNlIHVubGlrZSBpdGVyYXRpb24gb2YgbW9zdAorICAgICAgICAvLyBXVEYgSGFzaCBkYXRh
IHN0cnVjdHVyZXMsIGl0ZXJhdGlvbiBpcyBndWFyYW50ZWVkIHNhZmUgYWdhaW5zdCBtdXRhdGlv
bgorICAgICAgICAvLyBvZiB0aGUgTGlzdEhhc2hTZXQsIGV4Y2VwdCBmb3IgcmVtb3ZhbCBvZiB0
aGUgaXRlbSBjdXJyZW50bHkgcG9pbnRlZCB0bworICAgICAgICAvLyBieSBhIGdpdmVuIGl0ZXJh
dG9yLgorICAgICAgICArK2l0OworCisgICAgICAgIEFTU0VSVChjdXJyZW50LT5oYXNDbGllbnRz
KCkpOworICAgICAgICBpZiAoY3VycmVudC0+aXNMb2FkZWQoKSAmJiBjdXJyZW50LT5kZWNvZGVk
U2l6ZSgpKSB7CisgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHJlbWFpbmluZyBy
ZXNvdXJjZXMgYXJlIHRvbyBuZXcgdG8gcHJ1bmUuCisgICAgICAgICAgICBkb3VibGUgZWxhcHNl
ZFRpbWUgPSBjdXJyZW50VGltZSAtIGN1cnJlbnQtPm1fbGFzdERlY29kZWRBY2Nlc3NUaW1lOwor
ICAgICAgICAgICAgaWYgKCFzaG91bGREZXN0cm95RGVjb2RlZERhdGFGb3JBbGxMaXZlUmVzb3Vy
Y2VzICYmIGVsYXBzZWRUaW1lIDwgY01pbkRlbGF5QmVmb3JlTGl2ZURlY29kZWRQcnVuZSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIERlc3Ryb3kgb3VyIGRlY29k
ZWQgZGF0YS4gVGhpcyB3aWxsIHJlbW92ZSB1cyBmcm9tIG1fbGl2ZURlY29kZWRSZXNvdXJjZXMs
IGFuZCBwb3NzaWJseSBtb3ZlIHVzCisgICAgICAgICAgICAvLyB0byBhIGRpZmZlcmVudCBMUlUg
bGlzdCBpbiBtX2FsbFJlc291cmNlcy4KKyAgICAgICAgICAgIGN1cnJlbnQtPmRlc3Ryb3lEZWNv
ZGVkRGF0YSgpOworCisgICAgICAgICAgICBpZiAodGFyZ2V0U2l6ZSAmJiBtX2xpdmVTaXplIDw9
IHRhcmdldFNpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIE1lbW9yeUNhY2hlOjpwcnVuZURlYWRSZXNvdXJjZXMoKQoreworICAgIHVuc2ln
bmVkIGNhcGFjaXR5ID0gZGVhZENhcGFjaXR5KCk7CisgICAgaWYgKGNhcGFjaXR5ICYmIG1fZGVh
ZFNpemUgPD0gY2FwYWNpdHkpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIHRhcmdl
dFNpemUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2FwYWNpdHkgKiBjVGFyZ2V0UHJ1bmVQZXJj
ZW50YWdlKTsgLy8gQ3V0IGJ5IGEgcGVyY2VudGFnZSB0byBhdm9pZCBpbW1lZGlhdGVseSBwcnVu
aW5nIGFnYWluLgorICAgIHBydW5lRGVhZFJlc291cmNlc1RvU2l6ZSh0YXJnZXRTaXplKTsKK30K
Kwordm9pZCBNZW1vcnlDYWNoZTo6cHJ1bmVEZWFkUmVzb3VyY2VzVG9TaXplKHVuc2lnbmVkIHRh
cmdldFNpemUpCit7CisgICAgaWYgKG1faW5QcnVuZVJlc291cmNlcykKKyAgICAgICAgcmV0dXJu
OworICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiByZWVudHJhbmN5UHJvdGVjdG9yKG1faW5QcnVu
ZVJlc291cmNlcywgdHJ1ZSk7CisgCisgICAgaWYgKHRhcmdldFNpemUgJiYgbV9kZWFkU2l6ZSA8
PSB0YXJnZXRTaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGNhblNocmlua0xSVUxp
c3RzID0gdHJ1ZTsKKyAgICBmb3IgKGludCBpID0gbV9hbGxSZXNvdXJjZXMuc2l6ZSgpIC0gMTsg
aSA+PSAwOyBpLS0pIHsKKyAgICAgICAgLy8gTWFrZSBhIGNvcHkgb2YgdGhlIExSVUxpc3QgZmly
c3QgKGFuZCByZWYgdGhlIHJlc291cmNlcykgYXMgY2FsbGluZworICAgICAgICAvLyBkZXN0cm95
RGVjb2RlZERhdGEoKSBjYW4gYWx0ZXIgdGhlIExSVUxpc3QuCisgICAgICAgIFZlY3RvcjxDYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4+IGxydUxpc3Q7CisgICAgICAgIGNvcHlU
b1ZlY3RvcigqbV9hbGxSZXNvdXJjZXNbaV0sIGxydUxpc3QpOworCisgICAgICAgIC8vIEZpcnN0
IGZsdXNoIGFsbCB0aGUgZGVjb2RlZCBkYXRhIGluIHRoaXMgcXVldWUuCisgICAgICAgIC8vIFJl
bW92ZSBmcm9tIHRoZSBoZWFkLCBzaW5jZSB0aGlzIGlzIHRoZSBsZWFzdCBmcmVxdWVudGx5IGFj
Y2Vzc2VkIG9mIHRoZSBvYmplY3RzLgorICAgICAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogbHJ1
TGlzdCkgeworICAgICAgICAgICAgaWYgKCFyZXNvdXJjZS0+aW5DYWNoZSgpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoIXJlc291cmNlLT5oYXNDbGllbnRz
KCkgJiYgIXJlc291cmNlLT5pc1ByZWxvYWRlZCgpICYmIHJlc291cmNlLT5pc0xvYWRlZCgpKSB7
CisgICAgICAgICAgICAgICAgLy8gRGVzdHJveSBvdXIgZGVjb2RlZCBkYXRhLiBUaGlzIHdpbGwg
cmVtb3ZlIHVzIGZyb20gCisgICAgICAgICAgICAgICAgLy8gbV9saXZlRGVjb2RlZFJlc291cmNl
cywgYW5kIHBvc3NpYmx5IG1vdmUgdXMgdG8gYSBkaWZmZXJlbnQgCisgICAgICAgICAgICAgICAg
Ly8gTFJVIGxpc3QgaW4gbV9hbGxSZXNvdXJjZXMuCisgICAgICAgICAgICAgICAgcmVzb3VyY2Ut
PmRlc3Ryb3lEZWNvZGVkRGF0YSgpOworCisgICAgICAgICAgICAgICAgaWYgKHRhcmdldFNpemUg
JiYgbV9kZWFkU2l6ZSA8PSB0YXJnZXRTaXplKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBOb3cgZXZpY3Qgb2JqZWN0
cyBmcm9tIHRoaXMgbGlzdC4KKyAgICAgICAgLy8gUmVtb3ZlIGZyb20gdGhlIGhlYWQsIHNpbmNl
IHRoaXMgaXMgdGhlIGxlYXN0IGZyZXF1ZW50bHkgYWNjZXNzZWQgb2YgdGhlIG9iamVjdHMuCisg
ICAgICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiBscnVMaXN0KSB7CisgICAgICAgICAgICBpZiAo
IXJlc291cmNlLT5pbkNhY2hlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgIGlmICghcmVzb3VyY2UtPmhhc0NsaWVudHMoKSAmJiAhcmVzb3VyY2UtPmlzUHJlbG9h
ZGVkKCkgJiYgIXJlc291cmNlLT5pc0NhY2hlVmFsaWRhdG9yKCkpIHsKKyAgICAgICAgICAgICAg
ICByZW1vdmUoKnJlc291cmNlKTsKKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0U2l6ZSAmJiBt
X2RlYWRTaXplIDw9IHRhcmdldFNpemUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIC8vIFNocmluayB0
aGUgdmVjdG9yIGJhY2sgZG93biBzbyB3ZSBkb24ndCB3YXN0ZSB0aW1lIGluc3BlY3RpbmcKKyAg
ICAgICAgLy8gZW1wdHkgTFJVIGxpc3RzIG9uIGZ1dHVyZSBwcnVuZXMuCisgICAgICAgIGlmICgh
bV9hbGxSZXNvdXJjZXNbaV0tPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNhblNocmlua0xSVUxp
c3RzID0gZmFsc2U7CisgICAgICAgIGVsc2UgaWYgKGNhblNocmlua0xSVUxpc3RzKQorICAgICAg
ICAgICAgbV9hbGxSZXNvdXJjZXMuc2hyaW5rKGkpOworICAgIH0KK30KKwordm9pZCBNZW1vcnlD
YWNoZTo6c2V0Q2FwYWNpdGllcyh1bnNpZ25lZCBtaW5EZWFkQnl0ZXMsIHVuc2lnbmVkIG1heERl
YWRCeXRlcywgdW5zaWduZWQgdG90YWxCeXRlcykKK3sKKyAgICBBU1NFUlQobWluRGVhZEJ5dGVz
IDw9IG1heERlYWRCeXRlcyk7CisgICAgQVNTRVJUKG1heERlYWRCeXRlcyA8PSB0b3RhbEJ5dGVz
KTsKKyAgICBtX21pbkRlYWRDYXBhY2l0eSA9IG1pbkRlYWRCeXRlczsKKyAgICBtX21heERlYWRD
YXBhY2l0eSA9IG1heERlYWRCeXRlczsKKyAgICBtX2NhcGFjaXR5ID0gdG90YWxCeXRlczsKKyAg
ICBwcnVuZSgpOworfQorCit2b2lkIE1lbW9yeUNhY2hlOjpyZW1vdmUoQ2FjaGVkUmVzb3VyY2Um
IHJlc291cmNlKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKyAgICBMT0co
UmVzb3VyY2VMb2FkaW5nLCAiRXZpY3RpbmcgcmVzb3VyY2UgJXAgZm9yICclcycgZnJvbSBjYWNo
ZSIsICZyZXNvdXJjZSwgcmVzb3VyY2UudXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsK
KyAgICAvLyBUaGUgcmVzb3VyY2UgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQgYnkgc29t
ZW9uZSBvdGhlciB0aGFuIG91ciBjYWxsZXIsCisgICAgLy8gd2hvIG5lZWRlZCBhIGZyZXNoIGNv
cHkgZm9yIGEgcmVsb2FkLiBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyNDc5I2M2Pi4KKyAgICBpZiAoYXV0byogcmVzb3VyY2VzID0gc2Vzc2lvblJlc291cmNl
TWFwKHJlc291cmNlLnNlc3Npb25JRCgpKSkgeworI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05J
TkcpCisgICAgICAgIGF1dG8ga2V5ID0gc3RkOjptYWtlX3BhaXIocmVzb3VyY2UudXJsKCksIHJl
c291cmNlLmNhY2hlUGFydGl0aW9uKCkpOworI2Vsc2UKKyAgICAgICAgYXV0byYga2V5ID0gcmVz
b3VyY2UudXJsKCk7CisjZW5kaWYKKyAgICAgICAgaWYgKHJlc291cmNlLmluQ2FjaGUoKSkgewor
ICAgICAgICAgICAgLy8gUmVtb3ZlIHJlc291cmNlIGZyb20gdGhlIHJlc291cmNlIG1hcC4KKyAg
ICAgICAgICAgIHJlc291cmNlcy0+cmVtb3ZlKGtleSk7CisgICAgICAgICAgICByZXNvdXJjZS5z
ZXRJbkNhY2hlKGZhbHNlKTsKKworICAgICAgICAgICAgLy8gSWYgdGhlIHJlc291cmNlIG1hcCBp
cyBub3cgZW1wdHksIHJlbW92ZSBpdCBmcm9tIG1fc2Vzc2lvblJlc291cmNlcy4KKyAgICAgICAg
ICAgIGlmIChyZXNvdXJjZXMtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBtX3Nlc3Npb25S
ZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlLnNlc3Npb25JRCgpKTsKKworICAgICAgICAgICAgLy8g
UmVtb3ZlIGZyb20gdGhlIGFwcHJvcHJpYXRlIExSVSBsaXN0LgorICAgICAgICAgICAgcmVtb3Zl
RnJvbUxSVUxpc3QocmVzb3VyY2UpOworICAgICAgICAgICAgcmVtb3ZlRnJvbUxpdmVEZWNvZGVk
UmVzb3VyY2VzTGlzdChyZXNvdXJjZSk7CisgICAgICAgICAgICBhZGp1c3RTaXplKHJlc291cmNl
Lmhhc0NsaWVudHMoKSwgLXN0YXRpY19jYXN0PGludD4ocmVzb3VyY2Uuc2l6ZSgpKSk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgQVNTRVJUKHJlc291cmNlcy0+Z2V0KGtleSkgIT0gJnJl
c291cmNlKTsKKyAgICB9CisKKyAgICByZXNvdXJjZS5kZWxldGVJZlBvc3NpYmxlKCk7Cit9CisK
K2F1dG8gTWVtb3J5Q2FjaGU6OmxydUxpc3RGb3IoQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKSAt
PiBMUlVMaXN0JgoreworICAgIHVuc2lnbmVkIGFjY2Vzc0NvdW50ID0gc3RkOjptYXgocmVzb3Vy
Y2UuYWNjZXNzQ291bnQoKSwgMVUpOworICAgIHVuc2lnbmVkIHF1ZXVlSW5kZXggPSBXVEY6OmZh
c3RMb2cyKHJlc291cmNlLnNpemUoKSAvIGFjY2Vzc0NvdW50KTsKKyNpZm5kZWYgTkRFQlVHCisg
ICAgcmVzb3VyY2UubV9scnVJbmRleCA9IHF1ZXVlSW5kZXg7CisjZW5kaWYKKworICAgIG1fYWxs
UmVzb3VyY2VzLnJlc2VydmVDYXBhY2l0eShxdWV1ZUluZGV4ICsgMSk7CisgICAgd2hpbGUgKG1f
YWxsUmVzb3VyY2VzLnNpemUoKSA8PSBxdWV1ZUluZGV4KQorICAgICAgICBtX2FsbFJlc291cmNl
cy51bmNoZWNrZWRBcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxMUlVMaXN0PigpKTsKKyAgICByZXR1
cm4gKm1fYWxsUmVzb3VyY2VzW3F1ZXVlSW5kZXhdOworfQorCit2b2lkIE1lbW9yeUNhY2hlOjpy
ZW1vdmVGcm9tTFJVTGlzdChDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpCit7CisgICAgLy8gSWYg
d2UndmUgbmV2ZXIgYmVlbiBhY2Nlc3NlZCwgdGhlbiB3ZSdyZSBicmFuZCBuZXcgYW5kIG5vdCBp
biBhbnkgbGlzdC4KKyAgICBpZiAoIXJlc291cmNlLmFjY2Vzc0NvdW50KCkpCisgICAgICAgIHJl
dHVybjsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICB1bnNpZ25lZCBvbGRMaXN0SW5kZXgg
PSByZXNvdXJjZS5tX2xydUluZGV4OworI2VuZGlmCisKKyAgICBMUlVMaXN0JiBsaXN0ID0gbHJ1
TGlzdEZvcihyZXNvdXJjZSk7CisKKyAgICAvLyBWZXJpZnkgdGhhdCB0aGUgbGlzdCB3ZSBnb3Qg
aXMgdGhlIGxpc3Qgd2Ugd2FudC4KKyAgICBBU1NFUlQocmVzb3VyY2UubV9scnVJbmRleCA9PSBv
bGRMaXN0SW5kZXgpOworCisgICAgYm9vbCByZW1vdmVkID0gbGlzdC5yZW1vdmUoJnJlc291cmNl
KTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOworfQorCit2b2lkIE1lbW9y
eUNhY2hlOjppbnNlcnRJbkxSVUxpc3QoQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQoreworICAg
IEFTU0VSVChyZXNvdXJjZS5pbkNhY2hlKCkpOworICAgIEFTU0VSVChyZXNvdXJjZS5hY2Nlc3ND
b3VudCgpID4gMCk7CisgICAgCisgICAgYXV0byBhZGRSZXN1bHQgPSBscnVMaXN0Rm9yKHJlc291
cmNlKS5hZGQoJnJlc291cmNlKTsKKyAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVz
dWx0LmlzTmV3RW50cnkpOworfQorCit2b2lkIE1lbW9yeUNhY2hlOjpyZXNvdXJjZUFjY2Vzc2Vk
KENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkKK3sKKyAgICBBU1NFUlQocmVzb3VyY2UuaW5DYWNo
ZSgpKTsKKyAgICAKKyAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSB0byByZW1vdmUgYmVmb3JlIHdl
IGluY3JlYXNlIHRoZSBhY2Nlc3MgY291bnQsIHNpbmNlCisgICAgLy8gdGhlIHF1ZXVlIHdpbGwg
cG9zc2libHkgY2hhbmdlLgorICAgIHJlbW92ZUZyb21MUlVMaXN0KHJlc291cmNlKTsKKyAgICAK
KyAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRoZSByZXNvdXJjZSBoYXMgYmVlbiBh
Y2Nlc3NlZCwgYWRqdXN0IHRoZSBzaXplIG9mIHRoZSBjYWNoZSB0byBhY2NvdW50IGZvciBpdHMg
aW5pdGlhbCBzaXplLgorICAgIGlmICghcmVzb3VyY2UuYWNjZXNzQ291bnQoKSkKKyAgICAgICAg
YWRqdXN0U2l6ZShyZXNvdXJjZS5oYXNDbGllbnRzKCksIHJlc291cmNlLnNpemUoKSk7CisgICAg
CisgICAgLy8gQWRkIHRvIG91ciBhY2Nlc3MgY291bnQuCisgICAgcmVzb3VyY2UuaW5jcmVhc2VB
Y2Nlc3NDb3VudCgpOworICAgIAorICAgIC8vIE5vdyBpbnNlcnQgaW50byB0aGUgbmV3IHF1ZXVl
LgorICAgIGluc2VydEluTFJVTGlzdChyZXNvdXJjZSk7Cit9CisKK3ZvaWQgTWVtb3J5Q2FjaGU6
OnJlbW92ZVJlc291cmNlc1dpdGhPcmlnaW4oU2VjdXJpdHlPcmlnaW4mIG9yaWdpbikKK3sKKyNp
ZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQorICAgIFN0cmluZyBvcmlnaW5QYXJ0aXRpb24g
PSBSZXNvdXJjZVJlcXVlc3Q6OnBhcnRpdGlvbk5hbWUob3JpZ2luLmhvc3QoKSk7CisjZW5kaWYK
KworICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZSo+IHJlc291cmNlc1dpdGhPcmlnaW47CisgICAg
Zm9yIChhdXRvJiByZXNvdXJjZXMgOiBtX3Nlc3Npb25SZXNvdXJjZXMudmFsdWVzKCkpIHsKKyAg
ICAgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6ICpyZXNvdXJjZXMpIHsKKyAgICAgICAgICAgIGF1
dG8mIHJlc291cmNlID0gKmtleVZhbHVlLnZhbHVlOworI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJ
T05JTkcpCisgICAgICAgICAgICBhdXRvJiBwYXJ0aXRpb25OYW1lID0ga2V5VmFsdWUua2V5LnNl
Y29uZDsKKyAgICAgICAgICAgIGlmIChwYXJ0aXRpb25OYW1lID09IG9yaWdpblBhcnRpdGlvbikg
eworICAgICAgICAgICAgICAgIHJlc291cmNlc1dpdGhPcmlnaW4uYXBwZW5kKCZyZXNvdXJjZSk7
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAg
ICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gcmVzb3VyY2VPcmlnaW4gPSBTZWN1cml0eU9y
aWdpbjo6Y3JlYXRlKHJlc291cmNlLnVybCgpKTsKKyAgICAgICAgICAgIGlmIChyZXNvdXJjZU9y
aWdpbi0+ZXF1YWwoJm9yaWdpbikpCisgICAgICAgICAgICAgICAgcmVzb3VyY2VzV2l0aE9yaWdp
bi5hcHBlbmQoJnJlc291cmNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byog
cmVzb3VyY2UgOiByZXNvdXJjZXNXaXRoT3JpZ2luKQorICAgICAgICByZW1vdmUoKnJlc291cmNl
KTsKK30KKwordm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlUmVzb3VyY2VzV2l0aE9yaWdpbnMoU2Vz
c2lvbklEIHNlc3Npb25JRCwgY29uc3QgSGFzaFNldDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+PiYg
b3JpZ2lucykKK3sKKyAgICBhdXRvKiByZXNvdXJjZU1hcCA9IHNlc3Npb25SZXNvdXJjZU1hcChz
ZXNzaW9uSUQpOworICAgIGlmICghcmVzb3VyY2VNYXApCisgICAgICAgIHJldHVybjsKKworI2lm
IEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCisgICAgSGFzaFNldDxTdHJpbmc+IG9yaWdpblBh
cnRpdGlvbnM7CisKKyAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IG9yaWdpbnMpCisgICAgICAgIG9y
aWdpblBhcnRpdGlvbnMuYWRkKFJlc291cmNlUmVxdWVzdDo6cGFydGl0aW9uTmFtZShvcmlnaW4t
Pmhvc3QoKSkpOworI2VuZGlmCisKKyAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPiByZXNvdXJj
ZXNUb1JlbW92ZTsKKyAgICBmb3IgKGF1dG8mIGtleVZhbHVlUGFpciA6ICpyZXNvdXJjZU1hcCkg
eworICAgICAgICBhdXRvJiByZXNvdXJjZSA9ICprZXlWYWx1ZVBhaXIudmFsdWU7CisKKyNpZiBF
TkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQorICAgICAgICBhdXRvJiBwYXJ0aXRpb25OYW1lID0g
a2V5VmFsdWVQYWlyLmtleS5zZWNvbmQ7CisgICAgICAgIGlmIChvcmlnaW5QYXJ0aXRpb25zLmNv
bnRhaW5zKHBhcnRpdGlvbk5hbWUpKSB7CisgICAgICAgICAgICByZXNvdXJjZXNUb1JlbW92ZS5h
cHBlbmQoJnJlc291cmNlKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisjZW5k
aWYKKworICAgICAgICBpZiAob3JpZ2lucy5jb250YWlucyhTZWN1cml0eU9yaWdpbjo6Y3JlYXRl
KHJlc291cmNlLnVybCgpKS5wdHIoKSkpCisgICAgICAgICAgICByZXNvdXJjZXNUb1JlbW92ZS5h
cHBlbmQoJnJlc291cmNlKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogcmVz
b3VyY2VzVG9SZW1vdmUpCisgICAgICAgIHJlbW92ZSgqcmVzb3VyY2UpOworfQorCit2b2lkIE1l
bW9yeUNhY2hlOjpnZXRPcmlnaW5zV2l0aENhY2hlKFNlY3VyaXR5T3JpZ2luU2V0JiBvcmlnaW5z
KQoreworI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPFN0cmluZz4gaHR0cFN0cmluZygiaHR0cCIpOworI2VuZGlmCisgICAgZm9yIChhdXRv
JiByZXNvdXJjZXMgOiBtX3Nlc3Npb25SZXNvdXJjZXMudmFsdWVzKCkpIHsKKyAgICAgICAgZm9y
IChhdXRvJiBrZXlWYWx1ZSA6ICpyZXNvdXJjZXMpIHsKKyAgICAgICAgICAgIGF1dG8mIHJlc291
cmNlID0gKmtleVZhbHVlLnZhbHVlOworI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCisg
ICAgICAgICAgICBhdXRvJiBwYXJ0aXRpb25OYW1lID0ga2V5VmFsdWUua2V5LnNlY29uZDsKKyAg
ICAgICAgICAgIGlmICghcGFydGl0aW9uTmFtZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
b3JpZ2lucy5hZGQoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShodHRwU3RyaW5nLCBwYXJ0aXRpb25O
YW1lLCAwKSk7CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIG9yaWdpbnMu
YWRkKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUocmVzb3VyY2UudXJsKCkpKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKworSGFzaFNldDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+PiBNZW1vcnlDYWNoZTo6
b3JpZ2luc1dpdGhDYWNoZShTZXNzaW9uSUQgc2Vzc2lvbklEKSBjb25zdAoreworICAgIEhhc2hT
ZXQ8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4gb3JpZ2luczsKKworICAgIGF1dG8gaXQgPSBtX3Nl
c3Npb25SZXNvdXJjZXMuZmluZChzZXNzaW9uSUQpOworICAgIGlmIChpdCAhPSBtX3Nlc3Npb25S
ZXNvdXJjZXMuZW5kKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6ICppdC0+dmFs
dWUpIHsKKyAgICAgICAgICAgIGF1dG8mIHJlc291cmNlID0gKmtleVZhbHVlLnZhbHVlOworI2lm
IEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCisgICAgICAgICAgICBhdXRvJiBwYXJ0aXRpb25O
YW1lID0ga2V5VmFsdWUua2V5LnNlY29uZDsKKyAgICAgICAgICAgIGlmICghcGFydGl0aW9uTmFt
ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgb3JpZ2lucy5hZGQoU2VjdXJpdHlPcmlnaW46
OmNyZWF0ZSgiaHR0cCIsIHBhcnRpdGlvbk5hbWUsIDApKTsKKyAgICAgICAgICAgIGVsc2UKKyNl
bmRpZgorICAgICAgICAgICAgb3JpZ2lucy5hZGQoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShyZXNv
dXJjZS51cmwoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG9yaWdpbnM7Cit9
CisKK3ZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZUZyb21MaXZlRGVjb2RlZFJlc291cmNlc0xpc3Qo
Q2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQoreworICAgIG1fbGl2ZURlY29kZWRSZXNvdXJjZXMu
cmVtb3ZlKCZyZXNvdXJjZSk7Cit9CisKK3ZvaWQgTWVtb3J5Q2FjaGU6Omluc2VydEluTGl2ZURl
Y29kZWRSZXNvdXJjZXNMaXN0KENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkKK3sKKyAgICAvLyBN
YWtlIHN1cmUgd2UgYXJlbid0IGluIHRoZSBsaXN0IGFscmVhZHkuCisgICAgQVNTRVJUKCFtX2xp
dmVEZWNvZGVkUmVzb3VyY2VzLmNvbnRhaW5zKCZyZXNvdXJjZSkpOworICAgIG1fbGl2ZURlY29k
ZWRSZXNvdXJjZXMuYWRkKCZyZXNvdXJjZSk7Cit9CisKK3ZvaWQgTWVtb3J5Q2FjaGU6OmFkZFRv
TGl2ZVJlc291cmNlc1NpemUoQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQoreworICAgIG1fbGl2
ZVNpemUgKz0gcmVzb3VyY2Uuc2l6ZSgpOworICAgIG1fZGVhZFNpemUgLT0gcmVzb3VyY2Uuc2l6
ZSgpOworfQorCit2b2lkIE1lbW9yeUNhY2hlOjpyZW1vdmVGcm9tTGl2ZVJlc291cmNlc1NpemUo
Q2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQoreworICAgIG1fbGl2ZVNpemUgLT0gcmVzb3VyY2Uu
c2l6ZSgpOworICAgIG1fZGVhZFNpemUgKz0gcmVzb3VyY2Uuc2l6ZSgpOworfQorCit2b2lkIE1l
bW9yeUNhY2hlOjphZGp1c3RTaXplKGJvb2wgbGl2ZSwgaW50IGRlbHRhKQoreworICAgIGlmIChs
aXZlKSB7CisgICAgICAgIEFTU0VSVChkZWx0YSA+PSAwIHx8ICgoaW50KW1fbGl2ZVNpemUgKyBk
ZWx0YSA+PSAwKSk7CisgICAgICAgIG1fbGl2ZVNpemUgKz0gZGVsdGE7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgQVNTRVJUKGRlbHRhID49IDAgfHwgKChpbnQpbV9kZWFkU2l6ZSArIGRlbHRhID49
IDApKTsKKyAgICAgICAgbV9kZWFkU2l6ZSArPSBkZWx0YTsKKyAgICB9Cit9CisKK3ZvaWQgTWVt
b3J5Q2FjaGU6OnJlbW92ZVJlcXVlc3RGcm9tU2Vzc2lvbkNhY2hlcyhTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAg
aWYgKGlzPFdvcmtlckdsb2JhbFNjb3BlPihjb250ZXh0KSkgeworICAgICAgICBkb3duY2FzdDxX
b3JrZXJHbG9iYWxTY29wZT4oY29udGV4dCkudGhyZWFkKCkud29ya2VyTG9hZGVyUHJveHkoKS5w
b3N0VGFza1RvTG9hZGVyKFtyZXF1ZXN0ID0gcmVxdWVzdC5pc29sYXRlZENvcHkoKV0gKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgIE1lbW9yeUNhY2hlOjpy
ZW1vdmVSZXF1ZXN0RnJvbVNlc3Npb25DYWNoZXMoY29udGV4dCwgcmVxdWVzdCk7CisgICAgICAg
IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byYgbWVtb3J5Q2FjaGUgPSBN
ZW1vcnlDYWNoZTo6c2luZ2xldG9uKCk7CisgICAgZm9yIChhdXRvJiByZXNvdXJjZXMgOiBtZW1v
cnlDYWNoZS5tX3Nlc3Npb25SZXNvdXJjZXMpIHsKKyAgICAgICAgaWYgKENhY2hlZFJlc291cmNl
KiByZXNvdXJjZSA9IG1lbW9yeUNhY2hlLnJlc291cmNlRm9yUmVxdWVzdEltcGwocmVxdWVzdCwg
KnJlc291cmNlcy52YWx1ZSkpCisgICAgICAgICAgICBtZW1vcnlDYWNoZS5yZW1vdmUoKnJlc291
cmNlKTsKKyAgICB9Cit9CisKK3ZvaWQgTWVtb3J5Q2FjaGU6OlR5cGVTdGF0aXN0aWM6OmFkZFJl
c291cmNlKENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkKK3sKKyAgICBjb3VudCsrOworICAgIHNp
emUgKz0gcmVzb3VyY2Uuc2l6ZSgpOworICAgIGxpdmVTaXplICs9IHJlc291cmNlLmhhc0NsaWVu
dHMoKSA/IHJlc291cmNlLnNpemUoKSA6IDA7CisgICAgZGVjb2RlZFNpemUgKz0gcmVzb3VyY2Uu
ZGVjb2RlZFNpemUoKTsKK30KKworTWVtb3J5Q2FjaGU6OlN0YXRpc3RpY3MgTWVtb3J5Q2FjaGU6
OmdldFN0YXRpc3RpY3MoKQoreworICAgIFN0YXRpc3RpY3Mgc3RhdHM7CisKKyAgICBmb3IgKGF1
dG8mIHJlc291cmNlcyA6IG1fc2Vzc2lvblJlc291cmNlcy52YWx1ZXMoKSkgeworICAgICAgICBm
b3IgKGF1dG8qIHJlc291cmNlIDogcmVzb3VyY2VzLT52YWx1ZXMoKSkgeworICAgICAgICAgICAg
c3dpdGNoIChyZXNvdXJjZS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpJbWFnZVJlc291cmNlOgorICAgICAgICAgICAgICAgIHN0YXRzLmltYWdlcy5hZGRSZXNv
dXJjZSgqcmVzb3VyY2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKKyAgICAgICAgICAgICAgICBzdGF0cy5j
c3NTdHlsZVNoZWV0cy5hZGRSZXNvdXJjZSgqcmVzb3VyY2UpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OgorICAgICAgICAg
ICAgICAgIHN0YXRzLnNjcmlwdHMuYWRkUmVzb3VyY2UoKnJlc291cmNlKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICAgICAgICAgIGNhc2UgQ2FjaGVkUmVz
b3VyY2U6OlhTTFN0eWxlU2hlZXQ6CisgICAgICAgICAgICAgICAgc3RhdHMueHNsU3R5bGVTaGVl
dHMuYWRkUmVzb3VyY2UoKnJlc291cmNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRp
ZgorI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgICAgICAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpTVkdGb250UmVzb3VyY2U6CisjZW5kaWYKKyAgICAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3Vy
Y2U6OkZvbnRSZXNvdXJjZToKKyAgICAgICAgICAgICAgICBzdGF0cy5mb250cy5hZGRSZXNvdXJj
ZSgqcmVzb3VyY2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gc3RhdHM7Cit9CisKK3ZvaWQgTWVtb3J5Q2FjaGU6OnNldERpc2FibGVk
KGJvb2wgZGlzYWJsZWQpCit7CisgICAgbV9kaXNhYmxlZCA9IGRpc2FibGVkOworICAgIGlmICgh
bV9kaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2hpbGUgKCFtX3Nlc3Npb25SZXNv
dXJjZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8mIHJlc291cmNlcyA9ICptX3Nlc3Npb25S
ZXNvdXJjZXMuYmVnaW4oKS0+dmFsdWU7CisgICAgICAgIEFTU0VSVCghcmVzb3VyY2VzLmlzRW1w
dHkoKSk7CisgICAgICAgIHJlbW92ZSgqcmVzb3VyY2VzLmJlZ2luKCktPnZhbHVlKTsKKyAgICB9
Cit9CisKK3ZvaWQgTWVtb3J5Q2FjaGU6OmV2aWN0UmVzb3VyY2VzKCkKK3sKKyAgICBpZiAoZGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0RGlzYWJsZWQodHJ1ZSk7CisgICAg
c2V0RGlzYWJsZWQoZmFsc2UpOworfQorCit2b2lkIE1lbW9yeUNhY2hlOjpldmljdFJlc291cmNl
cyhTZXNzaW9uSUQgc2Vzc2lvbklEKQoreworICAgIGlmIChkaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBmb3JFYWNoU2Vzc2lvblJlc291cmNlKHNlc3Npb25JRCwgW3RoaXNdIChD
YWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpIHsgcmVtb3ZlKHJlc291cmNlKTsgfSk7CisKKyAgICBB
U1NFUlQoIW1fc2Vzc2lvblJlc291cmNlcy5jb250YWlucyhzZXNzaW9uSUQpKTsKK30KKworYm9v
bCBNZW1vcnlDYWNoZTo6bmVlZHNQcnVuaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9saXZl
U2l6ZSArIG1fZGVhZFNpemUgPiBtX2NhcGFjaXR5IHx8IG1fZGVhZFNpemUgPiBtX21heERlYWRD
YXBhY2l0eTsKK30KKwordm9pZCBNZW1vcnlDYWNoZTo6cHJ1bmUoKQoreworICAgIGlmICghbmVl
ZHNQcnVuaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgcHJ1bmVEZWFkUmVz
b3VyY2VzKCk7IC8vIFBydW5lIGRlYWQgZmlyc3QsIGluIGNhc2UgaXQgd2FzICJib3Jyb3dpbmci
IGNhcGFjaXR5IGZyb20gbGl2ZS4KKyAgICBwcnVuZUxpdmVSZXNvdXJjZXMoKTsKK30KKwordm9p
ZCBNZW1vcnlDYWNoZTo6cHJ1bmVTb29uKCkKK3sKKyAgICAgaWYgKG1fcHJ1bmVUaW1lci5pc0Fj
dGl2ZSgpKQorICAgICAgICByZXR1cm47CisgICAgIGlmICghbmVlZHNQcnVuaW5nKCkpCisgICAg
ICAgICByZXR1cm47CisgICAgIG1fcHJ1bmVUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKKyNp
Zm5kZWYgTkRFQlVHCit2b2lkIE1lbW9yeUNhY2hlOjpkdW1wU3RhdHMoKQoreworICAgIFN0YXRp
c3RpY3MgcyA9IGdldFN0YXRpc3RpY3MoKTsKKyAgICBwcmludGYoIiUtMTNzICUtMTNzICUtMTNz
ICUtMTNzICUtMTNzXG4iLCAiIiwgIkNvdW50IiwgIlNpemUiLCAiTGl2ZVNpemUiLCAiRGVjb2Rl
ZFNpemUiKTsKKyAgICBwcmludGYoIiUtMTNzICUtMTNzICUtMTNzICUtMTNzICUtMTNzXG4iLCAi
LS0tLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tLS0iLCAiLS0tLS0t
LS0tLS0tLSIsICItLS0tLS0tLS0tLS0tIik7CisgICAgcHJpbnRmKCIlLTEzcyAlMTNkICUxM2Qg
JTEzZCAlMTNkXG4iLCAiSW1hZ2VzIiwgcy5pbWFnZXMuY291bnQsIHMuaW1hZ2VzLnNpemUsIHMu
aW1hZ2VzLmxpdmVTaXplLCBzLmltYWdlcy5kZWNvZGVkU2l6ZSk7CisgICAgcHJpbnRmKCIlLTEz
cyAlMTNkICUxM2QgJTEzZCAlMTNkXG4iLCAiQ1NTIiwgcy5jc3NTdHlsZVNoZWV0cy5jb3VudCwg
cy5jc3NTdHlsZVNoZWV0cy5zaXplLCBzLmNzc1N0eWxlU2hlZXRzLmxpdmVTaXplLCBzLmNzc1N0
eWxlU2hlZXRzLmRlY29kZWRTaXplKTsKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICBwcmludGYoIiUt
MTNzICUxM2QgJTEzZCAlMTNkICUxM2RcbiIsICJYU0wiLCBzLnhzbFN0eWxlU2hlZXRzLmNvdW50
LCBzLnhzbFN0eWxlU2hlZXRzLnNpemUsIHMueHNsU3R5bGVTaGVldHMubGl2ZVNpemUsIHMueHNs
U3R5bGVTaGVldHMuZGVjb2RlZFNpemUpOworI2VuZGlmCisgICAgcHJpbnRmKCIlLTEzcyAlMTNk
ICUxM2QgJTEzZCAlMTNkXG4iLCAiSmF2YVNjcmlwdCIsIHMuc2NyaXB0cy5jb3VudCwgcy5zY3Jp
cHRzLnNpemUsIHMuc2NyaXB0cy5saXZlU2l6ZSwgcy5zY3JpcHRzLmRlY29kZWRTaXplKTsKKyAg
ICBwcmludGYoIiUtMTNzICUxM2QgJTEzZCAlMTNkICUxM2RcbiIsICJGb250cyIsIHMuZm9udHMu
Y291bnQsIHMuZm9udHMuc2l6ZSwgcy5mb250cy5saXZlU2l6ZSwgcy5mb250cy5kZWNvZGVkU2l6
ZSk7CisgICAgcHJpbnRmKCIlLTEzcyAlLTEzcyAlLTEzcyAlLTEzcyAlLTEzc1xuXG4iLCAiLS0t
LS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0t
LS0tLSIsICItLS0tLS0tLS0tLS0tIik7Cit9CisKK3ZvaWQgTWVtb3J5Q2FjaGU6OmR1bXBMUlVM
aXN0cyhib29sIGluY2x1ZGVMaXZlKSBjb25zdAoreworICAgIHByaW50ZigiTFJVLVNQIGxpc3Rz
IGluIGV2aWN0aW9uIG9yZGVyIChLaWxvYnl0ZXMgZGVjb2RlZCwgS2lsb2J5dGVzIGVuY29kZWQs
IEFjY2VzcyBjb3VudCwgUmVmZXJlbmNlZCk6XG4iKTsKKworICAgIGludCBzaXplID0gbV9hbGxS
ZXNvdXJjZXMuc2l6ZSgpOworICAgIGZvciAoaW50IGkgPSBzaXplIC0gMTsgaSA+PSAwOyBpLS0p
IHsKKyAgICAgICAgcHJpbnRmKCJcblxuTGlzdCAlZDogIiwgaSk7CisgICAgICAgIGZvciAoYXV0
byogcmVzb3VyY2UgOiAqbV9hbGxSZXNvdXJjZXNbaV0pIHsKKyAgICAgICAgICAgIGlmIChpbmNs
dWRlTGl2ZSB8fCAhcmVzb3VyY2UtPmhhc0NsaWVudHMoKSkKKyAgICAgICAgICAgICAgICBwcmlu
dGYoIiglLjFmSywgJS4xZkssICV1QSwgJWRSKTsgIiwgcmVzb3VyY2UtPmRlY29kZWRTaXplKCkg
LyAxMDI0LjBmLCAocmVzb3VyY2UtPmVuY29kZWRTaXplKCkgKyByZXNvdXJjZS0+b3ZlcmhlYWRT
aXplKCkpIC8gMTAyNC4wZiwgcmVzb3VyY2UtPmFjY2Vzc0NvdW50KCksIHJlc291cmNlLT5oYXND
bGllbnRzKCkpOworICAgICAgICB9CisgICAgfQorfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9NZW1vcnlD
YWNoZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL01lbW9yeUNhY2hlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNmJlMTc0N2MyYTNiYWViNWY5YTBhOGJmNTc5OTRhNzEyOTA0NTc0YwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9NZW1vcnlDYWNoZS5oCkBAIC0w
LDAgKzEsMjI1IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9s
bEBtcGktaGQubXBnLmRlKQorICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11
ZWxsZXJAa2RlLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgIFRoaXMgY2xhc3MgcHJv
dmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUg
c2hlZXRzIGFuZCBodG1sCisgICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkg
Y2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCisqLworCisjaWZuZGVmIENhY2hlX2gKKyNkZWZpbmUg
Q2FjaGVfaAorCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKyNpbmNsdWRlICJTZWN1cml0
eU9yaWdpbkhhc2guaCIKKyNpbmNsdWRlICJTZXNzaW9uSUQuaCIKKyNpbmNsdWRlICJUaW1lci5o
IgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlICB7CisKK2NsYXNzIENhY2hlZFJlc291cmNlOworY2xh
c3MgVVJMOworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsK
K2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKKwor
Ly8gVGhpcyBjYWNoZSBob2xkcyBzdWJyZXNvdXJjZXMgdXNlZCBieSBXZWIgcGFnZXM6IGltYWdl
cywgc2NyaXB0cywgc3R5bGVzaGVldHMsIGV0Yy4KKworLy8gVGhlIGNhY2hlIGtlZXBzIGEgZmxl
eGlibGUgYnV0IGJvdW5kZWQgd2luZG93IG9mIGRlYWQgcmVzb3VyY2VzIHRoYXQgZ3Jvd3Mvc2hy
aW5rcyAKKy8vIGRlcGVuZGluZyBvbiB0aGUgbGl2ZSByZXNvdXJjZSBsb2FkLiBIZXJlJ3MgYW4g
ZXhhbXBsZSBvZiBjYWNoZSBncm93dGggb3ZlciB0aW1lLAorLy8gd2l0aCBhIG1pbiBkZWFkIHJl
c291cmNlIGNhcGFjaXR5IG9mIDI1JSBhbmQgYSBtYXggZGVhZCByZXNvdXJjZSBjYXBhY2l0eSBv
ZiA1MCU6CisKKy8vICAgICAgICB8LS0tLS18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RGVhZDogLQorLy8gICAgICAgIHwtLS0tLS0tLS0tfCAgICAgICAgICAgICAgICAgICAgICAgICBM
aXZlOiArCisvLyAgICAgIC0tfC0tLS0tLS0tLS18ICAgICAgICAgICAgICAgICAgICAgICAgIENh
Y2hlIGJvdW5kYXJ5OiB8IChvYmplY3RzIG91dHNpZGUgdGhpcyBtYXJrIGhhdmUgYmVlbiBldmlj
dGVkKQorLy8gICAgICAtLXwtLS0tLS0tLS0tKysrKysrKysrK3wKKy8vIC0tLS0tLS18LS0tLS0r
KysrKysrKysrKysrKyt8CisvLyAtLS0tLS0tfC0tLS0tKysrKysrKysrKysrKysrfCsrKysrCisK
K2NsYXNzIE1lbW9yeUNhY2hlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZW1vcnlDYWNo
ZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIGZyaWVuZCBOZXZlckRlc3Ryb3llZDxN
ZW1vcnlDYWNoZT47CisgICAgZnJpZW5kIGNsYXNzIEludGVybmFsczsKK3B1YmxpYzoKKyAgICBz
dHJ1Y3QgVHlwZVN0YXRpc3RpYyB7CisgICAgICAgIGludCBjb3VudDsKKyAgICAgICAgaW50IHNp
emU7CisgICAgICAgIGludCBsaXZlU2l6ZTsKKyAgICAgICAgaW50IGRlY29kZWRTaXplOworCisg
ICAgICAgIFR5cGVTdGF0aXN0aWMoKQorICAgICAgICAgICAgOiBjb3VudCgwKQorICAgICAgICAg
ICAgLCBzaXplKDApCisgICAgICAgICAgICAsIGxpdmVTaXplKDApCisgICAgICAgICAgICAsIGRl
Y29kZWRTaXplKDApCisgICAgICAgIHsgCisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFkZFJl
c291cmNlKENhY2hlZFJlc291cmNlJik7CisgICAgfTsKKyAgICAKKyAgICBzdHJ1Y3QgU3RhdGlz
dGljcyB7CisgICAgICAgIFR5cGVTdGF0aXN0aWMgaW1hZ2VzOworICAgICAgICBUeXBlU3RhdGlz
dGljIGNzc1N0eWxlU2hlZXRzOworICAgICAgICBUeXBlU3RhdGlzdGljIHNjcmlwdHM7CisgICAg
ICAgIFR5cGVTdGF0aXN0aWMgeHNsU3R5bGVTaGVldHM7CisgICAgICAgIFR5cGVTdGF0aXN0aWMg
Zm9udHM7CisgICAgfTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBNZW1vcnlDYWNoZSYg
c2luZ2xldG9uKCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBDYWNoZWRSZXNvdXJjZSogcmVzb3Vy
Y2VGb3JSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFNlc3Npb25JRCk7CisKKyAgICBi
b29sIGFkZChDYWNoZWRSZXNvdXJjZSYpOworICAgIHZvaWQgcmVtb3ZlKENhY2hlZFJlc291cmNl
Jik7CisKKyAgICBzdGF0aWMgVVJMIHJlbW92ZUZyYWdtZW50SWRlbnRpZmllcklmTmVlZGVkKGNv
bnN0IFVSTCYgb3JpZ2luYWxVUkwpOworICAgIAorICAgIHZvaWQgcmV2YWxpZGF0aW9uU3VjY2Vl
ZGVkKENhY2hlZFJlc291cmNlJiByZXZhbGlkYXRpbmdSZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpOworICAgIHZvaWQgcmV2YWxpZGF0aW9uRmFpbGVkKENhY2hlZFJlc291cmNlJiBy
ZXZhbGlkYXRpbmdSZXNvdXJjZSk7CisKKyAgICB2b2lkIGZvckVhY2hSZXNvdXJjZShjb25zdCBz
dGQ6OmZ1bmN0aW9uPHZvaWQoQ2FjaGVkUmVzb3VyY2UmKT4mKTsKKyAgICB2b2lkIGZvckVhY2hT
ZXNzaW9uUmVzb3VyY2UoU2Vzc2lvbklELCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoQ2FjaGVk
UmVzb3VyY2UmKT4mKTsKKyAgICB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YUZvckFsbEltYWdlcygp
OworICAgIAorICAgIC8vIFNldHMgdGhlIGNhY2hlJ3MgbWVtb3J5IGNhcGFjaXRpZXMsIGluIGJ5
dGVzLiBUaGVzZSB3aWxsIGhvbGQgb25seSBhcHByb3hpbWF0ZWx5LCAKKyAgICAvLyBzaW5jZSB0
aGUgZGVjb2RlZCBjb3N0IG9mIHJlc291cmNlcyBsaWtlIHNjcmlwdHMgYW5kIHN0eWxlc2hlZXRz
IGlzIG5vdCBrbm93bi4KKyAgICAvLyAgLSBtaW5EZWFkQnl0ZXM6IFRoZSBtYXhpbXVtIG51bWJl
ciBvZiBieXRlcyB0aGF0IGRlYWQgcmVzb3VyY2VzIHNob3VsZCBjb25zdW1lIHdoZW4gdGhlIGNh
Y2hlIGlzIHVuZGVyIHByZXNzdXJlLgorICAgIC8vICAtIG1heERlYWRCeXRlczogVGhlIG1heGlt
dW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgZGVhZCByZXNvdXJjZXMgc2hvdWxkIGNvbnN1bWUgd2hl
biB0aGUgY2FjaGUgaXMgbm90IHVuZGVyIHByZXNzdXJlLgorICAgIC8vICAtIHRvdGFsQnl0ZXM6
IFRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGF0IHRoZSBjYWNoZSBzaG91bGQgY29uc3Vt
ZSBvdmVyYWxsLgorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q2FwYWNpdGllcyh1bnNpZ25l
ZCBtaW5EZWFkQnl0ZXMsIHVuc2lnbmVkIG1heERlYWRCeXRlcywgdW5zaWduZWQgdG90YWxCeXRl
cyk7CisKKyAgICAvLyBUdXJuIHRoZSBjYWNoZSBvbiBhbmQgb2ZmLiAgRGlzYWJsaW5nIHRoZSBj
YWNoZSB3aWxsIHJlbW92ZSBhbGwgcmVzb3VyY2VzIGZyb20gdGhlIGNhY2hlLiAgVGhleSBtYXkK
KyAgICAvLyBzdGlsbCBsaXZlIG9uIGlmIHRoZXkgYXJlIHJlZmVyZW5jZWQgYnkgc29tZSBXZWIg
cGFnZSB0aG91Z2guCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXREaXNhYmxlZChib29sKTsK
KyAgICBib29sIGRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZDsgfQorCisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBldmljdFJlc291cmNlcygpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZXZpY3RSZXNvdXJjZXMoU2Vzc2lvbklEKTsKKyAgICAKKyAgICB2b2lkIHBydW5lKCk7
CisgICAgdm9pZCBwcnVuZVNvb24oKTsKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9saXZlU2l6ZSArIG1fZGVhZFNpemU7IH0KKworICAgIHZvaWQgc2V0RGVhZERlY29kZWRE
YXRhRGVsZXRpb25JbnRlcnZhbChzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIGludGVydmFsKSB7
IG1fZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCA9IGludGVydmFsOyB9CisgICAgc3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kcyBkZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKCkg
Y29uc3QgeyByZXR1cm4gbV9kZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsOyB9CisKKyAg
ICAvLyBDYWxscyB0byBwdXQgdGhlIGNhY2hlZCByZXNvdXJjZSBpbnRvIGFuZCBvdXQgb2YgTFJV
IGxpc3RzLgorICAgIHZvaWQgaW5zZXJ0SW5MUlVMaXN0KENhY2hlZFJlc291cmNlJik7CisgICAg
dm9pZCByZW1vdmVGcm9tTFJVTGlzdChDYWNoZWRSZXNvdXJjZSYpOworCisgICAgLy8gQ2FsbGVk
IHRvIGFkanVzdCB0aGUgY2FjaGUgdG90YWxzIHdoZW4gYSByZXNvdXJjZSBjaGFuZ2VzIHNpemUu
CisgICAgdm9pZCBhZGp1c3RTaXplKGJvb2wgbGl2ZSwgaW50IGRlbHRhKTsKKworICAgIC8vIFRy
YWNrIGRlY29kZWQgcmVzb3VyY2VzIHRoYXQgYXJlIGluIHRoZSBjYWNoZSBhbmQgcmVmZXJlbmNl
ZCBieSBhIFdlYiBwYWdlLgorICAgIHZvaWQgaW5zZXJ0SW5MaXZlRGVjb2RlZFJlc291cmNlc0xp
c3QoQ2FjaGVkUmVzb3VyY2UmKTsKKyAgICB2b2lkIHJlbW92ZUZyb21MaXZlRGVjb2RlZFJlc291
cmNlc0xpc3QoQ2FjaGVkUmVzb3VyY2UmKTsKKworICAgIHZvaWQgYWRkVG9MaXZlUmVzb3VyY2Vz
U2l6ZShDYWNoZWRSZXNvdXJjZSYpOworICAgIHZvaWQgcmVtb3ZlRnJvbUxpdmVSZXNvdXJjZXNT
aXplKENhY2hlZFJlc291cmNlJik7CisKKyAgICBzdGF0aWMgdm9pZCByZW1vdmVSZXF1ZXN0RnJv
bVNlc3Npb25DYWNoZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYpOworCisgICAgLy8gRnVuY3Rpb24gdG8gY29sbGVjdCBjYWNoZSBzdGF0aXN0aWNzIGZv
ciB0aGUgY2FjaGVzIHdpbmRvdyBpbiB0aGUgU2FmYXJpIERlYnVnIG1lbnUuCisgICAgV0VCQ09S
RV9FWFBPUlQgU3RhdGlzdGljcyBnZXRTdGF0aXN0aWNzKCk7CisgICAgCisgICAgdm9pZCByZXNv
dXJjZUFjY2Vzc2VkKENhY2hlZFJlc291cmNlJik7CisgICAgYm9vbCBpbkxpdmVEZWNvZGVkUmVz
b3VyY2VzTGlzdChDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpIGNvbnN0IHsgcmV0dXJuIG1fbGl2
ZURlY29kZWRSZXNvdXJjZXMuY29udGFpbnMoJnJlc291cmNlKTsgfQorCisgICAgdHlwZWRlZiBI
YXNoU2V0PFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+IFNlY3VyaXR5T3JpZ2luU2V0OworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlUmVzb3VyY2VzV2l0aE9yaWdpbihTZWN1cml0eU9yaWdp
biYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlUmVzb3VyY2VzV2l0aE9yaWdpbnMo
U2Vzc2lvbklELCBjb25zdCBIYXNoU2V0PFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+Jik7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRPcmlnaW5zV2l0aENhY2hlKFNlY3VyaXR5T3JpZ2luU2V0
JiBvcmlnaW5zKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBIYXNoU2V0PFJlZlB0cjxTZWN1cml0eU9y
aWdpbj4+IG9yaWdpbnNXaXRoQ2FjaGUoU2Vzc2lvbklEKSBjb25zdDsKKworICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgYWRkSW1hZ2VUb0NhY2hlKE5hdGl2ZUltYWdlUHRyJiYsIGNvbnN0IFVSTCYs
IGNvbnN0IFN0cmluZyYgZG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24pOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgcmVtb3ZlSW1hZ2VGcm9tQ2FjaGUoY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJiBk
b21haW5Gb3JDYWNoZVBhcnRpdGlvbik7CisKKyAgICAvLyBwcnVuZURlYWQqKCkgLSBGbHVzaCBk
ZWNvZGVkIGFuZCBlbmNvZGVkIGRhdGEgZnJvbSByZXNvdXJjZXMgbm90IHJlZmVyZW5jZWQgYnkg
V2ViIHBhZ2VzLgorICAgIC8vIHBydW5lTGl2ZSooKSAtIEZsdXNoIGRlY29kZWQgZGF0YSBmcm9t
IHJlc291cmNlcyBzdGlsbCByZWZlcmVuY2VkIGJ5IFdlYiBwYWdlcy4KKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHBydW5lRGVhZFJlc291cmNlcygpOyAvLyBBdXRvbWF0aWNhbGx5IGRlY2lkZSBo
b3cgbXVjaCB0byBwcnVuZS4KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBydW5lTGl2ZVJlc291
cmNlcyhib29sIHNob3VsZERlc3Ryb3lEZWNvZGVkRGF0YUZvckFsbExpdmVSZXNvdXJjZXMgPSBm
YWxzZSk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBydW5lRGVhZFJlc291cmNlc1RvU2l6
ZSh1bnNpZ25lZCB0YXJnZXRTaXplKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBydW5lTGl2
ZVJlc291cmNlc1RvU2l6ZSh1bnNpZ25lZCB0YXJnZXRTaXplLCBib29sIHNob3VsZERlc3Ryb3lE
ZWNvZGVkRGF0YUZvckFsbExpdmVSZXNvdXJjZXMgPSBmYWxzZSk7CisKK3ByaXZhdGU6CisjaWYg
RU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKKyAgICB0eXBlZGVmIEhhc2hNYXA8c3RkOjpwYWly
PFVSTCwgU3RyaW5nIC8qIHBhcnRpdGlvbk5hbWUgKi8+LCBDYWNoZWRSZXNvdXJjZSo+IENhY2hl
ZFJlc291cmNlTWFwOworI2Vsc2UKKyAgICB0eXBlZGVmIEhhc2hNYXA8VVJMLCBDYWNoZWRSZXNv
dXJjZSo+IENhY2hlZFJlc291cmNlTWFwOworI2VuZGlmCisgICAgdHlwZWRlZiBMaXN0SGFzaFNl
dDxDYWNoZWRSZXNvdXJjZSo+IExSVUxpc3Q7CisKKyAgICBNZW1vcnlDYWNoZSgpOworICAgIH5N
ZW1vcnlDYWNoZSgpOyAvLyBOb3QgaW1wbGVtZW50ZWQgdG8gbWFrZSBzdXJlIG5vYm9keSBhY2Np
ZGVudGFsbHkgY2FsbHMgZGVsZXRlIC0tIFdlYkNvcmUgZG9lcyBub3QgZGVsZXRlIHNpbmdsZXRv
bnMuCisKKyAgICBMUlVMaXN0JiBscnVMaXN0Rm9yKENhY2hlZFJlc291cmNlJik7CisjaWZuZGVm
IE5ERUJVRworICAgIHZvaWQgZHVtcFN0YXRzKCk7CisgICAgdm9pZCBkdW1wTFJVTGlzdHMoYm9v
bCBpbmNsdWRlTGl2ZSkgY29uc3Q7CisjZW5kaWYKKworICAgIHVuc2lnbmVkIGxpdmVDYXBhY2l0
eSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGRlYWRDYXBhY2l0eSgpIGNvbnN0OworICAgIGJvb2wg
bmVlZHNQcnVuaW5nKCkgY29uc3Q7CisKKyAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2VGb3JS
ZXF1ZXN0SW1wbChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBDYWNoZWRSZXNvdXJjZU1hcCYpOwor
CisgICAgQ2FjaGVkUmVzb3VyY2VNYXAmIGVuc3VyZVNlc3Npb25SZXNvdXJjZU1hcChTZXNzaW9u
SUQpOworICAgIENhY2hlZFJlc291cmNlTWFwKiBzZXNzaW9uUmVzb3VyY2VNYXAoU2Vzc2lvbklE
KSBjb25zdDsKKworICAgIGJvb2wgbV9kaXNhYmxlZDsgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBj
YWNoZSBpcyBlbmFibGVkLgorICAgIGJvb2wgbV9pblBydW5lUmVzb3VyY2VzOworCisgICAgdW5z
aWduZWQgbV9jYXBhY2l0eTsKKyAgICB1bnNpZ25lZCBtX21pbkRlYWRDYXBhY2l0eTsKKyAgICB1
bnNpZ25lZCBtX21heERlYWRDYXBhY2l0eTsKKyAgICBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
IG1fZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbDsKKworICAgIHVuc2lnbmVkIG1fbGl2
ZVNpemU7IC8vIFRoZSBudW1iZXIgb2YgYnl0ZXMgY3VycmVudGx5IGNvbnN1bWVkIGJ5ICJsaXZl
IiByZXNvdXJjZXMgaW4gdGhlIGNhY2hlLgorICAgIHVuc2lnbmVkIG1fZGVhZFNpemU7IC8vIFRo
ZSBudW1iZXIgb2YgYnl0ZXMgY3VycmVudGx5IGNvbnN1bWVkIGJ5ICJkZWFkIiByZXNvdXJjZXMg
aW4gdGhlIGNhY2hlLgorCisgICAgLy8gU2l6ZS1hZGp1c3RlZCBhbmQgcG9wdWxhcml0eS1hd2Fy
ZSBMUlUgbGlzdCBjb2xsZWN0aW9uIGZvciBjYWNoZSBvYmplY3RzLiAgVGhpcyBjb2xsZWN0aW9u
IGNhbiBob2xkCisgICAgLy8gbW9yZSByZXNvdXJjZXMgdGhhbiB0aGUgY2FjaGVkIHJlc291cmNl
IG1hcCwgc2luY2UgaXQgY2FuIGFsc28gaG9sZCAic3RhbGUiIG11bHRpcGxlIHZlcnNpb25zIG9m
IG9iamVjdHMgdGhhdCBhcmUKKyAgICAvLyB3YWl0aW5nIHRvIGRpZSB3aGVuIHRoZSBjbGllbnRz
IHJlZmVyZW5jaW5nIHRoZW0gZ28gYXdheS4KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPExS
VUxpc3Q+LCAzMj4gbV9hbGxSZXNvdXJjZXM7CisgICAgCisgICAgLy8gTGlzdCBqdXN0IGZvciBs
aXZlIHJlc291cmNlcyB3aXRoIGRlY29kZWQgZGF0YS4gIEFjY2VzcyB0byB0aGlzIGxpc3QgaXMg
YmFzZWQgb2ZmIG9mIHBhaW50aW5nIHRoZSByZXNvdXJjZS4KKyAgICBMUlVMaXN0IG1fbGl2ZURl
Y29kZWRSZXNvdXJjZXM7CisgICAgCisgICAgLy8gQSBVUkwtYmFzZWQgbWFwIG9mIGFsbCByZXNv
dXJjZXMgdGhhdCBhcmUgaW4gdGhlIGNhY2hlIChpbmNsdWRpbmcgdGhlIGZyZXNoZXN0IHZlcnNp
b24gb2Ygb2JqZWN0cyB0aGF0IGFyZSBjdXJyZW50bHkgYmVpbmcgCisgICAgLy8gcmVmZXJlbmNl
ZCBieSBhIFdlYiBwYWdlKS4KKyAgICB0eXBlZGVmIEhhc2hNYXA8U2Vzc2lvbklELCBzdGQ6OnVu
aXF1ZV9wdHI8Q2FjaGVkUmVzb3VyY2VNYXA+PiBTZXNzaW9uQ2FjaGVkUmVzb3VyY2VNYXA7Cisg
ICAgU2Vzc2lvbkNhY2hlZFJlc291cmNlTWFwIG1fc2Vzc2lvblJlc291cmNlczsKKworICAgIFRp
bWVyIG1fcHJ1bmVUaW1lcjsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IDYwYmIwM2NmYWE2OTY5MzZhOWZiNjFhYzExYzI5Yjg0NWM0ZjU1YTEuLjQ0NmFjM2ExZjQ5
ZTczM2RiZjJhMTE1YTg4YjhkZGVmNTIzYjU0ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC0x
MDcsOCArMTA3LDggQEAgc2V0KFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dF
QkNPUkVfRElSfS9pbnNwZWN0b3IiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2xvYWRlciIKICAgICAi
JHtXRUJDT1JFX0RJUn0vbG9hZGVyL2FyY2hpdmUiCisgICAgIiR7V0VCQ09SRV9ESVJ9L2xvYWRl
ci9mZXRjaCIKICAgICAiJHtXRUJDT1JFX0RJUn0vbG9hZGVyL2ljb24iCi0gICAgIiR7V0VCQ09S
RV9ESVJ9L2xvYWRlci9jYWNoZSIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGFnZSIKICAgICAiJHtX
RUJDT1JFX0RJUn0vcGFnZS9hbmltYXRpb24iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BhZ2UvY3Nw
Igo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287962</attachid>
            <date>2016-09-05 08:32:56 -0700</date>
            <delta_ts>2016-09-05 12:36:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161602-20160905173028.patch</filename>
            <type>text/plain</type>
            <size>588376</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA1NDUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjM3MDBiZjE0OTMyMTgw
OTc5NjU0Yjk0MThmNWEzOTdhMTAyY2ZhMy4uYjVjYjM3NDNjNmI0OTdkZDA4MzY4ZjVjYzdjMWZj
ZjFmMTJjZTFiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU3IEBACiAyMDE2LTA5LTA1ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBbRmV0Y2ggQVBJXSBNb3Zl
IFdlYkNvcmUvbG9hZGVyL2NhY2hlIHRvIFdlYkNvcmUvbG9hZGVyL2ZldGNoCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE2MDIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBjaGFuZ2Ugb2YgYmVoYXZp
b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5j
bWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlUG9s
aWN5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVQb2xp
Y3kuaC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVl
dC5jcHAuCisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZENTU1N0eWxlU2hlZXQuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0
LmguCisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZEZvbnQuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwLgorICAgICAgICAqIGxv
YWRlci9mZXRjaC9DYWNoZWRGb250Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkRm9udC5oLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRGb250
Q2xpZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
Rm9udENsaWVudC5oLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRJbWFnZS5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwLgor
ICAgICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRJbWFnZS5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmguCisgICAgICAgICogbG9hZGVyL2Zl
dGNoL0NhY2hlZEltYWdlQ2xpZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkSW1hZ2VDbGllbnQuaC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2Fj
aGVkUmF3UmVzb3VyY2UuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVk
UmF3UmVzb3VyY2UuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSYXdSZXNvdXJjZS5oLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRSYXdSZXNv
dXJjZUNsaWVudC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJhd1Jlc291cmNlQ2xpZW50LmguCisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZFJl
c291cmNlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZS5jcHAuCisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlLmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2Uu
aC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNs
aWVudFdhbGtlci5oLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZUhhbmRs
ZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2VIYW5kbGUuY3BwLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZUhh
bmRsZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlSGFuZGxlLmguCisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlTG9h
ZGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZUxvYWRlci5jcHAuCisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNl
UmVxdWVzdC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0LmNwcC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmguCisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZFJl
c291cmNlUmVxdWVzdEluaXRpYXRvcnMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMuY3BwLgorICAgICAg
ICAqIGxvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0
SW5pdGlhdG9ycy5oLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRTVkdEb2N1bWVudC5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRG9j
dW1lbnQuY3BwLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRTVkdEb2N1bWVudC5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0RvY3VtZW50
LmguCisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZFNWR0RvY3VtZW50Q2xpZW50Lmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRG9jdW1lbnRD
bGllbnQuaC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVu
Y2UuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNW
R0RvY3VtZW50UmVmZXJlbmNlLmNwcC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZH
RG9jdW1lbnRSZWZlcmVuY2UuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oLgorICAgICAgICAqIGxvYWRlci9mZXRj
aC9DYWNoZWRTVkdGb250LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRTVkdGb250LmNwcC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZH
Rm9udC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNW
R0ZvbnQuaC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkU2NyaXB0LmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwLgorICAg
ICAgICAqIGxvYWRlci9mZXRjaC9DYWNoZWRTY3JpcHQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuaC4KKyAgICAgICAgKiBsb2FkZXIvZmV0
Y2gvQ2FjaGVkU3R5bGVTaGVldENsaWVudC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFN0eWxlU2hlZXRDbGllbnQuaC4KKyAgICAgICAgKiBsb2FkZXIv
ZmV0Y2gvQ2FjaGVkVGV4dFRyYWNrLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRUZXh0VHJhY2suY3BwLgorICAgICAgICAqIGxvYWRlci9mZXRjaC9D
YWNoZWRUZXh0VHJhY2suaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRUZXh0VHJhY2suaC4KKyAgICAgICAgKiBsb2FkZXIvZmV0Y2gvQ2FjaGVkWFNMU3R5
bGVTaGVldC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkWFNMU3R5bGVTaGVldC5jcHAuCisgICAgICAgICogbG9hZGVyL2ZldGNoL0NhY2hlZFhTTFN0
eWxlU2hlZXQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRYU0xTdHlsZVNoZWV0LmguCisgICAgICAgICogbG9hZGVyL2ZldGNoL01lbW9yeUNhY2hlLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5j
cHAuCisgICAgICAgICogbG9hZGVyL2ZldGNoL01lbW9yeUNhY2hlLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaC4KKworMjAxNi0wOS0wNSAg
WW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKICAgICAgICAgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIgaXMgbm90IHRha2luZyBpbnRvIGFjY291bnQgZmV0Y2ggb3B0aW9ucyB0byB1c2Ug
b3Igbm90IGNhY2hlZCByZXNvdXJjZXMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MTM4OQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZmViMDUxNjM1YTFmZTgxZDA3
NTc4YWEzMGI3NDg0MTdmM2I4ZWJmYy4uYWE3NWU2Y2M3OGU2YmRkNmIyMTQ3Y2UyYmE5Mzg0Y2Fh
ZTYwMmQ5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE2LTA5LTA1ICBZb3Vlbm4g
RmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBbRmV0Y2ggQVBJXSBNb3ZlIFdl
YkNvcmUvbG9hZGVyL2NhY2hlIHRvIFdlYkNvcmUvbG9hZGVyL2ZldGNoCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE2MDIKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorCiAy
MDE2LTA5LTA1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbR1RLXSBTZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcgc2hvdWxk
IG5vdCBiZSBjb21waWxlZCBpbiBmb3Igd2F5bGFuZCBidWlsZApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApp
bmRleCBlMWIzOWEwN2FkMzdjMDllYTFhOWVhNTk5ZjUxMDQ0OTE1NzM4YjVmLi5hNjFkNzMwZjBm
NGI2OGU2ZmEwOGM1NTNmNTUxNDQyMTE4ODYyMTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAt
NjIsNyArNjIsNyBAQCBzZXQoV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VC
Q09SRV9ESVJ9L2xvYWRlci9hcHBjYWNoZSIKICAgICAiJHtXRUJDT1JFX0RJUn0vbG9hZGVyL2Fy
Y2hpdmUiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2xvYWRlci9hcmNoaXZlL21odG1sIgotICAgICIk
e1dFQkNPUkVfRElSfS9sb2FkZXIvY2FjaGUiCisgICAgIiR7V0VCQ09SRV9ESVJ9L2xvYWRlci9m
ZXRjaCIKICAgICAiJHtXRUJDT1JFX0RJUn0vbG9hZGVyL2ljb24iCiAgICAgIiR7V0VCQ09SRV9E
SVJ9L21hdGhtbCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGFnZSIKQEAgLTE5ODksMjEgKzE5ODks
MjEgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGxvYWRlci9hcmNoaXZlL21odG1sL01IVE1M
QXJjaGl2ZS5jcHAKICAgICBsb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBhcnNlci5jcHAKIAot
ICAgIGxvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAotICAgIGxvYWRlci9jYWNo
ZS9DYWNoZWRGb250LmNwcAotICAgIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAKLSAgICBs
b2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCi0gICAgbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlLmNwcAotICAgIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAK
LSAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCi0gICAgbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5jcHAKLSAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5jcHAKLSAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRG9j
dW1lbnQuY3BwCi0gICAgbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmNw
cAotICAgIGxvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250LmNwcAotICAgIGxvYWRlci9jYWNoZS9D
YWNoZWRTY3JpcHQuY3BwCi0gICAgbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3Bw
Ci0gICAgbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAorICAgIGxvYWRlci9mZXRjaC9DYWNo
ZWRDU1NTdHlsZVNoZWV0LmNwcAorICAgIGxvYWRlci9mZXRjaC9DYWNoZWRGb250LmNwcAorICAg
IGxvYWRlci9mZXRjaC9DYWNoZWRJbWFnZS5jcHAKKyAgICBsb2FkZXIvZmV0Y2gvQ2FjaGVkUmF3
UmVzb3VyY2UuY3BwCisgICAgbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlLmNwcAorICAgIGxv
YWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAKKyAgICBsb2FkZXIvZmV0Y2gvQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIuY3BwCisgICAgbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlUmVx
dWVzdC5jcHAKKyAgICBsb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9y
cy5jcHAKKyAgICBsb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRG9jdW1lbnQuY3BwCisgICAgbG9hZGVy
L2ZldGNoL0NhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmNwcAorICAgIGxvYWRlci9mZXRjaC9D
YWNoZWRTVkdGb250LmNwcAorICAgIGxvYWRlci9mZXRjaC9DYWNoZWRTY3JpcHQuY3BwCisgICAg
bG9hZGVyL2ZldGNoL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwCisgICAgbG9hZGVyL2ZldGNoL01l
bW9yeUNhY2hlLmNwcAogCiAgICAgbG9hZGVyL2ljb24vSWNvbkNvbnRyb2xsZXIuY3BwCiAgICAg
bG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcApAQCAtMzE5Nyw3ICszMTk3LDcgQEAgaWYgKEVO
QUJMRV9WSURFT19UUkFDSykKICAgICAgICAgaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuY3BwCiAg
ICAgICAgIGh0bWwvdHJhY2svV2ViVlRUVG9rZW5pemVyLmNwcAogCi0gICAgICAgIGxvYWRlci9j
YWNoZS9DYWNoZWRUZXh0VHJhY2suY3BwCisgICAgICAgIGxvYWRlci9mZXRjaC9DYWNoZWRUZXh0
VHJhY2suY3BwCiAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFRyYWNrUmVwcmVzZW50
YXRpb24uY3BwCiAgICAgKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMu
Y21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCBkMmU2NmEzMGNl
ODVjNjU2NzIzMGZiODEyNTU3ODcwOWZiNTFlZTJjLi4xZmUyZDVhMTM1YTQ4ZGFhY2M4MTJlZDhl
YzYwYWVlN2ExNmRlZTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5j
bWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtNjE0LDggKzYx
NCw4IEBAIHNldChXZWJDb3JlX0ZPUldBUkRJTkdfSEVBREVSU19ESVJFQ1RPUklFUwogCiAgICAg
bG9hZGVyL2FwcGNhY2hlCiAgICAgbG9hZGVyL2FyY2hpdmUKLSAgICBsb2FkZXIvY2FjaGUKICAg
ICBsb2FkZXIvY29jb2EKKyAgICBsb2FkZXIvZmV0Y2gKIAogICAgIGxvYWRlci9hcmNoaXZlL2Nm
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggMDFlZGYxNTljZjM2NGEzYWYzODlmNzFi
ZWE4MmYxNTkzNDAyYzIwMS4uN2ViNDg4MGI5ZWY4OGZjNTBjYTQ2YWY4Yzg4MWE5ZWJkZGZkOTc2
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTIxMSw4ICsyMTEsOCBAQCBzZXQoV2Vi
Q29yZV9GT1JXQVJESU5HX0hFQURFUlNfRElSRUNUT1JJRVMKIAogICAgIGxvYWRlci9hcHBjYWNo
ZQogICAgIGxvYWRlci9hcmNoaXZlCi0gICAgbG9hZGVyL2NhY2hlCiAgICAgbG9hZGVyL2ljb24K
KyAgICBsb2FkZXIvZmV0Y2gKIAogICAgIGxvYWRlci9hcmNoaXZlL2NmCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhZGVhZDZk
MDg1NjFmMjU4YjY0ZjJkN2NiNWZlNmRjYmIxMTQzOWYyLi5mMjk1ZDZmNzQ3ZjM5YWE5NGYwNDRj
YjkwZDk5MWUwYWViNzIxNWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xOTcxNyw3ICsxOTcxNyw3IEBACiAJCQluYW1lID0g
WE1MOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJQThEMkIyNTIxMjg3QTU2
MDAwQUY0RERBIC8qIGNhY2hlICovID0geworCQlBOEQyQjI1MjEyODdBNTYwMDBBRjREREEgLyog
ZmV0Y2ggKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUJD
QjE2QzAwMDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRDU1NTdHlsZVNoZWV0LmNwcCAqLywKQEAg
LTE5NzYxLDcgKzE5NzYxLDcgQEAKIAkJCQlCQ0IxNkJGRTA5NzlDM0JEMDA0Njc3NDEgLyogTWVt
b3J5Q2FjaGUuY3BwICovLAogCQkJCUJDQjE2QkZGMDk3OUMzQkQwMDQ2Nzc0MSAvKiBNZW1vcnlD
YWNoZS5oICovLAogCQkJKTsKLQkJCXBhdGggPSBjYWNoZTsKKwkJCXBhdGggPSBmZXRjaDsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CiAJCUE5RDI0N0Y5MEQ3NTdFNDEwMEZERjk1
OSAvKiBQbHVnaW5zICovID0gewpAQCAtMjEzMjksNyArMjEzMjksNyBAQAogCQkJY2hpbGRyZW4g
PSAoCiAJCQkJMUE4RjZCQjAwREI1NUNEQzAwMURCNzk0IC8qIGFwcGNhY2hlICovLAogCQkJCTUx
MkREOEU4MEQ5MUU2OTEwMDBGODlFRSAvKiBhcmNoaXZlICovLAotCQkJCUE4RDJCMjUyMTI4N0E1
NjAwMEFGNEREQSAvKiBjYWNoZSAqLywKKwkJCQlBOEQyQjI1MjEyODdBNTYwMDBBRjREREEgLyog
ZmV0Y2ggKi8sCiAJCQkJN0VFNjg0NzMxMkQyNkU1NTAwRTc5NDE1IC8qIGNmICovLAogCQkJCTdF
NERFMTBCMTk4QjEwODEwMDUxQ0IwMiAvKiBjb2NvYSAqLywKIAkJCQk1MTI2RTZCNjBBMkUzQUVG
MDA1QzI5RkEgLyogaWNvbiAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZVBvbGljeS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlUG9s
aWN5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNzY4NWVlOTIwNDIxMDc0NTkx
OTUyMDEyZDdlYjExYmFhOTg1MGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlUG9saWN5LmgKKysr
IC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIENhY2hlUG9saWN5X2gKLSNkZWZpbmUg
Q2FjaGVQb2xpY3lfaAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBlbnVtIENhY2hlUG9s
aWN5IHsKLSAgICAgICAgQ2FjaGVQb2xpY3lWZXJpZnksCi0gICAgICAgIENhY2hlUG9saWN5UmV2
YWxpZGF0ZSwKLSAgICAgICAgQ2FjaGVQb2xpY3lSZWxvYWQsCi0gICAgICAgIENhY2hlUG9saWN5
SGlzdG9yeUJ1ZmZlcgotICAgIH07Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDRkMzdlNThiZGY0OWUxNGVlZGNkNGYwOTBmOWZhZTY2ZjI0ZWU5Mzku
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTgyICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwg
KGtub2xsQG1waS1oZC5tcGcuZGUpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxl
ciAobXVlbGxlckBrZGUub3JnKQotICAgIENvcHlyaWdodCAoQykgMjAwMiBXYWxkbyBCYXN0aWFu
IChiYXN0aWFuQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcg
KHNhbS53ZWluaWdAZ21haWwuY29tKQotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiBBcHBsZSBJbmMuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0K
LSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBu
ZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKLSAgICBwYWdl
cyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4K
LSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0
LmgiCi0KLSNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3Vy
Y2VDbGllbnRXYWxrZXIuaCIKLSNpbmNsdWRlICJDYWNoZWRTdHlsZVNoZWV0Q2xpZW50LmgiCi0j
aW5jbHVkZSAiSFRUUEhlYWRlck5hbWVzLmgiCi0jaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKLSNp
bmNsdWRlICJNZW1vcnlDYWNoZS5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1
ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgotI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIu
aCIKLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1DYWNoZWRDU1NTdHlsZVNoZWV0OjpDYWNoZWRDU1NTdHlsZVNoZWV0KGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIFNlc3Npb25J
RCBzZXNzaW9uSUQpCi0gICAgOiBDYWNoZWRSZXNvdXJjZShyZXNvdXJjZVJlcXVlc3QsIENTU1N0
eWxlU2hlZXQsIHNlc3Npb25JRCkKLSAgICAsIG1fZGVjb2RlcihUZXh0UmVzb3VyY2VEZWNvZGVy
OjpjcmVhdGUoInRleHQvY3NzIiwgY2hhcnNldCkpCi17Ci0gICAgLy8gUHJlZmVyIHRleHQvY3Nz
IGJ1dCBhY2NlcHQgYW55IHR5cGUgKGRlbGwuY29tIHNlcnZlcyBhIHN0eWxlc2hlZXQKLSAgICAv
LyBhcyB0ZXh0L2h0bWw7IHNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTE0NTE+KS4KLSAgICBzZXRBY2NlcHQoInRleHQvY3NzLCovKjtxPTAuMSIpOwotfQotCi1D
YWNoZWRDU1NTdHlsZVNoZWV0Ojp+Q2FjaGVkQ1NTU3R5bGVTaGVldCgpCi17Ci0gICAgaWYgKG1f
cGFyc2VkU3R5bGVTaGVldENhY2hlKQotICAgICAgICBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+
cmVtb3ZlZEZyb21NZW1vcnlDYWNoZSgpOwotfQotCi12b2lkIENhY2hlZENTU1N0eWxlU2hlZXQ6
OmRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCogYykKLXsKLSAgICBBU1NFUlQoYy0+
cmVzb3VyY2VDbGllbnRUeXBlKCkgPT0gQ2FjaGVkU3R5bGVTaGVldENsaWVudDo6ZXhwZWN0ZWRU
eXBlKCkpOwotICAgIC8vIENhY2hlZFJlc291cmNlOjpkaWRBZGRDbGllbnQoKSBtdXN0IGJlIGJl
Zm9yZSBzZXRDU1NTdHlsZVNoZWV0KCksCi0gICAgLy8gYmVjYXVzZSBzZXRDU1NTdHlsZVNoZWV0
KCkgbWF5IGNhdXNlIHNjcmlwdHMgdG8gYmUgZXhlY3V0ZWQsIHdoaWNoIGNvdWxkIGRlc3Ryb3kg
J2MnIGlmIGl0IGlzIGFuIGluc3RhbmNlIG9mIEhUTUxMaW5rRWxlbWVudC4KLSAgICAvLyBzZWUg
dGhlIGNvbW1lbnQgb2YgSFRNTExpbmtFbGVtZW50OjpzZXRDU1NTdHlsZVNoZWV0LgotICAgIENh
Y2hlZFJlc291cmNlOjpkaWRBZGRDbGllbnQoYyk7Ci0KLSAgICBpZiAoIWlzTG9hZGluZygpKQot
ICAgICAgICBzdGF0aWNfY2FzdDxDYWNoZWRTdHlsZVNoZWV0Q2xpZW50Kj4oYyktPnNldENTU1N0
eWxlU2hlZXQobV9yZXNvdXJjZVJlcXVlc3QudXJsKCksIG1fcmVzcG9uc2UudXJsKCksIG1fZGVj
b2Rlci0+ZW5jb2RpbmcoKS5uYW1lKCksIHRoaXMpOwotfQotCi12b2lkIENhY2hlZENTU1N0eWxl
U2hlZXQ6OnNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYgY2hzKQotewotICAgIG1fZGVjb2Rlci0+
c2V0RW5jb2RpbmcoY2hzLCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpFbmNvZGluZ0Zyb21IVFRQSGVh
ZGVyKTsKLX0KLQotU3RyaW5nIENhY2hlZENTU1N0eWxlU2hlZXQ6OmVuY29kaW5nKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9kZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKTsKLX0KLSAgICAKLWNv
bnN0IFN0cmluZyBDYWNoZWRDU1NTdHlsZVNoZWV0OjpzaGVldFRleHQoTUlNRVR5cGVDaGVjayBt
aW1lVHlwZUNoZWNrLCBib29sKiBoYXNWYWxpZE1JTUVUeXBlKSBjb25zdAoteyAKLSAgICBpZiAo
IW1fZGF0YSB8fCBtX2RhdGEtPmlzRW1wdHkoKSB8fCAhY2FuVXNlU2hlZXQobWltZVR5cGVDaGVj
aywgaGFzVmFsaWRNSU1FVHlwZSkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAKLSAg
ICBpZiAoIW1fZGVjb2RlZFNoZWV0VGV4dC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG1fZGVj
b2RlZFNoZWV0VGV4dDsKLSAgICAKLSAgICAvLyBEb24ndCBjYWNoZSB0aGUgZGVjb2RlZCB0ZXh0
LCByZWdlbmVyYXRpbmcgaXMgY2hlYXAgYW5kIGl0IGNhbiB1c2UgcXVpdGUgYSBiaXQgb2YgbWVt
b3J5Ci0gICAgcmV0dXJuIG1fZGVjb2Rlci0+ZGVjb2RlQW5kRmx1c2gobV9kYXRhLT5kYXRhKCks
IG1fZGF0YS0+c2l6ZSgpKTsKLX0KLQotdm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0OjpmaW5pc2hM
b2FkaW5nKFNoYXJlZEJ1ZmZlciogZGF0YSkKLXsKLSAgICBtX2RhdGEgPSBkYXRhOwotICAgIHNl
dEVuY29kZWRTaXplKGRhdGEgPyBkYXRhLT5zaXplKCkgOiAwKTsKLSAgICAvLyBEZWNvZGUgdGhl
IGRhdGEgdG8gZmluZCBvdXQgdGhlIGVuY29kaW5nIGFuZCBrZWVwIHRoZSBzaGVldCB0ZXh0IGFy
b3VuZCBkdXJpbmcgY2hlY2tOb3RpZnkoKQotICAgIGlmIChkYXRhKQotICAgICAgICBtX2RlY29k
ZWRTaGVldFRleHQgPSBtX2RlY29kZXItPmRlY29kZUFuZEZsdXNoKGRhdGEtPmRhdGEoKSwgZGF0
YS0+c2l6ZSgpKTsKLSAgICBzZXRMb2FkaW5nKGZhbHNlKTsKLSAgICBjaGVja05vdGlmeSgpOwot
ICAgIC8vIENsZWFyIHRoZSBkZWNvZGVkIHRleHQgYXMgaXQgaXMgdW5saWtlbHkgdG8gYmUgbmVl
ZGVkIGltbWVkaWF0ZWx5IGFnYWluIGFuZCBpcyBjaGVhcCB0byByZWdlbmVyYXRlLgotICAgIG1f
ZGVjb2RlZFNoZWV0VGV4dCA9IFN0cmluZygpOwotfQotCi12b2lkIENhY2hlZENTU1N0eWxlU2hl
ZXQ6OmNoZWNrTm90aWZ5KCkKLXsKLSAgICBpZiAoaXNMb2FkaW5nKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyPENhY2hlZFN0eWxlU2hlZXRDbGll
bnQ+IHcobV9jbGllbnRzKTsKLSAgICB3aGlsZSAoQ2FjaGVkU3R5bGVTaGVldENsaWVudCogYyA9
IHcubmV4dCgpKQotICAgICAgICBjLT5zZXRDU1NTdHlsZVNoZWV0KG1fcmVzb3VyY2VSZXF1ZXN0
LnVybCgpLCBtX3Jlc3BvbnNlLnVybCgpLCBtX2RlY29kZXItPmVuY29kaW5nKCkubmFtZSgpLCB0
aGlzKTsKLX0KLQotYm9vbCBDYWNoZWRDU1NTdHlsZVNoZWV0OjpjYW5Vc2VTaGVldChNSU1FVHlw
ZUNoZWNrIG1pbWVUeXBlQ2hlY2ssIGJvb2wqIGhhc1ZhbGlkTUlNRVR5cGUpIGNvbnN0Ci17Ci0g
ICAgaWYgKGVycm9yT2NjdXJyZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KG1pbWVUeXBlQ2hlY2sgPT0gTUlNRVR5cGVDaGVjazo6TGF4KQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIC8vIFRoaXMgY2hlY2sgZXhhY3RseSBtYXRjaGVzIEZpcmVmb3guICBOb3RlIHRo
YXQgd2UgZ3JhYiB0aGUgQ29udGVudC1UeXBlCi0gICAgLy8gaGVhZGVyIGRpcmVjdGx5IGJlY2F1
c2Ugd2Ugd2FudCB0byBzZWUgd2hhdCB0aGUgdmFsdWUgaXMgQkVGT1JFIGNvbnRlbnQKLSAgICAv
LyBzbmlmZmluZy4gIEZpcmVmb3ggZG9lcyB0aGlzIGJ5IHNldHRpbmcgYSAidHlwZSBoaW50IiBv
biB0aGUgY2hhbm5lbC4KLSAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIHNob3VsZCBiZSBvYnNl
cnZhdGlvbmFsbHkgZXF1aXZhbGVudC4KLSAgICAvLwotICAgIC8vIFRoaXMgY29kZSBkZWZhdWx0
cyB0byBhbGxvd2luZyB0aGUgc3R5bGVzaGVldCBmb3Igbm9uLUhUVFAgcHJvdG9jb2xzIHNvCi0g
ICAgLy8gZm9sa3MgY2FuIHVzZSBzdGFuZGFyZHMgbW9kZSBmb3IgbG9jYWwgSFRNTCBkb2N1bWVu
dHMuCi0gICAgU3RyaW5nIG1pbWVUeXBlID0gZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShy
ZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5cGUpKTsK
LSAgICBib29sIHR5cGVPSyA9IG1pbWVUeXBlLmlzRW1wdHkoKSB8fCBlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgInRleHQvY3NzIikgfHwgZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UobWltZVR5cGUsICJhcHBsaWNhdGlvbi94LXVua25vd24tY29udGVudC10eXBl
Iik7Ci0gICAgaWYgKGhhc1ZhbGlkTUlNRVR5cGUpCi0gICAgICAgICpoYXNWYWxpZE1JTUVUeXBl
ID0gdHlwZU9LOwotICAgIHJldHVybiB0eXBlT0s7Ci19Ci0KLXZvaWQgQ2FjaGVkQ1NTU3R5bGVT
aGVldDo6ZGVzdHJveURlY29kZWREYXRhKCkKLXsKLSAgICBpZiAoIW1fcGFyc2VkU3R5bGVTaGVl
dENhY2hlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+
cmVtb3ZlZEZyb21NZW1vcnlDYWNoZSgpOwotICAgIG1fcGFyc2VkU3R5bGVTaGVldENhY2hlID0g
bnVsbHB0cjsKLQotICAgIHNldERlY29kZWRTaXplKDApOwotfQotCi1QYXNzUmVmUHRyPFN0eWxl
U2hlZXRDb250ZW50cz4gQ2FjaGVkQ1NTU3R5bGVTaGVldDo6cmVzdG9yZVBhcnNlZFN0eWxlU2hl
ZXQoY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgQ2FjaGVQb2xpY3kgY2FjaGVQb2xp
Y3kpCi17Ci0gICAgaWYgKCFtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgaWYgKCFtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+c3VicmVzb3VyY2Vz
QWxsb3dSZXVzZShjYWNoZVBvbGljeSkpIHsKLSAgICAgICAgbV9wYXJzZWRTdHlsZVNoZWV0Q2Fj
aGUtPnJlbW92ZWRGcm9tTWVtb3J5Q2FjaGUoKTsKLSAgICAgICAgbV9wYXJzZWRTdHlsZVNoZWV0
Q2FjaGUgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBB
U1NFUlQobV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUtPmlzQ2FjaGVhYmxlKCkpOwotICAgIEFTU0VS
VChtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+aXNJbk1lbW9yeUNhY2hlKCkpOwotCi0gICAgLy8g
Q29udGV4dHMgbXVzdCBiZSBpZGVudGljYWwgc28gd2Uga25vdyB3ZSB3b3VsZCBnZXQgdGhlIHNh
bWUgZXhhY3QgcmVzdWx0IGlmIHdlIHBhcnNlZCBhZ2Fpbi4KLSAgICBpZiAobV9wYXJzZWRTdHls
ZVNoZWV0Q2FjaGUtPnBhcnNlckNvbnRleHQoKSAhPSBjb250ZXh0KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGRpZEFjY2Vzc0RlY29kZWREYXRhKG1vbm90b25pY2FsbHlJbmNyZWFz
aW5nVGltZSgpKTsKLQotICAgIHJldHVybiBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZTsKLX0KLQot
dm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0OjpzYXZlUGFyc2VkU3R5bGVTaGVldChSZWY8U3R5bGVT
aGVldENvbnRlbnRzPiYmIHNoZWV0KQotewotICAgIEFTU0VSVChzaGVldC5nZXQoKS5pc0NhY2hl
YWJsZSgpKTsKLQotICAgIGlmIChtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZSkKLSAgICAgICAgbV9w
YXJzZWRTdHlsZVNoZWV0Q2FjaGUtPnJlbW92ZWRGcm9tTWVtb3J5Q2FjaGUoKTsKLSAgICBtX3Bh
cnNlZFN0eWxlU2hlZXRDYWNoZSA9IFdURk1vdmUoc2hlZXQpOwotICAgIG1fcGFyc2VkU3R5bGVT
aGVldENhY2hlLT5hZGRlZFRvTWVtb3J5Q2FjaGUoKTsKLQotICAgIHNldERlY29kZWRTaXplKG1f
cGFyc2VkU3R5bGVTaGVldENhY2hlLT5lc3RpbWF0ZWRTaXplSW5CeXRlcygpKTsKLX0KLQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hl
ZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0MmE4ZmZlZTYwYjYwOWUxOWU4ZjBhMDI2
NjQxMGI2NzkxZTJjZGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuaAor
KysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAxOTk4
IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAx
IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgotICAgIENvcHlyaWdodCAoQykgMjAwNiBT
YW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKLSAgICBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LQotICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBs
b2FkaW5nIGltYWdlcywgc3R5bGUgc2hlZXRzIGFuZCBodG1sCi0gICAgcGFnZXMgZnJvbSB0aGUg
d2ViLiBJdCBoYXMgYSBtZW1vcnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCi0qLwotCi0jaWZu
ZGVmIENhY2hlZENTU1N0eWxlU2hlZXRfaAotI2RlZmluZSBDYWNoZWRDU1NTdHlsZVNoZWV0X2gK
LQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
ICAgIGNsYXNzIENhY2hlZFJlc291cmNlQ2xpZW50OwotICAgIGNsYXNzIFN0eWxlU2hlZXRDb250
ZW50czsKLSAgICBjbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyOwotICAgIHN0cnVjdCBDU1NQYXJz
ZXJDb250ZXh0OwotCi0gICAgY2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVldCBmaW5hbCA6IHB1Ymxp
YyBDYWNoZWRSZXNvdXJjZSB7Ci0gICAgcHVibGljOgotICAgICAgICBDYWNoZWRDU1NTdHlsZVNo
ZWV0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgU2Vzc2lv
bklEKTsKLSAgICAgICAgdmlydHVhbCB+Q2FjaGVkQ1NTU3R5bGVTaGVldCgpOwotCi0gICAgICAg
IGVudW0gY2xhc3MgTUlNRVR5cGVDaGVjayB7IFN0cmljdCwgTGF4IH07Ci0gICAgICAgIGNvbnN0
IFN0cmluZyBzaGVldFRleHQoTUlNRVR5cGVDaGVjayA9IE1JTUVUeXBlQ2hlY2s6OlN0cmljdCwg
Ym9vbCogaGFzVmFsaWRNSU1FVHlwZSA9IG51bGxwdHIpIGNvbnN0OwotCi0gICAgICAgIFBhc3NS
ZWZQdHI8U3R5bGVTaGVldENvbnRlbnRzPiByZXN0b3JlUGFyc2VkU3R5bGVTaGVldChjb25zdCBD
U1NQYXJzZXJDb250ZXh0JiwgQ2FjaGVQb2xpY3kpOwotICAgICAgICB2b2lkIHNhdmVQYXJzZWRT
dHlsZVNoZWV0KFJlZjxTdHlsZVNoZWV0Q29udGVudHM+JiYpOwotCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgYm9vbCBjYW5Vc2VTaGVldChNSU1FVHlwZUNoZWNrLCBib29sKiBoYXNWYWxpZE1JTUVU
eXBlKSBjb25zdDsKLSAgICAgICAgYm9vbCBtYXlUcnlSZXBsYWNlRW5jb2RlZERhdGEoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAgICAgdm9pZCBkaWRBZGRDbGllbnQo
Q2FjaGVkUmVzb3VyY2VDbGllbnQqKSBvdmVycmlkZTsKLQotICAgICAgICB2b2lkIHNldEVuY29k
aW5nKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotICAgICAgICBTdHJpbmcgZW5jb2RpbmcoKSBj
b25zdCBvdmVycmlkZTsKLSAgICAgICAgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogdGV4dFJl
c291cmNlRGVjb2RlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVjb2Rlci5nZXQoKTsg
fQotICAgICAgICB2b2lkIGZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKikgb3ZlcnJpZGU7Ci0g
ICAgICAgIHZvaWQgZGVzdHJveURlY29kZWREYXRhKCkgb3ZlcnJpZGU7Ci0KLSAgICBwcm90ZWN0
ZWQ6Ci0gICAgICAgIHZvaWQgY2hlY2tOb3RpZnkoKSBvdmVycmlkZTsKLQotICAgICAgICBSZWZQ
dHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOwotICAgICAgICBTdHJpbmcgbV9kZWNv
ZGVkU2hlZXRUZXh0OwotCi0gICAgICAgIFJlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+IG1fcGFy
c2VkU3R5bGVTaGVldENhY2hlOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUNIRURfUkVTT1VSQ0UoQ2FjaGVkQ1NTU3R5bGVTaGVl
dCwgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQpCi0KLSNlbmRpZiAvLyBDYWNoZWRDU1NT
dHlsZVNoZWV0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRGb250LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZjYjQxYzMyOTJmMWY5N2FjMWI0ZDNjMTk5
OGRkZDU0MWZhMWZiNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgVG9yY2ggTW9iaWxlLCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2FjaGVkRm9udC5oIgot
Ci0jaW5jbHVkZSAiQ2FjaGVkRm9udENsaWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
Q2xpZW50V2Fsa2VyLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKLSNpbmNs
dWRlICJGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgiCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9u
LmgiCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotI2luY2x1ZGUgIk1lbW9yeUNhY2hl
LmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSAiVGV4dFJlc291cmNlRGVj
b2Rlci5oIgotI2luY2x1ZGUgIlR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oIgotI2lu
Y2x1ZGUgIldPRkZGaWxlRm9ybWF0LmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLUNhY2hlZEZvbnQ6OkNhY2hlZEZvbnQoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIFNlc3Npb25JRCBzZXNzaW9uSUQsIFR5cGUgdHlwZSkK
LSAgICA6IENhY2hlZFJlc291cmNlKHJlc291cmNlUmVxdWVzdCwgdHlwZSwgc2Vzc2lvbklEKQot
ICAgICwgbV9sb2FkSW5pdGlhdGVkKGZhbHNlKQotICAgICwgbV9oYXNDcmVhdGVkRm9udERhdGFX
cmFwcGluZ1Jlc291cmNlKGZhbHNlKQotewotfQotCi1DYWNoZWRGb250Ojp+Q2FjaGVkRm9udCgp
Ci17Ci19Ci0KLXZvaWQgQ2FjaGVkRm9udDo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciYsIGNv
bnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICAvLyBEb24ndCBsb2Fk
IHRoZSBmaWxlIHlldC4gIFdhaXQgZm9yIGFuIGFjY2VzcyBiZWZvcmUgdHJpZ2dlcmluZyB0aGUg
bG9hZC4KLSAgICBzZXRMb2FkaW5nKHRydWUpOwotICAgIG1fb3B0aW9ucyA9IG9wdGlvbnM7Ci19
Ci0KLXZvaWQgQ2FjaGVkRm9udDo6ZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50KiBj
bGllbnQpCi17Ci0gICAgQVNTRVJUKGNsaWVudC0+cmVzb3VyY2VDbGllbnRUeXBlKCkgPT0gQ2Fj
aGVkRm9udENsaWVudDo6ZXhwZWN0ZWRUeXBlKCkpOwotICAgIGlmICghaXNMb2FkaW5nKCkpCi0g
ICAgICAgIHN0YXRpY19jYXN0PENhY2hlZEZvbnRDbGllbnQqPihjbGllbnQpLT5mb250TG9hZGVk
KCp0aGlzKTsKLX0KLQotdm9pZCBDYWNoZWRGb250OjpmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1ZmZl
ciogZGF0YSkKLXsKLSAgICBtX2RhdGEgPSBkYXRhOwotICAgIHNldEVuY29kZWRTaXplKG1fZGF0
YS5nZXQoKSA/IG1fZGF0YS0+c2l6ZSgpIDogMCk7Ci0gICAgc2V0TG9hZGluZyhmYWxzZSk7Ci0g
ICAgY2hlY2tOb3RpZnkoKTsKLX0KLQotdm9pZCBDYWNoZWRGb250OjpiZWdpbkxvYWRJZk5lZWRl
ZChDYWNoZWRSZXNvdXJjZUxvYWRlciYgbG9hZGVyKQotewotICAgIGlmICghbV9sb2FkSW5pdGlh
dGVkKSB7Ci0gICAgICAgIG1fbG9hZEluaXRpYXRlZCA9IHRydWU7Ci0gICAgICAgIENhY2hlZFJl
c291cmNlOjpsb2FkKGxvYWRlciwgbV9vcHRpb25zKTsKLSAgICB9Ci19Ci0KLWJvb2wgQ2FjaGVk
Rm9udDo6ZW5zdXJlQ3VzdG9tRm9udERhdGEoY29uc3QgQXRvbWljU3RyaW5nJikKLXsKLSAgICBy
ZXR1cm4gZW5zdXJlQ3VzdG9tRm9udERhdGEobV9kYXRhLmdldCgpKTsKLX0KLQotYm9vbCBDYWNo
ZWRGb250OjplbnN1cmVDdXN0b21Gb250RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEpCi17Ci0gICAg
aWYgKCFtX2ZvbnRDdXN0b21QbGF0Zm9ybURhdGEgJiYgIWVycm9yT2NjdXJyZWQoKSAmJiAhaXNM
b2FkaW5nKCkgJiYgZGF0YSkgewotICAgICAgICBib29sIHdyYXBwaW5nOwotICAgICAgICBtX2Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEgPSBjcmVhdGVDdXN0b21Gb250RGF0YSgqZGF0YSwgd3JhcHBp
bmcpOwotICAgICAgICBtX2hhc0NyZWF0ZWRGb250RGF0YVdyYXBwaW5nUmVzb3VyY2UgPSBtX2Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEgJiYgd3JhcHBpbmc7Ci0gICAgICAgIGlmICghbV9mb250Q3Vz
dG9tUGxhdGZvcm1EYXRhKQotICAgICAgICAgICAgc2V0U3RhdHVzKERlY29kZUVycm9yKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhLmdldCgpOwotfQotCi1z
dGQ6OnVuaXF1ZV9wdHI8Rm9udEN1c3RvbVBsYXRmb3JtRGF0YT4gQ2FjaGVkRm9udDo6Y3JlYXRl
Q3VzdG9tRm9udERhdGEoU2hhcmVkQnVmZmVyJiBieXRlcywgYm9vbCYgd3JhcHBpbmcpCi17Ci0g
ICAgd3JhcHBpbmcgPSB0cnVlOwotCi0jaWYgIVBMQVRGT1JNKENPQ09BKQotICAgIGlmIChpc1dP
RkYoYnl0ZXMpKSB7Ci0gICAgICAgIHdyYXBwaW5nID0gZmFsc2U7Ci0gICAgICAgIFZlY3Rvcjxj
aGFyPiBjb252ZXJ0ZWRGb250OwotICAgICAgICBpZiAoIWNvbnZlcnRXT0ZGVG9TZm50KGJ5dGVz
LCBjb252ZXJ0ZWRGb250KSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAg
IGF1dG8gYnVmZmVyID0gU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcihjb252ZXJ0ZWRGb250KTsK
LSAgICAgICAgcmV0dXJuIGNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEoYnVmZmVyKTsKLSAg
ICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKGJ5
dGVzKTsKLX0KLQotUmVmUHRyPEZvbnQ+IENhY2hlZEZvbnQ6OmNyZWF0ZUZvbnQoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYsIGJvb2wg
c3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMsIGNvbnN0IEZvbnRGZWF0dXJlU2V0
dGluZ3MmIGZvbnRGYWNlRmVhdHVyZXMsIGNvbnN0IEZvbnRWYXJpYW50U2V0dGluZ3MmIGZvbnRG
YWNlVmFyaWFudFNldHRpbmdzKQotewotICAgIHJldHVybiBGb250OjpjcmVhdGUocGxhdGZvcm1E
YXRhRnJvbUN1c3RvbURhdGEoZm9udERlc2NyaXB0aW9uLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0
aWNJdGFsaWMsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlVmFyaWFudFNldHRpbmdzKSwgdHJ1
ZSk7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGEgQ2FjaGVkRm9udDo6cGxhdGZvcm1EYXRhRnJvbUN1
c3RvbURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGJvb2wgYm9s
ZCwgYm9vbCBpdGFsaWMsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MmIGZvbnRGYWNlRmVhdHVy
ZXMsIGNvbnN0IEZvbnRWYXJpYW50U2V0dGluZ3MmIGZvbnRGYWNlVmFyaWFudFNldHRpbmdzKQot
ewotICAgIEFTU0VSVChtX2ZvbnRDdXN0b21QbGF0Zm9ybURhdGEpOwotICAgIHJldHVybiBwbGF0
Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YSgqbV9mb250Q3VzdG9tUGxhdGZvcm1EYXRhLCBmb250RGVz
Y3JpcHRpb24sIGJvbGQsIGl0YWxpYywgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VWYXJpYW50
U2V0dGluZ3MpOwotfQotCi1Gb250UGxhdGZvcm1EYXRhIENhY2hlZEZvbnQ6OnBsYXRmb3JtRGF0
YUZyb21DdXN0b21EYXRhKEZvbnRDdXN0b21QbGF0Zm9ybURhdGEmIGZvbnRDdXN0b21QbGF0Zm9y
bURhdGEsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBib29sIGJvbGQs
IGJvb2wgaXRhbGljLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzJiBmb250RmFjZUZlYXR1cmVz
LCBjb25zdCBGb250VmFyaWFudFNldHRpbmdzJiBmb250RmFjZVZhcmlhbnRTZXR0aW5ncykKLXsK
LSNpZiBQTEFURk9STShDT0NPQSkKLSAgICByZXR1cm4gZm9udEN1c3RvbVBsYXRmb3JtRGF0YS5m
b250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgYm9sZCwgaXRhbGljLCBmb250RmFjZUZl
YXR1cmVzLCBmb250RmFjZVZhcmlhbnRTZXR0aW5ncyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJB
TShmb250RmFjZUZlYXR1cmVzKTsKLSAgICBVTlVTRURfUEFSQU0oZm9udEZhY2VWYXJpYW50U2V0
dGluZ3MpOwotICAgIHJldHVybiBmb250Q3VzdG9tUGxhdGZvcm1EYXRhLmZvbnRQbGF0Zm9ybURh
dGEoZm9udERlc2NyaXB0aW9uLCBib2xkLCBpdGFsaWMpOwotI2VuZGlmCi19Ci0KLXZvaWQgQ2Fj
aGVkRm9udDo6YWxsQ2xpZW50c1JlbW92ZWQoKQotewotICAgIG1fZm9udEN1c3RvbVBsYXRmb3Jt
RGF0YSA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgQ2FjaGVkRm9udDo6Y2hlY2tOb3RpZnkoKQotewot
ICAgIGlmIChpc0xvYWRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIENhY2hlZFJl
c291cmNlQ2xpZW50V2Fsa2VyPENhY2hlZEZvbnRDbGllbnQ+IHdhbGtlcihtX2NsaWVudHMpOwot
ICAgIHdoaWxlIChDYWNoZWRGb250Q2xpZW50KiBjbGllbnQgPSB3YWxrZXIubmV4dCgpKQotICAg
ICAgICBjbGllbnQtPmZvbnRMb2FkZWQoKnRoaXMpOwotfQotCi1ib29sIENhY2hlZEZvbnQ6Om1h
eVRyeVJlcGxhY2VFbmNvZGVkRGF0YSgpIGNvbnN0Ci17Ci0gICAgLy8gSWYgYSBGb250Q3VzdG9t
UGxhdGZvcm1EYXRhIGhhcyBldmVyIGJlZW4gY29uc3RydWN0ZWQgdG8gd3JhcCB0aGUgaW50ZXJu
YWwgcmVzb3VyY2UgYnVmZmVyIHRoZW4gaXQgc3RpbGwgbWlnaHQgYmUgaW4gdXNlIHNvbWV3aGVy
ZS4KLSAgICAvLyBUaGF0IHBsYXRmb3JtIGZvbnQgb2JqZWN0IG1pZ2h0IGRpcmVjdGx5IHJlZmVy
ZW5jZSB0aGUgZW5jb2RlZCBkYXRhIGJ1ZmZlciBiZWhpbmQgdGhpcyBDYWNoZWRGb250LAotICAg
IC8vIHNvIHJlcGxhY2luZyBpdCBpcyB1bnNhZmUuCi0KLSAgICByZXR1cm4gIW1faGFzQ3JlYXRl
ZEZvbnREYXRhV3JhcHBpbmdSZXNvdXJjZTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRGb250LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1OGM5ZTA5
NWM0OWZlZmUyMTdhM2E2N2IwMDZmNWY1NDUxYWMwYzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZEZvbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDYWNoZWRGb250X2gK
LSNkZWZpbmUgQ2FjaGVkRm9udF9oCi0KLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgotI2lu
Y2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1
ZGUgIlRleHRGbGFncy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENhY2hlZFJl
c291cmNlTG9hZGVyOwotY2xhc3MgRm9udERlc2NyaXB0aW9uOwotY2xhc3MgRm9udEZlYXR1cmVT
ZXR0aW5nczsKLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7Ci1jbGFzcyBTVkdEb2N1bWVudDsKLWNs
YXNzIFNWR0ZvbnRFbGVtZW50Owotc3RydWN0IEZvbnRDdXN0b21QbGF0Zm9ybURhdGE7Ci0KLWNs
YXNzIENhY2hlZEZvbnQgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2UgewotcHVibGljOgotICAgIENh
Y2hlZEZvbnQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2Vzc2lvbklELCBUeXBlID0gRm9udFJl
c291cmNlKTsKLSAgICB2aXJ0dWFsIH5DYWNoZWRGb250KCk7Ci0KLSAgICB2b2lkIGJlZ2luTG9h
ZElmTmVlZGVkKENhY2hlZFJlc291cmNlTG9hZGVyJik7Ci0gICAgYm9vbCBzdGlsbE5lZWRzTG9h
ZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICFtX2xvYWRJbml0aWF0ZWQ7IH0KLQotICAgIHZp
cnR1YWwgYm9vbCBlbnN1cmVDdXN0b21Gb250RGF0YShjb25zdCBBdG9taWNTdHJpbmcmIHJlbW90
ZVVSSSk7Ci0KLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEZvbnRDdXN0b21QbGF0Zm9ybURh
dGE+IGNyZWF0ZUN1c3RvbUZvbnREYXRhKFNoYXJlZEJ1ZmZlciYsIGJvb2wmIHdyYXBwaW5nKTsK
LSAgICBzdGF0aWMgRm9udFBsYXRmb3JtRGF0YSBwbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShG
b250Q3VzdG9tUGxhdGZvcm1EYXRhJiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBib2xk
LCBib29sIGl0YWxpYywgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyYsIGNvbnN0IEZvbnRWYXJp
YW50U2V0dGluZ3MmKTsKLQotICAgIHZpcnR1YWwgUmVmUHRyPEZvbnQ+IGNyZWF0ZUZvbnQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiByZW1vdGVVUkksIGJvb2wg
c3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMsIGNvbnN0IEZvbnRGZWF0dXJlU2V0
dGluZ3MmLCBjb25zdCBGb250VmFyaWFudFNldHRpbmdzJik7Ci0KLXByb3RlY3RlZDoKLSAgICBG
b250UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGlu
Z3MmLCBjb25zdCBGb250VmFyaWFudFNldHRpbmdzJik7Ci0KLSAgICBib29sIGVuc3VyZUN1c3Rv
bUZvbnREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjaGVj
a05vdGlmeSgpIG92ZXJyaWRlOwotICAgIGJvb2wgbWF5VHJ5UmVwbGFjZUVuY29kZWREYXRhKCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXImLCBj
b25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGlkQWRk
Q2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaW5pc2hM
b2FkaW5nKFNoYXJlZEJ1ZmZlciopIG92ZXJyaWRlOwotCi0gICAgdm9pZCBhbGxDbGllbnRzUmVt
b3ZlZCgpIG92ZXJyaWRlOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEZvbnRDdXN0b21QbGF0Zm9y
bURhdGE+IG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0YTsKLSAgICBib29sIG1fbG9hZEluaXRpYXRl
ZDsKLSAgICBib29sIG1faGFzQ3JlYXRlZEZvbnREYXRhV3JhcHBpbmdSZXNvdXJjZTsKLQotICAg
IGZyaWVuZCBjbGFzcyBNZW1vcnlDYWNoZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUNIRURfUkVTT1VSQ0UoQ2FjaGVkRm9udCwgQ2Fj
aGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZSkKLQotI2VuZGlmIC8vIENhY2hlZEZvbnRfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnRDbGllbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250Q2xpZW50LmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5MzI0MWE2MGY0MDFlM2FiNTcxMTcyZjFjOWI5MWJmYmYx
MWViNTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnRDbGllbnQuaAorKysgL2Rldi9udWxs
CkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENhY2hlZEZvbnRDbGllbnRf
aAotI2RlZmluZSBDYWNoZWRGb250Q2xpZW50X2gKLQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
Q2xpZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ2FjaGVkRm9udDsKLQot
Y2xhc3MgQ2FjaGVkRm9udENsaWVudCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7Ci1w
dWJsaWM6Ci0gICAgdmlydHVhbCB+Q2FjaGVkRm9udENsaWVudCgpIHsgfQotICAgIHN0YXRpYyBD
YWNoZWRSZXNvdXJjZUNsaWVudFR5cGUgZXhwZWN0ZWRUeXBlKCkgeyByZXR1cm4gRm9udFR5cGU7
IH0KLSAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFR5cGUgcmVzb3VyY2VDbGllbnRUeXBlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gZXhwZWN0ZWRUeXBlKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
Zm9udExvYWRlZChDYWNoZWRGb250JikgeyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBDYWNoZWRGb250Q2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWQw
ZWQ3YmIxMWViYjBhYjA1OWE5YjY0YjRhN2E2OWRkZGIyMjE1Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRJbWFnZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NDEgKzAsMCBAQAotLyoKLSAgICBD
b3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBD
b3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gICAgQ29w
eXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKLSAgICBDb3B5
cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gICAg
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2FjaGVkSW1h
Z2UuaCIKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2VD
bGllbnQuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgotI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5j
bHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgi
Ci0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKLSNpbmNs
dWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0lt
YWdlLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5o
IgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVy
LmgiCi0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi0jaWYgUExBVEZPUk0o
SU9TKQotI2luY2x1ZGUgIlN5c3RlbU1lbW9yeS5oIgotI2VuZGlmCi0KLSNpZiBVU0UoQ0cpCi0j
aW5jbHVkZSAiUERGRG9jdW1lbnRJbWFnZS5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotQ2FjaGVkSW1hZ2U6OkNhY2hlZEltYWdlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVz
b3VyY2VSZXF1ZXN0LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQotICAgIDogQ2FjaGVkUmVzb3VyY2Uo
cmVzb3VyY2VSZXF1ZXN0LCBJbWFnZVJlc291cmNlLCBzZXNzaW9uSUQpCi0gICAgLCBtX2ltYWdl
KG51bGxwdHIpCi0gICAgLCBtX2lzTWFudWFsbHlDYWNoZWQoZmFsc2UpCi0gICAgLCBtX3Nob3Vs
ZFBhaW50QnJva2VuSW1hZ2UodHJ1ZSkKLXsKLSAgICBzZXRTdGF0dXMoVW5rbm93bik7Ci19Ci0K
LUNhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShJbWFnZSogaW1hZ2UsIFNlc3Npb25JRCBzZXNzaW9u
SUQpCi0gICAgOiBDYWNoZWRSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3QoKSwgSW1hZ2VSZXNvdXJj
ZSwgc2Vzc2lvbklEKQotICAgICwgbV9pbWFnZShpbWFnZSkKLSAgICAsIG1faXNNYW51YWxseUNh
Y2hlZChmYWxzZSkKLSAgICAsIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSh0cnVlKQotewotICAg
IHNldFN0YXR1cyhDYWNoZWQpOwotICAgIHNldExvYWRpbmcoZmFsc2UpOwotfQotCi1DYWNoZWRJ
bWFnZTo6Q2FjaGVkSW1hZ2UoY29uc3QgVVJMJiB1cmwsIEltYWdlKiBpbWFnZSwgU2Vzc2lvbklE
IHNlc3Npb25JRCkKLSAgICA6IENhY2hlZFJlc291cmNlKFJlc291cmNlUmVxdWVzdCh1cmwpLCBJ
bWFnZVJlc291cmNlLCBzZXNzaW9uSUQpCi0gICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwgbV9p
c01hbnVhbGx5Q2FjaGVkKGZhbHNlKQotICAgICwgbV9zaG91bGRQYWludEJyb2tlbkltYWdlKHRy
dWUpCi17Ci0gICAgc2V0U3RhdHVzKENhY2hlZCk7Ci0gICAgc2V0TG9hZGluZyhmYWxzZSk7Ci19
Ci0KLUNhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShjb25zdCBVUkwmIHVybCwgSW1hZ2UqIGltYWdl
LCBDYWNoZWRJbWFnZTo6Q2FjaGVCZWhhdmlvclR5cGUgdHlwZSwgU2Vzc2lvbklEIHNlc3Npb25J
RCkKLSAgICA6IENhY2hlZFJlc291cmNlKFJlc291cmNlUmVxdWVzdCh1cmwpLCBJbWFnZVJlc291
cmNlLCBzZXNzaW9uSUQpCi0gICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwgbV9pc01hbnVhbGx5
Q2FjaGVkKHR5cGUgPT0gQ2FjaGVkSW1hZ2U6Ok1hbnVhbGx5Q2FjaGVkKQotICAgICwgbV9zaG91
bGRQYWludEJyb2tlbkltYWdlKHRydWUpCi17Ci0gICAgc2V0U3RhdHVzKENhY2hlZCk7Ci0gICAg
c2V0TG9hZGluZyhmYWxzZSk7Ci0gICAgaWYgKFVOTElLRUxZKGlzTWFudWFsbHlDYWNoZWQoKSkp
IHsKLSAgICAgICAgLy8gVXNlIHRoZSBpbmNvbWluZyBVUkwgaW4gdGhlIHJlc3BvbnNlIGZpZWxk
LiBUaGlzIGVuc3VyZXMgdGhhdCBjb2RlCi0gICAgICAgIC8vIHVzaW5nIHRoZSByZXNwb25zZSBk
aXJlY3RseSwgc3VjaCBhcyBvcmlnaW4gY2hlY2tzIGZvciBzZWN1cml0eSwKLSAgICAgICAgLy8g
YWN0dWFsbHkgc2VlIHNvbWV0aGluZy4KLSAgICAgICAgbV9yZXNwb25zZS5zZXRVUkwodXJsKTsK
LSAgICB9Ci19Ci0KLUNhY2hlZEltYWdlOjp+Q2FjaGVkSW1hZ2UoKQotewotICAgIGNsZWFySW1h
Z2UoKTsKLX0KLQotdm9pZCBDYWNoZWRJbWFnZTo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciYg
Y2FjaGVkUmVzb3VyY2VMb2FkZXIsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9u
cykKLXsKLSAgICBpZiAoY2FjaGVkUmVzb3VyY2VMb2FkZXIuc2hvdWxkUGVyZm9ybUltYWdlTG9h
ZCh1cmwoKSkpCi0gICAgICAgIENhY2hlZFJlc291cmNlOjpsb2FkKGNhY2hlZFJlc291cmNlTG9h
ZGVyLCBvcHRpb25zKTsKLSAgICBlbHNlCi0gICAgICAgIHNldExvYWRpbmcoZmFsc2UpOwotfQot
Ci12b2lkIENhY2hlZEltYWdlOjpzZXRCb2R5RGF0YUZyb20oY29uc3QgQ2FjaGVkUmVzb3VyY2Um
IHJlc291cmNlKQotewotICAgIEFTU0VSVChyZXNvdXJjZS50eXBlKCkgPT0gdHlwZSgpKTsKLSAg
ICBjb25zdCBDYWNoZWRJbWFnZSYgaW1hZ2UgPSBzdGF0aWNfY2FzdDxjb25zdCBDYWNoZWRJbWFn
ZSY+KHJlc291cmNlKTsKLQotICAgIHNldExvYWRpbmcoZmFsc2UpOwotICAgIG1faW1hZ2UgPSBp
bWFnZS5tX2ltYWdlOwotCi0gICAgaWYgKG1faW1hZ2UgJiYgaXM8U1ZHSW1hZ2U+KCptX2ltYWdl
KSkKLSAgICAgICAgbV9zdmdJbWFnZUNhY2hlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdJbWFnZUNh
Y2hlPigmZG93bmNhc3Q8U1ZHSW1hZ2U+KCptX2ltYWdlKSk7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1h
Z2U6OmRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50KQotewotICAgIGlm
IChtX2RhdGEgJiYgIW1faW1hZ2UgJiYgIWVycm9yT2NjdXJyZWQoKSkgewotICAgICAgICBjcmVh
dGVJbWFnZSgpOwotICAgICAgICBtX2ltYWdlLT5zZXREYXRhKG1fZGF0YS5jb3B5UmVmKCksIHRy
dWUpOwotICAgIH0KLQotICAgIEFTU0VSVChjbGllbnQtPnJlc291cmNlQ2xpZW50VHlwZSgpID09
IENhY2hlZEltYWdlQ2xpZW50OjpleHBlY3RlZFR5cGUoKSk7Ci0gICAgaWYgKG1faW1hZ2UgJiYg
IW1faW1hZ2UtPmlzTnVsbCgpKQotICAgICAgICBzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZUNsaWVu
dCo+KGNsaWVudCktPmltYWdlQ2hhbmdlZCh0aGlzKTsKLQotICAgIENhY2hlZFJlc291cmNlOjpk
aWRBZGRDbGllbnQoY2xpZW50KTsKLX0KLQotdm9pZCBDYWNoZWRJbWFnZTo6ZGlkUmVtb3ZlQ2xp
ZW50KENhY2hlZFJlc291cmNlQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgQVNTRVJUKGNsaWVudCk7
Ci0gICAgQVNTRVJUKGNsaWVudC0+cmVzb3VyY2VDbGllbnRUeXBlKCkgPT0gQ2FjaGVkSW1hZ2VD
bGllbnQ6OmV4cGVjdGVkVHlwZSgpKTsKLQotICAgIG1fcGVuZGluZ0NvbnRhaW5lclNpemVSZXF1
ZXN0cy5yZW1vdmUoc3RhdGljX2Nhc3Q8Q2FjaGVkSW1hZ2VDbGllbnQqPihjbGllbnQpKTsKLQot
ICAgIGlmIChtX3N2Z0ltYWdlQ2FjaGUpCi0gICAgICAgIG1fc3ZnSW1hZ2VDYWNoZS0+cmVtb3Zl
Q2xpZW50RnJvbUNhY2hlKHN0YXRpY19jYXN0PENhY2hlZEltYWdlQ2xpZW50Kj4oY2xpZW50KSk7
Ci0KLSAgICBDYWNoZWRSZXNvdXJjZTo6ZGlkUmVtb3ZlQ2xpZW50KGNsaWVudCk7Ci19Ci0KLXZv
aWQgQ2FjaGVkSW1hZ2U6OnN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UoKQotewot
ICAgIEFTU0VSVChpczxDYWNoZWRJbWFnZT4ocmVzb3VyY2VUb1JldmFsaWRhdGUoKSkpOwotICAg
IC8vIFBlbmRpbmcgY29udGFpbmVyIHNpemUgcmVxdWVzdHMgbmVlZCB0byBiZSB0cmFuc2ZlcnJl
ZCB0byB0aGUgcmV2YWxpZGF0ZWQgcmVzb3VyY2UuCi0gICAgaWYgKCFtX3BlbmRpbmdDb250YWlu
ZXJTaXplUmVxdWVzdHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIEEgY29weSBvZiBwZW5kaW5n
IHNpemUgcmVxdWVzdHMgaXMgbmVlZGVkIGFzIHRoZXkgYXJlIGRlbGV0ZWQgZHVyaW5nIENhY2hl
ZFJlc291cmNlOjpzd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlUmVzb3VjZSgpLgotICAgICAgICBD
b250YWluZXJTaXplUmVxdWVzdHMgc3dpdGNoQ29udGFpbmVyU2l6ZVJlcXVlc3RzOwotICAgICAg
ICBmb3IgKGF1dG8mIHJlcXVlc3QgOiBtX3BlbmRpbmdDb250YWluZXJTaXplUmVxdWVzdHMpCi0g
ICAgICAgICAgICBzd2l0Y2hDb250YWluZXJTaXplUmVxdWVzdHMuc2V0KHJlcXVlc3Qua2V5LCBy
ZXF1ZXN0LnZhbHVlKTsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2U6OnN3aXRjaENsaWVudHNUb1Jl
dmFsaWRhdGVkUmVzb3VyY2UoKTsKLSAgICAgICAgQ2FjaGVkSW1hZ2UmIHJldmFsaWRhdGVkQ2Fj
aGVkSW1hZ2UgPSBkb3duY2FzdDxDYWNoZWRJbWFnZT4oKnJlc291cmNlVG9SZXZhbGlkYXRlKCkp
OwotICAgICAgICBmb3IgKGF1dG8mIHJlcXVlc3QgOiBzd2l0Y2hDb250YWluZXJTaXplUmVxdWVz
dHMpCi0gICAgICAgICAgICByZXZhbGlkYXRlZENhY2hlZEltYWdlLnNldENvbnRhaW5lclNpemVG
b3JSZW5kZXJlcihyZXF1ZXN0LmtleSwgcmVxdWVzdC52YWx1ZS5maXJzdCwgcmVxdWVzdC52YWx1
ZS5zZWNvbmQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ2FjaGVkUmVzb3VyY2U6
OnN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UoKTsKLX0KLQotdm9pZCBDYWNoZWRJ
bWFnZTo6YWxsQ2xpZW50c1JlbW92ZWQoKQotewotICAgIG1fcGVuZGluZ0NvbnRhaW5lclNpemVS
ZXF1ZXN0cy5jbGVhcigpOwotICAgIGlmIChtX2ltYWdlICYmICFlcnJvck9jY3VycmVkKCkpCi0g
ICAgICAgIG1faW1hZ2UtPnJlc2V0QW5pbWF0aW9uKCk7Ci19Ci0KLXN0ZDo6cGFpcjxJbWFnZSos
IGZsb2F0PiBDYWNoZWRJbWFnZTo6YnJva2VuSW1hZ2UoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3Ip
IGNvbnN0Ci17Ci0gICAgaWYgKGRldmljZVNjYWxlRmFjdG9yID49IDMpIHsKLSAgICAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gYnJva2VuSW1hZ2VWZXJ5SGlSZXMoSW1hZ2U6Omxv
YWRQbGF0Zm9ybVJlc291cmNlKCJtaXNzaW5nSW1hZ2VAM3giKS5sZWFrUmVmKCkpOwotICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3BhaXIoYnJva2VuSW1hZ2VWZXJ5SGlSZXMsIDMpOwotICAgIH0K
LQotICAgIGlmIChkZXZpY2VTY2FsZUZhY3RvciA+PSAyKSB7Ci0gICAgICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxJbWFnZSo+IGJyb2tlbkltYWdlSGlSZXMoSW1hZ2U6OmxvYWRQbGF0Zm9ybVJl
c291cmNlKCJtaXNzaW5nSW1hZ2VAMngiKS5sZWFrUmVmKCkpOwotICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3BhaXIoYnJva2VuSW1hZ2VIaVJlcywgMik7Ci0gICAgfQotCi0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEltYWdlKj4gYnJva2VuSW1hZ2VMb1JlcyhJbWFnZTo6bG9hZFBsYXRmb3Jt
UmVzb3VyY2UoIm1pc3NpbmdJbWFnZSIpLmxlYWtSZWYoKSk7Ci0gICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKGJyb2tlbkltYWdlTG9SZXMsIDEpOwotfQotCi1ib29sIENhY2hlZEltYWdlOjp3aWxs
UGFpbnRCcm9rZW5JbWFnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGVycm9yT2NjdXJyZWQoKSAm
JiBtX3Nob3VsZFBhaW50QnJva2VuSW1hZ2U7Ci19Ci0KLUltYWdlKiBDYWNoZWRJbWFnZTo6aW1h
Z2UoKQotewotICAgIGlmIChlcnJvck9jY3VycmVkKCkgJiYgbV9zaG91bGRQYWludEJyb2tlbklt
YWdlKSB7Ci0gICAgICAgIC8vIFJldHVybmluZyB0aGUgMXggYnJva2VuIGltYWdlIGlzIG5vbi1p
ZGVhbCwgYnV0IHdlIGNhbm5vdCByZWxpYWJseSBhY2Nlc3MgdGhlIGFwcHJvcHJpYXRlCi0gICAg
ICAgIC8vIGRldmljZVNjYWxlRmFjdG9yIGZyb20gaGVyZS4gSXQgaXMgY3JpdGljYWwgdGhhdCBj
YWxsZXJzIHVzZSBDYWNoZWRJbWFnZTo6YnJva2VuSW1hZ2UoKSAKLSAgICAgICAgLy8gd2hlbiB0
aGV5IG5lZWQgdGhlIHJlYWwsIGRldmljZVNjYWxlRmFjdG9yLWFwcHJvcHJpYXRlIGJyb2tlbiBp
bWFnZSBpY29uLiAKLSAgICAgICAgcmV0dXJuIGJyb2tlbkltYWdlKDEpLmZpcnN0OwotICAgIH0K
LQotICAgIGlmIChtX2ltYWdlKQotICAgICAgICByZXR1cm4gbV9pbWFnZS5nZXQoKTsKLQotICAg
IHJldHVybiBJbWFnZTo6bnVsbEltYWdlKCk7Ci19Ci0KLUltYWdlKiBDYWNoZWRJbWFnZTo6aW1h
Z2VGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQotewotICAgIGlmIChl
cnJvck9jY3VycmVkKCkgJiYgbV9zaG91bGRQYWludEJyb2tlbkltYWdlKSB7Ci0gICAgICAgIC8v
IFJldHVybmluZyB0aGUgMXggYnJva2VuIGltYWdlIGlzIG5vbi1pZGVhbCwgYnV0IHdlIGNhbm5v
dCByZWxpYWJseSBhY2Nlc3MgdGhlIGFwcHJvcHJpYXRlCi0gICAgICAgIC8vIGRldmljZVNjYWxl
RmFjdG9yIGZyb20gaGVyZS4gSXQgaXMgY3JpdGljYWwgdGhhdCBjYWxsZXJzIHVzZSBDYWNoZWRJ
bWFnZTo6YnJva2VuSW1hZ2UoKSAKLSAgICAgICAgLy8gd2hlbiB0aGV5IG5lZWQgdGhlIHJlYWws
IGRldmljZVNjYWxlRmFjdG9yLWFwcHJvcHJpYXRlIGJyb2tlbiBpbWFnZSBpY29uLiAKLSAgICAg
ICAgcmV0dXJuIGJyb2tlbkltYWdlKDEpLmZpcnN0OwotICAgIH0KLQotICAgIGlmICghbV9pbWFn
ZSkKLSAgICAgICAgcmV0dXJuIEltYWdlOjpudWxsSW1hZ2UoKTsKLQotICAgIGlmIChtX2ltYWdl
LT5pc1NWR0ltYWdlKCkpIHsKLSAgICAgICAgSW1hZ2UqIGltYWdlID0gbV9zdmdJbWFnZUNhY2hl
LT5pbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKTsKLSAgICAgICAgaWYgKGltYWdlICE9IEltYWdl
OjpudWxsSW1hZ2UoKSkKLSAgICAgICAgICAgIHJldHVybiBpbWFnZTsKLSAgICB9Ci0gICAgcmV0
dXJuIG1faW1hZ2UuZ2V0KCk7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6OnNldENvbnRhaW5lclNp
emVGb3JSZW5kZXJlcihjb25zdCBDYWNoZWRJbWFnZUNsaWVudCogcmVuZGVyZXIsIGNvbnN0IExh
eW91dFNpemUmIGNvbnRhaW5lclNpemUsIGZsb2F0IGNvbnRhaW5lclpvb20pCi17Ci0gICAgaWYg
KGNvbnRhaW5lclNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKHJl
bmRlcmVyKTsKLSAgICBBU1NFUlQoY29udGFpbmVyWm9vbSk7Ci0gICAgaWYgKCFtX2ltYWdlKSB7
Ci0gICAgICAgIG1fcGVuZGluZ0NvbnRhaW5lclNpemVSZXF1ZXN0cy5zZXQocmVuZGVyZXIsIFNp
emVBbmRab29tKGNvbnRhaW5lclNpemUsIGNvbnRhaW5lclpvb20pKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICghbV9pbWFnZS0+aXNTVkdJbWFnZSgpKSB7Ci0gICAgICAgIG1f
aW1hZ2UtPnNldENvbnRhaW5lclNpemUoY29udGFpbmVyU2l6ZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBtX3N2Z0ltYWdlQ2FjaGUtPnNldENvbnRhaW5lclNpemVGb3JSZW5kZXJl
cihyZW5kZXJlciwgY29udGFpbmVyU2l6ZSwgY29udGFpbmVyWm9vbSk7Ci19Ci0KLWJvb2wgQ2Fj
aGVkSW1hZ2U6OnVzZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdAotewotICAgIGlmIChtX2lt
YWdlKQotICAgICAgICByZXR1cm4gbV9pbWFnZS0+dXNlc0NvbnRhaW5lclNpemUoKTsKLQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDYWNoZWRJbWFnZTo6aW1hZ2VIYXNSZWxhdGl2ZVdp
ZHRoKCkgY29uc3QKLXsKLSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgcmV0dXJuIG1faW1hZ2Ut
Pmhhc1JlbGF0aXZlV2lkdGgoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDYWNo
ZWRJbWFnZTo6aW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1faW1h
Z2UpCi0gICAgICAgIHJldHVybiBtX2ltYWdlLT5oYXNSZWxhdGl2ZUhlaWdodCgpOwotCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1MYXlvdXRTaXplIENhY2hlZEltYWdlOjppbWFnZVNpemVGb3JS
ZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBmbG9hdCBtdWx0aXBsaWVyLCBT
aXplVHlwZSBzaXplVHlwZSkKLXsKLSAgICBpZiAoIW1faW1hZ2UpCi0gICAgICAgIHJldHVybiBM
YXlvdXRTaXplKCk7Ci0KLSAgICBMYXlvdXRTaXplIGltYWdlU2l6ZTsKLQotICAgIGlmIChpczxC
aXRtYXBJbWFnZT4oKm1faW1hZ2UpICYmIHJlbmRlcmVyICYmIHJlbmRlcmVyLT5zaG91bGRSZXNw
ZWN0SW1hZ2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQotICAgICAg
ICBpbWFnZVNpemUgPSBMYXlvdXRTaXplKGRvd25jYXN0PEJpdG1hcEltYWdlPigqbV9pbWFnZSku
c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpKTsKLSAgICBlbHNlIGlmIChpczxTVkdJbWFnZT4o
Km1faW1hZ2UpICYmIHNpemVUeXBlID09IFVzZWRTaXplKQotICAgICAgICBpbWFnZVNpemUgPSBM
YXlvdXRTaXplKG1fc3ZnSW1hZ2VDYWNoZS0+aW1hZ2VTaXplRm9yUmVuZGVyZXIocmVuZGVyZXIp
KTsKLSAgICBlbHNlCi0gICAgICAgIGltYWdlU2l6ZSA9IExheW91dFNpemUobV9pbWFnZS0+c2l6
ZSgpKTsKLQotICAgIGlmIChtdWx0aXBsaWVyID09IDEuMGYpCi0gICAgICAgIHJldHVybiBpbWFn
ZVNpemU7Ci0gICAgICAgIAotICAgIC8vIERvbid0IGxldCBpbWFnZXMgdGhhdCBoYXZlIGEgd2lk
dGgvaGVpZ2h0ID49IDEgc2hyaW5rIGJlbG93IDEgd2hlbiB6b29tZWQuCi0gICAgZmxvYXQgd2lk
dGhTY2FsZSA9IG1faW1hZ2UtPmhhc1JlbGF0aXZlV2lkdGgoKSA/IDEuMGYgOiBtdWx0aXBsaWVy
OwotICAgIGZsb2F0IGhlaWdodFNjYWxlID0gbV9pbWFnZS0+aGFzUmVsYXRpdmVIZWlnaHQoKSA/
IDEuMGYgOiBtdWx0aXBsaWVyOwotICAgIExheW91dFNpemUgbWluaW11bVNpemUoaW1hZ2VTaXpl
LndpZHRoKCkgPiAwID8gMSA6IDAsIGltYWdlU2l6ZS5oZWlnaHQoKSA+IDAgPyAxIDogMCk7Ci0g
ICAgaW1hZ2VTaXplLnNjYWxlKHdpZHRoU2NhbGUsIGhlaWdodFNjYWxlKTsKLSAgICBpbWFnZVNp
emUuY2xhbXBUb01pbmltdW1TaXplKG1pbmltdW1TaXplKTsKLSAgICBBU1NFUlQobXVsdGlwbGll
ciAhPSAxLjBmIHx8IChpbWFnZVNpemUud2lkdGgoKS5mcmFjdGlvbigpID09IDAuMGYgJiYgaW1h
Z2VTaXplLmhlaWdodCgpLmZyYWN0aW9uKCkgPT0gMC4wZikpOwotICAgIHJldHVybiBpbWFnZVNp
emU7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6OmNvbXB1dGVJbnRyaW5zaWNEaW1lbnNpb25zKExl
bmd0aCYgaW50cmluc2ljV2lkdGgsIExlbmd0aCYgaW50cmluc2ljSGVpZ2h0LCBGbG9hdFNpemUm
IGludHJpbnNpY1JhdGlvKQotewotICAgIGlmIChtX2ltYWdlKQotICAgICAgICBtX2ltYWdlLT5j
b21wdXRlSW50cmluc2ljRGltZW5zaW9ucyhpbnRyaW5zaWNXaWR0aCwgaW50cmluc2ljSGVpZ2h0
LCBpbnRyaW5zaWNSYXRpbyk7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6Om5vdGlmeU9ic2VydmVy
cyhjb25zdCBJbnRSZWN0KiBjaGFuZ2VSZWN0KQotewotICAgIENhY2hlZFJlc291cmNlQ2xpZW50
V2Fsa2VyPENhY2hlZEltYWdlQ2xpZW50PiB3KG1fY2xpZW50cyk7Ci0gICAgd2hpbGUgKENhY2hl
ZEltYWdlQ2xpZW50KiBjID0gdy5uZXh0KCkpCi0gICAgICAgIGMtPmltYWdlQ2hhbmdlZCh0aGlz
LCBjaGFuZ2VSZWN0KTsKLX0KLQotdm9pZCBDYWNoZWRJbWFnZTo6Y2hlY2tTaG91bGRQYWludEJy
b2tlbkltYWdlKCkKLXsKLSAgICBpZiAoIW1fbG9hZGVyIHx8IG1fbG9hZGVyLT5yZWFjaGVkVGVy
bWluYWxTdGF0ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Nob3VsZFBhaW50QnJva2Vu
SW1hZ2UgPSBtX2xvYWRlci0+ZnJhbWVMb2FkZXIoKS0+Y2xpZW50KCkuc2hvdWxkUGFpbnRCcm9r
ZW5JbWFnZSh1cmwoKSk7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6OmNsZWFyKCkKLXsKLSAgICBk
ZXN0cm95RGVjb2RlZERhdGEoKTsKLSAgICBjbGVhckltYWdlKCk7Ci0gICAgbV9wZW5kaW5nQ29u
dGFpbmVyU2l6ZVJlcXVlc3RzLmNsZWFyKCk7Ci0gICAgc2V0RW5jb2RlZFNpemUoMCk7Ci19Ci0K
LWlubGluZSB2b2lkIENhY2hlZEltYWdlOjpjcmVhdGVJbWFnZSgpCi17Ci0gICAgLy8gQ3JlYXRl
IHRoZSBpbWFnZSBpZiBpdCBkb2Vzbid0IHlldCBleGlzdC4KLSAgICBpZiAobV9pbWFnZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0jaWYgVVNFKENHKSAmJiAhVVNFKFdFQktJVF9JTUFHRV9ERUNPREVS
UykKLSAgICBlbHNlIGlmIChtX3Jlc3BvbnNlLm1pbWVUeXBlKCkgPT0gImFwcGxpY2F0aW9uL3Bk
ZiIpCi0gICAgICAgIG1faW1hZ2UgPSBQREZEb2N1bWVudEltYWdlOjpjcmVhdGUodGhpcyk7Ci0j
ZW5kaWYKLSAgICBlbHNlIGlmIChtX3Jlc3BvbnNlLm1pbWVUeXBlKCkgPT0gImltYWdlL3N2Zyt4
bWwiKSB7Ci0gICAgICAgIGF1dG8gc3ZnSW1hZ2UgPSBTVkdJbWFnZTo6Y3JlYXRlKCp0aGlzLCB1
cmwoKSk7Ci0gICAgICAgIG1fc3ZnSW1hZ2VDYWNoZSA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZHSW1h
Z2VDYWNoZT4oc3ZnSW1hZ2UucHRyKCkpOwotICAgICAgICBtX2ltYWdlID0gV1RGTW92ZShzdmdJ
bWFnZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9pbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVh
dGUodGhpcyk7Ci0gICAgICAgIGRvd25jYXN0PEJpdG1hcEltYWdlPigqbV9pbWFnZSkuc2V0QWxs
b3dTdWJzYW1wbGluZyhtX2xvYWRlciAmJiBtX2xvYWRlci0+ZnJhbWVMb2FkZXIoKS0+ZnJhbWUo
KS5zZXR0aW5ncygpLmltYWdlU3Vic2FtcGxpbmdFbmFibGVkKCkpOwotICAgIH0KLQotICAgIGlm
IChtX2ltYWdlKSB7Ci0gICAgICAgIC8vIFNlbmQgcXVldWVkIGNvbnRhaW5lciBzaXplIHJlcXVl
c3RzLgotICAgICAgICBpZiAobV9pbWFnZS0+dXNlc0NvbnRhaW5lclNpemUoKSkgewotICAgICAg
ICAgICAgZm9yIChhdXRvJiByZXF1ZXN0IDogbV9wZW5kaW5nQ29udGFpbmVyU2l6ZVJlcXVlc3Rz
KQotICAgICAgICAgICAgICAgIHNldENvbnRhaW5lclNpemVGb3JSZW5kZXJlcihyZXF1ZXN0Lmtl
eSwgcmVxdWVzdC52YWx1ZS5maXJzdCwgcmVxdWVzdC52YWx1ZS5zZWNvbmQpOwotICAgICAgICB9
Ci0gICAgICAgIG1fcGVuZGluZ0NvbnRhaW5lclNpemVSZXF1ZXN0cy5jbGVhcigpOwotICAgIH0K
LX0KLQotaW5saW5lIHZvaWQgQ2FjaGVkSW1hZ2U6OmNsZWFySW1hZ2UoKQotewotICAgIC8vIElm
IG91ciBJbWFnZSBoYXMgYW4gb2JzZXJ2ZXIsIGl0J3MgYWx3YXlzIHVzIHNvIHdlIG5lZWQgdG8g
Y2xlYXIgdGhlIGJhY2sgcG9pbnRlcgotICAgIC8vIGJlZm9yZSBkcm9wcGluZyBvdXIgcmVmZXJl
bmNlLgotICAgIGlmIChtX2ltYWdlKQotICAgICAgICBtX2ltYWdlLT5zZXRJbWFnZU9ic2VydmVy
KG51bGxwdHIpOwotICAgIG1faW1hZ2UgPSBudWxscHRyOwotfQotCi12b2lkIENhY2hlZEltYWdl
OjphZGRJbmNyZW1lbnRhbERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJiBkYXRhKQotewotICAgIG1f
ZGF0YSA9ICZkYXRhOwotCi0gICAgY3JlYXRlSW1hZ2UoKTsKLQotICAgIC8vIEhhdmUgdGhlIGlt
YWdlIHVwZGF0ZSBpdHMgZGF0YSBmcm9tIGl0cyBpbnRlcm5hbCBidWZmZXIuCi0gICAgLy8gSXQg
d2lsbCBub3QgZG8gYW55dGhpbmcgbm93LCBidXQgd2lsbCBkZWxheSBkZWNvZGluZyB1bnRpbAot
ICAgIC8vIHF1ZXJpZWQgZm9yIGluZm8gKGxpa2Ugc2l6ZSBvciBzcGVjaWZpYyBpbWFnZSBmcmFt
ZXMpLgotICAgIGJvb2wgc2l6ZUF2YWlsYWJsZSA9IG1faW1hZ2UtPnNldERhdGEoJmRhdGEsIGZh
bHNlKTsKLSAgICBpZiAoIXNpemVBdmFpbGFibGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ltYWdlLT5pc051bGwoKSkgewotICAgICAgICAvLyBJbWFnZSBkZWNvZGluZyBmYWlsZWQu
IEVpdGhlciB3ZSBuZWVkIG1vcmUgaW1hZ2UgZGF0YSBvciB0aGUgaW1hZ2UgZGF0YSBpcyBtYWxm
b3JtZWQuCi0gICAgICAgIGVycm9yKGVycm9yT2NjdXJyZWQoKSA/IHN0YXR1cygpIDogRGVjb2Rl
RXJyb3IpOwotICAgICAgICBpZiAoaW5DYWNoZSgpKQotICAgICAgICAgICAgTWVtb3J5Q2FjaGU6
OnNpbmdsZXRvbigpLnJlbW92ZSgqdGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBUZWxsIG91ciBvYnNlcnZlcnMgdG8gdHJ5IHRvIGRyYXcuCi0gICAgLy8gRWFjaCBjaHVu
ayBmcm9tIHRoZSBuZXR3b3JrIGNhdXNlcyBvYnNlcnZlcnMgdG8gcmVwYWludCwgd2hpY2ggd2ls
bCBmb3JjZSB0aGF0IGNodW5rIHRvIGRlY29kZS4KLSAgICAvLyBJdCB3b3VsZCBiZSBuaWNlIHRv
IG9ubHkgcmVkcmF3IHRoZSBkZWNvZGVkIGJhbmQgb2YgdGhlIGltYWdlLCBidXQgd2l0aCB0aGUg
Y3VycmVudCBkZXNpZ24KLSAgICAvLyAoZGVjb2RpbmcgZGVsYXllZCB1bnRpbCBwYWludGluZykg
dGhhdCBzZWVtcyBoYXJkLgotICAgIG5vdGlmeU9ic2VydmVycygpOwotCi0gICAgc2V0RW5jb2Rl
ZFNpemUobV9pbWFnZS0+ZGF0YSgpID8gbV9pbWFnZS0+ZGF0YSgpLT5zaXplKCkgOiAwKTsKLX0K
LQotdm9pZCBDYWNoZWRJbWFnZTo6YWRkRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXImIGRhdGEpCi17
Ci0gICAgQVNTRVJUKGRhdGFCdWZmZXJpbmdQb2xpY3koKSA9PSBCdWZmZXJEYXRhKTsKLSAgICBh
ZGRJbmNyZW1lbnRhbERhdGFCdWZmZXIoZGF0YSk7Ci0gICAgQ2FjaGVkUmVzb3VyY2U6OmFkZERh
dGFCdWZmZXIoZGF0YSk7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6OmFkZERhdGEoY29uc3QgY2hh
ciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIEFTU0VSVChkYXRhQnVmZmVyaW5nUG9s
aWN5KCkgPT0gRG9Ob3RCdWZmZXJEYXRhKTsKLSAgICBhZGRJbmNyZW1lbnRhbERhdGFCdWZmZXIo
U2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YSwgbGVuZ3RoKSk7Ci0gICAgQ2FjaGVkUmVzb3VyY2U6
OmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKLX0KLQotdm9pZCBDYWNoZWRJbWFnZTo6ZmluaXNoTG9h
ZGluZyhTaGFyZWRCdWZmZXIqIGRhdGEpCi17Ci0gICAgbV9kYXRhID0gZGF0YTsKLSAgICBpZiAo
IW1faW1hZ2UgJiYgZGF0YSkKLSAgICAgICAgY3JlYXRlSW1hZ2UoKTsKLQotICAgIGlmIChtX2lt
YWdlKQotICAgICAgICBtX2ltYWdlLT5zZXREYXRhKGRhdGEsIHRydWUpOwotCi0gICAgaWYgKCFt
X2ltYWdlIHx8IG1faW1hZ2UtPmlzTnVsbCgpKSB7Ci0gICAgICAgIC8vIEltYWdlIGRlY29kaW5n
IGZhaWxlZDsgdGhlIGltYWdlIGRhdGEgaXMgbWFsZm9ybWVkLgotICAgICAgICBlcnJvcihlcnJv
ck9jY3VycmVkKCkgPyBzdGF0dXMoKSA6IERlY29kZUVycm9yKTsKLSAgICAgICAgaWYgKGluQ2Fj
aGUoKSkKLSAgICAgICAgICAgIE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUoKnRoaXMp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbm90aWZ5T2JzZXJ2ZXJzKCk7Ci0gICAg
aWYgKG1faW1hZ2UpCi0gICAgICAgIHNldEVuY29kZWRTaXplKG1faW1hZ2UtPmRhdGEoKSA/IG1f
aW1hZ2UtPmRhdGEoKS0+c2l6ZSgpIDogMCk7Ci0gICAgQ2FjaGVkUmVzb3VyY2U6OmZpbmlzaExv
YWRpbmcoZGF0YSk7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6OmRpZFJlcGxhY2VTaGFyZWRCdWZm
ZXJDb250ZW50cygpCi17Ci0gICAgaWYgKG1faW1hZ2UpIHsKLSAgICAgICAgLy8gTGV0IHRoZSBJ
bWFnZSBrbm93IHRoYXQgdGhlIFNoYXJlZEJ1ZmZlciBoYXMgYmVlbiByZWppZ2dlZCwgc28gaXQg
Y2FuIGxldCBnbyBvZiBhbnkgcmVmZXJlbmNlcyB0byB0aGUgaGVhcC1hbGxvY2F0ZWQgcmVzb3Vy
Y2UgYnVmZmVyLgotICAgICAgICAvLyBGSVhNRShyZGFyOi8vcHJvYmxlbS8yNDI3NTYxNyk6IEl0
IHdvdWxkIGJlIGJldHRlciBpZiB3ZSBjb3VsZCBzb21laG93IHRlbGwgdGhlIEltYWdlJ3MgZGVj
b2RlciB0byBzd2FwIGluIHRoZSBuZXcgY29udGVudHMgd2l0aG91dCBkZXN0cm95aW5nIGFueXRo
aW5nLgotICAgICAgICBtX2ltYWdlLT5kZXN0cm95RGVjb2RlZERhdGEodHJ1ZSk7Ci0gICAgfQot
ICAgIENhY2hlZFJlc291cmNlOjpkaWRSZXBsYWNlU2hhcmVkQnVmZmVyQ29udGVudHMoKTsKLX0K
LQotdm9pZCBDYWNoZWRJbWFnZTo6ZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OlN0YXR1cyBzdGF0dXMp
Ci17Ci0gICAgY2hlY2tTaG91bGRQYWludEJyb2tlbkltYWdlKCk7Ci0gICAgY2xlYXIoKTsKLSAg
ICBDYWNoZWRSZXNvdXJjZTo6ZXJyb3Ioc3RhdHVzKTsKLSAgICBub3RpZnlPYnNlcnZlcnMoKTsK
LX0KLQotdm9pZCBDYWNoZWRJbWFnZTo6cmVzcG9uc2VSZWNlaXZlZChjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBpZiAoIW1fcmVzcG9uc2UuaXNOdWxsKCkpCi0gICAg
ICAgIGNsZWFyKCk7Ci0gICAgQ2FjaGVkUmVzb3VyY2U6OnJlc3BvbnNlUmVjZWl2ZWQocmVzcG9u
c2UpOwotfQotCi12b2lkIENhY2hlZEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEoKQotewotICAg
IGJvb2wgY2FuRGVsZXRlSW1hZ2UgPSAhbV9pbWFnZSB8fCAobV9pbWFnZS0+aGFzT25lUmVmKCkg
JiYgbV9pbWFnZS0+aXNCaXRtYXBJbWFnZSgpKTsKLSAgICBpZiAoY2FuRGVsZXRlSW1hZ2UgJiYg
IWlzTG9hZGluZygpICYmICFoYXNDbGllbnRzKCkpIHsKLSAgICAgICAgbV9pbWFnZSA9IG51bGxw
dHI7Ci0gICAgICAgIHNldERlY29kZWRTaXplKDApOwotICAgIH0gZWxzZSBpZiAobV9pbWFnZSAm
JiAhZXJyb3JPY2N1cnJlZCgpKQotICAgICAgICBtX2ltYWdlLT5kZXN0cm95RGVjb2RlZERhdGEo
KTsKLX0KLQotdm9pZCBDYWNoZWRJbWFnZTo6ZGVjb2RlZFNpemVDaGFuZ2VkKGNvbnN0IEltYWdl
KiBpbWFnZSwgaW50IGRlbHRhKQotewotICAgIGlmICghaW1hZ2UgfHwgaW1hZ2UgIT0gbV9pbWFn
ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHNldERlY29kZWRTaXplKGRlY29kZWRTaXpl
KCkgKyBkZWx0YSk7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6OmRpZERyYXcoY29uc3QgSW1hZ2Uq
IGltYWdlKQotewotICAgIGlmICghaW1hZ2UgfHwgaW1hZ2UgIT0gbV9pbWFnZSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIGRvdWJsZSB0aW1lU3RhbXAgPSBGcmFtZVZpZXc6OmN1cnJlbnRQ
YWludFRpbWVTdGFtcCgpOwotICAgIGlmICghdGltZVN0YW1wKSAvLyBJZiBkaWREcmF3IGlzIGNh
bGxlZCBvdXRzaWRlIG9mIGEgRnJhbWUgcGFpbnQuCi0gICAgICAgIHRpbWVTdGFtcCA9IG1vbm90
b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwotICAgIAotICAgIENhY2hlZFJlc291cmNlOjpkaWRB
Y2Nlc3NEZWNvZGVkRGF0YSh0aW1lU3RhbXApOwotfQotCi12b2lkIENhY2hlZEltYWdlOjphbmlt
YXRpb25BZHZhbmNlZChjb25zdCBJbWFnZSogaW1hZ2UpCi17Ci0gICAgaWYgKCFpbWFnZSB8fCBp
bWFnZSAhPSBtX2ltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgQ2FjaGVkUmVzb3VyY2VDbGll
bnRXYWxrZXI8Q2FjaGVkSW1hZ2VDbGllbnQ+IGNsaWVudFdhbGtlcihtX2NsaWVudHMpOwotICAg
IHdoaWxlIChDYWNoZWRJbWFnZUNsaWVudCogY2xpZW50ID0gY2xpZW50V2Fsa2VyLm5leHQoKSkK
LSAgICAgICAgY2xpZW50LT5uZXdJbWFnZUFuaW1hdGlvbkZyYW1lQXZhaWxhYmxlKCp0aGlzKTsK
LX0KLQotdm9pZCBDYWNoZWRJbWFnZTo6Y2hhbmdlZEluUmVjdChjb25zdCBJbWFnZSogaW1hZ2Us
IGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFpbWFnZSB8fCBpbWFnZSAhPSBtX2lt
YWdlKQotICAgICAgICByZXR1cm47Ci0gICAgbm90aWZ5T2JzZXJ2ZXJzKCZyZWN0KTsKLX0KLQot
Ym9vbCBDYWNoZWRJbWFnZTo6Y3VycmVudEZyYW1lS25vd25Ub0JlT3BhcXVlKGNvbnN0IFJlbmRl
ckVsZW1lbnQqIHJlbmRlcmVyKQotewotICAgIEltYWdlKiBpbWFnZSA9IGltYWdlRm9yUmVuZGVy
ZXIocmVuZGVyZXIpOwotICAgIHJldHVybiBpbWFnZS0+Y3VycmVudEZyYW1lS25vd25Ub0JlT3Bh
cXVlKCk7Ci19Ci0KLWJvb2wgQ2FjaGVkSW1hZ2U6OmlzT3JpZ2luQ2xlYW4oU2VjdXJpdHlPcmln
aW4qIHNlY3VyaXR5T3JpZ2luKQotewotICAgIGlmICghaW1hZ2UoKS0+aGFzU2luZ2xlU2VjdXJp
dHlPcmlnaW4oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChwYXNzZXNBY2Nlc3ND
b250cm9sQ2hlY2soKnNlY3VyaXR5T3JpZ2luKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
cmV0dXJuICFzZWN1cml0eU9yaWdpbi0+dGFpbnRzQ2FudmFzKHJlc3BvbnNlRm9yU2FtZU9yaWdp
blBvbGljeUNoZWNrcygpLnVybCgpKTsKLX0KLQotQ2FjaGVkUmVzb3VyY2U6OlJldmFsaWRhdGlv
bkRlY2lzaW9uIENhY2hlZEltYWdlOjptYWtlUmV2YWxpZGF0aW9uRGVjaXNpb24oQ2FjaGVQb2xp
Y3kgY2FjaGVQb2xpY3kpIGNvbnN0Ci17Ci0gICAgaWYgKFVOTElLRUxZKGlzTWFudWFsbHlDYWNo
ZWQoKSkpIHsKLSAgICAgICAgLy8gRG8gbm90IHJldmFsaWRhdGUgbWFudWFsbHkgY2FjaGVkIGlt
YWdlcy4gVGhpcyBtZWNoYW5pc20gaXMgdXNlZCBhcyBhCi0gICAgICAgIC8vIHdheSB0byBlZmZp
Y2llbnRseSBzaGFyZSBhbiBpbWFnZSBmcm9tIHRoZSBjbGllbnQgdG8gY29udGVudCBhbmQKLSAg
ICAgICAgLy8gdGhlIFVSTCBmb3IgdGhhdCBpbWFnZSBtYXkgbm90IHJlcHJlc2VudCBhIHJlc291
cmNlIHRoYXQgY2FuIGJlCi0gICAgICAgIC8vIHJldHJpZXZlZCBieSBzdGFuZGFyZCBtZWFucy4g
SWYgdGhlIG1hbnVhbCBjYWNoaW5nIFNQSSBpcyB1c2VkLCBpdCBpcwotICAgICAgICAvLyBpbmN1
bWJlbnQgb24gdGhlIGNsaWVudCB0byBvbmx5IHVzZSB2YWxpZCByZXNvdXJjZXMuCi0gICAgICAg
IHJldHVybiBSZXZhbGlkYXRpb25EZWNpc2lvbjo6Tm87Ci0gICAgfQotICAgIHJldHVybiBDYWNo
ZWRSZXNvdXJjZTo6bWFrZVJldmFsaWRhdGlvbkRlY2lzaW9uKGNhY2hlUG9saWN5KTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZEltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
SW1hZ2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBkYjk0ZGM5NjkwOWU4YTY2
MTAzYjEwZTUwOWQwOTM3NjgxNzkwMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAor
KysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMTk5
OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHlyaWdodCAoQykgMjAw
MSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYg
U2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gICAgQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQot
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwot
Ci0jaWZuZGVmIENhY2hlZEltYWdlX2gKLSNkZWZpbmUgQ2FjaGVkSW1hZ2VfaAotCi0jaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2UuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIkltYWdl
T2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiSW50U2l6ZUhhc2gu
aCIKLSNpbmNsdWRlICJMYXlvdXRTaXplLmgiCi0jaW5jbHVkZSAiU1ZHSW1hZ2VDYWNoZS5oIgot
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
Q2FjaGVkSW1hZ2VDbGllbnQ7Ci1jbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKLWNsYXNzIEZs
b2F0U2l6ZTsKLWNsYXNzIE1lbW9yeUNhY2hlOwotY2xhc3MgUmVuZGVyRWxlbWVudDsKLWNsYXNz
IFJlbmRlck9iamVjdDsKLWNsYXNzIFNlY3VyaXR5T3JpZ2luOwotCi1zdHJ1Y3QgTGVuZ3RoOwot
Ci1jbGFzcyBDYWNoZWRJbWFnZSBmaW5hbCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSwgcHVibGlj
IEltYWdlT2JzZXJ2ZXIgewotICAgIGZyaWVuZCBjbGFzcyBNZW1vcnlDYWNoZTsKLQotcHVibGlj
OgotICAgIGVudW0gQ2FjaGVCZWhhdmlvclR5cGUgeyBBdXRvbWF0aWNhbGx5Q2FjaGVkLCBNYW51
YWxseUNhY2hlZCB9OwotCi0gICAgQ2FjaGVkSW1hZ2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
U2Vzc2lvbklEKTsKLSAgICBDYWNoZWRJbWFnZShJbWFnZSosIFNlc3Npb25JRCk7Ci0gICAgQ2Fj
aGVkSW1hZ2UoY29uc3QgVVJMJiwgSW1hZ2UqLCBTZXNzaW9uSUQpOwotICAgIENhY2hlZEltYWdl
KGNvbnN0IFVSTCYsIEltYWdlKiwgQ2FjaGVCZWhhdmlvclR5cGUsIFNlc3Npb25JRCk7Ci0gICAg
dmlydHVhbCB+Q2FjaGVkSW1hZ2UoKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlKiBpbWFn
ZSgpOyAvLyBSZXR1cm5zIHRoZSBudWxsSW1hZ2UoKSBpZiB0aGUgaW1hZ2UgaXMgbm90IGF2YWls
YWJsZSB5ZXQuCi0gICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2UqIGltYWdlRm9yUmVuZGVyZXIoY29u
c3QgUmVuZGVyT2JqZWN0Kik7IC8vIFJldHVybnMgdGhlIG51bGxJbWFnZSgpIGlmIHRoZSBpbWFn
ZSBpcyBub3QgYXZhaWxhYmxlIHlldC4KLSAgICBib29sIGhhc0ltYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9pbWFnZS5nZXQoKTsgfQotICAgIGJvb2wgY3VycmVudEZyYW1lS25vd25Ub0JlT3BhcXVl
KGNvbnN0IFJlbmRlckVsZW1lbnQqKTsKLQotICAgIHN0ZDo6cGFpcjxJbWFnZSosIGZsb2F0PiBi
cm9rZW5JbWFnZShmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikgY29uc3Q7IC8vIFJldHVybnMgYW4g
aW1hZ2UgYW5kIHRoZSBpbWFnZSdzIHJlc29sdXRpb24gc2NhbGUgZmFjdG9yLgotICAgIGJvb2wg
d2lsbFBhaW50QnJva2VuSW1hZ2UoKSBjb25zdDsgCi0KLSAgICBib29sIGNhblJlbmRlcihjb25z
dCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBmbG9hdCBtdWx0aXBsaWVyKSB7IHJldHVybiAhZXJy
b3JPY2N1cnJlZCgpICYmICFpbWFnZVNpemVGb3JSZW5kZXJlcihyZW5kZXJlciwgbXVsdGlwbGll
cikuaXNFbXB0eSgpOyB9Ci0KLSAgICB2b2lkIHNldENvbnRhaW5lclNpemVGb3JSZW5kZXJlcihj
b25zdCBDYWNoZWRJbWFnZUNsaWVudCosIGNvbnN0IExheW91dFNpemUmLCBmbG9hdCk7Ci0gICAg
Ym9vbCB1c2VzSW1hZ2VDb250YWluZXJTaXplKCkgY29uc3Q7Ci0gICAgYm9vbCBpbWFnZUhhc1Jl
bGF0aXZlV2lkdGgoKSBjb25zdDsKLSAgICBib29sIGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBj
b25zdDsKLQotICAgIHZvaWQgYWRkRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXImKSBvdmVycmlkZTsK
LSAgICB2b2lkIGZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKikgb3ZlcnJpZGU7Ci0KLSAgICBl
bnVtIFNpemVUeXBlIHsKLSAgICAgICAgVXNlZFNpemUsCi0gICAgICAgIEludHJpbnNpY1NpemUK
LSAgICB9OwotICAgIC8vIFRoaXMgbWV0aG9kIHRha2VzIGEgem9vbSBtdWx0aXBsaWVyIHRoYXQg
Y2FuIGJlIHVzZWQgdG8gaW5jcmVhc2UgdGhlIG5hdHVyYWwgc2l6ZSBvZiB0aGUgaW1hZ2UgYnkg
dGhlIHpvb20uCi0gICAgTGF5b3V0U2l6ZSBpbWFnZVNpemVGb3JSZW5kZXJlcihjb25zdCBSZW5k
ZXJPYmplY3QqLCBmbG9hdCBtdWx0aXBsaWVyLCBTaXplVHlwZSA9IFVzZWRTaXplKTsgLy8gcmV0
dXJucyB0aGUgc2l6ZSBvZiB0aGUgY29tcGxldGUgaW1hZ2UuCi0gICAgdm9pZCBjb21wdXRlSW50
cmluc2ljRGltZW5zaW9ucyhMZW5ndGgmIGludHJpbnNpY1dpZHRoLCBMZW5ndGgmIGludHJpbnNp
Y0hlaWdodCwgRmxvYXRTaXplJiBpbnRyaW5zaWNSYXRpbyk7Ci0KLSAgICBib29sIGlzTWFudWFs
bHlDYWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2lzTWFudWFsbHlDYWNoZWQ7IH0KLSAgICBSZXZh
bGlkYXRpb25EZWNpc2lvbiBtYWtlUmV2YWxpZGF0aW9uRGVjaXNpb24oQ2FjaGVQb2xpY3kpIGNv
bnN0IG92ZXJyaWRlOwotICAgIHZvaWQgbG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciYsIGNvbnN0
IFJlc291cmNlTG9hZGVyT3B0aW9ucyYpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBpc09yaWdpbkNs
ZWFuKFNlY3VyaXR5T3JpZ2luKik7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjbGVhcigpOwotCi0g
ICAgQ2FjaGVkSW1hZ2UoQ2FjaGVkSW1hZ2UmLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTZXNz
aW9uSUQpOwotCi0gICAgdm9pZCBzZXRCb2R5RGF0YUZyb20oY29uc3QgQ2FjaGVkUmVzb3VyY2Um
KSBmaW5hbDsKLQotICAgIHZvaWQgY3JlYXRlSW1hZ2UoKTsKLSAgICB2b2lkIGNsZWFySW1hZ2Uo
KTsKLSAgICAvLyBJZiBub3QgbnVsbCwgY2hhbmdlUmVjdCBpcyB0aGUgY2hhbmdlZCBwYXJ0IG9m
IHRoZSBpbWFnZS4KLSAgICB2b2lkIG5vdGlmeU9ic2VydmVycyhjb25zdCBJbnRSZWN0KiBjaGFu
Z2VSZWN0ID0gbnVsbHB0cik7Ci0gICAgdm9pZCBjaGVja1Nob3VsZFBhaW50QnJva2VuSW1hZ2Uo
KTsKLQotICAgIHZvaWQgc3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSgpIG92ZXJy
aWRlOwotICAgIGJvb2wgbWF5VHJ5UmVwbGFjZUVuY29kZWREYXRhKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdm9pZCBkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VD
bGllbnQqKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZFJlbW92ZUNsaWVudChDYWNoZWRSZXNvdXJj
ZUNsaWVudCopIG92ZXJyaWRlOwotCi0gICAgdm9pZCBhbGxDbGllbnRzUmVtb3ZlZCgpIG92ZXJy
aWRlOwotICAgIHZvaWQgZGVzdHJveURlY29kZWREYXRhKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lk
IGFkZERhdGEoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGVycm9yKENhY2hlZFJlc291cmNlOjpTdGF0dXMpIG92ZXJyaWRlOwotICAgIHZvaWQg
cmVzcG9uc2VSZWNlaXZlZChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgb3ZlcnJpZGU7Ci0KLSAg
ICAvLyBGb3IgY29tcGF0aWJpbGl0eSwgaW1hZ2VzIGtlZXAgbG9hZGluZyBldmVuIGlmIHRoZXJl
IGFyZSBIVFRQIGVycm9ycy4KLSAgICBib29sIHNob3VsZElnbm9yZUhUVFBTdGF0dXNDb2RlRXJy
b3JzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgYm9vbCBzdGlsbE5l
ZWRzTG9hZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICFlcnJvck9jY3VycmVkKCkgJiYgc3Rh
dHVzKCkgPT0gVW5rbm93biAmJiAhaXNMb2FkaW5nKCk7IH0KLQotICAgIC8vIEltYWdlT2JzZXJ2
ZXIKLSAgICB2b2lkIGRlY29kZWRTaXplQ2hhbmdlZChjb25zdCBJbWFnZSosIGludCBkZWx0YSkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWREcmF3KGNvbnN0IEltYWdlKikgb3ZlcnJpZGU7Ci0KLSAg
ICB2b2lkIGFuaW1hdGlvbkFkdmFuY2VkKGNvbnN0IEltYWdlKikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBjaGFuZ2VkSW5SZWN0KGNvbnN0IEltYWdlKiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwot
Ci0gICAgdm9pZCBhZGRJbmNyZW1lbnRhbERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJik7Ci0KLSAg
ICB2b2lkIGRpZFJlcGxhY2VTaGFyZWRCdWZmZXJDb250ZW50cygpIG92ZXJyaWRlOwotCi0gICAg
dHlwZWRlZiBzdGQ6OnBhaXI8TGF5b3V0U2l6ZSwgZmxvYXQ+IFNpemVBbmRab29tOwotICAgIHR5
cGVkZWYgSGFzaE1hcDxjb25zdCBDYWNoZWRJbWFnZUNsaWVudCosIFNpemVBbmRab29tPiBDb250
YWluZXJTaXplUmVxdWVzdHM7Ci0gICAgQ29udGFpbmVyU2l6ZVJlcXVlc3RzIG1fcGVuZGluZ0Nv
bnRhaW5lclNpemVSZXF1ZXN0czsKLQotICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8U1ZHSW1hZ2VDYWNoZT4gbV9zdmdJbWFnZUNhY2hlOwotICAgIHVuc2ln
bmVkIG1faXNNYW51YWxseUNhY2hlZCA6IDE7Ci0gICAgdW5zaWduZWQgbV9zaG91bGRQYWludEJy
b2tlbkltYWdlIDogMTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19DQUNIRURfUkVTT1VSQ0UoQ2FjaGVkSW1hZ2UsIENhY2hlZFJlc291cmNl
OjpJbWFnZVJlc291cmNlKQotCi0jZW5kaWYgLy8gQ2FjaGVkSW1hZ2VfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlQ2xpZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2VDbGllbnQuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNzIyMzVhY2JmOWFmYTRjZThjOWE2YWEzNjE5ZjM0OTVkOTQxOWE5ZC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2VDbGllbnQuaAorKysgL2Rldi9udWxsCkBAIC0x
LDQ5ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xs
QG1waS1oZC5tcGcuZGUpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVl
bGxlckBrZGUub3JnPgotICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0u
d2VpbmlnQGdtYWlsLmNvbSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
Ci0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpZm5kZWYgQ2FjaGVkSW1h
Z2VDbGllbnRfaAotI2RlZmluZSBDYWNoZWRJbWFnZUNsaWVudF9oCi0KLSNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZUNsaWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENhY2hl
ZEltYWdlOwotY2xhc3MgSW50UmVjdDsKLQotY2xhc3MgQ2FjaGVkSW1hZ2VDbGllbnQgOiBwdWJs
aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgfkNhY2hlZElt
YWdlQ2xpZW50KCkgeyB9Ci0gICAgc3RhdGljIENhY2hlZFJlc291cmNlQ2xpZW50VHlwZSBleHBl
Y3RlZFR5cGUoKSB7IHJldHVybiBJbWFnZVR5cGU7IH0KLSAgICBDYWNoZWRSZXNvdXJjZUNsaWVu
dFR5cGUgcmVzb3VyY2VDbGllbnRUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZXhwZWN0
ZWRUeXBlKCk7IH0KLQotICAgIC8vIENhbGxlZCB3aGVuZXZlciBhIGZyYW1lIG9mIGFuIGltYWdl
IGNoYW5nZXMgYmVjYXVzZSB3ZSBnb3QgbW9yZSBkYXRhIGZyb20gdGhlIG5ldHdvcmsuCi0gICAg
Ly8gSWYgbm90IG51bGwsIHRoZSBJbnRSZWN0IGlzIHRoZSBjaGFuZ2VkIHJlY3Qgb2YgdGhlIGlt
YWdlLgotICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJ
bnRSZWN0KiA9IG51bGxwdHIpIHsgfQotCi0gICAgLy8gQ2FsbGVkIHdoZW4gR0lGIGFuaW1hdGlv
biBwcm9ncmVzc2VzLgotICAgIHZpcnR1YWwgdm9pZCBuZXdJbWFnZUFuaW1hdGlvbkZyYW1lQXZh
aWxhYmxlKENhY2hlZEltYWdlJiBpbWFnZSkgeyBpbWFnZUNoYW5nZWQoJmltYWdlKTsgfQotfTsK
LQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSYXdSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmF3UmVzb3VyY2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTBkZjhiMDRl
Y2U1NGRiMTA2NjI0NjI4ZjU4ZmJiYzc4MWZkYzQyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
YXdSZXNvdXJjZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOTcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDYWNoZWRSYXdSZXNvdXJjZS5oIgotCi0jaW5j
bHVkZSAiQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUNsaWVudFdhbGtlci5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCi0jaW5j
bHVkZSAiSFRUUEhlYWRlck5hbWVzLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5j
bHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ2FjaGVkUmF3UmVzb3VyY2U6OkNhY2hlZFJh
d1Jlc291cmNlKFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBUeXBlIHR5cGUsIFNl
c3Npb25JRCBzZXNzaW9uSUQpCi0gICAgOiBDYWNoZWRSZXNvdXJjZShyZXNvdXJjZVJlcXVlc3Qs
IHR5cGUsIHNlc3Npb25JRCkKLSAgICAsIG1faWRlbnRpZmllcigwKQotICAgICwgbV9hbGxvd0Vu
Y29kZWREYXRhUmVwbGFjZW1lbnQodHJ1ZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluT3JNZWRpYU9y
UmF3UmVzb3VyY2UoKSk7Ci19Ci0KLWNvbnN0IGNoYXIqIENhY2hlZFJhd1Jlc291cmNlOjpjYWxj
dWxhdGVJbmNyZW1lbnRhbERhdGFDaHVuayhTaGFyZWRCdWZmZXIqIGRhdGEsIHVuc2lnbmVkJiBp
bmNyZW1lbnRhbERhdGFMZW5ndGgpCi17Ci0gICAgaW5jcmVtZW50YWxEYXRhTGVuZ3RoID0gMDsK
LSAgICBpZiAoIWRhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgdW5zaWduZWQg
cHJldmlvdXNEYXRhTGVuZ3RoID0gZW5jb2RlZFNpemUoKTsKLSAgICBBU1NFUlQoZGF0YS0+c2l6
ZSgpID49IHByZXZpb3VzRGF0YUxlbmd0aCk7Ci0gICAgaW5jcmVtZW50YWxEYXRhTGVuZ3RoID0g
ZGF0YS0+c2l6ZSgpIC0gcHJldmlvdXNEYXRhTGVuZ3RoOwotICAgIHJldHVybiBkYXRhLT5kYXRh
KCkgKyBwcmV2aW91c0RhdGFMZW5ndGg7Ci19Ci0KLXZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OmFk
ZERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJiBkYXRhKQotewotICAgIENhY2hlZFJlc291cmNlSGFu
ZGxlPENhY2hlZFJhd1Jlc291cmNlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIEFTU0VSVChk
YXRhQnVmZmVyaW5nUG9saWN5KCkgPT0gQnVmZmVyRGF0YSk7Ci0gICAgbV9kYXRhID0gJmRhdGE7
Ci0KLSAgICB1bnNpZ25lZCBpbmNyZW1lbnRhbERhdGFMZW5ndGg7Ci0gICAgY29uc3QgY2hhciog
aW5jcmVtZW50YWxEYXRhID0gY2FsY3VsYXRlSW5jcmVtZW50YWxEYXRhQ2h1bmsoJmRhdGEsIGlu
Y3JlbWVudGFsRGF0YUxlbmd0aCk7Ci0gICAgc2V0RW5jb2RlZFNpemUoZGF0YS5zaXplKCkpOwot
ICAgIG5vdGlmeUNsaWVudHNEYXRhV2FzUmVjZWl2ZWQoaW5jcmVtZW50YWxEYXRhLCBpbmNyZW1l
bnRhbERhdGFMZW5ndGgpOwotICAgIGlmIChkYXRhQnVmZmVyaW5nUG9saWN5KCkgPT0gRG9Ob3RC
dWZmZXJEYXRhKSB7Ci0gICAgICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgICAgIG1fbG9hZGVy
LT5zZXREYXRhQnVmZmVyaW5nUG9saWN5KERvTm90QnVmZmVyRGF0YSk7Ci0gICAgICAgIGNsZWFy
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDYWNoZWRSZXNvdXJjZTo6YWRkRGF0
YUJ1ZmZlcihkYXRhKTsKLX0KLQotdm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6YWRkRGF0YShjb25z
dCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgQVNTRVJUKGRhdGFCdWZmZXJp
bmdQb2xpY3koKSA9PSBEb05vdEJ1ZmZlckRhdGEpOwotICAgIG5vdGlmeUNsaWVudHNEYXRhV2Fz
UmVjZWl2ZWQoZGF0YSwgbGVuZ3RoKTsKLSAgICBDYWNoZWRSZXNvdXJjZTo6YWRkRGF0YShkYXRh
LCBsZW5ndGgpOwotfQotCi12b2lkIENhY2hlZFJhd1Jlc291cmNlOjpmaW5pc2hMb2FkaW5nKFNo
YXJlZEJ1ZmZlciogZGF0YSkKLXsKLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdS
ZXNvdXJjZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBEYXRhQnVmZmVyaW5nUG9saWN5IGRh
dGFCdWZmZXJpbmdQb2xpY3kgPSB0aGlzLT5kYXRhQnVmZmVyaW5nUG9saWN5KCk7Ci0gICAgaWYg
KGRhdGFCdWZmZXJpbmdQb2xpY3kgPT0gQnVmZmVyRGF0YSkgewotICAgICAgICBtX2RhdGEgPSBk
YXRhOwotCi0gICAgICAgIHVuc2lnbmVkIGluY3JlbWVudGFsRGF0YUxlbmd0aDsKLSAgICAgICAg
Y29uc3QgY2hhciogaW5jcmVtZW50YWxEYXRhID0gY2FsY3VsYXRlSW5jcmVtZW50YWxEYXRhQ2h1
bmsoZGF0YSwgaW5jcmVtZW50YWxEYXRhTGVuZ3RoKTsKLSAgICAgICAgaWYgKGRhdGEpCi0gICAg
ICAgICAgICBzZXRFbmNvZGVkU2l6ZShkYXRhLT5zaXplKCkpOwotICAgICAgICBub3RpZnlDbGll
bnRzRGF0YVdhc1JlY2VpdmVkKGluY3JlbWVudGFsRGF0YSwgaW5jcmVtZW50YWxEYXRhTGVuZ3Ro
KTsKLSAgICB9Ci0KLSAgICBtX2FsbG93RW5jb2RlZERhdGFSZXBsYWNlbWVudCA9ICFtX2xvYWRl
ci0+aXNRdWlja0xvb2tSZXNvdXJjZSgpOwotCi0gICAgQ2FjaGVkUmVzb3VyY2U6OmZpbmlzaExv
YWRpbmcoZGF0YSk7Ci0gICAgaWYgKGRhdGFCdWZmZXJpbmdQb2xpY3kgPT0gQnVmZmVyRGF0YSAm
JiB0aGlzLT5kYXRhQnVmZmVyaW5nUG9saWN5KCkgPT0gRG9Ob3RCdWZmZXJEYXRhKSB7Ci0gICAg
ICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgICAgIG1fbG9hZGVyLT5zZXREYXRhQnVmZmVyaW5n
UG9saWN5KERvTm90QnVmZmVyRGF0YSk7Ci0gICAgICAgIGNsZWFyKCk7Ci0gICAgfQotfQotCi12
b2lkIENhY2hlZFJhd1Jlc291cmNlOjpub3RpZnlDbGllbnRzRGF0YVdhc1JlY2VpdmVkKGNvbnN0
IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+
IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI8Q2Fj
aGVkUmF3UmVzb3VyY2VDbGllbnQ+IHcobV9jbGllbnRzKTsKLSAgICB3aGlsZSAoQ2FjaGVkUmF3
UmVzb3VyY2VDbGllbnQqIGMgPSB3Lm5leHQoKSkKLSAgICAgICAgYy0+ZGF0YVJlY2VpdmVkKHRo
aXMsIGRhdGEsIGxlbmd0aCk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OmRpZEFkZENs
aWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCogYykKLXsKLSAgICBpZiAoIWhhc0NsaWVudChjKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIC8vIFRoZSBjYWxscyB0byB0aGUgY2xpZW50IGNhbiByZXN1
bHQgaW4gZXZlbnRzIHJ1bm5pbmcsIHBvdGVudGlhbGx5IGNhdXNpbmcKLSAgICAvLyB0aGlzIHJl
c291cmNlIHRvIGJlIGV2aWN0ZWQgZnJvbSB0aGUgY2FjaGUgYW5kIGFsbCBjbGllbnRzIHRvIGJl
IHJlbW92ZWQsCi0gICAgLy8gc28gYSBwcm90ZWN0b3IgaXMgbmVjZXNzYXJ5LgotICAgIENhY2hl
ZFJlc291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwot
ICAgIENhY2hlZFJhd1Jlc291cmNlQ2xpZW50KiBjbGllbnQgPSBzdGF0aWNfY2FzdDxDYWNoZWRS
YXdSZXNvdXJjZUNsaWVudCo+KGMpOwotICAgIHNpemVfdCByZWRpcmVjdENvdW50ID0gbV9yZWRp
cmVjdENoYWluLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZGlyZWN0Q291
bnQ7IGkrKykgewotICAgICAgICBSZWRpcmVjdFBhaXIgcmVkaXJlY3QgPSBtX3JlZGlyZWN0Q2hh
aW5baV07Ci0gICAgICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHJlZGlyZWN0Lm1fcmVxdWVz
dCk7Ci0gICAgICAgIGNsaWVudC0+cmVkaXJlY3RSZWNlaXZlZCh0aGlzLCByZXF1ZXN0LCByZWRp
cmVjdC5tX3JlZGlyZWN0UmVzcG9uc2UpOwotICAgICAgICBpZiAoIWhhc0NsaWVudChjKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJUKHJlZGlyZWN0Q291bnQgPT0gbV9y
ZWRpcmVjdENoYWluLnNpemUoKSk7Ci0KLSAgICBpZiAoIW1fcmVzcG9uc2UuaXNOdWxsKCkpIHsK
LSAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZShtX3Jlc3BvbnNlKTsKLSAgICAgICAg
aWYgKHZhbGlkYXRpb25Db21wbGV0aW5nKCkpCi0gICAgICAgICAgICByZXNwb25zZS5zZXRTb3Vy
Y2UoUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpNZW1vcnlDYWNoZUFmdGVyVmFsaWRhdGlvbik7
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKCF2YWxpZGF0aW9uSW5Qcm9ncmVz
cygpKTsKLSAgICAgICAgICAgIHJlc3BvbnNlLnNldFNvdXJjZShSZXNvdXJjZVJlc3BvbnNlOjpT
b3VyY2U6Ok1lbW9yeUNhY2hlKTsKLSAgICAgICAgfQotICAgICAgICBjbGllbnQtPnJlc3BvbnNl
UmVjZWl2ZWQodGhpcywgcmVzcG9uc2UpOwotICAgIH0KLSAgICBpZiAoIWhhc0NsaWVudChjKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX2RhdGEpCi0gICAgICAgIGNsaWVudC0+ZGF0YVJl
Y2VpdmVkKHRoaXMsIG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSk7Ci0gICAgaWYgKCFo
YXNDbGllbnQoYykpCi0gICAgICAgcmV0dXJuOwotICAgIENhY2hlZFJlc291cmNlOjpkaWRBZGRD
bGllbnQoY2xpZW50KTsKLX0KLQotdm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6YWxsQ2xpZW50c1Jl
bW92ZWQoKQotewotICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgbV9sb2FkZXItPmNhbmNlbElm
Tm90RmluaXNoaW5nKCk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OnJlZGlyZWN0UmVj
ZWl2ZWQoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSkKLXsKLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBpZiAoIXJlc3BvbnNlLmlzTnVsbCgpKSB7Ci0gICAg
ICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyPENhY2hlZFJhd1Jlc291cmNlQ2xpZW50PiB3
KG1fY2xpZW50cyk7Ci0gICAgICAgIHdoaWxlIChDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCogYyA9
IHcubmV4dCgpKQotICAgICAgICAgICAgYy0+cmVkaXJlY3RSZWNlaXZlZCh0aGlzLCByZXF1ZXN0
LCByZXNwb25zZSk7Ci0gICAgICAgIG1fcmVkaXJlY3RDaGFpbi5hcHBlbmQoUmVkaXJlY3RQYWly
KHJlcXVlc3QsIHJlc3BvbnNlKSk7Ci0gICAgfQotICAgIENhY2hlZFJlc291cmNlOjpyZWRpcmVj
dFJlY2VpdmVkKHJlcXVlc3QsIHJlc3BvbnNlKTsKLX0KLQotdm9pZCBDYWNoZWRSYXdSZXNvdXJj
ZTo6cmVzcG9uc2VSZWNlaXZlZChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsK
LSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gcHJvdGVjdGVkVGhp
cyh0aGlzKTsKLSAgICBpZiAoIW1faWRlbnRpZmllcikKLSAgICAgICAgbV9pZGVudGlmaWVyID0g
bV9sb2FkZXItPmlkZW50aWZpZXIoKTsKLSAgICBDYWNoZWRSZXNvdXJjZTo6cmVzcG9uc2VSZWNl
aXZlZChyZXNwb25zZSk7Ci0gICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI8Q2FjaGVkUmF3
UmVzb3VyY2VDbGllbnQ+IHcobV9jbGllbnRzKTsKLSAgICB3aGlsZSAoQ2FjaGVkUmF3UmVzb3Vy
Y2VDbGllbnQqIGMgPSB3Lm5leHQoKSkKLSAgICAgICAgYy0+cmVzcG9uc2VSZWNlaXZlZCh0aGlz
LCBtX3Jlc3BvbnNlKTsKLX0KLQotYm9vbCBDYWNoZWRSYXdSZXNvdXJjZTo6c2hvdWxkQ2FjaGVS
ZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBDYWNoZWRS
ZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudD4gdyhtX2NsaWVudHMp
OwotICAgIHdoaWxlIChDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgpKSB7Ci0g
ICAgICAgIGlmICghYy0+c2hvdWxkQ2FjaGVSZXNwb25zZSh0aGlzLCByZXNwb25zZSkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IENhY2hlZFJhd1Jlc291cmNlOjpkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNT
ZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQotewotICAgIENhY2hl
ZFJlc291cmNlQ2xpZW50V2Fsa2VyPENhY2hlZFJhd1Jlc291cmNlQ2xpZW50PiB3KG1fY2xpZW50
cyk7Ci0gICAgd2hpbGUgKENhY2hlZFJhd1Jlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkpCi0g
ICAgICAgIGMtPmRhdGFTZW50KHRoaXMsIGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVTZW50KTsK
LX0KLQotdm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6c3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZWRS
ZXNvdXJjZSgpCi17Ci0gICAgQVNTRVJUKG1fbG9hZGVyKTsKLSAgICAvLyBJZiB3ZSdyZSBpbiB0
aGUgbWlkZGxlIG9mIGEgc3VjY2Vzc2Z1bCByZXZhbGlkYXRpb24sIHJlc3BvbnNlUmVjZWl2ZWQo
KSBoYXNuJ3QgYmVlbiBjYWxsZWQsIHNvIHdlIGhhdmVuJ3Qgc2V0IG1faWRlbnRpZmllci4KLSAg
ICBBU1NFUlQoIW1faWRlbnRpZmllcik7Ci0gICAgZG93bmNhc3Q8Q2FjaGVkUmF3UmVzb3VyY2U+
KCpyZXNvdXJjZVRvUmV2YWxpZGF0ZSgpKS5tX2lkZW50aWZpZXIgPSBtX2xvYWRlci0+aWRlbnRp
ZmllcigpOwotICAgIENhY2hlZFJlc291cmNlOjpzd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJl
c291cmNlKCk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OnNldERlZmVyc0xvYWRpbmco
Ym9vbCBkZWZlcnMpCi17Ci0gICAgaWYgKG1fbG9hZGVyKQotICAgICAgICBtX2xvYWRlci0+c2V0
RGVmZXJzTG9hZGluZyhkZWZlcnMpOwotfQotCi12b2lkIENhY2hlZFJhd1Jlc291cmNlOjpzZXRE
YXRhQnVmZmVyaW5nUG9saWN5KERhdGFCdWZmZXJpbmdQb2xpY3kgZGF0YUJ1ZmZlcmluZ1BvbGlj
eSkKLXsKLSAgICBtX29wdGlvbnMuZGF0YUJ1ZmZlcmluZ1BvbGljeSA9IGRhdGFCdWZmZXJpbmdQ
b2xpY3k7Ci19Ci0KLXN0YXRpYyBib29sIHNob3VsZElnbm9yZUhlYWRlckZvckNhY2hlUmV1c2Uo
SFRUUEhlYWRlck5hbWUgbmFtZSkKLXsKLSAgICBzd2l0Y2ggKG5hbWUpIHsKLSAgICAvLyBGSVhN
RTogVGhpcyBsaXN0IG9mIGhlYWRlcnMgdGhhdCBkb24ndCBhZmZlY3QgY2FjaGUgcG9saWN5IGFs
bW9zdCBjZXJ0YWlubHkgaXNuJ3QgY29tcGxldGUuCi0gICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6
QWNjZXB0OgotICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OkNhY2hlQ29udHJvbDoKLSAgICBjYXNl
IEhUVFBIZWFkZXJOYW1lOjpQcmFnbWE6Ci0gICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6UHVycG9z
ZToKLSAgICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpSZWZlcmVyOgotICAgIGNhc2UgSFRUUEhlYWRl
ck5hbWU6OlVzZXJBZ2VudDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIENhY2hlZFJhd1Jlc291cmNl
OjpjYW5SZXVzZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QpIGNvbnN0Ci17Ci0g
ICAgaWYgKGRhdGFCdWZmZXJpbmdQb2xpY3koKSA9PSBEb05vdEJ1ZmZlckRhdGEpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX3Jlc291cmNlUmVxdWVzdC5odHRwTWV0aG9kKCkg
IT0gbmV3UmVxdWVzdC5odHRwTWV0aG9kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmIChtX3Jlc291cmNlUmVxdWVzdC5odHRwQm9keSgpICE9IG5ld1JlcXVlc3QuaHR0cEJvZHko
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fcmVzb3VyY2VSZXF1ZXN0LmFs
bG93Q29va2llcygpICE9IG5ld1JlcXVlc3QuYWxsb3dDb29raWVzKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmIChuZXdSZXF1ZXN0LmlzQ29uZGl0aW9uYWwoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRW5zdXJlIG1vc3QgaGVhZGVycyBtYXRjaCB0aGUgZXhp
c3RpbmcgaGVhZGVycyBiZWZvcmUgY29udGludWluZy4KLSAgICAvLyBOb3RlIHRoYXQgdGhlIGxp
c3Qgb2YgaWdub3JlZCBoZWFkZXJzIGluY2x1ZGVzIHNvbWUgaGVhZGVycyBleHBsaWNpdGx5IHJl
bGF0ZWQgdG8gY2FjaGluZy4KLSAgICAvLyBBIG1vcmUgZGV0YWlsZWQgY2hlY2sgb2YgY2FjaGlu
ZyBwb2xpY3kgd2lsbCBiZSBwZXJmb3JtZWQgbGF0ZXIsIHRoaXMgaXMgc2ltcGx5IGEgbGlzdCBv
ZgotICAgIC8vIGhlYWRlcnMgdGhhdCB3ZSBtaWdodCBwZXJtaXQgdG8gYmUgZGlmZmVyZW50IGFu
ZCBzdGlsbCByZXVzZSB0aGUgZXhpc3RpbmcgQ2FjaGVkUmVzb3VyY2UuCi0gICAgY29uc3QgSFRU
UEhlYWRlck1hcCYgbmV3SGVhZGVycyA9IG5ld1JlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygpOwot
ICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIG9sZEhlYWRlcnMgPSBtX3Jlc291cmNlUmVxdWVzdC5o
dHRwSGVhZGVyRmllbGRzKCk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IG5ld0hl
YWRlcnMpIHsKLSAgICAgICAgaWYgKGhlYWRlci5rZXlBc0hUVFBIZWFkZXJOYW1lKSB7Ci0gICAg
ICAgICAgICBpZiAoIXNob3VsZElnbm9yZUhlYWRlckZvckNhY2hlUmV1c2UoaGVhZGVyLmtleUFz
SFRUUEhlYWRlck5hbWUudmFsdWUoKSkKLSAgICAgICAgICAgICAgICAmJiBoZWFkZXIudmFsdWUg
IT0gb2xkSGVhZGVycy5jb21tb25IZWFkZXJzKCkuZ2V0KGhlYWRlci5rZXlBc0hUVFBIZWFkZXJO
YW1lLnZhbHVlKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBl
bHNlIGlmIChoZWFkZXIudmFsdWUgIT0gb2xkSGVhZGVycy51bmNvbW1vbkhlYWRlcnMoKS5nZXQo
aGVhZGVyLmtleSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8g
Rm9yIHRoaXMgc2Vjb25kIGxvb3AsIHdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdG8gY29tcGFyZSB2
YWx1ZXMsIGNoZWNraW5nIHRoYXQgdGhlCi0gICAgLy8ga2V5IGlzIGNvbnRhaW5lZCBpbiBuZXdI
ZWFkZXJzIGlzIHN1ZmZpY2llbnQgZHVlIHRvIHRoZSBwcmV2aW91cyBsb29wLgotICAgIGZvciAo
Y29uc3QgYXV0byYgaGVhZGVyIDogb2xkSGVhZGVycykgewotICAgICAgICBpZiAoaGVhZGVyLmtl
eUFzSFRUUEhlYWRlck5hbWUpIHsKLSAgICAgICAgICAgIGlmICghc2hvdWxkSWdub3JlSGVhZGVy
Rm9yQ2FjaGVSZXVzZShoZWFkZXIua2V5QXNIVFRQSGVhZGVyTmFtZS52YWx1ZSgpKQotICAgICAg
ICAgICAgICAgICYmICFuZXdIZWFkZXJzLmNvbW1vbkhlYWRlcnMoKS5jb250YWlucyhoZWFkZXIu
a2V5QXNIVFRQSGVhZGVyTmFtZS52YWx1ZSgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0gZWxzZSBpZiAoIW5ld0hlYWRlcnMudW5jb21tb25IZWFkZXJzKCkuY29u
dGFpbnMoaGVhZGVyLmtleSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OmNsZWFyKCkKLXsK
LSAgICBtX2RhdGEgPSBudWxscHRyOwotICAgIHNldEVuY29kZWRTaXplKDApOwotICAgIGlmICht
X2xvYWRlcikKLSAgICAgICAgbV9sb2FkZXItPmNsZWFyUmVzb3VyY2VEYXRhKCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJhd1Jlc291cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmYjU0ZDg0
NTgyYzk1MDA4MTBjYzk2MGZhMzYxNDU5Yjc1ODk2MDYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJhd1Jlc291cmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAgICBD
b3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBD
b3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gICAgQ29w
eXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQotICAg
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0K
LSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotKi8KLQotI2lmbmRlZiBDYWNoZWRSYXdSZXNvdXJjZV9oCi0jZGVmaW5lIENh
Y2hlZFJhd1Jlc291cmNlX2gKLQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ2FjaGVkUmVzb3VyY2VDbGllbnQ7Ci1jbGFzcyBTdWJy
ZXNvdXJjZUxvYWRlcjsKLQotY2xhc3MgQ2FjaGVkUmF3UmVzb3VyY2UgZmluYWwgOiBwdWJsaWMg
Q2FjaGVkUmVzb3VyY2UgewotcHVibGljOgotICAgIENhY2hlZFJhd1Jlc291cmNlKFJlc291cmNl
UmVxdWVzdCYsIFR5cGUsIFNlc3Npb25JRCk7Ci0KLSAgICAvLyBGSVhNRTogQXNzb2NpYXRlZFVS
TExvYWRlciBzaG91bGRuJ3QgYmUgYSBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIgYW5kIHRoZXJl
Zm9yZSBzaG91bGRuJ3QKLSAgICAvLyB1c2UgQ2FjaGVkUmF3UmVzb3VyY2UuIEhvd2V2ZXIsIGl0
IGlzLCBhbmQgaXQgbmVlZHMgdG8gYmUgYWJsZSB0byBkZWZlciBsb2FkaW5nLgotICAgIC8vIFRo
aXMgY2FuIGJlIGZpeGVkIGJ5IHNwbGl0dGluZyBDT1JTIHByZWZsaWdodGluZyBvdXQgb2YgRG9j
dW1lbnRUaHJlYWNhYmxlTG9hZGVyLgotICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnNMb2FkaW5n
KGJvb2wpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldERhdGFCdWZmZXJpbmdQb2xpY3koRGF0YUJ1
ZmZlcmluZ1BvbGljeSk7Ci0gICAgCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgZXhwb3NlZCBmb3Ig
dGhlIElucHNlY3Rvckluc3RydW1lbnRhdGlvbiBmb3IgcHJlZmxpZ2h0cyBpbiBEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXIuIEl0J3MgYWxzbyByZWFsbHkgbGFtZS4KLSAgICB1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KLQotICAgIHZvaWQg
Y2xlYXIoKTsKLQotICAgIGJvb2wgY2FuUmV1c2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgY29u
c3Q7Ci0KLSAgICBib29sIHdhc1JlZGlyZWN0ZWQoKSBjb25zdCB7IHJldHVybiAhbV9yZWRpcmVj
dENoYWluLmlzRW1wdHkoKTsgfTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGRpZEFkZENsaWVudChD
YWNoZWRSZXNvdXJjZUNsaWVudCopIG92ZXJyaWRlOwotICAgIHZvaWQgYWRkRGF0YUJ1ZmZlcihT
aGFyZWRCdWZmZXImKSBvdmVycmlkZTsKLSAgICB2b2lkIGFkZERhdGEoY29uc3QgY2hhciogZGF0
YSwgdW5zaWduZWQgbGVuZ3RoKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbmlzaExvYWRpbmcoU2hh
cmVkQnVmZmVyKikgb3ZlcnJpZGU7Ci0KLSAgICBib29sIHNob3VsZElnbm9yZUhUVFBTdGF0dXND
b2RlRXJyb3JzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZvaWQgYWxs
Q2xpZW50c1JlbW92ZWQoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgcmVkaXJlY3RSZWNlaXZlZChS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCByZXNwb25zZVJlY2VpdmVkKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSBvdmVycmlkZTsK
LSAgICBib29sIHNob3VsZENhY2hlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIG92
ZXJyaWRlOwotICAgIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2Vu
dCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkgb3ZlcnJpZGU7Ci0KLSAg
ICB2b2lkIHN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UoKSBvdmVycmlkZTsKLSAg
ICBib29sIG1heVRyeVJlcGxhY2VFbmNvZGVkRGF0YSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fYWxsb3dFbmNvZGVkRGF0YVJlcGxhY2VtZW50OyB9Ci0KLSAgICBjb25zdCBjaGFyKiBjYWxj
dWxhdGVJbmNyZW1lbnRhbERhdGFDaHVuayhTaGFyZWRCdWZmZXIqLCB1bnNpZ25lZCYgaW5jcmVt
ZW50YWxEYXRhTGVuZ3RoKTsKLSAgICB2b2lkIG5vdGlmeUNsaWVudHNEYXRhV2FzUmVjZWl2ZWQo
Y29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKTsKLQotI2lmIFVTRShTT1VQKQotICAg
IGNoYXIqIGdldE9yQ3JlYXRlUmVhZEJ1ZmZlcihzaXplX3QgcmVxdWVzdGVkU2l6ZSwgc2l6ZV90
JiBhY3R1YWxTaXplKSBvdmVycmlkZTsKLSNlbmRpZgotCi0gICAgdW5zaWduZWQgbG9uZyBtX2lk
ZW50aWZpZXI7Ci0gICAgYm9vbCBtX2FsbG93RW5jb2RlZERhdGFSZXBsYWNlbWVudDsKLQotICAg
IHN0cnVjdCBSZWRpcmVjdFBhaXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgUmVk
aXJlY3RQYWlyKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKLSAgICAgICAgICAgIDogbV9yZXF1ZXN0KHJlcXVl
c3QpCi0gICAgICAgICAgICAsIG1fcmVkaXJlY3RSZXNwb25zZShyZWRpcmVjdFJlc3BvbnNlKQot
ICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QgbV9y
ZXF1ZXN0OwotICAgICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlIG1fcmVkaXJlY3RSZXNwb25z
ZTsKLSAgICB9OwotCi0gICAgVmVjdG9yPFJlZGlyZWN0UGFpcj4gbV9yZWRpcmVjdENoYWluOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JF
R0lOKFdlYkNvcmU6OkNhY2hlZFJhd1Jlc291cmNlKQotICAgIHN0YXRpYyBib29sIGlzVHlwZShj
b25zdCBXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpIHsgcmV0dXJuIHJlc291cmNl
LmlzTWFpbk9yTWVkaWFPclJhd1Jlc291cmNlKCk7IH0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RU5EKCkKLQotI2VuZGlmIC8vIENhY2hlZFJhd1Jlc291cmNlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZUNsaWVudC5oIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlQ2xpZW50LmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlMGM5ZmRmOTE4NGM5NDVhZmNlMjljZWQ4ZTllMDlhNmFh
YjNhM2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlQ2xpZW50LmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJz
IEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJr
IE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVs
IFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgQ2FjaGVkUmVzb3VyY2U7Ci1jbGFzcyBSZXNvdXJjZVJlcXVl
c3Q7Ci1jbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwotCi1jbGFzcyBDYWNoZWRSYXdSZXNvdXJjZUNs
aWVudCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB+Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQoKSB7IH0KLSAgICBzdGF0aWMgQ2FjaGVkUmVzb3Vy
Y2VDbGllbnRUeXBlIGV4cGVjdGVkVHlwZSgpIHsgcmV0dXJuIFJhd1Jlc291cmNlVHlwZTsgfQot
ICAgIENhY2hlZFJlc291cmNlQ2xpZW50VHlwZSByZXNvdXJjZUNsaWVudFR5cGUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBleHBlY3RlZFR5cGUoKTsgfQotCi0gICAgdmlydHVhbCB2b2lkIGRh
dGFTZW50KENhY2hlZFJlc291cmNlKiwgdW5zaWduZWQgbG9uZyBsb25nIC8qIGJ5dGVzU2VudCAq
LywgdW5zaWduZWQgbG9uZyBsb25nIC8qIHRvdGFsQnl0ZXNUb0JlU2VudCAqLykgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIHJlc3BvbnNlUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqLCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJikgeyB9Ci0gICAgdmlydHVhbCBib29sIHNob3VsZENhY2hlUmVzcG9uc2Uo
Q2FjaGVkUmVzb3VyY2UqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIHZpcnR1YWwgdm9pZCBkYXRhUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqLCBjb25zdCBj
aGFyKiAvKiBkYXRhICovLCBpbnQgLyogbGVuZ3RoICovKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
cmVkaXJlY3RSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KLSNpZiBVU0UoU09VUCkKLSAgICB2aXJ0dWFsIGNoYXIq
IGdldE9yQ3JlYXRlUmVhZEJ1ZmZlcihDYWNoZWRSZXNvdXJjZSosIHNpemVfdCAvKiByZXF1ZXN0
ZWRTaXplICovLCBzaXplX3QmIC8qIGFjdHVhbFNpemUgKi8pIHsgcmV0dXJuIG51bGxwdHI7IH0K
LSNlbmRpZgotfTsKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxM2FlNjJhMTNhZDBj
ZDhmYjExMjlhM2JlMmNlMmNiOGZmYTM1YTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDkzNSArMCwwIEBACi0vKgotICAgIENvcHlyaWdo
dCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHlyaWdo
dCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAgICBDb3B5cmlnaHQg
KEMpIDIwMDIgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQotICAgIENvcHlyaWdodCAo
QykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKLSAgICBDb3B5cmln
aHQgKEMpIDIwMDQtMjAxMSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0K
LSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCi0KLSNp
bmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
Q2xpZW50V2Fsa2VyLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNs
dWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkNyb3NzT3JpZ2luQWNjZXNz
Q29udHJvbC5oIgotI2luY2x1ZGUgIkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmgiCi0jaW5jbHVk
ZSAiRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVk
ZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKLSNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKLSNp
bmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKLSNpbmNsdWRlICJVUkwuaCIKLSNp
bmNsdWRlICJMb2FkZXJTdHJhdGVneS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRl
ICJNYWluRnJhbWUuaCIKLSNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgotI2luY2x1ZGUgIlBhZ2Uu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhh
bmRsZS5oIgotI2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlP
cmlnaW4uaCIKLSNpbmNsdWRlICJTZWN1cml0eVBvbGljeS5oIgotI2luY2x1ZGUgIlN1YnJlc291
cmNlTG9hZGVyLmgiCi0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmg+Ci0j
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLSNpZiBVU0UoUVVJQ0tfTE9PSykKLSNpbmNs
dWRlICJRdWlja0xvb2suaCIKLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgV1RGOwotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLVJlc291cmNlTG9hZFByaW9yaXR5IENhY2hlZFJlc291cmNlOjpk
ZWZhdWx0UHJpb3JpdHlGb3JSZXNvdXJjZVR5cGUoVHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAo
dHlwZSkgewotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZToKLSAgICAgICAg
cmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5SGlnaDsKLSAgICBjYXNlIENhY2hlZFJl
c291cmNlOjpDU1NTdHlsZVNoZWV0OgotICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3Jp
dHk6OkhpZ2g7Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OgotI2lmIEVOQUJMRShT
VkdfRk9OVFMpCi0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U1ZHRm9udFJlc291cmNlOgotI2Vu
ZGlmCi0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TWVkaWFSZXNvdXJjZToKLSAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmF3
UmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TWVkaXVtOwot
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBS
ZXNvdXJjZUxvYWRQcmlvcml0eTo6TG93OwotI2lmIEVOQUJMRShYU0xUKQotICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6Ci0gICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQ
cmlvcml0eTo6SGlnaDsKLSNlbmRpZgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0RvY3Vt
ZW50UmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TG93Owot
I2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQ
cmVmZXRjaDoKLSAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5TG93Owot
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtTdWJyZXNvdXJjZToKLSAgICAgICAgcmV0dXJu
IFJlc291cmNlTG9hZFByaW9yaXR5OjpWZXJ5TG93OwotI2VuZGlmCi0jaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlRleHRUcmFja1Jlc291cmNlOgotICAg
ICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OkxvdzsKLSNlbmRpZgotICAgIH0KLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6
OkxvdzsKLX0KLQotc3RhdGljIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgZGVhZERlY29kZWRE
YXRhRGVsZXRpb25JbnRlcnZhbEZvclJlc291cmNlVHlwZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0
eXBlKQotewotICAgIGlmICh0eXBlID09IENhY2hlZFJlc291cmNlOjpTY3JpcHQpCi0gICAgICAg
IHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHsgMCB9OwotCi0gICAgcmV0dXJuIE1l
bW9yeUNhY2hlOjpzaW5nbGV0b24oKS5kZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKCk7
Ci19Ci0KLURFRklORV9ERUJVR19PTkxZX0dMT0JBTChSZWZDb3VudGVkTGVha0NvdW50ZXIsIGNh
Y2hlZFJlc291cmNlTGVha0NvdW50ZXIsICgiQ2FjaGVkUmVzb3VyY2UiKSk7Ci0KLUNhY2hlZFJl
c291cmNlOjpDYWNoZWRSZXNvdXJjZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFR5
cGUgdHlwZSwgU2Vzc2lvbklEIHNlc3Npb25JRCkKLSAgICA6IG1fcmVzb3VyY2VSZXF1ZXN0KHJl
cXVlc3QpCi0gICAgLCBtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lcigqdGhpcywgJkNhY2hlZFJl
c291cmNlOjpkZXN0cm95RGVjb2RlZERhdGEsIGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2
YWxGb3JSZXNvdXJjZVR5cGUodHlwZSkpCi0gICAgLCBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCi0g
ICAgLCBtX2xvYWRQcmlvcml0eShkZWZhdWx0UHJpb3JpdHlGb3JSZXNvdXJjZVR5cGUodHlwZSkp
Ci0gICAgLCBtX3Jlc3BvbnNlVGltZXN0YW1wKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5v
dygpKQotICAgICwgbV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWUoMCkKLSAgICAsIG1fbG9hZEZpbmlz
aFRpbWUoMCkKLSAgICAsIG1fZW5jb2RlZFNpemUoMCkKLSAgICAsIG1fZGVjb2RlZFNpemUoMCkK
LSAgICAsIG1fYWNjZXNzQ291bnQoMCkKLSAgICAsIG1faGFuZGxlQ291bnQoMCkKLSAgICAsIG1f
cHJlbG9hZENvdW50KDApCi0gICAgLCBtX3ByZWxvYWRSZXN1bHQoUHJlbG9hZE5vdFJlZmVyZW5j
ZWQpCi0gICAgLCBtX3JlcXVlc3RlZEZyb21OZXR3b3JraW5nTGF5ZXIoZmFsc2UpCi0gICAgLCBt
X2luQ2FjaGUoZmFsc2UpCi0gICAgLCBtX2xvYWRpbmcoZmFsc2UpCi0gICAgLCBtX3N3aXRjaGlu
Z0NsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UoZmFsc2UpCi0gICAgLCBtX3R5cGUodHlwZSkK
LSAgICAsIG1fc3RhdHVzKFBlbmRpbmcpCi0jaWZuZGVmIE5ERUJVRwotICAgICwgbV9kZWxldGVk
KGZhbHNlKQotICAgICwgbV9scnVJbmRleCgwKQotI2VuZGlmCi0gICAgLCBtX293bmluZ0NhY2hl
ZFJlc291cmNlTG9hZGVyKG51bGxwdHIpCi0gICAgLCBtX3Jlc291cmNlVG9SZXZhbGlkYXRlKG51
bGxwdHIpCi0gICAgLCBtX3Byb3h5UmVzb3VyY2UobnVsbHB0cikKLXsKLSAgICBBU1NFUlQobV90
eXBlID09IHVuc2lnbmVkKHR5cGUpKTsgLy8gbV90eXBlIGlzIGEgYml0ZmllbGQsIHNvIHRoaXMg
dGVzdHMgY2FyZWxlc3MgdXBkYXRlcyBvZiB0aGUgZW51bS4KLSAgICBBU1NFUlQoc2Vzc2lvbklE
LmlzVmFsaWQoKSk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIGNhY2hlZFJlc291cmNlTGVha0NvdW50
ZXIuaW5jcmVtZW50KCk7Ci0jZW5kaWYKLQotICAgIGlmICghbV9yZXNvdXJjZVJlcXVlc3QudXJs
KCkuaGFzRnJhZ21lbnRJZGVudGlmaWVyKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBVUkwgdXJs
Rm9yQ2FjaGUgPSBNZW1vcnlDYWNoZTo6cmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVySWZOZWVkZWQo
bV9yZXNvdXJjZVJlcXVlc3QudXJsKCkpOwotICAgIGlmICh1cmxGb3JDYWNoZS5oYXNGcmFnbWVu
dElkZW50aWZpZXIoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fZnJhZ21lbnRJZGVudGlmaWVy
Rm9yUmVxdWVzdCA9IG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLmZyYWdtZW50SWRlbnRpZmllcigp
OwotICAgIG1fcmVzb3VyY2VSZXF1ZXN0LnNldFVSTCh1cmxGb3JDYWNoZSk7Ci19Ci0KLUNhY2hl
ZFJlc291cmNlOjp+Q2FjaGVkUmVzb3VyY2UoKQotewotICAgIEFTU0VSVCghbV9yZXNvdXJjZVRv
UmV2YWxpZGF0ZSk7IC8vIFNob3VsZCBiZSB0cnVlIGJlY2F1c2UgY2FuRGVsZXRlKCkgY2hlY2tz
IHRoaXMuCi0gICAgQVNTRVJUKGNhbkRlbGV0ZSgpKTsKLSAgICBBU1NFUlQoIWluQ2FjaGUoKSk7
Ci0gICAgQVNTRVJUKCFtX2RlbGV0ZWQpOwotICAgIEFTU0VSVCh1cmwoKS5pc051bGwoKSB8fCAh
YWxsb3dzQ2FjaGluZygpIHx8IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5yZXNvdXJjZUZvclJl
cXVlc3QocmVzb3VyY2VSZXF1ZXN0KCksIHNlc3Npb25JRCgpKSAhPSB0aGlzKTsKLQotI2lmbmRl
ZiBOREVCVUcKLSAgICBtX2RlbGV0ZWQgPSB0cnVlOwotICAgIGNhY2hlZFJlc291cmNlTGVha0Nv
dW50ZXIuZGVjcmVtZW50KCk7Ci0jZW5kaWYKLQotICAgIGlmIChtX293bmluZ0NhY2hlZFJlc291
cmNlTG9hZGVyKQotICAgICAgICBtX293bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyLT5yZW1vdmVD
YWNoZWRSZXNvdXJjZSgqdGhpcyk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OmZhaWxCZWZv
cmVTdGFydGluZygpCi17Ci0gICAgLy8gRklYTUU6IFdoYXQgaWYgcmVzb3VyY2VzIGluIG90aGVy
IGZyYW1lcyB3ZXJlIHdhaXRpbmcgZm9yIHRoaXMgcmV2YWxpZGF0aW9uPwotICAgIExPRyhSZXNv
dXJjZUxvYWRpbmcsICJDYW5ub3Qgc3RhcnQgbG9hZGluZyAnJXMnIiwgdXJsKCkuc3RyaW5nKCku
bGF0aW4xKCkuZGF0YSgpKTsKLSAgICBpZiAoYWxsb3dzQ2FjaGluZygpICYmIG1fcmVzb3VyY2VU
b1JldmFsaWRhdGUpCi0gICAgICAgIE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5yZXZhbGlkYXRp
b25GYWlsZWQoKnRoaXMpOwotICAgIGVycm9yKENhY2hlZFJlc291cmNlOjpMb2FkRXJyb3IpOwot
fQotCi1zdGF0aWMgdm9pZCBhZGRBZGRpdGlvbmFsUmVxdWVzdEhlYWRlcnNUb1JlcXVlc3QoUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBDYWNoZWRSZXNvdXJjZUxvYWRlciYgY2FjaGVk
UmVzb3VyY2VMb2FkZXIsIENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkKLXsKLSAgICBpZiAocmVz
b3VyY2UudHlwZSgpID09IENhY2hlZFJlc291cmNlOjpNYWluUmVzb3VyY2UpCi0gICAgICAgIHJl
dHVybjsKLSAgICAvLyBJbiBzb21lIGNhc2VzIHdlIG1heSB0cnkgdG8gbG9hZCByZXNvdXJjZXMg
aW4gZnJhbWVsZXNzIGRvY3VtZW50cy4gU3VjaCBsb2FkcyBhbHdheXMgZmFpbC4KLSAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkbid0IGdldCB0aGlzIGZhci4KLSAgICBpZiAoIWNhY2hlZFJlc291cmNl
TG9hZGVyLmZyYW1lKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE5vdGU6IFdlIHNraXAg
dGhlIENvbnRlbnQtU2VjdXJpdHktUG9saWN5IGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjaGVjawot
ICAgIC8vIHRoZSBDb250ZW50LVNlY3VyaXR5LVBvbGljeSBhdCB0aGUgQ2FjaGVkUmVzb3VyY2VM
b2FkZXIgbGF5ZXIgc28gd2UgY2FuCi0gICAgLy8gaGFuZGxlIGRpZmZlcmVudCByZXNvdXJjZSB0
eXBlcyBkaWZmZXJlbnRseS4KLSAgICBGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIgPSBjYWNoZWRS
ZXNvdXJjZUxvYWRlci5mcmFtZSgpLT5sb2FkZXIoKTsKLSAgICBTdHJpbmcgb3V0Z29pbmdSZWZl
cnJlcjsKLSAgICBTdHJpbmcgb3V0Z29pbmdPcmlnaW47Ci0gICAgaWYgKHJlcXVlc3QuaHR0cFJl
ZmVycmVyKCkuaXNOdWxsKCkpIHsKLSAgICAgICAgb3V0Z29pbmdSZWZlcnJlciA9IGZyYW1lTG9h
ZGVyLm91dGdvaW5nUmVmZXJyZXIoKTsKLSAgICAgICAgb3V0Z29pbmdPcmlnaW4gPSBmcmFtZUxv
YWRlci5vdXRnb2luZ09yaWdpbigpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG91dGdvaW5nUmVm
ZXJyZXIgPSByZXF1ZXN0Lmh0dHBSZWZlcnJlcigpOwotICAgICAgICBvdXRnb2luZ09yaWdpbiA9
IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKG91dGdvaW5nUmVmZXJyZXIpLT50b1N0
cmluZygpOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBSZWZhY3RvciBTZWN1cml0eVBvbGljeTo6
Z2VuZXJhdGVSZWZlcnJlckhlYWRlciB0byBhbGlnbiB3aXRoIG5ldyB0ZXJtaW5vbG9neSB1c2Vk
IGluIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LgotICAg
IHN3aXRjaCAocmVzb3VyY2Uub3B0aW9ucygpLnJlZmVycmVyUG9saWN5KSB7Ci0gICAgY2FzZSBG
ZXRjaE9wdGlvbnM6OlJlZmVycmVyUG9saWN5OjpFbXB0eVN0cmluZzogewotICAgICAgICBSZWZl
cnJlclBvbGljeSByZWZlcnJlclBvbGljeSA9IGNhY2hlZFJlc291cmNlTG9hZGVyLmRvY3VtZW50
KCkgPyBjYWNoZWRSZXNvdXJjZUxvYWRlci5kb2N1bWVudCgpLT5yZWZlcnJlclBvbGljeSgpIDog
UmVmZXJyZXJQb2xpY3k6OkRlZmF1bHQ7Ci0gICAgICAgIG91dGdvaW5nUmVmZXJyZXIgPSBTZWN1
cml0eVBvbGljeTo6Z2VuZXJhdGVSZWZlcnJlckhlYWRlcihyZWZlcnJlclBvbGljeSwgcmVxdWVz
dC51cmwoKSwgb3V0Z29pbmdSZWZlcnJlcik7Ci0gICAgICAgIGJyZWFrOyB9Ci0gICAgY2FzZSBG
ZXRjaE9wdGlvbnM6OlJlZmVycmVyUG9saWN5OjpOb1JlZmVycmVyV2hlbkRvd25ncmFkZToKLSAg
ICAgICAgb3V0Z29pbmdSZWZlcnJlciA9IFNlY3VyaXR5UG9saWN5OjpnZW5lcmF0ZVJlZmVycmVy
SGVhZGVyKFJlZmVycmVyUG9saWN5OjpEZWZhdWx0LCByZXF1ZXN0LnVybCgpLCBvdXRnb2luZ1Jl
ZmVycmVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGZXRjaE9wdGlvbnM6OlJlZmVycmVy
UG9saWN5OjpOb1JlZmVycmVyOgotICAgICAgICBvdXRnb2luZ1JlZmVycmVyID0gU3RyaW5nKCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmV0Y2hPcHRpb25zOjpSZWZlcnJlclBvbGljeTo6
T3JpZ2luOgotICAgICAgICBvdXRnb2luZ1JlZmVycmVyID0gU2VjdXJpdHlQb2xpY3k6OmdlbmVy
YXRlUmVmZXJyZXJIZWFkZXIoUmVmZXJyZXJQb2xpY3k6Ok9yaWdpbiwgcmVxdWVzdC51cmwoKSwg
b3V0Z29pbmdSZWZlcnJlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmV0Y2hPcHRpb25z
OjpSZWZlcnJlclBvbGljeTo6T3JpZ2luV2hlbkNyb3NzT3JpZ2luOgotICAgICAgICBpZiAocmVz
b3VyY2UuaXNDcm9zc09yaWdpbigpKQotICAgICAgICAgICAgb3V0Z29pbmdSZWZlcnJlciA9IFNl
Y3VyaXR5UG9saWN5OjpnZW5lcmF0ZVJlZmVycmVySGVhZGVyKFJlZmVycmVyUG9saWN5OjpPcmln
aW4sIHJlcXVlc3QudXJsKCksIG91dGdvaW5nUmVmZXJyZXIpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZldGNoT3B0aW9uczo6UmVmZXJyZXJQb2xpY3k6OlVuc2FmZVVybDoKLSAgICAgICAg
YnJlYWs7Ci0gICAgfTsKLQotICAgIGlmIChvdXRnb2luZ1JlZmVycmVyLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmVxdWVzdC5jbGVhckhUVFBSZWZlcnJlcigpOwotICAgIGVsc2UKLSAgICAgICAgcmVx
dWVzdC5zZXRIVFRQUmVmZXJyZXIob3V0Z29pbmdSZWZlcnJlcik7Ci0gICAgRnJhbWVMb2FkZXI6
OmFkZEhUVFBPcmlnaW5JZk5lZWRlZChyZXF1ZXN0LCBvdXRnb2luZ09yaWdpbik7Ci0KLSAgICBm
cmFtZUxvYWRlci5hZGRFeHRyYUZpZWxkc1RvU3VicmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpOwot
fQotCi12b2lkIENhY2hlZFJlc291cmNlOjphZGRBZGRpdGlvbmFsUmVxdWVzdEhlYWRlcnMoQ2Fj
aGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlcikKLXsKLSAgICBhZGRBZGRpdGlvbmFsUmVxdWVzdEhl
YWRlcnNUb1JlcXVlc3QobV9yZXNvdXJjZVJlcXVlc3QsIGxvYWRlciwgKnRoaXMpOwotfQotCi12
b2lkIENhY2hlZFJlc291cmNlOjpjb21wdXRlT3JpZ2luKENhY2hlZFJlc291cmNlTG9hZGVyJiBs
b2FkZXIpCi17Ci0gICAgaWYgKHR5cGUoKSA9PSBNYWluUmVzb3VyY2UpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVChsb2FkZXIuZG9jdW1lbnQoKSk7Ci0gICAgaWYgKG1fcmVzb3VyY2VS
ZXF1ZXN0Lmhhc0hUVFBPcmlnaW4oKSkKLSAgICAgICAgbV9vcmlnaW4gPSBTZWN1cml0eU9yaWdp
bjo6Y3JlYXRlRnJvbVN0cmluZyhtX3Jlc291cmNlUmVxdWVzdC5odHRwT3JpZ2luKCkpOwotICAg
IGVsc2UKLSAgICAgICAgbV9vcmlnaW4gPSBsb2FkZXIuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmln
aW4oKTsKLSAgICBBU1NFUlQobV9vcmlnaW4pOwotCi0gICAgaWYgKCEobV9yZXNvdXJjZVJlcXVl
c3QudXJsKCkucHJvdG9jb2xJc0RhdGEoKSAmJiBtX29wdGlvbnMuc2FtZU9yaWdpbkRhdGFVUkxG
bGFnID09IFNhbWVPcmlnaW5EYXRhVVJMRmxhZzo6U2V0KSAmJiAhbV9vcmlnaW4tPmNhblJlcXVl
c3QobV9yZXNvdXJjZVJlcXVlc3QudXJsKCkpKQotICAgICAgICBzZXRDcm9zc09yaWdpbigpOwot
Ci0gICAgYWRkQWRkaXRpb25hbFJlcXVlc3RIZWFkZXJzKGxvYWRlcik7Ci19Ci0KLXZvaWQgQ2Fj
aGVkUmVzb3VyY2U6OmxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGNhY2hlZFJlc291cmNlTG9h
ZGVyLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKCFj
YWNoZWRSZXNvdXJjZUxvYWRlci5mcmFtZSgpKSB7Ci0gICAgICAgIGZhaWxCZWZvcmVTdGFydGlu
ZygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEZyYW1lJiBmcmFtZSA9ICpjYWNoZWRS
ZXNvdXJjZUxvYWRlci5mcmFtZSgpOwotCi0gICAgLy8gUHJldmVudCBuZXcgbG9hZHMgaWYgd2Ug
YXJlIGluIHRoZSBQYWdlQ2FjaGUgb3IgYmVpbmcgYWRkZWQgdG8gdGhlIFBhZ2VDYWNoZS4KLSAg
ICBpZiAoZnJhbWUucGFnZSgpICYmIGZyYW1lLnBhZ2UoKS0+aW5QYWdlQ2FjaGUoKSkgewotICAg
ICAgICBmYWlsQmVmb3JlU3RhcnRpbmcoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IEZyYW1lTG9hZGVyJiBmcmFtZUxvYWRlciA9IGZyYW1lLmxvYWRlcigpOwotICAgIGlmIChvcHRp
b25zLnNlY3VyaXR5Q2hlY2sgPT0gRG9TZWN1cml0eUNoZWNrICYmIChmcmFtZUxvYWRlci5zdGF0
ZSgpID09IEZyYW1lU3RhdGVQcm92aXNpb25hbCB8fCAhZnJhbWVMb2FkZXIuYWN0aXZlRG9jdW1l
bnRMb2FkZXIoKSB8fCBmcmFtZUxvYWRlci5hY3RpdmVEb2N1bWVudExvYWRlcigpLT5pc1N0b3Bw
aW5nKCkpKSB7Ci0gICAgICAgIGZhaWxCZWZvcmVTdGFydGluZygpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgbV9vcHRpb25zID0gb3B0aW9uczsKLSAgICBtX2xvYWRpbmcgPSB0cnVl
OwotCi0jaWYgVVNFKFFVSUNLX0xPT0spCi0gICAgaWYgKCFtX3Jlc291cmNlUmVxdWVzdC5pc051
bGwoKSAmJiBtX3Jlc291cmNlUmVxdWVzdC51cmwoKS5wcm90b2NvbElzKFFMUHJldmlld1Byb3Rv
Y29sKCkpKSB7Ci0gICAgICAgIC8vIFdoZW4gUXVpY2tMb29rIGlzIGludm9rZWQgdG8gY29udmVy
dCBhIGRvY3VtZW50LCBpdCByZXR1cm5zIGEgdW5pcXVlIFVSTCBpbiB0aGUKLSAgICAgICAgLy8g
TlNVUkxSZXBvbnNlIGZvciB0aGUgbWFpbiBkb2N1bWVudC4gVG8gbWFrZSBzYWZlUUxVUkxGb3JE
b2N1bWVudFVSTEFuZFJlc291cmNlVVJMKCkKLSAgICAgICAgLy8gd29yaywgd2UgbmVlZCB0byB1
c2UgdGhlIFFMIFVSTCBub3QgdGhlIG9yaWdpbmFsIFVSTC4KLSAgICAgICAgY29uc3QgVVJMJiBk
b2N1bWVudFVSTCA9IGZyYW1lTG9hZGVyLmRvY3VtZW50TG9hZGVyKCktPnJlc3BvbnNlKCkudXJs
KCk7Ci0gICAgICAgIG1fcmVzb3VyY2VSZXF1ZXN0LnNldFVSTChzYWZlUUxVUkxGb3JEb2N1bWVu
dFVSTEFuZFJlc291cmNlVVJMKGRvY3VtZW50VVJMLCB1cmwoKSkpOwotICAgIH0KLSNlbmRpZgot
Ci0gICAgaWYgKCFhY2NlcHQoKS5pc0VtcHR5KCkpCi0gICAgICAgIG1fcmVzb3VyY2VSZXF1ZXN0
LnNldEhUVFBBY2NlcHQoYWNjZXB0KCkpOwotCi0gICAgaWYgKGlzQ2FjaGVWYWxpZGF0b3IoKSkg
ewotICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2VUb1JldmFsaWRhdGUgPSBtX3Jlc291
cmNlVG9SZXZhbGlkYXRlOwotICAgICAgICBBU1NFUlQocmVzb3VyY2VUb1JldmFsaWRhdGUtPmNh
blVzZUNhY2hlVmFsaWRhdG9yKCkpOwotICAgICAgICBBU1NFUlQocmVzb3VyY2VUb1JldmFsaWRh
dGUtPmlzTG9hZGVkKCkpOwotICAgICAgICBjb25zdCBTdHJpbmcmIGxhc3RNb2RpZmllZCA9IHJl
c291cmNlVG9SZXZhbGlkYXRlLT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVy
TmFtZTo6TGFzdE1vZGlmaWVkKTsKLSAgICAgICAgY29uc3QgU3RyaW5nJiBlVGFnID0gcmVzb3Vy
Y2VUb1JldmFsaWRhdGUtPnJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1l
OjpFVGFnKTsKLSAgICAgICAgaWYgKCFsYXN0TW9kaWZpZWQuaXNFbXB0eSgpIHx8ICFlVGFnLmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgQVNTRVJUKGNhY2hlZFJlc291cmNlTG9hZGVyLmNhY2hl
UG9saWN5KHR5cGUoKSkgIT0gQ2FjaGVQb2xpY3lSZWxvYWQpOwotICAgICAgICAgICAgaWYgKGNh
Y2hlZFJlc291cmNlTG9hZGVyLmNhY2hlUG9saWN5KHR5cGUoKSkgPT0gQ2FjaGVQb2xpY3lSZXZh
bGlkYXRlKQotICAgICAgICAgICAgICAgIG1fcmVzb3VyY2VSZXF1ZXN0LnNldEhUVFBIZWFkZXJG
aWVsZChIVFRQSGVhZGVyTmFtZTo6Q2FjaGVDb250cm9sLCAibWF4LWFnZT0wIik7Ci0gICAgICAg
ICAgICBpZiAoIWxhc3RNb2RpZmllZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgbV9yZXNv
dXJjZVJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpJZk1vZGlmaWVk
U2luY2UsIGxhc3RNb2RpZmllZCk7Ci0gICAgICAgICAgICBpZiAoIWVUYWcuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgICAgIG1fcmVzb3VyY2VSZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQ
SGVhZGVyTmFtZTo6SWZOb25lTWF0Y2gsIGVUYWcpOwotICAgICAgICB9Ci0gICAgfQotCi0jaWYg
RU5BQkxFKExJTktfUFJFRkVUQ0gpCi0gICAgaWYgKHR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6
TGlua1ByZWZldGNoIHx8IHR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6TGlua1N1YnJlc291cmNl
KQotICAgICAgICBtX3Jlc291cmNlUmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRl
ck5hbWU6OlB1cnBvc2UsICJwcmVmZXRjaCIpOwotI2VuZGlmCi0gICAgbV9yZXNvdXJjZVJlcXVl
c3Quc2V0UHJpb3JpdHkobG9hZFByaW9yaXR5KCkpOwotCi0gICAgY29tcHV0ZU9yaWdpbihjYWNo
ZWRSZXNvdXJjZUxvYWRlcik7Ci0KLSAgICAvLyBGSVhNRTogSXQncyB1bmZvcnR1bmF0ZSB0aGF0
IHRoZSBjYWNoZSBsYXllciBhbmQgYmVsb3cgZ2V0IHRvIGtub3cgYW55dGhpbmcgYWJvdXQgZnJh
Z21lbnQgaWRlbnRpZmllcnMuCi0gICAgLy8gV2Ugc2hvdWxkIGxvb2sgaW50byByZW1vdmluZyB0
aGUgZXhwZWN0YXRpb24gb2YgdGhhdCBrbm93bGVkZ2UgZnJvbSB0aGUgcGxhdGZvcm0gbmV0d29y
ayBzdGFja3MuCi0gICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QobV9yZXNvdXJjZVJlcXVlc3Qp
OwotICAgIGlmICghbV9mcmFnbWVudElkZW50aWZpZXJGb3JSZXF1ZXN0LmlzTnVsbCgpKSB7Ci0g
ICAgICAgIFVSTCB1cmwgPSByZXF1ZXN0LnVybCgpOwotICAgICAgICB1cmwuc2V0RnJhZ21lbnRJ
ZGVudGlmaWVyKG1fZnJhZ21lbnRJZGVudGlmaWVyRm9yUmVxdWVzdCk7Ci0gICAgICAgIHJlcXVl
c3Quc2V0VVJMKHVybCk7Ci0gICAgICAgIG1fZnJhZ21lbnRJZGVudGlmaWVyRm9yUmVxdWVzdCA9
IFN0cmluZygpOwotICAgIH0KLQotICAgIG1fbG9hZGVyID0gcGxhdGZvcm1TdHJhdGVnaWVzKCkt
PmxvYWRlclN0cmF0ZWd5KCktPmxvYWRSZXNvdXJjZShmcmFtZSwgKnRoaXMsIHJlcXVlc3QsIG9w
dGlvbnMpOwotICAgIGlmICghbV9sb2FkZXIpIHsKLSAgICAgICAgZmFpbEJlZm9yZVN0YXJ0aW5n
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3N0YXR1cyA9IFBlbmRpbmc7Ci19
Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OmxvYWRGcm9tKGNvbnN0IENhY2hlZFJlc291cmNlJiBy
ZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zLCBDYWNoZWRSZXNv
dXJjZUxvYWRlciYgY2FjaGVkUmVzb3VyY2VMb2FkZXIpCi17Ci0gICAgQVNTRVJUKHVybCgpID09
IHJlc291cmNlLnVybCgpKTsKLSAgICBBU1NFUlQodHlwZSgpID09IHJlc291cmNlLnR5cGUoKSk7
Ci0gICAgQVNTRVJUKHJlc291cmNlLnN0YXR1cygpID09IFN0YXR1czo6Q2FjaGVkKTsKLQotICAg
IG1fb3B0aW9ucyA9IG9wdGlvbnM7Ci0gICAgY29tcHV0ZU9yaWdpbihjYWNoZWRSZXNvdXJjZUxv
YWRlcik7Ci0KLSAgICBpZiAoaXNDcm9zc09yaWdpbigpICYmIG9wdGlvbnMubW9kZSA9PSBGZXRj
aE9wdGlvbnM6Ok1vZGU6OkNvcnMpIHsKLSAgICAgICAgQVNTRVJUKG1fb3JpZ2luKTsKLSAgICAg
ICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICAgICAgaWYgKCFXZWJDb3JlOjpwYXNzZXNBY2Nl
c3NDb250cm9sQ2hlY2socmVzb3VyY2UucmVzcG9uc2UoKSwgbV9vcHRpb25zLmFsbG93Q3JlZGVu
dGlhbHMsICptX29yaWdpbiwgZXJyb3JNZXNzYWdlKSkgewotICAgICAgICAgICAgc2V0UmVzb3Vy
Y2VFcnJvcihSZXNvdXJjZUVycm9yKFN0cmluZygpLCAwLCB1cmwoKSwgZXJyb3JNZXNzYWdlLCBS
ZXNvdXJjZUVycm9yOjpUeXBlOjpBY2Nlc3NDb250cm9sKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzZXRCb2R5RGF0YUZyb20ocmVzb3VyY2UpOwotfQot
Ci12b2lkIENhY2hlZFJlc291cmNlOjpjaGVja05vdGlmeSgpCi17Ci0gICAgaWYgKGlzTG9hZGlu
ZygpIHx8IHN0aWxsTmVlZHNMb2FkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENhY2hlZFJl
c291cmNlQ2xpZW50V2Fsa2VyPENhY2hlZFJlc291cmNlQ2xpZW50PiB3YWxrZXIobV9jbGllbnRz
KTsKLSAgICB3aGlsZSAoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCA9IHdhbGtlci5uZXh0
KCkpCi0gICAgICAgIGNsaWVudC0+bm90aWZ5RmluaXNoZWQodGhpcyk7Ci19Ci0KLXZvaWQgQ2Fj
aGVkUmVzb3VyY2U6OmFkZERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJikKLXsKLSAgICBBU1NFUlQo
ZGF0YUJ1ZmZlcmluZ1BvbGljeSgpID09IEJ1ZmZlckRhdGEpOwotfQotCi12b2lkIENhY2hlZFJl
c291cmNlOjphZGREYXRhKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCkKLXsKLSAgICBBU1NFUlQoZGF0
YUJ1ZmZlcmluZ1BvbGljeSgpID09IERvTm90QnVmZmVyRGF0YSk7Ci19Ci0KLXZvaWQgQ2FjaGVk
UmVzb3VyY2U6OmZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKikKLXsKLSAgICBzZXRMb2FkaW5n
KGZhbHNlKTsKLSAgICBjaGVja05vdGlmeSgpOwotfQotCi12b2lkIENhY2hlZFJlc291cmNlOjpl
cnJvcihDYWNoZWRSZXNvdXJjZTo6U3RhdHVzIHN0YXR1cykKLXsKLSAgICBzZXRTdGF0dXMoc3Rh
dHVzKTsKLSAgICBBU1NFUlQoZXJyb3JPY2N1cnJlZCgpKTsKLSAgICBtX2RhdGEgPSBudWxscHRy
OwotCi0gICAgc2V0TG9hZGluZyhmYWxzZSk7Ci0gICAgY2hlY2tOb3RpZnkoKTsKLX0KLSAgICAK
LXZvaWQgQ2FjaGVkUmVzb3VyY2U6OmNhbmNlbExvYWQoKQotewotICAgIGlmICghaXNMb2FkaW5n
KCkgJiYgIXN0aWxsTmVlZHNMb2FkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldFN0YXR1
cyhMb2FkRXJyb3IpOwotICAgIHNldExvYWRpbmcoZmFsc2UpOwotICAgIGNoZWNrTm90aWZ5KCk7
Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OmZpbmlzaCgpCi17Ci0gICAgaWYgKCFlcnJvck9j
Y3VycmVkKCkpCi0gICAgICAgIG1fc3RhdHVzID0gQ2FjaGVkOwotfQotCi1ib29sIENhY2hlZFJl
c291cmNlOjpwYXNzZXNBY2Nlc3NDb250cm9sQ2hlY2soU2VjdXJpdHlPcmlnaW4mIHNlY3VyaXR5
T3JpZ2luKQotewotICAgIFN0cmluZyBlcnJvckRlc2NyaXB0aW9uOwotICAgIHJldHVybiBXZWJD
b3JlOjpwYXNzZXNBY2Nlc3NDb250cm9sQ2hlY2socmVzcG9uc2UoKSwgcmVzb3VyY2VSZXF1ZXN0
KCkuYWxsb3dDb29raWVzKCkgPyBBbGxvd1N0b3JlZENyZWRlbnRpYWxzIDogRG9Ob3RBbGxvd1N0
b3JlZENyZWRlbnRpYWxzLCBzZWN1cml0eU9yaWdpbiwgZXJyb3JEZXNjcmlwdGlvbik7Ci19Ci0K
LWJvb2wgQ2FjaGVkUmVzb3VyY2U6OnBhc3Nlc1NhbWVPcmlnaW5Qb2xpY3lDaGVjayhTZWN1cml0
eU9yaWdpbiYgc2VjdXJpdHlPcmlnaW4pCi17Ci0gICAgaWYgKHNlY3VyaXR5T3JpZ2luLmNhblJl
cXVlc3QocmVzcG9uc2VGb3JTYW1lT3JpZ2luUG9saWN5Q2hlY2tzKCkudXJsKCkpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gcGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKHNlY3Vy
aXR5T3JpZ2luKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0Q3Jvc3NPcmlnaW4oKQot
ewotICAgIEFTU0VSVChtX29wdGlvbnMubW9kZSAhPSBGZXRjaE9wdGlvbnM6Ok1vZGU6OlNhbWVP
cmlnaW4pOwotICAgIG1fcmVzcG9uc2VUYWludGluZyA9IChtX29wdGlvbnMubW9kZSA9PSBGZXRj
aE9wdGlvbnM6Ok1vZGU6OkNvcnMpID8gUmVzb3VyY2VSZXNwb25zZTo6VGFpbnRpbmc6OkNvcnMg
OiBSZXNvdXJjZVJlc3BvbnNlOjpUYWludGluZzo6T3BhcXVlOwotfQotCi1ib29sIENhY2hlZFJl
c291cmNlOjppc0Nyb3NzT3JpZ2luKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZXNwb25zZVRh
aW50aW5nICE9IFJlc291cmNlUmVzcG9uc2U6OlRhaW50aW5nOjpCYXNpYzsKLX0KLQotYm9vbCBD
YWNoZWRSZXNvdXJjZTo6aXNDbGVhbigpIGNvbnN0Ci17Ci0gICAgLy8gaHR0cHM6Ly9odG1sLnNw
ZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW5mcmFzdHJ1Y3R1cmUuaHRtbCNjb3JzLXNhbWUtb3Jp
Z2luCi0gICAgcmV0dXJuICFsb2FkRmFpbGVkT3JDYW5jZWxlZCgpICYmIG1fcmVzcG9uc2VUYWlu
dGluZyAhPSBSZXNvdXJjZVJlc3BvbnNlOjpUYWludGluZzo6T3BhcXVlOwotfQotCi1ib29sIENh
Y2hlZFJlc291cmNlOjppc0V4cGlyZWQoKSBjb25zdAotewotICAgIGlmIChtX3Jlc3BvbnNlLmlz
TnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gY29tcHV0ZUN1cnJl
bnRBZ2UobV9yZXNwb25zZSwgbV9yZXNwb25zZVRpbWVzdGFtcCkgPiBmcmVzaG5lc3NMaWZldGlt
ZShtX3Jlc3BvbnNlKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNob3VsZENhY2hlU2NoZW1l
SW5kZWZpbml0ZWx5KGNvbnN0IFN0cmluZyYgc2NoZW1lKQotewotI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzY2hlbWUsICJhcHBsZXdl
YmRhdGEiKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLSNpZiBVU0UoU09VUCkKLSAg
ICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc2NoZW1lLCAicmVzb3VyY2UiKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLSAgICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2Uoc2NoZW1lLCAiZGF0YSIpOwotfQotCi1zdGQ6OmNocm9ubzo6bWljcm9z
ZWNvbmRzIENhY2hlZFJlc291cmNlOjpmcmVzaG5lc3NMaWZldGltZShjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSkgY29uc3QKLXsKLSAgICBpZiAoIXJlc3BvbnNlLnVybCgpLnByb3Rv
Y29sSXNJbkhUVFBGYW1pbHkoKSkgewotICAgICAgICBTdHJpbmcgcHJvdG9jb2wgPSByZXNwb25z
ZS51cmwoKS5wcm90b2NvbCgpOwotICAgICAgICBpZiAoIXNob3VsZENhY2hlU2NoZW1lSW5kZWZp
bml0ZWx5KHByb3RvY29sKSkgewotICAgICAgICAgICAgLy8gRG9uJ3QgY2FjaGUgbm9uLUhUVFAg
bWFpbiByZXNvdXJjZXMgc2luY2Ugd2UgY2FuJ3QgY2hlY2sgZm9yIGZyZXNobmVzcy4KLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IGNhY2hlIHN1YnJlc291cmNlcyBlaXRoZXIs
IGJ1dCB3aGVuIHdlIHRyaWVkIHRoaXMKLSAgICAgICAgICAgIC8vIGl0IGNhdXNlZCBwZXJmb3Jt
YW5jZSBhbmQgZmxha2luZXNzIGlzc3VlcyBpbiBvdXIgdGVzdCBpbmZyYXN0cnVjdHVyZS4KLSAg
ICAgICAgICAgIGlmIChtX3R5cGUgPT0gTWFpblJlc291cmNlIHx8IFNjaGVtZVJlZ2lzdHJ5Ojpz
aG91bGRBbHdheXNSZXZhbGlkYXRlVVJMU2NoZW1lKHByb3RvY29sKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gMHVzOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpt
aWNyb3NlY29uZHM6Om1heCgpOwotICAgIH0KLQotICAgIHJldHVybiBjb21wdXRlRnJlc2huZXNz
TGlmZXRpbWVGb3JIVFRQRmFtaWx5KHJlc3BvbnNlLCBtX3Jlc3BvbnNlVGltZXN0YW1wKTsKLX0K
LQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6cmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIG1fcmVx
dWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllciA9IHRydWU7Ci0gICAgaWYgKHJlc3BvbnNlLmlzTnVs
bCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBSZWRpcmVjdCB0byBkYXRhOiBVUkwgdXNl
cyB0aGUgbGFzdCBIVFRQIHJlc3BvbnNlIGZvciBTT1AuCi0gICAgaWYgKHJlc3BvbnNlLmlzSFRU
UCgpICYmIHJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0RhdGEoKSkKLSAgICAgICAgbV9yZWRpcmVj
dFJlc3BvbnNlRm9yU2FtZU9yaWdpblBvbGljeUNoZWNrcyA9IHJlc3BvbnNlOwotCi0gICAgdXBk
YXRlUmVkaXJlY3RDaGFpblN0YXR1cyhtX3JlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1cywgcmVzcG9u
c2UpOwotfQotCi1jb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBDYWNoZWRSZXNvdXJjZTo6cmVzcG9u
c2VGb3JTYW1lT3JpZ2luUG9saWN5Q2hlY2tzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZWRp
cmVjdFJlc3BvbnNlRm9yU2FtZU9yaWdpblBvbGljeUNoZWNrcy5pc051bGwoKSA/IG1fcmVzcG9u
c2UgOiBtX3JlZGlyZWN0UmVzcG9uc2VGb3JTYW1lT3JpZ2luUG9saWN5Q2hlY2tzOwotfQotCi12
b2lkIENhY2hlZFJlc291cmNlOjpzZXRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSkKLXsKLSAgICBBU1NFUlQobV9yZXNwb25zZS50eXBlKCkgPT0gUmVzb3VyY2VSZXNw
b25zZTo6VHlwZTo6RGVmYXVsdCk7Ci0gICAgbV9yZXNwb25zZSA9IHJlc3BvbnNlOwotICAgIG1f
cmVzcG9uc2Uuc2V0UmVkaXJlY3RlZChtX3JlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1cy5zdGF0dXMg
IT0gUmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzOjpOb1JlZGlyZWN0aW9uKTsKLQotICAgIG1fdmFy
eWluZ0hlYWRlclZhbHVlcyA9IGNvbGxlY3RWYXJ5aW5nUmVxdWVzdEhlYWRlcnMobV9yZXNvdXJj
ZVJlcXVlc3QsIG1fcmVzcG9uc2UsIG1fc2Vzc2lvbklEKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNv
dXJjZTo6cmVzcG9uc2VSZWNlaXZlZChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
LXsKLSAgICBzZXRSZXNwb25zZShyZXNwb25zZSk7Ci0gICAgbV9yZXNwb25zZVRpbWVzdGFtcCA9
IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOwotICAgIFN0cmluZyBlbmNvZGluZyA9
IHJlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKTsKLSAgICBpZiAoIWVuY29kaW5nLmlzTnVsbCgp
KQotICAgICAgICBzZXRFbmNvZGluZyhlbmNvZGluZyk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3Vy
Y2U6OmNsZWFyTG9hZGVyKCkKLXsKLSAgICBBU1NFUlQobV9sb2FkZXIpOwotICAgIG1faWRlbnRp
ZmllckZvckxvYWRXaXRob3V0UmVzb3VyY2VMb2FkZXIgPSBtX2xvYWRlci0+aWRlbnRpZmllcigp
OwotICAgIG1fbG9hZGVyID0gbnVsbHB0cjsKLSAgICBkZWxldGVJZlBvc3NpYmxlKCk7Ci19Ci0K
LXZvaWQgQ2FjaGVkUmVzb3VyY2U6OmFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xp
ZW50KQotewotICAgIGlmIChhZGRDbGllbnRUb1NldChjbGllbnQpKQotICAgICAgICBkaWRBZGRD
bGllbnQoY2xpZW50KTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6ZGlkQWRkQ2xpZW50KENh
Y2hlZFJlc291cmNlQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgaWYgKG1fZGVjb2RlZERhdGFEZWxl
dGlvblRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVy
LnN0b3AoKTsKLQotICAgIGlmIChtX2NsaWVudHNBd2FpdGluZ0NhbGxiYWNrLnJlbW92ZShjbGll
bnQpKQotICAgICAgICBtX2NsaWVudHMuYWRkKGNsaWVudCk7Ci0gICAgaWYgKCFpc0xvYWRpbmco
KSAmJiAhc3RpbGxOZWVkc0xvYWQoKSkKLSAgICAgICAgY2xpZW50LT5ub3RpZnlGaW5pc2hlZCh0
aGlzKTsKLX0KLQotYm9vbCBDYWNoZWRSZXNvdXJjZTo6YWRkQ2xpZW50VG9TZXQoQ2FjaGVkUmVz
b3VyY2VDbGllbnQqIGNsaWVudCkKLXsKLSAgICBpZiAobV9wcmVsb2FkUmVzdWx0ID09IFByZWxv
YWROb3RSZWZlcmVuY2VkKSB7Ci0gICAgICAgIGlmIChpc0xvYWRlZCgpKQotICAgICAgICAgICAg
bV9wcmVsb2FkUmVzdWx0ID0gUHJlbG9hZFJlZmVyZW5jZWRXaGlsZUNvbXBsZXRlOwotICAgICAg
ICBlbHNlIGlmIChtX3JlcXVlc3RlZEZyb21OZXR3b3JraW5nTGF5ZXIpCi0gICAgICAgICAgICBt
X3ByZWxvYWRSZXN1bHQgPSBQcmVsb2FkUmVmZXJlbmNlZFdoaWxlTG9hZGluZzsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbV9wcmVsb2FkUmVzdWx0ID0gUHJlbG9hZFJlZmVyZW5jZWQ7Ci0g
ICAgfQotICAgIGlmIChhbGxvd3NDYWNoaW5nKCkgJiYgIWhhc0NsaWVudHMoKSAmJiBpbkNhY2hl
KCkpCi0gICAgICAgIE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5hZGRUb0xpdmVSZXNvdXJjZXNT
aXplKCp0aGlzKTsKLQotICAgIGlmICgobV90eXBlID09IFJhd1Jlc291cmNlIHx8IG1fdHlwZSA9
PSBNYWluUmVzb3VyY2UpICYmICFtX3Jlc3BvbnNlLmlzTnVsbCgpICYmICFtX3Byb3h5UmVzb3Vy
Y2UpIHsKLSAgICAgICAgLy8gQ2VydGFpbiByZXNvdXJjZXMgKGVzcGVjaWFsbHkgWEhScyBhbmQg
bWFpbiByZXNvdXJjZXMpIGRvIGNyYXp5IHRoaW5ncyBpZiBhbiBhc3luY2hyb25vdXMgbG9hZCBy
ZXR1cm5zCi0gICAgICAgIC8vIHN5bmNocm9ub3VzbHkgKGUuZy4sIHNjcmlwdHMgbWF5IG5vdCBo
YXZlIHNldCBhbGwgdGhlIHN0YXRlIHRoZXkgbmVlZCB0byBoYW5kbGUgdGhlIGxvYWQpLgotICAg
ICAgICAvLyBUaGVyZWZvcmUsIHJhdGhlciB0aGFuIGltbWVkaWF0ZWx5IHNlbmRpbmcgY2FsbGJh
Y2tzIG9uIGEgY2FjaGUgaGl0IGxpa2Ugb3RoZXIgQ2FjaGVkUmVzb3VyY2VzLAotICAgICAgICAv
LyB3ZSBzY2hlZHVsZSB0aGUgY2FsbGJhY2tzIGFuZCBlbnN1cmUgd2UgbmV2ZXIgZmluaXNoIHN5
bmNocm9ub3VzbHkuCi0gICAgICAgIEFTU0VSVCghbV9jbGllbnRzQXdhaXRpbmdDYWxsYmFjay5j
b250YWlucyhjbGllbnQpKTsKLSAgICAgICAgbV9jbGllbnRzQXdhaXRpbmdDYWxsYmFjay5hZGQo
Y2xpZW50LCBzdGQ6Om1ha2VfdW5pcXVlPENhbGxiYWNrPigqdGhpcywgKmNsaWVudCkpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbV9jbGllbnRzLmFkZChjbGllbnQpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENhY2hlZFJlc291cmNlOjpyZW1vdmVDbGllbnQo
Q2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCkKLXsKLSAgICBhdXRvIGNhbGxiYWNrID0gbV9j
bGllbnRzQXdhaXRpbmdDYWxsYmFjay50YWtlKGNsaWVudCk7Ci0gICAgaWYgKGNhbGxiYWNrKSB7
Ci0gICAgICAgIEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKGNsaWVudCkpOwotICAgICAgICBj
YWxsYmFjay0+Y2FuY2VsKCk7Ci0gICAgICAgIGNhbGxiYWNrID0gbnVsbHB0cjsKLSAgICB9IGVs
c2UgewotICAgICAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKGNsaWVudCkpOwotICAgICAg
ICBtX2NsaWVudHMucmVtb3ZlKGNsaWVudCk7Ci0gICAgICAgIGRpZFJlbW92ZUNsaWVudChjbGll
bnQpOwotICAgIH0KLQotICAgIGlmIChkZWxldGVJZlBvc3NpYmxlKCkpIHsKLSAgICAgICAgLy8g
YHRoaXNgIG9iamVjdCBpcyBkZWFkIGhlcmUuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoaGFzQ2xpZW50cygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBtZW1vcnlD
YWNoZSA9IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKTsKLSAgICBpZiAoYWxsb3dzQ2FjaGluZygp
ICYmIGluQ2FjaGUoKSkgewotICAgICAgICBtZW1vcnlDYWNoZS5yZW1vdmVGcm9tTGl2ZVJlc291
cmNlc1NpemUoKnRoaXMpOwotICAgICAgICBtZW1vcnlDYWNoZS5yZW1vdmVGcm9tTGl2ZURlY29k
ZWRSZXNvdXJjZXNMaXN0KCp0aGlzKTsKLSAgICB9Ci0gICAgaWYgKCFtX3N3aXRjaGluZ0NsaWVu
dHNUb1JldmFsaWRhdGVkUmVzb3VyY2UpCi0gICAgICAgIGFsbENsaWVudHNSZW1vdmVkKCk7Ci0g
ICAgZGVzdHJveURlY29kZWREYXRhSWZOZWVkZWQoKTsKLQotICAgIGlmICghYWxsb3dzQ2FjaGlu
ZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAocmVzcG9uc2UoKS5jYWNoZUNvbnRyb2xD
b250YWluc05vU3RvcmUoKSAmJiB1cmwoKS5wcm90b2NvbElzKCJodHRwcyIpKSB7Ci0gICAgICAg
IC8vIFJGQzI2MTYgMTQuOS4yOgotICAgICAgICAvLyAibm8tc3RvcmU6IC4uLiBNVVNUIG1ha2Ug
YSBiZXN0LWVmZm9ydCBhdHRlbXB0IHRvIHJlbW92ZSB0aGUgaW5mb3JtYXRpb24gZnJvbSB2b2xh
dGlsZSBzdG9yYWdlIGFzIHByb21wdGx5IGFzIHBvc3NpYmxlIgotICAgICAgICAvLyAiLi4uIEhp
c3RvcnkgYnVmZmVycyBNQVkgc3RvcmUgc3VjaCByZXNwb25zZXMgYXMgcGFydCBvZiB0aGVpciBu
b3JtYWwgb3BlcmF0aW9uLiIKLSAgICAgICAgLy8gV2UgYWxsb3cgbm9uLXNlY3VyZSBjb250ZW50
IHRvIGJlIHJldXNlZCBpbiBoaXN0b3J5LCBidXQgd2UgZG8gbm90IGFsbG93IHNlY3VyZSBjb250
ZW50IHRvIGJlIHJldXNlZC4KLSAgICAgICAgbWVtb3J5Q2FjaGUucmVtb3ZlKCp0aGlzKTsKLSAg
ICB9Ci0gICAgbWVtb3J5Q2FjaGUucHJ1bmVTb29uKCk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3Vy
Y2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fZGVjb2RlZFNp
emUpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIU1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5k
ZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKCkuY291bnQoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyLnJlc3RhcnQoKTsKLX0KLQotdm9pZCBD
YWNoZWRSZXNvdXJjZTo6ZGVjb2RlZERhdGFEZWxldGlvblRpbWVyRmlyZWQoKQotewotICAgIGRl
c3Ryb3lEZWNvZGVkRGF0YSgpOwotfQotCi1ib29sIENhY2hlZFJlc291cmNlOjpkZWxldGVJZlBv
c3NpYmxlKCkKLXsKLSAgICBpZiAoY2FuRGVsZXRlKCkpIHsKLSAgICAgICAgaWYgKCFpbkNhY2hl
KCkpIHsKLSAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERlc3Ryb3lD
YWNoZWRSZXNvdXJjZSgqdGhpcyk7Ci0gICAgICAgICAgICBkZWxldGUgdGhpczsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX2RhdGEpCi0gICAgICAg
ICAgICBtX2RhdGEtPmhpbnRNZW1vcnlOb3ROZWVkZWRTb29uKCk7Ci0gICAgfQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0RGVjb2RlZFNpemUodW5zaWdu
ZWQgc2l6ZSkKLXsKLSAgICBpZiAoc2l6ZSA9PSBtX2RlY29kZWRTaXplKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpbnQgZGVsdGEgPSBzaXplIC0gbV9kZWNvZGVkU2l6ZTsKLQotICAgIC8vIFRo
ZSBvYmplY3QgbXVzdCBiZSBtb3ZlZCB0byBhIGRpZmZlcmVudCBxdWV1ZSwgc2luY2UgaXRzIHNp
emUgaGFzIGJlZW4gY2hhbmdlZC4KLSAgICAvLyBSZW1vdmUgYmVmb3JlIHVwZGF0aW5nIG1fZGVj
b2RlZFNpemUsIHNvIHdlIGZpbmQgdGhlIHJlc291cmNlIGluIHRoZSBjb3JyZWN0IExSVSBsaXN0
LgotICAgIGlmIChhbGxvd3NDYWNoaW5nKCkgJiYgaW5DYWNoZSgpKQotICAgICAgICBNZW1vcnlD
YWNoZTo6c2luZ2xldG9uKCkucmVtb3ZlRnJvbUxSVUxpc3QoKnRoaXMpOwotICAgIAotICAgIG1f
ZGVjb2RlZFNpemUgPSBzaXplOwotICAgCi0gICAgaWYgKGFsbG93c0NhY2hpbmcoKSAmJiBpbkNh
Y2hlKCkpIHsKLSAgICAgICAgYXV0byYgbWVtb3J5Q2FjaGUgPSBNZW1vcnlDYWNoZTo6c2luZ2xl
dG9uKCk7Ci0gICAgICAgIC8vIE5vdyBpbnNlcnQgaW50byB0aGUgbmV3IExSVSBsaXN0LgotICAg
ICAgICBtZW1vcnlDYWNoZS5pbnNlcnRJbkxSVUxpc3QoKnRoaXMpOwotICAgICAgICAKLSAgICAg
ICAgLy8gSW5zZXJ0IGludG8gb3IgcmVtb3ZlIGZyb20gdGhlIGxpdmUgZGVjb2RlZCBsaXN0IGlm
IG5lY2Vzc2FyeS4KLSAgICAgICAgLy8gV2hlbiBpbnNlcnRpbmcgaW50byB0aGUgTGl2ZURlY29k
ZWRSZXNvdXJjZXNMaXN0IGl0IGlzIHBvc3NpYmxlCi0gICAgICAgIC8vIHRoYXQgdGhlIG1fbGFz
dERlY29kZWRBY2Nlc3NUaW1lIGlzIHN0aWxsIHplcm8gb3Igc21hbGxlciB0aGFuCi0gICAgICAg
IC8vIHRoZSBtX2xhc3REZWNvZGVkQWNjZXNzVGltZSBvZiB0aGUgY3VycmVudCBsaXN0IGhlYWQu
IFRoaXMgaXMgYQotICAgICAgICAvLyB2aW9sYXRpb24gb2YgdGhlIGludmFyaWFudCB0aGF0IHRo
ZSBsaXN0IGlzIHRvIGJlIGtlcHQgc29ydGVkCi0gICAgICAgIC8vIGJ5IGFjY2VzcyB0aW1lLiBU
aGUgd2Vha2VuaW5nIG9mIHRoZSBpbnZhcmlhbnQgZG9lcyBub3QgcG9zZQotICAgICAgICAvLyBh
IHByb2JsZW0uIEZvciBtb3JlIGRldGFpbHMgcGxlYXNlIHNlZTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMjA5Ci0gICAgICAgIGJvb2wgaW5MaXZlRGVjb2RlZFJl
c291cmNlc0xpc3QgPSBtZW1vcnlDYWNoZS5pbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCgqdGhp
cyk7Ci0gICAgICAgIGlmIChtX2RlY29kZWRTaXplICYmICFpbkxpdmVEZWNvZGVkUmVzb3VyY2Vz
TGlzdCAmJiBoYXNDbGllbnRzKCkpCi0gICAgICAgICAgICBtZW1vcnlDYWNoZS5pbnNlcnRJbkxp
dmVEZWNvZGVkUmVzb3VyY2VzTGlzdCgqdGhpcyk7Ci0gICAgICAgIGVsc2UgaWYgKCFtX2RlY29k
ZWRTaXplICYmIGluTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KQotICAgICAgICAgICAgbWVtb3J5
Q2FjaGUucmVtb3ZlRnJvbUxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCgqdGhpcyk7Ci0KLSAgICAg
ICAgLy8gVXBkYXRlIHRoZSBjYWNoZSdzIHNpemUgdG90YWxzLgotICAgICAgICBtZW1vcnlDYWNo
ZS5hZGp1c3RTaXplKGhhc0NsaWVudHMoKSwgZGVsdGEpOwotICAgIH0KLX0KLQotdm9pZCBDYWNo
ZWRSZXNvdXJjZTo6c2V0RW5jb2RlZFNpemUodW5zaWduZWQgc2l6ZSkKLXsKLSAgICBpZiAoc2l6
ZSA9PSBtX2VuY29kZWRTaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgZGVsdGEgPSBz
aXplIC0gbV9lbmNvZGVkU2l6ZTsKLQotICAgIC8vIFRoZSBvYmplY3QgbXVzdCBiZSBtb3ZlZCB0
byBhIGRpZmZlcmVudCBxdWV1ZSwgc2luY2UgaXRzIHNpemUgaGFzIGJlZW4gY2hhbmdlZC4KLSAg
ICAvLyBSZW1vdmUgYmVmb3JlIHVwZGF0aW5nIG1fZW5jb2RlZFNpemUsIHNvIHdlIGZpbmQgdGhl
IHJlc291cmNlIGluIHRoZSBjb3JyZWN0IExSVSBsaXN0LgotICAgIGlmIChhbGxvd3NDYWNoaW5n
KCkgJiYgaW5DYWNoZSgpKQotICAgICAgICBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkucmVtb3Zl
RnJvbUxSVUxpc3QoKnRoaXMpOwotCi0gICAgbV9lbmNvZGVkU2l6ZSA9IHNpemU7Ci0KLSAgICBp
ZiAoYWxsb3dzQ2FjaGluZygpICYmIGluQ2FjaGUoKSkgewotICAgICAgICBhdXRvJiBtZW1vcnlD
YWNoZSA9IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKTsKLSAgICAgICAgbWVtb3J5Q2FjaGUuaW5z
ZXJ0SW5MUlVMaXN0KCp0aGlzKTsKLSAgICAgICAgbWVtb3J5Q2FjaGUuYWRqdXN0U2l6ZShoYXND
bGllbnRzKCksIGRlbHRhKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OmRpZEFj
Y2Vzc0RlY29kZWREYXRhKGRvdWJsZSB0aW1lU3RhbXApCi17Ci0gICAgbV9sYXN0RGVjb2RlZEFj
Y2Vzc1RpbWUgPSB0aW1lU3RhbXA7Ci0gICAgCi0gICAgaWYgKGFsbG93c0NhY2hpbmcoKSAmJiBp
bkNhY2hlKCkpIHsKLSAgICAgICAgYXV0byYgbWVtb3J5Q2FjaGUgPSBNZW1vcnlDYWNoZTo6c2lu
Z2xldG9uKCk7Ci0gICAgICAgIGlmIChtZW1vcnlDYWNoZS5pbkxpdmVEZWNvZGVkUmVzb3VyY2Vz
TGlzdCgqdGhpcykpIHsKLSAgICAgICAgICAgIG1lbW9yeUNhY2hlLnJlbW92ZUZyb21MaXZlRGVj
b2RlZFJlc291cmNlc0xpc3QoKnRoaXMpOwotICAgICAgICAgICAgbWVtb3J5Q2FjaGUuaW5zZXJ0
SW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QoKnRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIG1l
bW9yeUNhY2hlLnBydW5lU29vbigpOwotICAgIH0KLX0KLSAgICAKLXZvaWQgQ2FjaGVkUmVzb3Vy
Y2U6OnNldFJlc291cmNlVG9SZXZhbGlkYXRlKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkgCi17
IAotICAgIEFTU0VSVChyZXNvdXJjZSk7Ci0gICAgQVNTRVJUKCFtX3Jlc291cmNlVG9SZXZhbGlk
YXRlKTsKLSAgICBBU1NFUlQocmVzb3VyY2UgIT0gdGhpcyk7Ci0gICAgQVNTRVJUKG1faGFuZGxl
c1RvUmV2YWxpZGF0ZS5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChyZXNvdXJjZS0+dHlwZSgpID09
IHR5cGUoKSk7Ci0gICAgQVNTRVJUKCFyZXNvdXJjZS0+bV9wcm94eVJlc291cmNlKTsKLQotICAg
IExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZWRSZXNvdXJjZSAlcCBzZXRSZXNvdXJjZVRvUmV2
YWxpZGF0ZSAlcCIsIHRoaXMsIHJlc291cmNlKTsKLQotICAgIHJlc291cmNlLT5tX3Byb3h5UmVz
b3VyY2UgPSB0aGlzOwotICAgIG1fcmVzb3VyY2VUb1JldmFsaWRhdGUgPSByZXNvdXJjZTsKLX0K
LQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6Y2xlYXJSZXNvdXJjZVRvUmV2YWxpZGF0ZSgpIAotewot
ICAgIEFTU0VSVChtX3Jlc291cmNlVG9SZXZhbGlkYXRlKTsKLSAgICBBU1NFUlQobV9yZXNvdXJj
ZVRvUmV2YWxpZGF0ZS0+bV9wcm94eVJlc291cmNlID09IHRoaXMpOwotCi0gICAgaWYgKG1fc3dp
dGNoaW5nQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZS0+bV9wcm94eVJlc291cmNlID0gbnVsbHB0cjsKLSAg
ICBtX3Jlc291cmNlVG9SZXZhbGlkYXRlLT5kZWxldGVJZlBvc3NpYmxlKCk7Ci0KLSAgICBtX2hh
bmRsZXNUb1JldmFsaWRhdGUuY2xlYXIoKTsKLSAgICBtX3Jlc291cmNlVG9SZXZhbGlkYXRlID0g
bnVsbHB0cjsKLSAgICBkZWxldGVJZlBvc3NpYmxlKCk7Ci19Ci0gICAgCi12b2lkIENhY2hlZFJl
c291cmNlOjpzd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNlKCkKLXsKLSAgICBBU1NF
UlQobV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSk7Ci0gICAgQVNTRVJUKG1fcmVzb3VyY2VUb1JldmFs
aWRhdGUtPmluQ2FjaGUoKSk7Ci0gICAgQVNTRVJUKCFpbkNhY2hlKCkpOwotCi0gICAgTE9HKFJl
c291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlICVwIHN3aXRjaENsaWVudHNUb1JldmFsaWRh
dGVkUmVzb3VyY2UgJXAiLCB0aGlzLCBtX3Jlc291cmNlVG9SZXZhbGlkYXRlKTsKLQotICAgIG1f
c3dpdGNoaW5nQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSA9IHRydWU7Ci0gICAgZm9yIChh
dXRvJiBoYW5kbGUgOiBtX2hhbmRsZXNUb1JldmFsaWRhdGUpIHsKLSAgICAgICAgaGFuZGxlLT5t
X3Jlc291cmNlID0gbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZTsKLSAgICAgICAgbV9yZXNvdXJjZVRv
UmV2YWxpZGF0ZS0+cmVnaXN0ZXJIYW5kbGUoaGFuZGxlKTsKLSAgICAgICAgLS1tX2hhbmRsZUNv
dW50OwotICAgIH0KLSAgICBBU1NFUlQoIW1faGFuZGxlQ291bnQpOwotICAgIG1faGFuZGxlc1Rv
UmV2YWxpZGF0ZS5jbGVhcigpOwotCi0gICAgVmVjdG9yPENhY2hlZFJlc291cmNlQ2xpZW50Kj4g
Y2xpZW50c1RvTW92ZTsKLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9jbGllbnRzKSB7Ci0gICAg
ICAgIENhY2hlZFJlc291cmNlQ2xpZW50KiBjbGllbnQgPSBlbnRyeS5rZXk7Ci0gICAgICAgIHVu
c2lnbmVkIGNvdW50ID0gZW50cnkudmFsdWU7Ci0gICAgICAgIHdoaWxlIChjb3VudCkgewotICAg
ICAgICAgICAgY2xpZW50c1RvTW92ZS5hcHBlbmQoY2xpZW50KTsKLSAgICAgICAgICAgIC0tY291
bnQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNsaWVudHNU
b01vdmUpCi0gICAgICAgIHJlbW92ZUNsaWVudChjbGllbnQpOwotICAgIEFTU0VSVChtX2NsaWVu
dHMuaXNFbXB0eSgpKTsKLQotICAgIGZvciAoYXV0byYgY2xpZW50IDogY2xpZW50c1RvTW92ZSkK
LSAgICAgICAgbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZS0+YWRkQ2xpZW50VG9TZXQoY2xpZW50KTsK
LSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNsaWVudHNUb01vdmUpIHsKLSAgICAgICAgLy8gQ2Fs
bGluZyBkaWRBZGRDbGllbnQgbWF5IGRvIGFueXRoaW5nLCBpbmNsdWRpbmcgdHJ5aW5nIHRvIGNh
bmNlbCByZXZhbGlkYXRpb24uCi0gICAgICAgIC8vIEFzc2VydCB0aGF0IGl0IGRpZG4ndCBzdWNj
ZWVkLgotICAgICAgICBBU1NFUlQobV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSk7Ci0gICAgICAgIC8v
IENhbGxpbmcgZGlkQWRkQ2xpZW50IGZvciBhIGNsaWVudCBtYXkgZW5kIHVwIHJlbW92aW5nIGFu
b3RoZXIgY2xpZW50LiBJbiB0aGF0IGNhc2UgaXQgd29uJ3QgYmUgaW4gdGhlIHNldCBhbnltb3Jl
LgotICAgICAgICBpZiAobV9yZXNvdXJjZVRvUmV2YWxpZGF0ZS0+bV9jbGllbnRzLmNvbnRhaW5z
KGNsaWVudCkpCi0gICAgICAgICAgICBtX3Jlc291cmNlVG9SZXZhbGlkYXRlLT5kaWRBZGRDbGll
bnQoY2xpZW50KTsKLSAgICB9Ci0gICAgbV9zd2l0Y2hpbmdDbGllbnRzVG9SZXZhbGlkYXRlZFJl
c291cmNlID0gZmFsc2U7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OnVwZGF0ZVJlc3BvbnNl
QWZ0ZXJSZXZhbGlkYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgdmFsaWRhdGluZ1Jlc3Bv
bnNlKQotewotICAgIG1fcmVzcG9uc2VUaW1lc3RhbXAgPSBzdGQ6OmNocm9ubzo6c3lzdGVtX2Ns
b2NrOjpub3coKTsKLQotICAgIHVwZGF0ZVJlc3BvbnNlSGVhZGVyc0FmdGVyUmV2YWxpZGF0aW9u
KG1fcmVzcG9uc2UsIHZhbGlkYXRpbmdSZXNwb25zZSk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3Vy
Y2U6OnJlZ2lzdGVySGFuZGxlKENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSogaCkKLXsKLSAgICAr
K21faGFuZGxlQ291bnQ7Ci0gICAgaWYgKG1fcmVzb3VyY2VUb1JldmFsaWRhdGUpCi0gICAgICAg
IG1faGFuZGxlc1RvUmV2YWxpZGF0ZS5hZGQoaCk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6
OnVucmVnaXN0ZXJIYW5kbGUoQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKiBoKQotewotICAgIEFT
U0VSVChtX2hhbmRsZUNvdW50ID4gMCk7Ci0gICAgLS1tX2hhbmRsZUNvdW50OwotCi0gICAgaWYg
KG1fcmVzb3VyY2VUb1JldmFsaWRhdGUpCi0gICAgICAgICBtX2hhbmRsZXNUb1JldmFsaWRhdGUu
cmVtb3ZlKGgpOwotCi0gICAgaWYgKCFtX2hhbmRsZUNvdW50KQotICAgICAgICBkZWxldGVJZlBv
c3NpYmxlKCk7Ci19Ci0KLWJvb2wgQ2FjaGVkUmVzb3VyY2U6OmNhblVzZUNhY2hlVmFsaWRhdG9y
KCkgY29uc3QKLXsKLSAgICBpZiAobV9sb2FkaW5nIHx8IGVycm9yT2NjdXJyZWQoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fcmVzcG9uc2UuY2FjaGVDb250cm9sQ29udGFp
bnNOb1N0b3JlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9yZXNwb25z
ZS5oYXNDYWNoZVZhbGlkYXRvckZpZWxkcygpOwotfQotCi1DYWNoZWRSZXNvdXJjZTo6UmV2YWxp
ZGF0aW9uRGVjaXNpb24gQ2FjaGVkUmVzb3VyY2U6Om1ha2VSZXZhbGlkYXRpb25EZWNpc2lvbihD
YWNoZVBvbGljeSBjYWNoZVBvbGljeSkgY29uc3QKLXsgICAgCi0gICAgc3dpdGNoIChjYWNoZVBv
bGljeSkgewotICAgIGNhc2UgQ2FjaGVQb2xpY3lIaXN0b3J5QnVmZmVyOgotICAgICAgICByZXR1
cm4gUmV2YWxpZGF0aW9uRGVjaXNpb246Ok5vOwotCi0gICAgY2FzZSBDYWNoZVBvbGljeVJlbG9h
ZDoKLSAgICBjYXNlIENhY2hlUG9saWN5UmV2YWxpZGF0ZToKLSAgICAgICAgcmV0dXJuIFJldmFs
aWRhdGlvbkRlY2lzaW9uOjpZZXNEdWVUb0NhY2hlUG9saWN5OwotCi0gICAgY2FzZSBDYWNoZVBv
bGljeVZlcmlmeToKLSAgICAgICAgaWYgKG1fcmVzcG9uc2UuY2FjaGVDb250cm9sQ29udGFpbnNO
b0NhY2hlKCkpCi0gICAgICAgICAgICByZXR1cm4gUmV2YWxpZGF0aW9uRGVjaXNpb246Olllc0R1
ZVRvTm9DYWNoZTsKLSAgICAgICAgLy8gRklYTUU6IENhY2hlLUNvbnRyb2w6bm8tc3RvcmUgc2hv
dWxkIHByZXZlbnQgc3RvcmluZywgbm90IHJldXNlLgotICAgICAgICBpZiAobV9yZXNwb25zZS5j
YWNoZUNvbnRyb2xDb250YWluc05vU3RvcmUoKSkKLSAgICAgICAgICAgIHJldHVybiBSZXZhbGlk
YXRpb25EZWNpc2lvbjo6WWVzRHVlVG9Ob1N0b3JlOwotCi0gICAgICAgIGlmIChpc0V4cGlyZWQo
KSkKLSAgICAgICAgICAgIHJldHVybiBSZXZhbGlkYXRpb25EZWNpc2lvbjo6WWVzRHVlVG9FeHBp
cmVkOwotCi0gICAgICAgIHJldHVybiBSZXZhbGlkYXRpb25EZWNpc2lvbjo6Tm87Ci0gICAgfTsK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gUmV2YWxpZGF0aW9uRGVjaXNp
b246Ok5vOwotfQotCi1ib29sIENhY2hlZFJlc291cmNlOjpyZWRpcmVjdENoYWluQWxsb3dzUmV1
c2UoUmV1c2VFeHBpcmVkUmVkaXJlY3Rpb25Pck5vdCByZXVzZUV4cGlyZWRSZWRpcmVjdGlvbikg
Y29uc3QKLXsKLSAgICByZXR1cm4gV2ViQ29yZTo6cmVkaXJlY3RDaGFpbkFsbG93c1JldXNlKG1f
cmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzLCByZXVzZUV4cGlyZWRSZWRpcmVjdGlvbik7Ci19Ci0K
LWJvb2wgQ2FjaGVkUmVzb3VyY2U6OnZhcnlIZWFkZXJWYWx1ZXNNYXRjaChjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IENhY2hlZFJlc291cmNlTG9hZGVyJiBjYWNoZWRSZXNv
dXJjZUxvYWRlcikKLXsKLSAgICBpZiAobV92YXJ5aW5nSGVhZGVyVmFsdWVzLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdFdpdGhG
dWxsSGVhZGVycyhyZXF1ZXN0KTsKLSAgICBhZGRBZGRpdGlvbmFsUmVxdWVzdEhlYWRlcnNUb1Jl
cXVlc3QocmVxdWVzdFdpdGhGdWxsSGVhZGVycywgY2FjaGVkUmVzb3VyY2VMb2FkZXIsICp0aGlz
KTsKLQotICAgIHJldHVybiB2ZXJpZnlWYXJ5aW5nUmVxdWVzdEhlYWRlcnMobV92YXJ5aW5nSGVh
ZGVyVmFsdWVzLCByZXF1ZXN0V2l0aEZ1bGxIZWFkZXJzLCBtX3Nlc3Npb25JRCk7Ci19Ci0KLXVu
c2lnbmVkIENhY2hlZFJlc291cmNlOjpvdmVyaGVhZFNpemUoKSBjb25zdAotewotICAgIHN0YXRp
YyBjb25zdCBpbnQga0F2ZXJhZ2VDbGllbnRzSGFzaE1hcFNpemUgPSAzODQ7Ci0gICAgcmV0dXJu
IHNpemVvZihDYWNoZWRSZXNvdXJjZSkgKyBtX3Jlc3BvbnNlLm1lbW9yeVVzYWdlKCkgKyBrQXZl
cmFnZUNsaWVudHNIYXNoTWFwU2l6ZSArIG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLnN0cmluZygp
Lmxlbmd0aCgpICogMjsKLX0KLQotYm9vbCBDYWNoZWRSZXNvdXJjZTo6YXJlQWxsQ2xpZW50c1hN
TEh0dHBSZXF1ZXN0cygpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAhPSBSYXdSZXNvdXJjZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChhdXRvJiBjbGllbnQgOiBtX2NsaWVu
dHMpIHsKLSAgICAgICAgaWYgKCFjbGllbnQua2V5LT5pc1hNTEh0dHBSZXF1ZXN0KCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IENhY2hlZFJlc291cmNlOjpzZXRMb2FkUHJpb3JpdHkoY29uc3QgT3B0aW9uYWw8UmVzb3VyY2VM
b2FkUHJpb3JpdHk+JiBsb2FkUHJpb3JpdHkpCi17Ci0gICAgaWYgKGxvYWRQcmlvcml0eSkKLSAg
ICAgICAgbV9sb2FkUHJpb3JpdHkgPSBsb2FkUHJpb3JpdHkudmFsdWUoKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fbG9hZFByaW9yaXR5ID0gZGVmYXVsdFByaW9yaXR5Rm9yUmVzb3VyY2VUeXBlKHR5
cGUoKSk7Ci19Ci0KLWlubGluZSBDYWNoZWRSZXNvdXJjZTo6Q2FsbGJhY2s6OkNhbGxiYWNrKENh
Y2hlZFJlc291cmNlJiByZXNvdXJjZSwgQ2FjaGVkUmVzb3VyY2VDbGllbnQmIGNsaWVudCkKLSAg
ICA6IG1fcmVzb3VyY2UocmVzb3VyY2UpCi0gICAgLCBtX2NsaWVudChjbGllbnQpCi0gICAgLCBt
X3RpbWVyKCp0aGlzLCAmQ2FsbGJhY2s6OnRpbWVyRmlyZWQpCi17Ci0gICAgbV90aW1lci5zdGFy
dE9uZVNob3QoMCk7Ci19Ci0KLWlubGluZSB2b2lkIENhY2hlZFJlc291cmNlOjpDYWxsYmFjazo6
Y2FuY2VsKCkKLXsKLSAgICBpZiAobV90aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3RpbWVy
LnN0b3AoKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6Q2FsbGJhY2s6OnRpbWVyRmlyZWQo
KQotewotICAgIG1fcmVzb3VyY2UuZGlkQWRkQ2xpZW50KCZtX2NsaWVudCk7Ci19Ci0KLSNpZiBV
U0UoRk9VTkRBVElPTikgfHwgVVNFKFNPVVApCi0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OnRyeVJl
cGxhY2VFbmNvZGVkRGF0YShTaGFyZWRCdWZmZXImIG5ld0J1ZmZlcikKLXsKLSAgICBpZiAoIW1f
ZGF0YSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmICghbWF5VHJ5UmVwbGFjZUVuY29k
ZWREYXRhKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFdlIGhhdmUgdG8gZG8gdGhlIG1l
bWNtcCBiZWNhdXNlIHdlIGNhbid0IHRlbGwgaWYgdGhlIHJlcGxhY2VtZW50IGZpbGUgYmFja2Vk
IGRhdGEgaXMgZm9yIHRoZQotICAgIC8vIHNhbWUgcmVzb3VyY2Ugb3IgaWYgd2UgbWFkZSBhIHNl
Y29uZCByZXF1ZXN0IHdpdGggdGhlIHNhbWUgVVJMIHdoaWNoIGdhdmUgdXMgYSBkaWZmZXJlbnQK
LSAgICAvLyByZXNvdXJjZS4gV2UgaGF2ZSBzZWVuIHRoaXMgaGFwcGVuIGZvciBjYWNoZWQgUE9T
VCByZXNvdXJjZXMuCi0gICAgaWYgKG1fZGF0YS0+c2l6ZSgpICE9IG5ld0J1ZmZlci5zaXplKCkg
fHwgbWVtY21wKG1fZGF0YS0+ZGF0YSgpLCBuZXdCdWZmZXIuZGF0YSgpLCBtX2RhdGEtPnNpemUo
KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2RhdGEtPnRyeVJlcGxhY2VDb250ZW50
c1dpdGhQbGF0Zm9ybUJ1ZmZlcihuZXdCdWZmZXIpKQotICAgICAgICBkaWRSZXBsYWNlU2hhcmVk
QnVmZmVyQ29udGVudHMoKTsKLX0KLQotI2VuZGlmCi0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDU0Yjk1N2QxYmIzYzU3OWQ1Zjk5N2RjOWQ4OWQzNWFiOGE1NzMzYTYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MDAgKzAsMCBAQAotLyoK
LSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkK
LSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0g
ICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29t
KQotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwg
MjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lmbmRlZiBD
YWNoZWRSZXNvdXJjZV9oCi0jZGVmaW5lIENhY2hlZFJlc291cmNlX2gKLQotI2luY2x1ZGUgIkNh
Y2hlUG9saWN5LmgiCi0jaW5jbHVkZSAiQ2FjaGVWYWxpZGF0aW9uLmgiCi0jaW5jbHVkZSAiRnJh
bWVMb2FkZXJUeXBlcy5oIgotI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKLSNpbmNsdWRlICJS
ZXNvdXJjZUxvYWRQcmlvcml0eS5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyT3B0aW9ucy5o
IgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9u
c2UuaCIKLSNpbmNsdWRlICJTZXNzaW9uSUQuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1
ZGUgPHRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KLSNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KLSNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgTWVtb3J5Q2FjaGU7Ci1jbGFzcyBDYWNoZWRSZXNvdXJjZUNsaWVu
dDsKLWNsYXNzIENhY2hlZFJlc291cmNlSGFuZGxlQmFzZTsKLWNsYXNzIENhY2hlZFJlc291cmNl
TG9hZGVyOwotY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2U7Ci1jbGFzcyBTZWN1cml0eU9yaWdpbjsK
LWNsYXNzIFNoYXJlZEJ1ZmZlcjsKLWNsYXNzIFN1YnJlc291cmNlTG9hZGVyOwotY2xhc3MgVGV4
dFJlc291cmNlRGVjb2RlcjsKLQotLy8gQSByZXNvdXJjZSB0aGF0IGlzIGhlbGQgaW4gdGhlIGNh
Y2hlLiBDbGFzc2VzIHdobyB3YW50IHRvIHVzZSB0aGlzIG9iamVjdCBzaG91bGQgZGVyaXZlCi0v
LyBmcm9tIENhY2hlZFJlc291cmNlQ2xpZW50LCB0byBnZXQgdGhlIGZ1bmN0aW9uIGNhbGxzIGlu
IGNhc2UgdGhlIHJlcXVlc3RlZCBkYXRhIGhhcyBhcnJpdmVkLgotLy8gVGhpcyBjbGFzcyBhbHNv
IGRvZXMgdGhlIGFjdHVhbCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGxvYWRlciB0byBvYnRhaW4g
dGhlIHJlc291cmNlIGZyb20gdGhlIG5ldHdvcmsuCi1jbGFzcyBDYWNoZWRSZXNvdXJjZSB7Ci0g
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2FjaGVkUmVzb3VyY2UpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLSAgICBmcmllbmQgY2xhc3MgTWVtb3J5Q2FjaGU7Ci0gICAgZnJpZW5kIGNsYXNz
IEluc3BlY3RvclJlc291cmNlOwotICAgIAotcHVibGljOgotICAgIGVudW0gVHlwZSB7Ci0gICAg
ICAgIE1haW5SZXNvdXJjZSwKLSAgICAgICAgSW1hZ2VSZXNvdXJjZSwKLSAgICAgICAgQ1NTU3R5
bGVTaGVldCwKLSAgICAgICAgU2NyaXB0LAotICAgICAgICBGb250UmVzb3VyY2UsCi0jaWYgRU5B
QkxFKFNWR19GT05UUykKLSAgICAgICAgU1ZHRm9udFJlc291cmNlLAotI2VuZGlmCi0gICAgICAg
IE1lZGlhUmVzb3VyY2UsCi0gICAgICAgIFJhd1Jlc291cmNlLAotICAgICAgICBTVkdEb2N1bWVu
dFJlc291cmNlCi0jaWYgRU5BQkxFKFhTTFQpCi0gICAgICAgICwgWFNMU3R5bGVTaGVldAotI2Vu
ZGlmCi0jaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCi0gICAgICAgICwgTGlua1ByZWZldGNoCi0g
ICAgICAgICwgTGlua1N1YnJlc291cmNlCi0jZW5kaWYKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0sp
Ci0gICAgICAgICwgVGV4dFRyYWNrUmVzb3VyY2UKLSNlbmRpZgotICAgIH07Ci0KLSAgICBlbnVt
IFN0YXR1cyB7Ci0gICAgICAgIFVua25vd24sICAgICAgLy8gbGV0IGNhY2hlIGRlY2lkZSB3aGF0
IHRvIGRvIHdpdGggaXQKLSAgICAgICAgUGVuZGluZywgICAgICAvLyBvbmx5IHBhcnRpYWxseSBs
b2FkZWQKLSAgICAgICAgQ2FjaGVkLCAgICAgICAvLyByZWd1bGFyIGNhc2UKLSAgICAgICAgTG9h
ZEVycm9yLAotICAgICAgICBEZWNvZGVFcnJvcgotICAgIH07Ci0KLSAgICBDYWNoZWRSZXNvdXJj
ZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBUeXBlLCBTZXNzaW9uSUQpOwotICAgIHZpcnR1YWwg
fkNhY2hlZFJlc291cmNlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZChDYWNoZWRSZXNvdXJj
ZUxvYWRlciYsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYpOwotCi0gICAgdmlydHVhbCB2
b2lkIHNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYpIHsgfQotICAgIHZpcnR1YWwgU3RyaW5nIGVu
Y29kaW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCk7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IFRl
eHRSZXNvdXJjZURlY29kZXIqIHRleHRSZXNvdXJjZURlY29kZXIoKSBjb25zdCB7IHJldHVybiBu
dWxscHRyOyB9Ci0gICAgdmlydHVhbCB2b2lkIGFkZERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJik7
Ci0gICAgdmlydHVhbCB2b2lkIGFkZERhdGEoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVu
Z3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZmluaXNoTG9hZGluZyhTaGFyZWRCdWZmZXIqKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OlN0YXR1cyk7Ci0KLSAgICB2b2lk
IHNldFJlc291cmNlRXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpIHsgbV9lcnJvciA9
IGVycm9yOyB9Ci0gICAgY29uc3QgUmVzb3VyY2VFcnJvciYgcmVzb3VyY2VFcnJvcigpIGNvbnN0
IHsgcmV0dXJuIG1fZXJyb3I7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJZ25vcmVIVFRQ
U3RhdHVzQ29kZUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICBSZXNvdXJj
ZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCgpIHsgcmV0dXJuIG1fcmVzb3VyY2VSZXF1ZXN0OyB9
Ci0gICAgY29uc3QgVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlUmVxdWVzdC51
cmwoKTt9Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKLSAgICBjb25zdCBTdHJpbmcm
IGNhY2hlUGFydGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVJlcXVlc3QuY2FjaGVQ
YXJ0aXRpb24oKTsgfQotI2VuZGlmCi0gICAgU2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2Vzc2lvbklEOyB9Ci0gICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8VHlwZT4obV90eXBlKTsgfQotICAgIAotICAgIFJlc291cmNlTG9hZFByaW9yaXR5
IGxvYWRQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZFByaW9yaXR5OyB9Ci0gICAgdm9p
ZCBzZXRMb2FkUHJpb3JpdHkoY29uc3QgT3B0aW9uYWw8UmVzb3VyY2VMb2FkUHJpb3JpdHk+Jik7
Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVu
dCopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlQ2xpZW50KENhY2hlZFJlc291cmNl
Q2xpZW50Kik7Ci0gICAgYm9vbCBoYXNDbGllbnRzKCkgY29uc3QgeyByZXR1cm4gIW1fY2xpZW50
cy5pc0VtcHR5KCkgfHwgIW1fY2xpZW50c0F3YWl0aW5nQ2FsbGJhY2suaXNFbXB0eSgpOyB9Ci0g
ICAgYm9vbCBoYXNDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCkgeyByZXR1cm4g
bV9jbGllbnRzLmNvbnRhaW5zKGNsaWVudCkgfHwgbV9jbGllbnRzQXdhaXRpbmdDYWxsYmFjay5j
b250YWlucyhjbGllbnQpOyB9Ci0gICAgYm9vbCBkZWxldGVJZlBvc3NpYmxlKCk7Ci0KLSAgICBl
bnVtIFByZWxvYWRSZXN1bHQgewotICAgICAgICBQcmVsb2FkTm90UmVmZXJlbmNlZCwKLSAgICAg
ICAgUHJlbG9hZFJlZmVyZW5jZWQsCi0gICAgICAgIFByZWxvYWRSZWZlcmVuY2VkV2hpbGVMb2Fk
aW5nLAotICAgICAgICBQcmVsb2FkUmVmZXJlbmNlZFdoaWxlQ29tcGxldGUKLSAgICB9OwotICAg
IFByZWxvYWRSZXN1bHQgcHJlbG9hZFJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PFByZWxvYWRSZXN1bHQ+KG1fcHJlbG9hZFJlc3VsdCk7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBk
aWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVtb3ZlQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50KikgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IGFsbENsaWVudHNSZW1vdmVkKCkgeyB9Ci0gICAgdm9pZCBkZXN0cm95RGVjb2RlZERhdGFJZk5l
ZWRlZCgpOwotCi0gICAgdW5zaWduZWQgY291bnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudHMu
c2l6ZSgpOyB9Ci0KLSAgICBTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8U3RhdHVzPihtX3N0YXR1cyk7IH0KLSAgICB2b2lkIHNldFN0YXR1cyhTdGF0dXMgc3RhdHVz
KSB7IG1fc3RhdHVzID0gc3RhdHVzOyB9Ci0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gZW5jb2RlZFNpemUoKSArIGRlY29kZWRTaXplKCkgKyBvdmVyaGVhZFNpemUoKTsgfQot
ICAgIHVuc2lnbmVkIGVuY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGVkU2l6ZTsg
fQotICAgIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9kZWNvZGVkU2l6
ZTsgfQotICAgIHVuc2lnbmVkIG92ZXJoZWFkU2l6ZSgpIGNvbnN0OwotICAgIAotICAgIGJvb2wg
aXNMb2FkZWQoKSBjb25zdCB7IHJldHVybiAhbV9sb2FkaW5nOyB9IC8vIEZJWE1FLiBNZXRob2Qg
bmFtZSBpcyBpbmFjY3VyYXRlLiBMb2FkaW5nIG1pZ2h0IG5vdCBoYXZlIHN0YXJ0ZWQgeWV0Lgot
Ci0gICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdCB7IHJldHVybiBtX2xvYWRpbmc7IH0KLSAgICB2
b2lkIHNldExvYWRpbmcoYm9vbCBiKSB7IG1fbG9hZGluZyA9IGI7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgc3RpbGxOZWVkc0xvYWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgU3VicmVz
b3VyY2VMb2FkZXIqIGxvYWRlcigpIHsgcmV0dXJuIG1fbG9hZGVyLmdldCgpOyB9Ci0KLSAgICBi
b29sIGFyZUFsbENsaWVudHNYTUxIdHRwUmVxdWVzdHMoKSBjb25zdDsKLQotICAgIGJvb2wgaXNJ
bWFnZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBJbWFnZVJlc291cmNlOyB9Ci0gICAgLy8g
RklYTUU6IENhY2hlZFJhd1Jlc291cmNlIGNvdWxkIGJlIGEgbWFpbiByZXNvdXJjZSwgYW4gYXVk
aW8vdmlkZW8gcmVzb3VyY2UsIG9yIGEgcmF3IFhIUi9pY29uIHJlc291cmNlLgotICAgIGJvb2wg
aXNNYWluT3JNZWRpYU9yUmF3UmVzb3VyY2UoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gTWFp
blJlc291cmNlIHx8IHR5cGUoKSA9PSBNZWRpYVJlc291cmNlIHx8IHR5cGUoKSA9PSBSYXdSZXNv
dXJjZTsgfQotICAgIGJvb2wgaWdub3JlRm9yUmVxdWVzdENvdW50KCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX3Jlc291cmNlUmVxdWVzdC5pZ25vcmVGb3JSZXF1ZXN0Q291bnQoKQot
ICAgICAgICAgICAgfHwgdHlwZSgpID09IE1haW5SZXNvdXJjZQotI2lmIEVOQUJMRShMSU5LX1BS
RUZFVENIKQotICAgICAgICAgICAgfHwgdHlwZSgpID09IExpbmtQcmVmZXRjaAotICAgICAgICAg
ICAgfHwgdHlwZSgpID09IExpbmtTdWJyZXNvdXJjZQotI2VuZGlmCi0gICAgICAgICAgICB8fCB0
eXBlKCkgPT0gUmF3UmVzb3VyY2U7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgYWNjZXNzQ291bnQo
KSBjb25zdCB7IHJldHVybiBtX2FjY2Vzc0NvdW50OyB9Ci0gICAgdm9pZCBpbmNyZWFzZUFjY2Vz
c0NvdW50KCkgeyBtX2FjY2Vzc0NvdW50Kys7IH0KLQotICAgIC8vIENvbXB1dGVzIHRoZSBzdGF0
dXMgb2YgYW4gb2JqZWN0IGFmdGVyIGxvYWRpbmcuICAKLSAgICAvLyBVcGRhdGVzIHRoZSBleHBp
cmUgZGF0ZSBvbiB0aGUgY2FjaGUgZW50cnkgZmlsZQotICAgIHZvaWQgZmluaXNoKCk7Ci0KLSAg
ICBib29sIHBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhTZWN1cml0eU9yaWdpbiYpOwotICAgIGJv
b2wgcGFzc2VzU2FtZU9yaWdpblBvbGljeUNoZWNrKFNlY3VyaXR5T3JpZ2luJik7Ci0KLSAgICAv
LyBDYWxsZWQgYnkgdGhlIGNhY2hlIGlmIHRoZSBvYmplY3QgaGFzIGJlZW4gcmVtb3ZlZCBmcm9t
IHRoZSBjYWNoZQotICAgIC8vIHdoaWxlIHN0aWxsIGJlaW5nIHJlZmVyZW5jZWQuIFRoaXMgbWVh
bnMgdGhlIG9iamVjdCBzaG91bGQgZGVsZXRlIGl0c2VsZgotICAgIC8vIGlmIHRoZSBudW1iZXIg
b2YgY2xpZW50cyBvYnNlcnZpbmcgaXQgZXZlciBkcm9wcyB0byAwLgotICAgIC8vIFRoZSByZXNv
dXJjZSBjYW4gYmUgYnJvdWdodCBiYWNrIHRvIGNhY2hlIGFmdGVyIHN1Y2Nlc3NmdWwgcmV2YWxp
ZGF0aW9uLgotICAgIHZvaWQgc2V0SW5DYWNoZShib29sIGluQ2FjaGUpIHsgbV9pbkNhY2hlID0g
aW5DYWNoZTsgfQotICAgIGJvb2wgaW5DYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5DYWNoZTsg
fQotICAgIAotICAgIHZvaWQgY2xlYXJMb2FkZXIoKTsKLQotICAgIFNoYXJlZEJ1ZmZlciogcmVz
b3VyY2VCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KLQotICAgIHZpcnR1
YWwgdm9pZCByZWRpcmVjdFJlY2VpdmVkKFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzcG9uc2VSZWNlaXZlZChjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJik7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZENhY2hlUmVzcG9uc2UoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2b2lkIHNldFJlc3Bv
bnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLSAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2U7IH0KLSAgICAvLyBUaGlzIGlz
IHRoZSBzYW1lIGFzIHJlc3BvbnNlKCkgZXhjZXB0IGFmdGVyIEhUVFAgcmVkaXJlY3QgdG8gZGF0
YTogVVJMLgotICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlRm9yU2FtZU9yaWdp
blBvbGljeUNoZWNrcygpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRDcm9zc09yaWdpbigpOwotICAg
IGJvb2wgaXNDcm9zc09yaWdpbigpIGNvbnN0OwotICAgIGJvb2wgaXNDbGVhbigpIGNvbnN0Owot
ICAgIFJlc291cmNlUmVzcG9uc2U6OlRhaW50aW5nIHJlc3BvbnNlVGFpbnRpbmcoKSBjb25zdCB7
IHJldHVybiBtX3Jlc3BvbnNlVGFpbnRpbmc7IH0KLQotICAgIHZvaWQgbG9hZEZyb20oY29uc3Qg
Q2FjaGVkUmVzb3VyY2UmLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmLCBDYWNoZWRSZXNv
dXJjZUxvYWRlciYpOwotCi0gICAgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbigpIGNvbnN0IHsgcmV0
dXJuIG1fb3JpZ2luLmdldCgpOyB9Ci0KLSAgICBib29sIGNhbkRlbGV0ZSgpIGNvbnN0IHsgcmV0
dXJuICFoYXNDbGllbnRzKCkgJiYgIW1fbG9hZGVyICYmICFtX3ByZWxvYWRDb3VudCAmJiAhbV9o
YW5kbGVDb3VudCAmJiAhbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSAmJiAhbV9wcm94eVJlc291cmNl
OyB9Ci0gICAgYm9vbCBoYXNPbmVIYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsZUNvdW50
ID09IDE7IH0KLQotICAgIGJvb2wgaXNFeHBpcmVkKCkgY29uc3Q7Ci0KLSAgICAvLyBMaXN0IG9m
IGFjY2VwdGFibGUgTUlNRSB0eXBlcyBzZXBhcmF0ZWQgYnkgIiwiLgotICAgIC8vIEEgTUlNRSB0
eXBlIG1heSBjb250YWluIGEgd2lsZGNhcmQsIGUuZy4gInRleHQvKiIuCi0gICAgU3RyaW5nIGFj
Y2VwdCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZXB0OyB9Ci0gICAgdm9pZCBzZXRBY2NlcHQoY29u
c3QgU3RyaW5nJiBhY2NlcHQpIHsgbV9hY2NlcHQgPSBhY2NlcHQ7IH0KLQotICAgIHZvaWQgY2Fu
Y2VsTG9hZCgpOwotICAgIGJvb2wgd2FzQ2FuY2VsZWQoKSBjb25zdCB7IHJldHVybiBtX2Vycm9y
LmlzQ2FuY2VsbGF0aW9uKCk7IH0KLSAgICBib29sIGVycm9yT2NjdXJyZWQoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXR1cyA9PSBMb2FkRXJyb3IgfHwgbV9zdGF0dXMgPT0gRGVjb2RlRXJyb3I7IH0K
LSAgICBib29sIGxvYWRGYWlsZWRPckNhbmNlbGVkKCkgY29uc3QgeyByZXR1cm4gIW1fZXJyb3Iu
aXNOdWxsKCk7IH0KLQotICAgIGJvb2wgc2hvdWxkU2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygp
IGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9PSBTZW5kQ2FsbGJh
Y2tzOyB9Ci0gICAgRGF0YUJ1ZmZlcmluZ1BvbGljeSBkYXRhQnVmZmVyaW5nUG9saWN5KCkgY29u
c3QgeyByZXR1cm4gbV9vcHRpb25zLmRhdGFCdWZmZXJpbmdQb2xpY3k7IH0KLQotICAgIGJvb2wg
YWxsb3dzQ2FjaGluZygpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9ucy5jYWNoaW5nUG9saWN5ID09
IENhY2hpbmdQb2xpY3k6OkFsbG93Q2FjaGluZzsgfQotICAgIGNvbnN0IEZldGNoT3B0aW9ucyYg
b3B0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9uczsgfQotCi0gICAgdmlydHVhbCB2b2lk
IGRlc3Ryb3lEZWNvZGVkRGF0YSgpIHsgfQotCi0gICAgdm9pZCBzZXRPd25pbmdDYWNoZWRSZXNv
dXJjZUxvYWRlcihDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIpIHsg
bV9vd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlciA9IGNhY2hlZFJlc291cmNlTG9hZGVyOyB9Ci0g
ICAgCi0gICAgYm9vbCBpc1ByZWxvYWRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlbG9hZENvdW50
OyB9Ci0gICAgdm9pZCBpbmNyZWFzZVByZWxvYWRDb3VudCgpIHsgKyttX3ByZWxvYWRDb3VudDsg
fQotICAgIHZvaWQgZGVjcmVhc2VQcmVsb2FkQ291bnQoKSB7IEFTU0VSVChtX3ByZWxvYWRDb3Vu
dCk7IC0tbV9wcmVsb2FkQ291bnQ7IH0KLSAgICAKLSAgICB2b2lkIHJlZ2lzdGVySGFuZGxlKENh
Y2hlZFJlc291cmNlSGFuZGxlQmFzZSogaCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1bnJl
Z2lzdGVySGFuZGxlKENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSogaCk7Ci0gICAgCi0gICAgYm9v
bCBjYW5Vc2VDYWNoZVZhbGlkYXRvcigpIGNvbnN0OwotCi0gICAgZW51bSBjbGFzcyBSZXZhbGlk
YXRpb25EZWNpc2lvbiB7IE5vLCBZZXNEdWVUb0NhY2hlUG9saWN5LCBZZXNEdWVUb05vU3RvcmUs
IFllc0R1ZVRvTm9DYWNoZSwgWWVzRHVlVG9FeHBpcmVkIH07Ci0gICAgdmlydHVhbCBSZXZhbGlk
YXRpb25EZWNpc2lvbiBtYWtlUmV2YWxpZGF0aW9uRGVjaXNpb24oQ2FjaGVQb2xpY3kpIGNvbnN0
OwotICAgIGJvb2wgcmVkaXJlY3RDaGFpbkFsbG93c1JldXNlKFJldXNlRXhwaXJlZFJlZGlyZWN0
aW9uT3JOb3QpIGNvbnN0OwotCi0gICAgYm9vbCB2YXJ5SGVhZGVyVmFsdWVzTWF0Y2goY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgQ2FjaGVkUmVzb3VyY2VMb2FkZXImKTsKLQotICAgIGJv
b2wgaXNDYWNoZVZhbGlkYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VUb1JldmFsaWRh
dGU7IH0KLSAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2VUb1JldmFsaWRhdGUoKSBjb25zdCB7
IHJldHVybiBtX3Jlc291cmNlVG9SZXZhbGlkYXRlOyB9Ci0gICAgCi0gICAgLy8gSFRUUCByZXZh
bGlkYXRpb24gc3VwcG9ydCBtZXRob2RzIGZvciBDYWNoZWRSZXNvdXJjZUxvYWRlci4KLSAgICB2
b2lkIHNldFJlc291cmNlVG9SZXZhbGlkYXRlKENhY2hlZFJlc291cmNlKik7Ci0gICAgdmlydHVh
bCB2b2lkIHN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UoKTsKLSAgICB2b2lkIGNs
ZWFyUmVzb3VyY2VUb1JldmFsaWRhdGUoKTsKLSAgICB2b2lkIHVwZGF0ZVJlc3BvbnNlQWZ0ZXJS
ZXZhbGlkYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgdmFsaWRhdGluZ1Jlc3BvbnNlKTsK
LSAgICBib29sIHZhbGlkYXRpb25JblByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9wcm94eVJl
c291cmNlOyB9Ci0gICAgYm9vbCB2YWxpZGF0aW9uQ29tcGxldGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fcHJveHlSZXNvdXJjZSAmJiBtX3Byb3h5UmVzb3VyY2UtPm1fc3dpdGNoaW5nQ2xpZW50c1Rv
UmV2YWxpZGF0ZWRSZXNvdXJjZTsgfQotCi0gICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKHVu
c2lnbmVkIGxvbmcgbG9uZyAvKiBieXRlc1NlbnQgKi8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKiB0
b3RhbEJ5dGVzVG9CZVNlbnQgKi8pIHsgfQotCi0gICAgdm9pZCBzZXRMb2FkRmluaXNoVGltZShk
b3VibGUgZmluaXNoVGltZSkgeyBtX2xvYWRGaW5pc2hUaW1lID0gZmluaXNoVGltZTsgfQotICAg
IGRvdWJsZSBsb2FkRmluaXNoVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZEZpbmlzaFRpbWU7
IH0KLQotI2lmIFVTRShGT1VOREFUSU9OKSB8fCBVU0UoU09VUCkKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHRyeVJlcGxhY2VFbmNvZGVkRGF0YShTaGFyZWRCdWZmZXImKTsKLSNlbmRpZgotCi0j
aWYgVVNFKFNPVVApCi0gICAgdmlydHVhbCBjaGFyKiBnZXRPckNyZWF0ZVJlYWRCdWZmZXIoc2l6
ZV90IC8qIHJlcXVlc3RlZFNpemUgKi8sIHNpemVfdCYgLyogYWN0dWFsU2l6ZSAqLykgeyByZXR1
cm4gbnVsbHB0cjsgfQotI2VuZGlmCi0KLSAgICB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXJGb3JM
b2FkV2l0aG91dFJlc291cmNlTG9hZGVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyRm9y
TG9hZFdpdGhvdXRSZXNvdXJjZUxvYWRlcjsgfQotICAgIHN0YXRpYyBSZXNvdXJjZUxvYWRQcmlv
cml0eSBkZWZhdWx0UHJpb3JpdHlGb3JSZXNvdXJjZVR5cGUoVHlwZSk7Ci0KLXByb3RlY3RlZDoK
LSAgICB2b2lkIHNldEVuY29kZWRTaXplKHVuc2lnbmVkKTsKLSAgICB2b2lkIHNldERlY29kZWRT
aXplKHVuc2lnbmVkKTsKLSAgICB2b2lkIGRpZEFjY2Vzc0RlY29kZWREYXRhKGRvdWJsZSB0aW1l
U3RhbXApOwotCi0gICAgdmlydHVhbCB2b2lkIGRpZFJlcGxhY2VTaGFyZWRCdWZmZXJDb250ZW50
cygpIHsgfQotCi0gICAgLy8gRklYTUU6IE1ha2UgdGhlIHJlc3Qgb2YgdGhlc2UgZGF0YSBtZW1i
ZXJzIHByaXZhdGUgYW5kIHVzZSBmdW5jdGlvbnMgaW4gZGVyaXZlZCBjbGFzc2VzIGluc3RlYWQu
Ci0gICAgSGFzaENvdW50ZWRTZXQ8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPiBtX2NsaWVudHM7Ci0g
ICAgUmVzb3VyY2VSZXF1ZXN0IG1fcmVzb3VyY2VSZXF1ZXN0OwotICAgIFJlZlB0cjxTdWJyZXNv
dXJjZUxvYWRlcj4gbV9sb2FkZXI7Ci0gICAgUmVzb3VyY2VMb2FkZXJPcHRpb25zIG1fb3B0aW9u
czsKLSAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7Ci0gICAgUmVzb3VyY2VSZXNwb25z
ZTo6VGFpbnRpbmcgbV9yZXNwb25zZVRhaW50aW5nIHsgUmVzb3VyY2VSZXNwb25zZTo6VGFpbnRp
bmc6OkJhc2ljIH07Ci0gICAgUmVzb3VyY2VSZXNwb25zZSBtX3JlZGlyZWN0UmVzcG9uc2VGb3JT
YW1lT3JpZ2luUG9saWN5Q2hlY2tzOwotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsK
LSAgICBEZWZlcnJhYmxlT25lU2hvdFRpbWVyIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyOwot
Ci1wcml2YXRlOgotICAgIGNsYXNzIENhbGxiYWNrOwotCi0gICAgYm9vbCBhZGRDbGllbnRUb1Nl
dChDYWNoZWRSZXNvdXJjZUNsaWVudCopOwotCi0gICAgdm9pZCBkZWNvZGVkRGF0YURlbGV0aW9u
VGltZXJGaXJlZCgpOwotCi0gICAgdmlydHVhbCB2b2lkIGNoZWNrTm90aWZ5KCk7Ci0gICAgdmly
dHVhbCBib29sIG1heVRyeVJlcGxhY2VFbmNvZGVkRGF0YSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldEJvZHlEYXRhRnJvbShjb25zdCBDYWNoZWRSZXNvdXJj
ZSYpIHsgfQotCi0gICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBmcmVzaG5lc3NMaWZldGlt
ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgY29uc3Q7Ci0KLSAgICB2b2lkIGFkZEFkZGl0aW9u
YWxSZXF1ZXN0SGVhZGVycyhDYWNoZWRSZXNvdXJjZUxvYWRlciYpOwotICAgIHZvaWQgY29tcHV0
ZU9yaWdpbihDYWNoZWRSZXNvdXJjZUxvYWRlciYpOwotICAgIHZvaWQgZmFpbEJlZm9yZVN0YXJ0
aW5nKCk7Ci0KLSAgICBIYXNoTWFwPENhY2hlZFJlc291cmNlQ2xpZW50Kiwgc3RkOjp1bmlxdWVf
cHRyPENhbGxiYWNrPj4gbV9jbGllbnRzQXdhaXRpbmdDYWxsYmFjazsKLSAgICBTZXNzaW9uSUQg
bV9zZXNzaW9uSUQ7Ci0gICAgU3RyaW5nIG1fYWNjZXB0OwotICAgIFJlc291cmNlTG9hZFByaW9y
aXR5IG1fbG9hZFByaW9yaXR5OwotICAgIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVf
cG9pbnQgbV9yZXNwb25zZVRpbWVzdGFtcDsKLQotICAgIFN0cmluZyBtX2ZyYWdtZW50SWRlbnRp
ZmllckZvclJlcXVlc3Q7Ci0KLSAgICBSZXNvdXJjZUVycm9yIG1fZXJyb3I7Ci0gICAgUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBtX29yaWdpbjsKLQotICAgIGRvdWJsZSBtX2xhc3REZWNvZGVkQWNj
ZXNzVGltZTsgLy8gVXNlZCBhcyBhICJ0aHJhc2ggZ3VhcmQiIGluIHRoZSBjYWNoZQotICAgIGRv
dWJsZSBtX2xvYWRGaW5pc2hUaW1lOwotCi0gICAgdW5zaWduZWQgbV9lbmNvZGVkU2l6ZTsKLSAg
ICB1bnNpZ25lZCBtX2RlY29kZWRTaXplOwotICAgIHVuc2lnbmVkIG1fYWNjZXNzQ291bnQ7Ci0g
ICAgdW5zaWduZWQgbV9oYW5kbGVDb3VudDsKLSAgICB1bnNpZ25lZCBtX3ByZWxvYWRDb3VudDsK
LQotICAgIHVuc2lnbmVkIG1fcHJlbG9hZFJlc3VsdCA6IDI7IC8vIFByZWxvYWRSZXN1bHQKLQot
ICAgIGJvb2wgbV9yZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyIDogMTsKLQotICAgIGJvb2wg
bV9pbkNhY2hlIDogMTsKLSAgICBib29sIG1fbG9hZGluZyA6IDE7Ci0KLSAgICBib29sIG1fc3dp
dGNoaW5nQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSA6IDE7Ci0KLSAgICB1bnNpZ25lZCBt
X3R5cGUgOiA0OyAvLyBUeXBlCi0gICAgdW5zaWduZWQgbV9zdGF0dXMgOiAzOyAvLyBTdGF0dXMK
LQotI2lmbmRlZiBOREVCVUcKLSAgICBib29sIG1fZGVsZXRlZDsKLSAgICB1bnNpZ25lZCBtX2xy
dUluZGV4OwotI2VuZGlmCi0KLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogbV9vd25pbmdDYWNo
ZWRSZXNvdXJjZUxvYWRlcjsgLy8gb25seSBub24tbnVsbCBmb3IgcmVzb3VyY2VzIHRoYXQgYXJl
IG5vdCBpbiB0aGUgY2FjaGUKLSAgICAKLSAgICAvLyBJZiB0aGlzIGZpZWxkIGlzIG5vbi1udWxs
IHdlIGFyZSB1c2luZyB0aGUgcmVzb3VyY2UgYXMgYSBwcm94eSBmb3IgY2hlY2tpbmcgd2hldGhl
ciBhbiBleGlzdGluZyByZXNvdXJjZSBpcyBzdGlsbCB1cCB0byBkYXRlCi0gICAgLy8gdXNpbmcg
SFRUUCBJZi1Nb2RpZmllZC1TaW5jZS9JZi1Ob25lLU1hdGNoIGhlYWRlcnMuIElmIHRoZSByZXNw
b25zZSBpcyAzMDQgYWxsIGNsaWVudHMgb2YgdGhpcyByZXNvdXJjZSBhcmUgbW92ZWQKLSAgICAv
LyB0byB0byBiZSBjbGllbnRzIG9mIG1fcmVzb3VyY2VUb1JldmFsaWRhdGUgYW5kIHRoZSByZXNv
dXJjZSBpcyBkZWxldGVkLiBJZiBub3QsIHRoZSBmaWVsZCBpcyB6ZXJvZWQgYW5kIHRoaXMKLSAg
ICAvLyByZXNvdXJjZXMgYmVjb21lcyBub3JtYWwgcmVzb3VyY2UgbG9hZC4KLSAgICBDYWNoZWRS
ZXNvdXJjZSogbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZTsKLQotICAgIC8vIElmIHRoaXMgZmllbGQg
aXMgbm9uLW51bGwsIHRoZSByZXNvdXJjZSBoYXMgYSBwcm94eSBmb3IgY2hlY2tpbmcgd2hldGhl
ciBpdCBpcyBzdGlsbCB1cCB0byBkYXRlIChzZWUgbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSkuCi0g
ICAgQ2FjaGVkUmVzb3VyY2UqIG1fcHJveHlSZXNvdXJjZTsKLQotICAgIC8vIFRoZXNlIGhhbmRs
ZXMgd2lsbCBuZWVkIHRvIGJlIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlIG1fcmVzb3VyY2VUb1Jl
dmFsaWRhdGUgaW4gY2FzZSB3ZSBnZXQgMzA0IHJlc3BvbnNlLgotICAgIEhhc2hTZXQ8Q2FjaGVk
UmVzb3VyY2VIYW5kbGVCYXNlKj4gbV9oYW5kbGVzVG9SZXZhbGlkYXRlOwotCi0gICAgUmVkaXJl
Y3RDaGFpbkNhY2hlU3RhdHVzIG1fcmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzOwotCi0gICAgVmVj
dG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IG1fdmFyeWluZ0hlYWRlclZhbHVlczsKLQot
ICAgIHVuc2lnbmVkIGxvbmcgbV9pZGVudGlmaWVyRm9yTG9hZFdpdGhvdXRSZXNvdXJjZUxvYWRl
ciB7IDAgfTsKLX07Ci0KLWNsYXNzIENhY2hlZFJlc291cmNlOjpDYWxsYmFjayB7Ci0jaWYgIUNP
TVBJTEVSKE1TVkMpCi0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0jZW5kaWYKLXB1Ymxp
YzoKLSAgICBDYWxsYmFjayhDYWNoZWRSZXNvdXJjZSYsIENhY2hlZFJlc291cmNlQ2xpZW50Jik7
Ci0KLSAgICB2b2lkIGNhbmNlbCgpOwotCi1wcml2YXRlOgotICAgIHZvaWQgdGltZXJGaXJlZCgp
OwotCi0gICAgQ2FjaGVkUmVzb3VyY2UmIG1fcmVzb3VyY2U7Ci0gICAgQ2FjaGVkUmVzb3VyY2VD
bGllbnQmIG1fY2xpZW50OwotICAgIFRpbWVyIG1fdGltZXI7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUNIRURfUkVTT1VS
Q0UoVG9DbGFzc05hbWUsIENhY2hlZFJlc291cmNlVHlwZSkgXAotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19CRUdJTihXZWJDb3JlOjpUb0NsYXNzTmFtZSkgXAotICAgIHN0YXRpYyBib29sIGlzVHlw
ZShjb25zdCBXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpIHsgcmV0dXJuIHJlc291
cmNlLnR5cGUoKSA9PSBXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZVR5cGU7IH0gXAotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19FTkQoKQotCi0jZW5kaWYgLy8gQ2FjaGVkUmVzb3VyY2VfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI0NTQzZDVhNTk3OWVjYzQyZjZkMjY0YjQ0MmU3
NDkzMTNhNWM5ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaAorKysg
L2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAxOTk4IExh
cnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAxIERp
cmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0K
LSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBu
ZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKLSAgICBwYWdl
cyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4K
LSovCi0KLSNpZm5kZWYgQ2FjaGVkUmVzb3VyY2VDbGllbnRfaAotI2RlZmluZSBDYWNoZWRSZXNv
dXJjZUNsaWVudF9oCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ2FjaGVkUmVzb3Vy
Y2U7Ci0KLWNsYXNzIENhY2hlZFJlc291cmNlQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBlbnVtIENh
Y2hlZFJlc291cmNlQ2xpZW50VHlwZSB7Ci0gICAgICAgIEJhc2VSZXNvdXJjZVR5cGUsCi0gICAg
ICAgIEltYWdlVHlwZSwKLSAgICAgICAgRm9udFR5cGUsCi0gICAgICAgIFN0eWxlU2hlZXRUeXBl
LAotICAgICAgICBTVkdEb2N1bWVudFR5cGUsCi0gICAgICAgIFJhd1Jlc291cmNlVHlwZQotICAg
IH07Ci0KLSAgICB2aXJ0dWFsIH5DYWNoZWRSZXNvdXJjZUNsaWVudCgpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSopIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBkZXByZWNhdGVkRGlkUmVjZWl2ZUNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKikg
eyB9Ci0gICAgdmlydHVhbCBib29sIGlzWE1MSHR0cFJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotCi0gICAgc3RhdGljIENhY2hlZFJlc291cmNlQ2xpZW50VHlwZSBleHBlY3RlZFR5
cGUoKSB7IHJldHVybiBCYXNlUmVzb3VyY2VUeXBlOyB9Ci0gICAgdmlydHVhbCBDYWNoZWRSZXNv
dXJjZUNsaWVudFR5cGUgcmVzb3VyY2VDbGllbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gZXhwZWN0
ZWRUeXBlKCk7IH0KLQotcHJvdGVjdGVkOgotICAgIENhY2hlZFJlc291cmNlQ2xpZW50KCkgeyB9
Ci19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYzUxZWY4NjEwMTM2ZGIyZDM3NDQwNTlmMDRkZGQ3M2Q5NTc3NjZiYy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaAorKysgL2Rldi9udWxsCkBA
IC0xLDY5ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtu
b2xsQG1waS1oZC5tcGcuZGUpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8
bXVlbGxlckBrZGUub3JnPgotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0K
LSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRl
cyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVl
dHMgYW5kIGh0bWwKLSAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNo
ZSBmb3IgdGhlc2Ugb2JqZWN0cy4KLSovCi0KLSNpZm5kZWYgQ2FjaGVkUmVzb3VyY2VDbGllbnRX
YWxrZXJfaAotI2RlZmluZSBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcl9oCi0KLSNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5o
PgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBD
YWxsIHRoaXMgIndhbGtlciIgaW5zdGVhZCBvZiBpdGVyYXRvciBzbyBwZW9wbGUgd29uJ3QgZXhw
ZWN0IFF0IG9yIFNUTC1zdHlsZSBpdGVyYXRvciBpbnRlcmZhY2UuCi0vLyBKdXN0IGtlZXAgY2Fs
bGluZyBuZXh0KCkgb24gdGhpcy4gSXQncyBzYWZlIGZyb20gZGVsZXRpb25zIG9mIGl0ZW1zLgot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIgewot
cHVibGljOgotICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyKGNvbnN0IEhhc2hDb3VudGVk
U2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj4mIHNldCkKLSAgICAgICAgOiBtX2NsaWVudFNldChz
ZXQpLCBtX2NsaWVudFZlY3RvcihzZXQuc2l6ZSgpKSwgbV9pbmRleCgwKQotICAgIHsKLSAgICAg
ICAgdHlwZWRlZiBIYXNoQ291bnRlZFNldDxDYWNoZWRSZXNvdXJjZUNsaWVudCo+Ojpjb25zdF9p
dGVyYXRvciBJdGVyYXRvcjsKLSAgICAgICAgSXRlcmF0b3IgZW5kID0gc2V0LmVuZCgpOwotICAg
ICAgICBzaXplX3QgY2xpZW50SW5kZXggPSAwOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGN1cnJl
bnQgPSBzZXQuYmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkKLSAgICAgICAgICAg
IG1fY2xpZW50VmVjdG9yW2NsaWVudEluZGV4KytdID0gY3VycmVudC0+a2V5OwotICAgIH0KLQot
ICAgIFQqIG5leHQoKQotICAgIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBtX2NsaWVudFZlY3Rv
ci5zaXplKCk7Ci0gICAgICAgIHdoaWxlIChtX2luZGV4IDwgc2l6ZSkgewotICAgICAgICAgICAg
Q2FjaGVkUmVzb3VyY2VDbGllbnQqIG5leHQgPSBtX2NsaWVudFZlY3RvclttX2luZGV4KytdOwot
ICAgICAgICAgICAgaWYgKG1fY2xpZW50U2V0LmNvbnRhaW5zKG5leHQpKSB7Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oVDo6ZXhwZWN0ZWRUeXBlKCkg
PT0gQ2FjaGVkUmVzb3VyY2VDbGllbnQ6OmV4cGVjdGVkVHlwZSgpIHx8IG5leHQtPnJlc291cmNl
Q2xpZW50VHlwZSgpID09IFQ6OmV4cGVjdGVkVHlwZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VCo+KG5leHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci1wcml2YXRlOgotICAgIGNvbnN0
IEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj4mIG1fY2xpZW50U2V0OwotICAg
IFZlY3RvcjxDYWNoZWRSZXNvdXJjZUNsaWVudCo+IG1fY2xpZW50VmVjdG9yOwotICAgIHNpemVf
dCBtX2luZGV4OwotfTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwOTcyNzZlOTMyYmQwZWNjODYwN2QzY2VjYWI0NTM3NGJhMzkzYzBjLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5o
IgotCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1DYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2U6OkNhY2hlZFJlc291cmNlSGFuZGxlQmFzZSgpCi0g
ICAgOiBtX3Jlc291cmNlKG51bGxwdHIpCi17Ci19Ci0KLUNhY2hlZFJlc291cmNlSGFuZGxlQmFz
ZTo6Q2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKLSAg
ICA6IG1fcmVzb3VyY2UocmVzb3VyY2UpCi17Ci0gICAgaWYgKG1fcmVzb3VyY2UpCi0gICAgICAg
IG1fcmVzb3VyY2UtPnJlZ2lzdGVySGFuZGxlKHRoaXMpOwotfQotCi1DYWNoZWRSZXNvdXJjZUhh
bmRsZUJhc2U6OkNhY2hlZFJlc291cmNlSGFuZGxlQmFzZShjb25zdCBDYWNoZWRSZXNvdXJjZUhh
bmRsZUJhc2UmIG90aGVyKQotICAgIDogbV9yZXNvdXJjZShvdGhlci5tX3Jlc291cmNlKQotewot
ICAgIGlmIChtX3Jlc291cmNlKQotICAgICAgICBtX3Jlc291cmNlLT5yZWdpc3RlckhhbmRsZSh0
aGlzKTsKLX0KLQotQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlOjp+Q2FjaGVkUmVzb3VyY2VIYW5k
bGVCYXNlKCkKLXsKLSAgICBpZiAobV9yZXNvdXJjZSkKLSAgICAgICAgbV9yZXNvdXJjZS0+dW5y
ZWdpc3RlckhhbmRsZSh0aGlzKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2U6
OnNldFJlc291cmNlKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKLXsKLSAgICBpZiAocmVzb3Vy
Y2UgPT0gbV9yZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX3Jlc291cmNlKQot
ICAgICAgICBtX3Jlc291cmNlLT51bnJlZ2lzdGVySGFuZGxlKHRoaXMpOwotICAgIG1fcmVzb3Vy
Y2UgPSByZXNvdXJjZTsKLSAgICBpZiAobV9yZXNvdXJjZSkKLSAgICAgICAgbV9yZXNvdXJjZS0+
cmVnaXN0ZXJIYW5kbGUodGhpcyk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUhhbmRsZS5oIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlSGFuZGxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAzZTU4NDJlMzM1NDQ5YjVhOWRhOWNjYjU3Y2M2NTc1ZDViZWE1YWIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlSGFuZGxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aWZuZGVmIENhY2hlZFJlc291cmNlSGFuZGxlX2gKLSNkZWZpbmUgQ2FjaGVkUmVzb3VyY2VIYW5k
bGVfaAotCi0jaW5jbHVkZSAiUGxhdGZvcm1FeHBvcnRNYWNyb3MuaCIKLSNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENhY2hlZFJlc291cmNl
OwotCi1jbGFzcyBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UgewotcHVibGljOgotICAgIH5DYWNo
ZWRSZXNvdXJjZUhhbmRsZUJhc2UoKTsKLQotICAgIENhY2hlZFJlc291cmNlKiBnZXQoKSBjb25z
dCB7IHJldHVybiBtX3Jlc291cmNlOyB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiAhbV9yZXNvdXJjZTsgfQotICAgIAotICAgIC8vIFRoaXMgY29udmVyc2lvbiBv
cGVyYXRvciBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3Ro
ZXIgaW50ZWdlciB0eXBlcy4KLSAgICB0eXBlZGVmIENhY2hlZFJlc291cmNlKiBDYWNoZWRSZXNv
dXJjZUhhbmRsZUJhc2U6OipVbnNwZWNpZmllZEJvb2xUeXBlOwotICAgIG9wZXJhdG9yIFVuc3Bl
Y2lmaWVkQm9vbFR5cGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlID8gJkNhY2hlZFJlc291
cmNlSGFuZGxlQmFzZTo6bV9yZXNvdXJjZSA6IDA7IH0KLQotcHJvdGVjdGVkOgotICAgIENhY2hl
ZFJlc291cmNlSGFuZGxlQmFzZSgpOwotICAgIENhY2hlZFJlc291cmNlSGFuZGxlQmFzZShDYWNo
ZWRSZXNvdXJjZSopOwotICAgIENhY2hlZFJlc291cmNlSGFuZGxlQmFzZShjb25zdCBDYWNoZWRS
ZXNvdXJjZUhhbmRsZUJhc2UmKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UmVzb3Vy
Y2UoQ2FjaGVkUmVzb3VyY2UqKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgQ2FjaGVkUmVzb3VyY2VI
YW5kbGVCYXNlJiBvcGVyYXRvcj0oY29uc3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlJikgeyBy
ZXR1cm4gKnRoaXM7IH0gCi0gICAgCi0gICAgZnJpZW5kIGNsYXNzIENhY2hlZFJlc291cmNlOwot
Ci0gICAgQ2FjaGVkUmVzb3VyY2UqIG1fcmVzb3VyY2U7Ci19OwotICAgIAotdGVtcGxhdGUgPGNs
YXNzIFI+IGNsYXNzIENhY2hlZFJlc291cmNlSGFuZGxlIDogcHVibGljIENhY2hlZFJlc291cmNl
SGFuZGxlQmFzZSB7Ci1wdWJsaWM6IAotICAgIENhY2hlZFJlc291cmNlSGFuZGxlKCkgeyB9Ci0g
ICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGUoUiogcmVzKSA6IENhY2hlZFJlc291cmNlSGFuZGxlQmFz
ZShyZXMpIHsgfQotICAgIENhY2hlZFJlc291cmNlSGFuZGxlKGNvbnN0IENhY2hlZFJlc291cmNl
SGFuZGxlPFI+JiBvKSA6IENhY2hlZFJlc291cmNlSGFuZGxlQmFzZShvKSB7IH0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPiBDYWNoZWRSZXNvdXJjZUhhbmRsZShjb25zdCBDYWNoZWRSZXNvdXJj
ZUhhbmRsZTxVPiYgbykgOiBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2Uoby5nZXQoKSkgeyB9Ci0K
LSAgICBSKiBnZXQoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PFIqPihDYWNoZWRS
ZXNvdXJjZUhhbmRsZUJhc2U6OmdldCgpKTsgfQotICAgIFIqIG9wZXJhdG9yLT4oKSBjb25zdCB7
IHJldHVybiBnZXQoKTsgfQotICAgIFImIG9wZXJhdG9yKigpIGNvbnN0IHsgQVNTRVJUKGdldCgp
KTsgcmV0dXJuICpnZXQoKTsgfQotCi0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGUmIG9wZXJhdG9y
PShSKiByZXMpIHsgc2V0UmVzb3VyY2UocmVzKTsgcmV0dXJuICp0aGlzOyB9IAotICAgIENhY2hl
ZFJlc291cmNlSGFuZGxlJiBvcGVyYXRvcj0oY29uc3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGUmIG8p
IHsgc2V0UmVzb3VyY2Uoby5nZXQoKSk7IHJldHVybiAqdGhpczsgfQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+IENhY2hlZFJlc291cmNlSGFuZGxlJiBvcGVyYXRvcj0oY29uc3QgQ2FjaGVkUmVz
b3VyY2VIYW5kbGU8VT4mIG8pIHsgc2V0UmVzb3VyY2Uoby5nZXQoKSk7IHJldHVybiAqdGhpczsg
fQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSYg
bykgY29uc3QgeyByZXR1cm4gZ2V0KCkgPT0gby5nZXQoKTsgfQotICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UmIG8pIGNvbnN0IHsgcmV0dXJuIGdldCgp
ICE9IG8uZ2V0KCk7IH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBSUj4gYm9vbCBv
cGVyYXRvcj09KGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxlPFI+JiBoLCBjb25zdCBSUiogcmVz
KSAKLXsgCi0gICAgcmV0dXJuIGguZ2V0KCkgPT0gcmVzOyAKLX0KLXRlbXBsYXRlIDxjbGFzcyBS
LCBjbGFzcyBSUj4gYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJSKiByZXMsIGNvbnN0IENhY2hlZFJl
c291cmNlSGFuZGxlPFI+JiBoKSAKLXsgCi0gICAgcmV0dXJuIGguZ2V0KCkgPT0gcmVzOyAKLX0K
LXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBSUj4gYm9vbCBvcGVyYXRvciE9KGNvbnN0IENhY2hl
ZFJlc291cmNlSGFuZGxlPFI+JiBoLCBjb25zdCBSUiogcmVzKSAKLXsgCi0gICAgcmV0dXJuIGgu
Z2V0KCkgIT0gcmVzOyAKLX0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBSUj4gYm9vbCBvcGVy
YXRvciE9KGNvbnN0IFJSKiByZXMsIGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxlPFI+JiBoKSAK
LXsgCi0gICAgcmV0dXJuIGguZ2V0KCkgIT0gcmVzOyAKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gQ2FjaGVkUmVzb3VyY2VIYW5kbGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBkNWI3ZjhjZjZiMDA5ZWIwNGNjZDVhOTc5Y2UyNmUzOTdmNDM4
Yjk1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxMjU3ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMg
S25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsg
TXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICAgIENvcHlyaWdodCAoQykgMjAwMiBXYWxkbyBC
YXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICAgIENvcHlyaWdodCAoQykgMjAwOSBUb3Jj
aCBNb2JpbGUgSW5jLiBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KLQotICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSAgICBUaGlzIGNsYXNz
IHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0
eWxlIHNoZWV0cyBhbmQgaHRtbAotICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVt
b3J5IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCi0KLSNpbmNsdWRlICJDYWNoZWRDU1NT
dHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJD
YWNoZWRGb250LmgiCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJDYWNoZWRS
YXdSZXNvdXJjZS5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1
ZGUgIkNhY2hlZFNWR0ZvbnQuaCIKLSNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKLSNpbmNsdWRl
ICJDYWNoZWRYU0xTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAi
Q2hyb21lQ2xpZW50LmgiCi0jaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbkVycm9yLmgiCi0jaW5j
bHVkZSAiQ29udGVudEV4dGVuc2lvblJ1bGUuaCIKLSNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQ
b2xpY3kuaCIKLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJEaWFnbm9zdGljTG9n
Z2luZ0NsaWVudC5oIgotI2luY2x1ZGUgIkRpYWdub3N0aWNMb2dnaW5nS2V5cy5oIgotI2luY2x1
ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJG
cmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJD
bGllbnQuaCIKLSNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxGcmFtZU93
bmVyRWxlbWVudC5oIgotI2luY2x1ZGUgIkxvYWRlclN0cmF0ZWd5LmgiCi0jaW5jbHVkZSAiTG9j
YWxpemVkU3RyaW5ncy5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJNYWluRnJh
bWUuaCIKLSNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNs
dWRlICJQZXJmb3JtYW5jZS5oIgotI2luY2x1ZGUgIlBpbmdMb2FkZXIuaCIKLSNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuaCIKLSNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiUmVzb3VyY2VMb2FkSW5mby5oIgotI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMu
aCIKLSNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW4uaCIKLSNpbmNsdWRlICJTZXNzaW9uSUQuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2lu
Y2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgotI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVy
LmgiCi0jaW5jbHVkZSAiVXNlckNvbnRlbnRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiVXNlclN0
eWxlU2hlZXQuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0jaW5jbHVkZSAi
Q2FjaGVkVGV4dFRyYWNrLmgiCi0jZW5kaWYKLQotI2RlZmluZSBQUkVMT0FEX0RFQlVHIDAKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgQ2FjaGVkUmVzb3VyY2UqIGNyZWF0ZVJlc291
cmNlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgU3RyaW5nJiBjaGFyc2V0LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQotewotICAgIHN3aXRj
aCAodHlwZSkgewotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6Ci0gICAg
ICAgIHJldHVybiBuZXcgQ2FjaGVkSW1hZ2UocmVxdWVzdCwgc2Vzc2lvbklEKTsKLSAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OgotICAgICAgICByZXR1cm4gbmV3IENhY2hl
ZENTU1N0eWxlU2hlZXQocmVxdWVzdCwgY2hhcnNldCwgc2Vzc2lvbklEKTsKLSAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpTY3JpcHQ6Ci0gICAgICAgIHJldHVybiBuZXcgQ2FjaGVkU2NyaXB0KHJl
cXVlc3QsIGNoYXJzZXQsIHNlc3Npb25JRCk7Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U1ZH
RG9jdW1lbnRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRTVkdEb2N1bWVudChy
ZXF1ZXN0LCBzZXNzaW9uSUQpOwotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6U1ZHRm9udFJlc291cmNlOgotICAgICAgICByZXR1cm4gbmV3IENhY2hlZFNW
R0ZvbnQocmVxdWVzdCwgc2Vzc2lvbklEKTsKLSNlbmRpZgotICAgIGNhc2UgQ2FjaGVkUmVzb3Vy
Y2U6OkZvbnRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRGb250KHJlcXVlc3Qs
IHNlc3Npb25JRCk7Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TWVkaWFSZXNvdXJjZToKLSAg
ICBjYXNlIENhY2hlZFJlc291cmNlOjpSYXdSZXNvdXJjZToKLSAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpNYWluUmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBuZXcgQ2FjaGVkUmF3UmVzb3VyY2Uo
cmVxdWVzdCwgdHlwZSwgc2Vzc2lvbklEKTsKLSNpZiBFTkFCTEUoWFNMVCkKLSAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgotICAgICAgICByZXR1cm4gbmV3IENhY2hlZFhT
TFN0eWxlU2hlZXQocmVxdWVzdCwgc2Vzc2lvbklEKTsKLSNlbmRpZgotI2lmIEVOQUJMRShMSU5L
X1BSRUZFVENIKQotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRjaDoKLSAgICAg
ICAgcmV0dXJuIG5ldyBDYWNoZWRSZXNvdXJjZShyZXF1ZXN0LCBDYWNoZWRSZXNvdXJjZTo6TGlu
a1ByZWZldGNoLCBzZXNzaW9uSUQpOwotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtTdWJy
ZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRSZXNvdXJjZShyZXF1ZXN0LCBDYWNo
ZWRSZXNvdXJjZTo6TGlua1N1YnJlc291cmNlLCBzZXNzaW9uSUQpOwotI2VuZGlmCi0jaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlRleHRUcmFja1Jlc291
cmNlOgotICAgICAgICByZXR1cm4gbmV3IENhY2hlZFRleHRUcmFjayhyZXF1ZXN0LCBzZXNzaW9u
SUQpOwotI2VuZGlmCi0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBudWxscHRyOwotfQotCi1DYWNoZWRSZXNvdXJjZUxvYWRlcjo6Q2FjaGVkUmVzb3VyY2VMb2Fk
ZXIoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyKQotICAgIDogbV9kb2N1bWVudChudWxs
cHRyKQotICAgICwgbV9kb2N1bWVudExvYWRlcihkb2N1bWVudExvYWRlcikKLSAgICAsIG1fcmVx
dWVzdENvdW50KDApCi0gICAgLCBtX2dhcmJhZ2VDb2xsZWN0RG9jdW1lbnRSZXNvdXJjZXNUaW1l
cigqdGhpcywgJkNhY2hlZFJlc291cmNlTG9hZGVyOjpnYXJiYWdlQ29sbGVjdERvY3VtZW50UmVz
b3VyY2VzKQotICAgICwgbV9hdXRvTG9hZEltYWdlcyh0cnVlKQotICAgICwgbV9pbWFnZXNFbmFi
bGVkKHRydWUpCi0gICAgLCBtX2FsbG93U3RhbGVSZXNvdXJjZXMoZmFsc2UpCi17Ci19Ci0KLUNh
Y2hlZFJlc291cmNlTG9hZGVyOjp+Q2FjaGVkUmVzb3VyY2VMb2FkZXIoKQotewotICAgIG1fZG9j
dW1lbnRMb2FkZXIgPSBudWxscHRyOwotICAgIG1fZG9jdW1lbnQgPSBudWxscHRyOwotCi0gICAg
Y2xlYXJQcmVsb2FkcygpOwotICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiBtX2RvY3VtZW50UmVz
b3VyY2VzLnZhbHVlcygpKQotICAgICAgICByZXNvdXJjZS0+c2V0T3duaW5nQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIobnVsbHB0cik7Ci0KLSAgICAvLyBNYWtlIHN1cmUgbm8gcmVxdWVzdHMgc3RpbGwg
cG9pbnQgdG8gdGhpcyBDYWNoZWRSZXNvdXJjZUxvYWRlcgotICAgIEFTU0VSVChtX3JlcXVlc3RD
b3VudCA9PSAwKTsKLX0KLQotQ2FjaGVkUmVzb3VyY2UqIENhY2hlZFJlc291cmNlTG9hZGVyOjpj
YWNoZWRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHJlc291cmNlVVJMKSBjb25zdCAKLXsKLSAgICBB
U1NFUlQoIXJlc291cmNlVVJMLmlzTnVsbCgpKTsKLSAgICBVUkwgdXJsID0gbV9kb2N1bWVudC0+
Y29tcGxldGVVUkwocmVzb3VyY2VVUkwpOwotICAgIHJldHVybiBjYWNoZWRSZXNvdXJjZSh1cmwp
OyAKLX0KLQotQ2FjaGVkUmVzb3VyY2UqIENhY2hlZFJlc291cmNlTG9hZGVyOjpjYWNoZWRSZXNv
dXJjZShjb25zdCBVUkwmIHJlc291cmNlVVJMKSBjb25zdAotewotICAgIFVSTCB1cmwgPSBNZW1v
cnlDYWNoZTo6cmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVySWZOZWVkZWQocmVzb3VyY2VVUkwpOwot
ICAgIHJldHVybiBtX2RvY3VtZW50UmVzb3VyY2VzLmdldCh1cmwpLmdldCgpOyAKLX0KLQotRnJh
bWUqIENhY2hlZFJlc291cmNlTG9hZGVyOjpmcmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
ZG9jdW1lbnRMb2FkZXIgPyBtX2RvY3VtZW50TG9hZGVyLT5mcmFtZSgpIDogbnVsbHB0cjsKLX0K
LQotU2Vzc2lvbklEIENhY2hlZFJlc291cmNlTG9hZGVyOjpzZXNzaW9uSUQoKSBjb25zdAotewot
ICAgIFNlc3Npb25JRCBzZXNzaW9uSUQgPSBTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKTsK
LQotICAgIGlmIChGcmFtZSogZiA9IGZyYW1lKCkpCi0gICAgICAgIHNlc3Npb25JRCA9IGYtPnBh
Z2UoKS0+c2Vzc2lvbklEKCk7Ci0KLSAgICByZXR1cm4gc2Vzc2lvbklEOwotfQotCi1DYWNoZWRS
ZXNvdXJjZUhhbmRsZTxDYWNoZWRJbWFnZT4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RJ
bWFnZShDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgaWYgKEZyYW1lKiBm
cmFtZSA9IHRoaXMtPmZyYW1lKCkpIHsKLSAgICAgICAgaWYgKGZyYW1lLT5sb2FkZXIoKS5wYWdl
RGlzbWlzc2FsRXZlbnRCZWluZ0Rpc3BhdGNoZWQoKSAhPSBGcmFtZUxvYWRlcjo6UGFnZURpc21p
c3NhbFR5cGU6Ok5vbmUpIHsKLSAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBm
cmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudC0+Y29udGVudFNlY3Vy
aXR5UG9saWN5KCktPnVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RJZk5lZWRlZChyZXF1ZXN0Lm11dGFi
bGVSZXNvdXJjZVJlcXVlc3QoKSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpJbnNlY3VyZVJlcXVl
c3RUeXBlOjpMb2FkKTsKLSAgICAgICAgICAgIFVSTCByZXF1ZXN0VVJMID0gcmVxdWVzdC5yZXNv
dXJjZVJlcXVlc3QoKS51cmwoKTsKLSAgICAgICAgICAgIGlmIChyZXF1ZXN0VVJMLmlzVmFsaWQo
KSAmJiBjYW5SZXF1ZXN0KENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlLCByZXF1ZXN0VVJM
LCByZXF1ZXN0Lm9wdGlvbnMoKSwgcmVxdWVzdC5mb3JQcmVsb2FkKCkpKQotICAgICAgICAgICAg
ICAgIFBpbmdMb2FkZXI6OmxvYWRJbWFnZSgqZnJhbWUsIHJlcXVlc3RVUkwpOwotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmVxdWVzdC5z
ZXREZWZlcihjbGllbnREZWZlcnNJbWFnZShyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgp
KSA/IENhY2hlZFJlc291cmNlUmVxdWVzdDo6RGVmZXJyZWRCeUNsaWVudCA6IENhY2hlZFJlc291
cmNlUmVxdWVzdDo6Tm9EZWZlcik7Ci0gICAgcmV0dXJuIGRvd25jYXN0PENhY2hlZEltYWdlPihy
ZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UsIHJlcXVlc3QpLmdl
dCgpKTsKLX0KLQotQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkRm9udD4gQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OnJlcXVlc3RGb250KENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9v
bCBpc1NWRykKLXsKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGlmIChpc1NWRykKLSAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PENhY2hlZFNWR0ZvbnQ+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRS
ZXNvdXJjZTo6U1ZHRm9udFJlc291cmNlLCByZXF1ZXN0KS5nZXQoKSk7Ci0jZWxzZQotICAgIFVO
VVNFRF9QQVJBTShpc1NWRyk7Ci0jZW5kaWYKLSAgICByZXR1cm4gZG93bmNhc3Q8Q2FjaGVkRm9u
dD4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2UsIHJlcXVlc3Qp
LmdldCgpKTsKLX0KLQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLUNhY2hlZFJlc291cmNlSGFu
ZGxlPENhY2hlZFRleHRUcmFjaz4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RUZXh0VHJh
Y2soQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIHJldHVybiBkb3duY2Fz
dDxDYWNoZWRUZXh0VHJhY2s+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VGV4dFRy
YWNrUmVzb3VyY2UsIHJlcXVlc3QpLmdldCgpKTsKLX0KLSNlbmRpZgotCi1DYWNoZWRSZXNvdXJj
ZUhhbmRsZTxDYWNoZWRDU1NTdHlsZVNoZWV0PiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVz
dENTU1N0eWxlU2hlZXQoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIHJl
dHVybiBkb3duY2FzdDxDYWNoZWRDU1NTdHlsZVNoZWV0PihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVk
UmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQsIHJlcXVlc3QpLmdldCgpKTsKLX0KLQotQ2FjaGVkUmVz
b3VyY2VIYW5kbGU8Q2FjaGVkQ1NTU3R5bGVTaGVldD4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJl
cXVlc3RVc2VyQ1NTU3R5bGVTaGVldChDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17
Ci0gICAgVVJMIHVybCA9IE1lbW9yeUNhY2hlOjpyZW1vdmVGcmFnbWVudElkZW50aWZpZXJJZk5l
ZWRlZChyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpKTsKLQotI2lmIEVOQUJMRShDQUNI
RV9QQVJUSVRJT05JTkcpCi0gICAgcmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCkuc2V0
RG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24oZG9jdW1lbnQoKS0+dG9wT3JpZ2luKCktPmRvbWFpbkZv
ckNhY2hlUGFydGl0aW9uKCkpOwotI2VuZGlmCi0KLSAgICBhdXRvJiBtZW1vcnlDYWNoZSA9IE1l
bW9yeUNhY2hlOjpzaW5nbGV0b24oKTsKLSAgICBpZiAocmVxdWVzdC5hbGxvd3NDYWNoaW5nKCkp
IHsKLSAgICAgICAgaWYgKENhY2hlZFJlc291cmNlKiBleGlzdGluZyA9IG1lbW9yeUNhY2hlLnJl
c291cmNlRm9yUmVxdWVzdChyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLCBzZXNzaW9uSUQoKSkp
IHsKLSAgICAgICAgICAgIGlmIChpczxDYWNoZWRDU1NTdHlsZVNoZWV0PigqZXhpc3RpbmcpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxDYWNoZWRDU1NTdHlsZVNoZWV0PihleGlz
dGluZyk7Ci0gICAgICAgICAgICBtZW1vcnlDYWNoZS5yZW1vdmUoKmV4aXN0aW5nKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmICh1cmwuc3RyaW5nKCkgIT0gcmVxdWVzdC5yZXNvdXJjZVJl
cXVlc3QoKS51cmwoKSkKLSAgICAgICAgcmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCku
c2V0VVJMKHVybCk7Ci0KLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRDU1NTdHlsZVNo
ZWV0PiB1c2VyU2hlZXQgPSBuZXcgQ2FjaGVkQ1NTU3R5bGVTaGVldChyZXF1ZXN0LnJlc291cmNl
UmVxdWVzdCgpLCByZXF1ZXN0LmNoYXJzZXQoKSwgc2Vzc2lvbklEKCkpOwotCi0gICAgaWYgKHJl
cXVlc3QuYWxsb3dzQ2FjaGluZygpKQotICAgICAgICBtZW1vcnlDYWNoZS5hZGQoKnVzZXJTaGVl
dCk7Ci0gICAgLy8gRklYTUU6IGxvYWRSZXNvdXJjZSBjYWxscyBzZXRPd25pbmdDYWNoZWRSZXNv
dXJjZUxvYWRlcigpIGlmIHRoZSByZXNvdXJjZSBjb3VsZG4ndCBiZSBhZGRlZCB0byBjYWNoZS4g
RG9lcyB0aGlzIGZ1bmN0aW9uIG5lZWQgdG8gY2FsbCBpdCwgdG9vPwotCi0gICAgdXNlclNoZWV0
LT5sb2FkKCp0aGlzLCBSZXNvdXJjZUxvYWRlck9wdGlvbnMoRG9Ob3RTZW5kQ2FsbGJhY2tzLCBT
bmlmZkNvbnRlbnQsIEJ1ZmZlckRhdGEsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIENsaWVudENy
ZWRlbnRpYWxQb2xpY3k6Ok1heUFza0NsaWVudEZvckNyZWRlbnRpYWxzLCBGZXRjaE9wdGlvbnM6
OkNyZWRlbnRpYWxzOjpJbmNsdWRlLCBTa2lwU2VjdXJpdHlDaGVjaywgRmV0Y2hPcHRpb25zOjpN
b2RlOjpOb0NvcnMsIERvTm90SW5jbHVkZUNlcnRpZmljYXRlSW5mbywgQ29udGVudFNlY3VyaXR5
UG9saWN5SW1wb3NpdGlvbjo6U2tpcFBvbGljeUNoZWNrLCBEZWZlcnNMb2FkaW5nUG9saWN5OjpB
bGxvd0RlZmVyc0xvYWRpbmcsIENhY2hpbmdQb2xpY3k6OkFsbG93Q2FjaGluZykpOwotICAgIAot
ICAgIHJldHVybiB1c2VyU2hlZXQ7Ci19Ci0KLUNhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNj
cmlwdD4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RTY3JpcHQoQ2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIHJldHVybiBkb3duY2FzdDxDYWNoZWRTY3JpcHQ+KHJl
cXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6U2NyaXB0LCByZXF1ZXN0KS5nZXQoKSk7Ci19
Ci0KLSNpZiBFTkFCTEUoWFNMVCkKLUNhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFhTTFN0eWxl
U2hlZXQ+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0WFNMU3R5bGVTaGVldChDYWNoZWRS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIGRvd25jYXN0PENhY2hlZFhT
TFN0eWxlU2hlZXQ+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVl
dCwgcmVxdWVzdCkuZ2V0KCkpOwotfQotI2VuZGlmCi0KLUNhY2hlZFJlc291cmNlSGFuZGxlPENh
Y2hlZFNWR0RvY3VtZW50PiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFNWR0RvY3VtZW50
KENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gZG93bmNhc3Q8
Q2FjaGVkU1ZHRG9jdW1lbnQ+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6U1ZHRG9j
dW1lbnRSZXNvdXJjZSwgcmVxdWVzdCkuZ2V0KCkpOwotfQotCi0jaWYgRU5BQkxFKExJTktfUFJF
RkVUQ0gpCi1DYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OnJlcXVlc3RMaW5rUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwg
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIEFTU0VSVChmcmFtZSgpKTsK
LSAgICBBU1NFUlQodHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6TGlua1ByZWZldGNoIHx8IHR5cGUg
PT0gQ2FjaGVkUmVzb3VyY2U6OkxpbmtTdWJyZXNvdXJjZSk7Ci0gICAgcmV0dXJuIHJlcXVlc3RS
ZXNvdXJjZSh0eXBlLCByZXF1ZXN0KTsKLX0KLSNlbmRpZgotCi1DYWNoZWRSZXNvdXJjZUhhbmRs
ZTxDYWNoZWRSYXdSZXNvdXJjZT4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RNZWRpYShD
YWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIGRvd25jYXN0PENh
Y2hlZFJhd1Jlc291cmNlPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6Ok1lZGlhUmVz
b3VyY2UsIHJlcXVlc3QpLmdldCgpKTsKLX0KLQotQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
UmF3UmVzb3VyY2U+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmF3UmVzb3VyY2UoQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIHJldHVybiBkb3duY2FzdDxDYWNo
ZWRSYXdSZXNvdXJjZT4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpSYXdSZXNvdXJj
ZSwgcmVxdWVzdCkuZ2V0KCkpOwotfQotCi1DYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdS
ZXNvdXJjZT4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RNYWluUmVzb3VyY2UoQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIHJldHVybiBkb3duY2FzdDxDYWNoZWRS
YXdSZXNvdXJjZT4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpNYWluUmVzb3VyY2Us
IHJlcXVlc3QpLmdldCgpKTsKLX0KLQotc3RhdGljIE1peGVkQ29udGVudENoZWNrZXI6OkNvbnRl
bnRUeXBlIGNvbnRlbnRUeXBlRnJvbVJlc291cmNlVHlwZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0
eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5p
by93ZWJhcHBzZWMtbWl4ZWQtY29udGVudC8jY2F0ZWdvcnktb3B0aW9uYWxseS1ibG9ja2FibGUK
LSAgICAvLyBFZGl0b3IncyBEcmFmdCwgMTEgRmVicnVhcnkgMjAxNgotICAgIC8vIDMuMS4gT3B0
aW9uYWxseS1ibG9ja2FibGUgQ29udGVudAotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdl
UmVzb3VyY2U6Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TWVkaWFSZXNvdXJjZToKLSAgICAg
ICAgICAgIHJldHVybiBNaXhlZENvbnRlbnRDaGVja2VyOjpDb250ZW50VHlwZTo6QWN0aXZlQ2Fu
V2FybjsKLQotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6Ci0gICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRS
ZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIE1peGVkQ29udGVudENoZWNrZXI6OkNvbnRlbnRUeXBl
OjpBY3RpdmU7Ci0KLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGNhc2UgQ2FjaGVkUmVzb3Vy
Y2U6OlNWR0ZvbnRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIE1peGVkQ29udGVudENoZWNrZXI6
OkNvbnRlbnRUeXBlOjpBY3RpdmU7Ci0jZW5kaWYKLQotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OlJhd1Jlc291cmNlOgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0RvY3VtZW50UmVzb3Vy
Y2U6Ci0gICAgICAgIHJldHVybiBNaXhlZENvbnRlbnRDaGVja2VyOjpDb250ZW50VHlwZTo6QWN0
aXZlOwotI2lmIEVOQUJMRShYU0xUKQotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxl
U2hlZXQ6Ci0gICAgICAgIHJldHVybiBNaXhlZENvbnRlbnRDaGVja2VyOjpDb250ZW50VHlwZTo6
QWN0aXZlOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKLSAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpMaW5rUHJlZmV0Y2g6Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlu
a1N1YnJlc291cmNlOgotICAgICAgICByZXR1cm4gTWl4ZWRDb250ZW50Q2hlY2tlcjo6Q29udGVu
dFR5cGU6OkFjdGl2ZTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIGNh
c2UgQ2FjaGVkUmVzb3VyY2U6OlRleHRUcmFja1Jlc291cmNlOgotICAgICAgICByZXR1cm4gTWl4
ZWRDb250ZW50Q2hlY2tlcjo6Q29udGVudFR5cGU6OkFjdGl2ZTsKLSNlbmRpZgotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gTWl4ZWRD
b250ZW50Q2hlY2tlcjo6Q29udGVudFR5cGU6OkFjdGl2ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OmNoZWNrSW5zZWN1cmVDb250ZW50KENhY2hlZFJlc291cmNlOjpU
eXBlIHR5cGUsIGNvbnN0IFVSTCYgdXJsKSBjb25zdAotewotICAgIHN3aXRjaCAodHlwZSkgewot
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKLSNpZiBFTkFCTEUoWFNMVCkKLSAgICBj
YXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgotI2VuZGlmCi0gICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6U1ZHRG9jdW1lbnRSZXNvdXJjZToKLSAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpDU1NTdHlsZVNoZWV0OgotICAgICAgICAvLyBUaGVzZSByZXNvdXJjZSBjYW4gaW5qZWN0IHNj
cmlwdCBpbnRvIHRoZSBjdXJyZW50IGRvY3VtZW50IChTY3JpcHQsCi0gICAgICAgIC8vIFhTTCkg
b3IgZXhmaWx0cmF0ZSB0aGUgY29udGVudCBvZiB0aGUgY3VycmVudCBkb2N1bWVudCAoQ1NTKS4K
LSAgICAgICAgaWYgKEZyYW1lKiBmID0gZnJhbWUoKSkgewotICAgICAgICAgICAgaWYgKCFmLT5s
b2FkZXIoKS5taXhlZENvbnRlbnRDaGVja2VyKCkuY2FuUnVuSW5zZWN1cmVDb250ZW50KG1fZG9j
dW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIHVybCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgRnJhbWUmIHRvcCA9IGYtPnRyZWUoKS50b3AoKTsKLSAgICAgICAg
ICAgIGlmICgmdG9wICE9IGYgJiYgIXRvcC5sb2FkZXIoKS5taXhlZENvbnRlbnRDaGVja2VyKCku
Y2FuUnVuSW5zZWN1cmVDb250ZW50KHRvcC5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCB1
cmwpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBi
cmVhazsKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6
VGV4dFRyYWNrUmVzb3VyY2U6Ci0jZW5kaWYKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpNZWRp
YVJlc291cmNlOgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOgotICAgIGNh
c2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6Ci0jaWYgRU5BQkxFKFNWR19GT05UUykK
LSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdGb250UmVzb3VyY2U6Ci0jZW5kaWYKLSAgICBj
YXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6IHsKLSAgICAgICAgLy8gVGhlc2UgcmVz
b3VyY2VzIGNhbiBjb3JydXB0IG9ubHkgdGhlIGZyYW1lJ3MgcGl4ZWxzLgotICAgICAgICBpZiAo
RnJhbWUqIGYgPSBmcmFtZSgpKSB7Ci0gICAgICAgICAgICBGcmFtZSYgdG9wRnJhbWUgPSBmLT50
cmVlKCkudG9wKCk7Ci0gICAgICAgICAgICBpZiAoIXRvcEZyYW1lLmxvYWRlcigpLm1peGVkQ29u
dGVudENoZWNrZXIoKS5jYW5EaXNwbGF5SW5zZWN1cmVDb250ZW50KHRvcEZyYW1lLmRvY3VtZW50
KCktPnNlY3VyaXR5T3JpZ2luKCksIGNvbnRlbnRUeXBlRnJvbVJlc291cmNlVHlwZSh0eXBlKSwg
dXJsKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZToKLSNp
ZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rUHJl
ZmV0Y2g6Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1N1YnJlc291cmNlOgotICAgICAg
ICAvLyBQcmVmZXRjaCBjYW5ub3QgYWZmZWN0IHRoZSBjdXJyZW50IGRvY3VtZW50LgotI2VuZGlm
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGlu
bGluZSBib29sIGlzU2FtZU9yaWdpbkRhdGFVUkwoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFJlc291
cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucywgYm9vbCBkaWRSZWNlaXZlUmVkaXJlY3RSZXNwb25z
ZSkKLXsKLSAgICByZXR1cm4gIWRpZFJlY2VpdmVSZWRpcmVjdFJlc3BvbnNlICYmIHVybC5wcm90
b2NvbElzRGF0YSgpICYmIG9wdGlvbnMuc2FtZU9yaWdpbkRhdGFVUkxGbGFnID09IFNhbWVPcmln
aW5EYXRhVVJMRmxhZzo6U2V0OwotfQotCi1ib29sIENhY2hlZFJlc291cmNlTG9hZGVyOjpjYW5S
ZXF1ZXN0KENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBS
ZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMsIGJvb2wgZm9yUHJlbG9hZCwgYm9vbCBkaWRS
ZWNlaXZlUmVkaXJlY3RSZXNwb25zZSkKLXsKLSAgICBpZiAoZG9jdW1lbnQoKSAmJiAhZG9jdW1l
bnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuRGlzcGxheSh1cmwpKSB7Ci0gICAgICAgIGlmICgh
Zm9yUHJlbG9hZCkKLSAgICAgICAgICAgIEZyYW1lTG9hZGVyOjpyZXBvcnRMb2NhbExvYWRGYWls
ZWQoZnJhbWUoKSwgdXJsLnN0cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpKTsKLSAgICAg
ICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmVz
b3VyY2UgVVJMIHdhcyBub3QgYWxsb3dlZCBieSBTZWN1cml0eU9yaWdpbjo6Y2FuRGlzcGxheSIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCBza2lwQ29udGVudFNl
Y3VyaXR5UG9saWN5Q2hlY2sgPSBvcHRpb25zLmNvbnRlbnRTZWN1cml0eVBvbGljeUltcG9zaXRp
b24gPT0gQ29udGVudFNlY3VyaXR5UG9saWN5SW1wb3NpdGlvbjo6U2tpcFBvbGljeUNoZWNrOwot
ICAgIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkIHJlZGly
ZWN0UmVzcG9uc2VSZWNlaXZlZCA9IGRpZFJlY2VpdmVSZWRpcmVjdFJlc3BvbnNlID8gQ29udGVu
dFNlY3VyaXR5UG9saWN5OjpSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQ6OlllcyA6IENvbnRlbnRT
ZWN1cml0eVBvbGljeTo6UmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkOjpObzsKLQotICAgIC8vIFNv
bWUgdHlwZXMgb2YgcmVzb3VyY2VzIGNhbiBiZSBsb2FkZWQgb25seSBmcm9tIHRoZSBzYW1lIG9y
aWdpbi4gT3RoZXIgdHlwZXMgb2YgcmVzb3VyY2VzLCBsaWtlIEltYWdlcywgU2NyaXB0cywgYW5k
IENTUywgY2FuIGJlIGxvYWRlZCBmcm9tIGFueSBVUkwuCi0gICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCByZW1vdmUgdGhhdCBjaGVjayBhbmQgaGFuZGxlIGl0IGJ5IHNldHRpbmcgdGhlIGNvcnJlY3Qg
UmVzb3VyY2VMb2FkZXJPcHRpb25zOjptb2RlLgotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNh
c2UgQ2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZToKLSAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpJbWFnZVJlc291cmNlOgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6
Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OgotI2lmIEVOQUJMRShTVkdfRk9OVFMp
Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U1ZHRm9udFJlc291cmNlOgotI2VuZGlmCi0gICAg
Y2FzZSBDYWNoZWRSZXNvdXJjZTo6TWVkaWFSZXNvdXJjZToKLSAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpGb250UmVzb3VyY2U6Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2U6
Ci0jaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCi0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlu
a1ByZWZldGNoOgotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtTdWJyZXNvdXJjZToKLSNl
bmRpZgotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpU
ZXh0VHJhY2tSZXNvdXJjZToKLSNlbmRpZgotICAgICAgICBpZiAob3B0aW9ucy5tb2RlID09IEZl
dGNoT3B0aW9uczo6TW9kZTo6U2FtZU9yaWdpbiAmJiAhaXNTYW1lT3JpZ2luRGF0YVVSTCh1cmws
IG9wdGlvbnMsIGRpZFJlY2VpdmVSZWRpcmVjdFJlc3BvbnNlKSAmJiFtX2RvY3VtZW50LT5zZWN1
cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCkpIHsKLSAgICAgICAgICAgIHByaW50QWNjZXNz
RGVuaWVkTWVzc2FnZSh1cmwpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0RvY3VtZW50UmVz
b3VyY2U6Ci0jaWYgRU5BQkxFKFhTTFQpCi0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5
bGVTaGVldDoKLSAgICAgICAgaWYgKCFtX2RvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5S
ZXF1ZXN0KHVybCkpIHsKLSAgICAgICAgICAgIHByaW50QWNjZXNzRGVuaWVkTWVzc2FnZSh1cmwp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0jaWYgRU5BQkxFKFhTTFQpCi0g
ICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldDoKLSAgICAgICAgaWYgKCFtX2Rv
Y3VtZW50LT5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dTY3JpcHRGcm9tU291cmNlKHVy
bCwgc2tpcENvbnRlbnRTZWN1cml0eVBvbGljeUNoZWNrLCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2
ZWQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBicmVhazsKLSNlbmRpZgot
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKLSAgICAgICAgaWYgKCFtX2RvY3VtZW50
LT5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dTY3JpcHRGcm9tU291cmNlKHVybCwgc2tp
cENvbnRlbnRTZWN1cml0eVBvbGljeUNoZWNrLCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoZnJhbWUoKSAmJiAhZnJhbWUo
KS0+c2V0dGluZ3MoKS5pc1NjcmlwdEVuYWJsZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVl
dDoKLSAgICAgICAgaWYgKCFtX2RvY3VtZW50LT5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxs
b3dTdHlsZUZyb21Tb3VyY2UodXJsLCBza2lwQ29udGVudFNlY3VyaXR5UG9saWN5Q2hlY2ssIHJl
ZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0RvY3VtZW50UmVzb3VyY2U6
Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKLSAgICAgICAgaWYgKCFt
X2RvY3VtZW50LT5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dJbWFnZUZyb21Tb3VyY2Uo
dXJsLCBza2lwQ29udGVudFNlY3VyaXR5UG9saWN5Q2hlY2ssIHJlZGlyZWN0UmVzcG9uc2VSZWNl
aXZlZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVO
QUJMRShTVkdfRk9OVFMpCi0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U1ZHRm9udFJlc291cmNl
OgotI2VuZGlmCi0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlOiB7Ci0gICAg
ICAgIGlmICghbV9kb2N1bWVudC0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93Rm9udEZy
b21Tb3VyY2UodXJsLCBza2lwQ29udGVudFNlY3VyaXR5UG9saWN5Q2hlY2ssIHJlZGlyZWN0UmVz
cG9uc2VSZWNlaXZlZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpNYWluUmVzb3VyY2U6Ci0gICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2U6Ci0jaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gp
Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1ByZWZldGNoOgotICAgIGNhc2UgQ2FjaGVk
UmVzb3VyY2U6OkxpbmtTdWJyZXNvdXJjZToKLSNlbmRpZgotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENhY2hlZFJlc291cmNlOjpNZWRpYVJlc291cmNlOgotI2lmIEVOQUJMRShWSURFT19UUkFD
SykKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpUZXh0VHJhY2tSZXNvdXJjZToKLSNlbmRpZgot
ICAgICAgICBpZiAoIW1fZG9jdW1lbnQtPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd01l
ZGlhRnJvbVNvdXJjZSh1cmwsIHNraXBDb250ZW50U2VjdXJpdHlQb2xpY3lDaGVjaywgcmVkaXJl
Y3RSZXNwb25zZVJlY2VpdmVkKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgLy8gU1ZHIEltYWdlcyBoYXZlIHVuaXF1ZSBzZWN1cml0eSBy
dWxlcyB0aGF0IHByZXZlbnQgYWxsIHN1YnJlc291cmNlIHJlcXVlc3RzIGV4Y2VwdCBmb3IgZGF0
YSB1cmxzLgotICAgIGlmICh0eXBlICE9IENhY2hlZFJlc291cmNlOjpNYWluUmVzb3VyY2UgJiYg
ZnJhbWUoKSAmJiBmcmFtZSgpLT5wYWdlKCkpIHsKLSAgICAgICAgaWYgKGZyYW1lKCktPnBhZ2Uo
KS0+Y2hyb21lKCkuY2xpZW50KCkuaXNTVkdJbWFnZUNocm9tZUNsaWVudCgpICYmICF1cmwucHJv
dG9jb2xJc0RhdGEoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
ZiAoIWNhblJlcXVlc3RJbkNvbnRlbnREaXNwb3NpdGlvbkF0dGFjaG1lbnRTYW5kYm94KHR5cGUs
IHVybCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIExhc3Qgb2YgYWxsLCBjaGVj
ayBmb3IgaW5zZWN1cmUgY29udGVudC4gV2UgZG8gdGhpcyBsYXN0IHNvIHRoYXQgd2hlbgotICAg
IC8vIGZvbGtzIGJsb2NrIGluc2VjdXJlIGNvbnRlbnQgd2l0aCBhIENTUCBwb2xpY3ksIHRoZXkg
ZG9uJ3QgZ2V0IGEgd2FybmluZy4KLSAgICAvLyBUaGV5J2xsIHN0aWxsIGdldCBhIHdhcm5pbmcg
aW4gdGhlIGNvbnNvbGUgYWJvdXQgQ1NQIGJsb2NraW5nIHRoZSBsb2FkLgotCi0gICAgLy8gRklY
TUU6IFNob3VsZCB3ZSBjb25zaWRlciBmb3JQcmVsb2FkIGhlcmU/Ci0gICAgaWYgKCFjaGVja0lu
c2VjdXJlQ29udGVudCh0eXBlLCB1cmwpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2FuUmVxdWVzdElu
Q29udGVudERpc3Bvc2l0aW9uQXR0YWNobWVudFNhbmRib3goQ2FjaGVkUmVzb3VyY2U6OlR5cGUg
dHlwZSwgY29uc3QgVVJMJiB1cmwpIGNvbnN0Ci17Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50Owot
ICAgIAotICAgIC8vIEZJWE1FOiBEbyB3ZSB3YW50IHRvIGV4cGFuZCB0aGlzIHRvIGFsbCByZXNv
dXJjZSB0eXBlcyB0aGF0IHRoZSBtaXhlZCBjb250ZW50IGNoZWNrZXIgd291bGQgY29uc2lkZXIg
YWN0aXZlIGNvbnRlbnQ/Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBDYWNoZWRSZXNv
dXJjZTo6TWFpblJlc291cmNlOgotICAgICAgICBpZiAoYXV0byBvd25lckVsZW1lbnQgPSBmcmFt
ZSgpID8gZnJhbWUoKS0+b3duZXJFbGVtZW50KCkgOiBudWxscHRyKSB7Ci0gICAgICAgICAgICBk
b2N1bWVudCA9ICZvd25lckVsZW1lbnQtPmRvY3VtZW50KCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpDU1NTdHlsZVNoZWV0OgotICAgICAgICBkb2N1bWVudCA9IG1fZG9jdW1lbnQ7Ci0gICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IGlmICghZG9jdW1lbnQtPnNob3VsZEVuZm9yY2VDb250ZW50RGlzcG9zaXRpb25BdHRhY2htZW50
U2FuZGJveCgpIHx8IGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgU3RyaW5nIG1lc3NhZ2UgPSAiVW5zYWZlIGF0
dGVtcHQgdG8gbG9hZCBVUkwgIiArIHVybC5zdHJpbmdDZW50ZXJFbGxpcHNpemVkVG9MZW5ndGgo
KSArICIgZnJvbSBkb2N1bWVudCB3aXRoIENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQg
YXQgVVJMICIgKyBkb2N1bWVudC0+dXJsKCkuc3RyaW5nQ2VudGVyRWxsaXBzaXplZFRvTGVuZ3Ro
KCkgKyAiLiI7Ci0gICAgZG9jdW1lbnQtPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6
OlNlY3VyaXR5LCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBtZXNzYWdlKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnNob3VsZENvbnRpbnVlQWZ0ZXJO
b3RpZnlpbmdMb2FkZWRGcm9tTWVtb3J5Q2FjaGUoY29uc3QgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCi17Ci0gICAgaWYgKCFyZXNvdXJj
ZSB8fCAhZnJhbWUoKSB8fCByZXNvdXJjZS0+c3RhdHVzKCkgIT0gQ2FjaGVkUmVzb3VyY2U6OkNh
Y2hlZCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBSZXNvdXJjZVJlcXVlc3QgbmV3UmVx
dWVzdCA9IFJlc291cmNlUmVxdWVzdChyZXNvdXJjZS0+dXJsKCkpOwotICAgIGlmIChyZXF1ZXN0
LnJlc291cmNlUmVxdWVzdCgpLmhpZGRlbkZyb21JbnNwZWN0b3IoKSkKLSAgICAgICAgbmV3UmVx
dWVzdC5zZXRIaWRkZW5Gcm9tSW5zcGVjdG9yKHRydWUpOwotICAgIGZyYW1lKCktPmxvYWRlcigp
LmxvYWRlZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKHJlc291cmNlLCBuZXdSZXF1ZXN0KTsKLQot
ICAgIC8vIEZJWE1FIDxodHRwOi8vd2Via2l0Lm9yZy9iLzExMzI1MT46IElmIHRoZSBkZWxlZ2F0
ZSBtb2RpZmllcyB0aGUgcmVxdWVzdCdzCi0gICAgLy8gVVJMLCBpdCBpcyBubyBsb25nZXIgYXBw
cm9wcmlhdGUgdG8gdXNlIHRoaXMgQ2FjaGVkUmVzb3VyY2UuCi0gICAgcmV0dXJuICFuZXdSZXF1
ZXN0LmlzTnVsbCgpOwotfQotCi1ib29sIENhY2hlZFJlc291cmNlTG9hZGVyOjp1cGRhdGVDYWNo
ZWRSZXNvdXJjZVdpdGhDdXJyZW50UmVxdWVzdChDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiYgcmVzb3VyY2VIYW5kbGUp
Ci17Ci0gICAgQVNTRVJUKHJlc291cmNlSGFuZGxlKTsKLQotICAgIENhY2hlZFJlc291cmNlJiBy
ZXNvdXJjZSA9ICpyZXNvdXJjZUhhbmRsZTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJv
Z3Jlc3NpdmVseSBleHRlbmQgdGhpcyB0byBvdGhlciByZXVzYWJsZSByZXNvdXJjZXMKLSAgICBp
ZiAocmVzb3VyY2UudHlwZSgpICE9IENhY2hlZFJlc291cmNlOjpUeXBlOjpJbWFnZVJlc291cmNl
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIHNob3VsZFVwZGF0ZSA9IHJlc291
cmNlLm9wdGlvbnMoKS5tb2RlICE9IHJlcXVlc3Qub3B0aW9ucygpLm1vZGUgfHwgcmVxdWVzdC5y
ZXNvdXJjZVJlcXVlc3QoKS5odHRwT3JpZ2luKCkgIT0gcmVzb3VyY2UucmVzb3VyY2VSZXF1ZXN0
KCkuaHR0cE9yaWdpbigpOwotCi0gICAgaWYgKCFzaG91bGRVcGRhdGUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiBGb3IgYmVpbmcgbG9hZGVkIHJlcXVlc3RzLCB3ZSBj
dXJyZW50bHkgZG8gbm90IHVzZSB0aGUgc2FtZSByZXNvdXJjZSwgYXMgdGhpcyBtYXkgaW5kdWNl
IGVycm9ycyBpbiB0aGUgcmVzb3VyY2UgcmVzcG9uc2UgdGFpbnRpbmcuCi0gICAgLy8gV2Ugc2hv
dWxkIGZpbmQgYSB3YXkgdG8gaW1wcm92ZSB0aGlzLgotICAgIGlmIChyZXNvdXJjZS5zdGF0dXMo
KSAhPSBDYWNoZWRSZXNvdXJjZTo6Q2FjaGVkKSB7Ci0gICAgICAgIHJlcXVlc3Quc2V0Q2FjaGlu
Z1BvbGljeShDYWNoaW5nUG9saWN5OjpEaXNhbGxvd0NhY2hpbmcpOwotICAgICAgICByZXNvdXJj
ZUhhbmRsZSA9IGxvYWRSZXNvdXJjZShyZXNvdXJjZS50eXBlKCksIHJlcXVlc3QpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXNvdXJjZUhhbmRsZSA9IGNyZWF0ZVJlc291
cmNlKHJlc291cmNlLnR5cGUoKSwgcmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCksIHJl
cXVlc3QuY2hhcnNldCgpLCBzZXNzaW9uSUQoKSk7Ci0gICAgcmVzb3VyY2VIYW5kbGUtPmxvYWRG
cm9tKHJlc291cmNlLCByZXF1ZXN0Lm9wdGlvbnMoKSwgKnRoaXMpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbG9nTWVtb3J5Q2FjaGVSZXNvdXJjZVJlcXVlc3Qo
RnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIHZh
bHVlID0gU3RyaW5nKCkpCi17Ci0gICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPnBhZ2UoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmICh2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgZnJhbWUtPnBh
Z2UoKS0+ZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQoKS5sb2dEaWFnbm9zdGljTWVzc2FnZShEaWFn
bm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlUmVxdWVzdEtleSgpLCBkZXNjcmlwdGlvbiwgU2hv
dWxkU2FtcGxlOjpZZXMpOwotICAgIGVsc2UKLSAgICAgICAgZnJhbWUtPnBhZ2UoKS0+ZGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQoKS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9z
dGljTG9nZ2luZ0tleXM6OnJlc291cmNlUmVxdWVzdEtleSgpLCBkZXNjcmlwdGlvbiwgdmFsdWUs
IFNob3VsZFNhbXBsZTo6WWVzKTsKLX0KLQotQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVz
b3VyY2U+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3Vy
Y2U6OlR5cGUgdHlwZSwgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIGlm
IChEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpKQotICAgICAgICBkb2N1bWVu
dC0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPnVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RJZk5lZWRl
ZChyZXF1ZXN0Lm11dGFibGVSZXNvdXJjZVJlcXVlc3QoKSwgQ29udGVudFNlY3VyaXR5UG9saWN5
OjpJbnNlY3VyZVJlcXVlc3RUeXBlOjpMb2FkKTsKLSAgICAKLSAgICBVUkwgdXJsID0gcmVxdWVz
dC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKTsKLSAgICAKLSAgICBMT0coUmVzb3VyY2VMb2FkaW5n
LCAiQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZSAnJXMnLCBjaGFyc2V0ICcl
cycsIHByaW9yaXR5PSVkLCBmb3JQcmVsb2FkPSV1IiwgdXJsLnN0cmluZ0NlbnRlckVsbGlwc2l6
ZWRUb0xlbmd0aCgpLmxhdGluMSgpLmRhdGEoKSwgcmVxdWVzdC5jaGFyc2V0KCkubGF0aW4xKCku
ZGF0YSgpLCByZXF1ZXN0LnByaW9yaXR5KCkgPyBzdGF0aWNfY2FzdDxpbnQ+KHJlcXVlc3QucHJp
b3JpdHkoKS52YWx1ZSgpKSA6IC0xLCByZXF1ZXN0LmZvclByZWxvYWQoKSk7Ci0gICAgCi0gICAg
Ly8gSWYgb25seSB0aGUgZnJhZ21lbnQgaWRlbnRpZmllcnMgZGlmZmVyLCBpdCBpcyB0aGUgc2Ft
ZSByZXNvdXJjZS4KLSAgICB1cmwgPSBNZW1vcnlDYWNoZTo6cmVtb3ZlRnJhZ21lbnRJZGVudGlm
aWVySWZOZWVkZWQodXJsKTsKLQotICAgIGlmICghdXJsLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoIWNhblJlcXVlc3QodHlwZSwgdXJsLCByZXF1ZXN0Lm9w
dGlvbnMoKSwgcmVxdWVzdC5mb3JQcmVsb2FkKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgaWYgKGZyYW1lKCkgJiYgZnJh
bWUoKS0+bWFpbkZyYW1lKCkucGFnZSgpICYmIG1fZG9jdW1lbnRMb2FkZXIpIHsKLSAgICAgICAg
YXV0byYgcmVzb3VyY2VSZXF1ZXN0ID0gcmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCk7
Ci0gICAgICAgIGF1dG8gYmxvY2tlZFN0YXR1cyA9IGZyYW1lKCktPm1haW5GcmFtZSgpLnBhZ2Uo
KS0+dXNlckNvbnRlbnRQcm92aWRlcigpLnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JM
b2FkKHJlc291cmNlUmVxdWVzdC51cmwoKSwgdG9SZXNvdXJjZVR5cGUodHlwZSksICptX2RvY3Vt
ZW50TG9hZGVyKTsKLSAgICAgICAgYXBwbHlCbG9ja2VkU3RhdHVzVG9SZXF1ZXN0KGJsb2NrZWRT
dGF0dXMsIHJlc291cmNlUmVxdWVzdCk7Ci0gICAgICAgIGlmIChibG9ja2VkU3RhdHVzLmJsb2Nr
ZWRMb2FkKSB7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6VHlwZTo6
TWFpblJlc291cmNlKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZXNvdXJjZSA9IGNyZWF0ZVJl
c291cmNlKHR5cGUsIHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LmNo
YXJzZXQoKSwgc2Vzc2lvbklEKCkpOwotICAgICAgICAgICAgICAgIEFTU0VSVChyZXNvdXJjZSk7
Ci0gICAgICAgICAgICAgICAgcmVzb3VyY2UtPmVycm9yKENhY2hlZFJlc291cmNlOjpTdGF0dXM6
OkxvYWRFcnJvcik7Ci0gICAgICAgICAgICAgICAgcmVzb3VyY2UtPnNldFJlc291cmNlRXJyb3Io
UmVzb3VyY2VFcnJvcihDb250ZW50RXh0ZW5zaW9uczo6V2ViS2l0Q29udGVudEJsb2NrZXJEb21h
aW4sIDAsIHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCksIFdFQl9VSV9TVFJJTkcoIlRo
ZSBVUkwgd2FzIGJsb2NrZWQgYnkgYSBjb250ZW50IGJsb2NrZXIiLCAiV2ViS2l0RXJyb3JCbG9j
a2VkQnlDb250ZW50QmxvY2tlciBkZXNjcmlwdGlvbiIpKSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHJlc291cmNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGJsb2NrZWRTdGF0dXMubWFkZUhUVFBTCi0gICAgICAg
ICAgICAmJiB0eXBlID09IENhY2hlZFJlc291cmNlOjpUeXBlOjpNYWluUmVzb3VyY2UKLSAgICAg
ICAgICAgICYmIG1fZG9jdW1lbnRMb2FkZXItPmlzTG9hZGluZ01haW5SZXNvdXJjZSgpKSB7Ci0g
ICAgICAgICAgICAvLyBUaGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGUgY29ycmVjdCAnbmV3JyBVUkwg
c2hvd3MgaW4gdGhlIGxvY2F0aW9uIGJhci4KLSAgICAgICAgICAgIG1fZG9jdW1lbnRMb2FkZXIt
PmZyYW1lTG9hZGVyKCktPmNsaWVudCgpLmRpc3BhdGNoRGlkQ2hhbmdlUHJvdmlzaW9uYWxVUkwo
KTsKLSAgICAgICAgfQotICAgICAgICB1cmwgPSByZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVy
bCgpOyAvLyBUaGUgY29udGVudCBleHRlbnNpb24gY291bGQgaGF2ZSBjaGFuZ2VkIGl0IGZyb20g
aHR0cCB0byBodHRwcy4KLSAgICAgICAgdXJsID0gTWVtb3J5Q2FjaGU6OnJlbW92ZUZyYWdtZW50
SWRlbnRpZmllcklmTmVlZGVkKHVybCk7IC8vIE1pZ2h0IG5lZWQgdG8gcmVtb3ZlIGZyYWdtZW50
IGlkZW50aWZpZXIgYWdhaW4uCi0gICAgfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoV0VCX1RJTUlO
RykKLSAgICBMb2FkVGltaW5nIGxvYWRUaW1pbmc7Ci0gICAgbG9hZFRpbWluZy5tYXJrU3RhcnRU
aW1lQW5kRmV0Y2hTdGFydCgpOwotI2VuZGlmCi0KLSAgICBhdXRvJiBtZW1vcnlDYWNoZSA9IE1l
bW9yeUNhY2hlOjpzaW5nbGV0b24oKTsKLSAgICBpZiAocmVxdWVzdC5hbGxvd3NDYWNoaW5nKCkg
JiYgbWVtb3J5Q2FjaGUuZGlzYWJsZWQoKSkgewotICAgICAgICBEb2N1bWVudFJlc291cmNlTWFw
OjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRSZXNvdXJjZXMuZmluZCh1cmwuc3RyaW5nKCkpOwot
ICAgICAgICBpZiAoaXQgIT0gbV9kb2N1bWVudFJlc291cmNlcy5lbmQoKSkgewotICAgICAgICAg
ICAgaXQtPnZhbHVlLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcihudWxscHRyKTsKLSAg
ICAgICAgICAgIG1fZG9jdW1lbnRSZXNvdXJjZXMucmVtb3ZlKGl0KTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8vIFNlZSBpZiB3ZSBjYW4gdXNlIGFuIGV4aXN0aW5nIHJlc291cmNlIGZyb20g
dGhlIGNhY2hlLgotICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiByZXNv
dXJjZTsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQotICAgIGlmIChkb2N1bWVudCgp
KQotICAgICAgICByZXF1ZXN0Lm11dGFibGVSZXNvdXJjZVJlcXVlc3QoKS5zZXREb21haW5Gb3JD
YWNoZVBhcnRpdGlvbihkb2N1bWVudCgpLT50b3BPcmlnaW4oKS0+ZG9tYWluRm9yQ2FjaGVQYXJ0
aXRpb24oKSk7Ci0jZW5kaWYKLQotICAgIGlmIChyZXF1ZXN0LmFsbG93c0NhY2hpbmcoKSkKLSAg
ICAgICAgcmVzb3VyY2UgPSBtZW1vcnlDYWNoZS5yZXNvdXJjZUZvclJlcXVlc3QocmVxdWVzdC5y
ZXNvdXJjZVJlcXVlc3QoKSwgc2Vzc2lvbklEKCkpOwotCi0gICAgbG9nTWVtb3J5Q2FjaGVSZXNv
dXJjZVJlcXVlc3QoZnJhbWUoKSwgcmVzb3VyY2UgPyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6Omlu
TWVtb3J5Q2FjaGVLZXkoKSA6IERpYWdub3N0aWNMb2dnaW5nS2V5czo6bm90SW5NZW1vcnlDYWNo
ZUtleSgpKTsKLQotICAgIGNvbnN0IFJldmFsaWRhdGlvblBvbGljeSBwb2xpY3kgPSBkZXRlcm1p
bmVSZXZhbGlkYXRpb25Qb2xpY3kodHlwZSwgcmVxdWVzdCwgcmVzb3VyY2UuZ2V0KCkpOwotICAg
IHN3aXRjaCAocG9saWN5KSB7Ci0gICAgY2FzZSBSZWxvYWQ6Ci0gICAgICAgIG1lbW9yeUNhY2hl
LnJlbW92ZSgqcmVzb3VyY2UpOwotICAgICAgICBGQUxMVEhST1VHSDsKLSAgICBjYXNlIExvYWQ6
Ci0gICAgICAgIGlmIChyZXNvdXJjZSkKLSAgICAgICAgICAgIGxvZ01lbW9yeUNhY2hlUmVzb3Vy
Y2VSZXF1ZXN0KGZyYW1lKCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6aW5NZW1vcnlDYWNoZUtl
eSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnVudXNlZEtleSgpKTsKLSAgICAgICAgcmVzb3Vy
Y2UgPSBsb2FkUmVzb3VyY2UodHlwZSwgcmVxdWVzdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgUmV2YWxpZGF0ZToKLSAgICAgICAgaWYgKHJlc291cmNlKQotICAgICAgICAgICAgbG9nTWVt
b3J5Q2FjaGVSZXNvdXJjZVJlcXVlc3QoZnJhbWUoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpp
bk1lbW9yeUNhY2hlS2V5KCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmV2YWxpZGF0aW5nS2V5
KCkpOwotICAgICAgICByZXNvdXJjZSA9IHJldmFsaWRhdGVSZXNvdXJjZShyZXF1ZXN0LCByZXNv
dXJjZS5nZXQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVXNlOgotICAgICAgICBpZiAo
IXVwZGF0ZUNhY2hlZFJlc291cmNlV2l0aEN1cnJlbnRSZXF1ZXN0KHJlcXVlc3QsIHJlc291cmNl
KSkgewotICAgICAgICAgICAgaWYgKCFzaG91bGRDb250aW51ZUFmdGVyTm90aWZ5aW5nTG9hZGVk
RnJvbU1lbW9yeUNhY2hlKHJlcXVlc3QsIHJlc291cmNlLmdldCgpKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGxvZ01lbW9yeUNhY2hlUmVzb3VyY2VSZXF1
ZXN0KGZyYW1lKCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6aW5NZW1vcnlDYWNoZUtleSgpLCBE
aWFnbm9zdGljTG9nZ2luZ0tleXM6OnVzZWRLZXkoKSk7Ci0gICAgICAgICAgICBtZW1vcnlDYWNo
ZS5yZXNvdXJjZUFjY2Vzc2VkKCpyZXNvdXJjZSk7Ci0jaWYgRU5BQkxFKFdFQl9USU1JTkcpCi0g
ICAgICAgICAgICBpZiAoZG9jdW1lbnQoKSAmJiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLnJlc291cmNlVGltaW5nRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gRklYTUUgKDE2MTE3MCk6IFRoZSBuZXR3b3JrTG9hZFRpbWluZyBzaG91bGRuJ3QgYmUgc3Rv
cmVkIG9uIHRoZSBSZXNvdXJjZVJlc3BvbnNlLgotICAgICAgICAgICAgICAgIHJlc291cmNlLT5y
ZXNwb25zZSgpLm5ldHdvcmtMb2FkVGltaW5nKCkucmVzZXQoKTsKLSAgICAgICAgICAgICAgICBs
b2FkVGltaW5nLnNldFJlc3BvbnNlRW5kKG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsK
LSAgICAgICAgICAgICAgICBtX3Jlc291cmNlVGltaW5nSW5mby5zdG9yZVJlc291cmNlVGltaW5n
SW5pdGlhdG9ySW5mb3JtYXRpb24ocmVzb3VyY2UsIHJlcXVlc3QsIGZyYW1lKCkpOwotICAgICAg
ICAgICAgICAgIG1fcmVzb3VyY2VUaW1pbmdJbmZvLmFkZFJlc291cmNlVGltaW5nKHJlc291cmNl
LmdldCgpLCAqZG9jdW1lbnQoKSwgbG9hZFRpbWluZyk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoIXJlc291cmNlKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghcmVxdWVzdC5mb3JQcmVsb2FkKCkg
fHwgcG9saWN5ICE9IFVzZSkKLSAgICAgICAgcmVzb3VyY2UtPnNldExvYWRQcmlvcml0eShyZXF1
ZXN0LnByaW9yaXR5KCkpOwotCi0gICAgaWYgKCFyZXF1ZXN0LmZvclByZWxvYWQoKSAmJiByZXNv
dXJjZS0+bG9hZGVyKCkgJiYgcmVzb3VyY2UtPnJlc291cmNlUmVxdWVzdCgpLmlnbm9yZUZvclJl
cXVlc3RDb3VudCgpKSB7Ci0gICAgICAgIHJlc291cmNlLT5yZXNvdXJjZVJlcXVlc3QoKS5zZXRJ
Z25vcmVGb3JSZXF1ZXN0Q291bnQoZmFsc2UpOwotICAgICAgICBpbmNyZW1lbnRSZXF1ZXN0Q291
bnQoKnJlc291cmNlKTsKLSAgICB9Ci0KLSAgICBpZiAoKHBvbGljeSAhPSBVc2UgfHwgcmVzb3Vy
Y2UtPnN0aWxsTmVlZHNMb2FkKCkpICYmIENhY2hlZFJlc291cmNlUmVxdWVzdDo6Tm9EZWZlciA9
PSByZXF1ZXN0LmRlZmVyKCkpIHsKLSAgICAgICAgcmVzb3VyY2UtPmxvYWQoKnRoaXMsIHJlcXVl
c3Qub3B0aW9ucygpKTsKLQotICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGltbWVkaWF0ZSBs
b2FkcywgYnV0IHdlIGRvIHN1cHBvcnQgaW1tZWRpYXRlIGZhaWx1cmUuCi0gICAgICAgIGlmIChy
ZXNvdXJjZS0+ZXJyb3JPY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICBpZiAocmVzb3VyY2UtPmFs
bG93c0NhY2hpbmcoKSAmJiByZXNvdXJjZS0+aW5DYWNoZSgpKQotICAgICAgICAgICAgICAgIG1l
bW9yeUNhY2hlLnJlbW92ZSgqcmVzb3VyY2UpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZG9jdW1lbnQoKSAmJiAhZG9jdW1lbnQoKS0+
bG9hZEV2ZW50RmluaXNoZWQoKSAmJiAhcmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKS5w
cm90b2NvbElzRGF0YSgpKQotICAgICAgICBtX3ZhbGlkYXRlZFVSTHMuYWRkKHJlcXVlc3QucmVz
b3VyY2VSZXF1ZXN0KCkudXJsKCkpOwotCi0gICAgQVNTRVJUKHJlc291cmNlLT51cmwoKSA9PSB1
cmwuc3RyaW5nKCkpOwotICAgIG1fZG9jdW1lbnRSZXNvdXJjZXMuc2V0KHJlc291cmNlLT51cmwo
KSwgcmVzb3VyY2UpOwotICAgIHJldHVybiByZXNvdXJjZTsKLX0KLQotdm9pZCBDYWNoZWRSZXNv
dXJjZUxvYWRlcjo6ZG9jdW1lbnREaWRGaW5pc2hMb2FkRXZlbnQoKQotewotICAgIG1fdmFsaWRh
dGVkVVJMcy5jbGVhcigpOwotfQotCi1DYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJj
ZT4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJldmFsaWRhdGVSZXNvdXJjZShjb25zdCBDYWNoZWRS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKLXsKLSAg
ICBBU1NFUlQocmVzb3VyY2UpOwotICAgIEFTU0VSVChyZXNvdXJjZS0+aW5DYWNoZSgpKTsKLSAg
ICBhdXRvJiBtZW1vcnlDYWNoZSA9IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKTsKLSAgICBBU1NF
UlQoIW1lbW9yeUNhY2hlLmRpc2FibGVkKCkpOwotICAgIEFTU0VSVChyZXNvdXJjZS0+Y2FuVXNl
Q2FjaGVWYWxpZGF0b3IoKSk7Ci0gICAgQVNTRVJUKCFyZXNvdXJjZS0+cmVzb3VyY2VUb1JldmFs
aWRhdGUoKSk7Ci0gICAgQVNTRVJUKHJlc291cmNlLT5zZXNzaW9uSUQoKSA9PSBzZXNzaW9uSUQo
KSk7Ci0gICAgQVNTRVJUKHJlc291cmNlLT5hbGxvd3NDYWNoaW5nKCkpOwotCi0gICAgQ2FjaGVk
UmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IG5ld1Jlc291cmNlID0gY3JlYXRlUmVzb3Vy
Y2UocmVzb3VyY2UtPnR5cGUoKSwgcmVzb3VyY2UtPnJlc291cmNlUmVxdWVzdCgpLCByZXNvdXJj
ZS0+ZW5jb2RpbmcoKSwgcmVzb3VyY2UtPnNlc3Npb25JRCgpKTsKLQotICAgIExPRyhSZXNvdXJj
ZUxvYWRpbmcsICJSZXNvdXJjZSAlcCBjcmVhdGVkIHRvIHJldmFsaWRhdGUgJXAiLCBuZXdSZXNv
dXJjZS5nZXQoKSwgcmVzb3VyY2UpOwotICAgIG5ld1Jlc291cmNlLT5zZXRSZXNvdXJjZVRvUmV2
YWxpZGF0ZShyZXNvdXJjZSk7Ci0gICAgCi0gICAgbWVtb3J5Q2FjaGUucmVtb3ZlKCpyZXNvdXJj
ZSk7Ci0gICAgbWVtb3J5Q2FjaGUuYWRkKCpuZXdSZXNvdXJjZSk7Ci0jaWYgRU5BQkxFKFdFQl9U
SU1JTkcpCi0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
cmVzb3VyY2VUaW1pbmdFbmFibGVkKCkpCi0gICAgICAgIG1fcmVzb3VyY2VUaW1pbmdJbmZvLnN0
b3JlUmVzb3VyY2VUaW1pbmdJbml0aWF0b3JJbmZvcm1hdGlvbihuZXdSZXNvdXJjZSwgcmVxdWVz
dCwgZnJhbWUoKSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKLSNlbmRpZgot
ICAgIHJldHVybiBuZXdSZXNvdXJjZTsKLX0KLQotQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
UmVzb3VyY2U+IENhY2hlZFJlc291cmNlTG9hZGVyOjpsb2FkUmVzb3VyY2UoQ2FjaGVkUmVzb3Vy
Y2U6OlR5cGUgdHlwZSwgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIGF1
dG8mIG1lbW9yeUNhY2hlID0gTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpOwotICAgIEFTU0VSVCgh
cmVxdWVzdC5hbGxvd3NDYWNoaW5nKCkgfHwgIW1lbW9yeUNhY2hlLnJlc291cmNlRm9yUmVxdWVz
dChyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLCBzZXNzaW9uSUQoKSkpOwotCi0gICAgTE9HKFJl
c291cmNlTG9hZGluZywgIkxvYWRpbmcgQ2FjaGVkUmVzb3VyY2UgZm9yICclcycuIiwgcmVxdWVz
dC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKS5zdHJpbmdDZW50ZXJFbGxpcHNpemVkVG9MZW5ndGgo
KS5sYXRpbjEoKS5kYXRhKCkpOwotCi0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVz
b3VyY2U+IHJlc291cmNlID0gY3JlYXRlUmVzb3VyY2UodHlwZSwgcmVxdWVzdC5tdXRhYmxlUmVz
b3VyY2VSZXF1ZXN0KCksIHJlcXVlc3QuY2hhcnNldCgpLCBzZXNzaW9uSUQoKSk7Ci0KLSAgICBp
ZiAocmVxdWVzdC5hbGxvd3NDYWNoaW5nKCkgJiYgIW1lbW9yeUNhY2hlLmFkZCgqcmVzb3VyY2Up
KQotICAgICAgICByZXNvdXJjZS0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIodGhpcyk7
Ci0jaWYgRU5BQkxFKFdFQl9USU1JTkcpCi0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkucmVzb3VyY2VUaW1pbmdFbmFibGVkKCkpCi0gICAgICAgIG1fcmVz
b3VyY2VUaW1pbmdJbmZvLnN0b3JlUmVzb3VyY2VUaW1pbmdJbml0aWF0b3JJbmZvcm1hdGlvbihy
ZXNvdXJjZSwgcmVxdWVzdCwgZnJhbWUoKSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzb3VyY2U7
Ci19Ci0KLXN0YXRpYyB2b2lkIGxvZ1JldmFsaWRhdGlvbihjb25zdCBTdHJpbmcmIHJlYXNvbiwg
RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQmIGxvZ0NsaWVudCkKLXsKLSAgICBsb2dDbGllbnQubG9n
RGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpjYWNoZWRS
ZXNvdXJjZVJldmFsaWRhdGlvbktleSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlYXNvbktl
eSgpLCByZWFzb24sIFNob3VsZFNhbXBsZTo6WWVzKTsKLX0KLQotc3RhdGljIHZvaWQgbG9nUmVz
b3VyY2VSZXZhbGlkYXRpb25EZWNpc2lvbihDYWNoZWRSZXNvdXJjZTo6UmV2YWxpZGF0aW9uRGVj
aXNpb24gcmVhc29uLCBjb25zdCBGcmFtZSogZnJhbWUpCi17Ci0gICAgaWYgKCFmcmFtZSB8fCAh
ZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGF1dG8mIGxvZ0NsaWVudCA9IGZy
YW1lLT5wYWdlKCktPmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCk7Ci0gICAgc3dpdGNoIChyZWFz
b24pIHsKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpSZXZhbGlkYXRpb25EZWNpc2lvbjo6Tm86
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJldmFsaWRhdGlvbkRl
Y2lzaW9uOjpZZXNEdWVUb0V4cGlyZWQ6Ci0gICAgICAgIGxvZ1JldmFsaWRhdGlvbihEaWFnbm9z
dGljTG9nZ2luZ0tleXM6OmlzRXhwaXJlZEtleSgpLCBsb2dDbGllbnQpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpSZXZhbGlkYXRpb25EZWNpc2lvbjo6WWVzRHVl
VG9Ob1N0b3JlOgotICAgICAgICBsb2dSZXZhbGlkYXRpb24oRGlhZ25vc3RpY0xvZ2dpbmdLZXlz
Ojpub1N0b3JlS2V5KCksIGxvZ0NsaWVudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OlJldmFsaWRhdGlvbkRlY2lzaW9uOjpZZXNEdWVUb05vQ2FjaGU6Ci0gICAg
ICAgIGxvZ1JldmFsaWRhdGlvbihEaWFnbm9zdGljTG9nZ2luZ0tleXM6Om5vQ2FjaGVLZXkoKSwg
bG9nQ2xpZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmV2
YWxpZGF0aW9uRGVjaXNpb246Olllc0R1ZVRvQ2FjaGVQb2xpY3k6Ci0gICAgICAgIGxvZ1JldmFs
aWRhdGlvbihEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlbG9hZEtleSgpLCBsb2dDbGllbnQpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLUNhY2hlZFJlc291cmNlTG9hZGVyOjpSZXZhbGlk
YXRpb25Qb2xpY3kgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRldGVybWluZVJldmFsaWRhdGlvblBv
bGljeShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIGNh
Y2hlZFJlc291cmNlUmVxdWVzdCwgQ2FjaGVkUmVzb3VyY2UqIGV4aXN0aW5nUmVzb3VyY2UpIGNv
bnN0Ci17Ci0gICAgYXV0byYgcmVxdWVzdCA9IGNhY2hlZFJlc291cmNlUmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKTsKLQotICAgIGlmICghZXhpc3RpbmdSZXNvdXJjZSkKLSAgICAgICAgcmV0dXJu
IExvYWQ7Ci0KLSAgICAvLyBXZSBhbHJlYWR5IGhhdmUgYSBwcmVsb2FkIGdvaW5nIGZvciB0aGlz
IFVSTC4KLSAgICBpZiAoY2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmZvclByZWxvYWQoKSAmJiBleGlz
dGluZ1Jlc291cmNlLT5pc1ByZWxvYWRlZCgpKQotICAgICAgICByZXR1cm4gVXNlOwotCi0gICAg
Ly8gSWYgdGhlIHNhbWUgVVJMIGhhcyBiZWVuIGxvYWRlZCBhcyBhIGRpZmZlcmVudCB0eXBlLCB3
ZSBuZWVkIHRvIHJlbG9hZC4KLSAgICBpZiAoZXhpc3RpbmdSZXNvdXJjZS0+dHlwZSgpICE9IHR5
cGUpIHsKLSAgICAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlTG9hZGVy
OjpkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3kgcmVsb2FkaW5nIGR1ZSB0byB0eXBlIG1pc21h
dGNoLiIpOwotICAgICAgICBsb2dNZW1vcnlDYWNoZVJlc291cmNlUmVxdWVzdChmcmFtZSgpLCBE
aWFnbm9zdGljTG9nZ2luZ0tleXM6OmluTWVtb3J5Q2FjaGVLZXkoKSwgRGlhZ25vc3RpY0xvZ2dp
bmdLZXlzOjp1bnVzZWRSZWFzb25UeXBlTWlzbWF0Y2hLZXkoKSk7Ci0gICAgICAgIHJldHVybiBS
ZWxvYWQ7Ci0gICAgfQotCi0gICAgaWYgKCFleGlzdGluZ1Jlc291cmNlLT52YXJ5SGVhZGVyVmFs
dWVzTWF0Y2gocmVxdWVzdCwgKnRoaXMpKQotICAgICAgICByZXR1cm4gUmVsb2FkOwotCi0gICAg
YXV0byogdGV4dERlY29kZXIgPSBleGlzdGluZ1Jlc291cmNlLT50ZXh0UmVzb3VyY2VEZWNvZGVy
KCk7Ci0gICAgaWYgKHRleHREZWNvZGVyICYmICF0ZXh0RGVjb2Rlci0+aGFzRXF1YWxFbmNvZGlu
Z0ZvckNoYXJzZXQoY2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNoYXJzZXQoKSkpCi0gICAgICAgIHJl
dHVybiBSZWxvYWQ7Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSB0aGUgc2FtZSBjYWNo
ZSBwb2xpY3kgZm9yIGFsbCByZXNvdXJjZSB0eXBlcy4gVGhlIHJhdyByZXNvdXJjZSBwb2xpY3kg
aXMgb3Zlcmx5IHN0cmljdAotICAgIC8vICAgICAgICB3aGlsZSB0aGUgbm9ybWFsIHN1YnJlc291
cmNlIHBvbGljeSBpcyB0b28gbG9vc2UuCi0gICAgaWYgKGV4aXN0aW5nUmVzb3VyY2UtPmlzTWFp
bk9yTWVkaWFPclJhd1Jlc291cmNlKCkgJiYgZnJhbWUoKSkgewotICAgICAgICBib29sIHN0cmlj
dFBvbGljeURpc2FibGVkID0gZnJhbWUoKS0+bG9hZGVyKCkuaXNTdHJpY3RSYXdSZXNvdXJjZVZh
bGlkYXRpb25Qb2xpY3lEaXNhYmxlZEZvclRlc3RpbmcoKTsKLSAgICAgICAgYm9vbCBjYW5SZXVz
ZVJhd1Jlc291cmNlID0gc3RyaWN0UG9saWN5RGlzYWJsZWQgfHwgZG93bmNhc3Q8Q2FjaGVkUmF3
UmVzb3VyY2U+KCpleGlzdGluZ1Jlc291cmNlKS5jYW5SZXVzZShyZXF1ZXN0KTsKLSAgICAgICAg
aWYgKCFjYW5SZXVzZVJhd1Jlc291cmNlKQotICAgICAgICAgICAgcmV0dXJuIFJlbG9hZDsKLSAg
ICB9Ci0KLSAgICAvLyBDb25kaXRpb25hbCByZXF1ZXN0cyBzaG91bGQgaGF2ZSBmYWlsZWQgY2Fu
UmV1c2UgY2hlY2suCi0gICAgQVNTRVJUKCFyZXF1ZXN0LmlzQ29uZGl0aW9uYWwoKSk7Ci0KLSAg
ICAvLyBEbyBub3QgbG9hZCBmcm9tIGNhY2hlIGlmIGltYWdlcyBhcmUgbm90IGVuYWJsZWQuIFRo
ZSBsb2FkIGZvciB0aGlzIGltYWdlIHdpbGwgYmUgYmxvY2tlZAotICAgIC8vIGluIENhY2hlZElt
YWdlOjpsb2FkLgotICAgIGlmIChjYWNoZWRSZXNvdXJjZVJlcXVlc3QuZGVmZXIoKSA9PSBDYWNo
ZWRSZXNvdXJjZVJlcXVlc3Q6OkRlZmVycmVkQnlDbGllbnQpCi0gICAgICAgIHJldHVybiBSZWxv
YWQ7Ci0KLSAgICAvLyBEb24ndCByZWxvYWQgcmVzb3VyY2VzIHdoaWxlIHBhc3RpbmcuCi0gICAg
aWYgKG1fYWxsb3dTdGFsZVJlc291cmNlcykKLSAgICAgICAgcmV0dXJuIFVzZTsKLQotICAgIC8v
IEFsd2F5cyB1c2UgcHJlbG9hZHMuCi0gICAgaWYgKGV4aXN0aW5nUmVzb3VyY2UtPmlzUHJlbG9h
ZGVkKCkpCi0gICAgICAgIHJldHVybiBVc2U7Ci0KLSAgICAvLyBXZSBjYW4gZmluZCByZXNvdXJj
ZXMgdGhhdCBhcmUgYmVpbmcgdmFsaWRhdGVkIGZyb20gY2FjaGUgb25seSB3aGVuIHZhbGlkYXRp
b24gaXMganVzdCBzdWNjZXNzZnVsbHkgY29tcGxldGluZy4KLSAgICBpZiAoZXhpc3RpbmdSZXNv
dXJjZS0+dmFsaWRhdGlvbkNvbXBsZXRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFVzZTsKLSAgICBB
U1NFUlQoIWV4aXN0aW5nUmVzb3VyY2UtPnZhbGlkYXRpb25JblByb2dyZXNzKCkpOwotCi0gICAg
Ly8gVmFsaWRhdGUgdGhlIHJlZGlyZWN0IGNoYWluLgotICAgIGJvb2wgY2FjaGVQb2xpY3lJc0hp
c3RvcnlCdWZmZXIgPSBjYWNoZVBvbGljeSh0eXBlKSA9PSBDYWNoZVBvbGljeUhpc3RvcnlCdWZm
ZXI7Ci0gICAgaWYgKCFleGlzdGluZ1Jlc291cmNlLT5yZWRpcmVjdENoYWluQWxsb3dzUmV1c2Uo
Y2FjaGVQb2xpY3lJc0hpc3RvcnlCdWZmZXIgPyBSZXVzZUV4cGlyZWRSZWRpcmVjdGlvbiA6IERv
Tm90UmV1c2VFeHBpcmVkUmVkaXJlY3Rpb24pKSB7Ci0gICAgICAgIExPRyhSZXNvdXJjZUxvYWRp
bmcsICJDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGV0ZXJtaW5lUmV2YWxpZGF0aW9uUG9saWN5IHJl
bG9hZGluZyBkdWUgdG8gbm90IGNhY2hlZCBvciBleHBpcmVkIHJlZGlyZWN0aW9ucy4iKTsKLSAg
ICAgICAgbG9nTWVtb3J5Q2FjaGVSZXNvdXJjZVJlcXVlc3QoZnJhbWUoKSwgRGlhZ25vc3RpY0xv
Z2dpbmdLZXlzOjppbk1lbW9yeUNhY2hlS2V5KCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6dW51
c2VkUmVhc29uUmVkaXJlY3RDaGFpbktleSgpKTsKLSAgICAgICAgcmV0dXJuIFJlbG9hZDsKLSAg
ICB9Ci0KLSAgICAvLyBDYWNoZVBvbGljeUhpc3RvcnlCdWZmZXIgdXNlcyB0aGUgY2FjaGUgZXhj
ZXB0IGlmIHRoaXMgaXMgYSBtYWluIHJlc291cmNlIHdpdGggImNhY2hlLWNvbnRyb2w6IG5vLXN0
b3JlIi4KLSAgICBpZiAoY2FjaGVQb2xpY3lJc0hpc3RvcnlCdWZmZXIpIHsKLSAgICAgICAgLy8g
RklYTUU6IElnbm9yaW5nICJjYWNoZS1jb250cm9sOiBuby1jYWNoZSIgZm9yIHN1Yi1yZXNvdXJj
ZXMgb24gaGlzdG9yeSBuYXZpZ2F0aW9uIGJ1dCBub3QgdGhlIG1haW4KLSAgICAgICAgLy8gcmVz
b3VyY2UgaXMgaW5jb25zaXN0ZW50LiBXZSBzaG91bGQgcHJvYmFibHkgaGFybW9uaXplIHRoaXMu
Ci0gICAgICAgIGlmICghZXhpc3RpbmdSZXNvdXJjZS0+cmVzcG9uc2UoKS5jYWNoZUNvbnRyb2xD
b250YWluc05vU3RvcmUoKSB8fCB0eXBlICE9IENhY2hlZFJlc291cmNlOjpNYWluUmVzb3VyY2Up
Ci0gICAgICAgICAgICByZXR1cm4gVXNlOwotICAgIH0KLQotICAgIC8vIERvbid0IHJldXNlIHJl
c291cmNlcyB3aXRoIENhY2hlLWNvbnRyb2w6IG5vLXN0b3JlLgotICAgIGlmIChleGlzdGluZ1Jl
c291cmNlLT5yZXNwb25zZSgpLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgpKSB7Ci0gICAg
ICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGV0ZXJtaW5l
UmV2YWxpZGF0aW9uUG9saWN5IHJlbG9hZGluZyBkdWUgdG8gQ2FjaGUtY29udHJvbDogbm8tc3Rv
cmUuIik7Ci0gICAgICAgIGxvZ01lbW9yeUNhY2hlUmVzb3VyY2VSZXF1ZXN0KGZyYW1lKCksIERp
YWdub3N0aWNMb2dnaW5nS2V5czo6aW5NZW1vcnlDYWNoZUtleSgpLCBEaWFnbm9zdGljTG9nZ2lu
Z0tleXM6OnVudXNlZFJlYXNvbk5vU3RvcmVLZXkoKSk7Ci0gICAgICAgIHJldHVybiBSZWxvYWQ7
Ci0gICAgfQotCi0gICAgLy8gSWYgY3JlZGVudGlhbHMgd2VyZSBzZW50IHdpdGggdGhlIHByZXZp
b3VzIHJlcXVlc3QgYW5kIHdvbid0IGJlCi0gICAgLy8gd2l0aCB0aGlzIG9uZSwgb3IgdmljZSB2
ZXJzYSwgcmUtZmV0Y2ggdGhlIHJlc291cmNlLgotICAgIC8vCi0gICAgLy8gVGhpcyBoZWxwcyB3
aXRoIHRoZSBjYXNlIHdoZXJlIHRoZSBzZXJ2ZXIgc2VuZHMgYmFjawotICAgIC8vICJBY2Nlc3Mt
Q29udHJvbC1BbGxvdy1PcmlnaW46ICoiIGFsbCB0aGUgdGltZSwgYnV0IHNvbWUgb2YgdGhlCi0g
ICAgLy8gY2xpZW50J3MgcmVxdWVzdHMgYXJlIG1hZGUgd2l0aG91dCBDT1JTIGFuZCBzb21lIHdp
dGguCi0gICAgaWYgKGV4aXN0aW5nUmVzb3VyY2UtPnJlc291cmNlUmVxdWVzdCgpLmFsbG93Q29v
a2llcygpICE9IHJlcXVlc3QuYWxsb3dDb29raWVzKCkpIHsKLSAgICAgICAgTE9HKFJlc291cmNl
TG9hZGluZywgIkNhY2hlZFJlc291cmNlTG9hZGVyOjpkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xp
Y3kgcmVsb2FkaW5nIGR1ZSB0byBkaWZmZXJlbmNlIGluIGNyZWRlbnRpYWxzIHNldHRpbmdzLiIp
OwotICAgICAgICBsb2dNZW1vcnlDYWNoZVJlc291cmNlUmVxdWVzdChmcmFtZSgpLCBEaWFnbm9z
dGljTG9nZ2luZ0tleXM6OmluTWVtb3J5Q2FjaGVLZXkoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlz
Ojp1bnVzZWRSZWFzb25DcmVkZW50aWFsU2V0dGluZ3NLZXkoKSk7Ci0gICAgICAgIHJldHVybiBS
ZWxvYWQ7Ci0gICAgfQotCi0gICAgLy8gRHVyaW5nIHRoZSBpbml0aWFsIGxvYWQsIGF2b2lkIGxv
YWRpbmcgdGhlIHNhbWUgcmVzb3VyY2UgbXVsdGlwbGUgdGltZXMgZm9yIGEgc2luZ2xlIGRvY3Vt
ZW50LCBldmVuIGlmIHRoZSBjYWNoZSBwb2xpY2llcyB3b3VsZCB0ZWxsIHVzIHRvLgotICAgIGlm
IChkb2N1bWVudCgpICYmICFkb2N1bWVudCgpLT5sb2FkRXZlbnRGaW5pc2hlZCgpICYmIG1fdmFs
aWRhdGVkVVJMcy5jb250YWlucyhleGlzdGluZ1Jlc291cmNlLT51cmwoKSkpCi0gICAgICAgIHJl
dHVybiBVc2U7Ci0KLSAgICAvLyBDYWNoZVBvbGljeVJlbG9hZCBhbHdheXMgcmVsb2FkcwotICAg
IGlmIChjYWNoZVBvbGljeSh0eXBlKSA9PSBDYWNoZVBvbGljeVJlbG9hZCkgewotICAgICAgICBM
T0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRldGVybWluZVJldmFs
aWRhdGlvblBvbGljeSByZWxvYWRpbmcgZHVlIHRvIENhY2hlUG9saWN5UmVsb2FkLiIpOwotICAg
ICAgICBsb2dNZW1vcnlDYWNoZVJlc291cmNlUmVxdWVzdChmcmFtZSgpLCBEaWFnbm9zdGljTG9n
Z2luZ0tleXM6OmluTWVtb3J5Q2FjaGVLZXkoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjp1bnVz
ZWRSZWFzb25SZWxvYWRLZXkoKSk7Ci0gICAgICAgIHJldHVybiBSZWxvYWQ7Ci0gICAgfQotICAg
IAotICAgIC8vIFdlJ2xsIHRyeSB0byByZWxvYWQgdGhlIHJlc291cmNlIGlmIGl0IGZhaWxlZCBs
YXN0IHRpbWUuCi0gICAgaWYgKGV4aXN0aW5nUmVzb3VyY2UtPmVycm9yT2NjdXJyZWQoKSkgewot
ICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRldGVy
bWluZVJldmFsaWRhdGlvblBvbGljeWUgcmVsb2FkaW5nIGR1ZSB0byByZXNvdXJjZSBiZWluZyBp
biB0aGUgZXJyb3Igc3RhdGUiKTsKLSAgICAgICAgbG9nTWVtb3J5Q2FjaGVSZXNvdXJjZVJlcXVl
c3QoZnJhbWUoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjppbk1lbW9yeUNhY2hlS2V5KCksIERp
YWdub3N0aWNMb2dnaW5nS2V5czo6dW51c2VkUmVhc29uRXJyb3JLZXkoKSk7Ci0gICAgICAgIHJl
dHVybiBSZWxvYWQ7Ci0gICAgfQotICAgIAotICAgIC8vIEZvciByZXNvdXJjZXMgdGhhdCBhcmUg
bm90IHlldCBsb2FkZWQgd2UgaWdub3JlIHRoZSBjYWNoZSBwb2xpY3kuCi0gICAgaWYgKGV4aXN0
aW5nUmVzb3VyY2UtPmlzTG9hZGluZygpKQotICAgICAgICByZXR1cm4gVXNlOwotCi0gICAgYXV0
byByZXZhbGlkYXRpb25EZWNpc2lvbiA9IGV4aXN0aW5nUmVzb3VyY2UtPm1ha2VSZXZhbGlkYXRp
b25EZWNpc2lvbihjYWNoZVBvbGljeSh0eXBlKSk7Ci0gICAgbG9nUmVzb3VyY2VSZXZhbGlkYXRp
b25EZWNpc2lvbihyZXZhbGlkYXRpb25EZWNpc2lvbiwgZnJhbWUoKSk7Ci0KLSAgICAvLyBDaGVj
ayBpZiB0aGUgY2FjaGUgaGVhZGVycyByZXF1aXJlcyB1cyB0byByZXZhbGlkYXRlIChjYWNoZSBl
eHBpcmF0aW9uIGZvciBleGFtcGxlKS4KLSAgICBpZiAocmV2YWxpZGF0aW9uRGVjaXNpb24gIT0g
Q2FjaGVkUmVzb3VyY2U6OlJldmFsaWRhdGlvbkRlY2lzaW9uOjpObykgewotICAgICAgICAvLyBT
ZWUgaWYgdGhlIHJlc291cmNlIGhhcyB1c2FibGUgRVRhZyBvciBMYXN0LW1vZGlmaWVkIGhlYWRl
cnMuCi0gICAgICAgIGlmIChleGlzdGluZ1Jlc291cmNlLT5jYW5Vc2VDYWNoZVZhbGlkYXRvcigp
KQotICAgICAgICAgICAgcmV0dXJuIFJldmFsaWRhdGU7Ci0gICAgICAgIAotICAgICAgICAvLyBO
bywgbXVzdCByZWxvYWQuCi0gICAgICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZWRSZXNv
dXJjZUxvYWRlcjo6ZGV0ZXJtaW5lUmV2YWxpZGF0aW9uUG9saWN5IHJlbG9hZGluZyBkdWUgdG8g
bWlzc2luZyBjYWNoZSB2YWxpZGF0b3JzLiIpOwotICAgICAgICBsb2dNZW1vcnlDYWNoZVJlc291
cmNlUmVxdWVzdChmcmFtZSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmluTWVtb3J5Q2FjaGVL
ZXkoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjp1bnVzZWRSZWFzb25NdXN0UmV2YWxpZGF0ZU5v
VmFsaWRhdG9yS2V5KCkpOwotICAgICAgICByZXR1cm4gUmVsb2FkOwotICAgIH0KLQotICAgIHJl
dHVybiBVc2U7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnByaW50QWNjZXNzRGVu
aWVkTWVzc2FnZShjb25zdCBVUkwmIHVybCkgY29uc3QKLXsKLSAgICBpZiAodXJsLmlzTnVsbCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWZyYW1lKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFN0cmluZyBtZXNzYWdlOwotICAgIGlmICghbV9kb2N1bWVudCB8fCBtX2RvY3VtZW50
LT51cmwoKS5pc051bGwoKSkKLSAgICAgICAgbWVzc2FnZSA9ICJVbnNhZmUgYXR0ZW1wdCB0byBs
b2FkIFVSTCAiICsgdXJsLnN0cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpICsgJy4nOwot
ICAgIGVsc2UKLSAgICAgICAgbWVzc2FnZSA9ICJVbnNhZmUgYXR0ZW1wdCB0byBsb2FkIFVSTCAi
ICsgdXJsLnN0cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpICsgIiBmcm9tIGZyYW1lIHdp
dGggVVJMICIgKyBtX2RvY3VtZW50LT51cmwoKS5zdHJpbmdDZW50ZXJFbGxpcHNpemVkVG9MZW5n
dGgoKSArICIuIERvbWFpbnMsIHByb3RvY29scyBhbmQgcG9ydHMgbXVzdCBtYXRjaC5cbiI7Ci0K
LSAgICBmcmFtZSgpLT5kb2N1bWVudCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNl
OjpTZWN1cml0eSwgTWVzc2FnZUxldmVsOjpFcnJvciwgbWVzc2FnZSk7Ci19Ci0KLXZvaWQgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OnNldEF1dG9Mb2FkSW1hZ2VzKGJvb2wgZW5hYmxlKQotewotICAg
IGlmIChlbmFibGUgPT0gbV9hdXRvTG9hZEltYWdlcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9hdXRvTG9hZEltYWdlcyA9IGVuYWJsZTsKLQotICAgIGlmICghbV9hdXRvTG9hZEltYWdlcykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVsb2FkSW1hZ2VzSWZOb3REZWZlcnJlZCgpOwotfQot
Ci12b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpzZXRJbWFnZXNFbmFibGVkKGJvb2wgZW5hYmxl
KQotewotICAgIGlmIChlbmFibGUgPT0gbV9pbWFnZXNFbmFibGVkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2ltYWdlc0VuYWJsZWQgPSBlbmFibGU7Ci0KLSAgICBpZiAoIW1faW1hZ2VzRW5h
YmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVsb2FkSW1hZ2VzSWZOb3REZWZlcnJlZCgp
OwotfQotCi1ib29sIENhY2hlZFJlc291cmNlTG9hZGVyOjpjbGllbnREZWZlcnNJbWFnZShjb25z
dCBVUkwmKSBjb25zdAotewotICAgIHJldHVybiAhbV9pbWFnZXNFbmFibGVkOwotfQotCi1ib29s
IENhY2hlZFJlc291cmNlTG9hZGVyOjpzaG91bGRQZXJmb3JtSW1hZ2VMb2FkKGNvbnN0IFVSTCYg
dXJsKSBjb25zdAotewotICAgIHJldHVybiBtX2F1dG9Mb2FkSW1hZ2VzIHx8IHVybC5wcm90b2Nv
bElzRGF0YSgpOwotfQotCi1ib29sIENhY2hlZFJlc291cmNlTG9hZGVyOjpzaG91bGREZWZlcklt
YWdlTG9hZChjb25zdCBVUkwmIHVybCkgY29uc3QKLXsKLSAgICByZXR1cm4gY2xpZW50RGVmZXJz
SW1hZ2UodXJsKSB8fCAhc2hvdWxkUGVyZm9ybUltYWdlTG9hZCh1cmwpOwotfQotCi12b2lkIENh
Y2hlZFJlc291cmNlTG9hZGVyOjpyZWxvYWRJbWFnZXNJZk5vdERlZmVycmVkKCkKLXsKLSAgICBm
b3IgKGF1dG8mIHJlc291cmNlIDogbV9kb2N1bWVudFJlc291cmNlcy52YWx1ZXMoKSkgewotICAg
ICAgICBpZiAoaXM8Q2FjaGVkSW1hZ2U+KCpyZXNvdXJjZSkgJiYgcmVzb3VyY2UtPnN0aWxsTmVl
ZHNMb2FkKCkgJiYgIWNsaWVudERlZmVyc0ltYWdlKHJlc291cmNlLT51cmwoKSkpCi0gICAgICAg
ICAgICBkb3duY2FzdDxDYWNoZWRJbWFnZT4oKnJlc291cmNlKS5sb2FkKCp0aGlzLCBkZWZhdWx0
Q2FjaGVkUmVzb3VyY2VPcHRpb25zKCkpOwotICAgIH0KLX0KLQotQ2FjaGVQb2xpY3kgQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OmNhY2hlUG9saWN5KENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUpIGNv
bnN0Ci17Ci0gICAgRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1l
KQotICAgICAgICByZXR1cm4gQ2FjaGVQb2xpY3lWZXJpZnk7Ci0KLSAgICBpZiAodHlwZSAhPSBD
YWNoZWRSZXNvdXJjZTo6TWFpblJlc291cmNlKQotICAgICAgICByZXR1cm4gZnJhbWUtPmxvYWRl
cigpLnN1YnJlc291cmNlQ2FjaGVQb2xpY3koKTsKLQotICAgIGlmIChQYWdlKiBwYWdlID0gZnJh
bWUtPnBhZ2UoKSkgewotICAgICAgICBpZiAocGFnZS0+aXNSZXNvdXJjZUNhY2hpbmdEaXNhYmxl
ZCgpKQotICAgICAgICAgICAgcmV0dXJuIENhY2hlUG9saWN5UmVsb2FkOwotICAgIH0KLQotICAg
IHN3aXRjaCAoZnJhbWUtPmxvYWRlcigpLmxvYWRUeXBlKCkpIHsKLSAgICBjYXNlIEZyYW1lTG9h
ZFR5cGU6OlJlbG9hZEZyb21PcmlnaW46Ci0gICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpSZWxvYWQ6
Ci0gICAgICAgIHJldHVybiBDYWNoZVBvbGljeVJlbG9hZDsKLSAgICBjYXNlIEZyYW1lTG9hZFR5
cGU6OkJhY2s6Ci0gICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpGb3J3YXJkOgotICAgIGNhc2UgRnJh
bWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkOgotICAgICAgICAvLyBEbyBub3QgcmV2YWxp
ZGF0ZSBjYWNoZWQgbWFpbiByZXNvdXJjZSBvbiBiYWNrL2ZvcndhcmQgbmF2aWdhdGlvbi4KLSAg
ICAgICAgcmV0dXJuIENhY2hlUG9saWN5SGlzdG9yeUJ1ZmZlcjsKLSAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gQ2FjaGVQb2xpY3lWZXJpZnk7Ci0gICAgfQotfQotCi12b2lkIENhY2hlZFJl
c291cmNlTG9hZGVyOjpyZW1vdmVDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSYgcmVzb3Vy
Y2UpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5maW5kKHJlc291cmNlLnVybCgpKTsKLSAgICBpZiAo
aXQgIT0gbV9kb2N1bWVudFJlc291cmNlcy5lbmQoKSkKLSAgICAgICAgQVNTRVJUKGl0LT52YWx1
ZS5nZXQoKSA9PSAmcmVzb3VyY2UpOwotI2VuZGlmCi0gICAgbV9kb2N1bWVudFJlc291cmNlcy5y
ZW1vdmUocmVzb3VyY2UudXJsKCkpOwotfQotCi12b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjps
b2FkRG9uZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGJvb2wgc2hvdWxkUGVyZm9ybVBvc3RM
b2FkQWN0aW9ucykKLXsKLSAgICBSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IHByb3RlY3REb2N1bWVu
dExvYWRlcihtX2RvY3VtZW50TG9hZGVyKTsKLSAgICBSZWZQdHI8RG9jdW1lbnQ+IHByb3RlY3RE
b2N1bWVudChtX2RvY3VtZW50KTsKLQotI2lmIEVOQUJMRShXRUJfVElNSU5HKQotICAgIGlmIChy
ZXNvdXJjZSAmJiBkb2N1bWVudCgpICYmIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkucmVzb3VyY2VUaW1pbmdFbmFibGVkKCkpCi0gICAgICAgIG1fcmVzb3VyY2VUaW1p
bmdJbmZvLmFkZFJlc291cmNlVGltaW5nKHJlc291cmNlLCAqZG9jdW1lbnQoKSwgcmVzb3VyY2Ut
PmxvYWRlcigpLT5sb2FkVGltaW5nKCkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocmVzb3Vy
Y2UpOwotI2VuZGlmCi0KLSAgICBpZiAoZnJhbWUoKSkKLSAgICAgICAgZnJhbWUoKS0+bG9hZGVy
KCkubG9hZERvbmUoKTsKLQotICAgIGlmIChzaG91bGRQZXJmb3JtUG9zdExvYWRBY3Rpb25zKQot
ICAgICAgICBwZXJmb3JtUG9zdExvYWRBY3Rpb25zKCk7Ci0KLSAgICBpZiAoIW1fZ2FyYmFnZUNv
bGxlY3REb2N1bWVudFJlc291cmNlc1RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fZ2FyYmFn
ZUNvbGxlY3REb2N1bWVudFJlc291cmNlc1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotLy8g
R2FyYmFnZSBjb2xsZWN0aW5nIG1fZG9jdW1lbnRSZXNvdXJjZXMgaXMgYSB3b3JrYXJvdW5kIGZv
ciB0aGUKLS8vIENhY2hlZFJlc291cmNlSGFuZGxlcyBvbiB0aGUgUkhTIGJlaW5nIHN0cm9uZyBy
ZWZlcmVuY2VzLiBJZGVhbGx5IHRoaXMKLS8vIHdvdWxkIGJlIGEgd2VhayBtYXAsIGhvd2V2ZXIg
Q2FjaGVkUmVzb3VyY2VIYW5kbGVzIHBlcmZvcm0gYWRkaXRpb25hbAotLy8gYm9va2tlZXBpbmcg
b24gQ2FjaGVkUmVzb3VyY2VzLCBzbyBpbnN0ZWFkIHBzZXVkby1HQyB0aGVtIC0tIHdoZW4gdGhl
Ci0vLyByZWZlcmVuY2UgY291bnQgcmVhY2hlcyAxLCBtX2RvY3VtZW50UmVzb3VyY2VzIGlzIHRo
ZSBvbmx5IHJlZmVyZW5jZSwgc28KLS8vIHJlbW92ZSBpdCBmcm9tIHRoZSBtYXAuCi12b2lkIENh
Y2hlZFJlc291cmNlTG9hZGVyOjpnYXJiYWdlQ29sbGVjdERvY3VtZW50UmVzb3VyY2VzKCkKLXsK
LSAgICB0eXBlZGVmIFZlY3RvcjxTdHJpbmcsIDEwPiBTdHJpbmdWZWN0b3I7Ci0gICAgU3RyaW5n
VmVjdG9yIHJlc291cmNlc1RvRGVsZXRlOwotCi0gICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IG1f
ZG9jdW1lbnRSZXNvdXJjZXMpIHsKLSAgICAgICAgaWYgKHJlc291cmNlLnZhbHVlLT5oYXNPbmVI
YW5kbGUoKSkgewotICAgICAgICAgICAgcmVzb3VyY2VzVG9EZWxldGUuYXBwZW5kKHJlc291cmNl
LmtleSk7Ci0gICAgICAgICAgICByZXNvdXJjZS52YWx1ZS0+c2V0T3duaW5nQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIobnVsbHB0cik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIHJl
c291cmNlIDogcmVzb3VyY2VzVG9EZWxldGUpCi0gICAgICAgIG1fZG9jdW1lbnRSZXNvdXJjZXMu
cmVtb3ZlKHJlc291cmNlKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cGVyZm9y
bVBvc3RMb2FkQWN0aW9ucygpCi17Ci0gICAgY2hlY2tGb3JQZW5kaW5nUHJlbG9hZHMoKTsKLQot
ICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5zZXJ2ZVBlbmRpbmdS
ZXF1ZXN0cygpOwotfQotCi12b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjppbmNyZW1lbnRSZXF1
ZXN0Q291bnQoY29uc3QgQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQotewotICAgIGlmIChyZXNv
dXJjZS5pZ25vcmVGb3JSZXF1ZXN0Q291bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgKytt
X3JlcXVlc3RDb3VudDsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGVjcmVtZW50
UmVxdWVzdENvdW50KGNvbnN0IENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkKLXsKLSAgICBpZiAo
cmVzb3VyY2UuaWdub3JlRm9yUmVxdWVzdENvdW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC0tbV9yZXF1ZXN0Q291bnQ7Ci0gICAgQVNTRVJUKG1fcmVxdWVzdENvdW50ID4gLTEpOwotfQot
Ci1DYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXI6OnByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIFByZWxvYWRUeXBlIHByZWxvYWRU
eXBlKQotewotICAgIC8vIFdlIGFsd2F5cyBwcmVsb2FkIHJlc291cmNlcyBvbiBpT1MuIFNlZSA8
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMjc2Pi4KLSAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIGFkZGluZyBhIHNldHRpbmcgdG8gdG9nZ2xlIGFnZ3Jl
c3NpdmUgcHJlbG9hZGluZyBiZWhhdmlvciBhcyBvcHBvc2VkCi0gICAgLy8gdG8gbWFraW5nIHRo
aXMgYmVoYXZpb3Igc3BlY2lmaWMgdG8gaU9TLgotI2lmICFQTEFURk9STShJT1MpCi0gICAgYm9v
bCBoYXNSZW5kZXJpbmcgPSBtX2RvY3VtZW50LT5ib2R5T3JGcmFtZXNldCgpICYmIG1fZG9jdW1l
bnQtPnJlbmRlclZpZXcoKTsKLSAgICBib29sIGNhbkJsb2NrUGFyc2VyID0gdHlwZSA9PSBDYWNo
ZWRSZXNvdXJjZTo6U2NyaXB0IHx8IHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hl
ZXQ7Ci0gICAgaWYgKCFoYXNSZW5kZXJpbmcgJiYgIWNhbkJsb2NrUGFyc2VyICYmIHByZWxvYWRU
eXBlID09IEltcGxpY2l0UHJlbG9hZCkgewotICAgICAgICAvLyBEb24ndCBwcmVsb2FkIHN1YnJl
c291cmNlcyB0aGF0IGNhbid0IGJsb2NrIHRoZSBwYXJzZXIgYmVmb3JlIHdlIGhhdmUgc29tZXRo
aW5nIHRvIGRyYXcuCi0gICAgICAgIC8vIFRoaXMgaGVscHMgcHJldmVudCBwcmVsb2FkcyBmcm9t
IGRlbGF5aW5nIGZpcnN0IGRpc3BsYXkgd2hlbiBiYW5kd2lkdGggaXMgbGltaXRlZC4KLSAgICAg
ICAgUGVuZGluZ1ByZWxvYWQgcGVuZGluZ1ByZWxvYWQgPSB7IHR5cGUsIHJlcXVlc3QsIGNoYXJz
ZXQgfTsKLSAgICAgICAgbV9wZW5kaW5nUHJlbG9hZHMuYXBwZW5kKHBlbmRpbmdQcmVsb2FkKTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0o
cHJlbG9hZFR5cGUpOwotI2VuZGlmCi0gICAgcmV0dXJuIHJlcXVlc3RQcmVsb2FkKHR5cGUsIHJl
cXVlc3QsIGNoYXJzZXQpOwotfQotCi12b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpjaGVja0Zv
clBlbmRpbmdQcmVsb2FkcygpIAotewotICAgIGlmIChtX3BlbmRpbmdQcmVsb2Fkcy5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBhdXRvKiBib2R5ID0gbV9kb2N1bWVudC0+Ym9keU9y
RnJhbWVzZXQoKTsKLSAgICBpZiAoIWJvZHkgfHwgIWJvZHktPnJlbmRlcmVyKCkpCi0gICAgICAg
IHJldHVybjsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgLy8gV2UgYWx3YXlzIHByZWxvYWQgcmVz
b3VyY2VzIG9uIGlPUy4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTEyNzY+LgotICAgIC8vIFNvLCB3ZSBzaG91bGQgbmV2ZXIgaGF2ZSBhbnkgcGVuZGluZyBw
cmVsb2Fkcy4KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGxvb2sgdG8gYXZvaWQgY29tcGlsaW5n
IHRoaXMgY29kZSBlbnRpcmVseSB3aGVuIGJ1aWxkaW5nIGZvciBpT1MuCi0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICB3aGlsZSAoIW1fcGVuZGluZ1ByZWxvYWRzLmlzRW1w
dHkoKSkgewotICAgICAgICBQZW5kaW5nUHJlbG9hZCBwcmVsb2FkID0gbV9wZW5kaW5nUHJlbG9h
ZHMudGFrZUZpcnN0KCk7Ci0gICAgICAgIC8vIERvbid0IHJlcXVlc3QgcHJlbG9hZCBpZiB0aGUg
cmVzb3VyY2UgYWxyZWFkeSBsb2FkZWQgbm9ybWFsbHkgKHRoaXMgd2lsbCByZXN1bHQgaW4gZG91
YmxlIGxvYWQgaWYgdGhlIHBhZ2UgaXMgYmVpbmcgcmVsb2FkZWQgd2l0aCBjYWNoZWQgcmVzdWx0
cyBpZ25vcmVkKS4KLSAgICAgICAgaWYgKCFjYWNoZWRSZXNvdXJjZShwcmVsb2FkLm1fcmVxdWVz
dC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKSkpCi0gICAgICAgICAgICByZXF1ZXN0UHJlbG9hZChw
cmVsb2FkLm1fdHlwZSwgcHJlbG9hZC5tX3JlcXVlc3QsIHByZWxvYWQubV9jaGFyc2V0KTsKLSAg
ICB9Ci0gICAgbV9wZW5kaW5nUHJlbG9hZHMuY2xlYXIoKTsKLX0KLQotQ2FjaGVkUmVzb3VyY2VI
YW5kbGU8Q2FjaGVkUmVzb3VyY2U+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UHJlbG9h
ZChDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKLXsKLSAgICBTdHJpbmcgZW5jb2Rpbmc7Ci0gICAg
aWYgKHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdCB8fCB0eXBlID09IENhY2hlZFJlc291
cmNlOjpDU1NTdHlsZVNoZWV0KQotICAgICAgICBlbmNvZGluZyA9IGNoYXJzZXQuaXNFbXB0eSgp
ID8gbV9kb2N1bWVudC0+Y2hhcnNldCgpIDogY2hhcnNldDsKLQotICAgIHJlcXVlc3Quc2V0Q2hh
cnNldChlbmNvZGluZyk7Ci0gICAgcmVxdWVzdC5zZXRGb3JQcmVsb2FkKHRydWUpOwotCi0gICAg
Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IHJlc291cmNlID0gcmVxdWVzdFJl
c291cmNlKHR5cGUsIHJlcXVlc3QpOwotICAgIGlmICghcmVzb3VyY2UgfHwgKG1fcHJlbG9hZHMg
JiYgbV9wcmVsb2Fkcy0+Y29udGFpbnMocmVzb3VyY2UuZ2V0KCkpKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgLy8gRm9udHMgbmVlZCBzcGVjaWFsIHRyZWF0bWVudCBzaW5jZSBqdXN0
IGNyZWF0aW5nIHRoZSByZXNvdXJjZSBkb2Vzbid0IHRyaWdnZXIgYSBsb2FkLgotICAgIGlmICh0
eXBlID09IENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2UpCi0gICAgICAgIGRvd25jYXN0PENh
Y2hlZEZvbnQ+KHJlc291cmNlLmdldCgpKS0+YmVnaW5Mb2FkSWZOZWVkZWQoKnRoaXMpOwotICAg
IHJlc291cmNlLT5pbmNyZWFzZVByZWxvYWRDb3VudCgpOwotCi0gICAgaWYgKCFtX3ByZWxvYWRz
KQotICAgICAgICBtX3ByZWxvYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxMaXN0SGFzaFNldDxDYWNo
ZWRSZXNvdXJjZSo+PigpOwotICAgIG1fcHJlbG9hZHMtPmFkZChyZXNvdXJjZS5nZXQoKSk7Ci0K
LSNpZiBQUkVMT0FEX0RFQlVHCi0gICAgcHJpbnRmKCJQUkVMT0FESU5HICVzXG4iLCAgcmVzb3Vy
Y2UtPnVybCgpLmxhdGluMSgpLmRhdGEoKSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzb3VyY2U7
Ci19Ci0KLWJvb2wgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmlzUHJlbG9hZGVkKGNvbnN0IFN0cmlu
ZyYgdXJsU3RyaW5nKSBjb25zdAotewotICAgIGNvbnN0IFVSTCYgdXJsID0gbV9kb2N1bWVudC0+
Y29tcGxldGVVUkwodXJsU3RyaW5nKTsKLQotICAgIGlmIChtX3ByZWxvYWRzKSB7Ci0gICAgICAg
IGZvciAoYXV0byYgcmVzb3VyY2UgOiAqbV9wcmVsb2FkcykgewotICAgICAgICAgICAgaWYgKHJl
c291cmNlLT51cmwoKSA9PSB1cmwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIHBlbmRpbmdQcmVsb2FkIDogbV9wZW5kaW5n
UHJlbG9hZHMpIHsKLSAgICAgICAgaWYgKHBlbmRpbmdQcmVsb2FkLm1fcmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS51cmwoKSA9PSB1cmwpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpjbGVh
clByZWxvYWRzKCkKLXsKLSNpZiBQUkVMT0FEX0RFQlVHCi0gICAgcHJpbnRQcmVsb2FkU3RhdHMo
KTsKLSNlbmRpZgotICAgIGlmICghbV9wcmVsb2FkcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Zm9yIChhdXRvKiByZXNvdXJjZSA6ICptX3ByZWxvYWRzKSB7Ci0gICAgICAgIHJlc291cmNlLT5k
ZWNyZWFzZVByZWxvYWRDb3VudCgpOwotICAgICAgICBib29sIGRlbGV0ZWQgPSByZXNvdXJjZS0+
ZGVsZXRlSWZQb3NzaWJsZSgpOwotICAgICAgICBpZiAoIWRlbGV0ZWQgJiYgcmVzb3VyY2UtPnBy
ZWxvYWRSZXN1bHQoKSA9PSBDYWNoZWRSZXNvdXJjZTo6UHJlbG9hZE5vdFJlZmVyZW5jZWQpCi0g
ICAgICAgICAgICBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkucmVtb3ZlKCpyZXNvdXJjZSk7Ci0g
ICAgfQotICAgIG1fcHJlbG9hZHMgPSBudWxscHRyOwotfQotCi12b2lkIENhY2hlZFJlc291cmNl
TG9hZGVyOjpjbGVhclBlbmRpbmdQcmVsb2FkcygpCi17Ci0gICAgbV9wZW5kaW5nUHJlbG9hZHMu
Y2xlYXIoKTsKLX0KLQotI2lmIFBSRUxPQURfREVCVUcKLXZvaWQgQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXI6OnByaW50UHJlbG9hZFN0YXRzKCkKLXsKLSAgICB1bnNpZ25lZCBzY3JpcHRzID0gMDsKLSAg
ICB1bnNpZ25lZCBzY3JpcHRNaXNzZXMgPSAwOwotICAgIHVuc2lnbmVkIHN0eWxlc2hlZXRzID0g
MDsKLSAgICB1bnNpZ25lZCBzdHlsZXNoZWV0TWlzc2VzID0gMDsKLSAgICB1bnNpZ25lZCBpbWFn
ZXMgPSAwOwotICAgIHVuc2lnbmVkIGltYWdlTWlzc2VzID0gMDsKLSAgICBmb3IgKGF1dG8mIHJl
c291cmNlIDogbV9wcmVsb2FkcykgewotICAgICAgICBpZiAocmVzb3VyY2UtPnByZWxvYWRSZXN1
bHQoKSA9PSBDYWNoZWRSZXNvdXJjZTo6UHJlbG9hZE5vdFJlZmVyZW5jZWQpCi0gICAgICAgICAg
ICBwcmludGYoIiEhIFVOUkVGRVJFTkNFRCBQUkVMT0FEICVzXG4iLCByZXNvdXJjZS0+dXJsKCku
bGF0aW4xKCkuZGF0YSgpKTsKLSAgICAgICAgZWxzZSBpZiAocmVzb3VyY2UtPnByZWxvYWRSZXN1
bHQoKSA9PSBDYWNoZWRSZXNvdXJjZTo6UHJlbG9hZFJlZmVyZW5jZWRXaGlsZUNvbXBsZXRlKQot
ICAgICAgICAgICAgcHJpbnRmKCJISVQgQ09NUExFVEUgUFJFTE9BRCAlc1xuIiwgcmVzb3VyY2Ut
PnVybCgpLmxhdGluMSgpLmRhdGEoKSk7Ci0gICAgICAgIGVsc2UgaWYgKHJlc291cmNlLT5wcmVs
b2FkUmVzdWx0KCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlByZWxvYWRSZWZlcmVuY2VkV2hpbGVMb2Fk
aW5nKQotICAgICAgICAgICAgcHJpbnRmKCJISVQgTE9BRElORyBQUkVMT0FEICVzXG4iLCByZXNv
dXJjZS0+dXJsKCkubGF0aW4xKCkuZGF0YSgpKTsKLQotICAgICAgICBpZiAocmVzb3VyY2UtPnR5
cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0KSB7Ci0gICAgICAgICAgICBzY3JpcHRzKys7
Ci0gICAgICAgICAgICBpZiAocmVzb3VyY2UtPnByZWxvYWRSZXN1bHQoKSA8IENhY2hlZFJlc291
cmNlOjpQcmVsb2FkUmVmZXJlbmNlZFdoaWxlTG9hZGluZykKLSAgICAgICAgICAgICAgICBzY3Jp
cHRNaXNzZXMrKzsKLSAgICAgICAgfSBlbHNlIGlmIChyZXNvdXJjZS0+dHlwZSgpID09IENhY2hl
ZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0KSB7Ci0gICAgICAgICAgICBzdHlsZXNoZWV0cysrOwot
ICAgICAgICAgICAgaWYgKHJlc291cmNlLT5wcmVsb2FkUmVzdWx0KCkgPCBDYWNoZWRSZXNvdXJj
ZTo6UHJlbG9hZFJlZmVyZW5jZWRXaGlsZUxvYWRpbmcpCi0gICAgICAgICAgICAgICAgc3R5bGVz
aGVldE1pc3NlcysrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaW1hZ2VzKys7Ci0g
ICAgICAgICAgICBpZiAocmVzb3VyY2UtPnByZWxvYWRSZXN1bHQoKSA8IENhY2hlZFJlc291cmNl
OjpQcmVsb2FkUmVmZXJlbmNlZFdoaWxlTG9hZGluZykKLSAgICAgICAgICAgICAgICBpbWFnZU1p
c3NlcysrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlc291cmNlLT5lcnJvck9jY3VycmVk
KCkgJiYgcmVzb3VyY2UtPnByZWxvYWRSZXN1bHQoKSA9PSBDYWNoZWRSZXNvdXJjZTo6UHJlbG9h
ZE5vdFJlZmVyZW5jZWQpCi0gICAgICAgICAgICBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkucmVt
b3ZlKHJlc291cmNlKTsKLQotICAgICAgICByZXNvdXJjZS0+ZGVjcmVhc2VQcmVsb2FkQ291bnQo
KTsKLSAgICB9Ci0gICAgbV9wcmVsb2FkcyA9IG51bGxwdHI7Ci0KLSAgICBpZiAoc2NyaXB0cykK
LSAgICAgICAgcHJpbnRmKCJTQ1JJUFRTOiAlZCAoJWQgaGl0cywgaGl0IHJhdGUgJWQlJSlcbiIs
IHNjcmlwdHMsIHNjcmlwdHMgLSBzY3JpcHRNaXNzZXMsIChzY3JpcHRzIC0gc2NyaXB0TWlzc2Vz
KSAqIDEwMCAvIHNjcmlwdHMpOwotICAgIGlmIChzdHlsZXNoZWV0cykKLSAgICAgICAgcHJpbnRm
KCJTVFlMRVNIRUVUUzogJWQgKCVkIGhpdHMsIGhpdCByYXRlICVkJSUpXG4iLCBzdHlsZXNoZWV0
cywgc3R5bGVzaGVldHMgLSBzdHlsZXNoZWV0TWlzc2VzLCAoc3R5bGVzaGVldHMgLSBzdHlsZXNo
ZWV0TWlzc2VzKSAqIDEwMCAvIHN0eWxlc2hlZXRzKTsKLSAgICBpZiAoaW1hZ2VzKQotICAgICAg
ICBwcmludGYoIklNQUdFUzogICVkICglZCBoaXRzLCBoaXQgcmF0ZSAlZCUlKVxuIiwgaW1hZ2Vz
LCBpbWFnZXMgLSBpbWFnZU1pc3NlcywgKGltYWdlcyAtIGltYWdlTWlzc2VzKSAqIDEwMCAvIGlt
YWdlcyk7Ci19Ci0jZW5kaWYKLQotY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBDYWNoZWRS
ZXNvdXJjZUxvYWRlcjo6ZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygpCi17Ci0gICAgc3Rh
dGljIFJlc291cmNlTG9hZGVyT3B0aW9ucyBvcHRpb25zKFNlbmRDYWxsYmFja3MsIFNuaWZmQ29u
dGVudCwgQnVmZmVyRGF0YSwgQWxsb3dTdG9yZWRDcmVkZW50aWFscywgQ2xpZW50Q3JlZGVudGlh
bFBvbGljeTo6TWF5QXNrQ2xpZW50Rm9yQ3JlZGVudGlhbHMsIEZldGNoT3B0aW9uczo6Q3JlZGVu
dGlhbHM6OkluY2x1ZGUsIERvU2VjdXJpdHlDaGVjaywgRmV0Y2hPcHRpb25zOjpNb2RlOjpOb0Nv
cnMsIERvTm90SW5jbHVkZUNlcnRpZmljYXRlSW5mbywgQ29udGVudFNlY3VyaXR5UG9saWN5SW1w
b3NpdGlvbjo6RG9Qb2xpY3lDaGVjaywgRGVmZXJzTG9hZGluZ1BvbGljeTo6QWxsb3dEZWZlcnNM
b2FkaW5nLCBDYWNoaW5nUG9saWN5OjpBbGxvd0NhY2hpbmcpOwotICAgIHJldHVybiBvcHRpb25z
OwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2VMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZUxvYWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2M4YjM4MjgzYWRk
OWVlYjBhMzUzYTY0YTQzYWNhYTVlOTQ5MGQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZUxvYWRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjE4ICswLDAgQEAKLS8qCi0gICAgQ29w
eXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCi0gICAgQ29w
eXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgotICAgIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5IFRv
cmNoIE1vYmlsZSBJbmMuIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwotCi0gICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotICAgIFRoaXMgY2xh
c3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywg
c3R5bGUgc2hlZXRzIGFuZCBodG1sCi0gICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBt
ZW1vcnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCi0qLwotCi0jaWZuZGVmIENhY2hlZFJlc291
cmNlTG9hZGVyX2gKLSNkZWZpbmUgQ2FjaGVkUmVzb3VyY2VMb2FkZXJfaAotCi0jaW5jbHVkZSAi
Q2FjaGVQb2xpY3kuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgotI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Lmgi
Ci0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVRp
bWluZ0luZm9ybWF0aW9uLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDx3dGYvRGVx
dWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
Ci0jaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENhY2hlZENTU1N0eWxlU2hl
ZXQ7Ci1jbGFzcyBDYWNoZWRTVkdEb2N1bWVudDsKLWNsYXNzIENhY2hlZEZvbnQ7Ci1jbGFzcyBD
YWNoZWRJbWFnZTsKLWNsYXNzIENhY2hlZFJhd1Jlc291cmNlOwotY2xhc3MgQ2FjaGVkU2NyaXB0
OwotY2xhc3MgQ2FjaGVkVGV4dFRyYWNrOwotY2xhc3MgQ2FjaGVkWFNMU3R5bGVTaGVldDsKLWNs
YXNzIERvY3VtZW50OwotY2xhc3MgRG9jdW1lbnRMb2FkZXI7Ci1jbGFzcyBGcmFtZTsKLWNsYXNz
IEltYWdlTG9hZGVyOwotY2xhc3MgVVJMOwotCi0vLyBUaGUgQ2FjaGVkUmVzb3VyY2VMb2FkZXIg
cHJvdmlkZXMgYSBwZXItY29udGV4dCBpbnRlcmZhY2UgdG8gdGhlIE1lbW9yeUNhY2hlCi0vLyBh
bmQgZW5mb3JjZXMgYSBidW5jaCBvZiBzZWN1cml0eSBjaGVja3MgYW5kIHJ1bGVzIGZvciByZXNv
dXJjZSByZXZhbGlkYXRpb24uCi0vLyBJdHMgbGlmZXRpbWUgaXMgcm91Z2hseSBwZXItRG9jdW1l
bnRMb2FkZXIsIGluIHRoYXQgaXQgaXMgZ2VuZXJhbGx5IGNyZWF0ZWQKLS8vIGluIHRoZSBEb2N1
bWVudExvYWRlciBjb25zdHJ1Y3RvciBhbmQgbG9zZXMgaXRzIGFiaWxpdHkgdG8gZ2VuZXJhdGUg
bmV0d29yawotLy8gcmVxdWVzdHMgd2hlbiB0aGUgRG9jdW1lbnRMb2FkZXIgaXMgZGVzdHJveWVk
LiBEb2N1bWVudHMgYWxzbyBob2xkIGEgCi0vLyBSZWZQdHI8Q2FjaGVkUmVzb3VyY2VMb2FkZXI+
IGZvciB0aGVpciBsaWZldGltZSAoYW5kIHdpbGwgY3JlYXRlIG9uZSBpZiB0aGV5Ci0vLyBhcmUg
aW5pdGlhbGl6ZWQgd2l0aG91dCBhIEZyYW1lKSwgc28gYSBEb2N1bWVudCBjYW4ga2VlcCBhIENh
Y2hlZFJlc291cmNlTG9hZGVyCi0vLyBhbGl2ZSBwYXN0IGRldGFjaCBpZiBzY3JpcHRzIHN0aWxs
IHJlZmVyZW5jZSB0aGUgRG9jdW1lbnQuCi1jbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlciA6IHB1
YmxpYyBSZWZDb3VudGVkPENhY2hlZFJlc291cmNlTG9hZGVyPiB7Ci0gICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQ2FjaGVkUmVzb3VyY2VMb2FkZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LWZyaWVuZCBjbGFzcyBJbWFnZUxvYWRlcjsKLWZyaWVuZCBjbGFzcyBSZXNvdXJjZUNhY2hlVmFs
aWRhdGlvblN1cHByZXNzb3I7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENhY2hlZFJlc291
cmNlTG9hZGVyPiBjcmVhdGUoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyKSB7IHJldHVy
biBhZG9wdFJlZigqbmV3IENhY2hlZFJlc291cmNlTG9hZGVyKGRvY3VtZW50TG9hZGVyKSk7IH0K
LSAgICB+Q2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKLQotICAgIENhY2hlZFJlc291cmNlSGFuZGxl
PENhY2hlZEltYWdlPiByZXF1ZXN0SW1hZ2UoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAg
Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkQ1NTU3R5bGVTaGVldD4gcmVxdWVzdENTU1N0eWxl
U2hlZXQoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8
Q2FjaGVkQ1NTU3R5bGVTaGVldD4gcmVxdWVzdFVzZXJDU1NTdHlsZVNoZWV0KENhY2hlZFJlc291
cmNlUmVxdWVzdCYpOwotICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gcmVx
dWVzdFNjcmlwdChDYWNoZWRSZXNvdXJjZVJlcXVlc3QmKTsKLSAgICBDYWNoZWRSZXNvdXJjZUhh
bmRsZTxDYWNoZWRGb250PiByZXF1ZXN0Rm9udChDYWNoZWRSZXNvdXJjZVJlcXVlc3QmLCBib29s
IGlzU1ZHKTsKLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gcmVx
dWVzdE1lZGlhKENhY2hlZFJlc291cmNlUmVxdWVzdCYpOwotICAgIENhY2hlZFJlc291cmNlSGFu
ZGxlPENhY2hlZFJhd1Jlc291cmNlPiByZXF1ZXN0UmF3UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0Jik7Ci0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+IHJl
cXVlc3RNYWluUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgQ2FjaGVkUmVz
b3VyY2VIYW5kbGU8Q2FjaGVkU1ZHRG9jdW1lbnQ+IHJlcXVlc3RTVkdEb2N1bWVudChDYWNoZWRS
ZXNvdXJjZVJlcXVlc3QmKTsKLSNpZiBFTkFCTEUoWFNMVCkKLSAgICBDYWNoZWRSZXNvdXJjZUhh
bmRsZTxDYWNoZWRYU0xTdHlsZVNoZWV0PiByZXF1ZXN0WFNMU3R5bGVTaGVldChDYWNoZWRSZXNv
dXJjZVJlcXVlc3QmKTsKLSNlbmRpZgotI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQotICAgIENh
Y2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiByZXF1ZXN0TGlua1Jlc291cmNlKENh
Y2hlZFJlc291cmNlOjpUeXBlLCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QmKTsKLSNlbmRpZgotI2lm
IEVOQUJMRShWSURFT19UUkFDSykKLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRUZXh0
VHJhY2s+IHJlcXVlc3RUZXh0VHJhY2soQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Jik7Ci0jZW5kaWYK
LQotICAgIC8vIExvZ3MgYW4gYWNjZXNzIGRlbmllZCBtZXNzYWdlIHRvIHRoZSBjb25zb2xlIGZv
ciB0aGUgc3BlY2lmaWVkIFVSTC4KLSAgICB2b2lkIHByaW50QWNjZXNzRGVuaWVkTWVzc2FnZShj
b25zdCBVUkwmIHVybCkgY29uc3Q7Ci0KLSAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3Vy
Y2UoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0OwotICAgIENhY2hlZFJlc291cmNlKiBjYWNoZWRS
ZXNvdXJjZShjb25zdCBVUkwmIHVybCkgY29uc3Q7Ci0gICAgCi0gICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+PiBEb2N1bWVudFJl
c291cmNlTWFwOwotICAgIGNvbnN0IERvY3VtZW50UmVzb3VyY2VNYXAmIGFsbENhY2hlZFJlc291
cmNlcygpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnRSZXNvdXJjZXM7IH0KLQotICAgIGJvb2wg
YXV0b0xvYWRJbWFnZXMoKSBjb25zdCB7IHJldHVybiBtX2F1dG9Mb2FkSW1hZ2VzOyB9Ci0gICAg
dm9pZCBzZXRBdXRvTG9hZEltYWdlcyhib29sKTsKLQotICAgIGJvb2wgaW1hZ2VzRW5hYmxlZCgp
IGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VzRW5hYmxlZDsgfQotICAgIHZvaWQgc2V0SW1hZ2VzRW5h
YmxlZChib29sKTsKLQotICAgIGJvb2wgc2hvdWxkRGVmZXJJbWFnZUxvYWQoY29uc3QgVVJMJikg
Y29uc3Q7Ci0gICAgYm9vbCBzaG91bGRQZXJmb3JtSW1hZ2VMb2FkKGNvbnN0IFVSTCYpIGNvbnN0
OwotICAgIAotICAgIENhY2hlUG9saWN5IGNhY2hlUG9saWN5KENhY2hlZFJlc291cmNlOjpUeXBl
KSBjb25zdDsKLSAgICAKLSAgICBGcmFtZSogZnJhbWUoKSBjb25zdDsgLy8gQ2FuIGJlIG51bGwK
LSAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9IC8v
IENhbiBiZSBudWxsCi0gICAgdm9pZCBzZXREb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpIHsg
bV9kb2N1bWVudCA9IGRvY3VtZW50OyB9Ci0gICAgdm9pZCBjbGVhckRvY3VtZW50TG9hZGVyKCkg
eyBtX2RvY3VtZW50TG9hZGVyID0gbnVsbHB0cjsgfQotICAgIFNlc3Npb25JRCBzZXNzaW9uSUQo
KSBjb25zdDsKLQotICAgIHZvaWQgcmVtb3ZlQ2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2Um
KTsKLQotICAgIHZvaWQgbG9hZERvbmUoQ2FjaGVkUmVzb3VyY2UqLCBib29sIHNob3VsZFBlcmZv
cm1Qb3N0TG9hZEFjdGlvbnMgPSB0cnVlKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2Fy
YmFnZUNvbGxlY3REb2N1bWVudFJlc291cmNlcygpOwotICAgIAotICAgIHZvaWQgaW5jcmVtZW50
UmVxdWVzdENvdW50KGNvbnN0IENhY2hlZFJlc291cmNlJik7Ci0gICAgdm9pZCBkZWNyZW1lbnRS
ZXF1ZXN0Q291bnQoY29uc3QgQ2FjaGVkUmVzb3VyY2UmKTsKLSAgICBpbnQgcmVxdWVzdENvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0Q291bnQ7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgaXNQcmVsb2FkZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGNvbnN0OwotICAgIHZv
aWQgY2xlYXJQcmVsb2FkcygpOwotICAgIHZvaWQgY2xlYXJQZW5kaW5nUHJlbG9hZHMoKTsKLSAg
ICBlbnVtIFByZWxvYWRUeXBlIHsgSW1wbGljaXRQcmVsb2FkLCBFeHBsaWNpdFByZWxvYWQgfTsK
LSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gcHJlbG9hZChDYWNoZWRS
ZXNvdXJjZTo6VHlwZSwgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBjaGFy
c2V0LCBQcmVsb2FkVHlwZSk7Ci0gICAgdm9pZCBjaGVja0ZvclBlbmRpbmdQcmVsb2FkcygpOwot
ICAgIHZvaWQgcHJpbnRQcmVsb2FkU3RhdHMoKTsKLQotICAgIGJvb2wgY2FuUmVxdWVzdChDYWNo
ZWRSZXNvdXJjZTo6VHlwZSwgY29uc3QgVVJMJiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25z
JiwgYm9vbCBmb3JQcmVsb2FkID0gZmFsc2UsIGJvb2wgZGlkUmVjZWl2ZVJlZGlyZWN0UmVzcG9u
c2UgPSBmYWxzZSk7Ci0KLSAgICBzdGF0aWMgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBk
ZWZhdWx0Q2FjaGVkUmVzb3VyY2VPcHRpb25zKCk7Ci0KLSAgICB2b2lkIGRvY3VtZW50RGlkRmlu
aXNoTG9hZEV2ZW50KCk7Ci0KLSNpZiBFTkFCTEUoV0VCX1RJTUlORykKLSAgICBSZXNvdXJjZVRp
bWluZ0luZm9ybWF0aW9uJiByZXNvdXJjZVRpbWluZ0luZm9ybWF0aW9uKCkgeyByZXR1cm4gbV9y
ZXNvdXJjZVRpbWluZ0luZm87IH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IENh
Y2hlZFJlc291cmNlTG9hZGVyKERvY3VtZW50TG9hZGVyKik7Ci0KLSAgICBDYWNoZWRSZXNvdXJj
ZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gcmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpU
eXBlLCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QmKTsKLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxD
YWNoZWRSZXNvdXJjZT4gcmV2YWxpZGF0ZVJlc291cmNlKGNvbnN0IENhY2hlZFJlc291cmNlUmVx
dWVzdCYsIENhY2hlZFJlc291cmNlKik7Ci0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
UmVzb3VyY2U+IGxvYWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSwgQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0Jik7Ci0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IHJl
cXVlc3RQcmVsb2FkKENhY2hlZFJlc291cmNlOjpUeXBlLCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Qm
LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOwotCi0gICAgZW51bSBSZXZhbGlkYXRpb25Qb2xpY3kg
eyBVc2UsIFJldmFsaWRhdGUsIFJlbG9hZCwgTG9hZCB9OwotICAgIFJldmFsaWRhdGlvblBvbGlj
eSBkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3koQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIENhY2hl
ZFJlc291cmNlUmVxdWVzdCYsIENhY2hlZFJlc291cmNlKiBleGlzdGluZ1Jlc291cmNlKSBjb25z
dDsKLQotICAgIGJvb2wgdXBkYXRlQ2FjaGVkUmVzb3VyY2VXaXRoQ3VycmVudFJlcXVlc3QoQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0JiwgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+
Jik7Ci0gICAgYm9vbCBzaG91bGRDb250aW51ZUFmdGVyTm90aWZ5aW5nTG9hZGVkRnJvbU1lbW9y
eUNhY2hlKGNvbnN0IENhY2hlZFJlc291cmNlUmVxdWVzdCYsIENhY2hlZFJlc291cmNlKik7Ci0g
ICAgYm9vbCBjaGVja0luc2VjdXJlQ29udGVudChDYWNoZWRSZXNvdXJjZTo6VHlwZSwgY29uc3Qg
VVJMJikgY29uc3Q7Ci0KLSAgICB2b2lkIHBlcmZvcm1Qb3N0TG9hZEFjdGlvbnMoKTsKLQotICAg
IGJvb2wgY2xpZW50RGVmZXJzSW1hZ2UoY29uc3QgVVJMJikgY29uc3Q7Ci0gICAgdm9pZCByZWxv
YWRJbWFnZXNJZk5vdERlZmVycmVkKCk7Ci0KLSAgICBib29sIGNhblJlcXVlc3RJbkNvbnRlbnRE
aXNwb3NpdGlvbkF0dGFjaG1lbnRTYW5kYm94KENhY2hlZFJlc291cmNlOjpUeXBlLCBjb25zdCBV
UkwmKSBjb25zdDsKLSAgICAKLSAgICBIYXNoU2V0PFN0cmluZz4gbV92YWxpZGF0ZWRVUkxzOwot
ICAgIG11dGFibGUgRG9jdW1lbnRSZXNvdXJjZU1hcCBtX2RvY3VtZW50UmVzb3VyY2VzOwotICAg
IERvY3VtZW50KiBtX2RvY3VtZW50OwotICAgIERvY3VtZW50TG9hZGVyKiBtX2RvY3VtZW50TG9h
ZGVyOwotICAgIAotICAgIGludCBtX3JlcXVlc3RDb3VudDsKLSAgICAKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8TGlzdEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2UqPj4gbV9wcmVsb2FkczsKLSAgICBzdHJ1
Y3QgUGVuZGluZ1ByZWxvYWQgewotICAgICAgICBDYWNoZWRSZXNvdXJjZTo6VHlwZSBtX3R5cGU7
Ci0gICAgICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCBtX3JlcXVlc3Q7Ci0gICAgICAgIFN0cmlu
ZyBtX2NoYXJzZXQ7Ci0gICAgfTsKLSAgICBEZXF1ZTxQZW5kaW5nUHJlbG9hZD4gbV9wZW5kaW5n
UHJlbG9hZHM7Ci0KLSAgICBUaW1lciBtX2dhcmJhZ2VDb2xsZWN0RG9jdW1lbnRSZXNvdXJjZXNU
aW1lcjsKLQotI2lmIEVOQUJMRShXRUJfVElNSU5HKQotICAgIFJlc291cmNlVGltaW5nSW5mb3Jt
YXRpb24gbV9yZXNvdXJjZVRpbWluZ0luZm87Ci0jZW5kaWYKLQotICAgIC8vIDI5IGJpdHMgbGVm
dAotICAgIGJvb2wgbV9hdXRvTG9hZEltYWdlcyA6IDE7Ci0gICAgYm9vbCBtX2ltYWdlc0VuYWJs
ZWQgOiAxOwotICAgIGJvb2wgbV9hbGxvd1N0YWxlUmVzb3VyY2VzIDogMTsKLX07Ci0KLWNsYXNz
IFJlc291cmNlQ2FjaGVWYWxpZGF0aW9uU3VwcHJlc3NvciB7Ci0gICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29yKTsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBSZXNvdXJjZUNhY2hlVmFsaWRhdGlvblN1cHBy
ZXNzb3IoQ2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlcikKLSAgICAgICAgOiBtX2xvYWRlcihs
b2FkZXIpCi0gICAgICAgICwgbV9wcmV2aW91c1N0YXRlKG1fbG9hZGVyLm1fYWxsb3dTdGFsZVJl
c291cmNlcykKLSAgICB7Ci0gICAgICAgIG1fbG9hZGVyLm1fYWxsb3dTdGFsZVJlc291cmNlcyA9
IHRydWU7Ci0gICAgfQotICAgIH5SZXNvdXJjZUNhY2hlVmFsaWRhdGlvblN1cHByZXNzb3IoKQot
ICAgIHsKLSAgICAgICAgbV9sb2FkZXIubV9hbGxvd1N0YWxlUmVzb3VyY2VzID0gbV9wcmV2aW91
c1N0YXRlOwotICAgIH0KLXByaXZhdGU6Ci0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXImIG1fbG9h
ZGVyOwotICAgIGJvb2wgbV9wcmV2aW91c1N0YXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlUmVxdWVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRj
NTRiZGYxMDQ1NjE3ZDNhOGNjNzQ5MTIxYzc0Zjk3OTE1ZmIyMTcuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlUmVxdWVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZVJlcXVlc3QuaCIKLQotI2lu
Y2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVkZSAiQ3Jvc3NPcmlnaW5BY2Nl
c3NDb250cm9sLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFbGVtZW50Lmgi
Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpDYWNoZWRSZXNvdXJjZVJlcXVlc3QoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgT3B0
aW9uYWw8UmVzb3VyY2VMb2FkUHJpb3JpdHk+IHByaW9yaXR5KQotICAgIDogbV9yZXNvdXJjZVJl
cXVlc3QocmVzb3VyY2VSZXF1ZXN0KQotICAgICwgbV9jaGFyc2V0KGNoYXJzZXQpCi0gICAgLCBt
X29wdGlvbnMoQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRlZmF1bHRDYWNoZWRSZXNvdXJjZU9wdGlv
bnMoKSkKLSAgICAsIG1fcHJpb3JpdHkocHJpb3JpdHkpCi0gICAgLCBtX2ZvclByZWxvYWQoZmFs
c2UpCi0gICAgLCBtX2RlZmVyKE5vRGVmZXIpCi17Ci19Ci0KLUNhY2hlZFJlc291cmNlUmVxdWVz
dDo6Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYmIHJlc291cmNlUmVxdWVz
dCwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKQotICAgIDogbV9yZXNvdXJj
ZVJlcXVlc3QoV1RGTW92ZShyZXNvdXJjZVJlcXVlc3QpKQotICAgICwgbV9vcHRpb25zKG9wdGlv
bnMpCi0gICAgLCBtX2ZvclByZWxvYWQoZmFsc2UpCi0gICAgLCBtX2RlZmVyKE5vRGVmZXIpCi17
Ci19Ci0KLUNhY2hlZFJlc291cmNlUmVxdWVzdDo6Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0KGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBPcHRpb25hbDxSZXNvdXJjZUxvYWRQ
cmlvcml0eT4gcHJpb3JpdHkpCi0gICAgOiBtX3Jlc291cmNlUmVxdWVzdChyZXNvdXJjZVJlcXVl
c3QpCi0gICAgLCBtX29wdGlvbnMoQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRlZmF1bHRDYWNoZWRS
ZXNvdXJjZU9wdGlvbnMoKSkKLSAgICAsIG1fcHJpb3JpdHkocHJpb3JpdHkpCi0gICAgLCBtX2Zv
clByZWxvYWQoZmFsc2UpCi0gICAgLCBtX2RlZmVyKE5vRGVmZXIpCi17Ci19Ci0KLUNhY2hlZFJl
c291cmNlUmVxdWVzdDo6fkNhY2hlZFJlc291cmNlUmVxdWVzdCgpCi17Ci19Ci0KLXZvaWQgQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0OjpzZXRJbml0aWF0b3IoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVt
ZW50KQotewotICAgIEFTU0VSVCghbV9pbml0aWF0b3JFbGVtZW50ICYmIG1faW5pdGlhdG9yTmFt
ZS5pc0VtcHR5KCkpOwotICAgIG1faW5pdGlhdG9yRWxlbWVudCA9IGVsZW1lbnQ7Ci19Ci0KLXZv
aWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpzZXRJbml0aWF0b3IoY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lKQotewotICAgIEFTU0VSVCghbV9pbml0aWF0b3JFbGVtZW50ICYmIG1faW5pdGlhdG9y
TmFtZS5pc0VtcHR5KCkpOwotICAgIG1faW5pdGlhdG9yTmFtZSA9IG5hbWU7Ci19Ci0KLWNvbnN0
IEF0b21pY1N0cmluZyYgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Ojppbml0aWF0b3JOYW1lKCkgY29u
c3QKLXsKLSAgICBpZiAobV9pbml0aWF0b3JFbGVtZW50KQotICAgICAgICByZXR1cm4gbV9pbml0
aWF0b3JFbGVtZW50LT5sb2NhbE5hbWUoKTsKLSAgICBpZiAoIW1faW5pdGlhdG9yTmFtZS5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBtX2luaXRpYXRvck5hbWU7Ci0KLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBkZWZhdWx0TmFtZSgicmVzb3VyY2UiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICByZXR1cm4gZGVmYXVsdE5hbWU7Ci19
Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpzZXRBc1BvdGVudGlhbGx5Q3Jvc3NPcmln
aW4oY29uc3QgU3RyaW5nJiBtb2RlLCBEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgQVNTRVJU
KG1fb3B0aW9ucy5tb2RlID09IEZldGNoT3B0aW9uczo6TW9kZTo6Tm9Db3JzKTsKLSAgICBpZiAo
bW9kZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fb3B0aW9ucy5tb2RlID0gRmV0
Y2hPcHRpb25zOjpNb2RlOjpDb3JzOwotICAgIG1fb3B0aW9ucy5jcmVkZW50aWFscyA9IGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1vZGUsICJ1c2UtY3JlZGVudGlhbHMiKSA/IEZldGNo
T3B0aW9uczo6Q3JlZGVudGlhbHM6OkluY2x1ZGUgOiBGZXRjaE9wdGlvbnM6OkNyZWRlbnRpYWxz
OjpTYW1lT3JpZ2luOwotICAgIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzID0gZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UobW9kZSwgInVzZS1jcmVkZW50aWFscyIpID8gQWxsb3dTdG9y
ZWRDcmVkZW50aWFscyA6IERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFsczsKLQotICAgIEFTU0VS
VChkb2N1bWVudC5zZWN1cml0eU9yaWdpbigpKTsKLSAgICB1cGRhdGVSZXF1ZXN0Rm9yQWNjZXNz
Q29udHJvbChtX3Jlc291cmNlUmVxdWVzdCwgKmRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCksIG1f
b3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVx
dWVzdC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVz
dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjdlYmJiZTU4NjY3NGViYmE3Njk4
YjQ5NzgzYWQzZDhmZGZjMDIwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVl
c3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENhY2hlZFJlc291cmNlUmVxdWVz
dF9oCi0jZGVmaW5lIENhY2hlZFJlc291cmNlUmVxdWVzdF9oCi0KLSNpbmNsdWRlICJEb2N1bWVu
dExvYWRlci5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRQ
cmlvcml0eS5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyT3B0aW9ucy5oIgotI2luY2x1ZGUg
IlJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgRG9j
dW1lbnQ7Ci0KLWNsYXNzIENhY2hlZFJlc291cmNlUmVxdWVzdCB7Ci1wdWJsaWM6Ci0gICAgZW51
bSBEZWZlck9wdGlvbiB7IE5vRGVmZXIsIERlZmVycmVkQnlDbGllbnQgfTsKLQotICAgIGV4cGxp
Y2l0IENhY2hlZFJlc291cmNlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBT
dHJpbmcmIGNoYXJzZXQgPSBTdHJpbmcoKSwgT3B0aW9uYWw8UmVzb3VyY2VMb2FkUHJpb3JpdHk+
ID0gTnVsbG9wdCk7Ci0gICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYm
LCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKLSAgICBDYWNoZWRSZXNvdXJjZVJlcXVl
c3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgT3B0aW9uYWw8UmVzb3VyY2VMb2FkUHJpb3JpdHk+
KTsKLSAgICB+Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0KCk7Ci0KLSAgICBSZXNvdXJjZVJlcXVlc3Qm
IG11dGFibGVSZXNvdXJjZVJlcXVlc3QoKSB7IHJldHVybiBtX3Jlc291cmNlUmVxdWVzdDsgfQot
ICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KCkgY29uc3QgeyByZXR1
cm4gbV9yZXNvdXJjZVJlcXVlc3Q7IH0KLSAgICBjb25zdCBTdHJpbmcmIGNoYXJzZXQoKSBjb25z
dCB7IHJldHVybiBtX2NoYXJzZXQ7IH0KLSAgICB2b2lkIHNldENoYXJzZXQoY29uc3QgU3RyaW5n
JiBjaGFyc2V0KSB7IG1fY2hhcnNldCA9IGNoYXJzZXQ7IH0KLSAgICBjb25zdCBSZXNvdXJjZUxv
YWRlck9wdGlvbnMmIG9wdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX29wdGlvbnM7IH0KLSAgICB2
b2lkIHNldE9wdGlvbnMoY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKSB7IG1f
b3B0aW9ucyA9IG9wdGlvbnM7IH0KLSAgICBjb25zdCBPcHRpb25hbDxSZXNvdXJjZUxvYWRQcmlv
cml0eT4mIHByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gbV9wcmlvcml0eTsgfQotICAgIGJvb2wg
Zm9yUHJlbG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9yUHJlbG9hZDsgfQotICAgIHZvaWQgc2V0
Rm9yUHJlbG9hZChib29sIGZvclByZWxvYWQpIHsgbV9mb3JQcmVsb2FkID0gZm9yUHJlbG9hZDsg
fQotICAgIERlZmVyT3B0aW9uIGRlZmVyKCkgY29uc3QgeyByZXR1cm4gbV9kZWZlcjsgfQotICAg
IHZvaWQgc2V0RGVmZXIoRGVmZXJPcHRpb24gZGVmZXIpIHsgbV9kZWZlciA9IGRlZmVyOyB9Ci0g
ICAgdm9pZCBzZXRJbml0aWF0b3IoUGFzc1JlZlB0cjxFbGVtZW50Pik7Ci0gICAgdm9pZCBzZXRJ
bml0aWF0b3IoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKTsKLSAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGluaXRpYXRvck5hbWUoKSBjb25zdDsKLSAgICBib29sIGFsbG93c0NhY2hpbmcoKSBjb25z
dCB7IHJldHVybiBtX29wdGlvbnMuY2FjaGluZ1BvbGljeSA9PSBDYWNoaW5nUG9saWN5OjpBbGxv
d0NhY2hpbmc7IH0KLSAgICB2b2lkIHNldENhY2hpbmdQb2xpY3koQ2FjaGluZ1BvbGljeSBwb2xp
Y3kpIHsgbV9vcHRpb25zLmNhY2hpbmdQb2xpY3kgPSBwb2xpY3k7IH0KLQotICAgIHZvaWQgc2V0
QXNQb3RlbnRpYWxseUNyb3NzT3JpZ2luKGNvbnN0IFN0cmluZyYsIERvY3VtZW50Jik7Ci0KLXBy
aXZhdGU6Ci0gICAgUmVzb3VyY2VSZXF1ZXN0IG1fcmVzb3VyY2VSZXF1ZXN0OwotICAgIFN0cmlu
ZyBtX2NoYXJzZXQ7Ci0gICAgUmVzb3VyY2VMb2FkZXJPcHRpb25zIG1fb3B0aW9uczsKLSAgICBP
cHRpb25hbDxSZXNvdXJjZUxvYWRQcmlvcml0eT4gbV9wcmlvcml0eTsKLSAgICBib29sIG1fZm9y
UHJlbG9hZDsKLSAgICBEZWZlck9wdGlvbiBtX2RlZmVyOwotICAgIFJlZlB0cjxFbGVtZW50PiBt
X2luaXRpYXRvckVsZW1lbnQ7Ci0gICAgQXRvbWljU3RyaW5nIG1faW5pdGlhdG9yTmFtZTsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlh
dG9ycy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMzlhOGU1OGNkYWFkNTFm
NWFmODBlYTQ2Mzk0YmQ3YmM1MDI4MTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
UmVxdWVzdEluaXRpYXRvcnMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9yczo6
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycygpCi0gICAgOiBjc3MoImNzcyIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpCi0gICAgLCBmZXRjaCgiZmV0Y2giLCBBdG9t
aWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKQotICAgICwgaWNvbigiaWNvbiIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpCi0gICAgLCB4bWxodHRwcmVxdWVzdCgieG1s
aHR0cHJlcXVlc3QiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKQotewotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5oIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdjZmUwMWM4ZDIwMDA4MzI2YTA5MTk3ZWJmZGY0NjQ1
NzM4MWYyNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9y
cy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0
SW5pdGlhdG9yc19oCi0jZGVmaW5lIENhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnNfaAot
Ci0jaW5jbHVkZSAiVGhyZWFkR2xvYmFsRGF0YS5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21p
Y1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3RJbml0aWF0b3JzIHsKLSAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3Jz
KCk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcgY3NzOwotICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyBmZXRjaDsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcgaWNvbjsKLSAgICBjb25zdCBBdG9taWNT
dHJpbmcgeG1saHR0cHJlcXVlc3Q7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0SW5pdGlhdG9ycyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHJpdmF0
ZToKLSAgICBmcmllbmQgY2xhc3MgVGhyZWFkR2xvYmFsRGF0YTsKLX07Ci0KLWlubGluZSBjb25z
dCBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzJiBjYWNoZWRSZXNvdXJjZVJlcXVlc3RJ
bml0aWF0b3JzKCkKLXsKLSAgICByZXR1cm4gdGhyZWFkR2xvYmFsRGF0YSgpLmNhY2hlZFJlc291
cmNlUmVxdWVzdEluaXRpYXRvcnMoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdE
b2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRG9jdW1l
bnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTIzMDIwMWIwZjcxMGQzOWE1
YmRiYjFhNmQ2YTJiODUyNjA3ZDMxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdEb2N1bWVu
dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAo
QykgMjAxMCBSb2IgQnVpcyA8cndsYnVpc0BnbWFpbC5jb20+Ci0gICAgQ29weXJpZ2h0IChDKSAy
MDExIENvc21pbiBUcnV0YSA8Y3RydXRhQGdtYWlsLmNvbT4KLSAgICBDb3B5cmlnaHQgKEMpIDIw
MTIgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTIgUmVuYXRhIEhv
ZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiQ2FjaGVkU1ZHRG9jdW1lbnQuaCIKLQotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNhY2hlZFNWR0RvY3VtZW50OjpDYWNoZWRTVkdEb2N1bWVu
dChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFNlc3Npb25JRCBzZXNzaW9uSUQpCi0g
ICAgOiBDYWNoZWRSZXNvdXJjZShyZXF1ZXN0LCBTVkdEb2N1bWVudFJlc291cmNlLCBzZXNzaW9u
SUQpCi0gICAgLCBtX2RlY29kZXIoVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJhcHBsaWNh
dGlvbi94bWwiKSkKLXsKLSAgICBzZXRBY2NlcHQoImltYWdlL3N2Zyt4bWwiKTsKLX0KLQotQ2Fj
aGVkU1ZHRG9jdW1lbnQ6On5DYWNoZWRTVkdEb2N1bWVudCgpCi17Ci19Ci0KLXZvaWQgQ2FjaGVk
U1ZHRG9jdW1lbnQ6OnNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYgY2hzKQotewotICAgIG1fZGVj
b2Rlci0+c2V0RW5jb2RpbmcoY2hzLCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpFbmNvZGluZ0Zyb21I
VFRQSGVhZGVyKTsKLX0KLQotU3RyaW5nIENhY2hlZFNWR0RvY3VtZW50OjplbmNvZGluZygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKS5uYW1lKCk7Ci19Ci0KLXZv
aWQgQ2FjaGVkU1ZHRG9jdW1lbnQ6OmZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKiBkYXRhKQot
ewotICAgIGlmIChkYXRhKSB7Ci0gICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gY3JlYXRlIGEg
bmV3IGZyYW1lIGJlY2F1c2UgdGhlIG5ldyBkb2N1bWVudCBiZWxvbmdzIHRvIHRoZSBwYXJlbnQg
VXNlRWxlbWVudC4KLSAgICAgICAgbV9kb2N1bWVudCA9IFNWR0RvY3VtZW50OjpjcmVhdGUobnVs
bHB0ciwgcmVzcG9uc2UoKS51cmwoKSk7Ci0gICAgICAgIG1fZG9jdW1lbnQtPnNldENvbnRlbnQo
bV9kZWNvZGVyLT5kZWNvZGVBbmRGbHVzaChkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSkpOwot
ICAgIH0KLSAgICBDYWNoZWRSZXNvdXJjZTo6ZmluaXNoTG9hZGluZyhkYXRhKTsKLX0KLQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0RvY3VtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRG9jdW1lbnQuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI2NDJmZTNlNDM1ZmJjN2YxMTkzYmRmYjU1OTZi
MzVmNjlkOTliZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRG9jdW1lbnQuaAorKysgL2Rl
di9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDEwIFJvYiBC
dWlzIDxyd2xidWlzQGdtYWlsLmNvbT4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMTEgQ29zbWluIFRy
dXRhIDxjdHJ1dGFAZ21haWwuY29tPgotICAgIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5
IG9mIFN6ZWdlZAotICAgIENvcHlyaWdodCAoQykgMjAxMiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3
ZWJraXQub3JnPgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSovCi0KLSNpZm5kZWYgQ2FjaGVkU1ZHRG9jdW1lbnRfaAotI2RlZmluZSBDYWNo
ZWRTVkdEb2N1bWVudF9oCi0KLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgotI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgQ2FjaGVkU1ZHRG9jdW1lbnQgZmluYWwgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2UgewotcHVi
bGljOgotICAgIGV4cGxpY2l0IENhY2hlZFNWR0RvY3VtZW50KGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsIFNlc3Npb25JRCk7Ci0gICAgdmlydHVhbCB+Q2FjaGVkU1ZHRG9jdW1lbnQoKTsKLQotICAg
IFNWR0RvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQuZ2V0KCk7
IH0KLQotcHJpdmF0ZToKLSAgICBib29sIG1heVRyeVJlcGxhY2VFbmNvZGVkRGF0YSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2b2lkIHNldEVuY29kaW5nKGNvbnN0IFN0
cmluZyYpIG92ZXJyaWRlOwotICAgIFN0cmluZyBlbmNvZGluZygpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIGNvbnN0IFRleHRSZXNvdXJjZURlY29kZXIqIHRleHRSZXNvdXJjZURlY29kZXIoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX2RlY29kZXIuZ2V0KCk7IH0KLSAgICB2b2lkIGZpbmlzaExv
YWRpbmcoU2hhcmVkQnVmZmVyKikgb3ZlcnJpZGU7Ci0KLSAgICBSZWZQdHI8U1ZHRG9jdW1lbnQ+
IG1fZG9jdW1lbnQ7Ci0gICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19D
QUNIRURfUkVTT1VSQ0UoQ2FjaGVkU1ZHRG9jdW1lbnQsIENhY2hlZFJlc291cmNlOjpTVkdEb2N1
bWVudFJlc291cmNlKQotCi0jZW5kaWYgLy8gQ2FjaGVkU1ZHRG9jdW1lbnRfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0RvY3VtZW50Q2xpZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRG9jdW1lbnRDbGllbnQuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjIyZWFkMGI4MDZjMzgwNWQxZTM3NGZmZGFm
MDdmZWUyN2M0OWYyMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRG9jdW1lbnRDbGllbnQu
aAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAy
MDEwIFJvYiBCdWlzIDxyd2xidWlzQGdtYWlsLmNvbT4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMTEg
Q29zbWluIFRydXRhIDxjdHJ1dGFAZ21haWwuY29tPgotICAgIENvcHlyaWdodCAoQykgMjAxMiBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAotICAgIENvcHlyaWdodCAoQykgMjAxMiBSZW5hdGEgSG9kb3Zh
biA8cmVuaUB3ZWJraXQub3JnPgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpZm5kZWYgQ2FjaGVkU1ZHRG9jdW1lbnRDbGllbnRf
aAotI2RlZmluZSBDYWNoZWRTVkdEb2N1bWVudENsaWVudF9oCi0KLSNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZUNsaWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENhY2hlZFNW
R0RvY3VtZW50Q2xpZW50IDogcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIH5DYWNoZWRTVkdEb2N1bWVudENsaWVudCgpIHsgfQotICAgIHN0YXRpYyBD
YWNoZWRSZXNvdXJjZUNsaWVudFR5cGUgZXhwZWN0ZWRUeXBlKCkgeyByZXR1cm4gU1ZHRG9jdW1l
bnRUeXBlOyB9Ci0gICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRUeXBlIHJlc291cmNlQ2xpZW50VHlw
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGV4cGVjdGVkVHlwZSgpOyB9Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBDYWNoZWRTVkdEb2N1bWVudENsaWVudF9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRG9jdW1l
bnRSZWZlcmVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0Rv
Y3VtZW50UmVmZXJlbmNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc5MGY3
MzQ5Mzg5NmVlM2I1MjUyMWQyYTc1ZTg4NzZkZDljNTgwMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVu
dFJlZmVyZW5jZS5oIgotCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNs
dWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVx
dWVzdC5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMuaCIKLSNp
bmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNh
Y2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlOjpDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShjb25z
dCBTdHJpbmcmIHVybCkKLSAgICA6IG1fdXJsKHVybCkKLSAgICAsIG1fZG9jdW1lbnQobnVsbHB0
cikKLSAgICAsIG1fbG9hZFJlcXVlc3RlZChmYWxzZSkKLXsKLX0KLQotQ2FjaGVkU1ZHRG9jdW1l
bnRSZWZlcmVuY2U6On5DYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZSgpCi17Ci0gICAgaWYgKG1f
ZG9jdW1lbnQpCi0gICAgICAgIG1fZG9jdW1lbnQtPnJlbW92ZUNsaWVudCh0aGlzKTsKLX0KLQot
dm9pZCBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZTo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRl
ciYgbG9hZGVyLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAg
aWYgKG1fbG9hZFJlcXVlc3RlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0IHJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KGxvYWRlci5kb2N1bWVudCgpLT5jb21w
bGV0ZVVSTChtX3VybCkpLCBvcHRpb25zKTsKLSAgICByZXF1ZXN0LnNldEluaXRpYXRvcihjYWNo
ZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzKCkuY3NzKTsKLSAgICBtX2RvY3VtZW50ID0gbG9h
ZGVyLnJlcXVlc3RTVkdEb2N1bWVudChyZXF1ZXN0KTsKLSAgICBpZiAobV9kb2N1bWVudCkKLSAg
ICAgICAgbV9kb2N1bWVudC0+YWRkQ2xpZW50KHRoaXMpOwotCi0gICAgbV9sb2FkUmVxdWVzdGVk
ID0gdHJ1ZTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZjk4MGExM2Y2MTI4OTEzNThmZDZiMzYwYmFiNjlkMWZlNDE2MDg5ZC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuaAorKysgL2Rldi9udWxsCkBAIC0x
LDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlX2gK
LSNkZWZpbmUgQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2VfaAotCi0jaW5jbHVkZSAiQ2FjaGVk
UmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudENsaWVudC5oIgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIENhY2hlZFNWR0RvY3VtZW50OwotY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7Ci1z
dHJ1Y3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zOwotCi1jbGFzcyBDYWNoZWRTVkdEb2N1bWVudFJl
ZmVyZW5jZSA6IHB1YmxpYyBDYWNoZWRTVkdEb2N1bWVudENsaWVudCB7Ci1wdWJsaWM6Ci0gICAg
Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UoY29uc3QgU3RyaW5nJik7Ci0KLSAgICB2aXJ0dWFs
IH5DYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZSgpOwotCi0gICAgdm9pZCBsb2FkKENhY2hlZFJl
c291cmNlTG9hZGVyJiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJik7Ci0gICAgYm9vbCBs
b2FkUmVxdWVzdGVkKCkgY29uc3QgeyByZXR1cm4gbV9sb2FkUmVxdWVzdGVkOyB9Ci0KLSAgICBD
YWNoZWRTVkdEb2N1bWVudCogZG9jdW1lbnQoKSB7IHJldHVybiBtX2RvY3VtZW50LmdldCgpOyB9
Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nIG1fdXJsOwotICAgIENhY2hlZFJlc291cmNlSGFuZGxl
PENhY2hlZFNWR0RvY3VtZW50PiBtX2RvY3VtZW50OwotICAgIGJvb2wgbV9sb2FkUmVxdWVzdGVk
OwotfTsKLQotfTsKLQotI2VuZGlmIC8vIENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250LmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNzNiMWI2YmE0OTJkYzA1OGVlZGU5NzI2NzYxOGY5NzQ4NmJk
YzI2MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9y
Y2ggTW9iaWxlLCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2FjaGVkU1ZHRm9udC5oIgotCi0j
aWYgRU5BQkxFKFNWR19GT05UUykKLQotI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2lu
Y2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLSNpbmNsdWRlICJOb0V2ZW50RGlzcGF0Y2hBc3Nl
cnRpb24uaCIKLSNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgotI2luY2x1ZGUgIlNWR0ZvbnRFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCi0jaW5jbHVkZSAiU2hhcmVk
QnVmZmVyLmgiCi0jaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgotI2luY2x1ZGUgIlR5
cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlNWR1RvT1RGRm9udENv
bnZlcnNpb24uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1DYWNoZWRTVkdGb250OjpDYWNo
ZWRTVkdGb250KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBTZXNzaW9u
SUQgc2Vzc2lvbklEKQotICAgIDogQ2FjaGVkRm9udChyZXNvdXJjZVJlcXVlc3QsIHNlc3Npb25J
RCwgU1ZHRm9udFJlc291cmNlKQotICAgICwgbV9leHRlcm5hbFNWR0ZvbnRFbGVtZW50KG51bGxw
dHIpCi17Ci19Ci0KLVJlZlB0cjxGb250PiBDYWNoZWRTVkdGb250OjpjcmVhdGVGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIHJl
bW90ZVVSSSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgY29uc3Qg
Rm9udEZlYXR1cmVTZXR0aW5ncyYgZm9udEZhY2VGZWF0dXJlcywgY29uc3QgRm9udFZhcmlhbnRT
ZXR0aW5ncyYgZm9udEZhY2VWYXJpYW50U2V0dGluZ3MpCi17Ci0gICAgaWYgKGZpcnN0Rm9udEZh
Y2UocmVtb3RlVVJJKSkKLSAgICAgICAgcmV0dXJuIENhY2hlZEZvbnQ6OmNyZWF0ZUZvbnQoZm9u
dERlc2NyaXB0aW9uLCByZW1vdGVVUkksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYywg
Zm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VWYXJpYW50U2V0dGluZ3MpOwotICAgIHJldHVybiBu
dWxscHRyOwotfQotCi1Gb250UGxhdGZvcm1EYXRhIENhY2hlZFNWR0ZvbnQ6OnBsYXRmb3JtRGF0
YUZyb21DdXN0b21EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBi
b29sIGJvbGQsIGJvb2wgaXRhbGljLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzJiBmb250RmFj
ZUZlYXR1cmVzLCBjb25zdCBGb250VmFyaWFudFNldHRpbmdzJiBmb250RmFjZVZhcmlhbnRTZXR0
aW5ncykKLXsKLSAgICBpZiAobV9leHRlcm5hbFNWR0RvY3VtZW50KQotICAgICAgICByZXR1cm4g
Rm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgYm9s
ZCwgaXRhbGljKTsKLSAgICByZXR1cm4gQ2FjaGVkRm9udDo6cGxhdGZvcm1EYXRhRnJvbUN1c3Rv
bURhdGEoZm9udERlc2NyaXB0aW9uLCBib2xkLCBpdGFsaWMsIGZvbnRGYWNlRmVhdHVyZXMsIGZv
bnRGYWNlVmFyaWFudFNldHRpbmdzKTsKLX0KLQotYm9vbCBDYWNoZWRTVkdGb250OjplbnN1cmVD
dXN0b21Gb250RGF0YShjb25zdCBBdG9taWNTdHJpbmcmIHJlbW90ZVVSSSkKLXsKLSAgICBpZiAo
IW1fZXh0ZXJuYWxTVkdEb2N1bWVudCAmJiAhZXJyb3JPY2N1cnJlZCgpICYmICFpc0xvYWRpbmco
KSAmJiBtX2RhdGEpIHsKLSAgICAgICAgLy8gV2UgbWF5IGdldCBoZXJlIGR1cmluZyByZW5kZXIg
dHJlZSB1cGRhdGVzIHdoZW4gZXZlbnRzIGFyZSBmb3JiaWRkZW4uCi0gICAgICAgIC8vIEZyYW1l
bGVzcyBkb2N1bWVudCBjYW4ndCBydW4gc2NyaXB0cyBvciBjYWxsIGJhY2sgdG8gdGhlIGNsaWVu
dCBzbyB0aGlzIGlzIHNhZmUuCi0gICAgICAgIGF1dG8gY291bnQgPSBOb0V2ZW50RGlzcGF0Y2hB
c3NlcnRpb246OmRyb3BUZW1wb3JhcmlseSgpOwotCi0gICAgICAgIG1fZXh0ZXJuYWxTVkdEb2N1
bWVudCA9IFNWR0RvY3VtZW50OjpjcmVhdGUobnVsbHB0ciwgVVJMKCkpOwotICAgICAgICBSZWZQ
dHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNy
ZWF0ZSgiYXBwbGljYXRpb24veG1sIik7Ci0gICAgICAgIG1fZXh0ZXJuYWxTVkdEb2N1bWVudC0+
c2V0Q29udGVudChkZWNvZGVyLT5kZWNvZGVBbmRGbHVzaChtX2RhdGEtPmRhdGEoKSwgbV9kYXRh
LT5zaXplKCkpKTsKLQotICAgICAgICBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246OnJlc3RvcmVE
cm9wcGVkKGNvdW50KTsKLQotICAgICAgICBpZiAoZGVjb2Rlci0+c2F3RXJyb3IoKSkKLSAgICAg
ICAgICAgIG1fZXh0ZXJuYWxTVkdEb2N1bWVudCA9IG51bGxwdHI7Ci0gICAgICAgIGlmIChtX2V4
dGVybmFsU1ZHRG9jdW1lbnQpCi0gICAgICAgICAgICBtYXliZUluaXRpYWxpemVFeHRlcm5hbFNW
R0ZvbnRFbGVtZW50KHJlbW90ZVVSSSk7Ci0gICAgICAgIGlmICghbV9leHRlcm5hbFNWR0ZvbnRF
bGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoYXV0byBjb252
ZXJ0ZWRGb250ID0gY29udmVydFNWR1RvT1RGRm9udCgqbV9leHRlcm5hbFNWR0ZvbnRFbGVtZW50
KSkKLSAgICAgICAgICAgIG1fY29udmVydGVkRm9udCA9IFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0
b3IoY29udmVydGVkRm9udC52YWx1ZSgpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBt
X2V4dGVybmFsU1ZHRG9jdW1lbnQgPSBudWxscHRyOwotICAgICAgICAgICAgbV9leHRlcm5hbFNW
R0ZvbnRFbGVtZW50ID0gbnVsbHB0cjsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBtX2V4dGVybmFsU1ZHRG9jdW1lbnQgJiYgQ2FjaGVk
Rm9udDo6ZW5zdXJlQ3VzdG9tRm9udERhdGEobV9jb252ZXJ0ZWRGb250LmdldCgpKTsKLX0KLQot
U1ZHRm9udEVsZW1lbnQqIENhY2hlZFNWR0ZvbnQ6OmdldFNWR0ZvbnRCeUlkKGNvbnN0IFN0cmlu
ZyYgZm9udE5hbWUpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fZXh0ZXJuYWxTVkdEb2N1bWVudCk7
Ci0gICAgYXV0byBlbGVtZW50cyA9IGRlc2NlbmRhbnRzT2ZUeXBlPFNWR0ZvbnRFbGVtZW50Pigq
bV9leHRlcm5hbFNWR0RvY3VtZW50KTsKLQotICAgIGlmIChmb250TmFtZS5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBlbGVtZW50cy5maXJzdCgpOwotCi0gICAgZm9yIChhdXRvJiBlbGVtZW50
IDogZWxlbWVudHMpIHsKLSAgICAgICAgaWYgKGVsZW1lbnQuZ2V0SWRBdHRyaWJ1dGUoKSA9PSBm
b250TmFtZSkKLSAgICAgICAgICAgIHJldHVybiAmZWxlbWVudDsKLSAgICB9Ci0gICAgcmV0dXJu
IG51bGxwdHI7Ci19Ci0KLVNWR0ZvbnRFbGVtZW50KiBDYWNoZWRTVkdGb250OjptYXliZUluaXRp
YWxpemVFeHRlcm5hbFNWR0ZvbnRFbGVtZW50KGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJ
KQotewotICAgIGlmIChtX2V4dGVybmFsU1ZHRm9udEVsZW1lbnQpCi0gICAgICAgIHJldHVybiBt
X2V4dGVybmFsU1ZHRm9udEVsZW1lbnQ7Ci0gICAgU3RyaW5nIGZyYWdtZW50SWRlbnRpZmllcjsK
LSAgICBzaXplX3Qgc3RhcnQgPSByZW1vdGVVUkkuZmluZCgnIycpOwotICAgIGlmIChzdGFydCAh
PSBub3RGb3VuZCkKLSAgICAgICAgZnJhZ21lbnRJZGVudGlmaWVyID0gcmVtb3RlVVJJLnN0cmlu
ZygpLnN1YnN0cmluZyhzdGFydCArIDEpOwotICAgIG1fZXh0ZXJuYWxTVkdGb250RWxlbWVudCA9
IGdldFNWR0ZvbnRCeUlkKGZyYWdtZW50SWRlbnRpZmllcik7Ci0gICAgcmV0dXJuIG1fZXh0ZXJu
YWxTVkdGb250RWxlbWVudDsKLX0KLQotU1ZHRm9udEZhY2VFbGVtZW50KiBDYWNoZWRTVkdGb250
OjpmaXJzdEZvbnRGYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJKQotewotICAgIGlm
ICghbWF5YmVJbml0aWFsaXplRXh0ZXJuYWxTVkdGb250RWxlbWVudChyZW1vdGVVUkkpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChhdXRvKiBmaXJzdEZvbnRGYWNlID0gY2hp
bGRyZW5PZlR5cGU8U1ZHRm9udEZhY2VFbGVtZW50PigqbV9leHRlcm5hbFNWR0ZvbnRFbGVtZW50
KS5maXJzdCgpKQotICAgICAgICByZXR1cm4gZmlyc3RGb250RmFjZTsKLSAgICByZXR1cm4gbnVs
bHB0cjsKLX0KLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRTVkdGb250LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkU1ZHRm9udC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjFiYTVjMjUzN2M3
MjRiZjIyYzg0MDQzNzE0NWU0OTgyNzVkNzNiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdG
b250LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQ2FjaGVkU1ZHRm9udF9o
Ci0jZGVmaW5lIENhY2hlZFNWR0ZvbnRfaAotCi0jaWYgRU5BQkxFKFNWR19GT05UUykKLQotI2lu
Y2x1ZGUgIkNhY2hlZEZvbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTVkdG
b250RmFjZUVsZW1lbnQ7Ci0KLWNsYXNzIENhY2hlZFNWR0ZvbnQgZmluYWwgOiBwdWJsaWMgQ2Fj
aGVkRm9udCB7Ci1wdWJsaWM6Ci0gICAgQ2FjaGVkU1ZHRm9udChjb25zdCBSZXNvdXJjZVJlcXVl
c3QmLCBTZXNzaW9uSUQpOwotCi0gICAgYm9vbCBlbnN1cmVDdXN0b21Gb250RGF0YShjb25zdCBB
dG9taWNTdHJpbmcmIHJlbW90ZVVSSSkgb3ZlcnJpZGU7Ci0gICAgCi0gICAgUmVmUHRyPEZvbnQ+
IGNyZWF0ZUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiBy
ZW1vdGVVUkksIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMsIGNvbnN0
IEZvbnRGZWF0dXJlU2V0dGluZ3MmLCBjb25zdCBGb250VmFyaWFudFNldHRpbmdzJikgb3ZlcnJp
ZGU7Ci0KLXByaXZhdGU6Ci0gICAgRm9udFBsYXRmb3JtRGF0YSBwbGF0Zm9ybURhdGFGcm9tQ3Vz
dG9tRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBj
b25zdCBGb250RmVhdHVyZVNldHRpbmdzJiwgY29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYpOwot
Ci0gICAgU1ZHRm9udEVsZW1lbnQqIGdldFNWR0ZvbnRCeUlkKGNvbnN0IFN0cmluZyYpIGNvbnN0
OwotCi0gICAgU1ZHRm9udEVsZW1lbnQqIG1heWJlSW5pdGlhbGl6ZUV4dGVybmFsU1ZHRm9udEVs
ZW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiByZW1vdGVVUkkpOwotICAgIFNWR0ZvbnRGYWNlRWxl
bWVudCogZmlyc3RGb250RmFjZShjb25zdCBBdG9taWNTdHJpbmcmIHJlbW90ZVVSSSk7Ci0KLSAg
ICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2NvbnZlcnRlZEZvbnQ7Ci0gICAgUmVmUHRyPFNWR0Rv
Y3VtZW50PiBtX2V4dGVybmFsU1ZHRG9jdW1lbnQ7Ci0gICAgU1ZHRm9udEVsZW1lbnQqIG1fZXh0
ZXJuYWxTVkdGb250RWxlbWVudDsKLX07Ci0KLX0KLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19D
QUNIRURfUkVTT1VSQ0UoQ2FjaGVkU1ZHRm9udCwgQ2FjaGVkUmVzb3VyY2U6OlNWR0ZvbnRSZXNv
dXJjZSkKLQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkU2NyaXB0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ1ODRjOWU2
NDY4NTQzYzgxNzcxZDkwMWVhYjJmN2VmOGVmNjQzNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
U2NyaXB0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKgotICAgIENvcHly
aWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHly
aWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAgICBDb3B5cmln
aHQgKEMpIDIwMDIgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQotICAgIENvcHlyaWdo
dCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKLSAgICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
Ci0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLQotICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkg
bmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUgc2hlZXRzIGFuZCBodG1sCi0gICAgcGFn
ZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMu
Ci0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCi0K
LSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlQ2xpZW50V2Fsa2VyLmgiCi0jaW5jbHVkZSAiSFRUUEhlYWRlck5hbWVzLmgiCi0jaW5jbHVk
ZSAiSFRUUFBhcnNlcnMuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVk
ZSAiTWVtb3J5Q2FjaGUuaCIKLSNpbmNsdWRlICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIK
LSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVy
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ2FjaGVkU2NyaXB0OjpDYWNoZWRTY3JpcHQo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IFN0cmluZyYgY2hh
cnNldCwgU2Vzc2lvbklEIHNlc3Npb25JRCkKLSAgICA6IENhY2hlZFJlc291cmNlKHJlc291cmNl
UmVxdWVzdCwgU2NyaXB0LCBzZXNzaW9uSUQpCi0gICAgLCBtX2RlY29kZXIoVGV4dFJlc291cmNl
RGVjb2Rlcjo6Y3JlYXRlKEFTQ0lJTGl0ZXJhbCgiYXBwbGljYXRpb24vamF2YXNjcmlwdCIpLCBj
aGFyc2V0KSkKLXsKLSAgICAvLyBJdCdzIGphdmFzY3JpcHQgd2Ugd2FudC4KLSAgICAvLyBCdXQg
c29tZSB3ZWJzaXRlcyB0aGluayB0aGVpciBzY3JpcHRzIGFyZSA8c29tZSB3cm9uZyBtaW1ldHlw
ZSBoZXJlPgotICAgIC8vIGFuZCByZWZ1c2UgdG8gc2VydmUgdGhlbSBpZiB3ZSBvbmx5IGFjY2Vw
dCBhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQuCi0gICAgc2V0QWNjZXB0KCIqLyoiKTsKLX0KLQot
Q2FjaGVkU2NyaXB0Ojp+Q2FjaGVkU2NyaXB0KCkKLXsKLX0KLQotdm9pZCBDYWNoZWRTY3JpcHQ6
OnNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYgY2hzKQotewotICAgIG1fZGVjb2Rlci0+c2V0RW5j
b2RpbmcoY2hzLCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpFbmNvZGluZ0Zyb21IVFRQSGVhZGVyKTsK
LX0KLQotU3RyaW5nIENhY2hlZFNjcmlwdDo6ZW5jb2RpbmcoKSBjb25zdAotewotICAgIHJldHVy
biBtX2RlY29kZXItPmVuY29kaW5nKCkubmFtZSgpOwotfQotCi1TdHJpbmcgQ2FjaGVkU2NyaXB0
OjptaW1lVHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGV4dHJhY3RNSU1FVHlwZUZyb21NZWRp
YVR5cGUobV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRU
eXBlKSkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKLX0KLQotU3RyaW5nVmlldyBDYWNoZWRT
Y3JpcHQ6OnNjcmlwdCgpCi17Ci0gICAgaWYgKCFtX2RhdGEpCi0gICAgICAgIHJldHVybiB7IH07
Ci0KLSAgICBpZiAobV9kZWNvZGluZ1N0YXRlID09IE5ldmVyRGVjb2RlZAotICAgICAgICAmJiBU
ZXh0RW5jb2RpbmcoZW5jb2RpbmcoKSkuaXNCeXRlQmFzZWRFbmNvZGluZygpCi0gICAgICAgICYm
IG1fZGF0YS0+c2l6ZSgpCi0gICAgICAgICYmIGNoYXJhY3RlcnNBcmVBbGxBU0NJSShyZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4obV9kYXRhLT5kYXRhKCkpLCBtX2RhdGEtPnNpemUoKSkp
IHsKLQotICAgICAgICBtX2RlY29kaW5nU3RhdGUgPSBEYXRhQW5kRGVjb2RlZFN0cmluZ0hhdmVT
YW1lQnl0ZXM7Ci0KLSAgICAgICAgLy8gSWYgdGhlIGVuY29kZWQgYW5kIGRlY29kZWQgZGF0YSBh
cmUgdGhlIHNhbWUsIHRoZXJlIGlzIG5vIGRlY29kZWQgZGF0YSBjb3N0IQotICAgICAgICBzZXRE
ZWNvZGVkU2l6ZSgwKTsKLSAgICAgICAgbV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXIuc3RvcCgp
OwotCi0gICAgICAgIG1fc2NyaXB0SGFzaCA9IFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2hBbmRN
YXNrVG9wOEJpdHMocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KG1fZGF0YS0+ZGF0YSgp
KSwgbV9kYXRhLT5zaXplKCkpOwotICAgIH0KLQotICAgIGlmIChtX2RlY29kaW5nU3RhdGUgPT0g
RGF0YUFuZERlY29kZWRTdHJpbmdIYXZlU2FtZUJ5dGVzKQotICAgICAgICByZXR1cm4geyByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4obV9kYXRhLT5kYXRhKCkpLCBtX2RhdGEtPnNpemUo
KSB9OwotCi0gICAgaWYgKCFtX3NjcmlwdCkgewotICAgICAgICBtX3NjcmlwdCA9IG1fZGVjb2Rl
ci0+ZGVjb2RlQW5kRmx1c2gobV9kYXRhLT5kYXRhKCksIGVuY29kZWRTaXplKCkpOwotICAgICAg
ICBBU1NFUlQoIW1fc2NyaXB0SGFzaCB8fCBtX3NjcmlwdEhhc2ggPT0gbV9zY3JpcHQuaW1wbCgp
LT5oYXNoKCkpOwotICAgICAgICBpZiAobV9kZWNvZGluZ1N0YXRlID09IE5ldmVyRGVjb2RlZCkK
LSAgICAgICAgICAgIG1fc2NyaXB0SGFzaCA9IG1fc2NyaXB0LmltcGwoKS0+aGFzaCgpOwotICAg
ICAgICBtX2RlY29kaW5nU3RhdGUgPSBEYXRhQW5kRGVjb2RlZFN0cmluZ0hhdmVEaWZmZXJlbnRC
eXRlczsKLSAgICAgICAgc2V0RGVjb2RlZFNpemUobV9zY3JpcHQuc2l6ZUluQnl0ZXMoKSk7Ci0g
ICAgfQotCi0gICAgbV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXIucmVzdGFydCgpOwotICAgIHJl
dHVybiBtX3NjcmlwdDsKLX0KLQotdW5zaWduZWQgQ2FjaGVkU2NyaXB0OjpzY3JpcHRIYXNoKCkK
LXsKLSAgICBpZiAobV9kZWNvZGluZ1N0YXRlID09IE5ldmVyRGVjb2RlZCkKLSAgICAgICAgc2Ny
aXB0KCk7Ci0gICAgcmV0dXJuIG1fc2NyaXB0SGFzaDsKLX0KLQotdm9pZCBDYWNoZWRTY3JpcHQ6
OmZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKiBkYXRhKQotewotICAgIG1fZGF0YSA9IGRhdGE7
Ci0gICAgc2V0RW5jb2RlZFNpemUoZGF0YSA/IGRhdGEtPnNpemUoKSA6IDApOwotICAgIENhY2hl
ZFJlc291cmNlOjpmaW5pc2hMb2FkaW5nKGRhdGEpOwotfQotCi12b2lkIENhY2hlZFNjcmlwdDo6
ZGVzdHJveURlY29kZWREYXRhKCkKLXsKLSAgICBtX3NjcmlwdCA9IFN0cmluZygpOwotICAgIHNl
dERlY29kZWRTaXplKDApOwotfQotCi0jaWYgRU5BQkxFKE5PU05JRkYpCi1ib29sIENhY2hlZFNj
cmlwdDo6bWltZVR5cGVBbGxvd2VkQnlOb3NuaWZmKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGFy
c2VDb250ZW50VHlwZU9wdGlvbnNIZWFkZXIobV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRU
UEhlYWRlck5hbWU6OlhDb250ZW50VHlwZU9wdGlvbnMpKSAhPSBDb250ZW50VHlwZU9wdGlvbnNO
b3NuaWZmIHx8IE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBl
KG1pbWVUeXBlKCkpOwotfQotI2VuZGlmCi0KLWJvb2wgQ2FjaGVkU2NyaXB0OjpzaG91bGRJZ25v
cmVIVFRQU3RhdHVzQ29kZUVycm9ycygpIGNvbnN0Ci17Ci0jaWYgUExBVEZPUk0oTUFDKQotICAg
IC8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciA8cmRhcjovL3Byb2JsZW0vMTM5MTYyOTE+Ci0g
ICAgLy8gUkVHUkVTU0lPTiAocjExOTc1OSk6IEFkb2JlIEZsYXNoIFBsYXllciAic21hbGxlciIg
aW5zdGFsbGVyIHJlbGllcyBvbiB0aGUgaW5jb3JyZWN0IGZpcmluZwotICAgIC8vIG9mIGEgbG9h
ZCBldmVudCBhbmQgbmVlZHMgYW4gYXBwLXNwZWNpZmljIGhhY2sgZm9yIGNvbXBhdGliaWxpdHku
Ci0gICAgLy8gVGhlIGluc3RhbGxlciBpbiBxdWVzdGlvbiB0cmllcyB0byBsb2FkIC5qcyBmaWxl
IHRoYXQgZG9lc24ndCBleGlzdCwgY2F1c2luZyB0aGUgc2VydmVyIHRvCi0gICAgLy8gcmV0dXJu
IGEgNDA0IHJlc3BvbnNlLiBOb3JtYWxseSwgdGhpcyB3b3VsZCB0cmlnZ2VyIGFuIGVycm9yIGV2
ZW50IHRvIGJlIGRpc3BhdGNoZWQsIGJ1dCB0aGUKLSAgICAvLyBpbnN0YWxsZXIgZXhwZWN0cyBh
IGxvYWQgZXZlbnQgaW5zdGVhZCBzbyB3ZSB3b3JrIGFyb3VuZCBpdCBoZXJlLgotICAgIGlmIChN
YWNBcHBsaWNhdGlvbjo6aXNTb2xpZFN0YXRlTmV0d29ya3NEb3dubG9hZGVyKCkpCi0gICAgICAg
IHJldHVybiB0cnVlOwotI2VuZGlmCi0KLSAgICByZXR1cm4gQ2FjaGVkUmVzb3VyY2U6OnNob3Vs
ZElnbm9yZUhUVFBTdGF0dXNDb2RlRXJyb3JzKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQu
aCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZGJmMWQxNDE2YzUyMGY5MTQ3NzFkYjkzMDVmMjU4MzdiZjRj
YjFlZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmgKKysrIC9kZXYvbnVsbApAQCAt
MSw3NCArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9s
bEBtcGktaGQubXBnLmRlKQotICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11
ZWxsZXJAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2Ft
LndlaW5pZ0BnbWFpbC5jb20pCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSAgICBUaGlzIGNsYXNz
IHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0
eWxlIHNoZWV0cyBhbmQgaHRtbAotICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVt
b3J5IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgotKi8KLQotI2lmbmRlZiBDYWNoZWRTY3JpcHRf
aAotI2RlZmluZSBDYWNoZWRTY3JpcHRfaAotCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyOwotCi1j
bGFzcyBDYWNoZWRTY3JpcHQgZmluYWwgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2UgewotcHVibGlj
OgotICAgIENhY2hlZFNjcmlwdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcm
IGNoYXJzZXQsIFNlc3Npb25JRCk7Ci0gICAgdmlydHVhbCB+Q2FjaGVkU2NyaXB0KCk7Ci0KLSAg
ICBTdHJpbmdWaWV3IHNjcmlwdCgpOwotICAgIHVuc2lnbmVkIHNjcmlwdEhhc2goKTsKLQotICAg
IFN0cmluZyBtaW1lVHlwZSgpIGNvbnN0OwotCi0jaWYgRU5BQkxFKE5PU05JRkYpCi0gICAgYm9v
bCBtaW1lVHlwZUFsbG93ZWRCeU5vc25pZmYoKSBjb25zdDsKLSNlbmRpZgotCi1wcml2YXRlOgot
ICAgIGJvb2wgbWF5VHJ5UmVwbGFjZUVuY29kZWREYXRhKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQotCi0gICAgYm9vbCBzaG91bGRJZ25vcmVIVFRQU3RhdHVzQ29kZUVycm9ycygp
IGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmKSBv
dmVycmlkZTsKLSAgICBTdHJpbmcgZW5jb2RpbmcoKSBjb25zdCBvdmVycmlkZTsKLSAgICBjb25z
dCBUZXh0UmVzb3VyY2VEZWNvZGVyKiB0ZXh0UmVzb3VyY2VEZWNvZGVyKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9kZWNvZGVyLmdldCgpOyB9Ci0gICAgdm9pZCBmaW5pc2hMb2FkaW5nKFNo
YXJlZEJ1ZmZlciopIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoKSBv
dmVycmlkZTsKLQotICAgIFN0cmluZyBtX3NjcmlwdDsKLSAgICB1bnNpZ25lZCBtX3NjcmlwdEhh
c2ggeyAwIH07Ci0KLSAgICBlbnVtIERlY29kaW5nU3RhdGUgeyBOZXZlckRlY29kZWQsIERhdGFB
bmREZWNvZGVkU3RyaW5nSGF2ZVNhbWVCeXRlcywgRGF0YUFuZERlY29kZWRTdHJpbmdIYXZlRGlm
ZmVyZW50Qnl0ZXMgfTsKLSAgICBEZWNvZGluZ1N0YXRlIG1fZGVjb2RpbmdTdGF0ZSB7IE5ldmVy
RGVjb2RlZCB9OwotCi0gICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19D
QUNIRURfUkVTT1VSQ0UoQ2FjaGVkU2NyaXB0LCBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0KQotCi0j
ZW5kaWYgLy8gQ2FjaGVkU2NyaXB0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRTdHlsZVNoZWV0Q2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkU3R5bGVTaGVldENsaWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAyYWEyOTJhNzFkZGRlYzlhNGI1NDkyY2YyNmU0YWY5OWVmZTEyZTI4Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRTdHlsZVNoZWV0Q2xpZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OCAr
MCwwIEBACi0vKgotIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQu
bXBnLmRlKQotIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9y
Zz4KLSBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotIAotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAKLSBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAKLSBUaGlzIGNsYXNz
IHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0
eWxlIHNoZWV0cyBhbmQgaHRtbAotIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5
IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgotICovCi0KLSNpZm5kZWYgQ2FjaGVkU3R5bGVTaGVl
dENsaWVudF9oCi0jZGVmaW5lIENhY2hlZFN0eWxlU2hlZXRDbGllbnRfaAotCi0jaW5jbHVkZSAi
Q2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENhY2hlZENTU1N0eWxlU2hlZXQ7Ci1jbGFzcyBVUkw7
Ci0KLWNsYXNzIENhY2hlZFN0eWxlU2hlZXRDbGllbnQgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VD
bGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgfkNhY2hlZFN0eWxlU2hlZXRDbGllbnQoKSB7
IH0KLSAgICBzdGF0aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnRUeXBlIGV4cGVjdGVkVHlwZSgpIHsg
cmV0dXJuIFN0eWxlU2hlZXRUeXBlOyB9Ci0gICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRUeXBlIHJl
c291cmNlQ2xpZW50VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGV4cGVjdGVkVHlwZSgp
OyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldENTU1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiAvKiBo
cmVmICovLCBjb25zdCBVUkwmIC8qIGJhc2VVUkwgKi8sIGNvbnN0IFN0cmluZyYgLyogY2hhcnNl
dCAqLywgY29uc3QgQ2FjaGVkQ1NTU3R5bGVTaGVldCopIHsgfQotICAgIHZpcnR1YWwgdm9pZCBz
ZXRYU0xTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgLyogaHJlZiAqLywgY29uc3QgVVJMJiAvKiBi
YXNlVVJMICovLCBjb25zdCBTdHJpbmcmIC8qIHNoZWV0ICovKSB7IH0KLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIENhY2hlZFN0eWxlU2hlZXRDbGllbnRfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFRleHRUcmFjay5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkVGV4dFRyYWNrLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVjYjRhZTgyNGEzMDM4ODU2NThiYjg2OTcwZmVlNzg4
ZTlkOTRmMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkVGV4dFRyYWNrLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0K
LSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0KLSNpbmNsdWRlICJDYWNoZWRUZXh0VHJhY2suaCIK
LQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2VDbGllbnRXYWxrZXIuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgot
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1DYWNoZWRUZXh0VHJhY2s6OkNhY2hlZFRleHRU
cmFjayhjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgU2Vzc2lvbklEIHNl
c3Npb25JRCkKLSAgICA6IENhY2hlZFJlc291cmNlKHJlc291cmNlUmVxdWVzdCwgVGV4dFRyYWNr
UmVzb3VyY2UsIHNlc3Npb25JRCkKLXsKLX0KLQotdm9pZCBDYWNoZWRUZXh0VHJhY2s6OnVwZGF0
ZURhdGEoU2hhcmVkQnVmZmVyKiBkYXRhKQotewotICAgIEFTU0VSVChkYXRhQnVmZmVyaW5nUG9s
aWN5KCkgPT0gQnVmZmVyRGF0YSk7Ci0gICAgbV9kYXRhID0gZGF0YTsKLSAgICBzZXRFbmNvZGVk
U2l6ZShkYXRhID8gZGF0YS0+c2l6ZSgpIDogMCk7Ci0KLSAgICBDYWNoZWRSZXNvdXJjZUNsaWVu
dFdhbGtlcjxDYWNoZWRSZXNvdXJjZUNsaWVudD4gd2Fsa2VyKG1fY2xpZW50cyk7Ci0gICAgd2hp
bGUgKENhY2hlZFJlc291cmNlQ2xpZW50KiBjbGllbnQgPSB3YWxrZXIubmV4dCgpKQotICAgICAg
ICBjbGllbnQtPmRlcHJlY2F0ZWREaWRSZWNlaXZlQ2FjaGVkUmVzb3VyY2UodGhpcyk7Ci19Ci0K
LXZvaWQgQ2FjaGVkVGV4dFRyYWNrOjphZGREYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYgZGF0YSkK
LXsKLSAgICB1cGRhdGVEYXRhKCZkYXRhKTsKLSAgICBDYWNoZWRSZXNvdXJjZTo6YWRkRGF0YUJ1
ZmZlcihkYXRhKTsKLX0KLQotdm9pZCBDYWNoZWRUZXh0VHJhY2s6OmZpbmlzaExvYWRpbmcoU2hh
cmVkQnVmZmVyKiBkYXRhKQotewotICAgIHVwZGF0ZURhdGEoZGF0YSk7Ci0gICAgQ2FjaGVkUmVz
b3VyY2U6OmZpbmlzaExvYWRpbmcoZGF0YSk7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkVGV4dFRyYWNrLmggYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkVGV4dFRyYWNrLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGY0ZTUzNGQzNTBjYWVkM2ZhNjNjYTA5MzBmZDgyYmVhZmUyNjBhMDYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFRleHRUcmFjay5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ2FjaGVkVGV4dFRyYWNrX2gKLSNkZWZpbmUg
Q2FjaGVkVGV4dFRyYWNrX2gKLQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLQotI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlLmgiCi0jaW5jbHVkZSAiVGV4dEZsYWdzLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgQ2FjaGVkVGV4dFRyYWNrIGZpbmFsIDogcHVibGljIENhY2hlZFJl
c291cmNlIHsKLXB1YmxpYzoKLSAgICBDYWNoZWRUZXh0VHJhY2soY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwgU2Vzc2lvbklEKTsKLQotcHJpdmF0ZToKLSAgICBib29sIG1heVRyeVJlcGxhY2VFbmNv
ZGVkRGF0YSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2b2lkIGFkZERh
dGFCdWZmZXIoU2hhcmVkQnVmZmVyJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaW5pc2hMb2FkaW5n
KFNoYXJlZEJ1ZmZlciopIG92ZXJyaWRlOwotCi0gICAgdm9pZCB1cGRhdGVEYXRhKFNoYXJlZEJ1
ZmZlciopOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0NBQ0hFRF9SRVNPVVJDRShDYWNoZWRUZXh0VHJhY2ssIENhY2hlZFJlc291cmNlOjpU
ZXh0VHJhY2tSZXNvdXJjZSkKLQotI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKLQotI2Vu
ZGlmIC8vIENhY2hlZFRleHRUcmFja19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGZiYzE0ZmZmMjYwNzhjOGQyOWI2OGQyMmU5MjU4MGI0NWQ1M2IxNDkuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAs
MCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhk
Lm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtk
ZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2Rl
Lm9yZykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0Bn
bWFpbC5jb20pCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQot
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVz
IGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxlIHNoZWV0
cyBhbmQgaHRtbAotICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hl
IGZvciB0aGVzZSBvYmplY3RzLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkNhY2hlZFhTTFN0eWxlU2hlZXQuaCIKLQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50
V2Fsa2VyLmgiCi0jaW5jbHVkZSAiQ2FjaGVkU3R5bGVTaGVldENsaWVudC5oIgotI2luY2x1ZGUg
IlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgRU5BQkxFKFhTTFQpCi0KLUNhY2hlZFhTTFN0eWxlU2hl
ZXQ6OkNhY2hlZFhTTFN0eWxlU2hlZXQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJl
cXVlc3QsIFNlc3Npb25JRCBzZXNzaW9uSUQpCi0gICAgOiBDYWNoZWRSZXNvdXJjZShyZXNvdXJj
ZVJlcXVlc3QsIFhTTFN0eWxlU2hlZXQsIHNlc3Npb25JRCkKLSAgICAsIG1fZGVjb2RlcihUZXh0
UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQveHNsIikpCi17Ci0gICAgLy8gSXQncyBYTUwg
d2Ugd2FudC4KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWNjZXB0IG1vcmUgZ2VuZXJhbCB4
bWwgZm9ybWF0cyAqLyoreG1sLCBpbWFnZS9zdmcreG1sIGZvciBleGFtcGxlLgotICAgIHNldEFj
Y2VwdCgidGV4dC94bWwsIGFwcGxpY2F0aW9uL3htbCwgYXBwbGljYXRpb24veGh0bWwreG1sLCB0
ZXh0L3hzbCwgYXBwbGljYXRpb24vcnNzK3htbCwgYXBwbGljYXRpb24vYXRvbSt4bWwiKTsKLX0K
LQotQ2FjaGVkWFNMU3R5bGVTaGVldDo6fkNhY2hlZFhTTFN0eWxlU2hlZXQoKQotewotfQotCi12
b2lkIENhY2hlZFhTTFN0eWxlU2hlZXQ6OmRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVu
dCogYykKLXsgIAotICAgIEFTU0VSVChjLT5yZXNvdXJjZUNsaWVudFR5cGUoKSA9PSBDYWNoZWRT
dHlsZVNoZWV0Q2xpZW50OjpleHBlY3RlZFR5cGUoKSk7Ci0gICAgaWYgKCFpc0xvYWRpbmcoKSkK
LSAgICAgICAgc3RhdGljX2Nhc3Q8Q2FjaGVkU3R5bGVTaGVldENsaWVudCo+KGMpLT5zZXRYU0xT
dHlsZVNoZWV0KG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLCBtX3Jlc3BvbnNlLnVybCgpLCBtX3No
ZWV0KTsKLX0KLQotdm9pZCBDYWNoZWRYU0xTdHlsZVNoZWV0OjpzZXRFbmNvZGluZyhjb25zdCBT
dHJpbmcmIGNocykKLXsKLSAgICBtX2RlY29kZXItPnNldEVuY29kaW5nKGNocywgVGV4dFJlc291
cmNlRGVjb2Rlcjo6RW5jb2RpbmdGcm9tSFRUUEhlYWRlcik7Ci19Ci0KLVN0cmluZyBDYWNoZWRY
U0xTdHlsZVNoZWV0OjplbmNvZGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVjb2Rlci0+
ZW5jb2RpbmcoKS5uYW1lKCk7Ci19Ci0KLXZvaWQgQ2FjaGVkWFNMU3R5bGVTaGVldDo6ZmluaXNo
TG9hZGluZyhTaGFyZWRCdWZmZXIqIGRhdGEpCi17Ci0gICAgbV9kYXRhID0gZGF0YTsKLSAgICBz
ZXRFbmNvZGVkU2l6ZShkYXRhID8gZGF0YS0+c2l6ZSgpIDogMCk7Ci0gICAgaWYgKGRhdGEpCi0g
ICAgICAgIG1fc2hlZXQgPSBtX2RlY29kZXItPmRlY29kZUFuZEZsdXNoKGRhdGEtPmRhdGEoKSwg
ZW5jb2RlZFNpemUoKSk7Ci0gICAgc2V0TG9hZGluZyhmYWxzZSk7Ci0gICAgY2hlY2tOb3RpZnko
KTsKLX0KLQotdm9pZCBDYWNoZWRYU0xTdHlsZVNoZWV0OjpjaGVja05vdGlmeSgpCi17Ci0gICAg
aWYgKGlzTG9hZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQ2FjaGVkUmVzb3Vy
Y2VDbGllbnRXYWxrZXI8Q2FjaGVkU3R5bGVTaGVldENsaWVudD4gdyhtX2NsaWVudHMpOwotICAg
IHdoaWxlIChDYWNoZWRTdHlsZVNoZWV0Q2xpZW50KiBjID0gdy5uZXh0KCkpCi0gICAgICAgIGMt
PnNldFhTTFN0eWxlU2hlZXQobV9yZXNvdXJjZVJlcXVlc3QudXJsKCksIG1fcmVzcG9uc2UudXJs
KCksIG1fc2hlZXQpOwotfQotCi0jZW5kaWYKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDhlY2ZmNDVlZjRkZjFmMTkxN2JiOGM0OTQ1ZmYyZmE5ZDY2OGY1NmQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICsw
LDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1o
ZC5tcGcuZGUpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxlckBr
ZGUub3JnPgotICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2Vpbmln
QGdtYWlsLmNvbSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
Ci0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotICAgIFRoaXMgY2xhc3MgcHJvdmlk
ZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUgc2hl
ZXRzIGFuZCBodG1sCi0gICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkgY2Fj
aGUgZm9yIHRoZXNlIG9iamVjdHMuCi0qLwotCi0jaWZuZGVmIENhY2hlZFhTTFN0eWxlU2hlZXRf
aAotI2RlZmluZSBDYWNoZWRYU0xTdHlsZVNoZWV0X2gKLQotI2lmIEVOQUJMRShYU0xUKQotCi0j
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBUZXh0UmVzb3VyY2VEZWNvZGVyOwotCi1jbGFzcyBDYWNoZWRYU0xTdHlsZVNoZWV0IGZpbmFs
IDogcHVibGljIENhY2hlZFJlc291cmNlIHsKLXB1YmxpYzoKLSAgICBDYWNoZWRYU0xTdHlsZVNo
ZWV0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFNlc3Npb25JRCk7Ci0gICAgdmlydHVhbCB+Q2Fj
aGVkWFNMU3R5bGVTaGVldCgpOwotCi0gICAgY29uc3QgU3RyaW5nJiBzaGVldCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2hlZXQ7IH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIGNoZWNrTm90aWZ5KCkgb3Zl
cnJpZGU7Ci0gICAgYm9vbCBtYXlUcnlSZXBsYWNlRW5jb2RlZERhdGEoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdm9pZCBkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VD
bGllbnQqKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYpIG92
ZXJyaWRlOwotICAgIFN0cmluZyBlbmNvZGluZygpIGNvbnN0IG92ZXJyaWRlOwotICAgIGNvbnN0
IFRleHRSZXNvdXJjZURlY29kZXIqIHRleHRSZXNvdXJjZURlY29kZXIoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX2RlY29kZXIuZ2V0KCk7IH0KLSAgICB2b2lkIGZpbmlzaExvYWRpbmcoU2hh
cmVkQnVmZmVyKikgb3ZlcnJpZGU7Ci0KLSAgICBTdHJpbmcgbV9zaGVldDsKLSAgICBSZWZQdHI8
VGV4dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBQ0hFRF9SRVNPVVJDRShDYWNoZWRYU0xT
dHlsZVNoZWV0LCBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldCkKLQotI2VuZGlmIC8vIEVO
QUJMRShYU0xUKQotCi0jZW5kaWYgLy8gQ2FjaGVkWFNMU3R5bGVTaGVldF9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNjkzNTAxZTRiMjlmNmI4MjlhNjI1MThhODVkODUwYjFlZjA0NmRmYy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODAwICswLDAg
QEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5t
cGcuZGUpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUu
b3JnKQotICAgIENvcHlyaWdodCAoQykgMjAwMiBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5v
cmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiTWVtb3J5Q2FjaGUuaCIKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVk
ZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJDYWNoZWRJbWFnZUNsaWVudC5oIgotI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIK
LSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVk
ZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUg
IkltYWdlLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlB1YmxpY1N1ZmZpeC5o
IgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgIldvcmtlckdsb2JhbFNjb3Bl
LmgiCi0jaW5jbHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKLSNpbmNsdWRlICJXb3JrZXJUaHJl
YWQuaCIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgot
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgaW50IGNE
ZWZhdWx0Q2FjaGVDYXBhY2l0eSA9IDgxOTIgKiAxMDI0Owotc3RhdGljIGNvbnN0IGRvdWJsZSBj
TWluRGVsYXlCZWZvcmVMaXZlRGVjb2RlZFBydW5lID0gMTsgLy8gU2Vjb25kcy4KLXN0YXRpYyBj
b25zdCBmbG9hdCBjVGFyZ2V0UHJ1bmVQZXJjZW50YWdlID0gLjk1ZjsgLy8gUGVyY2VudGFnZSBv
ZiBjYXBhY2l0eSB0b3dhcmQgd2hpY2ggd2UgcHJ1bmUsIHRvIGF2b2lkIGltbWVkaWF0ZWx5IHBy
dW5pbmcgYWdhaW4uCi1zdGF0aWMgY29uc3QgYXV0byBkZWZhdWx0RGVjb2RlZERhdGFEZWxldGlv
bkludGVydmFsID0gc3RkOjpjaHJvbm86OnNlY29uZHMgeyAwIH07Ci0KLU1lbW9yeUNhY2hlJiBN
ZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkKLXsKLSAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQo
KSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNhY2hlPiBtZW1vcnlDYWNoZTsK
LSAgICByZXR1cm4gbWVtb3J5Q2FjaGU7Ci19Ci0KLU1lbW9yeUNhY2hlOjpNZW1vcnlDYWNoZSgp
Ci0gICAgOiBtX2Rpc2FibGVkKGZhbHNlKQotICAgICwgbV9pblBydW5lUmVzb3VyY2VzKGZhbHNl
KQotICAgICwgbV9jYXBhY2l0eShjRGVmYXVsdENhY2hlQ2FwYWNpdHkpCi0gICAgLCBtX21pbkRl
YWRDYXBhY2l0eSgwKQotICAgICwgbV9tYXhEZWFkQ2FwYWNpdHkoY0RlZmF1bHRDYWNoZUNhcGFj
aXR5KQotICAgICwgbV9kZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKGRlZmF1bHREZWNv
ZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwpCi0gICAgLCBtX2xpdmVTaXplKDApCi0gICAgLCBtX2Rl
YWRTaXplKDApCi0gICAgLCBtX3BydW5lVGltZXIoKnRoaXMsICZNZW1vcnlDYWNoZTo6cHJ1bmUp
Ci17Ci19Ci0KLWF1dG8gTWVtb3J5Q2FjaGU6OnNlc3Npb25SZXNvdXJjZU1hcChTZXNzaW9uSUQg
c2Vzc2lvbklEKSBjb25zdCAtPiBDYWNoZWRSZXNvdXJjZU1hcCoKLXsKLSAgICBBU1NFUlQoc2Vz
c2lvbklELmlzVmFsaWQoKSk7Ci0gICAgcmV0dXJuIG1fc2Vzc2lvblJlc291cmNlcy5nZXQoc2Vz
c2lvbklEKTsKLX0KLQotYXV0byBNZW1vcnlDYWNoZTo6ZW5zdXJlU2Vzc2lvblJlc291cmNlTWFw
KFNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IENhY2hlZFJlc291cmNlTWFwJgotewotICAgIEFTU0VS
VChzZXNzaW9uSUQuaXNWYWxpZCgpKTsKLSAgICBhdXRvJiBtYXAgPSBtX3Nlc3Npb25SZXNvdXJj
ZXMuYWRkKHNlc3Npb25JRCwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAgIGlmICghbWFw
KQotICAgICAgICBtYXAgPSBzdGQ6Om1ha2VfdW5pcXVlPENhY2hlZFJlc291cmNlTWFwPigpOwot
ICAgIHJldHVybiAqbWFwOwotfQotCi1VUkwgTWVtb3J5Q2FjaGU6OnJlbW92ZUZyYWdtZW50SWRl
bnRpZmllcklmTmVlZGVkKGNvbnN0IFVSTCYgb3JpZ2luYWxVUkwpCi17Ci0gICAgaWYgKCFvcmln
aW5hbFVSTC5oYXNGcmFnbWVudElkZW50aWZpZXIoKSkKLSAgICAgICAgcmV0dXJuIG9yaWdpbmFs
VVJMOwotICAgIC8vIFN0cmlwIGF3YXkgZnJhZ21lbnQgaWRlbnRpZmllciBmcm9tIEhUVFAgVVJM
cy4KLSAgICAvLyBEYXRhIFVSTHMgbXVzdCBiZSB1bm1vZGlmaWVkLiBGb3IgZmlsZSBhbmQgY3Vz
dG9tIFVSTHMgY2xpZW50cyBtYXkgZXhwZWN0IHJlc291cmNlcyAKLSAgICAvLyB0byBiZSB1bmlx
dWUgZXZlbiB3aGVuIHRoZXkgZGlmZmVyIGJ5IHRoZSBmcmFnbWVudCBpZGVudGlmaWVyIG9ubHku
Ci0gICAgaWYgKCFvcmlnaW5hbFVSTC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAgICAg
IHJldHVybiBvcmlnaW5hbFVSTDsKLSAgICBVUkwgdXJsID0gb3JpZ2luYWxVUkw7Ci0gICAgdXJs
LnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwotICAgIHJldHVybiB1cmw7Ci19Ci0KLWJvb2wg
TWVtb3J5Q2FjaGU6OmFkZChDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpCi17Ci0gICAgaWYgKGRp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFTU0VSVChXVEY6OmlzTWFp
blRocmVhZCgpKTsKLQotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCi0gICAgYXV0byBr
ZXkgPSBzdGQ6Om1ha2VfcGFpcihyZXNvdXJjZS51cmwoKSwgcmVzb3VyY2UuY2FjaGVQYXJ0aXRp
b24oKSk7Ci0jZWxzZQotICAgIGF1dG8mIGtleSA9IHJlc291cmNlLnVybCgpOwotI2VuZGlmCi0g
ICAgZW5zdXJlU2Vzc2lvblJlc291cmNlTWFwKHJlc291cmNlLnNlc3Npb25JRCgpKS5zZXQoa2V5
LCAmcmVzb3VyY2UpOwotICAgIHJlc291cmNlLnNldEluQ2FjaGUodHJ1ZSk7Ci0gICAgCi0gICAg
cmVzb3VyY2VBY2Nlc3NlZChyZXNvdXJjZSk7Ci0gICAgCi0gICAgTE9HKFJlc291cmNlTG9hZGlu
ZywgIk1lbW9yeUNhY2hlOjphZGQgQWRkZWQgJyVzJywgcmVzb3VyY2UgJXBcbiIsIHJlc291cmNl
LnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSwgJnJlc291cmNlKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBNZW1vcnlDYWNoZTo6cmV2YWxpZGF0aW9uU3VjY2VlZGVkKENhY2hl
ZFJlc291cmNlJiByZXZhbGlkYXRpbmdSZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UpCi17Ci0gICAgQVNTRVJUKHJldmFsaWRhdGluZ1Jlc291cmNlLnJlc291cmNlVG9S
ZXZhbGlkYXRlKCkpOwotICAgIENhY2hlZFJlc291cmNlJiByZXNvdXJjZSA9ICpyZXZhbGlkYXRp
bmdSZXNvdXJjZS5yZXNvdXJjZVRvUmV2YWxpZGF0ZSgpOwotICAgIEFTU0VSVCghcmVzb3VyY2Uu
aW5DYWNoZSgpKTsKLSAgICBBU1NFUlQocmVzb3VyY2UuaXNMb2FkZWQoKSk7Ci0KLSAgICAvLyBD
YWxsaW5nIHJlbW92ZSgpIGNhbiBwb3RlbnRpYWxseSBkZWxldGUgcmV2YWxpZGF0aW5nUmVzb3Vy
Y2UsIHdoaWNoIHdlIHVzZQotICAgIC8vIGJlbG93LiBUaGlzIG11c3RuJ3QgYmUgdGhlIGNhc2Ug
c2luY2UgcmV2YWxpZGF0aW9uIG1lYW5zIGl0IGlzIGxvYWRlZAotICAgIC8vIGFuZCBzbyBjYW5E
ZWxldGUoKSBpcyBmYWxzZS4KLSAgICBBU1NFUlQoIXJldmFsaWRhdGluZ1Jlc291cmNlLmNhbkRl
bGV0ZSgpKTsKLQotICAgIHJlbW92ZShyZXZhbGlkYXRpbmdSZXNvdXJjZSk7Ci0KLSAgICBhdXRv
JiByZXNvdXJjZXMgPSBlbnN1cmVTZXNzaW9uUmVzb3VyY2VNYXAocmVzb3VyY2Uuc2Vzc2lvbklE
KCkpOwotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCi0gICAgYXV0byBrZXkgPSBzdGQ6
Om1ha2VfcGFpcihyZXNvdXJjZS51cmwoKSwgcmVzb3VyY2UuY2FjaGVQYXJ0aXRpb24oKSk7Ci0j
ZWxzZQotICAgIGF1dG8mIGtleSA9IHJlc291cmNlLnVybCgpOwotI2VuZGlmCi0gICAgQVNTRVJU
KCFyZXNvdXJjZXMuZ2V0KGtleSkpOwotICAgIHJlc291cmNlcy5zZXQoa2V5LCAmcmVzb3VyY2Up
OwotICAgIHJlc291cmNlLnNldEluQ2FjaGUodHJ1ZSk7Ci0gICAgcmVzb3VyY2UudXBkYXRlUmVz
cG9uc2VBZnRlclJldmFsaWRhdGlvbihyZXNwb25zZSk7Ci0gICAgaW5zZXJ0SW5MUlVMaXN0KHJl
c291cmNlKTsKLSAgICBpbnQgZGVsdGEgPSByZXNvdXJjZS5zaXplKCk7Ci0gICAgaWYgKHJlc291
cmNlLmRlY29kZWRTaXplKCkgJiYgcmVzb3VyY2UuaGFzQ2xpZW50cygpKQotICAgICAgICBpbnNl
cnRJbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdChyZXNvdXJjZSk7Ci0gICAgaWYgKGRlbHRhKQot
ICAgICAgICBhZGp1c3RTaXplKHJlc291cmNlLmhhc0NsaWVudHMoKSwgZGVsdGEpOwotICAgIAot
ICAgIHJldmFsaWRhdGluZ1Jlc291cmNlLnN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3Vy
Y2UoKTsKLSAgICBBU1NFUlQoIXJldmFsaWRhdGluZ1Jlc291cmNlLm1fZGVsZXRlZCk7Ci0gICAg
Ly8gdGhpcyBkZWxldGVzIHRoZSByZXZhbGlkYXRpbmcgcmVzb3VyY2UKLSAgICByZXZhbGlkYXRp
bmdSZXNvdXJjZS5jbGVhclJlc291cmNlVG9SZXZhbGlkYXRlKCk7Ci19Ci0KLXZvaWQgTWVtb3J5
Q2FjaGU6OnJldmFsaWRhdGlvbkZhaWxlZChDYWNoZWRSZXNvdXJjZSYgcmV2YWxpZGF0aW5nUmVz
b3VyY2UpCi17Ci0gICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOwotICAgIExPRyhSZXNv
dXJjZUxvYWRpbmcsICJSZXZhbGlkYXRpb24gZmFpbGVkIGZvciAlcCIsICZyZXZhbGlkYXRpbmdS
ZXNvdXJjZSk7Ci0gICAgQVNTRVJUKHJldmFsaWRhdGluZ1Jlc291cmNlLnJlc291cmNlVG9SZXZh
bGlkYXRlKCkpOwotICAgIHJldmFsaWRhdGluZ1Jlc291cmNlLmNsZWFyUmVzb3VyY2VUb1JldmFs
aWRhdGUoKTsKLX0KLQotQ2FjaGVkUmVzb3VyY2UqIE1lbW9yeUNhY2hlOjpyZXNvdXJjZUZvclJl
cXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTZXNzaW9uSUQgc2Vzc2lvbklE
KQotewotICAgIGF1dG8qIHJlc291cmNlcyA9IHNlc3Npb25SZXNvdXJjZU1hcChzZXNzaW9uSUQp
OwotICAgIGlmICghcmVzb3VyY2VzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1
cm4gcmVzb3VyY2VGb3JSZXF1ZXN0SW1wbChyZXF1ZXN0LCAqcmVzb3VyY2VzKTsKLX0KLQotQ2Fj
aGVkUmVzb3VyY2UqIE1lbW9yeUNhY2hlOjpyZXNvdXJjZUZvclJlcXVlc3RJbXBsKGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgQ2FjaGVkUmVzb3VyY2VNYXAmIHJlc291cmNlcykKLXsK
LSAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7Ci0gICAgVVJMIHVybCA9IHJlbW92ZUZy
YWdtZW50SWRlbnRpZmllcklmTmVlZGVkKHJlcXVlc3QudXJsKCkpOwotCi0jaWYgRU5BQkxFKENB
Q0hFX1BBUlRJVElPTklORykKLSAgICBhdXRvIGtleSA9IHN0ZDo6bWFrZV9wYWlyKHVybCwgcmVx
dWVzdC5jYWNoZVBhcnRpdGlvbigpKTsKLSNlbHNlCi0gICAgYXV0byYga2V5ID0gdXJsOwotI2Vu
ZGlmCi0gICAgcmV0dXJuIHJlc291cmNlcy5nZXQoa2V5KTsKLX0KLQotdW5zaWduZWQgTWVtb3J5
Q2FjaGU6OmRlYWRDYXBhY2l0eSgpIGNvbnN0IAotewotICAgIC8vIERlYWQgcmVzb3VyY2UgY2Fw
YWNpdHkgaXMgd2hhdGV2ZXIgc3BhY2UgaXMgbm90IG9jY3VwaWVkIGJ5IGxpdmUgcmVzb3VyY2Vz
LCBib3VuZGVkIGJ5IGFuIGluZGVwZW5kZW50IG1pbmltdW0gYW5kIG1heGltdW0uCi0gICAgdW5z
aWduZWQgY2FwYWNpdHkgPSBtX2NhcGFjaXR5IC0gc3RkOjptaW4obV9saXZlU2l6ZSwgbV9jYXBh
Y2l0eSk7IC8vIFN0YXJ0IHdpdGggYXZhaWxhYmxlIGNhcGFjaXR5LgotICAgIGNhcGFjaXR5ID0g
c3RkOjptYXgoY2FwYWNpdHksIG1fbWluRGVhZENhcGFjaXR5KTsgLy8gTWFrZSBzdXJlIGl0J3Mg
YWJvdmUgdGhlIG1pbmltdW0uCi0gICAgY2FwYWNpdHkgPSBzdGQ6Om1pbihjYXBhY2l0eSwgbV9t
YXhEZWFkQ2FwYWNpdHkpOyAvLyBNYWtlIHN1cmUgaXQncyBiZWxvdyB0aGUgbWF4aW11bS4KLSAg
ICByZXR1cm4gY2FwYWNpdHk7Ci19Ci0KLXVuc2lnbmVkIE1lbW9yeUNhY2hlOjpsaXZlQ2FwYWNp
dHkoKSBjb25zdCAKLXsgCi0gICAgLy8gTGl2ZSByZXNvdXJjZSBjYXBhY2l0eSBpcyB3aGF0ZXZl
ciBpcyBsZWZ0IG92ZXIgYWZ0ZXIgY2FsY3VsYXRpbmcgZGVhZCByZXNvdXJjZSBjYXBhY2l0eS4K
LSAgICByZXR1cm4gbV9jYXBhY2l0eSAtIGRlYWRDYXBhY2l0eSgpOwotfQotCi1zdGF0aWMgQ2Fj
aGVkSW1hZ2VDbGllbnQmIGR1bW15Q2FjaGVkSW1hZ2VDbGllbnQoKQotewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxDYWNoZWRJbWFnZUNsaWVudD4gY2xpZW50OwotICAgIHJldHVybiBjbGll
bnQ7Ci19Ci0KLWJvb2wgTWVtb3J5Q2FjaGU6OmFkZEltYWdlVG9DYWNoZShOYXRpdmVJbWFnZVB0
ciYmIGltYWdlLCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBkb21haW5Gb3JDYWNoZVBh
cnRpdGlvbikKLXsKLSAgICBBU1NFUlQoaW1hZ2UpOwotICAgIFNlc3Npb25JRCBzZXNzaW9uSUQg
PSBTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKTsKLSAgICByZW1vdmVJbWFnZUZyb21DYWNo
ZSh1cmwsIGRvbWFpbkZvckNhY2hlUGFydGl0aW9uKTsgLy8gUmVtb3ZlIGNhY2hlIGVudHJ5IGlm
IGl0IGFscmVhZHkgZXhpc3RzLgotCi0gICAgUmVmUHRyPEJpdG1hcEltYWdlPiBiaXRtYXBJbWFn
ZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSksIG51bGxwdHIpOwotICAgIGlm
ICghYml0bWFwSW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN0ZDo6dW5pcXVl
X3B0cjxDYWNoZWRJbWFnZT4gY2FjaGVkSW1hZ2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENhY2hlZElt
YWdlPih1cmwsIGJpdG1hcEltYWdlLmdldCgpLCBDYWNoZWRJbWFnZTo6TWFudWFsbHlDYWNoZWQs
IHNlc3Npb25JRCk7Ci0KLSAgICBjYWNoZWRJbWFnZS0+YWRkQ2xpZW50KCZkdW1teUNhY2hlZElt
YWdlQ2xpZW50KCkpOwotICAgIGNhY2hlZEltYWdlLT5zZXREZWNvZGVkU2l6ZShiaXRtYXBJbWFn
ZS0+ZGVjb2RlZFNpemUoKSk7Ci0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKLSAgICBj
YWNoZWRJbWFnZS0+cmVzb3VyY2VSZXF1ZXN0KCkuc2V0RG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24o
ZG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24pOwotI2VuZGlmCi0gICAgcmV0dXJuIGFkZCgqY2FjaGVk
SW1hZ2UucmVsZWFzZSgpKTsKLX0KLQotdm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlSW1hZ2VGcm9t
Q2FjaGUoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgZG9tYWluRm9yQ2FjaGVQYXJ0aXRp
b24pCi17Ci0gICAgYXV0byogcmVzb3VyY2VzID0gc2Vzc2lvblJlc291cmNlTWFwKFNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLSAgICBpZiAoIXJlc291cmNlcykKLSAgICAgICAgcmV0
dXJuOwotCi0jaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKLSAgICBhdXRvIGtleSA9IHN0
ZDo6bWFrZV9wYWlyKHVybCwgUmVzb3VyY2VSZXF1ZXN0OjpwYXJ0aXRpb25OYW1lKGRvbWFpbkZv
ckNhY2hlUGFydGl0aW9uKSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShkb21haW5Gb3JDYWNo
ZVBhcnRpdGlvbik7Ci0gICAgYXV0byYga2V5ID0gdXJsOwotI2VuZGlmCi0gICAgQ2FjaGVkUmVz
b3VyY2UqIHJlc291cmNlID0gcmVzb3VyY2VzLT5nZXQoa2V5KTsKLSAgICBpZiAoIXJlc291cmNl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBBIHJlc291cmNlIGV4aXN0cyBhbmQgaXMgbm90
IGEgbWFudWFsbHkgY2FjaGVkIGltYWdlLCBzbyBqdXN0IHJlbW92ZSBpdC4KLSAgICBpZiAoIWlz
PENhY2hlZEltYWdlPigqcmVzb3VyY2UpIHx8ICFkb3duY2FzdDxDYWNoZWRJbWFnZT4oKnJlc291
cmNlKS5pc01hbnVhbGx5Q2FjaGVkKCkpIHsKLSAgICAgICAgcmVtb3ZlKCpyZXNvdXJjZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBSZW1vdmluZyB0aGUgbGFzdCBjbGllbnQg
b2YgYSBDYWNoZWRJbWFnZSB0dXJucyB0aGUgcmVzb3VyY2UKLSAgICAvLyBpbnRvIGEgZGVhZCBy
ZXNvdXJjZSB3aGljaCB3aWxsIGV2ZW50dWFsbHkgYmUgZXZpY3RlZCB3aGVuCi0gICAgLy8gZGVh
ZCByZXNvdXJjZXMgYXJlIHBydW5lZC4gVGhhdCBtaWdodCBiZSBpbW1lZGlhdGVseSBzaW5jZQot
ICAgIC8vIHJlbW92aW5nIHRoZSBsYXN0IGNsaWVudCB0cmlnZ2VycyBhIE1lbW9yeUNhY2hlOjpw
cnVuZSwgc28gdGhlCi0gICAgLy8gcmVzb3VyY2UgbWF5IGJlIGRlbGV0ZWQgYWZ0ZXIgdGhpcyBj
YWxsLgotICAgIGRvd25jYXN0PENhY2hlZEltYWdlPigqcmVzb3VyY2UpLnJlbW92ZUNsaWVudCgm
ZHVtbXlDYWNoZWRJbWFnZUNsaWVudCgpKTsKLX0KLQotdm9pZCBNZW1vcnlDYWNoZTo6cHJ1bmVM
aXZlUmVzb3VyY2VzKGJvb2wgc2hvdWxkRGVzdHJveURlY29kZWREYXRhRm9yQWxsTGl2ZVJlc291
cmNlcykKLXsKLSAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IHNob3VsZERlc3Ryb3lEZWNvZGVkRGF0
YUZvckFsbExpdmVSZXNvdXJjZXMgPyAwIDogbGl2ZUNhcGFjaXR5KCk7Ci0gICAgaWYgKGNhcGFj
aXR5ICYmIG1fbGl2ZVNpemUgPD0gY2FwYWNpdHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVu
c2lnbmVkIHRhcmdldFNpemUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2FwYWNpdHkgKiBjVGFy
Z2V0UHJ1bmVQZXJjZW50YWdlKTsgLy8gQ3V0IGJ5IGEgcGVyY2VudGFnZSB0byBhdm9pZCBpbW1l
ZGlhdGVseSBwcnVuaW5nIGFnYWluLgotCi0gICAgcHJ1bmVMaXZlUmVzb3VyY2VzVG9TaXplKHRh
cmdldFNpemUsIHNob3VsZERlc3Ryb3lEZWNvZGVkRGF0YUZvckFsbExpdmVSZXNvdXJjZXMpOwot
fQotCi12b2lkIE1lbW9yeUNhY2hlOjpmb3JFYWNoUmVzb3VyY2UoY29uc3Qgc3RkOjpmdW5jdGlv
bjx2b2lkKENhY2hlZFJlc291cmNlJik+JiBmdW5jdGlvbikKLXsKLSAgICBmb3IgKGF1dG8mIHVu
cHJvdGVjdGVkTFJVTGlzdCA6IG1fYWxsUmVzb3VyY2VzKSB7Ci0gICAgICAgIFZlY3RvcjxDYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4+IGxydUxpc3Q7Ci0gICAgICAgIGNvcHlU
b1ZlY3RvcigqdW5wcm90ZWN0ZWRMUlVMaXN0LCBscnVMaXN0KTsKLSAgICAgICAgZm9yIChhdXRv
JiByZXNvdXJjZSA6IGxydUxpc3QpCi0gICAgICAgICAgICBmdW5jdGlvbigqcmVzb3VyY2UpOwot
ICAgIH0KLX0KLQotdm9pZCBNZW1vcnlDYWNoZTo6Zm9yRWFjaFNlc3Npb25SZXNvdXJjZShTZXNz
aW9uSUQgc2Vzc2lvbklELCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKENhY2hlZFJlc291cmNl
Jik+JiBmdW5jdGlvbikKLXsKLSAgICBhdXRvIGl0ID0gbV9zZXNzaW9uUmVzb3VyY2VzLmZpbmQo
c2Vzc2lvbklEKTsKLSAgICBpZiAoaXQgPT0gbV9zZXNzaW9uUmVzb3VyY2VzLmVuZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVz
b3VyY2U+PiByZXNvdXJjZXNGb3JTZXNzaW9uOwotICAgIGNvcHlWYWx1ZXNUb1ZlY3RvcigqaXQt
PnZhbHVlLCByZXNvdXJjZXNGb3JTZXNzaW9uKTsKLQotICAgIGZvciAoYXV0byYgcmVzb3VyY2Ug
OiByZXNvdXJjZXNGb3JTZXNzaW9uKQotICAgICAgICBmdW5jdGlvbigqcmVzb3VyY2UpOwotfQot
Ci12b2lkIE1lbW9yeUNhY2hlOjpkZXN0cm95RGVjb2RlZERhdGFGb3JBbGxJbWFnZXMoKQotewot
ICAgIE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5mb3JFYWNoUmVzb3VyY2UoW10oQ2FjaGVkUmVz
b3VyY2UmIHJlc291cmNlKSB7Ci0gICAgICAgIGlmIChyZXNvdXJjZS5pc0ltYWdlKCkpCi0gICAg
ICAgICAgICByZXNvdXJjZS5kZXN0cm95RGVjb2RlZERhdGEoKTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBNZW1vcnlDYWNoZTo6cHJ1bmVMaXZlUmVzb3VyY2VzVG9TaXplKHVuc2lnbmVkIHRhcmdldFNp
emUsIGJvb2wgc2hvdWxkRGVzdHJveURlY29kZWREYXRhRm9yQWxsTGl2ZVJlc291cmNlcykKLXsK
LSAgICBpZiAobV9pblBydW5lUmVzb3VyY2VzKQotICAgICAgICByZXR1cm47Ci0gICAgVGVtcG9y
YXJ5Q2hhbmdlPGJvb2w+IHJlZW50cmFuY3lQcm90ZWN0b3IobV9pblBydW5lUmVzb3VyY2VzLCB0
cnVlKTsKLQotICAgIGRvdWJsZSBjdXJyZW50VGltZSA9IEZyYW1lVmlldzo6Y3VycmVudFBhaW50
VGltZVN0YW1wKCk7Ci0gICAgaWYgKCFjdXJyZW50VGltZSkgLy8gSW4gY2FzZSBwcnVuZSBpcyBj
YWxsZWQgZGlyZWN0bHksIG91dHNpZGUgb2YgYSBGcmFtZSBwYWludC4KLSAgICAgICAgY3VycmVu
dFRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKLSAgICAKLSAgICAvLyBEZXN0
cm95IGFueSBkZWNvZGVkIGRhdGEgaW4gbGl2ZSBvYmplY3RzIHRoYXQgd2UgY2FuLgotICAgIC8v
IFN0YXJ0IGZyb20gdGhlIGhlYWQsIHNpbmNlIHRoaXMgaXMgdGhlIGxlYXN0IHJlY2VudGx5IGFj
Y2Vzc2VkIG9mIHRoZSBvYmplY3RzLgotCi0gICAgLy8gVGhlIGxpc3QgbWlnaHQgbm90IGJlIHNv
cnRlZCBieSB0aGUgbV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWUuIFRoZSBpbXBhY3QKLSAgICAvLyBv
ZiB0aGlzIHdlYWtlciBpbnZhcmlhbnQgaXMgbWlub3IgYXMgdGhlIGJlbG93IGlmIHN0YXRlbWVu
dCB0byBjaGVjayB0aGUKLSAgICAvLyBlbGFwc2VkVGltZSB3aWxsIGV2YWx1YXRlIHRvIGZhbHNl
IGFzIHRoZSBjdXJyZW50VGltZSB3aWxsIGJlIGEgbG90Ci0gICAgLy8gZ3JlYXRlciB0aGFuIHRo
ZSBjdXJyZW50LT5tX2xhc3REZWNvZGVkQWNjZXNzVGltZS4KLSAgICAvLyBGb3IgbW9yZSBkZXRh
aWxzIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMjA5Ci0g
ICAgYXV0byBpdCA9IG1fbGl2ZURlY29kZWRSZXNvdXJjZXMuYmVnaW4oKTsKLSAgICB3aGlsZSAo
aXQgIT0gbV9saXZlRGVjb2RlZFJlc291cmNlcy5lbmQoKSkgewotICAgICAgICBhdXRvKiBjdXJy
ZW50ID0gKml0OwotCi0gICAgICAgIC8vIEluY3JlbWVudCB0aGUgaXRlcmF0b3Igbm93IGJlY2F1
c2UgdGhlIGNhbGwgdG8gZGVzdHJveURlY29kZWREYXRhKCkgYmVsb3cKLSAgICAgICAgLy8gbWF5
IGNhdXNlIGEgY2FsbCB0byBMaXN0SGFzaFNldDo6cmVtb3ZlKCkgYW5kIGludmFsaWRhdGUgdGhl
IGN1cnJlbnQKLSAgICAgICAgLy8gaXRlcmF0b3IuIE5vdGUgdGhhdCB0aGlzIGlzIHNhZmUgYmVj
YXVzZSB1bmxpa2UgaXRlcmF0aW9uIG9mIG1vc3QKLSAgICAgICAgLy8gV1RGIEhhc2ggZGF0YSBz
dHJ1Y3R1cmVzLCBpdGVyYXRpb24gaXMgZ3VhcmFudGVlZCBzYWZlIGFnYWluc3QgbXV0YXRpb24K
LSAgICAgICAgLy8gb2YgdGhlIExpc3RIYXNoU2V0LCBleGNlcHQgZm9yIHJlbW92YWwgb2YgdGhl
IGl0ZW0gY3VycmVudGx5IHBvaW50ZWQgdG8KLSAgICAgICAgLy8gYnkgYSBnaXZlbiBpdGVyYXRv
ci4KLSAgICAgICAgKytpdDsKLQotICAgICAgICBBU1NFUlQoY3VycmVudC0+aGFzQ2xpZW50cygp
KTsKLSAgICAgICAgaWYgKGN1cnJlbnQtPmlzTG9hZGVkKCkgJiYgY3VycmVudC0+ZGVjb2RlZFNp
emUoKSkgewotICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSByZW1haW5pbmcgcmVz
b3VyY2VzIGFyZSB0b28gbmV3IHRvIHBydW5lLgotICAgICAgICAgICAgZG91YmxlIGVsYXBzZWRU
aW1lID0gY3VycmVudFRpbWUgLSBjdXJyZW50LT5tX2xhc3REZWNvZGVkQWNjZXNzVGltZTsKLSAg
ICAgICAgICAgIGlmICghc2hvdWxkRGVzdHJveURlY29kZWREYXRhRm9yQWxsTGl2ZVJlc291cmNl
cyAmJiBlbGFwc2VkVGltZSA8IGNNaW5EZWxheUJlZm9yZUxpdmVEZWNvZGVkUHJ1bmUpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAvLyBEZXN0cm95IG91ciBkZWNvZGVk
IGRhdGEuIFRoaXMgd2lsbCByZW1vdmUgdXMgZnJvbSBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzLCBh
bmQgcG9zc2libHkgbW92ZSB1cwotICAgICAgICAgICAgLy8gdG8gYSBkaWZmZXJlbnQgTFJVIGxp
c3QgaW4gbV9hbGxSZXNvdXJjZXMuCi0gICAgICAgICAgICBjdXJyZW50LT5kZXN0cm95RGVjb2Rl
ZERhdGEoKTsKLQotICAgICAgICAgICAgaWYgKHRhcmdldFNpemUgJiYgbV9saXZlU2l6ZSA8PSB0
YXJnZXRTaXplKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotdm9pZCBNZW1vcnlDYWNoZTo6cHJ1bmVEZWFkUmVzb3VyY2VzKCkKLXsKLSAgICB1bnNpZ25l
ZCBjYXBhY2l0eSA9IGRlYWRDYXBhY2l0eSgpOwotICAgIGlmIChjYXBhY2l0eSAmJiBtX2RlYWRT
aXplIDw9IGNhcGFjaXR5KQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCB0YXJnZXRT
aXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNhcGFjaXR5ICogY1RhcmdldFBydW5lUGVyY2Vu
dGFnZSk7IC8vIEN1dCBieSBhIHBlcmNlbnRhZ2UgdG8gYXZvaWQgaW1tZWRpYXRlbHkgcHJ1bmlu
ZyBhZ2Fpbi4KLSAgICBwcnVuZURlYWRSZXNvdXJjZXNUb1NpemUodGFyZ2V0U2l6ZSk7Ci19Ci0K
LXZvaWQgTWVtb3J5Q2FjaGU6OnBydW5lRGVhZFJlc291cmNlc1RvU2l6ZSh1bnNpZ25lZCB0YXJn
ZXRTaXplKQotewotICAgIGlmIChtX2luUHJ1bmVSZXNvdXJjZXMpCi0gICAgICAgIHJldHVybjsK
LSAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gcmVlbnRyYW5jeVByb3RlY3RvcihtX2luUHJ1bmVS
ZXNvdXJjZXMsIHRydWUpOwotIAotICAgIGlmICh0YXJnZXRTaXplICYmIG1fZGVhZFNpemUgPD0g
dGFyZ2V0U2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBjYW5TaHJpbmtMUlVMaXN0
cyA9IHRydWU7Ci0gICAgZm9yIChpbnQgaSA9IG1fYWxsUmVzb3VyY2VzLnNpemUoKSAtIDE7IGkg
Pj0gMDsgaS0tKSB7Ci0gICAgICAgIC8vIE1ha2UgYSBjb3B5IG9mIHRoZSBMUlVMaXN0IGZpcnN0
IChhbmQgcmVmIHRoZSByZXNvdXJjZXMpIGFzIGNhbGxpbmcKLSAgICAgICAgLy8gZGVzdHJveURl
Y29kZWREYXRhKCkgY2FuIGFsdGVyIHRoZSBMUlVMaXN0LgotICAgICAgICBWZWN0b3I8Q2FjaGVk
UmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+PiBscnVMaXN0OwotICAgICAgICBjb3B5VG9W
ZWN0b3IoKm1fYWxsUmVzb3VyY2VzW2ldLCBscnVMaXN0KTsKLQotICAgICAgICAvLyBGaXJzdCBm
bHVzaCBhbGwgdGhlIGRlY29kZWQgZGF0YSBpbiB0aGlzIHF1ZXVlLgotICAgICAgICAvLyBSZW1v
dmUgZnJvbSB0aGUgaGVhZCwgc2luY2UgdGhpcyBpcyB0aGUgbGVhc3QgZnJlcXVlbnRseSBhY2Nl
c3NlZCBvZiB0aGUgb2JqZWN0cy4KLSAgICAgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IGxydUxp
c3QpIHsKLSAgICAgICAgICAgIGlmICghcmVzb3VyY2UtPmluQ2FjaGUoKSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKCFyZXNvdXJjZS0+aGFzQ2xpZW50cygp
ICYmICFyZXNvdXJjZS0+aXNQcmVsb2FkZWQoKSAmJiByZXNvdXJjZS0+aXNMb2FkZWQoKSkgewot
ICAgICAgICAgICAgICAgIC8vIERlc3Ryb3kgb3VyIGRlY29kZWQgZGF0YS4gVGhpcyB3aWxsIHJl
bW92ZSB1cyBmcm9tIAotICAgICAgICAgICAgICAgIC8vIG1fbGl2ZURlY29kZWRSZXNvdXJjZXMs
IGFuZCBwb3NzaWJseSBtb3ZlIHVzIHRvIGEgZGlmZmVyZW50IAotICAgICAgICAgICAgICAgIC8v
IExSVSBsaXN0IGluIG1fYWxsUmVzb3VyY2VzLgotICAgICAgICAgICAgICAgIHJlc291cmNlLT5k
ZXN0cm95RGVjb2RlZERhdGEoKTsKLQotICAgICAgICAgICAgICAgIGlmICh0YXJnZXRTaXplICYm
IG1fZGVhZFNpemUgPD0gdGFyZ2V0U2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTm93IGV2aWN0IG9iamVjdHMg
ZnJvbSB0aGlzIGxpc3QuCi0gICAgICAgIC8vIFJlbW92ZSBmcm9tIHRoZSBoZWFkLCBzaW5jZSB0
aGlzIGlzIHRoZSBsZWFzdCBmcmVxdWVudGx5IGFjY2Vzc2VkIG9mIHRoZSBvYmplY3RzLgotICAg
ICAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogbHJ1TGlzdCkgewotICAgICAgICAgICAgaWYgKCFy
ZXNvdXJjZS0+aW5DYWNoZSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
ICAgICBpZiAoIXJlc291cmNlLT5oYXNDbGllbnRzKCkgJiYgIXJlc291cmNlLT5pc1ByZWxvYWRl
ZCgpICYmICFyZXNvdXJjZS0+aXNDYWNoZVZhbGlkYXRvcigpKSB7Ci0gICAgICAgICAgICAgICAg
cmVtb3ZlKCpyZXNvdXJjZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRhcmdldFNpemUgJiYgbV9k
ZWFkU2l6ZSA8PSB0YXJnZXRTaXplKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAvLyBTaHJpbmsgdGhl
IHZlY3RvciBiYWNrIGRvd24gc28gd2UgZG9uJ3Qgd2FzdGUgdGltZSBpbnNwZWN0aW5nCi0gICAg
ICAgIC8vIGVtcHR5IExSVSBsaXN0cyBvbiBmdXR1cmUgcHJ1bmVzLgotICAgICAgICBpZiAoIW1f
YWxsUmVzb3VyY2VzW2ldLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjYW5TaHJpbmtMUlVMaXN0
cyA9IGZhbHNlOwotICAgICAgICBlbHNlIGlmIChjYW5TaHJpbmtMUlVMaXN0cykKLSAgICAgICAg
ICAgIG1fYWxsUmVzb3VyY2VzLnNocmluayhpKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVtb3J5Q2Fj
aGU6OnNldENhcGFjaXRpZXModW5zaWduZWQgbWluRGVhZEJ5dGVzLCB1bnNpZ25lZCBtYXhEZWFk
Qnl0ZXMsIHVuc2lnbmVkIHRvdGFsQnl0ZXMpCi17Ci0gICAgQVNTRVJUKG1pbkRlYWRCeXRlcyA8
PSBtYXhEZWFkQnl0ZXMpOwotICAgIEFTU0VSVChtYXhEZWFkQnl0ZXMgPD0gdG90YWxCeXRlcyk7
Ci0gICAgbV9taW5EZWFkQ2FwYWNpdHkgPSBtaW5EZWFkQnl0ZXM7Ci0gICAgbV9tYXhEZWFkQ2Fw
YWNpdHkgPSBtYXhEZWFkQnl0ZXM7Ci0gICAgbV9jYXBhY2l0eSA9IHRvdGFsQnl0ZXM7Ci0gICAg
cHJ1bmUoKTsKLX0KLQotdm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlKENhY2hlZFJlc291cmNlJiBy
ZXNvdXJjZSkKLXsKLSAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7Ci0gICAgTE9HKFJl
c291cmNlTG9hZGluZywgIkV2aWN0aW5nIHJlc291cmNlICVwIGZvciAnJXMnIGZyb20gY2FjaGUi
LCAmcmVzb3VyY2UsIHJlc291cmNlLnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7Ci0g
ICAgLy8gVGhlIHJlc291cmNlIG1heSBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGJ5IHNvbWVv
bmUgb3RoZXIgdGhhbiBvdXIgY2FsbGVyLAotICAgIC8vIHdobyBuZWVkZWQgYSBmcmVzaCBjb3B5
IGZvciBhIHJlbG9hZC4gU2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjQ3OSNjNj4uCi0gICAgaWYgKGF1dG8qIHJlc291cmNlcyA9IHNlc3Npb25SZXNvdXJjZU1h
cChyZXNvdXJjZS5zZXNzaW9uSUQoKSkpIHsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5H
KQotICAgICAgICBhdXRvIGtleSA9IHN0ZDo6bWFrZV9wYWlyKHJlc291cmNlLnVybCgpLCByZXNv
dXJjZS5jYWNoZVBhcnRpdGlvbigpKTsKLSNlbHNlCi0gICAgICAgIGF1dG8mIGtleSA9IHJlc291
cmNlLnVybCgpOwotI2VuZGlmCi0gICAgICAgIGlmIChyZXNvdXJjZS5pbkNhY2hlKCkpIHsKLSAg
ICAgICAgICAgIC8vIFJlbW92ZSByZXNvdXJjZSBmcm9tIHRoZSByZXNvdXJjZSBtYXAuCi0gICAg
ICAgICAgICByZXNvdXJjZXMtPnJlbW92ZShrZXkpOwotICAgICAgICAgICAgcmVzb3VyY2Uuc2V0
SW5DYWNoZShmYWxzZSk7Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZSByZXNvdXJjZSBtYXAgaXMg
bm93IGVtcHR5LCByZW1vdmUgaXQgZnJvbSBtX3Nlc3Npb25SZXNvdXJjZXMuCi0gICAgICAgICAg
ICBpZiAocmVzb3VyY2VzLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgbV9zZXNzaW9uUmVz
b3VyY2VzLnJlbW92ZShyZXNvdXJjZS5zZXNzaW9uSUQoKSk7Ci0KLSAgICAgICAgICAgIC8vIFJl
bW92ZSBmcm9tIHRoZSBhcHByb3ByaWF0ZSBMUlUgbGlzdC4KLSAgICAgICAgICAgIHJlbW92ZUZy
b21MUlVMaXN0KHJlc291cmNlKTsKLSAgICAgICAgICAgIHJlbW92ZUZyb21MaXZlRGVjb2RlZFJl
c291cmNlc0xpc3QocmVzb3VyY2UpOwotICAgICAgICAgICAgYWRqdXN0U2l6ZShyZXNvdXJjZS5o
YXNDbGllbnRzKCksIC1zdGF0aWNfY2FzdDxpbnQ+KHJlc291cmNlLnNpemUoKSkpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIEFTU0VSVChyZXNvdXJjZXMtPmdldChrZXkpICE9ICZyZXNv
dXJjZSk7Ci0gICAgfQotCi0gICAgcmVzb3VyY2UuZGVsZXRlSWZQb3NzaWJsZSgpOwotfQotCi1h
dXRvIE1lbW9yeUNhY2hlOjpscnVMaXN0Rm9yKENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkgLT4g
TFJVTGlzdCYKLXsKLSAgICB1bnNpZ25lZCBhY2Nlc3NDb3VudCA9IHN0ZDo6bWF4KHJlc291cmNl
LmFjY2Vzc0NvdW50KCksIDFVKTsKLSAgICB1bnNpZ25lZCBxdWV1ZUluZGV4ID0gV1RGOjpmYXN0
TG9nMihyZXNvdXJjZS5zaXplKCkgLyBhY2Nlc3NDb3VudCk7Ci0jaWZuZGVmIE5ERUJVRwotICAg
IHJlc291cmNlLm1fbHJ1SW5kZXggPSBxdWV1ZUluZGV4OwotI2VuZGlmCi0KLSAgICBtX2FsbFJl
c291cmNlcy5yZXNlcnZlQ2FwYWNpdHkocXVldWVJbmRleCArIDEpOwotICAgIHdoaWxlIChtX2Fs
bFJlc291cmNlcy5zaXplKCkgPD0gcXVldWVJbmRleCkKLSAgICAgICAgbV9hbGxSZXNvdXJjZXMu
dW5jaGVja2VkQXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8TFJVTGlzdD4oKSk7Ci0gICAgcmV0dXJu
ICptX2FsbFJlc291cmNlc1txdWV1ZUluZGV4XTsKLX0KLQotdm9pZCBNZW1vcnlDYWNoZTo6cmVt
b3ZlRnJvbUxSVUxpc3QoQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQotewotICAgIC8vIElmIHdl
J3ZlIG5ldmVyIGJlZW4gYWNjZXNzZWQsIHRoZW4gd2UncmUgYnJhbmQgbmV3IGFuZCBub3QgaW4g
YW55IGxpc3QuCi0gICAgaWYgKCFyZXNvdXJjZS5hY2Nlc3NDb3VudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgdW5zaWduZWQgb2xkTGlzdEluZGV4ID0g
cmVzb3VyY2UubV9scnVJbmRleDsKLSNlbmRpZgotCi0gICAgTFJVTGlzdCYgbGlzdCA9IGxydUxp
c3RGb3IocmVzb3VyY2UpOwotCi0gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGxpc3Qgd2UgZ290IGlz
IHRoZSBsaXN0IHdlIHdhbnQuCi0gICAgQVNTRVJUKHJlc291cmNlLm1fbHJ1SW5kZXggPT0gb2xk
TGlzdEluZGV4KTsKLQotICAgIGJvb2wgcmVtb3ZlZCA9IGxpc3QucmVtb3ZlKCZyZXNvdXJjZSk7
Ci0gICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKLX0KLQotdm9pZCBNZW1vcnlD
YWNoZTo6aW5zZXJ0SW5MUlVMaXN0KENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkKLXsKLSAgICBB
U1NFUlQocmVzb3VyY2UuaW5DYWNoZSgpKTsKLSAgICBBU1NFUlQocmVzb3VyY2UuYWNjZXNzQ291
bnQoKSA+IDApOwotICAgIAotICAgIGF1dG8gYWRkUmVzdWx0ID0gbHJ1TGlzdEZvcihyZXNvdXJj
ZSkuYWRkKCZyZXNvdXJjZSk7Ci0gICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKLX0KLQotdm9pZCBNZW1vcnlDYWNoZTo6cmVzb3VyY2VBY2Nlc3NlZChD
YWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpCi17Ci0gICAgQVNTRVJUKHJlc291cmNlLmluQ2FjaGUo
KSk7Ci0gICAgCi0gICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgdG8gcmVtb3ZlIGJlZm9yZSB3ZSBp
bmNyZWFzZSB0aGUgYWNjZXNzIGNvdW50LCBzaW5jZQotICAgIC8vIHRoZSBxdWV1ZSB3aWxsIHBv
c3NpYmx5IGNoYW5nZS4KLSAgICByZW1vdmVGcm9tTFJVTGlzdChyZXNvdXJjZSk7Ci0gICAgCi0g
ICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB0aGUgcmVzb3VyY2UgaGFzIGJlZW4gYWNj
ZXNzZWQsIGFkanVzdCB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUgdG8gYWNjb3VudCBmb3IgaXRzIGlu
aXRpYWwgc2l6ZS4KLSAgICBpZiAoIXJlc291cmNlLmFjY2Vzc0NvdW50KCkpCi0gICAgICAgIGFk
anVzdFNpemUocmVzb3VyY2UuaGFzQ2xpZW50cygpLCByZXNvdXJjZS5zaXplKCkpOwotICAgIAot
ICAgIC8vIEFkZCB0byBvdXIgYWNjZXNzIGNvdW50LgotICAgIHJlc291cmNlLmluY3JlYXNlQWNj
ZXNzQ291bnQoKTsKLSAgICAKLSAgICAvLyBOb3cgaW5zZXJ0IGludG8gdGhlIG5ldyBxdWV1ZS4K
LSAgICBpbnNlcnRJbkxSVUxpc3QocmVzb3VyY2UpOwotfQotCi12b2lkIE1lbW9yeUNhY2hlOjpy
ZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2luKFNlY3VyaXR5T3JpZ2luJiBvcmlnaW4pCi17Ci0jaWYg
RU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKLSAgICBTdHJpbmcgb3JpZ2luUGFydGl0aW9uID0g
UmVzb3VyY2VSZXF1ZXN0OjpwYXJ0aXRpb25OYW1lKG9yaWdpbi5ob3N0KCkpOwotI2VuZGlmCi0K
LSAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPiByZXNvdXJjZXNXaXRoT3JpZ2luOwotICAgIGZv
ciAoYXV0byYgcmVzb3VyY2VzIDogbV9zZXNzaW9uUmVzb3VyY2VzLnZhbHVlcygpKSB7Ci0gICAg
ICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiAqcmVzb3VyY2VzKSB7Ci0gICAgICAgICAgICBhdXRv
JiByZXNvdXJjZSA9ICprZXlWYWx1ZS52YWx1ZTsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9O
SU5HKQotICAgICAgICAgICAgYXV0byYgcGFydGl0aW9uTmFtZSA9IGtleVZhbHVlLmtleS5zZWNv
bmQ7Ci0gICAgICAgICAgICBpZiAocGFydGl0aW9uTmFtZSA9PSBvcmlnaW5QYXJ0aXRpb24pIHsK
LSAgICAgICAgICAgICAgICByZXNvdXJjZXNXaXRoT3JpZ2luLmFwcGVuZCgmcmVzb3VyY2UpOwot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAg
ICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHJlc291cmNlT3JpZ2luID0gU2VjdXJpdHlPcmln
aW46OmNyZWF0ZShyZXNvdXJjZS51cmwoKSk7Ci0gICAgICAgICAgICBpZiAocmVzb3VyY2VPcmln
aW4tPmVxdWFsKCZvcmlnaW4pKQotICAgICAgICAgICAgICAgIHJlc291cmNlc1dpdGhPcmlnaW4u
YXBwZW5kKCZyZXNvdXJjZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8qIHJl
c291cmNlIDogcmVzb3VyY2VzV2l0aE9yaWdpbikKLSAgICAgICAgcmVtb3ZlKCpyZXNvdXJjZSk7
Ci19Ci0KLXZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZVJlc291cmNlc1dpdGhPcmlnaW5zKFNlc3Np
b25JRCBzZXNzaW9uSUQsIGNvbnN0IEhhc2hTZXQ8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4mIG9y
aWdpbnMpCi17Ci0gICAgYXV0byogcmVzb3VyY2VNYXAgPSBzZXNzaW9uUmVzb3VyY2VNYXAoc2Vz
c2lvbklEKTsKLSAgICBpZiAoIXJlc291cmNlTWFwKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBF
TkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQotICAgIEhhc2hTZXQ8U3RyaW5nPiBvcmlnaW5QYXJ0
aXRpb25zOwotCi0gICAgZm9yIChhdXRvJiBvcmlnaW4gOiBvcmlnaW5zKQotICAgICAgICBvcmln
aW5QYXJ0aXRpb25zLmFkZChSZXNvdXJjZVJlcXVlc3Q6OnBhcnRpdGlvbk5hbWUob3JpZ2luLT5o
b3N0KCkpKTsKLSNlbmRpZgotCi0gICAgVmVjdG9yPENhY2hlZFJlc291cmNlKj4gcmVzb3VyY2Vz
VG9SZW1vdmU7Ci0gICAgZm9yIChhdXRvJiBrZXlWYWx1ZVBhaXIgOiAqcmVzb3VyY2VNYXApIHsK
LSAgICAgICAgYXV0byYgcmVzb3VyY2UgPSAqa2V5VmFsdWVQYWlyLnZhbHVlOwotCi0jaWYgRU5B
QkxFKENBQ0hFX1BBUlRJVElPTklORykKLSAgICAgICAgYXV0byYgcGFydGl0aW9uTmFtZSA9IGtl
eVZhbHVlUGFpci5rZXkuc2Vjb25kOwotICAgICAgICBpZiAob3JpZ2luUGFydGl0aW9ucy5jb250
YWlucyhwYXJ0aXRpb25OYW1lKSkgewotICAgICAgICAgICAgcmVzb3VyY2VzVG9SZW1vdmUuYXBw
ZW5kKCZyZXNvdXJjZSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotI2VuZGlm
Ci0KLSAgICAgICAgaWYgKG9yaWdpbnMuY29udGFpbnMoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShy
ZXNvdXJjZS51cmwoKSkucHRyKCkpKQotICAgICAgICAgICAgcmVzb3VyY2VzVG9SZW1vdmUuYXBw
ZW5kKCZyZXNvdXJjZSk7Ci0gICAgfQotCi0gICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IHJlc291
cmNlc1RvUmVtb3ZlKQotICAgICAgICByZW1vdmUoKnJlc291cmNlKTsKLX0KLQotdm9pZCBNZW1v
cnlDYWNoZTo6Z2V0T3JpZ2luc1dpdGhDYWNoZShTZWN1cml0eU9yaWdpblNldCYgb3JpZ2lucykK
LXsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQotICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxTdHJpbmc+IGh0dHBTdHJpbmcoImh0dHAiKTsKLSNlbmRpZgotICAgIGZvciAoYXV0byYg
cmVzb3VyY2VzIDogbV9zZXNzaW9uUmVzb3VyY2VzLnZhbHVlcygpKSB7Ci0gICAgICAgIGZvciAo
YXV0byYga2V5VmFsdWUgOiAqcmVzb3VyY2VzKSB7Ci0gICAgICAgICAgICBhdXRvJiByZXNvdXJj
ZSA9ICprZXlWYWx1ZS52YWx1ZTsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQotICAg
ICAgICAgICAgYXV0byYgcGFydGl0aW9uTmFtZSA9IGtleVZhbHVlLmtleS5zZWNvbmQ7Ci0gICAg
ICAgICAgICBpZiAoIXBhcnRpdGlvbk5hbWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIG9y
aWdpbnMuYWRkKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUoaHR0cFN0cmluZywgcGFydGl0aW9uTmFt
ZSwgMCkpOwotICAgICAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICBvcmlnaW5zLmFk
ZChTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHJlc291cmNlLnVybCgpKSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLUhhc2hTZXQ8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4gTWVtb3J5Q2FjaGU6Om9y
aWdpbnNXaXRoQ2FjaGUoU2Vzc2lvbklEIHNlc3Npb25JRCkgY29uc3QKLXsKLSAgICBIYXNoU2V0
PFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+IG9yaWdpbnM7Ci0KLSAgICBhdXRvIGl0ID0gbV9zZXNz
aW9uUmVzb3VyY2VzLmZpbmQoc2Vzc2lvbklEKTsKLSAgICBpZiAoaXQgIT0gbV9zZXNzaW9uUmVz
b3VyY2VzLmVuZCgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiAqaXQtPnZhbHVl
KSB7Ci0gICAgICAgICAgICBhdXRvJiByZXNvdXJjZSA9ICprZXlWYWx1ZS52YWx1ZTsKLSNpZiBF
TkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQotICAgICAgICAgICAgYXV0byYgcGFydGl0aW9uTmFt
ZSA9IGtleVZhbHVlLmtleS5zZWNvbmQ7Ci0gICAgICAgICAgICBpZiAoIXBhcnRpdGlvbk5hbWUu
aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIG9yaWdpbnMuYWRkKFNlY3VyaXR5T3JpZ2luOjpj
cmVhdGUoImh0dHAiLCBwYXJ0aXRpb25OYW1lLCAwKSk7Ci0gICAgICAgICAgICBlbHNlCi0jZW5k
aWYKLSAgICAgICAgICAgIG9yaWdpbnMuYWRkKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUocmVzb3Vy
Y2UudXJsKCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBvcmlnaW5zOwotfQot
Ci12b2lkIE1lbW9yeUNhY2hlOjpyZW1vdmVGcm9tTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KENh
Y2hlZFJlc291cmNlJiByZXNvdXJjZSkKLXsKLSAgICBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzLnJl
bW92ZSgmcmVzb3VyY2UpOwotfQotCi12b2lkIE1lbW9yeUNhY2hlOjppbnNlcnRJbkxpdmVEZWNv
ZGVkUmVzb3VyY2VzTGlzdChDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpCi17Ci0gICAgLy8gTWFr
ZSBzdXJlIHdlIGFyZW4ndCBpbiB0aGUgbGlzdCBhbHJlYWR5LgotICAgIEFTU0VSVCghbV9saXZl
RGVjb2RlZFJlc291cmNlcy5jb250YWlucygmcmVzb3VyY2UpKTsKLSAgICBtX2xpdmVEZWNvZGVk
UmVzb3VyY2VzLmFkZCgmcmVzb3VyY2UpOwotfQotCi12b2lkIE1lbW9yeUNhY2hlOjphZGRUb0xp
dmVSZXNvdXJjZXNTaXplKENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkKLXsKLSAgICBtX2xpdmVT
aXplICs9IHJlc291cmNlLnNpemUoKTsKLSAgICBtX2RlYWRTaXplIC09IHJlc291cmNlLnNpemUo
KTsKLX0KLQotdm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlRnJvbUxpdmVSZXNvdXJjZXNTaXplKENh
Y2hlZFJlc291cmNlJiByZXNvdXJjZSkKLXsKLSAgICBtX2xpdmVTaXplIC09IHJlc291cmNlLnNp
emUoKTsKLSAgICBtX2RlYWRTaXplICs9IHJlc291cmNlLnNpemUoKTsKLX0KLQotdm9pZCBNZW1v
cnlDYWNoZTo6YWRqdXN0U2l6ZShib29sIGxpdmUsIGludCBkZWx0YSkKLXsKLSAgICBpZiAobGl2
ZSkgewotICAgICAgICBBU1NFUlQoZGVsdGEgPj0gMCB8fCAoKGludCltX2xpdmVTaXplICsgZGVs
dGEgPj0gMCkpOwotICAgICAgICBtX2xpdmVTaXplICs9IGRlbHRhOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIEFTU0VSVChkZWx0YSA+PSAwIHx8ICgoaW50KW1fZGVhZFNpemUgKyBkZWx0YSA+PSAw
KSk7Ci0gICAgICAgIG1fZGVhZFNpemUgKz0gZGVsdGE7Ci0gICAgfQotfQotCi12b2lkIE1lbW9y
eUNhY2hlOjpyZW1vdmVSZXF1ZXN0RnJvbVNlc3Npb25DYWNoZXMoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIGlm
IChpczxXb3JrZXJHbG9iYWxTY29wZT4oY29udGV4dCkpIHsKLSAgICAgICAgZG93bmNhc3Q8V29y
a2VyR2xvYmFsU2NvcGU+KGNvbnRleHQpLnRocmVhZCgpLndvcmtlckxvYWRlclByb3h5KCkucG9z
dFRhc2tUb0xvYWRlcihbcmVxdWVzdCA9IHJlcXVlc3QuaXNvbGF0ZWRDb3B5KCldIChTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICBNZW1vcnlDYWNoZTo6cmVt
b3ZlUmVxdWVzdEZyb21TZXNzaW9uQ2FjaGVzKGNvbnRleHQsIHJlcXVlc3QpOwotICAgICAgICB9
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8mIG1lbW9yeUNhY2hlID0gTWVt
b3J5Q2FjaGU6OnNpbmdsZXRvbigpOwotICAgIGZvciAoYXV0byYgcmVzb3VyY2VzIDogbWVtb3J5
Q2FjaGUubV9zZXNzaW9uUmVzb3VyY2VzKSB7Ci0gICAgICAgIGlmIChDYWNoZWRSZXNvdXJjZSog
cmVzb3VyY2UgPSBtZW1vcnlDYWNoZS5yZXNvdXJjZUZvclJlcXVlc3RJbXBsKHJlcXVlc3QsICpy
ZXNvdXJjZXMudmFsdWUpKQotICAgICAgICAgICAgbWVtb3J5Q2FjaGUucmVtb3ZlKCpyZXNvdXJj
ZSk7Ci0gICAgfQotfQotCi12b2lkIE1lbW9yeUNhY2hlOjpUeXBlU3RhdGlzdGljOjphZGRSZXNv
dXJjZShDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpCi17Ci0gICAgY291bnQrKzsKLSAgICBzaXpl
ICs9IHJlc291cmNlLnNpemUoKTsKLSAgICBsaXZlU2l6ZSArPSByZXNvdXJjZS5oYXNDbGllbnRz
KCkgPyByZXNvdXJjZS5zaXplKCkgOiAwOwotICAgIGRlY29kZWRTaXplICs9IHJlc291cmNlLmRl
Y29kZWRTaXplKCk7Ci19Ci0KLU1lbW9yeUNhY2hlOjpTdGF0aXN0aWNzIE1lbW9yeUNhY2hlOjpn
ZXRTdGF0aXN0aWNzKCkKLXsKLSAgICBTdGF0aXN0aWNzIHN0YXRzOwotCi0gICAgZm9yIChhdXRv
JiByZXNvdXJjZXMgOiBtX3Nlc3Npb25SZXNvdXJjZXMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9y
IChhdXRvKiByZXNvdXJjZSA6IHJlc291cmNlcy0+dmFsdWVzKCkpIHsKLSAgICAgICAgICAgIHN3
aXRjaCAocmVzb3VyY2UtPnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJj
ZTo6SW1hZ2VSZXNvdXJjZToKLSAgICAgICAgICAgICAgICBzdGF0cy5pbWFnZXMuYWRkUmVzb3Vy
Y2UoKnJlc291cmNlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
Q2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6Ci0gICAgICAgICAgICAgICAgc3RhdHMuY3Nz
U3R5bGVTaGVldHMuYWRkUmVzb3VyY2UoKnJlc291cmNlKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKLSAgICAgICAgICAg
ICAgICBzdGF0cy5zY3JpcHRzLmFkZFJlc291cmNlKCpyZXNvdXJjZSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0jaWYgRU5BQkxFKFhTTFQpCi0gICAgICAgICAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpYU0xTdHlsZVNoZWV0OgotICAgICAgICAgICAgICAgIHN0YXRzLnhzbFN0eWxlU2hlZXRz
LmFkZFJlc291cmNlKCpyZXNvdXJjZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYK
LSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgICAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6
U1ZHRm9udFJlc291cmNlOgotI2VuZGlmCi0gICAgICAgICAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpGb250UmVzb3VyY2U6Ci0gICAgICAgICAgICAgICAgc3RhdHMuZm9udHMuYWRkUmVzb3VyY2Uo
KnJlc291cmNlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIHN0YXRzOwotfQotCi12b2lkIE1lbW9yeUNhY2hlOjpzZXREaXNhYmxlZChi
b29sIGRpc2FibGVkKQotewotICAgIG1fZGlzYWJsZWQgPSBkaXNhYmxlZDsKLSAgICBpZiAoIW1f
ZGlzYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdoaWxlICghbV9zZXNzaW9uUmVzb3Vy
Y2VzLmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvJiByZXNvdXJjZXMgPSAqbV9zZXNzaW9uUmVz
b3VyY2VzLmJlZ2luKCktPnZhbHVlOwotICAgICAgICBBU1NFUlQoIXJlc291cmNlcy5pc0VtcHR5
KCkpOwotICAgICAgICByZW1vdmUoKnJlc291cmNlcy5iZWdpbigpLT52YWx1ZSk7Ci0gICAgfQot
fQotCi12b2lkIE1lbW9yeUNhY2hlOjpldmljdFJlc291cmNlcygpCi17Ci0gICAgaWYgKGRpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldERpc2FibGVkKHRydWUpOwotICAgIHNl
dERpc2FibGVkKGZhbHNlKTsKLX0KLQotdm9pZCBNZW1vcnlDYWNoZTo6ZXZpY3RSZXNvdXJjZXMo
U2Vzc2lvbklEIHNlc3Npb25JRCkKLXsKLSAgICBpZiAoZGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZm9yRWFjaFNlc3Npb25SZXNvdXJjZShzZXNzaW9uSUQsIFt0aGlzXSAoQ2Fj
aGVkUmVzb3VyY2UmIHJlc291cmNlKSB7IHJlbW92ZShyZXNvdXJjZSk7IH0pOwotCi0gICAgQVNT
RVJUKCFtX3Nlc3Npb25SZXNvdXJjZXMuY29udGFpbnMoc2Vzc2lvbklEKSk7Ci19Ci0KLWJvb2wg
TWVtb3J5Q2FjaGU6Om5lZWRzUHJ1bmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbGl2ZVNp
emUgKyBtX2RlYWRTaXplID4gbV9jYXBhY2l0eSB8fCBtX2RlYWRTaXplID4gbV9tYXhEZWFkQ2Fw
YWNpdHk7Ci19Ci0KLXZvaWQgTWVtb3J5Q2FjaGU6OnBydW5lKCkKLXsKLSAgICBpZiAoIW5lZWRz
UHJ1bmluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIHBydW5lRGVhZFJlc291
cmNlcygpOyAvLyBQcnVuZSBkZWFkIGZpcnN0LCBpbiBjYXNlIGl0IHdhcyAiYm9ycm93aW5nIiBj
YXBhY2l0eSBmcm9tIGxpdmUuCi0gICAgcHJ1bmVMaXZlUmVzb3VyY2VzKCk7Ci19Ci0KLXZvaWQg
TWVtb3J5Q2FjaGU6OnBydW5lU29vbigpCi17Ci0gICAgIGlmIChtX3BydW5lVGltZXIuaXNBY3Rp
dmUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgICBpZiAoIW5lZWRzUHJ1bmluZygpKQotICAgICAg
ICAgcmV0dXJuOwotICAgICBtX3BydW5lVGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi0jaWZu
ZGVmIE5ERUJVRwotdm9pZCBNZW1vcnlDYWNoZTo6ZHVtcFN0YXRzKCkKLXsKLSAgICBTdGF0aXN0
aWNzIHMgPSBnZXRTdGF0aXN0aWNzKCk7Ci0gICAgcHJpbnRmKCIlLTEzcyAlLTEzcyAlLTEzcyAl
LTEzcyAlLTEzc1xuIiwgIiIsICJDb3VudCIsICJTaXplIiwgIkxpdmVTaXplIiwgIkRlY29kZWRT
aXplIik7Ci0gICAgcHJpbnRmKCIlLTEzcyAlLTEzcyAlLTEzcyAlLTEzcyAlLTEzc1xuIiwgIi0t
LS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLS0tIiwgIi0tLS0tLS0t
LS0tLS0iLCAiLS0tLS0tLS0tLS0tLSIpOwotICAgIHByaW50ZigiJS0xM3MgJTEzZCAlMTNkICUx
M2QgJTEzZFxuIiwgIkltYWdlcyIsIHMuaW1hZ2VzLmNvdW50LCBzLmltYWdlcy5zaXplLCBzLmlt
YWdlcy5saXZlU2l6ZSwgcy5pbWFnZXMuZGVjb2RlZFNpemUpOwotICAgIHByaW50ZigiJS0xM3Mg
JTEzZCAlMTNkICUxM2QgJTEzZFxuIiwgIkNTUyIsIHMuY3NzU3R5bGVTaGVldHMuY291bnQsIHMu
Y3NzU3R5bGVTaGVldHMuc2l6ZSwgcy5jc3NTdHlsZVNoZWV0cy5saXZlU2l6ZSwgcy5jc3NTdHls
ZVNoZWV0cy5kZWNvZGVkU2l6ZSk7Ci0jaWYgRU5BQkxFKFhTTFQpCi0gICAgcHJpbnRmKCIlLTEz
cyAlMTNkICUxM2QgJTEzZCAlMTNkXG4iLCAiWFNMIiwgcy54c2xTdHlsZVNoZWV0cy5jb3VudCwg
cy54c2xTdHlsZVNoZWV0cy5zaXplLCBzLnhzbFN0eWxlU2hlZXRzLmxpdmVTaXplLCBzLnhzbFN0
eWxlU2hlZXRzLmRlY29kZWRTaXplKTsKLSNlbmRpZgotICAgIHByaW50ZigiJS0xM3MgJTEzZCAl
MTNkICUxM2QgJTEzZFxuIiwgIkphdmFTY3JpcHQiLCBzLnNjcmlwdHMuY291bnQsIHMuc2NyaXB0
cy5zaXplLCBzLnNjcmlwdHMubGl2ZVNpemUsIHMuc2NyaXB0cy5kZWNvZGVkU2l6ZSk7Ci0gICAg
cHJpbnRmKCIlLTEzcyAlMTNkICUxM2QgJTEzZCAlMTNkXG4iLCAiRm9udHMiLCBzLmZvbnRzLmNv
dW50LCBzLmZvbnRzLnNpemUsIHMuZm9udHMubGl2ZVNpemUsIHMuZm9udHMuZGVjb2RlZFNpemUp
OwotICAgIHByaW50ZigiJS0xM3MgJS0xM3MgJS0xM3MgJS0xM3MgJS0xM3NcblxuIiwgIi0tLS0t
LS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0t
LS0iLCAiLS0tLS0tLS0tLS0tLSIpOwotfQotCi12b2lkIE1lbW9yeUNhY2hlOjpkdW1wTFJVTGlz
dHMoYm9vbCBpbmNsdWRlTGl2ZSkgY29uc3QKLXsKLSAgICBwcmludGYoIkxSVS1TUCBsaXN0cyBp
biBldmljdGlvbiBvcmRlciAoS2lsb2J5dGVzIGRlY29kZWQsIEtpbG9ieXRlcyBlbmNvZGVkLCBB
Y2Nlc3MgY291bnQsIFJlZmVyZW5jZWQpOlxuIik7Ci0KLSAgICBpbnQgc2l6ZSA9IG1fYWxsUmVz
b3VyY2VzLnNpemUoKTsKLSAgICBmb3IgKGludCBpID0gc2l6ZSAtIDE7IGkgPj0gMDsgaS0tKSB7
Ci0gICAgICAgIHByaW50ZigiXG5cbkxpc3QgJWQ6ICIsIGkpOwotICAgICAgICBmb3IgKGF1dG8q
IHJlc291cmNlIDogKm1fYWxsUmVzb3VyY2VzW2ldKSB7Ci0gICAgICAgICAgICBpZiAoaW5jbHVk
ZUxpdmUgfHwgIXJlc291cmNlLT5oYXNDbGllbnRzKCkpCi0gICAgICAgICAgICAgICAgcHJpbnRm
KCIoJS4xZkssICUuMWZLLCAldUEsICVkUik7ICIsIHJlc291cmNlLT5kZWNvZGVkU2l6ZSgpIC8g
MTAyNC4wZiwgKHJlc291cmNlLT5lbmNvZGVkU2l6ZSgpICsgcmVzb3VyY2UtPm92ZXJoZWFkU2l6
ZSgpKSAvIDEwMjQuMGYsIHJlc291cmNlLT5hY2Nlc3NDb3VudCgpLCByZXNvdXJjZS0+aGFzQ2xp
ZW50cygpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2Fj
aGUuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmUxNzQ3YzJhM2JhZWI1ZjlhMGE4YmY1Nzk5NGE3MTI5
MDQ1NzRjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oCisrKyAvZGV2L251bGwKQEAg
LTEsMjI1ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtu
b2xsQG1waS1oZC5tcGcuZGUpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8
bXVlbGxlckBrZGUub3JnPgotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotCi0gICAgVGhpcyBjbGFzcyBw
cm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHls
ZSBzaGVldHMgYW5kIGh0bWwKLSAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9y
eSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KLSovCi0KLSNpZm5kZWYgQ2FjaGVfaAotI2RlZmlu
ZSBDYWNoZV9oCi0KLSNpbmNsdWRlICJOYXRpdmVJbWFnZVB0ci5oIgotI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luSGFzaC5oIgotI2luY2x1ZGUgIlNlc3Npb25JRC5oIgotI2luY2x1ZGUgIlRpbWVy
LmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgot
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+Ci0j
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgIHsKLQotY2xhc3MgQ2FjaGVkUmVzb3VyY2U7Ci1j
bGFzcyBVUkw7Ci1jbGFzcyBSZXNvdXJjZVJlcXVlc3Q7Ci1jbGFzcyBSZXNvdXJjZVJlc3BvbnNl
OwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLWNsYXNzIFNlY3VyaXR5T3JpZ2luOwot
Ci0vLyBUaGlzIGNhY2hlIGhvbGRzIHN1YnJlc291cmNlcyB1c2VkIGJ5IFdlYiBwYWdlczogaW1h
Z2VzLCBzY3JpcHRzLCBzdHlsZXNoZWV0cywgZXRjLgotCi0vLyBUaGUgY2FjaGUga2VlcHMgYSBm
bGV4aWJsZSBidXQgYm91bmRlZCB3aW5kb3cgb2YgZGVhZCByZXNvdXJjZXMgdGhhdCBncm93cy9z
aHJpbmtzIAotLy8gZGVwZW5kaW5nIG9uIHRoZSBsaXZlIHJlc291cmNlIGxvYWQuIEhlcmUncyBh
biBleGFtcGxlIG9mIGNhY2hlIGdyb3d0aCBvdmVyIHRpbWUsCi0vLyB3aXRoIGEgbWluIGRlYWQg
cmVzb3VyY2UgY2FwYWNpdHkgb2YgMjUlIGFuZCBhIG1heCBkZWFkIHJlc291cmNlIGNhcGFjaXR5
IG9mIDUwJToKLQotLy8gICAgICAgIHwtLS0tLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBEZWFkOiAtCi0vLyAgICAgICAgfC0tLS0tLS0tLS18ICAgICAgICAgICAgICAgICAgICAgICAg
IExpdmU6ICsKLS8vICAgICAgLS18LS0tLS0tLS0tLXwgICAgICAgICAgICAgICAgICAgICAgICAg
Q2FjaGUgYm91bmRhcnk6IHwgKG9iamVjdHMgb3V0c2lkZSB0aGlzIG1hcmsgaGF2ZSBiZWVuIGV2
aWN0ZWQpCi0vLyAgICAgIC0tfC0tLS0tLS0tLS0rKysrKysrKysrfAotLy8gLS0tLS0tLXwtLS0t
LSsrKysrKysrKysrKysrK3wKLS8vIC0tLS0tLS18LS0tLS0rKysrKysrKysrKysrKyt8KysrKysK
LQotY2xhc3MgTWVtb3J5Q2FjaGUgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1lbW9yeUNh
Y2hlKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgZnJpZW5kIE5ldmVyRGVzdHJveWVk
PE1lbW9yeUNhY2hlPjsKLSAgICBmcmllbmQgY2xhc3MgSW50ZXJuYWxzOwotcHVibGljOgotICAg
IHN0cnVjdCBUeXBlU3RhdGlzdGljIHsKLSAgICAgICAgaW50IGNvdW50OwotICAgICAgICBpbnQg
c2l6ZTsKLSAgICAgICAgaW50IGxpdmVTaXplOwotICAgICAgICBpbnQgZGVjb2RlZFNpemU7Ci0K
LSAgICAgICAgVHlwZVN0YXRpc3RpYygpCi0gICAgICAgICAgICA6IGNvdW50KDApCi0gICAgICAg
ICAgICAsIHNpemUoMCkKLSAgICAgICAgICAgICwgbGl2ZVNpemUoMCkKLSAgICAgICAgICAgICwg
ZGVjb2RlZFNpemUoMCkKLSAgICAgICAgeyAKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgYWRk
UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UmKTsKLSAgICB9OwotICAgIAotICAgIHN0cnVjdCBTdGF0
aXN0aWNzIHsKLSAgICAgICAgVHlwZVN0YXRpc3RpYyBpbWFnZXM7Ci0gICAgICAgIFR5cGVTdGF0
aXN0aWMgY3NzU3R5bGVTaGVldHM7Ci0gICAgICAgIFR5cGVTdGF0aXN0aWMgc2NyaXB0czsKLSAg
ICAgICAgVHlwZVN0YXRpc3RpYyB4c2xTdHlsZVNoZWV0czsKLSAgICAgICAgVHlwZVN0YXRpc3Rp
YyBmb250czsKLSAgICB9OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIE1lbW9yeUNhY2hl
JiBzaW5nbGV0b24oKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIENhY2hlZFJlc291cmNlKiByZXNv
dXJjZUZvclJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2Vzc2lvbklEKTsKLQotICAg
IGJvb2wgYWRkKENhY2hlZFJlc291cmNlJik7Ci0gICAgdm9pZCByZW1vdmUoQ2FjaGVkUmVzb3Vy
Y2UmKTsKLQotICAgIHN0YXRpYyBVUkwgcmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVySWZOZWVkZWQo
Y29uc3QgVVJMJiBvcmlnaW5hbFVSTCk7Ci0gICAgCi0gICAgdm9pZCByZXZhbGlkYXRpb25TdWNj
ZWVkZWQoQ2FjaGVkUmVzb3VyY2UmIHJldmFsaWRhdGluZ1Jlc291cmNlLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJik7Ci0gICAgdm9pZCByZXZhbGlkYXRpb25GYWlsZWQoQ2FjaGVkUmVzb3VyY2Um
IHJldmFsaWRhdGluZ1Jlc291cmNlKTsKLQotICAgIHZvaWQgZm9yRWFjaFJlc291cmNlKGNvbnN0
IHN0ZDo6ZnVuY3Rpb248dm9pZChDYWNoZWRSZXNvdXJjZSYpPiYpOwotICAgIHZvaWQgZm9yRWFj
aFNlc3Npb25SZXNvdXJjZShTZXNzaW9uSUQsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChDYWNo
ZWRSZXNvdXJjZSYpPiYpOwotICAgIHZvaWQgZGVzdHJveURlY29kZWREYXRhRm9yQWxsSW1hZ2Vz
KCk7Ci0gICAgCi0gICAgLy8gU2V0cyB0aGUgY2FjaGUncyBtZW1vcnkgY2FwYWNpdGllcywgaW4g
Ynl0ZXMuIFRoZXNlIHdpbGwgaG9sZCBvbmx5IGFwcHJveGltYXRlbHksIAotICAgIC8vIHNpbmNl
IHRoZSBkZWNvZGVkIGNvc3Qgb2YgcmVzb3VyY2VzIGxpa2Ugc2NyaXB0cyBhbmQgc3R5bGVzaGVl
dHMgaXMgbm90IGtub3duLgotICAgIC8vICAtIG1pbkRlYWRCeXRlczogVGhlIG1heGltdW0gbnVt
YmVyIG9mIGJ5dGVzIHRoYXQgZGVhZCByZXNvdXJjZXMgc2hvdWxkIGNvbnN1bWUgd2hlbiB0aGUg
Y2FjaGUgaXMgdW5kZXIgcHJlc3N1cmUuCi0gICAgLy8gIC0gbWF4RGVhZEJ5dGVzOiBUaGUgbWF4
aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBkZWFkIHJlc291cmNlcyBzaG91bGQgY29uc3VtZSB3
aGVuIHRoZSBjYWNoZSBpcyBub3QgdW5kZXIgcHJlc3N1cmUuCi0gICAgLy8gIC0gdG90YWxCeXRl
czogVGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhlIGNhY2hlIHNob3VsZCBjb25z
dW1lIG92ZXJhbGwuCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDYXBhY2l0aWVzKHVuc2ln
bmVkIG1pbkRlYWRCeXRlcywgdW5zaWduZWQgbWF4RGVhZEJ5dGVzLCB1bnNpZ25lZCB0b3RhbEJ5
dGVzKTsKLQotICAgIC8vIFR1cm4gdGhlIGNhY2hlIG9uIGFuZCBvZmYuICBEaXNhYmxpbmcgdGhl
IGNhY2hlIHdpbGwgcmVtb3ZlIGFsbCByZXNvdXJjZXMgZnJvbSB0aGUgY2FjaGUuICBUaGV5IG1h
eQotICAgIC8vIHN0aWxsIGxpdmUgb24gaWYgdGhleSBhcmUgcmVmZXJlbmNlZCBieSBzb21lIFdl
YiBwYWdlIHRob3VnaC4KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldERpc2FibGVkKGJvb2wp
OwotICAgIGJvb2wgZGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2Rpc2FibGVkOyB9Ci0KLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV2aWN0UmVzb3VyY2VzKCk7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBldmljdFJlc291cmNlcyhTZXNzaW9uSUQpOwotICAgIAotICAgIHZvaWQgcHJ1bmUo
KTsKLSAgICB2b2lkIHBydW5lU29vbigpOwotICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2xpdmVTaXplICsgbV9kZWFkU2l6ZTsgfQotCi0gICAgdm9pZCBzZXREZWFkRGVjb2Rl
ZERhdGFEZWxldGlvbkludGVydmFsKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgaW50ZXJ2YWwp
IHsgbV9kZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsID0gaW50ZXJ2YWw7IH0KLSAgICBz
dGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwo
KSBjb25zdCB7IHJldHVybiBtX2RlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWw7IH0KLQot
ICAgIC8vIENhbGxzIHRvIHB1dCB0aGUgY2FjaGVkIHJlc291cmNlIGludG8gYW5kIG91dCBvZiBM
UlUgbGlzdHMuCi0gICAgdm9pZCBpbnNlcnRJbkxSVUxpc3QoQ2FjaGVkUmVzb3VyY2UmKTsKLSAg
ICB2b2lkIHJlbW92ZUZyb21MUlVMaXN0KENhY2hlZFJlc291cmNlJik7Ci0KLSAgICAvLyBDYWxs
ZWQgdG8gYWRqdXN0IHRoZSBjYWNoZSB0b3RhbHMgd2hlbiBhIHJlc291cmNlIGNoYW5nZXMgc2l6
ZS4KLSAgICB2b2lkIGFkanVzdFNpemUoYm9vbCBsaXZlLCBpbnQgZGVsdGEpOwotCi0gICAgLy8g
VHJhY2sgZGVjb2RlZCByZXNvdXJjZXMgdGhhdCBhcmUgaW4gdGhlIGNhY2hlIGFuZCByZWZlcmVu
Y2VkIGJ5IGEgV2ViIHBhZ2UuCi0gICAgdm9pZCBpbnNlcnRJbkxpdmVEZWNvZGVkUmVzb3VyY2Vz
TGlzdChDYWNoZWRSZXNvdXJjZSYpOwotICAgIHZvaWQgcmVtb3ZlRnJvbUxpdmVEZWNvZGVkUmVz
b3VyY2VzTGlzdChDYWNoZWRSZXNvdXJjZSYpOwotCi0gICAgdm9pZCBhZGRUb0xpdmVSZXNvdXJj
ZXNTaXplKENhY2hlZFJlc291cmNlJik7Ci0gICAgdm9pZCByZW1vdmVGcm9tTGl2ZVJlc291cmNl
c1NpemUoQ2FjaGVkUmVzb3VyY2UmKTsKLQotICAgIHN0YXRpYyB2b2lkIHJlbW92ZVJlcXVlc3RG
cm9tU2Vzc2lvbkNhY2hlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0Jik7Ci0KLSAgICAvLyBGdW5jdGlvbiB0byBjb2xsZWN0IGNhY2hlIHN0YXRpc3RpY3Mg
Zm9yIHRoZSBjYWNoZXMgd2luZG93IGluIHRoZSBTYWZhcmkgRGVidWcgbWVudS4KLSAgICBXRUJD
T1JFX0VYUE9SVCBTdGF0aXN0aWNzIGdldFN0YXRpc3RpY3MoKTsKLSAgICAKLSAgICB2b2lkIHJl
c291cmNlQWNjZXNzZWQoQ2FjaGVkUmVzb3VyY2UmKTsKLSAgICBib29sIGluTGl2ZURlY29kZWRS
ZXNvdXJjZXNMaXN0KENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkgY29uc3QgeyByZXR1cm4gbV9s
aXZlRGVjb2RlZFJlc291cmNlcy5jb250YWlucygmcmVzb3VyY2UpOyB9Ci0KLSAgICB0eXBlZGVm
IEhhc2hTZXQ8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4gU2VjdXJpdHlPcmlnaW5TZXQ7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2luKFNlY3VyaXR5T3Jp
Z2luJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2lu
cyhTZXNzaW9uSUQsIGNvbnN0IEhhc2hTZXQ8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4mKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldE9yaWdpbnNXaXRoQ2FjaGUoU2VjdXJpdHlPcmlnaW5T
ZXQmIG9yaWdpbnMpOwotICAgIFdFQkNPUkVfRVhQT1JUIEhhc2hTZXQ8UmVmUHRyPFNlY3VyaXR5
T3JpZ2luPj4gb3JpZ2luc1dpdGhDYWNoZShTZXNzaW9uSUQpIGNvbnN0OwotCi0gICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBhZGRJbWFnZVRvQ2FjaGUoTmF0aXZlSW1hZ2VQdHImJiwgY29uc3QgVVJM
JiwgY29uc3QgU3RyaW5nJiBkb21haW5Gb3JDYWNoZVBhcnRpdGlvbik7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCByZW1vdmVJbWFnZUZyb21DYWNoZShjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcm
IGRvbWFpbkZvckNhY2hlUGFydGl0aW9uKTsKLQotICAgIC8vIHBydW5lRGVhZCooKSAtIEZsdXNo
IGRlY29kZWQgYW5kIGVuY29kZWQgZGF0YSBmcm9tIHJlc291cmNlcyBub3QgcmVmZXJlbmNlZCBi
eSBXZWIgcGFnZXMuCi0gICAgLy8gcHJ1bmVMaXZlKigpIC0gRmx1c2ggZGVjb2RlZCBkYXRhIGZy
b20gcmVzb3VyY2VzIHN0aWxsIHJlZmVyZW5jZWQgYnkgV2ViIHBhZ2VzLgotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcHJ1bmVEZWFkUmVzb3VyY2VzKCk7IC8vIEF1dG9tYXRpY2FsbHkgZGVjaWRl
IGhvdyBtdWNoIHRvIHBydW5lLgotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHJ1bmVMaXZlUmVz
b3VyY2VzKGJvb2wgc2hvdWxkRGVzdHJveURlY29kZWREYXRhRm9yQWxsTGl2ZVJlc291cmNlcyA9
IGZhbHNlKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHJ1bmVEZWFkUmVzb3VyY2VzVG9T
aXplKHVuc2lnbmVkIHRhcmdldFNpemUpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHJ1bmVM
aXZlUmVzb3VyY2VzVG9TaXplKHVuc2lnbmVkIHRhcmdldFNpemUsIGJvb2wgc2hvdWxkRGVzdHJv
eURlY29kZWREYXRhRm9yQWxsTGl2ZVJlc291cmNlcyA9IGZhbHNlKTsKLQotcHJpdmF0ZToKLSNp
ZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQotICAgIHR5cGVkZWYgSGFzaE1hcDxzdGQ6OnBh
aXI8VVJMLCBTdHJpbmcgLyogcGFydGl0aW9uTmFtZSAqLz4sIENhY2hlZFJlc291cmNlKj4gQ2Fj
aGVkUmVzb3VyY2VNYXA7Ci0jZWxzZQotICAgIHR5cGVkZWYgSGFzaE1hcDxVUkwsIENhY2hlZFJl
c291cmNlKj4gQ2FjaGVkUmVzb3VyY2VNYXA7Ci0jZW5kaWYKLSAgICB0eXBlZGVmIExpc3RIYXNo
U2V0PENhY2hlZFJlc291cmNlKj4gTFJVTGlzdDsKLQotICAgIE1lbW9yeUNhY2hlKCk7Ci0gICAg
fk1lbW9yeUNhY2hlKCk7IC8vIE5vdCBpbXBsZW1lbnRlZCB0byBtYWtlIHN1cmUgbm9ib2R5IGFj
Y2lkZW50YWxseSBjYWxscyBkZWxldGUgLS0gV2ViQ29yZSBkb2VzIG5vdCBkZWxldGUgc2luZ2xl
dG9ucy4KLQotICAgIExSVUxpc3QmIGxydUxpc3RGb3IoQ2FjaGVkUmVzb3VyY2UmKTsKLSNpZm5k
ZWYgTkRFQlVHCi0gICAgdm9pZCBkdW1wU3RhdHMoKTsKLSAgICB2b2lkIGR1bXBMUlVMaXN0cyhi
b29sIGluY2x1ZGVMaXZlKSBjb25zdDsKLSNlbmRpZgotCi0gICAgdW5zaWduZWQgbGl2ZUNhcGFj
aXR5KCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgZGVhZENhcGFjaXR5KCkgY29uc3Q7Ci0gICAgYm9v
bCBuZWVkc1BydW5pbmcoKSBjb25zdDsKLQotICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZUZv
clJlcXVlc3RJbXBsKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIENhY2hlZFJlc291cmNlTWFwJik7
Ci0KLSAgICBDYWNoZWRSZXNvdXJjZU1hcCYgZW5zdXJlU2Vzc2lvblJlc291cmNlTWFwKFNlc3Np
b25JRCk7Ci0gICAgQ2FjaGVkUmVzb3VyY2VNYXAqIHNlc3Npb25SZXNvdXJjZU1hcChTZXNzaW9u
SUQpIGNvbnN0OwotCi0gICAgYm9vbCBtX2Rpc2FibGVkOyAgLy8gV2hldGhlciBvciBub3QgdGhl
IGNhY2hlIGlzIGVuYWJsZWQuCi0gICAgYm9vbCBtX2luUHJ1bmVSZXNvdXJjZXM7Ci0KLSAgICB1
bnNpZ25lZCBtX2NhcGFjaXR5OwotICAgIHVuc2lnbmVkIG1fbWluRGVhZENhcGFjaXR5OwotICAg
IHVuc2lnbmVkIG1fbWF4RGVhZENhcGFjaXR5OwotICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29u
ZHMgbV9kZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsOwotCi0gICAgdW5zaWduZWQgbV9s
aXZlU2l6ZTsgLy8gVGhlIG51bWJlciBvZiBieXRlcyBjdXJyZW50bHkgY29uc3VtZWQgYnkgImxp
dmUiIHJlc291cmNlcyBpbiB0aGUgY2FjaGUuCi0gICAgdW5zaWduZWQgbV9kZWFkU2l6ZTsgLy8g
VGhlIG51bWJlciBvZiBieXRlcyBjdXJyZW50bHkgY29uc3VtZWQgYnkgImRlYWQiIHJlc291cmNl
cyBpbiB0aGUgY2FjaGUuCi0KLSAgICAvLyBTaXplLWFkanVzdGVkIGFuZCBwb3B1bGFyaXR5LWF3
YXJlIExSVSBsaXN0IGNvbGxlY3Rpb24gZm9yIGNhY2hlIG9iamVjdHMuICBUaGlzIGNvbGxlY3Rp
b24gY2FuIGhvbGQKLSAgICAvLyBtb3JlIHJlc291cmNlcyB0aGFuIHRoZSBjYWNoZWQgcmVzb3Vy
Y2UgbWFwLCBzaW5jZSBpdCBjYW4gYWxzbyBob2xkICJzdGFsZSIgbXVsdGlwbGUgdmVyc2lvbnMg
b2Ygb2JqZWN0cyB0aGF0IGFyZQotICAgIC8vIHdhaXRpbmcgdG8gZGllIHdoZW4gdGhlIGNsaWVu
dHMgcmVmZXJlbmNpbmcgdGhlbSBnbyBhd2F5LgotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
TFJVTGlzdD4sIDMyPiBtX2FsbFJlc291cmNlczsKLSAgICAKLSAgICAvLyBMaXN0IGp1c3QgZm9y
IGxpdmUgcmVzb3VyY2VzIHdpdGggZGVjb2RlZCBkYXRhLiAgQWNjZXNzIHRvIHRoaXMgbGlzdCBp
cyBiYXNlZCBvZmYgb2YgcGFpbnRpbmcgdGhlIHJlc291cmNlLgotICAgIExSVUxpc3QgbV9saXZl
RGVjb2RlZFJlc291cmNlczsKLSAgICAKLSAgICAvLyBBIFVSTC1iYXNlZCBtYXAgb2YgYWxsIHJl
c291cmNlcyB0aGF0IGFyZSBpbiB0aGUgY2FjaGUgKGluY2x1ZGluZyB0aGUgZnJlc2hlc3QgdmVy
c2lvbiBvZiBvYmplY3RzIHRoYXQgYXJlIGN1cnJlbnRseSBiZWluZyAKLSAgICAvLyByZWZlcmVu
Y2VkIGJ5IGEgV2ViIHBhZ2UpLgotICAgIHR5cGVkZWYgSGFzaE1hcDxTZXNzaW9uSUQsIHN0ZDo6
dW5pcXVlX3B0cjxDYWNoZWRSZXNvdXJjZU1hcD4+IFNlc3Npb25DYWNoZWRSZXNvdXJjZU1hcDsK
LSAgICBTZXNzaW9uQ2FjaGVkUmVzb3VyY2VNYXAgbV9zZXNzaW9uUmVzb3VyY2VzOwotCi0gICAg
VGltZXIgbV9wcnVuZVRpbWVyOwotfTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZVBvbGljeS5oIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2ZldGNoL0NhY2hlUG9saWN5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjI3Njg1ZWU5MjA0MjEwNzQ1OTE5
NTIwMTJkN2ViMTFiYWE5ODUwYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9mZXRjaC9DYWNoZVBvbGljeS5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ2FjaGVQb2xp
Y3lfaAorI2RlZmluZSBDYWNoZVBvbGljeV9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAg
IGVudW0gQ2FjaGVQb2xpY3kgeworICAgICAgICBDYWNoZVBvbGljeVZlcmlmeSwKKyAgICAgICAg
Q2FjaGVQb2xpY3lSZXZhbGlkYXRlLAorICAgICAgICBDYWNoZVBvbGljeVJlbG9hZCwKKyAgICAg
ICAgQ2FjaGVQb2xpY3lIaXN0b3J5QnVmZmVyCisgICAgfTsKKworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRDU1NTdHlsZVNoZWV0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40ZDM3ZTU4YmRmNDllMTRlZWRjZDRmMDkwZjlmYWU2NmYyNGVlOTM5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZENTU1N0eWxl
U2hlZXQuY3BwCkBAIC0wLDAgKzEsMTgyIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMTk5OCBM
YXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQorICAgIENvcHlyaWdodCAoQykgMjAwMSBE
aXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDIgV2Fs
ZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11
ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYgQXBwbGUgSW5jLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYWxsIGZ1bmN0
aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUgc2hlZXRzIGFuZCBodG1s
CisgICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkgY2FjaGUgZm9yIHRoZXNl
IG9iamVjdHMuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FjaGVkQ1NT
U3R5bGVTaGVldC5oIgorCisjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgiCisjaW5jbHVkZSAiQ2FjaGVkU3R5bGVTaGVldENs
aWVudC5oIgorI2luY2x1ZGUgIkhUVFBIZWFkZXJOYW1lcy5oIgorI2luY2x1ZGUgIkhUVFBQYXJz
ZXJzLmgiCisjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKKyNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKKyNpbmNsdWRlICJUZXh0UmVzb3Vy
Y2VEZWNvZGVyLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworQ2FjaGVkQ1NTU3R5bGVTaGVldDo6Q2FjaGVkQ1NTU3R5bGVTaGVldChjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0
LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQorICAgIDogQ2FjaGVkUmVzb3VyY2UocmVzb3VyY2VSZXF1
ZXN0LCBDU1NTdHlsZVNoZWV0LCBzZXNzaW9uSUQpCisgICAgLCBtX2RlY29kZXIoVGV4dFJlc291
cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L2NzcyIsIGNoYXJzZXQpKQoreworICAgIC8vIFByZWZl
ciB0ZXh0L2NzcyBidXQgYWNjZXB0IGFueSB0eXBlIChkZWxsLmNvbSBzZXJ2ZXMgYSBzdHlsZXNo
ZWV0CisgICAgLy8gYXMgdGV4dC9odG1sOyBzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTExNDUxPikuCisgICAgc2V0QWNjZXB0KCJ0ZXh0L2NzcywqLyo7cT0wLjEi
KTsKK30KKworQ2FjaGVkQ1NTU3R5bGVTaGVldDo6fkNhY2hlZENTU1N0eWxlU2hlZXQoKQorewor
ICAgIGlmIChtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZSkKKyAgICAgICAgbV9wYXJzZWRTdHlsZVNo
ZWV0Q2FjaGUtPnJlbW92ZWRGcm9tTWVtb3J5Q2FjaGUoKTsKK30KKwordm9pZCBDYWNoZWRDU1NT
dHlsZVNoZWV0OjpkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGMpCit7CisgICAg
QVNTRVJUKGMtPnJlc291cmNlQ2xpZW50VHlwZSgpID09IENhY2hlZFN0eWxlU2hlZXRDbGllbnQ6
OmV4cGVjdGVkVHlwZSgpKTsKKyAgICAvLyBDYWNoZWRSZXNvdXJjZTo6ZGlkQWRkQ2xpZW50KCkg
bXVzdCBiZSBiZWZvcmUgc2V0Q1NTU3R5bGVTaGVldCgpLAorICAgIC8vIGJlY2F1c2Ugc2V0Q1NT
U3R5bGVTaGVldCgpIG1heSBjYXVzZSBzY3JpcHRzIHRvIGJlIGV4ZWN1dGVkLCB3aGljaCBjb3Vs
ZCBkZXN0cm95ICdjJyBpZiBpdCBpcyBhbiBpbnN0YW5jZSBvZiBIVE1MTGlua0VsZW1lbnQuCisg
ICAgLy8gc2VlIHRoZSBjb21tZW50IG9mIEhUTUxMaW5rRWxlbWVudDo6c2V0Q1NTU3R5bGVTaGVl
dC4KKyAgICBDYWNoZWRSZXNvdXJjZTo6ZGlkQWRkQ2xpZW50KGMpOworCisgICAgaWYgKCFpc0xv
YWRpbmcoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q2FjaGVkU3R5bGVTaGVldENsaWVudCo+KGMp
LT5zZXRDU1NTdHlsZVNoZWV0KG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLCBtX3Jlc3BvbnNlLnVy
bCgpLCBtX2RlY29kZXItPmVuY29kaW5nKCkubmFtZSgpLCB0aGlzKTsKK30KKwordm9pZCBDYWNo
ZWRDU1NTdHlsZVNoZWV0OjpzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmIGNocykKK3sKKyAgICBt
X2RlY29kZXItPnNldEVuY29kaW5nKGNocywgVGV4dFJlc291cmNlRGVjb2Rlcjo6RW5jb2RpbmdG
cm9tSFRUUEhlYWRlcik7Cit9CisKK1N0cmluZyBDYWNoZWRDU1NTdHlsZVNoZWV0OjplbmNvZGlu
ZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKS5uYW1lKCk7Cit9
CisgICAgCitjb25zdCBTdHJpbmcgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6c2hlZXRUZXh0KE1JTUVU
eXBlQ2hlY2sgbWltZVR5cGVDaGVjaywgYm9vbCogaGFzVmFsaWRNSU1FVHlwZSkgY29uc3QKK3sg
CisgICAgaWYgKCFtX2RhdGEgfHwgbV9kYXRhLT5pc0VtcHR5KCkgfHwgIWNhblVzZVNoZWV0KG1p
bWVUeXBlQ2hlY2ssIGhhc1ZhbGlkTUlNRVR5cGUpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgCisgICAgaWYgKCFtX2RlY29kZWRTaGVldFRleHQuaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybiBtX2RlY29kZWRTaGVldFRleHQ7CisgICAgCisgICAgLy8gRG9uJ3QgY2FjaGUgdGhlIGRl
Y29kZWQgdGV4dCwgcmVnZW5lcmF0aW5nIGlzIGNoZWFwIGFuZCBpdCBjYW4gdXNlIHF1aXRlIGEg
Yml0IG9mIG1lbW9yeQorICAgIHJldHVybiBtX2RlY29kZXItPmRlY29kZUFuZEZsdXNoKG1fZGF0
YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSk7Cit9CisKK3ZvaWQgQ2FjaGVkQ1NTU3R5bGVTaGVl
dDo6ZmluaXNoTG9hZGluZyhTaGFyZWRCdWZmZXIqIGRhdGEpCit7CisgICAgbV9kYXRhID0gZGF0
YTsKKyAgICBzZXRFbmNvZGVkU2l6ZShkYXRhID8gZGF0YS0+c2l6ZSgpIDogMCk7CisgICAgLy8g
RGVjb2RlIHRoZSBkYXRhIHRvIGZpbmQgb3V0IHRoZSBlbmNvZGluZyBhbmQga2VlcCB0aGUgc2hl
ZXQgdGV4dCBhcm91bmQgZHVyaW5nIGNoZWNrTm90aWZ5KCkKKyAgICBpZiAoZGF0YSkKKyAgICAg
ICAgbV9kZWNvZGVkU2hlZXRUZXh0ID0gbV9kZWNvZGVyLT5kZWNvZGVBbmRGbHVzaChkYXRhLT5k
YXRhKCksIGRhdGEtPnNpemUoKSk7CisgICAgc2V0TG9hZGluZyhmYWxzZSk7CisgICAgY2hlY2tO
b3RpZnkoKTsKKyAgICAvLyBDbGVhciB0aGUgZGVjb2RlZCB0ZXh0IGFzIGl0IGlzIHVubGlrZWx5
IHRvIGJlIG5lZWRlZCBpbW1lZGlhdGVseSBhZ2FpbiBhbmQgaXMgY2hlYXAgdG8gcmVnZW5lcmF0
ZS4KKyAgICBtX2RlY29kZWRTaGVldFRleHQgPSBTdHJpbmcoKTsKK30KKwordm9pZCBDYWNoZWRD
U1NTdHlsZVNoZWV0OjpjaGVja05vdGlmeSgpCit7CisgICAgaWYgKGlzTG9hZGluZygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRTdHls
ZVNoZWV0Q2xpZW50PiB3KG1fY2xpZW50cyk7CisgICAgd2hpbGUgKENhY2hlZFN0eWxlU2hlZXRD
bGllbnQqIGMgPSB3Lm5leHQoKSkKKyAgICAgICAgYy0+c2V0Q1NTU3R5bGVTaGVldChtX3Jlc291
cmNlUmVxdWVzdC51cmwoKSwgbV9yZXNwb25zZS51cmwoKSwgbV9kZWNvZGVyLT5lbmNvZGluZygp
Lm5hbWUoKSwgdGhpcyk7Cit9CisKK2Jvb2wgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6Y2FuVXNlU2hl
ZXQoTUlNRVR5cGVDaGVjayBtaW1lVHlwZUNoZWNrLCBib29sKiBoYXNWYWxpZE1JTUVUeXBlKSBj
b25zdAoreworICAgIGlmIChlcnJvck9jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmIChtaW1lVHlwZUNoZWNrID09IE1JTUVUeXBlQ2hlY2s6OkxheCkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICAvLyBUaGlzIGNoZWNrIGV4YWN0bHkgbWF0Y2hlcyBGaXJlZm94
LiAgTm90ZSB0aGF0IHdlIGdyYWIgdGhlIENvbnRlbnQtVHlwZQorICAgIC8vIGhlYWRlciBkaXJl
Y3RseSBiZWNhdXNlIHdlIHdhbnQgdG8gc2VlIHdoYXQgdGhlIHZhbHVlIGlzIEJFRk9SRSBjb250
ZW50CisgICAgLy8gc25pZmZpbmcuICBGaXJlZm94IGRvZXMgdGhpcyBieSBzZXR0aW5nIGEgInR5
cGUgaGludCIgb24gdGhlIGNoYW5uZWwuCisgICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBzaG91
bGQgYmUgb2JzZXJ2YXRpb25hbGx5IGVxdWl2YWxlbnQuCisgICAgLy8KKyAgICAvLyBUaGlzIGNv
ZGUgZGVmYXVsdHMgdG8gYWxsb3dpbmcgdGhlIHN0eWxlc2hlZXQgZm9yIG5vbi1IVFRQIHByb3Rv
Y29scyBzbworICAgIC8vIGZvbGtzIGNhbiB1c2Ugc3RhbmRhcmRzIG1vZGUgZm9yIGxvY2FsIEhU
TUwgZG9jdW1lbnRzLgorICAgIFN0cmluZyBtaW1lVHlwZSA9IGV4dHJhY3RNSU1FVHlwZUZyb21N
ZWRpYVR5cGUocmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRl
bnRUeXBlKSk7CisgICAgYm9vbCB0eXBlT0sgPSBtaW1lVHlwZS5pc0VtcHR5KCkgfHwgZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJ0ZXh0L2NzcyIpIHx8IGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiYXBwbGljYXRpb24veC11bmtub3duLWNv
bnRlbnQtdHlwZSIpOworICAgIGlmIChoYXNWYWxpZE1JTUVUeXBlKQorICAgICAgICAqaGFzVmFs
aWRNSU1FVHlwZSA9IHR5cGVPSzsKKyAgICByZXR1cm4gdHlwZU9LOworfQorCit2b2lkIENhY2hl
ZENTU1N0eWxlU2hlZXQ6OmRlc3Ryb3lEZWNvZGVkRGF0YSgpCit7CisgICAgaWYgKCFtX3BhcnNl
ZFN0eWxlU2hlZXRDYWNoZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYXJzZWRTdHlsZVNo
ZWV0Q2FjaGUtPnJlbW92ZWRGcm9tTWVtb3J5Q2FjaGUoKTsKKyAgICBtX3BhcnNlZFN0eWxlU2hl
ZXRDYWNoZSA9IG51bGxwdHI7CisKKyAgICBzZXREZWNvZGVkU2l6ZSgwKTsKK30KKworUGFzc1Jl
ZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+IENhY2hlZENTU1N0eWxlU2hlZXQ6OnJlc3RvcmVQYXJz
ZWRTdHlsZVNoZWV0KGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIENhY2hlUG9saWN5
IGNhY2hlUG9saWN5KQoreworICAgIGlmICghbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUtPnN1
YnJlc291cmNlc0FsbG93UmV1c2UoY2FjaGVQb2xpY3kpKSB7CisgICAgICAgIG1fcGFyc2VkU3R5
bGVTaGVldENhY2hlLT5yZW1vdmVkRnJvbU1lbW9yeUNhY2hlKCk7CisgICAgICAgIG1fcGFyc2Vk
U3R5bGVTaGVldENhY2hlID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorCisgICAgQVNTRVJUKG1fcGFyc2VkU3R5bGVTaGVldENhY2hlLT5pc0NhY2hlYWJsZSgpKTsK
KyAgICBBU1NFUlQobV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUtPmlzSW5NZW1vcnlDYWNoZSgpKTsK
KworICAgIC8vIENvbnRleHRzIG11c3QgYmUgaWRlbnRpY2FsIHNvIHdlIGtub3cgd2Ugd291bGQg
Z2V0IHRoZSBzYW1lIGV4YWN0IHJlc3VsdCBpZiB3ZSBwYXJzZWQgYWdhaW4uCisgICAgaWYgKG1f
cGFyc2VkU3R5bGVTaGVldENhY2hlLT5wYXJzZXJDb250ZXh0KCkgIT0gY29udGV4dCkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBkaWRBY2Nlc3NEZWNvZGVkRGF0YShtb25vdG9uaWNh
bGx5SW5jcmVhc2luZ1RpbWUoKSk7CisKKyAgICByZXR1cm4gbV9wYXJzZWRTdHlsZVNoZWV0Q2Fj
aGU7Cit9CisKK3ZvaWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6c2F2ZVBhcnNlZFN0eWxlU2hlZXQo
UmVmPFN0eWxlU2hlZXRDb250ZW50cz4mJiBzaGVldCkKK3sKKyAgICBBU1NFUlQoc2hlZXQuZ2V0
KCkuaXNDYWNoZWFibGUoKSk7CisKKyAgICBpZiAobV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUpCisg
ICAgICAgIG1fcGFyc2VkU3R5bGVTaGVldENhY2hlLT5yZW1vdmVkRnJvbU1lbW9yeUNhY2hlKCk7
CisgICAgbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUgPSBXVEZNb3ZlKHNoZWV0KTsKKyAgICBtX3Bh
cnNlZFN0eWxlU2hlZXRDYWNoZS0+YWRkZWRUb01lbW9yeUNhY2hlKCk7CisKKyAgICBzZXREZWNv
ZGVkU2l6ZShtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+ZXN0aW1hdGVkU2l6ZUluQnl0ZXMoKSk7
Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRD
U1NTdHlsZVNoZWV0LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkQ1NTU3R5
bGVTaGVldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM0MmE4ZmZlZTYwYjYwOWUxOWU4ZjBhMDI2NjQxMGI2Nzkx
ZTJjZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2Fj
aGVkQ1NTU3R5bGVTaGVldC5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCisgICAgQ29weXJpZ2h0IChD
KSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICAgIENvcHlyaWdodCAoQykg
MjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKworICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVk
IGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUgc2hlZXRzIGFuZCBodG1sCisgICAgcGFnZXMgZnJv
bSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCisqLwor
CisjaWZuZGVmIENhY2hlZENTU1N0eWxlU2hlZXRfaAorI2RlZmluZSBDYWNoZWRDU1NTdHlsZVNo
ZWV0X2gKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworICAgIGNsYXNzIENhY2hlZFJlc291cmNlQ2xpZW50OworICAgIGNsYXNzIFN0eWxlU2hl
ZXRDb250ZW50czsKKyAgICBjbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyOworICAgIHN0cnVjdCBD
U1NQYXJzZXJDb250ZXh0OworCisgICAgY2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVldCBmaW5hbCA6
IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSB7CisgICAgcHVibGljOgorICAgICAgICBDYWNoZWRDU1NT
dHlsZVNoZWV0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwg
U2Vzc2lvbklEKTsKKyAgICAgICAgdmlydHVhbCB+Q2FjaGVkQ1NTU3R5bGVTaGVldCgpOworCisg
ICAgICAgIGVudW0gY2xhc3MgTUlNRVR5cGVDaGVjayB7IFN0cmljdCwgTGF4IH07CisgICAgICAg
IGNvbnN0IFN0cmluZyBzaGVldFRleHQoTUlNRVR5cGVDaGVjayA9IE1JTUVUeXBlQ2hlY2s6OlN0
cmljdCwgYm9vbCogaGFzVmFsaWRNSU1FVHlwZSA9IG51bGxwdHIpIGNvbnN0OworCisgICAgICAg
IFBhc3NSZWZQdHI8U3R5bGVTaGVldENvbnRlbnRzPiByZXN0b3JlUGFyc2VkU3R5bGVTaGVldChj
b25zdCBDU1NQYXJzZXJDb250ZXh0JiwgQ2FjaGVQb2xpY3kpOworICAgICAgICB2b2lkIHNhdmVQ
YXJzZWRTdHlsZVNoZWV0KFJlZjxTdHlsZVNoZWV0Q29udGVudHM+JiYpOworCisgICAgcHJpdmF0
ZToKKyAgICAgICAgYm9vbCBjYW5Vc2VTaGVldChNSU1FVHlwZUNoZWNrLCBib29sKiBoYXNWYWxp
ZE1JTUVUeXBlKSBjb25zdDsKKyAgICAgICAgYm9vbCBtYXlUcnlSZXBsYWNlRW5jb2RlZERhdGEo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdm9pZCBkaWRBZGRD
bGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKSBvdmVycmlkZTsKKworICAgICAgICB2b2lkIHNl
dEVuY29kaW5nKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgICAgICBTdHJpbmcgZW5jb2Rp
bmcoKSBjb25zdCBvdmVycmlkZTsKKyAgICAgICAgY29uc3QgVGV4dFJlc291cmNlRGVjb2Rlciog
dGV4dFJlc291cmNlRGVjb2RlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVjb2Rlci5n
ZXQoKTsgfQorICAgICAgICB2b2lkIGZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKikgb3ZlcnJp
ZGU7CisgICAgICAgIHZvaWQgZGVzdHJveURlY29kZWREYXRhKCkgb3ZlcnJpZGU7CisKKyAgICBw
cm90ZWN0ZWQ6CisgICAgICAgIHZvaWQgY2hlY2tOb3RpZnkoKSBvdmVycmlkZTsKKworICAgICAg
ICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOworICAgICAgICBTdHJpbmcg
bV9kZWNvZGVkU2hlZXRUZXh0OworCisgICAgICAgIFJlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+
IG1fcGFyc2VkU3R5bGVTaGVldENhY2hlOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUNIRURfUkVTT1VSQ0UoQ2FjaGVkQ1NTU3R5
bGVTaGVldCwgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQpCisKKyNlbmRpZiAvLyBDYWNo
ZWRDU1NTdHlsZVNoZWV0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRj
aC9DYWNoZWRGb250LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRGb250
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xNmNiNDFjMzI5MmYxZjk3YWMxYjRkM2MxOTk4ZGRkNTQxZmExZmI3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZEZv
bnQuY3BwCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWNoZWRGb250Lmgi
CisKKyNpbmNsdWRlICJDYWNoZWRGb250Q2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3Vy
Y2VDbGllbnRXYWxrZXIuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgorI2lu
Y2x1ZGUgIkZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRp
b24uaCIKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisjaW5jbHVkZSAiTWVtb3J5Q2Fj
aGUuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJUZXh0UmVzb3VyY2VE
ZWNvZGVyLmgiCisjaW5jbHVkZSAiVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yLmgiCisj
aW5jbHVkZSAiV09GRkZpbGVGb3JtYXQuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworQ2FjaGVkRm9udDo6Q2FjaGVkRm9udChjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgU2Vzc2lvbklEIHNlc3Npb25JRCwgVHlwZSB0eXBl
KQorICAgIDogQ2FjaGVkUmVzb3VyY2UocmVzb3VyY2VSZXF1ZXN0LCB0eXBlLCBzZXNzaW9uSUQp
CisgICAgLCBtX2xvYWRJbml0aWF0ZWQoZmFsc2UpCisgICAgLCBtX2hhc0NyZWF0ZWRGb250RGF0
YVdyYXBwaW5nUmVzb3VyY2UoZmFsc2UpCit7Cit9CisKK0NhY2hlZEZvbnQ6On5DYWNoZWRGb250
KCkKK3sKK30KKwordm9pZCBDYWNoZWRGb250Ojpsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyJiwg
Y29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKQoreworICAgIC8vIERvbid0IGxv
YWQgdGhlIGZpbGUgeWV0LiAgV2FpdCBmb3IgYW4gYWNjZXNzIGJlZm9yZSB0cmlnZ2VyaW5nIHRo
ZSBsb2FkLgorICAgIHNldExvYWRpbmcodHJ1ZSk7CisgICAgbV9vcHRpb25zID0gb3B0aW9uczsK
K30KKwordm9pZCBDYWNoZWRGb250OjpkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQq
IGNsaWVudCkKK3sKKyAgICBBU1NFUlQoY2xpZW50LT5yZXNvdXJjZUNsaWVudFR5cGUoKSA9PSBD
YWNoZWRGb250Q2xpZW50OjpleHBlY3RlZFR5cGUoKSk7CisgICAgaWYgKCFpc0xvYWRpbmcoKSkK
KyAgICAgICAgc3RhdGljX2Nhc3Q8Q2FjaGVkRm9udENsaWVudCo+KGNsaWVudCktPmZvbnRMb2Fk
ZWQoKnRoaXMpOworfQorCit2b2lkIENhY2hlZEZvbnQ6OmZpbmlzaExvYWRpbmcoU2hhcmVkQnVm
ZmVyKiBkYXRhKQoreworICAgIG1fZGF0YSA9IGRhdGE7CisgICAgc2V0RW5jb2RlZFNpemUobV9k
YXRhLmdldCgpID8gbV9kYXRhLT5zaXplKCkgOiAwKTsKKyAgICBzZXRMb2FkaW5nKGZhbHNlKTsK
KyAgICBjaGVja05vdGlmeSgpOworfQorCit2b2lkIENhY2hlZEZvbnQ6OmJlZ2luTG9hZElmTmVl
ZGVkKENhY2hlZFJlc291cmNlTG9hZGVyJiBsb2FkZXIpCit7CisgICAgaWYgKCFtX2xvYWRJbml0
aWF0ZWQpIHsKKyAgICAgICAgbV9sb2FkSW5pdGlhdGVkID0gdHJ1ZTsKKyAgICAgICAgQ2FjaGVk
UmVzb3VyY2U6OmxvYWQobG9hZGVyLCBtX29wdGlvbnMpOworICAgIH0KK30KKworYm9vbCBDYWNo
ZWRGb250OjplbnN1cmVDdXN0b21Gb250RGF0YShjb25zdCBBdG9taWNTdHJpbmcmKQoreworICAg
IHJldHVybiBlbnN1cmVDdXN0b21Gb250RGF0YShtX2RhdGEuZ2V0KCkpOworfQorCitib29sIENh
Y2hlZEZvbnQ6OmVuc3VyZUN1c3RvbUZvbnREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSkKK3sKKyAg
ICBpZiAoIW1fZm9udEN1c3RvbVBsYXRmb3JtRGF0YSAmJiAhZXJyb3JPY2N1cnJlZCgpICYmICFp
c0xvYWRpbmcoKSAmJiBkYXRhKSB7CisgICAgICAgIGJvb2wgd3JhcHBpbmc7CisgICAgICAgIG1f
Zm9udEN1c3RvbVBsYXRmb3JtRGF0YSA9IGNyZWF0ZUN1c3RvbUZvbnREYXRhKCpkYXRhLCB3cmFw
cGluZyk7CisgICAgICAgIG1faGFzQ3JlYXRlZEZvbnREYXRhV3JhcHBpbmdSZXNvdXJjZSA9IG1f
Zm9udEN1c3RvbVBsYXRmb3JtRGF0YSAmJiB3cmFwcGluZzsKKyAgICAgICAgaWYgKCFtX2ZvbnRD
dXN0b21QbGF0Zm9ybURhdGEpCisgICAgICAgICAgICBzZXRTdGF0dXMoRGVjb2RlRXJyb3IpOwor
ICAgIH0KKworICAgIHJldHVybiBtX2ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuZ2V0KCk7Cit9CisK
K3N0ZDo6dW5pcXVlX3B0cjxGb250Q3VzdG9tUGxhdGZvcm1EYXRhPiBDYWNoZWRGb250OjpjcmVh
dGVDdXN0b21Gb250RGF0YShTaGFyZWRCdWZmZXImIGJ5dGVzLCBib29sJiB3cmFwcGluZykKK3sK
KyAgICB3cmFwcGluZyA9IHRydWU7CisKKyNpZiAhUExBVEZPUk0oQ09DT0EpCisgICAgaWYgKGlz
V09GRihieXRlcykpIHsKKyAgICAgICAgd3JhcHBpbmcgPSBmYWxzZTsKKyAgICAgICAgVmVjdG9y
PGNoYXI+IGNvbnZlcnRlZEZvbnQ7CisgICAgICAgIGlmICghY29udmVydFdPRkZUb1NmbnQoYnl0
ZXMsIGNvbnZlcnRlZEZvbnQpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAg
ICAgYXV0byBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKGNvbnZlcnRlZEZvbnQp
OworICAgICAgICByZXR1cm4gY3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YShidWZmZXIpOwor
ICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIGNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEo
Ynl0ZXMpOworfQorCitSZWZQdHI8Rm9udD4gQ2FjaGVkRm9udDo6Y3JlYXRlRm9udChjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiwgYm9v
bCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYywgY29uc3QgRm9udEZlYXR1cmVT
ZXR0aW5ncyYgZm9udEZhY2VGZWF0dXJlcywgY29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYgZm9u
dEZhY2VWYXJpYW50U2V0dGluZ3MpCit7CisgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShwbGF0Zm9y
bURhdGFGcm9tQ3VzdG9tRGF0YShmb250RGVzY3JpcHRpb24sIHN5bnRoZXRpY0JvbGQsIHN5bnRo
ZXRpY0l0YWxpYywgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VWYXJpYW50U2V0dGluZ3MpLCB0
cnVlKTsKK30KKworRm9udFBsYXRmb3JtRGF0YSBDYWNoZWRGb250OjpwbGF0Zm9ybURhdGFGcm9t
Q3VzdG9tRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgYm9vbCBi
b2xkLCBib29sIGl0YWxpYywgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyYgZm9udEZhY2VGZWF0
dXJlcywgY29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYgZm9udEZhY2VWYXJpYW50U2V0dGluZ3Mp
Cit7CisgICAgQVNTRVJUKG1fZm9udEN1c3RvbVBsYXRmb3JtRGF0YSk7CisgICAgcmV0dXJuIHBs
YXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKCptX2ZvbnRDdXN0b21QbGF0Zm9ybURhdGEsIGZvbnRE
ZXNjcmlwdGlvbiwgYm9sZCwgaXRhbGljLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFjZVZhcmlh
bnRTZXR0aW5ncyk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEgQ2FjaGVkRm9udDo6cGxhdGZvcm1E
YXRhRnJvbUN1c3RvbURhdGEoRm9udEN1c3RvbVBsYXRmb3JtRGF0YSYgZm9udEN1c3RvbVBsYXRm
b3JtRGF0YSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGJvb2wgYm9s
ZCwgYm9vbCBpdGFsaWMsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MmIGZvbnRGYWNlRmVhdHVy
ZXMsIGNvbnN0IEZvbnRWYXJpYW50U2V0dGluZ3MmIGZvbnRGYWNlVmFyaWFudFNldHRpbmdzKQor
eworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHJldHVybiBmb250Q3VzdG9tUGxhdGZvcm1EYXRh
LmZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBib2xkLCBpdGFsaWMsIGZvbnRGYWNl
RmVhdHVyZXMsIGZvbnRGYWNlVmFyaWFudFNldHRpbmdzKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKGZvbnRGYWNlRmVhdHVyZXMpOworICAgIFVOVVNFRF9QQVJBTShmb250RmFjZVZhcmlhbnRT
ZXR0aW5ncyk7CisgICAgcmV0dXJuIGZvbnRDdXN0b21QbGF0Zm9ybURhdGEuZm9udFBsYXRmb3Jt
RGF0YShmb250RGVzY3JpcHRpb24sIGJvbGQsIGl0YWxpYyk7CisjZW5kaWYKK30KKwordm9pZCBD
YWNoZWRGb250OjphbGxDbGllbnRzUmVtb3ZlZCgpCit7CisgICAgbV9mb250Q3VzdG9tUGxhdGZv
cm1EYXRhID0gbnVsbHB0cjsKK30KKwordm9pZCBDYWNoZWRGb250OjpjaGVja05vdGlmeSgpCit7
CisgICAgaWYgKGlzTG9hZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQ2FjaGVk
UmVzb3VyY2VDbGllbnRXYWxrZXI8Q2FjaGVkRm9udENsaWVudD4gd2Fsa2VyKG1fY2xpZW50cyk7
CisgICAgd2hpbGUgKENhY2hlZEZvbnRDbGllbnQqIGNsaWVudCA9IHdhbGtlci5uZXh0KCkpCisg
ICAgICAgIGNsaWVudC0+Zm9udExvYWRlZCgqdGhpcyk7Cit9CisKK2Jvb2wgQ2FjaGVkRm9udDo6
bWF5VHJ5UmVwbGFjZUVuY29kZWREYXRhKCkgY29uc3QKK3sKKyAgICAvLyBJZiBhIEZvbnRDdXN0
b21QbGF0Zm9ybURhdGEgaGFzIGV2ZXIgYmVlbiBjb25zdHJ1Y3RlZCB0byB3cmFwIHRoZSBpbnRl
cm5hbCByZXNvdXJjZSBidWZmZXIgdGhlbiBpdCBzdGlsbCBtaWdodCBiZSBpbiB1c2Ugc29tZXdo
ZXJlLgorICAgIC8vIFRoYXQgcGxhdGZvcm0gZm9udCBvYmplY3QgbWlnaHQgZGlyZWN0bHkgcmVm
ZXJlbmNlIHRoZSBlbmNvZGVkIGRhdGEgYnVmZmVyIGJlaGluZCB0aGlzIENhY2hlZEZvbnQsCisg
ICAgLy8gc28gcmVwbGFjaW5nIGl0IGlzIHVuc2FmZS4KKworICAgIHJldHVybiAhbV9oYXNDcmVh
dGVkRm9udERhdGFXcmFwcGluZ1Jlc291cmNlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkRm9udC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2ZldGNoL0NhY2hlZEZvbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNThjOWUwOTVjNDlmZWZlMjE3YTNhNjdi
MDA2ZjVmNTQ1MWFjMGMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2ZldGNoL0NhY2hlZEZvbnQuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ2FjaGVkRm9udF9oCisj
ZGVmaW5lIENhY2hlZEZvbnRfaAorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNs
dWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRl
ICJUZXh0RmxhZ3MuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWNoZWRSZXNv
dXJjZUxvYWRlcjsKK2NsYXNzIEZvbnREZXNjcmlwdGlvbjsKK2NsYXNzIEZvbnRGZWF0dXJlU2V0
dGluZ3M7CitjbGFzcyBGb250UGxhdGZvcm1EYXRhOworY2xhc3MgU1ZHRG9jdW1lbnQ7CitjbGFz
cyBTVkdGb250RWxlbWVudDsKK3N0cnVjdCBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOworCitjbGFz
cyBDYWNoZWRGb250IDogcHVibGljIENhY2hlZFJlc291cmNlIHsKK3B1YmxpYzoKKyAgICBDYWNo
ZWRGb250KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFNlc3Npb25JRCwgVHlwZSA9IEZvbnRSZXNv
dXJjZSk7CisgICAgdmlydHVhbCB+Q2FjaGVkRm9udCgpOworCisgICAgdm9pZCBiZWdpbkxvYWRJ
Zk5lZWRlZChDYWNoZWRSZXNvdXJjZUxvYWRlciYpOworICAgIGJvb2wgc3RpbGxOZWVkc0xvYWQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAhbV9sb2FkSW5pdGlhdGVkOyB9CisKKyAgICB2aXJ0
dWFsIGJvb2wgZW5zdXJlQ3VzdG9tRm9udERhdGEoY29uc3QgQXRvbWljU3RyaW5nJiByZW1vdGVV
UkkpOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxGb250Q3VzdG9tUGxhdGZvcm1EYXRh
PiBjcmVhdGVDdXN0b21Gb250RGF0YShTaGFyZWRCdWZmZXImLCBib29sJiB3cmFwcGluZyk7Cisg
ICAgc3RhdGljIEZvbnRQbGF0Zm9ybURhdGEgcGxhdGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YSYsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgYm9sZCwg
Ym9vbCBpdGFsaWMsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MmLCBjb25zdCBGb250VmFyaWFu
dFNldHRpbmdzJik7CisKKyAgICB2aXJ0dWFsIFJlZlB0cjxGb250PiBjcmVhdGVGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJLCBib29sIHN5
bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBjb25zdCBGb250RmVhdHVyZVNldHRp
bmdzJiwgY29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYpOworCitwcm90ZWN0ZWQ6CisgICAgRm9u
dFBsYXRmb3JtRGF0YSBwbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdz
JiwgY29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyYpOworCisgICAgYm9vbCBlbnN1cmVDdXN0b21G
b250RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEpOworCitwcml2YXRlOgorICAgIHZvaWQgY2hlY2tO
b3RpZnkoKSBvdmVycmlkZTsKKyAgICBib29sIG1heVRyeVJlcGxhY2VFbmNvZGVkRGF0YSgpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyJiwgY29u
c3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRpZEFkZENs
aWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopIG92ZXJyaWRlOworICAgIHZvaWQgZmluaXNoTG9h
ZGluZyhTaGFyZWRCdWZmZXIqKSBvdmVycmlkZTsKKworICAgIHZvaWQgYWxsQ2xpZW50c1JlbW92
ZWQoKSBvdmVycmlkZTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250Q3VzdG9tUGxhdGZvcm1E
YXRhPiBtX2ZvbnRDdXN0b21QbGF0Zm9ybURhdGE7CisgICAgYm9vbCBtX2xvYWRJbml0aWF0ZWQ7
CisgICAgYm9vbCBtX2hhc0NyZWF0ZWRGb250RGF0YVdyYXBwaW5nUmVzb3VyY2U7CisKKyAgICBm
cmllbmQgY2xhc3MgTWVtb3J5Q2FjaGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FDSEVEX1JFU09VUkNFKENhY2hlZEZvbnQsIENhY2hl
ZFJlc291cmNlOjpGb250UmVzb3VyY2UpCisKKyNlbmRpZiAvLyBDYWNoZWRGb250X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRGb250Q2xpZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkRm9udENsaWVudC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjQ5MzI0MWE2MGY0MDFlM2FiNTcxMTcyZjFjOWI5MWJmYmYxMWViNTQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkRm9udENsaWVudC5oCkBAIC0w
LDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENhY2hlZEZvbnRDbGllbnRfaAorI2Rl
ZmluZSBDYWNoZWRGb250Q2xpZW50X2gKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FjaGVkRm9udDsKKworY2xhc3Mg
Q2FjaGVkRm9udENsaWVudCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB+Q2FjaGVkRm9udENsaWVudCgpIHsgfQorICAgIHN0YXRpYyBDYWNoZWRS
ZXNvdXJjZUNsaWVudFR5cGUgZXhwZWN0ZWRUeXBlKCkgeyByZXR1cm4gRm9udFR5cGU7IH0KKyAg
ICBDYWNoZWRSZXNvdXJjZUNsaWVudFR5cGUgcmVzb3VyY2VDbGllbnRUeXBlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZXhwZWN0ZWRUeXBlKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZm9udExv
YWRlZChDYWNoZWRGb250JikgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBDYWNoZWRGb250Q2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9mZXRjaC9DYWNoZWRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gv
Q2FjaGVkSW1hZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1ZDBlZDdiYjExZWJiMGFiMDU5YTliNjRiNGE3
YTY5ZGRkYjIyMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0
Y2gvQ2FjaGVkSW1hZ2UuY3BwCkBAIC0wLDAgKzEsNTQxIEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQorICAgIENvcHlyaWdodCAo
QykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMp
IDIwMDIgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykg
MjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorCisj
aW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZUNsaWVudC5oIgor
I2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3Vy
Y2VDbGllbnRXYWxrZXIuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgorI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFt
ZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKKyNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHSW1hZ2UuaCIKKyNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKKyNpZiBQTEFURk9STShJT1MpCisjaW5j
bHVkZSAiU3lzdGVtTWVtb3J5LmgiCisjZW5kaWYKKworI2lmIFVTRShDRykKKyNpbmNsdWRlICJQ
REZEb2N1bWVudEltYWdlLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDYWNo
ZWRJbWFnZTo6Q2FjaGVkSW1hZ2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVl
c3QsIFNlc3Npb25JRCBzZXNzaW9uSUQpCisgICAgOiBDYWNoZWRSZXNvdXJjZShyZXNvdXJjZVJl
cXVlc3QsIEltYWdlUmVzb3VyY2UsIHNlc3Npb25JRCkKKyAgICAsIG1faW1hZ2UobnVsbHB0cikK
KyAgICAsIG1faXNNYW51YWxseUNhY2hlZChmYWxzZSkKKyAgICAsIG1fc2hvdWxkUGFpbnRCcm9r
ZW5JbWFnZSh0cnVlKQoreworICAgIHNldFN0YXR1cyhVbmtub3duKTsKK30KKworQ2FjaGVkSW1h
Z2U6OkNhY2hlZEltYWdlKEltYWdlKiBpbWFnZSwgU2Vzc2lvbklEIHNlc3Npb25JRCkKKyAgICA6
IENhY2hlZFJlc291cmNlKFJlc291cmNlUmVxdWVzdCgpLCBJbWFnZVJlc291cmNlLCBzZXNzaW9u
SUQpCisgICAgLCBtX2ltYWdlKGltYWdlKQorICAgICwgbV9pc01hbnVhbGx5Q2FjaGVkKGZhbHNl
KQorICAgICwgbV9zaG91bGRQYWludEJyb2tlbkltYWdlKHRydWUpCit7CisgICAgc2V0U3RhdHVz
KENhY2hlZCk7CisgICAgc2V0TG9hZGluZyhmYWxzZSk7Cit9CisKK0NhY2hlZEltYWdlOjpDYWNo
ZWRJbWFnZShjb25zdCBVUkwmIHVybCwgSW1hZ2UqIGltYWdlLCBTZXNzaW9uSUQgc2Vzc2lvbklE
KQorICAgIDogQ2FjaGVkUmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0KHVybCksIEltYWdlUmVzb3Vy
Y2UsIHNlc3Npb25JRCkKKyAgICAsIG1faW1hZ2UoaW1hZ2UpCisgICAgLCBtX2lzTWFudWFsbHlD
YWNoZWQoZmFsc2UpCisgICAgLCBtX3Nob3VsZFBhaW50QnJva2VuSW1hZ2UodHJ1ZSkKK3sKKyAg
ICBzZXRTdGF0dXMoQ2FjaGVkKTsKKyAgICBzZXRMb2FkaW5nKGZhbHNlKTsKK30KKworQ2FjaGVk
SW1hZ2U6OkNhY2hlZEltYWdlKGNvbnN0IFVSTCYgdXJsLCBJbWFnZSogaW1hZ2UsIENhY2hlZElt
YWdlOjpDYWNoZUJlaGF2aW9yVHlwZSB0eXBlLCBTZXNzaW9uSUQgc2Vzc2lvbklEKQorICAgIDog
Q2FjaGVkUmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0KHVybCksIEltYWdlUmVzb3VyY2UsIHNlc3Np
b25JRCkKKyAgICAsIG1faW1hZ2UoaW1hZ2UpCisgICAgLCBtX2lzTWFudWFsbHlDYWNoZWQodHlw
ZSA9PSBDYWNoZWRJbWFnZTo6TWFudWFsbHlDYWNoZWQpCisgICAgLCBtX3Nob3VsZFBhaW50QnJv
a2VuSW1hZ2UodHJ1ZSkKK3sKKyAgICBzZXRTdGF0dXMoQ2FjaGVkKTsKKyAgICBzZXRMb2FkaW5n
KGZhbHNlKTsKKyAgICBpZiAoVU5MSUtFTFkoaXNNYW51YWxseUNhY2hlZCgpKSkgeworICAgICAg
ICAvLyBVc2UgdGhlIGluY29taW5nIFVSTCBpbiB0aGUgcmVzcG9uc2UgZmllbGQuIFRoaXMgZW5z
dXJlcyB0aGF0IGNvZGUKKyAgICAgICAgLy8gdXNpbmcgdGhlIHJlc3BvbnNlIGRpcmVjdGx5LCBz
dWNoIGFzIG9yaWdpbiBjaGVja3MgZm9yIHNlY3VyaXR5LAorICAgICAgICAvLyBhY3R1YWxseSBz
ZWUgc29tZXRoaW5nLgorICAgICAgICBtX3Jlc3BvbnNlLnNldFVSTCh1cmwpOworICAgIH0KK30K
KworQ2FjaGVkSW1hZ2U6On5DYWNoZWRJbWFnZSgpCit7CisgICAgY2xlYXJJbWFnZSgpOworfQor
Cit2b2lkIENhY2hlZEltYWdlOjpsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyJiBjYWNoZWRSZXNv
dXJjZUxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKQoreworICAg
IGlmIChjYWNoZWRSZXNvdXJjZUxvYWRlci5zaG91bGRQZXJmb3JtSW1hZ2VMb2FkKHVybCgpKSkK
KyAgICAgICAgQ2FjaGVkUmVzb3VyY2U6OmxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIsIG9wdGlv
bnMpOworICAgIGVsc2UKKyAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7Cit9CisKK3ZvaWQgQ2Fj
aGVkSW1hZ2U6OnNldEJvZHlEYXRhRnJvbShjb25zdCBDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2Up
Cit7CisgICAgQVNTRVJUKHJlc291cmNlLnR5cGUoKSA9PSB0eXBlKCkpOworICAgIGNvbnN0IENh
Y2hlZEltYWdlJiBpbWFnZSA9IHN0YXRpY19jYXN0PGNvbnN0IENhY2hlZEltYWdlJj4ocmVzb3Vy
Y2UpOworCisgICAgc2V0TG9hZGluZyhmYWxzZSk7CisgICAgbV9pbWFnZSA9IGltYWdlLm1faW1h
Z2U7CisKKyAgICBpZiAobV9pbWFnZSAmJiBpczxTVkdJbWFnZT4oKm1faW1hZ2UpKQorICAgICAg
ICBtX3N2Z0ltYWdlQ2FjaGUgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR0ltYWdlQ2FjaGU+KCZkb3du
Y2FzdDxTVkdJbWFnZT4oKm1faW1hZ2UpKTsKK30KKwordm9pZCBDYWNoZWRJbWFnZTo6ZGlkQWRk
Q2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50KiBjbGllbnQpCit7CisgICAgaWYgKG1fZGF0YSAm
JiAhbV9pbWFnZSAmJiAhZXJyb3JPY2N1cnJlZCgpKSB7CisgICAgICAgIGNyZWF0ZUltYWdlKCk7
CisgICAgICAgIG1faW1hZ2UtPnNldERhdGEobV9kYXRhLmNvcHlSZWYoKSwgdHJ1ZSk7CisgICAg
fQorCisgICAgQVNTRVJUKGNsaWVudC0+cmVzb3VyY2VDbGllbnRUeXBlKCkgPT0gQ2FjaGVkSW1h
Z2VDbGllbnQ6OmV4cGVjdGVkVHlwZSgpKTsKKyAgICBpZiAobV9pbWFnZSAmJiAhbV9pbWFnZS0+
aXNOdWxsKCkpCisgICAgICAgIHN0YXRpY19jYXN0PENhY2hlZEltYWdlQ2xpZW50Kj4oY2xpZW50
KS0+aW1hZ2VDaGFuZ2VkKHRoaXMpOworCisgICAgQ2FjaGVkUmVzb3VyY2U6OmRpZEFkZENsaWVu
dChjbGllbnQpOworfQorCit2b2lkIENhY2hlZEltYWdlOjpkaWRSZW1vdmVDbGllbnQoQ2FjaGVk
UmVzb3VyY2VDbGllbnQqIGNsaWVudCkKK3sKKyAgICBBU1NFUlQoY2xpZW50KTsKKyAgICBBU1NF
UlQoY2xpZW50LT5yZXNvdXJjZUNsaWVudFR5cGUoKSA9PSBDYWNoZWRJbWFnZUNsaWVudDo6ZXhw
ZWN0ZWRUeXBlKCkpOworCisgICAgbV9wZW5kaW5nQ29udGFpbmVyU2l6ZVJlcXVlc3RzLnJlbW92
ZShzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZUNsaWVudCo+KGNsaWVudCkpOworCisgICAgaWYgKG1f
c3ZnSW1hZ2VDYWNoZSkKKyAgICAgICAgbV9zdmdJbWFnZUNhY2hlLT5yZW1vdmVDbGllbnRGcm9t
Q2FjaGUoc3RhdGljX2Nhc3Q8Q2FjaGVkSW1hZ2VDbGllbnQqPihjbGllbnQpKTsKKworICAgIENh
Y2hlZFJlc291cmNlOjpkaWRSZW1vdmVDbGllbnQoY2xpZW50KTsKK30KKwordm9pZCBDYWNoZWRJ
bWFnZTo6c3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSgpCit7CisgICAgQVNTRVJU
KGlzPENhY2hlZEltYWdlPihyZXNvdXJjZVRvUmV2YWxpZGF0ZSgpKSk7CisgICAgLy8gUGVuZGlu
ZyBjb250YWluZXIgc2l6ZSByZXF1ZXN0cyBuZWVkIHRvIGJlIHRyYW5zZmVycmVkIHRvIHRoZSBy
ZXZhbGlkYXRlZCByZXNvdXJjZS4KKyAgICBpZiAoIW1fcGVuZGluZ0NvbnRhaW5lclNpemVSZXF1
ZXN0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gQSBjb3B5IG9mIHBlbmRpbmcgc2l6ZSByZXF1
ZXN0cyBpcyBuZWVkZWQgYXMgdGhleSBhcmUgZGVsZXRlZCBkdXJpbmcgQ2FjaGVkUmVzb3VyY2U6
OnN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVSZXNvdWNlKCkuCisgICAgICAgIENvbnRhaW5lclNp
emVSZXF1ZXN0cyBzd2l0Y2hDb250YWluZXJTaXplUmVxdWVzdHM7CisgICAgICAgIGZvciAoYXV0
byYgcmVxdWVzdCA6IG1fcGVuZGluZ0NvbnRhaW5lclNpemVSZXF1ZXN0cykKKyAgICAgICAgICAg
IHN3aXRjaENvbnRhaW5lclNpemVSZXF1ZXN0cy5zZXQocmVxdWVzdC5rZXksIHJlcXVlc3QudmFs
dWUpOworICAgICAgICBDYWNoZWRSZXNvdXJjZTo6c3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZWRS
ZXNvdXJjZSgpOworICAgICAgICBDYWNoZWRJbWFnZSYgcmV2YWxpZGF0ZWRDYWNoZWRJbWFnZSA9
IGRvd25jYXN0PENhY2hlZEltYWdlPigqcmVzb3VyY2VUb1JldmFsaWRhdGUoKSk7CisgICAgICAg
IGZvciAoYXV0byYgcmVxdWVzdCA6IHN3aXRjaENvbnRhaW5lclNpemVSZXF1ZXN0cykKKyAgICAg
ICAgICAgIHJldmFsaWRhdGVkQ2FjaGVkSW1hZ2Uuc2V0Q29udGFpbmVyU2l6ZUZvclJlbmRlcmVy
KHJlcXVlc3Qua2V5LCByZXF1ZXN0LnZhbHVlLmZpcnN0LCByZXF1ZXN0LnZhbHVlLnNlY29uZCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDYWNoZWRSZXNvdXJjZTo6c3dpdGNoQ2xp
ZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSgpOworfQorCit2b2lkIENhY2hlZEltYWdlOjphbGxD
bGllbnRzUmVtb3ZlZCgpCit7CisgICAgbV9wZW5kaW5nQ29udGFpbmVyU2l6ZVJlcXVlc3RzLmNs
ZWFyKCk7CisgICAgaWYgKG1faW1hZ2UgJiYgIWVycm9yT2NjdXJyZWQoKSkKKyAgICAgICAgbV9p
bWFnZS0+cmVzZXRBbmltYXRpb24oKTsKK30KKworc3RkOjpwYWlyPEltYWdlKiwgZmxvYXQ+IENh
Y2hlZEltYWdlOjpicm9rZW5JbWFnZShmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikgY29uc3QKK3sK
KyAgICBpZiAoZGV2aWNlU2NhbGVGYWN0b3IgPj0gMykgeworICAgICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8SW1hZ2UqPiBicm9rZW5JbWFnZVZlcnlIaVJlcyhJbWFnZTo6bG9hZFBsYXRmb3Jt
UmVzb3VyY2UoIm1pc3NpbmdJbWFnZUAzeCIpLmxlYWtSZWYoKSk7CisgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihicm9rZW5JbWFnZVZlcnlIaVJlcywgMyk7CisgICAgfQorCisgICAgaWYg
KGRldmljZVNjYWxlRmFjdG9yID49IDIpIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEltYWdlKj4gYnJva2VuSW1hZ2VIaVJlcyhJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1p
c3NpbmdJbWFnZUAyeCIpLmxlYWtSZWYoKSk7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFp
cihicm9rZW5JbWFnZUhpUmVzLCAyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8SW1hZ2UqPiBicm9rZW5JbWFnZUxvUmVzKEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgi
bWlzc2luZ0ltYWdlIikubGVha1JlZigpKTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoYnJv
a2VuSW1hZ2VMb1JlcywgMSk7Cit9CisKK2Jvb2wgQ2FjaGVkSW1hZ2U6OndpbGxQYWludEJyb2tl
bkltYWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZXJyb3JPY2N1cnJlZCgpICYmIG1fc2hvdWxk
UGFpbnRCcm9rZW5JbWFnZTsKK30KKworSW1hZ2UqIENhY2hlZEltYWdlOjppbWFnZSgpCit7Cisg
ICAgaWYgKGVycm9yT2NjdXJyZWQoKSAmJiBtX3Nob3VsZFBhaW50QnJva2VuSW1hZ2UpIHsKKyAg
ICAgICAgLy8gUmV0dXJuaW5nIHRoZSAxeCBicm9rZW4gaW1hZ2UgaXMgbm9uLWlkZWFsLCBidXQg
d2UgY2Fubm90IHJlbGlhYmx5IGFjY2VzcyB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgLy8gZGV2
aWNlU2NhbGVGYWN0b3IgZnJvbSBoZXJlLiBJdCBpcyBjcml0aWNhbCB0aGF0IGNhbGxlcnMgdXNl
IENhY2hlZEltYWdlOjpicm9rZW5JbWFnZSgpIAorICAgICAgICAvLyB3aGVuIHRoZXkgbmVlZCB0
aGUgcmVhbCwgZGV2aWNlU2NhbGVGYWN0b3ItYXBwcm9wcmlhdGUgYnJva2VuIGltYWdlIGljb24u
IAorICAgICAgICByZXR1cm4gYnJva2VuSW1hZ2UoMSkuZmlyc3Q7CisgICAgfQorCisgICAgaWYg
KG1faW1hZ2UpCisgICAgICAgIHJldHVybiBtX2ltYWdlLmdldCgpOworCisgICAgcmV0dXJuIElt
YWdlOjpudWxsSW1hZ2UoKTsKK30KKworSW1hZ2UqIENhY2hlZEltYWdlOjppbWFnZUZvclJlbmRl
cmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgaWYgKGVycm9yT2NjdXJy
ZWQoKSAmJiBtX3Nob3VsZFBhaW50QnJva2VuSW1hZ2UpIHsKKyAgICAgICAgLy8gUmV0dXJuaW5n
IHRoZSAxeCBicm9rZW4gaW1hZ2UgaXMgbm9uLWlkZWFsLCBidXQgd2UgY2Fubm90IHJlbGlhYmx5
IGFjY2VzcyB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgLy8gZGV2aWNlU2NhbGVGYWN0b3IgZnJv
bSBoZXJlLiBJdCBpcyBjcml0aWNhbCB0aGF0IGNhbGxlcnMgdXNlIENhY2hlZEltYWdlOjpicm9r
ZW5JbWFnZSgpIAorICAgICAgICAvLyB3aGVuIHRoZXkgbmVlZCB0aGUgcmVhbCwgZGV2aWNlU2Nh
bGVGYWN0b3ItYXBwcm9wcmlhdGUgYnJva2VuIGltYWdlIGljb24uIAorICAgICAgICByZXR1cm4g
YnJva2VuSW1hZ2UoMSkuZmlyc3Q7CisgICAgfQorCisgICAgaWYgKCFtX2ltYWdlKQorICAgICAg
ICByZXR1cm4gSW1hZ2U6Om51bGxJbWFnZSgpOworCisgICAgaWYgKG1faW1hZ2UtPmlzU1ZHSW1h
Z2UoKSkgeworICAgICAgICBJbWFnZSogaW1hZ2UgPSBtX3N2Z0ltYWdlQ2FjaGUtPmltYWdlRm9y
UmVuZGVyZXIocmVuZGVyZXIpOworICAgICAgICBpZiAoaW1hZ2UgIT0gSW1hZ2U6Om51bGxJbWFn
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGltYWdlOworICAgIH0KKyAgICByZXR1cm4gbV9pbWFn
ZS5nZXQoKTsKK30KKwordm9pZCBDYWNoZWRJbWFnZTo6c2V0Q29udGFpbmVyU2l6ZUZvclJlbmRl
cmVyKGNvbnN0IENhY2hlZEltYWdlQ2xpZW50KiByZW5kZXJlciwgY29uc3QgTGF5b3V0U2l6ZSYg
Y29udGFpbmVyU2l6ZSwgZmxvYXQgY29udGFpbmVyWm9vbSkKK3sKKyAgICBpZiAoY29udGFpbmVy
U2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQocmVuZGVyZXIpOwor
ICAgIEFTU0VSVChjb250YWluZXJab29tKTsKKyAgICBpZiAoIW1faW1hZ2UpIHsKKyAgICAgICAg
bV9wZW5kaW5nQ29udGFpbmVyU2l6ZVJlcXVlc3RzLnNldChyZW5kZXJlciwgU2l6ZUFuZFpvb20o
Y29udGFpbmVyU2l6ZSwgY29udGFpbmVyWm9vbSkpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKCFtX2ltYWdlLT5pc1NWR0ltYWdlKCkpIHsKKyAgICAgICAgbV9pbWFnZS0+c2V0
Q29udGFpbmVyU2l6ZShjb250YWluZXJTaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG1fc3ZnSW1hZ2VDYWNoZS0+c2V0Q29udGFpbmVyU2l6ZUZvclJlbmRlcmVyKHJlbmRlcmVy
LCBjb250YWluZXJTaXplLCBjb250YWluZXJab29tKTsKK30KKworYm9vbCBDYWNoZWRJbWFnZTo6
dXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1faW1hZ2UpCisgICAg
ICAgIHJldHVybiBtX2ltYWdlLT51c2VzQ29udGFpbmVyU2l6ZSgpOworCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIENhY2hlZEltYWdlOjppbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25z
dAoreworICAgIGlmIChtX2ltYWdlKQorICAgICAgICByZXR1cm4gbV9pbWFnZS0+aGFzUmVsYXRp
dmVXaWR0aCgpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIENhY2hlZEltYWdlOjpp
bWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QKK3sKKyAgICBpZiAobV9pbWFnZSkKKyAgICAg
ICAgcmV0dXJuIG1faW1hZ2UtPmhhc1JlbGF0aXZlSGVpZ2h0KCk7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK0xheW91dFNpemUgQ2FjaGVkSW1hZ2U6OmltYWdlU2l6ZUZvclJlbmRlcmVyKGNv
bnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGZsb2F0IG11bHRpcGxpZXIsIFNpemVUeXBlIHNp
emVUeXBlKQoreworICAgIGlmICghbV9pbWFnZSkKKyAgICAgICAgcmV0dXJuIExheW91dFNpemUo
KTsKKworICAgIExheW91dFNpemUgaW1hZ2VTaXplOworCisgICAgaWYgKGlzPEJpdG1hcEltYWdl
PigqbV9pbWFnZSkgJiYgcmVuZGVyZXIgJiYgcmVuZGVyZXItPnNob3VsZFJlc3BlY3RJbWFnZU9y
aWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pCisgICAgICAgIGltYWdlU2l6
ZSA9IExheW91dFNpemUoZG93bmNhc3Q8Qml0bWFwSW1hZ2U+KCptX2ltYWdlKS5zaXplUmVzcGVj
dGluZ09yaWVudGF0aW9uKCkpOworICAgIGVsc2UgaWYgKGlzPFNWR0ltYWdlPigqbV9pbWFnZSkg
JiYgc2l6ZVR5cGUgPT0gVXNlZFNpemUpCisgICAgICAgIGltYWdlU2l6ZSA9IExheW91dFNpemUo
bV9zdmdJbWFnZUNhY2hlLT5pbWFnZVNpemVGb3JSZW5kZXJlcihyZW5kZXJlcikpOworICAgIGVs
c2UKKyAgICAgICAgaW1hZ2VTaXplID0gTGF5b3V0U2l6ZShtX2ltYWdlLT5zaXplKCkpOworCisg
ICAgaWYgKG11bHRpcGxpZXIgPT0gMS4wZikKKyAgICAgICAgcmV0dXJuIGltYWdlU2l6ZTsKKyAg
ICAgICAgCisgICAgLy8gRG9uJ3QgbGV0IGltYWdlcyB0aGF0IGhhdmUgYSB3aWR0aC9oZWlnaHQg
Pj0gMSBzaHJpbmsgYmVsb3cgMSB3aGVuIHpvb21lZC4KKyAgICBmbG9hdCB3aWR0aFNjYWxlID0g
bV9pbWFnZS0+aGFzUmVsYXRpdmVXaWR0aCgpID8gMS4wZiA6IG11bHRpcGxpZXI7CisgICAgZmxv
YXQgaGVpZ2h0U2NhbGUgPSBtX2ltYWdlLT5oYXNSZWxhdGl2ZUhlaWdodCgpID8gMS4wZiA6IG11
bHRpcGxpZXI7CisgICAgTGF5b3V0U2l6ZSBtaW5pbXVtU2l6ZShpbWFnZVNpemUud2lkdGgoKSA+
IDAgPyAxIDogMCwgaW1hZ2VTaXplLmhlaWdodCgpID4gMCA/IDEgOiAwKTsKKyAgICBpbWFnZVNp
emUuc2NhbGUod2lkdGhTY2FsZSwgaGVpZ2h0U2NhbGUpOworICAgIGltYWdlU2l6ZS5jbGFtcFRv
TWluaW11bVNpemUobWluaW11bVNpemUpOworICAgIEFTU0VSVChtdWx0aXBsaWVyICE9IDEuMGYg
fHwgKGltYWdlU2l6ZS53aWR0aCgpLmZyYWN0aW9uKCkgPT0gMC4wZiAmJiBpbWFnZVNpemUuaGVp
Z2h0KCkuZnJhY3Rpb24oKSA9PSAwLjBmKSk7CisgICAgcmV0dXJuIGltYWdlU2l6ZTsKK30KKwor
dm9pZCBDYWNoZWRJbWFnZTo6Y29tcHV0ZUludHJpbnNpY0RpbWVuc2lvbnMoTGVuZ3RoJiBpbnRy
aW5zaWNXaWR0aCwgTGVuZ3RoJiBpbnRyaW5zaWNIZWlnaHQsIEZsb2F0U2l6ZSYgaW50cmluc2lj
UmF0aW8pCit7CisgICAgaWYgKG1faW1hZ2UpCisgICAgICAgIG1faW1hZ2UtPmNvbXB1dGVJbnRy
aW5zaWNEaW1lbnNpb25zKGludHJpbnNpY1dpZHRoLCBpbnRyaW5zaWNIZWlnaHQsIGludHJpbnNp
Y1JhdGlvKTsKK30KKwordm9pZCBDYWNoZWRJbWFnZTo6bm90aWZ5T2JzZXJ2ZXJzKGNvbnN0IElu
dFJlY3QqIGNoYW5nZVJlY3QpCit7CisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI8Q2Fj
aGVkSW1hZ2VDbGllbnQ+IHcobV9jbGllbnRzKTsKKyAgICB3aGlsZSAoQ2FjaGVkSW1hZ2VDbGll
bnQqIGMgPSB3Lm5leHQoKSkKKyAgICAgICAgYy0+aW1hZ2VDaGFuZ2VkKHRoaXMsIGNoYW5nZVJl
Y3QpOworfQorCit2b2lkIENhY2hlZEltYWdlOjpjaGVja1Nob3VsZFBhaW50QnJva2VuSW1hZ2Uo
KQoreworICAgIGlmICghbV9sb2FkZXIgfHwgbV9sb2FkZXItPnJlYWNoZWRUZXJtaW5hbFN0YXRl
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSA9IG1f
bG9hZGVyLT5mcmFtZUxvYWRlcigpLT5jbGllbnQoKS5zaG91bGRQYWludEJyb2tlbkltYWdlKHVy
bCgpKTsKK30KKwordm9pZCBDYWNoZWRJbWFnZTo6Y2xlYXIoKQoreworICAgIGRlc3Ryb3lEZWNv
ZGVkRGF0YSgpOworICAgIGNsZWFySW1hZ2UoKTsKKyAgICBtX3BlbmRpbmdDb250YWluZXJTaXpl
UmVxdWVzdHMuY2xlYXIoKTsKKyAgICBzZXRFbmNvZGVkU2l6ZSgwKTsKK30KKworaW5saW5lIHZv
aWQgQ2FjaGVkSW1hZ2U6OmNyZWF0ZUltYWdlKCkKK3sKKyAgICAvLyBDcmVhdGUgdGhlIGltYWdl
IGlmIGl0IGRvZXNuJ3QgeWV0IGV4aXN0LgorICAgIGlmIChtX2ltYWdlKQorICAgICAgICByZXR1
cm47CisKKyNpZiBVU0UoQ0cpICYmICFVU0UoV0VCS0lUX0lNQUdFX0RFQ09ERVJTKQorICAgIGVs
c2UgaWYgKG1fcmVzcG9uc2UubWltZVR5cGUoKSA9PSAiYXBwbGljYXRpb24vcGRmIikKKyAgICAg
ICAgbV9pbWFnZSA9IFBERkRvY3VtZW50SW1hZ2U6OmNyZWF0ZSh0aGlzKTsKKyNlbmRpZgorICAg
IGVsc2UgaWYgKG1fcmVzcG9uc2UubWltZVR5cGUoKSA9PSAiaW1hZ2Uvc3ZnK3htbCIpIHsKKyAg
ICAgICAgYXV0byBzdmdJbWFnZSA9IFNWR0ltYWdlOjpjcmVhdGUoKnRoaXMsIHVybCgpKTsKKyAg
ICAgICAgbV9zdmdJbWFnZUNhY2hlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdJbWFnZUNhY2hlPihz
dmdJbWFnZS5wdHIoKSk7CisgICAgICAgIG1faW1hZ2UgPSBXVEZNb3ZlKHN2Z0ltYWdlKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBtX2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSh0aGlzKTsK
KyAgICAgICAgZG93bmNhc3Q8Qml0bWFwSW1hZ2U+KCptX2ltYWdlKS5zZXRBbGxvd1N1YnNhbXBs
aW5nKG1fbG9hZGVyICYmIG1fbG9hZGVyLT5mcmFtZUxvYWRlcigpLT5mcmFtZSgpLnNldHRpbmdz
KCkuaW1hZ2VTdWJzYW1wbGluZ0VuYWJsZWQoKSk7CisgICAgfQorCisgICAgaWYgKG1faW1hZ2Up
IHsKKyAgICAgICAgLy8gU2VuZCBxdWV1ZWQgY29udGFpbmVyIHNpemUgcmVxdWVzdHMuCisgICAg
ICAgIGlmIChtX2ltYWdlLT51c2VzQ29udGFpbmVyU2l6ZSgpKSB7CisgICAgICAgICAgICBmb3Ig
KGF1dG8mIHJlcXVlc3QgOiBtX3BlbmRpbmdDb250YWluZXJTaXplUmVxdWVzdHMpCisgICAgICAg
ICAgICAgICAgc2V0Q29udGFpbmVyU2l6ZUZvclJlbmRlcmVyKHJlcXVlc3Qua2V5LCByZXF1ZXN0
LnZhbHVlLmZpcnN0LCByZXF1ZXN0LnZhbHVlLnNlY29uZCk7CisgICAgICAgIH0KKyAgICAgICAg
bV9wZW5kaW5nQ29udGFpbmVyU2l6ZVJlcXVlc3RzLmNsZWFyKCk7CisgICAgfQorfQorCitpbmxp
bmUgdm9pZCBDYWNoZWRJbWFnZTo6Y2xlYXJJbWFnZSgpCit7CisgICAgLy8gSWYgb3VyIEltYWdl
IGhhcyBhbiBvYnNlcnZlciwgaXQncyBhbHdheXMgdXMgc28gd2UgbmVlZCB0byBjbGVhciB0aGUg
YmFjayBwb2ludGVyCisgICAgLy8gYmVmb3JlIGRyb3BwaW5nIG91ciByZWZlcmVuY2UuCisgICAg
aWYgKG1faW1hZ2UpCisgICAgICAgIG1faW1hZ2UtPnNldEltYWdlT2JzZXJ2ZXIobnVsbHB0cik7
CisgICAgbV9pbWFnZSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OmFkZEluY3Jl
bWVudGFsRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXImIGRhdGEpCit7CisgICAgbV9kYXRhID0gJmRh
dGE7CisKKyAgICBjcmVhdGVJbWFnZSgpOworCisgICAgLy8gSGF2ZSB0aGUgaW1hZ2UgdXBkYXRl
IGl0cyBkYXRhIGZyb20gaXRzIGludGVybmFsIGJ1ZmZlci4KKyAgICAvLyBJdCB3aWxsIG5vdCBk
byBhbnl0aGluZyBub3csIGJ1dCB3aWxsIGRlbGF5IGRlY29kaW5nIHVudGlsCisgICAgLy8gcXVl
cmllZCBmb3IgaW5mbyAobGlrZSBzaXplIG9yIHNwZWNpZmljIGltYWdlIGZyYW1lcykuCisgICAg
Ym9vbCBzaXplQXZhaWxhYmxlID0gbV9pbWFnZS0+c2V0RGF0YSgmZGF0YSwgZmFsc2UpOworICAg
IGlmICghc2l6ZUF2YWlsYWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faW1hZ2Ut
PmlzTnVsbCgpKSB7CisgICAgICAgIC8vIEltYWdlIGRlY29kaW5nIGZhaWxlZC4gRWl0aGVyIHdl
IG5lZWQgbW9yZSBpbWFnZSBkYXRhIG9yIHRoZSBpbWFnZSBkYXRhIGlzIG1hbGZvcm1lZC4KKyAg
ICAgICAgZXJyb3IoZXJyb3JPY2N1cnJlZCgpID8gc3RhdHVzKCkgOiBEZWNvZGVFcnJvcik7Cisg
ICAgICAgIGlmIChpbkNhY2hlKCkpCisgICAgICAgICAgICBNZW1vcnlDYWNoZTo6c2luZ2xldG9u
KCkucmVtb3ZlKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRlbGwg
b3VyIG9ic2VydmVycyB0byB0cnkgdG8gZHJhdy4KKyAgICAvLyBFYWNoIGNodW5rIGZyb20gdGhl
IG5ldHdvcmsgY2F1c2VzIG9ic2VydmVycyB0byByZXBhaW50LCB3aGljaCB3aWxsIGZvcmNlIHRo
YXQgY2h1bmsgdG8gZGVjb2RlLgorICAgIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8gb25seSByZWRy
YXcgdGhlIGRlY29kZWQgYmFuZCBvZiB0aGUgaW1hZ2UsIGJ1dCB3aXRoIHRoZSBjdXJyZW50IGRl
c2lnbgorICAgIC8vIChkZWNvZGluZyBkZWxheWVkIHVudGlsIHBhaW50aW5nKSB0aGF0IHNlZW1z
IGhhcmQuCisgICAgbm90aWZ5T2JzZXJ2ZXJzKCk7CisKKyAgICBzZXRFbmNvZGVkU2l6ZShtX2lt
YWdlLT5kYXRhKCkgPyBtX2ltYWdlLT5kYXRhKCktPnNpemUoKSA6IDApOworfQorCit2b2lkIENh
Y2hlZEltYWdlOjphZGREYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYgZGF0YSkKK3sKKyAgICBBU1NF
UlQoZGF0YUJ1ZmZlcmluZ1BvbGljeSgpID09IEJ1ZmZlckRhdGEpOworICAgIGFkZEluY3JlbWVu
dGFsRGF0YUJ1ZmZlcihkYXRhKTsKKyAgICBDYWNoZWRSZXNvdXJjZTo6YWRkRGF0YUJ1ZmZlcihk
YXRhKTsKK30KKwordm9pZCBDYWNoZWRJbWFnZTo6YWRkRGF0YShjb25zdCBjaGFyKiBkYXRhLCB1
bnNpZ25lZCBsZW5ndGgpCit7CisgICAgQVNTRVJUKGRhdGFCdWZmZXJpbmdQb2xpY3koKSA9PSBE
b05vdEJ1ZmZlckRhdGEpOworICAgIGFkZEluY3JlbWVudGFsRGF0YUJ1ZmZlcihTaGFyZWRCdWZm
ZXI6OmNyZWF0ZShkYXRhLCBsZW5ndGgpKTsKKyAgICBDYWNoZWRSZXNvdXJjZTo6YWRkRGF0YShk
YXRhLCBsZW5ndGgpOworfQorCit2b2lkIENhY2hlZEltYWdlOjpmaW5pc2hMb2FkaW5nKFNoYXJl
ZEJ1ZmZlciogZGF0YSkKK3sKKyAgICBtX2RhdGEgPSBkYXRhOworICAgIGlmICghbV9pbWFnZSAm
JiBkYXRhKQorICAgICAgICBjcmVhdGVJbWFnZSgpOworCisgICAgaWYgKG1faW1hZ2UpCisgICAg
ICAgIG1faW1hZ2UtPnNldERhdGEoZGF0YSwgdHJ1ZSk7CisKKyAgICBpZiAoIW1faW1hZ2UgfHwg
bV9pbWFnZS0+aXNOdWxsKCkpIHsKKyAgICAgICAgLy8gSW1hZ2UgZGVjb2RpbmcgZmFpbGVkOyB0
aGUgaW1hZ2UgZGF0YSBpcyBtYWxmb3JtZWQuCisgICAgICAgIGVycm9yKGVycm9yT2NjdXJyZWQo
KSA/IHN0YXR1cygpIDogRGVjb2RlRXJyb3IpOworICAgICAgICBpZiAoaW5DYWNoZSgpKQorICAg
ICAgICAgICAgTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpLnJlbW92ZSgqdGhpcyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBub3RpZnlPYnNlcnZlcnMoKTsKKyAgICBpZiAobV9pbWFn
ZSkKKyAgICAgICAgc2V0RW5jb2RlZFNpemUobV9pbWFnZS0+ZGF0YSgpID8gbV9pbWFnZS0+ZGF0
YSgpLT5zaXplKCkgOiAwKTsKKyAgICBDYWNoZWRSZXNvdXJjZTo6ZmluaXNoTG9hZGluZyhkYXRh
KTsKK30KKwordm9pZCBDYWNoZWRJbWFnZTo6ZGlkUmVwbGFjZVNoYXJlZEJ1ZmZlckNvbnRlbnRz
KCkKK3sKKyAgICBpZiAobV9pbWFnZSkgeworICAgICAgICAvLyBMZXQgdGhlIEltYWdlIGtub3cg
dGhhdCB0aGUgU2hhcmVkQnVmZmVyIGhhcyBiZWVuIHJlamlnZ2VkLCBzbyBpdCBjYW4gbGV0IGdv
IG9mIGFueSByZWZlcmVuY2VzIHRvIHRoZSBoZWFwLWFsbG9jYXRlZCByZXNvdXJjZSBidWZmZXIu
CisgICAgICAgIC8vIEZJWE1FKHJkYXI6Ly9wcm9ibGVtLzI0Mjc1NjE3KTogSXQgd291bGQgYmUg
YmV0dGVyIGlmIHdlIGNvdWxkIHNvbWVob3cgdGVsbCB0aGUgSW1hZ2UncyBkZWNvZGVyIHRvIHN3
YXAgaW4gdGhlIG5ldyBjb250ZW50cyB3aXRob3V0IGRlc3Ryb3lpbmcgYW55dGhpbmcuCisgICAg
ICAgIG1faW1hZ2UtPmRlc3Ryb3lEZWNvZGVkRGF0YSh0cnVlKTsKKyAgICB9CisgICAgQ2FjaGVk
UmVzb3VyY2U6OmRpZFJlcGxhY2VTaGFyZWRCdWZmZXJDb250ZW50cygpOworfQorCit2b2lkIENh
Y2hlZEltYWdlOjplcnJvcihDYWNoZWRSZXNvdXJjZTo6U3RhdHVzIHN0YXR1cykKK3sKKyAgICBj
aGVja1Nob3VsZFBhaW50QnJva2VuSW1hZ2UoKTsKKyAgICBjbGVhcigpOworICAgIENhY2hlZFJl
c291cmNlOjplcnJvcihzdGF0dXMpOworICAgIG5vdGlmeU9ic2VydmVycygpOworfQorCit2b2lk
IENhY2hlZEltYWdlOjpyZXNwb25zZVJlY2VpdmVkKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKQoreworICAgIGlmICghbV9yZXNwb25zZS5pc051bGwoKSkKKyAgICAgICAgY2xlYXIo
KTsKKyAgICBDYWNoZWRSZXNvdXJjZTo6cmVzcG9uc2VSZWNlaXZlZChyZXNwb25zZSk7Cit9CisK
K3ZvaWQgQ2FjaGVkSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSgpCit7CisgICAgYm9vbCBjYW5E
ZWxldGVJbWFnZSA9ICFtX2ltYWdlIHx8IChtX2ltYWdlLT5oYXNPbmVSZWYoKSAmJiBtX2ltYWdl
LT5pc0JpdG1hcEltYWdlKCkpOworICAgIGlmIChjYW5EZWxldGVJbWFnZSAmJiAhaXNMb2FkaW5n
KCkgJiYgIWhhc0NsaWVudHMoKSkgeworICAgICAgICBtX2ltYWdlID0gbnVsbHB0cjsKKyAgICAg
ICAgc2V0RGVjb2RlZFNpemUoMCk7CisgICAgfSBlbHNlIGlmIChtX2ltYWdlICYmICFlcnJvck9j
Y3VycmVkKCkpCisgICAgICAgIG1faW1hZ2UtPmRlc3Ryb3lEZWNvZGVkRGF0YSgpOworfQorCit2
b2lkIENhY2hlZEltYWdlOjpkZWNvZGVkU2l6ZUNoYW5nZWQoY29uc3QgSW1hZ2UqIGltYWdlLCBp
bnQgZGVsdGEpCit7CisgICAgaWYgKCFpbWFnZSB8fCBpbWFnZSAhPSBtX2ltYWdlKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgc2V0RGVjb2RlZFNpemUoZGVjb2RlZFNpemUoKSArIGRlbHRh
KTsKK30KKwordm9pZCBDYWNoZWRJbWFnZTo6ZGlkRHJhdyhjb25zdCBJbWFnZSogaW1hZ2UpCit7
CisgICAgaWYgKCFpbWFnZSB8fCBpbWFnZSAhPSBtX2ltYWdlKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgZG91YmxlIHRpbWVTdGFtcCA9IEZyYW1lVmlldzo6Y3VycmVudFBhaW50VGltZVN0
YW1wKCk7CisgICAgaWYgKCF0aW1lU3RhbXApIC8vIElmIGRpZERyYXcgaXMgY2FsbGVkIG91dHNp
ZGUgb2YgYSBGcmFtZSBwYWludC4KKyAgICAgICAgdGltZVN0YW1wID0gbW9ub3RvbmljYWxseUlu
Y3JlYXNpbmdUaW1lKCk7CisgICAgCisgICAgQ2FjaGVkUmVzb3VyY2U6OmRpZEFjY2Vzc0RlY29k
ZWREYXRhKHRpbWVTdGFtcCk7Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OmFuaW1hdGlvbkFkdmFu
Y2VkKGNvbnN0IEltYWdlKiBpbWFnZSkKK3sKKyAgICBpZiAoIWltYWdlIHx8IGltYWdlICE9IG1f
aW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxD
YWNoZWRJbWFnZUNsaWVudD4gY2xpZW50V2Fsa2VyKG1fY2xpZW50cyk7CisgICAgd2hpbGUgKENh
Y2hlZEltYWdlQ2xpZW50KiBjbGllbnQgPSBjbGllbnRXYWxrZXIubmV4dCgpKQorICAgICAgICBj
bGllbnQtPm5ld0ltYWdlQW5pbWF0aW9uRnJhbWVBdmFpbGFibGUoKnRoaXMpOworfQorCit2b2lk
IENhY2hlZEltYWdlOjpjaGFuZ2VkSW5SZWN0KGNvbnN0IEltYWdlKiBpbWFnZSwgY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIWltYWdlIHx8IGltYWdlICE9IG1faW1hZ2UpCisgICAg
ICAgIHJldHVybjsKKyAgICBub3RpZnlPYnNlcnZlcnMoJnJlY3QpOworfQorCitib29sIENhY2hl
ZEltYWdlOjpjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoY29uc3QgUmVuZGVyRWxlbWVudCog
cmVuZGVyZXIpCit7CisgICAgSW1hZ2UqIGltYWdlID0gaW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJl
cik7CisgICAgcmV0dXJuIGltYWdlLT5jdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKTsKK30K
KworYm9vbCBDYWNoZWRJbWFnZTo6aXNPcmlnaW5DbGVhbihTZWN1cml0eU9yaWdpbiogc2VjdXJp
dHlPcmlnaW4pCit7CisgICAgaWYgKCFpbWFnZSgpLT5oYXNTaW5nbGVTZWN1cml0eU9yaWdpbigp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVj
aygqc2VjdXJpdHlPcmlnaW4pKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gIXNl
Y3VyaXR5T3JpZ2luLT50YWludHNDYW52YXMocmVzcG9uc2VGb3JTYW1lT3JpZ2luUG9saWN5Q2hl
Y2tzKCkudXJsKCkpOworfQorCitDYWNoZWRSZXNvdXJjZTo6UmV2YWxpZGF0aW9uRGVjaXNpb24g
Q2FjaGVkSW1hZ2U6Om1ha2VSZXZhbGlkYXRpb25EZWNpc2lvbihDYWNoZVBvbGljeSBjYWNoZVBv
bGljeSkgY29uc3QKK3sKKyAgICBpZiAoVU5MSUtFTFkoaXNNYW51YWxseUNhY2hlZCgpKSkgewor
ICAgICAgICAvLyBEbyBub3QgcmV2YWxpZGF0ZSBtYW51YWxseSBjYWNoZWQgaW1hZ2VzLiBUaGlz
IG1lY2hhbmlzbSBpcyB1c2VkIGFzIGEKKyAgICAgICAgLy8gd2F5IHRvIGVmZmljaWVudGx5IHNo
YXJlIGFuIGltYWdlIGZyb20gdGhlIGNsaWVudCB0byBjb250ZW50IGFuZAorICAgICAgICAvLyB0
aGUgVVJMIGZvciB0aGF0IGltYWdlIG1heSBub3QgcmVwcmVzZW50IGEgcmVzb3VyY2UgdGhhdCBj
YW4gYmUKKyAgICAgICAgLy8gcmV0cmlldmVkIGJ5IHN0YW5kYXJkIG1lYW5zLiBJZiB0aGUgbWFu
dWFsIGNhY2hpbmcgU1BJIGlzIHVzZWQsIGl0IGlzCisgICAgICAgIC8vIGluY3VtYmVudCBvbiB0
aGUgY2xpZW50IHRvIG9ubHkgdXNlIHZhbGlkIHJlc291cmNlcy4KKyAgICAgICAgcmV0dXJuIFJl
dmFsaWRhdGlvbkRlY2lzaW9uOjpObzsKKyAgICB9CisgICAgcmV0dXJuIENhY2hlZFJlc291cmNl
OjptYWtlUmV2YWxpZGF0aW9uRGVjaXNpb24oY2FjaGVQb2xpY3kpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2Fj
aGVkSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRJbWFnZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmEwZGI5NGRjOTY5MDllOGE2NjEwM2IxMGU1MDlkMDkzNzY4MTc5MDAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkSW1hZ2UuaApA
QCAtMCwwICsxLDE0NyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAo
a25vbGxAbXBpLWhkLm1wZy5kZSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVy
IDxtdWVsbGVyQGtkZS5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcg
KHNhbS53ZWluaWdAZ21haWwuY29tKQorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBDYWNo
ZWRJbWFnZV9oCisjZGVmaW5lIENhY2hlZEltYWdlX2gKKworI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCisj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemVIYXNoLmgiCisjaW5jbHVkZSAi
TGF5b3V0U2l6ZS5oIgorI2luY2x1ZGUgIlNWR0ltYWdlQ2FjaGUuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhY2hlZEltYWdlQ2xp
ZW50OworY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CitjbGFzcyBGbG9hdFNpemU7CitjbGFz
cyBNZW1vcnlDYWNoZTsKK2NsYXNzIFJlbmRlckVsZW1lbnQ7CitjbGFzcyBSZW5kZXJPYmplY3Q7
CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKKworc3RydWN0IExlbmd0aDsKKworY2xhc3MgQ2FjaGVk
SW1hZ2UgZmluYWwgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2UsIHB1YmxpYyBJbWFnZU9ic2VydmVy
IHsKKyAgICBmcmllbmQgY2xhc3MgTWVtb3J5Q2FjaGU7CisKK3B1YmxpYzoKKyAgICBlbnVtIENh
Y2hlQmVoYXZpb3JUeXBlIHsgQXV0b21hdGljYWxseUNhY2hlZCwgTWFudWFsbHlDYWNoZWQgfTsK
KworICAgIENhY2hlZEltYWdlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFNlc3Npb25JRCk7Cisg
ICAgQ2FjaGVkSW1hZ2UoSW1hZ2UqLCBTZXNzaW9uSUQpOworICAgIENhY2hlZEltYWdlKGNvbnN0
IFVSTCYsIEltYWdlKiwgU2Vzc2lvbklEKTsKKyAgICBDYWNoZWRJbWFnZShjb25zdCBVUkwmLCBJ
bWFnZSosIENhY2hlQmVoYXZpb3JUeXBlLCBTZXNzaW9uSUQpOworICAgIHZpcnR1YWwgfkNhY2hl
ZEltYWdlKCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZSogaW1hZ2UoKTsgLy8gUmV0dXJu
cyB0aGUgbnVsbEltYWdlKCkgaWYgdGhlIGltYWdlIGlzIG5vdCBhdmFpbGFibGUgeWV0LgorICAg
IFdFQkNPUkVfRVhQT1JUIEltYWdlKiBpbWFnZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVj
dCopOyAvLyBSZXR1cm5zIHRoZSBudWxsSW1hZ2UoKSBpZiB0aGUgaW1hZ2UgaXMgbm90IGF2YWls
YWJsZSB5ZXQuCisgICAgYm9vbCBoYXNJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0
KCk7IH0KKyAgICBib29sIGN1cnJlbnRGcmFtZUtub3duVG9CZU9wYXF1ZShjb25zdCBSZW5kZXJF
bGVtZW50Kik7CisKKyAgICBzdGQ6OnBhaXI8SW1hZ2UqLCBmbG9hdD4gYnJva2VuSW1hZ2UoZmxv
YXQgZGV2aWNlU2NhbGVGYWN0b3IpIGNvbnN0OyAvLyBSZXR1cm5zIGFuIGltYWdlIGFuZCB0aGUg
aW1hZ2UncyByZXNvbHV0aW9uIHNjYWxlIGZhY3Rvci4KKyAgICBib29sIHdpbGxQYWludEJyb2tl
bkltYWdlKCkgY29uc3Q7IAorCisgICAgYm9vbCBjYW5SZW5kZXIoY29uc3QgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciwgZmxvYXQgbXVsdGlwbGllcikgeyByZXR1cm4gIWVycm9yT2NjdXJyZWQoKSAm
JiAhaW1hZ2VTaXplRm9yUmVuZGVyZXIocmVuZGVyZXIsIG11bHRpcGxpZXIpLmlzRW1wdHkoKTsg
fQorCisgICAgdm9pZCBzZXRDb250YWluZXJTaXplRm9yUmVuZGVyZXIoY29uc3QgQ2FjaGVkSW1h
Z2VDbGllbnQqLCBjb25zdCBMYXlvdXRTaXplJiwgZmxvYXQpOworICAgIGJvb2wgdXNlc0ltYWdl
Q29udGFpbmVyU2l6ZSgpIGNvbnN0OworICAgIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCkg
Y29uc3Q7CisgICAgYm9vbCBpbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3Q7CisKKyAgICB2
b2lkIGFkZERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJikgb3ZlcnJpZGU7CisgICAgdm9pZCBmaW5p
c2hMb2FkaW5nKFNoYXJlZEJ1ZmZlciopIG92ZXJyaWRlOworCisgICAgZW51bSBTaXplVHlwZSB7
CisgICAgICAgIFVzZWRTaXplLAorICAgICAgICBJbnRyaW5zaWNTaXplCisgICAgfTsKKyAgICAv
LyBUaGlzIG1ldGhvZCB0YWtlcyBhIHpvb20gbXVsdGlwbGllciB0aGF0IGNhbiBiZSB1c2VkIHRv
IGluY3JlYXNlIHRoZSBuYXR1cmFsIHNpemUgb2YgdGhlIGltYWdlIGJ5IHRoZSB6b29tLgorICAg
IExheW91dFNpemUgaW1hZ2VTaXplRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiwgZmxv
YXQgbXVsdGlwbGllciwgU2l6ZVR5cGUgPSBVc2VkU2l6ZSk7IC8vIHJldHVybnMgdGhlIHNpemUg
b2YgdGhlIGNvbXBsZXRlIGltYWdlLgorICAgIHZvaWQgY29tcHV0ZUludHJpbnNpY0RpbWVuc2lv
bnMoTGVuZ3RoJiBpbnRyaW5zaWNXaWR0aCwgTGVuZ3RoJiBpbnRyaW5zaWNIZWlnaHQsIEZsb2F0
U2l6ZSYgaW50cmluc2ljUmF0aW8pOworCisgICAgYm9vbCBpc01hbnVhbGx5Q2FjaGVkKCkgY29u
c3QgeyByZXR1cm4gbV9pc01hbnVhbGx5Q2FjaGVkOyB9CisgICAgUmV2YWxpZGF0aW9uRGVjaXNp
b24gbWFrZVJldmFsaWRhdGlvbkRlY2lzaW9uKENhY2hlUG9saWN5KSBjb25zdCBvdmVycmlkZTsK
KyAgICB2b2lkIGxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNvdXJjZUxvYWRl
ck9wdGlvbnMmKSBvdmVycmlkZTsKKworICAgIGJvb2wgaXNPcmlnaW5DbGVhbihTZWN1cml0eU9y
aWdpbiopOworCitwcml2YXRlOgorICAgIHZvaWQgY2xlYXIoKTsKKworICAgIENhY2hlZEltYWdl
KENhY2hlZEltYWdlJiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2Vzc2lvbklEKTsKKworICAg
IHZvaWQgc2V0Qm9keURhdGFGcm9tKGNvbnN0IENhY2hlZFJlc291cmNlJikgZmluYWw7CisKKyAg
ICB2b2lkIGNyZWF0ZUltYWdlKCk7CisgICAgdm9pZCBjbGVhckltYWdlKCk7CisgICAgLy8gSWYg
bm90IG51bGwsIGNoYW5nZVJlY3QgaXMgdGhlIGNoYW5nZWQgcGFydCBvZiB0aGUgaW1hZ2UuCisg
ICAgdm9pZCBub3RpZnlPYnNlcnZlcnMoY29uc3QgSW50UmVjdCogY2hhbmdlUmVjdCA9IG51bGxw
dHIpOworICAgIHZvaWQgY2hlY2tTaG91bGRQYWludEJyb2tlbkltYWdlKCk7CisKKyAgICB2b2lk
IHN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UoKSBvdmVycmlkZTsKKyAgICBib29s
IG1heVRyeVJlcGxhY2VFbmNvZGVkRGF0YSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KKworICAgIHZvaWQgZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBkaWRSZW1vdmVDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKSBvdmVy
cmlkZTsKKworICAgIHZvaWQgYWxsQ2xpZW50c1JlbW92ZWQoKSBvdmVycmlkZTsKKyAgICB2b2lk
IGRlc3Ryb3lEZWNvZGVkRGF0YSgpIG92ZXJyaWRlOworCisgICAgdm9pZCBhZGREYXRhKGNvbnN0
IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkgb3ZlcnJpZGU7CisgICAgdm9pZCBlcnJvcihD
YWNoZWRSZXNvdXJjZTo6U3RhdHVzKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlc3BvbnNlUmVjZWl2
ZWQoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIG92ZXJyaWRlOworCisgICAgLy8gRm9yIGNvbXBh
dGliaWxpdHksIGltYWdlcyBrZWVwIGxvYWRpbmcgZXZlbiBpZiB0aGVyZSBhcmUgSFRUUCBlcnJv
cnMuCisgICAgYm9vbCBzaG91bGRJZ25vcmVIVFRQU3RhdHVzQ29kZUVycm9ycygpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIGJvb2wgc3RpbGxOZWVkc0xvYWQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiAhZXJyb3JPY2N1cnJlZCgpICYmIHN0YXR1cygpID09IFVua25v
d24gJiYgIWlzTG9hZGluZygpOyB9CisKKyAgICAvLyBJbWFnZU9ic2VydmVyCisgICAgdm9pZCBk
ZWNvZGVkU2l6ZUNoYW5nZWQoY29uc3QgSW1hZ2UqLCBpbnQgZGVsdGEpIG92ZXJyaWRlOworICAg
IHZvaWQgZGlkRHJhdyhjb25zdCBJbWFnZSopIG92ZXJyaWRlOworCisgICAgdm9pZCBhbmltYXRp
b25BZHZhbmNlZChjb25zdCBJbWFnZSopIG92ZXJyaWRlOworICAgIHZvaWQgY2hhbmdlZEluUmVj
dChjb25zdCBJbWFnZSosIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKKworICAgIHZvaWQgYWRk
SW5jcmVtZW50YWxEYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYpOworCisgICAgdm9pZCBkaWRSZXBs
YWNlU2hhcmVkQnVmZmVyQ29udGVudHMoKSBvdmVycmlkZTsKKworICAgIHR5cGVkZWYgc3RkOjpw
YWlyPExheW91dFNpemUsIGZsb2F0PiBTaXplQW5kWm9vbTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8
Y29uc3QgQ2FjaGVkSW1hZ2VDbGllbnQqLCBTaXplQW5kWm9vbT4gQ29udGFpbmVyU2l6ZVJlcXVl
c3RzOworICAgIENvbnRhaW5lclNpemVSZXF1ZXN0cyBtX3BlbmRpbmdDb250YWluZXJTaXplUmVx
dWVzdHM7CisKKyAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CisgICAgc3RkOjp1bmlxdWVfcHRy
PFNWR0ltYWdlQ2FjaGU+IG1fc3ZnSW1hZ2VDYWNoZTsKKyAgICB1bnNpZ25lZCBtX2lzTWFudWFs
bHlDYWNoZWQgOiAxOworICAgIHVuc2lnbmVkIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSA6IDE7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
Q0FDSEVEX1JFU09VUkNFKENhY2hlZEltYWdlLCBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJj
ZSkKKworI2VuZGlmIC8vIENhY2hlZEltYWdlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9mZXRjaC9DYWNoZWRJbWFnZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2ZldGNoL0NhY2hlZEltYWdlQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzIyMzVhY2JmOWFmYTRjZThj
OWE2YWEzNjE5ZjM0OTVkOTQxOWE5ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9mZXRjaC9DYWNoZWRJbWFnZUNsaWVudC5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisg
ICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCisg
ICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICAg
IENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgQ2FjaGVkSW1hZ2VDbGllbnRfaAorI2RlZmlu
ZSBDYWNoZWRJbWFnZUNsaWVudF9oCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhY2hlZEltYWdlOworY2xhc3MgSW50
UmVjdDsKKworY2xhc3MgQ2FjaGVkSW1hZ2VDbGllbnQgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VD
bGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkNhY2hlZEltYWdlQ2xpZW50KCkgeyB9Cisg
ICAgc3RhdGljIENhY2hlZFJlc291cmNlQ2xpZW50VHlwZSBleHBlY3RlZFR5cGUoKSB7IHJldHVy
biBJbWFnZVR5cGU7IH0KKyAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFR5cGUgcmVzb3VyY2VDbGll
bnRUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZXhwZWN0ZWRUeXBlKCk7IH0KKworICAg
IC8vIENhbGxlZCB3aGVuZXZlciBhIGZyYW1lIG9mIGFuIGltYWdlIGNoYW5nZXMgYmVjYXVzZSB3
ZSBnb3QgbW9yZSBkYXRhIGZyb20gdGhlIG5ldHdvcmsuCisgICAgLy8gSWYgbm90IG51bGwsIHRo
ZSBJbnRSZWN0IGlzIHRoZSBjaGFuZ2VkIHJlY3Qgb2YgdGhlIGltYWdlLgorICAgIHZpcnR1YWwg
dm9pZCBpbWFnZUNoYW5nZWQoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRSZWN0KiA9IG51bGxwdHIp
IHsgfQorCisgICAgLy8gQ2FsbGVkIHdoZW4gR0lGIGFuaW1hdGlvbiBwcm9ncmVzc2VzLgorICAg
IHZpcnR1YWwgdm9pZCBuZXdJbWFnZUFuaW1hdGlvbkZyYW1lQXZhaWxhYmxlKENhY2hlZEltYWdl
JiBpbWFnZSkgeyBpbWFnZUNoYW5nZWQoJmltYWdlKTsgfQorfTsKKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRSYXdSZXNvdXJjZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmZhMGRmOGIwNGVjZTU0ZGIxMDY2MjQ2MjhmNThmYmJjNzgxZmRjNDIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkUmF3UmVzb3Vy
Y2UuY3BwCkBAIC0wLDAgKzEsMjk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkNhY2hlZFJhd1Jlc291cmNlLmgiCisKKyNpbmNsdWRlICJDYWNoZWRSYXdSZXNvdXJj
ZUNsaWVudC5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgiCisjaW5j
bHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMu
aCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRl
ci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitDYWNoZWRSYXdSZXNvdXJjZTo6Q2FjaGVkUmF3UmVzb3VyY2UoUmVzb3VyY2VSZXF1
ZXN0JiByZXNvdXJjZVJlcXVlc3QsIFR5cGUgdHlwZSwgU2Vzc2lvbklEIHNlc3Npb25JRCkKKyAg
ICA6IENhY2hlZFJlc291cmNlKHJlc291cmNlUmVxdWVzdCwgdHlwZSwgc2Vzc2lvbklEKQorICAg
ICwgbV9pZGVudGlmaWVyKDApCisgICAgLCBtX2FsbG93RW5jb2RlZERhdGFSZXBsYWNlbWVudCh0
cnVlKQoreworICAgIEFTU0VSVChpc01haW5Pck1lZGlhT3JSYXdSZXNvdXJjZSgpKTsKK30KKwor
Y29uc3QgY2hhciogQ2FjaGVkUmF3UmVzb3VyY2U6OmNhbGN1bGF0ZUluY3JlbWVudGFsRGF0YUNo
dW5rKFNoYXJlZEJ1ZmZlciogZGF0YSwgdW5zaWduZWQmIGluY3JlbWVudGFsRGF0YUxlbmd0aCkK
K3sKKyAgICBpbmNyZW1lbnRhbERhdGFMZW5ndGggPSAwOworICAgIGlmICghZGF0YSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB1bnNpZ25lZCBwcmV2aW91c0RhdGFMZW5ndGggPSBl
bmNvZGVkU2l6ZSgpOworICAgIEFTU0VSVChkYXRhLT5zaXplKCkgPj0gcHJldmlvdXNEYXRhTGVu
Z3RoKTsKKyAgICBpbmNyZW1lbnRhbERhdGFMZW5ndGggPSBkYXRhLT5zaXplKCkgLSBwcmV2aW91
c0RhdGFMZW5ndGg7CisgICAgcmV0dXJuIGRhdGEtPmRhdGEoKSArIHByZXZpb3VzRGF0YUxlbmd0
aDsKK30KKwordm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6YWRkRGF0YUJ1ZmZlcihTaGFyZWRCdWZm
ZXImIGRhdGEpCit7CisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+
IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgQVNTRVJUKGRhdGFCdWZmZXJpbmdQb2xpY3koKSA9
PSBCdWZmZXJEYXRhKTsKKyAgICBtX2RhdGEgPSAmZGF0YTsKKworICAgIHVuc2lnbmVkIGluY3Jl
bWVudGFsRGF0YUxlbmd0aDsKKyAgICBjb25zdCBjaGFyKiBpbmNyZW1lbnRhbERhdGEgPSBjYWxj
dWxhdGVJbmNyZW1lbnRhbERhdGFDaHVuaygmZGF0YSwgaW5jcmVtZW50YWxEYXRhTGVuZ3RoKTsK
KyAgICBzZXRFbmNvZGVkU2l6ZShkYXRhLnNpemUoKSk7CisgICAgbm90aWZ5Q2xpZW50c0RhdGFX
YXNSZWNlaXZlZChpbmNyZW1lbnRhbERhdGEsIGluY3JlbWVudGFsRGF0YUxlbmd0aCk7CisgICAg
aWYgKGRhdGFCdWZmZXJpbmdQb2xpY3koKSA9PSBEb05vdEJ1ZmZlckRhdGEpIHsKKyAgICAgICAg
aWYgKG1fbG9hZGVyKQorICAgICAgICAgICAgbV9sb2FkZXItPnNldERhdGFCdWZmZXJpbmdQb2xp
Y3koRG9Ob3RCdWZmZXJEYXRhKTsKKyAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIENhY2hlZFJlc291cmNlOjphZGREYXRhQnVmZmVyKGRhdGEpOworfQorCit2
b2lkIENhY2hlZFJhd1Jlc291cmNlOjphZGREYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVk
IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQoZGF0YUJ1ZmZlcmluZ1BvbGljeSgpID09IERvTm90QnVm
ZmVyRGF0YSk7CisgICAgbm90aWZ5Q2xpZW50c0RhdGFXYXNSZWNlaXZlZChkYXRhLCBsZW5ndGgp
OworICAgIENhY2hlZFJlc291cmNlOjphZGREYXRhKGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQg
Q2FjaGVkUmF3UmVzb3VyY2U6OmZpbmlzaExvYWRpbmcoU2hhcmVkQnVmZmVyKiBkYXRhKQorewor
ICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOworICAgIERhdGFCdWZmZXJpbmdQb2xpY3kgZGF0YUJ1ZmZlcmluZ1BvbGljeSA9IHRo
aXMtPmRhdGFCdWZmZXJpbmdQb2xpY3koKTsKKyAgICBpZiAoZGF0YUJ1ZmZlcmluZ1BvbGljeSA9
PSBCdWZmZXJEYXRhKSB7CisgICAgICAgIG1fZGF0YSA9IGRhdGE7CisKKyAgICAgICAgdW5zaWdu
ZWQgaW5jcmVtZW50YWxEYXRhTGVuZ3RoOworICAgICAgICBjb25zdCBjaGFyKiBpbmNyZW1lbnRh
bERhdGEgPSBjYWxjdWxhdGVJbmNyZW1lbnRhbERhdGFDaHVuayhkYXRhLCBpbmNyZW1lbnRhbERh
dGFMZW5ndGgpOworICAgICAgICBpZiAoZGF0YSkKKyAgICAgICAgICAgIHNldEVuY29kZWRTaXpl
KGRhdGEtPnNpemUoKSk7CisgICAgICAgIG5vdGlmeUNsaWVudHNEYXRhV2FzUmVjZWl2ZWQoaW5j
cmVtZW50YWxEYXRhLCBpbmNyZW1lbnRhbERhdGFMZW5ndGgpOworICAgIH0KKworICAgIG1fYWxs
b3dFbmNvZGVkRGF0YVJlcGxhY2VtZW50ID0gIW1fbG9hZGVyLT5pc1F1aWNrTG9va1Jlc291cmNl
KCk7CisKKyAgICBDYWNoZWRSZXNvdXJjZTo6ZmluaXNoTG9hZGluZyhkYXRhKTsKKyAgICBpZiAo
ZGF0YUJ1ZmZlcmluZ1BvbGljeSA9PSBCdWZmZXJEYXRhICYmIHRoaXMtPmRhdGFCdWZmZXJpbmdQ
b2xpY3koKSA9PSBEb05vdEJ1ZmZlckRhdGEpIHsKKyAgICAgICAgaWYgKG1fbG9hZGVyKQorICAg
ICAgICAgICAgbV9sb2FkZXItPnNldERhdGFCdWZmZXJpbmdQb2xpY3koRG9Ob3RCdWZmZXJEYXRh
KTsKKyAgICAgICAgY2xlYXIoKTsKKyAgICB9Cit9CisKK3ZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6
Om5vdGlmeUNsaWVudHNEYXRhV2FzUmVjZWl2ZWQoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQg
bGVuZ3RoKQoreworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm47CisKKyAgICBDYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
KyAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudD4g
dyhtX2NsaWVudHMpOworICAgIHdoaWxlIChDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCogYyA9IHcu
bmV4dCgpKQorICAgICAgICBjLT5kYXRhUmVjZWl2ZWQodGhpcywgZGF0YSwgbGVuZ3RoKTsKK30K
Kwordm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6ZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xp
ZW50KiBjKQoreworICAgIGlmICghaGFzQ2xpZW50KGMpKQorICAgICAgICByZXR1cm47CisgICAg
Ly8gVGhlIGNhbGxzIHRvIHRoZSBjbGllbnQgY2FuIHJlc3VsdCBpbiBldmVudHMgcnVubmluZywg
cG90ZW50aWFsbHkgY2F1c2luZworICAgIC8vIHRoaXMgcmVzb3VyY2UgdG8gYmUgZXZpY3RlZCBm
cm9tIHRoZSBjYWNoZSBhbmQgYWxsIGNsaWVudHMgdG8gYmUgcmVtb3ZlZCwKKyAgICAvLyBzbyBh
IHByb3RlY3RvciBpcyBuZWNlc3NhcnkuCisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
UmF3UmVzb3VyY2U+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgQ2FjaGVkUmF3UmVzb3VyY2VD
bGllbnQqIGNsaWVudCA9IHN0YXRpY19jYXN0PENhY2hlZFJhd1Jlc291cmNlQ2xpZW50Kj4oYyk7
CisgICAgc2l6ZV90IHJlZGlyZWN0Q291bnQgPSBtX3JlZGlyZWN0Q2hhaW4uc2l6ZSgpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVkaXJlY3RDb3VudDsgaSsrKSB7CisgICAgICAgIFJl
ZGlyZWN0UGFpciByZWRpcmVjdCA9IG1fcmVkaXJlY3RDaGFpbltpXTsKKyAgICAgICAgUmVzb3Vy
Y2VSZXF1ZXN0IHJlcXVlc3QocmVkaXJlY3QubV9yZXF1ZXN0KTsKKyAgICAgICAgY2xpZW50LT5y
ZWRpcmVjdFJlY2VpdmVkKHRoaXMsIHJlcXVlc3QsIHJlZGlyZWN0Lm1fcmVkaXJlY3RSZXNwb25z
ZSk7CisgICAgICAgIGlmICghaGFzQ2xpZW50KGMpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBBU1NFUlQocmVkaXJlY3RDb3VudCA9PSBtX3JlZGlyZWN0Q2hhaW4uc2l6ZSgpKTsK
KworICAgIGlmICghbV9yZXNwb25zZS5pc051bGwoKSkgeworICAgICAgICBSZXNvdXJjZVJlc3Bv
bnNlIHJlc3BvbnNlKG1fcmVzcG9uc2UpOworICAgICAgICBpZiAodmFsaWRhdGlvbkNvbXBsZXRp
bmcoKSkKKyAgICAgICAgICAgIHJlc3BvbnNlLnNldFNvdXJjZShSZXNvdXJjZVJlc3BvbnNlOjpT
b3VyY2U6Ok1lbW9yeUNhY2hlQWZ0ZXJWYWxpZGF0aW9uKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBBU1NFUlQoIXZhbGlkYXRpb25JblByb2dyZXNzKCkpOworICAgICAgICAgICAgcmVz
cG9uc2Uuc2V0U291cmNlKFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6TWVtb3J5Q2FjaGUpOwor
ICAgICAgICB9CisgICAgICAgIGNsaWVudC0+cmVzcG9uc2VSZWNlaXZlZCh0aGlzLCByZXNwb25z
ZSk7CisgICAgfQorICAgIGlmICghaGFzQ2xpZW50KGMpKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKG1fZGF0YSkKKyAgICAgICAgY2xpZW50LT5kYXRhUmVjZWl2ZWQodGhpcywgbV9kYXRhLT5k
YXRhKCksIG1fZGF0YS0+c2l6ZSgpKTsKKyAgICBpZiAoIWhhc0NsaWVudChjKSkKKyAgICAgICBy
ZXR1cm47CisgICAgQ2FjaGVkUmVzb3VyY2U6OmRpZEFkZENsaWVudChjbGllbnQpOworfQorCit2
b2lkIENhY2hlZFJhd1Jlc291cmNlOjphbGxDbGllbnRzUmVtb3ZlZCgpCit7CisgICAgaWYgKG1f
bG9hZGVyKQorICAgICAgICBtX2xvYWRlci0+Y2FuY2VsSWZOb3RGaW5pc2hpbmcoKTsKK30KKwor
dm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6cmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIENhY2hl
ZFJlc291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwor
ICAgIGlmICghcmVzcG9uc2UuaXNOdWxsKCkpIHsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VDbGll
bnRXYWxrZXI8Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQ+IHcobV9jbGllbnRzKTsKKyAgICAgICAg
d2hpbGUgKENhY2hlZFJhd1Jlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkpCisgICAgICAgICAg
ICBjLT5yZWRpcmVjdFJlY2VpdmVkKHRoaXMsIHJlcXVlc3QsIHJlc3BvbnNlKTsKKyAgICAgICAg
bV9yZWRpcmVjdENoYWluLmFwcGVuZChSZWRpcmVjdFBhaXIocmVxdWVzdCwgcmVzcG9uc2UpKTsK
KyAgICB9CisgICAgQ2FjaGVkUmVzb3VyY2U6OnJlZGlyZWN0UmVjZWl2ZWQocmVxdWVzdCwgcmVz
cG9uc2UpOworfQorCit2b2lkIENhY2hlZFJhd1Jlc291cmNlOjpyZXNwb25zZVJlY2VpdmVkKGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIENhY2hlZFJlc291cmNlSGFu
ZGxlPENhY2hlZFJhd1Jlc291cmNlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIGlmICghbV9p
ZGVudGlmaWVyKQorICAgICAgICBtX2lkZW50aWZpZXIgPSBtX2xvYWRlci0+aWRlbnRpZmllcigp
OworICAgIENhY2hlZFJlc291cmNlOjpyZXNwb25zZVJlY2VpdmVkKHJlc3BvbnNlKTsKKyAgICBD
YWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudD4gdyhtX2Ns
aWVudHMpOworICAgIHdoaWxlIChDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgp
KQorICAgICAgICBjLT5yZXNwb25zZVJlY2VpdmVkKHRoaXMsIG1fcmVzcG9uc2UpOworfQorCiti
b29sIENhY2hlZFJhd1Jlc291cmNlOjpzaG91bGRDYWNoZVJlc3BvbnNlKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyPENh
Y2hlZFJhd1Jlc291cmNlQ2xpZW50PiB3KG1fY2xpZW50cyk7CisgICAgd2hpbGUgKENhY2hlZFJh
d1Jlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkpIHsKKyAgICAgICAgaWYgKCFjLT5zaG91bGRD
YWNoZVJlc3BvbnNlKHRoaXMsIHJlc3BvbnNlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OmRp
ZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9u
ZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCit7CisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI8
Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQ+IHcobV9jbGllbnRzKTsKKyAgICB3aGlsZSAoQ2FjaGVk
UmF3UmVzb3VyY2VDbGllbnQqIGMgPSB3Lm5leHQoKSkKKyAgICAgICAgYy0+ZGF0YVNlbnQodGhp
cywgYnl0ZXNTZW50LCB0b3RhbEJ5dGVzVG9CZVNlbnQpOworfQorCit2b2lkIENhY2hlZFJhd1Jl
c291cmNlOjpzd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNlKCkKK3sKKyAgICBBU1NF
UlQobV9sb2FkZXIpOworICAgIC8vIElmIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgYSBzdWNjZXNz
ZnVsIHJldmFsaWRhdGlvbiwgcmVzcG9uc2VSZWNlaXZlZCgpIGhhc24ndCBiZWVuIGNhbGxlZCwg
c28gd2UgaGF2ZW4ndCBzZXQgbV9pZGVudGlmaWVyLgorICAgIEFTU0VSVCghbV9pZGVudGlmaWVy
KTsKKyAgICBkb3duY2FzdDxDYWNoZWRSYXdSZXNvdXJjZT4oKnJlc291cmNlVG9SZXZhbGlkYXRl
KCkpLm1faWRlbnRpZmllciA9IG1fbG9hZGVyLT5pZGVudGlmaWVyKCk7CisgICAgQ2FjaGVkUmVz
b3VyY2U6OnN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UoKTsKK30KKwordm9pZCBD
YWNoZWRSYXdSZXNvdXJjZTo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKK3sKKyAgICBp
ZiAobV9sb2FkZXIpCisgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKGRlZmVycyk7
Cit9CisKK3ZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OnNldERhdGFCdWZmZXJpbmdQb2xpY3koRGF0
YUJ1ZmZlcmluZ1BvbGljeSBkYXRhQnVmZmVyaW5nUG9saWN5KQoreworICAgIG1fb3B0aW9ucy5k
YXRhQnVmZmVyaW5nUG9saWN5ID0gZGF0YUJ1ZmZlcmluZ1BvbGljeTsKK30KKworc3RhdGljIGJv
b2wgc2hvdWxkSWdub3JlSGVhZGVyRm9yQ2FjaGVSZXVzZShIVFRQSGVhZGVyTmFtZSBuYW1lKQor
eworICAgIHN3aXRjaCAobmFtZSkgeworICAgIC8vIEZJWE1FOiBUaGlzIGxpc3Qgb2YgaGVhZGVy
cyB0aGF0IGRvbid0IGFmZmVjdCBjYWNoZSBwb2xpY3kgYWxtb3N0IGNlcnRhaW5seSBpc24ndCBj
b21wbGV0ZS4KKyAgICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpBY2NlcHQ6CisgICAgY2FzZSBIVFRQ
SGVhZGVyTmFtZTo6Q2FjaGVDb250cm9sOgorICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OlByYWdt
YToKKyAgICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpQdXJwb3NlOgorICAgIGNhc2UgSFRUUEhlYWRl
ck5hbWU6OlJlZmVyZXI6CisgICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50OgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK2Jvb2wgQ2FjaGVkUmF3UmVzb3VyY2U6OmNhblJldXNlKGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCkgY29uc3QKK3sKKyAgICBpZiAoZGF0YUJ1ZmZlcmluZ1Bv
bGljeSgpID09IERvTm90QnVmZmVyRGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKG1fcmVzb3VyY2VSZXF1ZXN0Lmh0dHBNZXRob2QoKSAhPSBuZXdSZXF1ZXN0Lmh0dHBNZXRo
b2QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fcmVzb3VyY2VSZXF1ZXN0
Lmh0dHBCb2R5KCkgIT0gbmV3UmVxdWVzdC5odHRwQm9keSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAobV9yZXNvdXJjZVJlcXVlc3QuYWxsb3dDb29raWVzKCkgIT0gbmV3UmVx
dWVzdC5hbGxvd0Nvb2tpZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG5l
d1JlcXVlc3QuaXNDb25kaXRpb25hbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBFbnN1cmUgbW9zdCBoZWFkZXJzIG1hdGNoIHRoZSBleGlzdGluZyBoZWFkZXJzIGJlZm9yZSBj
b250aW51aW5nLgorICAgIC8vIE5vdGUgdGhhdCB0aGUgbGlzdCBvZiBpZ25vcmVkIGhlYWRlcnMg
aW5jbHVkZXMgc29tZSBoZWFkZXJzIGV4cGxpY2l0bHkgcmVsYXRlZCB0byBjYWNoaW5nLgorICAg
IC8vIEEgbW9yZSBkZXRhaWxlZCBjaGVjayBvZiBjYWNoaW5nIHBvbGljeSB3aWxsIGJlIHBlcmZv
cm1lZCBsYXRlciwgdGhpcyBpcyBzaW1wbHkgYSBsaXN0IG9mCisgICAgLy8gaGVhZGVycyB0aGF0
IHdlIG1pZ2h0IHBlcm1pdCB0byBiZSBkaWZmZXJlbnQgYW5kIHN0aWxsIHJldXNlIHRoZSBleGlz
dGluZyBDYWNoZWRSZXNvdXJjZS4KKyAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBuZXdIZWFkZXJz
ID0gbmV3UmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCk7CisgICAgY29uc3QgSFRUUEhlYWRlck1h
cCYgb2xkSGVhZGVycyA9IG1fcmVzb3VyY2VSZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKTsKKwor
ICAgIGZvciAoY29uc3QgYXV0byYgaGVhZGVyIDogbmV3SGVhZGVycykgeworICAgICAgICBpZiAo
aGVhZGVyLmtleUFzSFRUUEhlYWRlck5hbWUpIHsKKyAgICAgICAgICAgIGlmICghc2hvdWxkSWdu
b3JlSGVhZGVyRm9yQ2FjaGVSZXVzZShoZWFkZXIua2V5QXNIVFRQSGVhZGVyTmFtZS52YWx1ZSgp
KQorICAgICAgICAgICAgICAgICYmIGhlYWRlci52YWx1ZSAhPSBvbGRIZWFkZXJzLmNvbW1vbkhl
YWRlcnMoKS5nZXQoaGVhZGVyLmtleUFzSFRUUEhlYWRlck5hbWUudmFsdWUoKSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKGhlYWRlci52YWx1ZSAh
PSBvbGRIZWFkZXJzLnVuY29tbW9uSGVhZGVycygpLmdldChoZWFkZXIua2V5KSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBGb3IgdGhpcyBzZWNvbmQgbG9vcCwg
d2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBjb21wYXJlIHZhbHVlcywgY2hlY2tpbmcgdGhhdCB0
aGUKKyAgICAvLyBrZXkgaXMgY29udGFpbmVkIGluIG5ld0hlYWRlcnMgaXMgc3VmZmljaWVudCBk
dWUgdG8gdGhlIHByZXZpb3VzIGxvb3AuCisgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBv
bGRIZWFkZXJzKSB7CisgICAgICAgIGlmIChoZWFkZXIua2V5QXNIVFRQSGVhZGVyTmFtZSkgewor
ICAgICAgICAgICAgaWYgKCFzaG91bGRJZ25vcmVIZWFkZXJGb3JDYWNoZVJldXNlKGhlYWRlci5r
ZXlBc0hUVFBIZWFkZXJOYW1lLnZhbHVlKCkpCisgICAgICAgICAgICAgICAgJiYgIW5ld0hlYWRl
cnMuY29tbW9uSGVhZGVycygpLmNvbnRhaW5zKGhlYWRlci5rZXlBc0hUVFBIZWFkZXJOYW1lLnZh
bHVlKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlm
ICghbmV3SGVhZGVycy51bmNvbW1vbkhlYWRlcnMoKS5jb250YWlucyhoZWFkZXIua2V5KSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6Y2xlYXIoKQoreworICAgIG1fZGF0YSA9IG51bGxwdHI7
CisgICAgc2V0RW5jb2RlZFNpemUoMCk7CisgICAgaWYgKG1fbG9hZGVyKQorICAgICAgICBtX2xv
YWRlci0+Y2xlYXJSZXNvdXJjZURhdGEoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJhd1Jlc291cmNl
LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkUmF3UmVzb3VyY2UuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41ZmI1NGQ4NDU4MmM5NTAwODEwY2M5NjBmYTM2MTQ1OWI3NTg5NjA2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJhd1Jlc291cmNl
LmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25v
bGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCisgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVl
bGxlciA8bXVlbGxlckBrZGUub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2Vp
bmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYg
Q2FjaGVkUmF3UmVzb3VyY2VfaAorI2RlZmluZSBDYWNoZWRSYXdSZXNvdXJjZV9oCisKKyNpbmNs
dWRlICJDYWNoZWRSZXNvdXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENh
Y2hlZFJlc291cmNlQ2xpZW50OworY2xhc3MgU3VicmVzb3VyY2VMb2FkZXI7CisKK2NsYXNzIENh
Y2hlZFJhd1Jlc291cmNlIGZpbmFsIDogcHVibGljIENhY2hlZFJlc291cmNlIHsKK3B1YmxpYzoK
KyAgICBDYWNoZWRSYXdSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3QmLCBUeXBlLCBTZXNzaW9uSUQp
OworCisgICAgLy8gRklYTUU6IEFzc29jaWF0ZWRVUkxMb2FkZXIgc2hvdWxkbid0IGJlIGEgRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyIGFuZCB0aGVyZWZvcmUgc2hvdWxkbid0CisgICAgLy8gdXNl
IENhY2hlZFJhd1Jlc291cmNlLiBIb3dldmVyLCBpdCBpcywgYW5kIGl0IG5lZWRzIHRvIGJlIGFi
bGUgdG8gZGVmZXIgbG9hZGluZy4KKyAgICAvLyBUaGlzIGNhbiBiZSBmaXhlZCBieSBzcGxpdHRp
bmcgQ09SUyBwcmVmbGlnaHRpbmcgb3V0IG9mIERvY3VtZW50VGhyZWFjYWJsZUxvYWRlci4KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBzZXREYXRhQnVmZmVyaW5nUG9saWN5KERhdGFCdWZmZXJpbmdQb2xpY3kpOworICAgIAorICAg
IC8vIEZJWE1FOiBUaGlzIGlzIGV4cG9zZWQgZm9yIHRoZSBJbnBzZWN0b3JJbnN0cnVtZW50YXRp
b24gZm9yIHByZWZsaWdodHMgaW4gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLiBJdCdzIGFsc28g
cmVhbGx5IGxhbWUuCisgICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1
cm4gbV9pZGVudGlmaWVyOyB9CisKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBib29sIGNhblJl
dXNlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIGNvbnN0OworCisgICAgYm9vbCB3YXNSZWRpcmVj
dGVkKCkgY29uc3QgeyByZXR1cm4gIW1fcmVkaXJlY3RDaGFpbi5pc0VtcHR5KCk7IH07CisKK3By
aXZhdGU6CisgICAgdm9pZCBkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGFkZERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBhZGREYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1ZmZlciopIG92ZXJyaWRlOworCisg
ICAgYm9vbCBzaG91bGRJZ25vcmVIVFRQU3RhdHVzQ29kZUVycm9ycygpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2b2lkIGFsbENsaWVudHNSZW1vdmVkKCkgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIHJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpIG92ZXJyaWRlOworICAgIHZvaWQgcmVzcG9uc2VSZWNlaXZlZChjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJikgb3ZlcnJpZGU7CisgICAgYm9vbCBzaG91bGRDYWNoZVJlc3Bv
bnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZFNlbmRE
YXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3Rh
bEJ5dGVzVG9CZVNlbnQpIG92ZXJyaWRlOworCisgICAgdm9pZCBzd2l0Y2hDbGllbnRzVG9SZXZh
bGlkYXRlZFJlc291cmNlKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBtYXlUcnlSZXBsYWNlRW5jb2Rl
ZERhdGEoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2FsbG93RW5jb2RlZERhdGFSZXBsYWNl
bWVudDsgfQorCisgICAgY29uc3QgY2hhciogY2FsY3VsYXRlSW5jcmVtZW50YWxEYXRhQ2h1bmso
U2hhcmVkQnVmZmVyKiwgdW5zaWduZWQmIGluY3JlbWVudGFsRGF0YUxlbmd0aCk7CisgICAgdm9p
ZCBub3RpZnlDbGllbnRzRGF0YVdhc1JlY2VpdmVkKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVk
IGxlbmd0aCk7CisKKyNpZiBVU0UoU09VUCkKKyAgICBjaGFyKiBnZXRPckNyZWF0ZVJlYWRCdWZm
ZXIoc2l6ZV90IHJlcXVlc3RlZFNpemUsIHNpemVfdCYgYWN0dWFsU2l6ZSkgb3ZlcnJpZGU7Cisj
ZW5kaWYKKworICAgIHVuc2lnbmVkIGxvbmcgbV9pZGVudGlmaWVyOworICAgIGJvb2wgbV9hbGxv
d0VuY29kZWREYXRhUmVwbGFjZW1lbnQ7CisKKyAgICBzdHJ1Y3QgUmVkaXJlY3RQYWlyIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIGV4cGxpY2l0IFJlZGlyZWN0UGFpcihjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2Up
CisgICAgICAgICAgICA6IG1fcmVxdWVzdChyZXF1ZXN0KQorICAgICAgICAgICAgLCBtX3JlZGly
ZWN0UmVzcG9uc2UocmVkaXJlY3RSZXNwb25zZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0IG1fcmVxdWVzdDsKKyAgICAgICAgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSBtX3JlZGlyZWN0UmVzcG9uc2U7CisgICAgfTsKKworICAgIFZlY3RvcjxS
ZWRpcmVjdFBhaXI+IG1fcmVkaXJlY3RDaGFpbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpDYWNoZWRSYXdSZXNv
dXJjZSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6Q2FjaGVkUmVzb3Vy
Y2UmIHJlc291cmNlKSB7IHJldHVybiByZXNvdXJjZS5pc01haW5Pck1lZGlhT3JSYXdSZXNvdXJj
ZSgpOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNlbmRpZiAvLyBDYWNoZWRS
YXdSZXNvdXJjZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2Fj
aGVkUmF3UmVzb3VyY2VDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNo
ZWRSYXdSZXNvdXJjZUNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFlMGM5ZmRmOTE4NGM5NDVhZmNlMjlj
ZWQ4ZTllMDlhNmFhYjNhM2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvZmV0Y2gvQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQuaApAQCAtMCwwICsxLDQ5IEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQor
ICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20p
CisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhY2hlZFJl
c291cmNlQ2xpZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FjaGVkUmVz
b3VyY2U7CitjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CitjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwor
CitjbGFzcyBDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNs
aWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQoKSB7
IH0KKyAgICBzdGF0aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnRUeXBlIGV4cGVjdGVkVHlwZSgpIHsg
cmV0dXJuIFJhd1Jlc291cmNlVHlwZTsgfQorICAgIENhY2hlZFJlc291cmNlQ2xpZW50VHlwZSBy
ZXNvdXJjZUNsaWVudFR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBleHBlY3RlZFR5cGUo
KTsgfQorCisgICAgdmlydHVhbCB2b2lkIGRhdGFTZW50KENhY2hlZFJlc291cmNlKiwgdW5zaWdu
ZWQgbG9uZyBsb25nIC8qIGJ5dGVzU2VudCAqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qIHRvdGFs
Qnl0ZXNUb0JlU2VudCAqLykgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlc3BvbnNlUmVjZWl2ZWQo
Q2FjaGVkUmVzb3VyY2UqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyB9CisgICAgdmlydHVh
bCBib29sIHNob3VsZENhY2hlUmVzcG9uc2UoQ2FjaGVkUmVzb3VyY2UqLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBkYXRhUmVjZWl2
ZWQoQ2FjaGVkUmVzb3VyY2UqLCBjb25zdCBjaGFyKiAvKiBkYXRhICovLCBpbnQgLyogbGVuZ3Ro
ICovKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVkaXJlY3RSZWNlaXZlZChDYWNoZWRSZXNvdXJj
ZSosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KKyNpZiBV
U0UoU09VUCkKKyAgICB2aXJ0dWFsIGNoYXIqIGdldE9yQ3JlYXRlUmVhZEJ1ZmZlcihDYWNoZWRS
ZXNvdXJjZSosIHNpemVfdCAvKiByZXF1ZXN0ZWRTaXplICovLCBzaXplX3QmIC8qIGFjdHVhbFNp
emUgKi8pIHsgcmV0dXJuIG51bGxwdHI7IH0KKyNlbmRpZgorfTsKKworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjEzYWU2
MmExM2FkMGNkOGZiMTEyOWEzYmUyY2UyY2I4ZmZhMzVhNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZS5jcHAKQEAgLTAsMCArMSw5
MzUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1o
ZC5tcGcuZGUpCisgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBr
ZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwMiBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtk
ZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdA
Z21haWwuY29tKQorICAgIENvcHlyaWdodCAoQykgMjAwNC0yMDExLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q2FjaGVkUmVzb3VyY2UuaCIKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKKyNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5j
bHVkZSAiQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmgiCisjaW5jbHVkZSAiRGlhZ25vc3RpY0xv
Z2dpbmdDbGllbnQuaCIKKyNpbmNsdWRlICJEaWFnbm9zdGljTG9nZ2luZ0tleXMuaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAi
RnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUg
IkhUVFBIZWFkZXJOYW1lcy5oIgorI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5o
IgorI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUgIkxvYWRlclN0cmF0ZWd5LmgiCisjaW5jbHVk
ZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1haW5GcmFtZS5oIgorI2luY2x1ZGUgIk1lbW9yeUNh
Y2hlLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5o
IgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnku
aCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlNlY3VyaXR5UG9saWN5
LmgiCisjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkTGVha0NvdW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lm
IFVTRShRVUlDS19MT09LKQorI2luY2x1ZGUgIlF1aWNrTG9vay5oIgorI2VuZGlmCisKK3VzaW5n
IG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVzb3VyY2VMb2FkUHJp
b3JpdHkgQ2FjaGVkUmVzb3VyY2U6OmRlZmF1bHRQcmlvcml0eUZvclJlc291cmNlVHlwZShUeXBl
IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6
TWFpblJlc291cmNlOgorICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlI
aWdoOworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6CisgICAgICAgIHJl
dHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6SGlnaDsKKyAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpTY3JpcHQ6CisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpTVkdGb250UmVzb3VyY2U6CisjZW5kaWYKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpNZWRp
YVJlc291cmNlOgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZToKKyAgICBj
YXNlIENhY2hlZFJlc291cmNlOjpSYXdSZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIFJlc291cmNl
TG9hZFByaW9yaXR5OjpNZWRpdW07CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNv
dXJjZToKKyAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5OjpMb3c7CisjaWYgRU5B
QkxFKFhTTFQpCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldDoKKyAgICAg
ICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5OjpIaWdoOworI2VuZGlmCisgICAgY2FzZSBD
YWNoZWRSZXNvdXJjZTo6U1ZHRG9jdW1lbnRSZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIFJlc291
cmNlTG9hZFByaW9yaXR5OjpMb3c7CisjaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCisgICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6TGlua1ByZWZldGNoOgorICAgICAgICByZXR1cm4gUmVzb3VyY2VM
b2FkUHJpb3JpdHk6OlZlcnlMb3c7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1N1YnJl
c291cmNlOgorICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHk6OlZlcnlMb3c7Cisj
ZW5kaWYKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6
VGV4dFRyYWNrUmVzb3VyY2U6CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eTo6
TG93OworI2VuZGlmCisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBSZXNvdXJjZUxvYWRQcmlvcml0eTo6TG93OworfQorCitzdGF0aWMgc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kcyBkZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsRm9yUmVzb3VyY2VUeXBl
KENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUpCit7CisgICAgaWYgKHR5cGUgPT0gQ2FjaGVkUmVz
b3VyY2U6OlNjcmlwdCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMg
eyAwIH07CisKKyAgICByZXR1cm4gTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpLmRlYWREZWNvZGVk
RGF0YURlbGV0aW9uSW50ZXJ2YWwoKTsKK30KKworREVGSU5FX0RFQlVHX09OTFlfR0xPQkFMKFJl
ZkNvdW50ZWRMZWFrQ291bnRlciwgY2FjaGVkUmVzb3VyY2VMZWFrQ291bnRlciwgKCJDYWNoZWRS
ZXNvdXJjZSIpKTsKKworQ2FjaGVkUmVzb3VyY2U6OkNhY2hlZFJlc291cmNlKGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgVHlwZSB0eXBlLCBTZXNzaW9uSUQgc2Vzc2lvbklEKQorICAg
IDogbV9yZXNvdXJjZVJlcXVlc3QocmVxdWVzdCkKKyAgICAsIG1fZGVjb2RlZERhdGFEZWxldGlv
blRpbWVyKCp0aGlzLCAmQ2FjaGVkUmVzb3VyY2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSwgZGVhZERl
Y29kZWREYXRhRGVsZXRpb25JbnRlcnZhbEZvclJlc291cmNlVHlwZSh0eXBlKSkKKyAgICAsIG1f
c2Vzc2lvbklEKHNlc3Npb25JRCkKKyAgICAsIG1fbG9hZFByaW9yaXR5KGRlZmF1bHRQcmlvcml0
eUZvclJlc291cmNlVHlwZSh0eXBlKSkKKyAgICAsIG1fcmVzcG9uc2VUaW1lc3RhbXAoc3RkOjpj
aHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCkpCisgICAgLCBtX2xhc3REZWNvZGVkQWNjZXNzVGlt
ZSgwKQorICAgICwgbV9sb2FkRmluaXNoVGltZSgwKQorICAgICwgbV9lbmNvZGVkU2l6ZSgwKQor
ICAgICwgbV9kZWNvZGVkU2l6ZSgwKQorICAgICwgbV9hY2Nlc3NDb3VudCgwKQorICAgICwgbV9o
YW5kbGVDb3VudCgwKQorICAgICwgbV9wcmVsb2FkQ291bnQoMCkKKyAgICAsIG1fcHJlbG9hZFJl
c3VsdChQcmVsb2FkTm90UmVmZXJlbmNlZCkKKyAgICAsIG1fcmVxdWVzdGVkRnJvbU5ldHdvcmtp
bmdMYXllcihmYWxzZSkKKyAgICAsIG1faW5DYWNoZShmYWxzZSkKKyAgICAsIG1fbG9hZGluZyhm
YWxzZSkKKyAgICAsIG1fc3dpdGNoaW5nQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZShmYWxz
ZSkKKyAgICAsIG1fdHlwZSh0eXBlKQorICAgICwgbV9zdGF0dXMoUGVuZGluZykKKyNpZm5kZWYg
TkRFQlVHCisgICAgLCBtX2RlbGV0ZWQoZmFsc2UpCisgICAgLCBtX2xydUluZGV4KDApCisjZW5k
aWYKKyAgICAsIG1fb3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIobnVsbHB0cikKKyAgICAsIG1f
cmVzb3VyY2VUb1JldmFsaWRhdGUobnVsbHB0cikKKyAgICAsIG1fcHJveHlSZXNvdXJjZShudWxs
cHRyKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gdW5zaWduZWQodHlwZSkpOyAvLyBtX3R5cGUg
aXMgYSBiaXRmaWVsZCwgc28gdGhpcyB0ZXN0cyBjYXJlbGVzcyB1cGRhdGVzIG9mIHRoZSBlbnVt
LgorICAgIEFTU0VSVChzZXNzaW9uSUQuaXNWYWxpZCgpKTsKKyNpZm5kZWYgTkRFQlVHCisgICAg
Y2FjaGVkUmVzb3VyY2VMZWFrQ291bnRlci5pbmNyZW1lbnQoKTsKKyNlbmRpZgorCisgICAgaWYg
KCFtX3Jlc291cmNlUmVxdWVzdC51cmwoKS5oYXNGcmFnbWVudElkZW50aWZpZXIoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIFVSTCB1cmxGb3JDYWNoZSA9IE1lbW9yeUNhY2hlOjpyZW1vdmVGcmFn
bWVudElkZW50aWZpZXJJZk5lZWRlZChtX3Jlc291cmNlUmVxdWVzdC51cmwoKSk7CisgICAgaWYg
KHVybEZvckNhY2hlLmhhc0ZyYWdtZW50SWRlbnRpZmllcigpKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9mcmFnbWVudElkZW50aWZpZXJGb3JSZXF1ZXN0ID0gbV9yZXNvdXJjZVJlcXVlc3QudXJs
KCkuZnJhZ21lbnRJZGVudGlmaWVyKCk7CisgICAgbV9yZXNvdXJjZVJlcXVlc3Quc2V0VVJMKHVy
bEZvckNhY2hlKTsKK30KKworQ2FjaGVkUmVzb3VyY2U6On5DYWNoZWRSZXNvdXJjZSgpCit7Cisg
ICAgQVNTRVJUKCFtX3Jlc291cmNlVG9SZXZhbGlkYXRlKTsgLy8gU2hvdWxkIGJlIHRydWUgYmVj
YXVzZSBjYW5EZWxldGUoKSBjaGVja3MgdGhpcy4KKyAgICBBU1NFUlQoY2FuRGVsZXRlKCkpOwor
ICAgIEFTU0VSVCghaW5DYWNoZSgpKTsKKyAgICBBU1NFUlQoIW1fZGVsZXRlZCk7CisgICAgQVNT
RVJUKHVybCgpLmlzTnVsbCgpIHx8ICFhbGxvd3NDYWNoaW5nKCkgfHwgTWVtb3J5Q2FjaGU6OnNp
bmdsZXRvbigpLnJlc291cmNlRm9yUmVxdWVzdChyZXNvdXJjZVJlcXVlc3QoKSwgc2Vzc2lvbklE
KCkpICE9IHRoaXMpOworCisjaWZuZGVmIE5ERUJVRworICAgIG1fZGVsZXRlZCA9IHRydWU7Cisg
ICAgY2FjaGVkUmVzb3VyY2VMZWFrQ291bnRlci5kZWNyZW1lbnQoKTsKKyNlbmRpZgorCisgICAg
aWYgKG1fb3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIpCisgICAgICAgIG1fb3duaW5nQ2FjaGVk
UmVzb3VyY2VMb2FkZXItPnJlbW92ZUNhY2hlZFJlc291cmNlKCp0aGlzKTsKK30KKwordm9pZCBD
YWNoZWRSZXNvdXJjZTo6ZmFpbEJlZm9yZVN0YXJ0aW5nKCkKK3sKKyAgICAvLyBGSVhNRTogV2hh
dCBpZiByZXNvdXJjZXMgaW4gb3RoZXIgZnJhbWVzIHdlcmUgd2FpdGluZyBmb3IgdGhpcyByZXZh
bGlkYXRpb24/CisgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhbm5vdCBzdGFydCBsb2FkaW5n
ICclcyciLCB1cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCkpOworICAgIGlmIChhbGxvd3ND
YWNoaW5nKCkgJiYgbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSkKKyAgICAgICAgTWVtb3J5Q2FjaGU6
OnNpbmdsZXRvbigpLnJldmFsaWRhdGlvbkZhaWxlZCgqdGhpcyk7CisgICAgZXJyb3IoQ2FjaGVk
UmVzb3VyY2U6OkxvYWRFcnJvcik7Cit9CisKK3N0YXRpYyB2b2lkIGFkZEFkZGl0aW9uYWxSZXF1
ZXN0SGVhZGVyc1RvUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IENhY2hl
ZFJlc291cmNlTG9hZGVyJiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgQ2FjaGVkUmVzb3VyY2UmIHJl
c291cmNlKQoreworICAgIGlmIChyZXNvdXJjZS50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6Ok1h
aW5SZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuOworICAgIC8vIEluIHNvbWUgY2FzZXMgd2UgbWF5
IHRyeSB0byBsb2FkIHJlc291cmNlcyBpbiBmcmFtZWxlc3MgZG9jdW1lbnRzLiBTdWNoIGxvYWRz
IGFsd2F5cyBmYWlsLgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgZ2V0IHRoaXMgZmFyLgor
ICAgIGlmICghY2FjaGVkUmVzb3VyY2VMb2FkZXIuZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gTm90ZTogV2Ugc2tpcCB0aGUgQ29udGVudC1TZWN1cml0eS1Qb2xpY3kgY2hlY2sg
aGVyZSBiZWNhdXNlIHdlIGNoZWNrCisgICAgLy8gdGhlIENvbnRlbnQtU2VjdXJpdHktUG9saWN5
IGF0IHRoZSBDYWNoZWRSZXNvdXJjZUxvYWRlciBsYXllciBzbyB3ZSBjYW4KKyAgICAvLyBoYW5k
bGUgZGlmZmVyZW50IHJlc291cmNlIHR5cGVzIGRpZmZlcmVudGx5LgorICAgIEZyYW1lTG9hZGVy
JiBmcmFtZUxvYWRlciA9IGNhY2hlZFJlc291cmNlTG9hZGVyLmZyYW1lKCktPmxvYWRlcigpOwor
ICAgIFN0cmluZyBvdXRnb2luZ1JlZmVycmVyOworICAgIFN0cmluZyBvdXRnb2luZ09yaWdpbjsK
KyAgICBpZiAocmVxdWVzdC5odHRwUmVmZXJyZXIoKS5pc051bGwoKSkgeworICAgICAgICBvdXRn
b2luZ1JlZmVycmVyID0gZnJhbWVMb2FkZXIub3V0Z29pbmdSZWZlcnJlcigpOworICAgICAgICBv
dXRnb2luZ09yaWdpbiA9IGZyYW1lTG9hZGVyLm91dGdvaW5nT3JpZ2luKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgb3V0Z29pbmdSZWZlcnJlciA9IHJlcXVlc3QuaHR0cFJlZmVycmVyKCk7Cisg
ICAgICAgIG91dGdvaW5nT3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmco
b3V0Z29pbmdSZWZlcnJlciktPnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgLy8gRklYTUU6IFJl
ZmFjdG9yIFNlY3VyaXR5UG9saWN5OjpnZW5lcmF0ZVJlZmVycmVySGVhZGVyIHRvIGFsaWduIHdp
dGggbmV3IHRlcm1pbm9sb2d5IHVzZWQgaW4gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNl
Yy1yZWZlcnJlci1wb2xpY3kuCisgICAgc3dpdGNoIChyZXNvdXJjZS5vcHRpb25zKCkucmVmZXJy
ZXJQb2xpY3kpIHsKKyAgICBjYXNlIEZldGNoT3B0aW9uczo6UmVmZXJyZXJQb2xpY3k6OkVtcHR5
U3RyaW5nOiB7CisgICAgICAgIFJlZmVycmVyUG9saWN5IHJlZmVycmVyUG9saWN5ID0gY2FjaGVk
UmVzb3VyY2VMb2FkZXIuZG9jdW1lbnQoKSA/IGNhY2hlZFJlc291cmNlTG9hZGVyLmRvY3VtZW50
KCktPnJlZmVycmVyUG9saWN5KCkgOiBSZWZlcnJlclBvbGljeTo6RGVmYXVsdDsKKyAgICAgICAg
b3V0Z29pbmdSZWZlcnJlciA9IFNlY3VyaXR5UG9saWN5OjpnZW5lcmF0ZVJlZmVycmVySGVhZGVy
KHJlZmVycmVyUG9saWN5LCByZXF1ZXN0LnVybCgpLCBvdXRnb2luZ1JlZmVycmVyKTsKKyAgICAg
ICAgYnJlYWs7IH0KKyAgICBjYXNlIEZldGNoT3B0aW9uczo6UmVmZXJyZXJQb2xpY3k6Ok5vUmVm
ZXJyZXJXaGVuRG93bmdyYWRlOgorICAgICAgICBvdXRnb2luZ1JlZmVycmVyID0gU2VjdXJpdHlQ
b2xpY3k6OmdlbmVyYXRlUmVmZXJyZXJIZWFkZXIoUmVmZXJyZXJQb2xpY3k6OkRlZmF1bHQsIHJl
cXVlc3QudXJsKCksIG91dGdvaW5nUmVmZXJyZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZldGNoT3B0aW9uczo6UmVmZXJyZXJQb2xpY3k6Ok5vUmVmZXJyZXI6CisgICAgICAgIG91dGdv
aW5nUmVmZXJyZXIgPSBTdHJpbmcoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGZXRjaE9w
dGlvbnM6OlJlZmVycmVyUG9saWN5OjpPcmlnaW46CisgICAgICAgIG91dGdvaW5nUmVmZXJyZXIg
PSBTZWN1cml0eVBvbGljeTo6Z2VuZXJhdGVSZWZlcnJlckhlYWRlcihSZWZlcnJlclBvbGljeTo6
T3JpZ2luLCByZXF1ZXN0LnVybCgpLCBvdXRnb2luZ1JlZmVycmVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBGZXRjaE9wdGlvbnM6OlJlZmVycmVyUG9saWN5OjpPcmlnaW5XaGVuQ3Jvc3NP
cmlnaW46CisgICAgICAgIGlmIChyZXNvdXJjZS5pc0Nyb3NzT3JpZ2luKCkpCisgICAgICAgICAg
ICBvdXRnb2luZ1JlZmVycmVyID0gU2VjdXJpdHlQb2xpY3k6OmdlbmVyYXRlUmVmZXJyZXJIZWFk
ZXIoUmVmZXJyZXJQb2xpY3k6Ok9yaWdpbiwgcmVxdWVzdC51cmwoKSwgb3V0Z29pbmdSZWZlcnJl
cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmV0Y2hPcHRpb25zOjpSZWZlcnJlclBvbGlj
eTo6VW5zYWZlVXJsOgorICAgICAgICBicmVhazsKKyAgICB9OworCisgICAgaWYgKG91dGdvaW5n
UmVmZXJyZXIuaXNFbXB0eSgpKQorICAgICAgICByZXF1ZXN0LmNsZWFySFRUUFJlZmVycmVyKCk7
CisgICAgZWxzZQorICAgICAgICByZXF1ZXN0LnNldEhUVFBSZWZlcnJlcihvdXRnb2luZ1JlZmVy
cmVyKTsKKyAgICBGcmFtZUxvYWRlcjo6YWRkSFRUUE9yaWdpbklmTmVlZGVkKHJlcXVlc3QsIG91
dGdvaW5nT3JpZ2luKTsKKworICAgIGZyYW1lTG9hZGVyLmFkZEV4dHJhRmllbGRzVG9TdWJyZXNv
dXJjZVJlcXVlc3QocmVxdWVzdCk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OmFkZEFkZGl0
aW9uYWxSZXF1ZXN0SGVhZGVycyhDYWNoZWRSZXNvdXJjZUxvYWRlciYgbG9hZGVyKQoreworICAg
IGFkZEFkZGl0aW9uYWxSZXF1ZXN0SGVhZGVyc1RvUmVxdWVzdChtX3Jlc291cmNlUmVxdWVzdCwg
bG9hZGVyLCAqdGhpcyk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OmNvbXB1dGVPcmlnaW4o
Q2FjaGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlcikKK3sKKyAgICBpZiAodHlwZSgpID09IE1haW5S
ZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKGxvYWRlci5kb2N1bWVudCgp
KTsKKyAgICBpZiAobV9yZXNvdXJjZVJlcXVlc3QuaGFzSFRUUE9yaWdpbigpKQorICAgICAgICBt
X29yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKG1fcmVzb3VyY2VSZXF1
ZXN0Lmh0dHBPcmlnaW4oKSk7CisgICAgZWxzZQorICAgICAgICBtX29yaWdpbiA9IGxvYWRlci5k
b2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpOworICAgIEFTU0VSVChtX29yaWdpbik7CisKKyAg
ICBpZiAoIShtX3Jlc291cmNlUmVxdWVzdC51cmwoKS5wcm90b2NvbElzRGF0YSgpICYmIG1fb3B0
aW9ucy5zYW1lT3JpZ2luRGF0YVVSTEZsYWcgPT0gU2FtZU9yaWdpbkRhdGFVUkxGbGFnOjpTZXQp
ICYmICFtX29yaWdpbi0+Y2FuUmVxdWVzdChtX3Jlc291cmNlUmVxdWVzdC51cmwoKSkpCisgICAg
ICAgIHNldENyb3NzT3JpZ2luKCk7CisKKyAgICBhZGRBZGRpdGlvbmFsUmVxdWVzdEhlYWRlcnMo
bG9hZGVyKTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6bG9hZChDYWNoZWRSZXNvdXJjZUxv
YWRlciYgY2FjaGVkUmVzb3VyY2VMb2FkZXIsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYg
b3B0aW9ucykKK3sKKyAgICBpZiAoIWNhY2hlZFJlc291cmNlTG9hZGVyLmZyYW1lKCkpIHsKKyAg
ICAgICAgZmFpbEJlZm9yZVN0YXJ0aW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
RnJhbWUmIGZyYW1lID0gKmNhY2hlZFJlc291cmNlTG9hZGVyLmZyYW1lKCk7CisKKyAgICAvLyBQ
cmV2ZW50IG5ldyBsb2FkcyBpZiB3ZSBhcmUgaW4gdGhlIFBhZ2VDYWNoZSBvciBiZWluZyBhZGRl
ZCB0byB0aGUgUGFnZUNhY2hlLgorICAgIGlmIChmcmFtZS5wYWdlKCkgJiYgZnJhbWUucGFnZSgp
LT5pblBhZ2VDYWNoZSgpKSB7CisgICAgICAgIGZhaWxCZWZvcmVTdGFydGluZygpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgRnJhbWVMb2FkZXImIGZyYW1lTG9hZGVyID0gZnJhbWUu
bG9hZGVyKCk7CisgICAgaWYgKG9wdGlvbnMuc2VjdXJpdHlDaGVjayA9PSBEb1NlY3VyaXR5Q2hl
Y2sgJiYgKGZyYW1lTG9hZGVyLnN0YXRlKCkgPT0gRnJhbWVTdGF0ZVByb3Zpc2lvbmFsIHx8ICFm
cmFtZUxvYWRlci5hY3RpdmVEb2N1bWVudExvYWRlcigpIHx8IGZyYW1lTG9hZGVyLmFjdGl2ZURv
Y3VtZW50TG9hZGVyKCktPmlzU3RvcHBpbmcoKSkpIHsKKyAgICAgICAgZmFpbEJlZm9yZVN0YXJ0
aW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX29wdGlvbnMgPSBvcHRpb25z
OworICAgIG1fbG9hZGluZyA9IHRydWU7CisKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKyAgICBpZiAo
IW1fcmVzb3VyY2VSZXF1ZXN0LmlzTnVsbCgpICYmIG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLnBy
b3RvY29sSXMoUUxQcmV2aWV3UHJvdG9jb2woKSkpIHsKKyAgICAgICAgLy8gV2hlbiBRdWlja0xv
b2sgaXMgaW52b2tlZCB0byBjb252ZXJ0IGEgZG9jdW1lbnQsIGl0IHJldHVybnMgYSB1bmlxdWUg
VVJMIGluIHRoZQorICAgICAgICAvLyBOU1VSTFJlcG9uc2UgZm9yIHRoZSBtYWluIGRvY3VtZW50
LiBUbyBtYWtlIHNhZmVRTFVSTEZvckRvY3VtZW50VVJMQW5kUmVzb3VyY2VVUkwoKQorICAgICAg
ICAvLyB3b3JrLCB3ZSBuZWVkIHRvIHVzZSB0aGUgUUwgVVJMIG5vdCB0aGUgb3JpZ2luYWwgVVJM
LgorICAgICAgICBjb25zdCBVUkwmIGRvY3VtZW50VVJMID0gZnJhbWVMb2FkZXIuZG9jdW1lbnRM
b2FkZXIoKS0+cmVzcG9uc2UoKS51cmwoKTsKKyAgICAgICAgbV9yZXNvdXJjZVJlcXVlc3Quc2V0
VVJMKHNhZmVRTFVSTEZvckRvY3VtZW50VVJMQW5kUmVzb3VyY2VVUkwoZG9jdW1lbnRVUkwsIHVy
bCgpKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoIWFjY2VwdCgpLmlzRW1wdHkoKSkKKyAg
ICAgICAgbV9yZXNvdXJjZVJlcXVlc3Quc2V0SFRUUEFjY2VwdChhY2NlcHQoKSk7CisKKyAgICBp
ZiAoaXNDYWNoZVZhbGlkYXRvcigpKSB7CisgICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJj
ZVRvUmV2YWxpZGF0ZSA9IG1fcmVzb3VyY2VUb1JldmFsaWRhdGU7CisgICAgICAgIEFTU0VSVChy
ZXNvdXJjZVRvUmV2YWxpZGF0ZS0+Y2FuVXNlQ2FjaGVWYWxpZGF0b3IoKSk7CisgICAgICAgIEFT
U0VSVChyZXNvdXJjZVRvUmV2YWxpZGF0ZS0+aXNMb2FkZWQoKSk7CisgICAgICAgIGNvbnN0IFN0
cmluZyYgbGFzdE1vZGlmaWVkID0gcmVzb3VyY2VUb1JldmFsaWRhdGUtPnJlc3BvbnNlKCkuaHR0
cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpMYXN0TW9kaWZpZWQpOworICAgICAgICBjb25z
dCBTdHJpbmcmIGVUYWcgPSByZXNvdXJjZVRvUmV2YWxpZGF0ZS0+cmVzcG9uc2UoKS5odHRwSGVh
ZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkVUYWcpOworICAgICAgICBpZiAoIWxhc3RNb2RpZmll
ZC5pc0VtcHR5KCkgfHwgIWVUYWcuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBBU1NFUlQoY2Fj
aGVkUmVzb3VyY2VMb2FkZXIuY2FjaGVQb2xpY3kodHlwZSgpKSAhPSBDYWNoZVBvbGljeVJlbG9h
ZCk7CisgICAgICAgICAgICBpZiAoY2FjaGVkUmVzb3VyY2VMb2FkZXIuY2FjaGVQb2xpY3kodHlw
ZSgpKSA9PSBDYWNoZVBvbGljeVJldmFsaWRhdGUpCisgICAgICAgICAgICAgICAgbV9yZXNvdXJj
ZVJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDYWNoZUNvbnRyb2ws
ICJtYXgtYWdlPTAiKTsKKyAgICAgICAgICAgIGlmICghbGFzdE1vZGlmaWVkLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICBtX3Jlc291cmNlUmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoSFRU
UEhlYWRlck5hbWU6OklmTW9kaWZpZWRTaW5jZSwgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgICAg
IGlmICghZVRhZy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgbV9yZXNvdXJjZVJlcXVlc3Qu
c2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpJZk5vbmVNYXRjaCwgZVRhZyk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKKyAgICBpZiAodHlw
ZSgpID09IENhY2hlZFJlc291cmNlOjpMaW5rUHJlZmV0Y2ggfHwgdHlwZSgpID09IENhY2hlZFJl
c291cmNlOjpMaW5rU3VicmVzb3VyY2UpCisgICAgICAgIG1fcmVzb3VyY2VSZXF1ZXN0LnNldEhU
VFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6UHVycG9zZSwgInByZWZldGNoIik7CisjZW5k
aWYKKyAgICBtX3Jlc291cmNlUmVxdWVzdC5zZXRQcmlvcml0eShsb2FkUHJpb3JpdHkoKSk7CisK
KyAgICBjb21wdXRlT3JpZ2luKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKKworICAgIC8vIEZJWE1F
OiBJdCdzIHVuZm9ydHVuYXRlIHRoYXQgdGhlIGNhY2hlIGxheWVyIGFuZCBiZWxvdyBnZXQgdG8g
a25vdyBhbnl0aGluZyBhYm91dCBmcmFnbWVudCBpZGVudGlmaWVycy4KKyAgICAvLyBXZSBzaG91
bGQgbG9vayBpbnRvIHJlbW92aW5nIHRoZSBleHBlY3RhdGlvbiBvZiB0aGF0IGtub3dsZWRnZSBm
cm9tIHRoZSBwbGF0Zm9ybSBuZXR3b3JrIHN0YWNrcy4KKyAgICBSZXNvdXJjZVJlcXVlc3QgcmVx
dWVzdChtX3Jlc291cmNlUmVxdWVzdCk7CisgICAgaWYgKCFtX2ZyYWdtZW50SWRlbnRpZmllckZv
clJlcXVlc3QuaXNOdWxsKCkpIHsKKyAgICAgICAgVVJMIHVybCA9IHJlcXVlc3QudXJsKCk7Cisg
ICAgICAgIHVybC5zZXRGcmFnbWVudElkZW50aWZpZXIobV9mcmFnbWVudElkZW50aWZpZXJGb3JS
ZXF1ZXN0KTsKKyAgICAgICAgcmVxdWVzdC5zZXRVUkwodXJsKTsKKyAgICAgICAgbV9mcmFnbWVu
dElkZW50aWZpZXJGb3JSZXF1ZXN0ID0gU3RyaW5nKCk7CisgICAgfQorCisgICAgbV9sb2FkZXIg
PSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+bG9hZFJlc291cmNlKGZy
YW1lLCAqdGhpcywgcmVxdWVzdCwgb3B0aW9ucyk7CisgICAgaWYgKCFtX2xvYWRlcikgeworICAg
ICAgICBmYWlsQmVmb3JlU3RhcnRpbmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG1fc3RhdHVzID0gUGVuZGluZzsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6bG9hZEZyb20o
Y29uc3QgQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlv
bnMmIG9wdGlvbnMsIENhY2hlZFJlc291cmNlTG9hZGVyJiBjYWNoZWRSZXNvdXJjZUxvYWRlcikK
K3sKKyAgICBBU1NFUlQodXJsKCkgPT0gcmVzb3VyY2UudXJsKCkpOworICAgIEFTU0VSVCh0eXBl
KCkgPT0gcmVzb3VyY2UudHlwZSgpKTsKKyAgICBBU1NFUlQocmVzb3VyY2Uuc3RhdHVzKCkgPT0g
U3RhdHVzOjpDYWNoZWQpOworCisgICAgbV9vcHRpb25zID0gb3B0aW9uczsKKyAgICBjb21wdXRl
T3JpZ2luKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKKworICAgIGlmIChpc0Nyb3NzT3JpZ2luKCkg
JiYgb3B0aW9ucy5tb2RlID09IEZldGNoT3B0aW9uczo6TW9kZTo6Q29ycykgeworICAgICAgICBB
U1NFUlQobV9vcmlnaW4pOworICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOworICAgICAgICBp
ZiAoIVdlYkNvcmU6OnBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhyZXNvdXJjZS5yZXNwb25zZSgp
LCBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscywgKm1fb3JpZ2luLCBlcnJvck1lc3NhZ2UpKSB7
CisgICAgICAgICAgICBzZXRSZXNvdXJjZUVycm9yKFJlc291cmNlRXJyb3IoU3RyaW5nKCksIDAs
IHVybCgpLCBlcnJvck1lc3NhZ2UsIFJlc291cmNlRXJyb3I6OlR5cGU6OkFjY2Vzc0NvbnRyb2wp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNldEJvZHlE
YXRhRnJvbShyZXNvdXJjZSk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OmNoZWNrTm90aWZ5
KCkKK3sKKyAgICBpZiAoaXNMb2FkaW5nKCkgfHwgc3RpbGxOZWVkc0xvYWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI8Q2FjaGVkUmVzb3VyY2VD
bGllbnQ+IHdhbGtlcihtX2NsaWVudHMpOworICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVu
dCogY2xpZW50ID0gd2Fsa2VyLm5leHQoKSkKKyAgICAgICAgY2xpZW50LT5ub3RpZnlGaW5pc2hl
ZCh0aGlzKTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6YWRkRGF0YUJ1ZmZlcihTaGFyZWRC
dWZmZXImKQoreworICAgIEFTU0VSVChkYXRhQnVmZmVyaW5nUG9saWN5KCkgPT0gQnVmZmVyRGF0
YSk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OmFkZERhdGEoY29uc3QgY2hhciosIHVuc2ln
bmVkKQoreworICAgIEFTU0VSVChkYXRhQnVmZmVyaW5nUG9saWN5KCkgPT0gRG9Ob3RCdWZmZXJE
YXRhKTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6ZmluaXNoTG9hZGluZyhTaGFyZWRCdWZm
ZXIqKQoreworICAgIHNldExvYWRpbmcoZmFsc2UpOworICAgIGNoZWNrTm90aWZ5KCk7Cit9CisK
K3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OmVycm9yKENhY2hlZFJlc291cmNlOjpTdGF0dXMgc3RhdHVz
KQoreworICAgIHNldFN0YXR1cyhzdGF0dXMpOworICAgIEFTU0VSVChlcnJvck9jY3VycmVkKCkp
OworICAgIG1fZGF0YSA9IG51bGxwdHI7CisKKyAgICBzZXRMb2FkaW5nKGZhbHNlKTsKKyAgICBj
aGVja05vdGlmeSgpOworfQorICAgIAordm9pZCBDYWNoZWRSZXNvdXJjZTo6Y2FuY2VsTG9hZCgp
Cit7CisgICAgaWYgKCFpc0xvYWRpbmcoKSAmJiAhc3RpbGxOZWVkc0xvYWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgc2V0U3RhdHVzKExvYWRFcnJvcik7CisgICAgc2V0TG9hZGluZyhmYWxz
ZSk7CisgICAgY2hlY2tOb3RpZnkoKTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6ZmluaXNo
KCkKK3sKKyAgICBpZiAoIWVycm9yT2NjdXJyZWQoKSkKKyAgICAgICAgbV9zdGF0dXMgPSBDYWNo
ZWQ7Cit9CisKK2Jvb2wgQ2FjaGVkUmVzb3VyY2U6OnBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhT
ZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlPcmlnaW4pCit7CisgICAgU3RyaW5nIGVycm9yRGVzY3Jp
cHRpb247CisgICAgcmV0dXJuIFdlYkNvcmU6OnBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhyZXNw
b25zZSgpLCByZXNvdXJjZVJlcXVlc3QoKS5hbGxvd0Nvb2tpZXMoKSA/IEFsbG93U3RvcmVkQ3Jl
ZGVudGlhbHMgOiBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIHNlY3VyaXR5T3JpZ2luLCBl
cnJvckRlc2NyaXB0aW9uKTsKK30KKworYm9vbCBDYWNoZWRSZXNvdXJjZTo6cGFzc2VzU2FtZU9y
aWdpblBvbGljeUNoZWNrKFNlY3VyaXR5T3JpZ2luJiBzZWN1cml0eU9yaWdpbikKK3sKKyAgICBp
ZiAoc2VjdXJpdHlPcmlnaW4uY2FuUmVxdWVzdChyZXNwb25zZUZvclNhbWVPcmlnaW5Qb2xpY3lD
aGVja3MoKS51cmwoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBwYXNzZXNB
Y2Nlc3NDb250cm9sQ2hlY2soc2VjdXJpdHlPcmlnaW4pOworfQorCit2b2lkIENhY2hlZFJlc291
cmNlOjpzZXRDcm9zc09yaWdpbigpCit7CisgICAgQVNTRVJUKG1fb3B0aW9ucy5tb2RlICE9IEZl
dGNoT3B0aW9uczo6TW9kZTo6U2FtZU9yaWdpbik7CisgICAgbV9yZXNwb25zZVRhaW50aW5nID0g
KG1fb3B0aW9ucy5tb2RlID09IEZldGNoT3B0aW9uczo6TW9kZTo6Q29ycykgPyBSZXNvdXJjZVJl
c3BvbnNlOjpUYWludGluZzo6Q29ycyA6IFJlc291cmNlUmVzcG9uc2U6OlRhaW50aW5nOjpPcGFx
dWU7Cit9CisKK2Jvb2wgQ2FjaGVkUmVzb3VyY2U6OmlzQ3Jvc3NPcmlnaW4oKSBjb25zdAorewor
ICAgIHJldHVybiBtX3Jlc3BvbnNlVGFpbnRpbmcgIT0gUmVzb3VyY2VSZXNwb25zZTo6VGFpbnRp
bmc6OkJhc2ljOworfQorCitib29sIENhY2hlZFJlc291cmNlOjppc0NsZWFuKCkgY29uc3QKK3sK
KyAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9pbmZyYXN0cnVj
dHVyZS5odG1sI2NvcnMtc2FtZS1vcmlnaW4KKyAgICByZXR1cm4gIWxvYWRGYWlsZWRPckNhbmNl
bGVkKCkgJiYgbV9yZXNwb25zZVRhaW50aW5nICE9IFJlc291cmNlUmVzcG9uc2U6OlRhaW50aW5n
OjpPcGFxdWU7Cit9CisKK2Jvb2wgQ2FjaGVkUmVzb3VyY2U6OmlzRXhwaXJlZCgpIGNvbnN0Cit7
CisgICAgaWYgKG1fcmVzcG9uc2UuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJldHVybiBjb21wdXRlQ3VycmVudEFnZShtX3Jlc3BvbnNlLCBtX3Jlc3BvbnNlVGltZXN0
YW1wKSA+IGZyZXNobmVzc0xpZmV0aW1lKG1fcmVzcG9uc2UpOworfQorCitzdGF0aWMgaW5saW5l
IGJvb2wgc2hvdWxkQ2FjaGVTY2hlbWVJbmRlZmluaXRlbHkoY29uc3QgU3RyaW5nJiBzY2hlbWUp
Cit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKHNjaGVtZSwgImFwcGxld2ViZGF0YSIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNl
bmRpZgorI2lmIFVTRShTT1VQKQorICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShzY2hlbWUsICJyZXNvdXJjZSIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorICAg
IHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzY2hlbWUsICJkYXRhIik7Cit9
CisKK3N0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgQ2FjaGVkUmVzb3VyY2U6OmZyZXNobmVzc0xp
ZmV0aW1lKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKSBjb25zdAoreworICAgIGlm
ICghcmVzcG9uc2UudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKSB7CisgICAgICAgIFN0
cmluZyBwcm90b2NvbCA9IHJlc3BvbnNlLnVybCgpLnByb3RvY29sKCk7CisgICAgICAgIGlmICgh
c2hvdWxkQ2FjaGVTY2hlbWVJbmRlZmluaXRlbHkocHJvdG9jb2wpKSB7CisgICAgICAgICAgICAv
LyBEb24ndCBjYWNoZSBub24tSFRUUCBtYWluIHJlc291cmNlcyBzaW5jZSB3ZSBjYW4ndCBjaGVj
ayBmb3IgZnJlc2huZXNzLgorICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgY2Fj
aGUgc3VicmVzb3VyY2VzIGVpdGhlciwgYnV0IHdoZW4gd2UgdHJpZWQgdGhpcworICAgICAgICAg
ICAgLy8gaXQgY2F1c2VkIHBlcmZvcm1hbmNlIGFuZCBmbGFraW5lc3MgaXNzdWVzIGluIG91ciB0
ZXN0IGluZnJhc3RydWN0dXJlLgorICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBNYWluUmVzb3Vy
Y2UgfHwgU2NoZW1lUmVnaXN0cnk6OnNob3VsZEFsd2F5c1JldmFsaWRhdGVVUkxTY2hlbWUocHJv
dG9jb2wpKQorICAgICAgICAgICAgICAgIHJldHVybiAwdXM7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kczo6bWF4KCk7CisgICAgfQorCisgICAg
cmV0dXJuIGNvbXB1dGVGcmVzaG5lc3NMaWZldGltZUZvckhUVFBGYW1pbHkocmVzcG9uc2UsIG1f
cmVzcG9uc2VUaW1lc3RhbXApOworfQorCit2b2lkIENhY2hlZFJlc291cmNlOjpyZWRpcmVjdFJl
Y2VpdmVkKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UpCit7CisgICAgbV9yZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyID0gdHJ1ZTsK
KyAgICBpZiAocmVzcG9uc2UuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFJl
ZGlyZWN0IHRvIGRhdGE6IFVSTCB1c2VzIHRoZSBsYXN0IEhUVFAgcmVzcG9uc2UgZm9yIFNPUC4K
KyAgICBpZiAocmVzcG9uc2UuaXNIVFRQKCkgJiYgcmVxdWVzdC51cmwoKS5wcm90b2NvbElzRGF0
YSgpKQorICAgICAgICBtX3JlZGlyZWN0UmVzcG9uc2VGb3JTYW1lT3JpZ2luUG9saWN5Q2hlY2tz
ID0gcmVzcG9uc2U7CisKKyAgICB1cGRhdGVSZWRpcmVjdENoYWluU3RhdHVzKG1fcmVkaXJlY3RD
aGFpbkNhY2hlU3RhdHVzLCByZXNwb25zZSk7Cit9CisKK2NvbnN0IFJlc291cmNlUmVzcG9uc2Um
IENhY2hlZFJlc291cmNlOjpyZXNwb25zZUZvclNhbWVPcmlnaW5Qb2xpY3lDaGVja3MoKSBjb25z
dAoreworICAgIHJldHVybiBtX3JlZGlyZWN0UmVzcG9uc2VGb3JTYW1lT3JpZ2luUG9saWN5Q2hl
Y2tzLmlzTnVsbCgpID8gbV9yZXNwb25zZSA6IG1fcmVkaXJlY3RSZXNwb25zZUZvclNhbWVPcmln
aW5Qb2xpY3lDaGVja3M7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldFJlc3BvbnNlKGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIEFTU0VSVChtX3Jlc3BvbnNl
LnR5cGUoKSA9PSBSZXNvdXJjZVJlc3BvbnNlOjpUeXBlOjpEZWZhdWx0KTsKKyAgICBtX3Jlc3Bv
bnNlID0gcmVzcG9uc2U7CisgICAgbV9yZXNwb25zZS5zZXRSZWRpcmVjdGVkKG1fcmVkaXJlY3RD
aGFpbkNhY2hlU3RhdHVzLnN0YXR1cyAhPSBSZWRpcmVjdENoYWluQ2FjaGVTdGF0dXM6Ok5vUmVk
aXJlY3Rpb24pOworCisgICAgbV92YXJ5aW5nSGVhZGVyVmFsdWVzID0gY29sbGVjdFZhcnlpbmdS
ZXF1ZXN0SGVhZGVycyhtX3Jlc291cmNlUmVxdWVzdCwgbV9yZXNwb25zZSwgbV9zZXNzaW9uSUQp
OworfQorCit2b2lkIENhY2hlZFJlc291cmNlOjpyZXNwb25zZVJlY2VpdmVkKGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIHNldFJlc3BvbnNlKHJlc3BvbnNlKTsKKyAg
ICBtX3Jlc3BvbnNlVGltZXN0YW1wID0gc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCk7
CisgICAgU3RyaW5nIGVuY29kaW5nID0gcmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpOworICAg
IGlmICghZW5jb2RpbmcuaXNOdWxsKCkpCisgICAgICAgIHNldEVuY29kaW5nKGVuY29kaW5nKTsK
K30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6Y2xlYXJMb2FkZXIoKQoreworICAgIEFTU0VSVCht
X2xvYWRlcik7CisgICAgbV9pZGVudGlmaWVyRm9yTG9hZFdpdGhvdXRSZXNvdXJjZUxvYWRlciA9
IG1fbG9hZGVyLT5pZGVudGlmaWVyKCk7CisgICAgbV9sb2FkZXIgPSBudWxscHRyOworICAgIGRl
bGV0ZUlmUG9zc2libGUoKTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6YWRkQ2xpZW50KENh
Y2hlZFJlc291cmNlQ2xpZW50KiBjbGllbnQpCit7CisgICAgaWYgKGFkZENsaWVudFRvU2V0KGNs
aWVudCkpCisgICAgICAgIGRpZEFkZENsaWVudChjbGllbnQpOworfQorCit2b2lkIENhY2hlZFJl
c291cmNlOjpkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCkKK3sKKyAg
ICBpZiAobV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9k
ZWNvZGVkRGF0YURlbGV0aW9uVGltZXIuc3RvcCgpOworCisgICAgaWYgKG1fY2xpZW50c0F3YWl0
aW5nQ2FsbGJhY2sucmVtb3ZlKGNsaWVudCkpCisgICAgICAgIG1fY2xpZW50cy5hZGQoY2xpZW50
KTsKKyAgICBpZiAoIWlzTG9hZGluZygpICYmICFzdGlsbE5lZWRzTG9hZCgpKQorICAgICAgICBj
bGllbnQtPm5vdGlmeUZpbmlzaGVkKHRoaXMpOworfQorCitib29sIENhY2hlZFJlc291cmNlOjph
ZGRDbGllbnRUb1NldChDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50KQoreworICAgIGlmICht
X3ByZWxvYWRSZXN1bHQgPT0gUHJlbG9hZE5vdFJlZmVyZW5jZWQpIHsKKyAgICAgICAgaWYgKGlz
TG9hZGVkKCkpCisgICAgICAgICAgICBtX3ByZWxvYWRSZXN1bHQgPSBQcmVsb2FkUmVmZXJlbmNl
ZFdoaWxlQ29tcGxldGU7CisgICAgICAgIGVsc2UgaWYgKG1fcmVxdWVzdGVkRnJvbU5ldHdvcmtp
bmdMYXllcikKKyAgICAgICAgICAgIG1fcHJlbG9hZFJlc3VsdCA9IFByZWxvYWRSZWZlcmVuY2Vk
V2hpbGVMb2FkaW5nOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3ByZWxvYWRSZXN1bHQg
PSBQcmVsb2FkUmVmZXJlbmNlZDsKKyAgICB9CisgICAgaWYgKGFsbG93c0NhY2hpbmcoKSAmJiAh
aGFzQ2xpZW50cygpICYmIGluQ2FjaGUoKSkKKyAgICAgICAgTWVtb3J5Q2FjaGU6OnNpbmdsZXRv
bigpLmFkZFRvTGl2ZVJlc291cmNlc1NpemUoKnRoaXMpOworCisgICAgaWYgKChtX3R5cGUgPT0g
UmF3UmVzb3VyY2UgfHwgbV90eXBlID09IE1haW5SZXNvdXJjZSkgJiYgIW1fcmVzcG9uc2UuaXNO
dWxsKCkgJiYgIW1fcHJveHlSZXNvdXJjZSkgeworICAgICAgICAvLyBDZXJ0YWluIHJlc291cmNl
cyAoZXNwZWNpYWxseSBYSFJzIGFuZCBtYWluIHJlc291cmNlcykgZG8gY3JhenkgdGhpbmdzIGlm
IGFuIGFzeW5jaHJvbm91cyBsb2FkIHJldHVybnMKKyAgICAgICAgLy8gc3luY2hyb25vdXNseSAo
ZS5nLiwgc2NyaXB0cyBtYXkgbm90IGhhdmUgc2V0IGFsbCB0aGUgc3RhdGUgdGhleSBuZWVkIHRv
IGhhbmRsZSB0aGUgbG9hZCkuCisgICAgICAgIC8vIFRoZXJlZm9yZSwgcmF0aGVyIHRoYW4gaW1t
ZWRpYXRlbHkgc2VuZGluZyBjYWxsYmFja3Mgb24gYSBjYWNoZSBoaXQgbGlrZSBvdGhlciBDYWNo
ZWRSZXNvdXJjZXMsCisgICAgICAgIC8vIHdlIHNjaGVkdWxlIHRoZSBjYWxsYmFja3MgYW5kIGVu
c3VyZSB3ZSBuZXZlciBmaW5pc2ggc3luY2hyb25vdXNseS4KKyAgICAgICAgQVNTRVJUKCFtX2Ns
aWVudHNBd2FpdGluZ0NhbGxiYWNrLmNvbnRhaW5zKGNsaWVudCkpOworICAgICAgICBtX2NsaWVu
dHNBd2FpdGluZ0NhbGxiYWNrLmFkZChjbGllbnQsIHN0ZDo6bWFrZV91bmlxdWU8Q2FsbGJhY2s+
KCp0aGlzLCAqY2xpZW50KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBt
X2NsaWVudHMuYWRkKGNsaWVudCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ2FjaGVk
UmVzb3VyY2U6OnJlbW92ZUNsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50KQorewor
ICAgIGF1dG8gY2FsbGJhY2sgPSBtX2NsaWVudHNBd2FpdGluZ0NhbGxiYWNrLnRha2UoY2xpZW50
KTsKKyAgICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAgQVNTRVJUKCFtX2NsaWVudHMuY29udGFp
bnMoY2xpZW50KSk7CisgICAgICAgIGNhbGxiYWNrLT5jYW5jZWwoKTsKKyAgICAgICAgY2FsbGJh
Y2sgPSBudWxscHRyOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChtX2NsaWVudHMuY29u
dGFpbnMoY2xpZW50KSk7CisgICAgICAgIG1fY2xpZW50cy5yZW1vdmUoY2xpZW50KTsKKyAgICAg
ICAgZGlkUmVtb3ZlQ2xpZW50KGNsaWVudCk7CisgICAgfQorCisgICAgaWYgKGRlbGV0ZUlmUG9z
c2libGUoKSkgeworICAgICAgICAvLyBgdGhpc2Agb2JqZWN0IGlzIGRlYWQgaGVyZS4KKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChoYXNDbGllbnRzKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8mIG1lbW9yeUNhY2hlID0gTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpOwor
ICAgIGlmIChhbGxvd3NDYWNoaW5nKCkgJiYgaW5DYWNoZSgpKSB7CisgICAgICAgIG1lbW9yeUNh
Y2hlLnJlbW92ZUZyb21MaXZlUmVzb3VyY2VzU2l6ZSgqdGhpcyk7CisgICAgICAgIG1lbW9yeUNh
Y2hlLnJlbW92ZUZyb21MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QoKnRoaXMpOworICAgIH0KKyAg
ICBpZiAoIW1fc3dpdGNoaW5nQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSkKKyAgICAgICAg
YWxsQ2xpZW50c1JlbW92ZWQoKTsKKyAgICBkZXN0cm95RGVjb2RlZERhdGFJZk5lZWRlZCgpOwor
CisgICAgaWYgKCFhbGxvd3NDYWNoaW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChy
ZXNwb25zZSgpLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgpICYmIHVybCgpLnByb3RvY29s
SXMoImh0dHBzIikpIHsKKyAgICAgICAgLy8gUkZDMjYxNiAxNC45LjI6CisgICAgICAgIC8vICJu
by1zdG9yZTogLi4uIE1VU1QgbWFrZSBhIGJlc3QtZWZmb3J0IGF0dGVtcHQgdG8gcmVtb3ZlIHRo
ZSBpbmZvcm1hdGlvbiBmcm9tIHZvbGF0aWxlIHN0b3JhZ2UgYXMgcHJvbXB0bHkgYXMgcG9zc2li
bGUiCisgICAgICAgIC8vICIuLi4gSGlzdG9yeSBidWZmZXJzIE1BWSBzdG9yZSBzdWNoIHJlc3Bv
bnNlcyBhcyBwYXJ0IG9mIHRoZWlyIG5vcm1hbCBvcGVyYXRpb24uIgorICAgICAgICAvLyBXZSBh
bGxvdyBub24tc2VjdXJlIGNvbnRlbnQgdG8gYmUgcmV1c2VkIGluIGhpc3RvcnksIGJ1dCB3ZSBk
byBub3QgYWxsb3cgc2VjdXJlIGNvbnRlbnQgdG8gYmUgcmV1c2VkLgorICAgICAgICBtZW1vcnlD
YWNoZS5yZW1vdmUoKnRoaXMpOworICAgIH0KKyAgICBtZW1vcnlDYWNoZS5wcnVuZVNvb24oKTsK
K30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWVkZWQoKQor
eworICAgIGlmICghbV9kZWNvZGVkU2l6ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghTWVt
b3J5Q2FjaGU6OnNpbmdsZXRvbigpLmRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwoKS5j
b3VudCgpKQorICAgICAgICByZXR1cm47CisgICAgbV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXIu
cmVzdGFydCgpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlOjpkZWNvZGVkRGF0YURlbGV0aW9u
VGltZXJGaXJlZCgpCit7CisgICAgZGVzdHJveURlY29kZWREYXRhKCk7Cit9CisKK2Jvb2wgQ2Fj
aGVkUmVzb3VyY2U6OmRlbGV0ZUlmUG9zc2libGUoKQoreworICAgIGlmIChjYW5EZWxldGUoKSkg
eworICAgICAgICBpZiAoIWluQ2FjaGUoKSkgeworICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3aWxsRGVzdHJveUNhY2hlZFJlc291cmNlKCp0aGlzKTsKKyAgICAgICAgICAg
IGRlbGV0ZSB0aGlzOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKG1fZGF0YSkKKyAgICAgICAgICAgIG1fZGF0YS0+aGludE1lbW9yeU5vdE5lZWRlZFNv
b24oKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENhY2hlZFJlc291cmNl
OjpzZXREZWNvZGVkU2l6ZSh1bnNpZ25lZCBzaXplKQoreworICAgIGlmIChzaXplID09IG1fZGVj
b2RlZFNpemUpCisgICAgICAgIHJldHVybjsKKworICAgIGludCBkZWx0YSA9IHNpemUgLSBtX2Rl
Y29kZWRTaXplOworCisgICAgLy8gVGhlIG9iamVjdCBtdXN0IGJlIG1vdmVkIHRvIGEgZGlmZmVy
ZW50IHF1ZXVlLCBzaW5jZSBpdHMgc2l6ZSBoYXMgYmVlbiBjaGFuZ2VkLgorICAgIC8vIFJlbW92
ZSBiZWZvcmUgdXBkYXRpbmcgbV9kZWNvZGVkU2l6ZSwgc28gd2UgZmluZCB0aGUgcmVzb3VyY2Ug
aW4gdGhlIGNvcnJlY3QgTFJVIGxpc3QuCisgICAgaWYgKGFsbG93c0NhY2hpbmcoKSAmJiBpbkNh
Y2hlKCkpCisgICAgICAgIE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmVGcm9tTFJVTGlz
dCgqdGhpcyk7CisgICAgCisgICAgbV9kZWNvZGVkU2l6ZSA9IHNpemU7CisgICAKKyAgICBpZiAo
YWxsb3dzQ2FjaGluZygpICYmIGluQ2FjaGUoKSkgeworICAgICAgICBhdXRvJiBtZW1vcnlDYWNo
ZSA9IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKTsKKyAgICAgICAgLy8gTm93IGluc2VydCBpbnRv
IHRoZSBuZXcgTFJVIGxpc3QuCisgICAgICAgIG1lbW9yeUNhY2hlLmluc2VydEluTFJVTGlzdCgq
dGhpcyk7CisgICAgICAgIAorICAgICAgICAvLyBJbnNlcnQgaW50byBvciByZW1vdmUgZnJvbSB0
aGUgbGl2ZSBkZWNvZGVkIGxpc3QgaWYgbmVjZXNzYXJ5LgorICAgICAgICAvLyBXaGVuIGluc2Vy
dGluZyBpbnRvIHRoZSBMaXZlRGVjb2RlZFJlc291cmNlc0xpc3QgaXQgaXMgcG9zc2libGUKKyAg
ICAgICAgLy8gdGhhdCB0aGUgbV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWUgaXMgc3RpbGwgemVybyBv
ciBzbWFsbGVyIHRoYW4KKyAgICAgICAgLy8gdGhlIG1fbGFzdERlY29kZWRBY2Nlc3NUaW1lIG9m
IHRoZSBjdXJyZW50IGxpc3QgaGVhZC4gVGhpcyBpcyBhCisgICAgICAgIC8vIHZpb2xhdGlvbiBv
ZiB0aGUgaW52YXJpYW50IHRoYXQgdGhlIGxpc3QgaXMgdG8gYmUga2VwdCBzb3J0ZWQKKyAgICAg
ICAgLy8gYnkgYWNjZXNzIHRpbWUuIFRoZSB3ZWFrZW5pbmcgb2YgdGhlIGludmFyaWFudCBkb2Vz
IG5vdCBwb3NlCisgICAgICAgIC8vIGEgcHJvYmxlbS4gRm9yIG1vcmUgZGV0YWlscyBwbGVhc2Ug
c2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAyMDkKKyAgICAg
ICAgYm9vbCBpbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCA9IG1lbW9yeUNhY2hlLmluTGl2ZURl
Y29kZWRSZXNvdXJjZXNMaXN0KCp0aGlzKTsKKyAgICAgICAgaWYgKG1fZGVjb2RlZFNpemUgJiYg
IWluTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0ICYmIGhhc0NsaWVudHMoKSkKKyAgICAgICAgICAg
IG1lbW9yeUNhY2hlLmluc2VydEluTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KCp0aGlzKTsKKyAg
ICAgICAgZWxzZSBpZiAoIW1fZGVjb2RlZFNpemUgJiYgaW5MaXZlRGVjb2RlZFJlc291cmNlc0xp
c3QpCisgICAgICAgICAgICBtZW1vcnlDYWNoZS5yZW1vdmVGcm9tTGl2ZURlY29kZWRSZXNvdXJj
ZXNMaXN0KCp0aGlzKTsKKworICAgICAgICAvLyBVcGRhdGUgdGhlIGNhY2hlJ3Mgc2l6ZSB0b3Rh
bHMuCisgICAgICAgIG1lbW9yeUNhY2hlLmFkanVzdFNpemUoaGFzQ2xpZW50cygpLCBkZWx0YSk7
CisgICAgfQorfQorCit2b2lkIENhY2hlZFJlc291cmNlOjpzZXRFbmNvZGVkU2l6ZSh1bnNpZ25l
ZCBzaXplKQoreworICAgIGlmIChzaXplID09IG1fZW5jb2RlZFNpemUpCisgICAgICAgIHJldHVy
bjsKKworICAgIGludCBkZWx0YSA9IHNpemUgLSBtX2VuY29kZWRTaXplOworCisgICAgLy8gVGhl
IG9iamVjdCBtdXN0IGJlIG1vdmVkIHRvIGEgZGlmZmVyZW50IHF1ZXVlLCBzaW5jZSBpdHMgc2l6
ZSBoYXMgYmVlbiBjaGFuZ2VkLgorICAgIC8vIFJlbW92ZSBiZWZvcmUgdXBkYXRpbmcgbV9lbmNv
ZGVkU2l6ZSwgc28gd2UgZmluZCB0aGUgcmVzb3VyY2UgaW4gdGhlIGNvcnJlY3QgTFJVIGxpc3Qu
CisgICAgaWYgKGFsbG93c0NhY2hpbmcoKSAmJiBpbkNhY2hlKCkpCisgICAgICAgIE1lbW9yeUNh
Y2hlOjpzaW5nbGV0b24oKS5yZW1vdmVGcm9tTFJVTGlzdCgqdGhpcyk7CisKKyAgICBtX2VuY29k
ZWRTaXplID0gc2l6ZTsKKworICAgIGlmIChhbGxvd3NDYWNoaW5nKCkgJiYgaW5DYWNoZSgpKSB7
CisgICAgICAgIGF1dG8mIG1lbW9yeUNhY2hlID0gTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpOwor
ICAgICAgICBtZW1vcnlDYWNoZS5pbnNlcnRJbkxSVUxpc3QoKnRoaXMpOworICAgICAgICBtZW1v
cnlDYWNoZS5hZGp1c3RTaXplKGhhc0NsaWVudHMoKSwgZGVsdGEpOworICAgIH0KK30KKwordm9p
ZCBDYWNoZWRSZXNvdXJjZTo6ZGlkQWNjZXNzRGVjb2RlZERhdGEoZG91YmxlIHRpbWVTdGFtcCkK
K3sKKyAgICBtX2xhc3REZWNvZGVkQWNjZXNzVGltZSA9IHRpbWVTdGFtcDsKKyAgICAKKyAgICBp
ZiAoYWxsb3dzQ2FjaGluZygpICYmIGluQ2FjaGUoKSkgeworICAgICAgICBhdXRvJiBtZW1vcnlD
YWNoZSA9IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKTsKKyAgICAgICAgaWYgKG1lbW9yeUNhY2hl
LmluTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KCp0aGlzKSkgeworICAgICAgICAgICAgbWVtb3J5
Q2FjaGUucmVtb3ZlRnJvbUxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCgqdGhpcyk7CisgICAgICAg
ICAgICBtZW1vcnlDYWNoZS5pbnNlcnRJbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCgqdGhpcyk7
CisgICAgICAgIH0KKyAgICAgICAgbWVtb3J5Q2FjaGUucHJ1bmVTb29uKCk7CisgICAgfQorfQor
ICAgIAordm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0UmVzb3VyY2VUb1JldmFsaWRhdGUoQ2FjaGVk
UmVzb3VyY2UqIHJlc291cmNlKSAKK3sgCisgICAgQVNTRVJUKHJlc291cmNlKTsKKyAgICBBU1NF
UlQoIW1fcmVzb3VyY2VUb1JldmFsaWRhdGUpOworICAgIEFTU0VSVChyZXNvdXJjZSAhPSB0aGlz
KTsKKyAgICBBU1NFUlQobV9oYW5kbGVzVG9SZXZhbGlkYXRlLmlzRW1wdHkoKSk7CisgICAgQVNT
RVJUKHJlc291cmNlLT50eXBlKCkgPT0gdHlwZSgpKTsKKyAgICBBU1NFUlQoIXJlc291cmNlLT5t
X3Byb3h5UmVzb3VyY2UpOworCisgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJlc291
cmNlICVwIHNldFJlc291cmNlVG9SZXZhbGlkYXRlICVwIiwgdGhpcywgcmVzb3VyY2UpOworCisg
ICAgcmVzb3VyY2UtPm1fcHJveHlSZXNvdXJjZSA9IHRoaXM7CisgICAgbV9yZXNvdXJjZVRvUmV2
YWxpZGF0ZSA9IHJlc291cmNlOworfQorCit2b2lkIENhY2hlZFJlc291cmNlOjpjbGVhclJlc291
cmNlVG9SZXZhbGlkYXRlKCkgCit7CisgICAgQVNTRVJUKG1fcmVzb3VyY2VUb1JldmFsaWRhdGUp
OworICAgIEFTU0VSVChtX3Jlc291cmNlVG9SZXZhbGlkYXRlLT5tX3Byb3h5UmVzb3VyY2UgPT0g
dGhpcyk7CisKKyAgICBpZiAobV9zd2l0Y2hpbmdDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNl
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jlc291cmNlVG9SZXZhbGlkYXRlLT5tX3Byb3h5
UmVzb3VyY2UgPSBudWxscHRyOworICAgIG1fcmVzb3VyY2VUb1JldmFsaWRhdGUtPmRlbGV0ZUlm
UG9zc2libGUoKTsKKworICAgIG1faGFuZGxlc1RvUmV2YWxpZGF0ZS5jbGVhcigpOworICAgIG1f
cmVzb3VyY2VUb1JldmFsaWRhdGUgPSBudWxscHRyOworICAgIGRlbGV0ZUlmUG9zc2libGUoKTsK
K30KKyAgICAKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OnN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVk
UmVzb3VyY2UoKQoreworICAgIEFTU0VSVChtX3Jlc291cmNlVG9SZXZhbGlkYXRlKTsKKyAgICBB
U1NFUlQobV9yZXNvdXJjZVRvUmV2YWxpZGF0ZS0+aW5DYWNoZSgpKTsKKyAgICBBU1NFUlQoIWlu
Q2FjaGUoKSk7CisKKyAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2UgJXAg
c3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSAlcCIsIHRoaXMsIG1fcmVzb3VyY2VU
b1JldmFsaWRhdGUpOworCisgICAgbV9zd2l0Y2hpbmdDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291
cmNlID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8mIGhhbmRsZSA6IG1faGFuZGxlc1RvUmV2YWxpZGF0
ZSkgeworICAgICAgICBoYW5kbGUtPm1fcmVzb3VyY2UgPSBtX3Jlc291cmNlVG9SZXZhbGlkYXRl
OworICAgICAgICBtX3Jlc291cmNlVG9SZXZhbGlkYXRlLT5yZWdpc3RlckhhbmRsZShoYW5kbGUp
OworICAgICAgICAtLW1faGFuZGxlQ291bnQ7CisgICAgfQorICAgIEFTU0VSVCghbV9oYW5kbGVD
b3VudCk7CisgICAgbV9oYW5kbGVzVG9SZXZhbGlkYXRlLmNsZWFyKCk7CisKKyAgICBWZWN0b3I8
Q2FjaGVkUmVzb3VyY2VDbGllbnQqPiBjbGllbnRzVG9Nb3ZlOworICAgIGZvciAoYXV0byYgZW50
cnkgOiBtX2NsaWVudHMpIHsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCA9
IGVudHJ5LmtleTsKKyAgICAgICAgdW5zaWduZWQgY291bnQgPSBlbnRyeS52YWx1ZTsKKyAgICAg
ICAgd2hpbGUgKGNvdW50KSB7CisgICAgICAgICAgICBjbGllbnRzVG9Nb3ZlLmFwcGVuZChjbGll
bnQpOworICAgICAgICAgICAgLS1jb3VudDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAo
YXV0byYgY2xpZW50IDogY2xpZW50c1RvTW92ZSkKKyAgICAgICAgcmVtb3ZlQ2xpZW50KGNsaWVu
dCk7CisgICAgQVNTRVJUKG1fY2xpZW50cy5pc0VtcHR5KCkpOworCisgICAgZm9yIChhdXRvJiBj
bGllbnQgOiBjbGllbnRzVG9Nb3ZlKQorICAgICAgICBtX3Jlc291cmNlVG9SZXZhbGlkYXRlLT5h
ZGRDbGllbnRUb1NldChjbGllbnQpOworICAgIGZvciAoYXV0byYgY2xpZW50IDogY2xpZW50c1Rv
TW92ZSkgeworICAgICAgICAvLyBDYWxsaW5nIGRpZEFkZENsaWVudCBtYXkgZG8gYW55dGhpbmcs
IGluY2x1ZGluZyB0cnlpbmcgdG8gY2FuY2VsIHJldmFsaWRhdGlvbi4KKyAgICAgICAgLy8gQXNz
ZXJ0IHRoYXQgaXQgZGlkbid0IHN1Y2NlZWQuCisgICAgICAgIEFTU0VSVChtX3Jlc291cmNlVG9S
ZXZhbGlkYXRlKTsKKyAgICAgICAgLy8gQ2FsbGluZyBkaWRBZGRDbGllbnQgZm9yIGEgY2xpZW50
IG1heSBlbmQgdXAgcmVtb3ZpbmcgYW5vdGhlciBjbGllbnQuIEluIHRoYXQgY2FzZSBpdCB3b24n
dCBiZSBpbiB0aGUgc2V0IGFueW1vcmUuCisgICAgICAgIGlmIChtX3Jlc291cmNlVG9SZXZhbGlk
YXRlLT5tX2NsaWVudHMuY29udGFpbnMoY2xpZW50KSkKKyAgICAgICAgICAgIG1fcmVzb3VyY2VU
b1JldmFsaWRhdGUtPmRpZEFkZENsaWVudChjbGllbnQpOworICAgIH0KKyAgICBtX3N3aXRjaGlu
Z0NsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UgPSBmYWxzZTsKK30KKwordm9pZCBDYWNoZWRS
ZXNvdXJjZTo6dXBkYXRlUmVzcG9uc2VBZnRlclJldmFsaWRhdGlvbihjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiB2YWxpZGF0aW5nUmVzcG9uc2UpCit7CisgICAgbV9yZXNwb25zZVRpbWVzdGFtcCA9
IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOworCisgICAgdXBkYXRlUmVzcG9uc2VI
ZWFkZXJzQWZ0ZXJSZXZhbGlkYXRpb24obV9yZXNwb25zZSwgdmFsaWRhdGluZ1Jlc3BvbnNlKTsK
K30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6cmVnaXN0ZXJIYW5kbGUoQ2FjaGVkUmVzb3VyY2VI
YW5kbGVCYXNlKiBoKQoreworICAgICsrbV9oYW5kbGVDb3VudDsKKyAgICBpZiAobV9yZXNvdXJj
ZVRvUmV2YWxpZGF0ZSkKKyAgICAgICAgbV9oYW5kbGVzVG9SZXZhbGlkYXRlLmFkZChoKTsKK30K
Kwordm9pZCBDYWNoZWRSZXNvdXJjZTo6dW5yZWdpc3RlckhhbmRsZShDYWNoZWRSZXNvdXJjZUhh
bmRsZUJhc2UqIGgpCit7CisgICAgQVNTRVJUKG1faGFuZGxlQ291bnQgPiAwKTsKKyAgICAtLW1f
aGFuZGxlQ291bnQ7CisKKyAgICBpZiAobV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSkKKyAgICAgICAg
IG1faGFuZGxlc1RvUmV2YWxpZGF0ZS5yZW1vdmUoaCk7CisKKyAgICBpZiAoIW1faGFuZGxlQ291
bnQpCisgICAgICAgIGRlbGV0ZUlmUG9zc2libGUoKTsKK30KKworYm9vbCBDYWNoZWRSZXNvdXJj
ZTo6Y2FuVXNlQ2FjaGVWYWxpZGF0b3IoKSBjb25zdAoreworICAgIGlmIChtX2xvYWRpbmcgfHwg
ZXJyb3JPY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9yZXNw
b25zZS5jYWNoZUNvbnRyb2xDb250YWluc05vU3RvcmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBtX3Jlc3BvbnNlLmhhc0NhY2hlVmFsaWRhdG9yRmllbGRzKCk7Cit9CisK
K0NhY2hlZFJlc291cmNlOjpSZXZhbGlkYXRpb25EZWNpc2lvbiBDYWNoZWRSZXNvdXJjZTo6bWFr
ZVJldmFsaWRhdGlvbkRlY2lzaW9uKENhY2hlUG9saWN5IGNhY2hlUG9saWN5KSBjb25zdAoreyAg
ICAKKyAgICBzd2l0Y2ggKGNhY2hlUG9saWN5KSB7CisgICAgY2FzZSBDYWNoZVBvbGljeUhpc3Rv
cnlCdWZmZXI6CisgICAgICAgIHJldHVybiBSZXZhbGlkYXRpb25EZWNpc2lvbjo6Tm87CisKKyAg
ICBjYXNlIENhY2hlUG9saWN5UmVsb2FkOgorICAgIGNhc2UgQ2FjaGVQb2xpY3lSZXZhbGlkYXRl
OgorICAgICAgICByZXR1cm4gUmV2YWxpZGF0aW9uRGVjaXNpb246Olllc0R1ZVRvQ2FjaGVQb2xp
Y3k7CisKKyAgICBjYXNlIENhY2hlUG9saWN5VmVyaWZ5OgorICAgICAgICBpZiAobV9yZXNwb25z
ZS5jYWNoZUNvbnRyb2xDb250YWluc05vQ2FjaGUoKSkKKyAgICAgICAgICAgIHJldHVybiBSZXZh
bGlkYXRpb25EZWNpc2lvbjo6WWVzRHVlVG9Ob0NhY2hlOworICAgICAgICAvLyBGSVhNRTogQ2Fj
aGUtQ29udHJvbDpuby1zdG9yZSBzaG91bGQgcHJldmVudCBzdG9yaW5nLCBub3QgcmV1c2UuCisg
ICAgICAgIGlmIChtX3Jlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIFJldmFsaWRhdGlvbkRlY2lzaW9uOjpZZXNEdWVUb05vU3RvcmU7CisK
KyAgICAgICAgaWYgKGlzRXhwaXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIFJldmFsaWRhdGlv
bkRlY2lzaW9uOjpZZXNEdWVUb0V4cGlyZWQ7CisKKyAgICAgICAgcmV0dXJuIFJldmFsaWRhdGlv
bkRlY2lzaW9uOjpObzsKKyAgICB9OworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBSZXZhbGlkYXRpb25EZWNpc2lvbjo6Tm87Cit9CisKK2Jvb2wgQ2FjaGVkUmVzb3VyY2U6
OnJlZGlyZWN0Q2hhaW5BbGxvd3NSZXVzZShSZXVzZUV4cGlyZWRSZWRpcmVjdGlvbk9yTm90IHJl
dXNlRXhwaXJlZFJlZGlyZWN0aW9uKSBjb25zdAoreworICAgIHJldHVybiBXZWJDb3JlOjpyZWRp
cmVjdENoYWluQWxsb3dzUmV1c2UobV9yZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMsIHJldXNlRXhw
aXJlZFJlZGlyZWN0aW9uKTsKK30KKworYm9vbCBDYWNoZWRSZXNvdXJjZTo6dmFyeUhlYWRlclZh
bHVlc01hdGNoKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgQ2FjaGVkUmVz
b3VyY2VMb2FkZXImIGNhY2hlZFJlc291cmNlTG9hZGVyKQoreworICAgIGlmIChtX3ZhcnlpbmdI
ZWFkZXJWYWx1ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFJlc291
cmNlUmVxdWVzdCByZXF1ZXN0V2l0aEZ1bGxIZWFkZXJzKHJlcXVlc3QpOworICAgIGFkZEFkZGl0
aW9uYWxSZXF1ZXN0SGVhZGVyc1RvUmVxdWVzdChyZXF1ZXN0V2l0aEZ1bGxIZWFkZXJzLCBjYWNo
ZWRSZXNvdXJjZUxvYWRlciwgKnRoaXMpOworCisgICAgcmV0dXJuIHZlcmlmeVZhcnlpbmdSZXF1
ZXN0SGVhZGVycyhtX3ZhcnlpbmdIZWFkZXJWYWx1ZXMsIHJlcXVlc3RXaXRoRnVsbEhlYWRlcnMs
IG1fc2Vzc2lvbklEKTsKK30KKwordW5zaWduZWQgQ2FjaGVkUmVzb3VyY2U6Om92ZXJoZWFkU2l6
ZSgpIGNvbnN0Cit7CisgICAgc3RhdGljIGNvbnN0IGludCBrQXZlcmFnZUNsaWVudHNIYXNoTWFw
U2l6ZSA9IDM4NDsKKyAgICByZXR1cm4gc2l6ZW9mKENhY2hlZFJlc291cmNlKSArIG1fcmVzcG9u
c2UubWVtb3J5VXNhZ2UoKSArIGtBdmVyYWdlQ2xpZW50c0hhc2hNYXBTaXplICsgbV9yZXNvdXJj
ZVJlcXVlc3QudXJsKCkuc3RyaW5nKCkubGVuZ3RoKCkgKiAyOworfQorCitib29sIENhY2hlZFJl
c291cmNlOjphcmVBbGxDbGllbnRzWE1MSHR0cFJlcXVlc3RzKCkgY29uc3QKK3sKKyAgICBpZiAo
dHlwZSgpICE9IFJhd1Jlc291cmNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3Ig
KGF1dG8mIGNsaWVudCA6IG1fY2xpZW50cykgeworICAgICAgICBpZiAoIWNsaWVudC5rZXktPmlz
WE1MSHR0cFJlcXVlc3QoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldExvYWRQcmlvcml0eShj
b25zdCBPcHRpb25hbDxSZXNvdXJjZUxvYWRQcmlvcml0eT4mIGxvYWRQcmlvcml0eSkKK3sKKyAg
ICBpZiAobG9hZFByaW9yaXR5KQorICAgICAgICBtX2xvYWRQcmlvcml0eSA9IGxvYWRQcmlvcml0
eS52YWx1ZSgpOworICAgIGVsc2UKKyAgICAgICAgbV9sb2FkUHJpb3JpdHkgPSBkZWZhdWx0UHJp
b3JpdHlGb3JSZXNvdXJjZVR5cGUodHlwZSgpKTsKK30KKworaW5saW5lIENhY2hlZFJlc291cmNl
OjpDYWxsYmFjazo6Q2FsbGJhY2soQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlLCBDYWNoZWRSZXNv
dXJjZUNsaWVudCYgY2xpZW50KQorICAgIDogbV9yZXNvdXJjZShyZXNvdXJjZSkKKyAgICAsIG1f
Y2xpZW50KGNsaWVudCkKKyAgICAsIG1fdGltZXIoKnRoaXMsICZDYWxsYmFjazo6dGltZXJGaXJl
ZCkKK3sKKyAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKworaW5saW5lIHZvaWQgQ2Fj
aGVkUmVzb3VyY2U6OkNhbGxiYWNrOjpjYW5jZWwoKQoreworICAgIGlmIChtX3RpbWVyLmlzQWN0
aXZlKCkpCisgICAgICAgIG1fdGltZXIuc3RvcCgpOworfQorCit2b2lkIENhY2hlZFJlc291cmNl
OjpDYWxsYmFjazo6dGltZXJGaXJlZCgpCit7CisgICAgbV9yZXNvdXJjZS5kaWRBZGRDbGllbnQo
Jm1fY2xpZW50KTsKK30KKworI2lmIFVTRShGT1VOREFUSU9OKSB8fCBVU0UoU09VUCkKKwordm9p
ZCBDYWNoZWRSZXNvdXJjZTo6dHJ5UmVwbGFjZUVuY29kZWREYXRhKFNoYXJlZEJ1ZmZlciYgbmV3
QnVmZmVyKQoreworICAgIGlmICghbV9kYXRhKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
aWYgKCFtYXlUcnlSZXBsYWNlRW5jb2RlZERhdGEoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gV2UgaGF2ZSB0byBkbyB0aGUgbWVtY21wIGJlY2F1c2Ugd2UgY2FuJ3QgdGVsbCBpZiB0aGUg
cmVwbGFjZW1lbnQgZmlsZSBiYWNrZWQgZGF0YSBpcyBmb3IgdGhlCisgICAgLy8gc2FtZSByZXNv
dXJjZSBvciBpZiB3ZSBtYWRlIGEgc2Vjb25kIHJlcXVlc3Qgd2l0aCB0aGUgc2FtZSBVUkwgd2hp
Y2ggZ2F2ZSB1cyBhIGRpZmZlcmVudAorICAgIC8vIHJlc291cmNlLiBXZSBoYXZlIHNlZW4gdGhp
cyBoYXBwZW4gZm9yIGNhY2hlZCBQT1NUIHJlc291cmNlcy4KKyAgICBpZiAobV9kYXRhLT5zaXpl
KCkgIT0gbmV3QnVmZmVyLnNpemUoKSB8fCBtZW1jbXAobV9kYXRhLT5kYXRhKCksIG5ld0J1ZmZl
ci5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1f
ZGF0YS0+dHJ5UmVwbGFjZUNvbnRlbnRzV2l0aFBsYXRmb3JtQnVmZmVyKG5ld0J1ZmZlcikpCisg
ICAgICAgIGRpZFJlcGxhY2VTaGFyZWRCdWZmZXJDb250ZW50cygpOworfQorCisjZW5kaWYKKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNl
LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2UuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41NGI5NTdkMWJiM2M1NzlkNWY5OTdkYzlkODlkMzVhYjhhNTczM2E2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlLmgKQEAg
LTAsMCArMSw0MDAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtu
b2xsQG1waS1oZC5tcGcuZGUpCisgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8
bXVlbGxlckBrZGUub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChz
YW0ud2VpbmlnQGdtYWlsLmNvbSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyovCisKKyNpZm5kZWYgQ2FjaGVkUmVzb3VyY2VfaAorI2RlZmluZSBDYWNoZWRSZXNvdXJj
ZV9oCisKKyNpbmNsdWRlICJDYWNoZVBvbGljeS5oIgorI2luY2x1ZGUgIkNhY2hlVmFsaWRhdGlv
bi5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVy
cm9yLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCIKKyNpbmNsdWRlICJSZXNv
dXJjZUxvYWRlck9wdGlvbnMuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiU2Vzc2lvbklELmgiCisjaW5jbHVk
ZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVk
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3Rz
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1lbW9yeUNhY2hlOworY2xhc3Mg
Q2FjaGVkUmVzb3VyY2VDbGllbnQ7CitjbGFzcyBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2U7Citj
bGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKK2NsYXNzIEluc3BlY3RvclJlc291cmNlOworY2xh
c3MgU2VjdXJpdHlPcmlnaW47CitjbGFzcyBTaGFyZWRCdWZmZXI7CitjbGFzcyBTdWJyZXNvdXJj
ZUxvYWRlcjsKK2NsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7CisKKy8vIEEgcmVzb3VyY2UgdGhh
dCBpcyBoZWxkIGluIHRoZSBjYWNoZS4gQ2xhc3NlcyB3aG8gd2FudCB0byB1c2UgdGhpcyBvYmpl
Y3Qgc2hvdWxkIGRlcml2ZQorLy8gZnJvbSBDYWNoZWRSZXNvdXJjZUNsaWVudCwgdG8gZ2V0IHRo
ZSBmdW5jdGlvbiBjYWxscyBpbiBjYXNlIHRoZSByZXF1ZXN0ZWQgZGF0YSBoYXMgYXJyaXZlZC4K
Ky8vIFRoaXMgY2xhc3MgYWxzbyBkb2VzIHRoZSBhY3R1YWwgY29tbXVuaWNhdGlvbiB3aXRoIHRo
ZSBsb2FkZXIgdG8gb2J0YWluIHRoZSByZXNvdXJjZSBmcm9tIHRoZSBuZXR3b3JrLgorY2xhc3Mg
Q2FjaGVkUmVzb3VyY2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENhY2hlZFJlc291cmNl
KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgZnJpZW5kIGNsYXNzIE1lbW9yeUNhY2hl
OworICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JSZXNvdXJjZTsKKyAgICAKK3B1YmxpYzoKKyAg
ICBlbnVtIFR5cGUgeworICAgICAgICBNYWluUmVzb3VyY2UsCisgICAgICAgIEltYWdlUmVzb3Vy
Y2UsCisgICAgICAgIENTU1N0eWxlU2hlZXQsCisgICAgICAgIFNjcmlwdCwKKyAgICAgICAgRm9u
dFJlc291cmNlLAorI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgICAgIFNWR0ZvbnRSZXNvdXJj
ZSwKKyNlbmRpZgorICAgICAgICBNZWRpYVJlc291cmNlLAorICAgICAgICBSYXdSZXNvdXJjZSwK
KyAgICAgICAgU1ZHRG9jdW1lbnRSZXNvdXJjZQorI2lmIEVOQUJMRShYU0xUKQorICAgICAgICAs
IFhTTFN0eWxlU2hlZXQKKyNlbmRpZgorI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQorICAgICAg
ICAsIExpbmtQcmVmZXRjaAorICAgICAgICAsIExpbmtTdWJyZXNvdXJjZQorI2VuZGlmCisjaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQorICAgICAgICAsIFRleHRUcmFja1Jlc291cmNlCisjZW5kaWYK
KyAgICB9OworCisgICAgZW51bSBTdGF0dXMgeworICAgICAgICBVbmtub3duLCAgICAgIC8vIGxl
dCBjYWNoZSBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIGl0CisgICAgICAgIFBlbmRpbmcsICAgICAg
Ly8gb25seSBwYXJ0aWFsbHkgbG9hZGVkCisgICAgICAgIENhY2hlZCwgICAgICAgLy8gcmVndWxh
ciBjYXNlCisgICAgICAgIExvYWRFcnJvciwKKyAgICAgICAgRGVjb2RlRXJyb3IKKyAgICB9Owor
CisgICAgQ2FjaGVkUmVzb3VyY2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgVHlwZSwgU2Vzc2lv
bklEKTsKKyAgICB2aXJ0dWFsIH5DYWNoZWRSZXNvdXJjZSgpOworCisgICAgdmlydHVhbCB2b2lk
IGxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMm
KTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmKSB7IH0KKyAg
ICB2aXJ0dWFsIFN0cmluZyBlbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9Cisg
ICAgdmlydHVhbCBjb25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKiB0ZXh0UmVzb3VyY2VEZWNvZGVy
KCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgdm9pZCBhZGREYXRhQnVm
ZmVyKFNoYXJlZEJ1ZmZlciYpOworICAgIHZpcnR1YWwgdm9pZCBhZGREYXRhKGNvbnN0IGNoYXIq
IGRhdGEsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaExvYWRpbmco
U2hhcmVkQnVmZmVyKik7CisgICAgdmlydHVhbCB2b2lkIGVycm9yKENhY2hlZFJlc291cmNlOjpT
dGF0dXMpOworCisgICAgdm9pZCBzZXRSZXNvdXJjZUVycm9yKGNvbnN0IFJlc291cmNlRXJyb3Im
IGVycm9yKSB7IG1fZXJyb3IgPSBlcnJvcjsgfQorICAgIGNvbnN0IFJlc291cmNlRXJyb3ImIHJl
c291cmNlRXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yOyB9CisKKyAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkSWdub3JlSFRUUFN0YXR1c0NvZGVFcnJvcnMoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorCisgICAgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QoKSB7IHJldHVybiBt
X3Jlc291cmNlUmVxdWVzdDsgfQorICAgIGNvbnN0IFVSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4g
bV9yZXNvdXJjZVJlcXVlc3QudXJsKCk7fQorI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcp
CisgICAgY29uc3QgU3RyaW5nJiBjYWNoZVBhcnRpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
b3VyY2VSZXF1ZXN0LmNhY2hlUGFydGl0aW9uKCk7IH0KKyNlbmRpZgorICAgIFNlc3Npb25JRCBz
ZXNzaW9uSUQoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25JRDsgfQorICAgIFR5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1fdHlwZSk7IH0KKyAgICAKKyAgICBS
ZXNvdXJjZUxvYWRQcmlvcml0eSBsb2FkUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiBtX2xvYWRQ
cmlvcml0eTsgfQorICAgIHZvaWQgc2V0TG9hZFByaW9yaXR5KGNvbnN0IE9wdGlvbmFsPFJlc291
cmNlTG9hZFByaW9yaXR5PiYpOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRDbGllbnQo
Q2FjaGVkUmVzb3VyY2VDbGllbnQqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUNs
aWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopOworICAgIGJvb2wgaGFzQ2xpZW50cygpIGNvbnN0
IHsgcmV0dXJuICFtX2NsaWVudHMuaXNFbXB0eSgpIHx8ICFtX2NsaWVudHNBd2FpdGluZ0NhbGxi
YWNrLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaGFzQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50
KiBjbGllbnQpIHsgcmV0dXJuIG1fY2xpZW50cy5jb250YWlucyhjbGllbnQpIHx8IG1fY2xpZW50
c0F3YWl0aW5nQ2FsbGJhY2suY29udGFpbnMoY2xpZW50KTsgfQorICAgIGJvb2wgZGVsZXRlSWZQ
b3NzaWJsZSgpOworCisgICAgZW51bSBQcmVsb2FkUmVzdWx0IHsKKyAgICAgICAgUHJlbG9hZE5v
dFJlZmVyZW5jZWQsCisgICAgICAgIFByZWxvYWRSZWZlcmVuY2VkLAorICAgICAgICBQcmVsb2Fk
UmVmZXJlbmNlZFdoaWxlTG9hZGluZywKKyAgICAgICAgUHJlbG9hZFJlZmVyZW5jZWRXaGlsZUNv
bXBsZXRlCisgICAgfTsKKyAgICBQcmVsb2FkUmVzdWx0IHByZWxvYWRSZXN1bHQoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxQcmVsb2FkUmVzdWx0PihtX3ByZWxvYWRSZXN1bHQpOyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kik7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZFJlbW92ZUNsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBhbGxDbGllbnRzUmVtb3ZlZCgpIHsgfQorICAgIHZvaWQgZGVz
dHJveURlY29kZWREYXRhSWZOZWVkZWQoKTsKKworICAgIHVuc2lnbmVkIGNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9jbGllbnRzLnNpemUoKTsgfQorCisgICAgU3RhdHVzIHN0YXR1cygpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PFN0YXR1cz4obV9zdGF0dXMpOyB9CisgICAgdm9pZCBzZXRT
dGF0dXMoU3RhdHVzIHN0YXR1cykgeyBtX3N0YXR1cyA9IHN0YXR1czsgfQorCisgICAgdW5zaWdu
ZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGVuY29kZWRTaXplKCkgKyBkZWNvZGVkU2l6ZSgpICsg
b3ZlcmhlYWRTaXplKCk7IH0KKyAgICB1bnNpZ25lZCBlbmNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZW5jb2RlZFNpemU7IH0KKyAgICB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGVjb2RlZFNpemU7IH0KKyAgICB1bnNpZ25lZCBvdmVyaGVhZFNpemUoKSBjb25z
dDsKKyAgICAKKyAgICBib29sIGlzTG9hZGVkKCkgY29uc3QgeyByZXR1cm4gIW1fbG9hZGluZzsg
fSAvLyBGSVhNRS4gTWV0aG9kIG5hbWUgaXMgaW5hY2N1cmF0ZS4gTG9hZGluZyBtaWdodCBub3Qg
aGF2ZSBzdGFydGVkIHlldC4KKworICAgIGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgeyByZXR1cm4g
bV9sb2FkaW5nOyB9CisgICAgdm9pZCBzZXRMb2FkaW5nKGJvb2wgYikgeyBtX2xvYWRpbmcgPSBi
OyB9CisgICAgdmlydHVhbCBib29sIHN0aWxsTmVlZHNMb2FkKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKworICAgIFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIoKSB7IHJldHVybiBtX2xvYWRl
ci5nZXQoKTsgfQorCisgICAgYm9vbCBhcmVBbGxDbGllbnRzWE1MSHR0cFJlcXVlc3RzKCkgY29u
c3Q7CisKKyAgICBib29sIGlzSW1hZ2UoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gSW1hZ2VS
ZXNvdXJjZTsgfQorICAgIC8vIEZJWE1FOiBDYWNoZWRSYXdSZXNvdXJjZSBjb3VsZCBiZSBhIG1h
aW4gcmVzb3VyY2UsIGFuIGF1ZGlvL3ZpZGVvIHJlc291cmNlLCBvciBhIHJhdyBYSFIvaWNvbiBy
ZXNvdXJjZS4KKyAgICBib29sIGlzTWFpbk9yTWVkaWFPclJhd1Jlc291cmNlKCkgY29uc3QgeyBy
ZXR1cm4gdHlwZSgpID09IE1haW5SZXNvdXJjZSB8fCB0eXBlKCkgPT0gTWVkaWFSZXNvdXJjZSB8
fCB0eXBlKCkgPT0gUmF3UmVzb3VyY2U7IH0KKyAgICBib29sIGlnbm9yZUZvclJlcXVlc3RDb3Vu
dCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9yZXNvdXJjZVJlcXVlc3QuaWdub3Jl
Rm9yUmVxdWVzdENvdW50KCkKKyAgICAgICAgICAgIHx8IHR5cGUoKSA9PSBNYWluUmVzb3VyY2UK
KyNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKKyAgICAgICAgICAgIHx8IHR5cGUoKSA9PSBMaW5r
UHJlZmV0Y2gKKyAgICAgICAgICAgIHx8IHR5cGUoKSA9PSBMaW5rU3VicmVzb3VyY2UKKyNlbmRp
ZgorICAgICAgICAgICAgfHwgdHlwZSgpID09IFJhd1Jlc291cmNlOworICAgIH0KKworICAgIHVu
c2lnbmVkIGFjY2Vzc0NvdW50KCkgY29uc3QgeyByZXR1cm4gbV9hY2Nlc3NDb3VudDsgfQorICAg
IHZvaWQgaW5jcmVhc2VBY2Nlc3NDb3VudCgpIHsgbV9hY2Nlc3NDb3VudCsrOyB9CisKKyAgICAv
LyBDb21wdXRlcyB0aGUgc3RhdHVzIG9mIGFuIG9iamVjdCBhZnRlciBsb2FkaW5nLiAgCisgICAg
Ly8gVXBkYXRlcyB0aGUgZXhwaXJlIGRhdGUgb24gdGhlIGNhY2hlIGVudHJ5IGZpbGUKKyAgICB2
b2lkIGZpbmlzaCgpOworCisgICAgYm9vbCBwYXNzZXNBY2Nlc3NDb250cm9sQ2hlY2soU2VjdXJp
dHlPcmlnaW4mKTsKKyAgICBib29sIHBhc3Nlc1NhbWVPcmlnaW5Qb2xpY3lDaGVjayhTZWN1cml0
eU9yaWdpbiYpOworCisgICAgLy8gQ2FsbGVkIGJ5IHRoZSBjYWNoZSBpZiB0aGUgb2JqZWN0IGhh
cyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUKKyAgICAvLyB3aGlsZSBzdGlsbCBiZWluZyBy
ZWZlcmVuY2VkLiBUaGlzIG1lYW5zIHRoZSBvYmplY3Qgc2hvdWxkIGRlbGV0ZSBpdHNlbGYKKyAg
ICAvLyBpZiB0aGUgbnVtYmVyIG9mIGNsaWVudHMgb2JzZXJ2aW5nIGl0IGV2ZXIgZHJvcHMgdG8g
MC4KKyAgICAvLyBUaGUgcmVzb3VyY2UgY2FuIGJlIGJyb3VnaHQgYmFjayB0byBjYWNoZSBhZnRl
ciBzdWNjZXNzZnVsIHJldmFsaWRhdGlvbi4KKyAgICB2b2lkIHNldEluQ2FjaGUoYm9vbCBpbkNh
Y2hlKSB7IG1faW5DYWNoZSA9IGluQ2FjaGU7IH0KKyAgICBib29sIGluQ2FjaGUoKSBjb25zdCB7
IHJldHVybiBtX2luQ2FjaGU7IH0KKyAgICAKKyAgICB2b2lkIGNsZWFyTG9hZGVyKCk7CisKKyAg
ICBTaGFyZWRCdWZmZXIqIHJlc291cmNlQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmdl
dCgpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdmlydHVhbCB2b2lkIHJlc3BvbnNl
UmVjZWl2ZWQoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRDYWNoZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IHJldHVybiB0cnVlOyB9
CisgICAgdm9pZCBzZXRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNl
OyB9CisgICAgLy8gVGhpcyBpcyB0aGUgc2FtZSBhcyByZXNwb25zZSgpIGV4Y2VwdCBhZnRlciBI
VFRQIHJlZGlyZWN0IHRvIGRhdGE6IFVSTC4KKyAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZUZvclNhbWVPcmlnaW5Qb2xpY3lDaGVja3MoKSBjb25zdDsKKworICAgIHZvaWQgc2V0
Q3Jvc3NPcmlnaW4oKTsKKyAgICBib29sIGlzQ3Jvc3NPcmlnaW4oKSBjb25zdDsKKyAgICBib29s
IGlzQ2xlYW4oKSBjb25zdDsKKyAgICBSZXNvdXJjZVJlc3BvbnNlOjpUYWludGluZyByZXNwb25z
ZVRhaW50aW5nKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25zZVRhaW50aW5nOyB9CisKKyAgICB2
b2lkIGxvYWRGcm9tKGNvbnN0IENhY2hlZFJlc291cmNlJiwgY29uc3QgUmVzb3VyY2VMb2FkZXJP
cHRpb25zJiwgQ2FjaGVkUmVzb3VyY2VMb2FkZXImKTsKKworICAgIFNlY3VyaXR5T3JpZ2luKiBv
cmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbi5nZXQoKTsgfQorCisgICAgYm9vbCBjYW5E
ZWxldGUoKSBjb25zdCB7IHJldHVybiAhaGFzQ2xpZW50cygpICYmICFtX2xvYWRlciAmJiAhbV9w
cmVsb2FkQ291bnQgJiYgIW1faGFuZGxlQ291bnQgJiYgIW1fcmVzb3VyY2VUb1JldmFsaWRhdGUg
JiYgIW1fcHJveHlSZXNvdXJjZTsgfQorICAgIGJvb2wgaGFzT25lSGFuZGxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYW5kbGVDb3VudCA9PSAxOyB9CisKKyAgICBib29sIGlzRXhwaXJlZCgpIGNvbnN0
OworCisgICAgLy8gTGlzdCBvZiBhY2NlcHRhYmxlIE1JTUUgdHlwZXMgc2VwYXJhdGVkIGJ5ICIs
Ii4KKyAgICAvLyBBIE1JTUUgdHlwZSBtYXkgY29udGFpbiBhIHdpbGRjYXJkLCBlLmcuICJ0ZXh0
LyoiLgorICAgIFN0cmluZyBhY2NlcHQoKSBjb25zdCB7IHJldHVybiBtX2FjY2VwdDsgfQorICAg
IHZvaWQgc2V0QWNjZXB0KGNvbnN0IFN0cmluZyYgYWNjZXB0KSB7IG1fYWNjZXB0ID0gYWNjZXB0
OyB9CisKKyAgICB2b2lkIGNhbmNlbExvYWQoKTsKKyAgICBib29sIHdhc0NhbmNlbGVkKCkgY29u
c3QgeyByZXR1cm4gbV9lcnJvci5pc0NhbmNlbGxhdGlvbigpOyB9CisgICAgYm9vbCBlcnJvck9j
Y3VycmVkKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMgPT0gTG9hZEVycm9yIHx8IG1fc3RhdHVz
ID09IERlY29kZUVycm9yOyB9CisgICAgYm9vbCBsb2FkRmFpbGVkT3JDYW5jZWxlZCgpIGNvbnN0
IHsgcmV0dXJuICFtX2Vycm9yLmlzTnVsbCgpOyB9CisKKyAgICBib29sIHNob3VsZFNlbmRSZXNv
dXJjZUxvYWRDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX29wdGlvbnMuc2VuZExvYWRDYWxs
YmFja3MgPT0gU2VuZENhbGxiYWNrczsgfQorICAgIERhdGFCdWZmZXJpbmdQb2xpY3kgZGF0YUJ1
ZmZlcmluZ1BvbGljeSgpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9ucy5kYXRhQnVmZmVyaW5nUG9s
aWN5OyB9CisKKyAgICBib29sIGFsbG93c0NhY2hpbmcoKSBjb25zdCB7IHJldHVybiBtX29wdGlv
bnMuY2FjaGluZ1BvbGljeSA9PSBDYWNoaW5nUG9saWN5OjpBbGxvd0NhY2hpbmc7IH0KKyAgICBj
b25zdCBGZXRjaE9wdGlvbnMmIG9wdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX29wdGlvbnM7IH0K
KworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoKSB7IH0KKworICAgIHZvaWQg
c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hl
ZFJlc291cmNlTG9hZGVyKSB7IG1fb3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBjYWNoZWRS
ZXNvdXJjZUxvYWRlcjsgfQorICAgIAorICAgIGJvb2wgaXNQcmVsb2FkZWQoKSBjb25zdCB7IHJl
dHVybiBtX3ByZWxvYWRDb3VudDsgfQorICAgIHZvaWQgaW5jcmVhc2VQcmVsb2FkQ291bnQoKSB7
ICsrbV9wcmVsb2FkQ291bnQ7IH0KKyAgICB2b2lkIGRlY3JlYXNlUHJlbG9hZENvdW50KCkgeyBB
U1NFUlQobV9wcmVsb2FkQ291bnQpOyAtLW1fcHJlbG9hZENvdW50OyB9CisgICAgCisgICAgdm9p
ZCByZWdpc3RlckhhbmRsZShDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UqIGgpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgdW5yZWdpc3RlckhhbmRsZShDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2Uq
IGgpOworICAgIAorICAgIGJvb2wgY2FuVXNlQ2FjaGVWYWxpZGF0b3IoKSBjb25zdDsKKworICAg
IGVudW0gY2xhc3MgUmV2YWxpZGF0aW9uRGVjaXNpb24geyBObywgWWVzRHVlVG9DYWNoZVBvbGlj
eSwgWWVzRHVlVG9Ob1N0b3JlLCBZZXNEdWVUb05vQ2FjaGUsIFllc0R1ZVRvRXhwaXJlZCB9Owor
ICAgIHZpcnR1YWwgUmV2YWxpZGF0aW9uRGVjaXNpb24gbWFrZVJldmFsaWRhdGlvbkRlY2lzaW9u
KENhY2hlUG9saWN5KSBjb25zdDsKKyAgICBib29sIHJlZGlyZWN0Q2hhaW5BbGxvd3NSZXVzZShS
ZXVzZUV4cGlyZWRSZWRpcmVjdGlvbk9yTm90KSBjb25zdDsKKworICAgIGJvb2wgdmFyeUhlYWRl
clZhbHVlc01hdGNoKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IENhY2hlZFJlc291cmNl
TG9hZGVyJik7CisKKyAgICBib29sIGlzQ2FjaGVWYWxpZGF0b3IoKSBjb25zdCB7IHJldHVybiBt
X3Jlc291cmNlVG9SZXZhbGlkYXRlOyB9CisgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlVG9S
ZXZhbGlkYXRlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZTsgfQorICAg
IAorICAgIC8vIEhUVFAgcmV2YWxpZGF0aW9uIHN1cHBvcnQgbWV0aG9kcyBmb3IgQ2FjaGVkUmVz
b3VyY2VMb2FkZXIuCisgICAgdm9pZCBzZXRSZXNvdXJjZVRvUmV2YWxpZGF0ZShDYWNoZWRSZXNv
dXJjZSopOworICAgIHZpcnR1YWwgdm9pZCBzd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291
cmNlKCk7CisgICAgdm9pZCBjbGVhclJlc291cmNlVG9SZXZhbGlkYXRlKCk7CisgICAgdm9pZCB1
cGRhdGVSZXNwb25zZUFmdGVyUmV2YWxpZGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHZh
bGlkYXRpbmdSZXNwb25zZSk7CisgICAgYm9vbCB2YWxpZGF0aW9uSW5Qcm9ncmVzcygpIGNvbnN0
IHsgcmV0dXJuIG1fcHJveHlSZXNvdXJjZTsgfQorICAgIGJvb2wgdmFsaWRhdGlvbkNvbXBsZXRp
bmcoKSBjb25zdCB7IHJldHVybiBtX3Byb3h5UmVzb3VyY2UgJiYgbV9wcm94eVJlc291cmNlLT5t
X3N3aXRjaGluZ0NsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2U7IH0KKworICAgIHZpcnR1YWwg
dm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgLyogYnl0ZXNTZW50ICovLCB1bnNp
Z25lZCBsb25nIGxvbmcgLyogdG90YWxCeXRlc1RvQmVTZW50ICovKSB7IH0KKworICAgIHZvaWQg
c2V0TG9hZEZpbmlzaFRpbWUoZG91YmxlIGZpbmlzaFRpbWUpIHsgbV9sb2FkRmluaXNoVGltZSA9
IGZpbmlzaFRpbWU7IH0KKyAgICBkb3VibGUgbG9hZEZpbmlzaFRpbWUoKSBjb25zdCB7IHJldHVy
biBtX2xvYWRGaW5pc2hUaW1lOyB9CisKKyNpZiBVU0UoRk9VTkRBVElPTikgfHwgVVNFKFNPVVAp
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0cnlSZXBsYWNlRW5jb2RlZERhdGEoU2hhcmVkQnVm
ZmVyJik7CisjZW5kaWYKKworI2lmIFVTRShTT1VQKQorICAgIHZpcnR1YWwgY2hhciogZ2V0T3JD
cmVhdGVSZWFkQnVmZmVyKHNpemVfdCAvKiByZXF1ZXN0ZWRTaXplICovLCBzaXplX3QmIC8qIGFj
dHVhbFNpemUgKi8pIHsgcmV0dXJuIG51bGxwdHI7IH0KKyNlbmRpZgorCisgICAgdW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyRm9yTG9hZFdpdGhvdXRSZXNvdXJjZUxvYWRlcigpIGNvbnN0IHsgcmV0
dXJuIG1faWRlbnRpZmllckZvckxvYWRXaXRob3V0UmVzb3VyY2VMb2FkZXI7IH0KKyAgICBzdGF0
aWMgUmVzb3VyY2VMb2FkUHJpb3JpdHkgZGVmYXVsdFByaW9yaXR5Rm9yUmVzb3VyY2VUeXBlKFR5
cGUpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBzZXRFbmNvZGVkU2l6ZSh1bnNpZ25lZCk7Cisg
ICAgdm9pZCBzZXREZWNvZGVkU2l6ZSh1bnNpZ25lZCk7CisgICAgdm9pZCBkaWRBY2Nlc3NEZWNv
ZGVkRGF0YShkb3VibGUgdGltZVN0YW1wKTsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRSZXBsYWNl
U2hhcmVkQnVmZmVyQ29udGVudHMoKSB7IH0KKworICAgIC8vIEZJWE1FOiBNYWtlIHRoZSByZXN0
IG9mIHRoZXNlIGRhdGEgbWVtYmVycyBwcml2YXRlIGFuZCB1c2UgZnVuY3Rpb25zIGluIGRlcml2
ZWQgY2xhc3NlcyBpbnN0ZWFkLgorICAgIEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xp
ZW50Kj4gbV9jbGllbnRzOworICAgIFJlc291cmNlUmVxdWVzdCBtX3Jlc291cmNlUmVxdWVzdDsK
KyAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IG1fbG9hZGVyOworICAgIFJlc291cmNlTG9h
ZGVyT3B0aW9ucyBtX29wdGlvbnM7CisgICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwor
ICAgIFJlc291cmNlUmVzcG9uc2U6OlRhaW50aW5nIG1fcmVzcG9uc2VUYWludGluZyB7IFJlc291
cmNlUmVzcG9uc2U6OlRhaW50aW5nOjpCYXNpYyB9OworICAgIFJlc291cmNlUmVzcG9uc2UgbV9y
ZWRpcmVjdFJlc3BvbnNlRm9yU2FtZU9yaWdpblBvbGljeUNoZWNrczsKKyAgICBSZWZQdHI8U2hh
cmVkQnVmZmVyPiBtX2RhdGE7CisgICAgRGVmZXJyYWJsZU9uZVNob3RUaW1lciBtX2RlY29kZWRE
YXRhRGVsZXRpb25UaW1lcjsKKworcHJpdmF0ZToKKyAgICBjbGFzcyBDYWxsYmFjazsKKworICAg
IGJvb2wgYWRkQ2xpZW50VG9TZXQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKTsKKworICAgIHZvaWQg
ZGVjb2RlZERhdGFEZWxldGlvblRpbWVyRmlyZWQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBjaGVj
a05vdGlmeSgpOworICAgIHZpcnR1YWwgYm9vbCBtYXlUcnlSZXBsYWNlRW5jb2RlZERhdGEoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRCb2R5RGF0YUZyb20o
Y29uc3QgQ2FjaGVkUmVzb3VyY2UmKSB7IH0KKworICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29u
ZHMgZnJlc2huZXNzTGlmZXRpbWUoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIGNvbnN0OworCisg
ICAgdm9pZCBhZGRBZGRpdGlvbmFsUmVxdWVzdEhlYWRlcnMoQ2FjaGVkUmVzb3VyY2VMb2FkZXIm
KTsKKyAgICB2b2lkIGNvbXB1dGVPcmlnaW4oQ2FjaGVkUmVzb3VyY2VMb2FkZXImKTsKKyAgICB2
b2lkIGZhaWxCZWZvcmVTdGFydGluZygpOworCisgICAgSGFzaE1hcDxDYWNoZWRSZXNvdXJjZUNs
aWVudCosIHN0ZDo6dW5pcXVlX3B0cjxDYWxsYmFjaz4+IG1fY2xpZW50c0F3YWl0aW5nQ2FsbGJh
Y2s7CisgICAgU2Vzc2lvbklEIG1fc2Vzc2lvbklEOworICAgIFN0cmluZyBtX2FjY2VwdDsKKyAg
ICBSZXNvdXJjZUxvYWRQcmlvcml0eSBtX2xvYWRQcmlvcml0eTsKKyAgICBzdGQ6OmNocm9ubzo6
c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IG1fcmVzcG9uc2VUaW1lc3RhbXA7CisKKyAgICBTdHJp
bmcgbV9mcmFnbWVudElkZW50aWZpZXJGb3JSZXF1ZXN0OworCisgICAgUmVzb3VyY2VFcnJvciBt
X2Vycm9yOworICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gbV9vcmlnaW47CisKKyAgICBkb3Vi
bGUgbV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWU7IC8vIFVzZWQgYXMgYSAidGhyYXNoIGd1YXJkIiBp
biB0aGUgY2FjaGUKKyAgICBkb3VibGUgbV9sb2FkRmluaXNoVGltZTsKKworICAgIHVuc2lnbmVk
IG1fZW5jb2RlZFNpemU7CisgICAgdW5zaWduZWQgbV9kZWNvZGVkU2l6ZTsKKyAgICB1bnNpZ25l
ZCBtX2FjY2Vzc0NvdW50OworICAgIHVuc2lnbmVkIG1faGFuZGxlQ291bnQ7CisgICAgdW5zaWdu
ZWQgbV9wcmVsb2FkQ291bnQ7CisKKyAgICB1bnNpZ25lZCBtX3ByZWxvYWRSZXN1bHQgOiAyOyAv
LyBQcmVsb2FkUmVzdWx0CisKKyAgICBib29sIG1fcmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdMYXll
ciA6IDE7CisKKyAgICBib29sIG1faW5DYWNoZSA6IDE7CisgICAgYm9vbCBtX2xvYWRpbmcgOiAx
OworCisgICAgYm9vbCBtX3N3aXRjaGluZ0NsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UgOiAx
OworCisgICAgdW5zaWduZWQgbV90eXBlIDogNDsgLy8gVHlwZQorICAgIHVuc2lnbmVkIG1fc3Rh
dHVzIDogMzsgLy8gU3RhdHVzCisKKyNpZm5kZWYgTkRFQlVHCisgICAgYm9vbCBtX2RlbGV0ZWQ7
CisgICAgdW5zaWduZWQgbV9scnVJbmRleDsKKyNlbmRpZgorCisgICAgQ2FjaGVkUmVzb3VyY2VM
b2FkZXIqIG1fb3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXI7IC8vIG9ubHkgbm9uLW51bGwgZm9y
IHJlc291cmNlcyB0aGF0IGFyZSBub3QgaW4gdGhlIGNhY2hlCisgICAgCisgICAgLy8gSWYgdGhp
cyBmaWVsZCBpcyBub24tbnVsbCB3ZSBhcmUgdXNpbmcgdGhlIHJlc291cmNlIGFzIGEgcHJveHkg
Zm9yIGNoZWNraW5nIHdoZXRoZXIgYW4gZXhpc3RpbmcgcmVzb3VyY2UgaXMgc3RpbGwgdXAgdG8g
ZGF0ZQorICAgIC8vIHVzaW5nIEhUVFAgSWYtTW9kaWZpZWQtU2luY2UvSWYtTm9uZS1NYXRjaCBo
ZWFkZXJzLiBJZiB0aGUgcmVzcG9uc2UgaXMgMzA0IGFsbCBjbGllbnRzIG9mIHRoaXMgcmVzb3Vy
Y2UgYXJlIG1vdmVkCisgICAgLy8gdG8gdG8gYmUgY2xpZW50cyBvZiBtX3Jlc291cmNlVG9SZXZh
bGlkYXRlIGFuZCB0aGUgcmVzb3VyY2UgaXMgZGVsZXRlZC4gSWYgbm90LCB0aGUgZmllbGQgaXMg
emVyb2VkIGFuZCB0aGlzCisgICAgLy8gcmVzb3VyY2VzIGJlY29tZXMgbm9ybWFsIHJlc291cmNl
IGxvYWQuCisgICAgQ2FjaGVkUmVzb3VyY2UqIG1fcmVzb3VyY2VUb1JldmFsaWRhdGU7CisKKyAg
ICAvLyBJZiB0aGlzIGZpZWxkIGlzIG5vbi1udWxsLCB0aGUgcmVzb3VyY2UgaGFzIGEgcHJveHkg
Zm9yIGNoZWNraW5nIHdoZXRoZXIgaXQgaXMgc3RpbGwgdXAgdG8gZGF0ZSAoc2VlIG1fcmVzb3Vy
Y2VUb1JldmFsaWRhdGUpLgorICAgIENhY2hlZFJlc291cmNlKiBtX3Byb3h5UmVzb3VyY2U7CisK
KyAgICAvLyBUaGVzZSBoYW5kbGVzIHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkIHRvIHBvaW50IHRv
IHRoZSBtX3Jlc291cmNlVG9SZXZhbGlkYXRlIGluIGNhc2Ugd2UgZ2V0IDMwNCByZXNwb25zZS4K
KyAgICBIYXNoU2V0PENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSo+IG1faGFuZGxlc1RvUmV2YWxp
ZGF0ZTsKKworICAgIFJlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1cyBtX3JlZGlyZWN0Q2hhaW5DYWNo
ZVN0YXR1czsKKworICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiBtX3Zhcnlp
bmdIZWFkZXJWYWx1ZXM7CisKKyAgICB1bnNpZ25lZCBsb25nIG1faWRlbnRpZmllckZvckxvYWRX
aXRob3V0UmVzb3VyY2VMb2FkZXIgeyAwIH07Cit9OworCitjbGFzcyBDYWNoZWRSZXNvdXJjZTo6
Q2FsbGJhY2sgeworI2lmICFDT01QSUxFUihNU1ZDKQorICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworI2VuZGlmCitwdWJsaWM6CisgICAgQ2FsbGJhY2soQ2FjaGVkUmVzb3VyY2UmLCBDYWNo
ZWRSZXNvdXJjZUNsaWVudCYpOworCisgICAgdm9pZCBjYW5jZWwoKTsKKworcHJpdmF0ZToKKyAg
ICB2b2lkIHRpbWVyRmlyZWQoKTsKKworICAgIENhY2hlZFJlc291cmNlJiBtX3Jlc291cmNlOwor
ICAgIENhY2hlZFJlc291cmNlQ2xpZW50JiBtX2NsaWVudDsKKyAgICBUaW1lciBtX3RpbWVyOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQ0FDSEVEX1JFU09VUkNFKFRvQ2xhc3NOYW1lLCBDYWNoZWRSZXNvdXJjZVR5cGUpIFwK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6VG9DbGFzc05hbWUpIFwKKyAg
ICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2UmIHJlc291
cmNlKSB7IHJldHVybiByZXNvdXJjZS50eXBlKCkgPT0gV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VU
eXBlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworI2VuZGlmIC8vIENhY2hl
ZFJlc291cmNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNo
ZWRSZXNvdXJjZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJl
c291cmNlQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGI0NTQzZDVhNTk3OWVjYzQyZjZkMjY0YjQ0MmU3
NDkzMTNhNWM5ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRj
aC9DYWNoZWRSZXNvdXJjZUNsaWVudC5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgICAgQ29weXJp
Z2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCisgICAgQ29weXJp
Z2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICAgIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwg
ZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5k
IGh0bWwKKyAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3Ig
dGhlc2Ugb2JqZWN0cy4KKyovCisKKyNpZm5kZWYgQ2FjaGVkUmVzb3VyY2VDbGllbnRfaAorI2Rl
ZmluZSBDYWNoZWRSZXNvdXJjZUNsaWVudF9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQ2FjaGVkUmVzb3VyY2U7CisKK2NsYXNzIENhY2hlZFJlc291cmNlQ2xpZW50IHsKK3B1Ymxp
YzoKKyAgICBlbnVtIENhY2hlZFJlc291cmNlQ2xpZW50VHlwZSB7CisgICAgICAgIEJhc2VSZXNv
dXJjZVR5cGUsCisgICAgICAgIEltYWdlVHlwZSwKKyAgICAgICAgRm9udFR5cGUsCisgICAgICAg
IFN0eWxlU2hlZXRUeXBlLAorICAgICAgICBTVkdEb2N1bWVudFR5cGUsCisgICAgICAgIFJhd1Jl
c291cmNlVHlwZQorICAgIH07CisKKyAgICB2aXJ0dWFsIH5DYWNoZWRSZXNvdXJjZUNsaWVudCgp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSopIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBkZXByZWNhdGVkRGlkUmVjZWl2ZUNhY2hlZFJlc291cmNlKENh
Y2hlZFJlc291cmNlKikgeyB9CisgICAgdmlydHVhbCBib29sIGlzWE1MSHR0cFJlcXVlc3QoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgc3RhdGljIENhY2hlZFJlc291cmNlQ2xpZW50
VHlwZSBleHBlY3RlZFR5cGUoKSB7IHJldHVybiBCYXNlUmVzb3VyY2VUeXBlOyB9CisgICAgdmly
dHVhbCBDYWNoZWRSZXNvdXJjZUNsaWVudFR5cGUgcmVzb3VyY2VDbGllbnRUeXBlKCkgY29uc3Qg
eyByZXR1cm4gZXhwZWN0ZWRUeXBlKCk7IH0KKworcHJvdGVjdGVkOgorICAgIENhY2hlZFJlc291
cmNlQ2xpZW50KCkgeyB9Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jNTFlZjg2MTAxMzZkYjJkMzc0NDA1OWYwNGRkZDczZDk1Nzc2NmJjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlQ2xpZW50
V2Fsa2VyLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFy
cyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGly
ayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgICBUaGlzIGNs
YXNzIHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMs
IHN0eWxlIHNoZWV0cyBhbmQgaHRtbAorICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEg
bWVtb3J5IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgorKi8KKworI2lmbmRlZiBDYWNoZWRSZXNv
dXJjZUNsaWVudFdhbGtlcl9oCisjZGVmaW5lIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyX2gK
KworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hD
b3VudGVkU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKy8vIENhbGwgdGhpcyAid2Fsa2VyIiBpbnN0ZWFkIG9mIGl0ZXJhdG9yIHNvIHBlb3Bs
ZSB3b24ndCBleHBlY3QgUXQgb3IgU1RMLXN0eWxlIGl0ZXJhdG9yIGludGVyZmFjZS4KKy8vIEp1
c3Qga2VlcCBjYWxsaW5nIG5leHQoKSBvbiB0aGlzLiBJdCdzIHNhZmUgZnJvbSBkZWxldGlvbnMg
b2YgaXRlbXMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBDYWNoZWRSZXNvdXJjZUNsaWVu
dFdhbGtlciB7CitwdWJsaWM6CisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIoY29uc3Qg
SGFzaENvdW50ZWRTZXQ8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPiYgc2V0KQorICAgICAgICA6IG1f
Y2xpZW50U2V0KHNldCksIG1fY2xpZW50VmVjdG9yKHNldC5zaXplKCkpLCBtX2luZGV4KDApCisg
ICAgeworICAgICAgICB0eXBlZGVmIEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xpZW50
Kj46OmNvbnN0X2l0ZXJhdG9yIEl0ZXJhdG9yOworICAgICAgICBJdGVyYXRvciBlbmQgPSBzZXQu
ZW5kKCk7CisgICAgICAgIHNpemVfdCBjbGllbnRJbmRleCA9IDA7CisgICAgICAgIGZvciAoSXRl
cmF0b3IgY3VycmVudCA9IHNldC5iZWdpbigpOyBjdXJyZW50ICE9IGVuZDsgKytjdXJyZW50KQor
ICAgICAgICAgICAgbV9jbGllbnRWZWN0b3JbY2xpZW50SW5kZXgrK10gPSBjdXJyZW50LT5rZXk7
CisgICAgfQorCisgICAgVCogbmV4dCgpCisgICAgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IG1f
Y2xpZW50VmVjdG9yLnNpemUoKTsKKyAgICAgICAgd2hpbGUgKG1faW5kZXggPCBzaXplKSB7Cisg
ICAgICAgICAgICBDYWNoZWRSZXNvdXJjZUNsaWVudCogbmV4dCA9IG1fY2xpZW50VmVjdG9yW21f
aW5kZXgrK107CisgICAgICAgICAgICBpZiAobV9jbGllbnRTZXQuY29udGFpbnMobmV4dCkpIHsK
KyAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihUOjpleHBl
Y3RlZFR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZUNsaWVudDo6ZXhwZWN0ZWRUeXBlKCkgfHwgbmV4
dC0+cmVzb3VyY2VDbGllbnRUeXBlKCkgPT0gVDo6ZXhwZWN0ZWRUeXBlKCkpOworICAgICAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4obmV4dCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK3ByaXZhdGU6
CisgICAgY29uc3QgSGFzaENvdW50ZWRTZXQ8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPiYgbV9jbGll
bnRTZXQ7CisgICAgVmVjdG9yPENhY2hlZFJlc291cmNlQ2xpZW50Kj4gbV9jbGllbnRWZWN0b3I7
CisgICAgc2l6ZV90IG1faW5kZXg7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlSGFuZGxlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMDk3Mjc2ZTkzMmJkMGVjYzg2MDdkM2NlY2FiNDUzNzRiYTM5M2MwYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZUhhbmRsZS5j
cHAKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VI
YW5kbGUuaCIKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlOjpDYWNoZWRSZXNvdXJjZUhhbmRsZUJh
c2UoKQorICAgIDogbV9yZXNvdXJjZShudWxscHRyKQoreworfQorCitDYWNoZWRSZXNvdXJjZUhh
bmRsZUJhc2U6OkNhY2hlZFJlc291cmNlSGFuZGxlQmFzZShDYWNoZWRSZXNvdXJjZSogcmVzb3Vy
Y2UpCisgICAgOiBtX3Jlc291cmNlKHJlc291cmNlKQoreworICAgIGlmIChtX3Jlc291cmNlKQor
ICAgICAgICBtX3Jlc291cmNlLT5yZWdpc3RlckhhbmRsZSh0aGlzKTsKK30KKworQ2FjaGVkUmVz
b3VyY2VIYW5kbGVCYXNlOjpDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UoY29uc3QgQ2FjaGVkUmVz
b3VyY2VIYW5kbGVCYXNlJiBvdGhlcikKKyAgICA6IG1fcmVzb3VyY2Uob3RoZXIubV9yZXNvdXJj
ZSkKK3sKKyAgICBpZiAobV9yZXNvdXJjZSkKKyAgICAgICAgbV9yZXNvdXJjZS0+cmVnaXN0ZXJI
YW5kbGUodGhpcyk7Cit9CisKK0NhY2hlZFJlc291cmNlSGFuZGxlQmFzZTo6fkNhY2hlZFJlc291
cmNlSGFuZGxlQmFzZSgpCit7CisgICAgaWYgKG1fcmVzb3VyY2UpCisgICAgICAgIG1fcmVzb3Vy
Y2UtPnVucmVnaXN0ZXJIYW5kbGUodGhpcyk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VIYW5k
bGVCYXNlOjpzZXRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCit7CisgICAgaWYg
KHJlc291cmNlID09IG1fcmVzb3VyY2UpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9yZXNv
dXJjZSkKKyAgICAgICAgbV9yZXNvdXJjZS0+dW5yZWdpc3RlckhhbmRsZSh0aGlzKTsKKyAgICBt
X3Jlc291cmNlID0gcmVzb3VyY2U7CisgICAgaWYgKG1fcmVzb3VyY2UpCisgICAgICAgIG1fcmVz
b3VyY2UtPnJlZ2lzdGVySGFuZGxlKHRoaXMpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZUhhbmRsZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzZTU4
NDJlMzM1NDQ5YjVhOWRhOWNjYjU3Y2M2NTc1ZDViZWE1YWIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaApAQCAtMCww
ICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIENhY2hlZFJlc291cmNlSGFuZGxlX2gKKyNkZWZpbmUgQ2FjaGVkUmVzb3VyY2VI
YW5kbGVfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1FeHBvcnRNYWNyb3MuaCIKKyNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhY2hlZFJlc291
cmNlOworCitjbGFzcyBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UgeworcHVibGljOgorICAgIH5D
YWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UoKTsKKworICAgIENhY2hlZFJlc291cmNlKiBnZXQoKSBj
b25zdCB7IHJldHVybiBtX3Jlc291cmNlOyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBj
b25zdCB7IHJldHVybiAhbV9yZXNvdXJjZTsgfQorICAgIAorICAgIC8vIFRoaXMgY29udmVyc2lv
biBvcGVyYXRvciBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8g
b3RoZXIgaW50ZWdlciB0eXBlcy4KKyAgICB0eXBlZGVmIENhY2hlZFJlc291cmNlKiBDYWNoZWRS
ZXNvdXJjZUhhbmRsZUJhc2U6OipVbnNwZWNpZmllZEJvb2xUeXBlOworICAgIG9wZXJhdG9yIFVu
c3BlY2lmaWVkQm9vbFR5cGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlID8gJkNhY2hlZFJl
c291cmNlSGFuZGxlQmFzZTo6bV9yZXNvdXJjZSA6IDA7IH0KKworcHJvdGVjdGVkOgorICAgIENh
Y2hlZFJlc291cmNlSGFuZGxlQmFzZSgpOworICAgIENhY2hlZFJlc291cmNlSGFuZGxlQmFzZShD
YWNoZWRSZXNvdXJjZSopOworICAgIENhY2hlZFJlc291cmNlSGFuZGxlQmFzZShjb25zdCBDYWNo
ZWRSZXNvdXJjZUhhbmRsZUJhc2UmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UmVz
b3VyY2UoQ2FjaGVkUmVzb3VyY2UqKTsKKyAgICAKK3ByaXZhdGU6CisgICAgQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGVCYXNlJiBvcGVyYXRvcj0oY29uc3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlJikg
eyByZXR1cm4gKnRoaXM7IH0gCisgICAgCisgICAgZnJpZW5kIGNsYXNzIENhY2hlZFJlc291cmNl
OworCisgICAgQ2FjaGVkUmVzb3VyY2UqIG1fcmVzb3VyY2U7Cit9OworICAgIAordGVtcGxhdGUg
PGNsYXNzIFI+IGNsYXNzIENhY2hlZFJlc291cmNlSGFuZGxlIDogcHVibGljIENhY2hlZFJlc291
cmNlSGFuZGxlQmFzZSB7CitwdWJsaWM6IAorICAgIENhY2hlZFJlc291cmNlSGFuZGxlKCkgeyB9
CisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGUoUiogcmVzKSA6IENhY2hlZFJlc291cmNlSGFuZGxl
QmFzZShyZXMpIHsgfQorICAgIENhY2hlZFJlc291cmNlSGFuZGxlKGNvbnN0IENhY2hlZFJlc291
cmNlSGFuZGxlPFI+JiBvKSA6IENhY2hlZFJlc291cmNlSGFuZGxlQmFzZShvKSB7IH0KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPiBDYWNoZWRSZXNvdXJjZUhhbmRsZShjb25zdCBDYWNoZWRSZXNv
dXJjZUhhbmRsZTxVPiYgbykgOiBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2Uoby5nZXQoKSkgeyB9
CisKKyAgICBSKiBnZXQoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PFIqPihDYWNo
ZWRSZXNvdXJjZUhhbmRsZUJhc2U6OmdldCgpKTsgfQorICAgIFIqIG9wZXJhdG9yLT4oKSBjb25z
dCB7IHJldHVybiBnZXQoKTsgfQorICAgIFImIG9wZXJhdG9yKigpIGNvbnN0IHsgQVNTRVJUKGdl
dCgpKTsgcmV0dXJuICpnZXQoKTsgfQorCisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGUmIG9wZXJh
dG9yPShSKiByZXMpIHsgc2V0UmVzb3VyY2UocmVzKTsgcmV0dXJuICp0aGlzOyB9IAorICAgIENh
Y2hlZFJlc291cmNlSGFuZGxlJiBvcGVyYXRvcj0oY29uc3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGUm
IG8pIHsgc2V0UmVzb3VyY2Uoby5nZXQoKSk7IHJldHVybiAqdGhpczsgfQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+IENhY2hlZFJlc291cmNlSGFuZGxlJiBvcGVyYXRvcj0oY29uc3QgQ2FjaGVk
UmVzb3VyY2VIYW5kbGU8VT4mIG8pIHsgc2V0UmVzb3VyY2Uoby5nZXQoKSk7IHJldHVybiAqdGhp
czsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxlQmFz
ZSYgbykgY29uc3QgeyByZXR1cm4gZ2V0KCkgPT0gby5nZXQoKTsgfQorICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UmIG8pIGNvbnN0IHsgcmV0dXJuIGdl
dCgpICE9IG8uZ2V0KCk7IH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBSUj4gYm9v
bCBvcGVyYXRvcj09KGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxlPFI+JiBoLCBjb25zdCBSUiog
cmVzKSAKK3sgCisgICAgcmV0dXJuIGguZ2V0KCkgPT0gcmVzOyAKK30KK3RlbXBsYXRlIDxjbGFz
cyBSLCBjbGFzcyBSUj4gYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJSKiByZXMsIGNvbnN0IENhY2hl
ZFJlc291cmNlSGFuZGxlPFI+JiBoKSAKK3sgCisgICAgcmV0dXJuIGguZ2V0KCkgPT0gcmVzOyAK
K30KK3RlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBSUj4gYm9vbCBvcGVyYXRvciE9KGNvbnN0IENh
Y2hlZFJlc291cmNlSGFuZGxlPFI+JiBoLCBjb25zdCBSUiogcmVzKSAKK3sgCisgICAgcmV0dXJu
IGguZ2V0KCkgIT0gcmVzOyAKK30KK3RlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBSUj4gYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFJSKiByZXMsIGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxlPFI+JiBo
KSAKK3sgCisgICAgcmV0dXJuIGguZ2V0KCkgIT0gcmVzOyAKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gQ2FjaGVkUmVzb3VyY2VIYW5kbGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmQ1YjdmOGNmNmIwMDllYjA0Y2NkNWE5NzljZTI2ZTM5N2Y0MzhiOTUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VMb2FkZXIu
Y3BwCkBAIC0wLDAgKzEsMTI1NyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBL
bm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJh
c3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNo
IE1vYmlsZSBJbmMuIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgIFRoaXMgY2xhc3Mg
cHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5
bGUgc2hlZXRzIGFuZCBodG1sCisgICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1v
cnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKKworI2luY2x1ZGUgIkNhY2hlZENTU1N0
eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudC5oIgorI2luY2x1ZGUgIkNh
Y2hlZEZvbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJh
d1Jlc291cmNlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVk
ZSAiQ2FjaGVkU1ZHRm9udC5oIgorI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgorI2luY2x1ZGUg
IkNhY2hlZFhTTFN0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJD
aHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uRXJyb3IuaCIKKyNpbmNs
dWRlICJDb250ZW50RXh0ZW5zaW9uUnVsZS5oIgorI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBv
bGljeS5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkRpYWdub3N0aWNMb2dn
aW5nQ2xpZW50LmgiCisjaW5jbHVkZSAiRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNs
aWVudC5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEZyYW1lT3du
ZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiTG9hZGVyU3RyYXRlZ3kuaCIKKyNpbmNsdWRlICJMb2Nh
bGl6ZWRTdHJpbmdzLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1haW5GcmFt
ZS5oIgorI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1
ZGUgIlBlcmZvcm1hbmNlLmgiCisjaW5jbHVkZSAiUGluZ0xvYWRlci5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtU3RyYXRlZ2llcy5oIgorI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJSZXNvdXJjZUxvYWRJbmZvLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
IgorI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgorI2luY2x1ZGUgIlNlc3Npb25JRC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5j
bHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCisjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIu
aCIKKyNpbmNsdWRlICJVc2VyQ29udGVudENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJVc2VyU3R5
bGVTaGVldC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyNpbmNsdWRlICJD
YWNoZWRUZXh0VHJhY2suaCIKKyNlbmRpZgorCisjZGVmaW5lIFBSRUxPQURfREVCVUcgMAorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBDYWNoZWRSZXNvdXJjZSogY3JlYXRlUmVzb3Vy
Y2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBTdHJpbmcmIGNoYXJzZXQsIFNlc3Npb25JRCBzZXNzaW9uSUQpCit7CisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKKyAgICAg
ICAgcmV0dXJuIG5ldyBDYWNoZWRJbWFnZShyZXF1ZXN0LCBzZXNzaW9uSUQpOworICAgIGNhc2Ug
Q2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6CisgICAgICAgIHJldHVybiBuZXcgQ2FjaGVk
Q1NTU3R5bGVTaGVldChyZXF1ZXN0LCBjaGFyc2V0LCBzZXNzaW9uSUQpOworICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OlNjcmlwdDoKKyAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRTY3JpcHQocmVx
dWVzdCwgY2hhcnNldCwgc2Vzc2lvbklEKTsKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdE
b2N1bWVudFJlc291cmNlOgorICAgICAgICByZXR1cm4gbmV3IENhY2hlZFNWR0RvY3VtZW50KHJl
cXVlc3QsIHNlc3Npb25JRCk7CisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpTVkdGb250UmVzb3VyY2U6CisgICAgICAgIHJldHVybiBuZXcgQ2FjaGVkU1ZH
Rm9udChyZXF1ZXN0LCBzZXNzaW9uSUQpOworI2VuZGlmCisgICAgY2FzZSBDYWNoZWRSZXNvdXJj
ZTo6Rm9udFJlc291cmNlOgorICAgICAgICByZXR1cm4gbmV3IENhY2hlZEZvbnQocmVxdWVzdCwg
c2Vzc2lvbklEKTsKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpNZWRpYVJlc291cmNlOgorICAg
IGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOgorICAgIGNhc2UgQ2FjaGVkUmVzb3Vy
Y2U6Ok1haW5SZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRSYXdSZXNvdXJjZShy
ZXF1ZXN0LCB0eXBlLCBzZXNzaW9uSUQpOworI2lmIEVOQUJMRShYU0xUKQorICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6CisgICAgICAgIHJldHVybiBuZXcgQ2FjaGVkWFNM
U3R5bGVTaGVldChyZXF1ZXN0LCBzZXNzaW9uSUQpOworI2VuZGlmCisjaWYgRU5BQkxFKExJTktf
UFJFRkVUQ0gpCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1ByZWZldGNoOgorICAgICAg
ICByZXR1cm4gbmV3IENhY2hlZFJlc291cmNlKHJlcXVlc3QsIENhY2hlZFJlc291cmNlOjpMaW5r
UHJlZmV0Y2gsIHNlc3Npb25JRCk7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1N1YnJl
c291cmNlOgorICAgICAgICByZXR1cm4gbmV3IENhY2hlZFJlc291cmNlKHJlcXVlc3QsIENhY2hl
ZFJlc291cmNlOjpMaW5rU3VicmVzb3VyY2UsIHNlc3Npb25JRCk7CisjZW5kaWYKKyNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6VGV4dFRyYWNrUmVzb3Vy
Y2U6CisgICAgICAgIHJldHVybiBuZXcgQ2FjaGVkVGV4dFRyYWNrKHJlcXVlc3QsIHNlc3Npb25J
RCk7CisjZW5kaWYKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK0NhY2hlZFJlc291cmNlTG9hZGVyOjpDYWNoZWRSZXNvdXJjZUxvYWRl
cihEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIpCisgICAgOiBtX2RvY3VtZW50KG51bGxw
dHIpCisgICAgLCBtX2RvY3VtZW50TG9hZGVyKGRvY3VtZW50TG9hZGVyKQorICAgICwgbV9yZXF1
ZXN0Q291bnQoMCkKKyAgICAsIG1fZ2FyYmFnZUNvbGxlY3REb2N1bWVudFJlc291cmNlc1RpbWVy
KCp0aGlzLCAmQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmdhcmJhZ2VDb2xsZWN0RG9jdW1lbnRSZXNv
dXJjZXMpCisgICAgLCBtX2F1dG9Mb2FkSW1hZ2VzKHRydWUpCisgICAgLCBtX2ltYWdlc0VuYWJs
ZWQodHJ1ZSkKKyAgICAsIG1fYWxsb3dTdGFsZVJlc291cmNlcyhmYWxzZSkKK3sKK30KKworQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6On5DYWNoZWRSZXNvdXJjZUxvYWRlcigpCit7CisgICAgbV9kb2N1
bWVudExvYWRlciA9IG51bGxwdHI7CisgICAgbV9kb2N1bWVudCA9IG51bGxwdHI7CisKKyAgICBj
bGVhclByZWxvYWRzKCk7CisgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IG1fZG9jdW1lbnRSZXNv
dXJjZXMudmFsdWVzKCkpCisgICAgICAgIHJlc291cmNlLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJj
ZUxvYWRlcihudWxscHRyKTsKKworICAgIC8vIE1ha2Ugc3VyZSBubyByZXF1ZXN0cyBzdGlsbCBw
b2ludCB0byB0aGlzIENhY2hlZFJlc291cmNlTG9hZGVyCisgICAgQVNTRVJUKG1fcmVxdWVzdENv
dW50ID09IDApOworfQorCitDYWNoZWRSZXNvdXJjZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNh
Y2hlZFJlc291cmNlKGNvbnN0IFN0cmluZyYgcmVzb3VyY2VVUkwpIGNvbnN0IAoreworICAgIEFT
U0VSVCghcmVzb3VyY2VVUkwuaXNOdWxsKCkpOworICAgIFVSTCB1cmwgPSBtX2RvY3VtZW50LT5j
b21wbGV0ZVVSTChyZXNvdXJjZVVSTCk7CisgICAgcmV0dXJuIGNhY2hlZFJlc291cmNlKHVybCk7
IAorfQorCitDYWNoZWRSZXNvdXJjZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNhY2hlZFJlc291
cmNlKGNvbnN0IFVSTCYgcmVzb3VyY2VVUkwpIGNvbnN0Cit7CisgICAgVVJMIHVybCA9IE1lbW9y
eUNhY2hlOjpyZW1vdmVGcmFnbWVudElkZW50aWZpZXJJZk5lZWRlZChyZXNvdXJjZVVSTCk7Cisg
ICAgcmV0dXJuIG1fZG9jdW1lbnRSZXNvdXJjZXMuZ2V0KHVybCkuZ2V0KCk7IAorfQorCitGcmFt
ZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmZyYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9k
b2N1bWVudExvYWRlciA/IG1fZG9jdW1lbnRMb2FkZXItPmZyYW1lKCkgOiBudWxscHRyOworfQor
CitTZXNzaW9uSUQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnNlc3Npb25JRCgpIGNvbnN0Cit7Cisg
ICAgU2Vzc2lvbklEIHNlc3Npb25JRCA9IFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpOwor
CisgICAgaWYgKEZyYW1lKiBmID0gZnJhbWUoKSkKKyAgICAgICAgc2Vzc2lvbklEID0gZi0+cGFn
ZSgpLT5zZXNzaW9uSUQoKTsKKworICAgIHJldHVybiBzZXNzaW9uSUQ7Cit9CisKK0NhY2hlZFJl
c291cmNlSGFuZGxlPENhY2hlZEltYWdlPiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdElt
YWdlKENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBpZiAoRnJhbWUqIGZy
YW1lID0gdGhpcy0+ZnJhbWUoKSkgeworICAgICAgICBpZiAoZnJhbWUtPmxvYWRlcigpLnBhZ2VE
aXNtaXNzYWxFdmVudEJlaW5nRGlzcGF0Y2hlZCgpICE9IEZyYW1lTG9hZGVyOjpQYWdlRGlzbWlz
c2FsVHlwZTo6Tm9uZSkgeworICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZy
YW1lLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgICAgIGRvY3VtZW50LT5jb250ZW50U2VjdXJp
dHlQb2xpY3koKS0+dXBncmFkZUluc2VjdXJlUmVxdWVzdElmTmVlZGVkKHJlcXVlc3QubXV0YWJs
ZVJlc291cmNlUmVxdWVzdCgpLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6Okluc2VjdXJlUmVxdWVz
dFR5cGU6OkxvYWQpOworICAgICAgICAgICAgVVJMIHJlcXVlc3RVUkwgPSByZXF1ZXN0LnJlc291
cmNlUmVxdWVzdCgpLnVybCgpOworICAgICAgICAgICAgaWYgKHJlcXVlc3RVUkwuaXNWYWxpZCgp
ICYmIGNhblJlcXVlc3QoQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UsIHJlcXVlc3RVUkws
IHJlcXVlc3Qub3B0aW9ucygpLCByZXF1ZXN0LmZvclByZWxvYWQoKSkpCisgICAgICAgICAgICAg
ICAgUGluZ0xvYWRlcjo6bG9hZEltYWdlKCpmcmFtZSwgcmVxdWVzdFVSTCk7CisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXF1ZXN0LnNl
dERlZmVyKGNsaWVudERlZmVyc0ltYWdlKHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCkp
ID8gQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpEZWZlcnJlZEJ5Q2xpZW50IDogQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0OjpOb0RlZmVyKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8Q2FjaGVkSW1hZ2U+KHJl
cXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZSwgcmVxdWVzdCkuZ2V0
KCkpOworfQorCitDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRGb250PiBDYWNoZWRSZXNvdXJj
ZUxvYWRlcjo6cmVxdWVzdEZvbnQoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29s
IGlzU1ZHKQoreworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgaWYgKGlzU1ZHKQorICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8Q2FjaGVkU1ZHRm9udD4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJl
c291cmNlOjpTVkdGb250UmVzb3VyY2UsIHJlcXVlc3QpLmdldCgpKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGlzU1ZHKTsKKyNlbmRpZgorICAgIHJldHVybiBkb3duY2FzdDxDYWNoZWRGb250
PihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZSwgcmVxdWVzdCku
Z2V0KCkpOworfQorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorQ2FjaGVkUmVzb3VyY2VIYW5k
bGU8Q2FjaGVkVGV4dFRyYWNrPiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFRleHRUcmFj
ayhDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIGRvd25jYXN0
PENhY2hlZFRleHRUcmFjaz4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpUZXh0VHJh
Y2tSZXNvdXJjZSwgcmVxdWVzdCkuZ2V0KCkpOworfQorI2VuZGlmCisKK0NhY2hlZFJlc291cmNl
SGFuZGxlPENhY2hlZENTU1N0eWxlU2hlZXQ+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0
Q1NTU3R5bGVTaGVldChDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgcmV0
dXJuIGRvd25jYXN0PENhY2hlZENTU1N0eWxlU2hlZXQ+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRS
ZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCwgcmVxdWVzdCkuZ2V0KCkpOworfQorCitDYWNoZWRSZXNv
dXJjZUhhbmRsZTxDYWNoZWRDU1NTdHlsZVNoZWV0PiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVx
dWVzdFVzZXJDU1NTdHlsZVNoZWV0KENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sK
KyAgICBVUkwgdXJsID0gTWVtb3J5Q2FjaGU6OnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcklmTmVl
ZGVkKHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCkpOworCisjaWYgRU5BQkxFKENBQ0hF
X1BBUlRJVElPTklORykKKyAgICByZXF1ZXN0Lm11dGFibGVSZXNvdXJjZVJlcXVlc3QoKS5zZXRE
b21haW5Gb3JDYWNoZVBhcnRpdGlvbihkb2N1bWVudCgpLT50b3BPcmlnaW4oKS0+ZG9tYWluRm9y
Q2FjaGVQYXJ0aXRpb24oKSk7CisjZW5kaWYKKworICAgIGF1dG8mIG1lbW9yeUNhY2hlID0gTWVt
b3J5Q2FjaGU6OnNpbmdsZXRvbigpOworICAgIGlmIChyZXF1ZXN0LmFsbG93c0NhY2hpbmcoKSkg
eworICAgICAgICBpZiAoQ2FjaGVkUmVzb3VyY2UqIGV4aXN0aW5nID0gbWVtb3J5Q2FjaGUucmVz
b3VyY2VGb3JSZXF1ZXN0KHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCksIHNlc3Npb25JRCgpKSkg
eworICAgICAgICAgICAgaWYgKGlzPENhY2hlZENTU1N0eWxlU2hlZXQ+KCpleGlzdGluZykpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PENhY2hlZENTU1N0eWxlU2hlZXQ+KGV4aXN0
aW5nKTsKKyAgICAgICAgICAgIG1lbW9yeUNhY2hlLnJlbW92ZSgqZXhpc3RpbmcpOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKHVybC5zdHJpbmcoKSAhPSByZXF1ZXN0LnJlc291cmNlUmVx
dWVzdCgpLnVybCgpKQorICAgICAgICByZXF1ZXN0Lm11dGFibGVSZXNvdXJjZVJlcXVlc3QoKS5z
ZXRVUkwodXJsKTsKKworICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZENTU1N0eWxlU2hl
ZXQ+IHVzZXJTaGVldCA9IG5ldyBDYWNoZWRDU1NTdHlsZVNoZWV0KHJlcXVlc3QucmVzb3VyY2VS
ZXF1ZXN0KCksIHJlcXVlc3QuY2hhcnNldCgpLCBzZXNzaW9uSUQoKSk7CisKKyAgICBpZiAocmVx
dWVzdC5hbGxvd3NDYWNoaW5nKCkpCisgICAgICAgIG1lbW9yeUNhY2hlLmFkZCgqdXNlclNoZWV0
KTsKKyAgICAvLyBGSVhNRTogbG9hZFJlc291cmNlIGNhbGxzIHNldE93bmluZ0NhY2hlZFJlc291
cmNlTG9hZGVyKCkgaWYgdGhlIHJlc291cmNlIGNvdWxkbid0IGJlIGFkZGVkIHRvIGNhY2hlLiBE
b2VzIHRoaXMgZnVuY3Rpb24gbmVlZCB0byBjYWxsIGl0LCB0b28/CisKKyAgICB1c2VyU2hlZXQt
PmxvYWQoKnRoaXMsIFJlc291cmNlTG9hZGVyT3B0aW9ucyhEb05vdFNlbmRDYWxsYmFja3MsIFNu
aWZmQ29udGVudCwgQnVmZmVyRGF0YSwgQWxsb3dTdG9yZWRDcmVkZW50aWFscywgQ2xpZW50Q3Jl
ZGVudGlhbFBvbGljeTo6TWF5QXNrQ2xpZW50Rm9yQ3JlZGVudGlhbHMsIEZldGNoT3B0aW9uczo6
Q3JlZGVudGlhbHM6OkluY2x1ZGUsIFNraXBTZWN1cml0eUNoZWNrLCBGZXRjaE9wdGlvbnM6Ok1v
ZGU6Ok5vQ29ycywgRG9Ob3RJbmNsdWRlQ2VydGlmaWNhdGVJbmZvLCBDb250ZW50U2VjdXJpdHlQ
b2xpY3lJbXBvc2l0aW9uOjpTa2lwUG9saWN5Q2hlY2ssIERlZmVyc0xvYWRpbmdQb2xpY3k6OkFs
bG93RGVmZXJzTG9hZGluZywgQ2FjaGluZ1BvbGljeTo6QWxsb3dDYWNoaW5nKSk7CisgICAgCisg
ICAgcmV0dXJuIHVzZXJTaGVldDsKK30KKworQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2Ny
aXB0PiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFNjcmlwdChDYWNoZWRSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIGRvd25jYXN0PENhY2hlZFNjcmlwdD4ocmVx
dWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpTY3JpcHQsIHJlcXVlc3QpLmdldCgpKTsKK30K
KworI2lmIEVOQUJMRShYU0xUKQorQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkWFNMU3R5bGVT
aGVldD4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RYU0xTdHlsZVNoZWV0KENhY2hlZFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gZG93bmNhc3Q8Q2FjaGVkWFNM
U3R5bGVTaGVldD4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0
LCByZXF1ZXN0KS5nZXQoKSk7Cit9CisjZW5kaWYKKworQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2Fj
aGVkU1ZHRG9jdW1lbnQ+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0U1ZHRG9jdW1lbnQo
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBkb3duY2FzdDxD
YWNoZWRTVkdEb2N1bWVudD4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpTVkdEb2N1
bWVudFJlc291cmNlLCByZXF1ZXN0KS5nZXQoKSk7Cit9CisKKyNpZiBFTkFCTEUoTElOS19QUkVG
RVRDSCkKK0NhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiBDYWNoZWRSZXNvdXJj
ZUxvYWRlcjo6cmVxdWVzdExpbmtSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBD
YWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgQVNTRVJUKGZyYW1lKCkpOwor
ICAgIEFTU0VSVCh0eXBlID09IENhY2hlZFJlc291cmNlOjpMaW5rUHJlZmV0Y2ggfHwgdHlwZSA9
PSBDYWNoZWRSZXNvdXJjZTo6TGlua1N1YnJlc291cmNlKTsKKyAgICByZXR1cm4gcmVxdWVzdFJl
c291cmNlKHR5cGUsIHJlcXVlc3QpOworfQorI2VuZGlmCisKK0NhY2hlZFJlc291cmNlSGFuZGxl
PENhY2hlZFJhd1Jlc291cmNlPiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdE1lZGlhKENh
Y2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gZG93bmNhc3Q8Q2Fj
aGVkUmF3UmVzb3VyY2U+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6TWVkaWFSZXNv
dXJjZSwgcmVxdWVzdCkuZ2V0KCkpOworfQorCitDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRS
YXdSZXNvdXJjZT4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSYXdSZXNvdXJjZShDYWNo
ZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIGRvd25jYXN0PENhY2hl
ZFJhd1Jlc291cmNlPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNl
LCByZXF1ZXN0KS5nZXQoKSk7Cit9CisKK0NhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJhd1Jl
c291cmNlPiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdE1haW5SZXNvdXJjZShDYWNoZWRS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIGRvd25jYXN0PENhY2hlZFJh
d1Jlc291cmNlPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZSwg
cmVxdWVzdCkuZ2V0KCkpOworfQorCitzdGF0aWMgTWl4ZWRDb250ZW50Q2hlY2tlcjo6Q29udGVu
dFR5cGUgY29udGVudFR5cGVGcm9tUmVzb3VyY2VUeXBlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5
cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlv
L3dlYmFwcHNlYy1taXhlZC1jb250ZW50LyNjYXRlZ29yeS1vcHRpb25hbGx5LWJsb2NrYWJsZQor
ICAgIC8vIEVkaXRvcidzIERyYWZ0LCAxMSBGZWJydWFyeSAyMDE2CisgICAgLy8gMy4xLiBPcHRp
b25hbGx5LWJsb2NrYWJsZSBDb250ZW50CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VS
ZXNvdXJjZToKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpNZWRpYVJlc291cmNlOgorICAgICAg
ICAgICAgcmV0dXJuIE1peGVkQ29udGVudENoZWNrZXI6OkNvbnRlbnRUeXBlOjpBY3RpdmVDYW5X
YXJuOworCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKKyAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpTY3JpcHQ6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJl
c291cmNlOgorICAgICAgICByZXR1cm4gTWl4ZWRDb250ZW50Q2hlY2tlcjo6Q29udGVudFR5cGU6
OkFjdGl2ZTsKKworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgY2FzZSBDYWNoZWRSZXNvdXJj
ZTo6U1ZHRm9udFJlc291cmNlOgorICAgICAgICByZXR1cm4gTWl4ZWRDb250ZW50Q2hlY2tlcjo6
Q29udGVudFR5cGU6OkFjdGl2ZTsKKyNlbmRpZgorCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6
UmF3UmVzb3VyY2U6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U1ZHRG9jdW1lbnRSZXNvdXJj
ZToKKyAgICAgICAgcmV0dXJuIE1peGVkQ29udGVudENoZWNrZXI6OkNvbnRlbnRUeXBlOjpBY3Rp
dmU7CisjaWYgRU5BQkxFKFhTTFQpCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVT
aGVldDoKKyAgICAgICAgcmV0dXJuIE1peGVkQ29udGVudENoZWNrZXI6OkNvbnRlbnRUeXBlOjpB
Y3RpdmU7CisjZW5kaWYKKworI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQorICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRjaDoKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5r
U3VicmVzb3VyY2U6CisgICAgICAgIHJldHVybiBNaXhlZENvbnRlbnRDaGVja2VyOjpDb250ZW50
VHlwZTo6QWN0aXZlOworI2VuZGlmCisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6VGV4dFRyYWNrUmVzb3VyY2U6CisgICAgICAgIHJldHVybiBNaXhl
ZENvbnRlbnRDaGVja2VyOjpDb250ZW50VHlwZTo6QWN0aXZlOworI2VuZGlmCisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBNaXhlZENv
bnRlbnRDaGVja2VyOjpDb250ZW50VHlwZTo6QWN0aXZlOworICAgIH0KK30KKworYm9vbCBDYWNo
ZWRSZXNvdXJjZUxvYWRlcjo6Y2hlY2tJbnNlY3VyZUNvbnRlbnQoQ2FjaGVkUmVzb3VyY2U6OlR5
cGUgdHlwZSwgY29uc3QgVVJMJiB1cmwpIGNvbnN0Cit7CisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OgorI2lmIEVOQUJMRShYU0xUKQorICAgIGNh
c2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6CisjZW5kaWYKKyAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpTVkdEb2N1bWVudFJlc291cmNlOgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OkNTU1N0eWxlU2hlZXQ6CisgICAgICAgIC8vIFRoZXNlIHJlc291cmNlIGNhbiBpbmplY3Qgc2Ny
aXB0IGludG8gdGhlIGN1cnJlbnQgZG9jdW1lbnQgKFNjcmlwdCwKKyAgICAgICAgLy8gWFNMKSBv
ciBleGZpbHRyYXRlIHRoZSBjb250ZW50IG9mIHRoZSBjdXJyZW50IGRvY3VtZW50IChDU1MpLgor
ICAgICAgICBpZiAoRnJhbWUqIGYgPSBmcmFtZSgpKSB7CisgICAgICAgICAgICBpZiAoIWYtPmxv
YWRlcigpLm1peGVkQ29udGVudENoZWNrZXIoKS5jYW5SdW5JbnNlY3VyZUNvbnRlbnQobV9kb2N1
bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgdXJsKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBGcmFtZSYgdG9wID0gZi0+dHJlZSgpLnRvcCgpOworICAgICAgICAg
ICAgaWYgKCZ0b3AgIT0gZiAmJiAhdG9wLmxvYWRlcigpLm1peGVkQ29udGVudENoZWNrZXIoKS5j
YW5SdW5JbnNlY3VyZUNvbnRlbnQodG9wLmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIHVy
bCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpU
ZXh0VHJhY2tSZXNvdXJjZToKKyNlbmRpZgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok1lZGlh
UmVzb3VyY2U6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2U6CisgICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQor
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0ZvbnRSZXNvdXJjZToKKyNlbmRpZgorICAgIGNh
c2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZTogeworICAgICAgICAvLyBUaGVzZSByZXNv
dXJjZXMgY2FuIGNvcnJ1cHQgb25seSB0aGUgZnJhbWUncyBwaXhlbHMuCisgICAgICAgIGlmIChG
cmFtZSogZiA9IGZyYW1lKCkpIHsKKyAgICAgICAgICAgIEZyYW1lJiB0b3BGcmFtZSA9IGYtPnRy
ZWUoKS50b3AoKTsKKyAgICAgICAgICAgIGlmICghdG9wRnJhbWUubG9hZGVyKCkubWl4ZWRDb250
ZW50Q2hlY2tlcigpLmNhbkRpc3BsYXlJbnNlY3VyZUNvbnRlbnQodG9wRnJhbWUuZG9jdW1lbnQo
KS0+c2VjdXJpdHlPcmlnaW4oKSwgY29udGVudFR5cGVGcm9tUmVzb3VyY2VUeXBlKHR5cGUpLCB1
cmwpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TWFpblJlc291cmNlOgorI2lm
IEVOQUJMRShMSU5LX1BSRUZFVENIKQorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVm
ZXRjaDoKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rU3VicmVzb3VyY2U6CisgICAgICAg
IC8vIFByZWZldGNoIGNhbm5vdCBhZmZlY3QgdGhlIGN1cnJlbnQgZG9jdW1lbnQuCisjZW5kaWYK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5s
aW5lIGJvb2wgaXNTYW1lT3JpZ2luRGF0YVVSTChjb25zdCBVUkwmIHVybCwgY29uc3QgUmVzb3Vy
Y2VMb2FkZXJPcHRpb25zJiBvcHRpb25zLCBib29sIGRpZFJlY2VpdmVSZWRpcmVjdFJlc3BvbnNl
KQoreworICAgIHJldHVybiAhZGlkUmVjZWl2ZVJlZGlyZWN0UmVzcG9uc2UgJiYgdXJsLnByb3Rv
Y29sSXNEYXRhKCkgJiYgb3B0aW9ucy5zYW1lT3JpZ2luRGF0YVVSTEZsYWcgPT0gU2FtZU9yaWdp
bkRhdGFVUkxGbGFnOjpTZXQ7Cit9CisKK2Jvb2wgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNhblJl
cXVlc3QoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFJl
c291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucywgYm9vbCBmb3JQcmVsb2FkLCBib29sIGRpZFJl
Y2VpdmVSZWRpcmVjdFJlc3BvbnNlKQoreworICAgIGlmIChkb2N1bWVudCgpICYmICFkb2N1bWVu
dCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5EaXNwbGF5KHVybCkpIHsKKyAgICAgICAgaWYgKCFm
b3JQcmVsb2FkKQorICAgICAgICAgICAgRnJhbWVMb2FkZXI6OnJlcG9ydExvY2FsTG9hZEZhaWxl
ZChmcmFtZSgpLCB1cmwuc3RyaW5nQ2VudGVyRWxsaXBzaXplZFRvTGVuZ3RoKCkpOworICAgICAg
ICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNv
dXJjZSBVUkwgd2FzIG5vdCBhbGxvd2VkIGJ5IFNlY3VyaXR5T3JpZ2luOjpjYW5EaXNwbGF5Iik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHNraXBDb250ZW50U2Vj
dXJpdHlQb2xpY3lDaGVjayA9IG9wdGlvbnMuY29udGVudFNlY3VyaXR5UG9saWN5SW1wb3NpdGlv
biA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3lJbXBvc2l0aW9uOjpTa2lwUG9saWN5Q2hlY2s7Cisg
ICAgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgcmVkaXJl
Y3RSZXNwb25zZVJlY2VpdmVkID0gZGlkUmVjZWl2ZVJlZGlyZWN0UmVzcG9uc2UgPyBDb250ZW50
U2VjdXJpdHlQb2xpY3k6OlJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZDo6WWVzIDogQ29udGVudFNl
Y3VyaXR5UG9saWN5OjpSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQ6Ok5vOworCisgICAgLy8gU29t
ZSB0eXBlcyBvZiByZXNvdXJjZXMgY2FuIGJlIGxvYWRlZCBvbmx5IGZyb20gdGhlIHNhbWUgb3Jp
Z2luLiBPdGhlciB0eXBlcyBvZiByZXNvdXJjZXMsIGxpa2UgSW1hZ2VzLCBTY3JpcHRzLCBhbmQg
Q1NTLCBjYW4gYmUgbG9hZGVkIGZyb20gYW55IFVSTC4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHJlbW92ZSB0aGF0IGNoZWNrIGFuZCBoYW5kbGUgaXQgYnkgc2V0dGluZyB0aGUgY29ycmVjdCBS
ZXNvdXJjZUxvYWRlck9wdGlvbnM6Om1vZGUuCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6TWFpblJlc291cmNlOgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OkltYWdlUmVzb3VyY2U6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoK
KyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6CisjaWYgRU5BQkxFKFNWR19GT05UUykK
KyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdGb250UmVzb3VyY2U6CisjZW5kaWYKKyAgICBj
YXNlIENhY2hlZFJlc291cmNlOjpNZWRpYVJlc291cmNlOgorICAgIGNhc2UgQ2FjaGVkUmVzb3Vy
Y2U6OkZvbnRSZXNvdXJjZToKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpSYXdSZXNvdXJjZToK
KyNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5r
UHJlZmV0Y2g6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1N1YnJlc291cmNlOgorI2Vu
ZGlmCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlRl
eHRUcmFja1Jlc291cmNlOgorI2VuZGlmCisgICAgICAgIGlmIChvcHRpb25zLm1vZGUgPT0gRmV0
Y2hPcHRpb25zOjpNb2RlOjpTYW1lT3JpZ2luICYmICFpc1NhbWVPcmlnaW5EYXRhVVJMKHVybCwg
b3B0aW9ucywgZGlkUmVjZWl2ZVJlZGlyZWN0UmVzcG9uc2UpICYmIW1fZG9jdW1lbnQtPnNlY3Vy
aXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKSkgeworICAgICAgICAgICAgcHJpbnRBY2Nlc3NE
ZW5pZWRNZXNzYWdlKHVybCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U1ZHRG9jdW1lbnRSZXNv
dXJjZToKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHls
ZVNoZWV0OgorICAgICAgICBpZiAoIW1fZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJl
cXVlc3QodXJsKSkgeworICAgICAgICAgICAgcHJpbnRBY2Nlc3NEZW5pZWRNZXNzYWdlKHVybCk7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyNpZiBFTkFCTEUoWFNMVCkKKyAg
ICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgorICAgICAgICBpZiAoIW1fZG9j
dW1lbnQtPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd1NjcmlwdEZyb21Tb3VyY2UodXJs
LCBza2lwQ29udGVudFNlY3VyaXR5UG9saWN5Q2hlY2ssIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZl
ZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisg
ICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OgorICAgICAgICBpZiAoIW1fZG9jdW1lbnQt
PmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd1NjcmlwdEZyb21Tb3VyY2UodXJsLCBza2lw
Q29udGVudFNlY3VyaXR5UG9saWN5Q2hlY2ssIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChmcmFtZSgpICYmICFmcmFtZSgp
LT5zZXR0aW5ncygpLmlzU2NyaXB0RW5hYmxlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0
OgorICAgICAgICBpZiAoIW1fZG9jdW1lbnQtPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxv
d1N0eWxlRnJvbVNvdXJjZSh1cmwsIHNraXBDb250ZW50U2VjdXJpdHlQb2xpY3lDaGVjaywgcmVk
aXJlY3RSZXNwb25zZVJlY2VpdmVkKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U1ZHRG9jdW1lbnRSZXNvdXJjZToK
KyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgorICAgICAgICBpZiAoIW1f
ZG9jdW1lbnQtPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd0ltYWdlRnJvbVNvdXJjZSh1
cmwsIHNraXBDb250ZW50U2VjdXJpdHlQb2xpY3lDaGVjaywgcmVkaXJlY3RSZXNwb25zZVJlY2Vp
dmVkKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisjaWYgRU5B
QkxFKFNWR19GT05UUykKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdGb250UmVzb3VyY2U6
CisjZW5kaWYKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6IHsKKyAgICAg
ICAgaWYgKCFtX2RvY3VtZW50LT5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dGb250RnJv
bVNvdXJjZSh1cmwsIHNraXBDb250ZW50U2VjdXJpdHlQb2xpY3lDaGVjaywgcmVkaXJlY3RSZXNw
b25zZVJlY2VpdmVkKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZToKKyAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpSYXdSZXNvdXJjZToKKyNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkK
KyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rUHJlZmV0Y2g6CisgICAgY2FzZSBDYWNoZWRS
ZXNvdXJjZTo6TGlua1N1YnJlc291cmNlOgorI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ2FjaGVkUmVzb3VyY2U6Ok1lZGlhUmVzb3VyY2U6CisjaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlRleHRUcmFja1Jlc291cmNlOgorI2VuZGlmCisg
ICAgICAgIGlmICghbV9kb2N1bWVudC0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93TWVk
aWFGcm9tU291cmNlKHVybCwgc2tpcENvbnRlbnRTZWN1cml0eVBvbGljeUNoZWNrLCByZWRpcmVj
dFJlc3BvbnNlUmVjZWl2ZWQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICAvLyBTVkcgSW1hZ2VzIGhhdmUgdW5pcXVlIHNlY3VyaXR5IHJ1
bGVzIHRoYXQgcHJldmVudCBhbGwgc3VicmVzb3VyY2UgcmVxdWVzdHMgZXhjZXB0IGZvciBkYXRh
IHVybHMuCisgICAgaWYgKHR5cGUgIT0gQ2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZSAmJiBm
cmFtZSgpICYmIGZyYW1lKCktPnBhZ2UoKSkgeworICAgICAgICBpZiAoZnJhbWUoKS0+cGFnZSgp
LT5jaHJvbWUoKS5jbGllbnQoKS5pc1NWR0ltYWdlQ2hyb21lQ2xpZW50KCkgJiYgIXVybC5wcm90
b2NvbElzRGF0YSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlm
ICghY2FuUmVxdWVzdEluQ29udGVudERpc3Bvc2l0aW9uQXR0YWNobWVudFNhbmRib3godHlwZSwg
dXJsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gTGFzdCBvZiBhbGwsIGNoZWNr
IGZvciBpbnNlY3VyZSBjb250ZW50LiBXZSBkbyB0aGlzIGxhc3Qgc28gdGhhdCB3aGVuCisgICAg
Ly8gZm9sa3MgYmxvY2sgaW5zZWN1cmUgY29udGVudCB3aXRoIGEgQ1NQIHBvbGljeSwgdGhleSBk
b24ndCBnZXQgYSB3YXJuaW5nLgorICAgIC8vIFRoZXknbGwgc3RpbGwgZ2V0IGEgd2FybmluZyBp
biB0aGUgY29uc29sZSBhYm91dCBDU1AgYmxvY2tpbmcgdGhlIGxvYWQuCisKKyAgICAvLyBGSVhN
RTogU2hvdWxkIHdlIGNvbnNpZGVyIGZvclByZWxvYWQgaGVyZT8KKyAgICBpZiAoIWNoZWNrSW5z
ZWN1cmVDb250ZW50KHR5cGUsIHVybCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIENhY2hlZFJlc291cmNlTG9hZGVyOjpjYW5SZXF1ZXN0SW5D
b250ZW50RGlzcG9zaXRpb25BdHRhY2htZW50U2FuZGJveChDYWNoZWRSZXNvdXJjZTo6VHlwZSB0
eXBlLCBjb25zdCBVUkwmIHVybCkgY29uc3QKK3sKKyAgICBEb2N1bWVudCogZG9jdW1lbnQ7Cisg
ICAgCisgICAgLy8gRklYTUU6IERvIHdlIHdhbnQgdG8gZXhwYW5kIHRoaXMgdG8gYWxsIHJlc291
cmNlIHR5cGVzIHRoYXQgdGhlIG1peGVkIGNvbnRlbnQgY2hlY2tlciB3b3VsZCBjb25zaWRlciBh
Y3RpdmUgY29udGVudD8KKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpNYWluUmVzb3VyY2U6CisgICAgICAgIGlmIChhdXRvIG93bmVyRWxlbWVudCA9IGZyYW1l
KCkgPyBmcmFtZSgpLT5vd25lckVsZW1lbnQoKSA6IG51bGxwdHIpIHsKKyAgICAgICAgICAgIGRv
Y3VtZW50ID0gJm93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OkNTU1N0eWxlU2hlZXQ6CisgICAgICAgIGRvY3VtZW50ID0gbV9kb2N1bWVudDsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
aWYgKCFkb2N1bWVudC0+c2hvdWxkRW5mb3JjZUNvbnRlbnREaXNwb3NpdGlvbkF0dGFjaG1lbnRT
YW5kYm94KCkgfHwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBTdHJpbmcgbWVzc2FnZSA9ICJVbnNhZmUgYXR0
ZW1wdCB0byBsb2FkIFVSTCAiICsgdXJsLnN0cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgp
ICsgIiBmcm9tIGRvY3VtZW50IHdpdGggQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudCBh
dCBVUkwgIiArIGRvY3VtZW50LT51cmwoKS5zdHJpbmdDZW50ZXJFbGxpcHNpemVkVG9MZW5ndGgo
KSArICIuIjsKKyAgICBkb2N1bWVudC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6
U2VjdXJpdHksIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIG1lc3NhZ2UpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6c2hvdWxkQ29udGludWVBZnRlck5v
dGlmeWluZ0xvYWRlZEZyb21NZW1vcnlDYWNoZShjb25zdCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKK3sKKyAgICBpZiAoIXJlc291cmNl
IHx8ICFmcmFtZSgpIHx8IHJlc291cmNlLT5zdGF0dXMoKSAhPSBDYWNoZWRSZXNvdXJjZTo6Q2Fj
aGVkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFJlc291cmNlUmVxdWVzdCBuZXdSZXF1
ZXN0ID0gUmVzb3VyY2VSZXF1ZXN0KHJlc291cmNlLT51cmwoKSk7CisgICAgaWYgKHJlcXVlc3Qu
cmVzb3VyY2VSZXF1ZXN0KCkuaGlkZGVuRnJvbUluc3BlY3RvcigpKQorICAgICAgICBuZXdSZXF1
ZXN0LnNldEhpZGRlbkZyb21JbnNwZWN0b3IodHJ1ZSk7CisgICAgZnJhbWUoKS0+bG9hZGVyKCku
bG9hZGVkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUocmVzb3VyY2UsIG5ld1JlcXVlc3QpOworCisg
ICAgLy8gRklYTUUgPGh0dHA6Ly93ZWJraXQub3JnL2IvMTEzMjUxPjogSWYgdGhlIGRlbGVnYXRl
IG1vZGlmaWVzIHRoZSByZXF1ZXN0J3MKKyAgICAvLyBVUkwsIGl0IGlzIG5vIGxvbmdlciBhcHBy
b3ByaWF0ZSB0byB1c2UgdGhpcyBDYWNoZWRSZXNvdXJjZS4KKyAgICByZXR1cm4gIW5ld1JlcXVl
c3QuaXNOdWxsKCk7Cit9CisKK2Jvb2wgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnVwZGF0ZUNhY2hl
ZFJlc291cmNlV2l0aEN1cnJlbnRSZXF1ZXN0KENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+JiByZXNvdXJjZUhhbmRsZSkK
K3sKKyAgICBBU1NFUlQocmVzb3VyY2VIYW5kbGUpOworCisgICAgQ2FjaGVkUmVzb3VyY2UmIHJl
c291cmNlID0gKnJlc291cmNlSGFuZGxlOworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwcm9n
cmVzc2l2ZWx5IGV4dGVuZCB0aGlzIHRvIG90aGVyIHJldXNhYmxlIHJlc291cmNlcworICAgIGlm
IChyZXNvdXJjZS50eXBlKCkgIT0gQ2FjaGVkUmVzb3VyY2U6OlR5cGU6OkltYWdlUmVzb3VyY2Up
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgc2hvdWxkVXBkYXRlID0gcmVzb3Vy
Y2Uub3B0aW9ucygpLm1vZGUgIT0gcmVxdWVzdC5vcHRpb25zKCkubW9kZSB8fCByZXF1ZXN0LnJl
c291cmNlUmVxdWVzdCgpLmh0dHBPcmlnaW4oKSAhPSByZXNvdXJjZS5yZXNvdXJjZVJlcXVlc3Qo
KS5odHRwT3JpZ2luKCk7CisKKyAgICBpZiAoIXNob3VsZFVwZGF0ZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgLy8gRklYTUU6IEZvciBiZWluZyBsb2FkZWQgcmVxdWVzdHMsIHdlIGN1
cnJlbnRseSBkbyBub3QgdXNlIHRoZSBzYW1lIHJlc291cmNlLCBhcyB0aGlzIG1heSBpbmR1Y2Ug
ZXJyb3JzIGluIHRoZSByZXNvdXJjZSByZXNwb25zZSB0YWludGluZy4KKyAgICAvLyBXZSBzaG91
bGQgZmluZCBhIHdheSB0byBpbXByb3ZlIHRoaXMuCisgICAgaWYgKHJlc291cmNlLnN0YXR1cygp
ICE9IENhY2hlZFJlc291cmNlOjpDYWNoZWQpIHsKKyAgICAgICAgcmVxdWVzdC5zZXRDYWNoaW5n
UG9saWN5KENhY2hpbmdQb2xpY3k6OkRpc2FsbG93Q2FjaGluZyk7CisgICAgICAgIHJlc291cmNl
SGFuZGxlID0gbG9hZFJlc291cmNlKHJlc291cmNlLnR5cGUoKSwgcmVxdWVzdCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJlc291cmNlSGFuZGxlID0gY3JlYXRlUmVzb3Vy
Y2UocmVzb3VyY2UudHlwZSgpLCByZXF1ZXN0Lm11dGFibGVSZXNvdXJjZVJlcXVlc3QoKSwgcmVx
dWVzdC5jaGFyc2V0KCksIHNlc3Npb25JRCgpKTsKKyAgICByZXNvdXJjZUhhbmRsZS0+bG9hZEZy
b20ocmVzb3VyY2UsIHJlcXVlc3Qub3B0aW9ucygpLCAqdGhpcyk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2dNZW1vcnlDYWNoZVJlc291cmNlUmVxdWVzdChG
cmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgdmFs
dWUgPSBTdHJpbmcoKSkKK3sKKyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+cGFnZSgpKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKHZhbHVlLmlzTnVsbCgpKQorICAgICAgICBmcmFtZS0+cGFn
ZSgpLT5kaWFnbm9zdGljTG9nZ2luZ0NsaWVudCgpLmxvZ0RpYWdub3N0aWNNZXNzYWdlKERpYWdu
b3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VSZXF1ZXN0S2V5KCksIGRlc2NyaXB0aW9uLCBTaG91
bGRTYW1wbGU6Olllcyk7CisgICAgZWxzZQorICAgICAgICBmcmFtZS0+cGFnZSgpLT5kaWFnbm9z
dGljTG9nZ2luZ0NsaWVudCgpLmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0
aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VSZXF1ZXN0S2V5KCksIGRlc2NyaXB0aW9uLCB2YWx1ZSwg
U2hvdWxkU2FtcGxlOjpZZXMpOworfQorCitDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNv
dXJjZT4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJj
ZTo6VHlwZSB0eXBlLCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgaWYg
KERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCkpCisgICAgICAgIGRvY3VtZW50
LT5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+dXBncmFkZUluc2VjdXJlUmVxdWVzdElmTmVlZGVk
KHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6
Okluc2VjdXJlUmVxdWVzdFR5cGU6OkxvYWQpOworICAgIAorICAgIFVSTCB1cmwgPSByZXF1ZXN0
LnJlc291cmNlUmVxdWVzdCgpLnVybCgpOworICAgIAorICAgIExPRyhSZXNvdXJjZUxvYWRpbmcs
ICJDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJlc291cmNlICclcycsIGNoYXJzZXQgJyVz
JywgcHJpb3JpdHk9JWQsIGZvclByZWxvYWQ9JXUiLCB1cmwuc3RyaW5nQ2VudGVyRWxsaXBzaXpl
ZFRvTGVuZ3RoKCkubGF0aW4xKCkuZGF0YSgpLCByZXF1ZXN0LmNoYXJzZXQoKS5sYXRpbjEoKS5k
YXRhKCksIHJlcXVlc3QucHJpb3JpdHkoKSA/IHN0YXRpY19jYXN0PGludD4ocmVxdWVzdC5wcmlv
cml0eSgpLnZhbHVlKCkpIDogLTEsIHJlcXVlc3QuZm9yUHJlbG9hZCgpKTsKKyAgICAKKyAgICAv
LyBJZiBvbmx5IHRoZSBmcmFnbWVudCBpZGVudGlmaWVycyBkaWZmZXIsIGl0IGlzIHRoZSBzYW1l
IHJlc291cmNlLgorICAgIHVybCA9IE1lbW9yeUNhY2hlOjpyZW1vdmVGcmFnbWVudElkZW50aWZp
ZXJJZk5lZWRlZCh1cmwpOworCisgICAgaWYgKCF1cmwuaXNWYWxpZCgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGlmICghY2FuUmVxdWVzdCh0eXBlLCB1cmwsIHJlcXVlc3Qub3B0
aW9ucygpLCByZXF1ZXN0LmZvclByZWxvYWQoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKyAgICBpZiAoZnJhbWUoKSAmJiBmcmFt
ZSgpLT5tYWluRnJhbWUoKS5wYWdlKCkgJiYgbV9kb2N1bWVudExvYWRlcikgeworICAgICAgICBh
dXRvJiByZXNvdXJjZVJlcXVlc3QgPSByZXF1ZXN0Lm11dGFibGVSZXNvdXJjZVJlcXVlc3QoKTsK
KyAgICAgICAgYXV0byBibG9ja2VkU3RhdHVzID0gZnJhbWUoKS0+bWFpbkZyYW1lKCkucGFnZSgp
LT51c2VyQ29udGVudFByb3ZpZGVyKCkucHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0Zvckxv
YWQocmVzb3VyY2VSZXF1ZXN0LnVybCgpLCB0b1Jlc291cmNlVHlwZSh0eXBlKSwgKm1fZG9jdW1l
bnRMb2FkZXIpOworICAgICAgICBhcHBseUJsb2NrZWRTdGF0dXNUb1JlcXVlc3QoYmxvY2tlZFN0
YXR1cywgcmVzb3VyY2VSZXF1ZXN0KTsKKyAgICAgICAgaWYgKGJsb2NrZWRTdGF0dXMuYmxvY2tl
ZExvYWQpIHsKKyAgICAgICAgICAgIGlmICh0eXBlID09IENhY2hlZFJlc291cmNlOjpUeXBlOjpN
YWluUmVzb3VyY2UpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc291cmNlID0gY3JlYXRlUmVz
b3VyY2UodHlwZSwgcmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCksIHJlcXVlc3QuY2hh
cnNldCgpLCBzZXNzaW9uSUQoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlc291cmNlKTsK
KyAgICAgICAgICAgICAgICByZXNvdXJjZS0+ZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OlN0YXR1czo6
TG9hZEVycm9yKTsKKyAgICAgICAgICAgICAgICByZXNvdXJjZS0+c2V0UmVzb3VyY2VFcnJvcihS
ZXNvdXJjZUVycm9yKENvbnRlbnRFeHRlbnNpb25zOjpXZWJLaXRDb250ZW50QmxvY2tlckRvbWFp
biwgMCwgcmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKSwgV0VCX1VJX1NUUklORygiVGhl
IFVSTCB3YXMgYmxvY2tlZCBieSBhIGNvbnRlbnQgYmxvY2tlciIsICJXZWJLaXRFcnJvckJsb2Nr
ZWRCeUNvbnRlbnRCbG9ja2VyIGRlc2NyaXB0aW9uIikpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVzb3VyY2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgfQorICAgICAgICBpZiAoYmxvY2tlZFN0YXR1cy5tYWRlSFRUUFMKKyAgICAgICAg
ICAgICYmIHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OlR5cGU6Ok1haW5SZXNvdXJjZQorICAgICAg
ICAgICAgJiYgbV9kb2N1bWVudExvYWRlci0+aXNMb2FkaW5nTWFpblJlc291cmNlKCkpIHsKKyAg
ICAgICAgICAgIC8vIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoZSBjb3JyZWN0ICduZXcnIFVSTCBz
aG93cyBpbiB0aGUgbG9jYXRpb24gYmFyLgorICAgICAgICAgICAgbV9kb2N1bWVudExvYWRlci0+
ZnJhbWVMb2FkZXIoKS0+Y2xpZW50KCkuZGlzcGF0Y2hEaWRDaGFuZ2VQcm92aXNpb25hbFVSTCgp
OworICAgICAgICB9CisgICAgICAgIHVybCA9IHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJs
KCk7IC8vIFRoZSBjb250ZW50IGV4dGVuc2lvbiBjb3VsZCBoYXZlIGNoYW5nZWQgaXQgZnJvbSBo
dHRwIHRvIGh0dHBzLgorICAgICAgICB1cmwgPSBNZW1vcnlDYWNoZTo6cmVtb3ZlRnJhZ21lbnRJ
ZGVudGlmaWVySWZOZWVkZWQodXJsKTsgLy8gTWlnaHQgbmVlZCB0byByZW1vdmUgZnJhZ21lbnQg
aWRlbnRpZmllciBhZ2Fpbi4KKyAgICB9CisjZW5kaWYKKworI2lmIEVOQUJMRShXRUJfVElNSU5H
KQorICAgIExvYWRUaW1pbmcgbG9hZFRpbWluZzsKKyAgICBsb2FkVGltaW5nLm1hcmtTdGFydFRp
bWVBbmRGZXRjaFN0YXJ0KCk7CisjZW5kaWYKKworICAgIGF1dG8mIG1lbW9yeUNhY2hlID0gTWVt
b3J5Q2FjaGU6OnNpbmdsZXRvbigpOworICAgIGlmIChyZXF1ZXN0LmFsbG93c0NhY2hpbmcoKSAm
JiBtZW1vcnlDYWNoZS5kaXNhYmxlZCgpKSB7CisgICAgICAgIERvY3VtZW50UmVzb3VyY2VNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5maW5kKHVybC5zdHJpbmcoKSk7Cisg
ICAgICAgIGlmIChpdCAhPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpKSB7CisgICAgICAgICAg
ICBpdC0+dmFsdWUtPnNldE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKG51bGxwdHIpOworICAg
ICAgICAgICAgbV9kb2N1bWVudFJlc291cmNlcy5yZW1vdmUoaXQpOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gU2VlIGlmIHdlIGNhbiB1c2UgYW4gZXhpc3RpbmcgcmVzb3VyY2UgZnJvbSB0
aGUgY2FjaGUuCisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IHJlc291
cmNlOworI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCisgICAgaWYgKGRvY3VtZW50KCkp
CisgICAgICAgIHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLnNldERvbWFpbkZvckNh
Y2hlUGFydGl0aW9uKGRvY3VtZW50KCktPnRvcE9yaWdpbigpLT5kb21haW5Gb3JDYWNoZVBhcnRp
dGlvbigpKTsKKyNlbmRpZgorCisgICAgaWYgKHJlcXVlc3QuYWxsb3dzQ2FjaGluZygpKQorICAg
ICAgICByZXNvdXJjZSA9IG1lbW9yeUNhY2hlLnJlc291cmNlRm9yUmVxdWVzdChyZXF1ZXN0LnJl
c291cmNlUmVxdWVzdCgpLCBzZXNzaW9uSUQoKSk7CisKKyAgICBsb2dNZW1vcnlDYWNoZVJlc291
cmNlUmVxdWVzdChmcmFtZSgpLCByZXNvdXJjZSA/IERpYWdub3N0aWNMb2dnaW5nS2V5czo6aW5N
ZW1vcnlDYWNoZUtleSgpIDogRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpub3RJbk1lbW9yeUNhY2hl
S2V5KCkpOworCisgICAgY29uc3QgUmV2YWxpZGF0aW9uUG9saWN5IHBvbGljeSA9IGRldGVybWlu
ZVJldmFsaWRhdGlvblBvbGljeSh0eXBlLCByZXF1ZXN0LCByZXNvdXJjZS5nZXQoKSk7CisgICAg
c3dpdGNoIChwb2xpY3kpIHsKKyAgICBjYXNlIFJlbG9hZDoKKyAgICAgICAgbWVtb3J5Q2FjaGUu
cmVtb3ZlKCpyZXNvdXJjZSk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgTG9hZDoK
KyAgICAgICAgaWYgKHJlc291cmNlKQorICAgICAgICAgICAgbG9nTWVtb3J5Q2FjaGVSZXNvdXJj
ZVJlcXVlc3QoZnJhbWUoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjppbk1lbW9yeUNhY2hlS2V5
KCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6dW51c2VkS2V5KCkpOworICAgICAgICByZXNvdXJj
ZSA9IGxvYWRSZXNvdXJjZSh0eXBlLCByZXF1ZXN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBSZXZhbGlkYXRlOgorICAgICAgICBpZiAocmVzb3VyY2UpCisgICAgICAgICAgICBsb2dNZW1v
cnlDYWNoZVJlc291cmNlUmVxdWVzdChmcmFtZSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6Omlu
TWVtb3J5Q2FjaGVLZXkoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXZhbGlkYXRpbmdLZXko
KSk7CisgICAgICAgIHJlc291cmNlID0gcmV2YWxpZGF0ZVJlc291cmNlKHJlcXVlc3QsIHJlc291
cmNlLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVc2U6CisgICAgICAgIGlmICgh
dXBkYXRlQ2FjaGVkUmVzb3VyY2VXaXRoQ3VycmVudFJlcXVlc3QocmVxdWVzdCwgcmVzb3VyY2Up
KSB7CisgICAgICAgICAgICBpZiAoIXNob3VsZENvbnRpbnVlQWZ0ZXJOb3RpZnlpbmdMb2FkZWRG
cm9tTWVtb3J5Q2FjaGUocmVxdWVzdCwgcmVzb3VyY2UuZ2V0KCkpKQorICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICAgICAgbG9nTWVtb3J5Q2FjaGVSZXNvdXJjZVJlcXVl
c3QoZnJhbWUoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjppbk1lbW9yeUNhY2hlS2V5KCksIERp
YWdub3N0aWNMb2dnaW5nS2V5czo6dXNlZEtleSgpKTsKKyAgICAgICAgICAgIG1lbW9yeUNhY2hl
LnJlc291cmNlQWNjZXNzZWQoKnJlc291cmNlKTsKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAg
ICAgICAgICAgIGlmIChkb2N1bWVudCgpICYmIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkucmVzb3VyY2VUaW1pbmdFbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBGSVhNRSAoMTYxMTcwKTogVGhlIG5ldHdvcmtMb2FkVGltaW5nIHNob3VsZG4ndCBiZSBzdG9y
ZWQgb24gdGhlIFJlc291cmNlUmVzcG9uc2UuCisgICAgICAgICAgICAgICAgcmVzb3VyY2UtPnJl
c3BvbnNlKCkubmV0d29ya0xvYWRUaW1pbmcoKS5yZXNldCgpOworICAgICAgICAgICAgICAgIGxv
YWRUaW1pbmcuc2V0UmVzcG9uc2VFbmQobW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOwor
ICAgICAgICAgICAgICAgIG1fcmVzb3VyY2VUaW1pbmdJbmZvLnN0b3JlUmVzb3VyY2VUaW1pbmdJ
bml0aWF0b3JJbmZvcm1hdGlvbihyZXNvdXJjZSwgcmVxdWVzdCwgZnJhbWUoKSk7CisgICAgICAg
ICAgICAgICAgbV9yZXNvdXJjZVRpbWluZ0luZm8uYWRkUmVzb3VyY2VUaW1pbmcocmVzb3VyY2Uu
Z2V0KCksICpkb2N1bWVudCgpLCBsb2FkVGltaW5nKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghcmVzb3VyY2UpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFyZXF1ZXN0LmZvclByZWxvYWQoKSB8
fCBwb2xpY3kgIT0gVXNlKQorICAgICAgICByZXNvdXJjZS0+c2V0TG9hZFByaW9yaXR5KHJlcXVl
c3QucHJpb3JpdHkoKSk7CisKKyAgICBpZiAoIXJlcXVlc3QuZm9yUHJlbG9hZCgpICYmIHJlc291
cmNlLT5sb2FkZXIoKSAmJiByZXNvdXJjZS0+cmVzb3VyY2VSZXF1ZXN0KCkuaWdub3JlRm9yUmVx
dWVzdENvdW50KCkpIHsKKyAgICAgICAgcmVzb3VyY2UtPnJlc291cmNlUmVxdWVzdCgpLnNldEln
bm9yZUZvclJlcXVlc3RDb3VudChmYWxzZSk7CisgICAgICAgIGluY3JlbWVudFJlcXVlc3RDb3Vu
dCgqcmVzb3VyY2UpOworICAgIH0KKworICAgIGlmICgocG9saWN5ICE9IFVzZSB8fCByZXNvdXJj
ZS0+c3RpbGxOZWVkc0xvYWQoKSkgJiYgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpOb0RlZmVyID09
IHJlcXVlc3QuZGVmZXIoKSkgeworICAgICAgICByZXNvdXJjZS0+bG9hZCgqdGhpcywgcmVxdWVz
dC5vcHRpb25zKCkpOworCisgICAgICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgaW1tZWRpYXRlIGxv
YWRzLCBidXQgd2UgZG8gc3VwcG9ydCBpbW1lZGlhdGUgZmFpbHVyZS4KKyAgICAgICAgaWYgKHJl
c291cmNlLT5lcnJvck9jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIGlmIChyZXNvdXJjZS0+YWxs
b3dzQ2FjaGluZygpICYmIHJlc291cmNlLT5pbkNhY2hlKCkpCisgICAgICAgICAgICAgICAgbWVt
b3J5Q2FjaGUucmVtb3ZlKCpyZXNvdXJjZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChkb2N1bWVudCgpICYmICFkb2N1bWVudCgpLT5s
b2FkRXZlbnRGaW5pc2hlZCgpICYmICFyZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpLnBy
b3RvY29sSXNEYXRhKCkpCisgICAgICAgIG1fdmFsaWRhdGVkVVJMcy5hZGQocmVxdWVzdC5yZXNv
dXJjZVJlcXVlc3QoKS51cmwoKSk7CisKKyAgICBBU1NFUlQocmVzb3VyY2UtPnVybCgpID09IHVy
bC5zdHJpbmcoKSk7CisgICAgbV9kb2N1bWVudFJlc291cmNlcy5zZXQocmVzb3VyY2UtPnVybCgp
LCByZXNvdXJjZSk7CisgICAgcmV0dXJuIHJlc291cmNlOworfQorCit2b2lkIENhY2hlZFJlc291
cmNlTG9hZGVyOjpkb2N1bWVudERpZEZpbmlzaExvYWRFdmVudCgpCit7CisgICAgbV92YWxpZGF0
ZWRVUkxzLmNsZWFyKCk7Cit9CisKK0NhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNl
PiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmV2YWxpZGF0ZVJlc291cmNlKGNvbnN0IENhY2hlZFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQoreworICAg
IEFTU0VSVChyZXNvdXJjZSk7CisgICAgQVNTRVJUKHJlc291cmNlLT5pbkNhY2hlKCkpOworICAg
IGF1dG8mIG1lbW9yeUNhY2hlID0gTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpOworICAgIEFTU0VS
VCghbWVtb3J5Q2FjaGUuZGlzYWJsZWQoKSk7CisgICAgQVNTRVJUKHJlc291cmNlLT5jYW5Vc2VD
YWNoZVZhbGlkYXRvcigpKTsKKyAgICBBU1NFUlQoIXJlc291cmNlLT5yZXNvdXJjZVRvUmV2YWxp
ZGF0ZSgpKTsKKyAgICBBU1NFUlQocmVzb3VyY2UtPnNlc3Npb25JRCgpID09IHNlc3Npb25JRCgp
KTsKKyAgICBBU1NFUlQocmVzb3VyY2UtPmFsbG93c0NhY2hpbmcoKSk7CisKKyAgICBDYWNoZWRS
ZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gbmV3UmVzb3VyY2UgPSBjcmVhdGVSZXNvdXJj
ZShyZXNvdXJjZS0+dHlwZSgpLCByZXNvdXJjZS0+cmVzb3VyY2VSZXF1ZXN0KCksIHJlc291cmNl
LT5lbmNvZGluZygpLCByZXNvdXJjZS0+c2Vzc2lvbklEKCkpOworCisgICAgTE9HKFJlc291cmNl
TG9hZGluZywgIlJlc291cmNlICVwIGNyZWF0ZWQgdG8gcmV2YWxpZGF0ZSAlcCIsIG5ld1Jlc291
cmNlLmdldCgpLCByZXNvdXJjZSk7CisgICAgbmV3UmVzb3VyY2UtPnNldFJlc291cmNlVG9SZXZh
bGlkYXRlKHJlc291cmNlKTsKKyAgICAKKyAgICBtZW1vcnlDYWNoZS5yZW1vdmUoKnJlc291cmNl
KTsKKyAgICBtZW1vcnlDYWNoZS5hZGQoKm5ld1Jlc291cmNlKTsKKyNpZiBFTkFCTEUoV0VCX1RJ
TUlORykKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5y
ZXNvdXJjZVRpbWluZ0VuYWJsZWQoKSkKKyAgICAgICAgbV9yZXNvdXJjZVRpbWluZ0luZm8uc3Rv
cmVSZXNvdXJjZVRpbWluZ0luaXRpYXRvckluZm9ybWF0aW9uKG5ld1Jlc291cmNlLCByZXF1ZXN0
LCBmcmFtZSgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworI2VuZGlmCisg
ICAgcmV0dXJuIG5ld1Jlc291cmNlOworfQorCitDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRS
ZXNvdXJjZT4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmxvYWRSZXNvdXJjZShDYWNoZWRSZXNvdXJj
ZTo6VHlwZSB0eXBlLCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgYXV0
byYgbWVtb3J5Q2FjaGUgPSBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCk7CisgICAgQVNTRVJUKCFy
ZXF1ZXN0LmFsbG93c0NhY2hpbmcoKSB8fCAhbWVtb3J5Q2FjaGUucmVzb3VyY2VGb3JSZXF1ZXN0
KHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCksIHNlc3Npb25JRCgpKSk7CisKKyAgICBMT0coUmVz
b3VyY2VMb2FkaW5nLCAiTG9hZGluZyBDYWNoZWRSZXNvdXJjZSBmb3IgJyVzJy4iLCByZXF1ZXN0
LnJlc291cmNlUmVxdWVzdCgpLnVybCgpLnN0cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgp
LmxhdGluMSgpLmRhdGEoKSk7CisKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNv
dXJjZT4gcmVzb3VyY2UgPSBjcmVhdGVSZXNvdXJjZSh0eXBlLCByZXF1ZXN0Lm11dGFibGVSZXNv
dXJjZVJlcXVlc3QoKSwgcmVxdWVzdC5jaGFyc2V0KCksIHNlc3Npb25JRCgpKTsKKworICAgIGlm
IChyZXF1ZXN0LmFsbG93c0NhY2hpbmcoKSAmJiAhbWVtb3J5Q2FjaGUuYWRkKCpyZXNvdXJjZSkp
CisgICAgICAgIHJlc291cmNlLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcih0aGlzKTsK
KyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS5yZXNvdXJjZVRpbWluZ0VuYWJsZWQoKSkKKyAgICAgICAgbV9yZXNv
dXJjZVRpbWluZ0luZm8uc3RvcmVSZXNvdXJjZVRpbWluZ0luaXRpYXRvckluZm9ybWF0aW9uKHJl
c291cmNlLCByZXF1ZXN0LCBmcmFtZSgpKTsKKyNlbmRpZgorICAgIHJldHVybiByZXNvdXJjZTsK
K30KKworc3RhdGljIHZvaWQgbG9nUmV2YWxpZGF0aW9uKGNvbnN0IFN0cmluZyYgcmVhc29uLCBE
aWFnbm9zdGljTG9nZ2luZ0NsaWVudCYgbG9nQ2xpZW50KQoreworICAgIGxvZ0NsaWVudC5sb2dE
aWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmNhY2hlZFJl
c291cmNlUmV2YWxpZGF0aW9uS2V5KCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVhc29uS2V5
KCksIHJlYXNvbiwgU2hvdWxkU2FtcGxlOjpZZXMpOworfQorCitzdGF0aWMgdm9pZCBsb2dSZXNv
dXJjZVJldmFsaWRhdGlvbkRlY2lzaW9uKENhY2hlZFJlc291cmNlOjpSZXZhbGlkYXRpb25EZWNp
c2lvbiByZWFzb24sIGNvbnN0IEZyYW1lKiBmcmFtZSkKK3sKKyAgICBpZiAoIWZyYW1lIHx8ICFm
cmFtZS0+cGFnZSgpKQorICAgICAgICByZXR1cm47CisgICAgYXV0byYgbG9nQ2xpZW50ID0gZnJh
bWUtPnBhZ2UoKS0+ZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQoKTsKKyAgICBzd2l0Y2ggKHJlYXNv
bikgeworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJldmFsaWRhdGlvbkRlY2lzaW9uOjpObzoK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmV2YWxpZGF0aW9uRGVj
aXNpb246Olllc0R1ZVRvRXhwaXJlZDoKKyAgICAgICAgbG9nUmV2YWxpZGF0aW9uKERpYWdub3N0
aWNMb2dnaW5nS2V5czo6aXNFeHBpcmVkS2V5KCksIGxvZ0NsaWVudCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJldmFsaWRhdGlvbkRlY2lzaW9uOjpZZXNEdWVU
b05vU3RvcmU6CisgICAgICAgIGxvZ1JldmFsaWRhdGlvbihEaWFnbm9zdGljTG9nZ2luZ0tleXM6
Om5vU3RvcmVLZXkoKSwgbG9nQ2xpZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6UmV2YWxpZGF0aW9uRGVjaXNpb246Olllc0R1ZVRvTm9DYWNoZToKKyAgICAg
ICAgbG9nUmV2YWxpZGF0aW9uKERpYWdub3N0aWNMb2dnaW5nS2V5czo6bm9DYWNoZUtleSgpLCBs
b2dDbGllbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpSZXZh
bGlkYXRpb25EZWNpc2lvbjo6WWVzRHVlVG9DYWNoZVBvbGljeToKKyAgICAgICAgbG9nUmV2YWxp
ZGF0aW9uKERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVsb2FkS2V5KCksIGxvZ0NsaWVudCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OlJldmFsaWRh
dGlvblBvbGljeSBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGV0ZXJtaW5lUmV2YWxpZGF0aW9uUG9s
aWN5KENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIENhY2hlZFJlc291cmNlUmVxdWVzdCYgY2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0LCBDYWNoZWRSZXNvdXJjZSogZXhpc3RpbmdSZXNvdXJjZSkgY29u
c3QKK3sKKyAgICBhdXRvJiByZXF1ZXN0ID0gY2FjaGVkUmVzb3VyY2VSZXF1ZXN0LnJlc291cmNl
UmVxdWVzdCgpOworCisgICAgaWYgKCFleGlzdGluZ1Jlc291cmNlKQorICAgICAgICByZXR1cm4g
TG9hZDsKKworICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhIHByZWxvYWQgZ29pbmcgZm9yIHRoaXMg
VVJMLgorICAgIGlmIChjYWNoZWRSZXNvdXJjZVJlcXVlc3QuZm9yUHJlbG9hZCgpICYmIGV4aXN0
aW5nUmVzb3VyY2UtPmlzUHJlbG9hZGVkKCkpCisgICAgICAgIHJldHVybiBVc2U7CisKKyAgICAv
LyBJZiB0aGUgc2FtZSBVUkwgaGFzIGJlZW4gbG9hZGVkIGFzIGEgZGlmZmVyZW50IHR5cGUsIHdl
IG5lZWQgdG8gcmVsb2FkLgorICAgIGlmIChleGlzdGluZ1Jlc291cmNlLT50eXBlKCkgIT0gdHlw
ZSkgeworICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
OmRldGVybWluZVJldmFsaWRhdGlvblBvbGljeSByZWxvYWRpbmcgZHVlIHRvIHR5cGUgbWlzbWF0
Y2guIik7CisgICAgICAgIGxvZ01lbW9yeUNhY2hlUmVzb3VyY2VSZXF1ZXN0KGZyYW1lKCksIERp
YWdub3N0aWNMb2dnaW5nS2V5czo6aW5NZW1vcnlDYWNoZUtleSgpLCBEaWFnbm9zdGljTG9nZ2lu
Z0tleXM6OnVudXNlZFJlYXNvblR5cGVNaXNtYXRjaEtleSgpKTsKKyAgICAgICAgcmV0dXJuIFJl
bG9hZDsKKyAgICB9CisKKyAgICBpZiAoIWV4aXN0aW5nUmVzb3VyY2UtPnZhcnlIZWFkZXJWYWx1
ZXNNYXRjaChyZXF1ZXN0LCAqdGhpcykpCisgICAgICAgIHJldHVybiBSZWxvYWQ7CisKKyAgICBh
dXRvKiB0ZXh0RGVjb2RlciA9IGV4aXN0aW5nUmVzb3VyY2UtPnRleHRSZXNvdXJjZURlY29kZXIo
KTsKKyAgICBpZiAodGV4dERlY29kZXIgJiYgIXRleHREZWNvZGVyLT5oYXNFcXVhbEVuY29kaW5n
Rm9yQ2hhcnNldChjYWNoZWRSZXNvdXJjZVJlcXVlc3QuY2hhcnNldCgpKSkKKyAgICAgICAgcmV0
dXJuIFJlbG9hZDsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIHRoZSBzYW1lIGNhY2hl
IHBvbGljeSBmb3IgYWxsIHJlc291cmNlIHR5cGVzLiBUaGUgcmF3IHJlc291cmNlIHBvbGljeSBp
cyBvdmVybHkgc3RyaWN0CisgICAgLy8gICAgICAgIHdoaWxlIHRoZSBub3JtYWwgc3VicmVzb3Vy
Y2UgcG9saWN5IGlzIHRvbyBsb29zZS4KKyAgICBpZiAoZXhpc3RpbmdSZXNvdXJjZS0+aXNNYWlu
T3JNZWRpYU9yUmF3UmVzb3VyY2UoKSAmJiBmcmFtZSgpKSB7CisgICAgICAgIGJvb2wgc3RyaWN0
UG9saWN5RGlzYWJsZWQgPSBmcmFtZSgpLT5sb2FkZXIoKS5pc1N0cmljdFJhd1Jlc291cmNlVmFs
aWRhdGlvblBvbGljeURpc2FibGVkRm9yVGVzdGluZygpOworICAgICAgICBib29sIGNhblJldXNl
UmF3UmVzb3VyY2UgPSBzdHJpY3RQb2xpY3lEaXNhYmxlZCB8fCBkb3duY2FzdDxDYWNoZWRSYXdS
ZXNvdXJjZT4oKmV4aXN0aW5nUmVzb3VyY2UpLmNhblJldXNlKHJlcXVlc3QpOworICAgICAgICBp
ZiAoIWNhblJldXNlUmF3UmVzb3VyY2UpCisgICAgICAgICAgICByZXR1cm4gUmVsb2FkOworICAg
IH0KKworICAgIC8vIENvbmRpdGlvbmFsIHJlcXVlc3RzIHNob3VsZCBoYXZlIGZhaWxlZCBjYW5S
ZXVzZSBjaGVjay4KKyAgICBBU1NFUlQoIXJlcXVlc3QuaXNDb25kaXRpb25hbCgpKTsKKworICAg
IC8vIERvIG5vdCBsb2FkIGZyb20gY2FjaGUgaWYgaW1hZ2VzIGFyZSBub3QgZW5hYmxlZC4gVGhl
IGxvYWQgZm9yIHRoaXMgaW1hZ2Ugd2lsbCBiZSBibG9ja2VkCisgICAgLy8gaW4gQ2FjaGVkSW1h
Z2U6OmxvYWQuCisgICAgaWYgKGNhY2hlZFJlc291cmNlUmVxdWVzdC5kZWZlcigpID09IENhY2hl
ZFJlc291cmNlUmVxdWVzdDo6RGVmZXJyZWRCeUNsaWVudCkKKyAgICAgICAgcmV0dXJuIFJlbG9h
ZDsKKworICAgIC8vIERvbid0IHJlbG9hZCByZXNvdXJjZXMgd2hpbGUgcGFzdGluZy4KKyAgICBp
ZiAobV9hbGxvd1N0YWxlUmVzb3VyY2VzKQorICAgICAgICByZXR1cm4gVXNlOworCisgICAgLy8g
QWx3YXlzIHVzZSBwcmVsb2Fkcy4KKyAgICBpZiAoZXhpc3RpbmdSZXNvdXJjZS0+aXNQcmVsb2Fk
ZWQoKSkKKyAgICAgICAgcmV0dXJuIFVzZTsKKworICAgIC8vIFdlIGNhbiBmaW5kIHJlc291cmNl
cyB0aGF0IGFyZSBiZWluZyB2YWxpZGF0ZWQgZnJvbSBjYWNoZSBvbmx5IHdoZW4gdmFsaWRhdGlv
biBpcyBqdXN0IHN1Y2Nlc3NmdWxseSBjb21wbGV0aW5nLgorICAgIGlmIChleGlzdGluZ1Jlc291
cmNlLT52YWxpZGF0aW9uQ29tcGxldGluZygpKQorICAgICAgICByZXR1cm4gVXNlOworICAgIEFT
U0VSVCghZXhpc3RpbmdSZXNvdXJjZS0+dmFsaWRhdGlvbkluUHJvZ3Jlc3MoKSk7CisKKyAgICAv
LyBWYWxpZGF0ZSB0aGUgcmVkaXJlY3QgY2hhaW4uCisgICAgYm9vbCBjYWNoZVBvbGljeUlzSGlz
dG9yeUJ1ZmZlciA9IGNhY2hlUG9saWN5KHR5cGUpID09IENhY2hlUG9saWN5SGlzdG9yeUJ1ZmZl
cjsKKyAgICBpZiAoIWV4aXN0aW5nUmVzb3VyY2UtPnJlZGlyZWN0Q2hhaW5BbGxvd3NSZXVzZShj
YWNoZVBvbGljeUlzSGlzdG9yeUJ1ZmZlciA/IFJldXNlRXhwaXJlZFJlZGlyZWN0aW9uIDogRG9O
b3RSZXVzZUV4cGlyZWRSZWRpcmVjdGlvbikpIHsKKyAgICAgICAgTE9HKFJlc291cmNlTG9hZGlu
ZywgIkNhY2hlZFJlc291cmNlTG9hZGVyOjpkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3kgcmVs
b2FkaW5nIGR1ZSB0byBub3QgY2FjaGVkIG9yIGV4cGlyZWQgcmVkaXJlY3Rpb25zLiIpOworICAg
ICAgICBsb2dNZW1vcnlDYWNoZVJlc291cmNlUmVxdWVzdChmcmFtZSgpLCBEaWFnbm9zdGljTG9n
Z2luZ0tleXM6OmluTWVtb3J5Q2FjaGVLZXkoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjp1bnVz
ZWRSZWFzb25SZWRpcmVjdENoYWluS2V5KCkpOworICAgICAgICByZXR1cm4gUmVsb2FkOworICAg
IH0KKworICAgIC8vIENhY2hlUG9saWN5SGlzdG9yeUJ1ZmZlciB1c2VzIHRoZSBjYWNoZSBleGNl
cHQgaWYgdGhpcyBpcyBhIG1haW4gcmVzb3VyY2Ugd2l0aCAiY2FjaGUtY29udHJvbDogbm8tc3Rv
cmUiLgorICAgIGlmIChjYWNoZVBvbGljeUlzSGlzdG9yeUJ1ZmZlcikgeworICAgICAgICAvLyBG
SVhNRTogSWdub3JpbmcgImNhY2hlLWNvbnRyb2w6IG5vLWNhY2hlIiBmb3Igc3ViLXJlc291cmNl
cyBvbiBoaXN0b3J5IG5hdmlnYXRpb24gYnV0IG5vdCB0aGUgbWFpbgorICAgICAgICAvLyByZXNv
dXJjZSBpcyBpbmNvbnNpc3RlbnQuIFdlIHNob3VsZCBwcm9iYWJseSBoYXJtb25pemUgdGhpcy4K
KyAgICAgICAgaWYgKCFleGlzdGluZ1Jlc291cmNlLT5yZXNwb25zZSgpLmNhY2hlQ29udHJvbENv
bnRhaW5zTm9TdG9yZSgpIHx8IHR5cGUgIT0gQ2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZSkK
KyAgICAgICAgICAgIHJldHVybiBVc2U7CisgICAgfQorCisgICAgLy8gRG9uJ3QgcmV1c2UgcmVz
b3VyY2VzIHdpdGggQ2FjaGUtY29udHJvbDogbm8tc3RvcmUuCisgICAgaWYgKGV4aXN0aW5nUmVz
b3VyY2UtPnJlc3BvbnNlKCkuY2FjaGVDb250cm9sQ29udGFpbnNOb1N0b3JlKCkpIHsKKyAgICAg
ICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlTG9hZGVyOjpkZXRlcm1pbmVS
ZXZhbGlkYXRpb25Qb2xpY3kgcmVsb2FkaW5nIGR1ZSB0byBDYWNoZS1jb250cm9sOiBuby1zdG9y
ZS4iKTsKKyAgICAgICAgbG9nTWVtb3J5Q2FjaGVSZXNvdXJjZVJlcXVlc3QoZnJhbWUoKSwgRGlh
Z25vc3RpY0xvZ2dpbmdLZXlzOjppbk1lbW9yeUNhY2hlS2V5KCksIERpYWdub3N0aWNMb2dnaW5n
S2V5czo6dW51c2VkUmVhc29uTm9TdG9yZUtleSgpKTsKKyAgICAgICAgcmV0dXJuIFJlbG9hZDsK
KyAgICB9CisKKyAgICAvLyBJZiBjcmVkZW50aWFscyB3ZXJlIHNlbnQgd2l0aCB0aGUgcHJldmlv
dXMgcmVxdWVzdCBhbmQgd29uJ3QgYmUKKyAgICAvLyB3aXRoIHRoaXMgb25lLCBvciB2aWNlIHZl
cnNhLCByZS1mZXRjaCB0aGUgcmVzb3VyY2UuCisgICAgLy8KKyAgICAvLyBUaGlzIGhlbHBzIHdp
dGggdGhlIGNhc2Ugd2hlcmUgdGhlIHNlcnZlciBzZW5kcyBiYWNrCisgICAgLy8gIkFjY2Vzcy1D
b250cm9sLUFsbG93LU9yaWdpbjogKiIgYWxsIHRoZSB0aW1lLCBidXQgc29tZSBvZiB0aGUKKyAg
ICAvLyBjbGllbnQncyByZXF1ZXN0cyBhcmUgbWFkZSB3aXRob3V0IENPUlMgYW5kIHNvbWUgd2l0
aC4KKyAgICBpZiAoZXhpc3RpbmdSZXNvdXJjZS0+cmVzb3VyY2VSZXF1ZXN0KCkuYWxsb3dDb29r
aWVzKCkgIT0gcmVxdWVzdC5hbGxvd0Nvb2tpZXMoKSkgeworICAgICAgICBMT0coUmVzb3VyY2VM
b2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRldGVybWluZVJldmFsaWRhdGlvblBvbGlj
eSByZWxvYWRpbmcgZHVlIHRvIGRpZmZlcmVuY2UgaW4gY3JlZGVudGlhbHMgc2V0dGluZ3MuIik7
CisgICAgICAgIGxvZ01lbW9yeUNhY2hlUmVzb3VyY2VSZXF1ZXN0KGZyYW1lKCksIERpYWdub3N0
aWNMb2dnaW5nS2V5czo6aW5NZW1vcnlDYWNoZUtleSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6
OnVudXNlZFJlYXNvbkNyZWRlbnRpYWxTZXR0aW5nc0tleSgpKTsKKyAgICAgICAgcmV0dXJuIFJl
bG9hZDsKKyAgICB9CisKKyAgICAvLyBEdXJpbmcgdGhlIGluaXRpYWwgbG9hZCwgYXZvaWQgbG9h
ZGluZyB0aGUgc2FtZSByZXNvdXJjZSBtdWx0aXBsZSB0aW1lcyBmb3IgYSBzaW5nbGUgZG9jdW1l
bnQsIGV2ZW4gaWYgdGhlIGNhY2hlIHBvbGljaWVzIHdvdWxkIHRlbGwgdXMgdG8uCisgICAgaWYg
KGRvY3VtZW50KCkgJiYgIWRvY3VtZW50KCktPmxvYWRFdmVudEZpbmlzaGVkKCkgJiYgbV92YWxp
ZGF0ZWRVUkxzLmNvbnRhaW5zKGV4aXN0aW5nUmVzb3VyY2UtPnVybCgpKSkKKyAgICAgICAgcmV0
dXJuIFVzZTsKKworICAgIC8vIENhY2hlUG9saWN5UmVsb2FkIGFsd2F5cyByZWxvYWRzCisgICAg
aWYgKGNhY2hlUG9saWN5KHR5cGUpID09IENhY2hlUG9saWN5UmVsb2FkKSB7CisgICAgICAgIExP
RyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGV0ZXJtaW5lUmV2YWxp
ZGF0aW9uUG9saWN5IHJlbG9hZGluZyBkdWUgdG8gQ2FjaGVQb2xpY3lSZWxvYWQuIik7CisgICAg
ICAgIGxvZ01lbW9yeUNhY2hlUmVzb3VyY2VSZXF1ZXN0KGZyYW1lKCksIERpYWdub3N0aWNMb2dn
aW5nS2V5czo6aW5NZW1vcnlDYWNoZUtleSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnVudXNl
ZFJlYXNvblJlbG9hZEtleSgpKTsKKyAgICAgICAgcmV0dXJuIFJlbG9hZDsKKyAgICB9CisgICAg
CisgICAgLy8gV2UnbGwgdHJ5IHRvIHJlbG9hZCB0aGUgcmVzb3VyY2UgaWYgaXQgZmFpbGVkIGxh
c3QgdGltZS4KKyAgICBpZiAoZXhpc3RpbmdSZXNvdXJjZS0+ZXJyb3JPY2N1cnJlZCgpKSB7Cisg
ICAgICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGV0ZXJt
aW5lUmV2YWxpZGF0aW9uUG9saWN5ZSByZWxvYWRpbmcgZHVlIHRvIHJlc291cmNlIGJlaW5nIGlu
IHRoZSBlcnJvciBzdGF0ZSIpOworICAgICAgICBsb2dNZW1vcnlDYWNoZVJlc291cmNlUmVxdWVz
dChmcmFtZSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmluTWVtb3J5Q2FjaGVLZXkoKSwgRGlh
Z25vc3RpY0xvZ2dpbmdLZXlzOjp1bnVzZWRSZWFzb25FcnJvcktleSgpKTsKKyAgICAgICAgcmV0
dXJuIFJlbG9hZDsKKyAgICB9CisgICAgCisgICAgLy8gRm9yIHJlc291cmNlcyB0aGF0IGFyZSBu
b3QgeWV0IGxvYWRlZCB3ZSBpZ25vcmUgdGhlIGNhY2hlIHBvbGljeS4KKyAgICBpZiAoZXhpc3Rp
bmdSZXNvdXJjZS0+aXNMb2FkaW5nKCkpCisgICAgICAgIHJldHVybiBVc2U7CisKKyAgICBhdXRv
IHJldmFsaWRhdGlvbkRlY2lzaW9uID0gZXhpc3RpbmdSZXNvdXJjZS0+bWFrZVJldmFsaWRhdGlv
bkRlY2lzaW9uKGNhY2hlUG9saWN5KHR5cGUpKTsKKyAgICBsb2dSZXNvdXJjZVJldmFsaWRhdGlv
bkRlY2lzaW9uKHJldmFsaWRhdGlvbkRlY2lzaW9uLCBmcmFtZSgpKTsKKworICAgIC8vIENoZWNr
IGlmIHRoZSBjYWNoZSBoZWFkZXJzIHJlcXVpcmVzIHVzIHRvIHJldmFsaWRhdGUgKGNhY2hlIGV4
cGlyYXRpb24gZm9yIGV4YW1wbGUpLgorICAgIGlmIChyZXZhbGlkYXRpb25EZWNpc2lvbiAhPSBD
YWNoZWRSZXNvdXJjZTo6UmV2YWxpZGF0aW9uRGVjaXNpb246Ok5vKSB7CisgICAgICAgIC8vIFNl
ZSBpZiB0aGUgcmVzb3VyY2UgaGFzIHVzYWJsZSBFVGFnIG9yIExhc3QtbW9kaWZpZWQgaGVhZGVy
cy4KKyAgICAgICAgaWYgKGV4aXN0aW5nUmVzb3VyY2UtPmNhblVzZUNhY2hlVmFsaWRhdG9yKCkp
CisgICAgICAgICAgICByZXR1cm4gUmV2YWxpZGF0ZTsKKyAgICAgICAgCisgICAgICAgIC8vIE5v
LCBtdXN0IHJlbG9hZC4KKyAgICAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJlc291
cmNlTG9hZGVyOjpkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3kgcmVsb2FkaW5nIGR1ZSB0byBt
aXNzaW5nIGNhY2hlIHZhbGlkYXRvcnMuIik7CisgICAgICAgIGxvZ01lbW9yeUNhY2hlUmVzb3Vy
Y2VSZXF1ZXN0KGZyYW1lKCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6aW5NZW1vcnlDYWNoZUtl
eSgpLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnVudXNlZFJlYXNvbk11c3RSZXZhbGlkYXRlTm9W
YWxpZGF0b3JLZXkoKSk7CisgICAgICAgIHJldHVybiBSZWxvYWQ7CisgICAgfQorCisgICAgcmV0
dXJuIFVzZTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cHJpbnRBY2Nlc3NEZW5p
ZWRNZXNzYWdlKGNvbnN0IFVSTCYgdXJsKSBjb25zdAoreworICAgIGlmICh1cmwuaXNOdWxsKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgU3RyaW5nIG1lc3NhZ2U7CisgICAgaWYgKCFtX2RvY3VtZW50IHx8IG1fZG9jdW1lbnQt
PnVybCgpLmlzTnVsbCgpKQorICAgICAgICBtZXNzYWdlID0gIlVuc2FmZSBhdHRlbXB0IHRvIGxv
YWQgVVJMICIgKyB1cmwuc3RyaW5nQ2VudGVyRWxsaXBzaXplZFRvTGVuZ3RoKCkgKyAnLic7Cisg
ICAgZWxzZQorICAgICAgICBtZXNzYWdlID0gIlVuc2FmZSBhdHRlbXB0IHRvIGxvYWQgVVJMICIg
KyB1cmwuc3RyaW5nQ2VudGVyRWxsaXBzaXplZFRvTGVuZ3RoKCkgKyAiIGZyb20gZnJhbWUgd2l0
aCBVUkwgIiArIG1fZG9jdW1lbnQtPnVybCgpLnN0cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0
aCgpICsgIi4gRG9tYWlucywgcHJvdG9jb2xzIGFuZCBwb3J0cyBtdXN0IG1hdGNoLlxuIjsKKwor
ICAgIGZyYW1lKCktPmRvY3VtZW50KCktPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6
OlNlY3VyaXR5LCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBtZXNzYWdlKTsKK30KKwordm9pZCBDYWNo
ZWRSZXNvdXJjZUxvYWRlcjo6c2V0QXV0b0xvYWRJbWFnZXMoYm9vbCBlbmFibGUpCit7CisgICAg
aWYgKGVuYWJsZSA9PSBtX2F1dG9Mb2FkSW1hZ2VzKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2F1dG9Mb2FkSW1hZ2VzID0gZW5hYmxlOworCisgICAgaWYgKCFtX2F1dG9Mb2FkSW1hZ2VzKQor
ICAgICAgICByZXR1cm47CisKKyAgICByZWxvYWRJbWFnZXNJZk5vdERlZmVycmVkKCk7Cit9CisK
K3ZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnNldEltYWdlc0VuYWJsZWQoYm9vbCBlbmFibGUp
Cit7CisgICAgaWYgKGVuYWJsZSA9PSBtX2ltYWdlc0VuYWJsZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIG1faW1hZ2VzRW5hYmxlZCA9IGVuYWJsZTsKKworICAgIGlmICghbV9pbWFnZXNFbmFi
bGVkKQorICAgICAgICByZXR1cm47CisKKyAgICByZWxvYWRJbWFnZXNJZk5vdERlZmVycmVkKCk7
Cit9CisKK2Jvb2wgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNsaWVudERlZmVyc0ltYWdlKGNvbnN0
IFVSTCYpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2ltYWdlc0VuYWJsZWQ7Cit9CisKK2Jvb2wg
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnNob3VsZFBlcmZvcm1JbWFnZUxvYWQoY29uc3QgVVJMJiB1
cmwpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYXV0b0xvYWRJbWFnZXMgfHwgdXJsLnByb3RvY29s
SXNEYXRhKCk7Cit9CisKK2Jvb2wgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnNob3VsZERlZmVySW1h
Z2VMb2FkKGNvbnN0IFVSTCYgdXJsKSBjb25zdAoreworICAgIHJldHVybiBjbGllbnREZWZlcnNJ
bWFnZSh1cmwpIHx8ICFzaG91bGRQZXJmb3JtSW1hZ2VMb2FkKHVybCk7Cit9CisKK3ZvaWQgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OnJlbG9hZEltYWdlc0lmTm90RGVmZXJyZWQoKQoreworICAgIGZv
ciAoYXV0byYgcmVzb3VyY2UgOiBtX2RvY3VtZW50UmVzb3VyY2VzLnZhbHVlcygpKSB7CisgICAg
ICAgIGlmIChpczxDYWNoZWRJbWFnZT4oKnJlc291cmNlKSAmJiByZXNvdXJjZS0+c3RpbGxOZWVk
c0xvYWQoKSAmJiAhY2xpZW50RGVmZXJzSW1hZ2UocmVzb3VyY2UtPnVybCgpKSkKKyAgICAgICAg
ICAgIGRvd25jYXN0PENhY2hlZEltYWdlPigqcmVzb3VyY2UpLmxvYWQoKnRoaXMsIGRlZmF1bHRD
YWNoZWRSZXNvdXJjZU9wdGlvbnMoKSk7CisgICAgfQorfQorCitDYWNoZVBvbGljeSBDYWNoZWRS
ZXNvdXJjZUxvYWRlcjo6Y2FjaGVQb2xpY3koQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSkgY29u
c3QKK3sKKyAgICBGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUp
CisgICAgICAgIHJldHVybiBDYWNoZVBvbGljeVZlcmlmeTsKKworICAgIGlmICh0eXBlICE9IENh
Y2hlZFJlc291cmNlOjpNYWluUmVzb3VyY2UpCisgICAgICAgIHJldHVybiBmcmFtZS0+bG9hZGVy
KCkuc3VicmVzb3VyY2VDYWNoZVBvbGljeSgpOworCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFt
ZS0+cGFnZSgpKSB7CisgICAgICAgIGlmIChwYWdlLT5pc1Jlc291cmNlQ2FjaGluZ0Rpc2FibGVk
KCkpCisgICAgICAgICAgICByZXR1cm4gQ2FjaGVQb2xpY3lSZWxvYWQ7CisgICAgfQorCisgICAg
c3dpdGNoIChmcmFtZS0+bG9hZGVyKCkubG9hZFR5cGUoKSkgeworICAgIGNhc2UgRnJhbWVMb2Fk
VHlwZTo6UmVsb2FkRnJvbU9yaWdpbjoKKyAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OlJlbG9hZDoK
KyAgICAgICAgcmV0dXJuIENhY2hlUG9saWN5UmVsb2FkOworICAgIGNhc2UgRnJhbWVMb2FkVHlw
ZTo6QmFjazoKKyAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OkZvcndhcmQ6CisgICAgY2FzZSBGcmFt
ZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQ6CisgICAgICAgIC8vIERvIG5vdCByZXZhbGlk
YXRlIGNhY2hlZCBtYWluIHJlc291cmNlIG9uIGJhY2svZm9yd2FyZCBuYXZpZ2F0aW9uLgorICAg
ICAgICByZXR1cm4gQ2FjaGVQb2xpY3lIaXN0b3J5QnVmZmVyOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBDYWNoZVBvbGljeVZlcmlmeTsKKyAgICB9Cit9CisKK3ZvaWQgQ2FjaGVkUmVz
b3VyY2VMb2FkZXI6OnJlbW92ZUNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlJiByZXNvdXJj
ZSkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmZpbmQocmVzb3VyY2UudXJsKCkpOworICAgIGlmIChp
dCAhPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpKQorICAgICAgICBBU1NFUlQoaXQtPnZhbHVl
LmdldCgpID09ICZyZXNvdXJjZSk7CisjZW5kaWYKKyAgICBtX2RvY3VtZW50UmVzb3VyY2VzLnJl
bW92ZShyZXNvdXJjZS51cmwoKSk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6Omxv
YWREb25lKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgYm9vbCBzaG91bGRQZXJmb3JtUG9zdExv
YWRBY3Rpb25zKQoreworICAgIFJlZlB0cjxEb2N1bWVudExvYWRlcj4gcHJvdGVjdERvY3VtZW50
TG9hZGVyKG1fZG9jdW1lbnRMb2FkZXIpOworICAgIFJlZlB0cjxEb2N1bWVudD4gcHJvdGVjdERv
Y3VtZW50KG1fZG9jdW1lbnQpOworCisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgaWYgKHJl
c291cmNlICYmIGRvY3VtZW50KCkgJiYgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS5yZXNvdXJjZVRpbWluZ0VuYWJsZWQoKSkKKyAgICAgICAgbV9yZXNvdXJjZVRpbWlu
Z0luZm8uYWRkUmVzb3VyY2VUaW1pbmcocmVzb3VyY2UsICpkb2N1bWVudCgpLCByZXNvdXJjZS0+
bG9hZGVyKCktPmxvYWRUaW1pbmcoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZXNvdXJj
ZSk7CisjZW5kaWYKKworICAgIGlmIChmcmFtZSgpKQorICAgICAgICBmcmFtZSgpLT5sb2FkZXIo
KS5sb2FkRG9uZSgpOworCisgICAgaWYgKHNob3VsZFBlcmZvcm1Qb3N0TG9hZEFjdGlvbnMpCisg
ICAgICAgIHBlcmZvcm1Qb3N0TG9hZEFjdGlvbnMoKTsKKworICAgIGlmICghbV9nYXJiYWdlQ29s
bGVjdERvY3VtZW50UmVzb3VyY2VzVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9nYXJiYWdl
Q29sbGVjdERvY3VtZW50UmVzb3VyY2VzVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCisvLyBH
YXJiYWdlIGNvbGxlY3RpbmcgbV9kb2N1bWVudFJlc291cmNlcyBpcyBhIHdvcmthcm91bmQgZm9y
IHRoZQorLy8gQ2FjaGVkUmVzb3VyY2VIYW5kbGVzIG9uIHRoZSBSSFMgYmVpbmcgc3Ryb25nIHJl
ZmVyZW5jZXMuIElkZWFsbHkgdGhpcworLy8gd291bGQgYmUgYSB3ZWFrIG1hcCwgaG93ZXZlciBD
YWNoZWRSZXNvdXJjZUhhbmRsZXMgcGVyZm9ybSBhZGRpdGlvbmFsCisvLyBib29ra2VlcGluZyBv
biBDYWNoZWRSZXNvdXJjZXMsIHNvIGluc3RlYWQgcHNldWRvLUdDIHRoZW0gLS0gd2hlbiB0aGUK
Ky8vIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIDEsIG1fZG9jdW1lbnRSZXNvdXJjZXMgaXMgdGhl
IG9ubHkgcmVmZXJlbmNlLCBzbworLy8gcmVtb3ZlIGl0IGZyb20gdGhlIG1hcC4KK3ZvaWQgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OmdhcmJhZ2VDb2xsZWN0RG9jdW1lbnRSZXNvdXJjZXMoKQorewor
ICAgIHR5cGVkZWYgVmVjdG9yPFN0cmluZywgMTA+IFN0cmluZ1ZlY3RvcjsKKyAgICBTdHJpbmdW
ZWN0b3IgcmVzb3VyY2VzVG9EZWxldGU7CisKKyAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogbV9k
b2N1bWVudFJlc291cmNlcykgeworICAgICAgICBpZiAocmVzb3VyY2UudmFsdWUtPmhhc09uZUhh
bmRsZSgpKSB7CisgICAgICAgICAgICByZXNvdXJjZXNUb0RlbGV0ZS5hcHBlbmQocmVzb3VyY2Uu
a2V5KTsKKyAgICAgICAgICAgIHJlc291cmNlLnZhbHVlLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJj
ZUxvYWRlcihudWxscHRyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byYgcmVz
b3VyY2UgOiByZXNvdXJjZXNUb0RlbGV0ZSkKKyAgICAgICAgbV9kb2N1bWVudFJlc291cmNlcy5y
ZW1vdmUocmVzb3VyY2UpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpwZXJmb3Jt
UG9zdExvYWRBY3Rpb25zKCkKK3sKKyAgICBjaGVja0ZvclBlbmRpbmdQcmVsb2FkcygpOworCisg
ICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPnNlcnZlUGVuZGluZ1Jl
cXVlc3RzKCk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmluY3JlbWVudFJlcXVl
c3RDb3VudChjb25zdCBDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpCit7CisgICAgaWYgKHJlc291
cmNlLmlnbm9yZUZvclJlcXVlc3RDb3VudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICArK21f
cmVxdWVzdENvdW50OworfQorCit2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpkZWNyZW1lbnRS
ZXF1ZXN0Q291bnQoY29uc3QgQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQoreworICAgIGlmIChy
ZXNvdXJjZS5pZ25vcmVGb3JSZXF1ZXN0Q291bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
LS1tX3JlcXVlc3RDb3VudDsKKyAgICBBU1NFUlQobV9yZXF1ZXN0Q291bnQgPiAtMSk7Cit9CisK
K0NhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiBDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6cHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBDYWNoZWRSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgUHJlbG9hZFR5cGUgcHJlbG9hZFR5
cGUpCit7CisgICAgLy8gV2UgYWx3YXlzIHByZWxvYWQgcmVzb3VyY2VzIG9uIGlPUy4gU2VlIDxo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEyNzY+LgorICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgY29uc2lkZXIgYWRkaW5nIGEgc2V0dGluZyB0byB0b2dnbGUgYWdncmVz
c2l2ZSBwcmVsb2FkaW5nIGJlaGF2aW9yIGFzIG9wcG9zZWQKKyAgICAvLyB0byBtYWtpbmcgdGhp
cyBiZWhhdmlvciBzcGVjaWZpYyB0byBpT1MuCisjaWYgIVBMQVRGT1JNKElPUykKKyAgICBib29s
IGhhc1JlbmRlcmluZyA9IG1fZG9jdW1lbnQtPmJvZHlPckZyYW1lc2V0KCkgJiYgbV9kb2N1bWVu
dC0+cmVuZGVyVmlldygpOworICAgIGJvb2wgY2FuQmxvY2tQYXJzZXIgPSB0eXBlID09IENhY2hl
ZFJlc291cmNlOjpTY3JpcHQgfHwgdHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVl
dDsKKyAgICBpZiAoIWhhc1JlbmRlcmluZyAmJiAhY2FuQmxvY2tQYXJzZXIgJiYgcHJlbG9hZFR5
cGUgPT0gSW1wbGljaXRQcmVsb2FkKSB7CisgICAgICAgIC8vIERvbid0IHByZWxvYWQgc3VicmVz
b3VyY2VzIHRoYXQgY2FuJ3QgYmxvY2sgdGhlIHBhcnNlciBiZWZvcmUgd2UgaGF2ZSBzb21ldGhp
bmcgdG8gZHJhdy4KKyAgICAgICAgLy8gVGhpcyBoZWxwcyBwcmV2ZW50IHByZWxvYWRzIGZyb20g
ZGVsYXlpbmcgZmlyc3QgZGlzcGxheSB3aGVuIGJhbmR3aWR0aCBpcyBsaW1pdGVkLgorICAgICAg
ICBQZW5kaW5nUHJlbG9hZCBwZW5kaW5nUHJlbG9hZCA9IHsgdHlwZSwgcmVxdWVzdCwgY2hhcnNl
dCB9OworICAgICAgICBtX3BlbmRpbmdQcmVsb2Fkcy5hcHBlbmQocGVuZGluZ1ByZWxvYWQpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShw
cmVsb2FkVHlwZSk7CisjZW5kaWYKKyAgICByZXR1cm4gcmVxdWVzdFByZWxvYWQodHlwZSwgcmVx
dWVzdCwgY2hhcnNldCk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNoZWNrRm9y
UGVuZGluZ1ByZWxvYWRzKCkgCit7CisgICAgaWYgKG1fcGVuZGluZ1ByZWxvYWRzLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIGJvZHkgPSBtX2RvY3VtZW50LT5ib2R5T3JG
cmFtZXNldCgpOworICAgIGlmICghYm9keSB8fCAhYm9keS0+cmVuZGVyZXIoKSkKKyAgICAgICAg
cmV0dXJuOworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBXZSBhbHdheXMgcHJlbG9hZCByZXNv
dXJjZXMgb24gaU9TLiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05MTI3Nj4uCisgICAgLy8gU28sIHdlIHNob3VsZCBuZXZlciBoYXZlIGFueSBwZW5kaW5nIHBy
ZWxvYWRzLgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbG9vayB0byBhdm9pZCBjb21waWxpbmcg
dGhpcyBjb2RlIGVudGlyZWx5IHdoZW4gYnVpbGRpbmcgZm9yIGlPUy4KKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyNlbmRpZgorICAgIHdoaWxlICghbV9wZW5kaW5nUHJlbG9hZHMuaXNFbXB0
eSgpKSB7CisgICAgICAgIFBlbmRpbmdQcmVsb2FkIHByZWxvYWQgPSBtX3BlbmRpbmdQcmVsb2Fk
cy50YWtlRmlyc3QoKTsKKyAgICAgICAgLy8gRG9uJ3QgcmVxdWVzdCBwcmVsb2FkIGlmIHRoZSBy
ZXNvdXJjZSBhbHJlYWR5IGxvYWRlZCBub3JtYWxseSAodGhpcyB3aWxsIHJlc3VsdCBpbiBkb3Vi
bGUgbG9hZCBpZiB0aGUgcGFnZSBpcyBiZWluZyByZWxvYWRlZCB3aXRoIGNhY2hlZCByZXN1bHRz
IGlnbm9yZWQpLgorICAgICAgICBpZiAoIWNhY2hlZFJlc291cmNlKHByZWxvYWQubV9yZXF1ZXN0
LnJlc291cmNlUmVxdWVzdCgpLnVybCgpKSkKKyAgICAgICAgICAgIHJlcXVlc3RQcmVsb2FkKHBy
ZWxvYWQubV90eXBlLCBwcmVsb2FkLm1fcmVxdWVzdCwgcHJlbG9hZC5tX2NoYXJzZXQpOworICAg
IH0KKyAgICBtX3BlbmRpbmdQcmVsb2Fkcy5jbGVhcigpOworfQorCitDYWNoZWRSZXNvdXJjZUhh
bmRsZTxDYWNoZWRSZXNvdXJjZT4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RQcmVsb2Fk
KENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQoreworICAgIFN0cmluZyBlbmNvZGluZzsKKyAgICBp
ZiAodHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0IHx8IHR5cGUgPT0gQ2FjaGVkUmVzb3Vy
Y2U6OkNTU1N0eWxlU2hlZXQpCisgICAgICAgIGVuY29kaW5nID0gY2hhcnNldC5pc0VtcHR5KCkg
PyBtX2RvY3VtZW50LT5jaGFyc2V0KCkgOiBjaGFyc2V0OworCisgICAgcmVxdWVzdC5zZXRDaGFy
c2V0KGVuY29kaW5nKTsKKyAgICByZXF1ZXN0LnNldEZvclByZWxvYWQodHJ1ZSk7CisKKyAgICBD
YWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gcmVzb3VyY2UgPSByZXF1ZXN0UmVz
b3VyY2UodHlwZSwgcmVxdWVzdCk7CisgICAgaWYgKCFyZXNvdXJjZSB8fCAobV9wcmVsb2FkcyAm
JiBtX3ByZWxvYWRzLT5jb250YWlucyhyZXNvdXJjZS5nZXQoKSkpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAvLyBGb250cyBuZWVkIHNwZWNpYWwgdHJlYXRtZW50IHNpbmNlIGp1c3Qg
Y3JlYXRpbmcgdGhlIHJlc291cmNlIGRvZXNuJ3QgdHJpZ2dlciBhIGxvYWQuCisgICAgaWYgKHR5
cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZSkKKyAgICAgICAgZG93bmNhc3Q8Q2Fj
aGVkRm9udD4ocmVzb3VyY2UuZ2V0KCkpLT5iZWdpbkxvYWRJZk5lZWRlZCgqdGhpcyk7CisgICAg
cmVzb3VyY2UtPmluY3JlYXNlUHJlbG9hZENvdW50KCk7CisKKyAgICBpZiAoIW1fcHJlbG9hZHMp
CisgICAgICAgIG1fcHJlbG9hZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPExpc3RIYXNoU2V0PENhY2hl
ZFJlc291cmNlKj4+KCk7CisgICAgbV9wcmVsb2Fkcy0+YWRkKHJlc291cmNlLmdldCgpKTsKKwor
I2lmIFBSRUxPQURfREVCVUcKKyAgICBwcmludGYoIlBSRUxPQURJTkcgJXNcbiIsICByZXNvdXJj
ZS0+dXJsKCkubGF0aW4xKCkuZGF0YSgpKTsKKyNlbmRpZgorICAgIHJldHVybiByZXNvdXJjZTsK
K30KKworYm9vbCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6aXNQcmVsb2FkZWQoY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcpIGNvbnN0Cit7CisgICAgY29uc3QgVVJMJiB1cmwgPSBtX2RvY3VtZW50LT5j
b21wbGV0ZVVSTCh1cmxTdHJpbmcpOworCisgICAgaWYgKG1fcHJlbG9hZHMpIHsKKyAgICAgICAg
Zm9yIChhdXRvJiByZXNvdXJjZSA6ICptX3ByZWxvYWRzKSB7CisgICAgICAgICAgICBpZiAocmVz
b3VyY2UtPnVybCgpID09IHVybCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byYgcGVuZGluZ1ByZWxvYWQgOiBtX3BlbmRpbmdQ
cmVsb2FkcykgeworICAgICAgICBpZiAocGVuZGluZ1ByZWxvYWQubV9yZXF1ZXN0LnJlc291cmNl
UmVxdWVzdCgpLnVybCgpID09IHVybCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNsZWFy
UHJlbG9hZHMoKQoreworI2lmIFBSRUxPQURfREVCVUcKKyAgICBwcmludFByZWxvYWRTdGF0cygp
OworI2VuZGlmCisgICAgaWYgKCFtX3ByZWxvYWRzKQorICAgICAgICByZXR1cm47CisKKyAgICBm
b3IgKGF1dG8qIHJlc291cmNlIDogKm1fcHJlbG9hZHMpIHsKKyAgICAgICAgcmVzb3VyY2UtPmRl
Y3JlYXNlUHJlbG9hZENvdW50KCk7CisgICAgICAgIGJvb2wgZGVsZXRlZCA9IHJlc291cmNlLT5k
ZWxldGVJZlBvc3NpYmxlKCk7CisgICAgICAgIGlmICghZGVsZXRlZCAmJiByZXNvdXJjZS0+cHJl
bG9hZFJlc3VsdCgpID09IENhY2hlZFJlc291cmNlOjpQcmVsb2FkTm90UmVmZXJlbmNlZCkKKyAg
ICAgICAgICAgIE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUoKnJlc291cmNlKTsKKyAg
ICB9CisgICAgbV9wcmVsb2FkcyA9IG51bGxwdHI7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VM
b2FkZXI6OmNsZWFyUGVuZGluZ1ByZWxvYWRzKCkKK3sKKyAgICBtX3BlbmRpbmdQcmVsb2Fkcy5j
bGVhcigpOworfQorCisjaWYgUFJFTE9BRF9ERUJVRwordm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6cHJpbnRQcmVsb2FkU3RhdHMoKQoreworICAgIHVuc2lnbmVkIHNjcmlwdHMgPSAwOworICAg
IHVuc2lnbmVkIHNjcmlwdE1pc3NlcyA9IDA7CisgICAgdW5zaWduZWQgc3R5bGVzaGVldHMgPSAw
OworICAgIHVuc2lnbmVkIHN0eWxlc2hlZXRNaXNzZXMgPSAwOworICAgIHVuc2lnbmVkIGltYWdl
cyA9IDA7CisgICAgdW5zaWduZWQgaW1hZ2VNaXNzZXMgPSAwOworICAgIGZvciAoYXV0byYgcmVz
b3VyY2UgOiBtX3ByZWxvYWRzKSB7CisgICAgICAgIGlmIChyZXNvdXJjZS0+cHJlbG9hZFJlc3Vs
dCgpID09IENhY2hlZFJlc291cmNlOjpQcmVsb2FkTm90UmVmZXJlbmNlZCkKKyAgICAgICAgICAg
IHByaW50ZigiISEgVU5SRUZFUkVOQ0VEIFBSRUxPQUQgJXNcbiIsIHJlc291cmNlLT51cmwoKS5s
YXRpbjEoKS5kYXRhKCkpOworICAgICAgICBlbHNlIGlmIChyZXNvdXJjZS0+cHJlbG9hZFJlc3Vs
dCgpID09IENhY2hlZFJlc291cmNlOjpQcmVsb2FkUmVmZXJlbmNlZFdoaWxlQ29tcGxldGUpCisg
ICAgICAgICAgICBwcmludGYoIkhJVCBDT01QTEVURSBQUkVMT0FEICVzXG4iLCByZXNvdXJjZS0+
dXJsKCkubGF0aW4xKCkuZGF0YSgpKTsKKyAgICAgICAgZWxzZSBpZiAocmVzb3VyY2UtPnByZWxv
YWRSZXN1bHQoKSA9PSBDYWNoZWRSZXNvdXJjZTo6UHJlbG9hZFJlZmVyZW5jZWRXaGlsZUxvYWRp
bmcpCisgICAgICAgICAgICBwcmludGYoIkhJVCBMT0FESU5HIFBSRUxPQUQgJXNcbiIsIHJlc291
cmNlLT51cmwoKS5sYXRpbjEoKS5kYXRhKCkpOworCisgICAgICAgIGlmIChyZXNvdXJjZS0+dHlw
ZSgpID09IENhY2hlZFJlc291cmNlOjpTY3JpcHQpIHsKKyAgICAgICAgICAgIHNjcmlwdHMrKzsK
KyAgICAgICAgICAgIGlmIChyZXNvdXJjZS0+cHJlbG9hZFJlc3VsdCgpIDwgQ2FjaGVkUmVzb3Vy
Y2U6OlByZWxvYWRSZWZlcmVuY2VkV2hpbGVMb2FkaW5nKQorICAgICAgICAgICAgICAgIHNjcmlw
dE1pc3NlcysrOworICAgICAgICB9IGVsc2UgaWYgKHJlc291cmNlLT50eXBlKCkgPT0gQ2FjaGVk
UmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQpIHsKKyAgICAgICAgICAgIHN0eWxlc2hlZXRzKys7Cisg
ICAgICAgICAgICBpZiAocmVzb3VyY2UtPnByZWxvYWRSZXN1bHQoKSA8IENhY2hlZFJlc291cmNl
OjpQcmVsb2FkUmVmZXJlbmNlZFdoaWxlTG9hZGluZykKKyAgICAgICAgICAgICAgICBzdHlsZXNo
ZWV0TWlzc2VzKys7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbWFnZXMrKzsKKyAg
ICAgICAgICAgIGlmIChyZXNvdXJjZS0+cHJlbG9hZFJlc3VsdCgpIDwgQ2FjaGVkUmVzb3VyY2U6
OlByZWxvYWRSZWZlcmVuY2VkV2hpbGVMb2FkaW5nKQorICAgICAgICAgICAgICAgIGltYWdlTWlz
c2VzKys7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVzb3VyY2UtPmVycm9yT2NjdXJyZWQo
KSAmJiByZXNvdXJjZS0+cHJlbG9hZFJlc3VsdCgpID09IENhY2hlZFJlc291cmNlOjpQcmVsb2Fk
Tm90UmVmZXJlbmNlZCkKKyAgICAgICAgICAgIE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5yZW1v
dmUocmVzb3VyY2UpOworCisgICAgICAgIHJlc291cmNlLT5kZWNyZWFzZVByZWxvYWRDb3VudCgp
OworICAgIH0KKyAgICBtX3ByZWxvYWRzID0gbnVsbHB0cjsKKworICAgIGlmIChzY3JpcHRzKQor
ICAgICAgICBwcmludGYoIlNDUklQVFM6ICVkICglZCBoaXRzLCBoaXQgcmF0ZSAlZCUlKVxuIiwg
c2NyaXB0cywgc2NyaXB0cyAtIHNjcmlwdE1pc3NlcywgKHNjcmlwdHMgLSBzY3JpcHRNaXNzZXMp
ICogMTAwIC8gc2NyaXB0cyk7CisgICAgaWYgKHN0eWxlc2hlZXRzKQorICAgICAgICBwcmludGYo
IlNUWUxFU0hFRVRTOiAlZCAoJWQgaGl0cywgaGl0IHJhdGUgJWQlJSlcbiIsIHN0eWxlc2hlZXRz
LCBzdHlsZXNoZWV0cyAtIHN0eWxlc2hlZXRNaXNzZXMsIChzdHlsZXNoZWV0cyAtIHN0eWxlc2hl
ZXRNaXNzZXMpICogMTAwIC8gc3R5bGVzaGVldHMpOworICAgIGlmIChpbWFnZXMpCisgICAgICAg
IHByaW50ZigiSU1BR0VTOiAgJWQgKCVkIGhpdHMsIGhpdCByYXRlICVkJSUpXG4iLCBpbWFnZXMs
IGltYWdlcyAtIGltYWdlTWlzc2VzLCAoaW1hZ2VzIC0gaW1hZ2VNaXNzZXMpICogMTAwIC8gaW1h
Z2VzKTsKK30KKyNlbmRpZgorCitjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIENhY2hlZFJl
c291cmNlTG9hZGVyOjpkZWZhdWx0Q2FjaGVkUmVzb3VyY2VPcHRpb25zKCkKK3sKKyAgICBzdGF0
aWMgUmVzb3VyY2VMb2FkZXJPcHRpb25zIG9wdGlvbnMoU2VuZENhbGxiYWNrcywgU25pZmZDb250
ZW50LCBCdWZmZXJEYXRhLCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBDbGllbnRDcmVkZW50aWFs
UG9saWN5OjpNYXlBc2tDbGllbnRGb3JDcmVkZW50aWFscywgRmV0Y2hPcHRpb25zOjpDcmVkZW50
aWFsczo6SW5jbHVkZSwgRG9TZWN1cml0eUNoZWNrLCBGZXRjaE9wdGlvbnM6Ok1vZGU6Ok5vQ29y
cywgRG9Ob3RJbmNsdWRlQ2VydGlmaWNhdGVJbmZvLCBDb250ZW50U2VjdXJpdHlQb2xpY3lJbXBv
c2l0aW9uOjpEb1BvbGljeUNoZWNrLCBEZWZlcnNMb2FkaW5nUG9saWN5OjpBbGxvd0RlZmVyc0xv
YWRpbmcsIENhY2hpbmdQb2xpY3k6OkFsbG93Q2FjaGluZyk7CisgICAgcmV0dXJuIG9wdGlvbnM7
Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRS
ZXNvdXJjZUxvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291
cmNlTG9hZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGNjOGIzODI4M2FkZDllZWIwYTM1M2E2NGE0M2FjYWE1
ZTk0OTBkOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9D
YWNoZWRSZXNvdXJjZUxvYWRlci5oCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICAgIENvcHlyaWdo
dCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQorICAgIENvcHlyaWdo
dCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAgICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBN
b2JpbGUgSW5jLiBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKworICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgICBUaGlzIGNsYXNzIHBy
b3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxl
IHNoZWV0cyBhbmQgaHRtbAorICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5
IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgorKi8KKworI2lmbmRlZiBDYWNoZWRSZXNvdXJjZUxv
YWRlcl9oCisjZGVmaW5lIENhY2hlZFJlc291cmNlTG9hZGVyX2gKKworI2luY2x1ZGUgIkNhY2hl
UG9saWN5LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVzdC5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZFByaW9yaXR5LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VUaW1pbmdJ
bmZvcm1hdGlvbi5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2gu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWNoZWRDU1NTdHlsZVNoZWV0Owor
Y2xhc3MgQ2FjaGVkU1ZHRG9jdW1lbnQ7CitjbGFzcyBDYWNoZWRGb250OworY2xhc3MgQ2FjaGVk
SW1hZ2U7CitjbGFzcyBDYWNoZWRSYXdSZXNvdXJjZTsKK2NsYXNzIENhY2hlZFNjcmlwdDsKK2Ns
YXNzIENhY2hlZFRleHRUcmFjazsKK2NsYXNzIENhY2hlZFhTTFN0eWxlU2hlZXQ7CitjbGFzcyBE
b2N1bWVudDsKK2NsYXNzIERvY3VtZW50TG9hZGVyOworY2xhc3MgRnJhbWU7CitjbGFzcyBJbWFn
ZUxvYWRlcjsKK2NsYXNzIFVSTDsKKworLy8gVGhlIENhY2hlZFJlc291cmNlTG9hZGVyIHByb3Zp
ZGVzIGEgcGVyLWNvbnRleHQgaW50ZXJmYWNlIHRvIHRoZSBNZW1vcnlDYWNoZQorLy8gYW5kIGVu
Zm9yY2VzIGEgYnVuY2ggb2Ygc2VjdXJpdHkgY2hlY2tzIGFuZCBydWxlcyBmb3IgcmVzb3VyY2Ug
cmV2YWxpZGF0aW9uLgorLy8gSXRzIGxpZmV0aW1lIGlzIHJvdWdobHkgcGVyLURvY3VtZW50TG9h
ZGVyLCBpbiB0aGF0IGl0IGlzIGdlbmVyYWxseSBjcmVhdGVkCisvLyBpbiB0aGUgRG9jdW1lbnRM
b2FkZXIgY29uc3RydWN0b3IgYW5kIGxvc2VzIGl0cyBhYmlsaXR5IHRvIGdlbmVyYXRlIG5ldHdv
cmsKKy8vIHJlcXVlc3RzIHdoZW4gdGhlIERvY3VtZW50TG9hZGVyIGlzIGRlc3Ryb3llZC4gRG9j
dW1lbnRzIGFsc28gaG9sZCBhIAorLy8gUmVmUHRyPENhY2hlZFJlc291cmNlTG9hZGVyPiBmb3Ig
dGhlaXIgbGlmZXRpbWUgKGFuZCB3aWxsIGNyZWF0ZSBvbmUgaWYgdGhleQorLy8gYXJlIGluaXRp
YWxpemVkIHdpdGhvdXQgYSBGcmFtZSksIHNvIGEgRG9jdW1lbnQgY2FuIGtlZXAgYSBDYWNoZWRS
ZXNvdXJjZUxvYWRlcgorLy8gYWxpdmUgcGFzdCBkZXRhY2ggaWYgc2NyaXB0cyBzdGlsbCByZWZl
cmVuY2UgdGhlIERvY3VtZW50LgorY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXIgOiBwdWJsaWMg
UmVmQ291bnRlZDxDYWNoZWRSZXNvdXJjZUxvYWRlcj4geworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKENhY2hlZFJlc291cmNlTG9hZGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citmcmll
bmQgY2xhc3MgSW1hZ2VMb2FkZXI7CitmcmllbmQgY2xhc3MgUmVzb3VyY2VDYWNoZVZhbGlkYXRp
b25TdXBwcmVzc29yOworCitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxDYWNoZWRSZXNvdXJjZUxv
YWRlcj4gY3JlYXRlKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlcikgeyByZXR1cm4gYWRv
cHRSZWYoKm5ldyBDYWNoZWRSZXNvdXJjZUxvYWRlcihkb2N1bWVudExvYWRlcikpOyB9CisgICAg
fkNhY2hlZFJlc291cmNlTG9hZGVyKCk7CisKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNo
ZWRJbWFnZT4gcmVxdWVzdEltYWdlKENhY2hlZFJlc291cmNlUmVxdWVzdCYpOworICAgIENhY2hl
ZFJlc291cmNlSGFuZGxlPENhY2hlZENTU1N0eWxlU2hlZXQ+IHJlcXVlc3RDU1NTdHlsZVNoZWV0
KENhY2hlZFJlc291cmNlUmVxdWVzdCYpOworICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hl
ZENTU1N0eWxlU2hlZXQ+IHJlcXVlc3RVc2VyQ1NTU3R5bGVTaGVldChDYWNoZWRSZXNvdXJjZVJl
cXVlc3QmKTsKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IHJlcXVlc3RT
Y3JpcHQoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8
Q2FjaGVkRm9udD4gcmVxdWVzdEZvbnQoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBpc1NW
Ryk7CisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+IHJlcXVlc3RN
ZWRpYShDYWNoZWRSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxD
YWNoZWRSYXdSZXNvdXJjZT4gcmVxdWVzdFJhd1Jlc291cmNlKENhY2hlZFJlc291cmNlUmVxdWVz
dCYpOworICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiByZXF1ZXN0
TWFpblJlc291cmNlKENhY2hlZFJlc291cmNlUmVxdWVzdCYpOworICAgIENhY2hlZFJlc291cmNl
SGFuZGxlPENhY2hlZFNWR0RvY3VtZW50PiByZXF1ZXN0U1ZHRG9jdW1lbnQoQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0Jik7CisjaWYgRU5BQkxFKFhTTFQpCisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8
Q2FjaGVkWFNMU3R5bGVTaGVldD4gcmVxdWVzdFhTTFN0eWxlU2hlZXQoQ2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0Jik7CisjZW5kaWYKKyNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKKyAgICBDYWNoZWRS
ZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gcmVxdWVzdExpbmtSZXNvdXJjZShDYWNoZWRS
ZXNvdXJjZTo6VHlwZSwgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Jik7CisjZW5kaWYKKyNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkVGV4dFRyYWNr
PiByZXF1ZXN0VGV4dFRyYWNrKENhY2hlZFJlc291cmNlUmVxdWVzdCYpOworI2VuZGlmCisKKyAg
ICAvLyBMb2dzIGFuIGFjY2VzcyBkZW5pZWQgbWVzc2FnZSB0byB0aGUgY29uc29sZSBmb3IgdGhl
IHNwZWNpZmllZCBVUkwuCisgICAgdm9pZCBwcmludEFjY2Vzc0RlbmllZE1lc3NhZ2UoY29uc3Qg
VVJMJiB1cmwpIGNvbnN0OworCisgICAgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKGNv
bnN0IFN0cmluZyYgdXJsKSBjb25zdDsKKyAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3Vy
Y2UoY29uc3QgVVJMJiB1cmwpIGNvbnN0OworICAgIAorICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPj4gRG9jdW1lbnRSZXNvdXJj
ZU1hcDsKKyAgICBjb25zdCBEb2N1bWVudFJlc291cmNlTWFwJiBhbGxDYWNoZWRSZXNvdXJjZXMo
KSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50UmVzb3VyY2VzOyB9CisKKyAgICBib29sIGF1dG9M
b2FkSW1hZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9hdXRvTG9hZEltYWdlczsgfQorICAgIHZvaWQg
c2V0QXV0b0xvYWRJbWFnZXMoYm9vbCk7CisKKyAgICBib29sIGltYWdlc0VuYWJsZWQoKSBjb25z
dCB7IHJldHVybiBtX2ltYWdlc0VuYWJsZWQ7IH0KKyAgICB2b2lkIHNldEltYWdlc0VuYWJsZWQo
Ym9vbCk7CisKKyAgICBib29sIHNob3VsZERlZmVySW1hZ2VMb2FkKGNvbnN0IFVSTCYpIGNvbnN0
OworICAgIGJvb2wgc2hvdWxkUGVyZm9ybUltYWdlTG9hZChjb25zdCBVUkwmKSBjb25zdDsKKyAg
ICAKKyAgICBDYWNoZVBvbGljeSBjYWNoZVBvbGljeShDYWNoZWRSZXNvdXJjZTo6VHlwZSkgY29u
c3Q7CisgICAgCisgICAgRnJhbWUqIGZyYW1lKCkgY29uc3Q7IC8vIENhbiBiZSBudWxsCisgICAg
RG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfSAvLyBDYW4g
YmUgbnVsbAorICAgIHZvaWQgc2V0RG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KSB7IG1fZG9j
dW1lbnQgPSBkb2N1bWVudDsgfQorICAgIHZvaWQgY2xlYXJEb2N1bWVudExvYWRlcigpIHsgbV9k
b2N1bWVudExvYWRlciA9IG51bGxwdHI7IH0KKyAgICBTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29u
c3Q7CisKKyAgICB2b2lkIHJlbW92ZUNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlJik7CisK
KyAgICB2b2lkIGxvYWREb25lKENhY2hlZFJlc291cmNlKiwgYm9vbCBzaG91bGRQZXJmb3JtUG9z
dExvYWRBY3Rpb25zID0gdHJ1ZSk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdhcmJhZ2VD
b2xsZWN0RG9jdW1lbnRSZXNvdXJjZXMoKTsKKyAgICAKKyAgICB2b2lkIGluY3JlbWVudFJlcXVl
c3RDb3VudChjb25zdCBDYWNoZWRSZXNvdXJjZSYpOworICAgIHZvaWQgZGVjcmVtZW50UmVxdWVz
dENvdW50KGNvbnN0IENhY2hlZFJlc291cmNlJik7CisgICAgaW50IHJlcXVlc3RDb3VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVxdWVzdENvdW50OyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCBib29s
IGlzUHJlbG9hZGVkKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBjb25zdDsKKyAgICB2b2lkIGNs
ZWFyUHJlbG9hZHMoKTsKKyAgICB2b2lkIGNsZWFyUGVuZGluZ1ByZWxvYWRzKCk7CisgICAgZW51
bSBQcmVsb2FkVHlwZSB7IEltcGxpY2l0UHJlbG9hZCwgRXhwbGljaXRQcmVsb2FkIH07CisgICAg
Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IHByZWxvYWQoQ2FjaGVkUmVzb3Vy
Y2U6OlR5cGUsIENhY2hlZFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwg
UHJlbG9hZFR5cGUpOworICAgIHZvaWQgY2hlY2tGb3JQZW5kaW5nUHJlbG9hZHMoKTsKKyAgICB2
b2lkIHByaW50UHJlbG9hZFN0YXRzKCk7CisKKyAgICBib29sIGNhblJlcXVlc3QoQ2FjaGVkUmVz
b3VyY2U6OlR5cGUsIGNvbnN0IFVSTCYsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYsIGJv
b2wgZm9yUHJlbG9hZCA9IGZhbHNlLCBib29sIGRpZFJlY2VpdmVSZWRpcmVjdFJlc3BvbnNlID0g
ZmFsc2UpOworCisgICAgc3RhdGljIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgZGVmYXVs
dENhY2hlZFJlc291cmNlT3B0aW9ucygpOworCisgICAgdm9pZCBkb2N1bWVudERpZEZpbmlzaExv
YWRFdmVudCgpOworCisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgUmVzb3VyY2VUaW1pbmdJ
bmZvcm1hdGlvbiYgcmVzb3VyY2VUaW1pbmdJbmZvcm1hdGlvbigpIHsgcmV0dXJuIG1fcmVzb3Vy
Y2VUaW1pbmdJbmZvOyB9CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBDYWNoZWRS
ZXNvdXJjZUxvYWRlcihEb2N1bWVudExvYWRlciopOworCisgICAgQ2FjaGVkUmVzb3VyY2VIYW5k
bGU8Q2FjaGVkUmVzb3VyY2U+IHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSwg
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
UmVzb3VyY2U+IHJldmFsaWRhdGVSZXNvdXJjZShjb25zdCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Qm
LCBDYWNoZWRSZXNvdXJjZSopOworICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291
cmNlPiBsb2FkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIENhY2hlZFJlc291cmNlUmVx
dWVzdCYpOworICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiByZXF1ZXN0
UHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6VHlwZSwgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiwgY29u
c3QgU3RyaW5nJiBjaGFyc2V0KTsKKworICAgIGVudW0gUmV2YWxpZGF0aW9uUG9saWN5IHsgVXNl
LCBSZXZhbGlkYXRlLCBSZWxvYWQsIExvYWQgfTsKKyAgICBSZXZhbGlkYXRpb25Qb2xpY3kgZGV0
ZXJtaW5lUmV2YWxpZGF0aW9uUG9saWN5KENhY2hlZFJlc291cmNlOjpUeXBlLCBDYWNoZWRSZXNv
dXJjZVJlcXVlc3QmLCBDYWNoZWRSZXNvdXJjZSogZXhpc3RpbmdSZXNvdXJjZSkgY29uc3Q7CisK
KyAgICBib29sIHVwZGF0ZUNhY2hlZFJlc291cmNlV2l0aEN1cnJlbnRSZXF1ZXN0KENhY2hlZFJl
c291cmNlUmVxdWVzdCYsIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiYpOwor
ICAgIGJvb2wgc2hvdWxkQ29udGludWVBZnRlck5vdGlmeWluZ0xvYWRlZEZyb21NZW1vcnlDYWNo
ZShjb25zdCBDYWNoZWRSZXNvdXJjZVJlcXVlc3QmLCBDYWNoZWRSZXNvdXJjZSopOworICAgIGJv
b2wgY2hlY2tJbnNlY3VyZUNvbnRlbnQoQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIGNvbnN0IFVSTCYp
IGNvbnN0OworCisgICAgdm9pZCBwZXJmb3JtUG9zdExvYWRBY3Rpb25zKCk7CisKKyAgICBib29s
IGNsaWVudERlZmVyc0ltYWdlKGNvbnN0IFVSTCYpIGNvbnN0OworICAgIHZvaWQgcmVsb2FkSW1h
Z2VzSWZOb3REZWZlcnJlZCgpOworCisgICAgYm9vbCBjYW5SZXF1ZXN0SW5Db250ZW50RGlzcG9z
aXRpb25BdHRhY2htZW50U2FuZGJveChDYWNoZWRSZXNvdXJjZTo6VHlwZSwgY29uc3QgVVJMJikg
Y29uc3Q7CisgICAgCisgICAgSGFzaFNldDxTdHJpbmc+IG1fdmFsaWRhdGVkVVJMczsKKyAgICBt
dXRhYmxlIERvY3VtZW50UmVzb3VyY2VNYXAgbV9kb2N1bWVudFJlc291cmNlczsKKyAgICBEb2N1
bWVudCogbV9kb2N1bWVudDsKKyAgICBEb2N1bWVudExvYWRlciogbV9kb2N1bWVudExvYWRlcjsK
KyAgICAKKyAgICBpbnQgbV9yZXF1ZXN0Q291bnQ7CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRy
PExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNlKj4+IG1fcHJlbG9hZHM7CisgICAgc3RydWN0IFBl
bmRpbmdQcmVsb2FkIHsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2U6OlR5cGUgbV90eXBlOworICAg
ICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgbV9yZXF1ZXN0OworICAgICAgICBTdHJpbmcgbV9j
aGFyc2V0OworICAgIH07CisgICAgRGVxdWU8UGVuZGluZ1ByZWxvYWQ+IG1fcGVuZGluZ1ByZWxv
YWRzOworCisgICAgVGltZXIgbV9nYXJiYWdlQ29sbGVjdERvY3VtZW50UmVzb3VyY2VzVGltZXI7
CisKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBSZXNvdXJjZVRpbWluZ0luZm9ybWF0aW9u
IG1fcmVzb3VyY2VUaW1pbmdJbmZvOworI2VuZGlmCisKKyAgICAvLyAyOSBiaXRzIGxlZnQKKyAg
ICBib29sIG1fYXV0b0xvYWRJbWFnZXMgOiAxOworICAgIGJvb2wgbV9pbWFnZXNFbmFibGVkIDog
MTsKKyAgICBib29sIG1fYWxsb3dTdGFsZVJlc291cmNlcyA6IDE7Cit9OworCitjbGFzcyBSZXNv
dXJjZUNhY2hlVmFsaWRhdGlvblN1cHByZXNzb3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFJlc291cmNlQ2FjaGVWYWxpZGF0aW9uU3VwcHJlc3Nvcik7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29y
KENhY2hlZFJlc291cmNlTG9hZGVyJiBsb2FkZXIpCisgICAgICAgIDogbV9sb2FkZXIobG9hZGVy
KQorICAgICAgICAsIG1fcHJldmlvdXNTdGF0ZShtX2xvYWRlci5tX2FsbG93U3RhbGVSZXNvdXJj
ZXMpCisgICAgeworICAgICAgICBtX2xvYWRlci5tX2FsbG93U3RhbGVSZXNvdXJjZXMgPSB0cnVl
OworICAgIH0KKyAgICB+UmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29yKCkKKyAgICB7
CisgICAgICAgIG1fbG9hZGVyLm1fYWxsb3dTdGFsZVJlc291cmNlcyA9IG1fcHJldmlvdXNTdGF0
ZTsKKyAgICB9Citwcml2YXRlOgorICAgIENhY2hlZFJlc291cmNlTG9hZGVyJiBtX2xvYWRlcjsK
KyAgICBib29sIG1fcHJldmlvdXNTdGF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRS
ZXNvdXJjZVJlcXVlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjNTRiZGYxMDQ1NjE3ZDNhOGNjNzQ5MTIx
Yzc0Zjk3OTE1ZmIyMTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
ZmV0Y2gvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZVJlcXVlc3QuaCIKKworI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9s
LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0OjpDYWNoZWRSZXNvdXJjZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgT3B0aW9uYWw8UmVz
b3VyY2VMb2FkUHJpb3JpdHk+IHByaW9yaXR5KQorICAgIDogbV9yZXNvdXJjZVJlcXVlc3QocmVz
b3VyY2VSZXF1ZXN0KQorICAgICwgbV9jaGFyc2V0KGNoYXJzZXQpCisgICAgLCBtX29wdGlvbnMo
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRlZmF1bHRDYWNoZWRSZXNvdXJjZU9wdGlvbnMoKSkKKyAg
ICAsIG1fcHJpb3JpdHkocHJpb3JpdHkpCisgICAgLCBtX2ZvclByZWxvYWQoZmFsc2UpCisgICAg
LCBtX2RlZmVyKE5vRGVmZXIpCit7Cit9CisKK0NhY2hlZFJlc291cmNlUmVxdWVzdDo6Q2FjaGVk
UmVzb3VyY2VSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYmIHJlc291cmNlUmVxdWVzdCwgY29uc3Qg
UmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKQorICAgIDogbV9yZXNvdXJjZVJlcXVlc3Qo
V1RGTW92ZShyZXNvdXJjZVJlcXVlc3QpKQorICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCisgICAg
LCBtX2ZvclByZWxvYWQoZmFsc2UpCisgICAgLCBtX2RlZmVyKE5vRGVmZXIpCit7Cit9CisKK0Nh
Y2hlZFJlc291cmNlUmVxdWVzdDo6Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBPcHRpb25hbDxSZXNvdXJjZUxvYWRQcmlvcml0eT4g
cHJpb3JpdHkpCisgICAgOiBtX3Jlc291cmNlUmVxdWVzdChyZXNvdXJjZVJlcXVlc3QpCisgICAg
LCBtX29wdGlvbnMoQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRlZmF1bHRDYWNoZWRSZXNvdXJjZU9w
dGlvbnMoKSkKKyAgICAsIG1fcHJpb3JpdHkocHJpb3JpdHkpCisgICAgLCBtX2ZvclByZWxvYWQo
ZmFsc2UpCisgICAgLCBtX2RlZmVyKE5vRGVmZXIpCit7Cit9CisKK0NhY2hlZFJlc291cmNlUmVx
dWVzdDo6fkNhY2hlZFJlc291cmNlUmVxdWVzdCgpCit7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0OjpzZXRJbml0aWF0b3IoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50KQorewor
ICAgIEFTU0VSVCghbV9pbml0aWF0b3JFbGVtZW50ICYmIG1faW5pdGlhdG9yTmFtZS5pc0VtcHR5
KCkpOworICAgIG1faW5pdGlhdG9yRWxlbWVudCA9IGVsZW1lbnQ7Cit9CisKK3ZvaWQgQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0OjpzZXRJbml0aWF0b3IoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQor
eworICAgIEFTU0VSVCghbV9pbml0aWF0b3JFbGVtZW50ICYmIG1faW5pdGlhdG9yTmFtZS5pc0Vt
cHR5KCkpOworICAgIG1faW5pdGlhdG9yTmFtZSA9IG5hbWU7Cit9CisKK2NvbnN0IEF0b21pY1N0
cmluZyYgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Ojppbml0aWF0b3JOYW1lKCkgY29uc3QKK3sKKyAg
ICBpZiAobV9pbml0aWF0b3JFbGVtZW50KQorICAgICAgICByZXR1cm4gbV9pbml0aWF0b3JFbGVt
ZW50LT5sb2NhbE5hbWUoKTsKKyAgICBpZiAoIW1faW5pdGlhdG9yTmFtZS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBtX2luaXRpYXRvck5hbWU7CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8QXRvbWljU3RyaW5nPiBkZWZhdWx0TmFtZSgicmVzb3VyY2UiLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICByZXR1cm4gZGVmYXVsdE5hbWU7Cit9CisKK3ZvaWQg
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpzZXRBc1BvdGVudGlhbGx5Q3Jvc3NPcmlnaW4oY29uc3Qg
U3RyaW5nJiBtb2RlLCBEb2N1bWVudCYgZG9jdW1lbnQpCit7CisgICAgQVNTRVJUKG1fb3B0aW9u
cy5tb2RlID09IEZldGNoT3B0aW9uczo6TW9kZTo6Tm9Db3JzKTsKKyAgICBpZiAobW9kZS5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fb3B0aW9ucy5tb2RlID0gRmV0Y2hPcHRpb25z
OjpNb2RlOjpDb3JzOworICAgIG1fb3B0aW9ucy5jcmVkZW50aWFscyA9IGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKG1vZGUsICJ1c2UtY3JlZGVudGlhbHMiKSA/IEZldGNoT3B0aW9uczo6
Q3JlZGVudGlhbHM6OkluY2x1ZGUgOiBGZXRjaE9wdGlvbnM6OkNyZWRlbnRpYWxzOjpTYW1lT3Jp
Z2luOworICAgIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzID0gZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UobW9kZSwgInVzZS1jcmVkZW50aWFscyIpID8gQWxsb3dTdG9yZWRDcmVkZW50
aWFscyA6IERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFsczsKKworICAgIEFTU0VSVChkb2N1bWVu
dC5zZWN1cml0eU9yaWdpbigpKTsKKyAgICB1cGRhdGVSZXF1ZXN0Rm9yQWNjZXNzQ29udHJvbCht
X3Jlc291cmNlUmVxdWVzdCwgKmRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCksIG1fb3B0aW9ucy5h
bGxvd0NyZWRlbnRpYWxzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjgyN2ViYmJlNTg2Njc0ZWJiYTc2OThiNDk3ODNhZDNkOGZkZmMwMjAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0LmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0X2gKKyNkZWZpbmUg
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0X2gKKworI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisj
aW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZFByaW9yaXR5LmgiCisj
aW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJPcHRpb25zLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1
ZXN0LmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21p
Y1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBEb2N1bWVudDsKKworY2xh
c3MgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHsKK3B1YmxpYzoKKyAgICBlbnVtIERlZmVyT3B0aW9u
IHsgTm9EZWZlciwgRGVmZXJyZWRCeUNsaWVudCB9OworCisgICAgZXhwbGljaXQgQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgY2hhcnNl
dCA9IFN0cmluZygpLCBPcHRpb25hbDxSZXNvdXJjZUxvYWRQcmlvcml0eT4gPSBOdWxsb3B0KTsK
KyAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYsIGNvbnN0IFJlc291
cmNlTG9hZGVyT3B0aW9ucyYpOworICAgIENhY2hlZFJlc291cmNlUmVxdWVzdChjb25zdCBSZXNv
dXJjZVJlcXVlc3QmLCBPcHRpb25hbDxSZXNvdXJjZUxvYWRQcmlvcml0eT4pOworICAgIH5DYWNo
ZWRSZXNvdXJjZVJlcXVlc3QoKTsKKworICAgIFJlc291cmNlUmVxdWVzdCYgbXV0YWJsZVJlc291
cmNlUmVxdWVzdCgpIHsgcmV0dXJuIG1fcmVzb3VyY2VSZXF1ZXN0OyB9CisgICAgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNl
UmVxdWVzdDsgfQorICAgIGNvbnN0IFN0cmluZyYgY2hhcnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2hhcnNldDsgfQorICAgIHZvaWQgc2V0Q2hhcnNldChjb25zdCBTdHJpbmcmIGNoYXJzZXQpIHsg
bV9jaGFyc2V0ID0gY2hhcnNldDsgfQorICAgIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYg
b3B0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9uczsgfQorICAgIHZvaWQgc2V0T3B0aW9u
cyhjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpIHsgbV9vcHRpb25zID0gb3B0
aW9uczsgfQorICAgIGNvbnN0IE9wdGlvbmFsPFJlc291cmNlTG9hZFByaW9yaXR5PiYgcHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiBtX3ByaW9yaXR5OyB9CisgICAgYm9vbCBmb3JQcmVsb2FkKCkg
Y29uc3QgeyByZXR1cm4gbV9mb3JQcmVsb2FkOyB9CisgICAgdm9pZCBzZXRGb3JQcmVsb2FkKGJv
b2wgZm9yUHJlbG9hZCkgeyBtX2ZvclByZWxvYWQgPSBmb3JQcmVsb2FkOyB9CisgICAgRGVmZXJP
cHRpb24gZGVmZXIoKSBjb25zdCB7IHJldHVybiBtX2RlZmVyOyB9CisgICAgdm9pZCBzZXREZWZl
cihEZWZlck9wdGlvbiBkZWZlcikgeyBtX2RlZmVyID0gZGVmZXI7IH0KKyAgICB2b2lkIHNldElu
aXRpYXRvcihQYXNzUmVmUHRyPEVsZW1lbnQ+KTsKKyAgICB2b2lkIHNldEluaXRpYXRvcihjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaW5pdGlhdG9y
TmFtZSgpIGNvbnN0OworICAgIGJvb2wgYWxsb3dzQ2FjaGluZygpIGNvbnN0IHsgcmV0dXJuIG1f
b3B0aW9ucy5jYWNoaW5nUG9saWN5ID09IENhY2hpbmdQb2xpY3k6OkFsbG93Q2FjaGluZzsgfQor
ICAgIHZvaWQgc2V0Q2FjaGluZ1BvbGljeShDYWNoaW5nUG9saWN5IHBvbGljeSkgeyBtX29wdGlv
bnMuY2FjaGluZ1BvbGljeSA9IHBvbGljeTsgfQorCisgICAgdm9pZCBzZXRBc1BvdGVudGlhbGx5
Q3Jvc3NPcmlnaW4oY29uc3QgU3RyaW5nJiwgRG9jdW1lbnQmKTsKKworcHJpdmF0ZToKKyAgICBS
ZXNvdXJjZVJlcXVlc3QgbV9yZXNvdXJjZVJlcXVlc3Q7CisgICAgU3RyaW5nIG1fY2hhcnNldDsK
KyAgICBSZXNvdXJjZUxvYWRlck9wdGlvbnMgbV9vcHRpb25zOworICAgIE9wdGlvbmFsPFJlc291
cmNlTG9hZFByaW9yaXR5PiBtX3ByaW9yaXR5OworICAgIGJvb2wgbV9mb3JQcmVsb2FkOworICAg
IERlZmVyT3B0aW9uIG1fZGVmZXI7CisgICAgUmVmUHRyPEVsZW1lbnQ+IG1faW5pdGlhdG9yRWxl
bWVudDsKKyAgICBBdG9taWNTdHJpbmcgbV9pbml0aWF0b3JOYW1lOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9mZXRjaC9DYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iMzM5YThlNThjZGFhZDUxZjVhZjgwZWE0NjM5NGJkN2JjNTAyODE1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJlc291cmNlUmVx
dWVzdEluaXRpYXRvcnMuY3BwCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0NhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnM6OkNhY2hlZFJlc291cmNlUmVx
dWVzdEluaXRpYXRvcnMoKQorICAgIDogY3NzKCJjc3MiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKQorICAgICwgZmV0Y2goImZldGNoIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCkKKyAgICAsIGljb24oImljb24iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKQorICAgICwgeG1saHR0cHJlcXVlc3QoInhtbGh0dHByZXF1ZXN0IiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFJl
c291cmNlUmVxdWVzdEluaXRpYXRvcnMuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9D
YWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDdjZmUwMWM4ZDIw
MDA4MzI2YTA5MTk3ZWJmZGY0NjQ1NzM4MWYyNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmgKQEAg
LTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEdPT0dMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9yc19oCisjZGVmaW5l
IENhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnNfaAorCisjaW5jbHVkZSAiVGhyZWFkR2xv
YmFsRGF0YS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0cnVjdCBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzIHsK
KyAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzKCk7CisKKyAgICBjb25zdCBBdG9t
aWNTdHJpbmcgY3NzOworICAgIGNvbnN0IEF0b21pY1N0cmluZyBmZXRjaDsKKyAgICBjb25zdCBB
dG9taWNTdHJpbmcgaWNvbjsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcgeG1saHR0cHJlcXVlc3Q7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9y
cyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
VGhyZWFkR2xvYmFsRGF0YTsKK307CisKK2lubGluZSBjb25zdCBDYWNoZWRSZXNvdXJjZVJlcXVl
c3RJbml0aWF0b3JzJiBjYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzKCkKK3sKKyAgICBy
ZXR1cm4gdGhyZWFkR2xvYmFsRGF0YSgpLmNhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRTVkdEb2N1bWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRG9jdW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1
MjMwMjAxYjBmNzEwZDM5YTViZGJiMWE2ZDZhMmI4NTI2MDdkMzEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRG9jdW1lbnQuY3BwCkBAIC0w
LDAgKzEsNjEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEwIFJvYiBCdWlzIDxyd2xidWlz
QGdtYWlsLmNvbT4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgQ29zbWluIFRydXRhIDxjdHJ1dGFA
Z21haWwuY29tPgorICAgIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAor
ICAgIENvcHlyaWdodCAoQykgMjAxMiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudC5oIgor
CisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ2Fj
aGVkU1ZHRG9jdW1lbnQ6OkNhY2hlZFNWR0RvY3VtZW50KGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgU2Vzc2lvbklEIHNlc3Npb25JRCkKKyAgICA6IENhY2hlZFJlc291cmNlKHJlcXVl
c3QsIFNWR0RvY3VtZW50UmVzb3VyY2UsIHNlc3Npb25JRCkKKyAgICAsIG1fZGVjb2RlcihUZXh0
UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoImFwcGxpY2F0aW9uL3htbCIpKQoreworICAgIHNldEFj
Y2VwdCgiaW1hZ2Uvc3ZnK3htbCIpOworfQorCitDYWNoZWRTVkdEb2N1bWVudDo6fkNhY2hlZFNW
R0RvY3VtZW50KCkKK3sKK30KKwordm9pZCBDYWNoZWRTVkdEb2N1bWVudDo6c2V0RW5jb2Rpbmco
Y29uc3QgU3RyaW5nJiBjaHMpCit7CisgICAgbV9kZWNvZGVyLT5zZXRFbmNvZGluZyhjaHMsIFRl
eHRSZXNvdXJjZURlY29kZXI6OkVuY29kaW5nRnJvbUhUVFBIZWFkZXIpOworfQorCitTdHJpbmcg
Q2FjaGVkU1ZHRG9jdW1lbnQ6OmVuY29kaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWNv
ZGVyLT5lbmNvZGluZygpLm5hbWUoKTsKK30KKwordm9pZCBDYWNoZWRTVkdEb2N1bWVudDo6Zmlu
aXNoTG9hZGluZyhTaGFyZWRCdWZmZXIqIGRhdGEpCit7CisgICAgaWYgKGRhdGEpIHsKKyAgICAg
ICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUgYSBuZXcgZnJhbWUgYmVjYXVzZSB0aGUgbmV3
IGRvY3VtZW50IGJlbG9uZ3MgdG8gdGhlIHBhcmVudCBVc2VFbGVtZW50LgorICAgICAgICBtX2Rv
Y3VtZW50ID0gU1ZHRG9jdW1lbnQ6OmNyZWF0ZShudWxscHRyLCByZXNwb25zZSgpLnVybCgpKTsK
KyAgICAgICAgbV9kb2N1bWVudC0+c2V0Q29udGVudChtX2RlY29kZXItPmRlY29kZUFuZEZsdXNo
KGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpKSk7CisgICAgfQorICAgIENhY2hlZFJlc291cmNl
OjpmaW5pc2hMb2FkaW5nKGRhdGEpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9mZXRjaC9DYWNoZWRTVkdEb2N1bWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyNjQyZmUzZTQzNWZiYzdm
MTE5M2JkZmI1NTk2YjM1ZjY5ZDk5YmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRG9jdW1lbnQuaApAQCAtMCwwICsxLDU1IEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAxMCBSb2IgQnVpcyA8cndsYnVpc0BnbWFpbC5jb20+CisgICAg
Q29weXJpZ2h0IChDKSAyMDExIENvc21pbiBUcnV0YSA8Y3RydXRhQGdtYWlsLmNvbT4KKyAgICBD
b3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAgICBDb3B5cmlnaHQgKEMp
IDIwMTIgUmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIENhY2hl
ZFNWR0RvY3VtZW50X2gKKyNkZWZpbmUgQ2FjaGVkU1ZHRG9jdW1lbnRfaAorCisjaW5jbHVkZSAi
Q2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgorI2lu
Y2x1ZGUgIlNWR0RvY3VtZW50LmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhY2hlZFNWR0RvY3VtZW50IGZpbmFsIDog
cHVibGljIENhY2hlZFJlc291cmNlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBDYWNoZWRTVkdE
b2N1bWVudChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTZXNzaW9uSUQpOworICAgIHZpcnR1YWwg
fkNhY2hlZFNWR0RvY3VtZW50KCk7CisKKyAgICBTVkdEb2N1bWVudCogZG9jdW1lbnQoKSBjb25z
dCB7IHJldHVybiBtX2RvY3VtZW50LmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBtYXlU
cnlSZXBsYWNlRW5jb2RlZERhdGEoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgdm9pZCBzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICBTdHJpbmcg
ZW5jb2RpbmcoKSBjb25zdCBvdmVycmlkZTsKKyAgICBjb25zdCBUZXh0UmVzb3VyY2VEZWNvZGVy
KiB0ZXh0UmVzb3VyY2VEZWNvZGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZWNvZGVy
LmdldCgpOyB9CisgICAgdm9pZCBmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1ZmZlciopIG92ZXJyaWRl
OworCisgICAgUmVmUHRyPFNWR0RvY3VtZW50PiBtX2RvY3VtZW50OworICAgIFJlZlB0cjxUZXh0
UmVzb3VyY2VEZWNvZGVyPiBtX2RlY29kZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FDSEVEX1JFU09VUkNFKENhY2hlZFNWR0RvY3Vt
ZW50LCBDYWNoZWRSZXNvdXJjZTo6U1ZHRG9jdW1lbnRSZXNvdXJjZSkKKworI2VuZGlmIC8vIENh
Y2hlZFNWR0RvY3VtZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRj
aC9DYWNoZWRTVkdEb2N1bWVudENsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNo
L0NhY2hlZFNWR0RvY3VtZW50Q2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjIyZWFkMGI4MDZjMzgwNWQx
ZTM3NGZmZGFmMDdmZWUyN2M0OWYyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9mZXRjaC9DYWNoZWRTVkdEb2N1bWVudENsaWVudC5oCkBAIC0wLDAgKzEsMzkgQEAK
Ky8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEwIFJvYiBCdWlzIDxyd2xidWlzQGdtYWlsLmNvbT4K
KyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgQ29zbWluIFRydXRhIDxjdHJ1dGFAZ21haWwuY29tPgor
ICAgIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICAgIENvcHlyaWdo
dCAoQykgMjAxMiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYg
Q2FjaGVkU1ZHRG9jdW1lbnRDbGllbnRfaAorI2RlZmluZSBDYWNoZWRTVkdEb2N1bWVudENsaWVu
dF9oCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIENhY2hlZFNWR0RvY3VtZW50Q2xpZW50IDogcHVibGljIENhY2hlZFJl
c291cmNlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DYWNoZWRTVkdEb2N1bWVudENs
aWVudCgpIHsgfQorICAgIHN0YXRpYyBDYWNoZWRSZXNvdXJjZUNsaWVudFR5cGUgZXhwZWN0ZWRU
eXBlKCkgeyByZXR1cm4gU1ZHRG9jdW1lbnRUeXBlOyB9CisgICAgQ2FjaGVkUmVzb3VyY2VDbGll
bnRUeXBlIHJlc291cmNlQ2xpZW50VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGV4cGVj
dGVkVHlwZSgpOyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBD
YWNoZWRTVkdEb2N1bWVudENsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvZmV0Y2gvQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2ZldGNoL0NhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
NzkwZjczNDkzODk2ZWUzYjUyNTIxZDJhNzVlODg3NmRkOWM1ODAyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNl
LmNwcApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmgiCisKKyNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0SW5pdGlhdG9ycy5oIgorI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2U6OkNhY2hlZFNWR0Rv
Y3VtZW50UmVmZXJlbmNlKGNvbnN0IFN0cmluZyYgdXJsKQorICAgIDogbV91cmwodXJsKQorICAg
ICwgbV9kb2N1bWVudChudWxscHRyKQorICAgICwgbV9sb2FkUmVxdWVzdGVkKGZhbHNlKQorewor
fQorCitDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZTo6fkNhY2hlZFNWR0RvY3VtZW50UmVmZXJl
bmNlKCkKK3sKKyAgICBpZiAobV9kb2N1bWVudCkKKyAgICAgICAgbV9kb2N1bWVudC0+cmVtb3Zl
Q2xpZW50KHRoaXMpOworfQorCit2b2lkIENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlOjpsb2Fk
KENhY2hlZFJlc291cmNlTG9hZGVyJiBsb2FkZXIsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9u
cyYgb3B0aW9ucykKK3sKKyAgICBpZiAobV9sb2FkUmVxdWVzdGVkKQorICAgICAgICByZXR1cm47
CisKKyAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJjZVJlcXVlc3QobG9h
ZGVyLmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKG1fdXJsKSksIG9wdGlvbnMpOworICAgIHJlcXVl
c3Quc2V0SW5pdGlhdG9yKGNhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMoKS5jc3MpOwor
ICAgIG1fZG9jdW1lbnQgPSBsb2FkZXIucmVxdWVzdFNWR0RvY3VtZW50KHJlcXVlc3QpOworICAg
IGlmIChtX2RvY3VtZW50KQorICAgICAgICBtX2RvY3VtZW50LT5hZGRDbGllbnQodGhpcyk7CisK
KyAgICBtX2xvYWRSZXF1ZXN0ZWQgPSB0cnVlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmY5ODBhMTNmNjEyODkxMzU4ZmQ2YjM2MGJhYjY5ZDFmZTQxNjA4OWQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRG9jdW1lbnRS
ZWZlcmVuY2UuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDYWNoZWRTVkdEb2N1
bWVudFJlZmVyZW5jZV9oCisjZGVmaW5lIENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlX2gKKwor
I2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiQ2FjaGVkU1ZHRG9j
dW1lbnRDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWNoZWRTVkdEb2N1bWVudDsKK2NsYXNzIENhY2hlZFJl
c291cmNlTG9hZGVyOworc3RydWN0IFJlc291cmNlTG9hZGVyT3B0aW9uczsKKworY2xhc3MgQ2Fj
aGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UgOiBwdWJsaWMgQ2FjaGVkU1ZHRG9jdW1lbnRDbGllbnQg
eworcHVibGljOgorICAgIENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKGNvbnN0IFN0cmluZyYp
OworCisgICAgdmlydHVhbCB+Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UoKTsKKworICAgIHZv
aWQgbG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciYsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9u
cyYpOworICAgIGJvb2wgbG9hZFJlcXVlc3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZFJlcXVl
c3RlZDsgfQorCisgICAgQ2FjaGVkU1ZHRG9jdW1lbnQqIGRvY3VtZW50KCkgeyByZXR1cm4gbV9k
b2N1bWVudC5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIFN0cmluZyBtX3VybDsKKyAgICBDYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTVkdEb2N1bWVudD4gbV9kb2N1bWVudDsKKyAgICBib29s
IG1fbG9hZFJlcXVlc3RlZDsKK307CisKK307CisKKyNlbmRpZiAvLyBDYWNoZWRTVkdEb2N1bWVu
dFJlZmVyZW5jZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2Fj
aGVkU1ZHRm9udC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRm9u
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNzNiMWI2YmE0OTJkYzA1OGVlZGU5NzI2NzYxOGY5NzQ4NmJkYzI2
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRT
VkdGb250LmNwcApAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FjaGVkU1ZH
Rm9udC5oIgorCisjaWYgRU5BQkxFKFNWR19GT05UUykKKworI2luY2x1ZGUgIkZvbnREZXNjcmlw
dGlvbi5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKyNpbmNsdWRlICJOb0V2ZW50
RGlzcGF0Y2hBc3NlcnRpb24uaCIKKyNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgorI2luY2x1ZGUg
IlNWR0ZvbnRFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCisjaW5j
bHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgor
I2luY2x1ZGUgIlR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oIgorI2luY2x1ZGUgIlNW
R1RvT1RGRm9udENvbnZlcnNpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDYWNoZWRT
VkdGb250OjpDYWNoZWRTVkdGb250KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1
ZXN0LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQorICAgIDogQ2FjaGVkRm9udChyZXNvdXJjZVJlcXVl
c3QsIHNlc3Npb25JRCwgU1ZHRm9udFJlc291cmNlKQorICAgICwgbV9leHRlcm5hbFNWR0ZvbnRF
bGVtZW50KG51bGxwdHIpCit7Cit9CisKK1JlZlB0cjxGb250PiBDYWNoZWRTVkdGb250OjpjcmVh
dGVGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHJlbW90ZVVSSSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0
YWxpYywgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyYgZm9udEZhY2VGZWF0dXJlcywgY29uc3Qg
Rm9udFZhcmlhbnRTZXR0aW5ncyYgZm9udEZhY2VWYXJpYW50U2V0dGluZ3MpCit7CisgICAgaWYg
KGZpcnN0Rm9udEZhY2UocmVtb3RlVVJJKSkKKyAgICAgICAgcmV0dXJuIENhY2hlZEZvbnQ6OmNy
ZWF0ZUZvbnQoZm9udERlc2NyaXB0aW9uLCByZW1vdGVVUkksIHN5bnRoZXRpY0JvbGQsIHN5bnRo
ZXRpY0l0YWxpYywgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VWYXJpYW50U2V0dGluZ3MpOwor
ICAgIHJldHVybiBudWxscHRyOworfQorCitGb250UGxhdGZvcm1EYXRhIENhY2hlZFNWR0ZvbnQ6
OnBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBjb25zdCBGb250RmVhdHVyZVNldHRp
bmdzJiBmb250RmFjZUZlYXR1cmVzLCBjb25zdCBGb250VmFyaWFudFNldHRpbmdzJiBmb250RmFj
ZVZhcmlhbnRTZXR0aW5ncykKK3sKKyAgICBpZiAobV9leHRlcm5hbFNWR0RvY3VtZW50KQorICAg
ICAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhl
bFNpemUoKSwgYm9sZCwgaXRhbGljKTsKKyAgICByZXR1cm4gQ2FjaGVkRm9udDo6cGxhdGZvcm1E
YXRhRnJvbUN1c3RvbURhdGEoZm9udERlc2NyaXB0aW9uLCBib2xkLCBpdGFsaWMsIGZvbnRGYWNl
RmVhdHVyZXMsIGZvbnRGYWNlVmFyaWFudFNldHRpbmdzKTsKK30KKworYm9vbCBDYWNoZWRTVkdG
b250OjplbnN1cmVDdXN0b21Gb250RGF0YShjb25zdCBBdG9taWNTdHJpbmcmIHJlbW90ZVVSSSkK
K3sKKyAgICBpZiAoIW1fZXh0ZXJuYWxTVkdEb2N1bWVudCAmJiAhZXJyb3JPY2N1cnJlZCgpICYm
ICFpc0xvYWRpbmcoKSAmJiBtX2RhdGEpIHsKKyAgICAgICAgLy8gV2UgbWF5IGdldCBoZXJlIGR1
cmluZyByZW5kZXIgdHJlZSB1cGRhdGVzIHdoZW4gZXZlbnRzIGFyZSBmb3JiaWRkZW4uCisgICAg
ICAgIC8vIEZyYW1lbGVzcyBkb2N1bWVudCBjYW4ndCBydW4gc2NyaXB0cyBvciBjYWxsIGJhY2sg
dG8gdGhlIGNsaWVudCBzbyB0aGlzIGlzIHNhZmUuCisgICAgICAgIGF1dG8gY291bnQgPSBOb0V2
ZW50RGlzcGF0Y2hBc3NlcnRpb246OmRyb3BUZW1wb3JhcmlseSgpOworCisgICAgICAgIG1fZXh0
ZXJuYWxTVkdEb2N1bWVudCA9IFNWR0RvY3VtZW50OjpjcmVhdGUobnVsbHB0ciwgVVJMKCkpOwor
ICAgICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gZGVjb2RlciA9IFRleHRSZXNvdXJj
ZURlY29kZXI6OmNyZWF0ZSgiYXBwbGljYXRpb24veG1sIik7CisgICAgICAgIG1fZXh0ZXJuYWxT
VkdEb2N1bWVudC0+c2V0Q29udGVudChkZWNvZGVyLT5kZWNvZGVBbmRGbHVzaChtX2RhdGEtPmRh
dGEoKSwgbV9kYXRhLT5zaXplKCkpKTsKKworICAgICAgICBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRp
b246OnJlc3RvcmVEcm9wcGVkKGNvdW50KTsKKworICAgICAgICBpZiAoZGVjb2Rlci0+c2F3RXJy
b3IoKSkKKyAgICAgICAgICAgIG1fZXh0ZXJuYWxTVkdEb2N1bWVudCA9IG51bGxwdHI7CisgICAg
ICAgIGlmIChtX2V4dGVybmFsU1ZHRG9jdW1lbnQpCisgICAgICAgICAgICBtYXliZUluaXRpYWxp
emVFeHRlcm5hbFNWR0ZvbnRFbGVtZW50KHJlbW90ZVVSSSk7CisgICAgICAgIGlmICghbV9leHRl
cm5hbFNWR0ZvbnRFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBp
ZiAoYXV0byBjb252ZXJ0ZWRGb250ID0gY29udmVydFNWR1RvT1RGRm9udCgqbV9leHRlcm5hbFNW
R0ZvbnRFbGVtZW50KSkKKyAgICAgICAgICAgIG1fY29udmVydGVkRm9udCA9IFNoYXJlZEJ1ZmZl
cjo6YWRvcHRWZWN0b3IoY29udmVydGVkRm9udC52YWx1ZSgpKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBtX2V4dGVybmFsU1ZHRG9jdW1lbnQgPSBudWxscHRyOworICAgICAgICAgICAg
bV9leHRlcm5hbFNWR0ZvbnRFbGVtZW50ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtX2V4dGVybmFsU1ZHRG9jdW1l
bnQgJiYgQ2FjaGVkRm9udDo6ZW5zdXJlQ3VzdG9tRm9udERhdGEobV9jb252ZXJ0ZWRGb250Lmdl
dCgpKTsKK30KKworU1ZHRm9udEVsZW1lbnQqIENhY2hlZFNWR0ZvbnQ6OmdldFNWR0ZvbnRCeUlk
KGNvbnN0IFN0cmluZyYgZm9udE5hbWUpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZXh0ZXJuYWxT
VkdEb2N1bWVudCk7CisgICAgYXV0byBlbGVtZW50cyA9IGRlc2NlbmRhbnRzT2ZUeXBlPFNWR0Zv
bnRFbGVtZW50PigqbV9leHRlcm5hbFNWR0RvY3VtZW50KTsKKworICAgIGlmIChmb250TmFtZS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBlbGVtZW50cy5maXJzdCgpOworCisgICAgZm9yIChh
dXRvJiBlbGVtZW50IDogZWxlbWVudHMpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQuZ2V0SWRBdHRy
aWJ1dGUoKSA9PSBmb250TmFtZSkKKyAgICAgICAgICAgIHJldHVybiAmZWxlbWVudDsKKyAgICB9
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1NWR0ZvbnRFbGVtZW50KiBDYWNoZWRTVkdGb250
OjptYXliZUluaXRpYWxpemVFeHRlcm5hbFNWR0ZvbnRFbGVtZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyYgcmVtb3RlVVJJKQoreworICAgIGlmIChtX2V4dGVybmFsU1ZHRm9udEVsZW1lbnQpCisgICAg
ICAgIHJldHVybiBtX2V4dGVybmFsU1ZHRm9udEVsZW1lbnQ7CisgICAgU3RyaW5nIGZyYWdtZW50
SWRlbnRpZmllcjsKKyAgICBzaXplX3Qgc3RhcnQgPSByZW1vdGVVUkkuZmluZCgnIycpOworICAg
IGlmIChzdGFydCAhPSBub3RGb3VuZCkKKyAgICAgICAgZnJhZ21lbnRJZGVudGlmaWVyID0gcmVt
b3RlVVJJLnN0cmluZygpLnN1YnN0cmluZyhzdGFydCArIDEpOworICAgIG1fZXh0ZXJuYWxTVkdG
b250RWxlbWVudCA9IGdldFNWR0ZvbnRCeUlkKGZyYWdtZW50SWRlbnRpZmllcik7CisgICAgcmV0
dXJuIG1fZXh0ZXJuYWxTVkdGb250RWxlbWVudDsKK30KKworU1ZHRm9udEZhY2VFbGVtZW50KiBD
YWNoZWRTVkdGb250OjpmaXJzdEZvbnRGYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJ
KQoreworICAgIGlmICghbWF5YmVJbml0aWFsaXplRXh0ZXJuYWxTVkdGb250RWxlbWVudChyZW1v
dGVVUkkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChhdXRvKiBmaXJzdEZv
bnRGYWNlID0gY2hpbGRyZW5PZlR5cGU8U1ZHRm9udEZhY2VFbGVtZW50PigqbV9leHRlcm5hbFNW
R0ZvbnRFbGVtZW50KS5maXJzdCgpKQorICAgICAgICByZXR1cm4gZmlyc3RGb250RmFjZTsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRTVkdGb250LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvZmV0Y2gvQ2FjaGVkU1ZHRm9udC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2MWJhNWMyNTM3YzcyNGJmMjJj
ODQwNDM3MTQ1ZTQ5ODI3NWQ3M2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvZmV0Y2gvQ2FjaGVkU1ZHRm9udC5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDYWNoZWRT
VkdGb250X2gKKyNkZWZpbmUgQ2FjaGVkU1ZHRm9udF9oCisKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRT
KQorCisjaW5jbHVkZSAiQ2FjaGVkRm9udC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFNWR0ZvbnRGYWNlRWxlbWVudDsKKworY2xhc3MgQ2FjaGVkU1ZHRm9udCBmaW5hbCA6IHB1
YmxpYyBDYWNoZWRGb250IHsKK3B1YmxpYzoKKyAgICBDYWNoZWRTVkdGb250KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIFNlc3Npb25JRCk7CisKKyAgICBib29sIGVuc3VyZUN1c3RvbUZvbnREYXRh
KGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJKSBvdmVycmlkZTsKKyAgICAKKyAgICBSZWZQ
dHI8Rm9udD4gY3JlYXRlRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNT
dHJpbmcmIHJlbW90ZVVSSSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxp
YywgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyYsIGNvbnN0IEZvbnRWYXJpYW50U2V0dGluZ3Mm
KSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBGb250UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0
YUZyb21DdXN0b21EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgYm9sZCwgYm9vbCBp
dGFsaWMsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MmLCBjb25zdCBGb250VmFyaWFudFNldHRp
bmdzJik7CisKKyAgICBTVkdGb250RWxlbWVudCogZ2V0U1ZHRm9udEJ5SWQoY29uc3QgU3RyaW5n
JikgY29uc3Q7CisKKyAgICBTVkdGb250RWxlbWVudCogbWF5YmVJbml0aWFsaXplRXh0ZXJuYWxT
VkdGb250RWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIHJlbW90ZVVSSSk7CisgICAgU1ZHRm9u
dEZhY2VFbGVtZW50KiBmaXJzdEZvbnRGYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcmVtb3RlVVJJ
KTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fY29udmVydGVkRm9udDsKKyAgICBSZWZQ
dHI8U1ZHRG9jdW1lbnQ+IG1fZXh0ZXJuYWxTVkdEb2N1bWVudDsKKyAgICBTVkdGb250RWxlbWVu
dCogbV9leHRlcm5hbFNWR0ZvbnRFbGVtZW50OworfTsKKworfQorCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0NBQ0hFRF9SRVNPVVJDRShDYWNoZWRTVkdGb250LCBDYWNoZWRSZXNvdXJjZTo6U1ZH
Rm9udFJlc291cmNlKQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkU2NyaXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9mZXRjaC9DYWNoZWRTY3JpcHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0NTg0YzllNjQ2ODU0M2M4MTc3
MWQ5MDFlYWIyZjdlZjhlZjY0MzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvZmV0Y2gvQ2FjaGVkU2NyaXB0LmNwcApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgICAgQ29w
eXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCisgICAg
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisKKyAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFs
aXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxlIHNoZWV0cyBhbmQgaHRtbAorICAg
IHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hlIGZvciB0aGVzZSBvYmpl
Y3RzLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5o
IgorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZUNsaWVudFdhbGtlci5oIgorI2luY2x1ZGUgIkhUVFBIZWFkZXJOYW1lcy5oIgorI2lu
Y2x1ZGUgIkhUVFBQYXJzZXJzLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2lu
Y2x1ZGUgIk1lbW9yeUNhY2hlLmgiCisjaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tz
LmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVj
b2Rlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NhY2hlZFNjcmlwdDo6Q2FjaGVkU2Ny
aXB0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBTdHJpbmcm
IGNoYXJzZXQsIFNlc3Npb25JRCBzZXNzaW9uSUQpCisgICAgOiBDYWNoZWRSZXNvdXJjZShyZXNv
dXJjZVJlcXVlc3QsIFNjcmlwdCwgc2Vzc2lvbklEKQorICAgICwgbV9kZWNvZGVyKFRleHRSZXNv
dXJjZURlY29kZXI6OmNyZWF0ZShBU0NJSUxpdGVyYWwoImFwcGxpY2F0aW9uL2phdmFzY3JpcHQi
KSwgY2hhcnNldCkpCit7CisgICAgLy8gSXQncyBqYXZhc2NyaXB0IHdlIHdhbnQuCisgICAgLy8g
QnV0IHNvbWUgd2Vic2l0ZXMgdGhpbmsgdGhlaXIgc2NyaXB0cyBhcmUgPHNvbWUgd3JvbmcgbWlt
ZXR5cGUgaGVyZT4KKyAgICAvLyBhbmQgcmVmdXNlIHRvIHNlcnZlIHRoZW0gaWYgd2Ugb25seSBh
Y2NlcHQgYXBwbGljYXRpb24veC1qYXZhc2NyaXB0LgorICAgIHNldEFjY2VwdCgiKi8qIik7Cit9
CisKK0NhY2hlZFNjcmlwdDo6fkNhY2hlZFNjcmlwdCgpCit7Cit9CisKK3ZvaWQgQ2FjaGVkU2Ny
aXB0OjpzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmIGNocykKK3sKKyAgICBtX2RlY29kZXItPnNl
dEVuY29kaW5nKGNocywgVGV4dFJlc291cmNlRGVjb2Rlcjo6RW5jb2RpbmdGcm9tSFRUUEhlYWRl
cik7Cit9CisKK1N0cmluZyBDYWNoZWRTY3JpcHQ6OmVuY29kaW5nKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9kZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKTsKK30KKworU3RyaW5nIENhY2hlZFNj
cmlwdDo6bWltZVR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBleHRyYWN0TUlNRVR5cGVGcm9t
TWVkaWFUeXBlKG1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250
ZW50VHlwZSkpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7Cit9CisKK1N0cmluZ1ZpZXcgQ2Fj
aGVkU2NyaXB0OjpzY3JpcHQoKQoreworICAgIGlmICghbV9kYXRhKQorICAgICAgICByZXR1cm4g
eyB9OworCisgICAgaWYgKG1fZGVjb2RpbmdTdGF0ZSA9PSBOZXZlckRlY29kZWQKKyAgICAgICAg
JiYgVGV4dEVuY29kaW5nKGVuY29kaW5nKCkpLmlzQnl0ZUJhc2VkRW5jb2RpbmcoKQorICAgICAg
ICAmJiBtX2RhdGEtPnNpemUoKQorICAgICAgICAmJiBjaGFyYWN0ZXJzQXJlQWxsQVNDSUkocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KG1fZGF0YS0+ZGF0YSgpKSwgbV9kYXRhLT5zaXpl
KCkpKSB7CisKKyAgICAgICAgbV9kZWNvZGluZ1N0YXRlID0gRGF0YUFuZERlY29kZWRTdHJpbmdI
YXZlU2FtZUJ5dGVzOworCisgICAgICAgIC8vIElmIHRoZSBlbmNvZGVkIGFuZCBkZWNvZGVkIGRh
dGEgYXJlIHRoZSBzYW1lLCB0aGVyZSBpcyBubyBkZWNvZGVkIGRhdGEgY29zdCEKKyAgICAgICAg
c2V0RGVjb2RlZFNpemUoMCk7CisgICAgICAgIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyLnN0
b3AoKTsKKworICAgICAgICBtX3NjcmlwdEhhc2ggPSBTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNo
QW5kTWFza1RvcDhCaXRzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihtX2RhdGEtPmRh
dGEoKSksIG1fZGF0YS0+c2l6ZSgpKTsKKyAgICB9CisKKyAgICBpZiAobV9kZWNvZGluZ1N0YXRl
ID09IERhdGFBbmREZWNvZGVkU3RyaW5nSGF2ZVNhbWVCeXRlcykKKyAgICAgICAgcmV0dXJuIHsg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KG1fZGF0YS0+ZGF0YSgpKSwgbV9kYXRhLT5z
aXplKCkgfTsKKworICAgIGlmICghbV9zY3JpcHQpIHsKKyAgICAgICAgbV9zY3JpcHQgPSBtX2Rl
Y29kZXItPmRlY29kZUFuZEZsdXNoKG1fZGF0YS0+ZGF0YSgpLCBlbmNvZGVkU2l6ZSgpKTsKKyAg
ICAgICAgQVNTRVJUKCFtX3NjcmlwdEhhc2ggfHwgbV9zY3JpcHRIYXNoID09IG1fc2NyaXB0Lmlt
cGwoKS0+aGFzaCgpKTsKKyAgICAgICAgaWYgKG1fZGVjb2RpbmdTdGF0ZSA9PSBOZXZlckRlY29k
ZWQpCisgICAgICAgICAgICBtX3NjcmlwdEhhc2ggPSBtX3NjcmlwdC5pbXBsKCktPmhhc2goKTsK
KyAgICAgICAgbV9kZWNvZGluZ1N0YXRlID0gRGF0YUFuZERlY29kZWRTdHJpbmdIYXZlRGlmZmVy
ZW50Qnl0ZXM7CisgICAgICAgIHNldERlY29kZWRTaXplKG1fc2NyaXB0LnNpemVJbkJ5dGVzKCkp
OworICAgIH0KKworICAgIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyLnJlc3RhcnQoKTsKKyAg
ICByZXR1cm4gbV9zY3JpcHQ7Cit9CisKK3Vuc2lnbmVkIENhY2hlZFNjcmlwdDo6c2NyaXB0SGFz
aCgpCit7CisgICAgaWYgKG1fZGVjb2RpbmdTdGF0ZSA9PSBOZXZlckRlY29kZWQpCisgICAgICAg
IHNjcmlwdCgpOworICAgIHJldHVybiBtX3NjcmlwdEhhc2g7Cit9CisKK3ZvaWQgQ2FjaGVkU2Ny
aXB0OjpmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1ZmZlciogZGF0YSkKK3sKKyAgICBtX2RhdGEgPSBk
YXRhOworICAgIHNldEVuY29kZWRTaXplKGRhdGEgPyBkYXRhLT5zaXplKCkgOiAwKTsKKyAgICBD
YWNoZWRSZXNvdXJjZTo6ZmluaXNoTG9hZGluZyhkYXRhKTsKK30KKwordm9pZCBDYWNoZWRTY3Jp
cHQ6OmRlc3Ryb3lEZWNvZGVkRGF0YSgpCit7CisgICAgbV9zY3JpcHQgPSBTdHJpbmcoKTsKKyAg
ICBzZXREZWNvZGVkU2l6ZSgwKTsKK30KKworI2lmIEVOQUJMRShOT1NOSUZGKQorYm9vbCBDYWNo
ZWRTY3JpcHQ6Om1pbWVUeXBlQWxsb3dlZEJ5Tm9zbmlmZigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHBhcnNlQ29udGVudFR5cGVPcHRpb25zSGVhZGVyKG1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxk
KEhUVFBIZWFkZXJOYW1lOjpYQ29udGVudFR5cGVPcHRpb25zKSkgIT0gQ29udGVudFR5cGVPcHRp
b25zTm9zbmlmZiB8fCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1F
VHlwZShtaW1lVHlwZSgpKTsKK30KKyNlbmRpZgorCitib29sIENhY2hlZFNjcmlwdDo6c2hvdWxk
SWdub3JlSFRUUFN0YXR1c0NvZGVFcnJvcnMoKSBjb25zdAoreworI2lmIFBMQVRGT1JNKE1BQykK
KyAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzEzOTE2Mjkx
PgorICAgIC8vIFJFR1JFU1NJT04gKHIxMTk3NTkpOiBBZG9iZSBGbGFzaCBQbGF5ZXIgInNtYWxs
ZXIiIGluc3RhbGxlciByZWxpZXMgb24gdGhlIGluY29ycmVjdCBmaXJpbmcKKyAgICAvLyBvZiBh
IGxvYWQgZXZlbnQgYW5kIG5lZWRzIGFuIGFwcC1zcGVjaWZpYyBoYWNrIGZvciBjb21wYXRpYmls
aXR5LgorICAgIC8vIFRoZSBpbnN0YWxsZXIgaW4gcXVlc3Rpb24gdHJpZXMgdG8gbG9hZCAuanMg
ZmlsZSB0aGF0IGRvZXNuJ3QgZXhpc3QsIGNhdXNpbmcgdGhlIHNlcnZlciB0bworICAgIC8vIHJl
dHVybiBhIDQwNCByZXNwb25zZS4gTm9ybWFsbHksIHRoaXMgd291bGQgdHJpZ2dlciBhbiBlcnJv
ciBldmVudCB0byBiZSBkaXNwYXRjaGVkLCBidXQgdGhlCisgICAgLy8gaW5zdGFsbGVyIGV4cGVj
dHMgYSBsb2FkIGV2ZW50IGluc3RlYWQgc28gd2Ugd29yayBhcm91bmQgaXQgaGVyZS4KKyAgICBp
ZiAoTWFjQXBwbGljYXRpb246OmlzU29saWRTdGF0ZU5ldHdvcmtzRG93bmxvYWRlcigpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorCisgICAgcmV0dXJuIENhY2hlZFJlc291cmNlOjpz
aG91bGRJZ25vcmVIVFRQU3RhdHVzQ29kZUVycm9ycygpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkU2Ny
aXB0LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkU2NyaXB0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZGJmMWQxNDE2YzUyMGY5MTQ3NzFkYjkzMDVmMjU4MzdiZjRjYjFlZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRTY3JpcHQuaApAQCAt
MCwwICsxLDc0IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9s
bEBtcGktaGQubXBnLmRlKQorICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11
ZWxsZXJAa2RlLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2Ft
LndlaW5pZ0BnbWFpbC5jb20pCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgICBUaGlzIGNsYXNz
IHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0
eWxlIHNoZWV0cyBhbmQgaHRtbAorICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVt
b3J5IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgorKi8KKworI2lmbmRlZiBDYWNoZWRTY3JpcHRf
aAorI2RlZmluZSBDYWNoZWRTY3JpcHRfaAorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyOworCitj
bGFzcyBDYWNoZWRTY3JpcHQgZmluYWwgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2UgeworcHVibGlj
OgorICAgIENhY2hlZFNjcmlwdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcm
IGNoYXJzZXQsIFNlc3Npb25JRCk7CisgICAgdmlydHVhbCB+Q2FjaGVkU2NyaXB0KCk7CisKKyAg
ICBTdHJpbmdWaWV3IHNjcmlwdCgpOworICAgIHVuc2lnbmVkIHNjcmlwdEhhc2goKTsKKworICAg
IFN0cmluZyBtaW1lVHlwZSgpIGNvbnN0OworCisjaWYgRU5BQkxFKE5PU05JRkYpCisgICAgYm9v
bCBtaW1lVHlwZUFsbG93ZWRCeU5vc25pZmYoKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgor
ICAgIGJvb2wgbWF5VHJ5UmVwbGFjZUVuY29kZWREYXRhKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQorCisgICAgYm9vbCBzaG91bGRJZ25vcmVIVFRQU3RhdHVzQ29kZUVycm9ycygp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmKSBv
dmVycmlkZTsKKyAgICBTdHJpbmcgZW5jb2RpbmcoKSBjb25zdCBvdmVycmlkZTsKKyAgICBjb25z
dCBUZXh0UmVzb3VyY2VEZWNvZGVyKiB0ZXh0UmVzb3VyY2VEZWNvZGVyKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9kZWNvZGVyLmdldCgpOyB9CisgICAgdm9pZCBmaW5pc2hMb2FkaW5nKFNo
YXJlZEJ1ZmZlciopIG92ZXJyaWRlOworCisgICAgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoKSBv
dmVycmlkZTsKKworICAgIFN0cmluZyBtX3NjcmlwdDsKKyAgICB1bnNpZ25lZCBtX3NjcmlwdEhh
c2ggeyAwIH07CisKKyAgICBlbnVtIERlY29kaW5nU3RhdGUgeyBOZXZlckRlY29kZWQsIERhdGFB
bmREZWNvZGVkU3RyaW5nSGF2ZVNhbWVCeXRlcywgRGF0YUFuZERlY29kZWRTdHJpbmdIYXZlRGlm
ZmVyZW50Qnl0ZXMgfTsKKyAgICBEZWNvZGluZ1N0YXRlIG1fZGVjb2RpbmdTdGF0ZSB7IE5ldmVy
RGVjb2RlZCB9OworCisgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19D
QUNIRURfUkVTT1VSQ0UoQ2FjaGVkU2NyaXB0LCBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0KQorCisj
ZW5kaWYgLy8gQ2FjaGVkU2NyaXB0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9mZXRjaC9DYWNoZWRTdHlsZVNoZWV0Q2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
ZmV0Y2gvQ2FjaGVkU3R5bGVTaGVldENsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJhYTI5MmE3MWRkZGVj
OWE0YjU0OTJjZjI2ZTRhZjk5ZWZlMTJlMjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkU3R5bGVTaGVldENsaWVudC5oCkBAIC0wLDAgKzEsNDgg
QEAKKy8qCisgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcu
ZGUpCisgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgor
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIAorIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIAorIFRoaXMgY2xhc3MgcHJv
dmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUg
c2hlZXRzIGFuZCBodG1sCisgcGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkgY2Fj
aGUgZm9yIHRoZXNlIG9iamVjdHMuCisgKi8KKworI2lmbmRlZiBDYWNoZWRTdHlsZVNoZWV0Q2xp
ZW50X2gKKyNkZWZpbmUgQ2FjaGVkU3R5bGVTaGVldENsaWVudF9oCisKKyNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVldDsKK2NsYXNzIFVSTDsKKwor
Y2xhc3MgQ2FjaGVkU3R5bGVTaGVldENsaWVudCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVu
dCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q2FjaGVkU3R5bGVTaGVldENsaWVudCgpIHsgfQor
ICAgIHN0YXRpYyBDYWNoZWRSZXNvdXJjZUNsaWVudFR5cGUgZXhwZWN0ZWRUeXBlKCkgeyByZXR1
cm4gU3R5bGVTaGVldFR5cGU7IH0KKyAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFR5cGUgcmVzb3Vy
Y2VDbGllbnRUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZXhwZWN0ZWRUeXBlKCk7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgc2V0Q1NTU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIC8qIGhyZWYg
Ki8sIGNvbnN0IFVSTCYgLyogYmFzZVVSTCAqLywgY29uc3QgU3RyaW5nJiAvKiBjaGFyc2V0ICov
LCBjb25zdCBDYWNoZWRDU1NTdHlsZVNoZWV0KikgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldFhT
TFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiAvKiBocmVmICovLCBjb25zdCBVUkwmIC8qIGJhc2VV
UkwgKi8sIGNvbnN0IFN0cmluZyYgLyogc2hlZXQgKi8pIHsgfQorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ2FjaGVkU3R5bGVTaGVldENsaWVudF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkVGV4dFRyYWNrLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRUZXh0VHJhY2suY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljk1Y2I0YWU4MjRhMzAzODg1NjU4YmI4Njk3MGZlZTc4OGU5ZDk0ZjEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkVGV4dFRyYWNrLmNwcApAQCAt
MCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQorCisjaW5jbHVkZSAiQ2FjaGVkVGV4dFRyYWNrLmgiCisKKyNpbmNs
dWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xp
ZW50V2Fsa2VyLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworQ2FjaGVkVGV4dFRyYWNrOjpDYWNoZWRUZXh0VHJhY2soY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIFNlc3Npb25JRCBzZXNzaW9uSUQp
CisgICAgOiBDYWNoZWRSZXNvdXJjZShyZXNvdXJjZVJlcXVlc3QsIFRleHRUcmFja1Jlc291cmNl
LCBzZXNzaW9uSUQpCit7Cit9CisKK3ZvaWQgQ2FjaGVkVGV4dFRyYWNrOjp1cGRhdGVEYXRhKFNo
YXJlZEJ1ZmZlciogZGF0YSkKK3sKKyAgICBBU1NFUlQoZGF0YUJ1ZmZlcmluZ1BvbGljeSgpID09
IEJ1ZmZlckRhdGEpOworICAgIG1fZGF0YSA9IGRhdGE7CisgICAgc2V0RW5jb2RlZFNpemUoZGF0
YSA/IGRhdGEtPnNpemUoKSA6IDApOworCisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI8
Q2FjaGVkUmVzb3VyY2VDbGllbnQ+IHdhbGtlcihtX2NsaWVudHMpOworICAgIHdoaWxlIChDYWNo
ZWRSZXNvdXJjZUNsaWVudCogY2xpZW50ID0gd2Fsa2VyLm5leHQoKSkKKyAgICAgICAgY2xpZW50
LT5kZXByZWNhdGVkRGlkUmVjZWl2ZUNhY2hlZFJlc291cmNlKHRoaXMpOworfQorCit2b2lkIENh
Y2hlZFRleHRUcmFjazo6YWRkRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXImIGRhdGEpCit7CisgICAg
dXBkYXRlRGF0YSgmZGF0YSk7CisgICAgQ2FjaGVkUmVzb3VyY2U6OmFkZERhdGFCdWZmZXIoZGF0
YSk7Cit9CisKK3ZvaWQgQ2FjaGVkVGV4dFRyYWNrOjpmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1ZmZl
ciogZGF0YSkKK3sKKyAgICB1cGRhdGVEYXRhKGRhdGEpOworICAgIENhY2hlZFJlc291cmNlOjpm
aW5pc2hMb2FkaW5nKGRhdGEpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hlZFRleHRUcmFjay5oIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2ZldGNoL0NhY2hlZFRleHRUcmFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0ZTUzNGQzNTBjYWVk
M2ZhNjNjYTA5MzBmZDgyYmVhZmUyNjBhMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVkVGV4dFRyYWNrLmgKQEAgLTAsMCArMSw1NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQ2FjaGVkVGV4dFRyYWNrX2gKKyNkZWZpbmUgQ2FjaGVkVGV4dFRy
YWNrX2gKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlLmgiCisjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQ2FjaGVkVGV4dFRyYWNrIGZpbmFsIDogcHVibGljIENhY2hlZFJlc291cmNlIHsKK3B1
YmxpYzoKKyAgICBDYWNoZWRUZXh0VHJhY2soY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2Vzc2lv
bklEKTsKKworcHJpdmF0ZToKKyAgICBib29sIG1heVRyeVJlcGxhY2VFbmNvZGVkRGF0YSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2b2lkIGFkZERhdGFCdWZmZXIoU2hh
cmVkQnVmZmVyJikgb3ZlcnJpZGU7CisgICAgdm9pZCBmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1ZmZl
ciopIG92ZXJyaWRlOworCisgICAgdm9pZCB1cGRhdGVEYXRhKFNoYXJlZEJ1ZmZlciopOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBQ0hF
RF9SRVNPVVJDRShDYWNoZWRUZXh0VHJhY2ssIENhY2hlZFJlc291cmNlOjpUZXh0VHJhY2tSZXNv
dXJjZSkKKworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKKworI2VuZGlmIC8vIENhY2hl
ZFRleHRUcmFja19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2Fj
aGVkWFNMU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvQ2FjaGVk
WFNMU3R5bGVTaGVldC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmJjMTRmZmYyNjA3OGM4ZDI5YjY4ZDIyZTky
NTgwYjQ1ZDUzYjE0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9m
ZXRjaC9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcApAQCAtMCwwICsxLDkxIEBACisvKgorICAgIENv
cHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQorICAgIENv
cHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDIgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQorICAgIENvcHly
aWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKworICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxp
dHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUgc2hlZXRzIGFuZCBodG1sCisgICAg
cGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkgY2FjaGUgZm9yIHRoZXNlIG9iamVj
dHMuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FjaGVkWFNMU3R5bGVT
aGVldC5oIgorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKKyNpbmNs
dWRlICJDYWNoZWRTdHlsZVNoZWV0Q2xpZW50LmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
CisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyNpZiBFTkFCTEUoWFNMVCkKKworQ2FjaGVkWFNMU3R5bGVTaGVldDo6Q2FjaGVkWFNMU3R5
bGVTaGVldChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgU2Vzc2lvbklE
IHNlc3Npb25JRCkKKyAgICA6IENhY2hlZFJlc291cmNlKHJlc291cmNlUmVxdWVzdCwgWFNMU3R5
bGVTaGVldCwgc2Vzc2lvbklEKQorICAgICwgbV9kZWNvZGVyKFRleHRSZXNvdXJjZURlY29kZXI6
OmNyZWF0ZSgidGV4dC94c2wiKSkKK3sKKyAgICAvLyBJdCdzIFhNTCB3ZSB3YW50LgorICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBhY2NlcHQgbW9yZSBnZW5lcmFsIHhtbCBmb3JtYXRzICovKit4
bWwsIGltYWdlL3N2Zyt4bWwgZm9yIGV4YW1wbGUuCisgICAgc2V0QWNjZXB0KCJ0ZXh0L3htbCwg
YXBwbGljYXRpb24veG1sLCBhcHBsaWNhdGlvbi94aHRtbCt4bWwsIHRleHQveHNsLCBhcHBsaWNh
dGlvbi9yc3MreG1sLCBhcHBsaWNhdGlvbi9hdG9tK3htbCIpOworfQorCitDYWNoZWRYU0xTdHls
ZVNoZWV0Ojp+Q2FjaGVkWFNMU3R5bGVTaGVldCgpCit7Cit9CisKK3ZvaWQgQ2FjaGVkWFNMU3R5
bGVTaGVldDo6ZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50KiBjKQoreyAgCisgICAg
QVNTRVJUKGMtPnJlc291cmNlQ2xpZW50VHlwZSgpID09IENhY2hlZFN0eWxlU2hlZXRDbGllbnQ6
OmV4cGVjdGVkVHlwZSgpKTsKKyAgICBpZiAoIWlzTG9hZGluZygpKQorICAgICAgICBzdGF0aWNf
Y2FzdDxDYWNoZWRTdHlsZVNoZWV0Q2xpZW50Kj4oYyktPnNldFhTTFN0eWxlU2hlZXQobV9yZXNv
dXJjZVJlcXVlc3QudXJsKCksIG1fcmVzcG9uc2UudXJsKCksIG1fc2hlZXQpOworfQorCit2b2lk
IENhY2hlZFhTTFN0eWxlU2hlZXQ6OnNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYgY2hzKQorewor
ICAgIG1fZGVjb2Rlci0+c2V0RW5jb2RpbmcoY2hzLCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpFbmNv
ZGluZ0Zyb21IVFRQSGVhZGVyKTsKK30KKworU3RyaW5nIENhY2hlZFhTTFN0eWxlU2hlZXQ6OmVu
Y29kaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWNvZGVyLT5lbmNvZGluZygpLm5hbWUo
KTsKK30KKwordm9pZCBDYWNoZWRYU0xTdHlsZVNoZWV0OjpmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1
ZmZlciogZGF0YSkKK3sKKyAgICBtX2RhdGEgPSBkYXRhOworICAgIHNldEVuY29kZWRTaXplKGRh
dGEgPyBkYXRhLT5zaXplKCkgOiAwKTsKKyAgICBpZiAoZGF0YSkKKyAgICAgICAgbV9zaGVldCA9
IG1fZGVjb2Rlci0+ZGVjb2RlQW5kRmx1c2goZGF0YS0+ZGF0YSgpLCBlbmNvZGVkU2l6ZSgpKTsK
KyAgICBzZXRMb2FkaW5nKGZhbHNlKTsKKyAgICBjaGVja05vdGlmeSgpOworfQorCit2b2lkIENh
Y2hlZFhTTFN0eWxlU2hlZXQ6OmNoZWNrTm90aWZ5KCkKK3sKKyAgICBpZiAoaXNMb2FkaW5nKCkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxD
YWNoZWRTdHlsZVNoZWV0Q2xpZW50PiB3KG1fY2xpZW50cyk7CisgICAgd2hpbGUgKENhY2hlZFN0
eWxlU2hlZXRDbGllbnQqIGMgPSB3Lm5leHQoKSkKKyAgICAgICAgYy0+c2V0WFNMU3R5bGVTaGVl
dChtX3Jlc291cmNlUmVxdWVzdC51cmwoKSwgbV9yZXNwb25zZS51cmwoKSwgbV9zaGVldCk7Cit9
CisKKyNlbmRpZgorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gv
Q2FjaGVkWFNMU3R5bGVTaGVldC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2ZldGNoL0NhY2hl
ZFhTTFN0eWxlU2hlZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZWNmZjQ1ZWY0ZGYxZjE5MTdiYjhjNDk0NWZm
MmZhOWQ2NjhmNTZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Zl
dGNoL0NhY2hlZFhTTFN0eWxlU2hlZXQuaApAQCAtMCwwICsxLDYzIEBACisvKgorICAgIENvcHly
aWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQorICAgIENvcHly
aWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAgICBDb3B5cmln
aHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCisgICAgQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisKKyAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5
IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxlIHNoZWV0cyBhbmQgaHRtbAorICAgIHBh
Z2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hlIGZvciB0aGVzZSBvYmplY3Rz
LgorKi8KKworI2lmbmRlZiBDYWNoZWRYU0xTdHlsZVNoZWV0X2gKKyNkZWZpbmUgQ2FjaGVkWFNM
U3R5bGVTaGVldF9oCisKKyNpZiBFTkFCTEUoWFNMVCkKKworI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGV4dFJlc291cmNlRGVjb2Rl
cjsKKworY2xhc3MgQ2FjaGVkWFNMU3R5bGVTaGVldCBmaW5hbCA6IHB1YmxpYyBDYWNoZWRSZXNv
dXJjZSB7CitwdWJsaWM6CisgICAgQ2FjaGVkWFNMU3R5bGVTaGVldChjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBTZXNzaW9uSUQpOworICAgIHZpcnR1YWwgfkNhY2hlZFhTTFN0eWxlU2hlZXQoKTsK
KworICAgIGNvbnN0IFN0cmluZyYgc2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3NoZWV0OyB9CisK
K3ByaXZhdGU6CisgICAgdm9pZCBjaGVja05vdGlmeSgpIG92ZXJyaWRlOworICAgIGJvb2wgbWF5
VHJ5UmVwbGFjZUVuY29kZWREYXRhKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZvaWQgZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICBTdHJpbmcg
ZW5jb2RpbmcoKSBjb25zdCBvdmVycmlkZTsKKyAgICBjb25zdCBUZXh0UmVzb3VyY2VEZWNvZGVy
KiB0ZXh0UmVzb3VyY2VEZWNvZGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZWNvZGVy
LmdldCgpOyB9CisgICAgdm9pZCBmaW5pc2hMb2FkaW5nKFNoYXJlZEJ1ZmZlciopIG92ZXJyaWRl
OworCisgICAgU3RyaW5nIG1fc2hlZXQ7CisgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+
IG1fZGVjb2RlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19DQUNIRURfUkVTT1VSQ0UoQ2FjaGVkWFNMU3R5bGVTaGVldCwgQ2FjaGVkUmVz
b3VyY2U6OlhTTFN0eWxlU2hlZXQpCisKKyNlbmRpZiAvLyBFTkFCTEUoWFNMVCkKKworI2VuZGlm
IC8vIENhY2hlZFhTTFN0eWxlU2hlZXRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2ZldGNoL01lbW9yeUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9N
ZW1vcnlDYWNoZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjkzNTAxZTRiMjlmNmI4MjlhNjI1MThhODVkODUw
YjFlZjA0NmRmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9mZXRj
aC9NZW1vcnlDYWNoZS5jcHAKQEAgLTAsMCArMSw4MDAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCisgICAgQ29weXJpZ2h0IChD
KSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykg
MjAwMiBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKKwor
I2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNs
dWRlICJDYWNoZWRJbWFnZUNsaWVudC5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCisj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgor
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiTG9n
Z2luZy5oIgorI2luY2x1ZGUgIlB1YmxpY1N1ZmZpeC5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgorI2luY2x1ZGUgIldvcmtlckdsb2JhbFNjb3BlLmgiCisjaW5jbHVkZSAiV29ya2VyTG9h
ZGVyUHJveHkuaCIKKyNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKKyNpbmNsdWRlIDxzdGRpby5o
PgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1RlbXBv
cmFyeUNoYW5nZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgaW50IGNEZWZhdWx0Q2FjaGVDYXBhY2l0eSA9IDgx
OTIgKiAxMDI0Oworc3RhdGljIGNvbnN0IGRvdWJsZSBjTWluRGVsYXlCZWZvcmVMaXZlRGVjb2Rl
ZFBydW5lID0gMTsgLy8gU2Vjb25kcy4KK3N0YXRpYyBjb25zdCBmbG9hdCBjVGFyZ2V0UHJ1bmVQ
ZXJjZW50YWdlID0gLjk1ZjsgLy8gUGVyY2VudGFnZSBvZiBjYXBhY2l0eSB0b3dhcmQgd2hpY2gg
d2UgcHJ1bmUsIHRvIGF2b2lkIGltbWVkaWF0ZWx5IHBydW5pbmcgYWdhaW4uCitzdGF0aWMgY29u
c3QgYXV0byBkZWZhdWx0RGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsID0gc3RkOjpjaHJvbm86
OnNlY29uZHMgeyAwIH07CisKK01lbW9yeUNhY2hlJiBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkK
K3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPE1lbW9yeUNhY2hlPiBtZW1vcnlDYWNoZTsKKyAgICByZXR1cm4gbWVtb3J5Q2FjaGU7
Cit9CisKK01lbW9yeUNhY2hlOjpNZW1vcnlDYWNoZSgpCisgICAgOiBtX2Rpc2FibGVkKGZhbHNl
KQorICAgICwgbV9pblBydW5lUmVzb3VyY2VzKGZhbHNlKQorICAgICwgbV9jYXBhY2l0eShjRGVm
YXVsdENhY2hlQ2FwYWNpdHkpCisgICAgLCBtX21pbkRlYWRDYXBhY2l0eSgwKQorICAgICwgbV9t
YXhEZWFkQ2FwYWNpdHkoY0RlZmF1bHRDYWNoZUNhcGFjaXR5KQorICAgICwgbV9kZWFkRGVjb2Rl
ZERhdGFEZWxldGlvbkludGVydmFsKGRlZmF1bHREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwp
CisgICAgLCBtX2xpdmVTaXplKDApCisgICAgLCBtX2RlYWRTaXplKDApCisgICAgLCBtX3BydW5l
VGltZXIoKnRoaXMsICZNZW1vcnlDYWNoZTo6cHJ1bmUpCit7Cit9CisKK2F1dG8gTWVtb3J5Q2Fj
aGU6OnNlc3Npb25SZXNvdXJjZU1hcChTZXNzaW9uSUQgc2Vzc2lvbklEKSBjb25zdCAtPiBDYWNo
ZWRSZXNvdXJjZU1hcCoKK3sKKyAgICBBU1NFUlQoc2Vzc2lvbklELmlzVmFsaWQoKSk7CisgICAg
cmV0dXJuIG1fc2Vzc2lvblJlc291cmNlcy5nZXQoc2Vzc2lvbklEKTsKK30KKworYXV0byBNZW1v
cnlDYWNoZTo6ZW5zdXJlU2Vzc2lvblJlc291cmNlTWFwKFNlc3Npb25JRCBzZXNzaW9uSUQpIC0+
IENhY2hlZFJlc291cmNlTWFwJgoreworICAgIEFTU0VSVChzZXNzaW9uSUQuaXNWYWxpZCgpKTsK
KyAgICBhdXRvJiBtYXAgPSBtX3Nlc3Npb25SZXNvdXJjZXMuYWRkKHNlc3Npb25JRCwgbnVsbHB0
cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmICghbWFwKQorICAgICAgICBtYXAgPSBzdGQ6Om1h
a2VfdW5pcXVlPENhY2hlZFJlc291cmNlTWFwPigpOworICAgIHJldHVybiAqbWFwOworfQorCitV
UkwgTWVtb3J5Q2FjaGU6OnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcklmTmVlZGVkKGNvbnN0IFVS
TCYgb3JpZ2luYWxVUkwpCit7CisgICAgaWYgKCFvcmlnaW5hbFVSTC5oYXNGcmFnbWVudElkZW50
aWZpZXIoKSkKKyAgICAgICAgcmV0dXJuIG9yaWdpbmFsVVJMOworICAgIC8vIFN0cmlwIGF3YXkg
ZnJhZ21lbnQgaWRlbnRpZmllciBmcm9tIEhUVFAgVVJMcy4KKyAgICAvLyBEYXRhIFVSTHMgbXVz
dCBiZSB1bm1vZGlmaWVkLiBGb3IgZmlsZSBhbmQgY3VzdG9tIFVSTHMgY2xpZW50cyBtYXkgZXhw
ZWN0IHJlc291cmNlcyAKKyAgICAvLyB0byBiZSB1bmlxdWUgZXZlbiB3aGVuIHRoZXkgZGlmZmVy
IGJ5IHRoZSBmcmFnbWVudCBpZGVudGlmaWVyIG9ubHkuCisgICAgaWYgKCFvcmlnaW5hbFVSTC5w
cm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCisgICAgICAgIHJldHVybiBvcmlnaW5hbFVSTDsKKyAg
ICBVUkwgdXJsID0gb3JpZ2luYWxVUkw7CisgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmll
cigpOworICAgIHJldHVybiB1cmw7Cit9CisKK2Jvb2wgTWVtb3J5Q2FjaGU6OmFkZChDYWNoZWRS
ZXNvdXJjZSYgcmVzb3VyY2UpCit7CisgICAgaWYgKGRpc2FibGVkKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworI2lmIEVOQUJM
RShDQUNIRV9QQVJUSVRJT05JTkcpCisgICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihyZXNv
dXJjZS51cmwoKSwgcmVzb3VyY2UuY2FjaGVQYXJ0aXRpb24oKSk7CisjZWxzZQorICAgIGF1dG8m
IGtleSA9IHJlc291cmNlLnVybCgpOworI2VuZGlmCisgICAgZW5zdXJlU2Vzc2lvblJlc291cmNl
TWFwKHJlc291cmNlLnNlc3Npb25JRCgpKS5zZXQoa2V5LCAmcmVzb3VyY2UpOworICAgIHJlc291
cmNlLnNldEluQ2FjaGUodHJ1ZSk7CisgICAgCisgICAgcmVzb3VyY2VBY2Nlc3NlZChyZXNvdXJj
ZSk7CisgICAgCisgICAgTE9HKFJlc291cmNlTG9hZGluZywgIk1lbW9yeUNhY2hlOjphZGQgQWRk
ZWQgJyVzJywgcmVzb3VyY2UgJXBcbiIsIHJlc291cmNlLnVybCgpLnN0cmluZygpLmxhdGluMSgp
LmRhdGEoKSwgJnJlc291cmNlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNZW1vcnlD
YWNoZTo6cmV2YWxpZGF0aW9uU3VjY2VlZGVkKENhY2hlZFJlc291cmNlJiByZXZhbGlkYXRpbmdS
ZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgQVNTRVJU
KHJldmFsaWRhdGluZ1Jlc291cmNlLnJlc291cmNlVG9SZXZhbGlkYXRlKCkpOworICAgIENhY2hl
ZFJlc291cmNlJiByZXNvdXJjZSA9ICpyZXZhbGlkYXRpbmdSZXNvdXJjZS5yZXNvdXJjZVRvUmV2
YWxpZGF0ZSgpOworICAgIEFTU0VSVCghcmVzb3VyY2UuaW5DYWNoZSgpKTsKKyAgICBBU1NFUlQo
cmVzb3VyY2UuaXNMb2FkZWQoKSk7CisKKyAgICAvLyBDYWxsaW5nIHJlbW92ZSgpIGNhbiBwb3Rl
bnRpYWxseSBkZWxldGUgcmV2YWxpZGF0aW5nUmVzb3VyY2UsIHdoaWNoIHdlIHVzZQorICAgIC8v
IGJlbG93LiBUaGlzIG11c3RuJ3QgYmUgdGhlIGNhc2Ugc2luY2UgcmV2YWxpZGF0aW9uIG1lYW5z
IGl0IGlzIGxvYWRlZAorICAgIC8vIGFuZCBzbyBjYW5EZWxldGUoKSBpcyBmYWxzZS4KKyAgICBB
U1NFUlQoIXJldmFsaWRhdGluZ1Jlc291cmNlLmNhbkRlbGV0ZSgpKTsKKworICAgIHJlbW92ZShy
ZXZhbGlkYXRpbmdSZXNvdXJjZSk7CisKKyAgICBhdXRvJiByZXNvdXJjZXMgPSBlbnN1cmVTZXNz
aW9uUmVzb3VyY2VNYXAocmVzb3VyY2Uuc2Vzc2lvbklEKCkpOworI2lmIEVOQUJMRShDQUNIRV9Q
QVJUSVRJT05JTkcpCisgICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihyZXNvdXJjZS51cmwo
KSwgcmVzb3VyY2UuY2FjaGVQYXJ0aXRpb24oKSk7CisjZWxzZQorICAgIGF1dG8mIGtleSA9IHJl
c291cmNlLnVybCgpOworI2VuZGlmCisgICAgQVNTRVJUKCFyZXNvdXJjZXMuZ2V0KGtleSkpOwor
ICAgIHJlc291cmNlcy5zZXQoa2V5LCAmcmVzb3VyY2UpOworICAgIHJlc291cmNlLnNldEluQ2Fj
aGUodHJ1ZSk7CisgICAgcmVzb3VyY2UudXBkYXRlUmVzcG9uc2VBZnRlclJldmFsaWRhdGlvbihy
ZXNwb25zZSk7CisgICAgaW5zZXJ0SW5MUlVMaXN0KHJlc291cmNlKTsKKyAgICBpbnQgZGVsdGEg
PSByZXNvdXJjZS5zaXplKCk7CisgICAgaWYgKHJlc291cmNlLmRlY29kZWRTaXplKCkgJiYgcmVz
b3VyY2UuaGFzQ2xpZW50cygpKQorICAgICAgICBpbnNlcnRJbkxpdmVEZWNvZGVkUmVzb3VyY2Vz
TGlzdChyZXNvdXJjZSk7CisgICAgaWYgKGRlbHRhKQorICAgICAgICBhZGp1c3RTaXplKHJlc291
cmNlLmhhc0NsaWVudHMoKSwgZGVsdGEpOworICAgIAorICAgIHJldmFsaWRhdGluZ1Jlc291cmNl
LnN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UoKTsKKyAgICBBU1NFUlQoIXJldmFs
aWRhdGluZ1Jlc291cmNlLm1fZGVsZXRlZCk7CisgICAgLy8gdGhpcyBkZWxldGVzIHRoZSByZXZh
bGlkYXRpbmcgcmVzb3VyY2UKKyAgICByZXZhbGlkYXRpbmdSZXNvdXJjZS5jbGVhclJlc291cmNl
VG9SZXZhbGlkYXRlKCk7Cit9CisKK3ZvaWQgTWVtb3J5Q2FjaGU6OnJldmFsaWRhdGlvbkZhaWxl
ZChDYWNoZWRSZXNvdXJjZSYgcmV2YWxpZGF0aW5nUmVzb3VyY2UpCit7CisgICAgQVNTRVJUKFdU
Rjo6aXNNYWluVGhyZWFkKCkpOworICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJSZXZhbGlkYXRp
b24gZmFpbGVkIGZvciAlcCIsICZyZXZhbGlkYXRpbmdSZXNvdXJjZSk7CisgICAgQVNTRVJUKHJl
dmFsaWRhdGluZ1Jlc291cmNlLnJlc291cmNlVG9SZXZhbGlkYXRlKCkpOworICAgIHJldmFsaWRh
dGluZ1Jlc291cmNlLmNsZWFyUmVzb3VyY2VUb1JldmFsaWRhdGUoKTsKK30KKworQ2FjaGVkUmVz
b3VyY2UqIE1lbW9yeUNhY2hlOjpyZXNvdXJjZUZvclJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQoreworICAgIGF1dG8qIHJlc291cmNl
cyA9IHNlc3Npb25SZXNvdXJjZU1hcChzZXNzaW9uSUQpOworICAgIGlmICghcmVzb3VyY2VzKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gcmVzb3VyY2VGb3JSZXF1ZXN0SW1w
bChyZXF1ZXN0LCAqcmVzb3VyY2VzKTsKK30KKworQ2FjaGVkUmVzb3VyY2UqIE1lbW9yeUNhY2hl
OjpyZXNvdXJjZUZvclJlcXVlc3RJbXBsKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
Q2FjaGVkUmVzb3VyY2VNYXAmIHJlc291cmNlcykKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5U
aHJlYWQoKSk7CisgICAgVVJMIHVybCA9IHJlbW92ZUZyYWdtZW50SWRlbnRpZmllcklmTmVlZGVk
KHJlcXVlc3QudXJsKCkpOworCisjaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKKyAgICBh
dXRvIGtleSA9IHN0ZDo6bWFrZV9wYWlyKHVybCwgcmVxdWVzdC5jYWNoZVBhcnRpdGlvbigpKTsK
KyNlbHNlCisgICAgYXV0byYga2V5ID0gdXJsOworI2VuZGlmCisgICAgcmV0dXJuIHJlc291cmNl
cy5nZXQoa2V5KTsKK30KKwordW5zaWduZWQgTWVtb3J5Q2FjaGU6OmRlYWRDYXBhY2l0eSgpIGNv
bnN0IAoreworICAgIC8vIERlYWQgcmVzb3VyY2UgY2FwYWNpdHkgaXMgd2hhdGV2ZXIgc3BhY2Ug
aXMgbm90IG9jY3VwaWVkIGJ5IGxpdmUgcmVzb3VyY2VzLCBib3VuZGVkIGJ5IGFuIGluZGVwZW5k
ZW50IG1pbmltdW0gYW5kIG1heGltdW0uCisgICAgdW5zaWduZWQgY2FwYWNpdHkgPSBtX2NhcGFj
aXR5IC0gc3RkOjptaW4obV9saXZlU2l6ZSwgbV9jYXBhY2l0eSk7IC8vIFN0YXJ0IHdpdGggYXZh
aWxhYmxlIGNhcGFjaXR5LgorICAgIGNhcGFjaXR5ID0gc3RkOjptYXgoY2FwYWNpdHksIG1fbWlu
RGVhZENhcGFjaXR5KTsgLy8gTWFrZSBzdXJlIGl0J3MgYWJvdmUgdGhlIG1pbmltdW0uCisgICAg
Y2FwYWNpdHkgPSBzdGQ6Om1pbihjYXBhY2l0eSwgbV9tYXhEZWFkQ2FwYWNpdHkpOyAvLyBNYWtl
IHN1cmUgaXQncyBiZWxvdyB0aGUgbWF4aW11bS4KKyAgICByZXR1cm4gY2FwYWNpdHk7Cit9CisK
K3Vuc2lnbmVkIE1lbW9yeUNhY2hlOjpsaXZlQ2FwYWNpdHkoKSBjb25zdCAKK3sgCisgICAgLy8g
TGl2ZSByZXNvdXJjZSBjYXBhY2l0eSBpcyB3aGF0ZXZlciBpcyBsZWZ0IG92ZXIgYWZ0ZXIgY2Fs
Y3VsYXRpbmcgZGVhZCByZXNvdXJjZSBjYXBhY2l0eS4KKyAgICByZXR1cm4gbV9jYXBhY2l0eSAt
IGRlYWRDYXBhY2l0eSgpOworfQorCitzdGF0aWMgQ2FjaGVkSW1hZ2VDbGllbnQmIGR1bW15Q2Fj
aGVkSW1hZ2VDbGllbnQoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDYWNoZWRJbWFn
ZUNsaWVudD4gY2xpZW50OworICAgIHJldHVybiBjbGllbnQ7Cit9CisKK2Jvb2wgTWVtb3J5Q2Fj
aGU6OmFkZEltYWdlVG9DYWNoZShOYXRpdmVJbWFnZVB0ciYmIGltYWdlLCBjb25zdCBVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBkb21haW5Gb3JDYWNoZVBhcnRpdGlvbikKK3sKKyAgICBBU1NFUlQo
aW1hZ2UpOworICAgIFNlc3Npb25JRCBzZXNzaW9uSUQgPSBTZXNzaW9uSUQ6OmRlZmF1bHRTZXNz
aW9uSUQoKTsKKyAgICByZW1vdmVJbWFnZUZyb21DYWNoZSh1cmwsIGRvbWFpbkZvckNhY2hlUGFy
dGl0aW9uKTsgLy8gUmVtb3ZlIGNhY2hlIGVudHJ5IGlmIGl0IGFscmVhZHkgZXhpc3RzLgorCisg
ICAgUmVmUHRyPEJpdG1hcEltYWdlPiBiaXRtYXBJbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUo
V1RGTW92ZShpbWFnZSksIG51bGxwdHIpOworICAgIGlmICghYml0bWFwSW1hZ2UpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRJbWFnZT4gY2FjaGVk
SW1hZ2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENhY2hlZEltYWdlPih1cmwsIGJpdG1hcEltYWdlLmdl
dCgpLCBDYWNoZWRJbWFnZTo6TWFudWFsbHlDYWNoZWQsIHNlc3Npb25JRCk7CisKKyAgICBjYWNo
ZWRJbWFnZS0+YWRkQ2xpZW50KCZkdW1teUNhY2hlZEltYWdlQ2xpZW50KCkpOworICAgIGNhY2hl
ZEltYWdlLT5zZXREZWNvZGVkU2l6ZShiaXRtYXBJbWFnZS0+ZGVjb2RlZFNpemUoKSk7CisjaWYg
RU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKKyAgICBjYWNoZWRJbWFnZS0+cmVzb3VyY2VSZXF1
ZXN0KCkuc2V0RG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24oZG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24p
OworI2VuZGlmCisgICAgcmV0dXJuIGFkZCgqY2FjaGVkSW1hZ2UucmVsZWFzZSgpKTsKK30KKwor
dm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlSW1hZ2VGcm9tQ2FjaGUoY29uc3QgVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgZG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24pCit7CisgICAgYXV0byogcmVzb3Vy
Y2VzID0gc2Vzc2lvblJlc291cmNlTWFwKFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsK
KyAgICBpZiAoIXJlc291cmNlcykKKyAgICAgICAgcmV0dXJuOworCisjaWYgRU5BQkxFKENBQ0hF
X1BBUlRJVElPTklORykKKyAgICBhdXRvIGtleSA9IHN0ZDo6bWFrZV9wYWlyKHVybCwgUmVzb3Vy
Y2VSZXF1ZXN0OjpwYXJ0aXRpb25OYW1lKGRvbWFpbkZvckNhY2hlUGFydGl0aW9uKSk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShkb21haW5Gb3JDYWNoZVBhcnRpdGlvbik7CisgICAgYXV0byYg
a2V5ID0gdXJsOworI2VuZGlmCisgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gcmVzb3Vy
Y2VzLT5nZXQoa2V5KTsKKyAgICBpZiAoIXJlc291cmNlKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBBIHJlc291cmNlIGV4aXN0cyBhbmQgaXMgbm90IGEgbWFudWFsbHkgY2FjaGVkIGltYWdl
LCBzbyBqdXN0IHJlbW92ZSBpdC4KKyAgICBpZiAoIWlzPENhY2hlZEltYWdlPigqcmVzb3VyY2Up
IHx8ICFkb3duY2FzdDxDYWNoZWRJbWFnZT4oKnJlc291cmNlKS5pc01hbnVhbGx5Q2FjaGVkKCkp
IHsKKyAgICAgICAgcmVtb3ZlKCpyZXNvdXJjZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBSZW1vdmluZyB0aGUgbGFzdCBjbGllbnQgb2YgYSBDYWNoZWRJbWFnZSB0dXJucyB0
aGUgcmVzb3VyY2UKKyAgICAvLyBpbnRvIGEgZGVhZCByZXNvdXJjZSB3aGljaCB3aWxsIGV2ZW50
dWFsbHkgYmUgZXZpY3RlZCB3aGVuCisgICAgLy8gZGVhZCByZXNvdXJjZXMgYXJlIHBydW5lZC4g
VGhhdCBtaWdodCBiZSBpbW1lZGlhdGVseSBzaW5jZQorICAgIC8vIHJlbW92aW5nIHRoZSBsYXN0
IGNsaWVudCB0cmlnZ2VycyBhIE1lbW9yeUNhY2hlOjpwcnVuZSwgc28gdGhlCisgICAgLy8gcmVz
b3VyY2UgbWF5IGJlIGRlbGV0ZWQgYWZ0ZXIgdGhpcyBjYWxsLgorICAgIGRvd25jYXN0PENhY2hl
ZEltYWdlPigqcmVzb3VyY2UpLnJlbW92ZUNsaWVudCgmZHVtbXlDYWNoZWRJbWFnZUNsaWVudCgp
KTsKK30KKwordm9pZCBNZW1vcnlDYWNoZTo6cHJ1bmVMaXZlUmVzb3VyY2VzKGJvb2wgc2hvdWxk
RGVzdHJveURlY29kZWREYXRhRm9yQWxsTGl2ZVJlc291cmNlcykKK3sKKyAgICB1bnNpZ25lZCBj
YXBhY2l0eSA9IHNob3VsZERlc3Ryb3lEZWNvZGVkRGF0YUZvckFsbExpdmVSZXNvdXJjZXMgPyAw
IDogbGl2ZUNhcGFjaXR5KCk7CisgICAgaWYgKGNhcGFjaXR5ICYmIG1fbGl2ZVNpemUgPD0gY2Fw
YWNpdHkpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIHRhcmdldFNpemUgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oY2FwYWNpdHkgKiBjVGFyZ2V0UHJ1bmVQZXJjZW50YWdlKTsgLy8g
Q3V0IGJ5IGEgcGVyY2VudGFnZSB0byBhdm9pZCBpbW1lZGlhdGVseSBwcnVuaW5nIGFnYWluLgor
CisgICAgcHJ1bmVMaXZlUmVzb3VyY2VzVG9TaXplKHRhcmdldFNpemUsIHNob3VsZERlc3Ryb3lE
ZWNvZGVkRGF0YUZvckFsbExpdmVSZXNvdXJjZXMpOworfQorCit2b2lkIE1lbW9yeUNhY2hlOjpm
b3JFYWNoUmVzb3VyY2UoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKENhY2hlZFJlc291cmNlJik+
JiBmdW5jdGlvbikKK3sKKyAgICBmb3IgKGF1dG8mIHVucHJvdGVjdGVkTFJVTGlzdCA6IG1fYWxs
UmVzb3VyY2VzKSB7CisgICAgICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRS
ZXNvdXJjZT4+IGxydUxpc3Q7CisgICAgICAgIGNvcHlUb1ZlY3RvcigqdW5wcm90ZWN0ZWRMUlVM
aXN0LCBscnVMaXN0KTsKKyAgICAgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IGxydUxpc3QpCisg
ICAgICAgICAgICBmdW5jdGlvbigqcmVzb3VyY2UpOworICAgIH0KK30KKwordm9pZCBNZW1vcnlD
YWNoZTo6Zm9yRWFjaFNlc3Npb25SZXNvdXJjZShTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKENhY2hlZFJlc291cmNlJik+JiBmdW5jdGlvbikKK3sKKyAgICBh
dXRvIGl0ID0gbV9zZXNzaW9uUmVzb3VyY2VzLmZpbmQoc2Vzc2lvbklEKTsKKyAgICBpZiAoaXQg
PT0gbV9zZXNzaW9uUmVzb3VyY2VzLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0
b3I8Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+PiByZXNvdXJjZXNGb3JTZXNz
aW9uOworICAgIGNvcHlWYWx1ZXNUb1ZlY3RvcigqaXQtPnZhbHVlLCByZXNvdXJjZXNGb3JTZXNz
aW9uKTsKKworICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiByZXNvdXJjZXNGb3JTZXNzaW9uKQor
ICAgICAgICBmdW5jdGlvbigqcmVzb3VyY2UpOworfQorCit2b2lkIE1lbW9yeUNhY2hlOjpkZXN0
cm95RGVjb2RlZERhdGFGb3JBbGxJbWFnZXMoKQoreworICAgIE1lbW9yeUNhY2hlOjpzaW5nbGV0
b24oKS5mb3JFYWNoUmVzb3VyY2UoW10oQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKSB7CisgICAg
ICAgIGlmIChyZXNvdXJjZS5pc0ltYWdlKCkpCisgICAgICAgICAgICByZXNvdXJjZS5kZXN0cm95
RGVjb2RlZERhdGEoKTsKKyAgICB9KTsKK30KKwordm9pZCBNZW1vcnlDYWNoZTo6cHJ1bmVMaXZl
UmVzb3VyY2VzVG9TaXplKHVuc2lnbmVkIHRhcmdldFNpemUsIGJvb2wgc2hvdWxkRGVzdHJveURl
Y29kZWREYXRhRm9yQWxsTGl2ZVJlc291cmNlcykKK3sKKyAgICBpZiAobV9pblBydW5lUmVzb3Vy
Y2VzKQorICAgICAgICByZXR1cm47CisgICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IHJlZW50cmFu
Y3lQcm90ZWN0b3IobV9pblBydW5lUmVzb3VyY2VzLCB0cnVlKTsKKworICAgIGRvdWJsZSBjdXJy
ZW50VGltZSA9IEZyYW1lVmlldzo6Y3VycmVudFBhaW50VGltZVN0YW1wKCk7CisgICAgaWYgKCFj
dXJyZW50VGltZSkgLy8gSW4gY2FzZSBwcnVuZSBpcyBjYWxsZWQgZGlyZWN0bHksIG91dHNpZGUg
b2YgYSBGcmFtZSBwYWludC4KKyAgICAgICAgY3VycmVudFRpbWUgPSBtb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWUoKTsKKyAgICAKKyAgICAvLyBEZXN0cm95IGFueSBkZWNvZGVkIGRhdGEgaW4g
bGl2ZSBvYmplY3RzIHRoYXQgd2UgY2FuLgorICAgIC8vIFN0YXJ0IGZyb20gdGhlIGhlYWQsIHNp
bmNlIHRoaXMgaXMgdGhlIGxlYXN0IHJlY2VudGx5IGFjY2Vzc2VkIG9mIHRoZSBvYmplY3RzLgor
CisgICAgLy8gVGhlIGxpc3QgbWlnaHQgbm90IGJlIHNvcnRlZCBieSB0aGUgbV9sYXN0RGVjb2Rl
ZEFjY2Vzc1RpbWUuIFRoZSBpbXBhY3QKKyAgICAvLyBvZiB0aGlzIHdlYWtlciBpbnZhcmlhbnQg
aXMgbWlub3IgYXMgdGhlIGJlbG93IGlmIHN0YXRlbWVudCB0byBjaGVjayB0aGUKKyAgICAvLyBl
bGFwc2VkVGltZSB3aWxsIGV2YWx1YXRlIHRvIGZhbHNlIGFzIHRoZSBjdXJyZW50VGltZSB3aWxs
IGJlIGEgbG90CisgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50LT5tX2xhc3REZWNvZGVk
QWNjZXNzVGltZS4KKyAgICAvLyBGb3IgbW9yZSBkZXRhaWxzIHNlZTogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMjA5CisgICAgYXV0byBpdCA9IG1fbGl2ZURlY29k
ZWRSZXNvdXJjZXMuYmVnaW4oKTsKKyAgICB3aGlsZSAoaXQgIT0gbV9saXZlRGVjb2RlZFJlc291
cmNlcy5lbmQoKSkgeworICAgICAgICBhdXRvKiBjdXJyZW50ID0gKml0OworCisgICAgICAgIC8v
IEluY3JlbWVudCB0aGUgaXRlcmF0b3Igbm93IGJlY2F1c2UgdGhlIGNhbGwgdG8gZGVzdHJveURl
Y29kZWREYXRhKCkgYmVsb3cKKyAgICAgICAgLy8gbWF5IGNhdXNlIGEgY2FsbCB0byBMaXN0SGFz
aFNldDo6cmVtb3ZlKCkgYW5kIGludmFsaWRhdGUgdGhlIGN1cnJlbnQKKyAgICAgICAgLy8gaXRl
cmF0b3IuIE5vdGUgdGhhdCB0aGlzIGlzIHNhZmUgYmVjYXVzZSB1bmxpa2UgaXRlcmF0aW9uIG9m
IG1vc3QKKyAgICAgICAgLy8gV1RGIEhhc2ggZGF0YSBzdHJ1Y3R1cmVzLCBpdGVyYXRpb24gaXMg
Z3VhcmFudGVlZCBzYWZlIGFnYWluc3QgbXV0YXRpb24KKyAgICAgICAgLy8gb2YgdGhlIExpc3RI
YXNoU2V0LCBleGNlcHQgZm9yIHJlbW92YWwgb2YgdGhlIGl0ZW0gY3VycmVudGx5IHBvaW50ZWQg
dG8KKyAgICAgICAgLy8gYnkgYSBnaXZlbiBpdGVyYXRvci4KKyAgICAgICAgKytpdDsKKworICAg
ICAgICBBU1NFUlQoY3VycmVudC0+aGFzQ2xpZW50cygpKTsKKyAgICAgICAgaWYgKGN1cnJlbnQt
PmlzTG9hZGVkKCkgJiYgY3VycmVudC0+ZGVjb2RlZFNpemUoKSkgeworICAgICAgICAgICAgLy8g
Q2hlY2sgdG8gc2VlIGlmIHRoZSByZW1haW5pbmcgcmVzb3VyY2VzIGFyZSB0b28gbmV3IHRvIHBy
dW5lLgorICAgICAgICAgICAgZG91YmxlIGVsYXBzZWRUaW1lID0gY3VycmVudFRpbWUgLSBjdXJy
ZW50LT5tX2xhc3REZWNvZGVkQWNjZXNzVGltZTsKKyAgICAgICAgICAgIGlmICghc2hvdWxkRGVz
dHJveURlY29kZWREYXRhRm9yQWxsTGl2ZVJlc291cmNlcyAmJiBlbGFwc2VkVGltZSA8IGNNaW5E
ZWxheUJlZm9yZUxpdmVEZWNvZGVkUHJ1bmUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICAvLyBEZXN0cm95IG91ciBkZWNvZGVkIGRhdGEuIFRoaXMgd2lsbCByZW1vdmUg
dXMgZnJvbSBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzLCBhbmQgcG9zc2libHkgbW92ZSB1cworICAg
ICAgICAgICAgLy8gdG8gYSBkaWZmZXJlbnQgTFJVIGxpc3QgaW4gbV9hbGxSZXNvdXJjZXMuCisg
ICAgICAgICAgICBjdXJyZW50LT5kZXN0cm95RGVjb2RlZERhdGEoKTsKKworICAgICAgICAgICAg
aWYgKHRhcmdldFNpemUgJiYgbV9saXZlU2l6ZSA8PSB0YXJnZXRTaXplKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBNZW1vcnlDYWNoZTo6cHJ1
bmVEZWFkUmVzb3VyY2VzKCkKK3sKKyAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IGRlYWRDYXBhY2l0
eSgpOworICAgIGlmIChjYXBhY2l0eSAmJiBtX2RlYWRTaXplIDw9IGNhcGFjaXR5KQorICAgICAg
ICByZXR1cm47CisKKyAgICB1bnNpZ25lZCB0YXJnZXRTaXplID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGNhcGFjaXR5ICogY1RhcmdldFBydW5lUGVyY2VudGFnZSk7IC8vIEN1dCBieSBhIHBlcmNl
bnRhZ2UgdG8gYXZvaWQgaW1tZWRpYXRlbHkgcHJ1bmluZyBhZ2Fpbi4KKyAgICBwcnVuZURlYWRS
ZXNvdXJjZXNUb1NpemUodGFyZ2V0U2l6ZSk7Cit9CisKK3ZvaWQgTWVtb3J5Q2FjaGU6OnBydW5l
RGVhZFJlc291cmNlc1RvU2l6ZSh1bnNpZ25lZCB0YXJnZXRTaXplKQoreworICAgIGlmIChtX2lu
UHJ1bmVSZXNvdXJjZXMpCisgICAgICAgIHJldHVybjsKKyAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9v
bD4gcmVlbnRyYW5jeVByb3RlY3RvcihtX2luUHJ1bmVSZXNvdXJjZXMsIHRydWUpOworIAorICAg
IGlmICh0YXJnZXRTaXplICYmIG1fZGVhZFNpemUgPD0gdGFyZ2V0U2l6ZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgYm9vbCBjYW5TaHJpbmtMUlVMaXN0cyA9IHRydWU7CisgICAgZm9yIChpbnQg
aSA9IG1fYWxsUmVzb3VyY2VzLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIC8v
IE1ha2UgYSBjb3B5IG9mIHRoZSBMUlVMaXN0IGZpcnN0IChhbmQgcmVmIHRoZSByZXNvdXJjZXMp
IGFzIGNhbGxpbmcKKyAgICAgICAgLy8gZGVzdHJveURlY29kZWREYXRhKCkgY2FuIGFsdGVyIHRo
ZSBMUlVMaXN0LgorICAgICAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVz
b3VyY2U+PiBscnVMaXN0OworICAgICAgICBjb3B5VG9WZWN0b3IoKm1fYWxsUmVzb3VyY2VzW2ld
LCBscnVMaXN0KTsKKworICAgICAgICAvLyBGaXJzdCBmbHVzaCBhbGwgdGhlIGRlY29kZWQgZGF0
YSBpbiB0aGlzIHF1ZXVlLgorICAgICAgICAvLyBSZW1vdmUgZnJvbSB0aGUgaGVhZCwgc2luY2Ug
dGhpcyBpcyB0aGUgbGVhc3QgZnJlcXVlbnRseSBhY2Nlc3NlZCBvZiB0aGUgb2JqZWN0cy4KKyAg
ICAgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IGxydUxpc3QpIHsKKyAgICAgICAgICAgIGlmICgh
cmVzb3VyY2UtPmluQ2FjaGUoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgaWYgKCFyZXNvdXJjZS0+aGFzQ2xpZW50cygpICYmICFyZXNvdXJjZS0+aXNQcmVsb2Fk
ZWQoKSAmJiByZXNvdXJjZS0+aXNMb2FkZWQoKSkgeworICAgICAgICAgICAgICAgIC8vIERlc3Ry
b3kgb3VyIGRlY29kZWQgZGF0YS4gVGhpcyB3aWxsIHJlbW92ZSB1cyBmcm9tIAorICAgICAgICAg
ICAgICAgIC8vIG1fbGl2ZURlY29kZWRSZXNvdXJjZXMsIGFuZCBwb3NzaWJseSBtb3ZlIHVzIHRv
IGEgZGlmZmVyZW50IAorICAgICAgICAgICAgICAgIC8vIExSVSBsaXN0IGluIG1fYWxsUmVzb3Vy
Y2VzLgorICAgICAgICAgICAgICAgIHJlc291cmNlLT5kZXN0cm95RGVjb2RlZERhdGEoKTsKKwor
ICAgICAgICAgICAgICAgIGlmICh0YXJnZXRTaXplICYmIG1fZGVhZFNpemUgPD0gdGFyZ2V0U2l6
ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgLy8gTm93IGV2aWN0IG9iamVjdHMgZnJvbSB0aGlzIGxpc3QuCisgICAgICAg
IC8vIFJlbW92ZSBmcm9tIHRoZSBoZWFkLCBzaW5jZSB0aGlzIGlzIHRoZSBsZWFzdCBmcmVxdWVu
dGx5IGFjY2Vzc2VkIG9mIHRoZSBvYmplY3RzLgorICAgICAgICBmb3IgKGF1dG8mIHJlc291cmNl
IDogbHJ1TGlzdCkgeworICAgICAgICAgICAgaWYgKCFyZXNvdXJjZS0+aW5DYWNoZSgpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoIXJlc291cmNlLT5oYXND
bGllbnRzKCkgJiYgIXJlc291cmNlLT5pc1ByZWxvYWRlZCgpICYmICFyZXNvdXJjZS0+aXNDYWNo
ZVZhbGlkYXRvcigpKSB7CisgICAgICAgICAgICAgICAgcmVtb3ZlKCpyZXNvdXJjZSk7CisgICAg
ICAgICAgICAgICAgaWYgKHRhcmdldFNpemUgJiYgbV9kZWFkU2l6ZSA8PSB0YXJnZXRTaXplKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAvLyBTaHJpbmsgdGhlIHZlY3RvciBiYWNrIGRvd24gc28gd2Ug
ZG9uJ3Qgd2FzdGUgdGltZSBpbnNwZWN0aW5nCisgICAgICAgIC8vIGVtcHR5IExSVSBsaXN0cyBv
biBmdXR1cmUgcHJ1bmVzLgorICAgICAgICBpZiAoIW1fYWxsUmVzb3VyY2VzW2ldLT5pc0VtcHR5
KCkpCisgICAgICAgICAgICBjYW5TaHJpbmtMUlVMaXN0cyA9IGZhbHNlOworICAgICAgICBlbHNl
IGlmIChjYW5TaHJpbmtMUlVMaXN0cykKKyAgICAgICAgICAgIG1fYWxsUmVzb3VyY2VzLnNocmlu
ayhpKTsKKyAgICB9Cit9CisKK3ZvaWQgTWVtb3J5Q2FjaGU6OnNldENhcGFjaXRpZXModW5zaWdu
ZWQgbWluRGVhZEJ5dGVzLCB1bnNpZ25lZCBtYXhEZWFkQnl0ZXMsIHVuc2lnbmVkIHRvdGFsQnl0
ZXMpCit7CisgICAgQVNTRVJUKG1pbkRlYWRCeXRlcyA8PSBtYXhEZWFkQnl0ZXMpOworICAgIEFT
U0VSVChtYXhEZWFkQnl0ZXMgPD0gdG90YWxCeXRlcyk7CisgICAgbV9taW5EZWFkQ2FwYWNpdHkg
PSBtaW5EZWFkQnl0ZXM7CisgICAgbV9tYXhEZWFkQ2FwYWNpdHkgPSBtYXhEZWFkQnl0ZXM7Cisg
ICAgbV9jYXBhY2l0eSA9IHRvdGFsQnl0ZXM7CisgICAgcHJ1bmUoKTsKK30KKwordm9pZCBNZW1v
cnlDYWNoZTo6cmVtb3ZlKENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkKK3sKKyAgICBBU1NFUlQo
V1RGOjppc01haW5UaHJlYWQoKSk7CisgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkV2aWN0aW5n
IHJlc291cmNlICVwIGZvciAnJXMnIGZyb20gY2FjaGUiLCAmcmVzb3VyY2UsIHJlc291cmNlLnVy
bCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7CisgICAgLy8gVGhlIHJlc291cmNlIG1heSBo
YXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGJ5IHNvbWVvbmUgb3RoZXIgdGhhbiBvdXIgY2FsbGVy
LAorICAgIC8vIHdobyBuZWVkZWQgYSBmcmVzaCBjb3B5IGZvciBhIHJlbG9hZC4gU2VlIDxodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ3OSNjNj4uCisgICAgaWYgKGF1
dG8qIHJlc291cmNlcyA9IHNlc3Npb25SZXNvdXJjZU1hcChyZXNvdXJjZS5zZXNzaW9uSUQoKSkp
IHsKKyNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQorICAgICAgICBhdXRvIGtleSA9IHN0
ZDo6bWFrZV9wYWlyKHJlc291cmNlLnVybCgpLCByZXNvdXJjZS5jYWNoZVBhcnRpdGlvbigpKTsK
KyNlbHNlCisgICAgICAgIGF1dG8mIGtleSA9IHJlc291cmNlLnVybCgpOworI2VuZGlmCisgICAg
ICAgIGlmIChyZXNvdXJjZS5pbkNhY2hlKCkpIHsKKyAgICAgICAgICAgIC8vIFJlbW92ZSByZXNv
dXJjZSBmcm9tIHRoZSByZXNvdXJjZSBtYXAuCisgICAgICAgICAgICByZXNvdXJjZXMtPnJlbW92
ZShrZXkpOworICAgICAgICAgICAgcmVzb3VyY2Uuc2V0SW5DYWNoZShmYWxzZSk7CisKKyAgICAg
ICAgICAgIC8vIElmIHRoZSByZXNvdXJjZSBtYXAgaXMgbm93IGVtcHR5LCByZW1vdmUgaXQgZnJv
bSBtX3Nlc3Npb25SZXNvdXJjZXMuCisgICAgICAgICAgICBpZiAocmVzb3VyY2VzLT5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgbV9zZXNzaW9uUmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZS5z
ZXNzaW9uSUQoKSk7CisKKyAgICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIHRoZSBhcHByb3ByaWF0
ZSBMUlUgbGlzdC4KKyAgICAgICAgICAgIHJlbW92ZUZyb21MUlVMaXN0KHJlc291cmNlKTsKKyAg
ICAgICAgICAgIHJlbW92ZUZyb21MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QocmVzb3VyY2UpOwor
ICAgICAgICAgICAgYWRqdXN0U2l6ZShyZXNvdXJjZS5oYXNDbGllbnRzKCksIC1zdGF0aWNfY2Fz
dDxpbnQ+KHJlc291cmNlLnNpemUoKSkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIEFT
U0VSVChyZXNvdXJjZXMtPmdldChrZXkpICE9ICZyZXNvdXJjZSk7CisgICAgfQorCisgICAgcmVz
b3VyY2UuZGVsZXRlSWZQb3NzaWJsZSgpOworfQorCithdXRvIE1lbW9yeUNhY2hlOjpscnVMaXN0
Rm9yKENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkgLT4gTFJVTGlzdCYKK3sKKyAgICB1bnNpZ25l
ZCBhY2Nlc3NDb3VudCA9IHN0ZDo6bWF4KHJlc291cmNlLmFjY2Vzc0NvdW50KCksIDFVKTsKKyAg
ICB1bnNpZ25lZCBxdWV1ZUluZGV4ID0gV1RGOjpmYXN0TG9nMihyZXNvdXJjZS5zaXplKCkgLyBh
Y2Nlc3NDb3VudCk7CisjaWZuZGVmIE5ERUJVRworICAgIHJlc291cmNlLm1fbHJ1SW5kZXggPSBx
dWV1ZUluZGV4OworI2VuZGlmCisKKyAgICBtX2FsbFJlc291cmNlcy5yZXNlcnZlQ2FwYWNpdHko
cXVldWVJbmRleCArIDEpOworICAgIHdoaWxlIChtX2FsbFJlc291cmNlcy5zaXplKCkgPD0gcXVl
dWVJbmRleCkKKyAgICAgICAgbV9hbGxSZXNvdXJjZXMudW5jaGVja2VkQXBwZW5kKHN0ZDo6bWFr
ZV91bmlxdWU8TFJVTGlzdD4oKSk7CisgICAgcmV0dXJuICptX2FsbFJlc291cmNlc1txdWV1ZUlu
ZGV4XTsKK30KKwordm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlRnJvbUxSVUxpc3QoQ2FjaGVkUmVz
b3VyY2UmIHJlc291cmNlKQoreworICAgIC8vIElmIHdlJ3ZlIG5ldmVyIGJlZW4gYWNjZXNzZWQs
IHRoZW4gd2UncmUgYnJhbmQgbmV3IGFuZCBub3QgaW4gYW55IGxpc3QuCisgICAgaWYgKCFyZXNv
dXJjZS5hY2Nlc3NDb3VudCgpKQorICAgICAgICByZXR1cm47CisKKyNpZiAhQVNTRVJUX0RJU0FC
TEVECisgICAgdW5zaWduZWQgb2xkTGlzdEluZGV4ID0gcmVzb3VyY2UubV9scnVJbmRleDsKKyNl
bmRpZgorCisgICAgTFJVTGlzdCYgbGlzdCA9IGxydUxpc3RGb3IocmVzb3VyY2UpOworCisgICAg
Ly8gVmVyaWZ5IHRoYXQgdGhlIGxpc3Qgd2UgZ290IGlzIHRoZSBsaXN0IHdlIHdhbnQuCisgICAg
QVNTRVJUKHJlc291cmNlLm1fbHJ1SW5kZXggPT0gb2xkTGlzdEluZGV4KTsKKworICAgIGJvb2wg
cmVtb3ZlZCA9IGxpc3QucmVtb3ZlKCZyZXNvdXJjZSk7CisgICAgQVNTRVJUX1VOVVNFRChyZW1v
dmVkLCByZW1vdmVkKTsKK30KKwordm9pZCBNZW1vcnlDYWNoZTo6aW5zZXJ0SW5MUlVMaXN0KENh
Y2hlZFJlc291cmNlJiByZXNvdXJjZSkKK3sKKyAgICBBU1NFUlQocmVzb3VyY2UuaW5DYWNoZSgp
KTsKKyAgICBBU1NFUlQocmVzb3VyY2UuYWNjZXNzQ291bnQoKSA+IDApOworICAgIAorICAgIGF1
dG8gYWRkUmVzdWx0ID0gbHJ1TGlzdEZvcihyZXNvdXJjZSkuYWRkKCZyZXNvdXJjZSk7CisgICAg
QVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKK30KKwordm9p
ZCBNZW1vcnlDYWNoZTo6cmVzb3VyY2VBY2Nlc3NlZChDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2Up
Cit7CisgICAgQVNTRVJUKHJlc291cmNlLmluQ2FjaGUoKSk7CisgICAgCisgICAgLy8gTmVlZCB0
byBtYWtlIHN1cmUgdG8gcmVtb3ZlIGJlZm9yZSB3ZSBpbmNyZWFzZSB0aGUgYWNjZXNzIGNvdW50
LCBzaW5jZQorICAgIC8vIHRoZSBxdWV1ZSB3aWxsIHBvc3NpYmx5IGNoYW5nZS4KKyAgICByZW1v
dmVGcm9tTFJVTGlzdChyZXNvdXJjZSk7CisgICAgCisgICAgLy8gSWYgdGhpcyBpcyB0aGUgZmly
c3QgdGltZSB0aGUgcmVzb3VyY2UgaGFzIGJlZW4gYWNjZXNzZWQsIGFkanVzdCB0aGUgc2l6ZSBv
ZiB0aGUgY2FjaGUgdG8gYWNjb3VudCBmb3IgaXRzIGluaXRpYWwgc2l6ZS4KKyAgICBpZiAoIXJl
c291cmNlLmFjY2Vzc0NvdW50KCkpCisgICAgICAgIGFkanVzdFNpemUocmVzb3VyY2UuaGFzQ2xp
ZW50cygpLCByZXNvdXJjZS5zaXplKCkpOworICAgIAorICAgIC8vIEFkZCB0byBvdXIgYWNjZXNz
IGNvdW50LgorICAgIHJlc291cmNlLmluY3JlYXNlQWNjZXNzQ291bnQoKTsKKyAgICAKKyAgICAv
LyBOb3cgaW5zZXJ0IGludG8gdGhlIG5ldyBxdWV1ZS4KKyAgICBpbnNlcnRJbkxSVUxpc3QocmVz
b3VyY2UpOworfQorCit2b2lkIE1lbW9yeUNhY2hlOjpyZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2lu
KFNlY3VyaXR5T3JpZ2luJiBvcmlnaW4pCit7CisjaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklO
RykKKyAgICBTdHJpbmcgb3JpZ2luUGFydGl0aW9uID0gUmVzb3VyY2VSZXF1ZXN0OjpwYXJ0aXRp
b25OYW1lKG9yaWdpbi5ob3N0KCkpOworI2VuZGlmCisKKyAgICBWZWN0b3I8Q2FjaGVkUmVzb3Vy
Y2UqPiByZXNvdXJjZXNXaXRoT3JpZ2luOworICAgIGZvciAoYXV0byYgcmVzb3VyY2VzIDogbV9z
ZXNzaW9uUmVzb3VyY2VzLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoYXV0byYga2V5VmFsdWUg
OiAqcmVzb3VyY2VzKSB7CisgICAgICAgICAgICBhdXRvJiByZXNvdXJjZSA9ICprZXlWYWx1ZS52
YWx1ZTsKKyNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQorICAgICAgICAgICAgYXV0byYg
cGFydGl0aW9uTmFtZSA9IGtleVZhbHVlLmtleS5zZWNvbmQ7CisgICAgICAgICAgICBpZiAocGFy
dGl0aW9uTmFtZSA9PSBvcmlnaW5QYXJ0aXRpb24pIHsKKyAgICAgICAgICAgICAgICByZXNvdXJj
ZXNXaXRoT3JpZ2luLmFwcGVuZCgmcmVzb3VyY2UpOworICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IHJlc291cmNlT3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShyZXNvdXJjZS51cmwo
KSk7CisgICAgICAgICAgICBpZiAocmVzb3VyY2VPcmlnaW4tPmVxdWFsKCZvcmlnaW4pKQorICAg
ICAgICAgICAgICAgIHJlc291cmNlc1dpdGhPcmlnaW4uYXBwZW5kKCZyZXNvdXJjZSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGF1dG8qIHJlc291cmNlIDogcmVzb3VyY2VzV2l0aE9y
aWdpbikKKyAgICAgICAgcmVtb3ZlKCpyZXNvdXJjZSk7Cit9CisKK3ZvaWQgTWVtb3J5Q2FjaGU6
OnJlbW92ZVJlc291cmNlc1dpdGhPcmlnaW5zKFNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IEhh
c2hTZXQ8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4mIG9yaWdpbnMpCit7CisgICAgYXV0byogcmVz
b3VyY2VNYXAgPSBzZXNzaW9uUmVzb3VyY2VNYXAoc2Vzc2lvbklEKTsKKyAgICBpZiAoIXJlc291
cmNlTWFwKQorICAgICAgICByZXR1cm47CisKKyNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5H
KQorICAgIEhhc2hTZXQ8U3RyaW5nPiBvcmlnaW5QYXJ0aXRpb25zOworCisgICAgZm9yIChhdXRv
JiBvcmlnaW4gOiBvcmlnaW5zKQorICAgICAgICBvcmlnaW5QYXJ0aXRpb25zLmFkZChSZXNvdXJj
ZVJlcXVlc3Q6OnBhcnRpdGlvbk5hbWUob3JpZ2luLT5ob3N0KCkpKTsKKyNlbmRpZgorCisgICAg
VmVjdG9yPENhY2hlZFJlc291cmNlKj4gcmVzb3VyY2VzVG9SZW1vdmU7CisgICAgZm9yIChhdXRv
JiBrZXlWYWx1ZVBhaXIgOiAqcmVzb3VyY2VNYXApIHsKKyAgICAgICAgYXV0byYgcmVzb3VyY2Ug
PSAqa2V5VmFsdWVQYWlyLnZhbHVlOworCisjaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykK
KyAgICAgICAgYXV0byYgcGFydGl0aW9uTmFtZSA9IGtleVZhbHVlUGFpci5rZXkuc2Vjb25kOwor
ICAgICAgICBpZiAob3JpZ2luUGFydGl0aW9ucy5jb250YWlucyhwYXJ0aXRpb25OYW1lKSkgewor
ICAgICAgICAgICAgcmVzb3VyY2VzVG9SZW1vdmUuYXBwZW5kKCZyZXNvdXJjZSk7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgaWYgKG9yaWdpbnMu
Y29udGFpbnMoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShyZXNvdXJjZS51cmwoKSkucHRyKCkpKQor
ICAgICAgICAgICAgcmVzb3VyY2VzVG9SZW1vdmUuYXBwZW5kKCZyZXNvdXJjZSk7CisgICAgfQor
CisgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IHJlc291cmNlc1RvUmVtb3ZlKQorICAgICAgICBy
ZW1vdmUoKnJlc291cmNlKTsKK30KKwordm9pZCBNZW1vcnlDYWNoZTo6Z2V0T3JpZ2luc1dpdGhD
YWNoZShTZWN1cml0eU9yaWdpblNldCYgb3JpZ2lucykKK3sKKyNpZiBFTkFCTEUoQ0FDSEVfUEFS
VElUSU9OSU5HKQorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGh0dHBTdHJpbmco
Imh0dHAiKTsKKyNlbmRpZgorICAgIGZvciAoYXV0byYgcmVzb3VyY2VzIDogbV9zZXNzaW9uUmVz
b3VyY2VzLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiAqcmVzb3Vy
Y2VzKSB7CisgICAgICAgICAgICBhdXRvJiByZXNvdXJjZSA9ICprZXlWYWx1ZS52YWx1ZTsKKyNp
ZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQorICAgICAgICAgICAgYXV0byYgcGFydGl0aW9u
TmFtZSA9IGtleVZhbHVlLmtleS5zZWNvbmQ7CisgICAgICAgICAgICBpZiAoIXBhcnRpdGlvbk5h
bWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIG9yaWdpbnMuYWRkKFNlY3VyaXR5T3JpZ2lu
OjpjcmVhdGUoaHR0cFN0cmluZywgcGFydGl0aW9uTmFtZSwgMCkpOworICAgICAgICAgICAgZWxz
ZQorI2VuZGlmCisgICAgICAgICAgICBvcmlnaW5zLmFkZChTZWN1cml0eU9yaWdpbjo6Y3JlYXRl
KHJlc291cmNlLnVybCgpKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0hhc2hTZXQ8UmVmUHRy
PFNlY3VyaXR5T3JpZ2luPj4gTWVtb3J5Q2FjaGU6Om9yaWdpbnNXaXRoQ2FjaGUoU2Vzc2lvbklE
IHNlc3Npb25JRCkgY29uc3QKK3sKKyAgICBIYXNoU2V0PFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+
IG9yaWdpbnM7CisKKyAgICBhdXRvIGl0ID0gbV9zZXNzaW9uUmVzb3VyY2VzLmZpbmQoc2Vzc2lv
bklEKTsKKyAgICBpZiAoaXQgIT0gbV9zZXNzaW9uUmVzb3VyY2VzLmVuZCgpKSB7CisgICAgICAg
IGZvciAoYXV0byYga2V5VmFsdWUgOiAqaXQtPnZhbHVlKSB7CisgICAgICAgICAgICBhdXRvJiBy
ZXNvdXJjZSA9ICprZXlWYWx1ZS52YWx1ZTsKKyNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5H
KQorICAgICAgICAgICAgYXV0byYgcGFydGl0aW9uTmFtZSA9IGtleVZhbHVlLmtleS5zZWNvbmQ7
CisgICAgICAgICAgICBpZiAoIXBhcnRpdGlvbk5hbWUuaXNFbXB0eSgpKQorICAgICAgICAgICAg
ICAgIG9yaWdpbnMuYWRkKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUoImh0dHAiLCBwYXJ0aXRpb25O
YW1lLCAwKSk7CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIG9yaWdpbnMu
YWRkKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUocmVzb3VyY2UudXJsKCkpKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBvcmlnaW5zOworfQorCit2b2lkIE1lbW9yeUNhY2hlOjpyZW1v
dmVGcm9tTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkK
K3sKKyAgICBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzLnJlbW92ZSgmcmVzb3VyY2UpOworfQorCit2
b2lkIE1lbW9yeUNhY2hlOjppbnNlcnRJbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdChDYWNoZWRS
ZXNvdXJjZSYgcmVzb3VyY2UpCit7CisgICAgLy8gTWFrZSBzdXJlIHdlIGFyZW4ndCBpbiB0aGUg
bGlzdCBhbHJlYWR5LgorICAgIEFTU0VSVCghbV9saXZlRGVjb2RlZFJlc291cmNlcy5jb250YWlu
cygmcmVzb3VyY2UpKTsKKyAgICBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzLmFkZCgmcmVzb3VyY2Up
OworfQorCit2b2lkIE1lbW9yeUNhY2hlOjphZGRUb0xpdmVSZXNvdXJjZXNTaXplKENhY2hlZFJl
c291cmNlJiByZXNvdXJjZSkKK3sKKyAgICBtX2xpdmVTaXplICs9IHJlc291cmNlLnNpemUoKTsK
KyAgICBtX2RlYWRTaXplIC09IHJlc291cmNlLnNpemUoKTsKK30KKwordm9pZCBNZW1vcnlDYWNo
ZTo6cmVtb3ZlRnJvbUxpdmVSZXNvdXJjZXNTaXplKENhY2hlZFJlc291cmNlJiByZXNvdXJjZSkK
K3sKKyAgICBtX2xpdmVTaXplIC09IHJlc291cmNlLnNpemUoKTsKKyAgICBtX2RlYWRTaXplICs9
IHJlc291cmNlLnNpemUoKTsKK30KKwordm9pZCBNZW1vcnlDYWNoZTo6YWRqdXN0U2l6ZShib29s
IGxpdmUsIGludCBkZWx0YSkKK3sKKyAgICBpZiAobGl2ZSkgeworICAgICAgICBBU1NFUlQoZGVs
dGEgPj0gMCB8fCAoKGludCltX2xpdmVTaXplICsgZGVsdGEgPj0gMCkpOworICAgICAgICBtX2xp
dmVTaXplICs9IGRlbHRhOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChkZWx0YSA+PSAw
IHx8ICgoaW50KW1fZGVhZFNpemUgKyBkZWx0YSA+PSAwKSk7CisgICAgICAgIG1fZGVhZFNpemUg
Kz0gZGVsdGE7CisgICAgfQorfQorCit2b2lkIE1lbW9yeUNhY2hlOjpyZW1vdmVSZXF1ZXN0RnJv
bVNlc3Npb25DYWNoZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGlmIChpczxXb3JrZXJHbG9iYWxTY29wZT4o
Y29udGV4dCkpIHsKKyAgICAgICAgZG93bmNhc3Q8V29ya2VyR2xvYmFsU2NvcGU+KGNvbnRleHQp
LnRocmVhZCgpLndvcmtlckxvYWRlclByb3h5KCkucG9zdFRhc2tUb0xvYWRlcihbcmVxdWVzdCA9
IHJlcXVlc3QuaXNvbGF0ZWRDb3B5KCldIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
KSB7CisgICAgICAgICAgICBNZW1vcnlDYWNoZTo6cmVtb3ZlUmVxdWVzdEZyb21TZXNzaW9uQ2Fj
aGVzKGNvbnRleHQsIHJlcXVlc3QpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGF1dG8mIG1lbW9yeUNhY2hlID0gTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpOwor
ICAgIGZvciAoYXV0byYgcmVzb3VyY2VzIDogbWVtb3J5Q2FjaGUubV9zZXNzaW9uUmVzb3VyY2Vz
KSB7CisgICAgICAgIGlmIChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBtZW1vcnlDYWNoZS5y
ZXNvdXJjZUZvclJlcXVlc3RJbXBsKHJlcXVlc3QsICpyZXNvdXJjZXMudmFsdWUpKQorICAgICAg
ICAgICAgbWVtb3J5Q2FjaGUucmVtb3ZlKCpyZXNvdXJjZSk7CisgICAgfQorfQorCit2b2lkIE1l
bW9yeUNhY2hlOjpUeXBlU3RhdGlzdGljOjphZGRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSYgcmVz
b3VyY2UpCit7CisgICAgY291bnQrKzsKKyAgICBzaXplICs9IHJlc291cmNlLnNpemUoKTsKKyAg
ICBsaXZlU2l6ZSArPSByZXNvdXJjZS5oYXNDbGllbnRzKCkgPyByZXNvdXJjZS5zaXplKCkgOiAw
OworICAgIGRlY29kZWRTaXplICs9IHJlc291cmNlLmRlY29kZWRTaXplKCk7Cit9CisKK01lbW9y
eUNhY2hlOjpTdGF0aXN0aWNzIE1lbW9yeUNhY2hlOjpnZXRTdGF0aXN0aWNzKCkKK3sKKyAgICBT
dGF0aXN0aWNzIHN0YXRzOworCisgICAgZm9yIChhdXRvJiByZXNvdXJjZXMgOiBtX3Nlc3Npb25S
ZXNvdXJjZXMudmFsdWVzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvKiByZXNvdXJjZSA6IHJlc291
cmNlcy0+dmFsdWVzKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAocmVzb3VyY2UtPnR5cGUoKSkg
eworICAgICAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKKyAgICAg
ICAgICAgICAgICBzdGF0cy5pbWFnZXMuYWRkUmVzb3VyY2UoKnJlc291cmNlKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxl
U2hlZXQ6CisgICAgICAgICAgICAgICAgc3RhdHMuY3NzU3R5bGVTaGVldHMuYWRkUmVzb3VyY2Uo
KnJlc291cmNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OlNjcmlwdDoKKyAgICAgICAgICAgICAgICBzdGF0cy5zY3JpcHRzLmFkZFJl
c291cmNlKCpyZXNvdXJjZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjaWYgRU5BQkxFKFhT
TFQpCisgICAgICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgorICAg
ICAgICAgICAgICAgIHN0YXRzLnhzbFN0eWxlU2hlZXRzLmFkZFJlc291cmNlKCpyZXNvdXJjZSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQor
ICAgICAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U1ZHRm9udFJlc291cmNlOgorI2VuZGlm
CisgICAgICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6CisgICAgICAg
ICAgICAgICAgc3RhdHMuZm9udHMuYWRkUmVzb3VyY2UoKnJlc291cmNlKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXRzOworfQor
Cit2b2lkIE1lbW9yeUNhY2hlOjpzZXREaXNhYmxlZChib29sIGRpc2FibGVkKQoreworICAgIG1f
ZGlzYWJsZWQgPSBkaXNhYmxlZDsKKyAgICBpZiAoIW1fZGlzYWJsZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIHdoaWxlICghbV9zZXNzaW9uUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworICAgICAg
ICBhdXRvJiByZXNvdXJjZXMgPSAqbV9zZXNzaW9uUmVzb3VyY2VzLmJlZ2luKCktPnZhbHVlOwor
ICAgICAgICBBU1NFUlQoIXJlc291cmNlcy5pc0VtcHR5KCkpOworICAgICAgICByZW1vdmUoKnJl
c291cmNlcy5iZWdpbigpLT52YWx1ZSk7CisgICAgfQorfQorCit2b2lkIE1lbW9yeUNhY2hlOjpl
dmljdFJlc291cmNlcygpCit7CisgICAgaWYgKGRpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIHNldERpc2FibGVkKHRydWUpOworICAgIHNldERpc2FibGVkKGZhbHNlKTsKK30KKwor
dm9pZCBNZW1vcnlDYWNoZTo6ZXZpY3RSZXNvdXJjZXMoU2Vzc2lvbklEIHNlc3Npb25JRCkKK3sK
KyAgICBpZiAoZGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yRWFjaFNlc3Np
b25SZXNvdXJjZShzZXNzaW9uSUQsIFt0aGlzXSAoQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKSB7
IHJlbW92ZShyZXNvdXJjZSk7IH0pOworCisgICAgQVNTRVJUKCFtX3Nlc3Npb25SZXNvdXJjZXMu
Y29udGFpbnMoc2Vzc2lvbklEKSk7Cit9CisKK2Jvb2wgTWVtb3J5Q2FjaGU6Om5lZWRzUHJ1bmlu
ZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGl2ZVNpemUgKyBtX2RlYWRTaXplID4gbV9jYXBh
Y2l0eSB8fCBtX2RlYWRTaXplID4gbV9tYXhEZWFkQ2FwYWNpdHk7Cit9CisKK3ZvaWQgTWVtb3J5
Q2FjaGU6OnBydW5lKCkKK3sKKyAgICBpZiAoIW5lZWRzUHJ1bmluZygpKQorICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgIHBydW5lRGVhZFJlc291cmNlcygpOyAvLyBQcnVuZSBkZWFkIGZp
cnN0LCBpbiBjYXNlIGl0IHdhcyAiYm9ycm93aW5nIiBjYXBhY2l0eSBmcm9tIGxpdmUuCisgICAg
cHJ1bmVMaXZlUmVzb3VyY2VzKCk7Cit9CisKK3ZvaWQgTWVtb3J5Q2FjaGU6OnBydW5lU29vbigp
Cit7CisgICAgIGlmIChtX3BydW5lVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgICBpZiAoIW5lZWRzUHJ1bmluZygpKQorICAgICAgICAgcmV0dXJuOworICAgICBtX3BydW5l
VGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCisjaWZuZGVmIE5ERUJVRwordm9pZCBNZW1vcnlD
YWNoZTo6ZHVtcFN0YXRzKCkKK3sKKyAgICBTdGF0aXN0aWNzIHMgPSBnZXRTdGF0aXN0aWNzKCk7
CisgICAgcHJpbnRmKCIlLTEzcyAlLTEzcyAlLTEzcyAlLTEzcyAlLTEzc1xuIiwgIiIsICJDb3Vu
dCIsICJTaXplIiwgIkxpdmVTaXplIiwgIkRlY29kZWRTaXplIik7CisgICAgcHJpbnRmKCIlLTEz
cyAlLTEzcyAlLTEzcyAlLTEzcyAlLTEzc1xuIiwgIi0tLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0t
LS0tLSIsICItLS0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0tLSIp
OworICAgIHByaW50ZigiJS0xM3MgJTEzZCAlMTNkICUxM2QgJTEzZFxuIiwgIkltYWdlcyIsIHMu
aW1hZ2VzLmNvdW50LCBzLmltYWdlcy5zaXplLCBzLmltYWdlcy5saXZlU2l6ZSwgcy5pbWFnZXMu
ZGVjb2RlZFNpemUpOworICAgIHByaW50ZigiJS0xM3MgJTEzZCAlMTNkICUxM2QgJTEzZFxuIiwg
IkNTUyIsIHMuY3NzU3R5bGVTaGVldHMuY291bnQsIHMuY3NzU3R5bGVTaGVldHMuc2l6ZSwgcy5j
c3NTdHlsZVNoZWV0cy5saXZlU2l6ZSwgcy5jc3NTdHlsZVNoZWV0cy5kZWNvZGVkU2l6ZSk7Cisj
aWYgRU5BQkxFKFhTTFQpCisgICAgcHJpbnRmKCIlLTEzcyAlMTNkICUxM2QgJTEzZCAlMTNkXG4i
LCAiWFNMIiwgcy54c2xTdHlsZVNoZWV0cy5jb3VudCwgcy54c2xTdHlsZVNoZWV0cy5zaXplLCBz
LnhzbFN0eWxlU2hlZXRzLmxpdmVTaXplLCBzLnhzbFN0eWxlU2hlZXRzLmRlY29kZWRTaXplKTsK
KyNlbmRpZgorICAgIHByaW50ZigiJS0xM3MgJTEzZCAlMTNkICUxM2QgJTEzZFxuIiwgIkphdmFT
Y3JpcHQiLCBzLnNjcmlwdHMuY291bnQsIHMuc2NyaXB0cy5zaXplLCBzLnNjcmlwdHMubGl2ZVNp
emUsIHMuc2NyaXB0cy5kZWNvZGVkU2l6ZSk7CisgICAgcHJpbnRmKCIlLTEzcyAlMTNkICUxM2Qg
JTEzZCAlMTNkXG4iLCAiRm9udHMiLCBzLmZvbnRzLmNvdW50LCBzLmZvbnRzLnNpemUsIHMuZm9u
dHMubGl2ZVNpemUsIHMuZm9udHMuZGVjb2RlZFNpemUpOworICAgIHByaW50ZigiJS0xM3MgJS0x
M3MgJS0xM3MgJS0xM3MgJS0xM3NcblxuIiwgIi0tLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0t
LSIsICItLS0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0tLSIpOwor
fQorCit2b2lkIE1lbW9yeUNhY2hlOjpkdW1wTFJVTGlzdHMoYm9vbCBpbmNsdWRlTGl2ZSkgY29u
c3QKK3sKKyAgICBwcmludGYoIkxSVS1TUCBsaXN0cyBpbiBldmljdGlvbiBvcmRlciAoS2lsb2J5
dGVzIGRlY29kZWQsIEtpbG9ieXRlcyBlbmNvZGVkLCBBY2Nlc3MgY291bnQsIFJlZmVyZW5jZWQp
OlxuIik7CisKKyAgICBpbnQgc2l6ZSA9IG1fYWxsUmVzb3VyY2VzLnNpemUoKTsKKyAgICBmb3Ig
KGludCBpID0gc2l6ZSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIHByaW50ZigiXG5cbkxp
c3QgJWQ6ICIsIGkpOworICAgICAgICBmb3IgKGF1dG8qIHJlc291cmNlIDogKm1fYWxsUmVzb3Vy
Y2VzW2ldKSB7CisgICAgICAgICAgICBpZiAoaW5jbHVkZUxpdmUgfHwgIXJlc291cmNlLT5oYXND
bGllbnRzKCkpCisgICAgICAgICAgICAgICAgcHJpbnRmKCIoJS4xZkssICUuMWZLLCAldUEsICVk
Uik7ICIsIHJlc291cmNlLT5kZWNvZGVkU2l6ZSgpIC8gMTAyNC4wZiwgKHJlc291cmNlLT5lbmNv
ZGVkU2l6ZSgpICsgcmVzb3VyY2UtPm92ZXJoZWFkU2l6ZSgpKSAvIDEwMjQuMGYsIHJlc291cmNl
LT5hY2Nlc3NDb3VudCgpLCByZXNvdXJjZS0+aGFzQ2xpZW50cygpKTsKKyAgICAgICAgfQorICAg
IH0KK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvZmV0Y2gvTWVtb3J5Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9mZXRjaC9NZW1vcnlDYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiZTE3NDdjMmEzYmFlYjVmOWEw
YThiZjU3OTk0YTcxMjkwNDU3NGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvZmV0Y2gvTWVtb3J5Q2FjaGUuaApAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgICAgQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisKKyAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5l
ZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxlIHNoZWV0cyBhbmQgaHRtbAorICAgIHBhZ2Vz
IGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgor
Ki8KKworI2lmbmRlZiBDYWNoZV9oCisjZGVmaW5lIENhY2hlX2gKKworI2luY2x1ZGUgIk5hdGl2
ZUltYWdlUHRyLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5IYXNoLmgiCisjaW5jbHVkZSAi
U2Vzc2lvbklELmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSAg
eworCitjbGFzcyBDYWNoZWRSZXNvdXJjZTsKK2NsYXNzIFVSTDsKK2NsYXNzIFJlc291cmNlUmVx
dWVzdDsKK2NsYXNzIFJlc291cmNlUmVzcG9uc2U7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OworY2xhc3MgU2VjdXJpdHlPcmlnaW47CisKKy8vIFRoaXMgY2FjaGUgaG9sZHMgc3VicmVz
b3VyY2VzIHVzZWQgYnkgV2ViIHBhZ2VzOiBpbWFnZXMsIHNjcmlwdHMsIHN0eWxlc2hlZXRzLCBl
dGMuCisKKy8vIFRoZSBjYWNoZSBrZWVwcyBhIGZsZXhpYmxlIGJ1dCBib3VuZGVkIHdpbmRvdyBv
ZiBkZWFkIHJlc291cmNlcyB0aGF0IGdyb3dzL3Nocmlua3MgCisvLyBkZXBlbmRpbmcgb24gdGhl
IGxpdmUgcmVzb3VyY2UgbG9hZC4gSGVyZSdzIGFuIGV4YW1wbGUgb2YgY2FjaGUgZ3Jvd3RoIG92
ZXIgdGltZSwKKy8vIHdpdGggYSBtaW4gZGVhZCByZXNvdXJjZSBjYXBhY2l0eSBvZiAyNSUgYW5k
IGEgbWF4IGRlYWQgcmVzb3VyY2UgY2FwYWNpdHkgb2YgNTAlOgorCisvLyAgICAgICAgfC0tLS0t
fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlYWQ6IC0KKy8vICAgICAgICB8LS0tLS0t
LS0tLXwgICAgICAgICAgICAgICAgICAgICAgICAgTGl2ZTogKworLy8gICAgICAtLXwtLS0tLS0t
LS0tfCAgICAgICAgICAgICAgICAgICAgICAgICBDYWNoZSBib3VuZGFyeTogfCAob2JqZWN0cyBv
dXRzaWRlIHRoaXMgbWFyayBoYXZlIGJlZW4gZXZpY3RlZCkKKy8vICAgICAgLS18LS0tLS0tLS0t
LSsrKysrKysrKyt8CisvLyAtLS0tLS0tfC0tLS0tKysrKysrKysrKysrKysrfAorLy8gLS0tLS0t
LXwtLS0tLSsrKysrKysrKysrKysrK3wrKysrKworCitjbGFzcyBNZW1vcnlDYWNoZSB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoTWVtb3J5Q2FjaGUpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKKyAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q2FjaGU+OworICAgIGZyaWVuZCBj
bGFzcyBJbnRlcm5hbHM7CitwdWJsaWM6CisgICAgc3RydWN0IFR5cGVTdGF0aXN0aWMgeworICAg
ICAgICBpbnQgY291bnQ7CisgICAgICAgIGludCBzaXplOworICAgICAgICBpbnQgbGl2ZVNpemU7
CisgICAgICAgIGludCBkZWNvZGVkU2l6ZTsKKworICAgICAgICBUeXBlU3RhdGlzdGljKCkKKyAg
ICAgICAgICAgIDogY291bnQoMCkKKyAgICAgICAgICAgICwgc2l6ZSgwKQorICAgICAgICAgICAg
LCBsaXZlU2l6ZSgwKQorICAgICAgICAgICAgLCBkZWNvZGVkU2l6ZSgwKQorICAgICAgICB7IAor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhZGRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSYpOwor
ICAgIH07CisgICAgCisgICAgc3RydWN0IFN0YXRpc3RpY3MgeworICAgICAgICBUeXBlU3RhdGlz
dGljIGltYWdlczsKKyAgICAgICAgVHlwZVN0YXRpc3RpYyBjc3NTdHlsZVNoZWV0czsKKyAgICAg
ICAgVHlwZVN0YXRpc3RpYyBzY3JpcHRzOworICAgICAgICBUeXBlU3RhdGlzdGljIHhzbFN0eWxl
U2hlZXRzOworICAgICAgICBUeXBlU3RhdGlzdGljIGZvbnRzOworICAgIH07CisKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgTWVtb3J5Q2FjaGUmIHNpbmdsZXRvbigpOworCisgICAgV0VCQ09S
RV9FWFBPUlQgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlRm9yUmVxdWVzdChjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBTZXNzaW9uSUQpOworCisgICAgYm9vbCBhZGQoQ2FjaGVkUmVzb3VyY2UmKTsK
KyAgICB2b2lkIHJlbW92ZShDYWNoZWRSZXNvdXJjZSYpOworCisgICAgc3RhdGljIFVSTCByZW1v
dmVGcmFnbWVudElkZW50aWZpZXJJZk5lZWRlZChjb25zdCBVUkwmIG9yaWdpbmFsVVJMKTsKKyAg
ICAKKyAgICB2b2lkIHJldmFsaWRhdGlvblN1Y2NlZWRlZChDYWNoZWRSZXNvdXJjZSYgcmV2YWxp
ZGF0aW5nUmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2b2lkIHJldmFs
aWRhdGlvbkZhaWxlZChDYWNoZWRSZXNvdXJjZSYgcmV2YWxpZGF0aW5nUmVzb3VyY2UpOworCisg
ICAgdm9pZCBmb3JFYWNoUmVzb3VyY2UoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKENhY2hlZFJl
c291cmNlJik+Jik7CisgICAgdm9pZCBmb3JFYWNoU2Vzc2lvblJlc291cmNlKFNlc3Npb25JRCwg
Y29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKENhY2hlZFJlc291cmNlJik+Jik7CisgICAgdm9pZCBk
ZXN0cm95RGVjb2RlZERhdGFGb3JBbGxJbWFnZXMoKTsKKyAgICAKKyAgICAvLyBTZXRzIHRoZSBj
YWNoZSdzIG1lbW9yeSBjYXBhY2l0aWVzLCBpbiBieXRlcy4gVGhlc2Ugd2lsbCBob2xkIG9ubHkg
YXBwcm94aW1hdGVseSwgCisgICAgLy8gc2luY2UgdGhlIGRlY29kZWQgY29zdCBvZiByZXNvdXJj
ZXMgbGlrZSBzY3JpcHRzIGFuZCBzdHlsZXNoZWV0cyBpcyBub3Qga25vd24uCisgICAgLy8gIC0g
bWluRGVhZEJ5dGVzOiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBkZWFkIHJlc291
cmNlcyBzaG91bGQgY29uc3VtZSB3aGVuIHRoZSBjYWNoZSBpcyB1bmRlciBwcmVzc3VyZS4KKyAg
ICAvLyAgLSBtYXhEZWFkQnl0ZXM6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGF0IGRl
YWQgcmVzb3VyY2VzIHNob3VsZCBjb25zdW1lIHdoZW4gdGhlIGNhY2hlIGlzIG5vdCB1bmRlciBw
cmVzc3VyZS4KKyAgICAvLyAgLSB0b3RhbEJ5dGVzOiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnl0
ZXMgdGhhdCB0aGUgY2FjaGUgc2hvdWxkIGNvbnN1bWUgb3ZlcmFsbC4KKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldENhcGFjaXRpZXModW5zaWduZWQgbWluRGVhZEJ5dGVzLCB1bnNpZ25lZCBt
YXhEZWFkQnl0ZXMsIHVuc2lnbmVkIHRvdGFsQnl0ZXMpOworCisgICAgLy8gVHVybiB0aGUgY2Fj
aGUgb24gYW5kIG9mZi4gIERpc2FibGluZyB0aGUgY2FjaGUgd2lsbCByZW1vdmUgYWxsIHJlc291
cmNlcyBmcm9tIHRoZSBjYWNoZS4gIFRoZXkgbWF5CisgICAgLy8gc3RpbGwgbGl2ZSBvbiBpZiB0
aGV5IGFyZSByZWZlcmVuY2VkIGJ5IHNvbWUgV2ViIHBhZ2UgdGhvdWdoLgorICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0RGlzYWJsZWQoYm9vbCk7CisgICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fZGlzYWJsZWQ7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXZpY3RS
ZXNvdXJjZXMoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV2aWN0UmVzb3VyY2VzKFNlc3Np
b25JRCk7CisgICAgCisgICAgdm9pZCBwcnVuZSgpOworICAgIHZvaWQgcHJ1bmVTb29uKCk7Cisg
ICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGl2ZVNpemUgKyBtX2RlYWRTaXpl
OyB9CisKKyAgICB2b2lkIHNldERlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwoc3RkOjpj
aHJvbm86Om1pbGxpc2Vjb25kcyBpbnRlcnZhbCkgeyBtX2RlYWREZWNvZGVkRGF0YURlbGV0aW9u
SW50ZXJ2YWwgPSBpbnRlcnZhbDsgfQorICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgZGVh
ZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVhZERlY29k
ZWREYXRhRGVsZXRpb25JbnRlcnZhbDsgfQorCisgICAgLy8gQ2FsbHMgdG8gcHV0IHRoZSBjYWNo
ZWQgcmVzb3VyY2UgaW50byBhbmQgb3V0IG9mIExSVSBsaXN0cy4KKyAgICB2b2lkIGluc2VydElu
TFJVTGlzdChDYWNoZWRSZXNvdXJjZSYpOworICAgIHZvaWQgcmVtb3ZlRnJvbUxSVUxpc3QoQ2Fj
aGVkUmVzb3VyY2UmKTsKKworICAgIC8vIENhbGxlZCB0byBhZGp1c3QgdGhlIGNhY2hlIHRvdGFs
cyB3aGVuIGEgcmVzb3VyY2UgY2hhbmdlcyBzaXplLgorICAgIHZvaWQgYWRqdXN0U2l6ZShib29s
IGxpdmUsIGludCBkZWx0YSk7CisKKyAgICAvLyBUcmFjayBkZWNvZGVkIHJlc291cmNlcyB0aGF0
IGFyZSBpbiB0aGUgY2FjaGUgYW5kIHJlZmVyZW5jZWQgYnkgYSBXZWIgcGFnZS4KKyAgICB2b2lk
IGluc2VydEluTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KENhY2hlZFJlc291cmNlJik7CisgICAg
dm9pZCByZW1vdmVGcm9tTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KENhY2hlZFJlc291cmNlJik7
CisKKyAgICB2b2lkIGFkZFRvTGl2ZVJlc291cmNlc1NpemUoQ2FjaGVkUmVzb3VyY2UmKTsKKyAg
ICB2b2lkIHJlbW92ZUZyb21MaXZlUmVzb3VyY2VzU2l6ZShDYWNoZWRSZXNvdXJjZSYpOworCisg
ICAgc3RhdGljIHZvaWQgcmVtb3ZlUmVxdWVzdEZyb21TZXNzaW9uQ2FjaGVzKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKKworICAgIC8vIEZ1bmN0aW9u
IHRvIGNvbGxlY3QgY2FjaGUgc3RhdGlzdGljcyBmb3IgdGhlIGNhY2hlcyB3aW5kb3cgaW4gdGhl
IFNhZmFyaSBEZWJ1ZyBtZW51LgorICAgIFdFQkNPUkVfRVhQT1JUIFN0YXRpc3RpY3MgZ2V0U3Rh
dGlzdGljcygpOworICAgIAorICAgIHZvaWQgcmVzb3VyY2VBY2Nlc3NlZChDYWNoZWRSZXNvdXJj
ZSYpOworICAgIGJvb2wgaW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QoQ2FjaGVkUmVzb3VyY2Um
IHJlc291cmNlKSBjb25zdCB7IHJldHVybiBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzLmNvbnRhaW5z
KCZyZXNvdXJjZSk7IH0KKworICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8U2VjdXJpdHlPcmln
aW4+PiBTZWN1cml0eU9yaWdpblNldDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVJl
c291cmNlc1dpdGhPcmlnaW4oU2VjdXJpdHlPcmlnaW4mKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlbW92ZVJlc291cmNlc1dpdGhPcmlnaW5zKFNlc3Npb25JRCwgY29uc3QgSGFzaFNldDxS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+PiYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0T3Jp
Z2luc1dpdGhDYWNoZShTZWN1cml0eU9yaWdpblNldCYgb3JpZ2lucyk7CisgICAgV0VCQ09SRV9F
WFBPUlQgSGFzaFNldDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+PiBvcmlnaW5zV2l0aENhY2hlKFNl
c3Npb25JRCkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGFkZEltYWdlVG9DYWNo
ZShOYXRpdmVJbWFnZVB0ciYmLCBjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIGRvbWFpbkZvckNh
Y2hlUGFydGl0aW9uKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUltYWdlRnJvbUNh
Y2hlKGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYgZG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24pOwor
CisgICAgLy8gcHJ1bmVEZWFkKigpIC0gRmx1c2ggZGVjb2RlZCBhbmQgZW5jb2RlZCBkYXRhIGZy
b20gcmVzb3VyY2VzIG5vdCByZWZlcmVuY2VkIGJ5IFdlYiBwYWdlcy4KKyAgICAvLyBwcnVuZUxp
dmUqKCkgLSBGbHVzaCBkZWNvZGVkIGRhdGEgZnJvbSByZXNvdXJjZXMgc3RpbGwgcmVmZXJlbmNl
ZCBieSBXZWIgcGFnZXMuCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcnVuZURlYWRSZXNvdXJj
ZXMoKTsgLy8gQXV0b21hdGljYWxseSBkZWNpZGUgaG93IG11Y2ggdG8gcHJ1bmUuCisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBwcnVuZUxpdmVSZXNvdXJjZXMoYm9vbCBzaG91bGREZXN0cm95RGVj
b2RlZERhdGFGb3JBbGxMaXZlUmVzb3VyY2VzID0gZmFsc2UpOworCisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBwcnVuZURlYWRSZXNvdXJjZXNUb1NpemUodW5zaWduZWQgdGFyZ2V0U2l6ZSk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcnVuZUxpdmVSZXNvdXJjZXNUb1NpemUodW5zaWduZWQg
dGFyZ2V0U2l6ZSwgYm9vbCBzaG91bGREZXN0cm95RGVjb2RlZERhdGFGb3JBbGxMaXZlUmVzb3Vy
Y2VzID0gZmFsc2UpOworCitwcml2YXRlOgorI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcp
CisgICAgdHlwZWRlZiBIYXNoTWFwPHN0ZDo6cGFpcjxVUkwsIFN0cmluZyAvKiBwYXJ0aXRpb25O
YW1lICovPiwgQ2FjaGVkUmVzb3VyY2UqPiBDYWNoZWRSZXNvdXJjZU1hcDsKKyNlbHNlCisgICAg
dHlwZWRlZiBIYXNoTWFwPFVSTCwgQ2FjaGVkUmVzb3VyY2UqPiBDYWNoZWRSZXNvdXJjZU1hcDsK
KyNlbmRpZgorICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2UqPiBMUlVMaXN0
OworCisgICAgTWVtb3J5Q2FjaGUoKTsKKyAgICB+TWVtb3J5Q2FjaGUoKTsgLy8gTm90IGltcGxl
bWVudGVkIHRvIG1ha2Ugc3VyZSBub2JvZHkgYWNjaWRlbnRhbGx5IGNhbGxzIGRlbGV0ZSAtLSBX
ZWJDb3JlIGRvZXMgbm90IGRlbGV0ZSBzaW5nbGV0b25zLgorCisgICAgTFJVTGlzdCYgbHJ1TGlz
dEZvcihDYWNoZWRSZXNvdXJjZSYpOworI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXBTdGF0
cygpOworICAgIHZvaWQgZHVtcExSVUxpc3RzKGJvb2wgaW5jbHVkZUxpdmUpIGNvbnN0OworI2Vu
ZGlmCisKKyAgICB1bnNpZ25lZCBsaXZlQ2FwYWNpdHkoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBk
ZWFkQ2FwYWNpdHkoKSBjb25zdDsKKyAgICBib29sIG5lZWRzUHJ1bmluZygpIGNvbnN0OworCisg
ICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlRm9yUmVxdWVzdEltcGwoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgQ2FjaGVkUmVzb3VyY2VNYXAmKTsKKworICAgIENhY2hlZFJlc291cmNlTWFwJiBl
bnN1cmVTZXNzaW9uUmVzb3VyY2VNYXAoU2Vzc2lvbklEKTsKKyAgICBDYWNoZWRSZXNvdXJjZU1h
cCogc2Vzc2lvblJlc291cmNlTWFwKFNlc3Npb25JRCkgY29uc3Q7CisKKyAgICBib29sIG1fZGlz
YWJsZWQ7ICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgY2FjaGUgaXMgZW5hYmxlZC4KKyAgICBib29s
IG1faW5QcnVuZVJlc291cmNlczsKKworICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7CisgICAgdW5z
aWduZWQgbV9taW5EZWFkQ2FwYWNpdHk7CisgICAgdW5zaWduZWQgbV9tYXhEZWFkQ2FwYWNpdHk7
CisgICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBtX2RlYWREZWNvZGVkRGF0YURlbGV0aW9u
SW50ZXJ2YWw7CisKKyAgICB1bnNpZ25lZCBtX2xpdmVTaXplOyAvLyBUaGUgbnVtYmVyIG9mIGJ5
dGVzIGN1cnJlbnRseSBjb25zdW1lZCBieSAibGl2ZSIgcmVzb3VyY2VzIGluIHRoZSBjYWNoZS4K
KyAgICB1bnNpZ25lZCBtX2RlYWRTaXplOyAvLyBUaGUgbnVtYmVyIG9mIGJ5dGVzIGN1cnJlbnRs
eSBjb25zdW1lZCBieSAiZGVhZCIgcmVzb3VyY2VzIGluIHRoZSBjYWNoZS4KKworICAgIC8vIFNp
emUtYWRqdXN0ZWQgYW5kIHBvcHVsYXJpdHktYXdhcmUgTFJVIGxpc3QgY29sbGVjdGlvbiBmb3Ig
Y2FjaGUgb2JqZWN0cy4gIFRoaXMgY29sbGVjdGlvbiBjYW4gaG9sZAorICAgIC8vIG1vcmUgcmVz
b3VyY2VzIHRoYW4gdGhlIGNhY2hlZCByZXNvdXJjZSBtYXAsIHNpbmNlIGl0IGNhbiBhbHNvIGhv
bGQgInN0YWxlIiBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBvYmplY3RzIHRoYXQgYXJlCisgICAgLy8g
d2FpdGluZyB0byBkaWUgd2hlbiB0aGUgY2xpZW50cyByZWZlcmVuY2luZyB0aGVtIGdvIGF3YXku
CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxMUlVMaXN0PiwgMzI+IG1fYWxsUmVzb3VyY2Vz
OworICAgIAorICAgIC8vIExpc3QganVzdCBmb3IgbGl2ZSByZXNvdXJjZXMgd2l0aCBkZWNvZGVk
IGRhdGEuICBBY2Nlc3MgdG8gdGhpcyBsaXN0IGlzIGJhc2VkIG9mZiBvZiBwYWludGluZyB0aGUg
cmVzb3VyY2UuCisgICAgTFJVTGlzdCBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzOworICAgIAorICAg
IC8vIEEgVVJMLWJhc2VkIG1hcCBvZiBhbGwgcmVzb3VyY2VzIHRoYXQgYXJlIGluIHRoZSBjYWNo
ZSAoaW5jbHVkaW5nIHRoZSBmcmVzaGVzdCB2ZXJzaW9uIG9mIG9iamVjdHMgdGhhdCBhcmUgY3Vy
cmVudGx5IGJlaW5nIAorICAgIC8vIHJlZmVyZW5jZWQgYnkgYSBXZWIgcGFnZSkuCisgICAgdHlw
ZWRlZiBIYXNoTWFwPFNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPENhY2hlZFJlc291cmNlTWFw
Pj4gU2Vzc2lvbkNhY2hlZFJlc291cmNlTWFwOworICAgIFNlc3Npb25DYWNoZWRSZXNvdXJjZU1h
cCBtX3Nlc3Npb25SZXNvdXJjZXM7CisKKyAgICBUaW1lciBtX3BydW5lVGltZXI7Cit9OworCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQgYi9T
b3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAppbmRleCA2MGJiMDNjZmFhNjk2OTM2YTlmYjYx
YWMxMWMyOWI4NDVjNGY1NWExLi40NDZhYzNhMWY0OWU3MzNkYmYyYTExNWE4OGI4ZGRlZjUyM2I1
NGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dApAQCAtMTA3LDggKzEwNyw4IEBAIHNldChXZWJLaXQy
X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yIgogICAg
ICIke1dFQkNPUkVfRElSfS9sb2FkZXIiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2xvYWRlci9hcmNo
aXZlIgorICAgICIke1dFQkNPUkVfRElSfS9sb2FkZXIvZmV0Y2giCiAgICAgIiR7V0VCQ09SRV9E
SVJ9L2xvYWRlci9pY29uIgotICAgICIke1dFQkNPUkVfRElSfS9sb2FkZXIvY2FjaGUiCiAgICAg
IiR7V0VCQ09SRV9ESVJ9L3BhZ2UiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BhZ2UvYW5pbWF0aW9u
IgogICAgICIke1dFQkNPUkVfRElSfS9wYWdlL2NzcCIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5n
ZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyMDAyOTQxMmZlMzk2YWI4ZGIyZGM2Mzc5MWE2
NWJmMDY3MjkwOTBlLi5hMWQ5ZTFhNzAxM2I1ZDU0ODgyOGUxNTExYmVkOTI3YjQ0Y2FhNDMxIDEw
MDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUg
KzEsMTYgQEAKIDIwMTYtMDktMDUgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgog
CisgICAgICAgIFtGZXRjaCBBUEldIE1vdmUgV2ViQ29yZS9sb2FkZXIvY2FjaGUgdG8gV2ViQ29y
ZS9sb2FkZXIvZmV0Y2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MTYwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9jb21tb24vY29uZmlnL3dhdGNobGlzdDoKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL0NNYWtlTGlzdHMudHh0OgorCisyMDE2LTA5LTA1ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5u
QGFwcGxlLmNvbT4KKwogICAgICAgICBXM0MgdGVzdCBpbXBvcnRlciBzaG91bGQgZ2VuZXJhdGUg
dGhlIGxpc3Qgb2YgcmVzb3VyY2UgZmlsZXMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MTU3OAogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0NNYWtlTGlzdHMudHh0
CmluZGV4IDkwMDg5MWQwODA2ZGI2NmE4YWI1OThmNjRiNGUzZTczZjdlMzAyOTAuLmY5ZjE3YzBi
ZTI5NjZiNjg2YTEwYTM0YjhmN2JjMDBjNTQzOTFlOGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0NNYWtl
TGlzdHMudHh0CkBAIC0zNyw3ICszNyw3IEBAIHNldChEdW1wUmVuZGVyVHJlZV9JTkNMVURFX0RJ
UkVDVE9SSUVTCiAgICAgJHtXRUJDT1JFX0RJUn0vaHRtbAogICAgICR7V0VCQ09SRV9ESVJ9L2lu
c3BlY3RvcgogICAgICR7V0VCQ09SRV9ESVJ9L2xvYWRlcgotICAgICR7V0VCQ09SRV9ESVJ9L2xv
YWRlci9jYWNoZQorICAgICR7V0VCQ09SRV9ESVJ9L2xvYWRlci9mZXRjaAogICAgICR7V0VCQ09S
RV9ESVJ9L2xvYWRlci9pY29uCiAgICAgJHtXRUJDT1JFX0RJUn0vcGFnZQogICAgICR7V0VCQ09S
RV9ESVJ9L3BhZ2UvYW5pbWF0aW9uCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9jb25maWcvd2F0Y2hsaXN0IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
Y29uZmlnL3dhdGNobGlzdAppbmRleCA2Mjk2YjQ0ZTI4MGE5M2ViNmRlN2ViMjI2OGQ3MDMxNmVi
ZTI1MzRjLi4zYWUxMGM1MjE2ZDViZjVjNWE2OWJhZTYzN2FkM2ZlZDE5MDVlN2FlIDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvd2F0Y2hsaXN0CisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy93YXRjaGxpc3QKQEAgLTMxOSw3
ICszMTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgciJ8TGF5b3V0VGVzdHMvc3RyZWFt
cy8iLAogICAgICAgICB9LAogICAgICAgICAiTWFjQW5kSU9TVGV4dExheW91dEFuZFJlbmRlcmlu
ZyI6IHsKLSAgICAgICAgICAgICJmaWxlbmFtZSI6IHIiU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZEZvbnRcLihofGNwcCkiCisgICAgICAgICAgICAiZmlsZW5hbWUiOiByIlNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9mZXRjaC9DYWNoZWRGb250XC4oaHxjcHApIgogICAgICAgICAgICAg
ICAgICAgICAgICAgciJ8U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nLy4qSW5saW5lLipCb3hcLiho
fGNwcCkiCiAgICAgICAgICAgICAgICAgICAgICAgICByInxTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lSXRlcmF0b3JcLmgiCiAgICAgICAgICAgICAgICAgICAgICAgICByInxTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQmxvY2tMaW5lTGF5b3V0XC5jcHAiCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9DTWFrZUxpc3RzLnR4dAppbmRleCAyMjBhZjc3NzQyNTczYjZjNzc3NzkxMGZiNzg5NDQzMzI5
ZDIxNzY2Li5jOGQ1N2NjYmY0NjdhOWU5OGQ0ZjBmNjY2ZTI2N2Q2MDE3ZmE5NzViIDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKQEAgLTEwMyw3ICsxMDMsNyBAQCBpbmNsdWRlX2RpcmVj
dG9yaWVzKAogICAgICR7V0VCQ09SRV9ESVJ9L2Nzcy9wYXJzZXIKICAgICAke1dFQkNPUkVfRElS
fS9kb20KICAgICAke1dFQkNPUkVfRElSfS9lZGl0aW5nCi0gICAgJHtXRUJDT1JFX0RJUn0vbG9h
ZGVyL2NhY2hlCisgICAgJHtXRUJDT1JFX0RJUn0vbG9hZGVyL2ZldGNoCiAgICAgJHtXRUJDT1JF
X0RJUn0vcGFnZQogICAgICR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtCiAgICAgJHtXRUJDT1JFX0RJ
Un0vcGxhdGZvcm0vYW5pbWF0aW9uCg==
</data>
<flag name="review"
          id="311367"
          type_id="1"
          status="-"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>