<?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>118069</bug_id>
          
          <creation_ts>2013-06-26 10:24:00 -0700</creation_ts>
          <short_desc>Prepare CaptionUserPreferencesMac for use on Windows port</short_desc>
          <delta_ts>2013-06-26 11:49:31 -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>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>903786</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-06-26 10:24:00 -0700</bug_when>
    <thetext>Prepare the CaptionUserPreferencesMac class to be usable on the Apple Windows port by:
1. Renaming it to CaptionUserPreferencesMediaAF.cpp
2. Making minor changes to compile with C++.

This change should create no changes in behavior, and will be followed by a Windows-specific patch to turn on various features.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903822</commentid>
    <comment_count>1</comment_count>
      <attachid>205510</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-06-26 11:21:51 -0700</bug_when>
    <thetext>Created attachment 205510
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903823</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-26 11:22:42 -0700</bug_when>
    <thetext>Attachment 205510 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/page/CaptionUserPreferencesMac.h&apos;, u&apos;Source/WebCore/page/CaptionUserPreferencesMac.mm&apos;, u&apos;Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp&apos;, u&apos;Source/WebCore/page/CaptionUserPreferencesMediaAF.h&apos;, u&apos;Source/WebCore/page/PageGroup.cpp&apos;]&quot; exit_code: 1
Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:149:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:168:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:207:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:254:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:415:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:524:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:572:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:839:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 8 in 7 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>903825</commentid>
    <comment_count>3</comment_count>
      <attachid>205511</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-06-26 11:26:50 -0700</bug_when>
    <thetext>Created attachment 205511
Update to correct some style warnings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903826</commentid>
    <comment_count>4</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-06-26 11:27:55 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:149:  Missing space before {  [whitespace/braces] [5]

I don&apos;t think we want to modify this Block syntax.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903827</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-06-26 11:28:48 -0700</bug_when>
    <thetext>&lt;rdar://problem/14278574&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903828</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-26 11:29:20 -0700</bug_when>
    <thetext>Attachment 205511 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/page/CaptionUserPreferencesMac.h&apos;, u&apos;Source/WebCore/page/CaptionUserPreferencesMac.mm&apos;, u&apos;Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp&apos;, u&apos;Source/WebCore/page/CaptionUserPreferencesMediaAF.h&apos;, u&apos;Source/WebCore/page/PageGroup.cpp&apos;]&quot; exit_code: 1
Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:149:  Missing space before {  [whitespace/braces] [5]
Total errors found: 1 in 7 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>903833</commentid>
    <comment_count>7</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-06-26 11:40:27 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Attachment 205511 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/page/CaptionUserPreferencesMac.h&apos;, u&apos;Source/WebCore/page/CaptionUserPreferencesMac.mm&apos;, u&apos;Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp&apos;, u&apos;Source/WebCore/page/CaptionUserPreferencesMediaAF.h&apos;, u&apos;Source/WebCore/page/PageGroup.cpp&apos;]&quot; exit_code: 1
&gt; Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:149:  Missing space before {  [whitespace/braces] [5]
&gt; Total errors found: 1 in 7 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

Bug 118072 was filed to encourage check-webkit-style to recognize Block syntax.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903837</commentid>
    <comment_count>8</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-06-26 11:49:31 -0700</bug_when>
    <thetext>Committed r152004: &lt;http://trac.webkit.org/changeset/152004&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>205510</attachid>
            <date>2013-06-26 11:21:51 -0700</date>
            <delta_ts>2013-06-26 11:26:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118069-20130626111954.patch</filename>
            <type>text/plain</type>
            <size>112637</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MjAwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEzLTA2LTI2ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFByZXBhcmUgQ2FwdGlvblVz
ZXJQcmVmZXJlbmNlc01hYyBmb3IgdXNlIG9uIFdpbmRvd3MgcG9ydC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODA2OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvajogQWRkIG5ldyBmaWxlcy4KKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2Vi
Q29yZS52Y3hwcm9qLmZpbHRlcnM6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajogVXBkYXRlIGZvciBuZXcgZmlsZSBuYW1lLgorICAgICAgICAqIHBh
Z2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2Uv
Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYy5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL0Nh
cHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcDogQ29waWVkIGZyb20gcGFnZS9DYXB0aW9u
VXNlclByZWZlcmVuY2VzTWFjLm1tLgorICAgICAgICAqIHBhZ2UvQ2FwdGlvblVzZXJQcmVmZXJl
bmNlc01lZGlhQUYuaDogQ29waWVkIGZyb20gcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWFj
LmguCisgICAgICAgICogcGFnZS9QYWdlR3JvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZUdyb3VwOjpjYXB0aW9uUHJlZmVyZW5jZXMpOiBVcGRhdGVkIHRvIG5ldyBjbGFzcyBuYW1lLgor
CiAyMDEzLTA2LTI2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFJlbmRlckJveDo6aGFzUmVuZGVyT3ZlcmZsb3cgc2hvdWxkIHJldHVybiBib29sIGluc3RlYWQg
b2YgUmVuZGVyT3ZlcmZsb3cqCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ov
V2ViQ29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4
cHJvai9XZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE1MTk5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQxNDEs
NiArNDE0MSwxNCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxBdXRvc2Nyb2xs
Q29udHJvbGxlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXEJhclBy
b3AuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwIj4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fFdp
bjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWly
b3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1
aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2lu
MzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2lu
MzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fp
cm98V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21C
dWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8
V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcQ2hyb21lLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHBhZ2VcYW5pbWF0aW9uXENvbXBvc2l0ZUFuaW1hdGlvbi5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXENvbnNvbGUuY3BwIiAvPgpAQCAtMTE2NDMs
NiArMTE2NTEsOCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFnZVxhbmltYXRpb25c
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHBhZ2VcQXV0b3Njcm9sbENvbnRyb2xsZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBhZ2VcQmFyUHJvcC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFn
ZVxDYXB0aW9uVXNlclByZWZlcmVuY2VzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxwYWdlXENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxwYWdlXENocm9tZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccGFnZVxDaHJvbWVDbGllbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBh
Z2VcYW5pbWF0aW9uXENvbXBvc2l0ZUFuaW1hdGlvbi5oIiAvPgpJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwko
cmV2aXNpb24gMTUxOTk2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC03MDMzLDYgKzcwMzMsOSBAQAog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncb3BlbmdsXEdyYXBo
aWNzQ29udGV4dDNET3BlbkdMRVMuY3BwIj4KICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhp
Y3Ncb3BlbmdsPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwYWdlXENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcCI+CisgICAgICA8
RmlsdGVyPnBhZ2U8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgPC9JdGVtR3JvdXA+CiAg
IDxJdGVtR3JvdXA+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGZpbGVzeXN0
ZW1cQXN5bmNGaWxlV3JpdGVyLmgiPgpAQCAtMTQ3MjAsNiArMTQ3MjMsMTIgQEAKICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXG9wZW5nbFxHTFBsYXRmb3JtU3Vy
ZmFjZS5oIj4KICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3Ncb3BlbmdsPC9GaWx0ZXI+
CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwYWdlXENhcHRp
b25Vc2VyUHJlZmVyZW5jZXMuaCI+CisgICAgICA8RmlsdGVyPnBhZ2U8L0ZpbHRlcj4KKyAgICA8
L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhZ2VcQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUYuaCI+CisgICAgICA8RmlsdGVyPnBhZ2U8L0ZpbHRlcj4KKyAgICA8
L0NsSW5jbHVkZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPE5vbmUgSW5j
bHVkZT0iLi5cY3NzXENTU0dyYW1tYXIueS5pbiI+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTE5OTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTEyMSw4ICsxMjEsOCBAQAogCQkwNzk0MTc5MjE2NkU4NTVGMDA5NDE2QzIg
LyogSW5iYW5kVGV4dFRyYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwNzk0MTc5MDE2NkU4NTVGMDA5NDE2QzIgLyogSW5iYW5kVGV4dFRyYWNrLmgg
Ki87IH07CiAJCTA3OTQxNzk0MTY2RUEwNEUwMDk0MTZDMiAvKiBJbmJhbmRUZXh0VHJhY2tQcml2
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzk0
MTc5MzE2NkVBMDRFMDA5NDE2QzIgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3OUQwODY4MTYyRjIw
RTgwMERCODY1OCAvKiBDYXB0aW9uVXNlclByZWZlcmVuY2VzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzlEMDg2NzE2MkYyMEU4MDBEQjg2NTggLyog
Q2FwdGlvblVzZXJQcmVmZXJlbmNlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCTA3OUQwODZCMTYyRjIxRjkwMERCODY1OCAvKiBDYXB0aW9uVXNl
clByZWZlcmVuY2VzTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwNzlEMDg2OTE2MkYyMUY5MDBEQjg2NTggLyogQ2FwdGlvblVzZXJQcmVmZXJlbmNl
c01hYy5oICovOyB9OwotCQkwNzlEMDg2QzE2MkYyMUY5MDBEQjg2NTggLyogQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA3OUQwODZBMTYyRjIxRjkwMERCODY1OCAvKiBDYXB0aW9uVXNlclByZWZlcmVuY2Vz
TWFjLm1tICovOyB9OworCQkwNzlEMDg2QjE2MkYyMUY5MDBEQjg2NTggLyogQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA3OUQwODY5MTYyRjIxRjkwMERCODY1OCAvKiBDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWVkaWFBRi5oICovOyB9OworCQkwNzlEMDg2QzE2MkYyMUY5MDBEQjg2NTggLyogQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDc5RDA4NkExNjJGMjFGOTAwREI4NjU4IC8qIENhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNNZWRpYUFGLmNwcCAqLzsgfTsKIAkJMDdBNkQxRUIxNDkxMTM3NzAwMDUxRDBD
IC8qIE1lZGlhRnJhZ21lbnRVUklQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDdBNkQxRTkxNDkxMTM3NzAwMDUxRDBDIC8qIE1lZGlhRnJh
Z21lbnRVUklQYXJzZXIuY3BwICovOyB9OwogCQkwN0E2RDFFQzE0OTExMzc3MDAwNTFEMEMgLyog
TWVkaWFGcmFnbWVudFVSSVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDdBNkQxRUExNDkxMTM3NzAwMDUxRDBDIC8qIE1lZGlhRnJhZ21lbnRV
UklQYXJzZXIuaCAqLzsgfTsKIAkJMDdBQTZCNkIxNjZEMkMwNzAwRDQ1NjcxIC8qIEluYmFuZFRl
eHRUcmFja1ByaXZhdGVBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDdBQTZCNkExNjZEMDE5NTAwRDQ1NjcxIC8qIEluYmFuZFRleHRUcmFj
a1ByaXZhdGVBVkZPYmpDLm1tICovOyB9OwpAQCAtNjMyMyw4ICs2MzIzLDggQEAKIAkJMDc5NDE3
OTAxNjZFODU1RjAwOTQxNkMyIC8qIEluYmFuZFRleHRUcmFjay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbmJhbmRUZXh0VHJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMDc5NDE3OTMxNjZFQTA0RTAwOTQxNkMyIC8qIEluYmFuZFRleHRUcmFja1ByaXZh
dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzlEMDg2NzE2MkYyMEU4MDBE
Qjg2NTggLyogQ2FwdGlvblVzZXJQcmVmZXJlbmNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDYXB0aW9uVXNlclByZWZlcmVuY2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTA3OUQwODY5MTYyRjIxRjkwMERCODY1OCAvKiBDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDc5RDA4NkExNjJG
MjFGOTAwREI4NjU4IC8qIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzlEMDg2OTE2MkYyMUY5MDBEQjg2NTgg
LyogQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMDc5RDA4NkExNjJGMjFGOTAwREI4NjU4IC8qIENhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNNZWRpYUFGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMDc5RjVFNEIwRjNCRUJFQTAwNUUwNzgyIC8qIE1lZGlhUGxheWVyUHJpdmF0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVBsYXllclByaXZhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdBNkQxRTkxNDkxMTM3NzAwMDUxRDBD
IC8qIE1lZGlhRnJhZ21lbnRVUklQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTWVkaWFGcmFnbWVudFVSSVBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTA3QTZEMUVBMTQ5MTEzNzcwMDA1MUQwQyAvKiBNZWRpYUZyYWdtZW50VVJJ
UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRnJhZ21lbnRV
UklQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NjY0LDggKzE0NjY0
LDggQEAKIAkJCQlCQzEyNEVFNjBDMjY0MUNEMDA5RTIzNDkgLyogQmFyUHJvcC5pZGwgKi8sCiAJ
CQkJMDcyQ0E4NjAxNkNCNERDMzAwOEFFMTMxIC8qIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMuY3Bw
ICovLAogCQkJCTA3OUQwODY3MTYyRjIwRTgwMERCODY1OCAvKiBDYXB0aW9uVXNlclByZWZlcmVu
Y2VzLmggKi8sCi0JCQkJMDc5RDA4NjkxNjJGMjFGOTAwREI4NjU4IC8qIENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNYWMuaCAqLywKLQkJCQkwNzlEMDg2QTE2MkYyMUY5MDBEQjg2NTggLyogQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01hYy5tbSAqLywKKwkJCQkwNzlEMDg2OTE2MkYyMUY5MDBEQjg2NTgg
LyogQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuaCAqLywKKwkJCQkwNzlEMDg2QTE2MkYy
MUY5MDBEQjg2NTggLyogQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwICovLAogCQkJ
CTE0RDgyMzhBMEFGOTJERjYwMDA0RjA1NyAvKiBDaHJvbWUuY3BwICovLAogCQkJCTE0RDgyMzUw
MEFGOTJBNzkwMDA0RjA1NyAvKiBDaHJvbWUuaCAqLywKIAkJCQkxNEQ4MjQwNjBBRjkzQUVCMDAw
NEYwNTcgLyogQ2hyb21lQ2xpZW50LmggKi8sCkBAIC0yMTA4Miw3ICsyMTA4Miw3IEBACiAJCQkJ
NDk0ODRGQ0IxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDk0ODRGQ0UxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1N0eWxl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzlEMDg2ODE2MkYyMEU4MDBEQjg2NTggLyogQ2FwdGlv
blVzZXJQcmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDc5RDA4NkIxNjJGMjFGOTAw
REI4NjU4IC8qIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTA3OUQwODZCMTYyRjIxRjkwMERCODY1OCAvKiBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFB
Ri5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU1MEI2OUUwOTlERjAyNzAwOTBENzgxIC8qIENEQVRB
U2VjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFBOEU1NjcxNzU1MkIyQTAwNzQ4OEU3IC8q
IENGVVJMRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTM2RkQxNTE2Qzc4MjY1MDBGODg3
QzEgLyogQ2hhbmdlVmVyc2lvbkRhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtMjQ1MTcsNyArMjQ1
MTcsNyBAQAogCQkJCTQ5NDg0RkNBMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk0ODRGQ0QxMDJDRjIzQzAwMTg3REQz
IC8qIENhbnZhc1N0eWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3MkNBODYxMTZDQjREQzMw
MDhBRTEzMSAvKiBDYXB0aW9uVXNlclByZWZlcmVuY2VzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTA3OUQwODZDMTYyRjIxRjkwMERCODY1OCAvKiBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjLm1t
IGluIFNvdXJjZXMgKi8sCisJCQkJMDc5RDA4NkMxNjJGMjFGOTAwREI4NjU4IC8qIENhcHRpb25V
c2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NTBCNjlEMDk5
REYwMjcwMDkwRDc4MSAvKiBDREFUQVNlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RB
OThFMEIxNjAzQ0Q2MDAwRkVBM0IxIC8qIENETS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRDQ3
QjNGQzE2Q0MzNEY4MDBBMjFFQzggLyogQ0RNUHJpdmF0ZUFWRm91bmRhdGlvbi5tbSBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2Vz
TWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZl
cmVuY2VzTWFjLmgJKHJldmlzaW9uIDE1MTk5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlc01hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
bmRlZiBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjX2gKLSNkZWZpbmUgQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01hY19oCi0KLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0KLSNpbmNsdWRlICJDU1NQ
cm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ2FwdGlvblVzZXJQcmVmZXJlbmNlcy5oIgotI2lu
Y2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjIDogcHVibGljIENhcHRp
b25Vc2VyUHJlZmVyZW5jZXMgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENhcHRp
b25Vc2VyUHJlZmVyZW5jZXNNYWM+IGNyZWF0ZShQYWdlR3JvdXAqIGdyb3VwKSB7IHJldHVybiBh
ZG9wdFB0cihuZXcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYyhncm91cCkpOyB9Ci0gICAgdmly
dHVhbCB+Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYygpOwotCi0jaWYgSEFWRShNRURJQV9BQ0NF
U1NJQklMSVRZX0ZSQU1FV09SSykKLSAgICB2aXJ0dWFsIENhcHRpb25EaXNwbGF5TW9kZSBjYXB0
aW9uRGlzcGxheU1vZGUoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q2Fw
dGlvbkRpc3BsYXlNb2RlKENhcHRpb25EaXNwbGF5TW9kZSkgT1ZFUlJJREU7Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgdXNlclByZWZlcnNDYXB0aW9ucygpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1
YWwgYm9vbCB1c2VyUHJlZmVyc1N1YnRpdGxlcygpIGNvbnN0IE9WRVJSSURFOwotICAgIAotICAg
IHZpcnR1YWwgZmxvYXQgY2FwdGlvbkZvbnRTaXplU2NhbGVBbmRJbXBvcnRhbmNlKGJvb2wmKSBj
b25zdCBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRJbnRlcmVzdGVkSW5DYXB0aW9u
UHJlZmVyZW5jZUNoYW5nZXMoKSBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVm
ZXJyZWRMYW5ndWFnZShjb25zdCBTdHJpbmcmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFZlY3Rv
cjxTdHJpbmc+IHByZWZlcnJlZExhbmd1YWdlcygpIGNvbnN0IE9WRVJSSURFOwotCi0gICAgdmly
dHVhbCB2b2lkIGNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKSBPVkVSUklERTsKLQotICAgIGJv
b2wgc2hvdWxkRmlsdGVyVHJhY2tNZW51KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotI2Vsc2UK
LSAgICBib29sIHNob3VsZEZpbHRlclRyYWNrTWVudSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgU3RyaW5nIGNhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRl
KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgdGV4dFRyYWNrU2VsZWN0aW9uU2Nv
cmUoVGV4dFRyYWNrKiwgSFRNTE1lZGlhRWxlbWVudCopIGNvbnN0IE9WRVJSSURFOwotICAgIHZp
cnR1YWwgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+ID4gc29ydGVkVHJhY2tMaXN0Rm9yTWVudShU
ZXh0VHJhY2tMaXN0KikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTdHJpbmcgZGlzcGxheU5hbWVG
b3JUcmFjayhUZXh0VHJhY2sqKSBjb25zdCBPVkVSUklERTsKLQotcHJpdmF0ZToKLSAgICBDYXB0
aW9uVXNlclByZWZlcmVuY2VzTWFjKFBhZ2VHcm91cCopOwotCi0jaWYgSEFWRShNRURJQV9BQ0NF
U1NJQklMSVRZX0ZSQU1FV09SSykKLSAgICBTdHJpbmcgY2FwdGlvbnNXaW5kb3dDU1MoKSBjb25z
dDsKLSAgICBTdHJpbmcgY2FwdGlvbnNCYWNrZ3JvdW5kQ1NTKCkgY29uc3Q7Ci0gICAgU3RyaW5n
IGNhcHRpb25zVGV4dENvbG9yQ1NTKCkgY29uc3Q7Ci0gICAgQ29sb3IgY2FwdGlvbnNUZXh0Q29s
b3IoYm9vbCYpIGNvbnN0OwotICAgIFN0cmluZyBjYXB0aW9uc0RlZmF1bHRGb250Q1NTKCkgY29u
c3Q7Ci0gICAgQ29sb3IgY2FwdGlvbnNFZGdlQ29sb3JGb3JUZXh0Q29sb3IoY29uc3QgQ29sb3Im
KSBjb25zdDsKLSAgICBTdHJpbmcgd2luZG93Um91bmRlZENvcm5lclJhZGl1c0NTUygpIGNvbnN0
OwotICAgIFN0cmluZyBjYXB0aW9uc1RleHRFZGdlQ1NTKCkgY29uc3Q7Ci0gICAgU3RyaW5nIGNz
c1Byb3BlcnR5V2l0aFRleHRFZGdlQ29sb3IoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgQ29sb3ImLCBib29sKSBjb25zdDsKLSAgICBTdHJpbmcgY29sb3JQcm9wZXJ0eUNTUyhD
U1NQcm9wZXJ0eUlELCBjb25zdCBDb2xvciYsIGJvb2wpIGNvbnN0OwotCi0gICAgYm9vbCBtX2xp
c3RlbmluZ0ZvclByZWZlcmVuY2VDaGFuZ2VzOwotI2VuZGlmCi19OwotICAgIAotfQotI2VuZGlm
Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01hYy5tbQkocmV2aXNpb24gMTUxOTk2KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgwMiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotCi0jaW1w
b3J0ICJDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjLmgiCi0KLSNpbXBvcnQgIkNvbG9yTWFjLmgi
Ci0jaW1wb3J0ICJDb3JlVGV4dC9Db3JlVGV4dC5oIgotI2ltcG9ydCAiRE9NV3JhcHBlcldvcmxk
LmgiCi0jaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbXBvcnQgIkhUTUxNZWRpYUVsZW1l
bnQuaCIKLSNpbXBvcnQgIktVUkwuaCIKLSNpbXBvcnQgIkxhbmd1YWdlLmgiCi0jaW1wb3J0ICJM
b2NhbGl6ZWRTdHJpbmdzLmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJNZWRpYUNv
bnRyb2xFbGVtZW50cy5oIgotI2ltcG9ydCAiUGFnZUdyb3VwLmgiCi0jaW1wb3J0ICJTb2Z0TGlu
a2luZy5oIgotI2ltcG9ydCAiVGV4dFRyYWNrQ3VlLmgiCi0jaW1wb3J0ICJUZXh0VHJhY2tMaXN0
LmgiCi0jaW1wb3J0ICJVc2VyU3R5bGVTaGVldFR5cGVzLmgiCi0jaW1wb3J0IDx3dGYvTm9uQ29w
eWluZ1NvcnQuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KLQotI2lmIFBMQVRGT1JNKElPUykKLSNpbXBvcnQgIldlYkNvcmVU
aHJlYWRSdW4uaCIKLSNlbmRpZgotCi0jaWYgSEFWRShNRURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1F
V09SSykKLSNpbXBvcnQgIk1lZGlhQWNjZXNzaWJpbGl0eS9NZWRpYUFjY2Vzc2liaWxpdHkuaCIK
LSNlbmRpZgotCi0jaWYgSEFWRShNRURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1FV09SSykKLQotU09G
VF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChNZWRpYUFjY2Vzc2liaWxpdHkpCi0KLVNPRlRfTElO
SyhNZWRpYUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXREaXNwbGF5VHlwZSwg
TUFDYXB0aW9uQXBwZWFyYW5jZURpc3BsYXlUeXBlLCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFp
biBkb21haW4pLCAoZG9tYWluKSkKLVNPRlRfTElOSyhNZWRpYUFjY2Vzc2liaWxpdHksIE1BQ2Fw
dGlvbkFwcGVhcmFuY2VTZXREaXNwbGF5VHlwZSwgdm9pZCwgKE1BQ2FwdGlvbkFwcGVhcmFuY2VE
b21haW4gZG9tYWluLCBNQUNhcHRpb25BcHBlYXJhbmNlRGlzcGxheVR5cGUgZGlzcGxheVR5cGUp
LCAoZG9tYWluLCBkaXNwbGF5VHlwZSkpCi1TT0ZUX0xJTksoTWVkaWFBY2Nlc3NpYmlsaXR5LCBN
QUNhcHRpb25BcHBlYXJhbmNlQ29weUZvcmVncm91bmRDb2xvciwgQ0dDb2xvclJlZiwgKE1BQ2Fw
dGlvbkFwcGVhcmFuY2VEb21haW4gZG9tYWluLCBNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3Ig
KmJlaGF2aW9yKSwgKGRvbWFpbiwgYmVoYXZpb3IpKQotU09GVF9MSU5LKE1lZGlhQWNjZXNzaWJp
bGl0eSwgTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlCYWNrZ3JvdW5kQ29sb3IsIENHQ29sb3JSZWYs
IChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5jZUJl
aGF2aW9yICpiZWhhdmlvciksIChkb21haW4sIGJlaGF2aW9yKSkKLVNPRlRfTElOSyhNZWRpYUFj
Y2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5V2luZG93Q29sb3IsIENHQ29sb3JS
ZWYsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5j
ZUJlaGF2aW9yICpiZWhhdmlvciksIChkb21haW4sIGJlaGF2aW9yKSkKLVNPRlRfTElOSyhNZWRp
YUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRGb3JlZ3JvdW5kT3BhY2l0eSwg
Q0dGbG9hdCwgKE1BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW4gZG9tYWluLCBNQUNhcHRpb25BcHBl
YXJhbmNlQmVoYXZpb3IgKmJlaGF2aW9yKSwgKGRvbWFpbiwgYmVoYXZpb3IpKQotU09GVF9MSU5L
KE1lZGlhQWNjZXNzaWJpbGl0eSwgTUFDYXB0aW9uQXBwZWFyYW5jZUdldEJhY2tncm91bmRPcGFj
aXR5LCBDR0Zsb2F0LCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpbiBkb21haW4sIE1BQ2FwdGlv
bkFwcGVhcmFuY2VCZWhhdmlvciAqYmVoYXZpb3IpLCAoZG9tYWluLCBiZWhhdmlvcikpCi1TT0ZU
X0xJTksoTWVkaWFBY2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBlYXJhbmNlR2V0V2luZG93T3Bh
Y2l0eSwgQ0dGbG9hdCwgKE1BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW4gZG9tYWluLCBNQUNhcHRp
b25BcHBlYXJhbmNlQmVoYXZpb3IgKmJlaGF2aW9yKSwgKGRvbWFpbiwgYmVoYXZpb3IpKQotU09G
VF9MSU5LKE1lZGlhQWNjZXNzaWJpbGl0eSwgTUFDYXB0aW9uQXBwZWFyYW5jZUdldFdpbmRvd1Jv
dW5kZWRDb3JuZXJSYWRpdXMsIENHRmxvYXQsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRv
bWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yICpiZWhhdmlvciksIChkb21haW4sIGJl
aGF2aW9yKSkKLVNPRlRfTElOSyhNZWRpYUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFu
Y2VDb3B5Rm9udERlc2NyaXB0b3JGb3JTdHlsZSwgQ1RGb250RGVzY3JpcHRvclJlZiwgKE1BQ2Fw
dGlvbkFwcGVhcmFuY2VEb21haW4gZG9tYWluLCAgTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9y
ICpiZWhhdmlvciwgTUFDYXB0aW9uQXBwZWFyYW5jZUZvbnRTdHlsZSBmb250U3R5bGUpLCAoZG9t
YWluLCBiZWhhdmlvciwgZm9udFN0eWxlKSkKLVNPRlRfTElOSyhNZWRpYUFjY2Vzc2liaWxpdHks
IE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRSZWxhdGl2ZUNoYXJhY3RlclNpemUsIENHRmxvYXQsIChN
QUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2
aW9yICpiZWhhdmlvciksIChkb21haW4sIGJlaGF2aW9yKSkKLVNPRlRfTElOSyhNZWRpYUFjY2Vz
c2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRUZXh0RWRnZVN0eWxlLCBNQUNhcHRpb25B
cHBlYXJhbmNlVGV4dEVkZ2VTdHlsZSwgKE1BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW4gZG9tYWlu
LCBNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgKmJlaGF2aW9yKSwgKGRvbWFpbiwgYmVoYXZp
b3IpKQotU09GVF9MSU5LKE1lZGlhQWNjZXNzaWJpbGl0eSwgTUFDYXB0aW9uQXBwZWFyYW5jZUFk
ZFNlbGVjdGVkTGFuZ3VhZ2UsIGJvb2wsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFp
biwgQ0ZTdHJpbmdSZWYgbGFuZ3VhZ2UpLCAoZG9tYWluLCBsYW5ndWFnZSkpOwotU09GVF9MSU5L
KE1lZGlhQWNjZXNzaWJpbGl0eSwgTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlTZWxlY3RlZExhbmd1
YWdlcywgQ0ZBcnJheVJlZiwgKE1BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW4gZG9tYWluKSwgKGRv
bWFpbikpOwotU09GVF9MSU5LKE1lZGlhQWNjZXNzaWJpbGl0eSwgTUFDYXB0aW9uQXBwZWFyYW5j
ZUNvcHlQcmVmZXJyZWRDYXB0aW9uaW5nTWVkaWFDaGFyYWN0ZXJpc3RpY3MsICBDRkFycmF5UmVm
LCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpbiBkb21haW4pLCAoZG9tYWluKSk7Ci0KLVNPRlRf
TElOS19QT0lOVEVSKE1lZGlhQWNjZXNzaWJpbGl0eSwga01BWENhcHRpb25BcHBlYXJhbmNlU2V0
dGluZ3NDaGFuZ2VkTm90aWZpY2F0aW9uLCBDRlN0cmluZ1JlZikKLSNkZWZpbmUga01BWENhcHRp
b25BcHBlYXJhbmNlU2V0dGluZ3NDaGFuZ2VkTm90aWZpY2F0aW9uIGdldGtNQVhDYXB0aW9uQXBw
ZWFyYW5jZVNldHRpbmdzQ2hhbmdlZE5vdGlmaWNhdGlvbigpCi0KLSNlbmRpZgotCi11c2luZyBu
YW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBIQVZFKE1FRElBX0FD
Q0VTU0lCSUxJVFlfRlJBTUVXT1JLKQotc3RhdGljIHZvaWQgdXNlckNhcHRpb25QcmVmZXJlbmNl
c0NoYW5nZWROb3RpZmljYXRpb25DYWxsYmFjayhDRk5vdGlmaWNhdGlvbkNlbnRlclJlZiwgdm9p
ZCogb2JzZXJ2ZXIsIENGU3RyaW5nUmVmLCBjb25zdCB2b2lkICosIENGRGljdGlvbmFyeVJlZikK
LXsKLSNpZiAhUExBVEZPUk0oSU9TKQotICAgIHN0YXRpY19jYXN0PENhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNYWMqPihvYnNlcnZlciktPmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKLSNlbHNl
Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIHN0YXRpY19jYXN0PENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNYWMqPihvYnNlcnZlciktPmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKLSAg
ICB9KTsKLSNlbmRpZgotfQotI2VuZGlmCi0KLUNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OkNh
cHRpb25Vc2VyUHJlZmVyZW5jZXNNYWMoUGFnZUdyb3VwKiBncm91cCkKLSAgICA6IENhcHRpb25V
c2VyUHJlZmVyZW5jZXMoZ3JvdXApCi0jaWYgSEFWRShNRURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1F
V09SSykKLSAgICAsIG1fbGlzdGVuaW5nRm9yUHJlZmVyZW5jZUNoYW5nZXMoZmFsc2UpCi0jZW5k
aWYKLXsKLX0KLQotQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6fkNhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNYWMoKQotewotI2lmIEhBVkUoTUVESUFfQUNDRVNTSUJJTElUWV9GUkFNRVdPUkspCi0g
ICAgaWYgKGtNQVhDYXB0aW9uQXBwZWFyYW5jZVNldHRpbmdzQ2hhbmdlZE5vdGlmaWNhdGlvbikK
LSAgICAgICAgQ0ZOb3RpZmljYXRpb25DZW50ZXJSZW1vdmVPYnNlcnZlcihDRk5vdGlmaWNhdGlv
bkNlbnRlckdldExvY2FsQ2VudGVyKCksIHRoaXMsIGtNQVhDYXB0aW9uQXBwZWFyYW5jZVNldHRp
bmdzQ2hhbmdlZE5vdGlmaWNhdGlvbiwgTlVMTCk7Ci0jZW5kaWYKLX0KLQotI2lmIEhBVkUoTUVE
SUFfQUNDRVNTSUJJTElUWV9GUkFNRVdPUkspCi0KLUNhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkNh
cHRpb25EaXNwbGF5TW9kZSBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpjYXB0aW9uRGlzcGxh
eU1vZGUoKSBjb25zdAotewotICAgIGlmICh0ZXN0aW5nTW9kZSgpIHx8ICFNZWRpYUFjY2Vzc2li
aWxpdHlMaWJyYXJ5KCkpCi0gICAgICAgIHJldHVybiBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpj
YXB0aW9uRGlzcGxheU1vZGUoKTsKLQotICAgIE1BQ2FwdGlvbkFwcGVhcmFuY2VEaXNwbGF5VHlw
ZSBkaXNwbGF5VHlwZSA9IE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXREaXNwbGF5VHlwZShrTUFDYXB0
aW9uQXBwZWFyYW5jZURvbWFpblVzZXIpOwotICAgIHN3aXRjaCAoZGlzcGxheVR5cGUpIHsKLSAg
ICBjYXNlIGtNQUNhcHRpb25BcHBlYXJhbmNlRGlzcGxheVR5cGVGb3JjZWRPbmx5OgotICAgICAg
ICByZXR1cm4gRm9yY2VkT25seTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIGtNQUNhcHRp
b25BcHBlYXJhbmNlRGlzcGxheVR5cGVBdXRvbWF0aWM6Ci0gICAgICAgIHJldHVybiBBdXRvbWF0
aWM7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBrTUFDYXB0aW9uQXBwZWFyYW5jZURpc3Bs
YXlUeXBlQWx3YXlzT246Ci0gICAgICAgIHJldHVybiBBbHdheXNPbjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEZvcmNlZE9u
bHk7Ci19Ci0gICAgCi12b2lkIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNldENhcHRpb25E
aXNwbGF5TW9kZShDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpDYXB0aW9uRGlzcGxheU1vZGUgbW9k
ZSkKLXsKLSAgICBpZiAodGVzdGluZ01vZGUoKSB8fCAhTWVkaWFBY2Nlc3NpYmlsaXR5TGlicmFy
eSgpKSB7Ci0gICAgICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnNldENhcHRpb25EaXNwbGF5
TW9kZShtb2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIE1BQ2FwdGlvbkFwcGVh
cmFuY2VEaXNwbGF5VHlwZSBkaXNwbGF5VHlwZSA9IGtNQUNhcHRpb25BcHBlYXJhbmNlRGlzcGxh
eVR5cGVGb3JjZWRPbmx5OwotICAgIHN3aXRjaCAobW9kZSkgewotICAgICAgICBjYXNlIEF1dG9t
YXRpYzoKLSAgICAgICAgICAgIGRpc3BsYXlUeXBlID0ga01BQ2FwdGlvbkFwcGVhcmFuY2VEaXNw
bGF5VHlwZUF1dG9tYXRpYzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZvcmNl
ZE9ubHk6Ci0gICAgICAgICAgICBkaXNwbGF5VHlwZSA9IGtNQUNhcHRpb25BcHBlYXJhbmNlRGlz
cGxheVR5cGVGb3JjZWRPbmx5OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQWx3
YXlzT246Ci0gICAgICAgICAgICBkaXNwbGF5VHlwZSA9IGtNQUNhcHRpb25BcHBlYXJhbmNlRGlz
cGxheVR5cGVBbHdheXNPbjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBNQUNhcHRpb25BcHBlYXJhbmNlU2V0RGlzcGxheVR5cGUoa01BQ2FwdGlvbkFw
cGVhcmFuY2VEb21haW5Vc2VyLCBkaXNwbGF5VHlwZSk7Ci19Ci0KLWJvb2wgQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01hYzo6dXNlclByZWZlcnNDYXB0aW9ucygpIGNvbnN0Ci17Ci0gICAgYm9vbCBj
YXB0aW9uU2V0dGluZyA9IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnVzZXJQcmVmZXJzQ2FwdGlv
bnMoKTsKLSAgICBpZiAoY2FwdGlvblNldHRpbmcgfHwgdGVzdGluZ01vZGUoKSB8fCAhTWVkaWFB
Y2Nlc3NpYmlsaXR5TGlicmFyeSgpKQotICAgICAgICByZXR1cm4gY2FwdGlvblNldHRpbmc7Ci0g
ICAgCi0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNhcHRpb25pbmdNZWRpYUNoYXJhY3Rlcmlz
dGljcyA9IGFkb3B0Q0YoTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlQcmVmZXJyZWRDYXB0aW9uaW5n
TWVkaWFDaGFyYWN0ZXJpc3RpY3Moa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2VyKSk7Ci0g
ICAgcmV0dXJuIGNhcHRpb25pbmdNZWRpYUNoYXJhY3RlcmlzdGljcyAmJiBDRkFycmF5R2V0Q291
bnQoY2FwdGlvbmluZ01lZGlhQ2hhcmFjdGVyaXN0aWNzLmdldCgpKTsKLX0KLQotYm9vbCBDYXB0
aW9uVXNlclByZWZlcmVuY2VzTWFjOjp1c2VyUHJlZmVyc1N1YnRpdGxlcygpIGNvbnN0Ci17Ci0g
ICAgYm9vbCBzdWJ0aXRsZXNTZXR0aW5nID0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6dXNlclBy
ZWZlcnNTdWJ0aXRsZXMoKTsKLSAgICBpZiAoc3VidGl0bGVzU2V0dGluZyB8fCB0ZXN0aW5nTW9k
ZSgpIHx8ICFNZWRpYUFjY2Vzc2liaWxpdHlMaWJyYXJ5KCkpCi0gICAgICAgIHJldHVybiBzdWJ0
aXRsZXNTZXR0aW5nOwotICAgIAotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBjYXB0aW9uaW5n
TWVkaWFDaGFyYWN0ZXJpc3RpY3MgPSBhZG9wdENGKE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5UHJl
ZmVycmVkQ2FwdGlvbmluZ01lZGlhQ2hhcmFjdGVyaXN0aWNzKGtNQUNhcHRpb25BcHBlYXJhbmNl
RG9tYWluVXNlcikpOwotICAgIHJldHVybiAhKGNhcHRpb25pbmdNZWRpYUNoYXJhY3RlcmlzdGlj
cyAmJiBDRkFycmF5R2V0Q291bnQoY2FwdGlvbmluZ01lZGlhQ2hhcmFjdGVyaXN0aWNzLmdldCgp
KSk7Ci19Ci0KLXZvaWQgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6c2V0SW50ZXJlc3RlZElu
Q2FwdGlvblByZWZlcmVuY2VDaGFuZ2VzKCkKLXsKLSAgICBpZiAoIU1lZGlhQWNjZXNzaWJpbGl0
eUxpYnJhcnkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFrTUFYQ2FwdGlvbkFwcGVh
cmFuY2VTZXR0aW5nc0NoYW5nZWROb3RpZmljYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmICghbV9saXN0ZW5pbmdGb3JQcmVmZXJlbmNlQ2hhbmdlcykgewotICAgICAgICBtX2xpc3Rl
bmluZ0ZvclByZWZlcmVuY2VDaGFuZ2VzID0gdHJ1ZTsKLSAgICAgICAgQ0ZOb3RpZmljYXRpb25D
ZW50ZXJBZGRPYnNlcnZlcihDRk5vdGlmaWNhdGlvbkNlbnRlckdldExvY2FsQ2VudGVyKCksIHRo
aXMsIHVzZXJDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkTm90aWZpY2F0aW9uQ2FsbGJhY2ssIGtN
QVhDYXB0aW9uQXBwZWFyYW5jZVNldHRpbmdzQ2hhbmdlZE5vdGlmaWNhdGlvbiwgTlVMTCwgQ0ZO
b3RpZmljYXRpb25TdXNwZW5zaW9uQmVoYXZpb3JDb2FsZXNjZSk7Ci0gICAgfQotICAgIAotICAg
IHVwZGF0ZUNhcHRpb25TdHlsZVNoZWV0T3ZlcmlkZSgpOwotfQotCi12b2lkIENhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNNYWM6OmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKQotewotICAgIGlmICht
X2xpc3RlbmluZ0ZvclByZWZlcmVuY2VDaGFuZ2VzKQotICAgICAgICB1cGRhdGVDYXB0aW9uU3R5
bGVTaGVldE92ZXJpZGUoKTsKLQotICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OmNhcHRpb25Q
cmVmZXJlbmNlc0NoYW5nZWQoKTsKLX0KLQotU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNN
YWM6OmNhcHRpb25zV2luZG93Q1NTKCkgY29uc3QKLXsKLSAgICBNQUNhcHRpb25BcHBlYXJhbmNl
QmVoYXZpb3IgYmVoYXZpb3I7Ci0gICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNvbG9yID0gYWRv
cHRDRihNQUNhcHRpb25BcHBlYXJhbmNlQ29weVdpbmRvd0NvbG9yKGtNQUNhcHRpb25BcHBlYXJh
bmNlRG9tYWluVXNlciwgJmJlaGF2aW9yKSk7Ci0KLSAgICBDb2xvciB3aW5kb3dDb2xvcihjb2xv
ci5nZXQoKSk7Ci0gICAgaWYgKCF3aW5kb3dDb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIHdpbmRv
d0NvbG9yID0gQ29sb3I6OnRyYW5zcGFyZW50OwotCi0gICAgYm9vbCBpbXBvcnRhbnQgPSBiZWhh
dmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWU7Ci0gICAgQ0dGbG9h
dCBvcGFjaXR5ID0gTUFDYXB0aW9uQXBwZWFyYW5jZUdldFdpbmRvd09wYWNpdHkoa01BQ2FwdGlv
bkFwcGVhcmFuY2VEb21haW5Vc2VyLCAmYmVoYXZpb3IpOwotICAgIGlmICghaW1wb3J0YW50KQot
ICAgICAgICBpbXBvcnRhbnQgPSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2
aW9yVXNlVmFsdWU7Ci0gICAgU3RyaW5nIHdpbmRvd1N0eWxlID0gY29sb3JQcm9wZXJ0eUNTUyhD
U1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgQ29sb3Iod2luZG93Q29sb3IucmVkKCksIHdpbmRv
d0NvbG9yLmdyZWVuKCksIHdpbmRvd0NvbG9yLmJsdWUoKSwgc3RhdGljX2Nhc3Q8aW50PihvcGFj
aXR5ICogMjU1KSksIGltcG9ydGFudCk7Ci0KLSAgICBpZiAoIW9wYWNpdHkpCi0gICAgICAgIHJl
dHVybiB3aW5kb3dTdHlsZTsKLQotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWls
ZGVyLmFwcGVuZCh3aW5kb3dTdHlsZSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoZ2V0UHJvcGVydHlO
YW1lU3RyaW5nKENTU1Byb3BlcnR5UGFkZGluZykpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCI6IC40
ZW0gIWltcG9ydGFudDsiKTsKLQotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0K
LVN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpjYXB0aW9uc0JhY2tncm91bmRDU1Mo
KSBjb25zdAotewotICAgIC8vIFRoaXMgZGVmYXVsdCB2YWx1ZSBtdXN0IGJlIHRoZSBzYW1lIGFz
IHRoZSBvbmUgc3BlY2lmaWVkIGluIG1lZGlhQ29udHJvbHMuY3NzIGZvciAtd2Via2l0LW1lZGlh
LXRleHQtdHJhY2stcGFzdC1ub2RlcwotICAgIC8vIGFuZCB3ZWJraXQtbWVkaWEtdGV4dC10cmFj
ay1mdXR1cmUtbm9kZXMuCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgZGVmYXVsdEJh
Y2tncm91bmRDb2xvciwgKENvbG9yKDAsIDAsIDAsIDAuOCAqIDI1NSkpKTsKLQotICAgIE1BQ2Fw
dGlvbkFwcGVhcmFuY2VCZWhhdmlvciBiZWhhdmlvcjsKLQotICAgIFJldGFpblB0cjxDR0NvbG9y
UmVmPiBjb2xvciA9IGFkb3B0Q0YoTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlCYWNrZ3JvdW5kQ29s
b3Ioa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2VyLCAmYmVoYXZpb3IpKTsKLSAgICBDb2xv
ciBiYWNrZ3JvdW5kQ29sb3IoY29sb3IuZ2V0KCkpOwotICAgIGlmICghYmFja2dyb3VuZENvbG9y
LmlzVmFsaWQoKSkKLSAgICAgICAgYmFja2dyb3VuZENvbG9yID0gZGVmYXVsdEJhY2tncm91bmRD
b2xvcjsKLQotICAgIGJvb2wgaW1wb3J0YW50ID0gYmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVh
cmFuY2VCZWhhdmlvclVzZVZhbHVlOwotICAgIENHRmxvYXQgb3BhY2l0eSA9IE1BQ2FwdGlvbkFw
cGVhcmFuY2VHZXRCYWNrZ3JvdW5kT3BhY2l0eShrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVz
ZXIsICZiZWhhdmlvcik7Ci0gICAgaWYgKCFpbXBvcnRhbnQpCi0gICAgICAgIGltcG9ydGFudCA9
IGJlaGF2aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZTsKLSAgICBy
ZXR1cm4gY29sb3JQcm9wZXJ0eUNTUyhDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgQ29sb3Io
YmFja2dyb3VuZENvbG9yLnJlZCgpLCBiYWNrZ3JvdW5kQ29sb3IuZ3JlZW4oKSwgYmFja2dyb3Vu
ZENvbG9yLmJsdWUoKSwgc3RhdGljX2Nhc3Q8aW50PihvcGFjaXR5ICogMjU1KSksIGltcG9ydGFu
dCk7Ci19Ci0KLUNvbG9yIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OmNhcHRpb25zVGV4dENv
bG9yKGJvb2wmIGltcG9ydGFudCkgY29uc3QKLXsKLSAgICBNQUNhcHRpb25BcHBlYXJhbmNlQmVo
YXZpb3IgYmVoYXZpb3I7Ci0gICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNvbG9yID0gYWRvcHRD
RihNQUNhcHRpb25BcHBlYXJhbmNlQ29weUZvcmVncm91bmRDb2xvcihrTUFDYXB0aW9uQXBwZWFy
YW5jZURvbWFpblVzZXIsICZiZWhhdmlvcikpOwotICAgIENvbG9yIHRleHRDb2xvcihjb2xvci5n
ZXQoKSk7Ci0gICAgaWYgKCF0ZXh0Q29sb3IuaXNWYWxpZCgpKQotICAgICAgICAvLyBUaGlzIGRl
ZmF1bHQgdmFsdWUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgb25lIHNwZWNpZmllZCBpbiBtZWRp
YUNvbnRyb2xzLmNzcyBmb3IgLXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNrLWNvbnRhaW5lci4KLSAg
ICAgICAgdGV4dENvbG9yID0gQ29sb3I6OndoaXRlOwotICAgIAotICAgIGltcG9ydGFudCA9IGJl
aGF2aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZTsKLSAgICBDR0Zs
b2F0IG9wYWNpdHkgPSBNQUNhcHRpb25BcHBlYXJhbmNlR2V0Rm9yZWdyb3VuZE9wYWNpdHkoa01B
Q2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2VyLCAmYmVoYXZpb3IpOwotICAgIGlmICghaW1wb3J0
YW50KQotICAgICAgICBpbXBvcnRhbnQgPSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5j
ZUJlaGF2aW9yVXNlVmFsdWU7Ci0gICAgcmV0dXJuIENvbG9yKHRleHRDb2xvci5yZWQoKSwgdGV4
dENvbG9yLmdyZWVuKCksIHRleHRDb2xvci5ibHVlKCksIHN0YXRpY19jYXN0PGludD4ob3BhY2l0
eSAqIDI1NSkpOwotfQotICAgIAotU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OmNh
cHRpb25zVGV4dENvbG9yQ1NTKCkgY29uc3QKLXsKLSAgICBib29sIGltcG9ydGFudDsKLSAgICBD
b2xvciB0ZXh0Q29sb3IgPSBjYXB0aW9uc1RleHRDb2xvcihpbXBvcnRhbnQpOwotCi0gICAgaWYg
KCF0ZXh0Q29sb3IuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLQot
ICAgIHJldHVybiBjb2xvclByb3BlcnR5Q1NTKENTU1Byb3BlcnR5Q29sb3IsIHRleHRDb2xvciwg
aW1wb3J0YW50KTsKLX0KLSAgICAKLVN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjp3
aW5kb3dSb3VuZGVkQ29ybmVyUmFkaXVzQ1NTKCkgY29uc3QKLXsKLSAgICBNQUNhcHRpb25BcHBl
YXJhbmNlQmVoYXZpb3IgYmVoYXZpb3I7Ci0gICAgQ0dGbG9hdCByYWRpdXMgPSBNQUNhcHRpb25B
cHBlYXJhbmNlR2V0V2luZG93Um91bmRlZENvcm5lclJhZGl1cyhrTUFDYXB0aW9uQXBwZWFyYW5j
ZURvbWFpblVzZXIsICZiZWhhdmlvcik7Ci0gICAgaWYgKCFyYWRpdXMpCi0gICAgICAgIHJldHVy
biBlbXB0eVN0cmluZygpOwotCi0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJ1aWxk
ZXIuYXBwZW5kKGdldFByb3BlcnR5TmFtZVN0cmluZyhDU1NQcm9wZXJ0eUJvcmRlclJhZGl1cykp
OwotICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCI6JS4wMmZweCIsIHJhZGl1cykp
OwotICAgIGlmIChiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFs
dWUpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgIWltcG9ydGFudCIpOwotICAgIGJ1aWxkZXIu
YXBwZW5kKCc7Jyk7Ci0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotfQotICAgIAot
Q29sb3IgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6Y2FwdGlvbnNFZGdlQ29sb3JGb3JUZXh0
Q29sb3IoY29uc3QgQ29sb3ImIHRleHRDb2xvcikgY29uc3QKLXsKLSAgICBpbnQgZGlzdGFuY2VG
cm9tV2hpdGUgPSBkaWZmZXJlbmNlU3F1YXJlZCh0ZXh0Q29sb3IsIENvbG9yOjp3aGl0ZSk7Ci0g
ICAgaW50IGRpc3RhbmNlRnJvbUJsYWNrID0gZGlmZmVyZW5jZVNxdWFyZWQodGV4dENvbG9yLCBD
b2xvcjo6YmxhY2spOwotICAgIAotICAgIGlmIChkaXN0YW5jZUZyb21XaGl0ZSA8IGRpc3RhbmNl
RnJvbUJsYWNrKQotICAgICAgICByZXR1cm4gdGV4dENvbG9yLmRhcmsoKTsKLSAgICAKLSAgICBy
ZXR1cm4gdGV4dENvbG9yLmxpZ2h0KCk7Ci19Ci0KLVN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWFjOjpjc3NQcm9wZXJ0eVdpdGhUZXh0RWRnZUNvbG9yKENTU1Byb3BlcnR5SUQgaWQsIGNv
bnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IENvbG9yJiB0ZXh0Q29sb3IsIGJvb2wgaW1wb3J0YW50
KSBjb25zdAotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAKLSAgICBidWlsZGVy
LmFwcGVuZChnZXRQcm9wZXJ0eU5hbWVTdHJpbmcoaWQpKTsKLSAgICBidWlsZGVyLmFwcGVuZCgn
OicpOwotICAgIGJ1aWxkZXIuYXBwZW5kKHZhbHVlKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnICcp
OwotICAgIGJ1aWxkZXIuYXBwZW5kKGNhcHRpb25zRWRnZUNvbG9yRm9yVGV4dENvbG9yKHRleHRD
b2xvcikuc2VyaWFsaXplZCgpKTsKLSAgICBpZiAoaW1wb3J0YW50KQotICAgICAgICBidWlsZGVy
LmFwcGVuZCgiICFpbXBvcnRhbnQiKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnOycpOwotICAgIAot
ICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzTWFjOjpjb2xvclByb3BlcnR5Q1NTKENTU1Byb3BlcnR5SUQgaWQsIGNvbnN0IENv
bG9yJiBjb2xvciwgYm9vbCBpbXBvcnRhbnQpIGNvbnN0Ci17Ci0gICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyOwotICAgIAotICAgIGJ1aWxkZXIuYXBwZW5kKGdldFByb3BlcnR5TmFtZVN0cmluZyhp
ZCkpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCc6Jyk7Ci0gICAgYnVpbGRlci5hcHBlbmQoY29sb3Iu
c2VyaWFsaXplZCgpKTsKLSAgICBpZiAoaW1wb3J0YW50KQotICAgICAgICBidWlsZGVyLmFwcGVu
ZCgiICFpbXBvcnRhbnQiKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnOycpOwotICAgIAotICAgIHJl
dHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWFjOjpjYXB0aW9uc1RleHRFZGdlQ1NTKCkgY29uc3QKLXsKLSAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IFN0cmluZywgZWRnZVN0eWxlUmFpc2VkLCAoIiAtLjA1ZW0gLS4wNWVtIDAg
IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIERFRklORV9TVEFUSUNfTE9D
QUwoY29uc3QgU3RyaW5nLCBlZGdlU3R5bGVEZXByZXNzZWQsICgiIC4wNWVtIC4wNWVtIDAgIiwg
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Y29uc3QgU3RyaW5nLCBlZGdlU3R5bGVEcm9wU2hhZG93LCAoIiAuMDc1ZW0gLjA3NWVtIDAgIiwg
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Y29uc3QgU3RyaW5nLCBlZGdlU3R5bGVVbmlmb3JtLCAoIiAuMDNlbSAiLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSk7Ci0KLSAgICBib29sIHVudXNlZDsKLSAgICBDb2xvciBjb2xvciA9
IGNhcHRpb25zVGV4dENvbG9yKHVudXNlZCk7Ci0gICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCi0g
ICAgICAgIGNvbG9yLnNldE5hbWVkQ29sb3IoImJsYWNrIik7Ci0gICAgY29sb3IgPSBjYXB0aW9u
c0VkZ2VDb2xvckZvclRleHRDb2xvcihjb2xvcik7Ci0KLSAgICBNQUNhcHRpb25BcHBlYXJhbmNl
QmVoYXZpb3IgYmVoYXZpb3I7Ci0gICAgTUFDYXB0aW9uQXBwZWFyYW5jZVRleHRFZGdlU3R5bGUg
dGV4dEVkZ2VTdHlsZSA9IE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRUZXh0RWRnZVN0eWxlKGtNQUNh
cHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJlaGF2aW9yKTsKLSAgICBzd2l0Y2ggKHRleHRF
ZGdlU3R5bGUpIHsKLSAgICAgICAgY2FzZSBrTUFDYXB0aW9uQXBwZWFyYW5jZVRleHRFZGdlU3R5
bGVVbmRlZmluZWQ6Ci0gICAgICAgIGNhc2Uga01BQ2FwdGlvbkFwcGVhcmFuY2VUZXh0RWRnZVN0
eWxlTm9uZToKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2Uga01BQ2FwdGlvbkFwcGVhcmFuY2VUZXh0RWRnZVN0eWxlUmFpc2VkOgot
ICAgICAgICAgICAgcmV0dXJuIGNzc1Byb3BlcnR5V2l0aFRleHRFZGdlQ29sb3IoQ1NTUHJvcGVy
dHlUZXh0U2hhZG93LCBlZGdlU3R5bGVSYWlzZWQsIGNvbG9yLCBiZWhhdmlvciA9PSBrTUFDYXB0
aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWUpOwotICAgICAgICBjYXNlIGtNQUNhcHRpb25B
cHBlYXJhbmNlVGV4dEVkZ2VTdHlsZURlcHJlc3NlZDoKLSAgICAgICAgICAgIHJldHVybiBjc3NQ
cm9wZXJ0eVdpdGhUZXh0RWRnZUNvbG9yKENTU1Byb3BlcnR5VGV4dFNoYWRvdywgZWRnZVN0eWxl
RGVwcmVzc2VkLCBjb2xvciwgYmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlv
clVzZVZhbHVlKTsKLSAgICAgICAgY2FzZSBrTUFDYXB0aW9uQXBwZWFyYW5jZVRleHRFZGdlU3R5
bGVEcm9wU2hhZG93OgotICAgICAgICAgICAgcmV0dXJuIGNzc1Byb3BlcnR5V2l0aFRleHRFZGdl
Q29sb3IoQ1NTUHJvcGVydHlUZXh0U2hhZG93LCBlZGdlU3R5bGVEcm9wU2hhZG93LCBjb2xvciwg
YmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlKTsKLSAgICAg
ICAgY2FzZSBrTUFDYXB0aW9uQXBwZWFyYW5jZVRleHRFZGdlU3R5bGVVbmlmb3JtOgotICAgICAg
ICAgICAgcmV0dXJuIGNzc1Byb3BlcnR5V2l0aFRleHRFZGdlQ29sb3IoQ1NTUHJvcGVydHlXZWJr
aXRUZXh0U3Ryb2tlLCBlZGdlU3R5bGVVbmlmb3JtLCBjb2xvciwgYmVoYXZpb3IgPT0ga01BQ2Fw
dGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlKTsKLSAgICAgICAgICAgIAotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci19Ci0KLVN0cmlu
ZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpjYXB0aW9uc0RlZmF1bHRGb250Q1NTKCkgY29u
c3QKLXsKLSAgICBNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgYmVoYXZpb3I7Ci0gICAgCi0g
ICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IGZvbnQgPSBhZG9wdENGKE1BQ2FwdGlv
bkFwcGVhcmFuY2VDb3B5Rm9udERlc2NyaXB0b3JGb3JTdHlsZShrTUFDYXB0aW9uQXBwZWFyYW5j
ZURvbWFpblVzZXIsICZiZWhhdmlvciwga01BQ2FwdGlvbkFwcGVhcmFuY2VGb250U3R5bGVEZWZh
dWx0KSk7Ci0gICAgaWYgKCFmb250KQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLQot
ICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IG5hbWUgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JD
b3B5QXR0cmlidXRlKGZvbnQuZ2V0KCksIGtDVEZvbnROYW1lQXR0cmlidXRlKSk7Ci0gICAgaWYg
KCFuYW1lKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAKLSAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7Ci0gICAgCi0gICAgYnVpbGRlci5hcHBlbmQoZ2V0UHJvcGVydHlOYW1l
U3RyaW5nKENTU1Byb3BlcnR5Rm9udEZhbWlseSkpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCI6IFwi
Iik7Ci0gICAgYnVpbGRlci5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KG5hbWUuZ2V0
KCkpKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnIicpOwotICAgIGlmIChiZWhhdmlvciA9PSBrTUFD
YXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWUpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCIgIWltcG9ydGFudCIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCc7Jyk7Ci0gICAgCi0gICAgcmV0
dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLX0KLQotZmxvYXQgQ2FwdGlvblVzZXJQcmVmZXJlbmNl
c01hYzo6Y2FwdGlvbkZvbnRTaXplU2NhbGVBbmRJbXBvcnRhbmNlKGJvb2wmIGltcG9ydGFudCkg
Y29uc3QKLXsKLSAgICBpZiAodGVzdGluZ01vZGUoKSB8fCAhTWVkaWFBY2Nlc3NpYmlsaXR5TGli
cmFyeSgpKQotICAgICAgICByZXR1cm4gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6Y2FwdGlvbkZv
bnRTaXplU2NhbGVBbmRJbXBvcnRhbmNlKGltcG9ydGFudCk7Ci0KLSAgICBNQUNhcHRpb25BcHBl
YXJhbmNlQmVoYXZpb3IgYmVoYXZpb3I7Ci0gICAgQ0dGbG9hdCBjaGFyYWN0ZXJTY2FsZSA9IENh
cHRpb25Vc2VyUHJlZmVyZW5jZXM6OmNhcHRpb25Gb250U2l6ZVNjYWxlQW5kSW1wb3J0YW5jZShp
bXBvcnRhbnQpOwotICAgIENHRmxvYXQgc2NhbGVBZGp1c3RtZW50ID0gTUFDYXB0aW9uQXBwZWFy
YW5jZUdldFJlbGF0aXZlQ2hhcmFjdGVyU2l6ZShrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVz
ZXIsICZiZWhhdmlvcik7Ci0KLSAgICBpZiAoIXNjYWxlQWRqdXN0bWVudCkKLSAgICAgICAgcmV0
dXJuIGNoYXJhY3RlclNjYWxlOwotCi0gICAgaW1wb3J0YW50ID0gYmVoYXZpb3IgPT0ga01BQ2Fw
dGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlOwotI2lmIGRlZmluZWQoX19MUDY0X18pICYm
IF9fTFA2NF9fCi0gICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoc2NhbGVBZGp1c3Rt
ZW50ICogY2hhcmFjdGVyU2NhbGUpOwotI2Vsc2UKLSAgICByZXR1cm4gc2NhbGVBZGp1c3RtZW50
ICogY2hhcmFjdGVyU2NhbGU7Ci0jZW5kaWYKLX0KLQotdm9pZCBDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWFjOjpzZXRQcmVmZXJyZWRMYW5ndWFnZShjb25zdCBTdHJpbmcmIGxhbmd1YWdlKQotewot
ICAgIGlmICh0ZXN0aW5nTW9kZSgpIHx8ICFNZWRpYUFjY2Vzc2liaWxpdHlMaWJyYXJ5KCkpIHsK
LSAgICAgICAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6c2V0UHJlZmVycmVkTGFuZ3VhZ2UobGFu
Z3VhZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgTUFDYXB0aW9uQXBwZWFyYW5j
ZUFkZFNlbGVjdGVkTGFuZ3VhZ2Uoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2VyLCBsYW5n
dWFnZS5jcmVhdGVDRlN0cmluZygpLmdldCgpKTsKLX0KLQotVmVjdG9yPFN0cmluZz4gQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01hYzo6cHJlZmVycmVkTGFuZ3VhZ2VzKCkgY29uc3QKLXsKLSAgICBp
ZiAodGVzdGluZ01vZGUoKSB8fCAhTWVkaWFBY2Nlc3NpYmlsaXR5TGlicmFyeSgpKQotICAgICAg
ICByZXR1cm4gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6cHJlZmVycmVkTGFuZ3VhZ2VzKCk7Ci0K
LSAgICBWZWN0b3I8U3RyaW5nPiBwbGF0Zm9ybUxhbmd1YWdlcyA9IHBsYXRmb3JtVXNlclByZWZl
cnJlZExhbmd1YWdlcygpOwotICAgIFZlY3RvcjxTdHJpbmc+IG92ZXJyaWRlID0gdXNlclByZWZl
cnJlZExhbmd1YWdlc092ZXJyaWRlKCk7Ci0gICAgaWYgKCFvdmVycmlkZS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgaWYgKHBsYXRmb3JtTGFuZ3VhZ2VzLnNpemUoKSAhPSBvdmVycmlkZS5zaXplKCkp
Ci0gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGU7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgb3ZlcnJpZGUuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChvdmVycmlkZVtp
XSAhPSBwbGF0Zm9ybUxhbmd1YWdlc1tpXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3ZlcnJp
ZGU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBDRkluZGV4IGxhbmd1YWdlQ291bnQgPSAwOwot
ICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBsYW5ndWFnZXMgPSBhZG9wdENGKE1BQ2FwdGlvbkFw
cGVhcmFuY2VDb3B5U2VsZWN0ZWRMYW5ndWFnZXMoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5V
c2VyKSk7Ci0gICAgaWYgKGxhbmd1YWdlcykKLSAgICAgICAgbGFuZ3VhZ2VDb3VudCA9IENGQXJy
YXlHZXRDb3VudChsYW5ndWFnZXMuZ2V0KCkpOwotCi0gICAgaWYgKCFsYW5ndWFnZUNvdW50KQot
ICAgICAgICByZXR1cm4gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6cHJlZmVycmVkTGFuZ3VhZ2Vz
KCk7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzOwotICAgIHVz
ZXJQcmVmZXJyZWRMYW5ndWFnZXMucmVzZXJ2ZUNhcGFjaXR5KGxhbmd1YWdlQ291bnQgKyBwbGF0
Zm9ybUxhbmd1YWdlcy5zaXplKCkpOwotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGxhbmd1
YWdlQ291bnQ7IGkrKykKLSAgICAgICAgdXNlclByZWZlcnJlZExhbmd1YWdlcy5hcHBlbmQoc3Rh
dGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgobGFuZ3VhZ2VzLmdl
dCgpLCBpKSkpOwotCi0gICAgdXNlclByZWZlcnJlZExhbmd1YWdlcy5hcHBlbmRWZWN0b3IocGxh
dGZvcm1MYW5ndWFnZXMpOwotCi0gICAgcmV0dXJuIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXM7Ci19
Ci0jZW5kaWYgIC8vIEhBVkUoTUVESUFfQUNDRVNTSUJJTElUWV9GUkFNRVdPUkspCi0KLVN0cmlu
ZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpjYXB0aW9uc1N0eWxlU2hlZXRPdmVycmlkZSgp
IGNvbnN0Ci17Ci0gICAgaWYgKHRlc3RpbmdNb2RlKCkpCi0gICAgICAgIHJldHVybiBDYXB0aW9u
VXNlclByZWZlcmVuY2VzOjpjYXB0aW9uc1N0eWxlU2hlZXRPdmVycmlkZSgpOwotICAgIAotICAg
IFN0cmluZ0J1aWxkZXIgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQ7Ci0KLSNpZiBIQVZFKE1F
RElBX0FDQ0VTU0lCSUxJVFlfRlJBTUVXT1JLKQotICAgIGlmICghTWVkaWFBY2Nlc3NpYmlsaXR5
TGlicmFyeSgpKQotICAgICAgICByZXR1cm4gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6Y2FwdGlv
bnNTdHlsZVNoZWV0T3ZlcnJpZGUoKTsKLSAgICAKLSAgICBTdHJpbmcgY2FwdGlvbnNDb2xvciA9
IGNhcHRpb25zVGV4dENvbG9yQ1NTKCk7Ci0gICAgU3RyaW5nIGVkZ2VTdHlsZSA9IGNhcHRpb25z
VGV4dEVkZ2VDU1MoKTsKLSAgICBTdHJpbmcgZm9udE5hbWUgPSBjYXB0aW9uc0RlZmF1bHRGb250
Q1NTKCk7Ci0gICAgU3RyaW5nIGJhY2tncm91bmQgPSBjYXB0aW9uc0JhY2tncm91bmRDU1MoKTsK
LSAgICBpZiAoIWJhY2tncm91bmQuaXNFbXB0eSgpIHx8ICFjYXB0aW9uc0NvbG9yLmlzRW1wdHko
KSB8fCAhZWRnZVN0eWxlLmlzRW1wdHkoKSB8fCAhZm9udE5hbWUuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgiIHZpZGVvOjoiKTsKLSAgICAg
ICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKFRleHRUcmFja0N1ZTo6Y3VlU2hh
ZG93UHNldWRvSWQoKSk7Ci0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVu
ZCgneycpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFiYWNrZ3JvdW5kLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZChiYWNrZ3JvdW5kKTsK
LSAgICAgICAgaWYgKCFjYXB0aW9uc0NvbG9yLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNhcHRp
b25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZChjYXB0aW9uc0NvbG9yKTsKLSAgICAgICAgaWYg
KCFlZGdlU3R5bGUuaXNFbXB0eSgpKQotICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxl
U2hlZXQuYXBwZW5kKGVkZ2VTdHlsZSk7Ci0gICAgICAgIGlmICghZm9udE5hbWUuaXNFbXB0eSgp
KQotICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKGZvbnROYW1l
KTsKLSAgICAgICAgCi0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgn
fScpOwotICAgIH0KLSAgICAKLSAgICBTdHJpbmcgd2luZG93Q29sb3IgPSBjYXB0aW9uc1dpbmRv
d0NTUygpOwotICAgIFN0cmluZyB3aW5kb3dDb3JuZXJSYWRpdXMgPSB3aW5kb3dSb3VuZGVkQ29y
bmVyUmFkaXVzQ1NTKCk7Ci0gICAgaWYgKCF3aW5kb3dDb2xvci5pc0VtcHR5KCkgfHwgIXdpbmRv
d0Nvcm5lclJhZGl1cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxl
U2hlZXQuYXBwZW5kKCIgdmlkZW86OiIpOwotICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVT
aGVldC5hcHBlbmQoVGV4dFRyYWNrQ3VlQm94Ojp0ZXh0VHJhY2tDdWVCb3hTaGFkb3dQc2V1ZG9J
ZCgpKTsKLSAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKCd7Jyk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoIXdpbmRvd0NvbG9yLmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCh3aW5kb3dDb2xvcik7Ci0gICAgICAg
IGlmICghd2luZG93Q29ybmVyUmFkaXVzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNhcHRpb25z
T3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCh3aW5kb3dDb3JuZXJSYWRpdXMpOwotICAgICAgICAK
LSAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKCd9Jyk7Ci0gICAgfQot
I2VuZGlmICAvLyBIQVZFKE1FRElBX0FDQ0VTU0lCSUxJVFlfRlJBTUVXT1JLKQotCi0gICAgTE9H
KE1lZGlhLCAiQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6Y2FwdGlvbnNTdHlsZVNoZWV0T3Zl
cnJpZGVTZXR0aW5nIHN5dGxlIHRvOlxuJXMiLCBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC50
b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgcmV0dXJuIGNhcHRpb25zT3ZlcnJpZGVT
dHlsZVNoZWV0LnRvU3RyaW5nKCk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgbGFuZ3VhZ2VJZGVudGlm
aWVyKGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2VDb2RlKQotewotICAgIGlmIChsYW5ndWFnZUNvZGUu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbGFuZ3VhZ2VDb2RlOwotCi0gICAgU3RyaW5nIGxv
d2VyY2FzZUxhbmd1YWdlQ29kZSA9IGxhbmd1YWdlQ29kZS5sb3dlcigpOwotCi0gICAgLy8gTmVl
ZCAyVSBoZXJlIHRvIGRpc2FtYmlndWF0ZSBTdHJpbmc6Om9wZXJhdG9yW10gZnJvbSBvcGVyYXRv
cihOU1N0cmluZyosIGludClbXSBpbiBhIHByb2R1Y3Rpb24gYnVpbGQuCi0gICAgaWYgKGxvd2Vy
Y2FzZUxhbmd1YWdlQ29kZS5sZW5ndGgoKSA+PSAzICYmIChsb3dlcmNhc2VMYW5ndWFnZUNvZGVb
MlVdID09ICdfJyB8fCBsb3dlcmNhc2VMYW5ndWFnZUNvZGVbMlVdID09ICctJykpCi0gICAgICAg
IGxvd2VyY2FzZUxhbmd1YWdlQ29kZS50cnVuY2F0ZSgyKTsKLQotICAgIHJldHVybiBsb3dlcmNh
c2VMYW5ndWFnZUNvZGU7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgdHJhY2tEaXNwbGF5TmFtZShUZXh0
VHJhY2sqIHRyYWNrKQotewotICAgIGlmICh0cmFjayA9PSBUZXh0VHJhY2s6OmNhcHRpb25NZW51
T2ZmSXRlbSgpKQotICAgICAgICByZXR1cm4gdGV4dFRyYWNrT2ZmTWVudUl0ZW1UZXh0KCk7Ci0g
ICAgaWYgKHRyYWNrID09IFRleHRUcmFjazo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCkpCi0g
ICAgICAgIHJldHVybiB0ZXh0VHJhY2tBdXRvbWF0aWNNZW51SXRlbVRleHQoKTsKLQotICAgIFN0
cmluZ0J1aWxkZXIgZGlzcGxheU5hbWU7Ci0gICAgU3RyaW5nIGxhYmVsID0gdHJhY2stPmxhYmVs
KCk7Ci0gICAgU3RyaW5nIHRyYWNrTGFuZ3VhZ2VJZGVudGlmaWVyID0gdHJhY2stPmxhbmd1YWdl
KCk7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZMb2NhbGVSZWY+IGN1cnJlbnRMb2NhbGUgPSBhZG9wdENG
KENGTG9jYWxlQ29weUN1cnJlbnQoKSk7Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBsb2Nh
bGVJZGVudGlmaWVyID0gYWRvcHRDRihDRkxvY2FsZUNyZWF0ZUNhbm9uaWNhbExvY2FsZUlkZW50
aWZpZXJGcm9tU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHRyYWNrTGFuZ3VhZ2VJZGVudGlm
aWVyLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IGxhbmd1YWdlQ0YgPSBhZG9wdENGKENGTG9jYWxlQ29weURpc3BsYXlOYW1lRm9yUHJvcGVydHlW
YWx1ZShjdXJyZW50TG9jYWxlLmdldCgpLCBrQ0ZMb2NhbGVMYW5ndWFnZUNvZGUsIGxvY2FsZUlk
ZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBTdHJpbmcgbGFuZ3VhZ2UgPSBsYW5ndWFnZUNGLmdldCgp
OwotICAgIGlmICghbGFiZWwuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChsYW5ndWFnZS5pc0Vt
cHR5KCkgfHwgbGFiZWwuY29udGFpbnMobGFuZ3VhZ2UpKQotICAgICAgICAgICAgZGlzcGxheU5h
bWUuYXBwZW5kKGxhYmVsKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiBsb2NhbGVEaWN0ID0gYWRvcHRDRihDRkxvY2FsZUNyZWF0ZUNvbXBv
bmVudHNGcm9tTG9jYWxlSWRlbnRpZmllcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBsb2NhbGVJZGVu
dGlmaWVyLmdldCgpKSk7Ci0gICAgICAgICAgICBpZiAobG9jYWxlRGljdCkgewotICAgICAgICAg
ICAgICAgIENGU3RyaW5nUmVmIGNvdW50cnlDb2RlID0gMDsKLSAgICAgICAgICAgICAgICBTdHJp
bmcgY291bnRyeU5hbWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQ0ZEaWN0
aW9uYXJ5R2V0VmFsdWVJZlByZXNlbnQobG9jYWxlRGljdC5nZXQoKSwga0NGTG9jYWxlQ291bnRy
eUNvZGUsIChjb25zdCB2b2lkICoqKSZjb3VudHJ5Q29kZSk7Ci0gICAgICAgICAgICAgICAgaWYg
KGNvdW50cnlDb2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gY291bnRyeU5hbWVDRiA9IGFkb3B0Q0YoQ0ZMb2NhbGVDb3B5RGlzcGxheU5hbWVGb3JQcm9w
ZXJ0eVZhbHVlKGN1cnJlbnRMb2NhbGUuZ2V0KCksIGtDRkxvY2FsZUNvdW50cnlDb2RlLCBjb3Vu
dHJ5Q29kZSkpOwotICAgICAgICAgICAgICAgICAgICBjb3VudHJ5TmFtZSA9IGNvdW50cnlOYW1l
Q0YuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGlmICghY291bnRyeU5hbWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBk
aXNwbGF5TmFtZS5hcHBlbmQodGV4dFRyYWNrQ291bnRyeUFuZExhbmd1YWdlTWVudUl0ZW1UZXh0
KGxhYmVsLCBjb3VudHJ5TmFtZSwgbGFuZ3VhZ2UpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lLmFwcGVuZCh0ZXh0VHJhY2tMYW5ndWFnZU1l
bnVJdGVtVGV4dChsYWJlbCwgbGFuZ3VhZ2UpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIFN0cmluZyBsYW5ndWFnZUFuZExvY2FsZSA9IENGTG9jYWxl
Q29weURpc3BsYXlOYW1lRm9yUHJvcGVydHlWYWx1ZShjdXJyZW50TG9jYWxlLmdldCgpLCBrQ0ZM
b2NhbGVJZGVudGlmaWVyLCB0cmFja0xhbmd1YWdlSWRlbnRpZmllci5jcmVhdGVDRlN0cmluZygp
LmdldCgpKTsKLSAgICAgICAgaWYgKCFsYW5ndWFnZUFuZExvY2FsZS5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBkaXNwbGF5TmFtZS5hcHBlbmQobGFuZ3VhZ2VBbmRMb2NhbGUpOwotICAgICAgICBl
bHNlIGlmICghbGFuZ3VhZ2UuaXNFbXB0eSgpKQotICAgICAgICAgICAgZGlzcGxheU5hbWUuYXBw
ZW5kKGxhbmd1YWdlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGlzcGxheU5hbWUuYXBw
ZW5kKGxvY2FsZUlkZW50aWZpZXIuZ2V0KCkpOwotICAgIH0KLSAgICAKLSAgICBpZiAoZGlzcGxh
eU5hbWUuaXNFbXB0eSgpKQotICAgICAgICBkaXNwbGF5TmFtZS5hcHBlbmQodGV4dFRyYWNrTm9M
YWJlbFRleHQoKSk7Ci0gICAgCi0gICAgaWYgKHRyYWNrLT5pc0Vhc3lUb1JlYWQoKSkKLSAgICAg
ICAgcmV0dXJuIGVhc3lSZWFkZXJUcmFja01lbnVJdGVtVGV4dChkaXNwbGF5TmFtZS50b1N0cmlu
ZygpKTsKLSAgICAKLSAgICBpZiAodHJhY2stPmlzQ2xvc2VkQ2FwdGlvbnMoKSkKLSAgICAgICAg
cmV0dXJuIGNsb3NlZENhcHRpb25UcmFja01lbnVJdGVtVGV4dChkaXNwbGF5TmFtZS50b1N0cmlu
ZygpKTsKLQotICAgIGlmICh0cmFjay0+aXNTREgoKSkKLSAgICAgICAgcmV0dXJuIHNkaFRyYWNr
TWVudUl0ZW1UZXh0KGRpc3BsYXlOYW1lLnRvU3RyaW5nKCkpOwotCi0gICAgcmV0dXJuIGRpc3Bs
YXlOYW1lLnRvU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFj
OjpkaXNwbGF5TmFtZUZvclRyYWNrKFRleHRUcmFjayogdHJhY2spIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHRyYWNrRGlzcGxheU5hbWUodHJhY2spOwotfQotCi1pbnQgQ2FwdGlvblVzZXJQcmVmZXJl
bmNlc01hYzo6dGV4dFRyYWNrU2VsZWN0aW9uU2NvcmUoVGV4dFRyYWNrKiB0cmFjaywgSFRNTE1l
ZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KSBjb25zdAotewotICAgIENhcHRpb25EaXNwbGF5TW9k
ZSBkaXNwbGF5TW9kZSA9IGNhcHRpb25EaXNwbGF5TW9kZSgpOwotICAgIGJvb2wgbGVnYWN5T3Zl
cnJpZGUgPSBtZWRpYUVsZW1lbnQtPndlYmtpdENsb3NlZENhcHRpb25zVmlzaWJsZSgpOwotICAg
IGlmIChkaXNwbGF5TW9kZSA9PSBBbHdheXNPbiAmJiAoIXVzZXJQcmVmZXJzU3VidGl0bGVzKCkg
JiYgIXVzZXJQcmVmZXJzQ2FwdGlvbnMoKSAmJiAhbGVnYWN5T3ZlcnJpZGUpKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICBpZiAodHJhY2stPmtpbmQoKSAhPSBUZXh0VHJhY2s6OmNhcHRpb25zS2V5
d29yZCgpICYmIHRyYWNrLT5raW5kKCkgIT0gVGV4dFRyYWNrOjpzdWJ0aXRsZXNLZXl3b3JkKCkg
JiYgdHJhY2stPmtpbmQoKSAhPSBUZXh0VHJhY2s6OmZvcmNlZEtleXdvcmQoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgaWYgKCF0cmFjay0+aXNNYWluUHJvZ3JhbUNvbnRlbnQoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBib29sIHRyYWNrSGFzT25seUZvcmNlZFN1YnRpdGxlcyA9IHRy
YWNrLT5jb250YWluc09ubHlGb3JjZWRTdWJ0aXRsZXMoKTsKLSAgICBpZiAoIWxlZ2FjeU92ZXJy
aWRlICYmICgodHJhY2tIYXNPbmx5Rm9yY2VkU3VidGl0bGVzICYmIGRpc3BsYXlNb2RlICE9IEZv
cmNlZE9ubHkpIHx8ICghdHJhY2tIYXNPbmx5Rm9yY2VkU3VidGl0bGVzICYmIGRpc3BsYXlNb2Rl
ID09IEZvcmNlZE9ubHkpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBWZWN0b3I8U3RyaW5n
PiB1c2VyUHJlZmVycmVkQ2FwdGlvbkxhbmd1YWdlcyA9IHByZWZlcnJlZExhbmd1YWdlcygpOwot
Ci0gICAgaWYgKGRpc3BsYXlNb2RlID09IEF1dG9tYXRpYyB8fCB0cmFja0hhc09ubHlGb3JjZWRT
dWJ0aXRsZXMpIHsKLQotICAgICAgICBpZiAoIW1lZGlhRWxlbWVudCB8fCAhbWVkaWFFbGVtZW50
LT5wbGF5ZXIoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIFN0cmluZyB0ZXh0
VHJhY2tMYW5ndWFnZSA9IHRyYWNrLT5sYW5ndWFnZSgpOwotICAgICAgICBpZiAodGV4dFRyYWNr
TGFuZ3VhZ2UuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgVmVj
dG9yPFN0cmluZz4gbGFuZ3VhZ2VMaXN0OwotICAgICAgICBsYW5ndWFnZUxpc3QucmVzZXJ2ZUNh
cGFjaXR5KDEpOwotCi0gICAgICAgIFN0cmluZyBhdWRpb1RyYWNrTGFuZ3VhZ2U7Ci0gICAgICAg
IGlmICh0ZXN0aW5nTW9kZSgpKQotICAgICAgICAgICAgYXVkaW9UcmFja0xhbmd1YWdlID0gcHJp
bWFyeUF1ZGlvVHJhY2tMYW5ndWFnZU92ZXJyaWRlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGF1ZGlvVHJhY2tMYW5ndWFnZSA9IG1lZGlhRWxlbWVudC0+cGxheWVyKCktPmxhbmd1YWdl
T2ZQcmltYXJ5QXVkaW9UcmFjaygpOwotCi0gICAgICAgIGlmIChhdWRpb1RyYWNrTGFuZ3VhZ2Uu
aXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgaWYgKHRyYWNrSGFz
T25seUZvcmNlZFN1YnRpdGxlcykgewotICAgICAgICAgICAgbGFuZ3VhZ2VMaXN0LmFwcGVuZChh
dWRpb1RyYWNrTGFuZ3VhZ2UpOwotICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IGluZGV4T2ZC
ZXN0TWF0Y2hpbmdMYW5ndWFnZUluTGlzdCh0ZXh0VHJhY2tMYW5ndWFnZSwgbGFuZ3VhZ2VMaXN0
KTsKLQotICAgICAgICAgICAgLy8gT25seSBjb25zaWRlciBhIGZvcmNlZC1vbmx5IHRyYWNrIGlm
IGl0IElTIGluIHRoZSBzYW1lIGxhbmd1YWdlIGFzIHRoZSBwcmltYXJ5IGF1ZGlvIHRyYWNrLgot
ICAgICAgICAgICAgaWYgKG9mZnNldCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxhbmd1YWdlTGlzdC5hcHBlbmQoZGVmYXVsdExhbmd1
YWdlKCkpOwotCi0gICAgICAgICAgICAvLyBPbmx5IGVuYWJsZSBhIHRleHQgdHJhY2sgaWYgdGhl
IGN1cnJlbnQgYXVkaW8gdHJhY2sgaXMgTk9UIGluIHRoZSB1c2VyJ3MgcHJlZmVycmVkIGxhbmd1
YWdlIC4uLgotICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IGluZGV4T2ZCZXN0TWF0Y2hpbmdM
YW5ndWFnZUluTGlzdChhdWRpb1RyYWNrTGFuZ3VhZ2UsIGxhbmd1YWdlTGlzdCk7Ci0gICAgICAg
ICAgICBpZiAoIW9mZnNldCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICAg
ICAgLy8gYW5kIHRoZSB0ZXh0IHRyYWNrIG1hdGNoZXMgdGhlIHVzZXIncyBwcmVmZXJyZWQgbGFu
Z3VhZ2UuCi0gICAgICAgICAgICBvZmZzZXQgPSBpbmRleE9mQmVzdE1hdGNoaW5nTGFuZ3VhZ2VJ
bkxpc3QodGV4dFRyYWNrTGFuZ3VhZ2UsIGxhbmd1YWdlTGlzdCk7Ci0gICAgICAgICAgICBpZiAo
b2Zmc2V0KQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAg
dXNlclByZWZlcnJlZENhcHRpb25MYW5ndWFnZXMgPSBsYW5ndWFnZUxpc3Q7Ci0gICAgfQotCi0g
ICAgaW50IHRyYWNrU2NvcmUgPSAwOwotCi0gICAgaWYgKHVzZXJQcmVmZXJzQ2FwdGlvbnMoKSkg
ewotICAgICAgICAvLyBXaGVuIHRoZSB1c2VyIHByZWZlcnMgYWNjZXNzaWJsaXR5IHRyYWNrcywg
cmFuayBpcyBTREgsIHRoZW4gQ0MsIHRoZW4gc3VidGl0bGVzLgotICAgICAgICBpZiAodHJhY2st
PmtpbmQoKSA9PSB0cmFjay0+c3VidGl0bGVzS2V5d29yZCgpKQotICAgICAgICAgICAgdHJhY2tT
Y29yZSA9IDE7Ci0gICAgICAgIGVsc2UgaWYgKHRyYWNrLT5pc0Nsb3NlZENhcHRpb25zKCkpCi0g
ICAgICAgICAgICB0cmFja1Njb3JlID0gMjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdHJh
Y2tTY29yZSA9IDM7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gV2hlbiB0aGUgdXNlciBwcmVm
ZXJzIHRyYW5zbGF0aW9uIHRyYWNrcywgcmFuayBpcyBzdWJ0aXRsZXMsIHRoZW4gU0RILCB0aGVu
IENDIHRyYWNrcy4KLSAgICAgICAgaWYgKHRyYWNrLT5raW5kKCkgPT0gdHJhY2stPnN1YnRpdGxl
c0tleXdvcmQoKSkKLSAgICAgICAgICAgIHRyYWNrU2NvcmUgPSAzOwotICAgICAgICBlbHNlIGlm
ICghdHJhY2stPmlzQ2xvc2VkQ2FwdGlvbnMoKSkKLSAgICAgICAgICAgIHRyYWNrU2NvcmUgPSAy
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0cmFja1Njb3JlID0gMTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJhY2tTY29yZSArIHRleHRUcmFja0xhbmd1YWdlU2VsZWN0aW9uU2NvcmUodHJh
Y2ssIHVzZXJQcmVmZXJyZWRDYXB0aW9uTGFuZ3VhZ2VzKTsKLX0KLQotc3RhdGljIGJvb2wgdGV4
dFRyYWNrQ29tcGFyZShjb25zdCBSZWZQdHI8VGV4dFRyYWNrPiYgYSwgY29uc3QgUmVmUHRyPFRl
eHRUcmFjaz4mIGIpCi17Ci0gICAgU3RyaW5nIHByZWZlcnJlZExhbmd1YWdlRGlzcGxheU5hbWUg
PSBkaXNwbGF5TmFtZUZvckxhbmd1YWdlTG9jYWxlKGxhbmd1YWdlSWRlbnRpZmllcihkZWZhdWx0
TGFuZ3VhZ2UoKSkpOwotICAgIFN0cmluZyBhTGFuZ3VhZ2VEaXNwbGF5TmFtZSA9IGRpc3BsYXlO
YW1lRm9yTGFuZ3VhZ2VMb2NhbGUobGFuZ3VhZ2VJZGVudGlmaWVyKGEtPmxhbmd1YWdlKCkpKTsK
LSAgICBTdHJpbmcgYkxhbmd1YWdlRGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZUZvckxhbmd1YWdl
TG9jYWxlKGxhbmd1YWdlSWRlbnRpZmllcihiLT5sYW5ndWFnZSgpKSk7Ci0KLSAgICAvLyBUcmFj
a3MgaW4gdGhlIHVzZXIncyBwcmVmZXJyZWQgbGFuZ3VhZ2UgYXJlIGFsd2F5cyBhdCB0aGUgdG9w
IG9mIHRoZSBtZW51LgotICAgIGJvb2wgYUlzUHJlZmVycmVkTGFuZ3VhZ2UgPSAhY29kZVBvaW50
Q29tcGFyZShhTGFuZ3VhZ2VEaXNwbGF5TmFtZSwgcHJlZmVycmVkTGFuZ3VhZ2VEaXNwbGF5TmFt
ZSk7Ci0gICAgYm9vbCBiSXNQcmVmZXJyZWRMYW5ndWFnZSA9ICFjb2RlUG9pbnRDb21wYXJlKGJM
YW5ndWFnZURpc3BsYXlOYW1lLCBwcmVmZXJyZWRMYW5ndWFnZURpc3BsYXlOYW1lKTsKLSAgICBp
ZiAoKGFJc1ByZWZlcnJlZExhbmd1YWdlIHx8IGJJc1ByZWZlcnJlZExhbmd1YWdlKSAmJiAoYUlz
UHJlZmVycmVkTGFuZ3VhZ2UgIT0gYklzUHJlZmVycmVkTGFuZ3VhZ2UpKQotICAgICAgICByZXR1
cm4gYUlzUHJlZmVycmVkTGFuZ3VhZ2U7Ci0KLSAgICAvLyBUcmFja3Mgbm90IGluIHRoZSB1c2Vy
J3MgcHJlZmVycmVkIGxhbmd1YWdlIHNvcnQgZmlyc3QgYnkgbGFuZ3VhZ2UgLi4uCi0gICAgaWYg
KGNvZGVQb2ludENvbXBhcmUoYUxhbmd1YWdlRGlzcGxheU5hbWUsIGJMYW5ndWFnZURpc3BsYXlO
YW1lKSkKLSAgICAgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmUoYUxhbmd1YWdlRGlzcGxheU5h
bWUsIGJMYW5ndWFnZURpc3BsYXlOYW1lKSA8IDA7Ci0KLSAgICAvLyAuLi4gYnV0IHdoZW4gdHJh
Y2tzIGhhdmUgdGhlIHNhbWUgbGFuZ3VhZ2UsIG1haW4gcHJvZ3JhbSBjb250ZW50IHNvcnRzIG5l
eHQgaGlnaGVzdCAuLi4KLSAgICBib29sIGFJc01haW5Db250ZW50ID0gYS0+aXNNYWluUHJvZ3Jh
bUNvbnRlbnQoKTsKLSAgICBib29sIGJJc01haW5Db250ZW50ID0gYi0+aXNNYWluUHJvZ3JhbUNv
bnRlbnQoKTsKLSAgICBpZiAoKGFJc01haW5Db250ZW50IHx8IGJJc01haW5Db250ZW50KSAmJiAo
YUlzTWFpbkNvbnRlbnQgIT0gYklzTWFpbkNvbnRlbnQpKQotICAgICAgICByZXR1cm4gYUlzTWFp
bkNvbnRlbnQ7Ci0KLSAgICAvLyAuLi4gYW5kIG1haW4gcHJvZ3JhbSB0cmFrY3Mgc29ydCBoaWdo
ZXIgdGhhbiBDQyB0cmFja3MgLi4uCi0gICAgYm9vbCBhSXNDQyA9IGEtPmlzQ2xvc2VkQ2FwdGlv
bnMoKTsKLSAgICBib29sIGJJc0NDID0gYi0+aXNDbG9zZWRDYXB0aW9ucygpOwotICAgIGlmICgo
YUlzQ0MgfHwgYklzQ0MpICYmIChhSXNDQyAhPSBiSXNDQykpIHsKLSAgICAgICAgaWYgKGFJc0ND
KQotICAgICAgICAgICAgcmV0dXJuIGFJc01haW5Db250ZW50OwotICAgICAgICByZXR1cm4gYklz
TWFpbkNvbnRlbnQ7Ci0gICAgfQotCi0gICAgLy8gLi4uIGFuZCB0cmFja3Mgb2YgdGhlIHNhbWUg
dHlwZSBhbmQgbGFuZ3VhZ2Ugc29ydCBieSB0aGUgbWVudSBpdGVtIHRleHQuCi0gICAgcmV0dXJu
IGNvZGVQb2ludENvbXBhcmUodHJhY2tEaXNwbGF5TmFtZShhLmdldCgpKSwgdHJhY2tEaXNwbGF5
TmFtZShiLmdldCgpKSkgPCAwOwotfQotCi1WZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4gPiBDYXB0
aW9uVXNlclByZWZlcmVuY2VzTWFjOjpzb3J0ZWRUcmFja0xpc3RGb3JNZW51KFRleHRUcmFja0xp
c3QqIHRyYWNrTGlzdCkKLXsKLSAgICBBU1NFUlQodHJhY2tMaXN0KTsKLQotICAgIFZlY3RvcjxS
ZWZQdHI8VGV4dFRyYWNrPiA+IHRyYWNrc0Zvck1lbnU7Ci0gICAgSGFzaFNldDxTdHJpbmc+IGxh
bmd1YWdlc0luY2x1ZGVkOwotICAgIGJvb2wgcHJlZmVyc0FjY2Vzc2liaWxpdHlUcmFja3MgPSB1
c2VyUHJlZmVyc0NhcHRpb25zKCk7Ci0gICAgYm9vbCBmaWx0ZXJUcmFja0xpc3QgPSBzaG91bGRG
aWx0ZXJUcmFja01lbnUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGxlbmd0aCA9IHRy
YWNrTGlzdC0+bGVuZ3RoKCk7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBUZXh0VHJhY2sq
IHRyYWNrID0gdHJhY2tMaXN0LT5pdGVtKGkpOwotICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSBk
aXNwbGF5TmFtZUZvckxhbmd1YWdlTG9jYWxlKHRyYWNrLT5sYW5ndWFnZSgpKTsKLQotICAgICAg
ICBpZiAodHJhY2stPmNvbnRhaW5zT25seUZvcmNlZFN1YnRpdGxlcygpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIAotICAgICAgICBpZiAodHJhY2stPmlzRWFzeVRvUmVhZCgpKSB7
Ci0gICAgICAgICAgICBpZiAoIWxhbmd1YWdlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBs
YW5ndWFnZXNJbmNsdWRlZC5hZGQobGFuZ3VhZ2UpOwotICAgICAgICAgICAgdHJhY2tzRm9yTWVu
dS5hcHBlbmQodHJhY2spOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIWxhbmd1YWdlLmlzRW1wdHkoKSAmJiB0cmFjay0+aXNNYWluUHJvZ3JhbUNvbnRl
bnQoKSkgewotICAgICAgICAgICAgYm9vbCBpc0FjY2Vzc2liaWxpdHlUcmFjayA9IHRyYWNrLT5r
aW5kKCkgPT0gdHJhY2stPmNhcHRpb25zS2V5d29yZCgpOwotICAgICAgICAgICAgaWYgKHByZWZl
cnNBY2Nlc3NpYmlsaXR5VHJhY2tzKSB7Ci0gICAgICAgICAgICAgICAgLy8gSW4gdGhlIGZpcnN0
IHBhc3MsIGluY2x1ZGUgb25seSBjYXB0aW9uIHRyYWNrcyBpZiB0aGUgdXNlciBwcmVmZXJzIGFj
Y2Vzc2liaWxpdHkgdHJhY2tzLgotICAgICAgICAgICAgICAgIGlmICghaXNBY2Nlc3NpYmlsaXR5
VHJhY2sgJiYgZmlsdGVyVHJhY2tMaXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIExPRyhNZWRp
YSwgIkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNvcnRlZFRyYWNrTGlzdEZvck1lbnUgLSBz
a2lwcGluZyAnJXMnIHRyYWNrIHdpdGggbGFuZ3VhZ2UgJyVzJyBiZWNhdXNlIGl0IGlzIE5PVCBh
biBhY2Nlc3NpYmlsaXR5IHRyYWNrIiwgdHJhY2stPmtpbmQoKS5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpLCBsYW5ndWFnZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAvLyBJbiB0aGUgZmlyc3QgcGFzcywgb25seSBpbmNsdWRlIHRoZSBmaXJzdCBub24tQ0Mg
b3IgU0RIIHRyYWNrIHdpdGggZWFjaCBsYW5ndWFnZSBpZiB0aGUgdXNlciBwcmVmZXJzIHRyYW5z
bGF0aW9uIHRyYWNrcy4KLSAgICAgICAgICAgICAgICBpZiAoaXNBY2Nlc3NpYmlsaXR5VHJhY2sg
JiYgZmlsdGVyVHJhY2tMaXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIExPRyhNZWRpYSwgIkNh
cHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNvcnRlZFRyYWNrTGlzdEZvck1lbnUgLSBza2lwcGlu
ZyAnJXMnIHRyYWNrIHdpdGggbGFuZ3VhZ2UgJyVzJyBiZWNhdXNlIGl0IGlzIGFuIGFjY2Vzc2li
aWxpdHkgdHJhY2siLCB0cmFjay0+a2luZCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGxhbmd1
YWdlLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGxhbmd1YWdlc0luY2x1ZGVkLmNvbnRh
aW5zKGxhbmd1YWdlKSAgJiYgZmlsdGVyVHJhY2tMaXN0KSB7Ci0gICAgICAgICAgICAgICAgICAg
IExPRyhNZWRpYSwgIkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNvcnRlZFRyYWNrTGlzdEZv
ck1lbnUgLSBza2lwcGluZyAnJXMnIHRyYWNrIHdpdGggbGFuZ3VhZ2UgJyVzJyBiZWNhdXNlIGl0
IGlzIG5vdCB0aGUgZmlyc3Qgd2l0aCB0aGlzIGxhbmd1YWdlIiwgdHJhY2stPmtpbmQoKS5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBsYW5ndWFnZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKCFsYW5ndWFnZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBs
YW5ndWFnZXNJbmNsdWRlZC5hZGQobGFuZ3VhZ2UpOwotICAgICAgICB0cmFja3NGb3JNZW51LmFw
cGVuZCh0cmFjayk7Ci0gICAgfQotCi0gICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBmaWx0ZXJlZCBm
b3IgdGhlIHVzZXIncyBhY2Nlc3NpYmlsaXR5L3RyYW5zbGF0aW9uIHByZWZlcmVuY2UsIGFkZCAg
YWxsIHRyYWNrcyB3aXRoIGEgdW5pcXVlIGxhbmd1YWdlIHdpdGhvdXQgcmVnYXJkIHRvIHRyYWNr
IHR5cGUuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMCwgbGVuZ3RoID0gdHJhY2tMaXN0LT5sZW5n
dGgoKTsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIFRleHRUcmFjayogdHJhY2sgPSB0cmFj
a0xpc3QtPml0ZW0oaSk7Ci0gICAgICAgIFN0cmluZyBsYW5ndWFnZSA9IGRpc3BsYXlOYW1lRm9y
TGFuZ3VhZ2VMb2NhbGUodHJhY2stPmxhbmd1YWdlKCkpOwotCi0gICAgICAgIC8vIEFsbCBjYW5k
aWRhdGVzIHdpdGggbm8gbGFuZ3VnZSB3ZXJlIGFkZGVkIHRoZSBmaXJzdCB0aW1lIHRocm91Z2gu
Ci0gICAgICAgIGlmIChsYW5ndWFnZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBpZiAodHJhY2stPmNvbnRhaW5zT25seUZvcmNlZFN1YnRpdGxlcygpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gCi0gICAgICAgIGlmICghbGFuZ3VhZ2VzSW5jbHVkZWQuY29u
dGFpbnMobGFuZ3VhZ2UpICYmIHRyYWNrLT5pc01haW5Qcm9ncmFtQ29udGVudCgpKSB7Ci0gICAg
ICAgICAgICBsYW5ndWFnZXNJbmNsdWRlZC5hZGQobGFuZ3VhZ2UpOwotICAgICAgICAgICAgdHJh
Y2tzRm9yTWVudS5hcHBlbmQodHJhY2spOwotICAgICAgICAgICAgTE9HKE1lZGlhLCAiQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01hYzo6c29ydGVkVHJhY2tMaXN0Rm9yTWVudSAtIGFkZGluZyAnJXMn
IHRyYWNrIHdpdGggbGFuZ3VhZ2UgJyVzJyBiZWNhdXNlIGl0IGlzIHRoZSBvbmx5IHRyYWNrIHdp
dGggdGhpcyBsYW5ndWFnZSIsIHRyYWNrLT5raW5kKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwg
bGFuZ3VhZ2UudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBub25Db3B5
aW5nU29ydCh0cmFja3NGb3JNZW51LmJlZ2luKCksIHRyYWNrc0Zvck1lbnUuZW5kKCksIHRleHRU
cmFja0NvbXBhcmUpOwotCi0gICAgdHJhY2tzRm9yTWVudS5pbnNlcnQoMCwgVGV4dFRyYWNrOjpj
YXB0aW9uTWVudU9mZkl0ZW0oKSk7Ci0gICAgdHJhY2tzRm9yTWVudS5pbnNlcnQoMSwgVGV4dFRy
YWNrOjpjYXB0aW9uTWVudUF1dG9tYXRpY0l0ZW0oKSk7Ci0KLSAgICByZXR1cm4gdHJhY2tzRm9y
TWVudTsKLX0KLSAgICAKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01l
ZGlhQUYuY3BwCShyZXZpc2lvbiAxNTE5OTYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlc01hYy5tbToxNTE5OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDgwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKwor
I2ltcG9ydCAiQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYy5oIgorCisjaW1wb3J0ICJDb2xvck1h
Yy5oIgorI2ltcG9ydCAiQ29yZVRleHQvQ29yZVRleHQuaCIKKyNpbXBvcnQgIkRPTVdyYXBwZXJX
b3JsZC5oIgorI2ltcG9ydCAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW1wb3J0ICJIVE1MTWVkaWFF
bGVtZW50LmgiCisjaW1wb3J0ICJLVVJMLmgiCisjaW1wb3J0ICJMYW5ndWFnZS5oIgorI2ltcG9y
dCAiTG9jYWxpemVkU3RyaW5ncy5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVk
aWFDb250cm9sRWxlbWVudHMuaCIKKyNpbXBvcnQgIlBhZ2VHcm91cC5oIgorI2ltcG9ydCAiU29m
dExpbmtpbmcuaCIKKyNpbXBvcnQgIlRleHRUcmFja0N1ZS5oIgorI2ltcG9ydCAiVGV4dFRyYWNr
TGlzdC5oIgorI2ltcG9ydCAiVXNlclN0eWxlU2hlZXRUeXBlcy5oIgorI2ltcG9ydCA8d3RmL05v
bkNvcHlpbmdTb3J0Lmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0ICJXZWJD
b3JlVGhyZWFkUnVuLmgiCisjZW5kaWYKKworI2lmIEhBVkUoTUVESUFfQUNDRVNTSUJJTElUWV9G
UkFNRVdPUkspCisjaW1wb3J0ICJNZWRpYUFjY2Vzc2liaWxpdHkvTWVkaWFBY2Nlc3NpYmlsaXR5
LmgiCisjZW5kaWYKKworI2lmIEhBVkUoTUVESUFfQUNDRVNTSUJJTElUWV9GUkFNRVdPUkspCisK
K1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoTWVkaWFBY2Nlc3NpYmlsaXR5KQorCitTT0ZU
X0xJTksoTWVkaWFBY2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBlYXJhbmNlR2V0RGlzcGxheVR5
cGUsIE1BQ2FwdGlvbkFwcGVhcmFuY2VEaXNwbGF5VHlwZSwgKE1BQ2FwdGlvbkFwcGVhcmFuY2VE
b21haW4gZG9tYWluKSwgKGRvbWFpbikpCitTT0ZUX0xJTksoTWVkaWFBY2Nlc3NpYmlsaXR5LCBN
QUNhcHRpb25BcHBlYXJhbmNlU2V0RGlzcGxheVR5cGUsIHZvaWQsIChNQUNhcHRpb25BcHBlYXJh
bmNlRG9tYWluIGRvbWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5jZURpc3BsYXlUeXBlIGRpc3BsYXlU
eXBlKSwgKGRvbWFpbiwgZGlzcGxheVR5cGUpKQorU09GVF9MSU5LKE1lZGlhQWNjZXNzaWJpbGl0
eSwgTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlGb3JlZ3JvdW5kQ29sb3IsIENHQ29sb3JSZWYsIChN
QUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2
aW9yICpiZWhhdmlvciksIChkb21haW4sIGJlaGF2aW9yKSkKK1NPRlRfTElOSyhNZWRpYUFjY2Vz
c2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5QmFja2dyb3VuZENvbG9yLCBDR0NvbG9y
UmVmLCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpbiBkb21haW4sIE1BQ2FwdGlvbkFwcGVhcmFu
Y2VCZWhhdmlvciAqYmVoYXZpb3IpLCAoZG9tYWluLCBiZWhhdmlvcikpCitTT0ZUX0xJTksoTWVk
aWFBY2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBlYXJhbmNlQ29weVdpbmRvd0NvbG9yLCBDR0Nv
bG9yUmVmLCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpbiBkb21haW4sIE1BQ2FwdGlvbkFwcGVh
cmFuY2VCZWhhdmlvciAqYmVoYXZpb3IpLCAoZG9tYWluLCBiZWhhdmlvcikpCitTT0ZUX0xJTkso
TWVkaWFBY2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBlYXJhbmNlR2V0Rm9yZWdyb3VuZE9wYWNp
dHksIENHRmxvYXQsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiwgTUFDYXB0aW9u
QXBwZWFyYW5jZUJlaGF2aW9yICpiZWhhdmlvciksIChkb21haW4sIGJlaGF2aW9yKSkKK1NPRlRf
TElOSyhNZWRpYUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRCYWNrZ3JvdW5k
T3BhY2l0eSwgQ0dGbG9hdCwgKE1BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW4gZG9tYWluLCBNQUNh
cHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgKmJlaGF2aW9yKSwgKGRvbWFpbiwgYmVoYXZpb3IpKQor
U09GVF9MSU5LKE1lZGlhQWNjZXNzaWJpbGl0eSwgTUFDYXB0aW9uQXBwZWFyYW5jZUdldFdpbmRv
d09wYWNpdHksIENHRmxvYXQsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiwgTUFD
YXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yICpiZWhhdmlvciksIChkb21haW4sIGJlaGF2aW9yKSkK
K1NPRlRfTElOSyhNZWRpYUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRXaW5k
b3dSb3VuZGVkQ29ybmVyUmFkaXVzLCBDR0Zsb2F0LCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFp
biBkb21haW4sIE1BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvciAqYmVoYXZpb3IpLCAoZG9tYWlu
LCBiZWhhdmlvcikpCitTT0ZUX0xJTksoTWVkaWFBY2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBl
YXJhbmNlQ29weUZvbnREZXNjcmlwdG9yRm9yU3R5bGUsIENURm9udERlc2NyaXB0b3JSZWYsIChN
QUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiwgIE1BQ2FwdGlvbkFwcGVhcmFuY2VCZWhh
dmlvciAqYmVoYXZpb3IsIE1BQ2FwdGlvbkFwcGVhcmFuY2VGb250U3R5bGUgZm9udFN0eWxlKSwg
KGRvbWFpbiwgYmVoYXZpb3IsIGZvbnRTdHlsZSkpCitTT0ZUX0xJTksoTWVkaWFBY2Nlc3NpYmls
aXR5LCBNQUNhcHRpb25BcHBlYXJhbmNlR2V0UmVsYXRpdmVDaGFyYWN0ZXJTaXplLCBDR0Zsb2F0
LCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpbiBkb21haW4sIE1BQ2FwdGlvbkFwcGVhcmFuY2VC
ZWhhdmlvciAqYmVoYXZpb3IpLCAoZG9tYWluLCBiZWhhdmlvcikpCitTT0ZUX0xJTksoTWVkaWFB
Y2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBlYXJhbmNlR2V0VGV4dEVkZ2VTdHlsZSwgTUFDYXB0
aW9uQXBwZWFyYW5jZVRleHRFZGdlU3R5bGUsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRv
bWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yICpiZWhhdmlvciksIChkb21haW4sIGJl
aGF2aW9yKSkKK1NPRlRfTElOSyhNZWRpYUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFu
Y2VBZGRTZWxlY3RlZExhbmd1YWdlLCBib29sLCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpbiBk
b21haW4sIENGU3RyaW5nUmVmIGxhbmd1YWdlKSwgKGRvbWFpbiwgbGFuZ3VhZ2UpKTsKK1NPRlRf
TElOSyhNZWRpYUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5U2VsZWN0ZWRM
YW5ndWFnZXMsIENGQXJyYXlSZWYsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiks
IChkb21haW4pKTsKK1NPRlRfTElOSyhNZWRpYUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVh
cmFuY2VDb3B5UHJlZmVycmVkQ2FwdGlvbmluZ01lZGlhQ2hhcmFjdGVyaXN0aWNzLCAgQ0ZBcnJh
eVJlZiwgKE1BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW4gZG9tYWluKSwgKGRvbWFpbikpOworCitT
T0ZUX0xJTktfUE9JTlRFUihNZWRpYUFjY2Vzc2liaWxpdHksIGtNQVhDYXB0aW9uQXBwZWFyYW5j
ZVNldHRpbmdzQ2hhbmdlZE5vdGlmaWNhdGlvbiwgQ0ZTdHJpbmdSZWYpCisjZGVmaW5lIGtNQVhD
YXB0aW9uQXBwZWFyYW5jZVNldHRpbmdzQ2hhbmdlZE5vdGlmaWNhdGlvbiBnZXRrTUFYQ2FwdGlv
bkFwcGVhcmFuY2VTZXR0aW5nc0NoYW5nZWROb3RpZmljYXRpb24oKQorCisjZW5kaWYKKwordXNp
bmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgSEFWRShNRURJ
QV9BQ0NFU1NJQklMSVRZX0ZSQU1FV09SSykKK3N0YXRpYyB2b2lkIHVzZXJDYXB0aW9uUHJlZmVy
ZW5jZXNDaGFuZ2VkTm90aWZpY2F0aW9uQ2FsbGJhY2soQ0ZOb3RpZmljYXRpb25DZW50ZXJSZWYs
IHZvaWQqIG9ic2VydmVyLCBDRlN0cmluZ1JlZiwgY29uc3Qgdm9pZCAqLCBDRkRpY3Rpb25hcnlS
ZWYpCit7CisjaWYgIVBMQVRGT1JNKElPUykKKyAgICBzdGF0aWNfY2FzdDxDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzTWFjKj4ob2JzZXJ2ZXIpLT5jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7Cisj
ZWxzZQorICAgIFdlYlRocmVhZFJ1biheeworICAgICAgICBzdGF0aWNfY2FzdDxDYXB0aW9uVXNl
clByZWZlcmVuY2VzTWFjKj4ob2JzZXJ2ZXIpLT5jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7
CisgICAgfSk7CisjZW5kaWYKK30KKyNlbmRpZgorCitDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFj
OjpDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjKFBhZ2VHcm91cCogZ3JvdXApCisgICAgOiBDYXB0
aW9uVXNlclByZWZlcmVuY2VzKGdyb3VwKQorI2lmIEhBVkUoTUVESUFfQUNDRVNTSUJJTElUWV9G
UkFNRVdPUkspCisgICAgLCBtX2xpc3RlbmluZ0ZvclByZWZlcmVuY2VDaGFuZ2VzKGZhbHNlKQor
I2VuZGlmCit7Cit9CisKK0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6On5DYXB0aW9uVXNlclBy
ZWZlcmVuY2VzTWFjKCkKK3sKKyNpZiBIQVZFKE1FRElBX0FDQ0VTU0lCSUxJVFlfRlJBTUVXT1JL
KQorICAgIGlmIChrTUFYQ2FwdGlvbkFwcGVhcmFuY2VTZXR0aW5nc0NoYW5nZWROb3RpZmljYXRp
b24pCisgICAgICAgIENGTm90aWZpY2F0aW9uQ2VudGVyUmVtb3ZlT2JzZXJ2ZXIoQ0ZOb3RpZmlj
YXRpb25DZW50ZXJHZXRMb2NhbENlbnRlcigpLCB0aGlzLCBrTUFYQ2FwdGlvbkFwcGVhcmFuY2VT
ZXR0aW5nc0NoYW5nZWROb3RpZmljYXRpb24sIE5VTEwpOworI2VuZGlmCit9CisKKyNpZiBIQVZF
KE1FRElBX0FDQ0VTU0lCSUxJVFlfRlJBTUVXT1JLKQorCitDYXB0aW9uVXNlclByZWZlcmVuY2Vz
OjpDYXB0aW9uRGlzcGxheU1vZGUgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6Y2FwdGlvbkRp
c3BsYXlNb2RlKCkgY29uc3QKK3sKKyAgICBpZiAodGVzdGluZ01vZGUoKSB8fCAhTWVkaWFBY2Nl
c3NpYmlsaXR5TGlicmFyeSgpKQorICAgICAgICByZXR1cm4gQ2FwdGlvblVzZXJQcmVmZXJlbmNl
czo6Y2FwdGlvbkRpc3BsYXlNb2RlKCk7CisKKyAgICBNQUNhcHRpb25BcHBlYXJhbmNlRGlzcGxh
eVR5cGUgZGlzcGxheVR5cGUgPSBNQUNhcHRpb25BcHBlYXJhbmNlR2V0RGlzcGxheVR5cGUoa01B
Q2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2VyKTsKKyAgICBzd2l0Y2ggKGRpc3BsYXlUeXBlKSB7
CisgICAgY2FzZSBrTUFDYXB0aW9uQXBwZWFyYW5jZURpc3BsYXlUeXBlRm9yY2VkT25seToKKyAg
ICAgICAgcmV0dXJuIEZvcmNlZE9ubHk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrTUFD
YXB0aW9uQXBwZWFyYW5jZURpc3BsYXlUeXBlQXV0b21hdGljOgorICAgICAgICByZXR1cm4gQXV0
b21hdGljOworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga01BQ2FwdGlvbkFwcGVhcmFuY2VE
aXNwbGF5VHlwZUFsd2F5c09uOgorICAgICAgICByZXR1cm4gQWx3YXlzT247CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBGb3Jj
ZWRPbmx5OworfQorICAgIAordm9pZCBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpzZXRDYXB0
aW9uRGlzcGxheU1vZGUoQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6Q2FwdGlvbkRpc3BsYXlNb2Rl
IG1vZGUpCit7CisgICAgaWYgKHRlc3RpbmdNb2RlKCkgfHwgIU1lZGlhQWNjZXNzaWJpbGl0eUxp
YnJhcnkoKSkgeworICAgICAgICBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpzZXRDYXB0aW9uRGlz
cGxheU1vZGUobW9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNQUNhcHRpb25B
cHBlYXJhbmNlRGlzcGxheVR5cGUgZGlzcGxheVR5cGUgPSBrTUFDYXB0aW9uQXBwZWFyYW5jZURp
c3BsYXlUeXBlRm9yY2VkT25seTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgY2FzZSBB
dXRvbWF0aWM6CisgICAgICAgICAgICBkaXNwbGF5VHlwZSA9IGtNQUNhcHRpb25BcHBlYXJhbmNl
RGlzcGxheVR5cGVBdXRvbWF0aWM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBG
b3JjZWRPbmx5OgorICAgICAgICAgICAgZGlzcGxheVR5cGUgPSBrTUFDYXB0aW9uQXBwZWFyYW5j
ZURpc3BsYXlUeXBlRm9yY2VkT25seTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEFsd2F5c09uOgorICAgICAgICAgICAgZGlzcGxheVR5cGUgPSBrTUFDYXB0aW9uQXBwZWFyYW5j
ZURpc3BsYXlUeXBlQWx3YXlzT247CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgTUFDYXB0aW9uQXBwZWFyYW5jZVNldERpc3BsYXlUeXBlKGtNQUNhcHRp
b25BcHBlYXJhbmNlRG9tYWluVXNlciwgZGlzcGxheVR5cGUpOworfQorCitib29sIENhcHRpb25V
c2VyUHJlZmVyZW5jZXNNYWM6OnVzZXJQcmVmZXJzQ2FwdGlvbnMoKSBjb25zdAoreworICAgIGJv
b2wgY2FwdGlvblNldHRpbmcgPSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjp1c2VyUHJlZmVyc0Nh
cHRpb25zKCk7CisgICAgaWYgKGNhcHRpb25TZXR0aW5nIHx8IHRlc3RpbmdNb2RlKCkgfHwgIU1l
ZGlhQWNjZXNzaWJpbGl0eUxpYnJhcnkoKSkKKyAgICAgICAgcmV0dXJuIGNhcHRpb25TZXR0aW5n
OworICAgIAorICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBjYXB0aW9uaW5nTWVkaWFDaGFyYWN0
ZXJpc3RpY3MgPSBhZG9wdENGKE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5UHJlZmVycmVkQ2FwdGlv
bmluZ01lZGlhQ2hhcmFjdGVyaXN0aWNzKGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlcikp
OworICAgIHJldHVybiBjYXB0aW9uaW5nTWVkaWFDaGFyYWN0ZXJpc3RpY3MgJiYgQ0ZBcnJheUdl
dENvdW50KGNhcHRpb25pbmdNZWRpYUNoYXJhY3RlcmlzdGljcy5nZXQoKSk7Cit9CisKK2Jvb2wg
Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6dXNlclByZWZlcnNTdWJ0aXRsZXMoKSBjb25zdAor
eworICAgIGJvb2wgc3VidGl0bGVzU2V0dGluZyA9IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnVz
ZXJQcmVmZXJzU3VidGl0bGVzKCk7CisgICAgaWYgKHN1YnRpdGxlc1NldHRpbmcgfHwgdGVzdGlu
Z01vZGUoKSB8fCAhTWVkaWFBY2Nlc3NpYmlsaXR5TGlicmFyeSgpKQorICAgICAgICByZXR1cm4g
c3VidGl0bGVzU2V0dGluZzsKKyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY2FwdGlv
bmluZ01lZGlhQ2hhcmFjdGVyaXN0aWNzID0gYWRvcHRDRihNQUNhcHRpb25BcHBlYXJhbmNlQ29w
eVByZWZlcnJlZENhcHRpb25pbmdNZWRpYUNoYXJhY3RlcmlzdGljcyhrTUFDYXB0aW9uQXBwZWFy
YW5jZURvbWFpblVzZXIpKTsKKyAgICByZXR1cm4gIShjYXB0aW9uaW5nTWVkaWFDaGFyYWN0ZXJp
c3RpY3MgJiYgQ0ZBcnJheUdldENvdW50KGNhcHRpb25pbmdNZWRpYUNoYXJhY3RlcmlzdGljcy5n
ZXQoKSkpOworfQorCit2b2lkIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNldEludGVyZXN0
ZWRJbkNhcHRpb25QcmVmZXJlbmNlQ2hhbmdlcygpCit7CisgICAgaWYgKCFNZWRpYUFjY2Vzc2li
aWxpdHlMaWJyYXJ5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgha01BWENhcHRpb25B
cHBlYXJhbmNlU2V0dGluZ3NDaGFuZ2VkTm90aWZpY2F0aW9uKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIW1fbGlzdGVuaW5nRm9yUHJlZmVyZW5jZUNoYW5nZXMpIHsKKyAgICAgICAgbV9s
aXN0ZW5pbmdGb3JQcmVmZXJlbmNlQ2hhbmdlcyA9IHRydWU7CisgICAgICAgIENGTm90aWZpY2F0
aW9uQ2VudGVyQWRkT2JzZXJ2ZXIoQ0ZOb3RpZmljYXRpb25DZW50ZXJHZXRMb2NhbENlbnRlcigp
LCB0aGlzLCB1c2VyQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNhdGlvbkNhbGxiYWNr
LCBrTUFYQ2FwdGlvbkFwcGVhcmFuY2VTZXR0aW5nc0NoYW5nZWROb3RpZmljYXRpb24sIE5VTEws
IENGTm90aWZpY2F0aW9uU3VzcGVuc2lvbkJlaGF2aW9yQ29hbGVzY2UpOworICAgIH0KKyAgICAK
KyAgICB1cGRhdGVDYXB0aW9uU3R5bGVTaGVldE92ZXJpZGUoKTsKK30KKwordm9pZCBDYXB0aW9u
VXNlclByZWZlcmVuY2VzTWFjOjpjYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCkKK3sKKyAgICBp
ZiAobV9saXN0ZW5pbmdGb3JQcmVmZXJlbmNlQ2hhbmdlcykKKyAgICAgICAgdXBkYXRlQ2FwdGlv
blN0eWxlU2hlZXRPdmVyaWRlKCk7CisKKyAgICBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpjYXB0
aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7Cit9CisKK1N0cmluZyBDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWFjOjpjYXB0aW9uc1dpbmRvd0NTUygpIGNvbnN0Cit7CisgICAgTUFDYXB0aW9uQXBwZWFy
YW5jZUJlaGF2aW9yIGJlaGF2aW9yOworICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvciA9
IGFkb3B0Q0YoTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlXaW5kb3dDb2xvcihrTUFDYXB0aW9uQXBw
ZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlvcikpOworCisgICAgQ29sb3Igd2luZG93Q29sb3Io
Y29sb3IuZ2V0KCkpOworICAgIGlmICghd2luZG93Q29sb3IuaXNWYWxpZCgpKQorICAgICAgICB3
aW5kb3dDb2xvciA9IENvbG9yOjp0cmFuc3BhcmVudDsKKworICAgIGJvb2wgaW1wb3J0YW50ID0g
YmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlOworICAgIENH
RmxvYXQgb3BhY2l0eSA9IE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRXaW5kb3dPcGFjaXR5KGtNQUNh
cHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJlaGF2aW9yKTsKKyAgICBpZiAoIWltcG9ydGFu
dCkKKyAgICAgICAgaW1wb3J0YW50ID0gYmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VC
ZWhhdmlvclVzZVZhbHVlOworICAgIFN0cmluZyB3aW5kb3dTdHlsZSA9IGNvbG9yUHJvcGVydHlD
U1MoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIENvbG9yKHdpbmRvd0NvbG9yLnJlZCgpLCB3
aW5kb3dDb2xvci5ncmVlbigpLCB3aW5kb3dDb2xvci5ibHVlKCksIHN0YXRpY19jYXN0PGludD4o
b3BhY2l0eSAqIDI1NSkpLCBpbXBvcnRhbnQpOworCisgICAgaWYgKCFvcGFjaXR5KQorICAgICAg
ICByZXR1cm4gd2luZG93U3R5bGU7CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAg
YnVpbGRlci5hcHBlbmQod2luZG93U3R5bGUpOworICAgIGJ1aWxkZXIuYXBwZW5kKGdldFByb3Bl
cnR5TmFtZVN0cmluZyhDU1NQcm9wZXJ0eVBhZGRpbmcpKTsKKyAgICBidWlsZGVyLmFwcGVuZCgi
OiAuNGVtICFpbXBvcnRhbnQ7Iik7CisKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwor
fQorCitTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6Y2FwdGlvbnNCYWNrZ3JvdW5k
Q1NTKCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGRlZmF1bHQgdmFsdWUgbXVzdCBiZSB0aGUgc2Ft
ZSBhcyB0aGUgb25lIHNwZWNpZmllZCBpbiBtZWRpYUNvbnRyb2xzLmNzcyBmb3IgLXdlYmtpdC1t
ZWRpYS10ZXh0LXRyYWNrLXBhc3Qtbm9kZXMKKyAgICAvLyBhbmQgd2Via2l0LW1lZGlhLXRleHQt
dHJhY2stZnV0dXJlLW5vZGVzLgorICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIGRlZmF1
bHRCYWNrZ3JvdW5kQ29sb3IsIChDb2xvcigwLCAwLCAwLCAwLjggKiAyNTUpKSk7CisKKyAgICBN
QUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgYmVoYXZpb3I7CisKKyAgICBSZXRhaW5QdHI8Q0dD
b2xvclJlZj4gY29sb3IgPSBhZG9wdENGKE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5QmFja2dyb3Vu
ZENvbG9yKGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJlaGF2aW9yKSk7CisgICAg
Q29sb3IgYmFja2dyb3VuZENvbG9yKGNvbG9yLmdldCgpKTsKKyAgICBpZiAoIWJhY2tncm91bmRD
b2xvci5pc1ZhbGlkKCkpCisgICAgICAgIGJhY2tncm91bmRDb2xvciA9IGRlZmF1bHRCYWNrZ3Jv
dW5kQ29sb3I7CisKKyAgICBib29sIGltcG9ydGFudCA9IGJlaGF2aW9yID09IGtNQUNhcHRpb25B
cHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZTsKKyAgICBDR0Zsb2F0IG9wYWNpdHkgPSBNQUNhcHRp
b25BcHBlYXJhbmNlR2V0QmFja2dyb3VuZE9wYWNpdHkoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21h
aW5Vc2VyLCAmYmVoYXZpb3IpOworICAgIGlmICghaW1wb3J0YW50KQorICAgICAgICBpbXBvcnRh
bnQgPSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWU7Cisg
ICAgcmV0dXJuIGNvbG9yUHJvcGVydHlDU1MoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIENv
bG9yKGJhY2tncm91bmRDb2xvci5yZWQoKSwgYmFja2dyb3VuZENvbG9yLmdyZWVuKCksIGJhY2tn
cm91bmRDb2xvci5ibHVlKCksIHN0YXRpY19jYXN0PGludD4ob3BhY2l0eSAqIDI1NSkpLCBpbXBv
cnRhbnQpOworfQorCitDb2xvciBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpjYXB0aW9uc1Rl
eHRDb2xvcihib29sJiBpbXBvcnRhbnQpIGNvbnN0Cit7CisgICAgTUFDYXB0aW9uQXBwZWFyYW5j
ZUJlaGF2aW9yIGJlaGF2aW9yOworICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvciA9IGFk
b3B0Q0YoTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlGb3JlZ3JvdW5kQ29sb3Ioa01BQ2FwdGlvbkFw
cGVhcmFuY2VEb21haW5Vc2VyLCAmYmVoYXZpb3IpKTsKKyAgICBDb2xvciB0ZXh0Q29sb3IoY29s
b3IuZ2V0KCkpOworICAgIGlmICghdGV4dENvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgLy8gVGhp
cyBkZWZhdWx0IHZhbHVlIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIG9uZSBzcGVjaWZpZWQgaW4g
bWVkaWFDb250cm9scy5jc3MgZm9yIC13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1jb250YWluZXIu
CisgICAgICAgIHRleHRDb2xvciA9IENvbG9yOjp3aGl0ZTsKKyAgICAKKyAgICBpbXBvcnRhbnQg
PSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWU7CisgICAg
Q0dGbG9hdCBvcGFjaXR5ID0gTUFDYXB0aW9uQXBwZWFyYW5jZUdldEZvcmVncm91bmRPcGFjaXR5
KGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJlaGF2aW9yKTsKKyAgICBpZiAoIWlt
cG9ydGFudCkKKyAgICAgICAgaW1wb3J0YW50ID0gYmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVh
cmFuY2VCZWhhdmlvclVzZVZhbHVlOworICAgIHJldHVybiBDb2xvcih0ZXh0Q29sb3IucmVkKCks
IHRleHRDb2xvci5ncmVlbigpLCB0ZXh0Q29sb3IuYmx1ZSgpLCBzdGF0aWNfY2FzdDxpbnQ+KG9w
YWNpdHkgKiAyNTUpKTsKK30KKyAgICAKK1N0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFj
OjpjYXB0aW9uc1RleHRDb2xvckNTUygpIGNvbnN0Cit7CisgICAgYm9vbCBpbXBvcnRhbnQ7Cisg
ICAgQ29sb3IgdGV4dENvbG9yID0gY2FwdGlvbnNUZXh0Q29sb3IoaW1wb3J0YW50KTsKKworICAg
IGlmICghdGV4dENvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
CisKKyAgICByZXR1cm4gY29sb3JQcm9wZXJ0eUNTUyhDU1NQcm9wZXJ0eUNvbG9yLCB0ZXh0Q29s
b3IsIGltcG9ydGFudCk7Cit9CisgICAgCitTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01h
Yzo6d2luZG93Um91bmRlZENvcm5lclJhZGl1c0NTUygpIGNvbnN0Cit7CisgICAgTUFDYXB0aW9u
QXBwZWFyYW5jZUJlaGF2aW9yIGJlaGF2aW9yOworICAgIENHRmxvYXQgcmFkaXVzID0gTUFDYXB0
aW9uQXBwZWFyYW5jZUdldFdpbmRvd1JvdW5kZWRDb3JuZXJSYWRpdXMoa01BQ2FwdGlvbkFwcGVh
cmFuY2VEb21haW5Vc2VyLCAmYmVoYXZpb3IpOworICAgIGlmICghcmFkaXVzKQorICAgICAgICBy
ZXR1cm4gZW1wdHlTdHJpbmcoKTsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBi
dWlsZGVyLmFwcGVuZChnZXRQcm9wZXJ0eU5hbWVTdHJpbmcoQ1NTUHJvcGVydHlCb3JkZXJSYWRp
dXMpKTsKKyAgICBidWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiOiUuMDJmcHgiLCByYWRp
dXMpKTsKKyAgICBpZiAoYmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVz
ZVZhbHVlKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiICFpbXBvcnRhbnQiKTsKKyAgICBidWls
ZGVyLmFwcGVuZCgnOycpOworCisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKyAg
ICAKK0NvbG9yIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OmNhcHRpb25zRWRnZUNvbG9yRm9y
VGV4dENvbG9yKGNvbnN0IENvbG9yJiB0ZXh0Q29sb3IpIGNvbnN0Cit7CisgICAgaW50IGRpc3Rh
bmNlRnJvbVdoaXRlID0gZGlmZmVyZW5jZVNxdWFyZWQodGV4dENvbG9yLCBDb2xvcjo6d2hpdGUp
OworICAgIGludCBkaXN0YW5jZUZyb21CbGFjayA9IGRpZmZlcmVuY2VTcXVhcmVkKHRleHRDb2xv
ciwgQ29sb3I6OmJsYWNrKTsKKyAgICAKKyAgICBpZiAoZGlzdGFuY2VGcm9tV2hpdGUgPCBkaXN0
YW5jZUZyb21CbGFjaykKKyAgICAgICAgcmV0dXJuIHRleHRDb2xvci5kYXJrKCk7CisgICAgCisg
ICAgcmV0dXJuIHRleHRDb2xvci5saWdodCgpOworfQorCitTdHJpbmcgQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01hYzo6Y3NzUHJvcGVydHlXaXRoVGV4dEVkZ2VDb2xvcihDU1NQcm9wZXJ0eUlEIGlk
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBDb2xvciYgdGV4dENvbG9yLCBib29sIGltcG9y
dGFudCkgY29uc3QKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgCisgICAgYnVp
bGRlci5hcHBlbmQoZ2V0UHJvcGVydHlOYW1lU3RyaW5nKGlkKSk7CisgICAgYnVpbGRlci5hcHBl
bmQoJzonKTsKKyAgICBidWlsZGVyLmFwcGVuZCh2YWx1ZSk7CisgICAgYnVpbGRlci5hcHBlbmQo
JyAnKTsKKyAgICBidWlsZGVyLmFwcGVuZChjYXB0aW9uc0VkZ2VDb2xvckZvclRleHRDb2xvcih0
ZXh0Q29sb3IpLnNlcmlhbGl6ZWQoKSk7CisgICAgaWYgKGltcG9ydGFudCkKKyAgICAgICAgYnVp
bGRlci5hcHBlbmQoIiAhaW1wb3J0YW50Iik7CisgICAgYnVpbGRlci5hcHBlbmQoJzsnKTsKKyAg
ICAKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCitTdHJpbmcgQ2FwdGlvblVz
ZXJQcmVmZXJlbmNlc01hYzo6Y29sb3JQcm9wZXJ0eUNTUyhDU1NQcm9wZXJ0eUlEIGlkLCBjb25z
dCBDb2xvciYgY29sb3IsIGJvb2wgaW1wb3J0YW50KSBjb25zdAoreworICAgIFN0cmluZ0J1aWxk
ZXIgYnVpbGRlcjsKKyAgICAKKyAgICBidWlsZGVyLmFwcGVuZChnZXRQcm9wZXJ0eU5hbWVTdHJp
bmcoaWQpKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnOicpOworICAgIGJ1aWxkZXIuYXBwZW5kKGNv
bG9yLnNlcmlhbGl6ZWQoKSk7CisgICAgaWYgKGltcG9ydGFudCkKKyAgICAgICAgYnVpbGRlci5h
cHBlbmQoIiAhaW1wb3J0YW50Iik7CisgICAgYnVpbGRlci5hcHBlbmQoJzsnKTsKKyAgICAKKyAg
ICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCitTdHJpbmcgQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01hYzo6Y2FwdGlvbnNUZXh0RWRnZUNTUygpIGNvbnN0Cit7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGVkZ2VTdHlsZVJhaXNlZCwgKCIgLS4wNWVtIC0uMDVl
bSAwICIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IFN0cmluZywgZWRnZVN0eWxlRGVwcmVzc2VkLCAoIiAuMDVlbSAuMDVlbSAw
ICIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKGNvbnN0IFN0cmluZywgZWRnZVN0eWxlRHJvcFNoYWRvdywgKCIgLjA3NWVtIC4wNzVlbSAw
ICIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKGNvbnN0IFN0cmluZywgZWRnZVN0eWxlVW5pZm9ybSwgKCIgLjAzZW0gIiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOworCisgICAgYm9vbCB1bnVzZWQ7CisgICAgQ29sb3IgY29s
b3IgPSBjYXB0aW9uc1RleHRDb2xvcih1bnVzZWQpOworICAgIGlmICghY29sb3IuaXNWYWxpZCgp
KQorICAgICAgICBjb2xvci5zZXROYW1lZENvbG9yKCJibGFjayIpOworICAgIGNvbG9yID0gY2Fw
dGlvbnNFZGdlQ29sb3JGb3JUZXh0Q29sb3IoY29sb3IpOworCisgICAgTUFDYXB0aW9uQXBwZWFy
YW5jZUJlaGF2aW9yIGJlaGF2aW9yOworICAgIE1BQ2FwdGlvbkFwcGVhcmFuY2VUZXh0RWRnZVN0
eWxlIHRleHRFZGdlU3R5bGUgPSBNQUNhcHRpb25BcHBlYXJhbmNlR2V0VGV4dEVkZ2VTdHlsZShr
TUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlvcik7CisgICAgc3dpdGNoICh0
ZXh0RWRnZVN0eWxlKSB7CisgICAgICAgIGNhc2Uga01BQ2FwdGlvbkFwcGVhcmFuY2VUZXh0RWRn
ZVN0eWxlVW5kZWZpbmVkOgorICAgICAgICBjYXNlIGtNQUNhcHRpb25BcHBlYXJhbmNlVGV4dEVk
Z2VTdHlsZU5vbmU6CisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIGtNQUNhcHRpb25BcHBlYXJhbmNlVGV4dEVkZ2VTdHlsZVJhaXNl
ZDoKKyAgICAgICAgICAgIHJldHVybiBjc3NQcm9wZXJ0eVdpdGhUZXh0RWRnZUNvbG9yKENTU1By
b3BlcnR5VGV4dFNoYWRvdywgZWRnZVN0eWxlUmFpc2VkLCBjb2xvciwgYmVoYXZpb3IgPT0ga01B
Q2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlKTsKKyAgICAgICAgY2FzZSBrTUFDYXB0
aW9uQXBwZWFyYW5jZVRleHRFZGdlU3R5bGVEZXByZXNzZWQ6CisgICAgICAgICAgICByZXR1cm4g
Y3NzUHJvcGVydHlXaXRoVGV4dEVkZ2VDb2xvcihDU1NQcm9wZXJ0eVRleHRTaGFkb3csIGVkZ2VT
dHlsZURlcHJlc3NlZCwgY29sb3IsIGJlaGF2aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVo
YXZpb3JVc2VWYWx1ZSk7CisgICAgICAgIGNhc2Uga01BQ2FwdGlvbkFwcGVhcmFuY2VUZXh0RWRn
ZVN0eWxlRHJvcFNoYWRvdzoKKyAgICAgICAgICAgIHJldHVybiBjc3NQcm9wZXJ0eVdpdGhUZXh0
RWRnZUNvbG9yKENTU1Byb3BlcnR5VGV4dFNoYWRvdywgZWRnZVN0eWxlRHJvcFNoYWRvdywgY29s
b3IsIGJlaGF2aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZSk7Cisg
ICAgICAgIGNhc2Uga01BQ2FwdGlvbkFwcGVhcmFuY2VUZXh0RWRnZVN0eWxlVW5pZm9ybToKKyAg
ICAgICAgICAgIHJldHVybiBjc3NQcm9wZXJ0eVdpdGhUZXh0RWRnZUNvbG9yKENTU1Byb3BlcnR5
V2Via2l0VGV4dFN0cm9rZSwgZWRnZVN0eWxlVW5pZm9ybSwgY29sb3IsIGJlaGF2aW9yID09IGtN
QUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiBlbXB0eVN0cmluZygpOworfQorCitT
dHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6Y2FwdGlvbnNEZWZhdWx0Rm9udENTUygp
IGNvbnN0Cit7CisgICAgTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yIGJlaGF2aW9yOworICAg
IAorICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250ID0gYWRvcHRDRihNQUNh
cHRpb25BcHBlYXJhbmNlQ29weUZvbnREZXNjcmlwdG9yRm9yU3R5bGUoa01BQ2FwdGlvbkFwcGVh
cmFuY2VEb21haW5Vc2VyLCAmYmVoYXZpb3IsIGtNQUNhcHRpb25BcHBlYXJhbmNlRm9udFN0eWxl
RGVmYXVsdCkpOworICAgIGlmICghZm9udCkKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
CisKKyAgICBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBuYW1lID0gYWRvcHRDRihDVEZvbnREZXNjcmlw
dG9yQ29weUF0dHJpYnV0ZShmb250LmdldCgpLCBrQ1RGb250TmFtZUF0dHJpYnV0ZSkpOworICAg
IGlmICghbmFtZSkKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgCisgICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyOworICAgIAorICAgIGJ1aWxkZXIuYXBwZW5kKGdldFByb3BlcnR5
TmFtZVN0cmluZyhDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpKTsKKyAgICBidWlsZGVyLmFwcGVuZCgi
OiBcIiIpOworICAgIGJ1aWxkZXIuYXBwZW5kKHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihuYW1l
LmdldCgpKSk7CisgICAgYnVpbGRlci5hcHBlbmQoJyInKTsKKyAgICBpZiAoYmVoYXZpb3IgPT0g
a01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlKQorICAgICAgICBidWlsZGVyLmFw
cGVuZCgiICFpbXBvcnRhbnQiKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnOycpOworICAgIAorICAg
IHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK2Zsb2F0IENhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNYWM6OmNhcHRpb25Gb250U2l6ZVNjYWxlQW5kSW1wb3J0YW5jZShib29sJiBpbXBvcnRh
bnQpIGNvbnN0Cit7CisgICAgaWYgKHRlc3RpbmdNb2RlKCkgfHwgIU1lZGlhQWNjZXNzaWJpbGl0
eUxpYnJhcnkoKSkKKyAgICAgICAgcmV0dXJuIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OmNhcHRp
b25Gb250U2l6ZVNjYWxlQW5kSW1wb3J0YW5jZShpbXBvcnRhbnQpOworCisgICAgTUFDYXB0aW9u
QXBwZWFyYW5jZUJlaGF2aW9yIGJlaGF2aW9yOworICAgIENHRmxvYXQgY2hhcmFjdGVyU2NhbGUg
PSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpjYXB0aW9uRm9udFNpemVTY2FsZUFuZEltcG9ydGFu
Y2UoaW1wb3J0YW50KTsKKyAgICBDR0Zsb2F0IHNjYWxlQWRqdXN0bWVudCA9IE1BQ2FwdGlvbkFw
cGVhcmFuY2VHZXRSZWxhdGl2ZUNoYXJhY3RlclNpemUoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21h
aW5Vc2VyLCAmYmVoYXZpb3IpOworCisgICAgaWYgKCFzY2FsZUFkanVzdG1lbnQpCisgICAgICAg
IHJldHVybiBjaGFyYWN0ZXJTY2FsZTsKKworICAgIGltcG9ydGFudCA9IGJlaGF2aW9yID09IGtN
QUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZTsKKyNpZiBkZWZpbmVkKF9fTFA2NF9f
KSAmJiBfX0xQNjRfXworICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHNjYWxlQWRq
dXN0bWVudCAqIGNoYXJhY3RlclNjYWxlKTsKKyNlbHNlCisgICAgcmV0dXJuIHNjYWxlQWRqdXN0
bWVudCAqIGNoYXJhY3RlclNjYWxlOworI2VuZGlmCit9CisKK3ZvaWQgQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01hYzo6c2V0UHJlZmVycmVkTGFuZ3VhZ2UoY29uc3QgU3RyaW5nJiBsYW5ndWFnZSkK
K3sKKyAgICBpZiAodGVzdGluZ01vZGUoKSB8fCAhTWVkaWFBY2Nlc3NpYmlsaXR5TGlicmFyeSgp
KSB7CisgICAgICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnNldFByZWZlcnJlZExhbmd1YWdl
KGxhbmd1YWdlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1BQ2FwdGlvbkFwcGVh
cmFuY2VBZGRTZWxlY3RlZExhbmd1YWdlKGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwg
bGFuZ3VhZ2UuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IENh
cHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnByZWZlcnJlZExhbmd1YWdlcygpIGNvbnN0Cit7Cisg
ICAgaWYgKHRlc3RpbmdNb2RlKCkgfHwgIU1lZGlhQWNjZXNzaWJpbGl0eUxpYnJhcnkoKSkKKyAg
ICAgICAgcmV0dXJuIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnByZWZlcnJlZExhbmd1YWdlcygp
OworCisgICAgVmVjdG9yPFN0cmluZz4gcGxhdGZvcm1MYW5ndWFnZXMgPSBwbGF0Zm9ybVVzZXJQ
cmVmZXJyZWRMYW5ndWFnZXMoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBvdmVycmlkZSA9IHVzZXJQ
cmVmZXJyZWRMYW5ndWFnZXNPdmVycmlkZSgpOworICAgIGlmICghb3ZlcnJpZGUuaXNFbXB0eSgp
KSB7CisgICAgICAgIGlmIChwbGF0Zm9ybUxhbmd1YWdlcy5zaXplKCkgIT0gb3ZlcnJpZGUuc2l6
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG92ZXJyaWRlOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG92ZXJyaWRlLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBpZiAob3ZlcnJp
ZGVbaV0gIT0gcGxhdGZvcm1MYW5ndWFnZXNbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIG92
ZXJyaWRlOworICAgICAgICB9CisgICAgfQorCisgICAgQ0ZJbmRleCBsYW5ndWFnZUNvdW50ID0g
MDsKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gbGFuZ3VhZ2VzID0gYWRvcHRDRihNQUNhcHRp
b25BcHBlYXJhbmNlQ29weVNlbGVjdGVkTGFuZ3VhZ2VzKGtNQUNhcHRpb25BcHBlYXJhbmNlRG9t
YWluVXNlcikpOworICAgIGlmIChsYW5ndWFnZXMpCisgICAgICAgIGxhbmd1YWdlQ291bnQgPSBD
RkFycmF5R2V0Q291bnQobGFuZ3VhZ2VzLmdldCgpKTsKKworICAgIGlmICghbGFuZ3VhZ2VDb3Vu
dCkKKyAgICAgICAgcmV0dXJuIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnByZWZlcnJlZExhbmd1
YWdlcygpOworCisgICAgVmVjdG9yPFN0cmluZz4gdXNlclByZWZlcnJlZExhbmd1YWdlczsKKyAg
ICB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzLnJlc2VydmVDYXBhY2l0eShsYW5ndWFnZUNvdW50ICsg
cGxhdGZvcm1MYW5ndWFnZXMuc2l6ZSgpKTsKKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBs
YW5ndWFnZUNvdW50OyBpKyspCisgICAgICAgIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMuYXBwZW5k
KHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGxhbmd1YWdl
cy5nZXQoKSwgaSkpKTsKKworICAgIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMuYXBwZW5kVmVjdG9y
KHBsYXRmb3JtTGFuZ3VhZ2VzKTsKKworICAgIHJldHVybiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2Vz
OworfQorI2VuZGlmICAvLyBIQVZFKE1FRElBX0FDQ0VTU0lCSUxJVFlfRlJBTUVXT1JLKQorCitT
dHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6Y2FwdGlvbnNTdHlsZVNoZWV0T3ZlcnJp
ZGUoKSBjb25zdAoreworICAgIGlmICh0ZXN0aW5nTW9kZSgpKQorICAgICAgICByZXR1cm4gQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlczo6Y2FwdGlvbnNTdHlsZVNoZWV0T3ZlcnJpZGUoKTsKKyAgICAK
KyAgICBTdHJpbmdCdWlsZGVyIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0OworCisjaWYgSEFW
RShNRURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1FV09SSykKKyAgICBpZiAoIU1lZGlhQWNjZXNzaWJp
bGl0eUxpYnJhcnkoKSkKKyAgICAgICAgcmV0dXJuIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OmNh
cHRpb25zU3R5bGVTaGVldE92ZXJyaWRlKCk7CisgICAgCisgICAgU3RyaW5nIGNhcHRpb25zQ29s
b3IgPSBjYXB0aW9uc1RleHRDb2xvckNTUygpOworICAgIFN0cmluZyBlZGdlU3R5bGUgPSBjYXB0
aW9uc1RleHRFZGdlQ1NTKCk7CisgICAgU3RyaW5nIGZvbnROYW1lID0gY2FwdGlvbnNEZWZhdWx0
Rm9udENTUygpOworICAgIFN0cmluZyBiYWNrZ3JvdW5kID0gY2FwdGlvbnNCYWNrZ3JvdW5kQ1NT
KCk7CisgICAgaWYgKCFiYWNrZ3JvdW5kLmlzRW1wdHkoKSB8fCAhY2FwdGlvbnNDb2xvci5pc0Vt
cHR5KCkgfHwgIWVkZ2VTdHlsZS5pc0VtcHR5KCkgfHwgIWZvbnROYW1lLmlzRW1wdHkoKSkgewor
ICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoIiB2aWRlbzo6Iik7Cisg
ICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZChUZXh0VHJhY2tDdWU6OmN1
ZVNoYWRvd1BzZXVkb0lkKCkpOworICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5h
cHBlbmQoJ3snKTsKKyAgICAgICAgCisgICAgICAgIGlmICghYmFja2dyb3VuZC5pc0VtcHR5KCkp
CisgICAgICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoYmFja2dyb3Vu
ZCk7CisgICAgICAgIGlmICghY2FwdGlvbnNDb2xvci5pc0VtcHR5KCkpCisgICAgICAgICAgICBj
YXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoY2FwdGlvbnNDb2xvcik7CisgICAgICAg
IGlmICghZWRnZVN0eWxlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVT
dHlsZVNoZWV0LmFwcGVuZChlZGdlU3R5bGUpOworICAgICAgICBpZiAoIWZvbnROYW1lLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZChmb250
TmFtZSk7CisgICAgICAgIAorICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBl
bmQoJ30nKTsKKyAgICB9CisgICAgCisgICAgU3RyaW5nIHdpbmRvd0NvbG9yID0gY2FwdGlvbnNX
aW5kb3dDU1MoKTsKKyAgICBTdHJpbmcgd2luZG93Q29ybmVyUmFkaXVzID0gd2luZG93Um91bmRl
ZENvcm5lclJhZGl1c0NTUygpOworICAgIGlmICghd2luZG93Q29sb3IuaXNFbXB0eSgpIHx8ICF3
aW5kb3dDb3JuZXJSYWRpdXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVT
dHlsZVNoZWV0LmFwcGVuZCgiIHZpZGVvOjoiKTsKKyAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0
eWxlU2hlZXQuYXBwZW5kKFRleHRUcmFja0N1ZUJveDo6dGV4dFRyYWNrQ3VlQm94U2hhZG93UHNl
dWRvSWQoKSk7CisgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgneycp
OworICAgICAgICAKKyAgICAgICAgaWYgKCF3aW5kb3dDb2xvci5pc0VtcHR5KCkpCisgICAgICAg
ICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQod2luZG93Q29sb3IpOworICAg
ICAgICBpZiAoIXdpbmRvd0Nvcm5lclJhZGl1cy5pc0VtcHR5KCkpCisgICAgICAgICAgICBjYXB0
aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQod2luZG93Q29ybmVyUmFkaXVzKTsKKyAgICAg
ICAgCisgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgnfScpOworICAg
IH0KKyNlbmRpZiAgLy8gSEFWRShNRURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1FV09SSykKKworICAg
IExPRyhNZWRpYSwgIkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OmNhcHRpb25zU3R5bGVTaGVl
dE92ZXJyaWRlU2V0dGluZyBzeXRsZSB0bzpcbiVzIiwgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hl
ZXQudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIHJldHVybiBjYXB0aW9uc092ZXJy
aWRlU3R5bGVTaGVldC50b1N0cmluZygpOworfQorCitzdGF0aWMgU3RyaW5nIGxhbmd1YWdlSWRl
bnRpZmllcihjb25zdCBTdHJpbmcmIGxhbmd1YWdlQ29kZSkKK3sKKyAgICBpZiAobGFuZ3VhZ2VD
b2RlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGxhbmd1YWdlQ29kZTsKKworICAgIFN0cmlu
ZyBsb3dlcmNhc2VMYW5ndWFnZUNvZGUgPSBsYW5ndWFnZUNvZGUubG93ZXIoKTsKKworICAgIC8v
IE5lZWQgMlUgaGVyZSB0byBkaXNhbWJpZ3VhdGUgU3RyaW5nOjpvcGVyYXRvcltdIGZyb20gb3Bl
cmF0b3IoTlNTdHJpbmcqLCBpbnQpW10gaW4gYSBwcm9kdWN0aW9uIGJ1aWxkLgorICAgIGlmIChs
b3dlcmNhc2VMYW5ndWFnZUNvZGUubGVuZ3RoKCkgPj0gMyAmJiAobG93ZXJjYXNlTGFuZ3VhZ2VD
b2RlWzJVXSA9PSAnXycgfHwgbG93ZXJjYXNlTGFuZ3VhZ2VDb2RlWzJVXSA9PSAnLScpKQorICAg
ICAgICBsb3dlcmNhc2VMYW5ndWFnZUNvZGUudHJ1bmNhdGUoMik7CisKKyAgICByZXR1cm4gbG93
ZXJjYXNlTGFuZ3VhZ2VDb2RlOworfQorCitzdGF0aWMgU3RyaW5nIHRyYWNrRGlzcGxheU5hbWUo
VGV4dFRyYWNrKiB0cmFjaykKK3sKKyAgICBpZiAodHJhY2sgPT0gVGV4dFRyYWNrOjpjYXB0aW9u
TWVudU9mZkl0ZW0oKSkKKyAgICAgICAgcmV0dXJuIHRleHRUcmFja09mZk1lbnVJdGVtVGV4dCgp
OworICAgIGlmICh0cmFjayA9PSBUZXh0VHJhY2s6OmNhcHRpb25NZW51QXV0b21hdGljSXRlbSgp
KQorICAgICAgICByZXR1cm4gdGV4dFRyYWNrQXV0b21hdGljTWVudUl0ZW1UZXh0KCk7CisKKyAg
ICBTdHJpbmdCdWlsZGVyIGRpc3BsYXlOYW1lOworICAgIFN0cmluZyBsYWJlbCA9IHRyYWNrLT5s
YWJlbCgpOworICAgIFN0cmluZyB0cmFja0xhbmd1YWdlSWRlbnRpZmllciA9IHRyYWNrLT5sYW5n
dWFnZSgpOworCisgICAgUmV0YWluUHRyPENGTG9jYWxlUmVmPiBjdXJyZW50TG9jYWxlID0gYWRv
cHRDRihDRkxvY2FsZUNvcHlDdXJyZW50KCkpOworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4g
bG9jYWxlSWRlbnRpZmllciA9IGFkb3B0Q0YoQ0ZMb2NhbGVDcmVhdGVDYW5vbmljYWxMb2NhbGVJ
ZGVudGlmaWVyRnJvbVN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB0cmFja0xhbmd1YWdlSWRl
bnRpZmllci5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7CisgICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiBsYW5ndWFnZUNGID0gYWRvcHRDRihDRkxvY2FsZUNvcHlEaXNwbGF5TmFtZUZvclByb3Bl
cnR5VmFsdWUoY3VycmVudExvY2FsZS5nZXQoKSwga0NGTG9jYWxlTGFuZ3VhZ2VDb2RlLCBsb2Nh
bGVJZGVudGlmaWVyLmdldCgpKSk7CisgICAgU3RyaW5nIGxhbmd1YWdlID0gbGFuZ3VhZ2VDRi5n
ZXQoKTsKKyAgICBpZiAoIWxhYmVsLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAobGFuZ3VhZ2Uu
aXNFbXB0eSgpIHx8IGxhYmVsLmNvbnRhaW5zKGxhbmd1YWdlKSkKKyAgICAgICAgICAgIGRpc3Bs
YXlOYW1lLmFwcGVuZChsYWJlbCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4gbG9jYWxlRGljdCA9IGFkb3B0Q0YoQ0ZMb2NhbGVDcmVhdGVD
b21wb25lbnRzRnJvbUxvY2FsZUlkZW50aWZpZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbG9jYWxl
SWRlbnRpZmllci5nZXQoKSkpOworICAgICAgICAgICAgaWYgKGxvY2FsZURpY3QpIHsKKyAgICAg
ICAgICAgICAgICBDRlN0cmluZ1JlZiBjb3VudHJ5Q29kZSA9IDA7CisgICAgICAgICAgICAgICAg
U3RyaW5nIGNvdW50cnlOYW1lOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENG
RGljdGlvbmFyeUdldFZhbHVlSWZQcmVzZW50KGxvY2FsZURpY3QuZ2V0KCksIGtDRkxvY2FsZUNv
dW50cnlDb2RlLCAoY29uc3Qgdm9pZCAqKikmY291bnRyeUNvZGUpOworICAgICAgICAgICAgICAg
IGlmIChjb3VudHJ5Q29kZSkgeworICAgICAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJp
bmdSZWY+IGNvdW50cnlOYW1lQ0YgPSBhZG9wdENGKENGTG9jYWxlQ29weURpc3BsYXlOYW1lRm9y
UHJvcGVydHlWYWx1ZShjdXJyZW50TG9jYWxlLmdldCgpLCBrQ0ZMb2NhbGVDb3VudHJ5Q29kZSwg
Y291bnRyeUNvZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgY291bnRyeU5hbWUgPSBjb3VudHJ5
TmFtZUNGLmdldCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBpZiAoIWNvdW50cnlOYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAg
ICAgZGlzcGxheU5hbWUuYXBwZW5kKHRleHRUcmFja0NvdW50cnlBbmRMYW5ndWFnZU1lbnVJdGVt
VGV4dChsYWJlbCwgY291bnRyeU5hbWUsIGxhbmd1YWdlKSk7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZS5hcHBlbmQodGV4dFRyYWNrTGFuZ3Vh
Z2VNZW51SXRlbVRleHQobGFiZWwsIGxhbmd1YWdlKSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBTdHJpbmcgbGFuZ3VhZ2VBbmRMb2NhbGUgPSBDRkxv
Y2FsZUNvcHlEaXNwbGF5TmFtZUZvclByb3BlcnR5VmFsdWUoY3VycmVudExvY2FsZS5nZXQoKSwg
a0NGTG9jYWxlSWRlbnRpZmllciwgdHJhY2tMYW5ndWFnZUlkZW50aWZpZXIuY3JlYXRlQ0ZTdHJp
bmcoKS5nZXQoKSk7CisgICAgICAgIGlmICghbGFuZ3VhZ2VBbmRMb2NhbGUuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgZGlzcGxheU5hbWUuYXBwZW5kKGxhbmd1YWdlQW5kTG9jYWxlKTsKKyAgICAg
ICAgZWxzZSBpZiAoIWxhbmd1YWdlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGRpc3BsYXlOYW1l
LmFwcGVuZChsYW5ndWFnZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRpc3BsYXlOYW1l
LmFwcGVuZChsb2NhbGVJZGVudGlmaWVyLmdldCgpKTsKKyAgICB9CisgICAgCisgICAgaWYgKGRp
c3BsYXlOYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgZGlzcGxheU5hbWUuYXBwZW5kKHRleHRUcmFj
a05vTGFiZWxUZXh0KCkpOworICAgIAorICAgIGlmICh0cmFjay0+aXNFYXN5VG9SZWFkKCkpCisg
ICAgICAgIHJldHVybiBlYXN5UmVhZGVyVHJhY2tNZW51SXRlbVRleHQoZGlzcGxheU5hbWUudG9T
dHJpbmcoKSk7CisgICAgCisgICAgaWYgKHRyYWNrLT5pc0Nsb3NlZENhcHRpb25zKCkpCisgICAg
ICAgIHJldHVybiBjbG9zZWRDYXB0aW9uVHJhY2tNZW51SXRlbVRleHQoZGlzcGxheU5hbWUudG9T
dHJpbmcoKSk7CisKKyAgICBpZiAodHJhY2stPmlzU0RIKCkpCisgICAgICAgIHJldHVybiBzZGhU
cmFja01lbnVJdGVtVGV4dChkaXNwbGF5TmFtZS50b1N0cmluZygpKTsKKworICAgIHJldHVybiBk
aXNwbGF5TmFtZS50b1N0cmluZygpOworfQorCitTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNl
c01hYzo6ZGlzcGxheU5hbWVGb3JUcmFjayhUZXh0VHJhY2sqIHRyYWNrKSBjb25zdAoreworICAg
IHJldHVybiB0cmFja0Rpc3BsYXlOYW1lKHRyYWNrKTsKK30KKworaW50IENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNYWM6OnRleHRUcmFja1NlbGVjdGlvblNjb3JlKFRleHRUcmFjayogdHJhY2ssIEhU
TUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkgY29uc3QKK3sKKyAgICBDYXB0aW9uRGlzcGxh
eU1vZGUgZGlzcGxheU1vZGUgPSBjYXB0aW9uRGlzcGxheU1vZGUoKTsKKyAgICBib29sIGxlZ2Fj
eU92ZXJyaWRlID0gbWVkaWFFbGVtZW50LT53ZWJraXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoKTsK
KyAgICBpZiAoZGlzcGxheU1vZGUgPT0gQWx3YXlzT24gJiYgKCF1c2VyUHJlZmVyc1N1YnRpdGxl
cygpICYmICF1c2VyUHJlZmVyc0NhcHRpb25zKCkgJiYgIWxlZ2FjeU92ZXJyaWRlKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgaWYgKHRyYWNrLT5raW5kKCkgIT0gVGV4dFRyYWNrOjpjYXB0aW9u
c0tleXdvcmQoKSAmJiB0cmFjay0+a2luZCgpICE9IFRleHRUcmFjazo6c3VidGl0bGVzS2V5d29y
ZCgpICYmIHRyYWNrLT5raW5kKCkgIT0gVGV4dFRyYWNrOjpmb3JjZWRLZXl3b3JkKCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIGlmICghdHJhY2stPmlzTWFpblByb2dyYW1Db250ZW50KCkpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgYm9vbCB0cmFja0hhc09ubHlGb3JjZWRTdWJ0aXRsZXMg
PSB0cmFjay0+Y29udGFpbnNPbmx5Rm9yY2VkU3VidGl0bGVzKCk7CisgICAgaWYgKCFsZWdhY3lP
dmVycmlkZSAmJiAoKHRyYWNrSGFzT25seUZvcmNlZFN1YnRpdGxlcyAmJiBkaXNwbGF5TW9kZSAh
PSBGb3JjZWRPbmx5KSB8fCAoIXRyYWNrSGFzT25seUZvcmNlZFN1YnRpdGxlcyAmJiBkaXNwbGF5
TW9kZSA9PSBGb3JjZWRPbmx5KSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgVmVjdG9yPFN0
cmluZz4gdXNlclByZWZlcnJlZENhcHRpb25MYW5ndWFnZXMgPSBwcmVmZXJyZWRMYW5ndWFnZXMo
KTsKKworICAgIGlmIChkaXNwbGF5TW9kZSA9PSBBdXRvbWF0aWMgfHwgdHJhY2tIYXNPbmx5Rm9y
Y2VkU3VidGl0bGVzKSB7CisKKyAgICAgICAgaWYgKCFtZWRpYUVsZW1lbnQgfHwgIW1lZGlhRWxl
bWVudC0+cGxheWVyKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBTdHJpbmcg
dGV4dFRyYWNrTGFuZ3VhZ2UgPSB0cmFjay0+bGFuZ3VhZ2UoKTsKKyAgICAgICAgaWYgKHRleHRU
cmFja0xhbmd1YWdlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAg
IFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlTGlzdDsKKyAgICAgICAgbGFuZ3VhZ2VMaXN0LnJlc2Vy
dmVDYXBhY2l0eSgxKTsKKworICAgICAgICBTdHJpbmcgYXVkaW9UcmFja0xhbmd1YWdlOworICAg
ICAgICBpZiAodGVzdGluZ01vZGUoKSkKKyAgICAgICAgICAgIGF1ZGlvVHJhY2tMYW5ndWFnZSA9
IHByaW1hcnlBdWRpb1RyYWNrTGFuZ3VhZ2VPdmVycmlkZSgpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBhdWRpb1RyYWNrTGFuZ3VhZ2UgPSBtZWRpYUVsZW1lbnQtPnBsYXllcigpLT5sYW5n
dWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2soKTsKKworICAgICAgICBpZiAoYXVkaW9UcmFja0xhbmd1
YWdlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlmICh0cmFj
a0hhc09ubHlGb3JjZWRTdWJ0aXRsZXMpIHsKKyAgICAgICAgICAgIGxhbmd1YWdlTGlzdC5hcHBl
bmQoYXVkaW9UcmFja0xhbmd1YWdlKTsKKyAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBpbmRl
eE9mQmVzdE1hdGNoaW5nTGFuZ3VhZ2VJbkxpc3QodGV4dFRyYWNrTGFuZ3VhZ2UsIGxhbmd1YWdl
TGlzdCk7CisKKyAgICAgICAgICAgIC8vIE9ubHkgY29uc2lkZXIgYSBmb3JjZWQtb25seSB0cmFj
ayBpZiBpdCBJUyBpbiB0aGUgc2FtZSBsYW5ndWFnZSBhcyB0aGUgcHJpbWFyeSBhdWRpbyB0cmFj
ay4KKyAgICAgICAgICAgIGlmIChvZmZzZXQpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsYW5ndWFnZUxpc3QuYXBwZW5kKGRlZmF1bHRM
YW5ndWFnZSgpKTsKKworICAgICAgICAgICAgLy8gT25seSBlbmFibGUgYSB0ZXh0IHRyYWNrIGlm
IHRoZSBjdXJyZW50IGF1ZGlvIHRyYWNrIGlzIE5PVCBpbiB0aGUgdXNlcidzIHByZWZlcnJlZCBs
YW5ndWFnZSAuLi4KKyAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBpbmRleE9mQmVzdE1hdGNo
aW5nTGFuZ3VhZ2VJbkxpc3QoYXVkaW9UcmFja0xhbmd1YWdlLCBsYW5ndWFnZUxpc3QpOworICAg
ICAgICAgICAgaWYgKCFvZmZzZXQpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAg
ICAgICAgIC8vIGFuZCB0aGUgdGV4dCB0cmFjayBtYXRjaGVzIHRoZSB1c2VyJ3MgcHJlZmVycmVk
IGxhbmd1YWdlLgorICAgICAgICAgICAgb2Zmc2V0ID0gaW5kZXhPZkJlc3RNYXRjaGluZ0xhbmd1
YWdlSW5MaXN0KHRleHRUcmFja0xhbmd1YWdlLCBsYW5ndWFnZUxpc3QpOworICAgICAgICAgICAg
aWYgKG9mZnNldCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAg
ICAgIHVzZXJQcmVmZXJyZWRDYXB0aW9uTGFuZ3VhZ2VzID0gbGFuZ3VhZ2VMaXN0OworICAgIH0K
KworICAgIGludCB0cmFja1Njb3JlID0gMDsKKworICAgIGlmICh1c2VyUHJlZmVyc0NhcHRpb25z
KCkpIHsKKyAgICAgICAgLy8gV2hlbiB0aGUgdXNlciBwcmVmZXJzIGFjY2Vzc2libGl0eSB0cmFj
a3MsIHJhbmsgaXMgU0RILCB0aGVuIENDLCB0aGVuIHN1YnRpdGxlcy4KKyAgICAgICAgaWYgKHRy
YWNrLT5raW5kKCkgPT0gdHJhY2stPnN1YnRpdGxlc0tleXdvcmQoKSkKKyAgICAgICAgICAgIHRy
YWNrU2NvcmUgPSAxOworICAgICAgICBlbHNlIGlmICh0cmFjay0+aXNDbG9zZWRDYXB0aW9ucygp
KQorICAgICAgICAgICAgdHJhY2tTY29yZSA9IDI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHRyYWNrU2NvcmUgPSAzOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdoZW4gdGhlIHVzZXIg
cHJlZmVycyB0cmFuc2xhdGlvbiB0cmFja3MsIHJhbmsgaXMgc3VidGl0bGVzLCB0aGVuIFNESCwg
dGhlbiBDQyB0cmFja3MuCisgICAgICAgIGlmICh0cmFjay0+a2luZCgpID09IHRyYWNrLT5zdWJ0
aXRsZXNLZXl3b3JkKCkpCisgICAgICAgICAgICB0cmFja1Njb3JlID0gMzsKKyAgICAgICAgZWxz
ZSBpZiAoIXRyYWNrLT5pc0Nsb3NlZENhcHRpb25zKCkpCisgICAgICAgICAgICB0cmFja1Njb3Jl
ID0gMjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHJhY2tTY29yZSA9IDE7CisgICAgfQor
CisgICAgcmV0dXJuIHRyYWNrU2NvcmUgKyB0ZXh0VHJhY2tMYW5ndWFnZVNlbGVjdGlvblNjb3Jl
KHRyYWNrLCB1c2VyUHJlZmVycmVkQ2FwdGlvbkxhbmd1YWdlcyk7Cit9CisKK3N0YXRpYyBib29s
IHRleHRUcmFja0NvbXBhcmUoY29uc3QgUmVmUHRyPFRleHRUcmFjaz4mIGEsIGNvbnN0IFJlZlB0
cjxUZXh0VHJhY2s+JiBiKQoreworICAgIFN0cmluZyBwcmVmZXJyZWRMYW5ndWFnZURpc3BsYXlO
YW1lID0gZGlzcGxheU5hbWVGb3JMYW5ndWFnZUxvY2FsZShsYW5ndWFnZUlkZW50aWZpZXIoZGVm
YXVsdExhbmd1YWdlKCkpKTsKKyAgICBTdHJpbmcgYUxhbmd1YWdlRGlzcGxheU5hbWUgPSBkaXNw
bGF5TmFtZUZvckxhbmd1YWdlTG9jYWxlKGxhbmd1YWdlSWRlbnRpZmllcihhLT5sYW5ndWFnZSgp
KSk7CisgICAgU3RyaW5nIGJMYW5ndWFnZURpc3BsYXlOYW1lID0gZGlzcGxheU5hbWVGb3JMYW5n
dWFnZUxvY2FsZShsYW5ndWFnZUlkZW50aWZpZXIoYi0+bGFuZ3VhZ2UoKSkpOworCisgICAgLy8g
VHJhY2tzIGluIHRoZSB1c2VyJ3MgcHJlZmVycmVkIGxhbmd1YWdlIGFyZSBhbHdheXMgYXQgdGhl
IHRvcCBvZiB0aGUgbWVudS4KKyAgICBib29sIGFJc1ByZWZlcnJlZExhbmd1YWdlID0gIWNvZGVQ
b2ludENvbXBhcmUoYUxhbmd1YWdlRGlzcGxheU5hbWUsIHByZWZlcnJlZExhbmd1YWdlRGlzcGxh
eU5hbWUpOworICAgIGJvb2wgYklzUHJlZmVycmVkTGFuZ3VhZ2UgPSAhY29kZVBvaW50Q29tcGFy
ZShiTGFuZ3VhZ2VEaXNwbGF5TmFtZSwgcHJlZmVycmVkTGFuZ3VhZ2VEaXNwbGF5TmFtZSk7Cisg
ICAgaWYgKChhSXNQcmVmZXJyZWRMYW5ndWFnZSB8fCBiSXNQcmVmZXJyZWRMYW5ndWFnZSkgJiYg
KGFJc1ByZWZlcnJlZExhbmd1YWdlICE9IGJJc1ByZWZlcnJlZExhbmd1YWdlKSkKKyAgICAgICAg
cmV0dXJuIGFJc1ByZWZlcnJlZExhbmd1YWdlOworCisgICAgLy8gVHJhY2tzIG5vdCBpbiB0aGUg
dXNlcidzIHByZWZlcnJlZCBsYW5ndWFnZSBzb3J0IGZpcnN0IGJ5IGxhbmd1YWdlIC4uLgorICAg
IGlmIChjb2RlUG9pbnRDb21wYXJlKGFMYW5ndWFnZURpc3BsYXlOYW1lLCBiTGFuZ3VhZ2VEaXNw
bGF5TmFtZSkpCisgICAgICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKGFMYW5ndWFnZURpc3Bs
YXlOYW1lLCBiTGFuZ3VhZ2VEaXNwbGF5TmFtZSkgPCAwOworCisgICAgLy8gLi4uIGJ1dCB3aGVu
IHRyYWNrcyBoYXZlIHRoZSBzYW1lIGxhbmd1YWdlLCBtYWluIHByb2dyYW0gY29udGVudCBzb3J0
cyBuZXh0IGhpZ2hlc3QgLi4uCisgICAgYm9vbCBhSXNNYWluQ29udGVudCA9IGEtPmlzTWFpblBy
b2dyYW1Db250ZW50KCk7CisgICAgYm9vbCBiSXNNYWluQ29udGVudCA9IGItPmlzTWFpblByb2dy
YW1Db250ZW50KCk7CisgICAgaWYgKChhSXNNYWluQ29udGVudCB8fCBiSXNNYWluQ29udGVudCkg
JiYgKGFJc01haW5Db250ZW50ICE9IGJJc01haW5Db250ZW50KSkKKyAgICAgICAgcmV0dXJuIGFJ
c01haW5Db250ZW50OworCisgICAgLy8gLi4uIGFuZCBtYWluIHByb2dyYW0gdHJha2NzIHNvcnQg
aGlnaGVyIHRoYW4gQ0MgdHJhY2tzIC4uLgorICAgIGJvb2wgYUlzQ0MgPSBhLT5pc0Nsb3NlZENh
cHRpb25zKCk7CisgICAgYm9vbCBiSXNDQyA9IGItPmlzQ2xvc2VkQ2FwdGlvbnMoKTsKKyAgICBp
ZiAoKGFJc0NDIHx8IGJJc0NDKSAmJiAoYUlzQ0MgIT0gYklzQ0MpKSB7CisgICAgICAgIGlmIChh
SXNDQykKKyAgICAgICAgICAgIHJldHVybiBhSXNNYWluQ29udGVudDsKKyAgICAgICAgcmV0dXJu
IGJJc01haW5Db250ZW50OworICAgIH0KKworICAgIC8vIC4uLiBhbmQgdHJhY2tzIG9mIHRoZSBz
YW1lIHR5cGUgYW5kIGxhbmd1YWdlIHNvcnQgYnkgdGhlIG1lbnUgaXRlbSB0ZXh0LgorICAgIHJl
dHVybiBjb2RlUG9pbnRDb21wYXJlKHRyYWNrRGlzcGxheU5hbWUoYS5nZXQoKSksIHRyYWNrRGlz
cGxheU5hbWUoYi5nZXQoKSkpIDwgMDsKK30KKworVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+ID4g
Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6c29ydGVkVHJhY2tMaXN0Rm9yTWVudShUZXh0VHJh
Y2tMaXN0KiB0cmFja0xpc3QpCit7CisgICAgQVNTRVJUKHRyYWNrTGlzdCk7CisKKyAgICBWZWN0
b3I8UmVmUHRyPFRleHRUcmFjaz4gPiB0cmFja3NGb3JNZW51OworICAgIEhhc2hTZXQ8U3RyaW5n
PiBsYW5ndWFnZXNJbmNsdWRlZDsKKyAgICBib29sIHByZWZlcnNBY2Nlc3NpYmlsaXR5VHJhY2tz
ID0gdXNlclByZWZlcnNDYXB0aW9ucygpOworICAgIGJvb2wgZmlsdGVyVHJhY2tMaXN0ID0gc2hv
dWxkRmlsdGVyVHJhY2tNZW51KCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBsZW5ndGgg
PSB0cmFja0xpc3QtPmxlbmd0aCgpOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgVGV4dFRy
YWNrKiB0cmFjayA9IHRyYWNrTGlzdC0+aXRlbShpKTsKKyAgICAgICAgU3RyaW5nIGxhbmd1YWdl
ID0gZGlzcGxheU5hbWVGb3JMYW5ndWFnZUxvY2FsZSh0cmFjay0+bGFuZ3VhZ2UoKSk7CisKKyAg
ICAgICAgaWYgKHRyYWNrLT5jb250YWluc09ubHlGb3JjZWRTdWJ0aXRsZXMoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgaWYgKHRyYWNrLT5pc0Vhc3lUb1JlYWQo
KSkgeworICAgICAgICAgICAgaWYgKCFsYW5ndWFnZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgbGFuZ3VhZ2VzSW5jbHVkZWQuYWRkKGxhbmd1YWdlKTsKKyAgICAgICAgICAgIHRyYWNrc0Zv
ck1lbnUuYXBwZW5kKHRyYWNrKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCFsYW5ndWFnZS5pc0VtcHR5KCkgJiYgdHJhY2stPmlzTWFpblByb2dyYW1D
b250ZW50KCkpIHsKKyAgICAgICAgICAgIGJvb2wgaXNBY2Nlc3NpYmlsaXR5VHJhY2sgPSB0cmFj
ay0+a2luZCgpID09IHRyYWNrLT5jYXB0aW9uc0tleXdvcmQoKTsKKyAgICAgICAgICAgIGlmIChw
cmVmZXJzQWNjZXNzaWJpbGl0eVRyYWNrcykgeworICAgICAgICAgICAgICAgIC8vIEluIHRoZSBm
aXJzdCBwYXNzLCBpbmNsdWRlIG9ubHkgY2FwdGlvbiB0cmFja3MgaWYgdGhlIHVzZXIgcHJlZmVy
cyBhY2Nlc3NpYmlsaXR5IHRyYWNrcy4KKyAgICAgICAgICAgICAgICBpZiAoIWlzQWNjZXNzaWJp
bGl0eVRyYWNrICYmIGZpbHRlclRyYWNrTGlzdCkgeworICAgICAgICAgICAgICAgICAgICBMT0co
TWVkaWEsICJDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpzb3J0ZWRUcmFja0xpc3RGb3JNZW51
IC0gc2tpcHBpbmcgJyVzJyB0cmFjayB3aXRoIGxhbmd1YWdlICclcycgYmVjYXVzZSBpdCBpcyBO
T1QgYW4gYWNjZXNzaWJpbGl0eSB0cmFjayIsIHRyYWNrLT5raW5kKCkuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwgbGFuZ3VhZ2UudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgLy8gSW4gdGhlIGZpcnN0IHBhc3MsIG9ubHkgaW5jbHVkZSB0aGUgZmlyc3Qgbm9u
LUNDIG9yIFNESCB0cmFjayB3aXRoIGVhY2ggbGFuZ3VhZ2UgaWYgdGhlIHVzZXIgcHJlZmVycyB0
cmFuc2xhdGlvbiB0cmFja3MuCisgICAgICAgICAgICAgICAgaWYgKGlzQWNjZXNzaWJpbGl0eVRy
YWNrICYmIGZpbHRlclRyYWNrTGlzdCkgeworICAgICAgICAgICAgICAgICAgICBMT0coTWVkaWEs
ICJDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpzb3J0ZWRUcmFja0xpc3RGb3JNZW51IC0gc2tp
cHBpbmcgJyVzJyB0cmFjayB3aXRoIGxhbmd1YWdlICclcycgYmVjYXVzZSBpdCBpcyBhbiBhY2Nl
c3NpYmlsaXR5IHRyYWNrIiwgdHJhY2stPmtpbmQoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBs
YW5ndWFnZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChsYW5ndWFnZXNJbmNsdWRlZC5j
b250YWlucyhsYW5ndWFnZSkgICYmIGZpbHRlclRyYWNrTGlzdCkgeworICAgICAgICAgICAgICAg
ICAgICBMT0coTWVkaWEsICJDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpzb3J0ZWRUcmFja0xp
c3RGb3JNZW51IC0gc2tpcHBpbmcgJyVzJyB0cmFjayB3aXRoIGxhbmd1YWdlICclcycgYmVjYXVz
ZSBpdCBpcyBub3QgdGhlIGZpcnN0IHdpdGggdGhpcyBsYW5ndWFnZSIsIHRyYWNrLT5raW5kKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbGFuZ3VhZ2UudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmICghbGFuZ3VhZ2UuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgbGFuZ3VhZ2VzSW5jbHVkZWQuYWRkKGxhbmd1YWdlKTsKKyAgICAgICAgdHJhY2tzRm9yTWVu
dS5hcHBlbmQodHJhY2spOworICAgIH0KKworICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgZmlsdGVy
ZWQgZm9yIHRoZSB1c2VyJ3MgYWNjZXNzaWJpbGl0eS90cmFuc2xhdGlvbiBwcmVmZXJlbmNlLCBh
ZGQgIGFsbCB0cmFja3Mgd2l0aCBhIHVuaXF1ZSBsYW5ndWFnZSB3aXRob3V0IHJlZ2FyZCB0byB0
cmFjayB0eXBlLgorICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGxlbmd0aCA9IHRyYWNrTGlzdC0+
bGVuZ3RoKCk7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBUZXh0VHJhY2sqIHRyYWNrID0g
dHJhY2tMaXN0LT5pdGVtKGkpOworICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSBkaXNwbGF5TmFt
ZUZvckxhbmd1YWdlTG9jYWxlKHRyYWNrLT5sYW5ndWFnZSgpKTsKKworICAgICAgICAvLyBBbGwg
Y2FuZGlkYXRlcyB3aXRoIG5vIGxhbmd1Z2Ugd2VyZSBhZGRlZCB0aGUgZmlyc3QgdGltZSB0aHJv
dWdoLgorICAgICAgICBpZiAobGFuZ3VhZ2UuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgaWYgKHRyYWNrLT5jb250YWluc09ubHlGb3JjZWRTdWJ0aXRsZXMoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworIAorICAgICAgICBpZiAoIWxhbmd1YWdlc0luY2x1ZGVk
LmNvbnRhaW5zKGxhbmd1YWdlKSAmJiB0cmFjay0+aXNNYWluUHJvZ3JhbUNvbnRlbnQoKSkgewor
ICAgICAgICAgICAgbGFuZ3VhZ2VzSW5jbHVkZWQuYWRkKGxhbmd1YWdlKTsKKyAgICAgICAgICAg
IHRyYWNrc0Zvck1lbnUuYXBwZW5kKHRyYWNrKTsKKyAgICAgICAgICAgIExPRyhNZWRpYSwgIkNh
cHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNvcnRlZFRyYWNrTGlzdEZvck1lbnUgLSBhZGRpbmcg
JyVzJyB0cmFjayB3aXRoIGxhbmd1YWdlICclcycgYmVjYXVzZSBpdCBpcyB0aGUgb25seSB0cmFj
ayB3aXRoIHRoaXMgbGFuZ3VhZ2UiLCB0cmFjay0+a2luZCgpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCksIGxhbmd1YWdlLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgbm9u
Q29weWluZ1NvcnQodHJhY2tzRm9yTWVudS5iZWdpbigpLCB0cmFja3NGb3JNZW51LmVuZCgpLCB0
ZXh0VHJhY2tDb21wYXJlKTsKKworICAgIHRyYWNrc0Zvck1lbnUuaW5zZXJ0KDAsIFRleHRUcmFj
azo6Y2FwdGlvbk1lbnVPZmZJdGVtKCkpOworICAgIHRyYWNrc0Zvck1lbnUuaW5zZXJ0KDEsIFRl
eHRUcmFjazo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCkpOworCisgICAgcmV0dXJuIHRyYWNr
c0Zvck1lbnU7Cit9CisgICAgCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5j
ZXNNZWRpYUFGLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0
aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDQxICsy
Myw0MCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2ltcG9ydCAiY29uZmlnLmgiCisjaW5j
bHVkZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAKLSNpbXBvcnQgIkNh
cHRpb25Vc2VyUHJlZmVyZW5jZXNNYWMuaCIKKyNpbmNsdWRlICJDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWVkaWFBRi5oIgogCi0jaW1wb3J0ICJDb2xvck1hYy5oIgotI2ltcG9ydCAiQ29yZVRleHQv
Q29yZVRleHQuaCIKLSNpbXBvcnQgIkRPTVdyYXBwZXJXb3JsZC5oIgotI2ltcG9ydCAiRmxvYXRD
b252ZXJzaW9uLmgiCi0jaW1wb3J0ICJIVE1MTWVkaWFFbGVtZW50LmgiCi0jaW1wb3J0ICJLVVJM
LmgiCi0jaW1wb3J0ICJMYW5ndWFnZS5oIgotI2ltcG9ydCAiTG9jYWxpemVkU3RyaW5ncy5oIgot
I2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKLSNp
bXBvcnQgIlBhZ2VHcm91cC5oIgotI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKLSNpbXBvcnQgIlRl
eHRUcmFja0N1ZS5oIgotI2ltcG9ydCAiVGV4dFRyYWNrTGlzdC5oIgotI2ltcG9ydCAiVXNlclN0
eWxlU2hlZXRUeXBlcy5oIgotI2ltcG9ydCA8d3RmL05vbkNvcHlpbmdTb3J0Lmg+Ci0jaW1wb3J0
IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Cisj
aW5jbHVkZSAiQ29yZVRleHQvQ29yZVRleHQuaCIKKyNpbmNsdWRlICJET01XcmFwcGVyV29ybGQu
aCIKKyNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVt
ZW50LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIkxhbmd1YWdlLmgiCisjaW5jbHVk
ZSAiTG9jYWxpemVkU3RyaW5ncy5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJN
ZWRpYUNvbnRyb2xFbGVtZW50cy5oIgorI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUg
IlNvZnRMaW5raW5nLmgiCisjaW5jbHVkZSAiVGV4dFRyYWNrQ3VlLmgiCisjaW5jbHVkZSAiVGV4
dFRyYWNrTGlzdC5oIgorI2luY2x1ZGUgIlVzZXJTdHlsZVNoZWV0VHlwZXMuaCIKKyNpbmNsdWRl
IDx3dGYvTm9uQ29weWluZ1NvcnQuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgUExBVEZPUk0oSU9TKQogI2lt
cG9ydCAiV2ViQ29yZVRocmVhZFJ1bi5oIgogI2VuZGlmCiAKICNpZiBIQVZFKE1FRElBX0FDQ0VT
U0lCSUxJVFlfRlJBTUVXT1JLKQotI2ltcG9ydCAiTWVkaWFBY2Nlc3NpYmlsaXR5L01lZGlhQWNj
ZXNzaWJpbGl0eS5oIgorI2luY2x1ZGUgIk1lZGlhQWNjZXNzaWJpbGl0eS9NZWRpYUFjY2Vzc2li
aWxpdHkuaCIKICNlbmRpZgogCiAjaWYgSEFWRShNRURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1FV09S
SykKLQorI2lmICFQTEFURk9STShXSU4pCiBTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKE1l
ZGlhQWNjZXNzaWJpbGl0eSkKIAogU09GVF9MSU5LKE1lZGlhQWNjZXNzaWJpbGl0eSwgTUFDYXB0
aW9uQXBwZWFyYW5jZUdldERpc3BsYXlUeXBlLCBNQUNhcHRpb25BcHBlYXJhbmNlRGlzcGxheVR5
cGUsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiksIChkb21haW4pKQpAQCAtNzks
NiArNzgsNjIgQEAgU09GVF9MSU5LKE1lZGlhQWNjZXNzaWJpbGl0eSwgTUFDYXB0aW9uQQogU09G
VF9MSU5LX1BPSU5URVIoTWVkaWFBY2Nlc3NpYmlsaXR5LCBrTUFYQ2FwdGlvbkFwcGVhcmFuY2VT
ZXR0aW5nc0NoYW5nZWROb3RpZmljYXRpb24sIENGU3RyaW5nUmVmKQogI2RlZmluZSBrTUFYQ2Fw
dGlvbkFwcGVhcmFuY2VTZXR0aW5nc0NoYW5nZWROb3RpZmljYXRpb24gZ2V0a01BWENhcHRpb25B
cHBlYXJhbmNlU2V0dGluZ3NDaGFuZ2VkTm90aWZpY2F0aW9uKCkKIAorI2Vsc2UKK1NPRlRfTElO
S19MSUJSQVJZKE1lZGlhQWNjZXNzaWJpbGl0eSkKKworU09GVF9MSU5LX0RMTF9JTVBPUlQoTWVk
aWFBY2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBlYXJhbmNlR2V0RGlzcGxheVR5cGUsIE1BQ2Fw
dGlvbkFwcGVhcmFuY2VEaXNwbGF5VHlwZSwgX19jZGVjbCwgKE1BQ2FwdGlvbkFwcGVhcmFuY2VE
b21haW4gZG9tYWluKSwgKGRvbWFpbikpCisjZGVmaW5lIE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRE
aXNwbGF5VHlwZSBzb2Z0TGlua19NQUNhcHRpb25BcHBlYXJhbmNlR2V0RGlzcGxheVR5cGUKKwor
U09GVF9MSU5LX0RMTF9JTVBPUlQoTWVkaWFBY2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBlYXJh
bmNlU2V0RGlzcGxheVR5cGUsIHZvaWQsIF9fY2RlY2wsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9t
YWluIGRvbWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5jZURpc3BsYXlUeXBlIGRpc3BsYXlUeXBlKSwg
KGRvbWFpbiwgZGlzcGxheVR5cGUpKQorI2RlZmluZSBNQUNhcHRpb25BcHBlYXJhbmNlU2V0RGlz
cGxheVR5cGUgc29mdExpbmtfTUFDYXB0aW9uQXBwZWFyYW5jZVNldERpc3BsYXlUeXBlCisKK1NP
RlRfTElOS19ETExfSU1QT1JUKE1lZGlhQWNjZXNzaWJpbGl0eSwgTUFDYXB0aW9uQXBwZWFyYW5j
ZUNvcHlGb3JlZ3JvdW5kQ29sb3IsIENHQ29sb3JSZWYsIF9fY2RlY2wsIChNQUNhcHRpb25BcHBl
YXJhbmNlRG9tYWluIGRvbWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yICpiZWhhdmlv
ciksIChkb21haW4sIGJlaGF2aW9yKSkKKyNkZWZpbmUgTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlG
b3JlZ3JvdW5kQ29sb3Igc29mdExpbmtfTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlGb3JlZ3JvdW5k
Q29sb3IKKworU09GVF9MSU5LX0RMTF9JTVBPUlQoTWVkaWFBY2Nlc3NpYmlsaXR5LCBNQUNhcHRp
b25BcHBlYXJhbmNlQ29weUJhY2tncm91bmRDb2xvciwgQ0dDb2xvclJlZiwgX19jZGVjbCwgKE1B
Q2FwdGlvbkFwcGVhcmFuY2VEb21haW4gZG9tYWluLCBNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZp
b3IgKmJlaGF2aW9yKSwgKGRvbWFpbiwgYmVoYXZpb3IpKQorI2RlZmluZSBNQUNhcHRpb25BcHBl
YXJhbmNlQ29weUJhY2tncm91bmRDb2xvciBzb2Z0TGlua19NQUNhcHRpb25BcHBlYXJhbmNlQ29w
eUJhY2tncm91bmRDb2xvcgorCitTT0ZUX0xJTktfRExMX0lNUE9SVChNZWRpYUFjY2Vzc2liaWxp
dHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5V2luZG93Q29sb3IsIENHQ29sb3JSZWYsIF9fY2Rl
Y2wsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5j
ZUJlaGF2aW9yICpiZWhhdmlvciksIChkb21haW4sIGJlaGF2aW9yKSkKKyNkZWZpbmUgTUFDYXB0
aW9uQXBwZWFyYW5jZUNvcHlXaW5kb3dDb2xvciBzb2Z0TGlua19NQUNhcHRpb25BcHBlYXJhbmNl
Q29weVdpbmRvd0NvbG9yCisKK1NPRlRfTElOS19ETExfSU1QT1JUKE1lZGlhQWNjZXNzaWJpbGl0
eSwgTUFDYXB0aW9uQXBwZWFyYW5jZUdldEZvcmVncm91bmRPcGFjaXR5LCBDR0Zsb2F0LCBfX2Nk
ZWNsLCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpbiBkb21haW4sIE1BQ2FwdGlvbkFwcGVhcmFu
Y2VCZWhhdmlvciAqYmVoYXZpb3IpLCAoZG9tYWluLCBiZWhhdmlvcikpCisjZGVmaW5lIE1BQ2Fw
dGlvbkFwcGVhcmFuY2VHZXRGb3JlZ3JvdW5kT3BhY2l0eSBzb2Z0TGlua19NQUNhcHRpb25BcHBl
YXJhbmNlR2V0Rm9yZWdyb3VuZE9wYWNpdHkKKworU09GVF9MSU5LX0RMTF9JTVBPUlQoTWVkaWFB
Y2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBlYXJhbmNlR2V0QmFja2dyb3VuZE9wYWNpdHksIENH
RmxvYXQsIF9fY2RlY2wsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiwgTUFDYXB0
aW9uQXBwZWFyYW5jZUJlaGF2aW9yICpiZWhhdmlvciksIChkb21haW4sIGJlaGF2aW9yKSkKKyNk
ZWZpbmUgTUFDYXB0aW9uQXBwZWFyYW5jZUdldEJhY2tncm91bmRPcGFjaXR5IHNvZnRMaW5rX01B
Q2FwdGlvbkFwcGVhcmFuY2VHZXRCYWNrZ3JvdW5kT3BhY2l0eQorCitTT0ZUX0xJTktfRExMX0lN
UE9SVChNZWRpYUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRXaW5kb3dPcGFj
aXR5LCBDR0Zsb2F0LCBfX2NkZWNsLCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpbiBkb21haW4s
IE1BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvciAqYmVoYXZpb3IpLCAoZG9tYWluLCBiZWhhdmlv
cikpCisjZGVmaW5lIE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRXaW5kb3dPcGFjaXR5IHNvZnRMaW5r
X01BQ2FwdGlvbkFwcGVhcmFuY2VHZXRXaW5kb3dPcGFjaXR5CisKK1NPRlRfTElOS19ETExfSU1Q
T1JUKE1lZGlhQWNjZXNzaWJpbGl0eSwgTUFDYXB0aW9uQXBwZWFyYW5jZUdldFdpbmRvd1JvdW5k
ZWRDb3JuZXJSYWRpdXMsIENHRmxvYXQsIF9fY2RlY2wsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9t
YWluIGRvbWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yICpiZWhhdmlvciksIChkb21h
aW4sIGJlaGF2aW9yKSkKKyNkZWZpbmUgTUFDYXB0aW9uQXBwZWFyYW5jZUdldFdpbmRvd1JvdW5k
ZWRDb3JuZXJSYWRpdXMgc29mdExpbmtfTUFDYXB0aW9uQXBwZWFyYW5jZUdldFdpbmRvd1JvdW5k
ZWRDb3JuZXJSYWRpdXMKKworU09GVF9MSU5LX0RMTF9JTVBPUlQoTWVkaWFBY2Nlc3NpYmlsaXR5
LCBNQUNhcHRpb25BcHBlYXJhbmNlQ29weUZvbnREZXNjcmlwdG9yRm9yU3R5bGUsIENURm9udERl
c2NyaXB0b3JSZWYsIF9fY2RlY2wsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiwg
IE1BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvciAqYmVoYXZpb3IsIE1BQ2FwdGlvbkFwcGVhcmFu
Y2VGb250U3R5bGUgZm9udFN0eWxlKSwgKGRvbWFpbiwgYmVoYXZpb3IsIGZvbnRTdHlsZSkpCisj
ZGVmaW5lIE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5Rm9udERlc2NyaXB0b3JGb3JTdHlsZSBzb2Z0
TGlua19NQUNhcHRpb25BcHBlYXJhbmNlQ29weUZvbnREZXNjcmlwdG9yRm9yU3R5bGUKKworU09G
VF9MSU5LX0RMTF9JTVBPUlQoTWVkaWFBY2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBlYXJhbmNl
R2V0UmVsYXRpdmVDaGFyYWN0ZXJTaXplLCBDR0Zsb2F0LCBfX2NkZWNsLCAoTUFDYXB0aW9uQXBw
ZWFyYW5jZURvbWFpbiBkb21haW4sIE1BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvciAqYmVoYXZp
b3IpLCAoZG9tYWluLCBiZWhhdmlvcikpCisjZGVmaW5lIE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRS
ZWxhdGl2ZUNoYXJhY3RlclNpemUgc29mdExpbmtfTUFDYXB0aW9uQXBwZWFyYW5jZUdldFJlbGF0
aXZlQ2hhcmFjdGVyU2l6ZQorCitTT0ZUX0xJTktfRExMX0lNUE9SVChNZWRpYUFjY2Vzc2liaWxp
dHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRUZXh0RWRnZVN0eWxlLCBNQUNhcHRpb25BcHBlYXJh
bmNlVGV4dEVkZ2VTdHlsZSwgX19jZGVjbCwgKE1BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW4gZG9t
YWluLCBNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgKmJlaGF2aW9yKSwgKGRvbWFpbiwgYmVo
YXZpb3IpKQorI2RlZmluZSBNQUNhcHRpb25BcHBlYXJhbmNlR2V0VGV4dEVkZ2VTdHlsZSBzb2Z0
TGlua19NQUNhcHRpb25BcHBlYXJhbmNlR2V0VGV4dEVkZ2VTdHlsZQorCitTT0ZUX0xJTktfRExM
X0lNUE9SVChNZWRpYUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VBZGRTZWxlY3Rl
ZExhbmd1YWdlLCBib29sLCBfX2NkZWNsLCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpbiBkb21h
aW4sIENGU3RyaW5nUmVmIGxhbmd1YWdlKSwgKGRvbWFpbiwgbGFuZ3VhZ2UpKTsKKyNkZWZpbmUg
TUFDYXB0aW9uQXBwZWFyYW5jZUFkZFNlbGVjdGVkTGFuZ3VhZ2Ugc29mdExpbmtfTUFDYXB0aW9u
QXBwZWFyYW5jZUFkZFNlbGVjdGVkTGFuZ3VhZ2UKKworU09GVF9MSU5LX0RMTF9JTVBPUlQoTWVk
aWFBY2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBlYXJhbmNlQ29weVNlbGVjdGVkTGFuZ3VhZ2Vz
LCBDRkFycmF5UmVmLCBfX2NkZWNsLCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpbiBkb21haW4p
LCAoZG9tYWluKSk7CisjZGVmaW5lIE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5U2VsZWN0ZWRMYW5n
dWFnZXMgc29mdExpbmtfTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlTZWxlY3RlZExhbmd1YWdlcwor
CitTT0ZUX0xJTktfRExMX0lNUE9SVChNZWRpYUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVh
cmFuY2VDb3B5UHJlZmVycmVkQ2FwdGlvbmluZ01lZGlhQ2hhcmFjdGVyaXN0aWNzLCAgQ0ZBcnJh
eVJlZiwgX19jZGVjbCwgKE1BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW4gZG9tYWluKSwgKGRvbWFp
bikpOworI2RlZmluZSBNQUNhcHRpb25BcHBlYXJhbmNlQ29weVByZWZlcnJlZENhcHRpb25pbmdN
ZWRpYUNoYXJhY3RlcmlzdGljcyBzb2Z0TGlua19NQUNhcHRpb25BcHBlYXJhbmNlQ29weVByZWZl
cnJlZENhcHRpb25pbmdNZWRpYUNoYXJhY3RlcmlzdGljcworCitTT0ZUX0xJTktfVkFSSUFCTEVf
RExMX0lNUE9SVChNZWRpYUFjY2Vzc2liaWxpdHksIGtNQVhDYXB0aW9uQXBwZWFyYW5jZVNldHRp
bmdzQ2hhbmdlZE5vdGlmaWNhdGlvbiwgQ0ZTdHJpbmdSZWYpCisjZGVmaW5lIGtNQVhDYXB0aW9u
QXBwZWFyYW5jZVNldHRpbmdzQ2hhbmdlZE5vdGlmaWNhdGlvbiBnZXRfa01BWENhcHRpb25BcHBl
YXJhbmNlU2V0dGluZ3NDaGFuZ2VkTm90aWZpY2F0aW9uKCkKKworU09GVF9MSU5LX0xJQlJBUlko
Q29yZVRleHQpCisKKworI2VuZGlmCisKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpA
QCAtODksMTYgKzE0NCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgdm9pZCB1c2Vy
Q2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNhdGlvbkNhbGxiYWNrKENGTm90aWZpY2F0
aW9uQ2VudGVyUmVmLCB2b2lkKiBvYnNlcnZlciwgQ0ZTdHJpbmdSZWYsIGNvbnN0IHZvaWQgKiwg
Q0ZEaWN0aW9uYXJ5UmVmKQogewogI2lmICFQTEFURk9STShJT1MpCi0gICAgc3RhdGljX2Nhc3Q8
Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYyo+KG9ic2VydmVyKS0+Y2FwdGlvblByZWZlcmVuY2Vz
Q2hhbmdlZCgpOworICAgIHN0YXRpY19jYXN0PENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFG
Kj4ob2JzZXJ2ZXIpLT5jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7CiAjZWxzZQogICAgIFdl
YlRocmVhZFJ1biheewotICAgICAgICBzdGF0aWNfY2FzdDxDYXB0aW9uVXNlclByZWZlcmVuY2Vz
TWFjKj4ob2JzZXJ2ZXIpLT5jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7CisgICAgICAgIHN0
YXRpY19jYXN0PENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGKj4ob2JzZXJ2ZXIpLT5jYXB0
aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7CiAgICAgfSk7CiAjZW5kaWYKIH0KICNlbmRpZgogCi1D
YXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjKFBhZ2VH
cm91cCogZ3JvdXApCitDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Q2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUYoUGFnZUdyb3VwKiBncm91cCkKICAgICA6IENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXMoZ3JvdXApCiAjaWYgSEFWRShNRURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1FV09SSykK
ICAgICAsIG1fbGlzdGVuaW5nRm9yUHJlZmVyZW5jZUNoYW5nZXMoZmFsc2UpCkBAIC0xMDYsNyAr
MTYxLDcgQEAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6Q2FwdGlvblVzZXJQcgogewogfQog
Ci1DYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjp+Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYygp
CitDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6fkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNN
ZWRpYUFGKCkKIHsKICNpZiBIQVZFKE1FRElBX0FDQ0VTU0lCSUxJVFlfRlJBTUVXT1JLKQogICAg
IGlmIChrTUFYQ2FwdGlvbkFwcGVhcmFuY2VTZXR0aW5nc0NoYW5nZWROb3RpZmljYXRpb24pCkBA
IC0xMTYsNyArMTcxLDcgQEAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6fkNhcHRpb25Vc2Vy
UAogCiAjaWYgSEFWRShNRURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1FV09SSykKIAotQ2FwdGlvblVz
ZXJQcmVmZXJlbmNlczo6Q2FwdGlvbkRpc3BsYXlNb2RlIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNN
YWM6OmNhcHRpb25EaXNwbGF5TW9kZSgpIGNvbnN0CitDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpD
YXB0aW9uRGlzcGxheU1vZGUgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25E
aXNwbGF5TW9kZSgpIGNvbnN0CiB7CiAgICAgaWYgKHRlc3RpbmdNb2RlKCkgfHwgIU1lZGlhQWNj
ZXNzaWJpbGl0eUxpYnJhcnkoKSkKICAgICAgICAgcmV0dXJuIENhcHRpb25Vc2VyUHJlZmVyZW5j
ZXM6OmNhcHRpb25EaXNwbGF5TW9kZSgpOwpAQCAtMTQwLDcgKzE5NSw3IEBAIENhcHRpb25Vc2Vy
UHJlZmVyZW5jZXM6OkNhcHRpb25EaXNwbGF5TW8KICAgICByZXR1cm4gRm9yY2VkT25seTsKIH0K
ICAgICAKLXZvaWQgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6c2V0Q2FwdGlvbkRpc3BsYXlN
b2RlKENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkNhcHRpb25EaXNwbGF5TW9kZSBtb2RlKQordm9p
ZCBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6c2V0Q2FwdGlvbkRpc3BsYXlNb2RlKENh
cHRpb25Vc2VyUHJlZmVyZW5jZXM6OkNhcHRpb25EaXNwbGF5TW9kZSBtb2RlKQogewogICAgIGlm
ICh0ZXN0aW5nTW9kZSgpIHx8ICFNZWRpYUFjY2Vzc2liaWxpdHlMaWJyYXJ5KCkpIHsKICAgICAg
ICAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6c2V0Q2FwdGlvbkRpc3BsYXlNb2RlKG1vZGUpOwpA
QCAtMTY2LDcgKzIyMSw3IEBAIHZvaWQgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6c2V0Q2Fw
dGkKICAgICBNQUNhcHRpb25BcHBlYXJhbmNlU2V0RGlzcGxheVR5cGUoa01BQ2FwdGlvbkFwcGVh
cmFuY2VEb21haW5Vc2VyLCBkaXNwbGF5VHlwZSk7CiB9CiAKLWJvb2wgQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01hYzo6dXNlclByZWZlcnNDYXB0aW9ucygpIGNvbnN0Citib29sIENhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNNZWRpYUFGOjp1c2VyUHJlZmVyc0NhcHRpb25zKCkgY29uc3QKIHsKICAgICBi
b29sIGNhcHRpb25TZXR0aW5nID0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6dXNlclByZWZlcnND
YXB0aW9ucygpOwogICAgIGlmIChjYXB0aW9uU2V0dGluZyB8fCB0ZXN0aW5nTW9kZSgpIHx8ICFN
ZWRpYUFjY2Vzc2liaWxpdHlMaWJyYXJ5KCkpCkBAIC0xNzYsNyArMjMxLDcgQEAgYm9vbCBDYXB0
aW9uVXNlclByZWZlcmVuY2VzTWFjOjp1c2VyUHJlZgogICAgIHJldHVybiBjYXB0aW9uaW5nTWVk
aWFDaGFyYWN0ZXJpc3RpY3MgJiYgQ0ZBcnJheUdldENvdW50KGNhcHRpb25pbmdNZWRpYUNoYXJh
Y3RlcmlzdGljcy5nZXQoKSk7CiB9CiAKLWJvb2wgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6
dXNlclByZWZlcnNTdWJ0aXRsZXMoKSBjb25zdAorYm9vbCBDYXB0aW9uVXNlclByZWZlcmVuY2Vz
TWVkaWFBRjo6dXNlclByZWZlcnNTdWJ0aXRsZXMoKSBjb25zdAogewogICAgIGJvb2wgc3VidGl0
bGVzU2V0dGluZyA9IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnVzZXJQcmVmZXJzU3VidGl0bGVz
KCk7CiAgICAgaWYgKHN1YnRpdGxlc1NldHRpbmcgfHwgdGVzdGluZ01vZGUoKSB8fCAhTWVkaWFB
Y2Nlc3NpYmlsaXR5TGlicmFyeSgpKQpAQCAtMTg2LDcgKzI0MSw3IEBAIGJvb2wgQ2FwdGlvblVz
ZXJQcmVmZXJlbmNlc01hYzo6dXNlclByZWYKICAgICByZXR1cm4gIShjYXB0aW9uaW5nTWVkaWFD
aGFyYWN0ZXJpc3RpY3MgJiYgQ0ZBcnJheUdldENvdW50KGNhcHRpb25pbmdNZWRpYUNoYXJhY3Rl
cmlzdGljcy5nZXQoKSkpOwogfQogCi12b2lkIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNl
dEludGVyZXN0ZWRJbkNhcHRpb25QcmVmZXJlbmNlQ2hhbmdlcygpCit2b2lkIENhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNNZWRpYUFGOjpzZXRJbnRlcmVzdGVkSW5DYXB0aW9uUHJlZmVyZW5jZUNoYW5n
ZXMoKQogewogICAgIGlmICghTWVkaWFBY2Nlc3NpYmlsaXR5TGlicmFyeSgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0yMDIsNyArMjU3LDcgQEAgdm9pZCBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFj
OjpzZXRJbnRlcgogICAgIHVwZGF0ZUNhcHRpb25TdHlsZVNoZWV0T3ZlcmlkZSgpOwogfQogCi12
b2lkIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQo
KQordm9pZCBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvblByZWZlcmVuY2Vz
Q2hhbmdlZCgpCiB7CiAgICAgaWYgKG1fbGlzdGVuaW5nRm9yUHJlZmVyZW5jZUNoYW5nZXMpCiAg
ICAgICAgIHVwZGF0ZUNhcHRpb25TdHlsZVNoZWV0T3ZlcmlkZSgpOwpAQCAtMjEwLDcgKzI2NSw3
IEBAIHZvaWQgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6Y2FwdGlvblAKICAgICBDYXB0aW9u
VXNlclByZWZlcmVuY2VzOjpjYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7CiB9CiAKLVN0cmlu
ZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpjYXB0aW9uc1dpbmRvd0NTUygpIGNvbnN0CitT
dHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zV2luZG93Q1NTKCkg
Y29uc3QKIHsKICAgICBNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgYmVoYXZpb3I7CiAgICAg
UmV0YWluUHRyPENHQ29sb3JSZWY+IGNvbG9yID0gYWRvcHRDRihNQUNhcHRpb25BcHBlYXJhbmNl
Q29weVdpbmRvd0NvbG9yKGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJlaGF2aW9y
KSk7CkBAIC0yMzYsNyArMjkxLDcgQEAgU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6
OmNhcHRpbwogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBDYXB0
aW9uVXNlclByZWZlcmVuY2VzTWFjOjpjYXB0aW9uc0JhY2tncm91bmRDU1MoKSBjb25zdAorU3Ry
aW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc0JhY2tncm91bmRDU1Mo
KSBjb25zdAogewogICAgIC8vIFRoaXMgZGVmYXVsdCB2YWx1ZSBtdXN0IGJlIHRoZSBzYW1lIGFz
IHRoZSBvbmUgc3BlY2lmaWVkIGluIG1lZGlhQ29udHJvbHMuY3NzIGZvciAtd2Via2l0LW1lZGlh
LXRleHQtdHJhY2stcGFzdC1ub2RlcwogICAgIC8vIGFuZCB3ZWJraXQtbWVkaWEtdGV4dC10cmFj
ay1mdXR1cmUtbm9kZXMuCkBAIC0yNTYsNyArMzExLDcgQEAgU3RyaW5nIENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNYWM6OmNhcHRpbwogICAgIHJldHVybiBjb2xvclByb3BlcnR5Q1NTKENTU1Byb3Bl
cnR5QmFja2dyb3VuZENvbG9yLCBDb2xvcihiYWNrZ3JvdW5kQ29sb3IucmVkKCksIGJhY2tncm91
bmRDb2xvci5ncmVlbigpLCBiYWNrZ3JvdW5kQ29sb3IuYmx1ZSgpLCBzdGF0aWNfY2FzdDxpbnQ+
KG9wYWNpdHkgKiAyNTUpKSwgaW1wb3J0YW50KTsKIH0KIAotQ29sb3IgQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01hYzo6Y2FwdGlvbnNUZXh0Q29sb3IoYm9vbCYgaW1wb3J0YW50KSBjb25zdAorQ29s
b3IgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zVGV4dENvbG9yKGJvb2wm
IGltcG9ydGFudCkgY29uc3QKIHsKICAgICBNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgYmVo
YXZpb3I7CiAgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNvbG9yID0gYWRvcHRDRihNQUNhcHRp
b25BcHBlYXJhbmNlQ29weUZvcmVncm91bmRDb2xvcihrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFp
blVzZXIsICZiZWhhdmlvcikpOwpAQCAtMjcyLDcgKzMyNyw3IEBAIENvbG9yIENhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNNYWM6OmNhcHRpb24KICAgICByZXR1cm4gQ29sb3IodGV4dENvbG9yLnJlZCgp
LCB0ZXh0Q29sb3IuZ3JlZW4oKSwgdGV4dENvbG9yLmJsdWUoKSwgc3RhdGljX2Nhc3Q8aW50Pihv
cGFjaXR5ICogMjU1KSk7CiB9CiAgICAgCi1TdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01h
Yzo6Y2FwdGlvbnNUZXh0Q29sb3JDU1MoKSBjb25zdAorU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1RleHRDb2xvckNTUygpIGNvbnN0CiB7CiAgICAgYm9vbCBp
bXBvcnRhbnQ7CiAgICAgQ29sb3IgdGV4dENvbG9yID0gY2FwdGlvbnNUZXh0Q29sb3IoaW1wb3J0
YW50KTsKQEAgLTI4Myw3ICszMzgsNyBAQCBTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01h
Yzo6Y2FwdGlvCiAgICAgcmV0dXJuIGNvbG9yUHJvcGVydHlDU1MoQ1NTUHJvcGVydHlDb2xvciwg
dGV4dENvbG9yLCBpbXBvcnRhbnQpOwogfQogICAgIAotU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNYWM6OndpbmRvd1JvdW5kZWRDb3JuZXJSYWRpdXNDU1MoKSBjb25zdAorU3RyaW5nIENh
cHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjp3aW5kb3dSb3VuZGVkQ29ybmVyUmFkaXVzQ1NT
KCkgY29uc3QKIHsKICAgICBNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgYmVoYXZpb3I7CiAg
ICAgQ0dGbG9hdCByYWRpdXMgPSBNQUNhcHRpb25BcHBlYXJhbmNlR2V0V2luZG93Um91bmRlZENv
cm5lclJhZGl1cyhrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlvcik7CkBA
IC0zMDAsNyArMzU1LDcgQEAgU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OndpbmRv
dwogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAgICAgCi1Db2xvciBDYXB0aW9u
VXNlclByZWZlcmVuY2VzTWFjOjpjYXB0aW9uc0VkZ2VDb2xvckZvclRleHRDb2xvcihjb25zdCBD
b2xvciYgdGV4dENvbG9yKSBjb25zdAorQ29sb3IgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlh
QUY6OmNhcHRpb25zRWRnZUNvbG9yRm9yVGV4dENvbG9yKGNvbnN0IENvbG9yJiB0ZXh0Q29sb3Ip
IGNvbnN0CiB7CiAgICAgaW50IGRpc3RhbmNlRnJvbVdoaXRlID0gZGlmZmVyZW5jZVNxdWFyZWQo
dGV4dENvbG9yLCBDb2xvcjo6d2hpdGUpOwogICAgIGludCBkaXN0YW5jZUZyb21CbGFjayA9IGRp
ZmZlcmVuY2VTcXVhcmVkKHRleHRDb2xvciwgQ29sb3I6OmJsYWNrKTsKQEAgLTMxMSw3ICszNjYs
NyBAQCBDb2xvciBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpjYXB0aW9uCiAgICAgcmV0dXJu
IHRleHRDb2xvci5saWdodCgpOwogfQogCi1TdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01h
Yzo6Y3NzUHJvcGVydHlXaXRoVGV4dEVkZ2VDb2xvcihDU1NQcm9wZXJ0eUlEIGlkLCBjb25zdCBT
dHJpbmcmIHZhbHVlLCBjb25zdCBDb2xvciYgdGV4dENvbG9yLCBib29sIGltcG9ydGFudCkgY29u
c3QKK1N0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y3NzUHJvcGVydHlXaXRo
VGV4dEVkZ2VDb2xvcihDU1NQcm9wZXJ0eUlEIGlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25z
dCBDb2xvciYgdGV4dENvbG9yLCBib29sIGltcG9ydGFudCkgY29uc3QKIHsKICAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7CiAgICAgCkBAIC0zMjcsNyArMzgyLDcgQEAgU3RyaW5nIENhcHRpb25V
c2VyUHJlZmVyZW5jZXNNYWM6OmNzc1BybwogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7
CiB9CiAKLVN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpjb2xvclByb3BlcnR5Q1NT
KENTU1Byb3BlcnR5SUQgaWQsIGNvbnN0IENvbG9yJiBjb2xvciwgYm9vbCBpbXBvcnRhbnQpIGNv
bnN0CitTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNvbG9yUHJvcGVydHlD
U1MoQ1NTUHJvcGVydHlJRCBpZCwgY29uc3QgQ29sb3ImIGNvbG9yLCBib29sIGltcG9ydGFudCkg
Y29uc3QKIHsKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgCkBAIC0zNDEsNyArMzk2
LDcgQEAgU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OmNvbG9yUAogICAgIHJldHVy
biBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2Vz
TWFjOjpjYXB0aW9uc1RleHRFZGdlQ1NTKCkgY29uc3QKK1N0cmluZyBDYXB0aW9uVXNlclByZWZl
cmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0RWRnZUNTUygpIGNvbnN0CiB7CiAgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGVkZ2VTdHlsZVJhaXNlZCwgKCIgLS4wNWVtIC0u
MDVlbSAwICIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKICAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKGNvbnN0IFN0cmluZywgZWRnZVN0eWxlRGVwcmVzc2VkLCAoIiAuMDVlbSAuMDVl
bSAwICIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKQEAgLTM3OCw3ICs0MzMsNyBA
QCBTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6Y2FwdGlvCiAgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7CiB9CiAKLVN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpjYXB0
aW9uc0RlZmF1bHRGb250Q1NTKCkgY29uc3QKK1N0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2Vz
TWVkaWFBRjo6Y2FwdGlvbnNEZWZhdWx0Rm9udENTUygpIGNvbnN0CiB7CiAgICAgTUFDYXB0aW9u
QXBwZWFyYW5jZUJlaGF2aW9yIGJlaGF2aW9yOwogICAgIApAQCAtNDAzLDcgKzQ1OCw3IEBAIFN0
cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpjYXB0aW8KICAgICByZXR1cm4gYnVpbGRl
ci50b1N0cmluZygpOwogfQogCi1mbG9hdCBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpjYXB0
aW9uRm9udFNpemVTY2FsZUFuZEltcG9ydGFuY2UoYm9vbCYgaW1wb3J0YW50KSBjb25zdAorZmxv
YXQgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25Gb250U2l6ZVNjYWxlQW5k
SW1wb3J0YW5jZShib29sJiBpbXBvcnRhbnQpIGNvbnN0CiB7CiAgICAgaWYgKHRlc3RpbmdNb2Rl
KCkgfHwgIU1lZGlhQWNjZXNzaWJpbGl0eUxpYnJhcnkoKSkKICAgICAgICAgcmV0dXJuIENhcHRp
b25Vc2VyUHJlZmVyZW5jZXM6OmNhcHRpb25Gb250U2l6ZVNjYWxlQW5kSW1wb3J0YW5jZShpbXBv
cnRhbnQpOwpAQCAtNDIzLDcgKzQ3OCw3IEBAIGZsb2F0IENhcHRpb25Vc2VyUHJlZmVyZW5jZXNN
YWM6OmNhcHRpb24KICNlbmRpZgogfQogCi12b2lkIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6
OnNldFByZWZlcnJlZExhbmd1YWdlKGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UpCit2b2lkIENhcHRp
b25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpzZXRQcmVmZXJyZWRMYW5ndWFnZShjb25zdCBTdHJp
bmcmIGxhbmd1YWdlKQogewogICAgIGlmICh0ZXN0aW5nTW9kZSgpIHx8ICFNZWRpYUFjY2Vzc2li
aWxpdHlMaWJyYXJ5KCkpIHsKICAgICAgICAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6c2V0UHJl
ZmVycmVkTGFuZ3VhZ2UobGFuZ3VhZ2UpOwpAQCAtNDMzLDcgKzQ4OCw3IEBAIHZvaWQgQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01hYzo6c2V0UHJlZmUKICAgICBNQUNhcHRpb25BcHBlYXJhbmNlQWRk
U2VsZWN0ZWRMYW5ndWFnZShrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsIGxhbmd1YWdl
LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpOwogfQogCi1WZWN0b3I8U3RyaW5nPiBDYXB0aW9uVXNl
clByZWZlcmVuY2VzTWFjOjpwcmVmZXJyZWRMYW5ndWFnZXMoKSBjb25zdAorVmVjdG9yPFN0cmlu
Zz4gQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OnByZWZlcnJlZExhbmd1YWdlcygpIGNv
bnN0CiB7CiAgICAgaWYgKHRlc3RpbmdNb2RlKCkgfHwgIU1lZGlhQWNjZXNzaWJpbGl0eUxpYnJh
cnkoKSkKICAgICAgICAgcmV0dXJuIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnByZWZlcnJlZExh
bmd1YWdlcygpOwpAQCAtNDY4LDcgKzUyMyw3IEBAIFZlY3RvcjxTdHJpbmc+IENhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNNYWMKIH0KICNlbmRpZiAgLy8gSEFWRShNRURJQV9BQ0NFU1NJQklMSVRZX0ZS
QU1FV09SSykKIAotU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OmNhcHRpb25zU3R5
bGVTaGVldE92ZXJyaWRlKCkgY29uc3QKK1N0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVk
aWFBRjo6Y2FwdGlvbnNTdHlsZVNoZWV0T3ZlcnJpZGUoKSBjb25zdAogewogICAgIGlmICh0ZXN0
aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6Y2FwdGlv
bnNTdHlsZVNoZWV0T3ZlcnJpZGUoKTsKQEAgLTUxNiw3ICs1NzEsNyBAQCBTdHJpbmcgQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01hYzo6Y2FwdGlvCiAgICAgfQogI2VuZGlmICAvLyBIQVZFKE1FRElB
X0FDQ0VTU0lCSUxJVFlfRlJBTUVXT1JLKQogCi0gICAgTE9HKE1lZGlhLCAiQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01hYzo6Y2FwdGlvbnNTdHlsZVNoZWV0T3ZlcnJpZGVTZXR0aW5nIHN5dGxlIHRv
OlxuJXMiLCBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC50b1N0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOworICAgIExPRyhNZWRpYSwgIkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0
aW9uc1N0eWxlU2hlZXRPdmVycmlkZVNldHRpbmcgc3l0bGUgdG86XG4lcyIsIGNhcHRpb25zT3Zl
cnJpZGVTdHlsZVNoZWV0LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICByZXR1cm4g
Y2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQudG9TdHJpbmcoKTsKIH0KQEAgLTU5NiwxMiArNjUx
LDEyIEBAIHN0YXRpYyBTdHJpbmcgdHJhY2tEaXNwbGF5TmFtZShUZXh0VHJhY2sKICAgICByZXR1
cm4gZGlzcGxheU5hbWUudG9TdHJpbmcoKTsKIH0KIAotU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNYWM6OmRpc3BsYXlOYW1lRm9yVHJhY2soVGV4dFRyYWNrKiB0cmFjaykgY29uc3QKK1N0
cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6ZGlzcGxheU5hbWVGb3JUcmFjayhU
ZXh0VHJhY2sqIHRyYWNrKSBjb25zdAogewogICAgIHJldHVybiB0cmFja0Rpc3BsYXlOYW1lKHRy
YWNrKTsKIH0KIAotaW50IENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnRleHRUcmFja1NlbGVj
dGlvblNjb3JlKFRleHRUcmFjayogdHJhY2ssIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVu
dCkgY29uc3QKK2ludCBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6dGV4dFRyYWNrU2Vs
ZWN0aW9uU2NvcmUoVGV4dFRyYWNrKiB0cmFjaywgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVt
ZW50KSBjb25zdAogewogICAgIENhcHRpb25EaXNwbGF5TW9kZSBkaXNwbGF5TW9kZSA9IGNhcHRp
b25EaXNwbGF5TW9kZSgpOwogICAgIGJvb2wgbGVnYWN5T3ZlcnJpZGUgPSBtZWRpYUVsZW1lbnQt
PndlYmtpdENsb3NlZENhcHRpb25zVmlzaWJsZSgpOwpAQCAtNzIxLDcgKzc3Niw3IEBAIHN0YXRp
YyBib29sIHRleHRUcmFja0NvbXBhcmUoY29uc3QgUmVmUHQKICAgICByZXR1cm4gY29kZVBvaW50
Q29tcGFyZSh0cmFja0Rpc3BsYXlOYW1lKGEuZ2V0KCkpLCB0cmFja0Rpc3BsYXlOYW1lKGIuZ2V0
KCkpKSA8IDA7CiB9CiAKLVZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPiA+IENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNYWM6OnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoVGV4dFRyYWNrTGlzdCogdHJhY2tM
aXN0KQorVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+ID4gQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01l
ZGlhQUY6OnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoVGV4dFRyYWNrTGlzdCogdHJhY2tMaXN0KQog
ewogICAgIEFTU0VSVCh0cmFja0xpc3QpOwogCkBAIC03NDksMTcgKzgwNCwxNyBAQCBWZWN0b3I8
UmVmUHRyPFRleHRUcmFjaz4gPiBDYXB0aW9uVXNlclByCiAgICAgICAgICAgICBpZiAocHJlZmVy
c0FjY2Vzc2liaWxpdHlUcmFja3MpIHsKICAgICAgICAgICAgICAgICAvLyBJbiB0aGUgZmlyc3Qg
cGFzcywgaW5jbHVkZSBvbmx5IGNhcHRpb24gdHJhY2tzIGlmIHRoZSB1c2VyIHByZWZlcnMgYWNj
ZXNzaWJpbGl0eSB0cmFja3MuCiAgICAgICAgICAgICAgICAgaWYgKCFpc0FjY2Vzc2liaWxpdHlU
cmFjayAmJiBmaWx0ZXJUcmFja0xpc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgTE9HKE1lZGlh
LCAiQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6c29ydGVkVHJhY2tMaXN0Rm9yTWVudSAtIHNr
aXBwaW5nICclcycgdHJhY2sgd2l0aCBsYW5ndWFnZSAnJXMnIGJlY2F1c2UgaXQgaXMgTk9UIGFu
IGFjY2Vzc2liaWxpdHkgdHJhY2siLCB0cmFjay0+a2luZCgpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCksIGxhbmd1YWdlLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBMT0coTWVk
aWEsICJDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6c29ydGVkVHJhY2tMaXN0Rm9yTWVu
dSAtIHNraXBwaW5nICclcycgdHJhY2sgd2l0aCBsYW5ndWFnZSAnJXMnIGJlY2F1c2UgaXQgaXMg
Tk9UIGFuIGFjY2Vzc2liaWxpdHkgdHJhY2siLCB0cmFjay0+a2luZCgpLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCksIGxhbmd1YWdlLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgIC8vIEluIHRoZSBmaXJzdCBwYXNzLCBvbmx5IGluY2x1ZGUgdGhlIGZpcnN0IG5v
bi1DQyBvciBTREggdHJhY2sgd2l0aCBlYWNoIGxhbmd1YWdlIGlmIHRoZSB1c2VyIHByZWZlcnMg
dHJhbnNsYXRpb24gdHJhY2tzLgogICAgICAgICAgICAgICAgIGlmIChpc0FjY2Vzc2liaWxpdHlU
cmFjayAmJiBmaWx0ZXJUcmFja0xpc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgTE9HKE1lZGlh
LCAiQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6c29ydGVkVHJhY2tMaXN0Rm9yTWVudSAtIHNr
aXBwaW5nICclcycgdHJhY2sgd2l0aCBsYW5ndWFnZSAnJXMnIGJlY2F1c2UgaXQgaXMgYW4gYWNj
ZXNzaWJpbGl0eSB0cmFjayIsIHRyYWNrLT5raW5kKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwg
bGFuZ3VhZ2UudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIExPRyhNZWRpYSwg
IkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpzb3J0ZWRUcmFja0xpc3RGb3JNZW51IC0g
c2tpcHBpbmcgJyVzJyB0cmFjayB3aXRoIGxhbmd1YWdlICclcycgYmVjYXVzZSBpdCBpcyBhbiBh
Y2Nlc3NpYmlsaXR5IHRyYWNrIiwgdHJhY2stPmtpbmQoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
LCBsYW5ndWFnZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChsYW5ndWFnZXNJbmNsdWRl
ZC5jb250YWlucyhsYW5ndWFnZSkgICYmIGZpbHRlclRyYWNrTGlzdCkgewotICAgICAgICAgICAg
ICAgICAgICBMT0coTWVkaWEsICJDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpzb3J0ZWRUcmFj
a0xpc3RGb3JNZW51IC0gc2tpcHBpbmcgJyVzJyB0cmFjayB3aXRoIGxhbmd1YWdlICclcycgYmVj
YXVzZSBpdCBpcyBub3QgdGhlIGZpcnN0IHdpdGggdGhpcyBsYW5ndWFnZSIsIHRyYWNrLT5raW5k
KCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbGFuZ3VhZ2UudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgICAgICAgICAgICAgIExPRyhNZWRpYSwgIkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFG
Ojpzb3J0ZWRUcmFja0xpc3RGb3JNZW51IC0gc2tpcHBpbmcgJyVzJyB0cmFjayB3aXRoIGxhbmd1
YWdlICclcycgYmVjYXVzZSBpdCBpcyBub3QgdGhlIGZpcnN0IHdpdGggdGhpcyBsYW5ndWFnZSIs
IHRyYWNrLT5raW5kKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbGFuZ3VhZ2UudXRmOCgpLmRh
dGEoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KQEAgLTc4NSw3ICs4NDAsNyBAQCBWZWN0b3I8UmVmUHRyPFRleHRUcmFj
az4gPiBDYXB0aW9uVXNlclByCiAgICAgICAgIGlmICghbGFuZ3VhZ2VzSW5jbHVkZWQuY29udGFp
bnMobGFuZ3VhZ2UpICYmIHRyYWNrLT5pc01haW5Qcm9ncmFtQ29udGVudCgpKSB7CiAgICAgICAg
ICAgICBsYW5ndWFnZXNJbmNsdWRlZC5hZGQobGFuZ3VhZ2UpOwogICAgICAgICAgICAgdHJhY2tz
Rm9yTWVudS5hcHBlbmQodHJhY2spOwotICAgICAgICAgICAgTE9HKE1lZGlhLCAiQ2FwdGlvblVz
ZXJQcmVmZXJlbmNlc01hYzo6c29ydGVkVHJhY2tMaXN0Rm9yTWVudSAtIGFkZGluZyAnJXMnIHRy
YWNrIHdpdGggbGFuZ3VhZ2UgJyVzJyBiZWNhdXNlIGl0IGlzIHRoZSBvbmx5IHRyYWNrIHdpdGgg
dGhpcyBsYW5ndWFnZSIsIHRyYWNrLT5raW5kKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbGFu
Z3VhZ2UudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBMT0coTWVkaWEsICJDYXB0aW9uVXNl
clByZWZlcmVuY2VzTWVkaWFBRjo6c29ydGVkVHJhY2tMaXN0Rm9yTWVudSAtIGFkZGluZyAnJXMn
IHRyYWNrIHdpdGggbGFuZ3VhZ2UgJyVzJyBiZWNhdXNlIGl0IGlzIHRoZSBvbmx5IHRyYWNrIHdp
dGggdGhpcyBsYW5ndWFnZSIsIHRyYWNrLT5raW5kKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwg
bGFuZ3VhZ2UudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmgJ
KHJldmlzaW9uIDE1MTk5NikJKGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclBy
ZWZlcmVuY2VzTWFjLmg6MTUxOTk2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNl
clByZWZlcmVuY2VzTWVkaWFBRi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjX2gKKyNkZWZpbmUgQ2FwdGlvblVzZXJQcmVmZXJl
bmNlc01hY19oCisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpbmNsdWRlICJDU1NQcm9w
ZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAiQ2FwdGlvblVzZXJQcmVmZXJlbmNlcy5oIgorI2luY2x1
ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjIDogcHVibGljIENhcHRpb25V
c2VyUHJlZmVyZW5jZXMgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENhcHRpb25V
c2VyUHJlZmVyZW5jZXNNYWM+IGNyZWF0ZShQYWdlR3JvdXAqIGdyb3VwKSB7IHJldHVybiBhZG9w
dFB0cihuZXcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYyhncm91cCkpOyB9CisgICAgdmlydHVh
bCB+Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYygpOworCisjaWYgSEFWRShNRURJQV9BQ0NFU1NJ
QklMSVRZX0ZSQU1FV09SSykKKyAgICB2aXJ0dWFsIENhcHRpb25EaXNwbGF5TW9kZSBjYXB0aW9u
RGlzcGxheU1vZGUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FwdGlv
bkRpc3BsYXlNb2RlKENhcHRpb25EaXNwbGF5TW9kZSkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFs
IGJvb2wgdXNlclByZWZlcnNDYXB0aW9ucygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwg
Ym9vbCB1c2VyUHJlZmVyc1N1YnRpdGxlcygpIGNvbnN0IE9WRVJSSURFOworICAgIAorICAgIHZp
cnR1YWwgZmxvYXQgY2FwdGlvbkZvbnRTaXplU2NhbGVBbmRJbXBvcnRhbmNlKGJvb2wmKSBjb25z
dCBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRJbnRlcmVzdGVkSW5DYXB0aW9uUHJl
ZmVyZW5jZUNoYW5nZXMoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVmZXJy
ZWRMYW5ndWFnZShjb25zdCBTdHJpbmcmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFZlY3RvcjxT
dHJpbmc+IHByZWZlcnJlZExhbmd1YWdlcygpIGNvbnN0IE9WRVJSSURFOworCisgICAgdmlydHVh
bCB2b2lkIGNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKSBPVkVSUklERTsKKworICAgIGJvb2wg
c2hvdWxkRmlsdGVyVHJhY2tNZW51KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorI2Vsc2UKKyAg
ICBib29sIHNob3VsZEZpbHRlclRyYWNrTWVudSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisj
ZW5kaWYKKworICAgIHZpcnR1YWwgU3RyaW5nIGNhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRlKCkg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBpbnQgdGV4dFRyYWNrU2VsZWN0aW9uU2NvcmUo
VGV4dFRyYWNrKiwgSFRNTE1lZGlhRWxlbWVudCopIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+ID4gc29ydGVkVHJhY2tMaXN0Rm9yTWVudShUZXh0
VHJhY2tMaXN0KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgZGlzcGxheU5hbWVGb3JU
cmFjayhUZXh0VHJhY2sqKSBjb25zdCBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICBDYXB0aW9u
VXNlclByZWZlcmVuY2VzTWFjKFBhZ2VHcm91cCopOworCisjaWYgSEFWRShNRURJQV9BQ0NFU1NJ
QklMSVRZX0ZSQU1FV09SSykKKyAgICBTdHJpbmcgY2FwdGlvbnNXaW5kb3dDU1MoKSBjb25zdDsK
KyAgICBTdHJpbmcgY2FwdGlvbnNCYWNrZ3JvdW5kQ1NTKCkgY29uc3Q7CisgICAgU3RyaW5nIGNh
cHRpb25zVGV4dENvbG9yQ1NTKCkgY29uc3Q7CisgICAgQ29sb3IgY2FwdGlvbnNUZXh0Q29sb3Io
Ym9vbCYpIGNvbnN0OworICAgIFN0cmluZyBjYXB0aW9uc0RlZmF1bHRGb250Q1NTKCkgY29uc3Q7
CisgICAgQ29sb3IgY2FwdGlvbnNFZGdlQ29sb3JGb3JUZXh0Q29sb3IoY29uc3QgQ29sb3ImKSBj
b25zdDsKKyAgICBTdHJpbmcgd2luZG93Um91bmRlZENvcm5lclJhZGl1c0NTUygpIGNvbnN0Owor
ICAgIFN0cmluZyBjYXB0aW9uc1RleHRFZGdlQ1NTKCkgY29uc3Q7CisgICAgU3RyaW5nIGNzc1By
b3BlcnR5V2l0aFRleHRFZGdlQ29sb3IoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwgY29u
c3QgQ29sb3ImLCBib29sKSBjb25zdDsKKyAgICBTdHJpbmcgY29sb3JQcm9wZXJ0eUNTUyhDU1NQ
cm9wZXJ0eUlELCBjb25zdCBDb2xvciYsIGJvb2wpIGNvbnN0OworCisgICAgYm9vbCBtX2xpc3Rl
bmluZ0ZvclByZWZlcmVuY2VDaGFuZ2VzOworI2VuZGlmCit9OworICAgIAorfQorI2VuZGlmCisK
KyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2Vz
TWVkaWFBRi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUYuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwx
MSArMjAsMTEgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzTWFjX2gKLSNkZWZpbmUgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hY19oCisjaWZu
ZGVmIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGX2gKKyNkZWZpbmUgQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUZfaAogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogCkBAIC0zNSwx
MCArMzUsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzTWFjIDogcHVibGljIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMgeworY2xhc3MgQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYgOiBwdWJsaWMgQ2FwdGlvblVzZXJQcmVmZXJlbmNl
cyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q2FwdGlvblVzZXJQcmVmZXJlbmNl
c01hYz4gY3JlYXRlKFBhZ2VHcm91cCogZ3JvdXApIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBDYXB0
aW9uVXNlclByZWZlcmVuY2VzTWFjKGdyb3VwKSk7IH0KLSAgICB2aXJ0dWFsIH5DYXB0aW9uVXNl
clByZWZlcmVuY2VzTWFjKCk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01lZGlhQUY+IGNyZWF0ZShQYWdlR3JvdXAqIGdyb3VwKSB7IHJldHVybiBhZG9wdFB0
cihuZXcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYoZ3JvdXApKTsgfQorICAgIHZpcnR1
YWwgfkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGKCk7CiAKICNpZiBIQVZFKE1FRElBX0FD
Q0VTU0lCSUxJVFlfRlJBTUVXT1JLKQogICAgIHZpcnR1YWwgQ2FwdGlvbkRpc3BsYXlNb2RlIGNh
cHRpb25EaXNwbGF5TW9kZSgpIGNvbnN0IE9WRVJSSURFOwpAQCAtNDYsNyArNDYsNyBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgdXNlclByZWZlcnNDYXB0aW9ucygpIGNvbnN0IE9WRVJS
SURFOwogICAgIHZpcnR1YWwgYm9vbCB1c2VyUHJlZmVyc1N1YnRpdGxlcygpIGNvbnN0IE9WRVJS
SURFOwotICAgIAorCiAgICAgdmlydHVhbCBmbG9hdCBjYXB0aW9uRm9udFNpemVTY2FsZUFuZElt
cG9ydGFuY2UoYm9vbCYpIGNvbnN0IE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lkIHNldElu
dGVyZXN0ZWRJbkNhcHRpb25QcmVmZXJlbmNlQ2hhbmdlcygpIE9WRVJSSURFOwpAQCAtNjcsNyAr
NjcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgZGlzcGxheU5hbWVGb3JUcmFjayhU
ZXh0VHJhY2sqKSBjb25zdCBPVkVSUklERTsKIAogcHJpdmF0ZToKLSAgICBDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzTWFjKFBhZ2VHcm91cCopOworICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRp
YUFGKFBhZ2VHcm91cCopOwogCiAjaWYgSEFWRShNRURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1FV09S
SykKICAgICBTdHJpbmcgY2FwdGlvbnNXaW5kb3dDU1MoKSBjb25zdDsKQEAgLTg0LDcgKzg0LDcg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fbGlzdGVuaW5nRm9yUHJlZmVyZW5jZUNoYW5nZXM7CiAj
ZW5kaWYKIH07Ci0gICAgCisKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2VHcm91cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3Jv
dXAuY3BwCShyZXZpc2lvbiAxNTE5OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAKIAogI2lmIEVOQUJMRShWSURF
T19UUkFDSykKICNpZiAoUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKSkgfHwgSEFWRShN
RURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1FV09SSykKLSNpbmNsdWRlICJDYXB0aW9uVXNlclByZWZl
cmVuY2VzTWFjLmgiCisjaW5jbHVkZSAiQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuaCIK
ICNlbHNlCiAjaW5jbHVkZSAiQ2FwdGlvblVzZXJQcmVmZXJlbmNlcy5oIgogI2VuZGlmCkBAIC00
MjAsNyArNDIwLDcgQEAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlcyogUGFnZUdyb3VwOjpjYXB0aQog
ewogICAgIGlmICghbV9jYXB0aW9uUHJlZmVyZW5jZXMpCiAjaWYgKFBMQVRGT1JNKE1BQykgJiYg
IVBMQVRGT1JNKElPUykpIHx8IEhBVkUoTUVESUFfQUNDRVNTSUJJTElUWV9GUkFNRVdPUkspCi0g
ICAgICAgIG1fY2FwdGlvblByZWZlcmVuY2VzID0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6
Y3JlYXRlKHRoaXMpOworICAgICAgICBtX2NhcHRpb25QcmVmZXJlbmNlcyA9IENhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNNZWRpYUFGOjpjcmVhdGUodGhpcyk7CiAjZWxzZQogICAgICAgICBtX2NhcHRp
b25QcmVmZXJlbmNlcyA9IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OmNyZWF0ZSh0aGlzKTsKICNl
bmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>205511</attachid>
            <date>2013-06-26 11:26:50 -0700</date>
            <delta_ts>2013-06-26 11:38:33 -0700</delta_ts>
            <desc>Update to correct some style warnings.</desc>
            <filename>bug-118069-20130626112452.patch</filename>
            <type>text/plain</type>
            <size>116929</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MjAwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEzLTA2LTI2ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFByZXBhcmUgQ2FwdGlvblVz
ZXJQcmVmZXJlbmNlc01hYyBmb3IgdXNlIG9uIFdpbmRvd3MgcG9ydC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODA2OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvajogQWRkIG5ldyBmaWxlcy4KKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2Vi
Q29yZS52Y3hwcm9qLmZpbHRlcnM6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajogVXBkYXRlIGZvciBuZXcgZmlsZSBuYW1lLgorICAgICAgICAqIHBh
Z2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2Uv
Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYy5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL0Nh
cHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcDogQ29waWVkIGZyb20gcGFnZS9DYXB0aW9u
VXNlclByZWZlcmVuY2VzTWFjLm1tLgorICAgICAgICAqIHBhZ2UvQ2FwdGlvblVzZXJQcmVmZXJl
bmNlc01lZGlhQUYuaDogQ29waWVkIGZyb20gcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWFj
LmguCisgICAgICAgICogcGFnZS9QYWdlR3JvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZUdyb3VwOjpjYXB0aW9uUHJlZmVyZW5jZXMpOiBVcGRhdGVkIHRvIG5ldyBjbGFzcyBuYW1lLgor
CiAyMDEzLTA2LTI2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFJlbmRlckJveDo6aGFzUmVuZGVyT3ZlcmZsb3cgc2hvdWxkIHJldHVybiBib29sIGluc3RlYWQg
b2YgUmVuZGVyT3ZlcmZsb3cqCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ov
V2ViQ29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4
cHJvai9XZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE1MTk5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQxNDEs
NiArNDE0MSwxNCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxBdXRvc2Nyb2xs
Q29udHJvbGxlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXEJhclBy
b3AuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwIj4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fFdp
bjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWly
b3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1
aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2lu
MzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2lu
MzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fp
cm98V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21C
dWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8
V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcQ2hyb21lLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHBhZ2VcYW5pbWF0aW9uXENvbXBvc2l0ZUFuaW1hdGlvbi5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXENvbnNvbGUuY3BwIiAvPgpAQCAtMTE2NDMs
NiArMTE2NTEsOCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFnZVxhbmltYXRpb25c
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHBhZ2VcQXV0b3Njcm9sbENvbnRyb2xsZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBhZ2VcQmFyUHJvcC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFn
ZVxDYXB0aW9uVXNlclByZWZlcmVuY2VzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxwYWdlXENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxwYWdlXENocm9tZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccGFnZVxDaHJvbWVDbGllbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBh
Z2VcYW5pbWF0aW9uXENvbXBvc2l0ZUFuaW1hdGlvbi5oIiAvPgpJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwko
cmV2aXNpb24gMTUxOTk2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC03MDMzLDYgKzcwMzMsOSBAQAog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncb3BlbmdsXEdyYXBo
aWNzQ29udGV4dDNET3BlbkdMRVMuY3BwIj4KICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhp
Y3Ncb3BlbmdsPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwYWdlXENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcCI+CisgICAgICA8
RmlsdGVyPnBhZ2U8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgPC9JdGVtR3JvdXA+CiAg
IDxJdGVtR3JvdXA+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGZpbGVzeXN0
ZW1cQXN5bmNGaWxlV3JpdGVyLmgiPgpAQCAtMTQ3MjAsNiArMTQ3MjMsMTIgQEAKICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXG9wZW5nbFxHTFBsYXRmb3JtU3Vy
ZmFjZS5oIj4KICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3Ncb3BlbmdsPC9GaWx0ZXI+
CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwYWdlXENhcHRp
b25Vc2VyUHJlZmVyZW5jZXMuaCI+CisgICAgICA8RmlsdGVyPnBhZ2U8L0ZpbHRlcj4KKyAgICA8
L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhZ2VcQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUYuaCI+CisgICAgICA8RmlsdGVyPnBhZ2U8L0ZpbHRlcj4KKyAgICA8
L0NsSW5jbHVkZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPE5vbmUgSW5j
bHVkZT0iLi5cY3NzXENTU0dyYW1tYXIueS5pbiI+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTE5OTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTEyMSw4ICsxMjEsOCBAQAogCQkwNzk0MTc5MjE2NkU4NTVGMDA5NDE2QzIg
LyogSW5iYW5kVGV4dFRyYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwNzk0MTc5MDE2NkU4NTVGMDA5NDE2QzIgLyogSW5iYW5kVGV4dFRyYWNrLmgg
Ki87IH07CiAJCTA3OTQxNzk0MTY2RUEwNEUwMDk0MTZDMiAvKiBJbmJhbmRUZXh0VHJhY2tQcml2
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzk0
MTc5MzE2NkVBMDRFMDA5NDE2QzIgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3OUQwODY4MTYyRjIw
RTgwMERCODY1OCAvKiBDYXB0aW9uVXNlclByZWZlcmVuY2VzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzlEMDg2NzE2MkYyMEU4MDBEQjg2NTggLyog
Q2FwdGlvblVzZXJQcmVmZXJlbmNlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCTA3OUQwODZCMTYyRjIxRjkwMERCODY1OCAvKiBDYXB0aW9uVXNl
clByZWZlcmVuY2VzTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwNzlEMDg2OTE2MkYyMUY5MDBEQjg2NTggLyogQ2FwdGlvblVzZXJQcmVmZXJlbmNl
c01hYy5oICovOyB9OwotCQkwNzlEMDg2QzE2MkYyMUY5MDBEQjg2NTggLyogQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA3OUQwODZBMTYyRjIxRjkwMERCODY1OCAvKiBDYXB0aW9uVXNlclByZWZlcmVuY2Vz
TWFjLm1tICovOyB9OworCQkwNzlEMDg2QjE2MkYyMUY5MDBEQjg2NTggLyogQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA3OUQwODY5MTYyRjIxRjkwMERCODY1OCAvKiBDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWVkaWFBRi5oICovOyB9OworCQkwNzlEMDg2QzE2MkYyMUY5MDBEQjg2NTggLyogQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDc5RDA4NkExNjJGMjFGOTAwREI4NjU4IC8qIENhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNNZWRpYUFGLmNwcCAqLzsgfTsKIAkJMDdBNkQxRUIxNDkxMTM3NzAwMDUxRDBD
IC8qIE1lZGlhRnJhZ21lbnRVUklQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDdBNkQxRTkxNDkxMTM3NzAwMDUxRDBDIC8qIE1lZGlhRnJh
Z21lbnRVUklQYXJzZXIuY3BwICovOyB9OwogCQkwN0E2RDFFQzE0OTExMzc3MDAwNTFEMEMgLyog
TWVkaWFGcmFnbWVudFVSSVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDdBNkQxRUExNDkxMTM3NzAwMDUxRDBDIC8qIE1lZGlhRnJhZ21lbnRV
UklQYXJzZXIuaCAqLzsgfTsKIAkJMDdBQTZCNkIxNjZEMkMwNzAwRDQ1NjcxIC8qIEluYmFuZFRl
eHRUcmFja1ByaXZhdGVBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDdBQTZCNkExNjZEMDE5NTAwRDQ1NjcxIC8qIEluYmFuZFRleHRUcmFj
a1ByaXZhdGVBVkZPYmpDLm1tICovOyB9OwpAQCAtNjMyMyw4ICs2MzIzLDggQEAKIAkJMDc5NDE3
OTAxNjZFODU1RjAwOTQxNkMyIC8qIEluYmFuZFRleHRUcmFjay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbmJhbmRUZXh0VHJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMDc5NDE3OTMxNjZFQTA0RTAwOTQxNkMyIC8qIEluYmFuZFRleHRUcmFja1ByaXZh
dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzlEMDg2NzE2MkYyMEU4MDBE
Qjg2NTggLyogQ2FwdGlvblVzZXJQcmVmZXJlbmNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDYXB0aW9uVXNlclByZWZlcmVuY2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTA3OUQwODY5MTYyRjIxRjkwMERCODY1OCAvKiBDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDc5RDA4NkExNjJG
MjFGOTAwREI4NjU4IC8qIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzlEMDg2OTE2MkYyMUY5MDBEQjg2NTgg
LyogQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMDc5RDA4NkExNjJGMjFGOTAwREI4NjU4IC8qIENhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNNZWRpYUFGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMDc5RjVFNEIwRjNCRUJFQTAwNUUwNzgyIC8qIE1lZGlhUGxheWVyUHJpdmF0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVBsYXllclByaXZhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdBNkQxRTkxNDkxMTM3NzAwMDUxRDBD
IC8qIE1lZGlhRnJhZ21lbnRVUklQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTWVkaWFGcmFnbWVudFVSSVBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTA3QTZEMUVBMTQ5MTEzNzcwMDA1MUQwQyAvKiBNZWRpYUZyYWdtZW50VVJJ
UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRnJhZ21lbnRV
UklQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NjY0LDggKzE0NjY0
LDggQEAKIAkJCQlCQzEyNEVFNjBDMjY0MUNEMDA5RTIzNDkgLyogQmFyUHJvcC5pZGwgKi8sCiAJ
CQkJMDcyQ0E4NjAxNkNCNERDMzAwOEFFMTMxIC8qIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMuY3Bw
ICovLAogCQkJCTA3OUQwODY3MTYyRjIwRTgwMERCODY1OCAvKiBDYXB0aW9uVXNlclByZWZlcmVu
Y2VzLmggKi8sCi0JCQkJMDc5RDA4NjkxNjJGMjFGOTAwREI4NjU4IC8qIENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNYWMuaCAqLywKLQkJCQkwNzlEMDg2QTE2MkYyMUY5MDBEQjg2NTggLyogQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01hYy5tbSAqLywKKwkJCQkwNzlEMDg2OTE2MkYyMUY5MDBEQjg2NTgg
LyogQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuaCAqLywKKwkJCQkwNzlEMDg2QTE2MkYy
MUY5MDBEQjg2NTggLyogQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwICovLAogCQkJ
CTE0RDgyMzhBMEFGOTJERjYwMDA0RjA1NyAvKiBDaHJvbWUuY3BwICovLAogCQkJCTE0RDgyMzUw
MEFGOTJBNzkwMDA0RjA1NyAvKiBDaHJvbWUuaCAqLywKIAkJCQkxNEQ4MjQwNjBBRjkzQUVCMDAw
NEYwNTcgLyogQ2hyb21lQ2xpZW50LmggKi8sCkBAIC0yMTA4Miw3ICsyMTA4Miw3IEBACiAJCQkJ
NDk0ODRGQ0IxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDk0ODRGQ0UxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1N0eWxl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzlEMDg2ODE2MkYyMEU4MDBEQjg2NTggLyogQ2FwdGlv
blVzZXJQcmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDc5RDA4NkIxNjJGMjFGOTAw
REI4NjU4IC8qIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTA3OUQwODZCMTYyRjIxRjkwMERCODY1OCAvKiBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFB
Ri5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU1MEI2OUUwOTlERjAyNzAwOTBENzgxIC8qIENEQVRB
U2VjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFBOEU1NjcxNzU1MkIyQTAwNzQ4OEU3IC8q
IENGVVJMRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTM2RkQxNTE2Qzc4MjY1MDBGODg3
QzEgLyogQ2hhbmdlVmVyc2lvbkRhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtMjQ1MTcsNyArMjQ1
MTcsNyBAQAogCQkJCTQ5NDg0RkNBMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk0ODRGQ0QxMDJDRjIzQzAwMTg3REQz
IC8qIENhbnZhc1N0eWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3MkNBODYxMTZDQjREQzMw
MDhBRTEzMSAvKiBDYXB0aW9uVXNlclByZWZlcmVuY2VzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTA3OUQwODZDMTYyRjIxRjkwMERCODY1OCAvKiBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjLm1t
IGluIFNvdXJjZXMgKi8sCisJCQkJMDc5RDA4NkMxNjJGMjFGOTAwREI4NjU4IC8qIENhcHRpb25V
c2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NTBCNjlEMDk5
REYwMjcwMDkwRDc4MSAvKiBDREFUQVNlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RB
OThFMEIxNjAzQ0Q2MDAwRkVBM0IxIC8qIENETS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRDQ3
QjNGQzE2Q0MzNEY4MDBBMjFFQzggLyogQ0RNUHJpdmF0ZUFWRm91bmRhdGlvbi5tbSBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2Vz
TWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZl
cmVuY2VzTWFjLmgJKHJldmlzaW9uIDE1MTk5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlc01hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
bmRlZiBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjX2gKLSNkZWZpbmUgQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01hY19oCi0KLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0KLSNpbmNsdWRlICJDU1NQ
cm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ2FwdGlvblVzZXJQcmVmZXJlbmNlcy5oIgotI2lu
Y2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjIDogcHVibGljIENhcHRp
b25Vc2VyUHJlZmVyZW5jZXMgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENhcHRp
b25Vc2VyUHJlZmVyZW5jZXNNYWM+IGNyZWF0ZShQYWdlR3JvdXAqIGdyb3VwKSB7IHJldHVybiBh
ZG9wdFB0cihuZXcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYyhncm91cCkpOyB9Ci0gICAgdmly
dHVhbCB+Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYygpOwotCi0jaWYgSEFWRShNRURJQV9BQ0NF
U1NJQklMSVRZX0ZSQU1FV09SSykKLSAgICB2aXJ0dWFsIENhcHRpb25EaXNwbGF5TW9kZSBjYXB0
aW9uRGlzcGxheU1vZGUoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q2Fw
dGlvbkRpc3BsYXlNb2RlKENhcHRpb25EaXNwbGF5TW9kZSkgT1ZFUlJJREU7Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgdXNlclByZWZlcnNDYXB0aW9ucygpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1
YWwgYm9vbCB1c2VyUHJlZmVyc1N1YnRpdGxlcygpIGNvbnN0IE9WRVJSSURFOwotICAgIAotICAg
IHZpcnR1YWwgZmxvYXQgY2FwdGlvbkZvbnRTaXplU2NhbGVBbmRJbXBvcnRhbmNlKGJvb2wmKSBj
b25zdCBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRJbnRlcmVzdGVkSW5DYXB0aW9u
UHJlZmVyZW5jZUNoYW5nZXMoKSBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVm
ZXJyZWRMYW5ndWFnZShjb25zdCBTdHJpbmcmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFZlY3Rv
cjxTdHJpbmc+IHByZWZlcnJlZExhbmd1YWdlcygpIGNvbnN0IE9WRVJSSURFOwotCi0gICAgdmly
dHVhbCB2b2lkIGNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKSBPVkVSUklERTsKLQotICAgIGJv
b2wgc2hvdWxkRmlsdGVyVHJhY2tNZW51KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotI2Vsc2UK
LSAgICBib29sIHNob3VsZEZpbHRlclRyYWNrTWVudSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgU3RyaW5nIGNhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRl
KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgdGV4dFRyYWNrU2VsZWN0aW9uU2Nv
cmUoVGV4dFRyYWNrKiwgSFRNTE1lZGlhRWxlbWVudCopIGNvbnN0IE9WRVJSSURFOwotICAgIHZp
cnR1YWwgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+ID4gc29ydGVkVHJhY2tMaXN0Rm9yTWVudShU
ZXh0VHJhY2tMaXN0KikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTdHJpbmcgZGlzcGxheU5hbWVG
b3JUcmFjayhUZXh0VHJhY2sqKSBjb25zdCBPVkVSUklERTsKLQotcHJpdmF0ZToKLSAgICBDYXB0
aW9uVXNlclByZWZlcmVuY2VzTWFjKFBhZ2VHcm91cCopOwotCi0jaWYgSEFWRShNRURJQV9BQ0NF
U1NJQklMSVRZX0ZSQU1FV09SSykKLSAgICBTdHJpbmcgY2FwdGlvbnNXaW5kb3dDU1MoKSBjb25z
dDsKLSAgICBTdHJpbmcgY2FwdGlvbnNCYWNrZ3JvdW5kQ1NTKCkgY29uc3Q7Ci0gICAgU3RyaW5n
IGNhcHRpb25zVGV4dENvbG9yQ1NTKCkgY29uc3Q7Ci0gICAgQ29sb3IgY2FwdGlvbnNUZXh0Q29s
b3IoYm9vbCYpIGNvbnN0OwotICAgIFN0cmluZyBjYXB0aW9uc0RlZmF1bHRGb250Q1NTKCkgY29u
c3Q7Ci0gICAgQ29sb3IgY2FwdGlvbnNFZGdlQ29sb3JGb3JUZXh0Q29sb3IoY29uc3QgQ29sb3Im
KSBjb25zdDsKLSAgICBTdHJpbmcgd2luZG93Um91bmRlZENvcm5lclJhZGl1c0NTUygpIGNvbnN0
OwotICAgIFN0cmluZyBjYXB0aW9uc1RleHRFZGdlQ1NTKCkgY29uc3Q7Ci0gICAgU3RyaW5nIGNz
c1Byb3BlcnR5V2l0aFRleHRFZGdlQ29sb3IoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgQ29sb3ImLCBib29sKSBjb25zdDsKLSAgICBTdHJpbmcgY29sb3JQcm9wZXJ0eUNTUyhD
U1NQcm9wZXJ0eUlELCBjb25zdCBDb2xvciYsIGJvb2wpIGNvbnN0OwotCi0gICAgYm9vbCBtX2xp
c3RlbmluZ0ZvclByZWZlcmVuY2VDaGFuZ2VzOwotI2VuZGlmCi19OwotICAgIAotfQotI2VuZGlm
Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01hYy5tbQkocmV2aXNpb24gMTUxOTk2KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgwMiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotCi0jaW1w
b3J0ICJDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjLmgiCi0KLSNpbXBvcnQgIkNvbG9yTWFjLmgi
Ci0jaW1wb3J0ICJDb3JlVGV4dC9Db3JlVGV4dC5oIgotI2ltcG9ydCAiRE9NV3JhcHBlcldvcmxk
LmgiCi0jaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbXBvcnQgIkhUTUxNZWRpYUVsZW1l
bnQuaCIKLSNpbXBvcnQgIktVUkwuaCIKLSNpbXBvcnQgIkxhbmd1YWdlLmgiCi0jaW1wb3J0ICJM
b2NhbGl6ZWRTdHJpbmdzLmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJNZWRpYUNv
bnRyb2xFbGVtZW50cy5oIgotI2ltcG9ydCAiUGFnZUdyb3VwLmgiCi0jaW1wb3J0ICJTb2Z0TGlu
a2luZy5oIgotI2ltcG9ydCAiVGV4dFRyYWNrQ3VlLmgiCi0jaW1wb3J0ICJUZXh0VHJhY2tMaXN0
LmgiCi0jaW1wb3J0ICJVc2VyU3R5bGVTaGVldFR5cGVzLmgiCi0jaW1wb3J0IDx3dGYvTm9uQ29w
eWluZ1NvcnQuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KLQotI2lmIFBMQVRGT1JNKElPUykKLSNpbXBvcnQgIldlYkNvcmVU
aHJlYWRSdW4uaCIKLSNlbmRpZgotCi0jaWYgSEFWRShNRURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1F
V09SSykKLSNpbXBvcnQgIk1lZGlhQWNjZXNzaWJpbGl0eS9NZWRpYUFjY2Vzc2liaWxpdHkuaCIK
LSNlbmRpZgotCi0jaWYgSEFWRShNRURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1FV09SSykKLQotU09G
VF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChNZWRpYUFjY2Vzc2liaWxpdHkpCi0KLVNPRlRfTElO
SyhNZWRpYUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXREaXNwbGF5VHlwZSwg
TUFDYXB0aW9uQXBwZWFyYW5jZURpc3BsYXlUeXBlLCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFp
biBkb21haW4pLCAoZG9tYWluKSkKLVNPRlRfTElOSyhNZWRpYUFjY2Vzc2liaWxpdHksIE1BQ2Fw
dGlvbkFwcGVhcmFuY2VTZXREaXNwbGF5VHlwZSwgdm9pZCwgKE1BQ2FwdGlvbkFwcGVhcmFuY2VE
b21haW4gZG9tYWluLCBNQUNhcHRpb25BcHBlYXJhbmNlRGlzcGxheVR5cGUgZGlzcGxheVR5cGUp
LCAoZG9tYWluLCBkaXNwbGF5VHlwZSkpCi1TT0ZUX0xJTksoTWVkaWFBY2Nlc3NpYmlsaXR5LCBN
QUNhcHRpb25BcHBlYXJhbmNlQ29weUZvcmVncm91bmRDb2xvciwgQ0dDb2xvclJlZiwgKE1BQ2Fw
dGlvbkFwcGVhcmFuY2VEb21haW4gZG9tYWluLCBNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3Ig
KmJlaGF2aW9yKSwgKGRvbWFpbiwgYmVoYXZpb3IpKQotU09GVF9MSU5LKE1lZGlhQWNjZXNzaWJp
bGl0eSwgTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlCYWNrZ3JvdW5kQ29sb3IsIENHQ29sb3JSZWYs
IChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5jZUJl
aGF2aW9yICpiZWhhdmlvciksIChkb21haW4sIGJlaGF2aW9yKSkKLVNPRlRfTElOSyhNZWRpYUFj
Y2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5V2luZG93Q29sb3IsIENHQ29sb3JS
ZWYsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5j
ZUJlaGF2aW9yICpiZWhhdmlvciksIChkb21haW4sIGJlaGF2aW9yKSkKLVNPRlRfTElOSyhNZWRp
YUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRGb3JlZ3JvdW5kT3BhY2l0eSwg
Q0dGbG9hdCwgKE1BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW4gZG9tYWluLCBNQUNhcHRpb25BcHBl
YXJhbmNlQmVoYXZpb3IgKmJlaGF2aW9yKSwgKGRvbWFpbiwgYmVoYXZpb3IpKQotU09GVF9MSU5L
KE1lZGlhQWNjZXNzaWJpbGl0eSwgTUFDYXB0aW9uQXBwZWFyYW5jZUdldEJhY2tncm91bmRPcGFj
aXR5LCBDR0Zsb2F0LCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpbiBkb21haW4sIE1BQ2FwdGlv
bkFwcGVhcmFuY2VCZWhhdmlvciAqYmVoYXZpb3IpLCAoZG9tYWluLCBiZWhhdmlvcikpCi1TT0ZU
X0xJTksoTWVkaWFBY2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBlYXJhbmNlR2V0V2luZG93T3Bh
Y2l0eSwgQ0dGbG9hdCwgKE1BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW4gZG9tYWluLCBNQUNhcHRp
b25BcHBlYXJhbmNlQmVoYXZpb3IgKmJlaGF2aW9yKSwgKGRvbWFpbiwgYmVoYXZpb3IpKQotU09G
VF9MSU5LKE1lZGlhQWNjZXNzaWJpbGl0eSwgTUFDYXB0aW9uQXBwZWFyYW5jZUdldFdpbmRvd1Jv
dW5kZWRDb3JuZXJSYWRpdXMsIENHRmxvYXQsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRv
bWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yICpiZWhhdmlvciksIChkb21haW4sIGJl
aGF2aW9yKSkKLVNPRlRfTElOSyhNZWRpYUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFu
Y2VDb3B5Rm9udERlc2NyaXB0b3JGb3JTdHlsZSwgQ1RGb250RGVzY3JpcHRvclJlZiwgKE1BQ2Fw
dGlvbkFwcGVhcmFuY2VEb21haW4gZG9tYWluLCAgTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9y
ICpiZWhhdmlvciwgTUFDYXB0aW9uQXBwZWFyYW5jZUZvbnRTdHlsZSBmb250U3R5bGUpLCAoZG9t
YWluLCBiZWhhdmlvciwgZm9udFN0eWxlKSkKLVNPRlRfTElOSyhNZWRpYUFjY2Vzc2liaWxpdHks
IE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRSZWxhdGl2ZUNoYXJhY3RlclNpemUsIENHRmxvYXQsIChN
QUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2
aW9yICpiZWhhdmlvciksIChkb21haW4sIGJlaGF2aW9yKSkKLVNPRlRfTElOSyhNZWRpYUFjY2Vz
c2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRUZXh0RWRnZVN0eWxlLCBNQUNhcHRpb25B
cHBlYXJhbmNlVGV4dEVkZ2VTdHlsZSwgKE1BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW4gZG9tYWlu
LCBNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgKmJlaGF2aW9yKSwgKGRvbWFpbiwgYmVoYXZp
b3IpKQotU09GVF9MSU5LKE1lZGlhQWNjZXNzaWJpbGl0eSwgTUFDYXB0aW9uQXBwZWFyYW5jZUFk
ZFNlbGVjdGVkTGFuZ3VhZ2UsIGJvb2wsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFp
biwgQ0ZTdHJpbmdSZWYgbGFuZ3VhZ2UpLCAoZG9tYWluLCBsYW5ndWFnZSkpOwotU09GVF9MSU5L
KE1lZGlhQWNjZXNzaWJpbGl0eSwgTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlTZWxlY3RlZExhbmd1
YWdlcywgQ0ZBcnJheVJlZiwgKE1BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW4gZG9tYWluKSwgKGRv
bWFpbikpOwotU09GVF9MSU5LKE1lZGlhQWNjZXNzaWJpbGl0eSwgTUFDYXB0aW9uQXBwZWFyYW5j
ZUNvcHlQcmVmZXJyZWRDYXB0aW9uaW5nTWVkaWFDaGFyYWN0ZXJpc3RpY3MsICBDRkFycmF5UmVm
LCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpbiBkb21haW4pLCAoZG9tYWluKSk7Ci0KLVNPRlRf
TElOS19QT0lOVEVSKE1lZGlhQWNjZXNzaWJpbGl0eSwga01BWENhcHRpb25BcHBlYXJhbmNlU2V0
dGluZ3NDaGFuZ2VkTm90aWZpY2F0aW9uLCBDRlN0cmluZ1JlZikKLSNkZWZpbmUga01BWENhcHRp
b25BcHBlYXJhbmNlU2V0dGluZ3NDaGFuZ2VkTm90aWZpY2F0aW9uIGdldGtNQVhDYXB0aW9uQXBw
ZWFyYW5jZVNldHRpbmdzQ2hhbmdlZE5vdGlmaWNhdGlvbigpCi0KLSNlbmRpZgotCi11c2luZyBu
YW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBIQVZFKE1FRElBX0FD
Q0VTU0lCSUxJVFlfRlJBTUVXT1JLKQotc3RhdGljIHZvaWQgdXNlckNhcHRpb25QcmVmZXJlbmNl
c0NoYW5nZWROb3RpZmljYXRpb25DYWxsYmFjayhDRk5vdGlmaWNhdGlvbkNlbnRlclJlZiwgdm9p
ZCogb2JzZXJ2ZXIsIENGU3RyaW5nUmVmLCBjb25zdCB2b2lkICosIENGRGljdGlvbmFyeVJlZikK
LXsKLSNpZiAhUExBVEZPUk0oSU9TKQotICAgIHN0YXRpY19jYXN0PENhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNYWMqPihvYnNlcnZlciktPmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKLSNlbHNl
Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIHN0YXRpY19jYXN0PENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNYWMqPihvYnNlcnZlciktPmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKLSAg
ICB9KTsKLSNlbmRpZgotfQotI2VuZGlmCi0KLUNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OkNh
cHRpb25Vc2VyUHJlZmVyZW5jZXNNYWMoUGFnZUdyb3VwKiBncm91cCkKLSAgICA6IENhcHRpb25V
c2VyUHJlZmVyZW5jZXMoZ3JvdXApCi0jaWYgSEFWRShNRURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1F
V09SSykKLSAgICAsIG1fbGlzdGVuaW5nRm9yUHJlZmVyZW5jZUNoYW5nZXMoZmFsc2UpCi0jZW5k
aWYKLXsKLX0KLQotQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6fkNhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNYWMoKQotewotI2lmIEhBVkUoTUVESUFfQUNDRVNTSUJJTElUWV9GUkFNRVdPUkspCi0g
ICAgaWYgKGtNQVhDYXB0aW9uQXBwZWFyYW5jZVNldHRpbmdzQ2hhbmdlZE5vdGlmaWNhdGlvbikK
LSAgICAgICAgQ0ZOb3RpZmljYXRpb25DZW50ZXJSZW1vdmVPYnNlcnZlcihDRk5vdGlmaWNhdGlv
bkNlbnRlckdldExvY2FsQ2VudGVyKCksIHRoaXMsIGtNQVhDYXB0aW9uQXBwZWFyYW5jZVNldHRp
bmdzQ2hhbmdlZE5vdGlmaWNhdGlvbiwgTlVMTCk7Ci0jZW5kaWYKLX0KLQotI2lmIEhBVkUoTUVE
SUFfQUNDRVNTSUJJTElUWV9GUkFNRVdPUkspCi0KLUNhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkNh
cHRpb25EaXNwbGF5TW9kZSBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpjYXB0aW9uRGlzcGxh
eU1vZGUoKSBjb25zdAotewotICAgIGlmICh0ZXN0aW5nTW9kZSgpIHx8ICFNZWRpYUFjY2Vzc2li
aWxpdHlMaWJyYXJ5KCkpCi0gICAgICAgIHJldHVybiBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpj
YXB0aW9uRGlzcGxheU1vZGUoKTsKLQotICAgIE1BQ2FwdGlvbkFwcGVhcmFuY2VEaXNwbGF5VHlw
ZSBkaXNwbGF5VHlwZSA9IE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXREaXNwbGF5VHlwZShrTUFDYXB0
aW9uQXBwZWFyYW5jZURvbWFpblVzZXIpOwotICAgIHN3aXRjaCAoZGlzcGxheVR5cGUpIHsKLSAg
ICBjYXNlIGtNQUNhcHRpb25BcHBlYXJhbmNlRGlzcGxheVR5cGVGb3JjZWRPbmx5OgotICAgICAg
ICByZXR1cm4gRm9yY2VkT25seTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIGtNQUNhcHRp
b25BcHBlYXJhbmNlRGlzcGxheVR5cGVBdXRvbWF0aWM6Ci0gICAgICAgIHJldHVybiBBdXRvbWF0
aWM7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBrTUFDYXB0aW9uQXBwZWFyYW5jZURpc3Bs
YXlUeXBlQWx3YXlzT246Ci0gICAgICAgIHJldHVybiBBbHdheXNPbjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEZvcmNlZE9u
bHk7Ci19Ci0gICAgCi12b2lkIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNldENhcHRpb25E
aXNwbGF5TW9kZShDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpDYXB0aW9uRGlzcGxheU1vZGUgbW9k
ZSkKLXsKLSAgICBpZiAodGVzdGluZ01vZGUoKSB8fCAhTWVkaWFBY2Nlc3NpYmlsaXR5TGlicmFy
eSgpKSB7Ci0gICAgICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnNldENhcHRpb25EaXNwbGF5
TW9kZShtb2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIE1BQ2FwdGlvbkFwcGVh
cmFuY2VEaXNwbGF5VHlwZSBkaXNwbGF5VHlwZSA9IGtNQUNhcHRpb25BcHBlYXJhbmNlRGlzcGxh
eVR5cGVGb3JjZWRPbmx5OwotICAgIHN3aXRjaCAobW9kZSkgewotICAgICAgICBjYXNlIEF1dG9t
YXRpYzoKLSAgICAgICAgICAgIGRpc3BsYXlUeXBlID0ga01BQ2FwdGlvbkFwcGVhcmFuY2VEaXNw
bGF5VHlwZUF1dG9tYXRpYzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZvcmNl
ZE9ubHk6Ci0gICAgICAgICAgICBkaXNwbGF5VHlwZSA9IGtNQUNhcHRpb25BcHBlYXJhbmNlRGlz
cGxheVR5cGVGb3JjZWRPbmx5OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQWx3
YXlzT246Ci0gICAgICAgICAgICBkaXNwbGF5VHlwZSA9IGtNQUNhcHRpb25BcHBlYXJhbmNlRGlz
cGxheVR5cGVBbHdheXNPbjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBNQUNhcHRpb25BcHBlYXJhbmNlU2V0RGlzcGxheVR5cGUoa01BQ2FwdGlvbkFw
cGVhcmFuY2VEb21haW5Vc2VyLCBkaXNwbGF5VHlwZSk7Ci19Ci0KLWJvb2wgQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01hYzo6dXNlclByZWZlcnNDYXB0aW9ucygpIGNvbnN0Ci17Ci0gICAgYm9vbCBj
YXB0aW9uU2V0dGluZyA9IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnVzZXJQcmVmZXJzQ2FwdGlv
bnMoKTsKLSAgICBpZiAoY2FwdGlvblNldHRpbmcgfHwgdGVzdGluZ01vZGUoKSB8fCAhTWVkaWFB
Y2Nlc3NpYmlsaXR5TGlicmFyeSgpKQotICAgICAgICByZXR1cm4gY2FwdGlvblNldHRpbmc7Ci0g
ICAgCi0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNhcHRpb25pbmdNZWRpYUNoYXJhY3Rlcmlz
dGljcyA9IGFkb3B0Q0YoTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlQcmVmZXJyZWRDYXB0aW9uaW5n
TWVkaWFDaGFyYWN0ZXJpc3RpY3Moa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2VyKSk7Ci0g
ICAgcmV0dXJuIGNhcHRpb25pbmdNZWRpYUNoYXJhY3RlcmlzdGljcyAmJiBDRkFycmF5R2V0Q291
bnQoY2FwdGlvbmluZ01lZGlhQ2hhcmFjdGVyaXN0aWNzLmdldCgpKTsKLX0KLQotYm9vbCBDYXB0
aW9uVXNlclByZWZlcmVuY2VzTWFjOjp1c2VyUHJlZmVyc1N1YnRpdGxlcygpIGNvbnN0Ci17Ci0g
ICAgYm9vbCBzdWJ0aXRsZXNTZXR0aW5nID0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6dXNlclBy
ZWZlcnNTdWJ0aXRsZXMoKTsKLSAgICBpZiAoc3VidGl0bGVzU2V0dGluZyB8fCB0ZXN0aW5nTW9k
ZSgpIHx8ICFNZWRpYUFjY2Vzc2liaWxpdHlMaWJyYXJ5KCkpCi0gICAgICAgIHJldHVybiBzdWJ0
aXRsZXNTZXR0aW5nOwotICAgIAotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBjYXB0aW9uaW5n
TWVkaWFDaGFyYWN0ZXJpc3RpY3MgPSBhZG9wdENGKE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5UHJl
ZmVycmVkQ2FwdGlvbmluZ01lZGlhQ2hhcmFjdGVyaXN0aWNzKGtNQUNhcHRpb25BcHBlYXJhbmNl
RG9tYWluVXNlcikpOwotICAgIHJldHVybiAhKGNhcHRpb25pbmdNZWRpYUNoYXJhY3RlcmlzdGlj
cyAmJiBDRkFycmF5R2V0Q291bnQoY2FwdGlvbmluZ01lZGlhQ2hhcmFjdGVyaXN0aWNzLmdldCgp
KSk7Ci19Ci0KLXZvaWQgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6c2V0SW50ZXJlc3RlZElu
Q2FwdGlvblByZWZlcmVuY2VDaGFuZ2VzKCkKLXsKLSAgICBpZiAoIU1lZGlhQWNjZXNzaWJpbGl0
eUxpYnJhcnkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFrTUFYQ2FwdGlvbkFwcGVh
cmFuY2VTZXR0aW5nc0NoYW5nZWROb3RpZmljYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmICghbV9saXN0ZW5pbmdGb3JQcmVmZXJlbmNlQ2hhbmdlcykgewotICAgICAgICBtX2xpc3Rl
bmluZ0ZvclByZWZlcmVuY2VDaGFuZ2VzID0gdHJ1ZTsKLSAgICAgICAgQ0ZOb3RpZmljYXRpb25D
ZW50ZXJBZGRPYnNlcnZlcihDRk5vdGlmaWNhdGlvbkNlbnRlckdldExvY2FsQ2VudGVyKCksIHRo
aXMsIHVzZXJDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkTm90aWZpY2F0aW9uQ2FsbGJhY2ssIGtN
QVhDYXB0aW9uQXBwZWFyYW5jZVNldHRpbmdzQ2hhbmdlZE5vdGlmaWNhdGlvbiwgTlVMTCwgQ0ZO
b3RpZmljYXRpb25TdXNwZW5zaW9uQmVoYXZpb3JDb2FsZXNjZSk7Ci0gICAgfQotICAgIAotICAg
IHVwZGF0ZUNhcHRpb25TdHlsZVNoZWV0T3ZlcmlkZSgpOwotfQotCi12b2lkIENhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNNYWM6OmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKQotewotICAgIGlmICht
X2xpc3RlbmluZ0ZvclByZWZlcmVuY2VDaGFuZ2VzKQotICAgICAgICB1cGRhdGVDYXB0aW9uU3R5
bGVTaGVldE92ZXJpZGUoKTsKLQotICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OmNhcHRpb25Q
cmVmZXJlbmNlc0NoYW5nZWQoKTsKLX0KLQotU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNN
YWM6OmNhcHRpb25zV2luZG93Q1NTKCkgY29uc3QKLXsKLSAgICBNQUNhcHRpb25BcHBlYXJhbmNl
QmVoYXZpb3IgYmVoYXZpb3I7Ci0gICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNvbG9yID0gYWRv
cHRDRihNQUNhcHRpb25BcHBlYXJhbmNlQ29weVdpbmRvd0NvbG9yKGtNQUNhcHRpb25BcHBlYXJh
bmNlRG9tYWluVXNlciwgJmJlaGF2aW9yKSk7Ci0KLSAgICBDb2xvciB3aW5kb3dDb2xvcihjb2xv
ci5nZXQoKSk7Ci0gICAgaWYgKCF3aW5kb3dDb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIHdpbmRv
d0NvbG9yID0gQ29sb3I6OnRyYW5zcGFyZW50OwotCi0gICAgYm9vbCBpbXBvcnRhbnQgPSBiZWhh
dmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWU7Ci0gICAgQ0dGbG9h
dCBvcGFjaXR5ID0gTUFDYXB0aW9uQXBwZWFyYW5jZUdldFdpbmRvd09wYWNpdHkoa01BQ2FwdGlv
bkFwcGVhcmFuY2VEb21haW5Vc2VyLCAmYmVoYXZpb3IpOwotICAgIGlmICghaW1wb3J0YW50KQot
ICAgICAgICBpbXBvcnRhbnQgPSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2
aW9yVXNlVmFsdWU7Ci0gICAgU3RyaW5nIHdpbmRvd1N0eWxlID0gY29sb3JQcm9wZXJ0eUNTUyhD
U1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgQ29sb3Iod2luZG93Q29sb3IucmVkKCksIHdpbmRv
d0NvbG9yLmdyZWVuKCksIHdpbmRvd0NvbG9yLmJsdWUoKSwgc3RhdGljX2Nhc3Q8aW50PihvcGFj
aXR5ICogMjU1KSksIGltcG9ydGFudCk7Ci0KLSAgICBpZiAoIW9wYWNpdHkpCi0gICAgICAgIHJl
dHVybiB3aW5kb3dTdHlsZTsKLQotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWls
ZGVyLmFwcGVuZCh3aW5kb3dTdHlsZSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoZ2V0UHJvcGVydHlO
YW1lU3RyaW5nKENTU1Byb3BlcnR5UGFkZGluZykpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCI6IC40
ZW0gIWltcG9ydGFudDsiKTsKLQotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0K
LVN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpjYXB0aW9uc0JhY2tncm91bmRDU1Mo
KSBjb25zdAotewotICAgIC8vIFRoaXMgZGVmYXVsdCB2YWx1ZSBtdXN0IGJlIHRoZSBzYW1lIGFz
IHRoZSBvbmUgc3BlY2lmaWVkIGluIG1lZGlhQ29udHJvbHMuY3NzIGZvciAtd2Via2l0LW1lZGlh
LXRleHQtdHJhY2stcGFzdC1ub2RlcwotICAgIC8vIGFuZCB3ZWJraXQtbWVkaWEtdGV4dC10cmFj
ay1mdXR1cmUtbm9kZXMuCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDb2xvciwgZGVmYXVsdEJh
Y2tncm91bmRDb2xvciwgKENvbG9yKDAsIDAsIDAsIDAuOCAqIDI1NSkpKTsKLQotICAgIE1BQ2Fw
dGlvbkFwcGVhcmFuY2VCZWhhdmlvciBiZWhhdmlvcjsKLQotICAgIFJldGFpblB0cjxDR0NvbG9y
UmVmPiBjb2xvciA9IGFkb3B0Q0YoTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlCYWNrZ3JvdW5kQ29s
b3Ioa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2VyLCAmYmVoYXZpb3IpKTsKLSAgICBDb2xv
ciBiYWNrZ3JvdW5kQ29sb3IoY29sb3IuZ2V0KCkpOwotICAgIGlmICghYmFja2dyb3VuZENvbG9y
LmlzVmFsaWQoKSkKLSAgICAgICAgYmFja2dyb3VuZENvbG9yID0gZGVmYXVsdEJhY2tncm91bmRD
b2xvcjsKLQotICAgIGJvb2wgaW1wb3J0YW50ID0gYmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVh
cmFuY2VCZWhhdmlvclVzZVZhbHVlOwotICAgIENHRmxvYXQgb3BhY2l0eSA9IE1BQ2FwdGlvbkFw
cGVhcmFuY2VHZXRCYWNrZ3JvdW5kT3BhY2l0eShrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVz
ZXIsICZiZWhhdmlvcik7Ci0gICAgaWYgKCFpbXBvcnRhbnQpCi0gICAgICAgIGltcG9ydGFudCA9
IGJlaGF2aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZTsKLSAgICBy
ZXR1cm4gY29sb3JQcm9wZXJ0eUNTUyhDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgQ29sb3Io
YmFja2dyb3VuZENvbG9yLnJlZCgpLCBiYWNrZ3JvdW5kQ29sb3IuZ3JlZW4oKSwgYmFja2dyb3Vu
ZENvbG9yLmJsdWUoKSwgc3RhdGljX2Nhc3Q8aW50PihvcGFjaXR5ICogMjU1KSksIGltcG9ydGFu
dCk7Ci19Ci0KLUNvbG9yIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OmNhcHRpb25zVGV4dENv
bG9yKGJvb2wmIGltcG9ydGFudCkgY29uc3QKLXsKLSAgICBNQUNhcHRpb25BcHBlYXJhbmNlQmVo
YXZpb3IgYmVoYXZpb3I7Ci0gICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNvbG9yID0gYWRvcHRD
RihNQUNhcHRpb25BcHBlYXJhbmNlQ29weUZvcmVncm91bmRDb2xvcihrTUFDYXB0aW9uQXBwZWFy
YW5jZURvbWFpblVzZXIsICZiZWhhdmlvcikpOwotICAgIENvbG9yIHRleHRDb2xvcihjb2xvci5n
ZXQoKSk7Ci0gICAgaWYgKCF0ZXh0Q29sb3IuaXNWYWxpZCgpKQotICAgICAgICAvLyBUaGlzIGRl
ZmF1bHQgdmFsdWUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgb25lIHNwZWNpZmllZCBpbiBtZWRp
YUNvbnRyb2xzLmNzcyBmb3IgLXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNrLWNvbnRhaW5lci4KLSAg
ICAgICAgdGV4dENvbG9yID0gQ29sb3I6OndoaXRlOwotICAgIAotICAgIGltcG9ydGFudCA9IGJl
aGF2aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZTsKLSAgICBDR0Zs
b2F0IG9wYWNpdHkgPSBNQUNhcHRpb25BcHBlYXJhbmNlR2V0Rm9yZWdyb3VuZE9wYWNpdHkoa01B
Q2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2VyLCAmYmVoYXZpb3IpOwotICAgIGlmICghaW1wb3J0
YW50KQotICAgICAgICBpbXBvcnRhbnQgPSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5j
ZUJlaGF2aW9yVXNlVmFsdWU7Ci0gICAgcmV0dXJuIENvbG9yKHRleHRDb2xvci5yZWQoKSwgdGV4
dENvbG9yLmdyZWVuKCksIHRleHRDb2xvci5ibHVlKCksIHN0YXRpY19jYXN0PGludD4ob3BhY2l0
eSAqIDI1NSkpOwotfQotICAgIAotU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OmNh
cHRpb25zVGV4dENvbG9yQ1NTKCkgY29uc3QKLXsKLSAgICBib29sIGltcG9ydGFudDsKLSAgICBD
b2xvciB0ZXh0Q29sb3IgPSBjYXB0aW9uc1RleHRDb2xvcihpbXBvcnRhbnQpOwotCi0gICAgaWYg
KCF0ZXh0Q29sb3IuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLQot
ICAgIHJldHVybiBjb2xvclByb3BlcnR5Q1NTKENTU1Byb3BlcnR5Q29sb3IsIHRleHRDb2xvciwg
aW1wb3J0YW50KTsKLX0KLSAgICAKLVN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjp3
aW5kb3dSb3VuZGVkQ29ybmVyUmFkaXVzQ1NTKCkgY29uc3QKLXsKLSAgICBNQUNhcHRpb25BcHBl
YXJhbmNlQmVoYXZpb3IgYmVoYXZpb3I7Ci0gICAgQ0dGbG9hdCByYWRpdXMgPSBNQUNhcHRpb25B
cHBlYXJhbmNlR2V0V2luZG93Um91bmRlZENvcm5lclJhZGl1cyhrTUFDYXB0aW9uQXBwZWFyYW5j
ZURvbWFpblVzZXIsICZiZWhhdmlvcik7Ci0gICAgaWYgKCFyYWRpdXMpCi0gICAgICAgIHJldHVy
biBlbXB0eVN0cmluZygpOwotCi0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJ1aWxk
ZXIuYXBwZW5kKGdldFByb3BlcnR5TmFtZVN0cmluZyhDU1NQcm9wZXJ0eUJvcmRlclJhZGl1cykp
OwotICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCI6JS4wMmZweCIsIHJhZGl1cykp
OwotICAgIGlmIChiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFs
dWUpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgIWltcG9ydGFudCIpOwotICAgIGJ1aWxkZXIu
YXBwZW5kKCc7Jyk7Ci0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotfQotICAgIAot
Q29sb3IgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6Y2FwdGlvbnNFZGdlQ29sb3JGb3JUZXh0
Q29sb3IoY29uc3QgQ29sb3ImIHRleHRDb2xvcikgY29uc3QKLXsKLSAgICBpbnQgZGlzdGFuY2VG
cm9tV2hpdGUgPSBkaWZmZXJlbmNlU3F1YXJlZCh0ZXh0Q29sb3IsIENvbG9yOjp3aGl0ZSk7Ci0g
ICAgaW50IGRpc3RhbmNlRnJvbUJsYWNrID0gZGlmZmVyZW5jZVNxdWFyZWQodGV4dENvbG9yLCBD
b2xvcjo6YmxhY2spOwotICAgIAotICAgIGlmIChkaXN0YW5jZUZyb21XaGl0ZSA8IGRpc3RhbmNl
RnJvbUJsYWNrKQotICAgICAgICByZXR1cm4gdGV4dENvbG9yLmRhcmsoKTsKLSAgICAKLSAgICBy
ZXR1cm4gdGV4dENvbG9yLmxpZ2h0KCk7Ci19Ci0KLVN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWFjOjpjc3NQcm9wZXJ0eVdpdGhUZXh0RWRnZUNvbG9yKENTU1Byb3BlcnR5SUQgaWQsIGNv
bnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IENvbG9yJiB0ZXh0Q29sb3IsIGJvb2wgaW1wb3J0YW50
KSBjb25zdAotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAKLSAgICBidWlsZGVy
LmFwcGVuZChnZXRQcm9wZXJ0eU5hbWVTdHJpbmcoaWQpKTsKLSAgICBidWlsZGVyLmFwcGVuZCgn
OicpOwotICAgIGJ1aWxkZXIuYXBwZW5kKHZhbHVlKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnICcp
OwotICAgIGJ1aWxkZXIuYXBwZW5kKGNhcHRpb25zRWRnZUNvbG9yRm9yVGV4dENvbG9yKHRleHRD
b2xvcikuc2VyaWFsaXplZCgpKTsKLSAgICBpZiAoaW1wb3J0YW50KQotICAgICAgICBidWlsZGVy
LmFwcGVuZCgiICFpbXBvcnRhbnQiKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnOycpOwotICAgIAot
ICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzTWFjOjpjb2xvclByb3BlcnR5Q1NTKENTU1Byb3BlcnR5SUQgaWQsIGNvbnN0IENv
bG9yJiBjb2xvciwgYm9vbCBpbXBvcnRhbnQpIGNvbnN0Ci17Ci0gICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyOwotICAgIAotICAgIGJ1aWxkZXIuYXBwZW5kKGdldFByb3BlcnR5TmFtZVN0cmluZyhp
ZCkpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCc6Jyk7Ci0gICAgYnVpbGRlci5hcHBlbmQoY29sb3Iu
c2VyaWFsaXplZCgpKTsKLSAgICBpZiAoaW1wb3J0YW50KQotICAgICAgICBidWlsZGVyLmFwcGVu
ZCgiICFpbXBvcnRhbnQiKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnOycpOwotICAgIAotICAgIHJl
dHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWFjOjpjYXB0aW9uc1RleHRFZGdlQ1NTKCkgY29uc3QKLXsKLSAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IFN0cmluZywgZWRnZVN0eWxlUmFpc2VkLCAoIiAtLjA1ZW0gLS4wNWVtIDAg
IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIERFRklORV9TVEFUSUNfTE9D
QUwoY29uc3QgU3RyaW5nLCBlZGdlU3R5bGVEZXByZXNzZWQsICgiIC4wNWVtIC4wNWVtIDAgIiwg
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Y29uc3QgU3RyaW5nLCBlZGdlU3R5bGVEcm9wU2hhZG93LCAoIiAuMDc1ZW0gLjA3NWVtIDAgIiwg
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Y29uc3QgU3RyaW5nLCBlZGdlU3R5bGVVbmlmb3JtLCAoIiAuMDNlbSAiLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSk7Ci0KLSAgICBib29sIHVudXNlZDsKLSAgICBDb2xvciBjb2xvciA9
IGNhcHRpb25zVGV4dENvbG9yKHVudXNlZCk7Ci0gICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCi0g
ICAgICAgIGNvbG9yLnNldE5hbWVkQ29sb3IoImJsYWNrIik7Ci0gICAgY29sb3IgPSBjYXB0aW9u
c0VkZ2VDb2xvckZvclRleHRDb2xvcihjb2xvcik7Ci0KLSAgICBNQUNhcHRpb25BcHBlYXJhbmNl
QmVoYXZpb3IgYmVoYXZpb3I7Ci0gICAgTUFDYXB0aW9uQXBwZWFyYW5jZVRleHRFZGdlU3R5bGUg
dGV4dEVkZ2VTdHlsZSA9IE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRUZXh0RWRnZVN0eWxlKGtNQUNh
cHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJlaGF2aW9yKTsKLSAgICBzd2l0Y2ggKHRleHRF
ZGdlU3R5bGUpIHsKLSAgICAgICAgY2FzZSBrTUFDYXB0aW9uQXBwZWFyYW5jZVRleHRFZGdlU3R5
bGVVbmRlZmluZWQ6Ci0gICAgICAgIGNhc2Uga01BQ2FwdGlvbkFwcGVhcmFuY2VUZXh0RWRnZVN0
eWxlTm9uZToKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2Uga01BQ2FwdGlvbkFwcGVhcmFuY2VUZXh0RWRnZVN0eWxlUmFpc2VkOgot
ICAgICAgICAgICAgcmV0dXJuIGNzc1Byb3BlcnR5V2l0aFRleHRFZGdlQ29sb3IoQ1NTUHJvcGVy
dHlUZXh0U2hhZG93LCBlZGdlU3R5bGVSYWlzZWQsIGNvbG9yLCBiZWhhdmlvciA9PSBrTUFDYXB0
aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWUpOwotICAgICAgICBjYXNlIGtNQUNhcHRpb25B
cHBlYXJhbmNlVGV4dEVkZ2VTdHlsZURlcHJlc3NlZDoKLSAgICAgICAgICAgIHJldHVybiBjc3NQ
cm9wZXJ0eVdpdGhUZXh0RWRnZUNvbG9yKENTU1Byb3BlcnR5VGV4dFNoYWRvdywgZWRnZVN0eWxl
RGVwcmVzc2VkLCBjb2xvciwgYmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlv
clVzZVZhbHVlKTsKLSAgICAgICAgY2FzZSBrTUFDYXB0aW9uQXBwZWFyYW5jZVRleHRFZGdlU3R5
bGVEcm9wU2hhZG93OgotICAgICAgICAgICAgcmV0dXJuIGNzc1Byb3BlcnR5V2l0aFRleHRFZGdl
Q29sb3IoQ1NTUHJvcGVydHlUZXh0U2hhZG93LCBlZGdlU3R5bGVEcm9wU2hhZG93LCBjb2xvciwg
YmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlKTsKLSAgICAg
ICAgY2FzZSBrTUFDYXB0aW9uQXBwZWFyYW5jZVRleHRFZGdlU3R5bGVVbmlmb3JtOgotICAgICAg
ICAgICAgcmV0dXJuIGNzc1Byb3BlcnR5V2l0aFRleHRFZGdlQ29sb3IoQ1NTUHJvcGVydHlXZWJr
aXRUZXh0U3Ryb2tlLCBlZGdlU3R5bGVVbmlmb3JtLCBjb2xvciwgYmVoYXZpb3IgPT0ga01BQ2Fw
dGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlKTsKLSAgICAgICAgICAgIAotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci19Ci0KLVN0cmlu
ZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpjYXB0aW9uc0RlZmF1bHRGb250Q1NTKCkgY29u
c3QKLXsKLSAgICBNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgYmVoYXZpb3I7Ci0gICAgCi0g
ICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IGZvbnQgPSBhZG9wdENGKE1BQ2FwdGlv
bkFwcGVhcmFuY2VDb3B5Rm9udERlc2NyaXB0b3JGb3JTdHlsZShrTUFDYXB0aW9uQXBwZWFyYW5j
ZURvbWFpblVzZXIsICZiZWhhdmlvciwga01BQ2FwdGlvbkFwcGVhcmFuY2VGb250U3R5bGVEZWZh
dWx0KSk7Ci0gICAgaWYgKCFmb250KQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLQot
ICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IG5hbWUgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JD
b3B5QXR0cmlidXRlKGZvbnQuZ2V0KCksIGtDVEZvbnROYW1lQXR0cmlidXRlKSk7Ci0gICAgaWYg
KCFuYW1lKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAKLSAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7Ci0gICAgCi0gICAgYnVpbGRlci5hcHBlbmQoZ2V0UHJvcGVydHlOYW1l
U3RyaW5nKENTU1Byb3BlcnR5Rm9udEZhbWlseSkpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCI6IFwi
Iik7Ci0gICAgYnVpbGRlci5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KG5hbWUuZ2V0
KCkpKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnIicpOwotICAgIGlmIChiZWhhdmlvciA9PSBrTUFD
YXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWUpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCIgIWltcG9ydGFudCIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCc7Jyk7Ci0gICAgCi0gICAgcmV0
dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLX0KLQotZmxvYXQgQ2FwdGlvblVzZXJQcmVmZXJlbmNl
c01hYzo6Y2FwdGlvbkZvbnRTaXplU2NhbGVBbmRJbXBvcnRhbmNlKGJvb2wmIGltcG9ydGFudCkg
Y29uc3QKLXsKLSAgICBpZiAodGVzdGluZ01vZGUoKSB8fCAhTWVkaWFBY2Nlc3NpYmlsaXR5TGli
cmFyeSgpKQotICAgICAgICByZXR1cm4gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6Y2FwdGlvbkZv
bnRTaXplU2NhbGVBbmRJbXBvcnRhbmNlKGltcG9ydGFudCk7Ci0KLSAgICBNQUNhcHRpb25BcHBl
YXJhbmNlQmVoYXZpb3IgYmVoYXZpb3I7Ci0gICAgQ0dGbG9hdCBjaGFyYWN0ZXJTY2FsZSA9IENh
cHRpb25Vc2VyUHJlZmVyZW5jZXM6OmNhcHRpb25Gb250U2l6ZVNjYWxlQW5kSW1wb3J0YW5jZShp
bXBvcnRhbnQpOwotICAgIENHRmxvYXQgc2NhbGVBZGp1c3RtZW50ID0gTUFDYXB0aW9uQXBwZWFy
YW5jZUdldFJlbGF0aXZlQ2hhcmFjdGVyU2l6ZShrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVz
ZXIsICZiZWhhdmlvcik7Ci0KLSAgICBpZiAoIXNjYWxlQWRqdXN0bWVudCkKLSAgICAgICAgcmV0
dXJuIGNoYXJhY3RlclNjYWxlOwotCi0gICAgaW1wb3J0YW50ID0gYmVoYXZpb3IgPT0ga01BQ2Fw
dGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlOwotI2lmIGRlZmluZWQoX19MUDY0X18pICYm
IF9fTFA2NF9fCi0gICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoc2NhbGVBZGp1c3Rt
ZW50ICogY2hhcmFjdGVyU2NhbGUpOwotI2Vsc2UKLSAgICByZXR1cm4gc2NhbGVBZGp1c3RtZW50
ICogY2hhcmFjdGVyU2NhbGU7Ci0jZW5kaWYKLX0KLQotdm9pZCBDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWFjOjpzZXRQcmVmZXJyZWRMYW5ndWFnZShjb25zdCBTdHJpbmcmIGxhbmd1YWdlKQotewot
ICAgIGlmICh0ZXN0aW5nTW9kZSgpIHx8ICFNZWRpYUFjY2Vzc2liaWxpdHlMaWJyYXJ5KCkpIHsK
LSAgICAgICAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6c2V0UHJlZmVycmVkTGFuZ3VhZ2UobGFu
Z3VhZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgTUFDYXB0aW9uQXBwZWFyYW5j
ZUFkZFNlbGVjdGVkTGFuZ3VhZ2Uoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2VyLCBsYW5n
dWFnZS5jcmVhdGVDRlN0cmluZygpLmdldCgpKTsKLX0KLQotVmVjdG9yPFN0cmluZz4gQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01hYzo6cHJlZmVycmVkTGFuZ3VhZ2VzKCkgY29uc3QKLXsKLSAgICBp
ZiAodGVzdGluZ01vZGUoKSB8fCAhTWVkaWFBY2Nlc3NpYmlsaXR5TGlicmFyeSgpKQotICAgICAg
ICByZXR1cm4gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6cHJlZmVycmVkTGFuZ3VhZ2VzKCk7Ci0K
LSAgICBWZWN0b3I8U3RyaW5nPiBwbGF0Zm9ybUxhbmd1YWdlcyA9IHBsYXRmb3JtVXNlclByZWZl
cnJlZExhbmd1YWdlcygpOwotICAgIFZlY3RvcjxTdHJpbmc+IG92ZXJyaWRlID0gdXNlclByZWZl
cnJlZExhbmd1YWdlc092ZXJyaWRlKCk7Ci0gICAgaWYgKCFvdmVycmlkZS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgaWYgKHBsYXRmb3JtTGFuZ3VhZ2VzLnNpemUoKSAhPSBvdmVycmlkZS5zaXplKCkp
Ci0gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGU7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgb3ZlcnJpZGUuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChvdmVycmlkZVtp
XSAhPSBwbGF0Zm9ybUxhbmd1YWdlc1tpXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3ZlcnJp
ZGU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBDRkluZGV4IGxhbmd1YWdlQ291bnQgPSAwOwot
ICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBsYW5ndWFnZXMgPSBhZG9wdENGKE1BQ2FwdGlvbkFw
cGVhcmFuY2VDb3B5U2VsZWN0ZWRMYW5ndWFnZXMoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5V
c2VyKSk7Ci0gICAgaWYgKGxhbmd1YWdlcykKLSAgICAgICAgbGFuZ3VhZ2VDb3VudCA9IENGQXJy
YXlHZXRDb3VudChsYW5ndWFnZXMuZ2V0KCkpOwotCi0gICAgaWYgKCFsYW5ndWFnZUNvdW50KQot
ICAgICAgICByZXR1cm4gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6cHJlZmVycmVkTGFuZ3VhZ2Vz
KCk7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzOwotICAgIHVz
ZXJQcmVmZXJyZWRMYW5ndWFnZXMucmVzZXJ2ZUNhcGFjaXR5KGxhbmd1YWdlQ291bnQgKyBwbGF0
Zm9ybUxhbmd1YWdlcy5zaXplKCkpOwotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGxhbmd1
YWdlQ291bnQ7IGkrKykKLSAgICAgICAgdXNlclByZWZlcnJlZExhbmd1YWdlcy5hcHBlbmQoc3Rh
dGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgobGFuZ3VhZ2VzLmdl
dCgpLCBpKSkpOwotCi0gICAgdXNlclByZWZlcnJlZExhbmd1YWdlcy5hcHBlbmRWZWN0b3IocGxh
dGZvcm1MYW5ndWFnZXMpOwotCi0gICAgcmV0dXJuIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXM7Ci19
Ci0jZW5kaWYgIC8vIEhBVkUoTUVESUFfQUNDRVNTSUJJTElUWV9GUkFNRVdPUkspCi0KLVN0cmlu
ZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpjYXB0aW9uc1N0eWxlU2hlZXRPdmVycmlkZSgp
IGNvbnN0Ci17Ci0gICAgaWYgKHRlc3RpbmdNb2RlKCkpCi0gICAgICAgIHJldHVybiBDYXB0aW9u
VXNlclByZWZlcmVuY2VzOjpjYXB0aW9uc1N0eWxlU2hlZXRPdmVycmlkZSgpOwotICAgIAotICAg
IFN0cmluZ0J1aWxkZXIgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQ7Ci0KLSNpZiBIQVZFKE1F
RElBX0FDQ0VTU0lCSUxJVFlfRlJBTUVXT1JLKQotICAgIGlmICghTWVkaWFBY2Nlc3NpYmlsaXR5
TGlicmFyeSgpKQotICAgICAgICByZXR1cm4gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6Y2FwdGlv
bnNTdHlsZVNoZWV0T3ZlcnJpZGUoKTsKLSAgICAKLSAgICBTdHJpbmcgY2FwdGlvbnNDb2xvciA9
IGNhcHRpb25zVGV4dENvbG9yQ1NTKCk7Ci0gICAgU3RyaW5nIGVkZ2VTdHlsZSA9IGNhcHRpb25z
VGV4dEVkZ2VDU1MoKTsKLSAgICBTdHJpbmcgZm9udE5hbWUgPSBjYXB0aW9uc0RlZmF1bHRGb250
Q1NTKCk7Ci0gICAgU3RyaW5nIGJhY2tncm91bmQgPSBjYXB0aW9uc0JhY2tncm91bmRDU1MoKTsK
LSAgICBpZiAoIWJhY2tncm91bmQuaXNFbXB0eSgpIHx8ICFjYXB0aW9uc0NvbG9yLmlzRW1wdHko
KSB8fCAhZWRnZVN0eWxlLmlzRW1wdHkoKSB8fCAhZm9udE5hbWUuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgiIHZpZGVvOjoiKTsKLSAgICAg
ICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKFRleHRUcmFja0N1ZTo6Y3VlU2hh
ZG93UHNldWRvSWQoKSk7Ci0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVu
ZCgneycpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFiYWNrZ3JvdW5kLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZChiYWNrZ3JvdW5kKTsK
LSAgICAgICAgaWYgKCFjYXB0aW9uc0NvbG9yLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNhcHRp
b25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZChjYXB0aW9uc0NvbG9yKTsKLSAgICAgICAgaWYg
KCFlZGdlU3R5bGUuaXNFbXB0eSgpKQotICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxl
U2hlZXQuYXBwZW5kKGVkZ2VTdHlsZSk7Ci0gICAgICAgIGlmICghZm9udE5hbWUuaXNFbXB0eSgp
KQotICAgICAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKGZvbnROYW1l
KTsKLSAgICAgICAgCi0gICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgn
fScpOwotICAgIH0KLSAgICAKLSAgICBTdHJpbmcgd2luZG93Q29sb3IgPSBjYXB0aW9uc1dpbmRv
d0NTUygpOwotICAgIFN0cmluZyB3aW5kb3dDb3JuZXJSYWRpdXMgPSB3aW5kb3dSb3VuZGVkQ29y
bmVyUmFkaXVzQ1NTKCk7Ci0gICAgaWYgKCF3aW5kb3dDb2xvci5pc0VtcHR5KCkgfHwgIXdpbmRv
d0Nvcm5lclJhZGl1cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxl
U2hlZXQuYXBwZW5kKCIgdmlkZW86OiIpOwotICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVT
aGVldC5hcHBlbmQoVGV4dFRyYWNrQ3VlQm94Ojp0ZXh0VHJhY2tDdWVCb3hTaGFkb3dQc2V1ZG9J
ZCgpKTsKLSAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKCd7Jyk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoIXdpbmRvd0NvbG9yLmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCh3aW5kb3dDb2xvcik7Ci0gICAgICAg
IGlmICghd2luZG93Q29ybmVyUmFkaXVzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNhcHRpb25z
T3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCh3aW5kb3dDb3JuZXJSYWRpdXMpOwotICAgICAgICAK
LSAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hlZXQuYXBwZW5kKCd9Jyk7Ci0gICAgfQot
I2VuZGlmICAvLyBIQVZFKE1FRElBX0FDQ0VTU0lCSUxJVFlfRlJBTUVXT1JLKQotCi0gICAgTE9H
KE1lZGlhLCAiQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6Y2FwdGlvbnNTdHlsZVNoZWV0T3Zl
cnJpZGVTZXR0aW5nIHN5dGxlIHRvOlxuJXMiLCBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC50
b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgcmV0dXJuIGNhcHRpb25zT3ZlcnJpZGVT
dHlsZVNoZWV0LnRvU3RyaW5nKCk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgbGFuZ3VhZ2VJZGVudGlm
aWVyKGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2VDb2RlKQotewotICAgIGlmIChsYW5ndWFnZUNvZGUu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbGFuZ3VhZ2VDb2RlOwotCi0gICAgU3RyaW5nIGxv
d2VyY2FzZUxhbmd1YWdlQ29kZSA9IGxhbmd1YWdlQ29kZS5sb3dlcigpOwotCi0gICAgLy8gTmVl
ZCAyVSBoZXJlIHRvIGRpc2FtYmlndWF0ZSBTdHJpbmc6Om9wZXJhdG9yW10gZnJvbSBvcGVyYXRv
cihOU1N0cmluZyosIGludClbXSBpbiBhIHByb2R1Y3Rpb24gYnVpbGQuCi0gICAgaWYgKGxvd2Vy
Y2FzZUxhbmd1YWdlQ29kZS5sZW5ndGgoKSA+PSAzICYmIChsb3dlcmNhc2VMYW5ndWFnZUNvZGVb
MlVdID09ICdfJyB8fCBsb3dlcmNhc2VMYW5ndWFnZUNvZGVbMlVdID09ICctJykpCi0gICAgICAg
IGxvd2VyY2FzZUxhbmd1YWdlQ29kZS50cnVuY2F0ZSgyKTsKLQotICAgIHJldHVybiBsb3dlcmNh
c2VMYW5ndWFnZUNvZGU7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgdHJhY2tEaXNwbGF5TmFtZShUZXh0
VHJhY2sqIHRyYWNrKQotewotICAgIGlmICh0cmFjayA9PSBUZXh0VHJhY2s6OmNhcHRpb25NZW51
T2ZmSXRlbSgpKQotICAgICAgICByZXR1cm4gdGV4dFRyYWNrT2ZmTWVudUl0ZW1UZXh0KCk7Ci0g
ICAgaWYgKHRyYWNrID09IFRleHRUcmFjazo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCkpCi0g
ICAgICAgIHJldHVybiB0ZXh0VHJhY2tBdXRvbWF0aWNNZW51SXRlbVRleHQoKTsKLQotICAgIFN0
cmluZ0J1aWxkZXIgZGlzcGxheU5hbWU7Ci0gICAgU3RyaW5nIGxhYmVsID0gdHJhY2stPmxhYmVs
KCk7Ci0gICAgU3RyaW5nIHRyYWNrTGFuZ3VhZ2VJZGVudGlmaWVyID0gdHJhY2stPmxhbmd1YWdl
KCk7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZMb2NhbGVSZWY+IGN1cnJlbnRMb2NhbGUgPSBhZG9wdENG
KENGTG9jYWxlQ29weUN1cnJlbnQoKSk7Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBsb2Nh
bGVJZGVudGlmaWVyID0gYWRvcHRDRihDRkxvY2FsZUNyZWF0ZUNhbm9uaWNhbExvY2FsZUlkZW50
aWZpZXJGcm9tU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHRyYWNrTGFuZ3VhZ2VJZGVudGlm
aWVyLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IGxhbmd1YWdlQ0YgPSBhZG9wdENGKENGTG9jYWxlQ29weURpc3BsYXlOYW1lRm9yUHJvcGVydHlW
YWx1ZShjdXJyZW50TG9jYWxlLmdldCgpLCBrQ0ZMb2NhbGVMYW5ndWFnZUNvZGUsIGxvY2FsZUlk
ZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBTdHJpbmcgbGFuZ3VhZ2UgPSBsYW5ndWFnZUNGLmdldCgp
OwotICAgIGlmICghbGFiZWwuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChsYW5ndWFnZS5pc0Vt
cHR5KCkgfHwgbGFiZWwuY29udGFpbnMobGFuZ3VhZ2UpKQotICAgICAgICAgICAgZGlzcGxheU5h
bWUuYXBwZW5kKGxhYmVsKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiBsb2NhbGVEaWN0ID0gYWRvcHRDRihDRkxvY2FsZUNyZWF0ZUNvbXBv
bmVudHNGcm9tTG9jYWxlSWRlbnRpZmllcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBsb2NhbGVJZGVu
dGlmaWVyLmdldCgpKSk7Ci0gICAgICAgICAgICBpZiAobG9jYWxlRGljdCkgewotICAgICAgICAg
ICAgICAgIENGU3RyaW5nUmVmIGNvdW50cnlDb2RlID0gMDsKLSAgICAgICAgICAgICAgICBTdHJp
bmcgY291bnRyeU5hbWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQ0ZEaWN0
aW9uYXJ5R2V0VmFsdWVJZlByZXNlbnQobG9jYWxlRGljdC5nZXQoKSwga0NGTG9jYWxlQ291bnRy
eUNvZGUsIChjb25zdCB2b2lkICoqKSZjb3VudHJ5Q29kZSk7Ci0gICAgICAgICAgICAgICAgaWYg
KGNvdW50cnlDb2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gY291bnRyeU5hbWVDRiA9IGFkb3B0Q0YoQ0ZMb2NhbGVDb3B5RGlzcGxheU5hbWVGb3JQcm9w
ZXJ0eVZhbHVlKGN1cnJlbnRMb2NhbGUuZ2V0KCksIGtDRkxvY2FsZUNvdW50cnlDb2RlLCBjb3Vu
dHJ5Q29kZSkpOwotICAgICAgICAgICAgICAgICAgICBjb3VudHJ5TmFtZSA9IGNvdW50cnlOYW1l
Q0YuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGlmICghY291bnRyeU5hbWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBk
aXNwbGF5TmFtZS5hcHBlbmQodGV4dFRyYWNrQ291bnRyeUFuZExhbmd1YWdlTWVudUl0ZW1UZXh0
KGxhYmVsLCBjb3VudHJ5TmFtZSwgbGFuZ3VhZ2UpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lLmFwcGVuZCh0ZXh0VHJhY2tMYW5ndWFnZU1l
bnVJdGVtVGV4dChsYWJlbCwgbGFuZ3VhZ2UpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIFN0cmluZyBsYW5ndWFnZUFuZExvY2FsZSA9IENGTG9jYWxl
Q29weURpc3BsYXlOYW1lRm9yUHJvcGVydHlWYWx1ZShjdXJyZW50TG9jYWxlLmdldCgpLCBrQ0ZM
b2NhbGVJZGVudGlmaWVyLCB0cmFja0xhbmd1YWdlSWRlbnRpZmllci5jcmVhdGVDRlN0cmluZygp
LmdldCgpKTsKLSAgICAgICAgaWYgKCFsYW5ndWFnZUFuZExvY2FsZS5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBkaXNwbGF5TmFtZS5hcHBlbmQobGFuZ3VhZ2VBbmRMb2NhbGUpOwotICAgICAgICBl
bHNlIGlmICghbGFuZ3VhZ2UuaXNFbXB0eSgpKQotICAgICAgICAgICAgZGlzcGxheU5hbWUuYXBw
ZW5kKGxhbmd1YWdlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGlzcGxheU5hbWUuYXBw
ZW5kKGxvY2FsZUlkZW50aWZpZXIuZ2V0KCkpOwotICAgIH0KLSAgICAKLSAgICBpZiAoZGlzcGxh
eU5hbWUuaXNFbXB0eSgpKQotICAgICAgICBkaXNwbGF5TmFtZS5hcHBlbmQodGV4dFRyYWNrTm9M
YWJlbFRleHQoKSk7Ci0gICAgCi0gICAgaWYgKHRyYWNrLT5pc0Vhc3lUb1JlYWQoKSkKLSAgICAg
ICAgcmV0dXJuIGVhc3lSZWFkZXJUcmFja01lbnVJdGVtVGV4dChkaXNwbGF5TmFtZS50b1N0cmlu
ZygpKTsKLSAgICAKLSAgICBpZiAodHJhY2stPmlzQ2xvc2VkQ2FwdGlvbnMoKSkKLSAgICAgICAg
cmV0dXJuIGNsb3NlZENhcHRpb25UcmFja01lbnVJdGVtVGV4dChkaXNwbGF5TmFtZS50b1N0cmlu
ZygpKTsKLQotICAgIGlmICh0cmFjay0+aXNTREgoKSkKLSAgICAgICAgcmV0dXJuIHNkaFRyYWNr
TWVudUl0ZW1UZXh0KGRpc3BsYXlOYW1lLnRvU3RyaW5nKCkpOwotCi0gICAgcmV0dXJuIGRpc3Bs
YXlOYW1lLnRvU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFj
OjpkaXNwbGF5TmFtZUZvclRyYWNrKFRleHRUcmFjayogdHJhY2spIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHRyYWNrRGlzcGxheU5hbWUodHJhY2spOwotfQotCi1pbnQgQ2FwdGlvblVzZXJQcmVmZXJl
bmNlc01hYzo6dGV4dFRyYWNrU2VsZWN0aW9uU2NvcmUoVGV4dFRyYWNrKiB0cmFjaywgSFRNTE1l
ZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KSBjb25zdAotewotICAgIENhcHRpb25EaXNwbGF5TW9k
ZSBkaXNwbGF5TW9kZSA9IGNhcHRpb25EaXNwbGF5TW9kZSgpOwotICAgIGJvb2wgbGVnYWN5T3Zl
cnJpZGUgPSBtZWRpYUVsZW1lbnQtPndlYmtpdENsb3NlZENhcHRpb25zVmlzaWJsZSgpOwotICAg
IGlmIChkaXNwbGF5TW9kZSA9PSBBbHdheXNPbiAmJiAoIXVzZXJQcmVmZXJzU3VidGl0bGVzKCkg
JiYgIXVzZXJQcmVmZXJzQ2FwdGlvbnMoKSAmJiAhbGVnYWN5T3ZlcnJpZGUpKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICBpZiAodHJhY2stPmtpbmQoKSAhPSBUZXh0VHJhY2s6OmNhcHRpb25zS2V5
d29yZCgpICYmIHRyYWNrLT5raW5kKCkgIT0gVGV4dFRyYWNrOjpzdWJ0aXRsZXNLZXl3b3JkKCkg
JiYgdHJhY2stPmtpbmQoKSAhPSBUZXh0VHJhY2s6OmZvcmNlZEtleXdvcmQoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgaWYgKCF0cmFjay0+aXNNYWluUHJvZ3JhbUNvbnRlbnQoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBib29sIHRyYWNrSGFzT25seUZvcmNlZFN1YnRpdGxlcyA9IHRy
YWNrLT5jb250YWluc09ubHlGb3JjZWRTdWJ0aXRsZXMoKTsKLSAgICBpZiAoIWxlZ2FjeU92ZXJy
aWRlICYmICgodHJhY2tIYXNPbmx5Rm9yY2VkU3VidGl0bGVzICYmIGRpc3BsYXlNb2RlICE9IEZv
cmNlZE9ubHkpIHx8ICghdHJhY2tIYXNPbmx5Rm9yY2VkU3VidGl0bGVzICYmIGRpc3BsYXlNb2Rl
ID09IEZvcmNlZE9ubHkpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBWZWN0b3I8U3RyaW5n
PiB1c2VyUHJlZmVycmVkQ2FwdGlvbkxhbmd1YWdlcyA9IHByZWZlcnJlZExhbmd1YWdlcygpOwot
Ci0gICAgaWYgKGRpc3BsYXlNb2RlID09IEF1dG9tYXRpYyB8fCB0cmFja0hhc09ubHlGb3JjZWRT
dWJ0aXRsZXMpIHsKLQotICAgICAgICBpZiAoIW1lZGlhRWxlbWVudCB8fCAhbWVkaWFFbGVtZW50
LT5wbGF5ZXIoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIFN0cmluZyB0ZXh0
VHJhY2tMYW5ndWFnZSA9IHRyYWNrLT5sYW5ndWFnZSgpOwotICAgICAgICBpZiAodGV4dFRyYWNr
TGFuZ3VhZ2UuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgVmVj
dG9yPFN0cmluZz4gbGFuZ3VhZ2VMaXN0OwotICAgICAgICBsYW5ndWFnZUxpc3QucmVzZXJ2ZUNh
cGFjaXR5KDEpOwotCi0gICAgICAgIFN0cmluZyBhdWRpb1RyYWNrTGFuZ3VhZ2U7Ci0gICAgICAg
IGlmICh0ZXN0aW5nTW9kZSgpKQotICAgICAgICAgICAgYXVkaW9UcmFja0xhbmd1YWdlID0gcHJp
bWFyeUF1ZGlvVHJhY2tMYW5ndWFnZU92ZXJyaWRlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGF1ZGlvVHJhY2tMYW5ndWFnZSA9IG1lZGlhRWxlbWVudC0+cGxheWVyKCktPmxhbmd1YWdl
T2ZQcmltYXJ5QXVkaW9UcmFjaygpOwotCi0gICAgICAgIGlmIChhdWRpb1RyYWNrTGFuZ3VhZ2Uu
aXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgaWYgKHRyYWNrSGFz
T25seUZvcmNlZFN1YnRpdGxlcykgewotICAgICAgICAgICAgbGFuZ3VhZ2VMaXN0LmFwcGVuZChh
dWRpb1RyYWNrTGFuZ3VhZ2UpOwotICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IGluZGV4T2ZC
ZXN0TWF0Y2hpbmdMYW5ndWFnZUluTGlzdCh0ZXh0VHJhY2tMYW5ndWFnZSwgbGFuZ3VhZ2VMaXN0
KTsKLQotICAgICAgICAgICAgLy8gT25seSBjb25zaWRlciBhIGZvcmNlZC1vbmx5IHRyYWNrIGlm
IGl0IElTIGluIHRoZSBzYW1lIGxhbmd1YWdlIGFzIHRoZSBwcmltYXJ5IGF1ZGlvIHRyYWNrLgot
ICAgICAgICAgICAgaWYgKG9mZnNldCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxhbmd1YWdlTGlzdC5hcHBlbmQoZGVmYXVsdExhbmd1
YWdlKCkpOwotCi0gICAgICAgICAgICAvLyBPbmx5IGVuYWJsZSBhIHRleHQgdHJhY2sgaWYgdGhl
IGN1cnJlbnQgYXVkaW8gdHJhY2sgaXMgTk9UIGluIHRoZSB1c2VyJ3MgcHJlZmVycmVkIGxhbmd1
YWdlIC4uLgotICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IGluZGV4T2ZCZXN0TWF0Y2hpbmdM
YW5ndWFnZUluTGlzdChhdWRpb1RyYWNrTGFuZ3VhZ2UsIGxhbmd1YWdlTGlzdCk7Ci0gICAgICAg
ICAgICBpZiAoIW9mZnNldCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICAg
ICAgLy8gYW5kIHRoZSB0ZXh0IHRyYWNrIG1hdGNoZXMgdGhlIHVzZXIncyBwcmVmZXJyZWQgbGFu
Z3VhZ2UuCi0gICAgICAgICAgICBvZmZzZXQgPSBpbmRleE9mQmVzdE1hdGNoaW5nTGFuZ3VhZ2VJ
bkxpc3QodGV4dFRyYWNrTGFuZ3VhZ2UsIGxhbmd1YWdlTGlzdCk7Ci0gICAgICAgICAgICBpZiAo
b2Zmc2V0KQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAg
dXNlclByZWZlcnJlZENhcHRpb25MYW5ndWFnZXMgPSBsYW5ndWFnZUxpc3Q7Ci0gICAgfQotCi0g
ICAgaW50IHRyYWNrU2NvcmUgPSAwOwotCi0gICAgaWYgKHVzZXJQcmVmZXJzQ2FwdGlvbnMoKSkg
ewotICAgICAgICAvLyBXaGVuIHRoZSB1c2VyIHByZWZlcnMgYWNjZXNzaWJsaXR5IHRyYWNrcywg
cmFuayBpcyBTREgsIHRoZW4gQ0MsIHRoZW4gc3VidGl0bGVzLgotICAgICAgICBpZiAodHJhY2st
PmtpbmQoKSA9PSB0cmFjay0+c3VidGl0bGVzS2V5d29yZCgpKQotICAgICAgICAgICAgdHJhY2tT
Y29yZSA9IDE7Ci0gICAgICAgIGVsc2UgaWYgKHRyYWNrLT5pc0Nsb3NlZENhcHRpb25zKCkpCi0g
ICAgICAgICAgICB0cmFja1Njb3JlID0gMjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdHJh
Y2tTY29yZSA9IDM7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gV2hlbiB0aGUgdXNlciBwcmVm
ZXJzIHRyYW5zbGF0aW9uIHRyYWNrcywgcmFuayBpcyBzdWJ0aXRsZXMsIHRoZW4gU0RILCB0aGVu
IENDIHRyYWNrcy4KLSAgICAgICAgaWYgKHRyYWNrLT5raW5kKCkgPT0gdHJhY2stPnN1YnRpdGxl
c0tleXdvcmQoKSkKLSAgICAgICAgICAgIHRyYWNrU2NvcmUgPSAzOwotICAgICAgICBlbHNlIGlm
ICghdHJhY2stPmlzQ2xvc2VkQ2FwdGlvbnMoKSkKLSAgICAgICAgICAgIHRyYWNrU2NvcmUgPSAy
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0cmFja1Njb3JlID0gMTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJhY2tTY29yZSArIHRleHRUcmFja0xhbmd1YWdlU2VsZWN0aW9uU2NvcmUodHJh
Y2ssIHVzZXJQcmVmZXJyZWRDYXB0aW9uTGFuZ3VhZ2VzKTsKLX0KLQotc3RhdGljIGJvb2wgdGV4
dFRyYWNrQ29tcGFyZShjb25zdCBSZWZQdHI8VGV4dFRyYWNrPiYgYSwgY29uc3QgUmVmUHRyPFRl
eHRUcmFjaz4mIGIpCi17Ci0gICAgU3RyaW5nIHByZWZlcnJlZExhbmd1YWdlRGlzcGxheU5hbWUg
PSBkaXNwbGF5TmFtZUZvckxhbmd1YWdlTG9jYWxlKGxhbmd1YWdlSWRlbnRpZmllcihkZWZhdWx0
TGFuZ3VhZ2UoKSkpOwotICAgIFN0cmluZyBhTGFuZ3VhZ2VEaXNwbGF5TmFtZSA9IGRpc3BsYXlO
YW1lRm9yTGFuZ3VhZ2VMb2NhbGUobGFuZ3VhZ2VJZGVudGlmaWVyKGEtPmxhbmd1YWdlKCkpKTsK
LSAgICBTdHJpbmcgYkxhbmd1YWdlRGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZUZvckxhbmd1YWdl
TG9jYWxlKGxhbmd1YWdlSWRlbnRpZmllcihiLT5sYW5ndWFnZSgpKSk7Ci0KLSAgICAvLyBUcmFj
a3MgaW4gdGhlIHVzZXIncyBwcmVmZXJyZWQgbGFuZ3VhZ2UgYXJlIGFsd2F5cyBhdCB0aGUgdG9w
IG9mIHRoZSBtZW51LgotICAgIGJvb2wgYUlzUHJlZmVycmVkTGFuZ3VhZ2UgPSAhY29kZVBvaW50
Q29tcGFyZShhTGFuZ3VhZ2VEaXNwbGF5TmFtZSwgcHJlZmVycmVkTGFuZ3VhZ2VEaXNwbGF5TmFt
ZSk7Ci0gICAgYm9vbCBiSXNQcmVmZXJyZWRMYW5ndWFnZSA9ICFjb2RlUG9pbnRDb21wYXJlKGJM
YW5ndWFnZURpc3BsYXlOYW1lLCBwcmVmZXJyZWRMYW5ndWFnZURpc3BsYXlOYW1lKTsKLSAgICBp
ZiAoKGFJc1ByZWZlcnJlZExhbmd1YWdlIHx8IGJJc1ByZWZlcnJlZExhbmd1YWdlKSAmJiAoYUlz
UHJlZmVycmVkTGFuZ3VhZ2UgIT0gYklzUHJlZmVycmVkTGFuZ3VhZ2UpKQotICAgICAgICByZXR1
cm4gYUlzUHJlZmVycmVkTGFuZ3VhZ2U7Ci0KLSAgICAvLyBUcmFja3Mgbm90IGluIHRoZSB1c2Vy
J3MgcHJlZmVycmVkIGxhbmd1YWdlIHNvcnQgZmlyc3QgYnkgbGFuZ3VhZ2UgLi4uCi0gICAgaWYg
KGNvZGVQb2ludENvbXBhcmUoYUxhbmd1YWdlRGlzcGxheU5hbWUsIGJMYW5ndWFnZURpc3BsYXlO
YW1lKSkKLSAgICAgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmUoYUxhbmd1YWdlRGlzcGxheU5h
bWUsIGJMYW5ndWFnZURpc3BsYXlOYW1lKSA8IDA7Ci0KLSAgICAvLyAuLi4gYnV0IHdoZW4gdHJh
Y2tzIGhhdmUgdGhlIHNhbWUgbGFuZ3VhZ2UsIG1haW4gcHJvZ3JhbSBjb250ZW50IHNvcnRzIG5l
eHQgaGlnaGVzdCAuLi4KLSAgICBib29sIGFJc01haW5Db250ZW50ID0gYS0+aXNNYWluUHJvZ3Jh
bUNvbnRlbnQoKTsKLSAgICBib29sIGJJc01haW5Db250ZW50ID0gYi0+aXNNYWluUHJvZ3JhbUNv
bnRlbnQoKTsKLSAgICBpZiAoKGFJc01haW5Db250ZW50IHx8IGJJc01haW5Db250ZW50KSAmJiAo
YUlzTWFpbkNvbnRlbnQgIT0gYklzTWFpbkNvbnRlbnQpKQotICAgICAgICByZXR1cm4gYUlzTWFp
bkNvbnRlbnQ7Ci0KLSAgICAvLyAuLi4gYW5kIG1haW4gcHJvZ3JhbSB0cmFrY3Mgc29ydCBoaWdo
ZXIgdGhhbiBDQyB0cmFja3MgLi4uCi0gICAgYm9vbCBhSXNDQyA9IGEtPmlzQ2xvc2VkQ2FwdGlv
bnMoKTsKLSAgICBib29sIGJJc0NDID0gYi0+aXNDbG9zZWRDYXB0aW9ucygpOwotICAgIGlmICgo
YUlzQ0MgfHwgYklzQ0MpICYmIChhSXNDQyAhPSBiSXNDQykpIHsKLSAgICAgICAgaWYgKGFJc0ND
KQotICAgICAgICAgICAgcmV0dXJuIGFJc01haW5Db250ZW50OwotICAgICAgICByZXR1cm4gYklz
TWFpbkNvbnRlbnQ7Ci0gICAgfQotCi0gICAgLy8gLi4uIGFuZCB0cmFja3Mgb2YgdGhlIHNhbWUg
dHlwZSBhbmQgbGFuZ3VhZ2Ugc29ydCBieSB0aGUgbWVudSBpdGVtIHRleHQuCi0gICAgcmV0dXJu
IGNvZGVQb2ludENvbXBhcmUodHJhY2tEaXNwbGF5TmFtZShhLmdldCgpKSwgdHJhY2tEaXNwbGF5
TmFtZShiLmdldCgpKSkgPCAwOwotfQotCi1WZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4gPiBDYXB0
aW9uVXNlclByZWZlcmVuY2VzTWFjOjpzb3J0ZWRUcmFja0xpc3RGb3JNZW51KFRleHRUcmFja0xp
c3QqIHRyYWNrTGlzdCkKLXsKLSAgICBBU1NFUlQodHJhY2tMaXN0KTsKLQotICAgIFZlY3RvcjxS
ZWZQdHI8VGV4dFRyYWNrPiA+IHRyYWNrc0Zvck1lbnU7Ci0gICAgSGFzaFNldDxTdHJpbmc+IGxh
bmd1YWdlc0luY2x1ZGVkOwotICAgIGJvb2wgcHJlZmVyc0FjY2Vzc2liaWxpdHlUcmFja3MgPSB1
c2VyUHJlZmVyc0NhcHRpb25zKCk7Ci0gICAgYm9vbCBmaWx0ZXJUcmFja0xpc3QgPSBzaG91bGRG
aWx0ZXJUcmFja01lbnUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGxlbmd0aCA9IHRy
YWNrTGlzdC0+bGVuZ3RoKCk7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBUZXh0VHJhY2sq
IHRyYWNrID0gdHJhY2tMaXN0LT5pdGVtKGkpOwotICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSBk
aXNwbGF5TmFtZUZvckxhbmd1YWdlTG9jYWxlKHRyYWNrLT5sYW5ndWFnZSgpKTsKLQotICAgICAg
ICBpZiAodHJhY2stPmNvbnRhaW5zT25seUZvcmNlZFN1YnRpdGxlcygpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIAotICAgICAgICBpZiAodHJhY2stPmlzRWFzeVRvUmVhZCgpKSB7
Ci0gICAgICAgICAgICBpZiAoIWxhbmd1YWdlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBs
YW5ndWFnZXNJbmNsdWRlZC5hZGQobGFuZ3VhZ2UpOwotICAgICAgICAgICAgdHJhY2tzRm9yTWVu
dS5hcHBlbmQodHJhY2spOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIWxhbmd1YWdlLmlzRW1wdHkoKSAmJiB0cmFjay0+aXNNYWluUHJvZ3JhbUNvbnRl
bnQoKSkgewotICAgICAgICAgICAgYm9vbCBpc0FjY2Vzc2liaWxpdHlUcmFjayA9IHRyYWNrLT5r
aW5kKCkgPT0gdHJhY2stPmNhcHRpb25zS2V5d29yZCgpOwotICAgICAgICAgICAgaWYgKHByZWZl
cnNBY2Nlc3NpYmlsaXR5VHJhY2tzKSB7Ci0gICAgICAgICAgICAgICAgLy8gSW4gdGhlIGZpcnN0
IHBhc3MsIGluY2x1ZGUgb25seSBjYXB0aW9uIHRyYWNrcyBpZiB0aGUgdXNlciBwcmVmZXJzIGFj
Y2Vzc2liaWxpdHkgdHJhY2tzLgotICAgICAgICAgICAgICAgIGlmICghaXNBY2Nlc3NpYmlsaXR5
VHJhY2sgJiYgZmlsdGVyVHJhY2tMaXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIExPRyhNZWRp
YSwgIkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNvcnRlZFRyYWNrTGlzdEZvck1lbnUgLSBz
a2lwcGluZyAnJXMnIHRyYWNrIHdpdGggbGFuZ3VhZ2UgJyVzJyBiZWNhdXNlIGl0IGlzIE5PVCBh
biBhY2Nlc3NpYmlsaXR5IHRyYWNrIiwgdHJhY2stPmtpbmQoKS5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpLCBsYW5ndWFnZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAvLyBJbiB0aGUgZmlyc3QgcGFzcywgb25seSBpbmNsdWRlIHRoZSBmaXJzdCBub24tQ0Mg
b3IgU0RIIHRyYWNrIHdpdGggZWFjaCBsYW5ndWFnZSBpZiB0aGUgdXNlciBwcmVmZXJzIHRyYW5z
bGF0aW9uIHRyYWNrcy4KLSAgICAgICAgICAgICAgICBpZiAoaXNBY2Nlc3NpYmlsaXR5VHJhY2sg
JiYgZmlsdGVyVHJhY2tMaXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIExPRyhNZWRpYSwgIkNh
cHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNvcnRlZFRyYWNrTGlzdEZvck1lbnUgLSBza2lwcGlu
ZyAnJXMnIHRyYWNrIHdpdGggbGFuZ3VhZ2UgJyVzJyBiZWNhdXNlIGl0IGlzIGFuIGFjY2Vzc2li
aWxpdHkgdHJhY2siLCB0cmFjay0+a2luZCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGxhbmd1
YWdlLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGxhbmd1YWdlc0luY2x1ZGVkLmNvbnRh
aW5zKGxhbmd1YWdlKSAgJiYgZmlsdGVyVHJhY2tMaXN0KSB7Ci0gICAgICAgICAgICAgICAgICAg
IExPRyhNZWRpYSwgIkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNvcnRlZFRyYWNrTGlzdEZv
ck1lbnUgLSBza2lwcGluZyAnJXMnIHRyYWNrIHdpdGggbGFuZ3VhZ2UgJyVzJyBiZWNhdXNlIGl0
IGlzIG5vdCB0aGUgZmlyc3Qgd2l0aCB0aGlzIGxhbmd1YWdlIiwgdHJhY2stPmtpbmQoKS5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBsYW5ndWFnZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKCFsYW5ndWFnZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBs
YW5ndWFnZXNJbmNsdWRlZC5hZGQobGFuZ3VhZ2UpOwotICAgICAgICB0cmFja3NGb3JNZW51LmFw
cGVuZCh0cmFjayk7Ci0gICAgfQotCi0gICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBmaWx0ZXJlZCBm
b3IgdGhlIHVzZXIncyBhY2Nlc3NpYmlsaXR5L3RyYW5zbGF0aW9uIHByZWZlcmVuY2UsIGFkZCAg
YWxsIHRyYWNrcyB3aXRoIGEgdW5pcXVlIGxhbmd1YWdlIHdpdGhvdXQgcmVnYXJkIHRvIHRyYWNr
IHR5cGUuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMCwgbGVuZ3RoID0gdHJhY2tMaXN0LT5sZW5n
dGgoKTsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIFRleHRUcmFjayogdHJhY2sgPSB0cmFj
a0xpc3QtPml0ZW0oaSk7Ci0gICAgICAgIFN0cmluZyBsYW5ndWFnZSA9IGRpc3BsYXlOYW1lRm9y
TGFuZ3VhZ2VMb2NhbGUodHJhY2stPmxhbmd1YWdlKCkpOwotCi0gICAgICAgIC8vIEFsbCBjYW5k
aWRhdGVzIHdpdGggbm8gbGFuZ3VnZSB3ZXJlIGFkZGVkIHRoZSBmaXJzdCB0aW1lIHRocm91Z2gu
Ci0gICAgICAgIGlmIChsYW5ndWFnZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBpZiAodHJhY2stPmNvbnRhaW5zT25seUZvcmNlZFN1YnRpdGxlcygpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gCi0gICAgICAgIGlmICghbGFuZ3VhZ2VzSW5jbHVkZWQuY29u
dGFpbnMobGFuZ3VhZ2UpICYmIHRyYWNrLT5pc01haW5Qcm9ncmFtQ29udGVudCgpKSB7Ci0gICAg
ICAgICAgICBsYW5ndWFnZXNJbmNsdWRlZC5hZGQobGFuZ3VhZ2UpOwotICAgICAgICAgICAgdHJh
Y2tzRm9yTWVudS5hcHBlbmQodHJhY2spOwotICAgICAgICAgICAgTE9HKE1lZGlhLCAiQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01hYzo6c29ydGVkVHJhY2tMaXN0Rm9yTWVudSAtIGFkZGluZyAnJXMn
IHRyYWNrIHdpdGggbGFuZ3VhZ2UgJyVzJyBiZWNhdXNlIGl0IGlzIHRoZSBvbmx5IHRyYWNrIHdp
dGggdGhpcyBsYW5ndWFnZSIsIHRyYWNrLT5raW5kKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwg
bGFuZ3VhZ2UudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBub25Db3B5
aW5nU29ydCh0cmFja3NGb3JNZW51LmJlZ2luKCksIHRyYWNrc0Zvck1lbnUuZW5kKCksIHRleHRU
cmFja0NvbXBhcmUpOwotCi0gICAgdHJhY2tzRm9yTWVudS5pbnNlcnQoMCwgVGV4dFRyYWNrOjpj
YXB0aW9uTWVudU9mZkl0ZW0oKSk7Ci0gICAgdHJhY2tzRm9yTWVudS5pbnNlcnQoMSwgVGV4dFRy
YWNrOjpjYXB0aW9uTWVudUF1dG9tYXRpY0l0ZW0oKSk7Ci0KLSAgICByZXR1cm4gdHJhY2tzRm9y
TWVudTsKLX0KLSAgICAKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01l
ZGlhQUYuY3BwCShyZXZpc2lvbiAxNTE5OTYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlc01hYy5tbToxNTE5OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDgwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKwor
I2ltcG9ydCAiQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYy5oIgorCisjaW1wb3J0ICJDb2xvck1h
Yy5oIgorI2ltcG9ydCAiQ29yZVRleHQvQ29yZVRleHQuaCIKKyNpbXBvcnQgIkRPTVdyYXBwZXJX
b3JsZC5oIgorI2ltcG9ydCAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW1wb3J0ICJIVE1MTWVkaWFF
bGVtZW50LmgiCisjaW1wb3J0ICJLVVJMLmgiCisjaW1wb3J0ICJMYW5ndWFnZS5oIgorI2ltcG9y
dCAiTG9jYWxpemVkU3RyaW5ncy5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVk
aWFDb250cm9sRWxlbWVudHMuaCIKKyNpbXBvcnQgIlBhZ2VHcm91cC5oIgorI2ltcG9ydCAiU29m
dExpbmtpbmcuaCIKKyNpbXBvcnQgIlRleHRUcmFja0N1ZS5oIgorI2ltcG9ydCAiVGV4dFRyYWNr
TGlzdC5oIgorI2ltcG9ydCAiVXNlclN0eWxlU2hlZXRUeXBlcy5oIgorI2ltcG9ydCA8d3RmL05v
bkNvcHlpbmdTb3J0Lmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0ICJXZWJD
b3JlVGhyZWFkUnVuLmgiCisjZW5kaWYKKworI2lmIEhBVkUoTUVESUFfQUNDRVNTSUJJTElUWV9G
UkFNRVdPUkspCisjaW1wb3J0ICJNZWRpYUFjY2Vzc2liaWxpdHkvTWVkaWFBY2Nlc3NpYmlsaXR5
LmgiCisjZW5kaWYKKworI2lmIEhBVkUoTUVESUFfQUNDRVNTSUJJTElUWV9GUkFNRVdPUkspCisK
K1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoTWVkaWFBY2Nlc3NpYmlsaXR5KQorCitTT0ZU
X0xJTksoTWVkaWFBY2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBlYXJhbmNlR2V0RGlzcGxheVR5
cGUsIE1BQ2FwdGlvbkFwcGVhcmFuY2VEaXNwbGF5VHlwZSwgKE1BQ2FwdGlvbkFwcGVhcmFuY2VE
b21haW4gZG9tYWluKSwgKGRvbWFpbikpCitTT0ZUX0xJTksoTWVkaWFBY2Nlc3NpYmlsaXR5LCBN
QUNhcHRpb25BcHBlYXJhbmNlU2V0RGlzcGxheVR5cGUsIHZvaWQsIChNQUNhcHRpb25BcHBlYXJh
bmNlRG9tYWluIGRvbWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5jZURpc3BsYXlUeXBlIGRpc3BsYXlU
eXBlKSwgKGRvbWFpbiwgZGlzcGxheVR5cGUpKQorU09GVF9MSU5LKE1lZGlhQWNjZXNzaWJpbGl0
eSwgTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlGb3JlZ3JvdW5kQ29sb3IsIENHQ29sb3JSZWYsIChN
QUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2
aW9yICpiZWhhdmlvciksIChkb21haW4sIGJlaGF2aW9yKSkKK1NPRlRfTElOSyhNZWRpYUFjY2Vz
c2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5QmFja2dyb3VuZENvbG9yLCBDR0NvbG9y
UmVmLCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpbiBkb21haW4sIE1BQ2FwdGlvbkFwcGVhcmFu
Y2VCZWhhdmlvciAqYmVoYXZpb3IpLCAoZG9tYWluLCBiZWhhdmlvcikpCitTT0ZUX0xJTksoTWVk
aWFBY2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBlYXJhbmNlQ29weVdpbmRvd0NvbG9yLCBDR0Nv
bG9yUmVmLCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpbiBkb21haW4sIE1BQ2FwdGlvbkFwcGVh
cmFuY2VCZWhhdmlvciAqYmVoYXZpb3IpLCAoZG9tYWluLCBiZWhhdmlvcikpCitTT0ZUX0xJTkso
TWVkaWFBY2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBlYXJhbmNlR2V0Rm9yZWdyb3VuZE9wYWNp
dHksIENHRmxvYXQsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiwgTUFDYXB0aW9u
QXBwZWFyYW5jZUJlaGF2aW9yICpiZWhhdmlvciksIChkb21haW4sIGJlaGF2aW9yKSkKK1NPRlRf
TElOSyhNZWRpYUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRCYWNrZ3JvdW5k
T3BhY2l0eSwgQ0dGbG9hdCwgKE1BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW4gZG9tYWluLCBNQUNh
cHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgKmJlaGF2aW9yKSwgKGRvbWFpbiwgYmVoYXZpb3IpKQor
U09GVF9MSU5LKE1lZGlhQWNjZXNzaWJpbGl0eSwgTUFDYXB0aW9uQXBwZWFyYW5jZUdldFdpbmRv
d09wYWNpdHksIENHRmxvYXQsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiwgTUFD
YXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yICpiZWhhdmlvciksIChkb21haW4sIGJlaGF2aW9yKSkK
K1NPRlRfTElOSyhNZWRpYUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRXaW5k
b3dSb3VuZGVkQ29ybmVyUmFkaXVzLCBDR0Zsb2F0LCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFp
biBkb21haW4sIE1BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvciAqYmVoYXZpb3IpLCAoZG9tYWlu
LCBiZWhhdmlvcikpCitTT0ZUX0xJTksoTWVkaWFBY2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBl
YXJhbmNlQ29weUZvbnREZXNjcmlwdG9yRm9yU3R5bGUsIENURm9udERlc2NyaXB0b3JSZWYsIChN
QUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiwgIE1BQ2FwdGlvbkFwcGVhcmFuY2VCZWhh
dmlvciAqYmVoYXZpb3IsIE1BQ2FwdGlvbkFwcGVhcmFuY2VGb250U3R5bGUgZm9udFN0eWxlKSwg
KGRvbWFpbiwgYmVoYXZpb3IsIGZvbnRTdHlsZSkpCitTT0ZUX0xJTksoTWVkaWFBY2Nlc3NpYmls
aXR5LCBNQUNhcHRpb25BcHBlYXJhbmNlR2V0UmVsYXRpdmVDaGFyYWN0ZXJTaXplLCBDR0Zsb2F0
LCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpbiBkb21haW4sIE1BQ2FwdGlvbkFwcGVhcmFuY2VC
ZWhhdmlvciAqYmVoYXZpb3IpLCAoZG9tYWluLCBiZWhhdmlvcikpCitTT0ZUX0xJTksoTWVkaWFB
Y2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBlYXJhbmNlR2V0VGV4dEVkZ2VTdHlsZSwgTUFDYXB0
aW9uQXBwZWFyYW5jZVRleHRFZGdlU3R5bGUsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRv
bWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yICpiZWhhdmlvciksIChkb21haW4sIGJl
aGF2aW9yKSkKK1NPRlRfTElOSyhNZWRpYUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFu
Y2VBZGRTZWxlY3RlZExhbmd1YWdlLCBib29sLCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpbiBk
b21haW4sIENGU3RyaW5nUmVmIGxhbmd1YWdlKSwgKGRvbWFpbiwgbGFuZ3VhZ2UpKTsKK1NPRlRf
TElOSyhNZWRpYUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5U2VsZWN0ZWRM
YW5ndWFnZXMsIENGQXJyYXlSZWYsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiks
IChkb21haW4pKTsKK1NPRlRfTElOSyhNZWRpYUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVh
cmFuY2VDb3B5UHJlZmVycmVkQ2FwdGlvbmluZ01lZGlhQ2hhcmFjdGVyaXN0aWNzLCAgQ0ZBcnJh
eVJlZiwgKE1BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW4gZG9tYWluKSwgKGRvbWFpbikpOworCitT
T0ZUX0xJTktfUE9JTlRFUihNZWRpYUFjY2Vzc2liaWxpdHksIGtNQVhDYXB0aW9uQXBwZWFyYW5j
ZVNldHRpbmdzQ2hhbmdlZE5vdGlmaWNhdGlvbiwgQ0ZTdHJpbmdSZWYpCisjZGVmaW5lIGtNQVhD
YXB0aW9uQXBwZWFyYW5jZVNldHRpbmdzQ2hhbmdlZE5vdGlmaWNhdGlvbiBnZXRrTUFYQ2FwdGlv
bkFwcGVhcmFuY2VTZXR0aW5nc0NoYW5nZWROb3RpZmljYXRpb24oKQorCisjZW5kaWYKKwordXNp
bmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgSEFWRShNRURJ
QV9BQ0NFU1NJQklMSVRZX0ZSQU1FV09SSykKK3N0YXRpYyB2b2lkIHVzZXJDYXB0aW9uUHJlZmVy
ZW5jZXNDaGFuZ2VkTm90aWZpY2F0aW9uQ2FsbGJhY2soQ0ZOb3RpZmljYXRpb25DZW50ZXJSZWYs
IHZvaWQqIG9ic2VydmVyLCBDRlN0cmluZ1JlZiwgY29uc3Qgdm9pZCAqLCBDRkRpY3Rpb25hcnlS
ZWYpCit7CisjaWYgIVBMQVRGT1JNKElPUykKKyAgICBzdGF0aWNfY2FzdDxDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzTWFjKj4ob2JzZXJ2ZXIpLT5jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7Cisj
ZWxzZQorICAgIFdlYlRocmVhZFJ1biheeworICAgICAgICBzdGF0aWNfY2FzdDxDYXB0aW9uVXNl
clByZWZlcmVuY2VzTWFjKj4ob2JzZXJ2ZXIpLT5jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7
CisgICAgfSk7CisjZW5kaWYKK30KKyNlbmRpZgorCitDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFj
OjpDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjKFBhZ2VHcm91cCogZ3JvdXApCisgICAgOiBDYXB0
aW9uVXNlclByZWZlcmVuY2VzKGdyb3VwKQorI2lmIEhBVkUoTUVESUFfQUNDRVNTSUJJTElUWV9G
UkFNRVdPUkspCisgICAgLCBtX2xpc3RlbmluZ0ZvclByZWZlcmVuY2VDaGFuZ2VzKGZhbHNlKQor
I2VuZGlmCit7Cit9CisKK0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6On5DYXB0aW9uVXNlclBy
ZWZlcmVuY2VzTWFjKCkKK3sKKyNpZiBIQVZFKE1FRElBX0FDQ0VTU0lCSUxJVFlfRlJBTUVXT1JL
KQorICAgIGlmIChrTUFYQ2FwdGlvbkFwcGVhcmFuY2VTZXR0aW5nc0NoYW5nZWROb3RpZmljYXRp
b24pCisgICAgICAgIENGTm90aWZpY2F0aW9uQ2VudGVyUmVtb3ZlT2JzZXJ2ZXIoQ0ZOb3RpZmlj
YXRpb25DZW50ZXJHZXRMb2NhbENlbnRlcigpLCB0aGlzLCBrTUFYQ2FwdGlvbkFwcGVhcmFuY2VT
ZXR0aW5nc0NoYW5nZWROb3RpZmljYXRpb24sIE5VTEwpOworI2VuZGlmCit9CisKKyNpZiBIQVZF
KE1FRElBX0FDQ0VTU0lCSUxJVFlfRlJBTUVXT1JLKQorCitDYXB0aW9uVXNlclByZWZlcmVuY2Vz
OjpDYXB0aW9uRGlzcGxheU1vZGUgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6Y2FwdGlvbkRp
c3BsYXlNb2RlKCkgY29uc3QKK3sKKyAgICBpZiAodGVzdGluZ01vZGUoKSB8fCAhTWVkaWFBY2Nl
c3NpYmlsaXR5TGlicmFyeSgpKQorICAgICAgICByZXR1cm4gQ2FwdGlvblVzZXJQcmVmZXJlbmNl
czo6Y2FwdGlvbkRpc3BsYXlNb2RlKCk7CisKKyAgICBNQUNhcHRpb25BcHBlYXJhbmNlRGlzcGxh
eVR5cGUgZGlzcGxheVR5cGUgPSBNQUNhcHRpb25BcHBlYXJhbmNlR2V0RGlzcGxheVR5cGUoa01B
Q2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2VyKTsKKyAgICBzd2l0Y2ggKGRpc3BsYXlUeXBlKSB7
CisgICAgY2FzZSBrTUFDYXB0aW9uQXBwZWFyYW5jZURpc3BsYXlUeXBlRm9yY2VkT25seToKKyAg
ICAgICAgcmV0dXJuIEZvcmNlZE9ubHk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrTUFD
YXB0aW9uQXBwZWFyYW5jZURpc3BsYXlUeXBlQXV0b21hdGljOgorICAgICAgICByZXR1cm4gQXV0
b21hdGljOworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga01BQ2FwdGlvbkFwcGVhcmFuY2VE
aXNwbGF5VHlwZUFsd2F5c09uOgorICAgICAgICByZXR1cm4gQWx3YXlzT247CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBGb3Jj
ZWRPbmx5OworfQorICAgIAordm9pZCBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpzZXRDYXB0
aW9uRGlzcGxheU1vZGUoQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6Q2FwdGlvbkRpc3BsYXlNb2Rl
IG1vZGUpCit7CisgICAgaWYgKHRlc3RpbmdNb2RlKCkgfHwgIU1lZGlhQWNjZXNzaWJpbGl0eUxp
YnJhcnkoKSkgeworICAgICAgICBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpzZXRDYXB0aW9uRGlz
cGxheU1vZGUobW9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNQUNhcHRpb25B
cHBlYXJhbmNlRGlzcGxheVR5cGUgZGlzcGxheVR5cGUgPSBrTUFDYXB0aW9uQXBwZWFyYW5jZURp
c3BsYXlUeXBlRm9yY2VkT25seTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgY2FzZSBB
dXRvbWF0aWM6CisgICAgICAgICAgICBkaXNwbGF5VHlwZSA9IGtNQUNhcHRpb25BcHBlYXJhbmNl
RGlzcGxheVR5cGVBdXRvbWF0aWM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBG
b3JjZWRPbmx5OgorICAgICAgICAgICAgZGlzcGxheVR5cGUgPSBrTUFDYXB0aW9uQXBwZWFyYW5j
ZURpc3BsYXlUeXBlRm9yY2VkT25seTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEFsd2F5c09uOgorICAgICAgICAgICAgZGlzcGxheVR5cGUgPSBrTUFDYXB0aW9uQXBwZWFyYW5j
ZURpc3BsYXlUeXBlQWx3YXlzT247CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgTUFDYXB0aW9uQXBwZWFyYW5jZVNldERpc3BsYXlUeXBlKGtNQUNhcHRp
b25BcHBlYXJhbmNlRG9tYWluVXNlciwgZGlzcGxheVR5cGUpOworfQorCitib29sIENhcHRpb25V
c2VyUHJlZmVyZW5jZXNNYWM6OnVzZXJQcmVmZXJzQ2FwdGlvbnMoKSBjb25zdAoreworICAgIGJv
b2wgY2FwdGlvblNldHRpbmcgPSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjp1c2VyUHJlZmVyc0Nh
cHRpb25zKCk7CisgICAgaWYgKGNhcHRpb25TZXR0aW5nIHx8IHRlc3RpbmdNb2RlKCkgfHwgIU1l
ZGlhQWNjZXNzaWJpbGl0eUxpYnJhcnkoKSkKKyAgICAgICAgcmV0dXJuIGNhcHRpb25TZXR0aW5n
OworICAgIAorICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBjYXB0aW9uaW5nTWVkaWFDaGFyYWN0
ZXJpc3RpY3MgPSBhZG9wdENGKE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5UHJlZmVycmVkQ2FwdGlv
bmluZ01lZGlhQ2hhcmFjdGVyaXN0aWNzKGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlcikp
OworICAgIHJldHVybiBjYXB0aW9uaW5nTWVkaWFDaGFyYWN0ZXJpc3RpY3MgJiYgQ0ZBcnJheUdl
dENvdW50KGNhcHRpb25pbmdNZWRpYUNoYXJhY3RlcmlzdGljcy5nZXQoKSk7Cit9CisKK2Jvb2wg
Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6dXNlclByZWZlcnNTdWJ0aXRsZXMoKSBjb25zdAor
eworICAgIGJvb2wgc3VidGl0bGVzU2V0dGluZyA9IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnVz
ZXJQcmVmZXJzU3VidGl0bGVzKCk7CisgICAgaWYgKHN1YnRpdGxlc1NldHRpbmcgfHwgdGVzdGlu
Z01vZGUoKSB8fCAhTWVkaWFBY2Nlc3NpYmlsaXR5TGlicmFyeSgpKQorICAgICAgICByZXR1cm4g
c3VidGl0bGVzU2V0dGluZzsKKyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY2FwdGlv
bmluZ01lZGlhQ2hhcmFjdGVyaXN0aWNzID0gYWRvcHRDRihNQUNhcHRpb25BcHBlYXJhbmNlQ29w
eVByZWZlcnJlZENhcHRpb25pbmdNZWRpYUNoYXJhY3RlcmlzdGljcyhrTUFDYXB0aW9uQXBwZWFy
YW5jZURvbWFpblVzZXIpKTsKKyAgICByZXR1cm4gIShjYXB0aW9uaW5nTWVkaWFDaGFyYWN0ZXJp
c3RpY3MgJiYgQ0ZBcnJheUdldENvdW50KGNhcHRpb25pbmdNZWRpYUNoYXJhY3RlcmlzdGljcy5n
ZXQoKSkpOworfQorCit2b2lkIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNldEludGVyZXN0
ZWRJbkNhcHRpb25QcmVmZXJlbmNlQ2hhbmdlcygpCit7CisgICAgaWYgKCFNZWRpYUFjY2Vzc2li
aWxpdHlMaWJyYXJ5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgha01BWENhcHRpb25B
cHBlYXJhbmNlU2V0dGluZ3NDaGFuZ2VkTm90aWZpY2F0aW9uKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIW1fbGlzdGVuaW5nRm9yUHJlZmVyZW5jZUNoYW5nZXMpIHsKKyAgICAgICAgbV9s
aXN0ZW5pbmdGb3JQcmVmZXJlbmNlQ2hhbmdlcyA9IHRydWU7CisgICAgICAgIENGTm90aWZpY2F0
aW9uQ2VudGVyQWRkT2JzZXJ2ZXIoQ0ZOb3RpZmljYXRpb25DZW50ZXJHZXRMb2NhbENlbnRlcigp
LCB0aGlzLCB1c2VyQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNhdGlvbkNhbGxiYWNr
LCBrTUFYQ2FwdGlvbkFwcGVhcmFuY2VTZXR0aW5nc0NoYW5nZWROb3RpZmljYXRpb24sIE5VTEws
IENGTm90aWZpY2F0aW9uU3VzcGVuc2lvbkJlaGF2aW9yQ29hbGVzY2UpOworICAgIH0KKyAgICAK
KyAgICB1cGRhdGVDYXB0aW9uU3R5bGVTaGVldE92ZXJpZGUoKTsKK30KKwordm9pZCBDYXB0aW9u
VXNlclByZWZlcmVuY2VzTWFjOjpjYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCkKK3sKKyAgICBp
ZiAobV9saXN0ZW5pbmdGb3JQcmVmZXJlbmNlQ2hhbmdlcykKKyAgICAgICAgdXBkYXRlQ2FwdGlv
blN0eWxlU2hlZXRPdmVyaWRlKCk7CisKKyAgICBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpjYXB0
aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7Cit9CisKK1N0cmluZyBDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWFjOjpjYXB0aW9uc1dpbmRvd0NTUygpIGNvbnN0Cit7CisgICAgTUFDYXB0aW9uQXBwZWFy
YW5jZUJlaGF2aW9yIGJlaGF2aW9yOworICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvciA9
IGFkb3B0Q0YoTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlXaW5kb3dDb2xvcihrTUFDYXB0aW9uQXBw
ZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlvcikpOworCisgICAgQ29sb3Igd2luZG93Q29sb3Io
Y29sb3IuZ2V0KCkpOworICAgIGlmICghd2luZG93Q29sb3IuaXNWYWxpZCgpKQorICAgICAgICB3
aW5kb3dDb2xvciA9IENvbG9yOjp0cmFuc3BhcmVudDsKKworICAgIGJvb2wgaW1wb3J0YW50ID0g
YmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlOworICAgIENH
RmxvYXQgb3BhY2l0eSA9IE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRXaW5kb3dPcGFjaXR5KGtNQUNh
cHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJlaGF2aW9yKTsKKyAgICBpZiAoIWltcG9ydGFu
dCkKKyAgICAgICAgaW1wb3J0YW50ID0gYmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VC
ZWhhdmlvclVzZVZhbHVlOworICAgIFN0cmluZyB3aW5kb3dTdHlsZSA9IGNvbG9yUHJvcGVydHlD
U1MoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIENvbG9yKHdpbmRvd0NvbG9yLnJlZCgpLCB3
aW5kb3dDb2xvci5ncmVlbigpLCB3aW5kb3dDb2xvci5ibHVlKCksIHN0YXRpY19jYXN0PGludD4o
b3BhY2l0eSAqIDI1NSkpLCBpbXBvcnRhbnQpOworCisgICAgaWYgKCFvcGFjaXR5KQorICAgICAg
ICByZXR1cm4gd2luZG93U3R5bGU7CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAg
YnVpbGRlci5hcHBlbmQod2luZG93U3R5bGUpOworICAgIGJ1aWxkZXIuYXBwZW5kKGdldFByb3Bl
cnR5TmFtZVN0cmluZyhDU1NQcm9wZXJ0eVBhZGRpbmcpKTsKKyAgICBidWlsZGVyLmFwcGVuZCgi
OiAuNGVtICFpbXBvcnRhbnQ7Iik7CisKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwor
fQorCitTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6Y2FwdGlvbnNCYWNrZ3JvdW5k
Q1NTKCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGRlZmF1bHQgdmFsdWUgbXVzdCBiZSB0aGUgc2Ft
ZSBhcyB0aGUgb25lIHNwZWNpZmllZCBpbiBtZWRpYUNvbnRyb2xzLmNzcyBmb3IgLXdlYmtpdC1t
ZWRpYS10ZXh0LXRyYWNrLXBhc3Qtbm9kZXMKKyAgICAvLyBhbmQgd2Via2l0LW1lZGlhLXRleHQt
dHJhY2stZnV0dXJlLW5vZGVzLgorICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ29sb3IsIGRlZmF1
bHRCYWNrZ3JvdW5kQ29sb3IsIChDb2xvcigwLCAwLCAwLCAwLjggKiAyNTUpKSk7CisKKyAgICBN
QUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgYmVoYXZpb3I7CisKKyAgICBSZXRhaW5QdHI8Q0dD
b2xvclJlZj4gY29sb3IgPSBhZG9wdENGKE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5QmFja2dyb3Vu
ZENvbG9yKGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJlaGF2aW9yKSk7CisgICAg
Q29sb3IgYmFja2dyb3VuZENvbG9yKGNvbG9yLmdldCgpKTsKKyAgICBpZiAoIWJhY2tncm91bmRD
b2xvci5pc1ZhbGlkKCkpCisgICAgICAgIGJhY2tncm91bmRDb2xvciA9IGRlZmF1bHRCYWNrZ3Jv
dW5kQ29sb3I7CisKKyAgICBib29sIGltcG9ydGFudCA9IGJlaGF2aW9yID09IGtNQUNhcHRpb25B
cHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZTsKKyAgICBDR0Zsb2F0IG9wYWNpdHkgPSBNQUNhcHRp
b25BcHBlYXJhbmNlR2V0QmFja2dyb3VuZE9wYWNpdHkoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21h
aW5Vc2VyLCAmYmVoYXZpb3IpOworICAgIGlmICghaW1wb3J0YW50KQorICAgICAgICBpbXBvcnRh
bnQgPSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWU7Cisg
ICAgcmV0dXJuIGNvbG9yUHJvcGVydHlDU1MoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIENv
bG9yKGJhY2tncm91bmRDb2xvci5yZWQoKSwgYmFja2dyb3VuZENvbG9yLmdyZWVuKCksIGJhY2tn
cm91bmRDb2xvci5ibHVlKCksIHN0YXRpY19jYXN0PGludD4ob3BhY2l0eSAqIDI1NSkpLCBpbXBv
cnRhbnQpOworfQorCitDb2xvciBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpjYXB0aW9uc1Rl
eHRDb2xvcihib29sJiBpbXBvcnRhbnQpIGNvbnN0Cit7CisgICAgTUFDYXB0aW9uQXBwZWFyYW5j
ZUJlaGF2aW9yIGJlaGF2aW9yOworICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvciA9IGFk
b3B0Q0YoTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlGb3JlZ3JvdW5kQ29sb3Ioa01BQ2FwdGlvbkFw
cGVhcmFuY2VEb21haW5Vc2VyLCAmYmVoYXZpb3IpKTsKKyAgICBDb2xvciB0ZXh0Q29sb3IoY29s
b3IuZ2V0KCkpOworICAgIGlmICghdGV4dENvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgLy8gVGhp
cyBkZWZhdWx0IHZhbHVlIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIG9uZSBzcGVjaWZpZWQgaW4g
bWVkaWFDb250cm9scy5jc3MgZm9yIC13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1jb250YWluZXIu
CisgICAgICAgIHRleHRDb2xvciA9IENvbG9yOjp3aGl0ZTsKKyAgICAKKyAgICBpbXBvcnRhbnQg
PSBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWU7CisgICAg
Q0dGbG9hdCBvcGFjaXR5ID0gTUFDYXB0aW9uQXBwZWFyYW5jZUdldEZvcmVncm91bmRPcGFjaXR5
KGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwgJmJlaGF2aW9yKTsKKyAgICBpZiAoIWlt
cG9ydGFudCkKKyAgICAgICAgaW1wb3J0YW50ID0gYmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVh
cmFuY2VCZWhhdmlvclVzZVZhbHVlOworICAgIHJldHVybiBDb2xvcih0ZXh0Q29sb3IucmVkKCks
IHRleHRDb2xvci5ncmVlbigpLCB0ZXh0Q29sb3IuYmx1ZSgpLCBzdGF0aWNfY2FzdDxpbnQ+KG9w
YWNpdHkgKiAyNTUpKTsKK30KKyAgICAKK1N0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFj
OjpjYXB0aW9uc1RleHRDb2xvckNTUygpIGNvbnN0Cit7CisgICAgYm9vbCBpbXBvcnRhbnQ7Cisg
ICAgQ29sb3IgdGV4dENvbG9yID0gY2FwdGlvbnNUZXh0Q29sb3IoaW1wb3J0YW50KTsKKworICAg
IGlmICghdGV4dENvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
CisKKyAgICByZXR1cm4gY29sb3JQcm9wZXJ0eUNTUyhDU1NQcm9wZXJ0eUNvbG9yLCB0ZXh0Q29s
b3IsIGltcG9ydGFudCk7Cit9CisgICAgCitTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01h
Yzo6d2luZG93Um91bmRlZENvcm5lclJhZGl1c0NTUygpIGNvbnN0Cit7CisgICAgTUFDYXB0aW9u
QXBwZWFyYW5jZUJlaGF2aW9yIGJlaGF2aW9yOworICAgIENHRmxvYXQgcmFkaXVzID0gTUFDYXB0
aW9uQXBwZWFyYW5jZUdldFdpbmRvd1JvdW5kZWRDb3JuZXJSYWRpdXMoa01BQ2FwdGlvbkFwcGVh
cmFuY2VEb21haW5Vc2VyLCAmYmVoYXZpb3IpOworICAgIGlmICghcmFkaXVzKQorICAgICAgICBy
ZXR1cm4gZW1wdHlTdHJpbmcoKTsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBi
dWlsZGVyLmFwcGVuZChnZXRQcm9wZXJ0eU5hbWVTdHJpbmcoQ1NTUHJvcGVydHlCb3JkZXJSYWRp
dXMpKTsKKyAgICBidWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiOiUuMDJmcHgiLCByYWRp
dXMpKTsKKyAgICBpZiAoYmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVz
ZVZhbHVlKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiICFpbXBvcnRhbnQiKTsKKyAgICBidWls
ZGVyLmFwcGVuZCgnOycpOworCisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKyAg
ICAKK0NvbG9yIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OmNhcHRpb25zRWRnZUNvbG9yRm9y
VGV4dENvbG9yKGNvbnN0IENvbG9yJiB0ZXh0Q29sb3IpIGNvbnN0Cit7CisgICAgaW50IGRpc3Rh
bmNlRnJvbVdoaXRlID0gZGlmZmVyZW5jZVNxdWFyZWQodGV4dENvbG9yLCBDb2xvcjo6d2hpdGUp
OworICAgIGludCBkaXN0YW5jZUZyb21CbGFjayA9IGRpZmZlcmVuY2VTcXVhcmVkKHRleHRDb2xv
ciwgQ29sb3I6OmJsYWNrKTsKKyAgICAKKyAgICBpZiAoZGlzdGFuY2VGcm9tV2hpdGUgPCBkaXN0
YW5jZUZyb21CbGFjaykKKyAgICAgICAgcmV0dXJuIHRleHRDb2xvci5kYXJrKCk7CisgICAgCisg
ICAgcmV0dXJuIHRleHRDb2xvci5saWdodCgpOworfQorCitTdHJpbmcgQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01hYzo6Y3NzUHJvcGVydHlXaXRoVGV4dEVkZ2VDb2xvcihDU1NQcm9wZXJ0eUlEIGlk
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBDb2xvciYgdGV4dENvbG9yLCBib29sIGltcG9y
dGFudCkgY29uc3QKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgCisgICAgYnVp
bGRlci5hcHBlbmQoZ2V0UHJvcGVydHlOYW1lU3RyaW5nKGlkKSk7CisgICAgYnVpbGRlci5hcHBl
bmQoJzonKTsKKyAgICBidWlsZGVyLmFwcGVuZCh2YWx1ZSk7CisgICAgYnVpbGRlci5hcHBlbmQo
JyAnKTsKKyAgICBidWlsZGVyLmFwcGVuZChjYXB0aW9uc0VkZ2VDb2xvckZvclRleHRDb2xvcih0
ZXh0Q29sb3IpLnNlcmlhbGl6ZWQoKSk7CisgICAgaWYgKGltcG9ydGFudCkKKyAgICAgICAgYnVp
bGRlci5hcHBlbmQoIiAhaW1wb3J0YW50Iik7CisgICAgYnVpbGRlci5hcHBlbmQoJzsnKTsKKyAg
ICAKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCitTdHJpbmcgQ2FwdGlvblVz
ZXJQcmVmZXJlbmNlc01hYzo6Y29sb3JQcm9wZXJ0eUNTUyhDU1NQcm9wZXJ0eUlEIGlkLCBjb25z
dCBDb2xvciYgY29sb3IsIGJvb2wgaW1wb3J0YW50KSBjb25zdAoreworICAgIFN0cmluZ0J1aWxk
ZXIgYnVpbGRlcjsKKyAgICAKKyAgICBidWlsZGVyLmFwcGVuZChnZXRQcm9wZXJ0eU5hbWVTdHJp
bmcoaWQpKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnOicpOworICAgIGJ1aWxkZXIuYXBwZW5kKGNv
bG9yLnNlcmlhbGl6ZWQoKSk7CisgICAgaWYgKGltcG9ydGFudCkKKyAgICAgICAgYnVpbGRlci5h
cHBlbmQoIiAhaW1wb3J0YW50Iik7CisgICAgYnVpbGRlci5hcHBlbmQoJzsnKTsKKyAgICAKKyAg
ICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCitTdHJpbmcgQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01hYzo6Y2FwdGlvbnNUZXh0RWRnZUNTUygpIGNvbnN0Cit7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGVkZ2VTdHlsZVJhaXNlZCwgKCIgLS4wNWVtIC0uMDVl
bSAwICIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IFN0cmluZywgZWRnZVN0eWxlRGVwcmVzc2VkLCAoIiAuMDVlbSAuMDVlbSAw
ICIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKGNvbnN0IFN0cmluZywgZWRnZVN0eWxlRHJvcFNoYWRvdywgKCIgLjA3NWVtIC4wNzVlbSAw
ICIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKGNvbnN0IFN0cmluZywgZWRnZVN0eWxlVW5pZm9ybSwgKCIgLjAzZW0gIiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOworCisgICAgYm9vbCB1bnVzZWQ7CisgICAgQ29sb3IgY29s
b3IgPSBjYXB0aW9uc1RleHRDb2xvcih1bnVzZWQpOworICAgIGlmICghY29sb3IuaXNWYWxpZCgp
KQorICAgICAgICBjb2xvci5zZXROYW1lZENvbG9yKCJibGFjayIpOworICAgIGNvbG9yID0gY2Fw
dGlvbnNFZGdlQ29sb3JGb3JUZXh0Q29sb3IoY29sb3IpOworCisgICAgTUFDYXB0aW9uQXBwZWFy
YW5jZUJlaGF2aW9yIGJlaGF2aW9yOworICAgIE1BQ2FwdGlvbkFwcGVhcmFuY2VUZXh0RWRnZVN0
eWxlIHRleHRFZGdlU3R5bGUgPSBNQUNhcHRpb25BcHBlYXJhbmNlR2V0VGV4dEVkZ2VTdHlsZShr
TUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlvcik7CisgICAgc3dpdGNoICh0
ZXh0RWRnZVN0eWxlKSB7CisgICAgICAgIGNhc2Uga01BQ2FwdGlvbkFwcGVhcmFuY2VUZXh0RWRn
ZVN0eWxlVW5kZWZpbmVkOgorICAgICAgICBjYXNlIGtNQUNhcHRpb25BcHBlYXJhbmNlVGV4dEVk
Z2VTdHlsZU5vbmU6CisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIGtNQUNhcHRpb25BcHBlYXJhbmNlVGV4dEVkZ2VTdHlsZVJhaXNl
ZDoKKyAgICAgICAgICAgIHJldHVybiBjc3NQcm9wZXJ0eVdpdGhUZXh0RWRnZUNvbG9yKENTU1By
b3BlcnR5VGV4dFNoYWRvdywgZWRnZVN0eWxlUmFpc2VkLCBjb2xvciwgYmVoYXZpb3IgPT0ga01B
Q2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlKTsKKyAgICAgICAgY2FzZSBrTUFDYXB0
aW9uQXBwZWFyYW5jZVRleHRFZGdlU3R5bGVEZXByZXNzZWQ6CisgICAgICAgICAgICByZXR1cm4g
Y3NzUHJvcGVydHlXaXRoVGV4dEVkZ2VDb2xvcihDU1NQcm9wZXJ0eVRleHRTaGFkb3csIGVkZ2VT
dHlsZURlcHJlc3NlZCwgY29sb3IsIGJlaGF2aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVo
YXZpb3JVc2VWYWx1ZSk7CisgICAgICAgIGNhc2Uga01BQ2FwdGlvbkFwcGVhcmFuY2VUZXh0RWRn
ZVN0eWxlRHJvcFNoYWRvdzoKKyAgICAgICAgICAgIHJldHVybiBjc3NQcm9wZXJ0eVdpdGhUZXh0
RWRnZUNvbG9yKENTU1Byb3BlcnR5VGV4dFNoYWRvdywgZWRnZVN0eWxlRHJvcFNoYWRvdywgY29s
b3IsIGJlaGF2aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZSk7Cisg
ICAgICAgIGNhc2Uga01BQ2FwdGlvbkFwcGVhcmFuY2VUZXh0RWRnZVN0eWxlVW5pZm9ybToKKyAg
ICAgICAgICAgIHJldHVybiBjc3NQcm9wZXJ0eVdpdGhUZXh0RWRnZUNvbG9yKENTU1Byb3BlcnR5
V2Via2l0VGV4dFN0cm9rZSwgZWRnZVN0eWxlVW5pZm9ybSwgY29sb3IsIGJlaGF2aW9yID09IGtN
QUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiBlbXB0eVN0cmluZygpOworfQorCitT
dHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6Y2FwdGlvbnNEZWZhdWx0Rm9udENTUygp
IGNvbnN0Cit7CisgICAgTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yIGJlaGF2aW9yOworICAg
IAorICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250ID0gYWRvcHRDRihNQUNh
cHRpb25BcHBlYXJhbmNlQ29weUZvbnREZXNjcmlwdG9yRm9yU3R5bGUoa01BQ2FwdGlvbkFwcGVh
cmFuY2VEb21haW5Vc2VyLCAmYmVoYXZpb3IsIGtNQUNhcHRpb25BcHBlYXJhbmNlRm9udFN0eWxl
RGVmYXVsdCkpOworICAgIGlmICghZm9udCkKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
CisKKyAgICBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBuYW1lID0gYWRvcHRDRihDVEZvbnREZXNjcmlw
dG9yQ29weUF0dHJpYnV0ZShmb250LmdldCgpLCBrQ1RGb250TmFtZUF0dHJpYnV0ZSkpOworICAg
IGlmICghbmFtZSkKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgCisgICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyOworICAgIAorICAgIGJ1aWxkZXIuYXBwZW5kKGdldFByb3BlcnR5
TmFtZVN0cmluZyhDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpKTsKKyAgICBidWlsZGVyLmFwcGVuZCgi
OiBcIiIpOworICAgIGJ1aWxkZXIuYXBwZW5kKHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihuYW1l
LmdldCgpKSk7CisgICAgYnVpbGRlci5hcHBlbmQoJyInKTsKKyAgICBpZiAoYmVoYXZpb3IgPT0g
a01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlKQorICAgICAgICBidWlsZGVyLmFw
cGVuZCgiICFpbXBvcnRhbnQiKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnOycpOworICAgIAorICAg
IHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK2Zsb2F0IENhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNYWM6OmNhcHRpb25Gb250U2l6ZVNjYWxlQW5kSW1wb3J0YW5jZShib29sJiBpbXBvcnRh
bnQpIGNvbnN0Cit7CisgICAgaWYgKHRlc3RpbmdNb2RlKCkgfHwgIU1lZGlhQWNjZXNzaWJpbGl0
eUxpYnJhcnkoKSkKKyAgICAgICAgcmV0dXJuIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OmNhcHRp
b25Gb250U2l6ZVNjYWxlQW5kSW1wb3J0YW5jZShpbXBvcnRhbnQpOworCisgICAgTUFDYXB0aW9u
QXBwZWFyYW5jZUJlaGF2aW9yIGJlaGF2aW9yOworICAgIENHRmxvYXQgY2hhcmFjdGVyU2NhbGUg
PSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpjYXB0aW9uRm9udFNpemVTY2FsZUFuZEltcG9ydGFu
Y2UoaW1wb3J0YW50KTsKKyAgICBDR0Zsb2F0IHNjYWxlQWRqdXN0bWVudCA9IE1BQ2FwdGlvbkFw
cGVhcmFuY2VHZXRSZWxhdGl2ZUNoYXJhY3RlclNpemUoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21h
aW5Vc2VyLCAmYmVoYXZpb3IpOworCisgICAgaWYgKCFzY2FsZUFkanVzdG1lbnQpCisgICAgICAg
IHJldHVybiBjaGFyYWN0ZXJTY2FsZTsKKworICAgIGltcG9ydGFudCA9IGJlaGF2aW9yID09IGtN
QUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZTsKKyNpZiBkZWZpbmVkKF9fTFA2NF9f
KSAmJiBfX0xQNjRfXworICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHNjYWxlQWRq
dXN0bWVudCAqIGNoYXJhY3RlclNjYWxlKTsKKyNlbHNlCisgICAgcmV0dXJuIHNjYWxlQWRqdXN0
bWVudCAqIGNoYXJhY3RlclNjYWxlOworI2VuZGlmCit9CisKK3ZvaWQgQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01hYzo6c2V0UHJlZmVycmVkTGFuZ3VhZ2UoY29uc3QgU3RyaW5nJiBsYW5ndWFnZSkK
K3sKKyAgICBpZiAodGVzdGluZ01vZGUoKSB8fCAhTWVkaWFBY2Nlc3NpYmlsaXR5TGlicmFyeSgp
KSB7CisgICAgICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnNldFByZWZlcnJlZExhbmd1YWdl
KGxhbmd1YWdlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1BQ2FwdGlvbkFwcGVh
cmFuY2VBZGRTZWxlY3RlZExhbmd1YWdlKGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluVXNlciwg
bGFuZ3VhZ2UuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IENh
cHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnByZWZlcnJlZExhbmd1YWdlcygpIGNvbnN0Cit7Cisg
ICAgaWYgKHRlc3RpbmdNb2RlKCkgfHwgIU1lZGlhQWNjZXNzaWJpbGl0eUxpYnJhcnkoKSkKKyAg
ICAgICAgcmV0dXJuIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnByZWZlcnJlZExhbmd1YWdlcygp
OworCisgICAgVmVjdG9yPFN0cmluZz4gcGxhdGZvcm1MYW5ndWFnZXMgPSBwbGF0Zm9ybVVzZXJQ
cmVmZXJyZWRMYW5ndWFnZXMoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBvdmVycmlkZSA9IHVzZXJQ
cmVmZXJyZWRMYW5ndWFnZXNPdmVycmlkZSgpOworICAgIGlmICghb3ZlcnJpZGUuaXNFbXB0eSgp
KSB7CisgICAgICAgIGlmIChwbGF0Zm9ybUxhbmd1YWdlcy5zaXplKCkgIT0gb3ZlcnJpZGUuc2l6
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG92ZXJyaWRlOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG92ZXJyaWRlLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBpZiAob3ZlcnJp
ZGVbaV0gIT0gcGxhdGZvcm1MYW5ndWFnZXNbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIG92
ZXJyaWRlOworICAgICAgICB9CisgICAgfQorCisgICAgQ0ZJbmRleCBsYW5ndWFnZUNvdW50ID0g
MDsKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gbGFuZ3VhZ2VzID0gYWRvcHRDRihNQUNhcHRp
b25BcHBlYXJhbmNlQ29weVNlbGVjdGVkTGFuZ3VhZ2VzKGtNQUNhcHRpb25BcHBlYXJhbmNlRG9t
YWluVXNlcikpOworICAgIGlmIChsYW5ndWFnZXMpCisgICAgICAgIGxhbmd1YWdlQ291bnQgPSBD
RkFycmF5R2V0Q291bnQobGFuZ3VhZ2VzLmdldCgpKTsKKworICAgIGlmICghbGFuZ3VhZ2VDb3Vu
dCkKKyAgICAgICAgcmV0dXJuIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OnByZWZlcnJlZExhbmd1
YWdlcygpOworCisgICAgVmVjdG9yPFN0cmluZz4gdXNlclByZWZlcnJlZExhbmd1YWdlczsKKyAg
ICB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzLnJlc2VydmVDYXBhY2l0eShsYW5ndWFnZUNvdW50ICsg
cGxhdGZvcm1MYW5ndWFnZXMuc2l6ZSgpKTsKKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBs
YW5ndWFnZUNvdW50OyBpKyspCisgICAgICAgIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMuYXBwZW5k
KHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGxhbmd1YWdl
cy5nZXQoKSwgaSkpKTsKKworICAgIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMuYXBwZW5kVmVjdG9y
KHBsYXRmb3JtTGFuZ3VhZ2VzKTsKKworICAgIHJldHVybiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2Vz
OworfQorI2VuZGlmICAvLyBIQVZFKE1FRElBX0FDQ0VTU0lCSUxJVFlfRlJBTUVXT1JLKQorCitT
dHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6Y2FwdGlvbnNTdHlsZVNoZWV0T3ZlcnJp
ZGUoKSBjb25zdAoreworICAgIGlmICh0ZXN0aW5nTW9kZSgpKQorICAgICAgICByZXR1cm4gQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlczo6Y2FwdGlvbnNTdHlsZVNoZWV0T3ZlcnJpZGUoKTsKKyAgICAK
KyAgICBTdHJpbmdCdWlsZGVyIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0OworCisjaWYgSEFW
RShNRURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1FV09SSykKKyAgICBpZiAoIU1lZGlhQWNjZXNzaWJp
bGl0eUxpYnJhcnkoKSkKKyAgICAgICAgcmV0dXJuIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OmNh
cHRpb25zU3R5bGVTaGVldE92ZXJyaWRlKCk7CisgICAgCisgICAgU3RyaW5nIGNhcHRpb25zQ29s
b3IgPSBjYXB0aW9uc1RleHRDb2xvckNTUygpOworICAgIFN0cmluZyBlZGdlU3R5bGUgPSBjYXB0
aW9uc1RleHRFZGdlQ1NTKCk7CisgICAgU3RyaW5nIGZvbnROYW1lID0gY2FwdGlvbnNEZWZhdWx0
Rm9udENTUygpOworICAgIFN0cmluZyBiYWNrZ3JvdW5kID0gY2FwdGlvbnNCYWNrZ3JvdW5kQ1NT
KCk7CisgICAgaWYgKCFiYWNrZ3JvdW5kLmlzRW1wdHkoKSB8fCAhY2FwdGlvbnNDb2xvci5pc0Vt
cHR5KCkgfHwgIWVkZ2VTdHlsZS5pc0VtcHR5KCkgfHwgIWZvbnROYW1lLmlzRW1wdHkoKSkgewor
ICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoIiB2aWRlbzo6Iik7Cisg
ICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZChUZXh0VHJhY2tDdWU6OmN1
ZVNoYWRvd1BzZXVkb0lkKCkpOworICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5h
cHBlbmQoJ3snKTsKKyAgICAgICAgCisgICAgICAgIGlmICghYmFja2dyb3VuZC5pc0VtcHR5KCkp
CisgICAgICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoYmFja2dyb3Vu
ZCk7CisgICAgICAgIGlmICghY2FwdGlvbnNDb2xvci5pc0VtcHR5KCkpCisgICAgICAgICAgICBj
YXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQoY2FwdGlvbnNDb2xvcik7CisgICAgICAg
IGlmICghZWRnZVN0eWxlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVT
dHlsZVNoZWV0LmFwcGVuZChlZGdlU3R5bGUpOworICAgICAgICBpZiAoIWZvbnROYW1lLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZChmb250
TmFtZSk7CisgICAgICAgIAorICAgICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBl
bmQoJ30nKTsKKyAgICB9CisgICAgCisgICAgU3RyaW5nIHdpbmRvd0NvbG9yID0gY2FwdGlvbnNX
aW5kb3dDU1MoKTsKKyAgICBTdHJpbmcgd2luZG93Q29ybmVyUmFkaXVzID0gd2luZG93Um91bmRl
ZENvcm5lclJhZGl1c0NTUygpOworICAgIGlmICghd2luZG93Q29sb3IuaXNFbXB0eSgpIHx8ICF3
aW5kb3dDb3JuZXJSYWRpdXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVT
dHlsZVNoZWV0LmFwcGVuZCgiIHZpZGVvOjoiKTsKKyAgICAgICAgY2FwdGlvbnNPdmVycmlkZVN0
eWxlU2hlZXQuYXBwZW5kKFRleHRUcmFja0N1ZUJveDo6dGV4dFRyYWNrQ3VlQm94U2hhZG93UHNl
dWRvSWQoKSk7CisgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgneycp
OworICAgICAgICAKKyAgICAgICAgaWYgKCF3aW5kb3dDb2xvci5pc0VtcHR5KCkpCisgICAgICAg
ICAgICBjYXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQod2luZG93Q29sb3IpOworICAg
ICAgICBpZiAoIXdpbmRvd0Nvcm5lclJhZGl1cy5pc0VtcHR5KCkpCisgICAgICAgICAgICBjYXB0
aW9uc092ZXJyaWRlU3R5bGVTaGVldC5hcHBlbmQod2luZG93Q29ybmVyUmFkaXVzKTsKKyAgICAg
ICAgCisgICAgICAgIGNhcHRpb25zT3ZlcnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgnfScpOworICAg
IH0KKyNlbmRpZiAgLy8gSEFWRShNRURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1FV09SSykKKworICAg
IExPRyhNZWRpYSwgIkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OmNhcHRpb25zU3R5bGVTaGVl
dE92ZXJyaWRlU2V0dGluZyBzeXRsZSB0bzpcbiVzIiwgY2FwdGlvbnNPdmVycmlkZVN0eWxlU2hl
ZXQudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIHJldHVybiBjYXB0aW9uc092ZXJy
aWRlU3R5bGVTaGVldC50b1N0cmluZygpOworfQorCitzdGF0aWMgU3RyaW5nIGxhbmd1YWdlSWRl
bnRpZmllcihjb25zdCBTdHJpbmcmIGxhbmd1YWdlQ29kZSkKK3sKKyAgICBpZiAobGFuZ3VhZ2VD
b2RlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGxhbmd1YWdlQ29kZTsKKworICAgIFN0cmlu
ZyBsb3dlcmNhc2VMYW5ndWFnZUNvZGUgPSBsYW5ndWFnZUNvZGUubG93ZXIoKTsKKworICAgIC8v
IE5lZWQgMlUgaGVyZSB0byBkaXNhbWJpZ3VhdGUgU3RyaW5nOjpvcGVyYXRvcltdIGZyb20gb3Bl
cmF0b3IoTlNTdHJpbmcqLCBpbnQpW10gaW4gYSBwcm9kdWN0aW9uIGJ1aWxkLgorICAgIGlmIChs
b3dlcmNhc2VMYW5ndWFnZUNvZGUubGVuZ3RoKCkgPj0gMyAmJiAobG93ZXJjYXNlTGFuZ3VhZ2VD
b2RlWzJVXSA9PSAnXycgfHwgbG93ZXJjYXNlTGFuZ3VhZ2VDb2RlWzJVXSA9PSAnLScpKQorICAg
ICAgICBsb3dlcmNhc2VMYW5ndWFnZUNvZGUudHJ1bmNhdGUoMik7CisKKyAgICByZXR1cm4gbG93
ZXJjYXNlTGFuZ3VhZ2VDb2RlOworfQorCitzdGF0aWMgU3RyaW5nIHRyYWNrRGlzcGxheU5hbWUo
VGV4dFRyYWNrKiB0cmFjaykKK3sKKyAgICBpZiAodHJhY2sgPT0gVGV4dFRyYWNrOjpjYXB0aW9u
TWVudU9mZkl0ZW0oKSkKKyAgICAgICAgcmV0dXJuIHRleHRUcmFja09mZk1lbnVJdGVtVGV4dCgp
OworICAgIGlmICh0cmFjayA9PSBUZXh0VHJhY2s6OmNhcHRpb25NZW51QXV0b21hdGljSXRlbSgp
KQorICAgICAgICByZXR1cm4gdGV4dFRyYWNrQXV0b21hdGljTWVudUl0ZW1UZXh0KCk7CisKKyAg
ICBTdHJpbmdCdWlsZGVyIGRpc3BsYXlOYW1lOworICAgIFN0cmluZyBsYWJlbCA9IHRyYWNrLT5s
YWJlbCgpOworICAgIFN0cmluZyB0cmFja0xhbmd1YWdlSWRlbnRpZmllciA9IHRyYWNrLT5sYW5n
dWFnZSgpOworCisgICAgUmV0YWluUHRyPENGTG9jYWxlUmVmPiBjdXJyZW50TG9jYWxlID0gYWRv
cHRDRihDRkxvY2FsZUNvcHlDdXJyZW50KCkpOworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4g
bG9jYWxlSWRlbnRpZmllciA9IGFkb3B0Q0YoQ0ZMb2NhbGVDcmVhdGVDYW5vbmljYWxMb2NhbGVJ
ZGVudGlmaWVyRnJvbVN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB0cmFja0xhbmd1YWdlSWRl
bnRpZmllci5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7CisgICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiBsYW5ndWFnZUNGID0gYWRvcHRDRihDRkxvY2FsZUNvcHlEaXNwbGF5TmFtZUZvclByb3Bl
cnR5VmFsdWUoY3VycmVudExvY2FsZS5nZXQoKSwga0NGTG9jYWxlTGFuZ3VhZ2VDb2RlLCBsb2Nh
bGVJZGVudGlmaWVyLmdldCgpKSk7CisgICAgU3RyaW5nIGxhbmd1YWdlID0gbGFuZ3VhZ2VDRi5n
ZXQoKTsKKyAgICBpZiAoIWxhYmVsLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAobGFuZ3VhZ2Uu
aXNFbXB0eSgpIHx8IGxhYmVsLmNvbnRhaW5zKGxhbmd1YWdlKSkKKyAgICAgICAgICAgIGRpc3Bs
YXlOYW1lLmFwcGVuZChsYWJlbCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4gbG9jYWxlRGljdCA9IGFkb3B0Q0YoQ0ZMb2NhbGVDcmVhdGVD
b21wb25lbnRzRnJvbUxvY2FsZUlkZW50aWZpZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbG9jYWxl
SWRlbnRpZmllci5nZXQoKSkpOworICAgICAgICAgICAgaWYgKGxvY2FsZURpY3QpIHsKKyAgICAg
ICAgICAgICAgICBDRlN0cmluZ1JlZiBjb3VudHJ5Q29kZSA9IDA7CisgICAgICAgICAgICAgICAg
U3RyaW5nIGNvdW50cnlOYW1lOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENG
RGljdGlvbmFyeUdldFZhbHVlSWZQcmVzZW50KGxvY2FsZURpY3QuZ2V0KCksIGtDRkxvY2FsZUNv
dW50cnlDb2RlLCAoY29uc3Qgdm9pZCAqKikmY291bnRyeUNvZGUpOworICAgICAgICAgICAgICAg
IGlmIChjb3VudHJ5Q29kZSkgeworICAgICAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJp
bmdSZWY+IGNvdW50cnlOYW1lQ0YgPSBhZG9wdENGKENGTG9jYWxlQ29weURpc3BsYXlOYW1lRm9y
UHJvcGVydHlWYWx1ZShjdXJyZW50TG9jYWxlLmdldCgpLCBrQ0ZMb2NhbGVDb3VudHJ5Q29kZSwg
Y291bnRyeUNvZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgY291bnRyeU5hbWUgPSBjb3VudHJ5
TmFtZUNGLmdldCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBpZiAoIWNvdW50cnlOYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAg
ICAgZGlzcGxheU5hbWUuYXBwZW5kKHRleHRUcmFja0NvdW50cnlBbmRMYW5ndWFnZU1lbnVJdGVt
VGV4dChsYWJlbCwgY291bnRyeU5hbWUsIGxhbmd1YWdlKSk7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZS5hcHBlbmQodGV4dFRyYWNrTGFuZ3Vh
Z2VNZW51SXRlbVRleHQobGFiZWwsIGxhbmd1YWdlKSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBTdHJpbmcgbGFuZ3VhZ2VBbmRMb2NhbGUgPSBDRkxv
Y2FsZUNvcHlEaXNwbGF5TmFtZUZvclByb3BlcnR5VmFsdWUoY3VycmVudExvY2FsZS5nZXQoKSwg
a0NGTG9jYWxlSWRlbnRpZmllciwgdHJhY2tMYW5ndWFnZUlkZW50aWZpZXIuY3JlYXRlQ0ZTdHJp
bmcoKS5nZXQoKSk7CisgICAgICAgIGlmICghbGFuZ3VhZ2VBbmRMb2NhbGUuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgZGlzcGxheU5hbWUuYXBwZW5kKGxhbmd1YWdlQW5kTG9jYWxlKTsKKyAgICAg
ICAgZWxzZSBpZiAoIWxhbmd1YWdlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGRpc3BsYXlOYW1l
LmFwcGVuZChsYW5ndWFnZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRpc3BsYXlOYW1l
LmFwcGVuZChsb2NhbGVJZGVudGlmaWVyLmdldCgpKTsKKyAgICB9CisgICAgCisgICAgaWYgKGRp
c3BsYXlOYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgZGlzcGxheU5hbWUuYXBwZW5kKHRleHRUcmFj
a05vTGFiZWxUZXh0KCkpOworICAgIAorICAgIGlmICh0cmFjay0+aXNFYXN5VG9SZWFkKCkpCisg
ICAgICAgIHJldHVybiBlYXN5UmVhZGVyVHJhY2tNZW51SXRlbVRleHQoZGlzcGxheU5hbWUudG9T
dHJpbmcoKSk7CisgICAgCisgICAgaWYgKHRyYWNrLT5pc0Nsb3NlZENhcHRpb25zKCkpCisgICAg
ICAgIHJldHVybiBjbG9zZWRDYXB0aW9uVHJhY2tNZW51SXRlbVRleHQoZGlzcGxheU5hbWUudG9T
dHJpbmcoKSk7CisKKyAgICBpZiAodHJhY2stPmlzU0RIKCkpCisgICAgICAgIHJldHVybiBzZGhU
cmFja01lbnVJdGVtVGV4dChkaXNwbGF5TmFtZS50b1N0cmluZygpKTsKKworICAgIHJldHVybiBk
aXNwbGF5TmFtZS50b1N0cmluZygpOworfQorCitTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNl
c01hYzo6ZGlzcGxheU5hbWVGb3JUcmFjayhUZXh0VHJhY2sqIHRyYWNrKSBjb25zdAoreworICAg
IHJldHVybiB0cmFja0Rpc3BsYXlOYW1lKHRyYWNrKTsKK30KKworaW50IENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNYWM6OnRleHRUcmFja1NlbGVjdGlvblNjb3JlKFRleHRUcmFjayogdHJhY2ssIEhU
TUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkgY29uc3QKK3sKKyAgICBDYXB0aW9uRGlzcGxh
eU1vZGUgZGlzcGxheU1vZGUgPSBjYXB0aW9uRGlzcGxheU1vZGUoKTsKKyAgICBib29sIGxlZ2Fj
eU92ZXJyaWRlID0gbWVkaWFFbGVtZW50LT53ZWJraXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoKTsK
KyAgICBpZiAoZGlzcGxheU1vZGUgPT0gQWx3YXlzT24gJiYgKCF1c2VyUHJlZmVyc1N1YnRpdGxl
cygpICYmICF1c2VyUHJlZmVyc0NhcHRpb25zKCkgJiYgIWxlZ2FjeU92ZXJyaWRlKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgaWYgKHRyYWNrLT5raW5kKCkgIT0gVGV4dFRyYWNrOjpjYXB0aW9u
c0tleXdvcmQoKSAmJiB0cmFjay0+a2luZCgpICE9IFRleHRUcmFjazo6c3VidGl0bGVzS2V5d29y
ZCgpICYmIHRyYWNrLT5raW5kKCkgIT0gVGV4dFRyYWNrOjpmb3JjZWRLZXl3b3JkKCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIGlmICghdHJhY2stPmlzTWFpblByb2dyYW1Db250ZW50KCkpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgYm9vbCB0cmFja0hhc09ubHlGb3JjZWRTdWJ0aXRsZXMg
PSB0cmFjay0+Y29udGFpbnNPbmx5Rm9yY2VkU3VidGl0bGVzKCk7CisgICAgaWYgKCFsZWdhY3lP
dmVycmlkZSAmJiAoKHRyYWNrSGFzT25seUZvcmNlZFN1YnRpdGxlcyAmJiBkaXNwbGF5TW9kZSAh
PSBGb3JjZWRPbmx5KSB8fCAoIXRyYWNrSGFzT25seUZvcmNlZFN1YnRpdGxlcyAmJiBkaXNwbGF5
TW9kZSA9PSBGb3JjZWRPbmx5KSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgVmVjdG9yPFN0
cmluZz4gdXNlclByZWZlcnJlZENhcHRpb25MYW5ndWFnZXMgPSBwcmVmZXJyZWRMYW5ndWFnZXMo
KTsKKworICAgIGlmIChkaXNwbGF5TW9kZSA9PSBBdXRvbWF0aWMgfHwgdHJhY2tIYXNPbmx5Rm9y
Y2VkU3VidGl0bGVzKSB7CisKKyAgICAgICAgaWYgKCFtZWRpYUVsZW1lbnQgfHwgIW1lZGlhRWxl
bWVudC0+cGxheWVyKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBTdHJpbmcg
dGV4dFRyYWNrTGFuZ3VhZ2UgPSB0cmFjay0+bGFuZ3VhZ2UoKTsKKyAgICAgICAgaWYgKHRleHRU
cmFja0xhbmd1YWdlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAg
IFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlTGlzdDsKKyAgICAgICAgbGFuZ3VhZ2VMaXN0LnJlc2Vy
dmVDYXBhY2l0eSgxKTsKKworICAgICAgICBTdHJpbmcgYXVkaW9UcmFja0xhbmd1YWdlOworICAg
ICAgICBpZiAodGVzdGluZ01vZGUoKSkKKyAgICAgICAgICAgIGF1ZGlvVHJhY2tMYW5ndWFnZSA9
IHByaW1hcnlBdWRpb1RyYWNrTGFuZ3VhZ2VPdmVycmlkZSgpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBhdWRpb1RyYWNrTGFuZ3VhZ2UgPSBtZWRpYUVsZW1lbnQtPnBsYXllcigpLT5sYW5n
dWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2soKTsKKworICAgICAgICBpZiAoYXVkaW9UcmFja0xhbmd1
YWdlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlmICh0cmFj
a0hhc09ubHlGb3JjZWRTdWJ0aXRsZXMpIHsKKyAgICAgICAgICAgIGxhbmd1YWdlTGlzdC5hcHBl
bmQoYXVkaW9UcmFja0xhbmd1YWdlKTsKKyAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBpbmRl
eE9mQmVzdE1hdGNoaW5nTGFuZ3VhZ2VJbkxpc3QodGV4dFRyYWNrTGFuZ3VhZ2UsIGxhbmd1YWdl
TGlzdCk7CisKKyAgICAgICAgICAgIC8vIE9ubHkgY29uc2lkZXIgYSBmb3JjZWQtb25seSB0cmFj
ayBpZiBpdCBJUyBpbiB0aGUgc2FtZSBsYW5ndWFnZSBhcyB0aGUgcHJpbWFyeSBhdWRpbyB0cmFj
ay4KKyAgICAgICAgICAgIGlmIChvZmZzZXQpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsYW5ndWFnZUxpc3QuYXBwZW5kKGRlZmF1bHRM
YW5ndWFnZSgpKTsKKworICAgICAgICAgICAgLy8gT25seSBlbmFibGUgYSB0ZXh0IHRyYWNrIGlm
IHRoZSBjdXJyZW50IGF1ZGlvIHRyYWNrIGlzIE5PVCBpbiB0aGUgdXNlcidzIHByZWZlcnJlZCBs
YW5ndWFnZSAuLi4KKyAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBpbmRleE9mQmVzdE1hdGNo
aW5nTGFuZ3VhZ2VJbkxpc3QoYXVkaW9UcmFja0xhbmd1YWdlLCBsYW5ndWFnZUxpc3QpOworICAg
ICAgICAgICAgaWYgKCFvZmZzZXQpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAg
ICAgICAgIC8vIGFuZCB0aGUgdGV4dCB0cmFjayBtYXRjaGVzIHRoZSB1c2VyJ3MgcHJlZmVycmVk
IGxhbmd1YWdlLgorICAgICAgICAgICAgb2Zmc2V0ID0gaW5kZXhPZkJlc3RNYXRjaGluZ0xhbmd1
YWdlSW5MaXN0KHRleHRUcmFja0xhbmd1YWdlLCBsYW5ndWFnZUxpc3QpOworICAgICAgICAgICAg
aWYgKG9mZnNldCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAg
ICAgIHVzZXJQcmVmZXJyZWRDYXB0aW9uTGFuZ3VhZ2VzID0gbGFuZ3VhZ2VMaXN0OworICAgIH0K
KworICAgIGludCB0cmFja1Njb3JlID0gMDsKKworICAgIGlmICh1c2VyUHJlZmVyc0NhcHRpb25z
KCkpIHsKKyAgICAgICAgLy8gV2hlbiB0aGUgdXNlciBwcmVmZXJzIGFjY2Vzc2libGl0eSB0cmFj
a3MsIHJhbmsgaXMgU0RILCB0aGVuIENDLCB0aGVuIHN1YnRpdGxlcy4KKyAgICAgICAgaWYgKHRy
YWNrLT5raW5kKCkgPT0gdHJhY2stPnN1YnRpdGxlc0tleXdvcmQoKSkKKyAgICAgICAgICAgIHRy
YWNrU2NvcmUgPSAxOworICAgICAgICBlbHNlIGlmICh0cmFjay0+aXNDbG9zZWRDYXB0aW9ucygp
KQorICAgICAgICAgICAgdHJhY2tTY29yZSA9IDI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHRyYWNrU2NvcmUgPSAzOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdoZW4gdGhlIHVzZXIg
cHJlZmVycyB0cmFuc2xhdGlvbiB0cmFja3MsIHJhbmsgaXMgc3VidGl0bGVzLCB0aGVuIFNESCwg
dGhlbiBDQyB0cmFja3MuCisgICAgICAgIGlmICh0cmFjay0+a2luZCgpID09IHRyYWNrLT5zdWJ0
aXRsZXNLZXl3b3JkKCkpCisgICAgICAgICAgICB0cmFja1Njb3JlID0gMzsKKyAgICAgICAgZWxz
ZSBpZiAoIXRyYWNrLT5pc0Nsb3NlZENhcHRpb25zKCkpCisgICAgICAgICAgICB0cmFja1Njb3Jl
ID0gMjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHJhY2tTY29yZSA9IDE7CisgICAgfQor
CisgICAgcmV0dXJuIHRyYWNrU2NvcmUgKyB0ZXh0VHJhY2tMYW5ndWFnZVNlbGVjdGlvblNjb3Jl
KHRyYWNrLCB1c2VyUHJlZmVycmVkQ2FwdGlvbkxhbmd1YWdlcyk7Cit9CisKK3N0YXRpYyBib29s
IHRleHRUcmFja0NvbXBhcmUoY29uc3QgUmVmUHRyPFRleHRUcmFjaz4mIGEsIGNvbnN0IFJlZlB0
cjxUZXh0VHJhY2s+JiBiKQoreworICAgIFN0cmluZyBwcmVmZXJyZWRMYW5ndWFnZURpc3BsYXlO
YW1lID0gZGlzcGxheU5hbWVGb3JMYW5ndWFnZUxvY2FsZShsYW5ndWFnZUlkZW50aWZpZXIoZGVm
YXVsdExhbmd1YWdlKCkpKTsKKyAgICBTdHJpbmcgYUxhbmd1YWdlRGlzcGxheU5hbWUgPSBkaXNw
bGF5TmFtZUZvckxhbmd1YWdlTG9jYWxlKGxhbmd1YWdlSWRlbnRpZmllcihhLT5sYW5ndWFnZSgp
KSk7CisgICAgU3RyaW5nIGJMYW5ndWFnZURpc3BsYXlOYW1lID0gZGlzcGxheU5hbWVGb3JMYW5n
dWFnZUxvY2FsZShsYW5ndWFnZUlkZW50aWZpZXIoYi0+bGFuZ3VhZ2UoKSkpOworCisgICAgLy8g
VHJhY2tzIGluIHRoZSB1c2VyJ3MgcHJlZmVycmVkIGxhbmd1YWdlIGFyZSBhbHdheXMgYXQgdGhl
IHRvcCBvZiB0aGUgbWVudS4KKyAgICBib29sIGFJc1ByZWZlcnJlZExhbmd1YWdlID0gIWNvZGVQ
b2ludENvbXBhcmUoYUxhbmd1YWdlRGlzcGxheU5hbWUsIHByZWZlcnJlZExhbmd1YWdlRGlzcGxh
eU5hbWUpOworICAgIGJvb2wgYklzUHJlZmVycmVkTGFuZ3VhZ2UgPSAhY29kZVBvaW50Q29tcGFy
ZShiTGFuZ3VhZ2VEaXNwbGF5TmFtZSwgcHJlZmVycmVkTGFuZ3VhZ2VEaXNwbGF5TmFtZSk7Cisg
ICAgaWYgKChhSXNQcmVmZXJyZWRMYW5ndWFnZSB8fCBiSXNQcmVmZXJyZWRMYW5ndWFnZSkgJiYg
KGFJc1ByZWZlcnJlZExhbmd1YWdlICE9IGJJc1ByZWZlcnJlZExhbmd1YWdlKSkKKyAgICAgICAg
cmV0dXJuIGFJc1ByZWZlcnJlZExhbmd1YWdlOworCisgICAgLy8gVHJhY2tzIG5vdCBpbiB0aGUg
dXNlcidzIHByZWZlcnJlZCBsYW5ndWFnZSBzb3J0IGZpcnN0IGJ5IGxhbmd1YWdlIC4uLgorICAg
IGlmIChjb2RlUG9pbnRDb21wYXJlKGFMYW5ndWFnZURpc3BsYXlOYW1lLCBiTGFuZ3VhZ2VEaXNw
bGF5TmFtZSkpCisgICAgICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKGFMYW5ndWFnZURpc3Bs
YXlOYW1lLCBiTGFuZ3VhZ2VEaXNwbGF5TmFtZSkgPCAwOworCisgICAgLy8gLi4uIGJ1dCB3aGVu
IHRyYWNrcyBoYXZlIHRoZSBzYW1lIGxhbmd1YWdlLCBtYWluIHByb2dyYW0gY29udGVudCBzb3J0
cyBuZXh0IGhpZ2hlc3QgLi4uCisgICAgYm9vbCBhSXNNYWluQ29udGVudCA9IGEtPmlzTWFpblBy
b2dyYW1Db250ZW50KCk7CisgICAgYm9vbCBiSXNNYWluQ29udGVudCA9IGItPmlzTWFpblByb2dy
YW1Db250ZW50KCk7CisgICAgaWYgKChhSXNNYWluQ29udGVudCB8fCBiSXNNYWluQ29udGVudCkg
JiYgKGFJc01haW5Db250ZW50ICE9IGJJc01haW5Db250ZW50KSkKKyAgICAgICAgcmV0dXJuIGFJ
c01haW5Db250ZW50OworCisgICAgLy8gLi4uIGFuZCBtYWluIHByb2dyYW0gdHJha2NzIHNvcnQg
aGlnaGVyIHRoYW4gQ0MgdHJhY2tzIC4uLgorICAgIGJvb2wgYUlzQ0MgPSBhLT5pc0Nsb3NlZENh
cHRpb25zKCk7CisgICAgYm9vbCBiSXNDQyA9IGItPmlzQ2xvc2VkQ2FwdGlvbnMoKTsKKyAgICBp
ZiAoKGFJc0NDIHx8IGJJc0NDKSAmJiAoYUlzQ0MgIT0gYklzQ0MpKSB7CisgICAgICAgIGlmIChh
SXNDQykKKyAgICAgICAgICAgIHJldHVybiBhSXNNYWluQ29udGVudDsKKyAgICAgICAgcmV0dXJu
IGJJc01haW5Db250ZW50OworICAgIH0KKworICAgIC8vIC4uLiBhbmQgdHJhY2tzIG9mIHRoZSBz
YW1lIHR5cGUgYW5kIGxhbmd1YWdlIHNvcnQgYnkgdGhlIG1lbnUgaXRlbSB0ZXh0LgorICAgIHJl
dHVybiBjb2RlUG9pbnRDb21wYXJlKHRyYWNrRGlzcGxheU5hbWUoYS5nZXQoKSksIHRyYWNrRGlz
cGxheU5hbWUoYi5nZXQoKSkpIDwgMDsKK30KKworVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+ID4g
Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6c29ydGVkVHJhY2tMaXN0Rm9yTWVudShUZXh0VHJh
Y2tMaXN0KiB0cmFja0xpc3QpCit7CisgICAgQVNTRVJUKHRyYWNrTGlzdCk7CisKKyAgICBWZWN0
b3I8UmVmUHRyPFRleHRUcmFjaz4gPiB0cmFja3NGb3JNZW51OworICAgIEhhc2hTZXQ8U3RyaW5n
PiBsYW5ndWFnZXNJbmNsdWRlZDsKKyAgICBib29sIHByZWZlcnNBY2Nlc3NpYmlsaXR5VHJhY2tz
ID0gdXNlclByZWZlcnNDYXB0aW9ucygpOworICAgIGJvb2wgZmlsdGVyVHJhY2tMaXN0ID0gc2hv
dWxkRmlsdGVyVHJhY2tNZW51KCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBsZW5ndGgg
PSB0cmFja0xpc3QtPmxlbmd0aCgpOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgVGV4dFRy
YWNrKiB0cmFjayA9IHRyYWNrTGlzdC0+aXRlbShpKTsKKyAgICAgICAgU3RyaW5nIGxhbmd1YWdl
ID0gZGlzcGxheU5hbWVGb3JMYW5ndWFnZUxvY2FsZSh0cmFjay0+bGFuZ3VhZ2UoKSk7CisKKyAg
ICAgICAgaWYgKHRyYWNrLT5jb250YWluc09ubHlGb3JjZWRTdWJ0aXRsZXMoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgaWYgKHRyYWNrLT5pc0Vhc3lUb1JlYWQo
KSkgeworICAgICAgICAgICAgaWYgKCFsYW5ndWFnZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgbGFuZ3VhZ2VzSW5jbHVkZWQuYWRkKGxhbmd1YWdlKTsKKyAgICAgICAgICAgIHRyYWNrc0Zv
ck1lbnUuYXBwZW5kKHRyYWNrKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCFsYW5ndWFnZS5pc0VtcHR5KCkgJiYgdHJhY2stPmlzTWFpblByb2dyYW1D
b250ZW50KCkpIHsKKyAgICAgICAgICAgIGJvb2wgaXNBY2Nlc3NpYmlsaXR5VHJhY2sgPSB0cmFj
ay0+a2luZCgpID09IHRyYWNrLT5jYXB0aW9uc0tleXdvcmQoKTsKKyAgICAgICAgICAgIGlmIChw
cmVmZXJzQWNjZXNzaWJpbGl0eVRyYWNrcykgeworICAgICAgICAgICAgICAgIC8vIEluIHRoZSBm
aXJzdCBwYXNzLCBpbmNsdWRlIG9ubHkgY2FwdGlvbiB0cmFja3MgaWYgdGhlIHVzZXIgcHJlZmVy
cyBhY2Nlc3NpYmlsaXR5IHRyYWNrcy4KKyAgICAgICAgICAgICAgICBpZiAoIWlzQWNjZXNzaWJp
bGl0eVRyYWNrICYmIGZpbHRlclRyYWNrTGlzdCkgeworICAgICAgICAgICAgICAgICAgICBMT0co
TWVkaWEsICJDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpzb3J0ZWRUcmFja0xpc3RGb3JNZW51
IC0gc2tpcHBpbmcgJyVzJyB0cmFjayB3aXRoIGxhbmd1YWdlICclcycgYmVjYXVzZSBpdCBpcyBO
T1QgYW4gYWNjZXNzaWJpbGl0eSB0cmFjayIsIHRyYWNrLT5raW5kKCkuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwgbGFuZ3VhZ2UudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgLy8gSW4gdGhlIGZpcnN0IHBhc3MsIG9ubHkgaW5jbHVkZSB0aGUgZmlyc3Qgbm9u
LUNDIG9yIFNESCB0cmFjayB3aXRoIGVhY2ggbGFuZ3VhZ2UgaWYgdGhlIHVzZXIgcHJlZmVycyB0
cmFuc2xhdGlvbiB0cmFja3MuCisgICAgICAgICAgICAgICAgaWYgKGlzQWNjZXNzaWJpbGl0eVRy
YWNrICYmIGZpbHRlclRyYWNrTGlzdCkgeworICAgICAgICAgICAgICAgICAgICBMT0coTWVkaWEs
ICJDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpzb3J0ZWRUcmFja0xpc3RGb3JNZW51IC0gc2tp
cHBpbmcgJyVzJyB0cmFjayB3aXRoIGxhbmd1YWdlICclcycgYmVjYXVzZSBpdCBpcyBhbiBhY2Nl
c3NpYmlsaXR5IHRyYWNrIiwgdHJhY2stPmtpbmQoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBs
YW5ndWFnZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChsYW5ndWFnZXNJbmNsdWRlZC5j
b250YWlucyhsYW5ndWFnZSkgICYmIGZpbHRlclRyYWNrTGlzdCkgeworICAgICAgICAgICAgICAg
ICAgICBMT0coTWVkaWEsICJDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpzb3J0ZWRUcmFja0xp
c3RGb3JNZW51IC0gc2tpcHBpbmcgJyVzJyB0cmFjayB3aXRoIGxhbmd1YWdlICclcycgYmVjYXVz
ZSBpdCBpcyBub3QgdGhlIGZpcnN0IHdpdGggdGhpcyBsYW5ndWFnZSIsIHRyYWNrLT5raW5kKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbGFuZ3VhZ2UudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmICghbGFuZ3VhZ2UuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgbGFuZ3VhZ2VzSW5jbHVkZWQuYWRkKGxhbmd1YWdlKTsKKyAgICAgICAgdHJhY2tzRm9yTWVu
dS5hcHBlbmQodHJhY2spOworICAgIH0KKworICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgZmlsdGVy
ZWQgZm9yIHRoZSB1c2VyJ3MgYWNjZXNzaWJpbGl0eS90cmFuc2xhdGlvbiBwcmVmZXJlbmNlLCBh
ZGQgIGFsbCB0cmFja3Mgd2l0aCBhIHVuaXF1ZSBsYW5ndWFnZSB3aXRob3V0IHJlZ2FyZCB0byB0
cmFjayB0eXBlLgorICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGxlbmd0aCA9IHRyYWNrTGlzdC0+
bGVuZ3RoKCk7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBUZXh0VHJhY2sqIHRyYWNrID0g
dHJhY2tMaXN0LT5pdGVtKGkpOworICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSBkaXNwbGF5TmFt
ZUZvckxhbmd1YWdlTG9jYWxlKHRyYWNrLT5sYW5ndWFnZSgpKTsKKworICAgICAgICAvLyBBbGwg
Y2FuZGlkYXRlcyB3aXRoIG5vIGxhbmd1Z2Ugd2VyZSBhZGRlZCB0aGUgZmlyc3QgdGltZSB0aHJv
dWdoLgorICAgICAgICBpZiAobGFuZ3VhZ2UuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgaWYgKHRyYWNrLT5jb250YWluc09ubHlGb3JjZWRTdWJ0aXRsZXMoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworIAorICAgICAgICBpZiAoIWxhbmd1YWdlc0luY2x1ZGVk
LmNvbnRhaW5zKGxhbmd1YWdlKSAmJiB0cmFjay0+aXNNYWluUHJvZ3JhbUNvbnRlbnQoKSkgewor
ICAgICAgICAgICAgbGFuZ3VhZ2VzSW5jbHVkZWQuYWRkKGxhbmd1YWdlKTsKKyAgICAgICAgICAg
IHRyYWNrc0Zvck1lbnUuYXBwZW5kKHRyYWNrKTsKKyAgICAgICAgICAgIExPRyhNZWRpYSwgIkNh
cHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNvcnRlZFRyYWNrTGlzdEZvck1lbnUgLSBhZGRpbmcg
JyVzJyB0cmFjayB3aXRoIGxhbmd1YWdlICclcycgYmVjYXVzZSBpdCBpcyB0aGUgb25seSB0cmFj
ayB3aXRoIHRoaXMgbGFuZ3VhZ2UiLCB0cmFjay0+a2luZCgpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCksIGxhbmd1YWdlLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgbm9u
Q29weWluZ1NvcnQodHJhY2tzRm9yTWVudS5iZWdpbigpLCB0cmFja3NGb3JNZW51LmVuZCgpLCB0
ZXh0VHJhY2tDb21wYXJlKTsKKworICAgIHRyYWNrc0Zvck1lbnUuaW5zZXJ0KDAsIFRleHRUcmFj
azo6Y2FwdGlvbk1lbnVPZmZJdGVtKCkpOworICAgIHRyYWNrc0Zvck1lbnUuaW5zZXJ0KDEsIFRl
eHRUcmFjazo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCkpOworCisgICAgcmV0dXJuIHRyYWNr
c0Zvck1lbnU7Cit9CisgICAgCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5j
ZXNNZWRpYUFGLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0
aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDQxICsy
Myw0MCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2ltcG9ydCAiY29uZmlnLmgiCisjaW5j
bHVkZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAKLSNpbXBvcnQgIkNh
cHRpb25Vc2VyUHJlZmVyZW5jZXNNYWMuaCIKKyNpbmNsdWRlICJDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWVkaWFBRi5oIgogCi0jaW1wb3J0ICJDb2xvck1hYy5oIgotI2ltcG9ydCAiQ29yZVRleHQv
Q29yZVRleHQuaCIKLSNpbXBvcnQgIkRPTVdyYXBwZXJXb3JsZC5oIgotI2ltcG9ydCAiRmxvYXRD
b252ZXJzaW9uLmgiCi0jaW1wb3J0ICJIVE1MTWVkaWFFbGVtZW50LmgiCi0jaW1wb3J0ICJLVVJM
LmgiCi0jaW1wb3J0ICJMYW5ndWFnZS5oIgotI2ltcG9ydCAiTG9jYWxpemVkU3RyaW5ncy5oIgot
I2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKLSNp
bXBvcnQgIlBhZ2VHcm91cC5oIgotI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKLSNpbXBvcnQgIlRl
eHRUcmFja0N1ZS5oIgotI2ltcG9ydCAiVGV4dFRyYWNrTGlzdC5oIgotI2ltcG9ydCAiVXNlclN0
eWxlU2hlZXRUeXBlcy5oIgotI2ltcG9ydCA8d3RmL05vbkNvcHlpbmdTb3J0Lmg+Ci0jaW1wb3J0
IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Cisj
aW5jbHVkZSAiQ29yZVRleHQvQ29yZVRleHQuaCIKKyNpbmNsdWRlICJET01XcmFwcGVyV29ybGQu
aCIKKyNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVt
ZW50LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIkxhbmd1YWdlLmgiCisjaW5jbHVk
ZSAiTG9jYWxpemVkU3RyaW5ncy5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJN
ZWRpYUNvbnRyb2xFbGVtZW50cy5oIgorI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUg
IlNvZnRMaW5raW5nLmgiCisjaW5jbHVkZSAiVGV4dFRyYWNrQ3VlLmgiCisjaW5jbHVkZSAiVGV4
dFRyYWNrTGlzdC5oIgorI2luY2x1ZGUgIlVzZXJTdHlsZVNoZWV0VHlwZXMuaCIKKyNpbmNsdWRl
IDx3dGYvTm9uQ29weWluZ1NvcnQuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgUExBVEZPUk0oSU9TKQogI2lt
cG9ydCAiV2ViQ29yZVRocmVhZFJ1bi5oIgogI2VuZGlmCiAKICNpZiBIQVZFKE1FRElBX0FDQ0VT
U0lCSUxJVFlfRlJBTUVXT1JLKQotI2ltcG9ydCAiTWVkaWFBY2Nlc3NpYmlsaXR5L01lZGlhQWNj
ZXNzaWJpbGl0eS5oIgorI2luY2x1ZGUgIk1lZGlhQWNjZXNzaWJpbGl0eS9NZWRpYUFjY2Vzc2li
aWxpdHkuaCIKICNlbmRpZgogCiAjaWYgSEFWRShNRURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1FV09S
SykKLQorI2lmICFQTEFURk9STShXSU4pCiBTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKE1l
ZGlhQWNjZXNzaWJpbGl0eSkKIAogU09GVF9MSU5LKE1lZGlhQWNjZXNzaWJpbGl0eSwgTUFDYXB0
aW9uQXBwZWFyYW5jZUdldERpc3BsYXlUeXBlLCBNQUNhcHRpb25BcHBlYXJhbmNlRGlzcGxheVR5
cGUsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiksIChkb21haW4pKQpAQCAtNzks
NiArNzgsNjIgQEAgU09GVF9MSU5LKE1lZGlhQWNjZXNzaWJpbGl0eSwgTUFDYXB0aW9uQQogU09G
VF9MSU5LX1BPSU5URVIoTWVkaWFBY2Nlc3NpYmlsaXR5LCBrTUFYQ2FwdGlvbkFwcGVhcmFuY2VT
ZXR0aW5nc0NoYW5nZWROb3RpZmljYXRpb24sIENGU3RyaW5nUmVmKQogI2RlZmluZSBrTUFYQ2Fw
dGlvbkFwcGVhcmFuY2VTZXR0aW5nc0NoYW5nZWROb3RpZmljYXRpb24gZ2V0a01BWENhcHRpb25B
cHBlYXJhbmNlU2V0dGluZ3NDaGFuZ2VkTm90aWZpY2F0aW9uKCkKIAorI2Vsc2UKK1NPRlRfTElO
S19MSUJSQVJZKE1lZGlhQWNjZXNzaWJpbGl0eSkKKworU09GVF9MSU5LX0RMTF9JTVBPUlQoTWVk
aWFBY2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBlYXJhbmNlR2V0RGlzcGxheVR5cGUsIE1BQ2Fw
dGlvbkFwcGVhcmFuY2VEaXNwbGF5VHlwZSwgX19jZGVjbCwgKE1BQ2FwdGlvbkFwcGVhcmFuY2VE
b21haW4gZG9tYWluKSwgKGRvbWFpbikpCisjZGVmaW5lIE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRE
aXNwbGF5VHlwZSBzb2Z0TGlua19NQUNhcHRpb25BcHBlYXJhbmNlR2V0RGlzcGxheVR5cGUKKwor
U09GVF9MSU5LX0RMTF9JTVBPUlQoTWVkaWFBY2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBlYXJh
bmNlU2V0RGlzcGxheVR5cGUsIHZvaWQsIF9fY2RlY2wsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9t
YWluIGRvbWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5jZURpc3BsYXlUeXBlIGRpc3BsYXlUeXBlKSwg
KGRvbWFpbiwgZGlzcGxheVR5cGUpKQorI2RlZmluZSBNQUNhcHRpb25BcHBlYXJhbmNlU2V0RGlz
cGxheVR5cGUgc29mdExpbmtfTUFDYXB0aW9uQXBwZWFyYW5jZVNldERpc3BsYXlUeXBlCisKK1NP
RlRfTElOS19ETExfSU1QT1JUKE1lZGlhQWNjZXNzaWJpbGl0eSwgTUFDYXB0aW9uQXBwZWFyYW5j
ZUNvcHlGb3JlZ3JvdW5kQ29sb3IsIENHQ29sb3JSZWYsIF9fY2RlY2wsIChNQUNhcHRpb25BcHBl
YXJhbmNlRG9tYWluIGRvbWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yICpiZWhhdmlv
ciksIChkb21haW4sIGJlaGF2aW9yKSkKKyNkZWZpbmUgTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlG
b3JlZ3JvdW5kQ29sb3Igc29mdExpbmtfTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlGb3JlZ3JvdW5k
Q29sb3IKKworU09GVF9MSU5LX0RMTF9JTVBPUlQoTWVkaWFBY2Nlc3NpYmlsaXR5LCBNQUNhcHRp
b25BcHBlYXJhbmNlQ29weUJhY2tncm91bmRDb2xvciwgQ0dDb2xvclJlZiwgX19jZGVjbCwgKE1B
Q2FwdGlvbkFwcGVhcmFuY2VEb21haW4gZG9tYWluLCBNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZp
b3IgKmJlaGF2aW9yKSwgKGRvbWFpbiwgYmVoYXZpb3IpKQorI2RlZmluZSBNQUNhcHRpb25BcHBl
YXJhbmNlQ29weUJhY2tncm91bmRDb2xvciBzb2Z0TGlua19NQUNhcHRpb25BcHBlYXJhbmNlQ29w
eUJhY2tncm91bmRDb2xvcgorCitTT0ZUX0xJTktfRExMX0lNUE9SVChNZWRpYUFjY2Vzc2liaWxp
dHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5V2luZG93Q29sb3IsIENHQ29sb3JSZWYsIF9fY2Rl
Y2wsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5j
ZUJlaGF2aW9yICpiZWhhdmlvciksIChkb21haW4sIGJlaGF2aW9yKSkKKyNkZWZpbmUgTUFDYXB0
aW9uQXBwZWFyYW5jZUNvcHlXaW5kb3dDb2xvciBzb2Z0TGlua19NQUNhcHRpb25BcHBlYXJhbmNl
Q29weVdpbmRvd0NvbG9yCisKK1NPRlRfTElOS19ETExfSU1QT1JUKE1lZGlhQWNjZXNzaWJpbGl0
eSwgTUFDYXB0aW9uQXBwZWFyYW5jZUdldEZvcmVncm91bmRPcGFjaXR5LCBDR0Zsb2F0LCBfX2Nk
ZWNsLCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpbiBkb21haW4sIE1BQ2FwdGlvbkFwcGVhcmFu
Y2VCZWhhdmlvciAqYmVoYXZpb3IpLCAoZG9tYWluLCBiZWhhdmlvcikpCisjZGVmaW5lIE1BQ2Fw
dGlvbkFwcGVhcmFuY2VHZXRGb3JlZ3JvdW5kT3BhY2l0eSBzb2Z0TGlua19NQUNhcHRpb25BcHBl
YXJhbmNlR2V0Rm9yZWdyb3VuZE9wYWNpdHkKKworU09GVF9MSU5LX0RMTF9JTVBPUlQoTWVkaWFB
Y2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBlYXJhbmNlR2V0QmFja2dyb3VuZE9wYWNpdHksIENH
RmxvYXQsIF9fY2RlY2wsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiwgTUFDYXB0
aW9uQXBwZWFyYW5jZUJlaGF2aW9yICpiZWhhdmlvciksIChkb21haW4sIGJlaGF2aW9yKSkKKyNk
ZWZpbmUgTUFDYXB0aW9uQXBwZWFyYW5jZUdldEJhY2tncm91bmRPcGFjaXR5IHNvZnRMaW5rX01B
Q2FwdGlvbkFwcGVhcmFuY2VHZXRCYWNrZ3JvdW5kT3BhY2l0eQorCitTT0ZUX0xJTktfRExMX0lN
UE9SVChNZWRpYUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRXaW5kb3dPcGFj
aXR5LCBDR0Zsb2F0LCBfX2NkZWNsLCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpbiBkb21haW4s
IE1BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvciAqYmVoYXZpb3IpLCAoZG9tYWluLCBiZWhhdmlv
cikpCisjZGVmaW5lIE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRXaW5kb3dPcGFjaXR5IHNvZnRMaW5r
X01BQ2FwdGlvbkFwcGVhcmFuY2VHZXRXaW5kb3dPcGFjaXR5CisKK1NPRlRfTElOS19ETExfSU1Q
T1JUKE1lZGlhQWNjZXNzaWJpbGl0eSwgTUFDYXB0aW9uQXBwZWFyYW5jZUdldFdpbmRvd1JvdW5k
ZWRDb3JuZXJSYWRpdXMsIENHRmxvYXQsIF9fY2RlY2wsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9t
YWluIGRvbWFpbiwgTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yICpiZWhhdmlvciksIChkb21h
aW4sIGJlaGF2aW9yKSkKKyNkZWZpbmUgTUFDYXB0aW9uQXBwZWFyYW5jZUdldFdpbmRvd1JvdW5k
ZWRDb3JuZXJSYWRpdXMgc29mdExpbmtfTUFDYXB0aW9uQXBwZWFyYW5jZUdldFdpbmRvd1JvdW5k
ZWRDb3JuZXJSYWRpdXMKKworU09GVF9MSU5LX0RMTF9JTVBPUlQoTWVkaWFBY2Nlc3NpYmlsaXR5
LCBNQUNhcHRpb25BcHBlYXJhbmNlQ29weUZvbnREZXNjcmlwdG9yRm9yU3R5bGUsIENURm9udERl
c2NyaXB0b3JSZWYsIF9fY2RlY2wsIChNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWluIGRvbWFpbiwg
IE1BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvciAqYmVoYXZpb3IsIE1BQ2FwdGlvbkFwcGVhcmFu
Y2VGb250U3R5bGUgZm9udFN0eWxlKSwgKGRvbWFpbiwgYmVoYXZpb3IsIGZvbnRTdHlsZSkpCisj
ZGVmaW5lIE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5Rm9udERlc2NyaXB0b3JGb3JTdHlsZSBzb2Z0
TGlua19NQUNhcHRpb25BcHBlYXJhbmNlQ29weUZvbnREZXNjcmlwdG9yRm9yU3R5bGUKKworU09G
VF9MSU5LX0RMTF9JTVBPUlQoTWVkaWFBY2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBlYXJhbmNl
R2V0UmVsYXRpdmVDaGFyYWN0ZXJTaXplLCBDR0Zsb2F0LCBfX2NkZWNsLCAoTUFDYXB0aW9uQXBw
ZWFyYW5jZURvbWFpbiBkb21haW4sIE1BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvciAqYmVoYXZp
b3IpLCAoZG9tYWluLCBiZWhhdmlvcikpCisjZGVmaW5lIE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRS
ZWxhdGl2ZUNoYXJhY3RlclNpemUgc29mdExpbmtfTUFDYXB0aW9uQXBwZWFyYW5jZUdldFJlbGF0
aXZlQ2hhcmFjdGVyU2l6ZQorCitTT0ZUX0xJTktfRExMX0lNUE9SVChNZWRpYUFjY2Vzc2liaWxp
dHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VHZXRUZXh0RWRnZVN0eWxlLCBNQUNhcHRpb25BcHBlYXJh
bmNlVGV4dEVkZ2VTdHlsZSwgX19jZGVjbCwgKE1BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW4gZG9t
YWluLCBNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgKmJlaGF2aW9yKSwgKGRvbWFpbiwgYmVo
YXZpb3IpKQorI2RlZmluZSBNQUNhcHRpb25BcHBlYXJhbmNlR2V0VGV4dEVkZ2VTdHlsZSBzb2Z0
TGlua19NQUNhcHRpb25BcHBlYXJhbmNlR2V0VGV4dEVkZ2VTdHlsZQorCitTT0ZUX0xJTktfRExM
X0lNUE9SVChNZWRpYUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVhcmFuY2VBZGRTZWxlY3Rl
ZExhbmd1YWdlLCBib29sLCBfX2NkZWNsLCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpbiBkb21h
aW4sIENGU3RyaW5nUmVmIGxhbmd1YWdlKSwgKGRvbWFpbiwgbGFuZ3VhZ2UpKTsKKyNkZWZpbmUg
TUFDYXB0aW9uQXBwZWFyYW5jZUFkZFNlbGVjdGVkTGFuZ3VhZ2Ugc29mdExpbmtfTUFDYXB0aW9u
QXBwZWFyYW5jZUFkZFNlbGVjdGVkTGFuZ3VhZ2UKKworU09GVF9MSU5LX0RMTF9JTVBPUlQoTWVk
aWFBY2Nlc3NpYmlsaXR5LCBNQUNhcHRpb25BcHBlYXJhbmNlQ29weVNlbGVjdGVkTGFuZ3VhZ2Vz
LCBDRkFycmF5UmVmLCBfX2NkZWNsLCAoTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpbiBkb21haW4p
LCAoZG9tYWluKSk7CisjZGVmaW5lIE1BQ2FwdGlvbkFwcGVhcmFuY2VDb3B5U2VsZWN0ZWRMYW5n
dWFnZXMgc29mdExpbmtfTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlTZWxlY3RlZExhbmd1YWdlcwor
CitTT0ZUX0xJTktfRExMX0lNUE9SVChNZWRpYUFjY2Vzc2liaWxpdHksIE1BQ2FwdGlvbkFwcGVh
cmFuY2VDb3B5UHJlZmVycmVkQ2FwdGlvbmluZ01lZGlhQ2hhcmFjdGVyaXN0aWNzLCAgQ0ZBcnJh
eVJlZiwgX19jZGVjbCwgKE1BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW4gZG9tYWluKSwgKGRvbWFp
bikpOworI2RlZmluZSBNQUNhcHRpb25BcHBlYXJhbmNlQ29weVByZWZlcnJlZENhcHRpb25pbmdN
ZWRpYUNoYXJhY3RlcmlzdGljcyBzb2Z0TGlua19NQUNhcHRpb25BcHBlYXJhbmNlQ29weVByZWZl
cnJlZENhcHRpb25pbmdNZWRpYUNoYXJhY3RlcmlzdGljcworCitTT0ZUX0xJTktfVkFSSUFCTEVf
RExMX0lNUE9SVChNZWRpYUFjY2Vzc2liaWxpdHksIGtNQVhDYXB0aW9uQXBwZWFyYW5jZVNldHRp
bmdzQ2hhbmdlZE5vdGlmaWNhdGlvbiwgQ0ZTdHJpbmdSZWYpCisjZGVmaW5lIGtNQVhDYXB0aW9u
QXBwZWFyYW5jZVNldHRpbmdzQ2hhbmdlZE5vdGlmaWNhdGlvbiBnZXRfa01BWENhcHRpb25BcHBl
YXJhbmNlU2V0dGluZ3NDaGFuZ2VkTm90aWZpY2F0aW9uKCkKKworU09GVF9MSU5LX0xJQlJBUlko
Q29yZVRleHQpCisKKworI2VuZGlmCisKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpA
QCAtODksMTYgKzE0NCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgdm9pZCB1c2Vy
Q2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNhdGlvbkNhbGxiYWNrKENGTm90aWZpY2F0
aW9uQ2VudGVyUmVmLCB2b2lkKiBvYnNlcnZlciwgQ0ZTdHJpbmdSZWYsIGNvbnN0IHZvaWQgKiwg
Q0ZEaWN0aW9uYXJ5UmVmKQogewogI2lmICFQTEFURk9STShJT1MpCi0gICAgc3RhdGljX2Nhc3Q8
Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYyo+KG9ic2VydmVyKS0+Y2FwdGlvblByZWZlcmVuY2Vz
Q2hhbmdlZCgpOworICAgIHN0YXRpY19jYXN0PENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFG
Kj4ob2JzZXJ2ZXIpLT5jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7CiAjZWxzZQogICAgIFdl
YlRocmVhZFJ1biheewotICAgICAgICBzdGF0aWNfY2FzdDxDYXB0aW9uVXNlclByZWZlcmVuY2Vz
TWFjKj4ob2JzZXJ2ZXIpLT5jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7CisgICAgICAgIHN0
YXRpY19jYXN0PENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGKj4ob2JzZXJ2ZXIpLT5jYXB0
aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7CiAgICAgfSk7CiAjZW5kaWYKIH0KICNlbmRpZgogCi1D
YXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjKFBhZ2VH
cm91cCogZ3JvdXApCitDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Q2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01lZGlhQUYoUGFnZUdyb3VwKiBncm91cCkKICAgICA6IENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXMoZ3JvdXApCiAjaWYgSEFWRShNRURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1FV09SSykK
ICAgICAsIG1fbGlzdGVuaW5nRm9yUHJlZmVyZW5jZUNoYW5nZXMoZmFsc2UpCkBAIC0xMDYsMTcg
KzE2MSwxNyBAQCBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpDYXB0aW9uVXNlclByCiB7CiB9
CiAKLUNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6On5DYXB0aW9uVXNlclByZWZlcmVuY2VzTWFj
KCkKK0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjp+Q2FwdGlvblVzZXJQcmVmZXJlbmNl
c01lZGlhQUYoKQogewogI2lmIEhBVkUoTUVESUFfQUNDRVNTSUJJTElUWV9GUkFNRVdPUkspCiAg
ICAgaWYgKGtNQVhDYXB0aW9uQXBwZWFyYW5jZVNldHRpbmdzQ2hhbmdlZE5vdGlmaWNhdGlvbikK
LSAgICAgICAgQ0ZOb3RpZmljYXRpb25DZW50ZXJSZW1vdmVPYnNlcnZlcihDRk5vdGlmaWNhdGlv
bkNlbnRlckdldExvY2FsQ2VudGVyKCksIHRoaXMsIGtNQVhDYXB0aW9uQXBwZWFyYW5jZVNldHRp
bmdzQ2hhbmdlZE5vdGlmaWNhdGlvbiwgTlVMTCk7CisgICAgICAgIENGTm90aWZpY2F0aW9uQ2Vu
dGVyUmVtb3ZlT2JzZXJ2ZXIoQ0ZOb3RpZmljYXRpb25DZW50ZXJHZXRMb2NhbENlbnRlcigpLCB0
aGlzLCBrTUFYQ2FwdGlvbkFwcGVhcmFuY2VTZXR0aW5nc0NoYW5nZWROb3RpZmljYXRpb24sIDAp
OwogI2VuZGlmCiB9CiAKICNpZiBIQVZFKE1FRElBX0FDQ0VTU0lCSUxJVFlfRlJBTUVXT1JLKQog
Ci1DYXB0aW9uVXNlclByZWZlcmVuY2VzOjpDYXB0aW9uRGlzcGxheU1vZGUgQ2FwdGlvblVzZXJQ
cmVmZXJlbmNlc01hYzo6Y2FwdGlvbkRpc3BsYXlNb2RlKCkgY29uc3QKK0NhcHRpb25Vc2VyUHJl
ZmVyZW5jZXM6OkNhcHRpb25EaXNwbGF5TW9kZSBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFB
Rjo6Y2FwdGlvbkRpc3BsYXlNb2RlKCkgY29uc3QKIHsKICAgICBpZiAodGVzdGluZ01vZGUoKSB8
fCAhTWVkaWFBY2Nlc3NpYmlsaXR5TGlicmFyeSgpKQogICAgICAgICByZXR1cm4gQ2FwdGlvblVz
ZXJQcmVmZXJlbmNlczo6Y2FwdGlvbkRpc3BsYXlNb2RlKCk7CkBAIC0xNDAsNyArMTk1LDcgQEAg
Q2FwdGlvblVzZXJQcmVmZXJlbmNlczo6Q2FwdGlvbkRpc3BsYXlNbwogICAgIHJldHVybiBGb3Jj
ZWRPbmx5OwogfQogICAgIAotdm9pZCBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpzZXRDYXB0
aW9uRGlzcGxheU1vZGUoQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6Q2FwdGlvbkRpc3BsYXlNb2Rl
IG1vZGUpCit2b2lkIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpzZXRDYXB0aW9uRGlz
cGxheU1vZGUoQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6Q2FwdGlvbkRpc3BsYXlNb2RlIG1vZGUp
CiB7CiAgICAgaWYgKHRlc3RpbmdNb2RlKCkgfHwgIU1lZGlhQWNjZXNzaWJpbGl0eUxpYnJhcnko
KSkgewogICAgICAgICBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpzZXRDYXB0aW9uRGlzcGxheU1v
ZGUobW9kZSk7CkBAIC0xNDksMjQgKzIwNCwyNCBAQCB2b2lkIENhcHRpb25Vc2VyUHJlZmVyZW5j
ZXNNYWM6OnNldENhcHRpCiAKICAgICBNQUNhcHRpb25BcHBlYXJhbmNlRGlzcGxheVR5cGUgZGlz
cGxheVR5cGUgPSBrTUFDYXB0aW9uQXBwZWFyYW5jZURpc3BsYXlUeXBlRm9yY2VkT25seTsKICAg
ICBzd2l0Y2ggKG1vZGUpIHsKLSAgICAgICAgY2FzZSBBdXRvbWF0aWM6Ci0gICAgICAgICAgICBk
aXNwbGF5VHlwZSA9IGtNQUNhcHRpb25BcHBlYXJhbmNlRGlzcGxheVR5cGVBdXRvbWF0aWM7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb3JjZWRPbmx5OgotICAgICAgICAgICAg
ZGlzcGxheVR5cGUgPSBrTUFDYXB0aW9uQXBwZWFyYW5jZURpc3BsYXlUeXBlRm9yY2VkT25seTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFsd2F5c09uOgotICAgICAgICAgICAg
ZGlzcGxheVR5cGUgPSBrTUFDYXB0aW9uQXBwZWFyYW5jZURpc3BsYXlUeXBlQWx3YXlzT247Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdXRvbWF0aWM6Cisg
ICAgICAgIGRpc3BsYXlUeXBlID0ga01BQ2FwdGlvbkFwcGVhcmFuY2VEaXNwbGF5VHlwZUF1dG9t
YXRpYzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb3JjZWRPbmx5OgorICAgICAgICBkaXNw
bGF5VHlwZSA9IGtNQUNhcHRpb25BcHBlYXJhbmNlRGlzcGxheVR5cGVGb3JjZWRPbmx5OworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFsd2F5c09uOgorICAgICAgICBkaXNwbGF5VHlwZSA9IGtN
QUNhcHRpb25BcHBlYXJhbmNlRGlzcGxheVR5cGVBbHdheXNPbjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFr
OwogICAgIH0KIAogICAgIE1BQ2FwdGlvbkFwcGVhcmFuY2VTZXREaXNwbGF5VHlwZShrTUFDYXB0
aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsIGRpc3BsYXlUeXBlKTsKIH0KIAotYm9vbCBDYXB0aW9u
VXNlclByZWZlcmVuY2VzTWFjOjp1c2VyUHJlZmVyc0NhcHRpb25zKCkgY29uc3QKK2Jvb2wgQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OnVzZXJQcmVmZXJzQ2FwdGlvbnMoKSBjb25zdAog
ewogICAgIGJvb2wgY2FwdGlvblNldHRpbmcgPSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjp1c2Vy
UHJlZmVyc0NhcHRpb25zKCk7CiAgICAgaWYgKGNhcHRpb25TZXR0aW5nIHx8IHRlc3RpbmdNb2Rl
KCkgfHwgIU1lZGlhQWNjZXNzaWJpbGl0eUxpYnJhcnkoKSkKQEAgLTE3Niw3ICsyMzEsNyBAQCBi
b29sIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnVzZXJQcmVmCiAgICAgcmV0dXJuIGNhcHRp
b25pbmdNZWRpYUNoYXJhY3RlcmlzdGljcyAmJiBDRkFycmF5R2V0Q291bnQoY2FwdGlvbmluZ01l
ZGlhQ2hhcmFjdGVyaXN0aWNzLmdldCgpKTsKIH0KIAotYm9vbCBDYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWFjOjp1c2VyUHJlZmVyc1N1YnRpdGxlcygpIGNvbnN0Citib29sIENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNZWRpYUFGOjp1c2VyUHJlZmVyc1N1YnRpdGxlcygpIGNvbnN0CiB7CiAgICAgYm9v
bCBzdWJ0aXRsZXNTZXR0aW5nID0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6dXNlclByZWZlcnNT
dWJ0aXRsZXMoKTsKICAgICBpZiAoc3VidGl0bGVzU2V0dGluZyB8fCB0ZXN0aW5nTW9kZSgpIHx8
ICFNZWRpYUFjY2Vzc2liaWxpdHlMaWJyYXJ5KCkpCkBAIC0xODYsNyArMjQxLDcgQEAgYm9vbCBD
YXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjp1c2VyUHJlZgogICAgIHJldHVybiAhKGNhcHRpb25p
bmdNZWRpYUNoYXJhY3RlcmlzdGljcyAmJiBDRkFycmF5R2V0Q291bnQoY2FwdGlvbmluZ01lZGlh
Q2hhcmFjdGVyaXN0aWNzLmdldCgpKSk7CiB9CiAKLXZvaWQgQ2FwdGlvblVzZXJQcmVmZXJlbmNl
c01hYzo6c2V0SW50ZXJlc3RlZEluQ2FwdGlvblByZWZlcmVuY2VDaGFuZ2VzKCkKK3ZvaWQgQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OnNldEludGVyZXN0ZWRJbkNhcHRpb25QcmVmZXJl
bmNlQ2hhbmdlcygpCiB7CiAgICAgaWYgKCFNZWRpYUFjY2Vzc2liaWxpdHlMaWJyYXJ5KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTE5NiwxMyArMjUxLDEzIEBAIHZvaWQgQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01hYzo6c2V0SW50ZXIKIAogICAgIGlmICghbV9saXN0ZW5pbmdGb3JQcmVmZXJlbmNl
Q2hhbmdlcykgewogICAgICAgICBtX2xpc3RlbmluZ0ZvclByZWZlcmVuY2VDaGFuZ2VzID0gdHJ1
ZTsKLSAgICAgICAgQ0ZOb3RpZmljYXRpb25DZW50ZXJBZGRPYnNlcnZlcihDRk5vdGlmaWNhdGlv
bkNlbnRlckdldExvY2FsQ2VudGVyKCksIHRoaXMsIHVzZXJDYXB0aW9uUHJlZmVyZW5jZXNDaGFu
Z2VkTm90aWZpY2F0aW9uQ2FsbGJhY2ssIGtNQVhDYXB0aW9uQXBwZWFyYW5jZVNldHRpbmdzQ2hh
bmdlZE5vdGlmaWNhdGlvbiwgTlVMTCwgQ0ZOb3RpZmljYXRpb25TdXNwZW5zaW9uQmVoYXZpb3JD
b2FsZXNjZSk7CisgICAgICAgIENGTm90aWZpY2F0aW9uQ2VudGVyQWRkT2JzZXJ2ZXIoQ0ZOb3Rp
ZmljYXRpb25DZW50ZXJHZXRMb2NhbENlbnRlcigpLCB0aGlzLCB1c2VyQ2FwdGlvblByZWZlcmVu
Y2VzQ2hhbmdlZE5vdGlmaWNhdGlvbkNhbGxiYWNrLCBrTUFYQ2FwdGlvbkFwcGVhcmFuY2VTZXR0
aW5nc0NoYW5nZWROb3RpZmljYXRpb24sIDAsIENGTm90aWZpY2F0aW9uU3VzcGVuc2lvbkJlaGF2
aW9yQ29hbGVzY2UpOwogICAgIH0KICAgICAKICAgICB1cGRhdGVDYXB0aW9uU3R5bGVTaGVldE92
ZXJpZGUoKTsKIH0KIAotdm9pZCBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpjYXB0aW9uUHJl
ZmVyZW5jZXNDaGFuZ2VkKCkKK3ZvaWQgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNh
cHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKQogewogICAgIGlmIChtX2xpc3RlbmluZ0ZvclByZWZl
cmVuY2VDaGFuZ2VzKQogICAgICAgICB1cGRhdGVDYXB0aW9uU3R5bGVTaGVldE92ZXJpZGUoKTsK
QEAgLTIxMCw3ICsyNjUsNyBAQCB2b2lkIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OmNhcHRp
b25QCiAgICAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdl
ZCgpOwogfQogCi1TdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6Y2FwdGlvbnNXaW5k
b3dDU1MoKSBjb25zdAorU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0
aW9uc1dpbmRvd0NTUygpIGNvbnN0CiB7CiAgICAgTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9y
IGJlaGF2aW9yOwogICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvciA9IGFkb3B0Q0YoTUFD
YXB0aW9uQXBwZWFyYW5jZUNvcHlXaW5kb3dDb2xvcihrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFp
blVzZXIsICZiZWhhdmlvcikpOwpAQCAtMjM2LDcgKzI5MSw3IEBAIFN0cmluZyBDYXB0aW9uVXNl
clByZWZlcmVuY2VzTWFjOjpjYXB0aW8KICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwog
fQogCi1TdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6Y2FwdGlvbnNCYWNrZ3JvdW5k
Q1NTKCkgY29uc3QKK1N0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlv
bnNCYWNrZ3JvdW5kQ1NTKCkgY29uc3QKIHsKICAgICAvLyBUaGlzIGRlZmF1bHQgdmFsdWUgbXVz
dCBiZSB0aGUgc2FtZSBhcyB0aGUgb25lIHNwZWNpZmllZCBpbiBtZWRpYUNvbnRyb2xzLmNzcyBm
b3IgLXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNrLXBhc3Qtbm9kZXMKICAgICAvLyBhbmQgd2Via2l0
LW1lZGlhLXRleHQtdHJhY2stZnV0dXJlLW5vZGVzLgpAQCAtMjU2LDcgKzMxMSw3IEBAIFN0cmlu
ZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpjYXB0aW8KICAgICByZXR1cm4gY29sb3JQcm9w
ZXJ0eUNTUyhDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgQ29sb3IoYmFja2dyb3VuZENvbG9y
LnJlZCgpLCBiYWNrZ3JvdW5kQ29sb3IuZ3JlZW4oKSwgYmFja2dyb3VuZENvbG9yLmJsdWUoKSwg
c3RhdGljX2Nhc3Q8aW50PihvcGFjaXR5ICogMjU1KSksIGltcG9ydGFudCk7CiB9CiAKLUNvbG9y
IENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OmNhcHRpb25zVGV4dENvbG9yKGJvb2wmIGltcG9y
dGFudCkgY29uc3QKK0NvbG9yIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9u
c1RleHRDb2xvcihib29sJiBpbXBvcnRhbnQpIGNvbnN0CiB7CiAgICAgTUFDYXB0aW9uQXBwZWFy
YW5jZUJlaGF2aW9yIGJlaGF2aW9yOwogICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBjb2xvciA9
IGFkb3B0Q0YoTUFDYXB0aW9uQXBwZWFyYW5jZUNvcHlGb3JlZ3JvdW5kQ29sb3Ioa01BQ2FwdGlv
bkFwcGVhcmFuY2VEb21haW5Vc2VyLCAmYmVoYXZpb3IpKTsKQEAgLTI3Miw3ICszMjcsNyBAQCBD
b2xvciBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpjYXB0aW9uCiAgICAgcmV0dXJuIENvbG9y
KHRleHRDb2xvci5yZWQoKSwgdGV4dENvbG9yLmdyZWVuKCksIHRleHRDb2xvci5ibHVlKCksIHN0
YXRpY19jYXN0PGludD4ob3BhY2l0eSAqIDI1NSkpOwogfQogICAgIAotU3RyaW5nIENhcHRpb25V
c2VyUHJlZmVyZW5jZXNNYWM6OmNhcHRpb25zVGV4dENvbG9yQ1NTKCkgY29uc3QKK1N0cmluZyBD
YXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNUZXh0Q29sb3JDU1MoKSBjb25z
dAogewogICAgIGJvb2wgaW1wb3J0YW50OwogICAgIENvbG9yIHRleHRDb2xvciA9IGNhcHRpb25z
VGV4dENvbG9yKGltcG9ydGFudCk7CkBAIC0yODMsNyArMzM4LDcgQEAgU3RyaW5nIENhcHRpb25V
c2VyUHJlZmVyZW5jZXNNYWM6OmNhcHRpbwogICAgIHJldHVybiBjb2xvclByb3BlcnR5Q1NTKENT
U1Byb3BlcnR5Q29sb3IsIHRleHRDb2xvciwgaW1wb3J0YW50KTsKIH0KICAgICAKLVN0cmluZyBD
YXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjp3aW5kb3dSb3VuZGVkQ29ybmVyUmFkaXVzQ1NTKCkg
Y29uc3QKK1N0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6d2luZG93Um91bmRl
ZENvcm5lclJhZGl1c0NTUygpIGNvbnN0CiB7CiAgICAgTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2
aW9yIGJlaGF2aW9yOwogICAgIENHRmxvYXQgcmFkaXVzID0gTUFDYXB0aW9uQXBwZWFyYW5jZUdl
dFdpbmRvd1JvdW5kZWRDb3JuZXJSYWRpdXMoa01BQ2FwdGlvbkFwcGVhcmFuY2VEb21haW5Vc2Vy
LCAmYmVoYXZpb3IpOwpAQCAtMzAwLDcgKzM1NSw3IEBAIFN0cmluZyBDYXB0aW9uVXNlclByZWZl
cmVuY2VzTWFjOjp3aW5kb3cKICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogICAg
IAotQ29sb3IgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6Y2FwdGlvbnNFZGdlQ29sb3JGb3JU
ZXh0Q29sb3IoY29uc3QgQ29sb3ImIHRleHRDb2xvcikgY29uc3QKK0NvbG9yIENhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc0VkZ2VDb2xvckZvclRleHRDb2xvcihjb25zdCBD
b2xvciYgdGV4dENvbG9yKSBjb25zdAogewogICAgIGludCBkaXN0YW5jZUZyb21XaGl0ZSA9IGRp
ZmZlcmVuY2VTcXVhcmVkKHRleHRDb2xvciwgQ29sb3I6OndoaXRlKTsKICAgICBpbnQgZGlzdGFu
Y2VGcm9tQmxhY2sgPSBkaWZmZXJlbmNlU3F1YXJlZCh0ZXh0Q29sb3IsIENvbG9yOjpibGFjayk7
CkBAIC0zMTEsNyArMzY2LDcgQEAgQ29sb3IgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6Y2Fw
dGlvbgogICAgIHJldHVybiB0ZXh0Q29sb3IubGlnaHQoKTsKIH0KIAotU3RyaW5nIENhcHRpb25V
c2VyUHJlZmVyZW5jZXNNYWM6OmNzc1Byb3BlcnR5V2l0aFRleHRFZGdlQ29sb3IoQ1NTUHJvcGVy
dHlJRCBpZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgQ29sb3ImIHRleHRDb2xvciwgYm9v
bCBpbXBvcnRhbnQpIGNvbnN0CitTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6
OmNzc1Byb3BlcnR5V2l0aFRleHRFZGdlQ29sb3IoQ1NTUHJvcGVydHlJRCBpZCwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSwgY29uc3QgQ29sb3ImIHRleHRDb2xvciwgYm9vbCBpbXBvcnRhbnQpIGNvbnN0
CiB7CiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgIApAQCAtMzI3LDcgKzM4Miw3IEBA
IFN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpjc3NQcm8KICAgICByZXR1cm4gYnVp
bGRlci50b1N0cmluZygpOwogfQogCi1TdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6
Y29sb3JQcm9wZXJ0eUNTUyhDU1NQcm9wZXJ0eUlEIGlkLCBjb25zdCBDb2xvciYgY29sb3IsIGJv
b2wgaW1wb3J0YW50KSBjb25zdAorU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFG
Ojpjb2xvclByb3BlcnR5Q1NTKENTU1Byb3BlcnR5SUQgaWQsIGNvbnN0IENvbG9yJiBjb2xvciwg
Ym9vbCBpbXBvcnRhbnQpIGNvbnN0CiB7CiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAg
IApAQCAtMzQxLDcgKzM5Niw3IEBAIFN0cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpj
b2xvclAKICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCi1TdHJpbmcgQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01hYzo6Y2FwdGlvbnNUZXh0RWRnZUNTUygpIGNvbnN0CitTdHJpbmcg
Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zVGV4dEVkZ2VDU1MoKSBjb25z
dAogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBlZGdlU3R5bGVSYWlz
ZWQsICgiIC0uMDVlbSAtLjA1ZW0gMCAiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7
CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGVkZ2VTdHlsZURlcHJlc3Nl
ZCwgKCIgLjA1ZW0gLjA1ZW0gMCAiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CkBA
IC0zNTcsMjggKzQxMiwyOCBAQCBTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6Y2Fw
dGlvCiAgICAgTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yIGJlaGF2aW9yOwogICAgIE1BQ2Fw
dGlvbkFwcGVhcmFuY2VUZXh0RWRnZVN0eWxlIHRleHRFZGdlU3R5bGUgPSBNQUNhcHRpb25BcHBl
YXJhbmNlR2V0VGV4dEVkZ2VTdHlsZShrTUFDYXB0aW9uQXBwZWFyYW5jZURvbWFpblVzZXIsICZi
ZWhhdmlvcik7CiAgICAgc3dpdGNoICh0ZXh0RWRnZVN0eWxlKSB7Ci0gICAgICAgIGNhc2Uga01B
Q2FwdGlvbkFwcGVhcmFuY2VUZXh0RWRnZVN0eWxlVW5kZWZpbmVkOgotICAgICAgICBjYXNlIGtN
QUNhcHRpb25BcHBlYXJhbmNlVGV4dEVkZ2VTdHlsZU5vbmU6Ci0gICAgICAgICAgICByZXR1cm4g
ZW1wdHlTdHJpbmcoKTsKKyAgICBjYXNlIGtNQUNhcHRpb25BcHBlYXJhbmNlVGV4dEVkZ2VTdHls
ZVVuZGVmaW5lZDoKKyAgICBjYXNlIGtNQUNhcHRpb25BcHBlYXJhbmNlVGV4dEVkZ2VTdHlsZU5v
bmU6CisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogICAgICAgICAgICAgCi0gICAgICAg
IGNhc2Uga01BQ2FwdGlvbkFwcGVhcmFuY2VUZXh0RWRnZVN0eWxlUmFpc2VkOgotICAgICAgICAg
ICAgcmV0dXJuIGNzc1Byb3BlcnR5V2l0aFRleHRFZGdlQ29sb3IoQ1NTUHJvcGVydHlUZXh0U2hh
ZG93LCBlZGdlU3R5bGVSYWlzZWQsIGNvbG9yLCBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFy
YW5jZUJlaGF2aW9yVXNlVmFsdWUpOwotICAgICAgICBjYXNlIGtNQUNhcHRpb25BcHBlYXJhbmNl
VGV4dEVkZ2VTdHlsZURlcHJlc3NlZDoKLSAgICAgICAgICAgIHJldHVybiBjc3NQcm9wZXJ0eVdp
dGhUZXh0RWRnZUNvbG9yKENTU1Byb3BlcnR5VGV4dFNoYWRvdywgZWRnZVN0eWxlRGVwcmVzc2Vk
LCBjb2xvciwgYmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVl
KTsKLSAgICAgICAgY2FzZSBrTUFDYXB0aW9uQXBwZWFyYW5jZVRleHRFZGdlU3R5bGVEcm9wU2hh
ZG93OgotICAgICAgICAgICAgcmV0dXJuIGNzc1Byb3BlcnR5V2l0aFRleHRFZGdlQ29sb3IoQ1NT
UHJvcGVydHlUZXh0U2hhZG93LCBlZGdlU3R5bGVEcm9wU2hhZG93LCBjb2xvciwgYmVoYXZpb3Ig
PT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlKTsKLSAgICAgICAgY2FzZSBr
TUFDYXB0aW9uQXBwZWFyYW5jZVRleHRFZGdlU3R5bGVVbmlmb3JtOgotICAgICAgICAgICAgcmV0
dXJuIGNzc1Byb3BlcnR5V2l0aFRleHRFZGdlQ29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ry
b2tlLCBlZGdlU3R5bGVVbmlmb3JtLCBjb2xvciwgYmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVh
cmFuY2VCZWhhdmlvclVzZVZhbHVlKTsKKyAgICBjYXNlIGtNQUNhcHRpb25BcHBlYXJhbmNlVGV4
dEVkZ2VTdHlsZVJhaXNlZDoKKyAgICAgICAgcmV0dXJuIGNzc1Byb3BlcnR5V2l0aFRleHRFZGdl
Q29sb3IoQ1NTUHJvcGVydHlUZXh0U2hhZG93LCBlZGdlU3R5bGVSYWlzZWQsIGNvbG9yLCBiZWhh
dmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWUpOworICAgIGNhc2Ug
a01BQ2FwdGlvbkFwcGVhcmFuY2VUZXh0RWRnZVN0eWxlRGVwcmVzc2VkOgorICAgICAgICByZXR1
cm4gY3NzUHJvcGVydHlXaXRoVGV4dEVkZ2VDb2xvcihDU1NQcm9wZXJ0eVRleHRTaGFkb3csIGVk
Z2VTdHlsZURlcHJlc3NlZCwgY29sb3IsIGJlaGF2aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNl
QmVoYXZpb3JVc2VWYWx1ZSk7CisgICAgY2FzZSBrTUFDYXB0aW9uQXBwZWFyYW5jZVRleHRFZGdl
U3R5bGVEcm9wU2hhZG93OgorICAgICAgICByZXR1cm4gY3NzUHJvcGVydHlXaXRoVGV4dEVkZ2VD
b2xvcihDU1NQcm9wZXJ0eVRleHRTaGFkb3csIGVkZ2VTdHlsZURyb3BTaGFkb3csIGNvbG9yLCBi
ZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWUpOworICAgIGNh
c2Uga01BQ2FwdGlvbkFwcGVhcmFuY2VUZXh0RWRnZVN0eWxlVW5pZm9ybToKKyAgICAgICAgcmV0
dXJuIGNzc1Byb3BlcnR5V2l0aFRleHRFZGdlQ29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ry
b2tlLCBlZGdlU3R5bGVVbmlmb3JtLCBjb2xvciwgYmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVh
cmFuY2VCZWhhdmlvclVzZVZhbHVlKTsKICAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIAogICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogfQogCi1TdHJpbmcgQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlc01hYzo6Y2FwdGlvbnNEZWZhdWx0Rm9udENTUygpIGNvbnN0CitT
dHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zRGVmYXVsdEZvbnRD
U1MoKSBjb25zdAogewogICAgIE1BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvciBiZWhhdmlvcjsK
ICAgICAKQEAgLTQwMyw3ICs0NTgsNyBAQCBTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01h
Yzo6Y2FwdGlvCiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotZmxvYXQgQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlc01hYzo6Y2FwdGlvbkZvbnRTaXplU2NhbGVBbmRJbXBvcnRhbmNl
KGJvb2wmIGltcG9ydGFudCkgY29uc3QKK2Zsb2F0IENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRp
YUFGOjpjYXB0aW9uRm9udFNpemVTY2FsZUFuZEltcG9ydGFuY2UoYm9vbCYgaW1wb3J0YW50KSBj
b25zdAogewogICAgIGlmICh0ZXN0aW5nTW9kZSgpIHx8ICFNZWRpYUFjY2Vzc2liaWxpdHlMaWJy
YXJ5KCkpCiAgICAgICAgIHJldHVybiBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpjYXB0aW9uRm9u
dFNpemVTY2FsZUFuZEltcG9ydGFuY2UoaW1wb3J0YW50KTsKQEAgLTQyMyw3ICs0NzgsNyBAQCBm
bG9hdCBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpjYXB0aW9uCiAjZW5kaWYKIH0KIAotdm9p
ZCBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpzZXRQcmVmZXJyZWRMYW5ndWFnZShjb25zdCBT
dHJpbmcmIGxhbmd1YWdlKQordm9pZCBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6c2V0
UHJlZmVycmVkTGFuZ3VhZ2UoY29uc3QgU3RyaW5nJiBsYW5ndWFnZSkKIHsKICAgICBpZiAodGVz
dGluZ01vZGUoKSB8fCAhTWVkaWFBY2Nlc3NpYmlsaXR5TGlicmFyeSgpKSB7CiAgICAgICAgIENh
cHRpb25Vc2VyUHJlZmVyZW5jZXM6OnNldFByZWZlcnJlZExhbmd1YWdlKGxhbmd1YWdlKTsKQEAg
LTQzMyw3ICs0ODgsNyBAQCB2b2lkIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnNldFByZWZl
CiAgICAgTUFDYXB0aW9uQXBwZWFyYW5jZUFkZFNlbGVjdGVkTGFuZ3VhZ2Uoa01BQ2FwdGlvbkFw
cGVhcmFuY2VEb21haW5Vc2VyLCBsYW5ndWFnZS5jcmVhdGVDRlN0cmluZygpLmdldCgpKTsKIH0K
IAotVmVjdG9yPFN0cmluZz4gQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6cHJlZmVycmVkTGFu
Z3VhZ2VzKCkgY29uc3QKK1ZlY3RvcjxTdHJpbmc+IENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRp
YUFGOjpwcmVmZXJyZWRMYW5ndWFnZXMoKSBjb25zdAogewogICAgIGlmICh0ZXN0aW5nTW9kZSgp
IHx8ICFNZWRpYUFjY2Vzc2liaWxpdHlMaWJyYXJ5KCkpCiAgICAgICAgIHJldHVybiBDYXB0aW9u
VXNlclByZWZlcmVuY2VzOjpwcmVmZXJyZWRMYW5ndWFnZXMoKTsKQEAgLTQ2Niw5ICs1MjEsOSBA
QCBWZWN0b3I8U3RyaW5nPiBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjCiAKICAgICByZXR1cm4g
dXNlclByZWZlcnJlZExhbmd1YWdlczsKIH0KLSNlbmRpZiAgLy8gSEFWRShNRURJQV9BQ0NFU1NJ
QklMSVRZX0ZSQU1FV09SSykKKyNlbmRpZiAvLyBIQVZFKE1FRElBX0FDQ0VTU0lCSUxJVFlfRlJB
TUVXT1JLKQogCi1TdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYzo6Y2FwdGlvbnNTdHls
ZVNoZWV0T3ZlcnJpZGUoKSBjb25zdAorU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRp
YUFGOjpjYXB0aW9uc1N0eWxlU2hlZXRPdmVycmlkZSgpIGNvbnN0CiB7CiAgICAgaWYgKHRlc3Rp
bmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpjYXB0aW9u
c1N0eWxlU2hlZXRPdmVycmlkZSgpOwpAQCAtNTE0LDkgKzU2OSw5IEBAIFN0cmluZyBDYXB0aW9u
VXNlclByZWZlcmVuY2VzTWFjOjpjYXB0aW8KICAgICAgICAgCiAgICAgICAgIGNhcHRpb25zT3Zl
cnJpZGVTdHlsZVNoZWV0LmFwcGVuZCgnfScpOwogICAgIH0KLSNlbmRpZiAgLy8gSEFWRShNRURJ
QV9BQ0NFU1NJQklMSVRZX0ZSQU1FV09SSykKKyNlbmRpZiAvLyBIQVZFKE1FRElBX0FDQ0VTU0lC
SUxJVFlfRlJBTUVXT1JLKQogCi0gICAgTE9HKE1lZGlhLCAiQ2FwdGlvblVzZXJQcmVmZXJlbmNl
c01hYzo6Y2FwdGlvbnNTdHlsZVNoZWV0T3ZlcnJpZGVTZXR0aW5nIHN5dGxlIHRvOlxuJXMiLCBj
YXB0aW9uc092ZXJyaWRlU3R5bGVTaGVldC50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAg
IExPRyhNZWRpYSwgIkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc1N0eWxl
U2hlZXRPdmVycmlkZVNldHRpbmcgc3l0bGUgdG86XG4lcyIsIGNhcHRpb25zT3ZlcnJpZGVTdHls
ZVNoZWV0LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICByZXR1cm4gY2FwdGlvbnNP
dmVycmlkZVN0eWxlU2hlZXQudG9TdHJpbmcoKTsKIH0KQEAgLTU5NiwxMiArNjUxLDEyIEBAIHN0
YXRpYyBTdHJpbmcgdHJhY2tEaXNwbGF5TmFtZShUZXh0VHJhY2sKICAgICByZXR1cm4gZGlzcGxh
eU5hbWUudG9TdHJpbmcoKTsKIH0KIAotU3RyaW5nIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6
OmRpc3BsYXlOYW1lRm9yVHJhY2soVGV4dFRyYWNrKiB0cmFjaykgY29uc3QKK1N0cmluZyBDYXB0
aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6ZGlzcGxheU5hbWVGb3JUcmFjayhUZXh0VHJhY2sq
IHRyYWNrKSBjb25zdAogewogICAgIHJldHVybiB0cmFja0Rpc3BsYXlOYW1lKHRyYWNrKTsKIH0K
IAotaW50IENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWM6OnRleHRUcmFja1NlbGVjdGlvblNjb3Jl
KFRleHRUcmFjayogdHJhY2ssIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkgY29uc3QK
K2ludCBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6dGV4dFRyYWNrU2VsZWN0aW9uU2Nv
cmUoVGV4dFRyYWNrKiB0cmFjaywgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KSBjb25z
dAogewogICAgIENhcHRpb25EaXNwbGF5TW9kZSBkaXNwbGF5TW9kZSA9IGNhcHRpb25EaXNwbGF5
TW9kZSgpOwogICAgIGJvb2wgbGVnYWN5T3ZlcnJpZGUgPSBtZWRpYUVsZW1lbnQtPndlYmtpdENs
b3NlZENhcHRpb25zVmlzaWJsZSgpOwpAQCAtNzIxLDcgKzc3Niw3IEBAIHN0YXRpYyBib29sIHRl
eHRUcmFja0NvbXBhcmUoY29uc3QgUmVmUHQKICAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZSh0
cmFja0Rpc3BsYXlOYW1lKGEuZ2V0KCkpLCB0cmFja0Rpc3BsYXlOYW1lKGIuZ2V0KCkpKSA8IDA7
CiB9CiAKLVZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPiA+IENhcHRpb25Vc2VyUHJlZmVyZW5jZXNN
YWM6OnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoVGV4dFRyYWNrTGlzdCogdHJhY2tMaXN0KQorVmVj
dG9yPFJlZlB0cjxUZXh0VHJhY2s+ID4gQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OnNv
cnRlZFRyYWNrTGlzdEZvck1lbnUoVGV4dFRyYWNrTGlzdCogdHJhY2tMaXN0KQogewogICAgIEFT
U0VSVCh0cmFja0xpc3QpOwogCkBAIC03NDksMTcgKzgwNCwxNyBAQCBWZWN0b3I8UmVmUHRyPFRl
eHRUcmFjaz4gPiBDYXB0aW9uVXNlclByCiAgICAgICAgICAgICBpZiAocHJlZmVyc0FjY2Vzc2li
aWxpdHlUcmFja3MpIHsKICAgICAgICAgICAgICAgICAvLyBJbiB0aGUgZmlyc3QgcGFzcywgaW5j
bHVkZSBvbmx5IGNhcHRpb24gdHJhY2tzIGlmIHRoZSB1c2VyIHByZWZlcnMgYWNjZXNzaWJpbGl0
eSB0cmFja3MuCiAgICAgICAgICAgICAgICAgaWYgKCFpc0FjY2Vzc2liaWxpdHlUcmFjayAmJiBm
aWx0ZXJUcmFja0xpc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgTE9HKE1lZGlhLCAiQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01hYzo6c29ydGVkVHJhY2tMaXN0Rm9yTWVudSAtIHNraXBwaW5nICcl
cycgdHJhY2sgd2l0aCBsYW5ndWFnZSAnJXMnIGJlY2F1c2UgaXQgaXMgTk9UIGFuIGFjY2Vzc2li
aWxpdHkgdHJhY2siLCB0cmFjay0+a2luZCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGxhbmd1
YWdlLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBMT0coTWVkaWEsICJDYXB0
aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6c29ydGVkVHJhY2tMaXN0Rm9yTWVudSAtIHNraXBw
aW5nICclcycgdHJhY2sgd2l0aCBsYW5ndWFnZSAnJXMnIGJlY2F1c2UgaXQgaXMgTk9UIGFuIGFj
Y2Vzc2liaWxpdHkgdHJhY2siLCB0cmFjay0+a2luZCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCks
IGxhbmd1YWdlLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IC8vIEluIHRoZSBmaXJzdCBwYXNzLCBvbmx5IGluY2x1ZGUgdGhlIGZpcnN0IG5vbi1DQyBvciBT
REggdHJhY2sgd2l0aCBlYWNoIGxhbmd1YWdlIGlmIHRoZSB1c2VyIHByZWZlcnMgdHJhbnNsYXRp
b24gdHJhY2tzLgogICAgICAgICAgICAgICAgIGlmIChpc0FjY2Vzc2liaWxpdHlUcmFjayAmJiBm
aWx0ZXJUcmFja0xpc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgTE9HKE1lZGlhLCAiQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01hYzo6c29ydGVkVHJhY2tMaXN0Rm9yTWVudSAtIHNraXBwaW5nICcl
cycgdHJhY2sgd2l0aCBsYW5ndWFnZSAnJXMnIGJlY2F1c2UgaXQgaXMgYW4gYWNjZXNzaWJpbGl0
eSB0cmFjayIsIHRyYWNrLT5raW5kKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbGFuZ3VhZ2Uu
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIExPRyhNZWRpYSwgIkNhcHRpb25V
c2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpzb3J0ZWRUcmFja0xpc3RGb3JNZW51IC0gc2tpcHBpbmcg
JyVzJyB0cmFjayB3aXRoIGxhbmd1YWdlICclcycgYmVjYXVzZSBpdCBpcyBhbiBhY2Nlc3NpYmls
aXR5IHRyYWNrIiwgdHJhY2stPmtpbmQoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBsYW5ndWFn
ZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChsYW5ndWFnZXNJbmNsdWRlZC5jb250YWlu
cyhsYW5ndWFnZSkgICYmIGZpbHRlclRyYWNrTGlzdCkgewotICAgICAgICAgICAgICAgICAgICBM
T0coTWVkaWEsICJDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpzb3J0ZWRUcmFja0xpc3RGb3JN
ZW51IC0gc2tpcHBpbmcgJyVzJyB0cmFjayB3aXRoIGxhbmd1YWdlICclcycgYmVjYXVzZSBpdCBp
cyBub3QgdGhlIGZpcnN0IHdpdGggdGhpcyBsYW5ndWFnZSIsIHRyYWNrLT5raW5kKCkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwgbGFuZ3VhZ2UudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAg
ICAgICAgIExPRyhNZWRpYSwgIkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpzb3J0ZWRU
cmFja0xpc3RGb3JNZW51IC0gc2tpcHBpbmcgJyVzJyB0cmFjayB3aXRoIGxhbmd1YWdlICclcycg
YmVjYXVzZSBpdCBpcyBub3QgdGhlIGZpcnN0IHdpdGggdGhpcyBsYW5ndWFnZSIsIHRyYWNrLT5r
aW5kKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbGFuZ3VhZ2UudXRmOCgpLmRhdGEoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KQEAgLTc4MSwxMSArODM2LDExIEBAIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPiA+IENh
cHRpb25Vc2VyUHIKIAogICAgICAgICBpZiAodHJhY2stPmNvbnRhaW5zT25seUZvcmNlZFN1YnRp
dGxlcygpKQogICAgICAgICAgICAgY29udGludWU7Ci0gCisKICAgICAgICAgaWYgKCFsYW5ndWFn
ZXNJbmNsdWRlZC5jb250YWlucyhsYW5ndWFnZSkgJiYgdHJhY2stPmlzTWFpblByb2dyYW1Db250
ZW50KCkpIHsKICAgICAgICAgICAgIGxhbmd1YWdlc0luY2x1ZGVkLmFkZChsYW5ndWFnZSk7CiAg
ICAgICAgICAgICB0cmFja3NGb3JNZW51LmFwcGVuZCh0cmFjayk7Ci0gICAgICAgICAgICBMT0co
TWVkaWEsICJDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjOjpzb3J0ZWRUcmFja0xpc3RGb3JNZW51
IC0gYWRkaW5nICclcycgdHJhY2sgd2l0aCBsYW5ndWFnZSAnJXMnIGJlY2F1c2UgaXQgaXMgdGhl
IG9ubHkgdHJhY2sgd2l0aCB0aGlzIGxhbmd1YWdlIiwgdHJhY2stPmtpbmQoKS5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpLCBsYW5ndWFnZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIExPRyhN
ZWRpYSwgIkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpzb3J0ZWRUcmFja0xpc3RGb3JN
ZW51IC0gYWRkaW5nICclcycgdHJhY2sgd2l0aCBsYW5ndWFnZSAnJXMnIGJlY2F1c2UgaXQgaXMg
dGhlIG9ubHkgdHJhY2sgd2l0aCB0aGlzIGxhbmd1YWdlIiwgdHJhY2stPmtpbmQoKS5zdHJpbmco
KS51dGY4KCkuZGF0YSgpLCBsYW5ndWFnZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgfQogICAg
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVk
aWFBRi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlc01lZGlhQUYuaAkocmV2aXNpb24gMTUxOTk2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9w
YWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWMuaDoxNTE5OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWNfaAorI2RlZmluZSBD
YXB0aW9uVXNlclByZWZlcmVuY2VzTWFjX2gKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKwor
I2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDYXB0aW9uVXNlclByZWZl
cmVuY2VzLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWMg
OiBwdWJsaWMgQ2FwdGlvblVzZXJQcmVmZXJlbmNlcyB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NPd25QdHI8Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYz4gY3JlYXRlKFBhZ2VHcm91cCogZ3Jv
dXApIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjKGdyb3Vw
KSk7IH0KKyAgICB2aXJ0dWFsIH5DYXB0aW9uVXNlclByZWZlcmVuY2VzTWFjKCk7CisKKyNpZiBI
QVZFKE1FRElBX0FDQ0VTU0lCSUxJVFlfRlJBTUVXT1JLKQorICAgIHZpcnR1YWwgQ2FwdGlvbkRp
c3BsYXlNb2RlIGNhcHRpb25EaXNwbGF5TW9kZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBzZXRDYXB0aW9uRGlzcGxheU1vZGUoQ2FwdGlvbkRpc3BsYXlNb2RlKSBPVkVSUklE
RTsKKworICAgIHZpcnR1YWwgYm9vbCB1c2VyUHJlZmVyc0NhcHRpb25zKCkgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBib29sIHVzZXJQcmVmZXJzU3VidGl0bGVzKCkgY29uc3QgT1ZFUlJJ
REU7CisgICAgCisgICAgdmlydHVhbCBmbG9hdCBjYXB0aW9uRm9udFNpemVTY2FsZUFuZEltcG9y
dGFuY2UoYm9vbCYpIGNvbnN0IE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHNldEludGVy
ZXN0ZWRJbkNhcHRpb25QcmVmZXJlbmNlQ2hhbmdlcygpIE9WRVJSSURFOworCisgICAgdmlydHVh
bCB2b2lkIHNldFByZWZlcnJlZExhbmd1YWdlKGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gcHJlZmVycmVkTGFuZ3VhZ2VzKCkgY29uc3QgT1ZFUlJJ
REU7CisKKyAgICB2aXJ0dWFsIHZvaWQgY2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpIE9WRVJS
SURFOworCisgICAgYm9vbCBzaG91bGRGaWx0ZXJUcmFja01lbnUoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CisjZWxzZQorICAgIGJvb2wgc2hvdWxkRmlsdGVyVHJhY2tNZW51KCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgorCisgICAgdmlydHVhbCBTdHJpbmcgY2FwdGlvbnNTdHls
ZVNoZWV0T3ZlcnJpZGUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCB0ZXh0VHJh
Y2tTZWxlY3Rpb25TY29yZShUZXh0VHJhY2sqLCBIVE1MTWVkaWFFbGVtZW50KikgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4gPiBzb3J0ZWRUcmFj
a0xpc3RGb3JNZW51KFRleHRUcmFja0xpc3QqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBkaXNwbGF5TmFtZUZvclRyYWNrKFRleHRUcmFjayopIGNvbnN0IE9WRVJSSURFOworCitwcml2
YXRlOgorICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWMoUGFnZUdyb3VwKik7CisKKyNpZiBI
QVZFKE1FRElBX0FDQ0VTU0lCSUxJVFlfRlJBTUVXT1JLKQorICAgIFN0cmluZyBjYXB0aW9uc1dp
bmRvd0NTUygpIGNvbnN0OworICAgIFN0cmluZyBjYXB0aW9uc0JhY2tncm91bmRDU1MoKSBjb25z
dDsKKyAgICBTdHJpbmcgY2FwdGlvbnNUZXh0Q29sb3JDU1MoKSBjb25zdDsKKyAgICBDb2xvciBj
YXB0aW9uc1RleHRDb2xvcihib29sJikgY29uc3Q7CisgICAgU3RyaW5nIGNhcHRpb25zRGVmYXVs
dEZvbnRDU1MoKSBjb25zdDsKKyAgICBDb2xvciBjYXB0aW9uc0VkZ2VDb2xvckZvclRleHRDb2xv
cihjb25zdCBDb2xvciYpIGNvbnN0OworICAgIFN0cmluZyB3aW5kb3dSb3VuZGVkQ29ybmVyUmFk
aXVzQ1NTKCkgY29uc3Q7CisgICAgU3RyaW5nIGNhcHRpb25zVGV4dEVkZ2VDU1MoKSBjb25zdDsK
KyAgICBTdHJpbmcgY3NzUHJvcGVydHlXaXRoVGV4dEVkZ2VDb2xvcihDU1NQcm9wZXJ0eUlELCBj
b25zdCBTdHJpbmcmLCBjb25zdCBDb2xvciYsIGJvb2wpIGNvbnN0OworICAgIFN0cmluZyBjb2xv
clByb3BlcnR5Q1NTKENTU1Byb3BlcnR5SUQsIGNvbnN0IENvbG9yJiwgYm9vbCkgY29uc3Q7CisK
KyAgICBib29sIG1fbGlzdGVuaW5nRm9yUHJlZmVyZW5jZUNoYW5nZXM7CisjZW5kaWYKK307Cisg
ICAgCit9CisjZW5kaWYKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRp
b25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5oCSh3b3JraW5nIGNvcHkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIwLDExICsyMCwxMSBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZu
ZGVmIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWNfaAotI2RlZmluZSBDYXB0aW9uVXNlclByZWZl
cmVuY2VzTWFjX2gKKyNpZm5kZWYgQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUZfaAorI2Rl
ZmluZSBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRl9oCiAKICNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCiAKQEAgLTM1LDEwICszNSwxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWMgOiBwdWJsaWMgQ2FwdGlvblVzZXJQcmVmZXJl
bmNlcyB7CitjbGFzcyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRiA6IHB1YmxpYyBDYXB0
aW9uVXNlclByZWZlcmVuY2VzIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDYXB0
aW9uVXNlclByZWZlcmVuY2VzTWFjPiBjcmVhdGUoUGFnZUdyb3VwKiBncm91cCkgeyByZXR1cm4g
YWRvcHRQdHIobmV3IENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWMoZ3JvdXApKTsgfQotICAgIHZp
cnR1YWwgfkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWMoKTsKKyAgICBzdGF0aWMgUGFzc093blB0
cjxDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRj4gY3JlYXRlKFBhZ2VHcm91cCogZ3JvdXAp
IHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRihncm91
cCkpOyB9CisgICAgdmlydHVhbCB+Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYoKTsKIAog
I2lmIEhBVkUoTUVESUFfQUNDRVNTSUJJTElUWV9GUkFNRVdPUkspCiAgICAgdmlydHVhbCBDYXB0
aW9uRGlzcGxheU1vZGUgY2FwdGlvbkRpc3BsYXlNb2RlKCkgY29uc3QgT1ZFUlJJREU7CkBAIC00
Niw3ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCB1c2VyUHJlZmVyc0NhcHRp
b25zKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIHVzZXJQcmVmZXJzU3VidGl0
bGVzKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgCisKICAgICB2aXJ0dWFsIGZsb2F0IGNhcHRpb25G
b250U2l6ZVNjYWxlQW5kSW1wb3J0YW5jZShib29sJikgY29uc3QgT1ZFUlJJREU7CiAKICAgICB2
aXJ0dWFsIHZvaWQgc2V0SW50ZXJlc3RlZEluQ2FwdGlvblByZWZlcmVuY2VDaGFuZ2VzKCkgT1ZF
UlJJREU7CkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyBkaXNw
bGF5TmFtZUZvclRyYWNrKFRleHRUcmFjayopIGNvbnN0IE9WRVJSSURFOwogCiBwcml2YXRlOgot
ICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWMoUGFnZUdyb3VwKik7CisgICAgQ2FwdGlvblVz
ZXJQcmVmZXJlbmNlc01lZGlhQUYoUGFnZUdyb3VwKik7CiAKICNpZiBIQVZFKE1FRElBX0FDQ0VT
U0lCSUxJVFlfRlJBTUVXT1JLKQogICAgIFN0cmluZyBjYXB0aW9uc1dpbmRvd0NTUygpIGNvbnN0
OwpAQCAtODQsNyArODQsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9saXN0ZW5pbmdGb3JQcmVm
ZXJlbmNlQ2hhbmdlczsKICNlbmRpZgogfTsKLSAgICAKKwogfQogI2VuZGlmCiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VHcm91cC5jcHAJKHJldmlzaW9uIDE1MTk5NikKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQAog
CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogI2lmIChQTEFURk9STShNQUMpICYmICFQTEFURk9S
TShJT1MpKSB8fCBIQVZFKE1FRElBX0FDQ0VTU0lCSUxJVFlfRlJBTUVXT1JLKQotI2luY2x1ZGUg
IkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWMuaCIKKyNpbmNsdWRlICJDYXB0aW9uVXNlclByZWZl
cmVuY2VzTWVkaWFBRi5oIgogI2Vsc2UKICNpbmNsdWRlICJDYXB0aW9uVXNlclByZWZlcmVuY2Vz
LmgiCiAjZW5kaWYKQEAgLTQyMCw3ICs0MjAsNyBAQCBDYXB0aW9uVXNlclByZWZlcmVuY2VzKiBQ
YWdlR3JvdXA6OmNhcHRpCiB7CiAgICAgaWYgKCFtX2NhcHRpb25QcmVmZXJlbmNlcykKICNpZiAo
UExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKSkgfHwgSEFWRShNRURJQV9BQ0NFU1NJQklM
SVRZX0ZSQU1FV09SSykKLSAgICAgICAgbV9jYXB0aW9uUHJlZmVyZW5jZXMgPSBDYXB0aW9uVXNl
clByZWZlcmVuY2VzTWFjOjpjcmVhdGUodGhpcyk7CisgICAgICAgIG1fY2FwdGlvblByZWZlcmVu
Y2VzID0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNyZWF0ZSh0aGlzKTsKICNlbHNl
CiAgICAgICAgIG1fY2FwdGlvblByZWZlcmVuY2VzID0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6
Y3JlYXRlKHRoaXMpOwogI2VuZGlmCg==
</data>
<flag name="review"
          id="227057"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
      

    </bug>

</bugzilla>