<?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>177506</bug_id>
          
          <creation_ts>2017-09-26 14:20:03 -0700</creation_ts>
          <short_desc>Rename &quot;Region&quot; to &quot;Fragment&quot;</short_desc>
          <delta_ts>2017-09-27 09:19:25 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>buildbot</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1352835</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2017-09-26 14:20:03 -0700</bug_when>
    <thetext>Rename &quot;Region&quot; to &quot;Fragment&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352837</commentid>
    <comment_count>1</comment_count>
      <attachid>321869</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2017-09-26 14:21:11 -0700</bug_when>
    <thetext>Created attachment 321869
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352841</commentid>
    <comment_count>2</comment_count>
      <attachid>321871</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2017-09-26 14:22:31 -0700</bug_when>
    <thetext>Created attachment 321871
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352844</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-26 14:25:17 -0700</bug_when>
    <thetext>Attachment 321871 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp:871:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/dom/Element.cpp:83:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/rendering/RenderLayerBacking.cpp:60:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/rendering/RenderLayer.cpp:99:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/rendering/RenderBoxModelObject.cpp:51:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/rendering/RenderFlowThread.cpp:42:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/rendering/RenderingAllInOne.cpp:101:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/rendering/RenderBlock.cpp:59:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/rendering/shapes/ShapeOutsideInfo.cpp:40:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/rendering/RenderBox.cpp:63:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/rendering/RenderBlockLineLayout.cpp:40:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/rendering/RenderBlockFlow.cpp:1837:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/rendering/RenderTreeAsText.cpp:52:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/rendering/RenderMultiColumnSet.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 14 in 56 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>1352849</commentid>
    <comment_count>4</comment_count>
      <attachid>321873</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2017-09-26 14:34:37 -0700</bug_when>
    <thetext>Created attachment 321873
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352851</commentid>
    <comment_count>5</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-26 14:35:54 -0700</bug_when>
    <thetext>Attachment 321873 did not pass style-queue:


ERROR: Source/WebCore/rendering/RenderBlockFlow.cpp:1837:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 56 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>1353131</commentid>
    <comment_count>6</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2017-09-27 09:19:25 -0700</bug_when>
    <thetext>Landed in r222556.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>321869</attachid>
            <date>2017-09-26 14:21:11 -0700</date>
            <delta_ts>2017-09-26 14:21:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>653399</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDQ4NDApCisrKyBXZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDE2LTA4LTIzICBEYXZlIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29t
PgorCisgICAgICAgIEFkZCBwcmVmIGZvciBlbmFibGluZyBuZXcgQ1NTIHBhcnNpbmcgYW5kIG1v
dmUgcGFyc2VyIGZpbGVzIGludG8gc3ViZGlyZWN0b3J5LgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxMDk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZpbml0
aW9ucy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcDoKKyAg
ICAgICAgKFdLUHJlZmVyZW5jZXNTZXROZXdDU1NQYXJzZXJFbmFibGVkKToKKyAgICAgICAgKFdL
UHJlZmVyZW5jZXNHZXROZXdDU1NQYXJzZXJFbmFibGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnVwZGF0ZVByZWZl
cmVuY2VzKToKKwogMjAxNi0wOC0yMyAgSHVuc2VvcCBKZW9uZyAgPGhzODUuamVvbmdAc2Ftc3Vu
Zy5jb20+CiAKICAgICAgICAgW0VGTF0gVVJUQkYgYWZ0ZXIgcjIwNDc0My4KSW5kZXg6IFdlYktp
dDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmgJKHJldmlzaW9uIDIwNDc0MykK
KysrIFdlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjIxLDYgKzIyMSw3IEBACiAgICAgbWFjcm8oRW5hYmxlSW5oZXJpdFVSSVF1ZXJ5
Q29tcG9uZW50LCBlbmFibGVJbmhlcml0VVJJUXVlcnlDb21wb25lbnQsIEJvb2wsIGJvb2wsIGZh
bHNlLCAiIiwgIiIpIFwKICAgICBtYWNybyhTZXJ2aWNlQ29udHJvbHNFbmFibGVkLCBzZXJ2aWNl
Q29udHJvbHNFbmFibGVkLCBCb29sLCBib29sLCBmYWxzZSwgIiIsICIiKSBcCiAgICAgbWFjcm8o
TmV3QmxvY2tJbnNpZGVJbmxpbmVNb2RlbEVuYWJsZWQsIG5ld0Jsb2NrSW5zaWRlSW5saW5lTW9k
ZWxFbmFibGVkLCBCb29sLCBib29sLCBmYWxzZSwgIiIsICIiKSBcCisgICAgbWFjcm8oTmV3Q1NT
UGFyc2VyRW5hYmxlZCwgbmV3Q1NTUGFyc2VyRW5hYmxlZCwgQm9vbCwgYm9vbCwgZmFsc2UsICIi
LCAiIikgXAogICAgIG1hY3JvKEhUVFBFcXVpdkVuYWJsZWQsIGh0dHBFcXVpdkVuYWJsZWQsIEJv
b2wsIGJvb2wsIHRydWUsICIiLCAiIikgXAogICAgIG1hY3JvKE1vY2tDYXB0dXJlRGV2aWNlc0Vu
YWJsZWQsIG1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQsIEJvb2wsIGJvb2wsIGZhbHNlLCAiIiwg
IiIpIFwKICAgICBtYWNybyhTaGFkb3dET01FbmFibGVkLCBzaGFkb3dET01FbmFibGVkLCBCb29s
LCBib29sLCB0cnVlLCAiU2hhZG93IERPTSIsICJIVE1MIFNoYWRvdyBET00gcHJvdG90eXBlIikg
XApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAJKHJldmlz
aW9uIDIwNDc0MykKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjYxLDYgKzEyNjEsMTYgQEAKICAgICByZXR1cm4gdG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+bmV3QmxvY2tJbnNpZGVJbmxpbmVNb2RlbEVuYWJsZWQoKTsKIH0K
IAordm9pZCBXS1ByZWZlcmVuY2VzU2V0TmV3Q1NTUGFyc2VyRW5hYmxlZChXS1ByZWZlcmVuY2Vz
UmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpCit7CisgICAgdG9JbXBsKHByZWZlcmVuY2Vz
UmVmKS0+c2V0TmV3Q1NTUGFyc2VyRW5hYmxlZChmbGFnKTsKK30KKworYm9vbCBXS1ByZWZlcmVu
Y2VzR2V0TmV3Q1NTUGFyc2VyRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVm
KQoreworICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5uZXdDU1NQYXJzZXJFbmFi
bGVkKCk7Cit9CisKIHZvaWQgV0tQcmVmZXJlbmNlc1NldFN1YnBpeGVsQ1NTT01FbGVtZW50TWV0
cmljc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQog
ewogICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFN1YnBpeGVsQ1NTT01FbGVtZW50TWV0
cmljc0VuYWJsZWQoZmxhZyk7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZl
cmVuY2VzUmVmUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmgJKHJldmlzaW9uIDIwNDc0MykKKysrIFdlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyOCw2ICszMjgsMTAgQEAKIFdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXROZXdC
bG9ja0luc2lkZUlubGluZU1vZGVsRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmKTsKIAogLy8gRGVm
YXVsdHMgdG8gZmFsc2UuCitXS19FWFBPUlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0TmV3Q1NTUGFy
c2VyRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmLCBib29sKTsKK1dLX0VYUE9SVCBib29sIFdLUHJl
ZmVyZW5jZXNHZXROZXdDU1NQYXJzZXJFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYpOworCisvLyBE
ZWZhdWx0cyB0byBmYWxzZS4KIFdLX0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNTZXRTdWJwaXhl
bENTU09NRWxlbWVudE1ldHJpY3NFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYsIGJvb2wpOwogV0tf
RVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldFN1YnBpeGVsQ1NTT01FbGVtZW50TWV0cmljc0Vu
YWJsZWQoV0tQcmVmZXJlbmNlc1JlZik7CiAKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAyMDQ3NDMpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA5Myw3ICszMDkzLDggQEAKICAg
ICBzZXR0aW5ncy5zZXRTaW1wbGVMaW5lTGF5b3V0RGVidWdCb3JkZXJzRW5hYmxlZChzdG9yZS5n
ZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnNpbXBsZUxpbmVMYXlvdXREZWJ1
Z0JvcmRlcnNFbmFibGVkS2V5KCkpKTsKICAgICAKICAgICBzZXR0aW5ncy5zZXROZXdCbG9ja0lu
c2lkZUlubGluZU1vZGVsRW5hYmxlZChzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVy
ZW5jZXNLZXk6Om5ld0Jsb2NrSW5zaWRlSW5saW5lTW9kZWxFbmFibGVkS2V5KCkpKTsKLSAgICAK
KyAgICBzZXR0aW5ncy5zZXROZXdDU1NQYXJzZXJFbmFibGVkKHN0b3JlLmdldEJvb2xWYWx1ZUZv
cktleShXZWJQcmVmZXJlbmNlc0tleTo6bmV3Q1NTUGFyc2VyRW5hYmxlZEtleSgpKSk7CisKICAg
ICBzZXR0aW5ncy5zZXRTdWJwaXhlbENTU09NRWxlbWVudE1ldHJpY3NFbmFibGVkKHN0b3JlLmdl
dEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6c3VicGl4ZWxDU1NPTUVsZW1lbnRN
ZXRyaWNzRW5hYmxlZEtleSgpKSk7CiAKICAgICBzZXR0aW5ncy5zZXRVc2VMZWdhY3lUZXh0QWxp
Z25Qb3NpdGlvbmVkRWxlbWVudEJlaGF2aW9yKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQ
cmVmZXJlbmNlc0tleTo6dXNlTGVnYWN5VGV4dEFsaWduUG9zaXRpb25lZEVsZW1lbnRCZWhhdmlv
cktleSgpKSk7CkluZGV4OiBXZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNDc0MykKKysrIFdlYkNvcmUvQ01ha2VM
aXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKICAgICAiJHtXRUJDT1JF
X0RJUn0vY3J5cHRvL2tleXMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2NyeXB0by9wYXJhbWV0ZXJz
IgogICAgICIke1dFQkNPUkVfRElSfS9jc3MiCisgICAgIiR7V0VCQ09SRV9ESVJ9L2Nzcy9wYXJz
ZXIiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2Nzc2ppdCIKICAgICAiJHtXRUJDT1JFX0RJUn0vZG9t
IgogICAgICIke1dFQkNPUkVfRElSfS9kb20vZGVmYXVsdCIKQEAgLTEzNDYsOCArMTM0Nyw4IEBA
CiAgICAgY3NzL0NTU05hbWVkSW1hZ2VWYWx1ZS5jcHAKICAgICBjc3MvQ1NTT01VdGlscy5jcHAK
ICAgICBjc3MvQ1NTUGFnZVJ1bGUuY3BwCi0gICAgY3NzL0NTU1BhcnNlci5jcHAKLSAgICBjc3Mv
Q1NTUGFyc2VyVmFsdWVzLmNwcAorICAgIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAorICAgIGNz
cy9wYXJzZXIvQ1NTUGFyc2VyVmFsdWVzLmNwcAogICAgIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5j
cHAKICAgICBjc3MvQ1NTUHJvcGVydHkuY3BwCiAgICAgY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0
YS5jcHAKQEAgLTEzOTEsNyArMTM5Miw3IEBACiAgICAgY3NzL1J1bGVGZWF0dXJlLmNwcAogICAg
IGNzcy9SdWxlU2V0LmNwcAogICAgIGNzcy9TVkdDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
Y3BwCi0gICAgY3NzL1NWR0NTU1BhcnNlci5jcHAKKyAgICBjc3MvcGFyc2VyL1NWR0NTU1BhcnNl
ci5jcHAKICAgICBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcAogICAgIGNzcy9TZWxlY3RvckZpbHRl
ci5jcHAKICAgICBjc3MvU291cmNlU2l6ZUxpc3QuY3BwCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA0ODQwKQorKysg
V2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNyBAQAorMjAxNi0w
OC0yMyAgRGF2ZSBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgcHJlZiBm
b3IgZW5hYmxpbmcgbmV3IENTUyBwYXJzaW5nIGFuZCBtb3ZlIHBhcnNlciBmaWxlcyBpbnRvIHN1
YmRpcmVjdG9yeS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MTA5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIGNzcy9DU1NQYXJzZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyTW9k
ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGNzcy9DU1NQYXJzZXJWYWx1ZXMuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIGNzcy9DU1NQYXJzZXJWYWx1ZXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBj
c3MvU1ZHQ1NTUGFyc2VyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyOiBBZGRl
ZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlci5jcHA6IENvcGllZCBmcm9tIGNzcy9D
U1NQYXJzZXIuY3BwLgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmg6IENvcGllZCBm
cm9tIGNzcy9DU1NQYXJzZXIuaC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlck1vZGUu
aDogQ29waWVkIGZyb20gY3NzL0NTU1BhcnNlck1vZGUuaC4KKyAgICAgICAgKiBjc3MvcGFyc2Vy
L0NTU1BhcnNlclZhbHVlcy5jcHA6IENvcGllZCBmcm9tIGNzcy9DU1NQYXJzZXJWYWx1ZXMuY3Bw
LgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyVmFsdWVzLmg6IENvcGllZCBmcm9tIGNz
cy9DU1NQYXJzZXJWYWx1ZXMuaC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL1NWR0NTU1BhcnNlci5j
cHA6IENvcGllZCBmcm9tIGNzcy9TVkdDU1NQYXJzZXIuY3BwLgorICAgICAgICAqIHBhZ2UvU2V0
dGluZ3MuaW46CisKIDIwMTYtMDgtMjMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
IAogICAgICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgc2hvdWxkIG5vdCBoYXZlIGEgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCBwYXJlbnQgaW50ZXJmYWNlCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA0NzQzKQorKysgV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMz
MjIsNiArMzMyMiwxMiBAQAogCQk5M0Y5QjdBMDBCQTYwMzI2MDA4NTQwNjQgLyogSlNDREFUQVNl
Y3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNGOUI3OUUwQkE2MDMyNjAwODU0MDY0IC8qIEpTQ0RBVEFTZWN0aW9uLmNwcCAqLzsgfTsKIAkJ
OTNGOUI3QTEwQkE2MDMyNjAwODU0MDY0IC8qIEpTQ0RBVEFTZWN0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y5Qjc5RjBCQTYwMzI2MDA4NTQw
NjQgLyogSlNDREFUQVNlY3Rpb24uaCAqLzsgfTsKIAkJOTNGREFGQ0EwQjExMzA3NDAwRTI3NDZG
IC8qIEVkaXRvckluc2VydEFjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTNGREFGQzkwQjExMzA3NDAwRTI3NDZGIC8qIEVkaXRvckluc2VydEFj
dGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTk0NkQzNzJEMUQ2Q0IyOTQwMDc3MDg0RiAvKiBDU1NQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ2RDM3MjgxRDZDQjI4QjAwNzcwODRG
IC8qIENTU1BhcnNlci5jcHAgKi87IH07CisJCTk0NkQzNzJFMUQ2Q0IyOTQwMDc3MDg0RiAvKiBD
U1NQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk0NkQzNzI5MUQ2Q0IyOEIwMDc3MDg0RiAvKiBDU1NQYXJzZXIuaCAqLzsgfTsKKwkJOTQ2RDM3
MkYxRDZDQjI5NDAwNzcwODRGIC8qIENTU1BhcnNlck1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0NkQzNzJBMUQ2Q0IyOEIwMDc3MDg0RiAvKiBD
U1NQYXJzZXJNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJOTQ2RDM3MzAxRDZDQjI5NDAwNzcwODRGIC8qIENTU1BhcnNlclZhbHVlcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzcyQjFE
NkNCMjhCMDA3NzA4NEYgLyogQ1NTUGFyc2VyVmFsdWVzLmNwcCAqLzsgfTsKKwkJOTQ2RDM3MzEx
RDZDQjI5NDAwNzcwODRGIC8qIENTU1BhcnNlclZhbHVlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ2RDM3MkMxRDZDQjI4QjAwNzcwODRGIC8qIENT
U1BhcnNlclZhbHVlcy5oICovOyB9OworCQk5NDZEMzczMzFENkNDNDJCMDA3NzA4NEYgLyogU1ZH
Q1NTUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk0NkQzNzMyMUQ2Q0MzNzIwMDc3MDg0RiAvKiBTVkdDU1NQYXJzZXIuY3BwICovOyB9Owog
CQk5NkFCQTQyMzE0QkNCODBFMDBENTYyMDQgLyogR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21t
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTZB
QkE0MjIxNEJDQjgwRTAwRDU2MjA0IC8qIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNw
cCAqLzsgfTsKIAkJOTcwM0UxQkYxNURDNEUzNzAwMUYyNEM4IC8qIEpTVm9pZENhbGxiYWNrLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3RTlFQzhC
MTVEQzQ5MkYwMDRGMkU3MSAvKiBKU1ZvaWRDYWxsYmFjay5jcHAgKi87IH07CiAJCTk3MDU5OTc3
MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzA1OTk3MzEwN0Q5NzUyMDBBNTBBN0MgLyog
UG9saWN5Q2FsbGJhY2suY3BwICovOyB9OwpAQCAtNDUwMyw3ICs0NTA5LDYgQEAKIAkJQjIyMjdB
RjUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1pvb21BbmRQYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIyMjc5NUYwRDAwQkYyMTAwNzFCNzgyIC8q
IFNWR1pvb21BbmRQYW4uY3BwICovOyB9OwogCQlCMjIyN0FGNjBEMDBCRjIyMDA3MUI3ODIgLyog
U1ZHWm9vbUFuZFBhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjIyMjc5NjAwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1pvb21BbmRQYW4uaCAqLzsgfTsK
IAkJQjIyMjdCMDUwRDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MjIyN0IwMDBEMDBCRkYxMDA3MUI3ODIgLyogU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcCAqLzsgfTsKLQkJQjIyMjdCMDYwRDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU1BhcnNlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjIyN0Iw
MTBEMDBCRkYxMDA3MUI3ODIgLyogU1ZHQ1NTUGFyc2VyLmNwcCAqLzsgfTsKIAkJQjIyMkY2OTgw
QUI3NzE5NTAwMjJFRkFEIC8qIEpTU1ZHQW5nbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIyMkY2OTYwQUI3NzE5NTAwMjJFRkFEIC8qIEpTU1ZH
QW5nbGUuY3BwICovOyB9OwogCQlCMjIyRjY5OTBBQjc3MTk1MDAyMkVGQUQgLyogSlNTVkdBbmds
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIyMkY2
OTcwQUI3NzE5NTAwMjJFRkFEIC8qIEpTU1ZHQW5nbGUuaCAqLzsgfTsKIAkJQjIyMkY2OUMwQUI3
NzFCODAwMjJFRkFEIC8qIEpTU1ZHRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjIyRjY5QTBBQjc3MUI4MDAyMkVGQUQgLyogSlNTVkdF
bGVtZW50LmNwcCAqLzsgfTsKQEAgLTQ5MTksOCArNDkyNCw2IEBACiAJCUJDMDBGMDE1MEUwQTE4
OTUwMEZEMDRFMyAvKiBKU0ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDMDBGMDExMEUwQTE4OTUwMEZEMDRFMyAvKiBKU0ZpbGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzAwRjAxNjBFMEEx
ODk1MDBGRDA0RTMgLyogSlNGaWxlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwRjAxMjBFMEExODk1MDBGRDA0RTMgLyogSlNGaWxlTGlz
dC5jcHAgKi87IH07CiAJCUJDMDBGMDE3MEUwQTE4OTUwMEZEMDRFMyAvKiBKU0ZpbGVMaXN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwRjAxMzBF
MEExODk1MDBGRDA0RTMgLyogSlNGaWxlTGlzdC5oICovOyB9OwotCQlCQzAyQTRCNzBFMDk5N0I5
MDA0QjZEMkIgLyogQ1NTUGFyc2VyVmFsdWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAyQTRCNjBFMDk5N0I5MDA0QjZEMkIgLyogQ1NTUGFyc2Vy
VmFsdWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJQkMwMkE1NDAwRTA5OUM1QTAwNEI2RDJCIC8qIENTU1BhcnNlclZhbHVlcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAyQTUzRjBFMDk5QzVB
MDA0QjZEMkIgLyogQ1NTUGFyc2VyVmFsdWVzLmNwcCAqLzsgfTsKIAkJQkMwMkE2M0MwRTA5QTlD
RjAwNEI2RDJCIC8qIENTU0Z1bmN0aW9uVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDJBNjNCMEUwOUE5Q0YwMDRCNkQyQiAvKiBDU1NGdW5j
dGlvblZhbHVlLmggKi87IH07CiAJCUJDMDJBNjQ2MEUwOUFBRTkwMDRCNkQyQiAvKiBDU1NGdW5j
dGlvblZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDMDJBNjQ1MEUwOUFBRTkwMDRCNkQyQiAvKiBDU1NGdW5jdGlvblZhbHVlLmNwcCAqLzsg
fTsKIAkJQkMwNkVEMDYwQkZENUJBRTAwODU2RTlEIC8qIEpTSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMw
NkVEMDQwQkZENUJBRTAwODU2RTlEIC8qIEpTSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuY3BwICov
OyB9OwpAQCAtNTExOCw4ICs1MTIxLDYgQEAKIAkJQkM3NERBNDkxMDEzRjQ2ODAwNzk4N0FEIC8q
IEpTUkdCQ29sb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDNzREQTQ3MTAxM0Y0NjgwMDc5ODdBRCAvKiBKU1JHQkNvbG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkM3NkFDMTMwREQ3QUQ1QzAw
NDE1RjM0IC8qIFBhcnNlclV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkM3NkFDMTEwREQ3QUQ1QzAwNDE1RjM0IC8qIFBhcnNlclV0aWxp
dGllcy5oICovOyB9OwogCQlCQzc3MkIzQzBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTSGVscGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc3MkIzNjBD
NEVBOTFFMDA4MzI4NUYgLyogQ1NTSGVscGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQkM3NzJCM0QwQzRFQTkxRTAwODMyODVGIC8qIENTU1Bh
cnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Qzc3MkIzNzBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTUGFyc2VyLmNwcCAqLzsgfTsKLQkJQkM3NzJC
M0UwQzRFQTkxRTAwODMyODVGIC8qIENTU1BhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJCMzgwQzRFQTkxRTAwODMyODVGIC8qIENTU1Bh
cnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUJDNzcyQzQ2MEM0RUIyQzYwMDgzMjg1RiAvKiBYTUxIdHRwUmVxdWVzdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc3MkM0NDBDNEVCMkM2MDA4
MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuY3BwICovOyB9OwogCQlCQzc3MkM0NzBDNEVCMkM2MDA4
MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDNzcyQzQ1MEM0RUIyQzYwMDgzMjg1RiAvKiBYTUxIdHRwUmVxdWVz
dC5oICovOyB9OwogCQlCQzc3MkM0RTBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3Ry
eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc3
MkM0QzBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeS5jcHAgKi87IH07CkBAIC02
MzMxLDcgKzYzMzIsNiBAQAogCQlGQjMwNTZDMjE2OUU1REFDMDA5NkEyMzIgLyogQ1NTR3JvdXBp
bmdSdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
QjMwNTZDMTE2OUU1REFDMDA5NkEyMzIgLyogQ1NTR3JvdXBpbmdSdWxlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkI0ODRGNEMxNzFGODIxRTAw
MDQwNzU1IC8qIFRyYW5zZm9ybUZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjQ4NEY0QTE3MUY4MjFFMDAwNDA3NTUgLyogVHJhbnNm
b3JtRnVuY3Rpb25zLmNwcCAqLzsgfTsKIAkJRkI0ODRGNEQxNzFGODIxRTAwMDQwNzU1IC8qIFRy
YW5zZm9ybUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkI0ODRGNEIxNzFGODIxRTAwMDQwNzU1IC8qIFRyYW5zZm9ybUZ1bmN0aW9ucy5o
ICovOyB9OwotCQlGQjc4QUQyRTE1MUJGNUU2MDBGRTU0RDMgLyogQ1NTUGFyc2VyTW9kZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkI3OEFEMkMxNTFC
RjVEMjAwRkU1NEQzIC8qIENTU1BhcnNlck1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGQjkxMzkyNDE2QUU0QzE3MDAxRkU2ODIgLyogRE9N
UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkI5
MTM5MjAxNkFFNEIwQjAwMUZFNjgyIC8qIERPTVBhdGguaCAqLzsgfTsKIAkJRkI5MTM5MkExNkFF
NEZDMDAwMUZFNjgyIC8qIEpTRE9NUGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkI5MTM5MjgxNkFFNEZDMDAwMUZFNjgyIC8qIEpTRE9NUGF0aC5o
ICovOyB9OwogCQlGQjkxMzkyQjE2QUU0RkMwMDAxRkU2ODIgLyogSlNET01QYXRoLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCOTEzOTI5MTZBRTRG
QzAwMDFGRTY4MiAvKiBKU0RPTVBhdGguY3BwICovOyB9OwpAQCAtMTA0MjksNiArMTA0MjksMTIg
QEAKIAkJOTNGOUI3OUUwQkE2MDMyNjAwODU0MDY0IC8qIEpTQ0RBVEFTZWN0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ0RBVEFTZWN0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNGOUI3OUYwQkE2MDMyNjAwODU0MDY0IC8qIEpT
Q0RBVEFTZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ0RBVEFT
ZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRkRBRkM5MEIxMTMwNzQw
MEUyNzQ2RiAvKiBFZGl0b3JJbnNlcnRBY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEVkaXRvckluc2VydEFjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk5NDZEMzcyODFENkNCMjhCMDA3NzA4NEYgLyogQ1NTUGFyc2VyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENTU1BhcnNlci5jcHA7IHBhdGggPSBwYXJzZXIv
Q1NTUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTQ2RDM3MjkxRDZD
QjI4QjAwNzcwODRGIC8qIENTU1BhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBDU1NQYXJzZXIuaDsgcGF0aCA9IHBhcnNlci9DU1NQYXJzZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOTQ2RDM3MkExRDZDQjI4QjAwNzcwODRGIC8qIENTU1BhcnNlck1v
ZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ1NTUGFyc2VyTW9kZS5oOyBw
YXRoID0gcGFyc2VyL0NTU1BhcnNlck1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTQ2RDM3MkIxRDZDQjI4QjAwNzcwODRGIC8qIENTU1BhcnNlclZhbHVlcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDU1NQYXJzZXJWYWx1ZXMuY3BwOyBwYXRo
ID0gcGFyc2VyL0NTU1BhcnNlclZhbHVlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTk0NkQzNzJDMUQ2Q0IyOEIwMDc3MDg0RiAvKiBDU1NQYXJzZXJWYWx1ZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ1NTUGFyc2VyVmFsdWVzLmg7IHBhdGggPSBwYXJz
ZXIvQ1NTUGFyc2VyVmFsdWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk0NkQz
NzMyMUQ2Q0MzNzIwMDc3MDg0RiAvKiBTVkdDU1NQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gU1ZHQ1NTUGFyc2VyLmNwcDsgcGF0aCA9IHBhcnNlci9TVkdD
U1NQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NTBDNEMwMkJFRDg5
MzZGODE4RTJGOTkgLyogSlNTVkdHcmFwaGljc0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTU1ZHR3JhcGhpY3NFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk2QUJBNDIyMTRCQ0I4MEUwMEQ1NjIwNCAvKiBHcmFwaGljc0NvbnRleHQz
RE9wZW5HTENvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBH
cmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTk3MDU5OTczMTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDYWxsYmFjay5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2xpY3lDYWxsYmFjay5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTg3OSw3ICsxMTg4NSw2IEBACiAJCUIyMjI3
OTYwMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdab29tQW5kUGFuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdab29tQW5kUGFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyMjI3OTYxMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdab29tQW5kUGFuLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHWm9vbUFuZFBhbi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyMjI3QjAwMEQwMEJGRjEwMDcxQjc4MiAvKiBTVkdDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUIyMjI3QjAxMEQwMEJGRjEwMDcxQjc4MiAvKiBTVkdDU1NQYXJzZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0NTU1BhcnNlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyMjI3QjA0MEQwMEJGRjEwMDcxQjc4MiAvKiBT
VkdDU1NWYWx1ZUtleXdvcmRzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTVkdDU1NWYWx1
ZUtleXdvcmRzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjIyRjY5NjBBQjc3
MTk1MDAyMkVGQUQgLyogSlNTVkdBbmdsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNTVkdBbmdsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyMjJGNjk3MEFCNzcxOTUwMDIyRUZBRCAvKiBKU1NWR0FuZ2xlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1NWR0FuZ2xlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMjMwNyw4ICsxMjMxMiw2IEBACiAJCUJDMDBGMDExMEUwQTE4OTUwMEZEMDRFMyAv
KiBKU0ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGaWxlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDBGMDEyMEUwQTE4OTUwMEZEMDRFMyAvKiBK
U0ZpbGVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmls
ZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAwRjAxMzBFMEExODk1
MDBGRDA0RTMgLyogSlNGaWxlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0ZpbGVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDMDJBNEI2MEUw
OTk3QjkwMDRCNkQyQiAvKiBDU1NQYXJzZXJWYWx1ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ1NTUGFyc2VyVmFsdWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUJDMDJBNTNGMEUwOTlDNUEwMDRCNkQyQiAvKiBDU1NQYXJzZXJWYWx1ZXMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTUGFyc2VyVmFsdWVzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMkE2M0IwRTA5QTlDRjAwNEI2RDJCIC8qIENT
U0Z1bmN0aW9uVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRnVu
Y3Rpb25WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAyQTY0NTBFMDlB
QUU5MDA0QjZEMkIgLyogQ1NTRnVuY3Rpb25WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDU1NGdW5jdGlvblZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkMwNkVEMDQwQkZENUJBRTAwODU2RTlEIC8qIEpTSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTI1MTcsOCArMTI1MjAsNiBAQAogCQlCQzc0REE0NzEwMTNGNDY4MDA3OTg3QUQgLyogSlNSR0JD
b2xvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1JHQkNvbG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNzZBQzExMEREN0FENUMwMDQxNUYzNCAvKiBQ
YXJzZXJVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2Vy
VXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNzcyQjM2MEM0RUE5
MUUwMDgzMjg1RiAvKiBDU1NIZWxwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENTU0hlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzc3MkIzNzBD
NEVBOTFFMDA4MzI4NUYgLyogQ1NTUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IGxpbmVFbmRpbmcgPSAwOyBwYXRoID0gQ1NTUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQkM3NzJCMzgwQzRFQTkxRTAwODMyODVGIC8qIENTU1BhcnNlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTUGFyc2VyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNzcyQzQ0MEM0RUIyQzYwMDgzMjg1RiAvKiBYTUxIdHRw
UmVxdWVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWE1MSHR0
cFJlcXVlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzc3MkM0NTBDNEVC
MkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFhNTEh0dHBSZXF1ZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDNzcyQzRDMEM0RUIzMDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNSU1FVHlwZVJlZ2lzdHJ5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzOTA1LDcgKzEzOTA2LDYgQEAKIAkJRkIzMDU2
QzExNjlFNURBQzAwOTZBMjMyIC8qIENTU0dyb3VwaW5nUnVsZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDU1NHcm91cGluZ1J1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkI0ODRGNEExNzFGODIxRTAwMDQwNzU1IC8qIFRyYW5zZm9ybUZ1bmN0aW9ucy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUcmFuc2Zvcm1GdW5jdGlv
bnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjQ4NEY0QjE3MUY4MjFFMDAw
NDA3NTUgLyogVHJhbnNmb3JtRnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRyYW5zZm9ybUZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlGQjc4QUQyQzE1MUJGNUQyMDBGRTU0RDMgLyogQ1NTUGFyc2VyTW9kZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NQYXJzZXJNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZCOTEzOTIwMTZBRTRCMEIwMDFGRTY4MiAvKiBET01QYXRoLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkI5MTM5MjExNkFFNEIwQjAwMUZFNjgyIC8qIERPTVBhdGguaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IERPTVBhdGguaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGQjkxMzkyODE2QUU0RkMwMDAxRkU2ODIgLyogSlNET01QYXRoLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NUGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTgwNDYsNiArMTgwNDYsMTkgQEAKIAkJCXBhdGggPSBjb2NvYTsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTk0NkQzNzI3MUQ2Q0IyMjUwMDc3MDg0RiAvKiBw
YXJzZXIgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTk0
NkQzNzMyMUQ2Q0MzNzIwMDc3MDg0RiAvKiBTVkdDU1NQYXJzZXIuY3BwICovLAorCQkJCTk0NkQz
NzI4MUQ2Q0IyOEIwMDc3MDg0RiAvKiBDU1NQYXJzZXIuY3BwICovLAorCQkJCTk0NkQzNzI5MUQ2
Q0IyOEIwMDc3MDg0RiAvKiBDU1NQYXJzZXIuaCAqLywKKwkJCQk5NDZEMzcyQTFENkNCMjhCMDA3
NzA4NEYgLyogQ1NTUGFyc2VyTW9kZS5oICovLAorCQkJCTk0NkQzNzJCMUQ2Q0IyOEIwMDc3MDg0
RiAvKiBDU1NQYXJzZXJWYWx1ZXMuY3BwICovLAorCQkJCTk0NkQzNzJDMUQ2Q0IyOEIwMDc3MDg0
RiAvKiBDU1NQYXJzZXJWYWx1ZXMuaCAqLywKKwkJCSk7CisJCQluYW1lID0gcGFyc2VyOworCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJOTcxMTQ1RkUxNEVGMDA2RTAwNjc0RkQ5
IC8qIE1vZHVsZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApA
QCAtMjIxMTIsNiArMjIxMjUsNyBAQAogCQlGNTIzRDE4NDAyREU0MkU4MDE4NjM1Q0EgLyogY3Nz
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk5NDZEMzcy
NzFENkNCMjI1MDA3NzA4NEYgLyogcGFyc2VyICovLAogCQkJCUZCRDZBRjg0MTVFRjIxRDQwMDhC
NzExMCAvKiBCYXNpY1NoYXBlRnVuY3Rpb25zLmNwcCAqLywKIAkJCQlGQkQ2QUY4NTE1RUYyMUQ0
MDA4QjcxMTAgLyogQmFzaWNTaGFwZUZ1bmN0aW9ucy5oICovLAogCQkJCUE4MEU2Q0RBMEExOTg5
Q0EwMDdGQjhDNSAvKiBDb3VudGVyLmggKi8sCkBAIC0yMjIxMywxMSArMjIyMjcsNiBAQAogCQkJ
CUE4MEU2Q0NCMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQYWdlUnVsZS5jcHAgKi8sCiAJCQkJQTgw
RTZDRDYwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1BhZ2VSdWxlLmggKi8sCiAJCQkJODVDNTZDQTYw
QUE4OUQ1RjAwRDk1NzU1IC8qIENTU1BhZ2VSdWxlLmlkbCAqLywKLQkJCQlCQzc3MkIzNzBDNEVB
OTFFMDA4MzI4NUYgLyogQ1NTUGFyc2VyLmNwcCAqLywKLQkJCQlCQzc3MkIzODBDNEVBOTFFMDA4
MzI4NUYgLyogQ1NTUGFyc2VyLmggKi8sCi0JCQkJRkI3OEFEMkMxNTFCRjVEMjAwRkU1NEQzIC8q
IENTU1BhcnNlck1vZGUuaCAqLywKLQkJCQlCQzAyQTUzRjBFMDk5QzVBMDA0QjZEMkIgLyogQ1NT
UGFyc2VyVmFsdWVzLmNwcCAqLywKLQkJCQlCQzAyQTRCNjBFMDk5N0I5MDA0QjZEMkIgLyogQ1NT
UGFyc2VyVmFsdWVzLmggKi8sCiAJCQkJQTgwRTZDREIwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1By
aW1pdGl2ZVZhbHVlLmNwcCAqLywKIAkJCQlBODBFNkNCQzBBMTk4OUNBMDA3RkI4QzUgLyogQ1NT
UHJpbWl0aXZlVmFsdWUuaCAqLywKIAkJCQk5MzA3MDU5MDA5RTBDNzU4MDBCMTdGRTQgLyogQ1NT
UHJpbWl0aXZlVmFsdWUuaWRsICovLApAQCAtMjIzODQsNyArMjIzOTMsNiBAQAogCQkJCTg1MDY1
NkRGMEFBQjQ1NEYwMDJEMTVDMCAvKiBTdHlsZVNoZWV0TGlzdC5pZGwgKi8sCiAJCQkJOTNDQTRD
QTIwOURGOTNGQTAwREY4Njc3IC8qIHN2Zy5jc3MgKi8sCiAJCQkJQjIyMjdCMDAwRDAwQkZGMTAw
NzFCNzgyIC8qIFNWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi8sCi0JCQkJQjIy
MjdCMDEwRDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU1BhcnNlci5jcHAgKi8sCiAJCQkJQjIyMjdC
MDQwRDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU1ZhbHVlS2V5d29yZHMuaW4gKi8sCiAJCQkJRkI0
ODRGNEExNzFGODIxRTAwMDQwNzU1IC8qIFRyYW5zZm9ybUZ1bmN0aW9ucy5jcHAgKi8sCiAJCQkJ
RkI0ODRGNEIxNzFGODIxRTAwMDQwNzU1IC8qIFRyYW5zZm9ybUZ1bmN0aW9ucy5oICovLApAQCAt
MjM5NzEsOSArMjM5NzksNiBAQAogCQkJCTMxNEJFM0ExMUIzMEY2QjcwMDE0MTk4MiAvKiBDU1NO
YW1lZEltYWdlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUY5OEZGRjQ1MTFBMjY3NjIwMEY1
NDhFOCAvKiBDU1NPTVV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkQwMDBBMTk4OUNB
MDA3RkI4QzUgLyogQ1NTUGFnZVJ1bGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDNzcyQjNFMEM0
RUE5MUUwMDgzMjg1RiAvKiBDU1NQYXJzZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUZCNzhBRDJF
MTUxQkY1RTYwMEZFNTREMyAvKiBDU1NQYXJzZXJNb2RlLmggaW4gSGVhZGVycyAqLywKLQkJCQlC
QzAyQTRCNzBFMDk5N0I5MDA0QjZEMkIgLyogQ1NTUGFyc2VyVmFsdWVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5NzdCMzg2MzEyMjg4M0U5MDBCODFGRjggLyogQ1NTUHJlbG9hZFNjYW5uZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4MEU2Q0U2MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmltaXRp
dmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFFRDhBQzMwQ0M0OUJFMDAwQkZDNTU3IC8q
IENTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCBpbiBIZWFkZXJzICovLApAQCAtMjUxNTAsNiAr
MjUxNTUsNyBAQAogCQkJCUIyRkEzREI1MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1BhdGhFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RCNzBBQjc1QTZGMDAwRTVBQzQgLyogSlNT
VkdQYXRoU2VnLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RCOTBBQjc1QTZGMDAwRTVBQzQg
LyogSlNTVkdQYXRoU2VnQXJjQWJzLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NDZEMzcyRTFENkNC
Mjk0MDA3NzA4NEYgLyogQ1NTUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RCQjBB
Qjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRoU2VnQXJjUmVsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMkZBM0RCRDBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRoU2VnQ2xvc2VQYXRoLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMkZBM0RCRjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRoU2Vn
Q3VydmV0b0N1YmljQWJzLmggaW4gSGVhZGVycyAqLywKQEAgLTI1MzIyLDYgKzI1MzI4LDcgQEAK
IAkJCQlFNEUzOUFGQjEzMzBFRkE4MDAzQUIyNzQgLyogTGVnYWN5VGlsZUxheWVyUG9vbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTEyREQ4RjUwRDkxRTZBRjAwMEY4OUVFIC8qIExlZ2FjeVdlYkFy
Y2hpdmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTY1QkVCMEVBQ0RGMTYwMDdFNDUzMyAvKiBM
ZW5ndGguaCBpbiBIZWFkZXJzICovLAorCQkJCTk0NkQzNzJGMUQ2Q0IyOTQwMDc3MDg0RiAvKiBD
U1NQYXJzZXJNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZGNjQ5MTBFQUQxNUMyMDBDMUQ2
RjcgLyogTGVuZ3RoQm94LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNUJBN0Q2MzE1MTQzN0NBMDBG
RTFFM0YgLyogTGVuZ3RoRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg3MTY3MDFD
ODY5RDgzMDA0RkYwREUgLyogTGVuZ3RoUG9pbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjY1MDAs
NiArMjY1MDcsNyBAQAogCQkJCTA4MTNBNEVBMTI4NDEzMjYwMDk5MjUxMSAvKiBTVkdTdGF0aWNQ
cm9wZXJ0eVRlYXJPZmYuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QUE5MEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdTdG9wRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBQUMwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR1N0cmluZ0xpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTk0NkQz
NzMxMUQ2Q0IyOTQwMDc3MDg0RiAvKiBDU1NQYXJzZXJWYWx1ZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUIyMjI3QUI4MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdTdHlsZUVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyMjI3QUJCMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdTVkdFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FCRTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHU3dpdGNo
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzYxOSw4ICsyNzYyNyw2IEBACiAJCQkJMzE0
QkUzQTMxQjMwRjZEMTAwMTQxOTgyIC8qIENTU05hbWVkSW1hZ2VWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGOThGRkY0NDExQTI2NzYyMDBGNTQ4RTggLyogQ1NTT01VdGlscy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBODBFNkNGNTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUGFnZVJ1bGUu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkM3NzJCM0QwQzRFQTkxRTAwODMyODVGIC8qIENTU1Bh
cnNlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCQzAyQTU0MDBFMDk5QzVBMDA0QjZEMkIgLyog
Q1NTUGFyc2VyVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3N0IzODYyMTIyODgzRTkw
MEI4MUZGOCAvKiBDU1NQcmVsb2FkU2Nhbm5lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODBF
NkQwNTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUHJpbWl0aXZlVmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTgwRTZDRjcwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Byb3BlcnR5LmNwcCBpbiBT
b3VyY2VzICovLApAQCAtMjg2MzEsNiArMjg2MzcsNyBAQAogCQkJCTFBNzUwRDhEMEE5MEU1MjEw
MDBGRjIxNSAvKiBKU05vZGVJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTc1MERE
NDBBOTBFNzI5MDAwRkYyMTUgLyogSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkNEOUMyQzIwQzE3QjY5RTAwNUM5MEEyIC8qIEpTTm9kZUxpc3QuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJOTQ2RDM3MzAxRDZDQjI5NDAwNzcwODRGIC8qIENTU1BhcnNlclZhbHVl
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0Q5QzI2NTBDMTdBQTY3MDA1QzkwQTIgLyogSlNO
b2RlTGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzkxQTM4RjFCNDk4QUJFMDAz
RjlFRkEgLyogSlNOb2RlT3JTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzM1MDNDQTMx
MDE3OUFENzAwM0I0N0UxIC8qIEpTTm90aWZpY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MjkyOTMsNiArMjkzMDAsNyBAQAogCQkJCTBGNDNDODVEMTg5RTEwQ0YwMDAxOUFFMiAvKiBQZXJm
b3JtYW5jZVRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDU4MUZCNDE1MjBGOTNCMDAz
QTdBNzUgLyogUGVyaW9kaWNXYXZlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RDVEQzJEMEY0
MjNBNzMwMDhGMjBGRCAvKiBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk5NDZEMzczMzFENkNDNDJCMDA3NzA4NEYgLyogU1ZHQ1NTUGFyc2VyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUQwRkYyQTVEMTFGOEM0NUEwMDdFNzRFMCAvKiBQaW5nTG9h
ZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEN0QzMzQzMUM3QTEyM0YwMDA0MTI5MyAvKiBQ
aXhlbEJ1ZmZlckNvbmZvcm1lckNWLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGREY0NUE3MUJE
MUM2RkQwMEU0RkE4QyAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtMjk4MjUsNyArMjk4MzMsNiBAQAogCQkJCUIyMjI3OUExMEQwMEJGMjIwMDcxQjc4MiAvKiBT
VkdDb2xvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlBNDBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjIyMjdCMDUwRDAwQkZGMTAwNzFCNzgyIC8qIFNWR0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMjIyN0IwNjBEMDBCRkYxMDA3MUI3ODIg
LyogU1ZHQ1NTUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUE3MEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdDdXJzb3JFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3
OUFEMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdEZWZzRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCMjIyNzlCMDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRGVzY0VsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0zMDAyOCw2ICszMDAzNSw3IEBACiAJCQkJN0FBM0E2OTkxOTRBNjRFNzAw
MUNCRDI0IC8qIFRpbGVDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFGNzJCRjBB
MTg3RkQ0NDkwMDA5QkNCMyAvKiBUaWxlQ29udHJvbGxlck1lbW9yeUhhbmRsZXJJT1MuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0FBM0E2QTMxOTRCNUMyMjAwMUNCRDI0IC8qIFRpbGVDb3ZlcmFn
ZU1hcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NDZEMzcyRDFENkNCMjk0MDA3NzA4NEYgLyog
Q1NTUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBQTNBNjlCMTk0QTY0RTcwMDFDQkQy
NCAvKiBUaWxlR3JpZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OTg3NzBGMjEyNDJDNTM1MDAy
MjI2QkEgLyogVGlsaW5nRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVCM0REQjEyNTFG
MTJEMDAzRUYyNjkgLyogVGltZUlucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFdl
YkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmNwcAkocmV2aXNpb24gMjA0NzQzKQorKysgV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMzg1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQWxs
YW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYuY29tKQotICogQ29weXJpZ2h0IChDKSAy
MDA0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA3IE5pY2hvbGFzIFNoYW5rcyA8d2Via2l0QG5pY2tzaGFua3MuY29tPgotICogQ29weXJp
Z2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93
d3cudG9yY2htb2JpbGUuY29tLykKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBZG9iZSBT
eXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCi0KLSNpbmNsdWRlICJDU1NBbmltYXRp
b25UcmlnZ2VyU2Nyb2xsVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NBc3BlY3RSYXRpb1ZhbHVlLmgi
Ci0jaW5jbHVkZSAiQ1NTQmFzaWNTaGFwZXMuaCIKLSNpbmNsdWRlICJDU1NCb3JkZXJJbWFnZS5o
IgotI2luY2x1ZGUgIkNTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0Nh
bnZhc1ZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTQ29udGVudERpc3RyaWJ1dGlvblZhbHVlLmgiCi0j
aW5jbHVkZSAiQ1NTQ3Jvc3NmYWRlVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NDdXJzb3JJbWFnZVZh
bHVlLmgiCi0jaW5jbHVkZSAiQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oIgotI2luY2x1ZGUgIkNT
U0ZpbHRlckltYWdlVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NGb250RmFjZVJ1bGUuaCIKLSNpbmNs
dWRlICJDU1NGb250RmFjZVNyY1ZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTRm9udEZlYXR1cmVWYWx1
ZS5oIgotI2luY2x1ZGUgIkNTU0ZvbnRWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0Z1bmN0aW9uVmFs
dWUuaCIKLSNpbmNsdWRlICJDU1NHcmFkaWVudFZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTSW1hZ2VT
ZXRWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0ltYWdlVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NJbmhl
cml0ZWRWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0luaXRpYWxWYWx1ZS5oIgotI2luY2x1ZGUgIkNT
U0tleWZyYW1lUnVsZS5oIgotI2luY2x1ZGUgIkNTU0tleWZyYW1lc1J1bGUuaCIKLSNpbmNsdWRl
ICJDU1NMaW5lQm94Q29udGFpblZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTTWVkaWFSdWxlLmgiCi0j
aW5jbHVkZSAiQ1NTTmFtZWRJbWFnZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTUGFnZVJ1bGUuaCIK
LSNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZh
bHVlTWFwcGluZ3MuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eVNvdXJjZURhdGEuaCIKLSNpbmNs
dWRlICJDU1NSZWZsZWN0VmFsdWUuaCIKLSNpbmNsdWRlICJDU1NSZXZlcnRWYWx1ZS5oIgotI2lu
Y2x1ZGUgIkNTU1NlbGVjdG9yLmgiCi0jaW5jbHVkZSAiQ1NTU2hhZG93VmFsdWUuaCIKLSNpbmNs
dWRlICJDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5o
IgotI2luY2x1ZGUgIkNTU1VuaWNvZGVSYW5nZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTVW5zZXRW
YWx1ZS5oIgotI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJDU1NWYWx1
ZUxpc3QuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKLSNpbmNsdWRlICJDU1NWYXJpYWJs
ZURlcGVuZGVudFZhbHVlLmgiCi0jaW5jbHVkZSAiQ291bnRlci5oIgotI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiR3JpZEFyZWEu
aCIKLSNpbmNsdWRlICJIVE1MT3B0R3JvdXBFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFBhcnNl
cklkaW9tcy5oIgotI2luY2x1ZGUgIkhhc2hUb29scy5oIgotI2luY2x1ZGUgIk1lZGlhTGlzdC5o
IgotI2luY2x1ZGUgIk1lZGlhUXVlcnlFeHAuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVk
ZSAiUGFnZUNvbnNvbGVDbGllbnQuaCIKLSNpbmNsdWRlICJQYWlyLmgiCi0jaW5jbHVkZSAiUmVj
dC5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgotI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgotI2luY2x1ZGUgIlNW
R1BhdGhCeXRlU3RyZWFtLmgiCi0jaW5jbHVkZSAiU1ZHUGF0aFV0aWxpdGllcy5oIgotI2luY2x1
ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgotI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlclRlc3RGdW5j
dGlvbnMuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlN0eWxlUHJvcGVydGll
cy5oIgotI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCIKLSNpbmNsdWRlICJTdHls
ZVByb3BlcnR5U2hvcnRoYW5kRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiU3R5bGVSdWxlLmgiCi0j
aW5jbHVkZSAiU3R5bGVSdWxlSW1wb3J0LmgiCi0jaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRz
LmgiCi0jaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCi0jaW5jbHVkZSAiV2ViS2l0Q1NTRmlsdGVy
VmFsdWUuaCIKLSNpbmNsdWRlICJXZWJLaXRDU1NSZWdpb25SdWxlLmgiCi0jaW5jbHVkZSAiV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCIKLSNpbmNsdWRlIDxiaXRzZXQ+Ci0jaW5jbHVkZSA8bGlt
aXRzLmg+Ci0jaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYv
ZHRvYS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+
Ci0KLSNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQotI2luY2x1ZGUgIkNTU0dyaWRBdXRvUmVw
ZWF0VmFsdWUuaCIKLSNpbmNsdWRlICJDU1NHcmlkTGluZU5hbWVzVmFsdWUuaCIKLSNpbmNsdWRl
ICJDU1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShDU1Nf
U0NST0xMX1NOQVApCi0jaW5jbHVkZSAiTGVuZ3RoUmVwZWF0LmgiCi0jZW5kaWYKLQotI2lmIEVO
QUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKLSNpbmNsdWRlICJEYXNoYm9hcmRSZWdpb24uaCIKLSNl
bmRpZgotCi0jZGVmaW5lIFlZREVCVUcgMAotCi0jaWYgWVlERUJVRyA+IDAKLWV4dGVybiBpbnQg
Y3NzeXlkZWJ1ZzsKLSNlbmRpZgotCi1leHRlcm4gaW50IGNzc3l5cGFyc2UoV2ViQ29yZTo6Q1NT
UGFyc2VyKik7Ci0KLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci0KLW5hbWVzcGFjZSB7Ci0KLWVudW0g
UHJvcGVydHlUeXBlIHsKLSAgICBQcm9wZXJ0eUV4cGxpY2l0LAotICAgIFByb3BlcnR5SW1wbGlj
aXQKLX07Ci0KLWNsYXNzIEltcGxpY2l0U2NvcGUgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEltcGxpY2l0U2NvcGUpOwotcHVibGljOgotICAgIEltcGxpY2l0U2NvcGUoV2ViQ29yZTo6Q1NT
UGFyc2VyJiBwYXJzZXIsIFByb3BlcnR5VHlwZSBwcm9wZXJ0eVR5cGUpCi0gICAgICAgIDogbV9w
YXJzZXIocGFyc2VyKQotICAgIHsKLSAgICAgICAgbV9wYXJzZXIubV9pbXBsaWNpdFNob3J0aGFu
ZCA9IHByb3BlcnR5VHlwZSA9PSBQcm9wZXJ0eUltcGxpY2l0OwotICAgIH0KLQotICAgIH5JbXBs
aWNpdFNjb3BlKCkKLSAgICB7Ci0gICAgICAgIG1fcGFyc2VyLm1faW1wbGljaXRTaG9ydGhhbmQg
PSBmYWxzZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViQ29yZTo6Q1NTUGFyc2VyJiBtX3Bh
cnNlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY29u
c3QgdW5zaWduZWQgQ1NTUGFyc2VyOjppbnZhbGlkUGFyc2VkUHJvcGVydGllc0NvdW50ID0gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwotc3RhdGljIGNvbnN0IGRvdWJsZSBN
QVhfU0NBTEUgPSAxMDAwMDAwOwotCi10ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+IGJvb2wgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBj
b25zdCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbGVuZ3RoXSkKLXsKLSAgICBBU1NFUlQodmFs
dWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UIHx8IHZhbHVlLnVuaXQgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOwotICAgIHJldHVybiBlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5zdHJpbmcsIGxvd2VyY2FzZUxldHRlcnMpOwotfQotCi1z
dGF0aWMgYm9vbCBoYXNQcmVmaXgoY29uc3QgY2hhciogc3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgs
IGNvbnN0IGNoYXIqIHByZWZpeCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgaWYgKCFwcmVmaXhbaV0pCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgaWYgKHN0cmluZ1tpXSAhPSBwcmVmaXhbaV0pCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJncz4KLXN0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZVByaW1p
dGl2ZVZhbHVlUGFpcihBcmdzJiYuLi4gYXJncykKLXsKLSAgICByZXR1cm4gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShQYWlyOjpjcmVhdGUoc3RkOjpmb3J3YXJkPEFyZ3M+
KGFyZ3MpLi4uKSk7Ci19Ci0KLWNsYXNzIEFuaW1hdGlvblBhcnNlQ29udGV4dCB7Ci1wdWJsaWM6
Ci0gICAgQW5pbWF0aW9uUGFyc2VDb250ZXh0KCkgPSBkZWZhdWx0OwotCi0gICAgdm9pZCBjb21t
aXRGaXJzdEFuaW1hdGlvbigpCi0gICAgewotICAgICAgICBtX2ZpcnN0QW5pbWF0aW9uQ29tbWl0
dGVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBib29sIGhhc0NvbW1pdHRlZEZpcnN0QW5pbWF0aW9u
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2ZpcnN0QW5pbWF0aW9uQ29tbWl0dGVk
OwotICAgIH0KLQotICAgIHZvaWQgY29tbWl0QW5pbWF0aW9uUHJvcGVydHlLZXl3b3JkKCkKLSAg
ICB7Ci0gICAgICAgIG1fYW5pbWF0aW9uUHJvcGVydHlLZXl3b3JkQWxsb3dlZCA9IGZhbHNlOwot
ICAgIH0KLQotICAgIGJvb2wgYW5pbWF0aW9uUHJvcGVydHlLZXl3b3JkQWxsb3dlZCgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hbmltYXRpb25Qcm9wZXJ0eUtleXdvcmRBbGxvd2Vk
OwotICAgIH0KLQotICAgIGJvb2wgaGFzU2VlbkFuaW1hdGlvblByb3BlcnR5S2V5d29yZCgpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9oYXNTZWVuQW5pbWF0aW9uUHJvcGVydHlLZXl3
b3JkOwotICAgIH0KLQotICAgIHZvaWQgc2F3QW5pbWF0aW9uUHJvcGVydHlLZXl3b3JkKCkKLSAg
ICB7Ci0gICAgICAgIG1faGFzU2VlbkFuaW1hdGlvblByb3BlcnR5S2V5d29yZCA9IHRydWU7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIGJvb2wgbV9hbmltYXRpb25Qcm9wZXJ0eUtleXdvcmRBbGxv
d2VkIHsgdHJ1ZSB9OwotICAgIGJvb2wgbV9maXJzdEFuaW1hdGlvbkNvbW1pdHRlZCB7IGZhbHNl
IH07Ci0gICAgYm9vbCBtX2hhc1NlZW5BbmltYXRpb25Qcm9wZXJ0eUtleXdvcmQgeyBmYWxzZSB9
OwotfTsKLQotY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgc3RyaWN0Q1NTUGFyc2VyQ29udGV4dCgp
Ci17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENTU1BhcnNlckNvbnRleHQ+IHN0cmljdENv
bnRleHQoQ1NTU3RyaWN0TW9kZSk7Ci0gICAgcmV0dXJuIHN0cmljdENvbnRleHQ7Ci19Ci0KLUNT
U1BhcnNlckNvbnRleHQ6OkNTU1BhcnNlckNvbnRleHQoQ1NTUGFyc2VyTW9kZSBtb2RlLCBjb25z
dCBVUkwmIGJhc2VVUkwpCi0gICAgOiBiYXNlVVJMKGJhc2VVUkwpCi0gICAgLCBtb2RlKG1vZGUp
Ci0jaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKLSAgICAsIGNzc0dyaWRMYXlvdXRFbmFibGVk
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuaXNDU1NHcmlkTGF5b3V0
RW5hYmxlZCgpKQotI2VuZGlmCi17Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIC8vIEZJWE1FOiBG
b3JjZSB0aGUgc2l0ZSBzcGVjaWZpYyBxdWlyayBiZWxvdyB0byB3b3JrIG9uIGlPUy4gSW52ZXN0
aWdhdGluZyBvdGhlciBzaXRlIHNwZWNpZmljIHF1aXJrcwotICAgIC8vIHRvIHNlZSBpZiB3ZSBj
YW4gZW5hYmxlIHRoZSBwcmVmZXJlbmNlIGFsbCB0b2dldGhlciBpcyB0byBiZSBoYW5kbGVkIGJ5
OgotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS84NDkzMzA5PiBJbnZlc3RpZ2F0ZSBFbmFibGluZyBT
aXRlIFNwZWNpZmljIFF1aXJrcyBpbiBNb2JpbGVTYWZhcmkgYW5kIFVJV2ViVmlldwotICAgIG5l
ZWRzU2l0ZVNwZWNpZmljUXVpcmtzID0gdHJ1ZTsKLSNlbmRpZgotfQotCi1DU1NQYXJzZXJDb250
ZXh0OjpDU1NQYXJzZXJDb250ZXh0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVVJMJiBiYXNl
VVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCi0gICAgOiBiYXNlVVJMKGJhc2VVUkwuaXNOdWxs
KCkgPyBkb2N1bWVudC5iYXNlVVJMKCkgOiBiYXNlVVJMKQotICAgICwgY2hhcnNldChjaGFyc2V0
KQotICAgICwgbW9kZShkb2N1bWVudC5pblF1aXJrc01vZGUoKSA/IENTU1F1aXJrc01vZGUgOiBD
U1NTdHJpY3RNb2RlKQotICAgICwgaXNIVE1MRG9jdW1lbnQoZG9jdW1lbnQuaXNIVE1MRG9jdW1l
bnQoKSkKLSNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQotICAgICwgY3NzR3JpZExheW91dEVu
YWJsZWQoZG9jdW1lbnQuaXNDU1NHcmlkTGF5b3V0RW5hYmxlZCgpKQotI2VuZGlmCi17Ci0gICAg
aWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50LnNldHRpbmdzKCkpIHsKLSAgICAgICAg
bmVlZHNTaXRlU3BlY2lmaWNRdWlya3MgPSBzZXR0aW5ncy0+bmVlZHNTaXRlU3BlY2lmaWNRdWly
a3MoKTsKLSAgICAgICAgZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlID0gc2V0dGlu
Z3MtPmVuZm9yY2VDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlKCk7Ci0gICAgICAgIHVzZUxlZ2Fj
eUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3IgPSBzZXR0aW5ncy0+dXNlTGVnYWN5QmFj
a2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvcigpOwotI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRP
U0laSU5HKQotICAgICAgICB0ZXh0QXV0b3NpemluZ0VuYWJsZWQgPSBzZXR0aW5ncy0+dGV4dEF1
dG9zaXppbmdFbmFibGVkKCk7Ci0jZW5kaWYKLSAgICAgICAgc3ByaW5nVGltaW5nRnVuY3Rpb25F
bmFibGVkID0gc2V0dGluZ3MtPnNwcmluZ1RpbWluZ0Z1bmN0aW9uRW5hYmxlZCgpOwotICAgIH0K
LQotI2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyBGSVhNRTogRm9yY2UgdGhlIHNpdGUgc3BlY2lm
aWMgcXVpcmsgYmVsb3cgdG8gd29yayBvbiBpT1MuIEludmVzdGlnYXRpbmcgb3RoZXIgc2l0ZSBz
cGVjaWZpYyBxdWlya3MKLSAgICAvLyB0byBzZWUgaWYgd2UgY2FuIGVuYWJsZSB0aGUgcHJlZmVy
ZW5jZSBhbGwgdG9nZXRoZXIgaXMgdG8gYmUgaGFuZGxlZCBieToKLSAgICAvLyA8cmRhcjovL3By
b2JsZW0vODQ5MzMwOT4gSW52ZXN0aWdhdGUgRW5hYmxpbmcgU2l0ZSBTcGVjaWZpYyBRdWlya3Mg
aW4gTW9iaWxlU2FmYXJpIGFuZCBVSVdlYlZpZXcKLSAgICBuZWVkc1NpdGVTcGVjaWZpY1F1aXJr
cyA9IHRydWU7Ci0jZW5kaWYKLX0KLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IENTU1BhcnNlckNv
bnRleHQmIGEsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGIpCi17Ci0gICAgcmV0dXJuIGEuYmFz
ZVVSTCA9PSBiLmJhc2VVUkwKLSAgICAgICAgJiYgYS5jaGFyc2V0ID09IGIuY2hhcnNldAotICAg
ICAgICAmJiBhLm1vZGUgPT0gYi5tb2RlCi0gICAgICAgICYmIGEuaXNIVE1MRG9jdW1lbnQgPT0g
Yi5pc0hUTUxEb2N1bWVudAotI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCi0gICAgICAgICYm
IGEuY3NzR3JpZExheW91dEVuYWJsZWQgPT0gYi5jc3NHcmlkTGF5b3V0RW5hYmxlZAotI2VuZGlm
Ci0gICAgICAgICYmIGEubmVlZHNTaXRlU3BlY2lmaWNRdWlya3MgPT0gYi5uZWVkc1NpdGVTcGVj
aWZpY1F1aXJrcwotICAgICAgICAmJiBhLmVuZm9yY2VzQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9k
ZSA9PSBiLmVuZm9yY2VzQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZQotICAgICAgICAmJiBhLnVz
ZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3IgPT0gYi51c2VMZWdhY3lCYWNr
Z3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2aW9yCi0gICAgICAgICYmIGEuc3ByaW5nVGltaW5nRnVu
Y3Rpb25FbmFibGVkID09IGIuc3ByaW5nVGltaW5nRnVuY3Rpb25FbmFibGVkOwotfQotCi1DU1NQ
YXJzZXI6OkNTU1BhcnNlcihjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQotICAgIDog
bV9jb250ZXh0KGNvbnRleHQpCi17Ci0jaWYgWVlERUJVRyA+IDAKLSAgICBjc3N5eWRlYnVnID0g
MTsKLSNlbmRpZgotfQotCi1DU1NQYXJzZXI6On5DU1NQYXJzZXIoKQotewotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIGNvbnZl
cnRUb0FTQ0lJTG93ZXJjYXNlSW5QbGFjZShDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBsZW5ndGgpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KQotICAgICAgICBjaGFyYWN0ZXJzW2ldID0gdG9BU0NJSUxvd2VyKGNoYXJhY3RlcnNbaV0pOwot
fQotCi12b2lkIENTU1BhcnNlclN0cmluZzo6Y29udmVydFRvQVNDSUlMb3dlcmNhc2VJblBsYWNl
KCkKLXsKLSAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgIFdlYkNvcmU6OmNvbnZlcnRUb0FTQ0lJ
TG93ZXJjYXNlSW5QbGFjZShjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBXZWJDb3JlOjpjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2UoY2hhcmFjdGVyczE2
KCksIGxlbmd0aCgpKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OnNldHVwUGFyc2VyKGNvbnN0IGNo
YXIqIHByZWZpeCwgdW5zaWduZWQgcHJlZml4TGVuZ3RoLCBTdHJpbmdWaWV3IHN0cmluZywgY29u
c3QgY2hhciogc3VmZml4LCB1bnNpZ25lZCBzdWZmaXhMZW5ndGgpCi17Ci0gICAgbV9wYXJzZWRU
ZXh0UHJlZml4TGVuZ3RoID0gcHJlZml4TGVuZ3RoOwotICAgIHVuc2lnbmVkIHN0cmluZ0xlbmd0
aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmdMZW5ndGgg
KyBtX3BhcnNlZFRleHRQcmVmaXhMZW5ndGggKyBzdWZmaXhMZW5ndGggKyAxOwotICAgIG1fbGVu
Z3RoID0gbGVuZ3RoOwotCi0gICAgaWYgKCFzdHJpbmdMZW5ndGggfHwgc3RyaW5nLmlzOEJpdCgp
KSB7Ci0gICAgICAgIG1fZGF0YVN0YXJ0OCA9IHN0ZDo6bWFrZV91bmlxdWU8TENoYXJbXT4obGVu
Z3RoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcGFyc2VkVGV4dFByZWZp
eExlbmd0aDsgKytpKQotICAgICAgICAgICAgbV9kYXRhU3RhcnQ4W2ldID0gcHJlZml4W2ldOwot
Ci0gICAgICAgIGlmIChzdHJpbmdMZW5ndGgpCi0gICAgICAgICAgICBtZW1jcHkobV9kYXRhU3Rh
cnQ4LmdldCgpICsgbV9wYXJzZWRUZXh0UHJlZml4TGVuZ3RoLCBzdHJpbmcuY2hhcmFjdGVyczgo
KSwgc3RyaW5nTGVuZ3RoICogc2l6ZW9mKExDaGFyKSk7Ci0KLSAgICAgICAgdW5zaWduZWQgc3Rh
cnQgPSBtX3BhcnNlZFRleHRQcmVmaXhMZW5ndGggKyBzdHJpbmdMZW5ndGg7Ci0gICAgICAgIHVu
c2lnbmVkIGVuZCA9IHN0YXJ0ICsgc3VmZml4TGVuZ3RoOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKQotICAgICAgICAgICAgbV9kYXRhU3RhcnQ4W2ldID0g
c3VmZml4W2kgLSBzdGFydF07Ci0KLSAgICAgICAgbV9kYXRhU3RhcnQ4W2xlbmd0aCAtIDFdID0g
J1wwJzsKLQotICAgICAgICBtX2lzOEJpdFNvdXJjZSA9IHRydWU7Ci0gICAgICAgIG1fY3VycmVu
dENoYXJhY3RlcjggPSBtX2RhdGFTdGFydDguZ2V0KCk7Ci0gICAgICAgIG1fY3VycmVudENoYXJh
Y3RlcjE2ID0gbnVsbHB0cjsKLSAgICAgICAgc2V0VG9rZW5TdGFydDxMQ2hhcj4obV9jdXJyZW50
Q2hhcmFjdGVyOCk7Ci0gICAgICAgIG1fbGV4RnVuYyA9ICZDU1NQYXJzZXI6OnJlYWxMZXg8TENo
YXI+OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9kYXRhU3RhcnQxNiA9IHN0ZDo6
bWFrZV91bmlxdWU8VUNoYXJbXT4obGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9wYXJzZWRUZXh0UHJlZml4TGVuZ3RoOyArK2kpCi0gICAgICAgIG1fZGF0YVN0YXJ0MTZb
aV0gPSBwcmVmaXhbaV07Ci0KLSAgICBBU1NFUlQoc3RyaW5nTGVuZ3RoKTsKLSAgICBtZW1jcHko
bV9kYXRhU3RhcnQxNi5nZXQoKSArIG1fcGFyc2VkVGV4dFByZWZpeExlbmd0aCwgc3RyaW5nLmNo
YXJhY3RlcnMxNigpLCBzdHJpbmdMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLQotICAgIHVuc2ln
bmVkIHN0YXJ0ID0gbV9wYXJzZWRUZXh0UHJlZml4TGVuZ3RoICsgc3RyaW5nTGVuZ3RoOwotICAg
IHVuc2lnbmVkIGVuZCA9IHN0YXJ0ICsgc3VmZml4TGVuZ3RoOwotICAgIGZvciAodW5zaWduZWQg
aSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspCi0gICAgICAgIG1fZGF0YVN0YXJ0MTZbaV0gPSBzdWZm
aXhbaSAtIHN0YXJ0XTsKLQotICAgIG1fZGF0YVN0YXJ0MTZbbGVuZ3RoIC0gMV0gPSAnXDAnOwot
Ci0gICAgbV9pczhCaXRTb3VyY2UgPSBmYWxzZTsKLSAgICBtX2N1cnJlbnRDaGFyYWN0ZXI4ID0g
bnVsbHB0cjsKLSAgICBtX2N1cnJlbnRDaGFyYWN0ZXIxNiA9IG1fZGF0YVN0YXJ0MTYuZ2V0KCk7
Ci0gICAgc2V0VG9rZW5TdGFydDxVQ2hhcj4obV9jdXJyZW50Q2hhcmFjdGVyMTYpOwotICAgIG1f
bGV4RnVuYyA9ICZDU1NQYXJzZXI6OnJlYWxMZXg8VUNoYXI+OwotfQotCi12b2lkIENTU1BhcnNl
cjo6cGFyc2VTaGVldChTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0LCBjb25zdCBTdHJpbmcmIHN0
cmluZywgY29uc3QgVGV4dFBvc2l0aW9uJiB0ZXh0UG9zaXRpb24sIFJ1bGVTb3VyY2VEYXRhTGlz
dCogcnVsZVNvdXJjZURhdGFSZXN1bHQsIGJvb2wgbG9nRXJyb3JzKQotewotICAgIHNldFN0eWxl
U2hlZXQoc2hlZXQpOwotICAgIG1fZGVmYXVsdE5hbWVzcGFjZSA9IHN0YXJBdG9tOyAvLyBSZXNl
dCB0aGUgZGVmYXVsdCBuYW1lc3BhY2UuCi0gICAgaWYgKHJ1bGVTb3VyY2VEYXRhUmVzdWx0KQot
ICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrID0gc3RkOjptYWtlX3VuaXF1ZTxSdWxlU291
cmNlRGF0YUxpc3Q+KCk7Ci0gICAgbV9ydWxlU291cmNlRGF0YVJlc3VsdCA9IHJ1bGVTb3VyY2VE
YXRhUmVzdWx0OwotCi0gICAgbV9sb2dFcnJvcnMgPSBsb2dFcnJvcnMgJiYgc2hlZXQtPnNpbmds
ZU93bmVyRG9jdW1lbnQoKSAmJiAhc2hlZXQtPmJhc2VVUkwoKS5pc0VtcHR5KCkgJiYgc2hlZXQt
PnNpbmdsZU93bmVyRG9jdW1lbnQoKS0+cGFnZSgpOwotICAgIG1faWdub3JlRXJyb3JzSW5EZWNs
YXJhdGlvbiA9IGZhbHNlOwotICAgIG1fc2hlZXRTdGFydExpbmVOdW1iZXIgPSB0ZXh0UG9zaXRp
b24ubV9saW5lLnplcm9CYXNlZEludCgpOwotICAgIG1fc2hlZXRTdGFydENvbHVtbk51bWJlciA9
IHRleHRQb3NpdGlvbi5tX2NvbHVtbi56ZXJvQmFzZWRJbnQoKTsKLSAgICBtX2xpbmVOdW1iZXIg
PSBtX3NoZWV0U3RhcnRMaW5lTnVtYmVyOwotICAgIG1fY29sdW1uT2Zmc2V0Rm9yTGluZSA9IDA7
Ci0gICAgc2V0dXBQYXJzZXIoIiIsIHN0cmluZywgIiIpOwotICAgIGNzc3l5cGFyc2UodGhpcyk7
Ci0gICAgc2hlZXQtPnNocmlua1RvRml0KCk7Ci0gICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay5y
ZXNldCgpOwotICAgIG1fcnVsZVNvdXJjZURhdGFSZXN1bHQgPSBudWxscHRyOwotICAgIG1fcnVs
ZSA9IG51bGxwdHI7Ci0gICAgbV9pZ25vcmVFcnJvcnNJbkRlY2xhcmF0aW9uID0gZmFsc2U7Ci0g
ICAgbV9sb2dFcnJvcnMgPSBmYWxzZTsKLX0KLQotUmVmUHRyPFN0eWxlUnVsZUJhc2U+IENTU1Bh
cnNlcjo6cGFyc2VSdWxlKFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQsIGNvbnN0IFN0cmluZyYg
c3RyaW5nKQotewotICAgIHNldFN0eWxlU2hlZXQoc2hlZXQpOwotICAgIG1fYWxsb3dOYW1lc3Bh
Y2VEZWNsYXJhdGlvbnMgPSBmYWxzZTsKLSAgICBzZXR1cFBhcnNlcigiQC13ZWJraXQtcnVsZXsi
LCBzdHJpbmcsICJ9ICIpOwotICAgIGNzc3l5cGFyc2UodGhpcyk7Ci0gICAgcmV0dXJuIG1fcnVs
ZTsKLX0KLQotUmVmUHRyPFN0eWxlS2V5ZnJhbWU+IENTU1BhcnNlcjo6cGFyc2VLZXlmcmFtZVJ1
bGUoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0g
ICAgc2V0U3R5bGVTaGVldChzaGVldCk7Ci0gICAgc2V0dXBQYXJzZXIoIkAtd2Via2l0LWtleWZy
YW1lLXJ1bGV7ICIsIHN0cmluZywgIn0gIik7Ci0gICAgY3NzeXlwYXJzZSh0aGlzKTsKLSAgICBy
ZXR1cm4gbV9rZXlmcmFtZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlU3VwcG9ydHNDb25k
aXRpb24oY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgbV9zdXBwb3J0c0NvbmRpdGlvbiA9
IGZhbHNlOwotICAgIC8vIGNhbid0IHVzZSB7IGJlY2F1c2UgdG9rZW5pemVyIHN0YXRlIHN3aXRj
aGVzIGZyb20gc3VwcG9ydHMgdG8gaW5pdGlhbCBzdGF0ZSB3aGVuIGl0IHNlZXMgeyB0b2tlbi4K
LSAgICAvLyBpbnN0ZWFkIGluc2VydCBvbmUgIiAiICh3aGljaCBpcyBXSElURVNQQUNFIGluIENT
U0dyYW1tYXIueSkKLSAgICBzZXR1cFBhcnNlcigiQC13ZWJraXQtc3VwcG9ydHMtY29uZGl0aW9u
ICIsIHN0cmluZywgIn0gIik7Ci0gICAgY3NzeXlwYXJzZSh0aGlzKTsKLSAgICByZXR1cm4gbV9z
dXBwb3J0c0NvbmRpdGlvbjsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzQ29sb3JQcm9wZXJ0
eUlEKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCkKLXsKLSAgICBzd2l0Y2ggKHByb3BlcnR5SWQp
IHsKLSAgICBjYXNlIENTU1Byb3BlcnR5Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3I6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9y
ZGVyUmlnaHRDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3I6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExp
bmVUaHJvdWdoQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVybGluZUNvbG9yOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJvcmRlckFmdGVyQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJv
cmRlckJlZm9yZUNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJFbmRDb2xv
cjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyU3RhcnRDb2xvcjoKLSAgICBjYXNl
IENTU1Byb3BlcnR5Q29sdW1uUnVsZUNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
ZXh0RGVjb3JhdGlvbkNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFz
aXNDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvcjoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yOgotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29s
IENTU1BhcnNlcjo6aXNWYWxpZFN5c3RlbUNvbG9yVmFsdWUoQ1NTVmFsdWVJRCB2YWx1ZUlEKQot
ewotICAgIHJldHVybiB2YWx1ZUlEID49IENTU1ZhbHVlQXF1YSAmJiB2YWx1ZUlEIDw9IENTU1Zh
bHVlQXBwbGVTeXN0ZW1ZZWxsb3c7Ci19Ci0KLXN0YXRpYyBib29sIHZhbGlkUHJpbWl0aXZlVmFs
dWVDb2xvcihDU1NWYWx1ZUlEIHZhbHVlSUQsIGJvb2wgc3RyaWN0ID0gZmFsc2UpCi17Ci0gICAg
cmV0dXJuICh2YWx1ZUlEID09IENTU1ZhbHVlV2Via2l0VGV4dCB8fCB2YWx1ZUlEID09IENTU1Zh
bHVlQ3VycmVudGNvbG9yIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVNZW51Ci0gICAgICAgIHx8IENT
U1BhcnNlcjo6aXNWYWxpZFN5c3RlbUNvbG9yVmFsdWUodmFsdWVJRCkgfHwgdmFsdWVJRCA9PSBD
U1NWYWx1ZUFscGhhCi0gICAgICAgIHx8ICh2YWx1ZUlEID49IENTU1ZhbHVlV2Via2l0Rm9jdXNS
aW5nQ29sb3IgJiYgdmFsdWVJRCA8IENTU1ZhbHVlV2Via2l0VGV4dCAmJiAhc3RyaWN0KSk7Ci19
Ci0KLXN0YXRpYyBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0IHBhcnNlQ29sb3JWYWx1ZShNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzJiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLCBj
b25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNlck1vZGUgY3NzUGFy
c2VyTW9kZSkKLXsKLSAgICBBU1NFUlQoIXN0cmluZy5pc0VtcHR5KCkpOwotICAgIGJvb2wgc3Ry
aWN0ID0gaXNTdHJpY3RQYXJzZXJNb2RlKGNzc1BhcnNlck1vZGUpOwotICAgIGlmICghaXNDb2xv
clByb3BlcnR5SUQocHJvcGVydHlJZCkpCi0gICAgICAgIHJldHVybiBDU1NQYXJzZXI6OlBhcnNl
UmVzdWx0OjpFcnJvcjsKLQotICAgIENTU1BhcnNlclN0cmluZyBjc3NTdHJpbmc7Ci0gICAgY3Nz
U3RyaW5nLmluaXQoc3RyaW5nKTsKLSAgICBDU1NWYWx1ZUlEIHZhbHVlSUQgPSBjc3NWYWx1ZUtl
eXdvcmRJRChjc3NTdHJpbmcpOwotICAgIGlmICh2YWxpZFByaW1pdGl2ZVZhbHVlQ29sb3IodmFs
dWVJRCwgc3RyaWN0KSkgewotICAgICAgICBhdXRvIHZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVJRCk7Ci0gICAgICAgIHJldHVybiBk
ZWNsYXJhdGlvbi5hZGRQYXJzZWRQcm9wZXJ0eShDU1NQcm9wZXJ0eShwcm9wZXJ0eUlkLCBXVEZN
b3ZlKHZhbHVlKSwgaW1wb3J0YW50KSkgPyBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpDaGFuZ2Vk
IDogQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6VW5jaGFuZ2VkOwotICAgIH0KLSAgICBSR0JBMzIg
Y29sb3I7Ci0gICAgaWYgKCFDU1NQYXJzZXI6OmZhc3RQYXJzZUNvbG9yKGNvbG9yLCBzdHJpbmcs
IHN0cmljdCAmJiBzdHJpbmdbMF0gIT0gJyMnKSkKLSAgICAgICAgcmV0dXJuIENTU1BhcnNlcjo6
UGFyc2VSZXN1bHQ6OkVycm9yOwotCi0gICAgYXV0byB2YWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlQ29sb3JWYWx1ZShjb2xvcik7Ci0gICAgcmV0dXJuIGRlY2xhcmF0aW9u
LmFkZFBhcnNlZFByb3BlcnR5KENTU1Byb3BlcnR5KHByb3BlcnR5SWQsIFdURk1vdmUodmFsdWUp
LCBpbXBvcnRhbnQpKSA/IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkNoYW5nZWQgOiBDU1NQYXJz
ZXI6OlBhcnNlUmVzdWx0OjpVbmNoYW5nZWQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1Np
bXBsZUxlbmd0aFByb3BlcnR5SUQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLCBib29sJiBhY2Nl
cHRzTmVnYXRpdmVOdW1iZXJzKQotewotICAgIHN3aXRjaCAocHJvcGVydHlJZCkgewotICAgIGNh
c2UgQ1NTUHJvcGVydHlGb250U2l6ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5SGVpZ2h0OgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5TWluSGVpZ2h0Ogot
ICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5XaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGlu
Z0JvdHRvbToKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ0xlZnQ6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVBhZGRpbmdSaWdodDoKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ1RvcDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TG9naWNhbFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRMb2dpY2FsSGVpZ2h0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNaW5Mb2dp
Y2FsV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1pbkxvZ2ljYWxIZWlnaHQ6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdBZnRlcjoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0UGFkZGluZ0JlZm9yZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGlu
Z0VuZDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ1N0YXJ0OgotI2lmIEVOQUJM
RShDU1NfR1JJRF9MQVlPVVQpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUdyaWRDb2x1bW5HYXA6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUdyaWRSb3dHYXA6Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1NI
QVBFUykKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVNYXJnaW46Ci0jZW5kaWYKLSAg
ICAgICAgYWNjZXB0c05lZ2F0aXZlTnVtYmVycyA9IGZhbHNlOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm90dG9tOgotICAgIGNhc2UgQ1NTUHJvcGVydHlDeDoK
LSAgICBjYXNlIENTU1Byb3BlcnR5Q3k6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUxlZnQ6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbToKLSAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2lu
TGVmdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luUmlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eU1hcmdpblRvcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5UjoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5Ung6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVJ5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlSaWdo
dDoKLSAgICBjYXNlIENTU1Byb3BlcnR5VG9wOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXJnaW5BZnRlcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQmVmb3JlOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5FbmQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdE1hcmdpblN0YXJ0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlYOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlZOgotICAgICAgICBhY2NlcHRzTmVnYXRpdmVOdW1iZXJzID0gdHJ1ZTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIGJv
b2wgcGFyc2VTaW1wbGVMZW5ndGgoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5z
aWduZWQmIGxlbmd0aCwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyYgdW5pdCwgZG91Ymxl
JiBudW1iZXIpCi17Ci0gICAgaWYgKGxlbmd0aCA+IDIgJiYgKGNoYXJhY3RlcnNbbGVuZ3RoIC0g
Ml0gfCAweDIwKSA9PSAncCcgJiYgKGNoYXJhY3RlcnNbbGVuZ3RoIC0gMV0gfCAweDIwKSA9PSAn
eCcpIHsKLSAgICAgICAgbGVuZ3RoIC09IDI7Ci0gICAgICAgIHVuaXQgPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BYOwotICAgIH0gZWxzZSBpZiAobGVuZ3RoID4gMSAmJiBjaGFyYWN0ZXJzW2xl
bmd0aCAtIDFdID09ICclJykgewotICAgICAgICBsZW5ndGggLT0gMTsKLSAgICAgICAgdW5pdCA9
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRTsKLSAgICB9Ci0KLSAgICAvLyBXZSBy
ZWx5IG9uIGNoYXJhY3RlcnNUb0RvdWJsZSBmb3IgdmFsaWRhdGlvbiBhcyB3ZWxsLiBUaGUgZnVu
Y3Rpb24KLSAgICAvLyB3aWxsIHNldCAib2siIHRvICJmYWxzZSIgaWYgdGhlIGVudGlyZSBwYXNz
ZWQtaW4gY2hhcmFjdGVyIHJhbmdlIGRvZXMKLSAgICAvLyBub3QgcmVwcmVzZW50IGEgZG91Ymxl
LgotICAgIGJvb2wgb2s7Ci0gICAgbnVtYmVyID0gY2hhcmFjdGVyc1RvRG91YmxlKGNoYXJhY3Rl
cnMsIGxlbmd0aCwgJm9rKTsKLSAgICByZXR1cm4gb2s7Ci19Ci0KLXN0YXRpYyBDU1NQYXJzZXI6
OlBhcnNlUmVzdWx0IHBhcnNlU2ltcGxlTGVuZ3RoVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGll
cyYgZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiBz
dHJpbmcsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCi17Ci0g
ICAgQVNTRVJUKCFzdHJpbmcuaXNFbXB0eSgpKTsKLSAgICBib29sIGFjY2VwdHNOZWdhdGl2ZU51
bWJlcnM7Ci0gICAgaWYgKCFpc1NpbXBsZUxlbmd0aFByb3BlcnR5SUQocHJvcGVydHlJZCwgYWNj
ZXB0c05lZ2F0aXZlTnVtYmVycykpCi0gICAgICAgIHJldHVybiBDU1NQYXJzZXI6OlBhcnNlUmVz
dWx0OjpFcnJvcjsKLQotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAg
ICBkb3VibGUgbnVtYmVyOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdW5pdCA9
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSOwotCi0gICAgaWYgKHN0cmluZy5pczhCaXQo
KSkgewotICAgICAgICBpZiAoIXBhcnNlU2ltcGxlTGVuZ3RoKHN0cmluZy5jaGFyYWN0ZXJzOCgp
LCBsZW5ndGgsIHVuaXQsIG51bWJlcikpCi0gICAgICAgICAgICByZXR1cm4gQ1NTUGFyc2VyOjpQ
YXJzZVJlc3VsdDo6RXJyb3I7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFwYXJzZVNpbXBs
ZUxlbmd0aChzdHJpbmcuY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgdW5pdCwgbnVtYmVyKSkKLSAg
ICAgICAgICAgIHJldHVybiBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcjsKLSAgICB9Ci0K
LSAgICBpZiAodW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikgewotICAgICAg
ICBpZiAobnVtYmVyICYmIGlzU3RyaWN0UGFyc2VyTW9kZShjc3NQYXJzZXJNb2RlKSkKLSAgICAg
ICAgICAgIHJldHVybiBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcjsKLSAgICAgICAgdW5p
dCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFg7Ci0gICAgfQotICAgIGlmIChudW1iZXIgPCAw
ICYmICFhY2NlcHRzTmVnYXRpdmVOdW1iZXJzKQotICAgICAgICByZXR1cm4gQ1NTUGFyc2VyOjpQ
YXJzZVJlc3VsdDo6RXJyb3I7Ci0gICAgaWYgKHN0ZDo6aXNpbmYobnVtYmVyKSkKLSAgICAgICAg
cmV0dXJuIENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkVycm9yOwotCi0gICAgYXV0byB2YWx1ZSA9
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUobnVtYmVyLCB1bml0KTsKLSAg
ICByZXR1cm4gZGVjbGFyYXRpb24uYWRkUGFyc2VkUHJvcGVydHkoQ1NTUHJvcGVydHkocHJvcGVy
dHlJZCwgV1RGTW92ZSh2YWx1ZSksIGltcG9ydGFudCkpID8gQ1NTUGFyc2VyOjpQYXJzZVJlc3Vs
dDo6Q2hhbmdlZCA6IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OlVuY2hhbmdlZDsKLX0KLQotc3Rh
dGljIGlubGluZSBib29sIGlzVmFsaWRLZXl3b3JkUHJvcGVydHlBbmRWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SWQsIGludCB2YWx1ZUlELCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBwYXJz
ZXJDb250ZXh0LCBTdHlsZVNoZWV0Q29udGVudHMqIHN0eWxlU2hlZXRDb250ZW50cykKLXsKLSAg
ICBpZiAoIXZhbHVlSUQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRjaCAocHJv
cGVydHlJZCkgewotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJDb2xsYXBzZTogLy8gY29sbGFw
c2UgfCBzZXBhcmF0ZSB8IGluaGVyaXQKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVD
b2xsYXBzZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlU2VwYXJhdGUpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcFN0
eWxlOiAvLyA8Ym9yZGVyLXN0eWxlPiB8IGluaGVyaXQKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9y
ZGVyUmlnaHRTdHlsZTogLy8gRGVmaW5lZCBhczogbm9uZSB8IGhpZGRlbiB8IGRvdHRlZCB8IGRh
c2hlZCB8Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVN0eWxlOiAvLyBzb2xpZCB8
IGRvdWJsZSB8IGdyb292ZSB8IHJpZGdlIHwgaW5zZXQgfCBvdXRzZXQKLSAgICBjYXNlIENTU1By
b3BlcnR5Qm9yZGVyTGVmdFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJB
ZnRlclN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCZWZvcmVTdHlsZToK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRW5kU3R5bGU6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEJvcmRlclN0YXJ0U3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbHVt
blJ1bGVTdHlsZToKLSAgICAgICAgaWYgKHZhbHVlSUQgPj0gQ1NTVmFsdWVOb25lICYmIHZhbHVl
SUQgPD0gQ1NTVmFsdWVEb3VibGUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJveFNpemluZzoKLSAgICAgICAgIGlmICh2YWx1
ZUlEID09IENTU1ZhbHVlQm9yZGVyQm94IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVDb250ZW50Qm94
KQotICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eUNhcHRpb25TaWRlOiAvLyB0b3AgfCBib3R0b20gfCBsZWZ0IHwgcmlnaHQgfCBp
bmhlcml0Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTGVmdCB8fCB2YWx1ZUlEID09
IENTU1ZhbHVlUmlnaHQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVRvcCB8fCB2YWx1ZUlEID09IENT
U1ZhbHVlQm90dG9tKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ1NTUHJvcGVydHlDbGVhcjogLy8gbm9uZSB8IGxlZnQgfCByaWdodCB8IGJvdGgg
fCBpbmhlcml0Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZUlE
ID09IENTU1ZhbHVlTGVmdCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlUmlnaHQgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZUJvdGgpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eURpcmVjdGlvbjogLy8gbHRyIHwgcnRsIHwgaW5oZXJpdAot
ICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUx0ciB8fCB2YWx1ZUlEID09IENTU1ZhbHVl
UnRsKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q1NTUHJvcGVydHlEaXNwbGF5OgotICAgICAgICAvLyBpbmxpbmUgfCBibG9jayB8IGxpc3QtaXRl
bSB8IGlubGluZS1ibG9jayB8IHRhYmxlIHwKLSAgICAgICAgLy8gaW5saW5lLXRhYmxlIHwgdGFi
bGUtcm93LWdyb3VwIHwgdGFibGUtaGVhZGVyLWdyb3VwIHwgdGFibGUtZm9vdGVyLWdyb3VwIHwg
dGFibGUtcm93IHwKLSAgICAgICAgLy8gdGFibGUtY29sdW1uLWdyb3VwIHwgdGFibGUtY29sdW1u
IHwgdGFibGUtY2VsbCB8IHRhYmxlLWNhcHRpb24gfCAtd2Via2l0LWJveCB8IC13ZWJraXQtaW5s
aW5lLWJveCB8IG5vbmUgfCBpbmhlcml0Ci0gICAgICAgIC8vIGZsZXggfCAtd2Via2l0LWZsZXgg
fCBpbmxpbmUtZmxleCB8IC13ZWJraXQtaW5saW5lLWZsZXggfCBncmlkIHwgaW5saW5lLWdyaWQg
fCBjb250ZW50cwotICAgICAgICBpZiAoKHZhbHVlSUQgPj0gQ1NTVmFsdWVJbmxpbmUgJiYgdmFs
dWVJRCA8PSBDU1NWYWx1ZUNvbnRlbnRzKSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCi0gICAg
ICAgIGlmIChwYXJzZXJDb250ZXh0LmNzc0dyaWRMYXlvdXRFbmFibGVkICYmICh2YWx1ZUlEID09
IENTU1ZhbHVlR3JpZCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlSW5saW5lR3JpZCkpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NT
UHJvcGVydHlFbXB0eUNlbGxzOiAvLyBzaG93IHwgaGlkZSB8IGluaGVyaXQKLSAgICAgICAgaWYg
KHZhbHVlSUQgPT0gQ1NTVmFsdWVTaG93IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVIaWRlKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVy
dHlGbG9hdDogLy8gbGVmdCB8IHJpZ2h0IHwgbm9uZSB8IGNlbnRlciAoZm9yIGJ1Z2d5IENTUywg
bWFwcyB0byBub25lKQotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUxlZnQgfHwgdmFs
dWVJRCA9PSBDU1NWYWx1ZVJpZ2h0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVOb25lIHx8IHZhbHVl
SUQgPT0gQ1NTVmFsdWVDZW50ZXIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHlsZTogLy8gbm9ybWFsIHwgaXRhbGlj
IHwgb2JsaXF1ZSB8IGluaGVyaXQKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3Jt
YWwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUl0YWxpYyB8fCB2YWx1ZUlEID09IENTU1ZhbHVlT2Js
aXF1ZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1Byb3BlcnR5SW1hZ2VSZW5kZXJpbmc6IC8vIGF1dG8gfCBvcHRpbWl6ZVNwZWVkIHwgb3B0
aW1pemVRdWFsaXR5IHwgLXdlYmtpdC1jcmlzcC1lZGdlcyB8IC13ZWJraXQtb3B0aW1pemUtY29u
dHJhc3QgfCBjcmlzcC1lZGdlcyB8IHBpeGVsYXRlZAotICAgICAgICAvLyBvcHRpbWl6ZVNwZWVk
IGFuZCBvcHRpbWl6ZVF1YWxpdHkgYXJlIGRlcHJlY2F0ZWQ7IGEgdXNlciBhZ2VudCBtdXN0IGFj
Y2VwdCB0aGVtIGFzIHZhbGlkIHZhbHVlcyBidXQgbXVzdCB0cmVhdCB0aGVtIGFzIGhhdmluZyB0
aGUgc2FtZSBiZWhhdmlvciBhcyBwaXhlbGF0ZWQgYW5kIGF1dG8gcmVzcGVjdGl2ZWx5LgotICAg
ICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU9w
dGltaXplc3BlZWQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU9wdGltaXplcXVhbGl0eQotICAgICAg
ICAgICAgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVdlYmtpdENyaXNwRWRnZXMgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZVdlYmtpdE9wdGltaXplQ29udHJhc3QgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUNy
aXNwRWRnZXMgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVBpeGVsYXRlZCkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxl
UG9zaXRpb246IC8vIGluc2lkZSB8IG91dHNpZGUgfCBpbmhlcml0Ci0gICAgICAgIGlmICh2YWx1
ZUlEID09IENTU1ZhbHVlSW5zaWRlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVPdXRzaWRlKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVy
dHlMaXN0U3R5bGVUeXBlOgotICAgICAgICAvLyBTZWUgc2VjdGlvbiBDU1NfUFJPUF9MSVNUX1NU
WUxFX1RZUEUgb2YgZmlsZSBDU1NWYWx1ZUtleXdvcmRzLmluCi0gICAgICAgIC8vIGZvciB0aGUg
bGlzdCBvZiBzdXBwb3J0ZWQgbGlzdC1zdHlsZS10eXBlcy4KLSAgICAgICAgaWYgKCh2YWx1ZUlE
ID49IENTU1ZhbHVlRGlzYyAmJiB2YWx1ZUlEIDw9IENTU1ZhbHVlS2F0YWthbmFJcm9oYSkgfHwg
dmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU9iamVjdEZpdDoKLSAgICAgICAgaWYgKHZh
bHVlSUQgPT0gQ1NTVmFsdWVGaWxsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVDb250YWluIHx8IHZh
bHVlSUQgPT0gQ1NTVmFsdWVDb3ZlciB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1
ZUlEID09IENTU1ZhbHVlU2NhbGVEb3duKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lU3R5bGU6IC8vICg8Ym9yZGVy
LXN0eWxlPiBleGNlcHQgaGlkZGVuKSB8IGF1dG8gfCBpbmhlcml0Ci0gICAgICAgIGlmICh2YWx1
ZUlEID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSB8fCAodmFsdWVJ
RCA+PSBDU1NWYWx1ZUluc2V0ICYmIHZhbHVlSUQgPD0gQ1NTVmFsdWVEb3VibGUpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlP
dmVyZmxvd1dyYXA6IC8vIG5vcm1hbCB8IGJyZWFrLXdvcmQKLSAgICBjYXNlIENTU1Byb3BlcnR5
V29yZFdyYXA6Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTm9ybWFsIHx8IHZhbHVl
SUQgPT0gQ1NTVmFsdWVCcmVha1dvcmQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgYnJlYWs7Ci0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBjYXNlIENTU1Byb3BlcnR5
VG91Y2hBY3Rpb246IC8vIGF1dG8gfCBtYW5pcHVsYXRpb24KLSAgICAgICAgaWYgKHZhbHVlSUQg
PT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVNYW5pcHVsYXRpb24pCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSNpZiBFTkFCTEUo
Q1NTX1NDUk9MTF9TTkFQKQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTY3JvbGxTbmFwVHlw
ZTogLy8gbm9uZSB8IG1hbmRhdG9yeSB8IHByb3hpbWl0eQotICAgICAgICBpZiAodmFsdWVJRCA9
PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU1hbmRhdG9yeSB8fCB2YWx1ZUlE
ID09IENTU1ZhbHVlUHJveGltaXR5KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eU92ZXJmbG93WDogLy8gdmlzaWJs
ZSB8IGhpZGRlbiB8IHNjcm9sbCB8IGF1dG8gIHwgb3ZlcmxheSB8IGluaGVyaXQKLSAgICAgICAg
aWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVWaXNpYmxlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVIaWRk
ZW4gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNjcm9sbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXV0
byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlT3ZlcmxheSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5T3ZlcmZsb3dZOiAvLyB2aXNp
YmxlIHwgaGlkZGVuIHwgc2Nyb2xsIHwgYXV0byB8IG92ZXJsYXkgfCBpbmhlcml0IHwgLXdlYmtp
dC1wYWdlZC14IHwgLXdlYmtpdC1wYWdlZC15Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1Zh
bHVlVmlzaWJsZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlSGlkZGVuIHx8IHZhbHVlSUQgPT0gQ1NT
VmFsdWVTY3JvbGwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NW
YWx1ZU92ZXJsYXkgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVdlYmtpdFBhZ2VkWCB8fCB2YWx1ZUlE
ID09IENTU1ZhbHVlV2Via2l0UGFnZWRZKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtBZnRlcjogLy8gYXV0byB8
IGFsd2F5cyB8IGF2b2lkIHwgbGVmdCB8IHJpZ2h0IHwgaW5oZXJpdAotICAgIGNhc2UgQ1NTUHJv
cGVydHlQYWdlQnJlYWtCZWZvcmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJy
ZWFrQWZ0ZXI6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFrQmVmb3JlOgot
ICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZUFsd2F5cyB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXZvaWQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZUxlZnQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVJpZ2h0KQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtJbnNpZGU6
IC8vIGF2b2lkIHwgYXV0byB8IGluaGVyaXQKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29s
dW1uQnJlYWtJbnNpZGU6Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlQXV0byB8fCB2
YWx1ZUlEID09IENTU1ZhbHVlQXZvaWQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBvaW50ZXJFdmVudHM6Ci0gICAgICAgIC8v
IG5vbmUgfCB2aXNpYmxlUGFpbnRlZCB8IHZpc2libGVGaWxsIHwgdmlzaWJsZVN0cm9rZSB8IHZp
c2libGUgfAotICAgICAgICAvLyBwYWludGVkIHwgZmlsbCB8IHN0cm9rZSB8IGF1dG8gfCBhbGwg
fCBpbmhlcml0Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlVmlzaWJsZSB8fCB2YWx1
ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQWxsIHx8IHZhbHVlSUQg
PT0gQ1NTVmFsdWVBdXRvIHx8ICh2YWx1ZUlEID49IENTU1ZhbHVlVmlzaWJsZXBhaW50ZWQgJiYg
dmFsdWVJRCA8PSBDU1NWYWx1ZVN0cm9rZSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBvc2l0aW9uOiAvLyBzdGF0aWMgfCBy
ZWxhdGl2ZSB8IGFic29sdXRlIHwgZml4ZWQgfCBzdGlja3kgfCBpbmhlcml0Ci0gICAgICAgIGlm
ICh2YWx1ZUlEID09IENTU1ZhbHVlU3RhdGljIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVSZWxhdGl2
ZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQWJzb2x1dGUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUZp
eGVkIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVXZWJraXRTdGlja3kpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVJlc2l6ZTogLy8g
bm9uZSB8IGJvdGggfCBob3Jpem9udGFsIHwgdmVydGljYWwgfCBhdXRvCi0gICAgICAgIGlmICh2
YWx1ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQm90aCB8fCB2YWx1
ZUlEID09IENTU1ZhbHVlSG9yaXpvbnRhbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlVmVydGljYWwg
fHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVNwZWFrOiAvLyBub25lIHwgbm9ybWFs
IHwgc3BlbGwtb3V0IHwgZGlnaXRzIHwgbGl0ZXJhbC1wdW5jdHVhdGlvbiB8IG5vLXB1bmN0dWF0
aW9uIHwgaW5oZXJpdAotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFs
dWVJRCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlU3BlbGxPdXQgfHwg
dmFsdWVJRCA9PSBDU1NWYWx1ZURpZ2l0cyB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTGl0ZXJhbFB1
bmN0dWF0aW9uIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVOb1B1bmN0dWF0aW9uKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlUYWJs
ZUxheW91dDogLy8gYXV0byB8IGZpeGVkIHwgaW5oZXJpdAotICAgICAgICBpZiAodmFsdWVJRCA9
PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUZpeGVkKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0TGlu
ZVRocm91Z2hNb2RlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmVNb2RlOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lTW9kZToKLSAgICAgICAgaWYgKHZhbHVlSUQg
PT0gQ1NTVmFsdWVDb250aW51b3VzIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVTa2lwV2hpdGVTcGFj
ZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENT
U1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRP
dmVybGluZVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lU3R5bGU6Ci0g
ICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVl
U29saWQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZURvdWJsZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVl
RGFzaGVkIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVEb3REYXNoIHx8IHZhbHVlSUQgPT0gQ1NTVmFs
dWVEb3REb3REYXNoIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVXYXZlKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmZs
b3c6IC8vIGNsaXAgfCBlbGxpcHNpcwotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUNs
aXAgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUVsbGlwc2lzKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0UmVuZGVyaW5nOiAv
LyBhdXRvIHwgb3B0aW1pemVTcGVlZCB8IG9wdGltaXplTGVnaWJpbGl0eSB8IGdlb21ldHJpY1By
ZWNpc2lvbgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZU9wdGltaXplc3BlZWQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU9wdGltaXplbGVn
aWJpbGl0eSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlR2VvbWV0cmljcHJlY2lzaW9uKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlU
ZXh0VHJhbnNmb3JtOiAvLyBjYXBpdGFsaXplIHwgdXBwZXJjYXNlIHwgbG93ZXJjYXNlIHwgbm9u
ZSB8IGluaGVyaXQKLSAgICAgICAgaWYgKCh2YWx1ZUlEID49IENTU1ZhbHVlQ2FwaXRhbGl6ZSAm
JiB2YWx1ZUlEIDw9IENTU1ZhbHVlTG93ZXJjYXNlKSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTm9u
ZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENT
U1Byb3BlcnR5VmlzaWJpbGl0eTogLy8gdmlzaWJsZSB8IGhpZGRlbiB8IGNvbGxhcHNlIHwgaW5o
ZXJpdAotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZVZpc2libGUgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZUhpZGRlbiB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQ29sbGFwc2UpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEFwcGVhcmFuY2U6Ci0gICAgICAgIGlmICgodmFsdWVJRCA+PSBDU1NWYWx1ZUNoZWNrYm94
ICYmIHZhbHVlSUQgPD0gQ1NTVmFsdWVDYXBzTG9ja0luZGljYXRvcikgfHwgdmFsdWVJRCA9PSBD
U1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eToKLSAgICAgICAgaWYg
KHZhbHVlSUQgPT0gQ1NTVmFsdWVWaXNpYmxlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVIaWRkZW4p
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKENT
U19DT01QT1NJVElORykKLSAgICBjYXNlIENTU1Byb3BlcnR5TWl4QmxlbmRNb2RlOgotICAgICAg
ICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTXVs
dGlwbHkgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNjcmVlbgotICAgICAgICAgICAgfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZU92ZXJsYXkgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZURhcmtlbiB8fCB2YWx1
ZUlEID09IENTU1ZhbHVlTGlnaHRlbiB8fCAgdmFsdWVJRCA9PSBDU1NWYWx1ZUNvbG9yRG9kZ2UK
LSAgICAgICAgICAgIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVDb2xvckJ1cm4gfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZUhhcmRMaWdodCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlU29mdExpZ2h0IHx8IHZh
bHVlSUQgPT0gQ1NTVmFsdWVEaWZmZXJlbmNlCi0gICAgICAgICAgICB8fCB2YWx1ZUlEID09IENT
U1ZhbHVlRXhjbHVzaW9uIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVQbHVzRGFya2VyIHx8IHZhbHVl
SUQgPT0gQ1NTVmFsdWVQbHVzTGlnaHRlcikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5SXNvbGF0aW9uOgotICAgICAgICBpZiAo
dmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUlzb2xhdGUpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRml0OgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NW
YWx1ZUJvcmRlciB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTGluZXMpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveEFs
aWduOgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZVN0cmV0Y2ggfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZVN0YXJ0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVFbmQgfHwgdmFsdWVJRCA9PSBD
U1NWYWx1ZUNlbnRlciB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQmFzZWxpbmUpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKENTU19CT1hfREVDT1JB
VElPTl9CUkVBSykKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94RGVjb3JhdGlvbkJyZWFr
OgotICAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVDbG9uZSB8fCB2YWx1ZUlEID09IENT
U1ZhbHVlU2xpY2UpCi0gICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICBicmVhazsK
LSNlbmRpZgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hEaXJlY3Rpb246Ci0gICAgICAg
IGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTm9ybWFsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVSZXZl
cnNlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRCb3hMaW5lczoKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFs
dWVTaW5nbGUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU11bHRpcGxlKQotICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Qm94T3JpZW50OgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUhvcml6b250YWwgfHwg
dmFsdWVJRCA9PSBDU1NWYWx1ZVZlcnRpY2FsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVJbmxpbmVB
eGlzIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVCbG9ja0F4aXMpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFBhY2s6
Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlU3RhcnQgfHwgdmFsdWVJRCA9PSBDU1NW
YWx1ZUVuZCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQ2VudGVyIHx8IHZhbHVlSUQgPT0gQ1NTVmFs
dWVKdXN0aWZ5KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5GaWxsOgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NW
YWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUJhbGFuY2UpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZsZXhEaXJlY3Rp
b246Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlUm93IHx8IHZhbHVlSUQgPT0gQ1NT
VmFsdWVSb3dSZXZlcnNlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVDb2x1bW4gfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZUNvbHVtblJldmVyc2UpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZsZXhXcmFwOgotICAgICAgICBpZiAodmFs
dWVJRCA9PSBDU1NWYWx1ZU5vd3JhcCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlV3JhcCB8fCB2YWx1
ZUlEID09IENTU1ZhbHVlV3JhcFJldmVyc2UpCi0gICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250S2VybmluZzoKLSAg
ICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVO
b3JtYWwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTbW9vdGhp
bmc6Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZUlEID09IENT
U1ZhbHVlTm9uZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQW50aWFsaWFzZWQgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZVN1YnBpeGVsQW50aWFsaWFzZWQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbnM6Ci0gICAg
ICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlTWFu
dWFsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQWxpZ246Ci0g
ICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVl
RWRnZXMpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVCcmVhazogLy8gYXV0byB8IGxvb3NlIHwgbm9ybWFsIHwg
c3RyaWN0IHwgYWZ0ZXItd2hpdGUtc3BhY2UKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFs
dWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVMb29zZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVl
Tm9ybWFsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVTdHJpY3QgfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZUFmdGVyV2hpdGVTcGFjZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZVNuYXA6Ci0gICAgICAgIGlmICh2YWx1
ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQmFzZWxpbmUgfHwgdmFs
dWVJRCA9PSBDU1NWYWx1ZUNvbnRhaW4pCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkFmdGVyQ29sbGFwc2U6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJlZm9yZUNvbGxhcHNlOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5Cb3R0b21Db2xsYXBzZToKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFyZ2luVG9wQ29sbGFwc2U6Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENT
U1ZhbHVlQ29sbGFwc2UgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNlcGFyYXRlIHx8IHZhbHVlSUQg
PT0gQ1NTVmFsdWVEaXNjYXJkKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlRGlyZWN0aW9uOgotICAgICAg
ICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUZvcndhcmRzIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVC
YWNrd2FyZHMgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUFoZWFkIHx8IHZhbHVlSUQgPT0gQ1NTVmFs
dWVSZXZlcnNlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVMZWZ0IHx8IHZhbHVlSUQgPT0gQ1NTVmFs
dWVSaWdodCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlRG93bgotICAgICAgICAgICAgfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZVVwIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXJxdWVlU3R5bGU6Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTm9uZSB8fCB2YWx1
ZUlEID09IENTU1ZhbHVlU2xpZGUgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVNjcm9sbCB8fCB2YWx1
ZUlEID09IENTU1ZhbHVlQWx0ZXJuYXRlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXROYnNwTW9kZTogLy8gbm9ybWFs
IHwgc3BhY2UKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZVNwYWNlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF9PVkVSRkxPV19TQ1JPTExJTkcpCi0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOgotICAgICAgICBpZiAodmFsdWVJ
RCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVRvdWNoKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFByaW50Q29sb3JBZGp1c3Q6Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1Zh
bHVlRXhhY3QgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUVjb25vbXkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKENTU19SRUdJT05TKQotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRSZWdpb25CcmVha0FmdGVyOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRSZWdpb25CcmVha0JlZm9yZToKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFs
dWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBbHdheXMgfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZUF2b2lkIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVMZWZ0IHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVS
aWdodCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtJbnNpZGU6Ci0gICAgICAgIGlmICh2YWx1ZUlE
ID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXZvaWQpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFJlZ2lvbkZyYWdtZW50OgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwg
dmFsdWVJRCA9PSBDU1NWYWx1ZUJyZWFrKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJ0bE9yZGVyaW5n
OgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUxvZ2ljYWwgfHwgdmFsdWVJRCA9PSBD
U1NWYWx1ZVZpc3VhbCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsK
LQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRpb246Ci0gICAgICAgIGlmICh2
YWx1ZUlEID09IENTU1ZhbHVlQmVmb3JlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBZnRlciB8fCB2
YWx1ZUlEID09IENTU1ZhbHVlSW50ZXJDaGFyYWN0ZXIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSNpZiBFTkFCTEUoQ1NTM19URVhUKQotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRUZXh0QWxpZ25MYXN0OgotICAgICAgICAvLyBhdXRvIHwgc3RhcnQgfCBl
bmQgfCBsZWZ0IHwgcmlnaHQgfCBjZW50ZXIgfCBqdXN0aWZ5Ci0gICAgICAgIGlmICgodmFsdWVJ
RCA+PSBDU1NWYWx1ZUxlZnQgJiYgdmFsdWVJRCA8PSBDU1NWYWx1ZUp1c3RpZnkpIHx8IHZhbHVl
SUQgPT0gQ1NTVmFsdWVTdGFydCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlRW5kIHx8IHZhbHVlSUQg
PT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFr
OwotI2VuZGlmIC8vIENTUzNfVEVYVAotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0Q29t
YmluZToKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb25lIHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVIb3Jpem9udGFsKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotI2lmIEVOQUJMRShDU1MzX1RFWFQpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRKdXN0aWZ5OgotICAgICAgICAvLyBhdXRvIHwgbm9uZSB8IGludGVyLXdvcmQgfCBkaXN0cmli
dXRlCi0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlSW50ZXJXb3JkIHx8IHZhbHVlSUQg
PT0gQ1NTVmFsdWVEaXN0cmlidXRlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVl
SUQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotI2VuZGlmIC8vIENTUzNfVEVYVAotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0
U2VjdXJpdHk6Ci0gICAgICAgIC8vIGRpc2MgfCBjaXJjbGUgfCBzcXVhcmUgfCBub25lIHwgaW5o
ZXJpdAotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZURpc2MgfHwgdmFsdWVJRCA9PSBD
U1NWYWx1ZUNpcmNsZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlU3F1YXJlIHx8IHZhbHVlSUQgPT0g
Q1NTVmFsdWVOb25lKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwot
I2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRUZXh0U2l6ZUFkanVzdDoKLSAgICAgICAgaWYgKCFwYXJzZXJDb250ZXh0LnRleHRBdXRvc2l6
aW5nRW5hYmxlZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAodmFs
dWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIENTU1By
b3BlcnR5VHJhbnNmb3JtU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9y
bVN0eWxlOgotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUZsYXQgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZVByZXNlcnZlM2QpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJEcmFnOiAvLyBhdXRvIHwgbm9u
ZSB8IGVsZW1lbnQKLSAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVl
SUQgPT0gQ1NTVmFsdWVOb25lIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVFbGVtZW50KQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRVc2VyTW9kaWZ5OiAvLyByZWFkLW9ubHkgfCByZWFkLXdyaXRlCi0gICAgICAgIGlmICh2
YWx1ZUlEID09IENTU1ZhbHVlUmVhZE9ubHkgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVJlYWRXcml0
ZSB8fCB2YWx1ZUlEID09IENTU1ZhbHVlUmVhZFdyaXRlUGxhaW50ZXh0T25seSkgewotICAgICAg
ICAgICAgaWYgKHN0eWxlU2hlZXRDb250ZW50cykKLSAgICAgICAgICAgICAgICBzdHlsZVNoZWV0
Q29udGVudHMtPnBhcnNlclNldFVzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkoKTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRVc2VyU2VsZWN0OiAvLyBhdXRvIHwgbm9uZSB8IHRleHQgfCBhbGwKLSAg
ICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVO
b25lIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVUZXh0KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlQWxsKSB7Ci0gICAgICAgICAgICBpZiAo
c3R5bGVTaGVldENvbnRlbnRzKQotICAgICAgICAgICAgICAgIHN0eWxlU2hlZXRDb250ZW50cy0+
cGFyc2VyU2V0VXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eSgpOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFdyaXRpbmdNb2RlOgotICAgICAgICBpZiAodmFsdWVJRCA+PSBDU1NWYWx1ZUhvcml6b250
YWxUYiAmJiB2YWx1ZUlEIDw9IENTU1ZhbHVlSG9yaXpvbnRhbEJ0KQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXaGl0ZVNwYWNl
OiAvLyBub3JtYWwgfCBwcmUgfCBub3dyYXAgfCBpbmhlcml0Ci0gICAgICAgIGlmICh2YWx1ZUlE
ID09IENTU1ZhbHVlTm9ybWFsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVQcmUgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZVByZVdyYXAgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVByZUxpbmUgfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZU5vd3JhcCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5V29yZEJyZWFrOiAvLyBub3JtYWwgfCBicmVhay1h
bGwgfCBrZWVwLWFsbCB8IGJyZWFrLXdvcmQgKHRoaXMgaXMgYSBjdXN0b20gZXh0ZW5zaW9uKQot
ICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCB2YWx1ZUlEID09IENTU1Zh
bHVlQnJlYWtBbGwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUtlZXBBbGwgfHwgdmFsdWVJRCA9PSBD
U1NWYWx1ZUJyZWFrV29yZCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVh
azsKLSNpZiBFTkFCTEUoQ1NTX1RSQUlMSU5HX1dPUkQpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUFw
cGxlVHJhaWxpbmdXb3JkOiAvLyBhdXRvIHwgLWFwcGxlLXBhcnRpYWxseS1iYWxhbmNlZAotICAg
ICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVdl
YmtpdFBhcnRpYWxseUJhbGFuY2VkKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50UG9zaXRpb246
IC8vIG5vcm1hbCB8IHN1YiB8IHN1cGVyCi0gICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVl
Tm9ybWFsIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVTdWIgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVN1
cGVyKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q1NTUHJvcGVydHlGb250VmFyaWFudENhcHM6IC8vIG5vcm1hbCB8IHNtYWxsLWNhcHMgfCBhbGwt
c21hbGwtY2FwcyB8IHBldGl0ZS1jYXBzIHwgYWxsLXBldGl0ZS1jYXBzIHwgdW5pY2FzZSB8IHRp
dGxpbmctY2FwcwotICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCB2YWx1
ZUlEID09IENTU1ZhbHVlU21hbGxDYXBzIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBbGxTbWFsbENh
cHMgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVBldGl0ZUNhcHMgfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZUFsbFBldGl0ZUNhcHMgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVVuaWNhc2UgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZVRpdGxpbmdDYXBzKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFudEFsdGVybmF0ZXM6IC8vIFdl
IG9ubHkgc3VwcG9ydCB0aGUgbm9ybWFsIGFuZCBoaXN0b3JpY2FsLWZvcm1zIHZhbHVlcy4KLSAg
ICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZUhpc3RvcmljYWxGb3JtcykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIAotICAgIGNhc2UgQ1NTUHJvcGVydHlCcmVha0FmdGVyOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlCcmVha0JlZm9yZToKLSAgICAgICAgLy8gYXV0byB8IGF2b2lkIHwgbGVm
dCB8IHJpZ2h0IHwgcmVjdG8gfCB2ZXJzbyB8IGNvbHVtbiB8IHBhZ2UgfCByZWdpb24gfCBhdm9p
ZC1wYWdlIHwgYXZvaWQtY29sdW1uIHwgYXZvaWQtcmVnaW9uCi0gICAgICAgIGlmICh2YWx1ZUlE
ID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXZvaWQgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZUxlZnQgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVJpZ2h0Ci0gICAgICAgICAgICB8
fCB2YWx1ZUlEID09IENTU1ZhbHVlUmVjdG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVZlcnNvIHx8
IHZhbHVlSUQgPT0gQ1NTVmFsdWVDb2x1bW4gfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZVBhZ2UKLSAg
ICAgICAgICAgIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVSZWdpb24gfHwgdmFsdWVJRCA9PSBDU1NW
YWx1ZUF2b2lkQ29sdW1uIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBdm9pZFBhZ2UgfHwgdmFsdWVJ
RCA9PSBDU1NWYWx1ZUF2b2lkUmVnaW9uKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlCcmVha0luc2lkZToKLSAgICAgICAgLy8g
YXV0byB8IGF2b2lkIHwgYXZvaWQtcGFnZSB8IGF2b2lkLWNvbHVtbiB8IGF2b2lkLXJlZ2lvbgot
ICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVJRCA9PSBDU1NWYWx1
ZUF2b2lkIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBdm9pZENvbHVtbiB8fCB2YWx1ZUlEID09IENT
U1ZhbHVlQXZvaWRQYWdlIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVBdm9pZFJlZ2lvbikKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSNp
ZiAhRU5BQkxFKENTU19HUklEX0xBWU9VVCkKLSAgICBVTlVTRURfUEFSQU0ocGFyc2VyQ29udGV4
dCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBp
c0tleXdvcmRQcm9wZXJ0eUlEKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCkKLXsKLSAgICBzd2l0
Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tU3R5bGU6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckNvbGxhcHNlOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlCb3JkZXJMZWZ0U3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0U3R5bGU6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlCb3hTaXppbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJyZWFrQWZ0ZXI6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eUJyZWFrQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCcmVha0luc2lkZToK
LSAgICBjYXNlIENTU1Byb3BlcnR5Q2FwdGlvblNpZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNs
ZWFyOgotICAgIGNhc2UgQ1NTUHJvcGVydHlEaXJlY3Rpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eURpc3BsYXk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUVtcHR5Q2VsbHM6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUZsb2F0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3R5bGU6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eUltYWdlUmVuZGVyaW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVQ
b3NpdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlVHlwZToKLSAgICBjYXNlIENT
U1Byb3BlcnR5T2JqZWN0Rml0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lU3R5bGU6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eU92ZXJmbG93V3JhcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5T3Zl
cmZsb3dYOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvd1k6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVBhZ2VCcmVha0FmdGVyOgotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtCZWZvcmU6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2VCcmVha0luc2lkZToKLSAgICBjYXNlIENTU1Byb3Bl
cnR5UG9pbnRlckV2ZW50czoKLSAgICBjYXNlIENTU1Byb3BlcnR5UG9zaXRpb246Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVJlc2l6ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5U3BlYWs6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVRhYmxlTGF5b3V0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0TGluZVRo
cm91Z2hNb2RlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0TGluZVRocm91Z2hTdHlsZToKLSAg
ICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJmbG93OgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0
T3ZlcmxpbmVNb2RlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmVTdHlsZToKLSAg
ICBjYXNlIENTU1Byb3BlcnR5VGV4dFJlbmRlcmluZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4
dFRyYW5zZm9ybToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZU1vZGU6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5
VmlzaWJpbGl0eToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QXBwZWFyYW5jZToKLSNpZiBF
TkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQotICAgIGNhc2UgQ1NTUHJvcGVydHlNaXhCbGVuZE1vZGU6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUlzb2xhdGlvbjoKLSNlbmRpZgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRCYWNrZmFjZVZpc2liaWxpdHk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEJvcmRlckFmdGVyU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJlZm9y
ZVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJFbmRTdHlsZToKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRml0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRCb3JkZXJTdGFydFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hBbGlnbjoK
LSNpZiBFTkFCTEUoQ1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLKQotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCb3hEZWNvcmF0aW9uQnJlYWs6Ci0jZW5kaWYKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Qm94RGlyZWN0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hMaW5lczoK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94T3JpZW50OgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCb3hQYWNrOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0Fm
dGVyOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0JlZm9yZToKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQnJlYWtJbnNpZGU6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUNvbHVtbkZpbGw6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbHVtblJ1bGVTdHlsZToKLSAg
ICBjYXNlIENTU1Byb3BlcnR5RmxleERpcmVjdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Rmxl
eFdyYXA6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRLZXJuaW5nOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRGb250U21vb3RoaW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRIeXBoZW5zOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQWxpZ246Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVCcmVhazoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TGluZVNuYXA6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkFmdGVyQ29sbGFwc2U6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJlZm9yZUNvbGxhcHNlOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5Cb3R0b21Db2xsYXBzZToKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFyZ2luVG9wQ29sbGFwc2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dE1hcnF1ZWVEaXJlY3Rpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVTdHls
ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TmJzcE1vZGU6Ci0jaWYgRU5BQkxFKEFDQ0VM
RVJBVEVEX09WRVJGTE9XX1NDUk9MTElORykKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0T3Zl
cmZsb3dTY3JvbGxpbmc6Ci0jZW5kaWYKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UHJpbnRD
b2xvckFkanVzdDoKLSNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCi0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFJlZ2lvbkJyZWFrQWZ0ZXI6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lv
bkJyZWFrQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSZWdpb25CcmVha0luc2lk
ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uRnJhZ21lbnQ6Ci0jZW5kaWYKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UnRsT3JkZXJpbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFJ1YnlQb3NpdGlvbjoKLSNpZiBFTkFCTEUoQ1NTM19URVhUKQotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRUZXh0QWxpZ25MYXN0OgotI2VuZGlmIC8vIENTUzNfVEVYVAotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0Q29tYmluZToKLSNpZiBFTkFCTEUoQ1NTM19URVhUKQot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0SnVzdGlmeToKLSNlbmRpZiAvLyBDU1MzX1RF
WFQKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFNlY3VyaXR5OgotICAgIGNhc2UgQ1NT
UHJvcGVydHlUcmFuc2Zvcm1TdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNm
b3JtU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJEcmFnOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRVc2VyTW9kaWZ5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRV
c2VyU2VsZWN0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRXcml0aW5nTW9kZToKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2hpdGVTcGFjZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V29yZEJyZWFr
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXb3JkV3JhcDoKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQotICAgIGNhc2UgQ1NTUHJvcGVydHlUb3VjaEFjdGlvbjoKLSNlbmRpZgotI2lmIEVOQUJMRShD
U1NfU0NST0xMX1NOQVApCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNjcm9sbFNuYXBUeXBl
OgotI2VuZGlmCi0jaWYgRU5BQkxFKENTU19UUkFJTElOR19XT1JEKQotICAgIGNhc2UgQ1NTUHJv
cGVydHlBcHBsZVRyYWlsaW5nV29yZDoKLSNlbmRpZgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250
VmFyaWFudFBvc2l0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHM6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50QWx0ZXJuYXRlczoKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQot
c3RhdGljIGJvb2wgaXNVbml2ZXJzYWxLZXl3b3JkKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewot
ICAgIC8vIFRoZXNlIGtleXdvcmRzIGNhbiBiZSB1c2VkIGZvciBhbGwgcHJvcGVydGllcy4KLSAg
ICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLCAiaW5pdGlhbCIp
Ci0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZywgImluaGVy
aXQiKQotICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsICJ1
bnNldCIpCi0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZywg
InJldmVydCIpOwotfQotCi1zdGF0aWMgQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdCBwYXJzZUtleXdv
cmRWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIGNvbnN0
IENTU1BhcnNlckNvbnRleHQmIHBhcnNlckNvbnRleHQsIFN0eWxlU2hlZXRDb250ZW50cyogc3R5
bGVTaGVldENvbnRlbnRzKQotewotICAgIEFTU0VSVCghc3RyaW5nLmlzRW1wdHkoKSk7Ci0KLSAg
ICBpZiAoIWlzS2V5d29yZFByb3BlcnR5SUQocHJvcGVydHlJZCkpIHsKLSAgICAgICAgaWYgKCFp
c1VuaXZlcnNhbEtleXdvcmQoc3RyaW5nKSkKLSAgICAgICAgICAgIHJldHVybiBDU1NQYXJzZXI6
OlBhcnNlUmVzdWx0OjpFcnJvcjsKLQotICAgICAgICAvLyBEb24ndCB0cnkgdG8gcGFyc2UgaW5p
dGlhbC9pbmhlcml0L3Vuc2V0L3JldmVydCBzaG9ydGhhbmRzOyByZXR1cm4gYW4gZXJyb3Igc28g
dGhlIGNhbGxlciB3aWxsIHVzZSB0aGUgZnVsbCBDU1MgcGFyc2VyLgotICAgICAgICBpZiAoc2hv
cnRoYW5kRm9yUHJvcGVydHkocHJvcGVydHlJZCkubGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1
cm4gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6RXJyb3I7Ci0gICAgfQotCi0gICAgQ1NTUGFyc2Vy
U3RyaW5nIGNzc1N0cmluZzsKLSAgICBjc3NTdHJpbmcuaW5pdChzdHJpbmcpOwotICAgIENTU1Zh
bHVlSUQgdmFsdWVJRCA9IGNzc1ZhbHVlS2V5d29yZElEKGNzc1N0cmluZyk7Ci0KLSAgICBpZiAo
IXZhbHVlSUQpCi0gICAgICAgIHJldHVybiBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcjsK
LQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFs
dWVJbmhlcml0KQotICAgICAgICB2YWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSW5oZXJpdGVkVmFsdWUoKTsKLSAgICBlbHNlIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlSW5p
dGlhbCkKLSAgICAgICAgdmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUV4
cGxpY2l0SW5pdGlhbFZhbHVlKCk7Ci0gICAgZWxzZSBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZVVu
c2V0KQotICAgICAgICB2YWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVW5z
ZXRWYWx1ZSgpOwotICAgIGVsc2UgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVSZXZlcnQpCi0gICAg
ICAgIHZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVSZXZlcnRWYWx1ZSgp
OwotICAgIGVsc2UgaWYgKGlzVmFsaWRLZXl3b3JkUHJvcGVydHlBbmRWYWx1ZShwcm9wZXJ0eUlk
LCB2YWx1ZUlELCBwYXJzZXJDb250ZXh0LCBzdHlsZVNoZWV0Q29udGVudHMpKQotICAgICAgICB2
YWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZh
bHVlSUQpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6
OkVycm9yOwotCi0gICAgcmV0dXJuIGRlY2xhcmF0aW9uLmFkZFBhcnNlZFByb3BlcnR5KENTU1By
b3BlcnR5KHByb3BlcnR5SWQsIHZhbHVlLnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFudCkpID8g
Q1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6Q2hhbmdlZCA6IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6
OlVuY2hhbmdlZDsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0
aWMgYm9vbCBwYXJzZVRyYW5zZm9ybVRyYW5zbGF0ZUFyZ3VtZW50cyhXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZSYgdHJhbnNmb3JtVmFsdWUsIENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGV4cGVjdGVkQ291bnQpCi17Ci0g
ICAgYXV0byYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKTsKLSAgICB3
aGlsZSAoZXhwZWN0ZWRDb3VudCkgewotICAgICAgICBzaXplX3QgZW5kID0gV1RGOjpmaW5kKGNo
YXJhY3RlcnMsIGxlbmd0aCwgZXhwZWN0ZWRDb3VudCA9PSAxID8gJyknIDogJywnLCBzdGFydCk7
Ci0gICAgICAgIGlmIChlbmQgPT0gbm90Rm91bmQgfHwgKGV4cGVjdGVkQ291bnQgPT0gMSAmJiBl
bmQgIT0gbGVuZ3RoIC0gMSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHVu
c2lnbmVkIGFyZ3VtZW50TGVuZ3RoID0gZW5kIC0gc3RhcnQ7Ci0gICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlOjpVbml0VHlwZXMgdW5pdCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSOwot
ICAgICAgICBkb3VibGUgbnVtYmVyOwotICAgICAgICBpZiAoIXBhcnNlU2ltcGxlTGVuZ3RoKGNo
YXJhY3RlcnMgKyBzdGFydCwgYXJndW1lbnRMZW5ndGgsIHVuaXQsIG51bWJlcikpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICh1bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUFggJiYgKG51bWJlciB8fCB1bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVN
QkVSKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdHJhbnNmb3JtVmFsdWUu
YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShudW1iZXIsIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUFgpKTsKLSAgICAgICAgc3RhcnQgPSBlbmQgKyAxOwotICAgICAgICAtLWV4cGVjdGVk
Q291bnQ7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgQ1NTUGFyc2VyOjpQ
YXJzZVJlc3VsdCBwYXJzZVRyYW5zbGF0ZVRyYW5zZm9ybVZhbHVlKE11dGFibGVTdHlsZVByb3Bl
cnRpZXMmIHByb3BlcnRpZXMsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5n
JiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50KQotewotICAgIGlmIChwcm9wZXJ0eUlEICE9IENTU1By
b3BlcnR5VHJhbnNmb3JtKQotICAgICAgICByZXR1cm4gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6
RXJyb3I7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnRlc3RWYWxpZFRyYW5zZm9y
bVN0cmluZ0xlbmd0aCA9IDEyOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsaWtlbHlNdWx0
aXBhcnRUcmFuc2Zvcm1TdHJpbmdMZW5ndGhDdXRvZmYgPSAzMjsKLSAgICBpZiAoc3RyaW5nLmxl
bmd0aCgpIDwgc2hvcnRlc3RWYWxpZFRyYW5zZm9ybVN0cmluZ0xlbmd0aCB8fCBzdHJpbmcubGVu
Z3RoKCkgPiBsaWtlbHlNdWx0aXBhcnRUcmFuc2Zvcm1TdHJpbmdMZW5ndGhDdXRvZmYpCi0gICAg
ICAgIHJldHVybiBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcjsKLQotICAgIGlmICghc3Ry
aW5nLnN0YXJ0c1dpdGgoInRyYW5zbGF0ZSIsIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuIENTU1Bh
cnNlcjo6UGFyc2VSZXN1bHQ6OkVycm9yOwotCi0gICAgVUNoYXIgYzkgPSB0b0FTQ0lJTG93ZXIo
c3RyaW5nWzldKTsKLSAgICBVQ2hhciBjMTAgPSB0b0FTQ0lJTG93ZXIoc3RyaW5nWzEwXSk7Ci0K
LSAgICBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSB0cmFu
c2Zvcm1UeXBlOwotICAgIHVuc2lnbmVkIGV4cGVjdGVkQXJndW1lbnRDb3VudCA9IDE7Ci0gICAg
dW5zaWduZWQgYXJndW1lbnRTdGFydCA9IDExOwotICAgIGlmIChjOSA9PSAneCcgJiYgYzEwID09
ICcoJykKLSAgICAgICAgdHJhbnNmb3JtVHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpU
cmFuc2xhdGVYVHJhbnNmb3JtT3BlcmF0aW9uOwotICAgIGVsc2UgaWYgKGM5ID09ICd5JyAmJiBj
MTAgPT0gJygnKQotICAgICAgICB0cmFuc2Zvcm1UeXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWU6OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb247Ci0gICAgZWxzZSBpZiAoYzkgPT0gJ3on
ICYmIGMxMCA9PSAnKCcpCi0gICAgICAgIHRyYW5zZm9ybVR5cGUgPSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6VHJhbnNsYXRlWlRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICBlbHNlIGlmIChjOSA9
PSAnKCcpIHsKLSAgICAgICAgdHJhbnNmb3JtVHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb247Ci0gICAgICAgIGV4cGVjdGVkQXJndW1lbnRD
b3VudCA9IDI7Ci0gICAgICAgIGFyZ3VtZW50U3RhcnQgPSAxMDsKLSAgICB9IGVsc2UgaWYgKGM5
ID09ICczJyAmJiBjMTAgPT0gJ2QnICYmIHN0cmluZ1sxMV0gPT0gJygnKSB7Ci0gICAgICAgIHRy
YW5zZm9ybVR5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlM0RUcmFuc2Zv
cm1PcGVyYXRpb247Ci0gICAgICAgIGV4cGVjdGVkQXJndW1lbnRDb3VudCA9IDM7Ci0gICAgICAg
IGFyZ3VtZW50U3RhcnQgPSAxMjsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuIENTU1BhcnNl
cjo6UGFyc2VSZXN1bHQ6OkVycm9yOwotCi0gICAgYXV0byB0cmFuc2Zvcm1WYWx1ZSA9IFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpjcmVhdGUodHJhbnNmb3JtVHlwZSk7Ci0gICAgYm9vbCBzdWNj
ZXNzOwotICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgIHN1Y2Nlc3MgPSBwYXJzZVRy
YW5zZm9ybVRyYW5zbGF0ZUFyZ3VtZW50cyh0cmFuc2Zvcm1WYWx1ZSwgc3RyaW5nLmNoYXJhY3Rl
cnM4KCksIHN0cmluZy5sZW5ndGgoKSwgYXJndW1lbnRTdGFydCwgZXhwZWN0ZWRBcmd1bWVudENv
dW50KTsKLSAgICBlbHNlCi0gICAgICAgIHN1Y2Nlc3MgPSBwYXJzZVRyYW5zZm9ybVRyYW5zbGF0
ZUFyZ3VtZW50cyh0cmFuc2Zvcm1WYWx1ZSwgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcu
bGVuZ3RoKCksIGFyZ3VtZW50U3RhcnQsIGV4cGVjdGVkQXJndW1lbnRDb3VudCk7Ci0gICAgaWYg
KCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6RXJyb3I7
Ci0KLSAgICBhdXRvIHJlc3VsdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQo
KTsKLSAgICByZXN1bHQtPmFwcGVuZChXVEZNb3ZlKHRyYW5zZm9ybVZhbHVlKSk7Ci0gICAgcmV0
dXJuIHByb3BlcnRpZXMuYWRkUGFyc2VkUHJvcGVydHkoQ1NTUHJvcGVydHkoQ1NTUHJvcGVydHlU
cmFuc2Zvcm0sIFdURk1vdmUocmVzdWx0KSwgaW1wb3J0YW50KSkgPyBDU1NQYXJzZXI6OlBhcnNl
UmVzdWx0OjpDaGFuZ2VkIDogQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6VW5jaGFuZ2VkOwotfQot
Ci1SZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlRm9udEZhY2VWYWx1ZShjb25z
dCBBdG9taWNTdHJpbmcmIHN0cmluZykKLXsKLSAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHZhbHVlTGlzdCA9IENTU1ZhbHVlTGlz
dDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IGZhbWlseU5h
bWVzOwotICAgIHN0cmluZy5zdHJpbmcoKS5zcGxpdCgnLCcsIHRydWUsIGZhbWlseU5hbWVzKTsK
LQotICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7Ci0g
ICAgZm9yIChhdXRvJiBmYW1pbHlOYW1lIDogZmFtaWx5TmFtZXMpIHsKLSAgICAgICAgU3RyaW5n
IHN0cmlwcGVkID0gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGZhbWlseU5hbWUp
OwotICAgICAgICBpZiAoc3RyaXBwZWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZTsKLSAgICAgICAgZm9yIChh
dXRvIHByb3BlcnR5SUQgOiB7IENTU1ZhbHVlU2VyaWYsIENTU1ZhbHVlU2Fuc1NlcmlmLCBDU1NW
YWx1ZUN1cnNpdmUsIENTU1ZhbHVlRmFudGFzeSwgQ1NTVmFsdWVNb25vc3BhY2UsIENTU1ZhbHVl
V2Via2l0Qm9keSB9KSB7Ci0gICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShz
dHJpcHBlZCwgZ2V0VmFsdWVOYW1lKHByb3BlcnR5SUQpKSkgewotICAgICAgICAgICAgICAgIHZh
bHVlID0gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShwcm9wZXJ0eUlEKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBp
ZiAoIXZhbHVlKQotICAgICAgICAgICAgdmFsdWUgPSBjc3NWYWx1ZVBvb2wuY3JlYXRlRm9udEZh
bWlseVZhbHVlKHN0cmlwcGVkKTsKLSAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQodmFsdWUucmVs
ZWFzZU5vbk51bGwoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdURk1vdmUodmFsdWVMaXN0KTsK
LX0KLQotQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoTXV0YWJs
ZVN0eWxlUHJvcGVydGllcyYgZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlIGNzc1Bh
cnNlck1vZGUsIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCi17Ci0gICAg
QVNTRVJUKCFzdHJpbmcuaXNFbXB0eSgpKTsKLSAgICBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0IHJl
c3VsdCA9IHBhcnNlU2ltcGxlTGVuZ3RoVmFsdWUoZGVjbGFyYXRpb24sIHByb3BlcnR5SUQsIHN0
cmluZywgaW1wb3J0YW50LCBjc3NQYXJzZXJNb2RlKTsKLSAgICBpZiAocmVzdWx0ICE9IFBhcnNl
UmVzdWx0OjpFcnJvcikKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIHJlc3VsdCA9IHBh
cnNlQ29sb3JWYWx1ZShkZWNsYXJhdGlvbiwgcHJvcGVydHlJRCwgc3RyaW5nLCBpbXBvcnRhbnQs
IGNzc1BhcnNlck1vZGUpOwotICAgIGlmIChyZXN1bHQgIT0gUGFyc2VSZXN1bHQ6OkVycm9yKQot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0KGNz
c1BhcnNlck1vZGUpOwotICAgIGlmIChjb250ZXh0U3R5bGVTaGVldCkgewotICAgICAgICBjb250
ZXh0ID0gY29udGV4dFN0eWxlU2hlZXQtPnBhcnNlckNvbnRleHQoKTsKLSAgICAgICAgY29udGV4
dC5tb2RlID0gY3NzUGFyc2VyTW9kZTsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBwYXJzZUtleXdv
cmRWYWx1ZShkZWNsYXJhdGlvbiwgcHJvcGVydHlJRCwgc3RyaW5nLCBpbXBvcnRhbnQsIGNvbnRl
eHQsIGNvbnRleHRTdHlsZVNoZWV0KTsKLSAgICBpZiAocmVzdWx0ICE9IFBhcnNlUmVzdWx0OjpF
cnJvcikKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIHJlc3VsdCA9IHBhcnNlVHJhbnNs
YXRlVHJhbnNmb3JtVmFsdWUoZGVjbGFyYXRpb24sIHByb3BlcnR5SUQsIHN0cmluZywgaW1wb3J0
YW50KTsKLSAgICBpZiAocmVzdWx0ICE9IFBhcnNlUmVzdWx0OjpFcnJvcikKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLQotICAgIENTU1BhcnNlciBwYXJzZXIoY29udGV4dCk7Ci0gICAgcmV0dXJu
IHBhcnNlci5wYXJzZVZhbHVlKGRlY2xhcmF0aW9uLCBwcm9wZXJ0eUlELCBzdHJpbmcsIGltcG9y
dGFudCwgY29udGV4dFN0eWxlU2hlZXQpOwotfQotCi1DU1NQYXJzZXI6OlBhcnNlUmVzdWx0IENT
U1BhcnNlcjo6cGFyc2VDdXN0b21Qcm9wZXJ0eVZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMm
IGRlY2xhcmF0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUs
IFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCi17Ci0gICAgQ1NTUGFyc2Vy
Q29udGV4dCBjb250ZXh0KGNzc1BhcnNlck1vZGUpOwotICAgIGlmIChjb250ZXh0U3R5bGVTaGVl
dCkgewotICAgICAgICBjb250ZXh0ID0gY29udGV4dFN0eWxlU2hlZXQtPnBhcnNlckNvbnRleHQo
KTsKLSAgICAgICAgY29udGV4dC5tb2RlID0gY3NzUGFyc2VyTW9kZTsKLSAgICB9Ci0KLSAgICBD
U1NQYXJzZXIgcGFyc2VyKGNvbnRleHQpOwotICAgIHBhcnNlci5zZXRDdXN0b21Qcm9wZXJ0eU5h
bWUocHJvcGVydHlOYW1lKTsKLSAgICByZXR1cm4gcGFyc2VyLnBhcnNlVmFsdWUoZGVjbGFyYXRp
b24sIENTU1Byb3BlcnR5Q3VzdG9tLCBzdHJpbmcsIGltcG9ydGFudCwgY29udGV4dFN0eWxlU2hl
ZXQpOwotfQotCi1DU1NQYXJzZXI6OlBhcnNlUmVzdWx0IENTU1BhcnNlcjo6cGFyc2VWYWx1ZShN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIFN0eWxlU2hlZXRDb250
ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCi17Ci0gICAgc2V0U3R5bGVTaGVldChjb250ZXh0U3R5
bGVTaGVldCk7Ci0KLSAgICBzZXR1cFBhcnNlcigiQC13ZWJraXQtdmFsdWV7Iiwgc3RyaW5nLCAi
fSAiKTsKLQotICAgIG1faWQgPSBwcm9wZXJ0eUlEOwotICAgIG1faW1wb3J0YW50ID0gaW1wb3J0
YW50OwotCi0gICAgY3NzeXlwYXJzZSh0aGlzKTsKLQotICAgIG1fcnVsZSA9IG51bGxwdHI7Ci0K
LSAgICBQYXJzZVJlc3VsdCByZXN1bHQgPSBQYXJzZVJlc3VsdDo6RXJyb3I7Ci0KLSAgICBpZiAo
IW1fcGFyc2VkUHJvcGVydGllcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmVzdWx0ID0gZGVjbGFy
YXRpb24uYWRkUGFyc2VkUHJvcGVydGllcyhtX3BhcnNlZFByb3BlcnRpZXMpID8gUGFyc2VSZXN1
bHQ6OkNoYW5nZWQgOiBQYXJzZVJlc3VsdDo6VW5jaGFuZ2VkOwotICAgICAgICBjbGVhclByb3Bl
cnRpZXMoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyBUaGUgY29sb3Ig
d2lsbCBvbmx5IGJlIGNoYW5nZWQgd2hlbiBzdHJpbmcgY29udGFpbnMgYSB2YWxpZCBDU1MgY29s
b3IsIHNvIGNhbGxlcnMKLS8vIGNhbiBzZXQgaXQgdG8gYSBkZWZhdWx0IGNvbG9yIGFuZCBpZ25v
cmUgdGhlIGJvb2xlYW4gcmVzdWx0LgotYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoUkdCQTMy
JiBjb2xvciwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgc3RyaWN0KQotewotICAgIGlmIChz
dHJpbmcuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGaXJzdCB0
cnkgY3JlYXRpbmcgYSBjb2xvciBzcGVjaWZpZWQgYnkgbmFtZSwgcmdiYSgpLCByZ2IoKSBvciAi
IyIgc3ludGF4LgotICAgIGlmIChmYXN0UGFyc2VDb2xvcihjb2xvciwgc3RyaW5nLCBzdHJpY3Qp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIENTU1BhcnNlciBwYXJzZXIoQ1NTU3RyaWN0
TW9kZSk7Ci0KLSAgICAvLyBJbiBjYXNlIHRoZSBmYXN0LXBhdGggcGFyc2VyIGRpZG4ndCB1bmRl
cnN0YW5kIHRoZSBjb2xvciwgdHJ5IHRoZSBmdWxsIHBhcnNlci4KLSAgICBpZiAoIXBhcnNlci5w
YXJzZUNvbG9yKHN0cmluZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENTU1ZhbHVl
JiB2YWx1ZSA9ICpwYXJzZXIubV9wYXJzZWRQcm9wZXJ0aWVzLmZpcnN0KCkudmFsdWUoKTsKLSAg
ICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7Ci0gICAgaWYgKCFwcmltaXRpdmVWYWx1ZS5pc1JHQkNv
bG9yKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbG9yID0gcHJpbWl0aXZlVmFs
dWUuZ2V0UkdCQTMyVmFsdWUoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlQ29sb3IoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgc2V0dXBQYXJzZXIo
IkAtd2Via2l0LWRlY2xze2NvbG9yOiIsIHN0cmluZywgIn0gIik7Ci0gICAgY3NzeXlwYXJzZSh0
aGlzKTsKLSAgICBtX3J1bGUgPSBudWxscHRyOwotCi0gICAgcmV0dXJuICFtX3BhcnNlZFByb3Bl
cnRpZXMuaXNFbXB0eSgpICYmIG1fcGFyc2VkUHJvcGVydGllcy5maXJzdCgpLmlkKCkgPT0gQ1NT
UHJvcGVydHlDb2xvcjsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlU3lzdGVtQ29sb3IoUkdC
QTMyJiBjb2xvciwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIERvY3VtZW50KiBkb2N1bWVudCkKLXsK
LSAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cGFnZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBDU1NQYXJzZXJTdHJpbmcgY3NzQ29sb3I7Ci0gICAgY3NzQ29sb3IuaW5p
dChzdHJpbmcpOwotICAgIENTU1ZhbHVlSUQgaWQgPSBjc3NWYWx1ZUtleXdvcmRJRChjc3NDb2xv
cik7Ci0gICAgaWYgKCF2YWxpZFByaW1pdGl2ZVZhbHVlQ29sb3IoaWQpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBDb2xvciBwYXJzZWRDb2xvciA9IGRvY3VtZW50LT5wYWdlKCktPnRo
ZW1lKCkuc3lzdGVtQ29sb3IoaWQpOwotICAgIGlmICghcGFyc2VkQ29sb3IuaXNWYWxpZCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb2xvciA9IHBhcnNlZENvbG9yLnJnYigpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENTU1BhcnNlcjo6cGFyc2VTZWxlY3Rvcihjb25z
dCBTdHJpbmcmIHN0cmluZywgQ1NTU2VsZWN0b3JMaXN0JiBzZWxlY3Rvckxpc3QpCi17Ci0gICAg
bV9zZWxlY3Rvckxpc3RGb3JQYXJzZVNlbGVjdG9yID0gJnNlbGVjdG9yTGlzdDsKLQotICAgIHNl
dHVwUGFyc2VyKCJALXdlYmtpdC1zZWxlY3RvcnsiLCBzdHJpbmcsICJ9Iik7Ci0KLSAgICBjc3N5
eXBhcnNlKHRoaXMpOwotCi0gICAgbV9zZWxlY3Rvckxpc3RGb3JQYXJzZVNlbGVjdG9yID0gbnVs
bHB0cjsKLX0KLQotUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydGllcz4gQ1NTUGFyc2VyOjpwYXJz
ZUlubGluZVN0eWxlRGVjbGFyYXRpb24oY29uc3QgU3RyaW5nJiBzdHJpbmcsIEVsZW1lbnQqIGVs
ZW1lbnQpCi17Ci0gICAgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0ID0gZWxlbWVudC0+ZG9jdW1l
bnQoKS5lbGVtZW50U2hlZXQoKS5jb250ZW50cygpLnBhcnNlckNvbnRleHQoKTsKLSAgICBjb250
ZXh0Lm1vZGUgPSBzdHJpY3RUb0NTU1BhcnNlck1vZGUoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgp
ICYmICFlbGVtZW50LT5kb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpKTsKLSAgICByZXR1cm4gQ1NT
UGFyc2VyKGNvbnRleHQpLnBhcnNlRGVjbGFyYXRpb24oc3RyaW5nLCAmZWxlbWVudC0+ZG9jdW1l
bnQoKS5lbGVtZW50U2hlZXQoKS5jb250ZW50cygpKTsKLX0KLQotUmVmPEltbXV0YWJsZVN0eWxl
UHJvcGVydGllcz4gQ1NTUGFyc2VyOjpwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KQotewotICAgIHNldFN0
eWxlU2hlZXQoY29udGV4dFN0eWxlU2hlZXQpOwotCi0gICAgc2V0dXBQYXJzZXIoIkAtd2Via2l0
LWRlY2xzeyIsIHN0cmluZywgIn0gIik7Ci0gICAgY3NzeXlwYXJzZSh0aGlzKTsKLSAgICBtX3J1
bGUgPSBudWxscHRyOwotCi0gICAgUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydGllcz4gc3R5bGUg
PSBjcmVhdGVTdHlsZVByb3BlcnRpZXMoKTsKLSAgICBjbGVhclByb3BlcnRpZXMoKTsKLSAgICBy
ZXR1cm4gc3R5bGU7Ci19Ci0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24oTXV0
YWJsZVN0eWxlUHJvcGVydGllcyYgZGVjbGFyYXRpb24sIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBS
ZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+JiYgcnVsZVNvdXJjZURhdGEsIFN0eWxlU2hlZXRDb250
ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCi17Ci0gICAgLy8gTGVuZ3RoIG9mIHRoZSAiQC13ZWJr
aXQtZGVjbHN7IiBwcmVmaXguCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHByZWZpeExlbmd0
aCA9IDE1OwotCi0gICAgc2V0U3R5bGVTaGVldChjb250ZXh0U3R5bGVTaGVldCk7Ci0KLSAgICBp
ZiAocnVsZVNvdXJjZURhdGEpIHsKLSAgICAgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjayA9IHN0
ZDo6bWFrZV91bmlxdWU8UnVsZVNvdXJjZURhdGFMaXN0PigpOwotICAgICAgICBtX2N1cnJlbnRS
dWxlRGF0YVN0YWNrLT5hcHBlbmQoKnJ1bGVTb3VyY2VEYXRhKTsKLSAgICB9Ci0KLSAgICBzZXR1
cFBhcnNlcigiQC13ZWJraXQtZGVjbHN7Iiwgc3RyaW5nLCAifSAiKTsKLSAgICBjc3N5eXBhcnNl
KHRoaXMpOwotICAgIG1fcnVsZSA9IG51bGxwdHI7Ci0KLSAgICBib29sIG9rID0gZmFsc2U7Ci0g
ICAgaWYgKCFtX3BhcnNlZFByb3BlcnRpZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG9rID0gdHJ1
ZTsKLSAgICAgICAgZGVjbGFyYXRpb24uYWRkUGFyc2VkUHJvcGVydGllcyhtX3BhcnNlZFByb3Bl
cnRpZXMpOwotICAgICAgICBjbGVhclByb3BlcnRpZXMoKTsKLSAgICB9Ci0KLSAgICBpZiAocnVs
ZVNvdXJjZURhdGEpIHsKLSAgICAgICAgQVNTRVJUKG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPnNp
emUoKSA9PSAxKTsKLSAgICAgICAgcnVsZVNvdXJjZURhdGEtPnJ1bGVCb2R5UmFuZ2Uuc3RhcnQg
PSAwOwotICAgICAgICBydWxlU291cmNlRGF0YS0+cnVsZUJvZHlSYW5nZS5lbmQgPSBzdHJpbmcu
bGVuZ3RoKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gcnVsZVNvdXJjZURh
dGEtPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhLnNpemUoKTsgaSA8IHNpemU7ICsraSkg
ewotICAgICAgICAgICAgQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBwcm9wZXJ0eURhdGEgPSBydWxl
U291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGEuYXQoaSk7Ci0gICAgICAg
ICAgICBwcm9wZXJ0eURhdGEucmFuZ2Uuc3RhcnQgLT0gcHJlZml4TGVuZ3RoOwotICAgICAgICAg
ICAgcHJvcGVydHlEYXRhLnJhbmdlLmVuZCAtPSBwcmVmaXhMZW5ndGg7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmaXhVbnBhcnNlZFByb3BlcnR5UmFuZ2VzKCpydWxlU291cmNlRGF0YSk7Ci0gICAg
ICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2sucmVzZXQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
b2s7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5PiBDU1NQYXJzZXI6OnBhcnNlTWVk
aWFRdWVyeShjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBpZiAoc3RyaW5nLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBBU1NFUlQoIW1fbWVkaWFRdWVyeSk7
Ci0KLSAgICAvLyBjYW4ndCB1c2UgeyBiZWNhdXNlIHRva2VuaXplciBzdGF0ZSBzd2l0Y2hlcyBm
cm9tIG1lZGlhcXVlcnkgdG8gaW5pdGlhbCBzdGF0ZSB3aGVuIGl0IHNlZXMgeyB0b2tlbi4KLSAg
ICAvLyBpbnN0ZWFkIGluc2VydCBvbmUgIiAiICh3aGljaCBpcyBXSElURVNQQUNFIGluIENTU0dy
YW1tYXIueSkKLSAgICBzZXR1cFBhcnNlcigiQC13ZWJraXQtbWVkaWFxdWVyeSAiLCBzdHJpbmcs
ICJ9ICIpOwotICAgIGNzc3l5cGFyc2UodGhpcyk7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShtX21l
ZGlhUXVlcnkpOwotfQotCi1WZWN0b3I8Q1NTUGFyc2VyOjpTb3VyY2VTaXplPiBDU1NQYXJzZXI6
OnBhcnNlU2l6ZXNBdHRyaWJ1dGUoU3RyaW5nVmlldyBzdHJpbmcpCi17Ci0gICAgVmVjdG9yPFNv
dXJjZVNpemU+IHJlc3VsdDsKLQotICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotCi0gICAgQVNTRVJUKCFtX3NvdXJjZVNpemVMaXN0KTsKLQotICAgIHNl
dHVwUGFyc2VyKCJALXdlYmtpdC1zaXplc2F0dHIgIiwgc3RyaW5nLCAifSIpOwotICAgIGNzc3l5
cGFyc2UodGhpcyk7Ci0KLSAgICBpZiAoIW1fc291cmNlU2l6ZUxpc3QpCi0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0KLSAgICByZXN1bHQgPSBXVEZNb3ZlKCptX3NvdXJjZVNpemVMaXN0KTsKLSAg
ICBtX3NvdXJjZVNpemVMaXN0ID0gbnVsbHB0cjsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0v
LyBGSVhNRSgxNDEyODkpOiBUaGUgZm9sbG93aW5nIHR3byBjb25zdHJ1Y3RvcnMgYXJlIG9ubHkg
bmVlZGVkIGJlY2F1c2Ugb2YgYSBidWcgaW4gTVNWQyAyMDEzIChhbmQgcHJpb3IpLgotLy8gV2Ug
c2hvdWxkIHJlbW92ZSB0aGlzIGNvZGUgYXMgc29vbiBhcyBhIFZpc3VhbCBTdHVkaW8gdXBkYXRl
IHRoYXQgZml4ZXMgdGhpcyBwcm9ibGVtIGlzIHJlbGVhc2VkLgotCi1DU1NQYXJzZXI6OlNvdXJj
ZVNpemU6OlNvdXJjZVNpemUoQ1NTUGFyc2VyOjpTb3VyY2VTaXplJiYgb3JpZ2luYWwpCi0gICAg
OiBleHByZXNzaW9uKFdURk1vdmUob3JpZ2luYWwuZXhwcmVzc2lvbikpCi0gICAgLCBsZW5ndGgo
V1RGTW92ZShvcmlnaW5hbC5sZW5ndGgpKQotewotfQotCi1DU1NQYXJzZXI6OlNvdXJjZVNpemU6
OlNvdXJjZVNpemUoTWVkaWFRdWVyeUV4cHJlc3Npb24mJiBleHByZXNzaW9uLCBSZWY8Q1NTVmFs
dWU+JiYgdmFsdWUpCi0gICAgOiBleHByZXNzaW9uKFdURk1vdmUoZXhwcmVzc2lvbikpCi0gICAg
LCBsZW5ndGgoV1RGTW92ZSh2YWx1ZSkpCi17Ci19Ci0KLU9wdGlvbmFsPENTU1BhcnNlcjo6U291
cmNlU2l6ZT4gQ1NTUGFyc2VyOjpzb3VyY2VTaXplKE1lZGlhUXVlcnlFeHByZXNzaW9uJiYgZXhw
cmVzc2lvbiwgQ1NTUGFyc2VyVmFsdWUmIHBhcnNlclZhbHVlKQotewotICAgIFJlZlB0cjxDU1NW
YWx1ZT4gdmFsdWU7Ci0gICAgaWYgKGlzQ2FsY3VsYXRpb24ocGFyc2VyVmFsdWUpKSB7Ci0gICAg
ICAgIGF1dG8qIGFyZ3MgPSBwYXJzZXJWYWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsKLSAgICAg
ICAgaWYgKGFyZ3MgJiYgYXJncy0+c2l6ZSgpKQotICAgICAgICAgICAgdmFsdWUgPSBDU1NDYWxj
VmFsdWU6OmNyZWF0ZShwYXJzZXJWYWx1ZS5mdW5jdGlvbi0+bmFtZSwgKmFyZ3MsIENhbGN1bGF0
aW9uUmFuZ2VOb25OZWdhdGl2ZSk7Ci0gICAgfQotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHZh
bHVlID0gcGFyc2VyVmFsdWUuY3JlYXRlQ1NTVmFsdWUoKTsKLSAgICBkZXN0cm95KHBhcnNlclZh
bHVlKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gTnVsbG9wdDsKLSAgICAvLyBG
SVhNRTogQ2FsbGluZyB0aGUgY29uc3RydWN0b3IgZXhwbGljaXRseSBoZXJlIHRvIHdvcmsgYXJv
dW5kIGFuIE1TVkMgYnVnLgotICAgIC8vIEZvciBvdGhlciBjb21waWxlcnMsIHdlIGRpZCBub3Qg
bmVlZCB0byBkZWZpbmUgdGhlIGNvbnN0cnVjdG9ycyBhbmQgd2UgY291bGQgdXNlIGFnZ3JlZ2F0
ZSBpbml0aWFsaXphdGlvbiBzeW50YXguCi0gICAgcmV0dXJuIFNvdXJjZVNpemUoV1RGTW92ZShl
eHByZXNzaW9uKSwgdmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
dm9pZCBmaWx0ZXJQcm9wZXJ0aWVzKGJvb2wgaW1wb3J0YW50LCBjb25zdCBQYXJzZWRQcm9wZXJ0
eVZlY3RvciYgaW5wdXQsIFZlY3RvcjxDU1NQcm9wZXJ0eSwgMjU2PiYgb3V0cHV0LCBzaXplX3Qm
IHVudXNlZEVudHJpZXMsIHN0ZDo6Yml0c2V0PG51bUNTU1Byb3BlcnRpZXM+JiBzZWVuUHJvcGVy
dGllcywgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBzZWVuQ3VzdG9tUHJvcGVydGllcykKLXsKLSAg
ICAvLyBBZGQgcHJvcGVydGllcyBpbiByZXZlcnNlIG9yZGVyIHNvIHRoYXQgaGlnaGVzdCBwcmlv
cml0eSBkZWZpbml0aW9ucyBhcmUgcmVhY2hlZCBmaXJzdC4gRHVwbGljYXRlIGRlZmluaXRpb25z
IGNhbiB0aGVuIGJlIGlnbm9yZWQgd2hlbiBmb3VuZC4KLSAgICBmb3IgKGludCBpID0gaW5wdXQu
c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHBy
b3BlcnR5ID0gaW5wdXRbaV07Ci0gICAgICAgIGlmIChwcm9wZXJ0eS5pc0ltcG9ydGFudCgpICE9
IGltcG9ydGFudCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgaWYg
KHByb3BlcnR5LmlkKCkgPT0gQ1NTUHJvcGVydHlDdXN0b20pIHsKLSAgICAgICAgICAgIGlmIChw
cm9wZXJ0eS52YWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgbmFtZSA9IGRvd25jYXN0
PENTU0N1c3RvbVByb3BlcnR5VmFsdWU+KCpwcm9wZXJ0eS52YWx1ZSgpKS5uYW1lKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFzZWVuQ3VzdG9tUHJvcGVydGllcy5hZGQobmFtZSkuaXNOZXdFbnRy
eSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgb3V0cHV0
Wy0tdW51c2VkRW50cmllc10gPSBwcm9wZXJ0eTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgdW5zaWduZWQgcHJvcGVydHlJ
REluZGV4ID0gcHJvcGVydHkuaWQoKSAtIGZpcnN0Q1NTUHJvcGVydHk7Ci0gICAgICAgIEFTU0VS
VChwcm9wZXJ0eUlESW5kZXggPCBzZWVuUHJvcGVydGllcy5zaXplKCkpOwotICAgICAgICBpZiAo
c2VlblByb3BlcnRpZXNbcHJvcGVydHlJREluZGV4XSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBzZWVuUHJvcGVydGllcy5zZXQocHJvcGVydHlJREluZGV4KTsKLSAgICAgICAgb3V0
cHV0Wy0tdW51c2VkRW50cmllc10gPSBwcm9wZXJ0eTsKLSAgICB9Ci19Ci0KLVJlZjxJbW11dGFi
bGVTdHlsZVByb3BlcnRpZXM+IENTU1BhcnNlcjo6Y3JlYXRlU3R5bGVQcm9wZXJ0aWVzKCkKLXsK
LSAgICBzdGQ6OmJpdHNldDxudW1DU1NQcm9wZXJ0aWVzPiBzZWVuUHJvcGVydGllczsKLSAgICBz
aXplX3QgdW51c2VkRW50cmllcyA9IG1fcGFyc2VkUHJvcGVydGllcy5zaXplKCk7Ci0gICAgVmVj
dG9yPENTU1Byb3BlcnR5LCAyNTY+IHJlc3VsdHModW51c2VkRW50cmllcyk7Ci0KLSAgICAvLyBJ
bXBvcnRhbnQgcHJvcGVydGllcyBoYXZlIGhpZ2hlciBwcmlvcml0eSwgc28gYWRkIHRoZW0gZmly
c3QuIER1cGxpY2F0ZSBkZWZpbml0aW9ucyBjYW4gdGhlbiBiZSBpZ25vcmVkIHdoZW4gZm91bmQu
Ci0gICAgSGFzaFNldDxBdG9taWNTdHJpbmc+IHNlZW5DdXN0b21Qcm9wZXJ0aWVzOwotICAgIGZp
bHRlclByb3BlcnRpZXModHJ1ZSwgbV9wYXJzZWRQcm9wZXJ0aWVzLCByZXN1bHRzLCB1bnVzZWRF
bnRyaWVzLCBzZWVuUHJvcGVydGllcywgc2VlbkN1c3RvbVByb3BlcnRpZXMpOwotICAgIGZpbHRl
clByb3BlcnRpZXMoZmFsc2UsIG1fcGFyc2VkUHJvcGVydGllcywgcmVzdWx0cywgdW51c2VkRW50
cmllcywgc2VlblByb3BlcnRpZXMsIHNlZW5DdXN0b21Qcm9wZXJ0aWVzKTsKLSAgICBpZiAodW51
c2VkRW50cmllcykKLSAgICAgICAgcmVzdWx0cy5yZW1vdmUoMCwgdW51c2VkRW50cmllcyk7Ci0K
LSAgICByZXR1cm4gSW1tdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUocmVzdWx0cy5kYXRh
KCksIHJlc3VsdHMuc2l6ZSgpLCBtX2NvbnRleHQubW9kZSk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2Vy
OjphZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgUmVmUHRyPENTU1ZhbHVlPiYmIHZh
bHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBpbXBsaWNpdCkKLXsKLSAgICAvLyBUaGlzIHByb3Bl
cnR5IGRvZXNuJ3QgYmVsb25nIHRvIGEgc2hvcnRoYW5kIG9yIGlzIGEgQ1NTIHZhcmlhYmxlICh3
aGljaCB3aWxsIGJlIHJlc29sdmVkIGxhdGVyKS4KLSAgICBpZiAoIW1fY3VycmVudFNob3J0aGFu
ZCkgewotICAgICAgICBtX3BhcnNlZFByb3BlcnRpZXMuYXBwZW5kKENTU1Byb3BlcnR5KHByb3BJ
ZCwgV1RGTW92ZSh2YWx1ZSksIGltcG9ydGFudCwgZmFsc2UsIENTU1Byb3BlcnR5SW52YWxpZCwg
bV9pbXBsaWNpdFNob3J0aGFuZCB8fCBpbXBsaWNpdCkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgYXV0byBzaG9ydGhhbmRzID0gbWF0Y2hpbmdTaG9ydGhhbmRzRm9yTG9uZ2hhbmQo
cHJvcElkKTsKLSAgICBpZiAoc2hvcnRoYW5kcy5zaXplKCkgPT0gMSkKLSAgICAgICAgbV9wYXJz
ZWRQcm9wZXJ0aWVzLmFwcGVuZChDU1NQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUodmFsdWUpLCBp
bXBvcnRhbnQsIHRydWUsIENTU1Byb3BlcnR5SW52YWxpZCwgbV9pbXBsaWNpdFNob3J0aGFuZCB8
fCBpbXBsaWNpdCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9wYXJzZWRQcm9wZXJ0aWVzLmFwcGVu
ZChDU1NQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUodmFsdWUpLCBpbXBvcnRhbnQsIHRydWUsIGlu
ZGV4T2ZTaG9ydGhhbmRGb3JMb25naGFuZChtX2N1cnJlbnRTaG9ydGhhbmQsIHNob3J0aGFuZHMp
LCBtX2ltcGxpY2l0U2hvcnRoYW5kIHx8IGltcGxpY2l0KSk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2Vy
Ojpyb2xsYmFja0xhc3RQcm9wZXJ0aWVzKGludCBudW0pCi17Ci0gICAgQVNTRVJUKG51bSA+PSAw
KTsKLSAgICBBU1NFUlQobV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKSA+PSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4obnVtKSk7Ci0gICAgbV9wYXJzZWRQcm9wZXJ0aWVzLnNocmluayhtX3BhcnNlZFBy
b3BlcnRpZXMuc2l6ZSgpIC0gbnVtKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OmNsZWFyUHJvcGVy
dGllcygpCi17Ci0gICAgbV9wYXJzZWRQcm9wZXJ0aWVzLmNsZWFyKCk7Ci0gICAgbV9udW1QYXJz
ZWRQcm9wZXJ0aWVzQmVmb3JlTWFyZ2luQm94ID0gaW52YWxpZFBhcnNlZFByb3BlcnRpZXNDb3Vu
dDsKLX0KLQotVVJMIENTU1BhcnNlcjo6Y29tcGxldGVVUkwoY29uc3QgQ1NTUGFyc2VyQ29udGV4
dCYgY29udGV4dCwgY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgaWYgKHVybC5pc051bGwoKSkK
LSAgICAgICAgcmV0dXJuIFVSTCgpOwotICAgIGlmIChjb250ZXh0LmNoYXJzZXQuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gVVJMKGNvbnRleHQuYmFzZVVSTCwgdXJsKTsKLSAgICByZXR1cm4g
VVJMKGNvbnRleHQuYmFzZVVSTCwgdXJsLCBjb250ZXh0LmNoYXJzZXQpOwotfQotCi1VUkwgQ1NT
UGFyc2VyOjpjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHVybCkgY29uc3QKLXsKLSAgICByZXR1
cm4gY29tcGxldGVVUkwobV9jb250ZXh0LCB1cmwpOwotfQotCi1ib29sIENTU1BhcnNlcjo6dmFs
aWRhdGVDYWxjdWxhdGlvblVuaXQoVmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1
bGF0aW9uLCBVbml0cyB1bml0RmxhZ3MpCi17Ci0gICAgYm9vbCBtdXN0QmVOb25OZWdhdGl2ZSA9
IHVuaXRGbGFncyAmIEZOb25OZWc7Ci0KLSAgICBSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBjYWxjdWxh
dGlvbjsKLSAgICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24uY2FsY3VsYXRpb24oKSkgewotICAg
ICAgICAvLyBUaGUgY2FsY3VsYXRpb24gdmFsdWUgd2FzIGFscmVhZHkgcGFyc2VkIHNvIHdlIHJl
dXNlIGl0LiBIb3dldmVyLCB3ZSBtYXkgbmVlZCB0byB1cGRhdGUgaXRzIHJhbmdlLgotICAgICAg
ICBjYWxjdWxhdGlvbiA9IHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0aW9uKCk7Ci0gICAg
ICAgIGNhbGN1bGF0aW9uLT5zZXRQZXJtaXR0ZWRWYWx1ZVJhbmdlKG11c3RCZU5vbk5lZ2F0aXZl
ID8gQ2FsY3VsYXRpb25SYW5nZU5vbk5lZ2F0aXZlIDogQ2FsY3VsYXRpb25SYW5nZUFsbCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgdmFsdWVXaXRoQ2FsY3VsYXRpb24uc2V0Q2FsY3VsYXRpb24o
cGFyc2VDYWxjdWxhdGlvbih2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgbXVzdEJlTm9uTmVnYXRpdmUg
PyBDYWxjdWxhdGlvblJhbmdlTm9uTmVnYXRpdmUgOiBDYWxjdWxhdGlvblJhbmdlQWxsKSk7Ci0g
ICAgICAgIGNhbGN1bGF0aW9uID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24uY2FsY3VsYXRpb24oKTsK
LSAgICAgICAgaWYgKCFjYWxjdWxhdGlvbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBib29sIGlzVmFsaWQgPSBmYWxzZTsKLSAgICBzd2l0Y2ggKGNhbGN1bGF0aW9u
LT5jYXRlZ29yeSgpKSB7Ci0gICAgY2FzZSBDYWxjTnVtYmVyOgotICAgICAgICBpc1ZhbGlkID0g
KHVuaXRGbGFncyAmIEZOdW1iZXIpOwotICAgICAgICBpZiAoIWlzVmFsaWQgJiYgKHVuaXRGbGFn
cyAmIEZJbnRlZ2VyKSAmJiBjYWxjdWxhdGlvbi0+aXNJbnQoKSkKLSAgICAgICAgICAgIGlzVmFs
aWQgPSB0cnVlOwotICAgICAgICBpZiAoIWlzVmFsaWQgJiYgKHVuaXRGbGFncyAmIEZQb3NpdGl2
ZUludGVnZXIpICYmIGNhbGN1bGF0aW9uLT5pc0ludCgpICYmIGNhbGN1bGF0aW9uLT5pc1Bvc2l0
aXZlKCkpCi0gICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDYWxjTGVuZ3RoOgotICAgICAgICBpc1ZhbGlkID0gKHVuaXRGbGFncyAmIEZMZW5ndGgp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENhbGNQZXJjZW50OgotICAgICAgICBpc1ZhbGlk
ID0gKHVuaXRGbGFncyAmIEZQZXJjZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDYWxj
UGVyY2VudExlbmd0aDoKLSAgICAgICAgaXNWYWxpZCA9ICh1bml0RmxhZ3MgJiBGUGVyY2VudCkg
JiYgKHVuaXRGbGFncyAmIEZMZW5ndGgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENhbGNQ
ZXJjZW50TnVtYmVyOgotICAgICAgICBpc1ZhbGlkID0gKHVuaXRGbGFncyAmIEZQZXJjZW50KSAm
JiAodW5pdEZsYWdzICYgRk51bWJlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2FsY0Fu
Z2xlOgotICAgICAgICBpc1ZhbGlkID0gKHVuaXRGbGFncyAmIEZBbmdsZSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ2FsY1RpbWU6Ci0gICAgICAgIGlzVmFsaWQgPSAodW5pdEZsYWdzICYg
RlRpbWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENhbGNGcmVxdWVuY3k6Ci0gICAgICAg
IGlzVmFsaWQgPSAodW5pdEZsYWdzICYgRkZyZXF1ZW5jeSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ2FsY090aGVyOgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gaXNW
YWxpZDsKLX0KLQotaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpzaG91bGRBY2NlcHRVbml0TGVzc1Zh
bHVlcyhDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFVuaXRzIHVuaXRGbGFncywgQ1NTUGFyc2VyTW9k
ZSBjc3NQYXJzZXJNb2RlKQotewotICAgIC8vIFFpcmtzIG1vZGUgYW5kIHN2ZyBwcmVzZW50YXRp
b24gYXR0cmlidXRlcyBhY2NlcHQgdW5pdCBsZXNzIHZhbHVlcy4KLSAgICByZXR1cm4gKHVuaXRG
bGFncyAmIChGTGVuZ3RoIHwgRkFuZ2xlIHwgRlRpbWUpKSAmJiAoIXZhbHVlLmZWYWx1ZSB8fCBj
c3NQYXJzZXJNb2RlID09IENTU1F1aXJrc01vZGUgfHwgY3NzUGFyc2VyTW9kZSA9PSBTVkdBdHRy
aWJ1dGVNb2RlKTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnZhbGlkYXRlVW5pdChWYWx1ZVdpdGhD
YWxjdWxhdGlvbiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24sIFVuaXRzIHVuaXRGbGFncywgQ1NTUGFy
c2VyTW9kZSBjc3NQYXJzZXJNb2RlKQotewotICAgIGlmIChpc0NhbGN1bGF0aW9uKHZhbHVlV2l0
aENhbGN1bGF0aW9uKSkKLSAgICAgICAgcmV0dXJuIHZhbGlkYXRlQ2FsY3VsYXRpb25Vbml0KHZh
bHVlV2l0aENhbGN1bGF0aW9uLCB1bml0RmxhZ3MpOwotICAgICAgICAKLSAgICBib29sIGIgPSBm
YWxzZTsKLSAgICBzd2l0Y2ggKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCkgewot
ICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVI6Ci0gICAgICAgIGIgPSAodW5p
dEZsYWdzICYgRk51bWJlcik7Ci0gICAgICAgIGlmICghYiAmJiBzaG91bGRBY2NlcHRVbml0TGVz
c1ZhbHVlcyh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgdW5pdEZsYWdzLCBjc3NQYXJzZXJNb2RlKSkg
ewotICAgICAgICAgICAgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID0gKHVuaXRG
bGFncyAmIEZMZW5ndGgpID8gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCA6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICgodW5pdEZsYWdzICYgRkFuZ2xlKSA/IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfREVHIDogQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19NUyk7Ci0gICAgICAgICAgICBiID0g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWIgJiYgKHVuaXRGbGFncyAmIEZJbnRlZ2Vy
KSAmJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlzSW50KQotICAgICAgICAgICAgYiA9
IHRydWU7Ci0gICAgICAgIGlmICghYiAmJiAodW5pdEZsYWdzICYgRlBvc2l0aXZlSW50ZWdlcikg
JiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5pc0ludCAmJiB2YWx1ZVdpdGhDYWxjdWxh
dGlvbi52YWx1ZSgpLmZWYWx1ZSA+IDApCi0gICAgICAgICAgICBiID0gdHJ1ZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0U6Ci0gICAg
ICAgIGIgPSAodW5pdEZsYWdzICYgRlBlcmNlbnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1BhcnNlclZhbHVlOjpRX0VNUzoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
RU1TOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SRU1TOgotICAgIGNhc2UgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19DSFM6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0VYUzoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFg6Ci0gICAgY2FzZSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX0NNOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19N
TToKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSU46Ci0gICAgY2FzZSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BUOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQzoK
LSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVlc6Ci0gICAgY2FzZSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1ZIOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WTUlOOgot
ICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WTUFYOgotICAgICAgICBiID0gKHVuaXRG
bGFncyAmIEZMZW5ndGgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfTVM6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1M6Ci0gICAgICAg
IGIgPSAodW5pdEZsYWdzICYgRlRpbWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfREVHOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19S
QUQ6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0dSQUQ6Ci0gICAgY2FzZSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1RVUk46Ci0gICAgICAgIGIgPSAodW5pdEZsYWdzICYgRkFuZ2xl
KTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKSB8fCBF
TkFCTEUoUkVTT0xVVElPTl9NRURJQV9RVUVSWSkKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfRFBQWDoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBJOgotICAgIGNh
c2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUENNOgotICAgICAgICBiID0gKHVuaXRGbGFncyAm
IEZSZXNvbHV0aW9uKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfSFo6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tIWjoK
LSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRElNRU5TSU9OOgotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoYiAmJiB1bml0RmxhZ3MgJiBGTm9uTmVn
ICYmIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlIDwgMCkKLSAgICAgICAgYiA9
IGZhbHNlOwotICAgIGlmIChiICYmIHN0ZDo6aXNpbmYodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFs
dWUoKS5mVmFsdWUpKQotICAgICAgICBiID0gZmFsc2U7Ci0gICAgcmV0dXJuIGI7Ci19Ci0KLWlu
bGluZSBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6Y3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKFZhbHVlV2l0aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbikKLXsK
LSAgICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24uY2FsY3VsYXRpb24oKSkKLSAgICAgICAgcmV0
dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWVXaXRoQ2FsY3VsYXRpb24uY2FsY3Vs
YXRpb24oKSk7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSB2YWx1ZVdpdGhDYWxjdWxh
dGlvbjsKLSNpZiBFTkFCTEUoQ1NTX0lNQUdFX1JFU09MVVRJT04pIHx8IEVOQUJMRShSRVNPTFVU
SU9OX01FRElBX1FVRVJZKQotICAgIEFTU0VSVCgodmFsdWUudW5pdCA+PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZS51bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
S0haKQotICAgICAgICB8fCAodmFsdWUudW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1RV
Uk4gJiYgdmFsdWUudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NIUykKLSAgICAgICAg
fHwgKHZhbHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WVyAmJiB2YWx1ZS51bml0
IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVk1BWCkKLSAgICAgICAgfHwgKHZhbHVlLnVuaXQg
Pj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUFBYICYmIHZhbHVlLnVuaXQgPD0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19EUENNKSk7Ci0jZWxzZQotICAgIEFTU0VSVCgodmFsdWUudW5pdCA+PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZS51bml0IDw9IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfS0haKQotICAgICAgICB8fCAodmFsdWUudW5pdCA+PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1RVUk4gJiYgdmFsdWUudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NI
UykKLSAgICAgICAgfHwgKHZhbHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WVyAm
JiB2YWx1ZS51bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVk1BWCkpOwotI2VuZGlmCi0g
ICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUodmFsdWUuZlZh
bHVlLCBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzPih2YWx1ZS51bml0
KSk7Ci19Ci0KLWlubGluZSBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6Y3JlYXRl
UHJpbWl0aXZlU3RyaW5nVmFsdWUoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQotewotICAgIEFTU0VS
VCh2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HIHx8IHZhbHVlLnVu
aXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCk7Ci0gICAgcmV0dXJuIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUodmFsdWUuc3RyaW5nLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1NUUklORyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0NvbW1hKENTU1Bh
cnNlclZhbHVlKiB2YWx1ZSkKLXsgCi0gICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLT51bml0ID09
IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiB2YWx1ZS0+aVZhbHVlID09ICcsJzsgCi19Ci0K
LXN0YXRpYyBpbmxpbmUgYm9vbCBpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKENTU1BhcnNlclZhbHVl
JiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdmFsdWUudW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3Bl
cmF0b3IgJiYgdmFsdWUuaVZhbHVlID09ICcvJzsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OmlzVmFs
aWRTaXplKFZhbHVlV2l0aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbikKLXsKLSAg
ICBpbnQgaWQgPSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlkOwotICAgIGlmIChpZCA9
PSBDU1NWYWx1ZUludHJpbnNpYyB8fCBpZCA9PSBDU1NWYWx1ZU1pbkludHJpbnNpYyB8fCBpZCA9
PSBDU1NWYWx1ZVdlYmtpdE1pbkNvbnRlbnQgfHwgaWQgPT0gQ1NTVmFsdWVXZWJraXRNYXhDb250
ZW50IHx8IGlkID09IENTU1ZhbHVlV2Via2l0RmlsbEF2YWlsYWJsZSB8fCBpZCA9PSBDU1NWYWx1
ZVdlYmtpdEZpdENvbnRlbnQpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiAhaWQg
JiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQg
fCBGTm9uTmVnKTsKLX0KLQotaW5saW5lIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZVZhbGlkUHJpbWl0aXZlKENTU1ZhbHVlSUQgaWRlbnRpZmllciwgVmFsdWVXaXRo
Q2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1bGF0aW9uKQotewotICAgIGlmIChpZGVudGlmaWVy
KQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoaWRlbnRpZmllcik7Ci0KLSAgICBpZiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFs
dWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQotICAgICAgICByZXR1
cm4gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAg
IGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIgJiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0IDw9IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfS0haKQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLSAgICBpZiAodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24udmFsdWUoKS51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVFVSTiAmJiB2
YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19DSFMpCi0gICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVX
aXRoQ2FsY3VsYXRpb24pOwotICAgIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVu
aXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WVyAmJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52
YWx1ZSgpLnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WTUFYKQotICAgICAgICByZXR1
cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLSNp
ZiBFTkFCTEUoQ1NTX0lNQUdFX1JFU09MVVRJT04pIHx8IEVOQUJMRShSRVNPTFVUSU9OX01FRElB
X1FVRVJZKQotICAgIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPj0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19EUFBYICYmIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCku
dW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQQ00pCi0gICAgICAgIHJldHVybiBjcmVh
dGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotI2VuZGlmCi0g
ICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA+PSBDU1NQYXJzZXJWYWx1
ZTo6UV9FTVMpCi0gICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQWxsb3dp
bmdNYXJnaW5RdWlyayh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19FTVMpOwotICAgIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi5jYWxj
dWxhdGlvbigpKQotICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1
ZVdpdGhDYWxjdWxhdGlvbi5jYWxjdWxhdGlvbigpKTsKLQotICAgIHJldHVybiBudWxscHRyOwot
fQotCi12b2lkIENTU1BhcnNlcjo6YWRkRXhwYW5kZWRQcm9wZXJ0eUZvclZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcElkLCBSZWY8Q1NTVmFsdWU+JiYgdmFsdWUsIGJvb2wgaW1wb3J0YW50KQotewot
ICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmIHNob3J0aGFuZCA9IHNob3J0aGFuZEZv
clByb3BlcnR5KHByb3BJZCk7Ci0gICAgdW5zaWduZWQgc2hvcnRoYW5kTGVuZ3RoID0gc2hvcnRo
YW5kLmxlbmd0aCgpOwotICAgIGlmICghc2hvcnRoYW5kTGVuZ3RoKSB7Ci0gICAgICAgIGFkZFBy
b3BlcnR5KHByb3BJZCwgV1RGTW92ZSh2YWx1ZSksIGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBwcm9wSWQpOwotICAg
IGNvbnN0IENTU1Byb3BlcnR5SUQqIGxvbmdoYW5kcyA9IHNob3J0aGFuZC5wcm9wZXJ0aWVzKCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNob3J0aGFuZExlbmd0aDsgKytpKQotICAg
ICAgICBhZGRQcm9wZXJ0eShsb25naGFuZHNbaV0sIHZhbHVlLmNvcHlSZWYoKSwgaW1wb3J0YW50
KTsKLX0KLQotUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVmFyaWFibGVEZXBlbmRl
bnRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJRCwgY29uc3QgQ1NTVmFyaWFibGVEZXBlbmRlbnRW
YWx1ZSYgZGVwZW5kZW50VmFsdWUsIGNvbnN0IEN1c3RvbVByb3BlcnR5VmFsdWVNYXAmIGN1c3Rv
bVByb3BlcnRpZXMsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3cml0aW5n
TW9kZSkKLXsKLSAgICBtX3ZhbHVlTGlzdC5yZXNldChuZXcgQ1NTUGFyc2VyVmFsdWVMaXN0KCkp
OwotICAgIGlmICghZGVwZW5kZW50VmFsdWUudmFsdWVMaXN0KCkuYnVpbGRQYXJzZXJWYWx1ZUxp
c3RTdWJzdGl0dXRpbmdWYXJpYWJsZXMobV92YWx1ZUxpc3QuZ2V0KCksIGN1c3RvbVByb3BlcnRp
ZXMpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENTU1Byb3BlcnR5SUQgZGVwZW5k
ZW50VmFsdWVQcm9wZXJ0eUlEID0gZGVwZW5kZW50VmFsdWUucHJvcGVydHlJRCgpOwotICAgIGlm
IChDU1NQcm9wZXJ0eTo6aXNEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGRlcGVuZGVudFZhbHVlUHJv
cGVydHlJRCkpCi0gICAgICAgIGRlcGVuZGVudFZhbHVlUHJvcGVydHlJRCA9IENTU1Byb3BlcnR5
OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShkZXBlbmRlbnRWYWx1ZVByb3BlcnR5SUQs
IGRpcmVjdGlvbiwgd3JpdGluZ01vZGUpOwotCi0gICAgaWYgKCFwYXJzZVZhbHVlKGRlcGVuZGVu
dFZhbHVlUHJvcGVydHlJRCwgZmFsc2UpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IGZvciAoYXV0byYgcHJvcGVydHkgOiBtX3BhcnNlZFByb3BlcnRpZXMpIHsKLSAgICAgICAgaWYg
KHByb3BlcnR5LmlkKCkgPT0gcHJvcElEKQotICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5LnZh
bHVlKCk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1zdGF0aWMgYm9vbCBpc0lt
YWdlU2V0RnVuY3Rpb25WYWx1ZShjb25zdCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCi17Ci0gICAg
cmV0dXJuIHZhbHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uICYmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgImltYWdlLXNldCgi
KSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwg
Ii13ZWJraXQtaW1hZ2Utc2V0KCIpKTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUo
Q1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQotewotICAgIGlmICghbV92YWx1
ZUxpc3QgfHwgIW1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKLSAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKSk7Ci0gICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlV2l0aENhbGN1
bGF0aW9uLnZhbHVlKCkuaWQ7Ci0gICAgCi0gICAgaWYgKHByb3BJZCA9PSBDU1NQcm9wZXJ0eUN1
c3RvbSkKLSAgICAgICAgcmV0dXJuIHBhcnNlQ3VzdG9tUHJvcGVydHlEZWNsYXJhdGlvbihpbXBv
cnRhbnQsIGlkKTsKLQotICAgIGlmIChtX3ZhbHVlTGlzdC0+Y29udGFpbnNWYXJpYWJsZXMoKSkg
ewotICAgICAgICBhdXRvIHZhbHVlTGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlRnJvbVBhcnNl
clZhbHVlTGlzdCgqbV92YWx1ZUxpc3QpOwotICAgICAgICBhZGRFeHBhbmRlZFByb3BlcnR5Rm9y
VmFsdWUocHJvcElkLCBDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlOjpjcmVhdGUoV1RGTW92ZSh2
YWx1ZUxpc3QpLCBwcm9wSWQpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBhdXRvJiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
OwotICAgIHVuc2lnbmVkIG51bSA9IGluU2hvcnRoYW5kKCkgPyAxIDogbV92YWx1ZUxpc3QtPnNp
emUoKTsKLQotICAgIGlmIChpZCA9PSBDU1NWYWx1ZUluaGVyaXQpIHsKLSAgICAgICAgaWYgKG51
bSAhPSAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhZGRFeHBhbmRlZFBy
b3BlcnR5Rm9yVmFsdWUocHJvcElkLCBjc3NWYWx1ZVBvb2wuY3JlYXRlSW5oZXJpdGVkVmFsdWUo
KSwgaW1wb3J0YW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UgaWYg
KGlkID09IENTU1ZhbHVlSW5pdGlhbCkgewotICAgICAgICBpZiAobnVtICE9IDEpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGFkZEV4cGFuZGVkUHJvcGVydHlGb3JWYWx1ZShw
cm9wSWQsIGNzc1ZhbHVlUG9vbC5jcmVhdGVFeHBsaWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRh
bnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGlkID09IENTU1ZhbHVl
VW5zZXQpIHsKLSAgICAgICAgaWYgKG51bSAhPSAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBhZGRFeHBhbmRlZFByb3BlcnR5Rm9yVmFsdWUocHJvcElkLCBjc3NWYWx1ZVBv
b2wuY3JlYXRlVW5zZXRWYWx1ZSgpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9IGVsc2UgaWYgKGlkID09IENTU1ZhbHVlUmV2ZXJ0KSB7Ci0gICAgICAgIGlmIChudW0g
IT0gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYWRkRXhwYW5kZWRQcm9w
ZXJ0eUZvclZhbHVlKHByb3BJZCwgY3NzVmFsdWVQb29sLmNyZWF0ZVJldmVydFZhbHVlKCksIGlt
cG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAocHJv
cElkID09IENTU1Byb3BlcnR5QWxsKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vICJhbGwiIGRv
ZXNuJ3QgYWxsb3cgeW91IHRvIHNwZWNpZnkgYW55dGhpbmcgb3RoZXIgdGhhbiBpbmhlcml0L2lu
aXRpYWwvdW5zZXQuCi0KLSAgICBpZiAoaXNLZXl3b3JkUHJvcGVydHlJRChwcm9wSWQpKSB7Ci0g
ICAgICAgIGlmICghaXNWYWxpZEtleXdvcmRQcm9wZXJ0eUFuZFZhbHVlKHByb3BJZCwgaWQsIG1f
Y29udGV4dCwgbV9zdHlsZVNoZWV0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgaWYgKG1fdmFsdWVMaXN0LT5uZXh0KCkgJiYgIWluU2hvcnRoYW5kKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3NzVmFsdWVQb29s
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZCksIGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCi0gICAgaWYg
KGluVmlld3BvcnQoKSkKLSAgICAgICAgcmV0dXJuIHBhcnNlVmlld3BvcnRQcm9wZXJ0eShwcm9w
SWQsIGltcG9ydGFudCk7Ci0jZW5kaWYKLQotICAgIGJvb2wgdmFsaWRQcmltaXRpdmUgPSBmYWxz
ZTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlZFZhbHVlOwotCi0gICAgc3dpdGNoIChwcm9w
SWQpIHsKLSAgICBjYXNlIENTU1Byb3BlcnR5U2l6ZTogICAgICAgICAgICAgICAgIC8vIDxsZW5n
dGg+ezEsMn0gfCBhdXRvIHwgWyA8cGFnZS1zaXplPiB8fCBbIHBvcnRyYWl0IHwgbGFuZHNjYXBl
XSBdCi0gICAgICAgIHJldHVybiBwYXJzZVNpemUocHJvcElkLCBpbXBvcnRhbnQpOwotCi0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVF1b3RlczogICAgICAgICAgICAgICAvLyBbPHN0cmluZz4gPHN0cmlu
Zz5dKyB8IG5vbmUgfCBpbmhlcml0Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vbmUpCi0g
ICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHJldHVybiBwYXJzZVF1b3Rlcyhwcm9wSWQsIGltcG9ydGFudCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQ1NTUHJvcGVydHlVbmljb2RlQmlkaTogLy8gbm9ybWFsIHwgZW1iZWQgfCBi
aWRpLW92ZXJyaWRlIHwgaXNvbGF0ZSB8IGlzb2xhdGUtb3ZlcnJpZGUgfCBwbGFpbnRleHQgfCBp
bmhlcml0Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbAotICAgICAgICAgICAgfHwg
aWQgPT0gQ1NTVmFsdWVFbWJlZAotICAgICAgICAgICAgfHwgaWQgPT0gQ1NTVmFsdWVCaWRpT3Zl
cnJpZGUKLSAgICAgICAgICAgIHx8IGlkID09IENTU1ZhbHVlV2Via2l0SXNvbGF0ZQotICAgICAg
ICAgICAgfHwgaWQgPT0gQ1NTVmFsdWVXZWJraXRJc29sYXRlT3ZlcnJpZGUKLSAgICAgICAgICAg
IHx8IGlkID09IENTU1ZhbHVlV2Via2l0UGxhaW50ZXh0KQotICAgICAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlDb250
ZW50OiAgICAgICAgICAgICAgLy8gWyA8c3RyaW5nPiB8IDx1cmk+IHwgPGNvdW50ZXI+IHwgYXR0
cihYKSB8IG9wZW4tcXVvdGUgfAotICAgICAgICAvLyBjbG9zZS1xdW90ZSB8IG5vLW9wZW4tcXVv
dGUgfCBuby1jbG9zZS1xdW90ZSBdKyB8IGluaGVyaXQKLSAgICAgICAgcmV0dXJuIHBhcnNlQ29u
dGVudChwcm9wSWQsIGltcG9ydGFudCk7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5QWx0OiAvLyBb
IDxzdHJpbmc+IHwgYXR0cihYKSBdCi0gICAgICAgIHJldHVybiBwYXJzZUFsdChwcm9wSWQsIGlt
cG9ydGFudCk7Ci0gICAgICAgICAgICAKLSAgICBjYXNlIENTU1Byb3BlcnR5Q2xpcDogICAgICAg
ICAgICAgICAgIC8vIDxzaGFwZT4gfCBhdXRvIHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0g
Q1NTVmFsdWVBdXRvKQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAg
ICBlbHNlIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUGFyc2Vy
VmFsdWU6OkZ1bmN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ2xpcFNoYXBlKHByb3BJ
ZCwgaW1wb3J0YW50KTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAvKiBTdGFydCBvZiBzdXBwb3J0
ZWQgQ1NTIHByb3BlcnRpZXMgd2l0aCB2YWxpZGF0aW9uLiBUaGlzIGlzIG5lZWRlZCBmb3IgcGFy
c2VTaG9ydGhhbmQgdG8gd29yawotICAgICAqIGNvcnJlY3RseSBhbmQgYWxsb3dzIG9wdGltaXph
dGlvbiBpbiBXZWJDb3JlOjphcHBseVJ1bGUoLi4pCi0gICAgICovCi0gICAgY2FzZSBDU1NQcm9w
ZXJ0eU92ZXJmbG93OiB7Ci0gICAgICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIHByb3BJ
ZCk7Ci0gICAgICAgIGlmIChudW0gIT0gMSB8fCAhcGFyc2VWYWx1ZShDU1NQcm9wZXJ0eU92ZXJm
bG93WSwgaW1wb3J0YW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBS
ZWZQdHI8Q1NTVmFsdWU+IG92ZXJmbG93WFZhbHVlOwotCi0gICAgICAgIC8vIEZJWE1FOiAtd2Vi
a2l0LXBhZ2VkLXggb3IgLXdlYmtpdC1wYWdlZC15IG9ubHkgYXBwbHkgdG8gb3ZlcmZsb3cteS4g
SWYgdGhpcyB2YWx1ZSBoYXMgYmVlbgotICAgICAgICAvLyBzZXQgdXNpbmcgdGhlIHNob3J0aGFu
ZCwgdGhlbiBmb3Igbm93IG92ZXJmbG93LXggd2lsbCBkZWZhdWx0IHRvIGF1dG8sIGJ1dCBvbmNl
IHdlIGltcGxlbWVudAotICAgICAgICAvLyBwYWdpbmF0aW9uIGNvbnRyb2xzLCBpdCBzaG91bGQg
ZGVmYXVsdCB0byBoaWRkZW4uIElmIHRoZSBvdmVyZmxvdy15IHZhbHVlIGlzIGFueXRoaW5nIGJ1
dAotICAgICAgICAvLyBwYWdlZC14IG9yIHBhZ2VkLXksIHRoZW4gb3ZlcmZsb3cteCBhbmQgb3Zl
cmZsb3cteSBzaG91bGQgaGF2ZSB0aGUgc2FtZSB2YWx1ZS4KLSAgICAgICAgaWYgKGlkID09IENT
U1ZhbHVlV2Via2l0UGFnZWRYIHx8IGlkID09IENTU1ZhbHVlV2Via2l0UGFnZWRZKQotICAgICAg
ICAgICAgb3ZlcmZsb3dYVmFsdWUgPSBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlQXV0byk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG92ZXJmbG93WFZhbHVl
ID0gbV9wYXJzZWRQcm9wZXJ0aWVzLmxhc3QoKS52YWx1ZSgpOwotICAgICAgICBhZGRQcm9wZXJ0
eShDU1NQcm9wZXJ0eU92ZXJmbG93WCwgV1RGTW92ZShvdmVyZmxvd1hWYWx1ZSksIGltcG9ydGFu
dCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGNhc2UgQ1NTUHJvcGVydHlU
ZXh0QWxpZ246Ci0gICAgICAgIC8vIGxlZnQgfCByaWdodCB8IGNlbnRlciB8IGp1c3RpZnkgfCAt
d2Via2l0LWxlZnQgfCAtd2Via2l0LXJpZ2h0IHwgLXdlYmtpdC1jZW50ZXIgfCAtd2Via2l0LW1h
dGNoLXBhcmVudAotICAgICAgICAvLyB8IHN0YXJ0IHwgZW5kIHwgaW5oZXJpdCB8IC13ZWJraXQt
YXV0byAoY29udmVydGVkIHRvIHN0YXJ0KQotICAgICAgICAvLyBOT1RFOiA8c3RyaW5nPiBpcyBu
b3Qgc3VwcG9ydGVkLgotICAgICAgICBpZiAoKGlkID49IENTU1ZhbHVlV2Via2l0QXV0byAmJiBp
ZCA8PSBDU1NWYWx1ZVdlYmtpdE1hdGNoUGFyZW50KSB8fCBpZCA9PSBDU1NWYWx1ZVN0YXJ0IHx8
IGlkID09IENTU1ZhbHVlRW5kKQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwot
ICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250V2VpZ2h0OiAgeyAvLyBu
b3JtYWwgfCBib2xkIHwgYm9sZGVyIHwgbGlnaHRlciB8IDEwMCB8IDIwMCB8IDMwMCB8IDQwMCB8
IDUwMCB8IDYwMCB8IDcwMCB8IDgwMCB8IDkwMCB8IGluaGVyaXQKLSAgICAgICAgaWYgKG1fdmFs
dWVMaXN0LT5zaXplKCkgIT0gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
cmV0dXJuIHBhcnNlRm9udFdlaWdodChpbXBvcnRhbnQpOwotICAgIH0KLQotICAgIGNhc2UgQ1NT
UHJvcGVydHlGb250U3ludGhlc2lzOiAvLyBub25lIHwgWyB3ZWlnaHQgfHwgc3R5bGUgXQotICAg
ICAgICByZXR1cm4gcGFyc2VGb250U3ludGhlc2lzKGltcG9ydGFudCk7Ci0KLSAgICBjYXNlIENT
U1Byb3BlcnR5Qm9yZGVyU3BhY2luZzogewotICAgICAgICBpZiAobnVtID09IDEpIHsKLSAgICAg
ICAgICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1Byb3BlcnR5Qm9yZGVyU3BhY2lu
Zyk7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJI
b3Jpem9udGFsU3BhY2luZywgaW1wb3J0YW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogdmFsdWUgPSBtX3BhcnNlZFByb3BlcnRpZXMubGFz
dCgpLnZhbHVlKCk7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEJv
cmRlclZlcnRpY2FsU3BhY2luZywgdmFsdWUsIGltcG9ydGFudCk7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChudW0gPT0gMikgewotICAgICAg
ICAgICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgQ1NTUHJvcGVydHlCb3JkZXJTcGFjaW5n
KTsKLSAgICAgICAgICAgIGlmICghcGFyc2VWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhv
cml6b250YWxTcGFjaW5nLCBpbXBvcnRhbnQpIHx8ICFwYXJzZVZhbHVlKENTU1Byb3BlcnR5V2Vi
a2l0Qm9yZGVyVmVydGljYWxTcGFjaW5nLCBpbXBvcnRhbnQpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhv
cml6b250YWxTcGFjaW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJWZXJ0aWNh
bFNwYWNpbmc6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0
aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRk5vbk5lZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6ICAgICAgICAvLyA8Y29sb3I+IHwgaW52ZXJ0IHwg
aW5oZXJpdAotICAgICAgICAvLyBPdXRsaW5lIGNvbG9yIGhhcyAiaW52ZXJ0IiBhcyBhZGRpdGlv
bmFsIGtleXdvcmQuCi0gICAgICAgIC8vIEFsc28sIHdlIHdhbnQgdG8gYWxsb3cgdGhlIHNwZWNp
YWwgZm9jdXMgY29sb3IgZXZlbiBpbiBzdHJpY3QgcGFyc2luZyBtb2RlLgotICAgICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVJbnZlcnQgfHwgaWQgPT0gQ1NTVmFsdWVXZWJraXRGb2N1c1JpbmdDb2xv
cikgewotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgRkFMTFRIUk9VR0g7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eUJhY2tncm91bmRDb2xvcjogLy8gPGNvbG9yPiB8IGluaGVyaXQKLSAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyVG9wQ29sb3I6IC8vIDxjb2xvcj4gfCBpbmhlcml0Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlclJpZ2h0Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNv
bG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3I6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEJvcmRlclN0YXJ0Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEJvcmRlckVuZENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCZWZvcmVD
b2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQWZ0ZXJDb2xvcjoKLSAgICBj
YXNlIENTU1Byb3BlcnR5Q29sb3I6IC8vIDxjb2xvcj4gfCBpbmhlcml0Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVRleHRMaW5lVGhyb3VnaENvbG9yOiAvLyBDU1MzIHRleHQgZGVjb3JhdGlvbiBjb2xv
cnMKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZUNvbG9yOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlUZXh0T3ZlcmxpbmVDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Q29sdW1uUnVs
ZUNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbkNvbG9yOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNDb2xvcjoKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VGV4dFN0cm9rZUNvbG9yOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVXZWJraXRUZXh0KQot
ICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOyAvLyBBbHdheXMgYWxsb3cgdGhpcywg
ZXZlbiB3aGVuIHN0cmljdCBwYXJzaW5nIGlzIG9uLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gc2luY2Ugd2UgdXNlIHRoaXMgaW4gb3VyIFVBIHNoZWV0cy4KLSAgICAg
ICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpCi0gICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKGlzVmFsaWRTeXN0ZW1Db2xvclZh
bHVlKGlkKSB8fCBpZCA9PSBDU1NWYWx1ZU1lbnUKLSAgICAgICAgICAgIHx8IChpZCA+PSBDU1NW
YWx1ZVdlYmtpdEZvY3VzUmluZ0NvbG9yICYmIGlkIDwgQ1NTVmFsdWVXZWJraXRUZXh0ICYmIGlu
UXVpcmtzTW9kZSgpKSkgewotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZUNvbG9yKCk7Ci0g
ICAgICAgICAgICBpZiAocGFyc2VkVmFsdWUpCi0gICAgICAgICAgICAgICAgbV92YWx1ZUxpc3Qt
Pm5leHQoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVy
dHlDdXJzb3I6IHsKLSAgICAgICAgLy8gR3JhbW1hciBkZWZpbmVkIGJ5IENTUzMgVUkgYW5kIG1v
ZGlmaWVkIGJ5IENTUzQgaW1hZ2VzOgotICAgICAgICAvLyBbIFs8aW1hZ2U+IFs8eD4gPHk+XT8s
XSoKLSAgICAgICAgLy8gWyBhdXRvIHwgY3Jvc3NoYWlyIHwgZGVmYXVsdCB8IHBvaW50ZXIgfCBw
cm9ncmVzcyB8IG1vdmUgfCBlLXJlc2l6ZSB8IG5lLXJlc2l6ZSB8Ci0gICAgICAgIC8vIG53LXJl
c2l6ZSB8IG4tcmVzaXplIHwgc2UtcmVzaXplIHwgc3ctcmVzaXplIHwgcy1yZXNpemUgfCB3LXJl
c2l6ZSB8IGV3LXJlc2l6ZSB8Ci0gICAgICAgIC8vIG5zLXJlc2l6ZSB8IG5lc3ctcmVzaXplIHwg
bndzZS1yZXNpemUgfCBjb2wtcmVzaXplIHwgcm93LXJlc2l6ZSB8IHRleHQgfCB3YWl0IHwgaGVs
cCB8Ci0gICAgICAgIC8vIHZlcnRpY2FsLXRleHQgfCBjZWxsIHwgY29udGV4dC1tZW51IHwgYWxp
YXMgfCBjb3B5IHwgbm8tZHJvcCB8IG5vdC1hbGxvd2VkIHwKLSAgICAgICAgLy8gem9vbS1pbiB8
IHpvb20tb3V0IHwgYWxsLXNjcm9sbCB8IC13ZWJraXQtZ3JhYiB8IC13ZWJraXQtZ3JhYmJpbmcg
fCAtd2Via2l0LXpvb20taW4gfAotICAgICAgICAvLyAtd2Via2l0LXpvb20tb3V0IF0gXSB8IGlu
aGVyaXQKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdDsKLSAgICAgICAgQ1NTUGFy
c2VyVmFsdWUqIHZhbHVlID0gJnZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCk7Ci0gICAgICAg
IHdoaWxlICh2YWx1ZSkgewotICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBpbWFnZTsKLSAg
ICAgICAgICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkg
ewotICAgICAgICAgICAgICAgIFN0cmluZyB1cmkgPSB2YWx1ZS0+c3RyaW5nOwotICAgICAgICAg
ICAgICAgIGlmICghdXJpLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICBpbWFnZSA9IENT
U0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTCh1cmkpKTsKLSNpZiBFTkFCTEUoTU9VU0Vf
Q1VSU09SX1NDQUxFKQotICAgICAgICAgICAgfSBlbHNlIGlmIChpc0ltYWdlU2V0RnVuY3Rpb25W
YWx1ZSgqdmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgaW1hZ2UgPSBwYXJzZUltYWdlU2V0KCk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFpbWFnZSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0jZW5kaWYKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgICAgICBWZWN0b3I8aW50PiBjb29yZHM7Ci0gICAgICAgICAgICB2YWx1ZSA9IG1fdmFs
dWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICB3aGlsZSAodmFsdWUgJiYgdmFsdWUtPnVuaXQg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpIHsKLSAgICAgICAgICAgICAgICBjb29y
ZHMuYXBwZW5kKGludCh2YWx1ZS0+ZlZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBt
X3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYm9vbCBoYXNI
b3RTcG90ID0gZmFsc2U7Ci0gICAgICAgICAgICBJbnRQb2ludCBob3RTcG90KC0xLCAtMSk7Ci0g
ICAgICAgICAgICBpbnQgbnJjb29yZHMgPSBjb29yZHMuc2l6ZSgpOwotICAgICAgICAgICAgaWYg
KG5yY29vcmRzID4gMCAmJiBucmNvb3JkcyAhPSAyKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIGlmIChucmNvb3JkcyA9PSAyKSB7Ci0gICAgICAgICAgICAgICAg
aGFzSG90U3BvdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaG90U3BvdCA9IEludFBvaW50KGNv
b3Jkc1swXSwgY29vcmRzWzFdKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFs
aXN0KQotICAgICAgICAgICAgICAgIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2Vw
YXJhdGVkKCk7Ci0KLSAgICAgICAgICAgIGlmIChpbWFnZSkKLSAgICAgICAgICAgICAgICBsaXN0
LT5hcHBlbmQoQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6Y3JlYXRlKGltYWdlLnJlbGVhc2VOb25OdWxs
KCksIGhhc0hvdFNwb3QsIGhvdFNwb3QpKTsKLQotICAgICAgICAgICAgaWYgKChpblN0cmljdE1v
ZGUoKSAmJiAhdmFsdWUpIHx8ICh2YWx1ZSAmJiAhKHZhbHVlLT51bml0ID09IENTU1BhcnNlclZh
bHVlOjpPcGVyYXRvciAmJiB2YWx1ZS0+aVZhbHVlID09ICcsJykpKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsg
Ly8gY29tbWEKLSAgICAgICAgfQotICAgICAgICBpZiAobGlzdCkgewotICAgICAgICAgICAgaWYg
KCF2YWx1ZSkgewotICAgICAgICAgICAgICAgIC8vIG5vIHZhbHVlIGFmdGVyIHVybCBsaXN0IChN
U0lFIDUgY29tcGF0aWJpbGl0eSkKLSAgICAgICAgICAgICAgICBpZiAobGlzdC0+bGVuZ3RoKCkg
IT0gMSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSBl
bHNlIGlmIChpblF1aXJrc01vZGUoKSAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVIYW5kKSAvLyBN
U0lFIDUgY29tcGF0aWJpbGl0eSA6LwotICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NW
YWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlUG9pbnRlcikpOwotICAgICAg
ICAgICAgZWxzZSBpZiAoKHZhbHVlLT5pZCA+PSBDU1NWYWx1ZUF1dG8gJiYgdmFsdWUtPmlkIDw9
IENTU1ZhbHVlV2Via2l0Wm9vbU91dCkgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQ29weSB8fCB2
YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChj
c3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCkpOwotICAgICAgICAg
ICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gV1RGTW92
ZShsaXN0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlKSB7
Ci0gICAgICAgICAgICBpZCA9IHZhbHVlLT5pZDsKLSAgICAgICAgICAgIGlmIChpblF1aXJrc01v
ZGUoKSAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVIYW5kKSB7Ci0gICAgICAgICAgICAgICAgLy8g
TVNJRSA1IGNvbXBhdGliaWxpdHkgOi8KLSAgICAgICAgICAgICAgICBpZCA9IENTU1ZhbHVlUG9p
bnRlcjsKLSAgICAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKCh2YWx1ZS0+aWQgPj0gQ1NTVmFsdWVBdXRvICYmIHZhbHVlLT5pZCA8PSBD
U1NWYWx1ZVdlYmtpdFpvb21PdXQpIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNvcHkgfHwgdmFs
dWUtPmlkID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSNpZiBFTkFCTEUoQ1VSU09SX1ZJU0lCSUxJVFkpCi0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEN1cnNvclZpc2liaWxpdHk6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1
dG8gfHwgaWQgPT0gQ1NTVmFsdWVBdXRvSGlkZSkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQXR0YWNobWVudDoKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEJsZW5k
TW9kZToKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENsaXA6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDbGlwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRC
YWNrZ3JvdW5kQ29tcG9zaXRlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRPcmlnaW46Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJhY2tncm91bmRPcmlnaW46Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91
bmRQb3NpdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWToKLSAgICBjYXNlIENTU1Byb3Bl
cnR5QmFja2dyb3VuZFNpemU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRT
aXplOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0OgotICAgIGNhc2UgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WDoKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZFJlcGVhdFk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDbGlwOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNYXNrQ29tcG9zaXRlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrSW1hZ2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW46Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFza1Bvc2l0aW9uWDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0
aW9uWToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1NpemU6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tTb3VyY2VUeXBlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXNrUmVwZWF0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdFk6Ci0gICAgewotICAgICAgICBSZWZQdHI8
Q1NTVmFsdWU+IHZhbDE7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsMjsKLSAgICAgICAg
Q1NTUHJvcGVydHlJRCBwcm9wSWQxLCBwcm9wSWQyOwotICAgICAgICBib29sIHJlc3VsdCA9IGZh
bHNlOwotICAgICAgICBpZiAocGFyc2VGaWxsUHJvcGVydHkocHJvcElkLCBwcm9wSWQxLCBwcm9w
SWQyLCB2YWwxLCB2YWwyKSkgewotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNob3J0aGFu
ZFNjb3BlPiBzaG9ydGhhbmRTY29wZTsKLSAgICAgICAgICAgIGlmIChwcm9wSWQgPT0gQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kUG9zaXRpb24gfHwKLSAgICAgICAgICAgICAgICBwcm9wSWQgPT0gQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0IHx8Ci0gICAgICAgICAgICAgICAgcHJvcElkID09IENT
U1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uIHx8Ci0gICAgICAgICAgICAgICAgcHJvcElkID09
IENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdCkgewotICAgICAgICAgICAgICAgIHNob3J0aGFu
ZFNjb3BlID0gc3RkOjptYWtlX3VuaXF1ZTxTaG9ydGhhbmRTY29wZT4odGhpcywgcHJvcElkKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZDEsIHZhbDEucmVs
ZWFzZU5vbk51bGwoKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIGlmICh2YWwyKQotICAgICAg
ICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZDIsIHZhbDIucmVsZWFzZU5vbk51bGwoKSwgaW1w
b3J0YW50KTsKLSAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAg
bV9pbXBsaWNpdFNob3J0aGFuZCA9IGZhbHNlOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IH0KLSAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2U6ICAgICAvLyA8dXJpPiB8IG5v
bmUgfCBpbmhlcml0Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlU291cmNlOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2U6Ci0gICAgICAgIGlmIChp
ZCA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gY3NzVmFsdWVQ
b29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwotICAgICAgICAgICAgbV92
YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlv
bi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKLSAgICAgICAg
ICAgIHBhcnNlZFZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKGNvbXBsZXRlVVJMKHZhbHVl
V2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuc3RyaW5nKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlTGlz
dC0+bmV4dCgpOwotICAgICAgICB9IGVsc2UgaWYgKGlzR2VuZXJhdGVkSW1hZ2VWYWx1ZSh2YWx1
ZVdpdGhDYWxjdWxhdGlvbikpIHsKLSAgICAgICAgICAgIGlmIChwYXJzZUdlbmVyYXRlZEltYWdl
KCptX3ZhbHVlTGlzdCwgcGFyc2VkVmFsdWUpKQotICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0
LT5uZXh0KCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9IGVsc2UgaWYgKGlzSW1hZ2VTZXRGdW5jdGlvblZhbHVlKHZhbHVlV2l0aENh
bGN1bGF0aW9uLnZhbHVlKCkpKSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlSW1h
Z2VTZXQoKTsKLSAgICAgICAgICAgIGlmICghcGFyc2VkVmFsdWUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tl
V2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVXaWR0aDogICAgICAgIC8vIDxib3Jk
ZXItd2lkdGg+IHwgaW5oZXJpdAotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aDog
ICAgIC8vLy8gPGJvcmRlci13aWR0aD4gfCBpbmhlcml0Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJv
cmRlclJpZ2h0V2lkdGg6ICAgLy8gICBXaGljaCBpcyBkZWZpbmVkIGFzCi0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoOiAgLy8gICB0aGluIHwgbWVkaXVtIHwgdGhpY2sgfCA8
bGVuZ3RoPgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGg6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEJvcmRlclN0YXJ0V2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEJvcmRlckVuZFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCZWZv
cmVXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQWZ0ZXJXaWR0aDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5Q29sdW1uUnVsZVdpZHRoOgotICAgICAgICBpZiAoaWQgPT0gQ1NT
VmFsdWVUaGluIHx8IGlkID09IENTU1ZhbHVlTWVkaXVtIHx8IGlkID09IENTU1ZhbHVlVGhpY2sp
Ci0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9u
LCBGTGVuZ3RoIHwgRk5vbk5lZyk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUxldHRlclNwYWNpbmc6ICAgICAgIC8vIG5vcm1hbCB8IDxsZW5ndGg+IHwgaW5oZXJpdAot
ICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwpCi0gICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0g
dmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoKTsKLSAgICAgICAgYnJl
YWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5V29yZFNwYWNpbmc6ICAgICAgICAgLy8gbm9ybWFs
IHwgPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCBpbmhlcml0Ci0gICAgICAgIGlmIChpZCA9PSBD
U1NWYWx1ZU5vcm1hbCkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVX
aXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCk7Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRJbmRlbnQ6Ci0gICAgICAgIHBhcnNlZFZhbHVlID0gcGFy
c2VUZXh0SW5kZW50KCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVBh
ZGRpbmdUb3A6ICAgICAgICAgIC8vLy8gPHBhZGRpbmctd2lkdGg+IHwgaW5oZXJpdAotICAgIGNh
c2UgQ1NTUHJvcGVydHlQYWRkaW5nUmlnaHQ6ICAgICAgICAvLyAgIFdoaWNoIGlzIGRlZmluZWQg
YXMKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ0JvdHRvbTogICAgICAgLy8gICA8bGVuZ3Ro
PiB8IDxwZXJjZW50YWdlPgotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nTGVmdDogICAgICAg
ICAvLy8vCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdTdGFydDoKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ0VuZDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
UGFkZGluZ0JlZm9yZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ0FmdGVyOgot
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENh
bGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSk7Ci0gICAgICAgIGJyZWFr
OwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eU1heFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXhMb2dpY2FsV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1heEhlaWdodDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWF4TG9naWNhbEhlaWdodDoKLSAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSAoaWQgPT0gQ1NTVmFsdWVOb25lIHx8IGlzVmFsaWRTaXplKHZhbHVlV2l0aENh
bGN1bGF0aW9uKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eU1pbldp
ZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNaW5Mb2dpY2FsV2lkdGg6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eU1pbkhlaWdodDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWluTG9n
aWNhbEhlaWdodDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSBpZCA9PSBDU1NWYWx1ZUF1dG8g
fHwgaXNWYWxpZFNpemUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgICAgICBicmVhazsKLQot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TG9n
aWNhbFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlIZWlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdExvZ2ljYWxIZWlnaHQ6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKGlkID09
IENTU1ZhbHVlQXV0byB8fCBpc1ZhbGlkU2l6ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbikpOwotICAg
ICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U2l6ZToKLSAgICAgICAgcmV0
dXJuIHBhcnNlRm9udFNpemUoaW1wb3J0YW50KTsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlWZXJ0
aWNhbEFsaWduOgotICAgICAgICAvLyBiYXNlbGluZSB8IHN1YiB8IHN1cGVyIHwgdG9wIHwgdGV4
dC10b3AgfCBtaWRkbGUgfCBib3R0b20gfCB0ZXh0LWJvdHRvbSB8Ci0gICAgICAgIC8vIDxwZXJj
ZW50YWdlPiB8IDxsZW5ndGg+IHwgaW5oZXJpdAotCi0gICAgICAgIGlmIChpZCA+PSBDU1NWYWx1
ZUJhc2VsaW5lICYmIGlkIDw9IENTU1ZhbHVlV2Via2l0QmFzZWxpbmVNaWRkbGUpCi0gICAgICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZh
bGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24s
IEZMZW5ndGggfCBGUGVyY2VudCkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3R0b206ICAgICAgICAgICAgICAgLy8gPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCBh
dXRvIHwgaW5oZXJpdAotICAgIGNhc2UgQ1NTUHJvcGVydHlMZWZ0OiAgICAgICAgICAgICAgICAg
Ly8gPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCBhdXRvIHwgaW5oZXJpdAotICAgIGNhc2UgQ1NT
UHJvcGVydHlSaWdodDogICAgICAgICAgICAgICAgLy8gPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4g
fCBhdXRvIHwgaW5oZXJpdAotICAgIGNhc2UgQ1NTUHJvcGVydHlUb3A6ICAgICAgICAgICAgICAg
ICAgLy8gPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCBhdXRvIHwgaW5oZXJpdAotICAgIGNhc2Ug
Q1NTUHJvcGVydHlNYXJnaW5Ub3A6ICAgICAgICAgICAvLy8vIDxtYXJnaW4td2lkdGg+IHwgaW5o
ZXJpdAotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5SaWdodDogICAgICAgICAvLyAgIFdoaWNo
IGlzIGRlZmluZWQgYXMKLSAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luQm90dG9tOiAgICAgICAg
Ly8gICA8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiB8IGF1dG8gfCBpbmhlcml0Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eU1hcmdpbkxlZnQ6ICAgICAgICAgIC8vLy8KLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFyZ2luU3RhcnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkVuZDoK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXJnaW5BZnRlcjoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0bykK
LSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxj
dWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVpJbmRleDogICAgICAgICAgICAgIC8vIGF1dG8gfCA8aW50ZWdlcj4gfCBp
bmhlcml0Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICB2YWxp
ZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2Vy
LCBDU1NRdWlya3NNb2RlKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0
eU9ycGhhbnM6IC8vIDxpbnRlZ2VyPiB8IGluaGVyaXQgfCBhdXRvIChXZSd2ZSBhZGRlZCBzdXBw
b3J0IGZvciBhdXRvIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSkKLSAgICBjYXNlIENTU1By
b3BlcnR5V2lkb3dzOiAvLyA8aW50ZWdlcj4gfCBpbmhlcml0IHwgYXV0byAoRGl0dG8pCi0gICAg
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAm
JiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQb3NpdGl2ZUludGVnZXIsIENT
U1F1aXJrc01vZGUpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5TGlu
ZUhlaWdodDoKLSAgICAgICAgcmV0dXJuIHBhcnNlTGluZUhlaWdodChpbXBvcnRhbnQpOwotICAg
IGNhc2UgQ1NTUHJvcGVydHlDb3VudGVySW5jcmVtZW50OiAgICAvLyBbIDxpZGVudGlmaWVyPiA8
aW50ZWdlcj4/IF0rIHwgbm9uZSB8IGluaGVyaXQKLSAgICAgICAgaWYgKGlkICE9IENTU1ZhbHVl
Tm9uZSkKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUNvdW50ZXIocHJvcElkLCAxLCBpbXBvcnRh
bnQpOwotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ1NTUHJvcGVydHlDb3VudGVyUmVzZXQ6ICAgICAgICAvLyBbIDxpZGVudGlmaWVyPiA8
aW50ZWdlcj4/IF0rIHwgbm9uZSB8IGluaGVyaXQKLSAgICAgICAgaWYgKGlkICE9IENTU1ZhbHVl
Tm9uZSkKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUNvdW50ZXIocHJvcElkLCAwLCBpbXBvcnRh
bnQpOwotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ1NTUHJvcGVydHlGb250RmFtaWx5OgotICAgICAgICAvLyBbWyA8ZmFtaWx5LW5hbWU+
IHwgPGdlbmVyaWMtZmFtaWx5PiBdLF0qIFs8ZmFtaWx5LW5hbWU+IHwgPGdlbmVyaWMtZmFtaWx5
Pl0gfCBpbmhlcml0Ci0gICAgewotICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlRm9udEZhbWls
eSgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VGV4dERlY29yYXRpb246Ci0gICAgICAgIC8vIFsgPHRleHQtZGVjb3JhdGlvbi1saW5lPiB8fCA8
dGV4dC1kZWNvcmF0aW9uLXN0eWxlPiB8fCA8dGV4dC1kZWNvcmF0aW9uLWNvbG9yPiBdIHwgaW5o
ZXJpdAotICAgICAgICByZXR1cm4gcGFyc2VTaG9ydGhhbmQoQ1NTUHJvcGVydHlXZWJraXRUZXh0
RGVjb3JhdGlvbiwgd2Via2l0VGV4dERlY29yYXRpb25TaG9ydGhhbmQoKSwgaW1wb3J0YW50KTsK
LQotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbjoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3Q6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFRleHREZWNvcmF0aW9uTGluZToKLSAgICAgICAgLy8gbm9uZSB8IFsgdW5kZXJsaW5lIHx8
IG92ZXJsaW5lIHx8IGxpbmUtdGhyb3VnaCB8fCBibGluayBdIHwgaW5oZXJpdAotICAgICAgICBy
ZXR1cm4gcGFyc2VUZXh0RGVjb3JhdGlvbihwcm9wSWQsIGltcG9ydGFudCk7Ci0KLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25TdHlsZToKLSAgICAgICAgLy8gc29saWQg
fCBkb3VibGUgfCBkb3R0ZWQgfCBkYXNoZWQgfCB3YXZ5Ci0gICAgICAgIGlmIChpZCA9PSBDU1NW
YWx1ZVNvbGlkIHx8IGlkID09IENTU1ZhbHVlRG91YmxlIHx8IGlkID09IENTU1ZhbHVlRG90dGVk
IHx8IGlkID09IENTU1ZhbHVlRGFzaGVkIHx8IGlkID09IENTU1ZhbHVlV2F2eSkKLSAgICAgICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25Ta2lwOgotICAgICAgICAvLyBub25lIHwgWyBv
YmplY3RzIHx8IHNwYWNlcyB8fCBpbmsgfHwgZWRnZXMgfHwgYm94LWRlY29yYXRpb24gXQotICAg
ICAgICByZXR1cm4gcGFyc2VUZXh0RGVjb3JhdGlvblNraXAoaW1wb3J0YW50KTsKLQotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0VW5kZXJsaW5lUG9zaXRpb246Ci0gICAgICAgIC8vIGF1
dG8gfCBhbHBoYWJldGljIHwgdW5kZXIKLSAgICAgICAgcmV0dXJuIHBhcnNlVGV4dFVuZGVybGlu
ZVBvc2l0aW9uKGltcG9ydGFudCk7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5Wm9vbToKLSAgICAg
ICAgLy8gbm9ybWFsIHwgcmVzZXQgfCBkb2N1bWVudCB8IDxudW1iZXI+IHwgPHBlcmNlbnRhZ2U+
IHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgaWQgPT0gQ1NT
VmFsdWVSZXNldCB8fCBpZCA9PSBDU1NWYWx1ZURvY3VtZW50KQotICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwg
RlBlcmNlbnQgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IAotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0Wm9vbToKLSAgICAgICAgLy8gbm9ybWFs
IHwgcmVzZXQKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsIHx8IGlkID09IENTU1Zh
bHVlUmVzZXQpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVNyYzogLy8gT25seSB1c2VkIHdpdGhpbiBAZm9u
dC1mYWNlIGFuZCBALXdlYmtpdC1maWx0ZXIsIHNvIGNhbm5vdCB1c2UgaW5oZXJpdCB8IGluaXRp
YWwgb3IgYmUgIWltcG9ydGFudC4gVGhpcyBpcyBhIGxpc3Qgb2YgdXJscyBvciBsb2NhbCByZWZl
cmVuY2VzLgotICAgICAgICByZXR1cm4gcGFyc2VGb250RmFjZVNyYygpOwotCi0gICAgY2FzZSBD
U1NQcm9wZXJ0eVVuaWNvZGVSYW5nZToKLSAgICAgICAgcmV0dXJuIHBhcnNlRm9udEZhY2VVbmlj
b2RlUmFuZ2UoKTsKLQotICAgIC8qIENTUzMgcHJvcGVydGllcyAqLwotCi0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlckltYWdlOiB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gcmVzdWx0Owot
ICAgICAgICByZXR1cm4gcGFyc2VCb3JkZXJJbWFnZShwcm9wSWQsIHJlc3VsdCwgaW1wb3J0YW50
KTsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckltYWdlOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2U6IHsKLSAgICAgICAgUmVmUHRyPENTU1Zh
bHVlPiByZXN1bHQ7Ci0gICAgICAgIGlmIChwYXJzZUJvcmRlckltYWdlKHByb3BJZCwgcmVzdWx0
KSkgewotICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBXVEZNb3ZlKHJlc3VsdCksIGlt
cG9ydGFudCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlT3V0c2V0OgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VPdXRzZXQ6IHsKLSAgICAgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiByZXN1bHQ7Ci0gICAgICAgIGlmIChwYXJzZUJvcmRlcklt
YWdlT3V0c2V0KHJlc3VsdCkpIHsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RG
TW92ZShyZXN1bHQpLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJ
bWFnZVJlcGVhdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlUmVwZWF0
OiB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gcmVzdWx0OwotICAgICAgICBpZiAocGFyc2VC
b3JkZXJJbWFnZVJlcGVhdChyZXN1bHQpKSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9w
SWQsIFdURk1vdmUocmVzdWx0KSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVySW1hZ2VTbGljZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdl
U2xpY2U6IHsKLSAgICAgICAgUmVmUHRyPENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZT4gcmVzdWx0
OwotICAgICAgICBpZiAocGFyc2VCb3JkZXJJbWFnZVNsaWNlKHByb3BJZCwgcmVzdWx0KSkgewot
ICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBXVEZNb3ZlKHJlc3VsdCksIGltcG9ydGFu
dCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlV2lkdGg6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVdpZHRoOiB7Ci0gICAgICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gcmVzdWx0OwotICAgICAgICBpZiAocGFyc2VCb3JkZXJJbWFnZVdpZHRo
KHJlc3VsdCkpIHsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZShyZXN1
bHQpLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BSaWdodFJh
ZGl1czoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wTGVmdFJhZGl1czoKLSAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tTGVmdFJhZGl1czoKLSAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6IHsKLSAgICAgICAgaWYgKG51bSAhPSAxICYmIG51bSAh
PSAyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwg
Rk5vbk5lZyk7Ci0gICAgICAgIGlmICghdmFsaWRQcmltaXRpdmUpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8gcGFyc2VkVmFsdWUxID0gY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZTI7Ci0gICAgICAgIGlmIChudW0gPT0gMikgewotICAgICAg
ICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gbmV4dFZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3Zh
bHVlTGlzdC0+bmV4dCgpKTsKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVV
bml0KG5leHRWYWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5l
Zyk7Ci0gICAgICAgICAgICBpZiAoIXZhbGlkUHJpbWl0aXZlKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlMiA9IGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZShuZXh0VmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIHBhcnNlZFZhbHVlMiA9IHBhcnNlZFZhbHVlMS5wdHIoKTsKLQotICAgICAgICBh
ZGRQcm9wZXJ0eShwcm9wSWQsIGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihXVEZNb3ZlKHBhcnNl
ZFZhbHVlMSksIHBhcnNlZFZhbHVlMi5yZWxlYXNlTm9uTnVsbCgpKSwgaW1wb3J0YW50KTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlUYWJTaXplOgot
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlv
biwgRkludGVnZXIgfCBGTm9uTmVnKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEFzcGVjdFJhdGlvOgotICAgICAgICByZXR1cm4gcGFyc2VBc3BlY3RSYXRpbyhp
bXBvcnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSYWRpdXM6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEJvcmRlclJhZGl1czoKLSAgICAgICAgcmV0dXJuIHBhcnNlQm9yZGVy
UmFkaXVzKHByb3BJZCwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZU9m
ZnNldDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZMZW5ndGgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5
VGV4dFNoYWRvdzogLy8gQ1NTMiBwcm9wZXJ0eSwgZHJvcHBlZCBpbiBDU1MyLjEsIGJhY2sgaW4g
Q1NTMywgc28gdHJlYXQgYXMgQ1NTMwotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3hTaGFkb3c6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdzoKLSAgICAgICAgaWYgKGlkID09IENT
U1ZhbHVlTm9uZSkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBzaGFkb3dWYWx1ZUxpc3Qg
PSBwYXJzZVNoYWRvdygqbV92YWx1ZUxpc3QsIHByb3BJZCk7Ci0gICAgICAgICAgICBpZiAoc2hh
ZG93VmFsdWVMaXN0KSB7Ci0gICAgICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBzaGFk
b3dWYWx1ZUxpc3QucmVsZWFzZU5vbk51bGwoKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgICAg
ICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRJbml0aWFsTGV0dGVyOiB7Ci0gICAg
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gdHJ1ZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAobnVtICE9IDEgJiYgbnVt
ICE9IDIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQb3NpdGl2ZUlu
dGVnZXIpOwotICAgICAgICAgICAgaWYgKCF2YWxpZFByaW1pdGl2ZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBhdXRvIGhlaWdodCA9IGNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IHBvc2l0aW9uOwotICAgICAgICAgICAgaWYgKG51bSA9PSAyKSB7
Ci0gICAgICAgICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gbmV4dFZhbHVlV2l0aENhbGN1
bGF0aW9uKCptX3ZhbHVlTGlzdC0+bmV4dCgpKTsKLSAgICAgICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHZhbGlkYXRlVW5pdChuZXh0VmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQb3NpdGl2ZUlu
dGVnZXIpOwotICAgICAgICAgICAgICAgIGlmICghdmFsaWRQcmltaXRpdmUpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IGNyZWF0
ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShuZXh0VmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcG9zaXRpb24gPSBoZWlnaHQucHRyKCk7Ci0g
ICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihw
b3NpdGlvbi5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKGhlaWdodCkpLCBpbXBvcnRhbnQpOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hSZWZsZWN0OgotICAgICAgICBpZiAoaWQg
PT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VSZWZsZWN0KHByb3BJZCwgaW1wb3J0
YW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU9wYWNpdHk6Ci0gICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBG
TnVtYmVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveEZs
ZXg6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1
bGF0aW9uLCBGTnVtYmVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEJveEZsZXhHcm91cDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQo
dmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hPcmRpbmFsR3Jv
dXA6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1
bGF0aW9uLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpICYmIHZhbHVlV2l0aENh
bGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1By
b3BlcnR5RmlsdGVyOgotI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyOgotI2VuZGlmCi0gICAgICAgIGlmIChpZCA9PSBD
U1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gY3VyclZhbHVlOwotICAg
ICAgICAgICAgaWYgKCFwYXJzZUZpbHRlcigqbV92YWx1ZUxpc3QsIGN1cnJWYWx1ZSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElk
LCBXVEZNb3ZlKGN1cnJWYWx1ZSksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5H
KQotICAgIGNhc2UgQ1NTUHJvcGVydHlNaXhCbGVuZE1vZGU6Ci0gICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUlzb2xhdGlv
bjoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLSNlbmRp
ZgotICAgIGNhc2UgQ1NTUHJvcGVydHlGbGV4OiB7Ci0gICAgICAgIFNob3J0aGFuZFNjb3BlIHNj
b3BlKHRoaXMsIHByb3BJZCk7Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAg
ICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5RmxleEdyb3csIGNzc1ZhbHVlUG9vbC5j
cmVhdGVWYWx1ZSgwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiksIGltcG9ydGFudCk7
Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZsZXhTaHJpbmssIGNzc1ZhbHVl
UG9vbC5jcmVhdGVWYWx1ZSgwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiksIGltcG9y
dGFudCk7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZsZXhCYXNpcywgY3Nz
VmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pLCBpbXBvcnRhbnQp
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHBh
cnNlRmxleCgqbV92YWx1ZUxpc3QsIGltcG9ydGFudCk7Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJv
cGVydHlGbGV4QmFzaXM6Ci0gICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IGludHJpbnNpYyBkaW1l
bnNpb25zIHRvby4KLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgICAg
IHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSAoIWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxl
bmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENT
U1Byb3BlcnR5RmxleEdyb3c6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZsZXhTaHJpbms6Ci0gICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBG
TnVtYmVyIHwgRk5vbk5lZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlP
cmRlcjoKLSAgICAgICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRklu
dGVnZXIsIENTU1N0cmljdE1vZGUpKSB7Ci0gICAgICAgICAgICAvLyBXZSByZXN0cmljdCB0aGUg
c21hbGxlc3QgdmFsdWUgdG8gaW50IG1pbiArIDIgYmVjYXVzZSB3ZSB1c2UgaW50IG1pbiBhbmQg
aW50IG1pbiArIDEgYXMgc3BlY2lhbCB2YWx1ZXMgaW4gYSBoYXNoIHNldC4KLSAgICAgICAgICAg
IGRvdWJsZSByZXN1bHQgPSBzdGQ6Om1heDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
Pjo6bWluKCkgKyAyLCBwYXJzZWREb3VibGUodmFsdWVXaXRoQ2FsY3VsYXRpb24pKTsKLSAgICAg
ICAgICAgIHBhcnNlZFZhbHVlID0gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHJlc3VsdCwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5l
eHQoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFycXVlZToKLSAgICAgICAgcmV0dXJuIHBhcnNlU2hvcnRoYW5kKHByb3BJZCwgd2Via2l0
TWFycXVlZVNob3J0aGFuZCgpLCBpbXBvcnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXJxdWVlSW5jcmVtZW50OgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVTbWFsbCB8fCBp
ZCA9PSBDU1NWYWx1ZUxhcmdlIHx8IGlkID09IENTU1ZhbHVlTWVkaXVtKQotICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQ
ZXJjZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1
ZWVSZXBldGl0aW9uOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKLSAgICAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRl
Z2VyIHwgRk5vbk5lZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXJxdWVlU3BlZWQ6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCBpZCA9
PSBDU1NWYWx1ZVNsb3cgfHwgaWQgPT0gQ1NTVmFsdWVGYXN0KQotICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRlRpbWUgfCBGSW50ZWdlciB8
IEZOb25OZWcpOwotICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCi0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsb3dJbnRvOgotICAgICAgICByZXR1cm4gcGFyc2VGbG93
VGhyZWFkKHByb3BJZCwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rmxv
d0Zyb206Ci0gICAgICAgIHJldHVybiBwYXJzZVJlZ2lvblRocmVhZChwcm9wSWQsIGltcG9ydGFu
dCk7Ci0jZW5kaWYKLSAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNmb3JtOgotICAgICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IHRyYW5zZm9y
bVZhbHVlID0gcGFyc2VUcmFuc2Zvcm0oKSkgewotICAgICAgICAgICAgICAgIGFkZFByb3BlcnR5
KHByb3BJZCwgdHJhbnNmb3JtVmFsdWUucmVsZWFzZU5vbk51bGwoKSwgaW1wb3J0YW50KTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3Bl
cnR5VHJhbnNmb3JtT3JpZ2luOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5Y
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5ZOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlUcmFuc2Zvcm1PcmlnaW5aOiB7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gdmFsMTsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWwyOwotICAgICAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHZhbDM7Ci0gICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcElkMSwg
cHJvcElkMiwgcHJvcElkMzsKLSAgICAgICAgaWYgKHBhcnNlVHJhbnNmb3JtT3JpZ2luKHByb3BJ
ZCwgcHJvcElkMSwgcHJvcElkMiwgcHJvcElkMywgdmFsMSwgdmFsMiwgdmFsMykpIHsKLSAgICAg
ICAgICAgIGFkZFByb3BlcnR5KHByb3BJZDEsIFdURk1vdmUodmFsMSksIGltcG9ydGFudCk7Ci0g
ICAgICAgICAgICBpZiAodmFsMikKLSAgICAgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQy
LCBXVEZNb3ZlKHZhbDIpLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgaWYgKHZhbDMpCi0gICAg
ICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkMywgV1RGTW92ZSh2YWwzKSwgaW1wb3J0YW50
KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBlcnNwZWN0aXZlOgotICAgICAgICBp
ZiAoaWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVl
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIEFjY2VwdGluZyB2YWx1ZWxlc3MgbnVt
YmVycyBpcyBhIHF1aXJrIG9mIHRoZSAtd2Via2l0IHByZWZpeGVkIHZlcnNpb24gb2YgdGhlIHBy
b3BlcnR5LgotICAgICAgICAgICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlv
biwgRk51bWJlciB8IEZMZW5ndGggfCBGTm9uTmVnKSkgewotICAgICAgICAgICAgICAgIGFkZFBy
b3BlcnR5KHByb3BJZCwgY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1
bGF0aW9uKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5
UGVyc3BlY3RpdmVPcmlnaW46Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBlcnNwZWN0aXZlT3JpZ2lu
WDoKLSAgICBjYXNlIENTU1Byb3BlcnR5UGVyc3BlY3RpdmVPcmlnaW5ZOiB7Ci0gICAgICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsMTsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiB2YWwyOwotICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BJZDEsIHByb3BJZDI7Ci0g
ICAgICAgIGlmIChwYXJzZVBlcnNwZWN0aXZlT3JpZ2luKHByb3BJZCwgcHJvcElkMSwgcHJvcElk
MiwgdmFsMSwgdmFsMikpIHsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZDEsIFdURk1v
dmUodmFsMSksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICBpZiAodmFsMikKLSAgICAgICAgICAg
ICAgICBhZGRQcm9wZXJ0eShwcm9wSWQyLCBXVEZNb3ZlKHZhbDIpLCBpbXBvcnRhbnQpOwotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5QW5pbWF0aW9uRGVsYXk6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUFuaW1hdGlvbkRpcmVjdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5QW5pbWF0aW9u
RHVyYXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvbkZpbGxNb2RlOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlBbmltYXRpb25OYW1lOgotICAgIGNhc2UgQ1NTUHJvcGVydHlBbmltYXRp
b25QbGF5U3RhdGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlBbmltYXRpb25UaW1pbmdGdW5jdGlvbjoKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGVsYXk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEFuaW1hdGlvbkRpcmVjdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0
aW9uRHVyYXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkZpbGxNb2Rl
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25OYW1lOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRBbmltYXRpb25QbGF5U3RhdGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRB
bmltYXRpb25UaW1pbmdGdW5jdGlvbjoKLSNpZiBFTkFCTEUoQ1NTX0FOSU1BVElPTlNfTEVWRUxf
MikKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uVHJpZ2dlcjoKLSNlbmRpZgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2l0aW9uRGVsYXk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVRyYW5zaXRpb25EdXJhdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNpdGlvblRpbWlu
Z0Z1bmN0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2l0aW9uUHJvcGVydHk6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EZWxheToKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
cmFuc2l0aW9uVGltaW5nRnVuY3Rpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5z
aXRpb25Qcm9wZXJ0eTogewotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbDsKLSAgICAgICAg
QW5pbWF0aW9uUGFyc2VDb250ZXh0IGNvbnRleHQ7Ci0gICAgICAgIGlmIChwYXJzZUFuaW1hdGlv
blByb3BlcnR5KHByb3BJZCwgdmFsLCBjb250ZXh0KSkgewotICAgICAgICAgICAgYWRkUHJvcGVy
dHkocHJvcElkLCBXVEZNb3ZlKHZhbCksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNhc2Ug
Q1NTUHJvcGVydHlKdXN0aWZ5Q29udGVudDoKLSAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZUNv
bnRlbnREaXN0cmlidXRpb25PdmVyZmxvd1Bvc2l0aW9uKCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ1NTUHJvcGVydHlKdXN0aWZ5U2VsZjoKLSAgICAgICAgcmV0dXJuIHBhcnNlSXRlbVBv
c2l0aW9uT3ZlcmZsb3dQb3NpdGlvbihwcm9wSWQsIGltcG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUp1c3RpZnlJdGVtczoKLSAgICAgICAgaWYgKHBhcnNlTGVnYWN5UG9zaXRpb24ocHJv
cElkLCBpbXBvcnRhbnQpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIG1fdmFs
dWVMaXN0LT5zZXRDdXJyZW50SW5kZXgoMCk7Ci0gICAgICAgIHJldHVybiBwYXJzZUl0ZW1Qb3Np
dGlvbk92ZXJmbG93UG9zaXRpb24ocHJvcElkLCBpbXBvcnRhbnQpOwotI2lmIEVOQUJMRShDU1Nf
R1JJRF9MQVlPVVQpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUdyaWRBdXRvQ29sdW1uczoKLSAgICBj
YXNlIENTU1Byb3BlcnR5R3JpZEF1dG9Sb3dzOgotICAgICAgICBpZiAoIWlzQ1NTR3JpZExheW91
dEVuYWJsZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcGFyc2VkVmFs
dWUgPSBwYXJzZUdyaWRUcmFja0xpc3QoR3JpZEF1dG8pOwotICAgICAgICBicmVhazsKLQotICAg
IGNhc2UgQ1NTUHJvcGVydHlHcmlkVGVtcGxhdGVDb2x1bW5zOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlHcmlkVGVtcGxhdGVSb3dzOgotICAgICAgICBpZiAoIWlzQ1NTR3JpZExheW91dEVuYWJsZWQo
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJz
ZUdyaWRUcmFja0xpc3QoR3JpZFRlbXBsYXRlKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IENTU1Byb3BlcnR5R3JpZENvbHVtblN0YXJ0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlHcmlkQ29s
dW1uRW5kOgotICAgIGNhc2UgQ1NTUHJvcGVydHlHcmlkUm93U3RhcnQ6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUdyaWRSb3dFbmQ6Ci0gICAgICAgIGlmICghaXNDU1NHcmlkTGF5b3V0RW5hYmxlZCgp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNl
R3JpZFBvc2l0aW9uKCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUdy
aWRDb2x1bW5HYXA6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUdyaWRSb3dHYXA6Ci0gICAgICAgIGlm
ICghaXNDU1NHcmlkTGF5b3V0RW5hYmxlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlv
biwgRkxlbmd0aCB8IEZOb25OZWcpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJv
cGVydHlHcmlkR2FwOgotICAgICAgICBpZiAoIWlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHBhcnNlR3JpZEdhcFNob3J0
aGFuZChpbXBvcnRhbnQpOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUdyaWRDb2x1bW46Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUdyaWRSb3c6Ci0gICAgICAgIGlmICghaXNDU1NHcmlkTGF5b3V0RW5h
YmxlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gcGFyc2VH
cmlkSXRlbVBvc2l0aW9uU2hvcnRoYW5kKHByb3BJZCwgaW1wb3J0YW50KTsKLQotICAgIGNhc2Ug
Q1NTUHJvcGVydHlHcmlkVGVtcGxhdGU6Ci0gICAgICAgIGlmICghaXNDU1NHcmlkTGF5b3V0RW5h
YmxlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gcGFyc2VH
cmlkVGVtcGxhdGVTaG9ydGhhbmQoaW1wb3J0YW50KTsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlH
cmlkOgotICAgICAgICBpZiAoIWlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHBhcnNlR3JpZFNob3J0aGFuZChpbXBvcnRh
bnQpOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUdyaWRBcmVhOgotICAgICAgICBpZiAoIWlzQ1NT
R3JpZExheW91dEVuYWJsZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
cmV0dXJuIHBhcnNlR3JpZEFyZWFTaG9ydGhhbmQoaW1wb3J0YW50KTsKLQotICAgIGNhc2UgQ1NT
UHJvcGVydHlHcmlkVGVtcGxhdGVBcmVhczoKLSAgICAgICAgaWYgKCFpc0NTU0dyaWRMYXlvdXRF
bmFibGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHBhcnNlZFZhbHVl
ID0gcGFyc2VHcmlkVGVtcGxhdGVBcmVhcygpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENT
U1Byb3BlcnR5R3JpZEF1dG9GbG93OgotICAgICAgICBpZiAoIWlzQ1NTR3JpZExheW91dEVuYWJs
ZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcGFyc2VkVmFsdWUgPSBw
YXJzZUdyaWRBdXRvRmxvdygqbV92YWx1ZUxpc3QpOwotICAgICAgICBicmVhazsKLSNlbmRpZiAv
KiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKSAqLwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXJnaW5Db2xsYXBzZTogewotICAgICAgICBpZiAobnVtID09IDEpIHsKLSAgICAgICAgICAgIFNo
b3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQ29sbGFwc2Up
OwotICAgICAgICAgICAgaWYgKCFwYXJzZVZhbHVlKHdlYmtpdE1hcmdpbkNvbGxhcHNlU2hvcnRo
YW5kKCkucHJvcGVydGllcygpWzBdLCBpbXBvcnRhbnQpKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGll
cy5sYXN0KCkudmFsdWUoKTsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KHdlYmtpdE1hcmdpbkNv
bGxhcHNlU2hvcnRoYW5kKCkucHJvcGVydGllcygpWzFdLCB2YWx1ZSwgaW1wb3J0YW50KTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG51bSA9
PSAyKSB7Ci0gICAgICAgICAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBDU1NQcm9wZXJ0
eVdlYmtpdE1hcmdpbkNvbGxhcHNlKTsKLSAgICAgICAgICAgIGlmICghcGFyc2VWYWx1ZSh3ZWJr
aXRNYXJnaW5Db2xsYXBzZVNob3J0aGFuZCgpLnByb3BlcnRpZXMoKVswXSwgaW1wb3J0YW50KSB8
fCAhcGFyc2VWYWx1ZSh3ZWJraXRNYXJnaW5Db2xsYXBzZVNob3J0aGFuZCgpLnByb3BlcnRpZXMo
KVsxXSwgaW1wb3J0YW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0TGluZVRocm91Z2hXaWR0aDoKLSAgICBjYXNlIENT
U1Byb3BlcnR5VGV4dE92ZXJsaW5lV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRl
cmxpbmVXaWR0aDoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0byB8fCBpZCA9PSBDU1NW
YWx1ZU5vcm1hbCB8fCBpZCA9PSBDU1NWYWx1ZVRoaW4gfHwKLSAgICAgICAgICAgIGlkID09IENT
U1ZhbHVlTWVkaXVtIHx8IGlkID09IENTU1ZhbHVlVGhpY2spCi0gICAgICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gIWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZM
ZW5ndGggfCBGUGVyY2VudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlD
b2x1bW5Db3VudDoKLSAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZUNvbHVtbkNvdW50KCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5HYXA6IC8vIG5vcm1hbCB8
IDxsZW5ndGg+Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCkKLSAgICAgICAgICAg
IHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBG
Tm9uTmVnKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVt
bkF4aXM6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUhvcml6b250YWwgfHwgaWQgPT0gQ1NT
VmFsdWVWZXJ0aWNhbCB8fCBpZCA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1
bW5Qcm9ncmVzc2lvbjoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsIHx8IGlkID09
IENTU1ZhbHVlUmV2ZXJzZSkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbHVtblNwYW46IC8vIG5vbmUgfCBh
bGwgfCAxICh3aWxsIGJlIGRyb3BwZWQgaW4gdGhlIHVucHJlZml4ZWQgcHJvcGVydHkpCi0gICAg
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZUFsbCB8fCBpZCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAg
ICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKHZhbGlkYXRlVW5p
dCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZOb25OZWcpICYmIHBhcnNlZERvdWJs
ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbikgPT0gMSkgewotICAgICAgICAgICAgYWRkUHJvcGVydHko
Q1NTUHJvcGVydHlDb2x1bW5TcGFuLCBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoMSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNv
bHVtbldpZHRoOiAvLyBhdXRvIHwgPGxlbmd0aD4KLSAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJz
ZUNvbHVtbldpZHRoKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlPYmpl
Y3RQb3NpdGlvbjogewotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbDE7Ci0g
ICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsMjsKLSAgICAgICAgcGFyc2VGaWxs
UG9zaXRpb24oKm1fdmFsdWVMaXN0LCB2YWwxLCB2YWwyKTsKLSAgICAgICAgaWYgKHZhbDEpIHsK
LSAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5T2JqZWN0UG9zaXRpb24sIGNyZWF0
ZVByaW1pdGl2ZVZhbHVlUGFpcih2YWwxLnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUodmFsMikp
LCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgLy8gRW5kIG9mIENTUzMgcHJvcGVydGll
cwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdpbGxDaGFuZ2U6IC8vIGF1dG8gfCBbc2Nyb2xsLXBv
c2l0aW9uIHwgY29udGVudHMgfCA8Y3VzdG9tLWlkZW50Pl0jCi0gICAgICAgIGlmIChpZCA9PSBD
U1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBwYXJzZVdpbGxDaGFuZ2UoaW1wb3J0YW50KTsKLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICAvLyBBcHBsZSBzcGVjaWZpYyBwcm9wZXJ0aWVzLiAgVGhlc2Ug
d2lsbCBuZXZlciBiZSBzdGFuZGFyZGl6ZWQgYW5kIGFyZSBwdXJlbHkgdG8KLSAgICAvLyBzdXBw
b3J0IGN1c3RvbSBXZWJLaXQtYmFzZWQgQXBwbGUgYXBwbGljYXRpb25zLgotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRMaW5lQ2xhbXA6Ci0gICAgICAgIC8vIFdoZW4gc3BlY2lmeWluZyBudW1i
ZXIgb2YgbGluZXMsIGRvbid0IGFsbG93IDAgYXMgYSB2YWxpZCB2YWx1ZQotICAgICAgICAvLyBX
aGVuIHNwZWNpZnlpbmcgZWl0aGVyIHR5cGUgb2YgdW5pdCwgcmVxdWlyZSBub24tbmVnYXRpdmUg
aW50ZWdlcnMKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmICh2YWx1ZVdpdGhDYWxj
dWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdF
IHx8IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlKSAmJiB2YWxpZGF0ZVVuaXQo
dmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyIHwgRlBlcmNlbnQgfCBGTm9uTmVnLCBDU1NR
dWlya3NNb2RlKSk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0la
SU5HKQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U2l6ZUFkanVzdDoKLSAgICAgICAg
aWYgKCFpc1RleHRBdXRvc2l6aW5nRW5hYmxlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgaWQgPT0gQ1NTVmFsdWVOb25l
KQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgbXVsdGlsZW5ndGggY2FzZSB3aGVyZSB3ZSBhbGxv
dyByZWxhdGl2ZSB1bml0cy4KLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2
YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQZXJjZW50IHwgRk5vbk5lZywgQ1NT
U3RyaWN0TW9kZSkpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udFNpemVEZWx0YTogICAgICAgICAgIC8vIDxsZW5ndGg+
Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0
aW9uLCBGTGVuZ3RoKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0SHlwaGVuYXRlQ2hhcmFjdGVyOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8
IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1NUUklORykKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SHlwaGVuYXRlTGltaXRCZWZvcmU6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUxpbWl0QWZ0ZXI6Ci0gICAgICAg
IGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0
aW9uLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQotICAgICAgICAgICAgdmFs
aWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRIeXBoZW5hdGVMaW1pdExpbmVzOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVO
b0xpbWl0IHx8IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBG
Tm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1
ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUdyaWQ6
Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVl
KCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSB7Ci0gICAgICAgICAgICBT
dHJpbmcgbGluZUdyaWRWYWx1ZSA9IFN0cmluZyh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgp
LnN0cmluZyk7Ci0gICAgICAgICAgICBpZiAoIWxpbmVHcmlkVmFsdWUuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFs
dWUobGluZUdyaWRWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpLCBpbXBvcnRh
bnQpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMb2NhbGU6Ci0g
ICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFs
dWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQotICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLQotI2lmIEVOQUJMRShEQVNI
Qk9BUkRfU1VQUE9SVCkKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RGFzaGJvYXJkUmVnaW9u
OiAvLyA8ZGFzaGJvYXJkLXJlZ2lvbj4gfCA8ZGFzaGJvYXJkLXJlZ2lvbj4KLSAgICAgICAgaWYg
KHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVu
Y3Rpb24gfHwgaWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgcmV0dXJuIHBhcnNlRGFz
aGJvYXJkUmVnaW9ucyhwcm9wSWQsIGltcG9ydGFudCk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlm
Ci0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRvdWNoQ2Fs
bG91dDoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlRGVmYXVsdCB8fCBpZCA9PSBDU1NWYWx1
ZU5vbmUpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFr
OwotI2VuZGlmCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6Ci0gICAgICAgIGlmIChpc1ZhbGlkU3lzdGVtQ29sb3JW
YWx1ZShpZCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51Ci0gICAgICAgICAgICB8fCAoaWQgPj0gQ1NT
VmFsdWVXZWJraXRGb2N1c1JpbmdDb2xvciAmJiBpZCA8IENTU1ZhbHVlV2Via2l0VGV4dCAmJiBp
blF1aXJrc01vZGUoKSkpIHsKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VDb2xvcigpOwot
ICAgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQotICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0
LT5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICAvLyBFbmQg
QXBwbGUtc3BlY2lmaWMgcHJvcGVydGllcwotCi0gICAgICAgIC8qIHNob3J0aGFuZCBwcm9wZXJ0
aWVzICovCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmQ6IHsKLSAgICAgICAgLy8gUG9z
aXRpb24gbXVzdCBjb21lIGJlZm9yZSBjb2xvciBpbiB0aGlzIGFycmF5IGJlY2F1c2UgYSBwbGFp
biBvbGQgIjAiIGlzIGEgbGVnYWwgY29sb3IKLSAgICAgICAgLy8gaW4gcXVpcmtzIG1vZGUgYnV0
IGl0J3MgdXN1YWxseSB0aGUgWCBjb29yZGluYXRlIG9mIGEgcG9zaXRpb24uCi0gICAgICAgIGNv
bnN0IENTU1Byb3BlcnR5SUQgcHJvcGVydGllc1tdID0geyBDU1NQcm9wZXJ0eUJhY2tncm91bmRJ
bWFnZSwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRBdHRhY2htZW50LCBDU1NQcm9wZXJ0
eUJhY2tncm91bmRQb3NpdGlvbiwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRDbGlwLCBD
U1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kU2l6ZSB9Owot
ICAgICAgICByZXR1cm4gcGFyc2VGaWxsU2hvcnRoYW5kKHByb3BJZCwgcHJvcGVydGllcywgV1RG
X0FSUkFZX0xFTkdUSChwcm9wZXJ0aWVzKSwgaW1wb3J0YW50KTsKLSAgICB9Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdE1hc2s6IHsKLSAgICAgICAgY29uc3QgQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0aWVzW10gPSB7IENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlLCBDU1NQcm9wZXJ0eVdlYmtp
dE1hc2tTb3VyY2VUeXBlLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQsCi0gICAgICAgICAg
ICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbiwgQ1NTUHJvcGVydHlXZWJraXRNYXNrT3Jp
Z2luLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDbGlwLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXpl
IH07Ci0gICAgICAgIHJldHVybiBwYXJzZUZpbGxTaG9ydGhhbmQocHJvcElkLCBwcm9wZXJ0aWVz
LCBXVEZfQVJSQVlfTEVOR1RIKHByb3BlcnRpZXMpLCBpbXBvcnRhbnQpOwotICAgIH0KLSAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVyOgotICAgICAgICAvLyBbICdib3JkZXItd2lkdGgnIHx8ICdi
b3JkZXItc3R5bGUnIHx8IDxjb2xvcj4gXSB8IGluaGVyaXQKLSAgICB7Ci0gICAgICAgIGlmIChw
YXJzZVNob3J0aGFuZChwcm9wSWQsIGJvcmRlckFicmlkZ2VkU2hvcnRoYW5kKCksIGltcG9ydGFu
dCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBDU1MzIEJvcmRlcnMgYW5kIEJhY2tncm91bmRzIHNw
ZWNpZmljYXRpb24gc2F5cyB0aGF0IGJvcmRlciBhbHNvIHJlc2V0cyBib3JkZXItaW1hZ2UuIEl0
J3MgYXMKLSAgICAgICAgICAgIC8vIHRob3VnaCBhIHZhbHVlIG9mIG5vbmUgd2FzIHNwZWNpZmll
ZCBmb3IgdGhlIGltYWdlLgotICAgICAgICAgICAgYWRkRXhwYW5kZWRQcm9wZXJ0eUZvclZhbHVl
KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2UsIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRp
YWxWYWx1ZSgpLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9y
ZGVyVG9wOgotICAgICAgICAvLyBbICdib3JkZXItdG9wLXdpZHRoJyB8fCAnYm9yZGVyLXN0eWxl
JyB8fCA8Y29sb3I+IF0gfCBpbmhlcml0Ci0gICAgICAgIHJldHVybiBwYXJzZVNob3J0aGFuZChw
cm9wSWQsIGJvcmRlclRvcFNob3J0aGFuZCgpLCBpbXBvcnRhbnQpOwotICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3JkZXJSaWdodDoKLSAgICAgICAgLy8gWyAnYm9yZGVyLXJpZ2h0LXdpZHRoJyB8fCAn
Ym9yZGVyLXN0eWxlJyB8fCA8Y29sb3I+IF0gfCBpbmhlcml0Ci0gICAgICAgIHJldHVybiBwYXJz
ZVNob3J0aGFuZChwcm9wSWQsIGJvcmRlclJpZ2h0U2hvcnRoYW5kKCksIGltcG9ydGFudCk7Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbToKLSAgICAgICAgLy8gWyAnYm9yZGVyLWJv
dHRvbS13aWR0aCcgfHwgJ2JvcmRlci1zdHlsZScgfHwgPGNvbG9yPiBdIHwgaW5oZXJpdAotICAg
ICAgICByZXR1cm4gcGFyc2VTaG9ydGhhbmQocHJvcElkLCBib3JkZXJCb3R0b21TaG9ydGhhbmQo
KSwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdDoKLSAgICAgICAg
Ly8gWyAnYm9yZGVyLWxlZnQtd2lkdGgnIHx8ICdib3JkZXItc3R5bGUnIHx8IDxjb2xvcj4gXSB8
IGluaGVyaXQKLSAgICAgICAgcmV0dXJuIHBhcnNlU2hvcnRoYW5kKHByb3BJZCwgYm9yZGVyTGVm
dFNob3J0aGFuZCgpLCBpbXBvcnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3Jk
ZXJTdGFydDoKLSAgICAgICAgcmV0dXJuIHBhcnNlU2hvcnRoYW5kKHByb3BJZCwgd2Via2l0Qm9y
ZGVyU3RhcnRTaG9ydGhhbmQoKSwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0Qm9yZGVyRW5kOgotICAgICAgICByZXR1cm4gcGFyc2VTaG9ydGhhbmQocHJvcElkLCB3ZWJr
aXRCb3JkZXJFbmRTaG9ydGhhbmQoKSwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Qm9yZGVyQmVmb3JlOgotICAgICAgICByZXR1cm4gcGFyc2VTaG9ydGhhbmQocHJvcElk
LCB3ZWJraXRCb3JkZXJCZWZvcmVTaG9ydGhhbmQoKSwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Qm9yZGVyQWZ0ZXI6Ci0gICAgICAgIHJldHVybiBwYXJzZVNob3J0aGFu
ZChwcm9wSWQsIHdlYmtpdEJvcmRlckFmdGVyU2hvcnRoYW5kKCksIGltcG9ydGFudCk7Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eU91dGxpbmU6Ci0gICAgICAgIC8vIFsgJ291dGxpbmUtY29sb3InIHx8
ICdvdXRsaW5lLXN0eWxlJyB8fCAnb3V0bGluZS13aWR0aCcgXSB8IGluaGVyaXQKLSAgICAgICAg
cmV0dXJuIHBhcnNlU2hvcnRoYW5kKHByb3BJZCwgb3V0bGluZVNob3J0aGFuZCgpLCBpbXBvcnRh
bnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJDb2xvcjoKLSAgICAgICAgLy8gPGNvbG9y
PnsxLDR9IHwgaW5oZXJpdAotICAgICAgICByZXR1cm4gcGFyc2U0VmFsdWVzKHByb3BJZCwgYm9y
ZGVyQ29sb3JTaG9ydGhhbmQoKS5wcm9wZXJ0aWVzKCksIGltcG9ydGFudCk7Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eUJvcmRlcldpZHRoOgotICAgICAgICAvLyA8Ym9yZGVyLXdpZHRoPnsxLDR9IHwg
aW5oZXJpdAotICAgICAgICByZXR1cm4gcGFyc2U0VmFsdWVzKHByb3BJZCwgYm9yZGVyV2lkdGhT
aG9ydGhhbmQoKS5wcm9wZXJ0aWVzKCksIGltcG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eUJvcmRlclN0eWxlOgotICAgICAgICAvLyA8Ym9yZGVyLXN0eWxlPnsxLDR9IHwgaW5oZXJpdAot
ICAgICAgICByZXR1cm4gcGFyc2U0VmFsdWVzKHByb3BJZCwgYm9yZGVyU3R5bGVTaG9ydGhhbmQo
KS5wcm9wZXJ0aWVzKCksIGltcG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpbjoK
LSAgICAgICAgLy8gPG1hcmdpbi13aWR0aD57MSw0fSB8IGluaGVyaXQKLSAgICAgICAgcmV0dXJu
IHBhcnNlNFZhbHVlcyhwcm9wSWQsIG1hcmdpblNob3J0aGFuZCgpLnByb3BlcnRpZXMoKSwgaW1w
b3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZzoKLSAgICAgICAgLy8gPHBhZGRp
bmctd2lkdGg+ezEsNH0gfCBpbmhlcml0Ci0gICAgICAgIHJldHVybiBwYXJzZTRWYWx1ZXMocHJv
cElkLCBwYWRkaW5nU2hvcnRoYW5kKCkucHJvcGVydGllcygpLCBpbXBvcnRhbnQpOwotICAgIGNh
c2UgQ1NTUHJvcGVydHlGbGV4RmxvdzoKLSAgICAgICAgcmV0dXJuIHBhcnNlU2hvcnRoYW5kKHBy
b3BJZCwgZmxleEZsb3dTaG9ydGhhbmQoKSwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3Bl
cnR5Rm9udDoKLSAgICAgICAgLy8gWyBbICdmb250LXN0eWxlJyB8fCAnZm9udC12YXJpYW50JyB8
fCAnZm9udC13ZWlnaHQnIF0/ICdmb250LXNpemUnIFsgLyAnbGluZS1oZWlnaHQnIF0/Ci0gICAg
ICAgIC8vICdmb250LWZhbWlseScgXSB8IGNhcHRpb24gfCBpY29uIHwgbWVudSB8IG1lc3NhZ2Ut
Ym94IHwgc21hbGwtY2FwdGlvbiB8IHN0YXR1cy1iYXIgfCBpbmhlcml0Ci0gICAgICAgIGlmIChu
dW0gPT0gMSAmJiBpZCA+PSBDU1NWYWx1ZUNhcHRpb24gJiYgaWQgPD0gQ1NTVmFsdWVTdGF0dXNC
YXIpIHsKLSAgICAgICAgICAgIHBhcnNlU3lzdGVtRm9udChpbXBvcnRhbnQpOwotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHBhcnNlRm9udChpbXBv
cnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGU6Ci0gICAgICAgIHJldHVybiBw
YXJzZVNob3J0aGFuZChwcm9wSWQsIGxpc3RTdHlsZVNob3J0aGFuZCgpLCBpbXBvcnRhbnQpOwot
ICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5zOgotICAgICAgICByZXR1cm4gcGFyc2VDb2x1bW5z
U2hvcnRoYW5kKGltcG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbHVtblJ1bGU6Ci0g
ICAgICAgIHJldHVybiBwYXJzZVNob3J0aGFuZChwcm9wSWQsIGNvbHVtblJ1bGVTaG9ydGhhbmQo
KSwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZToKLSAg
ICAgICAgcmV0dXJuIHBhcnNlU2hvcnRoYW5kKHByb3BJZCwgd2Via2l0VGV4dFN0cm9rZVNob3J0
aGFuZCgpLCBpbXBvcnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlBbmltYXRpb246Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbjoKLSAgICAgICAgcmV0dXJuIHBhcnNlQW5p
bWF0aW9uU2hvcnRoYW5kKHByb3BJZCwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5
VHJhbnNpdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbjoKLSAgICAg
ICAgcmV0dXJuIHBhcnNlVHJhbnNpdGlvblNob3J0aGFuZChwcm9wSWQsIGltcG9ydGFudCk7Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUludmFsaWQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBj
YXNlIENTU1Byb3BlcnR5UGFnZToKLSAgICAgICAgcmV0dXJuIHBhcnNlUGFnZShwcm9wSWQsIGlt
cG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHJldGNoOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlUZXh0TGluZVRocm91Z2g6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVybGlu
ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZToKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIC8vIENTUyBUZXh0IExheW91dCBNb2R1bGUgTGV2ZWwgMzogVmVydGljYWwgd3Jp
dGluZyBzdXBwb3J0Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpczoKLSAg
ICAgICAgcmV0dXJuIHBhcnNlU2hvcnRoYW5kKHByb3BJZCwgd2Via2l0VGV4dEVtcGhhc2lzU2hv
cnRoYW5kKCksIGltcG9ydGFudCk7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVt
cGhhc2lzU3R5bGU6Ci0gICAgICAgIHJldHVybiBwYXJzZVRleHRFbXBoYXNpc1N0eWxlKGltcG9y
dGFudCk7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzUG9zaXRpb246
Ci0gICAgICAgIHJldHVybiBwYXJzZVRleHRFbXBoYXNpc1Bvc2l0aW9uKGltcG9ydGFudCk7Ci0K
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dE9yaWVudGF0aW9uOgotICAgICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVTaWRld2F5cyB8fCBpZCA9PSBDU1NWYWx1ZVNpZGV3YXlzUmlnaHQgfHwg
aWQgPT0gQ1NTVmFsdWVWZXJ0aWNhbFJpZ2h0IHx8IGlkID09IENTU1ZhbHVlTWl4ZWQgfHwgaWQg
PT0gQ1NTVmFsdWVVcHJpZ2h0KQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwot
ICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlIYW5naW5nUHVuY3R1YXRpb246
Ci0gICAgICAgIHJldHVybiBwYXJzZUhhbmdpbmdQdW5jdHVhdGlvbihpbXBvcnRhbnQpOwotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQm94Q29udGFpbjoKLSAgICAgICAgaWYgKGlkID09
IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIHBhcnNlTGluZUJveENvbnRhaW4oaW1wb3J0YW50
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRGZWF0dXJlU2V0dGlu
Z3M6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCkKLSAgICAgICAgICAgIHZhbGlk
UHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIHBhcnNl
Rm9udEZlYXR1cmVTZXR0aW5ncyhpbXBvcnRhbnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1Byb3BlcnR5Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NW
YWx1ZU5vcm1hbCB8fCBpZCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUZvbnRW
YXJpYW50TGlnYXR1cmVzKGltcG9ydGFudCwgdHJ1ZSwgZmFsc2UpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlhbnROdW1lcmljOgotICAgICAgICBpZiAoaWQg
PT0gQ1NTVmFsdWVOb3JtYWwpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUZvbnRWYXJpYW50TnVtZXJpYyhp
bXBvcnRhbnQsIHRydWUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUZvbnRWYXJpYW50RWFzdEFzaWFuOgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3Jt
YWwpCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHJldHVybiBwYXJzZUZvbnRWYXJpYW50RWFzdEFzaWFuKGltcG9ydGFudCwgdHJ1
ZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlh
bnQ6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCkgewotICAgICAgICAgICAgU2hv
cnRoYW5kU2NvcGUgc2NvcGUodGhpcywgQ1NTUHJvcGVydHlGb250VmFyaWFudCk7Ci0gICAgICAg
ICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzLCBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCks
IGltcG9ydGFudCwgdHJ1ZSk7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZv
bnRWYXJpYW50UG9zaXRpb24sIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKSwgaW1wb3J0YW50LCB0cnVlKTsKLSAgICAgICAgICAg
IGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzLCBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCksIGltcG9ydGFu
dCwgdHJ1ZSk7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50
TnVtZXJpYywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVOb3JtYWwpLCBpbXBvcnRhbnQsIHRydWUpOwotICAgICAgICAgICAgYWRkUHJvcGVy
dHkoQ1NTUHJvcGVydHlGb250VmFyaWFudEFsdGVybmF0ZXMsIENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKSwgaW1wb3J0YW50LCB0
cnVlKTsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRFYXN0
QXNpYW4sIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlTm9ybWFsKSwgaW1wb3J0YW50LCB0cnVlKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAg
ICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1Byb3BlcnR5Rm9udFZhcmlhbnQpOwot
ICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudExpZ2F0dXJlcywg
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVO
b25lKSwgaW1wb3J0YW50LCB0cnVlKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBwYXJzZUZvbnRWYXJpYW50KGltcG9ydGFudCk7Ci0KLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Q2xpcFBhdGg6Ci0gICAgICAgIHBhcnNlZFZhbHVlID0gcGFy
c2VDbGlwUGF0aCgpOwotICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVPdXRzaWRlOgotICAgICAgICBwYXJzZWRWYWx1
ZSA9IHBhcnNlU2hhcGVQcm9wZXJ0eShwcm9wSWQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0U2hhcGVNYXJnaW46Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0g
IWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJj
ZW50IHwgRk5vbk5lZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRTaGFwZUltYWdlVGhyZXNob2xkOgotICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICFpZCAmJiB2
YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIpOwotICAgICAgICBicmVh
azsKLSNlbmRpZgotI2lmIEVOQUJMRShDU1NfSU1BR0VfT1JJRU5UQVRJT04pCi0gICAgY2FzZSBD
U1NQcm9wZXJ0eUltYWdlT3JpZW50YXRpb246Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gIWlk
ICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkFuZ2xlKTsKLSAgICAgICAg
YnJlYWs7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX0lNQUdFX1JFU09MVVRJT04pCi0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUltYWdlUmVzb2x1dGlvbjoKLSAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJz
ZUltYWdlUmVzb2x1dGlvbigpOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgQ1NT
UHJvcGVydHlBbGlnbkNvbnRlbnQ6Ci0gICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VDb250ZW50
RGlzdHJpYnV0aW9uT3ZlcmZsb3dQb3NpdGlvbigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1Byb3BlcnR5QWxpZ25TZWxmOgotICAgICAgICByZXR1cm4gcGFyc2VJdGVtUG9zaXRpb25P
dmVyZmxvd1Bvc2l0aW9uKHByb3BJZCwgaW1wb3J0YW50KTsKLQotICAgIGNhc2UgQ1NTUHJvcGVy
dHlBbGlnbkl0ZW1zOgotICAgICAgICByZXR1cm4gcGFyc2VJdGVtUG9zaXRpb25PdmVyZmxvd1Bv
c2l0aW9uKHByb3BJZCwgaW1wb3J0YW50KTsKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90
dG9tU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckNvbGxhcHNlOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3JkZXJMZWZ0U3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJp
Z2h0U3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcFN0eWxlOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3hTaXppbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJyZWFrQWZ0ZXI6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUJyZWFrQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCcmVh
a0luc2lkZToKLSAgICBjYXNlIENTU1Byb3BlcnR5Q2FwdGlvblNpZGU6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUNsZWFyOgotICAgIGNhc2UgQ1NTUHJvcGVydHlEaXJlY3Rpb246Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eURpc3BsYXk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUVtcHR5Q2VsbHM6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUZsb2F0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3R5bGU6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUltYWdlUmVuZGVyaW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlM
aXN0U3R5bGVQb3NpdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlVHlwZToKLSAg
ICBjYXNlIENTU1Byb3BlcnR5T2JqZWN0Rml0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5l
U3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU92ZXJmbG93V3JhcDoKLSAgICBjYXNlIENTU1By
b3BlcnR5T3ZlcmZsb3dYOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvd1k6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVBhZ2VCcmVha0FmdGVyOgotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJl
YWtCZWZvcmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2VCcmVha0luc2lkZToKLSAgICBjYXNl
IENTU1Byb3BlcnR5UG9pbnRlckV2ZW50czoKLSAgICBjYXNlIENTU1Byb3BlcnR5UG9zaXRpb246
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVJlc2l6ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5U3BlYWs6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRhYmxlTGF5b3V0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlU
ZXh0TGluZVRocm91Z2hNb2RlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0TGluZVRocm91Z2hT
dHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJmbG93OgotICAgIGNhc2UgQ1NTUHJv
cGVydHlUZXh0T3ZlcmxpbmVNb2RlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmVT
dHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFJlbmRlcmluZzoKLSAgICBjYXNlIENTU1By
b3BlcnR5VGV4dFRyYW5zZm9ybToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZU1v
ZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVTdHlsZToKLSAgICBjYXNlIENT
U1Byb3BlcnR5VmlzaWJpbGl0eToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QXBwZWFyYW5j
ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5OgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJBZnRlclN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCb3JkZXJCZWZvcmVTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9y
ZGVyRW5kU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckZpdDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyU3RhcnRTdHlsZToKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Qm94QWxpZ246Ci0jaWYgRU5BQkxFKENTU19CT1hfREVDT1JBVElPTl9CUkVBSykK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94RGVjb3JhdGlvbkJyZWFrOgotI2VuZGlmCi0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveERpcmVjdGlvbjoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Qm94TGluZXM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveE9yaWVudDoK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UGFjazoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Q29sdW1uQnJlYWtBZnRlcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1u
QnJlYWtCZWZvcmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFrSW5zaWRl
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5GaWxsOgotICAgIGNhc2UgQ1NTUHJvcGVydHlD
b2x1bW5SdWxlU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZsZXhEaXJlY3Rpb246Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUZsZXhXcmFwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250
S2VybmluZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udFNtb290aGluZzoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0SHlwaGVuczoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TGluZUFsaWduOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQnJlYWs6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVTbmFwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXJnaW5BZnRlckNvbGxhcHNlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5CZWZv
cmVDb2xsYXBzZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQm90dG9tQ29sbGFw
c2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpblRvcENvbGxhcHNlOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlRGlyZWN0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRNYXJxdWVlU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE5ic3BNb2Rl
OgotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF9PVkVSRkxPV19TQ1JPTExJTkcpCi0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOgotI2VuZGlmCi0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFByaW50Q29sb3JBZGp1c3Q6Ci0jaWYgRU5BQkxFKENTU19SRUdJT05TKQot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSZWdpb25CcmVha0FmdGVyOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRSZWdpb25CcmVha0JlZm9yZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0UmVnaW9uQnJlYWtJbnNpZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkZy
YWdtZW50OgotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJ0bE9yZGVyaW5nOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRpb246Ci0jaWYgRU5BQkxFKENTUzNf
VEVYVCkKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEFsaWduTGFzdDoKLSNlbmRpZiAv
LyBDU1MzX1RFWFQKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dENvbWJpbmU6Ci0jaWYg
RU5BQkxFKENTUzNfVEVYVCkKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEp1c3RpZnk6
Ci0jZW5kaWYgLy8gQ1NTM19URVhUCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTZWN1
cml0eToKLSAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNmb3JtU3R5bGU6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRV
c2VyRHJhZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNlck1vZGlmeToKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
V3JpdGluZ01vZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdoaXRlU3BhY2U6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdvcmRCcmVhazoKLSAgICBjYXNlIENTU1Byb3BlcnR5V29yZFdyYXA6Ci0jaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBjYXNlIENTU1Byb3BlcnR5VG91Y2hBY3Rpb246Ci0j
ZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRTY3JvbGxTbmFwVHlwZToKLSNlbmRpZgotI2lmIEVOQUJMRShDU1NfVFJBSUxJTkdfV09S
RCkKLSAgICBjYXNlIENTU1Byb3BlcnR5QXBwbGVUcmFpbGluZ1dvcmQ6Ci0jZW5kaWYKLSAgICAg
ICAgLy8gVGhlc2UgcHJvcGVydGllcyBzaG91bGQgYmUgaGFuZGxlZCBiZWZvcmUgaW4gaXNWYWxp
ZEtleXdvcmRQcm9wZXJ0eUFuZFZhbHVlKCkuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jaWYgRU5BQkxFKENTU19ERVZJQ0VfQURBUFRBVElP
TikKLSAgICAvLyBQcm9wZXJ0aWVzIGJlbGxvdyBhcmUgdmFsaWRhdGVkIGluc2lkZSBwYXJzZVZp
ZXdwb3J0UHJvcGVydHksIGJlY2F1c2Ugd2UKLSAgICAvLyBjaGVjayBmb3IgcGFyc2VyIHN0YXRl
IGluVmlld3BvcnRTY29wZS4gV2UgbmVlZCB0byBpbnZhbGlkYXRlIGlmIHNvbWVvbmUKLSAgICAv
LyBhZGRzIHRoZW0gb3V0c2lkZSBhIEB2aWV3cG9ydCBydWxlLgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlNYXhab29tOgotICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5ab29tOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlPcmllbnRhdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VXNlclpvb206Ci0gICAgICAg
IHZhbGlkUHJpbWl0aXZlID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0jaWYgRU5B
QkxFKENTU19TQ1JPTExfU05BUCkKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2Nyb2xsU25h
cFBvaW50c1g6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNjcm9sbFNuYXBQb2ludHNZOgot
ICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVFbGVtZW50cykgewotICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHBhcnNlTm9uRWxlbWVudFNuYXBQb2ludHMocHJvcElkLCBpbXBvcnRhbnQpOwotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTY3JvbGxTbmFwRGVzdGluYXRpb246IC8vIDxsZW5ndGg+
ezJ9Ci0gICAgICAgIHJldHVybiBwYXJzZVNjcm9sbFNuYXBEZXN0aW5hdGlvbihwcm9wSWQsIGlt
cG9ydGFudCk7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNjcm9sbFNuYXBDb29yZGluYXRl
OgotICAgICAgICByZXR1cm4gcGFyc2VTY3JvbGxTbmFwQ29vcmRpbmF0ZShwcm9wSWQsIGltcG9y
dGFudCk7Ci0jZW5kaWYKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBwYXJzZVNWR1Zh
bHVlKHByb3BJZCwgaW1wb3J0YW50KTsKLSAgICB9Ci0KLSAgICBpZiAodmFsaWRQcmltaXRpdmUp
IHsKLSAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1ZVdp
dGhDYWxjdWxhdGlvbik7Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgfQotCi0g
ICAgaWYgKHBhcnNlZFZhbHVlICYmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSB8fCBpblNob3J0
aGFuZCgpKSkgewotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIHBhcnNlZFZhbHVlLnJlbGVh
c2VOb25OdWxsKCksIGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjphZGRGaWxsVmFsdWUoUmVmUHRy
PENTU1ZhbHVlPiYgbHZhbCwgUmVmPENTU1ZhbHVlPiYmIHJ2YWwpCi17Ci0gICAgaWYgKCFsdmFs
KSB7Ci0gICAgICAgIGx2YWwgPSBXVEZNb3ZlKHJ2YWwpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKGx2YWwtPmlzQmFzZVZhbHVlTGlzdCgpKSB7Ci0gICAgICAgIGRvd25jYXN0
PENTU1ZhbHVlTGlzdD4oKmx2YWwpLmFwcGVuZChXVEZNb3ZlKHJ2YWwpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFT
ZXBhcmF0ZWQoKTsKLSAgICBsaXN0LmdldCgpLmFwcGVuZChsdmFsLnJlbGVhc2VOb25OdWxsKCkp
OwotICAgIGxpc3QuZ2V0KCkuYXBwZW5kKFdURk1vdmUocnZhbCkpOwotICAgIGx2YWwgPSBXVEZN
b3ZlKGxpc3QpOwotfQotCi1zdGF0aWMgYm9vbCBpc0NvbnRlbnREaXN0cmlidXRpb25LZXl3b3Jk
KENTU1ZhbHVlSUQgaWQpCi17Ci0gICAgcmV0dXJuIGlkID09IENTU1ZhbHVlU3BhY2VCZXR3ZWVu
IHx8IGlkID09IENTU1ZhbHVlU3BhY2VBcm91bmQKLSAgICAgICAgfHwgaWQgPT0gQ1NTVmFsdWVT
cGFjZUV2ZW5seSB8fCBpZCA9PSBDU1NWYWx1ZVN0cmV0Y2g7Ci19Ci0KLXN0YXRpYyBib29sIGlz
Q29udGVudFBvc2l0aW9uS2V5d29yZChDU1NWYWx1ZUlEIGlkKQotewotICAgIHJldHVybiBpZCA9
PSBDU1NWYWx1ZVN0YXJ0IHx8IGlkID09IENTU1ZhbHVlRW5kIHx8IGlkID09IENTU1ZhbHVlQ2Vu
dGVyCi0gICAgICAgIHx8IGlkID09IENTU1ZhbHVlRmxleFN0YXJ0IHx8IGlkID09IENTU1ZhbHVl
RmxleEVuZAotICAgICAgICB8fCBpZCA9PSBDU1NWYWx1ZUxlZnQgfHwgaWQgPT0gQ1NTVmFsdWVS
aWdodDsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzQmFzZWxpbmVQb3NpdGlvbktleXdvcmQo
Q1NTVmFsdWVJRCBpZCkKLXsKLSAgICByZXR1cm4gaWQgPT0gQ1NTVmFsdWVCYXNlbGluZSB8fCBp
ZCA9PSBDU1NWYWx1ZUxhc3RCYXNlbGluZTsKLX0KLQotc3RhdGljIGJvb2wgaXNBbGlnbm1lbnRP
dmVyZmxvd0tleXdvcmQoQ1NTVmFsdWVJRCBpZCkKLXsKLSAgICByZXR1cm4gaWQgPT0gQ1NTVmFs
dWVVbnNhZmUgfHwgaWQgPT0gQ1NTVmFsdWVTYWZlOwotfQotCi1zdGF0aWMgYm9vbCBpc0l0ZW1Q
b3NpdGlvbktleXdvcmQoQ1NTVmFsdWVJRCBpZCkKLXsKLSAgICByZXR1cm4gaWQgPT0gQ1NTVmFs
dWVTdGFydCB8fCBpZCA9PSBDU1NWYWx1ZUVuZCB8fCBpZCA9PSBDU1NWYWx1ZUNlbnRlcgotICAg
ICAgICB8fCBpZCA9PSBDU1NWYWx1ZVNlbGZTdGFydCB8fCBpZCA9PSBDU1NWYWx1ZVNlbGZFbmQg
fHwgaWQgPT0gQ1NTVmFsdWVGbGV4U3RhcnQKLSAgICAgICAgfHwgaWQgPT0gQ1NTVmFsdWVGbGV4
RW5kIHx8IGlkID09IENTU1ZhbHVlTGVmdCB8fCBpZCA9PSBDU1NWYWx1ZVJpZ2h0OwotfQotCi1i
b29sIENTU1BhcnNlcjo6cGFyc2VMZWdhY3lQb3NpdGlvbihDU1NQcm9wZXJ0eUlEIHByb3BJZCwg
Ym9vbCBpbXBvcnRhbnQpCi17Ci0gICAgLy8gWyBsZWdhY3kgJiYgWyBsZWZ0IHwgcmlnaHQgfCBj
ZW50ZXIgXQotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJl
bnQoKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
dmFsdWUtPmlkID09IENTU1ZhbHVlTGVnYWN5KSB7Ci0gICAgICAgIHZhbHVlID0gbV92YWx1ZUxp
c3QtPm5leHQoKTsKLSAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKHZhbHVlLT5pZCAhPSBDU1NWYWx1ZUNlbnRlciAmJiB2YWx1ZS0+aWQg
IT0gQ1NTVmFsdWVMZWZ0ICYmIHZhbHVlLT5pZCAhPSBDU1NWYWx1ZVJpZ2h0KQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlQ2Vu
dGVyIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUxlZnQgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVl
UmlnaHQpIHsKLSAgICAgICAgaWYgKCFtX3ZhbHVlTGlzdC0+bmV4dCgpIHx8IG1fdmFsdWVMaXN0
LT5jdXJyZW50KCktPmlkICE9IENTU1ZhbHVlTGVnYWN5KQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvJiBjc3NW
YWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpOwotICAgIGFkZFByb3BlcnR5KHBy
b3BJZCwgY3JlYXRlUHJpbWl0aXZlVmFsdWVQYWlyKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVMZWdhY3kpLCBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZh
bHVlKHZhbHVlLT5pZCkpLCBpbXBvcnRhbnQpOwotICAgIHJldHVybiAhbV92YWx1ZUxpc3QtPm5l
eHQoKTsKLX0KLQotUmVmUHRyPENTU0NvbnRlbnREaXN0cmlidXRpb25WYWx1ZT4gQ1NTUGFyc2Vy
OjpwYXJzZUNvbnRlbnREaXN0cmlidXRpb25PdmVyZmxvd1Bvc2l0aW9uKCkKLXsKLSAgICAvLyBu
b3JtYWwgfCA8YmFzZWxpbmUtcG9zaXRpb24+IHwgPGNvbnRlbnQtZGlzdHJpYnV0aW9uPiB8fCBb
IDxvdmVyZmxvdy1wb3NpdGlvbj4/ICYmIDxjb250ZW50LXBvc2l0aW9uPiBdCi0gICAgLy8gPGJh
c2VsaW5lLXBvc2l0aW9uPiA9IGJhc2VsaW5lIHwgbGFzdC1iYXNlbGluZTsKLSAgICAvLyA8Y29u
dGVudC1kaXN0cmlidXRpb24+ID0gc3BhY2UtYmV0d2VlbiB8IHNwYWNlLWFyb3VuZCB8IHNwYWNl
LWV2ZW5seSB8IHN0cmV0Y2g7Ci0gICAgLy8gPGNvbnRlbnQtcG9zaXRpb24+ID0gY2VudGVyIHwg
c3RhcnQgfCBlbmQgfCBmbGV4LXN0YXJ0IHwgZmxleC1lbmQgfCBsZWZ0IHwgcmlnaHQ7Ci0gICAg
Ly8gPG92ZXJmbG93LXBvc2l0aW9uPiA9IHVuc2FmZSB8IHNhZmUKLQotICAgIENTU1BhcnNlclZh
bHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBhdXRvIHwgPGJhc2VsaW5lLXBvc2l0aW9u
PgotICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgaXNCYXNlbGluZVBvc2l0
aW9uS2V5d29yZCh2YWx1ZS0+aWQpKSB7Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0g
ICAgICAgIHJldHVybiBDU1NDb250ZW50RGlzdHJpYnV0aW9uVmFsdWU6OmNyZWF0ZShDU1NWYWx1
ZUludmFsaWQsIHZhbHVlLT5pZCwgQ1NTVmFsdWVJbnZhbGlkKTsKLSAgICB9Ci0KLSAgICBDU1NW
YWx1ZUlEIGRpc3RyaWJ1dGlvbiA9IENTU1ZhbHVlSW52YWxpZDsKLSAgICBDU1NWYWx1ZUlEIHBv
c2l0aW9uID0gQ1NTVmFsdWVJbnZhbGlkOwotICAgIENTU1ZhbHVlSUQgb3ZlcmZsb3cgPSBDU1NW
YWx1ZUludmFsaWQ7Ci0gICAgd2hpbGUgKHZhbHVlKSB7Ci0gICAgICAgIGlmIChpc0NvbnRlbnRE
aXN0cmlidXRpb25LZXl3b3JkKHZhbHVlLT5pZCkpIHsKLSAgICAgICAgICAgIGlmIChkaXN0cmli
dXRpb24gIT0gQ1NTVmFsdWVJbnZhbGlkKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgICAgICAgICAgZGlzdHJpYnV0aW9uID0gdmFsdWUtPmlkOwotICAgICAgICB9IGVsc2Ug
aWYgKGlzQ29udGVudFBvc2l0aW9uS2V5d29yZCh2YWx1ZS0+aWQpKSB7Ci0gICAgICAgICAgICBp
ZiAocG9zaXRpb24gIT0gQ1NTVmFsdWVJbnZhbGlkKQotICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICAgICAgcG9zaXRpb24gPSB2YWx1ZS0+aWQ7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoaXNBbGlnbm1lbnRPdmVyZmxvd0tleXdvcmQodmFsdWUtPmlkKSkgewotICAgICAgICAg
ICAgaWYgKG92ZXJmbG93ICE9IENTU1ZhbHVlSW52YWxpZCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIG92ZXJmbG93ID0gdmFsdWUtPmlkOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB2YWx1ZSA9IG1fdmFs
dWVMaXN0LT5uZXh0KCk7Ci0gICAgfQotCi0gICAgLy8gVGhlIGdyYW1tYXIgc3RhdGVzIHRoYXQg
d2Ugc2hvdWxkIGhhdmUgYXQgbGVhc3QgPGNvbnRlbnQtZGlzdHJpYnV0aW9uPiBvcgotICAgIC8v
IDxjb250ZW50LXBvc2l0aW9uPiAoIDxjb250ZW50LWRpc3RyaWJ1dGlvbj4gfHwgPGNvbnRlbnQt
cG9zaXRpb24+ICkuCi0gICAgaWYgKHBvc2l0aW9uID09IENTU1ZhbHVlSW52YWxpZCAmJiBkaXN0
cmlidXRpb24gPT0gQ1NTVmFsdWVJbnZhbGlkKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIC8vIFRoZSBncmFtbWFyIHN0YXRlcyB0aGF0IDxvdmVyZmxvdy1wb3NpdGlvbj4gbXVzdCBi
ZSBhc3NvY2lhdGVkIHRvIDxjb250ZW50LXBvc2l0aW9uPi4KLSAgICBpZiAob3ZlcmZsb3cgIT0g
Q1NTVmFsdWVJbnZhbGlkICYmIHBvc2l0aW9uID09IENTU1ZhbHVlSW52YWxpZCkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gQ1NTQ29udGVudERpc3RyaWJ1dGlvblZhbHVl
OjpjcmVhdGUoZGlzdHJpYnV0aW9uLCBwb3NpdGlvbiwgb3ZlcmZsb3cpOwotfQotCi1ib29sIENT
U1BhcnNlcjo6cGFyc2VJdGVtUG9zaXRpb25PdmVyZmxvd1Bvc2l0aW9uKENTU1Byb3BlcnR5SUQg
cHJvcElkLCBib29sIGltcG9ydGFudCkKLXsKLSAgICAvLyBhdXRvIHwgbm9ybWFsIHwgc3RyZXRj
aCB8IDxiYXNlbGluZS1wb3NpdGlvbj4gfCBbPGl0ZW0tcG9zaXRpb24+ICYmIDxvdmVyZmxvdy1w
b3NpdGlvbj4/IF0KLSAgICAvLyA8YmFzZWxpbmUtcG9zaXRpb24+ID0gYmFzZWxpbmUgfCBsYXN0
LWJhc2VsaW5lOwotICAgIC8vIDxpdGVtLXBvc2l0aW9uPiA9IGNlbnRlciB8IHN0YXJ0IHwgZW5k
IHwgc2VsZi1zdGFydCB8IHNlbGYtZW5kIHwgZmxleC1zdGFydCB8IGZsZXgtZW5kIHwgbGVmdCB8
IHJpZ2h0OwotICAgIC8vIDxvdmVyZmxvdy1wb3NpdGlvbj4gPSB1bnNhZmUgfCBzYWZlCi0KLSAg
ICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlm
ICghdmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICh2YWx1ZS0+aWQgPT0g
Q1NTVmFsdWVBdXRvIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCB2YWx1ZS0+aWQg
PT0gQ1NTVmFsdWVTdHJldGNoIHx8IGlzQmFzZWxpbmVQb3NpdGlvbktleXdvcmQodmFsdWUtPmlk
KSkgewotICAgICAgICAvLyBhbGlnbi1pdGVtcyBwcm9wZXJ0eSBkb2VzIG5vdCBhbGxvdyB0aGUg
J2F1dG8nIHZhbHVlLgotICAgICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlQXV0byAmJiBw
cm9wSWQgPT0gQ1NTUHJvcGVydHlBbGlnbkl0ZW1zKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBpZiAobV92YWx1ZUxpc3QtPm5leHQoKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCksIGltcG9ydGFudCk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
cG9zaXRpb247Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBvdmVyZmxvd0FsaWdubWVu
dEtleXdvcmQ7Ci0gICAgaWYgKGlzSXRlbVBvc2l0aW9uS2V5d29yZCh2YWx1ZS0+aWQpKSB7Ci0g
ICAgICAgIHBvc2l0aW9uID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUodmFsdWUtPmlkKTsKLSAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgp
OwotICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS0+aWQgIT0gQ1NT
VmFsdWVVbnNhZmUgJiYgdmFsdWUtPmlkICE9IENTU1ZhbHVlU2FmZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBvdmVyZmxvd0FsaWdubWVudEtleXdvcmQgPSBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQp
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChpc0FsaWdubWVudE92ZXJmbG93S2V5d29yZCh2
YWx1ZS0+aWQpKSB7Ci0gICAgICAgIG92ZXJmbG93QWxpZ25tZW50S2V5d29yZCA9IENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7Ci0gICAg
ICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgaWYgKHZhbHVlICYmIGlz
SXRlbVBvc2l0aW9uS2V5d29yZCh2YWx1ZS0+aWQpKQotICAgICAgICAgICAgcG9zaXRpb24gPSBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX3ZhbHVlTGlzdC0+bmV4dCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQocG9zaXRpb24pOwotICAgIGlmIChvdmVy
Zmxvd0FsaWdubWVudEtleXdvcmQpCi0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3JlYXRl
UHJpbWl0aXZlVmFsdWVQYWlyKHBvc2l0aW9uLnJlbGVhc2VOb25OdWxsKCksIG92ZXJmbG93QWxp
Z25tZW50S2V5d29yZC5yZWxlYXNlTm9uTnVsbCgpKSwgaW1wb3J0YW50KTsKLSAgICBlbHNlCi0g
ICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgcG9zaXRpb24ucmVsZWFzZU5vbk51bGwoKSwgaW1w
b3J0YW50KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBwYXJzZUJhY2tn
cm91bmRDbGlwKENTU1BhcnNlclZhbHVlJiBwYXJzZXJWYWx1ZSwgUmVmUHRyPENTU1ZhbHVlPiYg
Y3NzVmFsdWUpCi17Ci0gICAgaWYgKHBhcnNlclZhbHVlLmlkID09IENTU1ZhbHVlQm9yZGVyQm94
IHx8IHBhcnNlclZhbHVlLmlkID09IENTU1ZhbHVlUGFkZGluZ0JveAotICAgICAgICB8fCBwYXJz
ZXJWYWx1ZS5pZCA9PSBDU1NWYWx1ZUNvbnRlbnRCb3ggfHwgcGFyc2VyVmFsdWUuaWQgPT0gQ1NT
VmFsdWVXZWJraXRUZXh0KSB7Ci0gICAgICAgIGNzc1ZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUocGFyc2VyVmFsdWUuaWQpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENTU1BhcnNl
cjo6dXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvcigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fY29udGV4dC51c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2
aW9yOwotfQotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLWJvb2wgQ1NTUGFyc2VyOjpw
YXJzZU5vbkVsZW1lbnRTbmFwUG9pbnRzKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9y
dGFudCkKLXsKLSAgICBhdXRvIHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBh
cmF0ZWQoKTsKLSAgICB3aGlsZSAoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKSkgewotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxj
dWxhdGlvbigqdmFsdWUpOwotICAgICAgICBpZiAodmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1
bGF0aW9uLCBGUGVyY2VudCB8IEZMZW5ndGgpKQotICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQo
Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKSk7Ci0gICAg
ICAgIGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbgotICAg
ICAgICAgICAgJiYgdmFsdWUtPmZ1bmN0aW9uLT5hcmdzCi0gICAgICAgICAgICAmJiB2YWx1ZS0+
ZnVuY3Rpb24tPmFyZ3MtPnNpemUoKSA9PSAxCi0gICAgICAgICAgICAmJiBlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUsICJyZXBlYXQoIikpIHsKLSAg
ICAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCp2
YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCktPmN1cnJlbnQoKSk7Ci0gICAgICAgICAgICBpZiAo
dmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQg
fCBGTm9uTmVnKSkgewotICAgICAgICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoTGVuZ3RoUmVwZWF0OjpjcmVhdGUoY3JlYXRlUHJp
bWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSkpKTsKLSAgICAgICAg
ICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVl
TGlzdC0+Y3VycmVudCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIH0K
LSAgICBpZiAodmFsdWVzLT5sZW5ndGgoKSkgewotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQs
IFdURk1vdmUodmFsdWVzKSwgaW1wb3J0YW50KTsKLSAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQo
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlU2Nyb2xsU25hcFBvc2l0aW9ucyhSZWZQdHI8Q1NTVmFsdWU+
JiBjc3NWYWx1ZVgsIFJlZlB0cjxDU1NWYWx1ZT4mIGNzc1ZhbHVlWSkKLXsKLSAgICBjc3NWYWx1
ZVggPSBwYXJzZVBvc2l0aW9uWCgqbV92YWx1ZUxpc3QpOwotICAgIGlmICghY3NzVmFsdWVYKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBEb24ndCBhY2NlcHQgb2RkLWxlbmd0aCBs
aXN0cyBvZiBwb3NpdGlvbnMgKG11c3QgYWx3YXlzIGhhdmUgYW4gWCBhbmQgYSBZKToKLSAgICBp
ZiAoIW1fdmFsdWVMaXN0LT5uZXh0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNz
c1ZhbHVlWSA9IHBhcnNlUG9zaXRpb25ZKCptX3ZhbHVlTGlzdCk7Ci0gICAgaWYgKCFjc3NWYWx1
ZVkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IENTU1BhcnNlcjo6cGFyc2VTY3JvbGxTbmFwRGVzdGluYXRpb24oQ1NTUHJvcGVydHlJRCBwcm9w
SWQsIGJvb2wgaW1wb3J0YW50KQotewotICAgIGF1dG8gcG9zaXRpb24gPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgaWYgKG1fdmFsdWVMaXN0LT5zaXplKCkgIT0g
MikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1
ZVgsIGNzc1ZhbHVlWTsKLSAgICBpZiAoIXBhcnNlU2Nyb2xsU25hcFBvc2l0aW9ucyhjc3NWYWx1
ZVgsIGNzc1ZhbHVlWSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHBvc2l0aW9uLT5h
cHBlbmQoY3NzVmFsdWVYLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIHBvc2l0aW9uLT5hcHBlbmQo
Y3NzVmFsdWVZLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RG
TW92ZShwb3NpdGlvbiksIGltcG9ydGFudCk7Ci0gICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2Nyb2xsU25hcENvb3Jk
aW5hdGUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQotewotICAgIGF1dG8g
cG9zaXRpb25zID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAgIHdo
aWxlIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4g
Y3NzVmFsdWVYLCBjc3NWYWx1ZVk7Ci0gICAgICAgIGlmICghcGFyc2VTY3JvbGxTbmFwUG9zaXRp
b25zKGNzc1ZhbHVlWCwgY3NzVmFsdWVZKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICBwb3NpdGlvbnMtPmFwcGVuZChjc3NWYWx1ZVgucmVsZWFzZU5vbk51bGwoKSk7Ci0g
ICAgICAgIHBvc2l0aW9ucy0+YXBwZW5kKGNzc1ZhbHVlWS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAg
ICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICB9Ci0KLSAgICBpZiAocG9zaXRpb25zLT5s
ZW5ndGgoKSkgewotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUocG9zaXRpb25z
KSwgaW1wb3J0YW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBm
YWxzZTsKLX0KLSNlbmRpZgotCi1jb25zdCBpbnQgY01heEZpbGxQcm9wZXJ0aWVzID0gOTsKLQot
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFNob3J0aGFuZChDU1NQcm9wZXJ0eUlEIHByb3BJZCwg
Y29uc3QgQ1NTUHJvcGVydHlJRCogcHJvcGVydGllcywgaW50IG51bVByb3BlcnRpZXMsIGJvb2wg
aW1wb3J0YW50KQotewotICAgIEFTU0VSVChudW1Qcm9wZXJ0aWVzIDw9IGNNYXhGaWxsUHJvcGVy
dGllcyk7Ci0gICAgaWYgKG51bVByb3BlcnRpZXMgPiBjTWF4RmlsbFByb3BlcnRpZXMpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIHByb3BJ
ZCk7Ci0KLSAgICBib29sIHBhcnNlZFByb3BlcnR5W2NNYXhGaWxsUHJvcGVydGllc10gPSB7IGZh
bHNlIH07Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZXNbY01heEZpbGxQcm9wZXJ0aWVzXTsK
LSAgICBSZWZQdHI8Q1NTVmFsdWU+IGNsaXBWYWx1ZTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHBv
c2l0aW9uWVZhbHVlOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gcmVwZWF0WVZhbHVlOwotICAgIGJv
b2wgZm91bmRDbGlwID0gZmFsc2U7Ci0gICAgaW50IGk7Ci0gICAgYm9vbCBmb3VuZFBvc2l0aW9u
Q1NTUHJvcGVydHkgPSBmYWxzZTsKLQotICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCk7Ci0gICAgd2hpbGUgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsK
LSAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIGN1cnJlbnRWYWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpOwotICAgICAgICBpZiAoY3VycmVudFZhbHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6
Ok9wZXJhdG9yICYmIGN1cnJlbnRWYWx1ZS5pVmFsdWUgPT0gJywnKSB7Ci0gICAgICAgICAgICAv
LyBXZSBoaXQgdGhlIGVuZC4gIEZpbGwgaW4gYWxsIHJlbWFpbmluZyB2YWx1ZXMgd2l0aCB0aGUg
aW5pdGlhbCB2YWx1ZS4KLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAg
ICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IgJiYgcGFy
c2VkUHJvcGVydHlbaV0pCi0gICAgICAgICAgICAgICAgICAgIC8vIENvbG9yIGlzIG5vdCBhbGxv
d2VkIGV4Y2VwdCBhcyB0aGUgbGFzdCBpdGVtIGluIGEgbGlzdCBmb3IgYmFja2dyb3VuZHMuCi0g
ICAgICAgICAgICAgICAgICAgIC8vIFJlamVjdCB0aGUgZW50aXJlIHByb3BlcnR5LgotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXBhcnNl
ZFByb3BlcnR5W2ldICYmIHByb3BlcnRpZXNbaV0gIT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29s
b3IpIHsKLSAgICAgICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHZhbHVlc1tpXSwgY3NzVmFs
dWVQb29sLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbiB8fCBw
cm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uKQotICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHBvc2l0aW9uWVZhbHVlLCBjc3NWYWx1ZVBvb2wu
Y3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChw
cm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdCB8fCBwcm9wZXJ0aWVz
W2ldID09IENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZEZpbGxWYWx1ZShyZXBlYXRZVmFsdWUsIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNp
dEluaXRpYWxWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChwcm9wZXJ0aWVzW2ld
ID09IENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbiB8fCBwcm9wZXJ0aWVzW2ldID09IENTU1By
b3BlcnR5V2Via2l0TWFza09yaWdpbikgJiYgIXBhcnNlZFByb3BlcnR5W2ldKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJZiBiYWNrZ3JvdW5kLW9yaWdpbiB3YXNuJ3QgcHJlc2VudCwg
dGhlbiByZXNldCBiYWNrZ3JvdW5kLWNsaXAgYWxzby4KLSAgICAgICAgICAgICAgICAgICAgICAg
IGFkZEZpbGxWYWx1ZShjbGlwVmFsdWUsIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRp
YWxWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBwYXJzZWRQcm9wZXJ0eVtpXSA9IGZhbHNlOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKCFtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBzaXplQ1NTUHJvcGVydHlFeHBlY3Rl
ZCA9IGZhbHNlOwotICAgICAgICBpZiAoaXNGb3J3YXJkU2xhc2hPcGVyYXRvcihjdXJyZW50VmFs
dWUpICYmIGZvdW5kUG9zaXRpb25DU1NQcm9wZXJ0eSkgewotICAgICAgICAgICAgc2l6ZUNTU1By
b3BlcnR5RXhwZWN0ZWQgPSB0cnVlOwotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGZvdW5kUG9zaXRpb25DU1NQcm9wZXJ0eSA9IGZhbHNlOwot
ICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgIGZvciAoaSA9IDA7ICFmb3VuZCAm
JiBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7Ci0KLSAgICAgICAgICAgIGlmIChzaXplQ1NTUHJv
cGVydHlFeHBlY3RlZCAmJiAocHJvcGVydGllc1tpXSAhPSBDU1NQcm9wZXJ0eUJhY2tncm91bmRT
aXplICYmIHByb3BlcnRpZXNbaV0gIT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrU2l6ZSkpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIXNpemVDU1NQcm9wZXJ0eUV4
cGVjdGVkICYmIChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemUgfHwg
cHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplKSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0eVtpXSkgewot
ICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsMTsKLSAgICAgICAgICAgICAgICBS
ZWZQdHI8Q1NTVmFsdWU+IHZhbDI7Ci0gICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9w
SWQxLCBwcm9wSWQyOwotICAgICAgICAgICAgICAgIENTU1BhcnNlclZhbHVlJiBwYXJzZXJWYWx1
ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKHBhcnNl
RmlsbFByb3BlcnR5KHByb3BlcnRpZXNbaV0sIHByb3BJZDEsIHByb3BJZDIsIHZhbDEsIHZhbDIp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlZFByb3BlcnR5W2ldID0gZm91bmQgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUodmFsdWVzW2ldLCB2YWwxLnJlbGVh
c2VOb25OdWxsKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbiB8fCBwcm9wZXJ0aWVzW2ldID09IENTU1Byb3Bl
cnR5V2Via2l0TWFza1Bvc2l0aW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkRmlsbFZh
bHVlKHBvc2l0aW9uWVZhbHVlLCB2YWwyLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXQg
fHwgcHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUocmVwZWF0WVZhbHVlLCB2YWwyLnJlbGVhc2VO
b25OdWxsKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRPcmlnaW4gfHwgcHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tPcmlnaW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcGFyc2UgdGhl
IHZhbHVlIGFzIGEgY2xpcCwgYW5kIHNlZSBpZiB3ZSBzdWNjZWVkLgotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBhcnNlQmFja2dyb3VuZENsaXAocGFyc2VyVmFsdWUsIHZhbDEpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZShjbGlwVmFsdWUsIHZhbDEucmVs
ZWFzZU5vbk51bGwoKSk7IC8vIFRoZSBwcm9wZXJ0eSBwYXJzZWQgc3VjY2Vzc2Z1bGx5LgotICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZEZpbGxWYWx1ZShjbGlwVmFsdWUsIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRpYWxW
YWx1ZSgpKTsgLy8gU29tZSB2YWx1ZSB3YXMgdXNlZCBmb3Igb3JpZ2luIHRoYXQgaXMgbm90IHN1
cHBvcnRlZCBieSBjbGlwLiBKdXN0IHJlc2V0IGNsaXAgaW5zdGVhZC4KLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRDbGlwIHx8IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRN
YXNrQ2xpcCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kQ2xpcCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFja2dyb3Vu
ZFBvc2l0aW9uIHx8IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRp
b24pCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZFBvc2l0aW9uQ1NTUHJvcGVydHkgPSB0
cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIGF0IGxlYXN0IG9uZSBtYXRjaCwgdGhpcyBpcyBhbgot
ICAgICAgICAvLyBpbnZhbGlkIHNob3J0aGFuZCBhbmQgd2UgaGF2ZSB0byBpZ25vcmUgaXQKLSAg
ICAgICAgaWYgKCFmb3VuZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICAvLyBOb3cgYWRkIGFsbCBvZiB0aGUgcHJvcGVydGllcyB3ZSBmb3VuZC4KLSAgICBmb3IgKGkg
PSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7Ci0gICAgICAgIC8vIEZpbGwgaW4gYW55IHJl
bWFpbmluZyBwcm9wZXJ0aWVzIHdpdGggdGhlIGluaXRpYWwgdmFsdWUuCi0gICAgICAgIGlmICgh
cGFyc2VkUHJvcGVydHlbaV0pIHsKLSAgICAgICAgICAgIGFkZEZpbGxWYWx1ZSh2YWx1ZXNbaV0s
IGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKLSAgICAgICAgICAg
IGlmIChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uIHx8IHBy
b3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb24pCi0gICAgICAgICAg
ICAgICAgYWRkRmlsbFZhbHVlKHBvc2l0aW9uWVZhbHVlLCBjc3NWYWx1ZVBvb2wuY3JlYXRlSW1w
bGljaXRJbml0aWFsVmFsdWUoKSk7Ci0gICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXQgfHwgcHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tSZXBlYXQpCi0gICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHJlcGVhdFlW
YWx1ZSwgY3NzVmFsdWVQb29sLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOwotICAgICAg
ICAgICAgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luIHx8
IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrT3JpZ2luKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gSWYgYmFja2dyb3VuZC1vcmlnaW4gd2Fzbid0IHByZXNlbnQsIHRoZW4gcmVz
ZXQgYmFja2dyb3VuZC1jbGlwIGFsc28uCi0gICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKGNs
aXBWYWx1ZSwgY3NzVmFsdWVQb29sLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChwcm9wZXJ0aWVzW2ldID09IENTU1By
b3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uKSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblgsIFdURk1vdmUodmFsdWVzW2ldKSwgaW1wb3J0YW50
KTsKLSAgICAgICAgICAgIC8vIGl0J3MgT0sgdG8gY2FsbCBXVEZNb3ZlKHBvc2l0aW9uWVZhbHVl
KSBzaW5jZSB3ZSBvbmx5IHNlZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbiBvbmNlCi0g
ICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblksIFdU
Rk1vdmUocG9zaXRpb25ZVmFsdWUpLCBpbXBvcnRhbnQpOwotICAgICAgICB9IGVsc2UgaWYgKHBy
b3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb24pIHsKLSAgICAgICAg
ICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWCwgV1RGTW92ZSh2
YWx1ZXNbaV0pLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgLy8gaXQncyBPSyB0byBjYWxsIFdU
Rk1vdmUocG9zaXRpb25ZVmFsdWUpIHNpbmNlIHdlIG9ubHkgc2VlIENTU1Byb3BlcnR5V2Via2l0
TWFza1Bvc2l0aW9uIG9uY2UKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Vi
a2l0TWFza1Bvc2l0aW9uWSwgV1RGTW92ZShwb3NpdGlvbllWYWx1ZSksIGltcG9ydGFudCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRS
ZXBlYXQpIHsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZFJl
cGVhdFgsIFdURk1vdmUodmFsdWVzW2ldKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIC8vIGl0
J3MgT0sgdG8gY2FsbCBXVEZNb3ZlKHJlcGVhdFlWYWx1ZSkgc2luY2Ugd2Ugb25seSBzZWUgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb24gb25jZQotICAgICAgICAgICAgYWRkUHJvcGVydHko
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WSwgV1RGTW92ZShyZXBlYXRZVmFsdWUpLCBpbXBv
cnRhbnQpOwotICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlX
ZWJraXRNYXNrUmVwZWF0KSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tSZXBlYXRYLCBXVEZNb3ZlKHZhbHVlc1tpXSksIGltcG9ydGFudCk7Ci0gICAgICAg
ICAgICAvLyBpdCdzIE9LIHRvIGNhbGwgV1RGTW92ZShyZXBlYXRZVmFsdWUpIHNpbmNlIHdlIG9u
bHkgc2VlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uIG9uY2UKLSAgICAgICAgICAgIGFk
ZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdFksIFdURk1vdmUocmVwZWF0WVZh
bHVlKSwgaW1wb3J0YW50KTsKLSAgICAgICAgfSBlbHNlIGlmICgocHJvcGVydGllc1tpXSA9PSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRDbGlwIHx8IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlX
ZWJraXRNYXNrQ2xpcCkgJiYgIWZvdW5kQ2xpcCkKLSAgICAgICAgICAgIC8vIFZhbHVlIGlzIGFs
cmVhZHkgc2V0IHdoaWxlIHVwZGF0aW5nIG9yaWdpbgotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGVsc2UgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kU2l6
ZSAmJiAhcGFyc2VkUHJvcGVydHlbaV0gJiYgdXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhh
bmRCZWhhdmlvcigpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGFkZFByb3BlcnR5KHByb3BlcnRpZXNbaV0sIFdURk1vdmUodmFsdWVzW2ldKSwgaW1w
b3J0YW50KTsKLQotICAgICAgICAvLyBBZGQgaW4gY2xpcCB2YWx1ZXMgd2hlbiB3ZSBoaXQgdGhl
IGNvcnJlc3BvbmRpbmcgb3JpZ2luIHByb3BlcnR5LgotICAgICAgICBpZiAocHJvcGVydGllc1tp
XSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRPcmlnaW4gJiYgIWZvdW5kQ2xpcCkKLSAgICAgICAg
ICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENsaXAsIFdURk1vdmUoY2xpcFZh
bHVlKSwgaW1wb3J0YW50KTsKLSAgICAgICAgZWxzZSBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW4gJiYgIWZvdW5kQ2xpcCkKLSAgICAgICAgICAgIGFkZFBy
b3BlcnR5KENTU1Byb3BlcnR5V2Via2l0TWFza0NsaXAsIFdURk1vdmUoY2xpcFZhbHVlKSwgaW1w
b3J0YW50KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6
OmFkZEFuaW1hdGlvblZhbHVlKFJlZlB0cjxDU1NWYWx1ZT4mIGx2YWwsIFJlZjxDU1NWYWx1ZT4m
JiBydmFsKQotewotICAgIGlmICghbHZhbCkgewotICAgICAgICBsdmFsID0gV1RGTW92ZShydmFs
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCps
dmFsKSkgewotICAgICAgICBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpsdmFsKS5hcHBlbmQoV1RG
TW92ZShydmFsKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGxpc3QgPSBD
U1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0gICAgbGlzdC0+YXBwZW5kKGx2
YWwucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgbGlzdC0+YXBwZW5kKFdURk1vdmUocnZhbCkpOwot
ICAgIGx2YWwgPSBXVEZNb3ZlKGxpc3QpOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VBbmlt
YXRpb25TaG9ydGhhbmQoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQotewot
ICAgIEFTU0VSVChwcm9wSWQgPT0gQ1NTUHJvcGVydHlBbmltYXRpb24gfHwgcHJvcElkID09IENT
U1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uKTsKLQotICAgIGNvbnN0IHVuc2lnbmVkIG51bVByb3Bl
cnRpZXMgPSA4OwotICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmIHNob3J0aGFuZCA9
IGFuaW1hdGlvblNob3J0aGFuZEZvclBhcnNpbmcocHJvcElkKTsKLQotICAgIC8vIFRoZSBsaXN0
IG9mIHByb3BlcnRpZXMgaW4gdGhlIHNob3J0aGFuZCBzaG91bGQgYmUgdGhlIHNhbWUKLSAgICAv
LyBsZW5ndGggYXMgdGhlIGxpc3Qgd2l0aCBhbmltYXRpb24gbmFtZSBpbiBsYXN0IHBvc2l0aW9u
LCBldmVuIHRob3VnaCB0aGV5IGFyZQotICAgIC8vIGluIGEgZGlmZmVyZW50IG9yZGVyLgotICAg
IEFTU0VSVChudW1Qcm9wZXJ0aWVzID09IHNob3J0aGFuZC5sZW5ndGgoKSk7Ci0gICAgQVNTRVJU
KG51bVByb3BlcnRpZXMgPT0gYW5pbWF0aW9uU2hvcnRoYW5kKCkubGVuZ3RoKCkpOwotICAgIEFT
U0VSVChudW1Qcm9wZXJ0aWVzID09IHdlYmtpdEFuaW1hdGlvblNob3J0aGFuZCgpLmxlbmd0aCgp
KTsKLQotICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIHByb3BJZCk7Ci0KLSAgICBib29s
IHBhcnNlZFByb3BlcnR5W251bVByb3BlcnRpZXNdID0geyBmYWxzZSB9OwotICAgIEFuaW1hdGlv
blBhcnNlQ29udGV4dCBjb250ZXh0OwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWVzW251bVBy
b3BlcnRpZXNdOwotCi0gICAgYXV0byYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKTsKLSAgICB1bnNpZ25lZCBpOwotICAgIHdoaWxlIChtX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpKSB7Ci0gICAgICAgIENTU1BhcnNlclZhbHVlKiB2YWwgPSBtX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpOwotICAgICAgICBpZiAodmFsLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAm
JiB2YWwtPmlWYWx1ZSA9PSAnLCcpIHsKLSAgICAgICAgICAgIC8vIFdlIGhpdCB0aGUgZW5kLiAg
RmlsbCBpbiBhbGwgcmVtYWluaW5nIHZhbHVlcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVlLgotICAg
ICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkg
PCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZFByb3Bl
cnR5W2ldKQotICAgICAgICAgICAgICAgICAgICBhZGRBbmltYXRpb25WYWx1ZSh2YWx1ZXNbaV0s
IGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKLSAgICAgICAgICAg
ICAgICBwYXJzZWRQcm9wZXJ0eVtpXSA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKCFtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY29udGV4dC5jb21taXRGaXJzdEFuaW1hdGlvbigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVt
UHJvcGVydGllczsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ldKSB7
Ci0gICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWw7Ci0gICAgICAgICAgICAgICAg
aWYgKHBhcnNlQW5pbWF0aW9uUHJvcGVydHkoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtpXSwgdmFs
LCBjb250ZXh0KSkgewotICAgICAgICAgICAgICAgICAgICBwYXJzZWRQcm9wZXJ0eVtpXSA9IGZv
dW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYWRkQW5pbWF0aW9uVmFsdWUodmFsdWVz
W2ldLCB2YWwucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVGhlcmUg
YXJlIG1vcmUgdmFsdWVzIHRvIHByb2Nlc3MgYnV0ICdub25lJyBvciAnYWxsJyB3ZXJlIGFscmVh
ZHkgZGVmaW5lZCBhcyB0aGUgYW5pbWF0aW9uIHByb3BlcnR5LCB0aGUgZGVjbGFyYXRpb24gYmVj
b21lcyBpbnZhbGlkLgotICAgICAgICAgICAgaWYgKCFjb250ZXh0LmFuaW1hdGlvblByb3BlcnR5
S2V5d29yZEFsbG93ZWQoKSAmJiBjb250ZXh0Lmhhc0NvbW1pdHRlZEZpcnN0QW5pbWF0aW9uKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
aWYgd2UgZGlkbid0IGZpbmQgYXQgbGVhc3Qgb25lIG1hdGNoLCB0aGlzIGlzIGFuCi0gICAgICAg
IC8vIGludmFsaWQgc2hvcnRoYW5kIGFuZCB3ZSBoYXZlIHRvIGlnbm9yZSBpdAotICAgICAgICBp
ZiAoIWZvdW5kKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIEZp
bGwgaW4gYW55IHJlbWFpbmluZyBwcm9wZXJ0aWVzIHdpdGggdGhlIGluaXRpYWwgdmFsdWUuCi0g
ICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgewotICAgICAgICBpZiAoIXBh
cnNlZFByb3BlcnR5W2ldKQotICAgICAgICAgICAgYWRkQW5pbWF0aW9uVmFsdWUodmFsdWVzW2ld
LCBjc3NWYWx1ZVBvb2wuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7Ci0gICAgfQotCi0g
ICAgLy8gTm93IGFkZCBhbGwgb2YgdGhlIHByb3BlcnRpZXMgd2UgZm91bmQuCi0gICAgLy8gSW4g
dGhpcyBjYXNlIHdlIGhhdmUgdG8gZXhwbGljaXRseSBzZXQgdGhlIHZhcmlhbnQgZm9ybSBhcyB3
ZWxsLAotICAgIC8vIHRvIG1ha2Ugc3VyZSB0aGF0IGEgc2hvcnRoYW5kIGNsZWFycyBhbGwgZXhp
c3RpbmcgcHJlZml4ZWQgYW5kCi0gICAgLy8gdW5wcmVmaXhlZCB2YWx1ZXMuCi0gICAgZm9yIChp
ID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkKLSAgICAgICAgYWRkUHJvcGVydHlXaXRoUHJl
Zml4aW5nVmFyaWFudChzaG9ydGhhbmQucHJvcGVydGllcygpW2ldLCBXVEZNb3ZlKHZhbHVlc1tp
XSksIGltcG9ydGFudCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6
OmFkZFByb3BlcnR5V2l0aFByZWZpeGluZ1ZhcmlhbnQoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIFJl
ZlB0cjxDU1NWYWx1ZT4mJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgaW1wbGljaXQpCi17
Ci0gICAgYWRkUHJvcGVydHkocHJvcElkLCB2YWx1ZS5jb3B5UmVmKCksIGltcG9ydGFudCwgaW1w
bGljaXQpOwotCi0gICAgQ1NTUHJvcGVydHlJRCBwcmVmaXhpbmdWYXJpYW50ID0gcHJlZml4aW5n
VmFyaWFudEZvclByb3BlcnR5SWQocHJvcElkKTsKLSAgICBpZiAocHJlZml4aW5nVmFyaWFudCA9
PSBwcm9wSWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2N1cnJlbnRTaG9ydGhhbmQp
IHsKLSAgICAgICAgLy8gV2UgY2FuJ3QgdXNlIFNob3J0aGFuZFNjb3BlIGhlcmUgYXMgd2UgY2Fu
IGFscmVhZHkgYmUgaW5zaWRlIG9uZSAoZS5nIHdlIGFyZSBwYXJzaW5nIENTU1RyYW5zaXRpb24p
LgotICAgICAgICBtX2N1cnJlbnRTaG9ydGhhbmQgPSBwcmVmaXhpbmdWYXJpYW50Rm9yUHJvcGVy
dHlJZChtX2N1cnJlbnRTaG9ydGhhbmQpOwotICAgICAgICBhZGRQcm9wZXJ0eShwcmVmaXhpbmdW
YXJpYW50LCBXVEZNb3ZlKHZhbHVlKSwgaW1wb3J0YW50LCBpbXBsaWNpdCk7Ci0gICAgICAgIG1f
Y3VycmVudFNob3J0aGFuZCA9IHByZWZpeGluZ1ZhcmlhbnRGb3JQcm9wZXJ0eUlkKG1fY3VycmVu
dFNob3J0aGFuZCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGFkZFByb3BlcnR5KHByZWZpeGluZ1Zh
cmlhbnQsIFdURk1vdmUodmFsdWUpLCBpbXBvcnRhbnQsIGltcGxpY2l0KTsKLX0KLQotCi1SZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VDb2x1bW5XaWR0aCgpCi17Ci0g
ICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0
LT5jdXJyZW50KCkpOwotICAgIENTU1ZhbHVlSUQgaWQgPSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52
YWx1ZSgpLmlkOwotICAgIC8vIEFsd2F5cyBwYXJzZSB0aGlzIHByb3BlcnR5IGluIHN0cmljdCBt
b2RlLCBzaW5jZSBpdCB3b3VsZCBiZSBhbWJpZ3VvdXMgb3RoZXJ3aXNlIHdoZW4gdXNlZCBpbiB0
aGUgJ2NvbHVtbnMnIHNob3J0aGFuZCBwcm9wZXJ0eS4KLSAgICBpZiAoaWQgIT0gQ1NTVmFsdWVB
dXRvICYmICEodmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRk5v
bk5lZywgQ1NTU3RyaWN0TW9kZSkgJiYgcGFyc2VkRG91YmxlKHZhbHVlV2l0aENhbGN1bGF0aW9u
KSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBwYXJzZWRWYWx1ZSA9IHBh
cnNlVmFsaWRQcmltaXRpdmUoaWQsIHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLSAgICBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwotICAgIHJldHVybiBwYXJzZWRWYWx1ZTsKLX0KLQotUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQ29sdW1uQ291bnQoKQotewotICAgIFZhbHVl
V2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpKTsKLSAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5p
ZDsKLQotICAgIGlmIChpZCAhPSBDU1NWYWx1ZUF1dG8gJiYgIXZhbGlkYXRlVW5pdCh2YWx1ZVdp
dGhDYWxjdWxhdGlvbiwgRlBvc2l0aXZlSW50ZWdlciwgQ1NTUXVpcmtzTW9kZSkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBwYXJzZWRWYWx1ZSA9IHBhcnNlVmFsaWRQcmlt
aXRpdmUoaWQsIHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLSAgICBtX3ZhbHVlTGlzdC0+bmV4dCgp
OwotICAgIHJldHVybiBwYXJzZWRWYWx1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29s
dW1uc1Nob3J0aGFuZChib29sIGltcG9ydGFudCkKLXsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IGNv
bHVtbldpZHRoOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gY29sdW1uQ291bnQ7Ci0gICAgYm9vbCBo
YXNQZW5kaW5nRXhwbGljaXRBdXRvID0gZmFsc2U7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIHByb3Bl
cnRpZXNQYXJzZWQgPSAwOyBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpOyArK3Byb3BlcnRpZXNQYXJzZWQpIHsKLSAgICAgICAgaWYgKHByb3BlcnRpZXNQYXJz
ZWQgPj0gMikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gVG9vIG1hbnkgdmFsdWVzIGZv
ciB0aGlzIHNob3J0aGFuZC4gSW52YWxpZCBkZWNsYXJhdGlvbi4KLSAgICAgICAgaWYgKCFwcm9w
ZXJ0aWVzUGFyc2VkICYmIHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUF1dG8pIHsKLSAgICAgICAgICAg
IC8vICdhdXRvJyBpcyBhIHZhbGlkIHZhbHVlIGZvciBhbnkgb2YgdGhlIHR3byBsb25naGFuZHMs
IGFuZCBhdCB0aGlzIHBvaW50Ci0gICAgICAgICAgICAvLyB3ZSBkb24ndCBrbm93IHdoaWNoIG9u
ZShzKSBpdCBpcyBtZWFudCBmb3IuIFdlIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciB2
YWx1ZXMgZmlyc3QuCi0gICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAg
ICAgaGFzUGVuZGluZ0V4cGxpY2l0QXV0byA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBpZiAoIWNvbHVtbldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChjb2x1bW5X
aWR0aCA9IHBhcnNlQ29sdW1uV2lkdGgoKSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFjb2x1bW5Db3VudCkgewotICAgICAg
ICAgICAgICAgIGlmICgoY29sdW1uQ291bnQgPSBwYXJzZUNvbHVtbkNvdW50KCkpKQotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIElm
IHdlIGRpZG4ndCBmaW5kIGF0IGxlYXN0IG9uZSBtYXRjaCwgdGhpcyBpcyBhbiBpbnZhbGlkIHNo
b3J0aGFuZCBhbmQgd2UgaGF2ZSB0byBpZ25vcmUgaXQuCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBbnkgdW5hc3NpZ25lZCBwcm9wZXJ0eSBh
dCB0aGlzIHBvaW50IHdpbGwgYmVjb21lIGltcGxpY2l0ICdhdXRvJy4KLSAgICBpZiAoY29sdW1u
V2lkdGgpCi0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Q29sdW1uV2lkdGgsIFdURk1v
dmUoY29sdW1uV2lkdGgpLCBpbXBvcnRhbnQpOwotICAgIGVsc2UgewotICAgICAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUNvbHVtbldpZHRoLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pLCBpbXBvcnRhbnQsICFoYXNQZW5kaW5n
RXhwbGljaXRBdXRvIC8qIGltcGxpY2l0ICovKTsKLSAgICAgICAgaGFzUGVuZGluZ0V4cGxpY2l0
QXV0byA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChjb2x1bW5Db3VudCkKLSAgICAgICAgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlDb2x1bW5Db3VudCwgV1RGTW92ZShjb2x1bW5Db3VudCksIGlt
cG9ydGFudCk7Ci0gICAgZWxzZQotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbHVt
bkNvdW50LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZUF1dG8pLCBpbXBvcnRhbnQsICFoYXNQZW5kaW5nRXhwbGljaXRBdXRvIC8qIGltcGxp
Y2l0ICovKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VU
cmFuc2l0aW9uU2hvcnRoYW5kKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkK
LXsKLSAgICBjb25zdCB1bnNpZ25lZCBudW1Qcm9wZXJ0aWVzID0gNDsKLSAgICBjb25zdCBTdHls
ZVByb3BlcnR5U2hvcnRoYW5kJiBzaG9ydGhhbmQgPSBzaG9ydGhhbmRGb3JQcm9wZXJ0eShwcm9w
SWQpOwotICAgIEFTU0VSVChudW1Qcm9wZXJ0aWVzID09IHNob3J0aGFuZC5sZW5ndGgoKSk7Ci0K
LSAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBwcm9wSWQpOwotCi0gICAgYm9vbCBwYXJz
ZWRQcm9wZXJ0eVtudW1Qcm9wZXJ0aWVzXSA9IHsgZmFsc2UgfTsKLSAgICBBbmltYXRpb25QYXJz
ZUNvbnRleHQgY29udGV4dDsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlc1tudW1Qcm9wZXJ0
aWVzXTsKLQotICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCk7Ci0gICAgdW5zaWduZWQgaTsKLSAgICB3aGlsZSAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkg
ewotICAgICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsK
LSAgICAgICAgaWYgKHZhbC0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgdmFs
LT5pVmFsdWUgPT0gJywnKSB7Ci0gICAgICAgICAgICAvLyBXZSBoaXQgdGhlIGVuZC4gRmlsbCBp
biBhbGwgcmVtYWluaW5nIHZhbHVlcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVlLgotICAgICAgICAg
ICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1Q
cm9wZXJ0aWVzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ld
KQotICAgICAgICAgICAgICAgICAgICBhZGRBbmltYXRpb25WYWx1ZSh2YWx1ZXNbaV0sIGNzc1Zh
bHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICBw
YXJzZWRQcm9wZXJ0eVtpXSA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KCFtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY29udGV4dC5jb21taXRGaXJzdEFuaW1hdGlvbigpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICBmb3IgKGkgPSAwOyAhZm91bmQgJiYgaSA8
IG51bVByb3BlcnRpZXM7ICsraSkgewotICAgICAgICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0eVtp
XSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsOwotICAgICAgICAgICAg
ICAgIGlmIChwYXJzZUFuaW1hdGlvblByb3BlcnR5KHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbaV0s
IHZhbCwgY29udGV4dCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VkUHJvcGVydHlbaV0g
PSBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGFkZEFuaW1hdGlvblZhbHVlKHZh
bHVlc1tpXSwgdmFsLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBtb3JlIHZhbHVlcyB0byBwcm9jZXNzIGJ1dCAnbm9u
ZScgb3IgJ2FsbCcgd2VyZSBhbHJlYWR5IGRlZmluZWQgYXMgdGhlIGFuaW1hdGlvbiBwcm9wZXJ0
eSwgdGhlIGRlY2xhcmF0aW9uIGJlY29tZXMgaW52YWxpZC4KLSAgICAgICAgICAgICAgICBpZiAo
IWNvbnRleHQuYW5pbWF0aW9uUHJvcGVydHlLZXl3b3JkQWxsb3dlZCgpICYmIGNvbnRleHQuaGFz
Q29tbWl0dGVkRmlyc3RBbmltYXRpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaWYgd2UgZGlkbid0
IGZpbmQgYXQgbGVhc3Qgb25lIG1hdGNoLCB0aGlzIGlzIGFuCi0gICAgICAgIC8vIGludmFsaWQg
c2hvcnRoYW5kIGFuZCB3ZSBoYXZlIHRvIGlnbm9yZSBpdAotICAgICAgICBpZiAoIWZvdW5kKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIEZpbGwgaW4gYW55IHJl
bWFpbmluZyBwcm9wZXJ0aWVzIHdpdGggdGhlIGluaXRpYWwgdmFsdWUuCi0gICAgZm9yIChpID0g
MDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgewotICAgICAgICBpZiAoIXBhcnNlZFByb3BlcnR5
W2ldKQotICAgICAgICAgICAgYWRkQW5pbWF0aW9uVmFsdWUodmFsdWVzW2ldLCBjc3NWYWx1ZVBv
b2wuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgLy8gTm93IGFk
ZCBhbGwgb2YgdGhlIHByb3BlcnRpZXMgd2UgZm91bmQuCi0gICAgLy8gSW4gdGhpcyBjYXNlIHdl
IGhhdmUgdG8gZXhwbGljaXRseSBzZXQgdGhlIHZhcmlhbnQgZm9ybSBhcyB3ZWxsLAotICAgIC8v
IHRvIG1ha2Ugc3VyZSB0aGF0IGEgc2hvcnRoYW5kIGNsZWFycyBhbGwgZXhpc3RpbmcgcHJlZml4
ZWQgYW5kCi0gICAgLy8gdW5wcmVmaXhlZCB2YWx1ZXMuCi0gICAgZm9yIChpID0gMDsgaSA8IG51
bVByb3BlcnRpZXM7ICsraSkKLSAgICAgICAgYWRkUHJvcGVydHlXaXRoUHJlZml4aW5nVmFyaWFu
dChzaG9ydGhhbmQucHJvcGVydGllcygpW2ldLCBXVEZNb3ZlKHZhbHVlc1tpXSksIGltcG9ydGFu
dCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2hvcnRo
YW5kKENTU1Byb3BlcnR5SUQgcHJvcElkLCBjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiBz
aG9ydGhhbmQsIGJvb2wgaW1wb3J0YW50KQotewotICAgIC8vIFdlIHRyeSB0byBtYXRjaCBhcyBt
YW55IHByb3BlcnRpZXMgYXMgcG9zc2libGUKLSAgICAvLyBXZSBzZXQgdXAgYW4gYXJyYXkgb2Yg
Ym9vbGVhbnMgdG8gbWFyayB3aGljaCBwcm9wZXJ0eSBoYXMgYmVlbiBmb3VuZCwKLSAgICAvLyBh
bmQgd2UgdHJ5IHRvIHNlYXJjaCBmb3IgcHJvcGVydGllcyB1bnRpbCBpdCBtYWtlcyBubyBsb25n
ZXIgYW55IHNlbnNlLgotICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIHByb3BJZCk7Ci0K
LSAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgcHJvcGVydGllc1BhcnNlZCA9
IDA7Ci0gICAgYm9vbCBwcm9wZXJ0eUZvdW5kWzZdPSB7IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZh
bHNlLCBmYWxzZSwgZmFsc2UgfTsgLy8gNiBpcyBlbm91Z2ggc2l6ZS4KLQotICAgIHdoaWxlICht
X3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0gICAgICAgIGZvdW5kID0gZmFsc2U7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgcHJvcEluZGV4ID0gMDsgIWZvdW5kICYmIHByb3BJbmRleCA8IHNob3J0
aGFuZC5sZW5ndGgoKTsgKytwcm9wSW5kZXgpIHsKLSAgICAgICAgICAgIGlmICghcHJvcGVydHlG
b3VuZFtwcm9wSW5kZXhdICYmIHBhcnNlVmFsdWUoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtwcm9w
SW5kZXhdLCBpbXBvcnRhbnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5Rm91bmRb
cHJvcEluZGV4XSA9IGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydGll
c1BhcnNlZCsrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaWYgd2Ug
ZGlkbid0IGZpbmQgYXQgbGVhc3Qgb25lIG1hdGNoLCB0aGlzIGlzIGFuCi0gICAgICAgIC8vIGlu
dmFsaWQgc2hvcnRoYW5kIGFuZCB3ZSBoYXZlIHRvIGlnbm9yZSBpdAotICAgICAgICBpZiAoIWZv
dW5kKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChwcm9wZXJ0
aWVzUGFyc2VkID09IHNob3J0aGFuZC5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICAvLyBGaWxsIGluIGFueSByZW1haW5pbmcgcHJvcGVydGllcyB3aXRoIHRoZSBpbml0aWFs
IHZhbHVlLgotICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCk7Ci0gICAgSW1wbGljaXRTY29wZSBpbXBsaWNpdFNjb3BlKCp0aGlzLCBQcm9wZXJ0eUltcGxp
Y2l0KTsKLSAgICBjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kKiBwcm9wZXJ0aWVzRm9ySW5p
dGlhbGl6YXRpb24gPSBzaG9ydGhhbmQucHJvcGVydGllc0ZvckluaXRpYWxpemF0aW9uKCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNob3J0aGFuZC5sZW5ndGgoKTsgKytpKSB7Ci0g
ICAgICAgIGlmIChwcm9wZXJ0eUZvdW5kW2ldKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgaWYgKHByb3BlcnRpZXNGb3JJbml0aWFsaXphdGlvbikgewotICAgICAgICAgICAgY29u
c3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYgaW5pdFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzRm9y
SW5pdGlhbGl6YXRpb25baV07Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHByb3BJbmRleCA9
IDA7IHByb3BJbmRleCA8IGluaXRQcm9wZXJ0aWVzLmxlbmd0aCgpOyArK3Byb3BJbmRleCkKLSAg
ICAgICAgICAgICAgICBhZGRQcm9wZXJ0eShpbml0UHJvcGVydGllcy5wcm9wZXJ0aWVzKClbcHJv
cEluZGV4XSwgY3NzVmFsdWVQb29sLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9y
dGFudCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYWRkUHJvcGVydHkoc2hvcnRoYW5k
LnByb3BlcnRpZXMoKVtpXSwgY3NzVmFsdWVQb29sLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVl
KCksIGltcG9ydGFudCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NT
UGFyc2VyOjpwYXJzZTRWYWx1ZXMoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGNvbnN0IENTU1Byb3Bl
cnR5SUQgKnByb3BlcnRpZXMsICBib29sIGltcG9ydGFudCkKLXsKLSAgICAvKiBGcm9tIHRoZSBD
U1MgMiBzcGVjcywgOC4zCi0gICAgICogSWYgdGhlcmUgaXMgb25seSBvbmUgdmFsdWUsIGl0IGFw
cGxpZXMgdG8gYWxsIHNpZGVzLiBJZiB0aGVyZSBhcmUgdHdvIHZhbHVlcywgdGhlIHRvcCBhbmQK
LSAgICAgKiBib3R0b20gbWFyZ2lucyBhcmUgc2V0IHRvIHRoZSBmaXJzdCB2YWx1ZSBhbmQgdGhl
IHJpZ2h0IGFuZCBsZWZ0IG1hcmdpbnMgYXJlIHNldCB0byB0aGUgc2Vjb25kLgotICAgICAqIElm
IHRoZXJlIGFyZSB0aHJlZSB2YWx1ZXMsIHRoZSB0b3AgaXMgc2V0IHRvIHRoZSBmaXJzdCB2YWx1
ZSwgdGhlIGxlZnQgYW5kIHJpZ2h0IGFyZSBzZXQgdG8gdGhlCi0gICAgICogc2Vjb25kLCBhbmQg
dGhlIGJvdHRvbSBpcyBzZXQgdG8gdGhlIHRoaXJkLiBJZiB0aGVyZSBhcmUgZm91ciB2YWx1ZXMs
IHRoZXkgYXBwbHkgdG8gdGhlIHRvcCwKLSAgICAgKiByaWdodCwgYm90dG9tLCBhbmQgbGVmdCwg
cmVzcGVjdGl2ZWx5LgotICAgICAqLwotCi0gICAgdW5zaWduZWQgbnVtID0gaW5TaG9ydGhhbmQo
KSA/IDEgOiBtX3ZhbHVlTGlzdC0+c2l6ZSgpOwotCi0gICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUo
dGhpcywgcHJvcElkKTsKLQotICAgIC8vIHRoZSBvcmRlciBpcyB0b3AsIHJpZ2h0LCBib3R0b20s
IGxlZnQKLSAgICBzd2l0Y2ggKG51bSkgewotICAgICAgICBjYXNlIDE6IHsKLSAgICAgICAgICAg
IGlmICghcGFyc2VWYWx1ZShwcm9wZXJ0aWVzWzBdLCBpbXBvcnRhbnQpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2Vk
UHJvcGVydGllcy5sYXN0KCkudmFsdWUoKTsKLSAgICAgICAgICAgIEltcGxpY2l0U2NvcGUgaW1w
bGljaXRTY29wZSgqdGhpcywgUHJvcGVydHlJbXBsaWNpdCk7Ci0gICAgICAgICAgICBhZGRQcm9w
ZXJ0eShwcm9wZXJ0aWVzWzFdLCB2YWx1ZSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIGFkZFBy
b3BlcnR5KHByb3BlcnRpZXNbMl0sIHZhbHVlLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgYWRk
UHJvcGVydHkocHJvcGVydGllc1szXSwgdmFsdWUsIGltcG9ydGFudCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIDI6IHsKLSAgICAgICAgICAgIGlmICghcGFy
c2VWYWx1ZShwcm9wZXJ0aWVzWzBdLCBpbXBvcnRhbnQpIHx8ICFwYXJzZVZhbHVlKHByb3BlcnRp
ZXNbMV0sIGltcG9ydGFudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgQ1NTVmFsdWUqIHZhbHVlID0gbV9wYXJzZWRQcm9wZXJ0aWVzW21fcGFyc2VkUHJvcGVy
dGllcy5zaXplKCkgLSAyXS52YWx1ZSgpOwotICAgICAgICAgICAgSW1wbGljaXRTY29wZSBpbXBs
aWNpdFNjb3BlKCp0aGlzLCBQcm9wZXJ0eUltcGxpY2l0KTsKLSAgICAgICAgICAgIGFkZFByb3Bl
cnR5KHByb3BlcnRpZXNbMl0sIHZhbHVlLCBpbXBvcnRhbnQpOwotICAgICAgICAgICAgdmFsdWUg
PSBtX3BhcnNlZFByb3BlcnRpZXNbbV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDJdLnZhbHVl
KCk7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wZXJ0aWVzWzNdLCB2YWx1ZSwgaW1wb3J0
YW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgMzogewot
ICAgICAgICAgICAgaWYgKCFwYXJzZVZhbHVlKHByb3BlcnRpZXNbMF0sIGltcG9ydGFudCkgfHwg
IXBhcnNlVmFsdWUocHJvcGVydGllc1sxXSwgaW1wb3J0YW50KSB8fCAhcGFyc2VWYWx1ZShwcm9w
ZXJ0aWVzWzJdLCBpbXBvcnRhbnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllc1ttX3BhcnNlZFBy
b3BlcnRpZXMuc2l6ZSgpIC0gMl0udmFsdWUoKTsKLSAgICAgICAgICAgIEltcGxpY2l0U2NvcGUg
aW1wbGljaXRTY29wZSgqdGhpcywgUHJvcGVydHlJbXBsaWNpdCk7Ci0gICAgICAgICAgICBhZGRQ
cm9wZXJ0eShwcm9wZXJ0aWVzWzNdLCB2YWx1ZSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgNDogewotICAgICAgICAgICAgaWYgKCFwYXJz
ZVZhbHVlKHByb3BlcnRpZXNbMF0sIGltcG9ydGFudCkgfHwgIXBhcnNlVmFsdWUocHJvcGVydGll
c1sxXSwgaW1wb3J0YW50KSB8fAotICAgICAgICAgICAgICAgICFwYXJzZVZhbHVlKHByb3BlcnRp
ZXNbMl0sIGltcG9ydGFudCkgfHwgIXBhcnNlVmFsdWUocHJvcGVydGllc1szXSwgaW1wb3J0YW50
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBkZWZhdWx0OiB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gYXV0byB8IDxpZGVu
dGlmaWVyPgotYm9vbCBDU1NQYXJzZXI6OnBhcnNlUGFnZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwg
Ym9vbCBpbXBvcnRhbnQpCi17Ci0gICAgQVNTRVJUKHByb3BJZCA9PSBDU1NQcm9wZXJ0eVBhZ2Up
OwotCi0gICAgaWYgKG1fdmFsdWVMaXN0LT5zaXplKCkgIT0gMSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAodmFs
dWUtPmlkID09IENTU1ZhbHVlQXV0bykgewotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCks
IGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAodmFsdWUt
PmlkID09IDAgJiYgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkg
ewotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVl
KCp2YWx1ZSksIGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIDxsZW5ndGg+ezEsMn0gfCBhdXRvIHwgWyA8cGFnZS1zaXpl
PiB8fCBbIHBvcnRyYWl0IHwgbGFuZHNjYXBlXSBdCi1ib29sIENTU1BhcnNlcjo6cGFyc2VTaXpl
KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKLXsKLSAgICBBU1NFUlQocHJv
cElkID09IENTU1Byb3BlcnR5U2l6ZSk7Ci0KLSAgICBpZiAobV92YWx1ZUxpc3QtPnNpemUoKSA+
IDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9
IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYXV0byBwYXJzZWRWYWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNw
YWNlU2VwYXJhdGVkKCk7Ci0KLSAgICAvLyBGaXJzdCBwYXJhbWV0ZXIuCi0gICAgU2l6ZVBhcmFt
ZXRlclR5cGUgcGFyYW1UeXBlID0gcGFyc2VTaXplUGFyYW1ldGVyKHBhcnNlZFZhbHVlcywgKnZh
bHVlLCBOb25lKTsKLSAgICBpZiAocGFyYW1UeXBlID09IE5vbmUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIC8vIFNlY29uZCBwYXJhbWV0ZXIsIGlmIGFueS4KLSAgICB2YWx1ZSA9IG1f
dmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgIHBhcmFtVHlwZSA9
IHBhcnNlU2l6ZVBhcmFtZXRlcihwYXJzZWRWYWx1ZXMsICp2YWx1ZSwgcGFyYW1UeXBlKTsKLSAg
ICAgICAgaWYgKHBhcmFtVHlwZSA9PSBOb25lKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZShwYXJzZWRWYWx1ZXMpLCBp
bXBvcnRhbnQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1DU1NQYXJzZXI6OlNpemVQYXJhbWV0
ZXJUeXBlIENTU1BhcnNlcjo6cGFyc2VTaXplUGFyYW1ldGVyKENTU1ZhbHVlTGlzdCYgcGFyc2Vk
VmFsdWVzLCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFNpemVQYXJhbWV0ZXJUeXBlIHByZXZQYXJh
bVR5cGUpCi17Ci0gICAgc3dpdGNoICh2YWx1ZS5pZCkgewotICAgIGNhc2UgQ1NTVmFsdWVBdXRv
OgotICAgICAgICBpZiAocHJldlBhcmFtVHlwZSA9PSBOb25lKSB7Ci0gICAgICAgICAgICBwYXJz
ZWRWYWx1ZXMuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKHZhbHVlLmlkKSk7Ci0gICAgICAgICAgICByZXR1cm4gQXV0bzsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gTm9uZTsKLSAgICBjYXNlIENTU1ZhbHVlTGFuZHNjYXBlOgotICAgIGNh
c2UgQ1NTVmFsdWVQb3J0cmFpdDoKLSAgICAgICAgaWYgKHByZXZQYXJhbVR5cGUgPT0gTm9uZSB8
fCBwcmV2UGFyYW1UeXBlID09IFBhZ2VTaXplKSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZXMu
YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZh
bHVlLmlkKSk7Ci0gICAgICAgICAgICByZXR1cm4gT3JpZW50YXRpb247Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIE5vbmU7Ci0gICAgY2FzZSBDU1NWYWx1ZUEzOgotICAgIGNhc2UgQ1NTVmFs
dWVBNDoKLSAgICBjYXNlIENTU1ZhbHVlQTU6Ci0gICAgY2FzZSBDU1NWYWx1ZUI0OgotICAgIGNh
c2UgQ1NTVmFsdWVCNToKLSAgICBjYXNlIENTU1ZhbHVlTGVkZ2VyOgotICAgIGNhc2UgQ1NTVmFs
dWVMZWdhbDoKLSAgICBjYXNlIENTU1ZhbHVlTGV0dGVyOgotICAgICAgICBpZiAocHJldlBhcmFt
VHlwZSA9PSBOb25lIHx8IHByZXZQYXJhbVR5cGUgPT0gT3JpZW50YXRpb24pIHsKLSAgICAgICAg
ICAgIC8vIE5vcm1hbGl6ZSB0byBQYWdlIFNpemUgdGhlbiBPcmllbnRhdGlvbiBvcmRlciBieSBw
cmVwZW5kaW5nLgotICAgICAgICAgICAgLy8gVGhpcyBpcyBub3Qgc3BlY2lmaWVkIGJ5IHRoZSBD
U1MzIFBhZ2VkIE1lZGlhIHNwZWNpZmljYXRpb24sIGJ1dCBmb3Igc2ltcGxlciBwcm9jZXNzaW5n
IGxhdGVyIChTdHlsZVJlc29sdmVyOjphcHBseVBhZ2VTaXplUHJvcGVydHkpLgotICAgICAgICAg
ICAgcGFyc2VkVmFsdWVzLnByZXBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUodmFsdWUuaWQpKTsKLSAgICAgICAgICAgIHJldHVybiBQYWdlU2l6ZTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9uZTsKLSAgICBjYXNlIENTU1ZhbHVlSW52YWxp
ZDogewotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbih2
YWx1ZSk7Ci0gICAgICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZM
ZW5ndGggfCBGTm9uTmVnKSAmJiAocHJldlBhcmFtVHlwZSA9PSBOb25lIHx8IHByZXZQYXJhbVR5
cGUgPT0gTGVuZ3RoKSkgewotICAgICAgICAgICAgcGFyc2VkVmFsdWVzLmFwcGVuZChjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pKTsKLSAgICAgICAgICAg
IHJldHVybiBMZW5ndGg7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vbmU7Ci0gICAgfQot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBOb25lOwotICAgIH0KLX0KLQotLy8gWyA8c3Ry
aW5nPiA8c3RyaW5nPiBdKyB8IGluaGVyaXQgfCBub25lCi0vLyBpbmhlcml0IGFuZCBub25lIGFy
ZSBoYW5kbGVkIGluIHBhcnNlVmFsdWUuCi1ib29sIENTU1BhcnNlcjo6cGFyc2VRdW90ZXMoQ1NT
UHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQotewotICAgIGF1dG8gdmFsdWVzID0g
Q1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwotICAgIHdoaWxlIChDU1NQYXJz
ZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0gICAgICAgIGlmICh2
YWx1ZS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KHZhbHVlLT5zdHJpbmcsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSk7Ci0gICAgICAg
IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgfQotICAgIGlmICh2YWx1ZXMtPmxlbmd0aCgpKSB7
Ci0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZSh2YWx1ZXMpLCBpbXBvcnRhbnQp
OwotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VBbHQoQ1NT
UHJvcGVydHlJRCBwcm9wSUQsIGJvb2wgaW1wb3J0YW50KQotewotICAgIENTU1BhcnNlclZhbHVl
JiBjdXJyZW50VmFsdWUgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBSZWZQdHI8Q1NT
VmFsdWU+IHBhcnNlZFZhbHVlOwotCi0gICAgaWYgKGN1cnJlbnRWYWx1ZS51bml0ID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQotICAgICAgICBwYXJzZWRWYWx1ZSA9IGNyZWF0ZVBy
aW1pdGl2ZVN0cmluZ1ZhbHVlKGN1cnJlbnRWYWx1ZSk7Ci0gICAgZWxzZSBpZiAoY3VycmVudFZh
bHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uKSB7Ci0gICAgICAgIENTU1BhcnNl
clZhbHVlTGlzdCogYXJncyA9IGN1cnJlbnRWYWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsKLSAg
ICAgICAgaWYgKCFhcmdzKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY3VycmVudFZhbHVlLmZ1bmN0aW9uLT5uYW1l
LCAiYXR0cigiKSkKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VBdHRyKCphcmdzKTsK
LSAgICB9Ci0gICAgCi0gICAgaWYgKHBhcnNlZFZhbHVlKSB7Ci0gICAgICAgIGFkZFByb3BlcnR5
KHByb3BJRCwgcGFyc2VkVmFsdWUucmVsZWFzZU5vbk51bGwoKSwgaW1wb3J0YW50KTsKLSAgICAg
ICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VDdXN0b21Qcm9wZXJ0
eURlY2xhcmF0aW9uKGJvb2wgaW1wb3J0YW50LCBDU1NWYWx1ZUlEIGlkKQotewotICAgIGlmICht
X2N1c3RvbVByb3BlcnR5TmFtZS5pc0VtcHR5KCkgfHwgIW1fdmFsdWVMaXN0KQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgYXV0byYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlOwotICAgIGlmIChpZCA9
PSBDU1NWYWx1ZUluaGVyaXQpCi0gICAgICAgIHZhbHVlID0gY3NzVmFsdWVQb29sLmNyZWF0ZUlu
aGVyaXRlZFZhbHVlKCk7Ci0gICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVJbml0aWFsKQotICAg
ICAgICB2YWx1ZSA9IGNzc1ZhbHVlUG9vbC5jcmVhdGVFeHBsaWNpdEluaXRpYWxWYWx1ZSgpOwot
ICAgIGVsc2UgaWYgKGlkID09IENTU1ZhbHVlVW5zZXQpCi0gICAgICAgIHZhbHVlID0gY3NzVmFs
dWVQb29sLmNyZWF0ZVVuc2V0VmFsdWUoKTsKLSAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZVJl
dmVydCkKLSAgICAgICAgdmFsdWUgPSBjc3NWYWx1ZVBvb2wuY3JlYXRlUmV2ZXJ0VmFsdWUoKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgYXV0byB2YWx1ZUxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0
ZUZyb21QYXJzZXJWYWx1ZUxpc3QoKm1fdmFsdWVMaXN0KTsKLSAgICAgICAgaWYgKG1fdmFsdWVM
aXN0LT5jb250YWluc1ZhcmlhYmxlcygpKQotICAgICAgICAgICAgdmFsdWUgPSBDU1NWYXJpYWJs
ZURlcGVuZGVudFZhbHVlOjpjcmVhdGUoV1RGTW92ZSh2YWx1ZUxpc3QpLCBDU1NQcm9wZXJ0eUN1
c3RvbSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbHVlID0gV1RGTW92ZSh2YWx1ZUxp
c3QpOwotICAgIH0KLQotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Q3VzdG9tLCBDU1NDdXN0
b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGUobV9jdXN0b21Qcm9wZXJ0eU5hbWUsIHZhbHVlLnJlbGVh
c2VOb25OdWxsKCkpLCBpbXBvcnRhbnQsIGZhbHNlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ly8gWyA8c3RyaW5nPiB8IDx1cmk+IHwgPGNvdW50ZXI+IHwgYXR0cihYKSB8IG9wZW4tcXVvdGUg
fCBjbG9zZS1xdW90ZSB8IG5vLW9wZW4tcXVvdGUgfCBuby1jbG9zZS1xdW90ZSBdKyB8IGluaGVy
aXQKLS8vIGluIENTUyAyLjEgdGhpcyBnb3Qgc29tZXdoYXQgcmVkdWNlZDoKLS8vIFsgPHN0cmlu
Zz4gfCBhdHRyKFgpIHwgb3Blbi1xdW90ZSB8IGNsb3NlLXF1b3RlIHwgbm8tb3Blbi1xdW90ZSB8
IG5vLWNsb3NlLXF1b3RlIF0rIHwgaW5oZXJpdAotYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29udGVu
dChDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgYXV0byB2YWx1
ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0KLSAgICB3aGlsZSAo
Q1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgewotICAgICAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlZFZhbHVlOwotICAgICAgICBpZiAodmFsdWUtPnVuaXQg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKLSAgICAgICAgICAgIC8vIHVybAotICAg
ICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoY29tcGxldGVVUkwo
dmFsdWUtPnN0cmluZykpOwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1Bh
cnNlclZhbHVlOjpGdW5jdGlvbikgewotICAgICAgICAgICAgLy8gYXR0cihYKSB8IGNvdW50ZXIo
WCBbLFldKSB8IGNvdW50ZXJzKFgsIFksIFssWl0pIHwgLXdlYmtpdC1ncmFkaWVudCguLi4pCi0g
ICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS0+ZnVuY3Rpb24tPmFy
Z3MuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoIWFyZ3MpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZh
bHVlLT5mdW5jdGlvbi0+bmFtZSwgImF0dHIoIikpIHsKLSAgICAgICAgICAgICAgICBwYXJzZWRW
YWx1ZSA9IHBhcnNlQXR0cigqYXJncyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRWYWx1
ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSBlbHNl
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUs
ICJjb3VudGVyKCIpKSB7Ci0gICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZUNvdW50
ZXJDb250ZW50KCphcmdzLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRWYWx1
ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSBlbHNl
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUs
ICJjb3VudGVycygiKSkgewotICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VDb3Vu
dGVyQ29udGVudCgqYXJncywgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRWYWx1
ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSBlbHNl
IGlmIChpc0ltYWdlU2V0RnVuY3Rpb25WYWx1ZSgqdmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAg
cGFyc2VkVmFsdWUgPSBwYXJzZUltYWdlU2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYXJz
ZWRWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fSBlbHNlIGlmIChpc0dlbmVyYXRlZEltYWdlVmFsdWUoKnZhbHVlKSkgewotICAgICAgICAgICAg
ICAgIGlmICghcGFyc2VHZW5lcmF0ZWRJbWFnZSgqbV92YWx1ZUxpc3QsIHBhcnNlZFZhbHVlKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT51
bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpIHsKLSAgICAgICAgICAgIC8vIG9w
ZW4tcXVvdGUKLSAgICAgICAgICAgIC8vIGNsb3NlLXF1b3RlCi0gICAgICAgICAgICAvLyBuby1v
cGVuLXF1b3RlCi0gICAgICAgICAgICAvLyBuby1jbG9zZS1xdW90ZQotICAgICAgICAgICAgLy8g
aW5oZXJpdAotICAgICAgICAgICAgLy8gRklYTUU6IFRoZXNlIGFyZSBub3QgeWV0IGltcGxlbWVu
dGVkIChodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTAzKS4KLSAgICAg
ICAgICAgIC8vIG5vbmUKLSAgICAgICAgICAgIC8vIG5vcm1hbAotICAgICAgICAgICAgc3dpdGNo
ICh2YWx1ZS0+aWQpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVPcGVuUXVvdGU6Ci0gICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlQ2xvc2VRdW90ZToKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVOb09wZW5RdW90ZToKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb0Nsb3NlUXVvdGU6Ci0g
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9uZToKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVO
b3JtYWw6Ci0gICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1NUUklORykgewotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjcmVhdGVQ
cmltaXRpdmVTdHJpbmdWYWx1ZSgqdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghcGFy
c2VkVmFsdWUpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQocGFy
c2VkVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7
Ci0gICAgfQotCi0gICAgaWYgKHZhbHVlcy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgYWRkUHJvcGVy
dHkocHJvcElkLCBXVEZNb3ZlKHZhbHVlcyksIGltcG9ydGFudCk7Ci0gICAgICAgIG1fdmFsdWVM
aXN0LT5uZXh0KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQXR0
cihDU1NQYXJzZXJWYWx1ZUxpc3QmIGFyZ3MpCi17Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDEp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUmIGFyZ3VtZW50
ID0gKmFyZ3MuY3VycmVudCgpOwotCi0gICAgaWYgKGFyZ3VtZW50LnVuaXQgIT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19JREVOVCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBBU1NF
UlQoYXJndW1lbnQuc3RyaW5nLmxlbmd0aCgpKTsKLQotICAgIC8vIENTUyBhbGxvd3MgaWRlbnRp
ZmllcnMgd2l0aCAiLSIgYXQgdGhlIHN0YXJ0LCBsaWtlICItd2Via2l0LW1hc2staW1hZ2UiLgot
ICAgIC8vIEJ1dCBIVE1MIGF0dHJpYnV0ZSBuYW1lcyBjYW4ndCBoYXZlIHRob3NlIGNoYXJhY3Rl
cnMsIGFuZCB3ZSBzaG91bGQgbm90Ci0gICAgLy8gZXZlbiBwYXJzZSB0aGVtIGluc2lkZSBhdHRy
KCkuCi0gICAgaWYgKGFyZ3VtZW50LnN0cmluZ1swXSA9PSAnLScpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgaWYgKG1fY29udGV4dC5pc0hUTUxEb2N1bWVudCkKLSAgICAgICAgYXJn
dW1lbnQuc3RyaW5nLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5QbGFjZSgpOwotCi0gICAgLy8g
RklYTUU6IElzIHRoZXJlIHNvbWUgc21hbGwgYmVuZWZpdCB0byBjcmVhdGluZyBhbiBBdG9taWNT
dHJpbmcgaGVyZSBpbnN0ZWFkIG9mIGEgU3RyaW5nPwotICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKFN0cmluZyhhcmd1bWVudC5zdHJpbmcpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0FUVFIpOwotfQotCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENT
U1BhcnNlcjo6cGFyc2VCYWNrZ3JvdW5kQ29sb3IoKQotewotICAgIENTU1ZhbHVlSUQgaWQgPSBt
X3ZhbHVlTGlzdC0+Y3VycmVudCgpLT5pZDsKLSAgICBpZiAoaWQgPT0gQ1NTVmFsdWVXZWJraXRU
ZXh0IHx8IGlzVmFsaWRTeXN0ZW1Db2xvclZhbHVlKGlkKSB8fCBpZCA9PSBDU1NWYWx1ZU1lbnUg
fHwgaWQgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IKLSAgICAgICAgfHwgKGlkID49IENTU1ZhbHVl
R3JleSAmJiBpZCA8IENTU1ZhbHVlV2Via2l0VGV4dCAmJiBpblF1aXJrc01vZGUoKSkpCi0gICAg
ICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShpZCk7Ci0gICAgcmV0dXJuIHBhcnNlQ29sb3IoKTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBh
cnNlRmlsbEltYWdlKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFs
dWU+JiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWVMaXN0LmN1cnJlbnQoKS0+aWQgPT0gQ1NTVmFs
dWVOb25lKSB7Ci0gICAgICAgIHZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIGlmICh2YWx1ZUxpc3QuY3VycmVudCgpLT51bml0ID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfVVJJKSB7Ci0gICAgICAgIHZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKGNv
bXBsZXRlVVJMKHZhbHVlTGlzdC5jdXJyZW50KCktPnN0cmluZykpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoaXNHZW5lcmF0ZWRJbWFnZVZhbHVlKCp2YWx1ZUxpc3Qu
Y3VycmVudCgpKSkKLSAgICAgICAgcmV0dXJuIHBhcnNlR2VuZXJhdGVkSW1hZ2UodmFsdWVMaXN0
LCB2YWx1ZSk7Ci0gICAgCi0gICAgaWYgKGlzSW1hZ2VTZXRGdW5jdGlvblZhbHVlKCp2YWx1ZUxp
c3QuY3VycmVudCgpKSkgewotICAgICAgICB2YWx1ZSA9IHBhcnNlSW1hZ2VTZXQoKTsKLSAgICAg
ICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFy
c2VQb3NpdGlvblgoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QpCi17Ci0gICAgaW50IGlk
ID0gdmFsdWVMaXN0LmN1cnJlbnQoKS0+aWQ7Ci0gICAgaWYgKGlkID09IENTU1ZhbHVlTGVmdCB8
fCBpZCA9PSBDU1NWYWx1ZVJpZ2h0IHx8IGlkID09IENTU1ZhbHVlQ2VudGVyKSB7Ci0gICAgICAg
IGludCBwZXJjZW50ID0gMDsKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlUmlnaHQpCi0gICAg
ICAgICAgICBwZXJjZW50ID0gMTAwOwotICAgICAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZUNl
bnRlcikKLSAgICAgICAgICAgIHBlcmNlbnQgPSA1MDsKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocGVyY2VudCwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QRVJDRU5UQUdFKTsKLSAgICB9Ci0gICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVX
aXRoQ2FsY3VsYXRpb24oKnZhbHVlTGlzdC5jdXJyZW50KCkpOwotICAgIGlmICh2YWxpZGF0ZVVu
aXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQZXJjZW50IHwgRkxlbmd0aCkpCi0gICAgICAgIHJl
dHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwot
ICAgIHJldHVybiBudWxscHRyOwotfQotCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1Bh
cnNlcjo6cGFyc2VQb3NpdGlvblkoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QpCi17Ci0g
ICAgaW50IGlkID0gdmFsdWVMaXN0LmN1cnJlbnQoKS0+aWQ7Ci0gICAgaWYgKGlkID09IENTU1Zh
bHVlVG9wIHx8IGlkID09IENTU1ZhbHVlQm90dG9tIHx8IGlkID09IENTU1ZhbHVlQ2VudGVyKSB7
Ci0gICAgICAgIGludCBwZXJjZW50ID0gMDsKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQm90
dG9tKQotICAgICAgICAgICAgcGVyY2VudCA9IDEwMDsKLSAgICAgICAgZWxzZSBpZiAoaWQgPT0g
Q1NTVmFsdWVDZW50ZXIpCi0gICAgICAgICAgICBwZXJjZW50ID0gNTA7Ci0gICAgICAgIHJldHVy
biBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHBlcmNlbnQsIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7Ci0gICAgfQotICAgIFZhbHVlV2l0aENhbGN1bGF0
aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZUxpc3QuY3VycmVudCgpKTsKLSAgICBpZiAo
dmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUGVyY2VudCB8IEZMZW5ndGgpKQot
ICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1
bGF0aW9uKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBDU1NQYXJzZXI6OnBhcnNlRmlsbFBvc2l0aW9uQ29tcG9uZW50KENTU1BhcnNlclZhbHVl
TGlzdCYgdmFsdWVMaXN0LCB1bnNpZ25lZCYgY3VtdWxhdGl2ZUZsYWdzLCBGaWxsUG9zaXRpb25G
bGFnJiBpbmRpdmlkdWFsRmxhZywgRmlsbFBvc2l0aW9uUGFyc2luZ01vZGUgcGFyc2luZ01vZGUp
Ci17Ci0gICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlTGlzdC5jdXJyZW50KCktPmlkOwotICAgIGlm
IChpZCA9PSBDU1NWYWx1ZUxlZnQgfHwgaWQgPT0gQ1NTVmFsdWVUb3AgfHwgaWQgPT0gQ1NTVmFs
dWVSaWdodCB8fCBpZCA9PSBDU1NWYWx1ZUJvdHRvbSB8fCBpZCA9PSBDU1NWYWx1ZUNlbnRlcikg
ewotICAgICAgICBpbnQgcGVyY2VudCA9IDA7Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUxl
ZnQgfHwgaWQgPT0gQ1NTVmFsdWVSaWdodCkgewotICAgICAgICAgICAgaWYgKGN1bXVsYXRpdmVG
bGFncyAmIFhGaWxsUG9zaXRpb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgICAgICAgICBjdW11bGF0aXZlRmxhZ3MgfD0gWEZpbGxQb3NpdGlvbjsKLSAgICAgICAgICAg
IGluZGl2aWR1YWxGbGFnID0gWEZpbGxQb3NpdGlvbjsKLSAgICAgICAgICAgIGlmIChpZCA9PSBD
U1NWYWx1ZVJpZ2h0KQotICAgICAgICAgICAgICAgIHBlcmNlbnQgPSAxMDA7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVUb3AgfHwgaWQgPT0gQ1NTVmFsdWVCb3R0
b20pIHsKLSAgICAgICAgICAgIGlmIChjdW11bGF0aXZlRmxhZ3MgJiBZRmlsbFBvc2l0aW9uKQot
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgY3VtdWxhdGl2ZUZs
YWdzIHw9IFlGaWxsUG9zaXRpb247Ci0gICAgICAgICAgICBpbmRpdmlkdWFsRmxhZyA9IFlGaWxs
UG9zaXRpb247Ci0gICAgICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVCb3R0b20pCi0gICAgICAg
ICAgICAgICAgcGVyY2VudCA9IDEwMDsKLSAgICAgICAgfSBlbHNlIGlmIChpZCA9PSBDU1NWYWx1
ZUNlbnRlcikgewotICAgICAgICAgICAgLy8gQ2VudGVyIGlzIGFtYmlndW91cywgc28gd2UncmUg
bm90IHN1cmUgd2hpY2ggcG9zaXRpb24gd2UndmUgZm91bmQgeWV0LCBhbiB4IG9yIGEgeS4KLSAg
ICAgICAgICAgIHBlcmNlbnQgPSA1MDsKLSAgICAgICAgICAgIGN1bXVsYXRpdmVGbGFncyB8PSBB
bWJpZ3VvdXNGaWxsUG9zaXRpb247Ci0gICAgICAgICAgICBpbmRpdmlkdWFsRmxhZyA9IEFtYmln
dW91c0ZpbGxQb3NpdGlvbjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwYXJzaW5nTW9kZSA9
PSBSZXNvbHZlVmFsdWVzQXNLZXl3b3JkKQotICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlkKTsKLQotICAgICAgICByZXR1
cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShwZXJjZW50LCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwotICAgIH0KLSAgICBWYWx1ZVdpdGhDYWxjdWxh
dGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWVMaXN0LmN1cnJlbnQoKSk7Ci0gICAgaWYg
KCF2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQZXJjZW50IHwgRkxlbmd0aCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKCFjdW11bGF0aXZlRmxhZ3MpIHsK
LSAgICAgICAgY3VtdWxhdGl2ZUZsYWdzIHw9IFhGaWxsUG9zaXRpb247Ci0gICAgICAgIGluZGl2
aWR1YWxGbGFnID0gWEZpbGxQb3NpdGlvbjsKLSAgICB9IGVsc2UgaWYgKGN1bXVsYXRpdmVGbGFn
cyAmIChYRmlsbFBvc2l0aW9uIHwgQW1iaWd1b3VzRmlsbFBvc2l0aW9uKSkgewotICAgICAgICBj
dW11bGF0aXZlRmxhZ3MgfD0gWUZpbGxQb3NpdGlvbjsKLSAgICAgICAgaW5kaXZpZHVhbEZsYWcg
PSBZRmlsbFBvc2l0aW9uOwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9u
KTsKLX0KLQotc3RhdGljIGJvb2wgaXNWYWx1ZUNvbmZsaWN0aW5nV2l0aEN1cnJlbnRFZGdlKGlu
dCB2YWx1ZTEsIGludCB2YWx1ZTIpCi17Ci0gICAgaWYgKCh2YWx1ZTEgPT0gQ1NTVmFsdWVMZWZ0
IHx8IHZhbHVlMSA9PSBDU1NWYWx1ZVJpZ2h0KSAmJiAodmFsdWUyID09IENTU1ZhbHVlTGVmdCB8
fCB2YWx1ZTIgPT0gQ1NTVmFsdWVSaWdodCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
aWYgKCh2YWx1ZTEgPT0gQ1NTVmFsdWVUb3AgfHwgdmFsdWUxID09IENTU1ZhbHVlQm90dG9tKSAm
JiAodmFsdWUyID09IENTU1ZhbHVlVG9wIHx8IHZhbHVlMiA9PSBDU1NWYWx1ZUJvdHRvbSkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9v
bCBpc0ZpbGxQb3NpdGlvbktleXdvcmQoQ1NTVmFsdWVJRCB2YWx1ZSkKLXsKLSAgICByZXR1cm4g
dmFsdWUgPT0gQ1NTVmFsdWVMZWZ0IHx8IHZhbHVlID09IENTU1ZhbHVlVG9wIHx8IHZhbHVlID09
IENTU1ZhbHVlQm90dG9tIHx8IHZhbHVlID09IENTU1ZhbHVlUmlnaHQgfHwgdmFsdWUgPT0gQ1NT
VmFsdWVDZW50ZXI7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjpwYXJzZTRWYWx1ZXNGaWxsUG9zaXRp
b24oQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4mIHZhbHVlMSwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgdmFsdWUyLCBSZWY8Q1NTUHJp
bWl0aXZlVmFsdWU+JiYgcGFyc2VkVmFsdWUxLCBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgcGFy
c2VkVmFsdWUyKQotewotICAgIC8vIFsgbGVmdCB8IHJpZ2h0IF0gWyA8cGVyY2VudGFnZV0gfCA8
bGVuZ3RoPiBdICYmIFsgdG9wIHwgYm90dG9tIF0gWyA8cGVyY2VudGFnZT4gfCA8bGVuZ3RoPiBd
Ci0gICAgLy8gSW4gdGhlIGNhc2Ugb2YgNCB2YWx1ZXMgPHBvc2l0aW9uPiByZXF1aXJlcyB0aGUg
c2Vjb25kIHZhbHVlIHRvIGJlIGEgbGVuZ3RoIG9yIGEgcGVyY2VudGFnZS4KLSAgICBpZiAoaXNG
aWxsUG9zaXRpb25LZXl3b3JkKHBhcnNlZFZhbHVlMi0+Z2V0VmFsdWVJRCgpKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgdW5zaWduZWQgY3VtdWxhdGl2ZUZsYWdzID0gMDsKLSAgICBGaWxsUG9z
aXRpb25GbGFnIHZhbHVlM0ZsYWcgPSBJbnZhbGlkRmlsbFBvc2l0aW9uOwotICAgIGF1dG8gdmFs
dWUzID0gcGFyc2VGaWxsUG9zaXRpb25Db21wb25lbnQodmFsdWVMaXN0LCBjdW11bGF0aXZlRmxh
Z3MsIHZhbHVlM0ZsYWcsIFJlc29sdmVWYWx1ZXNBc0tleXdvcmQpOwotICAgIGlmICghdmFsdWUz
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBDU1NWYWx1ZUlEIGlkZW50MSA9IHBhcnNlZFZhbHVl
MS0+Z2V0VmFsdWVJRCgpOwotICAgIENTU1ZhbHVlSUQgaWRlbnQzID0gdmFsdWUzLT5nZXRWYWx1
ZUlEKCk7Ci0KLSAgICBpZiAoaWRlbnQxID09IENTU1ZhbHVlQ2VudGVyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoIWlzRmlsbFBvc2l0aW9uS2V5d29yZChpZGVudDMpIHx8IGlkZW50MyA9
PSBDU1NWYWx1ZUNlbnRlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgbmVlZCB0byBj
aGVjayBpZiB0aGUgdmFsdWVzIGFyZSBub3QgY29uZmxpY3RpbmcsIGUuZy4gdGhleSBhcmUgbm90
IG9uIHRoZSBzYW1lIGVkZ2UuIEl0IGlzCi0gICAgLy8gbmVlZGVkIGFzIHRoZSBzZWNvbmQgY2Fs
bCB0byBwYXJzZUZpbGxQb3NpdGlvbkNvbXBvbmVudCB3YXMgb24gcHVycG9zZSBub3QgY2hlY2tp
bmcgaXQuIEluIHRoZQotICAgIC8vIGNhc2Ugb2YgdHdvIHZhbHVlcyB0b3AgMjBweCBpcyBpbnZh
bGlkIGJ1dCBpbiB0aGUgY2FzZSBvZiA0IHZhbHVlcyBpdCBiZWNvbWVzIHZhbGlkLgotICAgIGlm
IChpc1ZhbHVlQ29uZmxpY3RpbmdXaXRoQ3VycmVudEVkZ2UoaWRlbnQxLCBpZGVudDMpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICB2YWx1ZUxpc3QubmV4dCgpOwotCi0gICAgY3VtdWxhdGl2ZUZs
YWdzID0gMDsKLSAgICBGaWxsUG9zaXRpb25GbGFnIHZhbHVlNEZsYWcgPSBJbnZhbGlkRmlsbFBv
c2l0aW9uOwotICAgIGF1dG8gdmFsdWU0ID0gcGFyc2VGaWxsUG9zaXRpb25Db21wb25lbnQodmFs
dWVMaXN0LCBjdW11bGF0aXZlRmxhZ3MsIHZhbHVlNEZsYWcsIFJlc29sdmVWYWx1ZXNBc0tleXdv
cmQpOwotICAgIGlmICghdmFsdWU0KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyA0dGggdmFs
dWUgbXVzdCBiZSBhIGxlbmd0aCBvciBhIHBlcmNlbnRhZ2UuCi0gICAgaWYgKGlzRmlsbFBvc2l0
aW9uS2V5d29yZCh2YWx1ZTQtPmdldFZhbHVlSUQoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHZhbHVlMSA9IGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihXVEZNb3ZlKHBhcnNlZFZhbHVlMSks
IFdURk1vdmUocGFyc2VkVmFsdWUyKSk7Ci0gICAgdmFsdWUyID0gY3JlYXRlUHJpbWl0aXZlVmFs
dWVQYWlyKHZhbHVlMy5yZWxlYXNlTm9uTnVsbCgpLCB2YWx1ZTQucmVsZWFzZU5vbk51bGwoKSk7
Ci0KLSAgICBpZiAoaWRlbnQxID09IENTU1ZhbHVlVG9wIHx8IGlkZW50MSA9PSBDU1NWYWx1ZUJv
dHRvbSkKLSAgICAgICAgdmFsdWUxLnN3YXAodmFsdWUyKTsKLQotICAgIHZhbHVlTGlzdC5uZXh0
KCk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjpwYXJzZTNWYWx1ZXNGaWxsUG9zaXRpb24oQ1NTUGFy
c2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHZhbHVl
MSwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgdmFsdWUyLCBSZWY8Q1NTUHJpbWl0aXZlVmFs
dWU+JiYgcGFyc2VkVmFsdWUxLCBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgcGFyc2VkVmFsdWUy
KQotewotICAgIHVuc2lnbmVkIGN1bXVsYXRpdmVGbGFncyA9IDA7Ci0gICAgRmlsbFBvc2l0aW9u
RmxhZyB2YWx1ZTNGbGFnID0gSW52YWxpZEZpbGxQb3NpdGlvbjsKLSAgICBhdXRvIHZhbHVlMyA9
IHBhcnNlRmlsbFBvc2l0aW9uQ29tcG9uZW50KHZhbHVlTGlzdCwgY3VtdWxhdGl2ZUZsYWdzLCB2
YWx1ZTNGbGFnLCBSZXNvbHZlVmFsdWVzQXNLZXl3b3JkKTsKLQotICAgIC8vIHZhbHVlMyBpcyBu
b3QgYW4gZXhwZWN0ZWQgdmFsdWUsIHdlIHJldHVybi4KLSAgICBpZiAoIXZhbHVlMykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgdmFsdWVMaXN0Lm5leHQoKTsKLQotICAgIGJvb2wgc3dhcE5lZWRl
ZCA9IGZhbHNlOwotICAgIENTU1ZhbHVlSUQgaWRlbnQxID0gcGFyc2VkVmFsdWUxLT5nZXRWYWx1
ZUlEKCk7Ci0gICAgQ1NTVmFsdWVJRCBpZGVudDIgPSBwYXJzZWRWYWx1ZTItPmdldFZhbHVlSUQo
KTsKLSAgICBDU1NWYWx1ZUlEIGlkZW50MyA9IHZhbHVlMy0+Z2V0VmFsdWVJRCgpOwotCi0gICAg
Q1NTVmFsdWVJRCBmaXJzdFBvc2l0aW9uS2V5d29yZDsKLSAgICBDU1NWYWx1ZUlEIHNlY29uZFBv
c2l0aW9uS2V5d29yZDsKLQotICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCk7Ci0gICAgaWYgKGlkZW50MSA9PSBDU1NWYWx1ZUNlbnRlcikgewotICAgICAg
ICAvLyA8cG9zaXRpb24+IHJlcXVpcmVzIHRoZSBmaXJzdCAnY2VudGVyJyB0byBiZSBmb2xsb3dl
ZCBieSBhIGtleXdvcmQuCi0gICAgICAgIGlmICghaXNGaWxsUG9zaXRpb25LZXl3b3JkKGlkZW50
MikpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gSWYgJ2NlbnRlcicgaXMgdGhl
IGZpcnN0IGtleXdvcmQgdGhlbiB0aGUgbGFzdCBvbmUgbmVlZHMgdG8gYmUgYSBsZW5ndGguCi0g
ICAgICAgIGlmIChpc0ZpbGxQb3NpdGlvbktleXdvcmQoaWRlbnQzKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBmaXJzdFBvc2l0aW9uS2V5d29yZCA9IENTU1ZhbHVlTGVmdDsKLSAg
ICAgICAgaWYgKGlkZW50MiA9PSBDU1NWYWx1ZUxlZnQgfHwgaWRlbnQyID09IENTU1ZhbHVlUmln
aHQpIHsKLSAgICAgICAgICAgIGZpcnN0UG9zaXRpb25LZXl3b3JkID0gQ1NTVmFsdWVUb3A7Ci0g
ICAgICAgICAgICBzd2FwTmVlZGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICB2YWx1ZTEg
PSBjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShmaXJzdFBvc2l0aW9uS2V5d29yZCksIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZSg1MCwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKSk7Ci0gICAgICAgIHZhbHVlMiA9IGNy
ZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihXVEZNb3ZlKHBhcnNlZFZhbHVlMiksIHZhbHVlMy5jb3B5
UmVmKCkpOwotICAgIH0gZWxzZSBpZiAoaWRlbnQzID09IENTU1ZhbHVlQ2VudGVyKSB7Ci0gICAg
ICAgIGlmIChpc0ZpbGxQb3NpdGlvbktleXdvcmQoaWRlbnQyKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBzZWNvbmRQb3NpdGlvbktleXdvcmQgPSBDU1NWYWx1ZVRvcDsKLSAgICAg
ICAgaWYgKGlkZW50MSA9PSBDU1NWYWx1ZVRvcCB8fCBpZGVudDEgPT0gQ1NTVmFsdWVCb3R0b20p
IHsKLSAgICAgICAgICAgIHNlY29uZFBvc2l0aW9uS2V5d29yZCA9IENTU1ZhbHVlTGVmdDsKLSAg
ICAgICAgICAgIHN3YXBOZWVkZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHZhbHVlMSA9
IGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihXVEZNb3ZlKHBhcnNlZFZhbHVlMSksIHBhcnNlZFZh
bHVlMi5jb3B5UmVmKCkpOwotICAgICAgICB2YWx1ZTIgPSBjcmVhdGVQcmltaXRpdmVWYWx1ZVBh
aXIoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShzZWNvbmRQb3NpdGlvbktleXdv
cmQpLCBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoNTAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UEVSQ0VOVEFHRSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gZmlyc3RQb3NpdGlvblZhbHVlOwotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IHNlY29uZFBvc2l0aW9uVmFsdWU7Ci0KLSAgICAgICAgaWYgKGlzRmlsbFBvc2l0aW9uS2V5
d29yZChpZGVudDIpKSB7Ci0gICAgICAgICAgICAvLyBUbyBtYXRjaCBDU1MgZ3JhbW1hciwgd2Ug
c2hvdWxkIG9ubHkgYWNjZXB0OiBbIGNlbnRlciB8IGxlZnQgfCByaWdodCB8IGJvdHRvbSB8IHRv
cCBdIFsgbGVmdCB8IHJpZ2h0IHwgdG9wIHwgYm90dG9tIF0gWyA8cGVyY2VudGFnZT4gfCA8bGVu
Z3RoPiBdLgotICAgICAgICAgICAgQVNTRVJUKGlkZW50MiAhPSBDU1NWYWx1ZUNlbnRlcik7Ci0K
LSAgICAgICAgICAgIGlmIChpc0ZpbGxQb3NpdGlvbktleXdvcmQoaWRlbnQzKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIHNlY29uZFBvc2l0aW9uVmFsdWUgPSB2YWx1
ZTM7Ci0gICAgICAgICAgICBzZWNvbmRQb3NpdGlvbktleXdvcmQgPSBpZGVudDI7Ci0gICAgICAg
ICAgICBmaXJzdFBvc2l0aW9uVmFsdWUgPSBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoMCwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIC8vIFBlciBDU1MsIHdlIHNob3VsZCBvbmx5IGFjY2VwdDogWyByaWdodCB8IGxlZnQg
fCB0b3AgfCBib3R0b20gXSBbIDxwZXJjZW50YWdlPiB8IDxsZW5ndGg+IF0gWyBjZW50ZXIgfCBs
ZWZ0IHwgcmlnaHQgfCBib3R0b20gfCB0b3AgXS4KLSAgICAgICAgICAgIGlmICghaXNGaWxsUG9z
aXRpb25LZXl3b3JkKGlkZW50MykpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
ICAgICBmaXJzdFBvc2l0aW9uVmFsdWUgPSBwYXJzZWRWYWx1ZTIucHRyKCk7Ci0gICAgICAgICAg
ICBzZWNvbmRQb3NpdGlvbktleXdvcmQgPSBpZGVudDM7Ci0gICAgICAgICAgICBzZWNvbmRQb3Np
dGlvblZhbHVlID0gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKDAsIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEVSQ0VOVEFHRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNWYWx1ZUNvbmZs
aWN0aW5nV2l0aEN1cnJlbnRFZGdlKGlkZW50MSwgc2Vjb25kUG9zaXRpb25LZXl3b3JkKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YWx1ZTEgPSBjcmVhdGVQcmltaXRpdmVWYWx1
ZVBhaXIoV1RGTW92ZShwYXJzZWRWYWx1ZTEpLCBmaXJzdFBvc2l0aW9uVmFsdWUucmVsZWFzZU5v
bk51bGwoKSk7Ci0gICAgICAgIHZhbHVlMiA9IGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihjc3NW
YWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKHNlY29uZFBvc2l0aW9uS2V5d29yZCksIHNl
Y29uZFBvc2l0aW9uVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgfQotCi0gICAgaWYgKGlk
ZW50MSA9PSBDU1NWYWx1ZVRvcCB8fCBpZGVudDEgPT0gQ1NTVmFsdWVCb3R0b20gfHwgc3dhcE5l
ZWRlZCkKLSAgICAgICAgdmFsdWUxLnN3YXAodmFsdWUyKTsKLQotI2lmbmRlZiBOREVCVUcKLSAg
ICBDU1NQcmltaXRpdmVWYWx1ZSYgZmlyc3QgPSAqdmFsdWUxOwotICAgIENTU1ByaW1pdGl2ZVZh
bHVlJiBzZWNvbmQgPSAqdmFsdWUyOwotICAgIGlkZW50MSA9IGZpcnN0LmdldFBhaXJWYWx1ZSgp
LT5maXJzdCgpLT5nZXRWYWx1ZUlEKCk7Ci0gICAgaWRlbnQyID0gc2Vjb25kLmdldFBhaXJWYWx1
ZSgpLT5maXJzdCgpLT5nZXRWYWx1ZUlEKCk7Ci0gICAgQVNTRVJUKGlkZW50MSA9PSBDU1NWYWx1
ZUxlZnQgfHwgaWRlbnQxID09IENTU1ZhbHVlUmlnaHQpOwotICAgIEFTU0VSVChpZGVudDIgPT0g
Q1NTVmFsdWVCb3R0b20gfHwgaWRlbnQyID09IENTU1ZhbHVlVG9wKTsKLSNlbmRpZgotfQotCi1p
bmxpbmUgYm9vbCBDU1NQYXJzZXI6OmlzUG90ZW50aWFsUG9zaXRpb25WYWx1ZShDU1NQYXJzZXJW
YWx1ZSYgdmFsdWUpCi17Ci0gICAgaWYgKGlzRmlsbFBvc2l0aW9uS2V5d29yZCh2YWx1ZS5pZCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0
aENhbGN1bGF0aW9uKHZhbHVlKTsKLSAgICByZXR1cm4gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENh
bGN1bGF0aW9uLCBGUGVyY2VudCB8IEZMZW5ndGgpOwotfQotCi12b2lkIENTU1BhcnNlcjo6cGFy
c2VGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4mIHZhbHVlMSwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgdmFsdWUy
KQotewotICAgIHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gMDsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSB2YWx1ZUxpc3QuY3VycmVudEluZGV4KCk7IGkgPCB2YWx1ZUxpc3Quc2l6ZSgpOyArK2ks
ICsrbnVtYmVyT2ZWYWx1ZXMpIHsKLSAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIGN1cnJlbnQgPSB2
YWx1ZUxpc3QudmFsdWVBdChpKTsKLSAgICAgICAgaWYgKCFjdXJyZW50IHx8IGlzQ29tbWEoY3Vy
cmVudCkgfHwgaXNGb3J3YXJkU2xhc2hPcGVyYXRvcigqY3VycmVudCkgfHwgIWlzUG90ZW50aWFs
UG9zaXRpb25WYWx1ZSgqY3VycmVudCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICBpZiAobnVtYmVyT2ZWYWx1ZXMgPiA0KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB3
ZSBhcmUgcGFyc2luZyB0d28gdmFsdWVzLCB3ZSBjYW4gc2FmZWx5IGNhbGwgdGhlIENTUyAyLjEg
cGFyc2luZyBmdW5jdGlvbiBhbmQgcmV0dXJuLgotICAgIGlmIChudW1iZXJPZlZhbHVlcyA8PSAy
KSB7Ci0gICAgICAgIHBhcnNlMlZhbHVlc0ZpbGxQb3NpdGlvbih2YWx1ZUxpc3QsIHZhbHVlMSwg
dmFsdWUyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChudW1iZXJPZlZh
bHVlcyA+IDIgJiYgbnVtYmVyT2ZWYWx1ZXMgPD0gNCk7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSog
dmFsdWUgPSB2YWx1ZUxpc3QuY3VycmVudCgpOwotCi0gICAgLy8gPHBvc2l0aW9uPiByZXF1aXJl
cyB0aGUgZmlyc3QgdmFsdWUgdG8gYmUgYSBiYWNrZ3JvdW5kIGtleXdvcmQuCi0gICAgaWYgKCFp
c0ZpbGxQb3NpdGlvbktleXdvcmQodmFsdWUtPmlkKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gUGFyc2UgdGhlIGZpcnN0IHZhbHVlLiBXZSdyZSBqdXN0IG1ha2luZyBzdXJlIHRoYXQgaXQg
aXMgb25lIG9mIHRoZSB2YWxpZCBrZXl3b3JkcyBvciBhIHBlcmNlbnRhZ2UvbGVuZ3RoLgotICAg
IHVuc2lnbmVkIGN1bXVsYXRpdmVGbGFncyA9IDA7Ci0gICAgRmlsbFBvc2l0aW9uRmxhZyB2YWx1
ZTFGbGFnID0gSW52YWxpZEZpbGxQb3NpdGlvbjsKLSAgICBGaWxsUG9zaXRpb25GbGFnIHZhbHVl
MkZsYWcgPSBJbnZhbGlkRmlsbFBvc2l0aW9uOwotICAgIHZhbHVlMSA9IHBhcnNlRmlsbFBvc2l0
aW9uQ29tcG9uZW50KHZhbHVlTGlzdCwgY3VtdWxhdGl2ZUZsYWdzLCB2YWx1ZTFGbGFnLCBSZXNv
bHZlVmFsdWVzQXNLZXl3b3JkKTsKLSAgICBpZiAoIXZhbHVlMSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgdmFsdWUgPSB2YWx1ZUxpc3QubmV4dCgpOwotCi0gICAgLy8gSW4gY2FzZSB3ZSBhcmUg
cGFyc2luZyBtb3JlIHRoYW4gdHdvIHZhbHVlcywgcmVsYXggdGhlIGNoZWNrIGluc2lkZSBvZiBw
YXJzZUZpbGxQb3NpdGlvbkNvbXBvbmVudC4gdG9wIDIwcHggaXMKLSAgICAvLyBhIHZhbGlkIHN0
YXJ0IGZvciA8cG9zaXRpb24+LgotICAgIGN1bXVsYXRpdmVGbGFncyA9IEFtYmlndW91c0ZpbGxQ
b3NpdGlvbjsKLSAgICB2YWx1ZTIgPSBwYXJzZUZpbGxQb3NpdGlvbkNvbXBvbmVudCh2YWx1ZUxp
c3QsIGN1bXVsYXRpdmVGbGFncywgdmFsdWUyRmxhZywgUmVzb2x2ZVZhbHVlc0FzS2V5d29yZCk7
Ci0gICAgaWYgKHZhbHVlMikKLSAgICAgICAgdmFsdWVMaXN0Lm5leHQoKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgdmFsdWUxID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGF1dG8gcGFyc2VkVmFsdWUxID0gdmFsdWUxLnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgYXV0byBw
YXJzZWRWYWx1ZTIgPSB2YWx1ZTIucmVsZWFzZU5vbk51bGwoKTsKLQotICAgIC8vIFBlciBDU1Mz
IHN5bnRheCwgPHBvc2l0aW9uPiBjYW4ndCBoYXZlICdjZW50ZXInIGFzIGl0cyBzZWNvbmQga2V5
d29yZCBhcyB3ZSBoYXZlIG1vcmUgYXJndW1lbnRzIHRvIGZvbGxvdy4KLSAgICBpZiAocGFyc2Vk
VmFsdWUyLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVDZW50ZXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChudW1iZXJPZlZhbHVlcyA9PSAzKQotICAgICAgICBwYXJzZTNWYWx1ZXNGaWxs
UG9zaXRpb24odmFsdWVMaXN0LCB2YWx1ZTEsIHZhbHVlMiwgV1RGTW92ZShwYXJzZWRWYWx1ZTEp
LCBXVEZNb3ZlKHBhcnNlZFZhbHVlMikpOwotICAgIGVsc2UKLSAgICAgICAgcGFyc2U0VmFsdWVz
RmlsbFBvc2l0aW9uKHZhbHVlTGlzdCwgdmFsdWUxLCB2YWx1ZTIsIFdURk1vdmUocGFyc2VkVmFs
dWUxKSwgV1RGTW92ZShwYXJzZWRWYWx1ZTIpKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OnBhcnNl
MlZhbHVlc0ZpbGxQb3NpdGlvbihDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiYgdmFsdWUxLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2
YWx1ZTIpCi17Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gdmFsdWVMaXN0LmN1cnJlbnQo
KTsKLQotICAgIC8vIFBhcnNlIHRoZSBmaXJzdCB2YWx1ZS4gIFdlJ3JlIGp1c3QgbWFraW5nIHN1
cmUgdGhhdCBpdCBpcyBvbmUgb2YgdGhlIHZhbGlkIGtleXdvcmRzIG9yIGEgcGVyY2VudGFnZS9s
ZW5ndGguCi0gICAgdW5zaWduZWQgY3VtdWxhdGl2ZUZsYWdzID0gMDsKLSAgICBGaWxsUG9zaXRp
b25GbGFnIHZhbHVlMUZsYWcgPSBJbnZhbGlkRmlsbFBvc2l0aW9uOwotICAgIEZpbGxQb3NpdGlv
bkZsYWcgdmFsdWUyRmxhZyA9IEludmFsaWRGaWxsUG9zaXRpb247Ci0gICAgdmFsdWUxID0gcGFy
c2VGaWxsUG9zaXRpb25Db21wb25lbnQodmFsdWVMaXN0LCBjdW11bGF0aXZlRmxhZ3MsIHZhbHVl
MUZsYWcpOwotICAgIGlmICghdmFsdWUxKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJdCBv
bmx5IHRha2VzIG9uZSB2YWx1ZSBmb3IgYmFja2dyb3VuZC1wb3NpdGlvbiB0byBiZSBjb3JyZWN0
bHkgcGFyc2VkIGlmIGl0IHdhcyBzcGVjaWZpZWQgaW4gYSBzaG9ydGhhbmQgKHNpbmNlIHdlCi0g
ICAgLy8gY2FuIGFzc3VtZSB0aGF0IGFueSBvdGhlciB2YWx1ZXMgYmVsb25nIHRvIHRoZSByZXN0
IG9mIHRoZSBzaG9ydGhhbmQpLiAgSWYgd2UncmUgbm90IHBhcnNpbmcgYSBzaG9ydGhhbmQsIHRo
b3VnaCwgdGhlCi0gICAgLy8gdmFsdWUgd2FzIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGZvciBvdXIg
cHJvcGVydHkuCi0gICAgdmFsdWUgPSB2YWx1ZUxpc3QubmV4dCgpOwotCi0gICAgLy8gRmlyc3Qg
Y2hlY2sgZm9yIHRoZSBjb21tYS4gIElmIHNvLCB3ZSBhcmUgZmluaXNoZWQgcGFyc2luZyB0aGlz
IHZhbHVlIG9yIHZhbHVlIHBhaXIuCi0gICAgaWYgKGlzQ29tbWEodmFsdWUpKQotICAgICAgICB2
YWx1ZSA9IG51bGxwdHI7Ci0KLSAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgdmFsdWUyID0gcGFy
c2VGaWxsUG9zaXRpb25Db21wb25lbnQodmFsdWVMaXN0LCBjdW11bGF0aXZlRmxhZ3MsIHZhbHVl
MkZsYWcpOwotICAgICAgICBpZiAodmFsdWUyKQotICAgICAgICAgICAgdmFsdWVMaXN0Lm5leHQo
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIWluU2hvcnRoYW5kKCkpIHsKLSAg
ICAgICAgICAgICAgICB2YWx1ZTEgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghdmFsdWUyKQotICAg
ICAgICAvLyBPbmx5IG9uZSB2YWx1ZSB3YXMgc3BlY2lmaWVkLiBJZiB0aGF0IHZhbHVlIHdhcyBu
b3QgYSBrZXl3b3JkLCB0aGVuIGl0IHNldHMgdGhlIHggcG9zaXRpb24sIGFuZCB0aGUgeSBwb3Np
dGlvbgotICAgICAgICAvLyBpcyBzaW1wbHkgNTAlLiBUaGlzIGlzIG91ciBkZWZhdWx0LgotICAg
ICAgICAvLyBGb3Iga2V5d29yZHMsIHRoZSBrZXl3b3JkIHdhcyBlaXRoZXIgYW4geC1rZXl3b3Jk
IChsZWZ0L3JpZ2h0KSwgYSB5LWtleXdvcmQgKHRvcC9ib3R0b20pLCBvciBhbiBhbWJpZ3VvdXMg
a2V5d29yZCAoY2VudGVyKS4KLSAgICAgICAgLy8gRm9yIGxlZnQvcmlnaHQvY2VudGVyLCB0aGUg
ZGVmYXVsdCBvZiA1MCUgaW4gdGhlIHkgaXMgc3RpbGwgY29ycmVjdC4KLSAgICAgICAgdmFsdWUy
ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSg1MCwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKLQotICAgIGlmICh2YWx1ZTFGbGFnID09IFlGaWxsUG9z
aXRpb24gfHwgdmFsdWUyRmxhZyA9PSBYRmlsbFBvc2l0aW9uKQotICAgICAgICB2YWx1ZTEuc3dh
cCh2YWx1ZTIpOwotfQotCi12b2lkIENTU1BhcnNlcjo6cGFyc2VGaWxsUmVwZWF0KFJlZlB0cjxD
U1NWYWx1ZT4mIHZhbHVlMSwgUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUyKQotewotICAgIENTU1Zh
bHVlSUQgaWQgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLT5pZDsKLSAgICBpZiAoaWQgPT0gQ1NT
VmFsdWVSZXBlYXRYKSB7Ci0gICAgICAgIG1faW1wbGljaXRTaG9ydGhhbmQgPSB0cnVlOwotICAg
ICAgICB2YWx1ZTEgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZVJlcGVhdCk7Ci0gICAgICAgIHZhbHVlMiA9IENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9SZXBlYXQpOwotICAgICAg
ICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChp
ZCA9PSBDU1NWYWx1ZVJlcGVhdFkpIHsKLSAgICAgICAgbV9pbXBsaWNpdFNob3J0aGFuZCA9IHRy
dWU7Ci0gICAgICAgIHZhbHVlMSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlTm9SZXBlYXQpOwotICAgICAgICB2YWx1ZTIgPSBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVJlcGVhdCk7
Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKGlkID09IENTU1ZhbHVlUmVwZWF0IHx8IGlkID09IENTU1ZhbHVlTm9SZXBlYXQgfHwg
aWQgPT0gQ1NTVmFsdWVSb3VuZCB8fCBpZCA9PSBDU1NWYWx1ZVNwYWNlKQotICAgICAgICB2YWx1
ZTEgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZCk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIHZhbHVlMSA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgp
OwotCi0gICAgLy8gUGFyc2UgdGhlIHNlY29uZCB2YWx1ZSBpZiBvbmUgaXMgYXZhaWxhYmxlCi0g
ICAgaWYgKHZhbHVlICYmICFpc0NvbW1hKHZhbHVlKSkgewotICAgICAgICBpZCA9IHZhbHVlLT5p
ZDsKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlUmVwZWF0IHx8IGlkID09IENTU1ZhbHVlTm9S
ZXBlYXQgfHwgaWQgPT0gQ1NTVmFsdWVSb3VuZCB8fCBpZCA9PSBDU1NWYWx1ZVNwYWNlKSB7Ci0g
ICAgICAgICAgICB2YWx1ZTIgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShpZCk7Ci0gICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgb25seSBvbmUgdmFs
dWUgd2FzIHNwZWNpZmllZCwgdmFsdWUyIGlzIHRoZSBzYW1lIGFzIHZhbHVlMS4KLSAgICBtX2lt
cGxpY2l0U2hvcnRoYW5kID0gdHJ1ZTsKLSAgICB2YWx1ZTIgPSBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
KnZhbHVlMSkuZ2V0VmFsdWVJRCgpKTsKLX0KLQotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBD
U1NQYXJzZXI6OnBhcnNlRmlsbFNpemUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wmIGFsbG93
Q29tbWEpCi17Ci0gICAgYWxsb3dDb21tYSA9IHRydWU7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZh
bHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLQotICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NT
VmFsdWVDb250YWluIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNvdmVyKQotICAgICAgICByZXR1
cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUt
PmlkKTsKLQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUxOwotCi0g
ICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgIHBhcnNlZFZhbHVlMSA9
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
QXV0byk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0
aENhbGN1bGF0aW9uKCp2YWx1ZSk7Ci0gICAgICAgIGlmICghdmFsaWRhdGVVbml0KHZhbHVlV2l0
aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQpKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgIHBhcnNlZFZhbHVlMSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgfQotCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBwYXJzZWRWYWx1ZTI7Ci0gICAgaWYgKCh2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0
KCkpKSB7Ci0gICAgICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0
b3IgJiYgdmFsdWUtPmlWYWx1ZSA9PSAnLCcpCi0gICAgICAgICAgICBhbGxvd0NvbW1hID0gZmFs
c2U7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlLT5pZCAhPSBDU1NWYWx1ZUF1dG8pIHsKLSAgICAg
ICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7
Ci0gICAgICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxl
bmd0aCB8IEZQZXJjZW50KSkgewotICAgICAgICAgICAgICAgIGlmICghaW5TaG9ydGhhbmQoKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgLy8g
V2UgbmVlZCB0byByZXdpbmQgdGhlIHZhbHVlIGxpc3QsIHNvIHRoYXQgd2hlbiBpdCBpcyBhZHZh
bmNlZCB3ZSdsbCBlbmQgdXAgYmFjayBhdCB0aGlzIHZhbHVlLgotICAgICAgICAgICAgICAgIG1f
dmFsdWVMaXN0LT5wcmV2aW91cygpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgcGFyc2VkVmFsdWUyID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENh
bGN1bGF0aW9uKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoIXBhcnNlZFZhbHVlMiAmJiBw
cm9wSWQgPT0gQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kU2l6ZSkgewotICAgICAgICAvLyBG
b3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2Ugc2V0IHRoZSBzZWNvbmQgdmFsdWUgdG8gdGhl
IGZpcnN0IGlmIGl0IGlzIG9taXR0ZWQuCi0gICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBkbyB0
aGlzIGZvciAtd2Via2l0LWJhY2tncm91bmQtc2l6ZS4gSXQgc2hvdWxkIGJlIHNhZmUgdG8gbGV0
IG1hc2tzIG1hdGNoCi0gICAgICAgIC8vIHRoZSByZWFsIHByb3BlcnR5LgotICAgICAgICBwYXJz
ZWRWYWx1ZTIgPSBwYXJzZWRWYWx1ZTE7Ci0gICAgfQotCi0gICAgaWYgKCFwYXJzZWRWYWx1ZTIp
Ci0gICAgICAgIHJldHVybiBwYXJzZWRWYWx1ZTE7Ci0gICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2
ZVZhbHVlUGFpcihwYXJzZWRWYWx1ZTEucmVsZWFzZU5vbk51bGwoKSwgcGFyc2VkVmFsdWUyLnJl
bGVhc2VOb25OdWxsKCksIHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRTaXpl
ID8gUGFpcjo6SWRlbnRpY2FsVmFsdWVFbmNvZGluZzo6Q29hbGVzY2UgOiBQYWlyOjpJZGVudGlj
YWxWYWx1ZUVuY29kaW5nOjpEb05vdENvYWxlc2NlKTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBh
cnNlRmlsbFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcElkLCBDU1NQcm9wZXJ0eUlEJiBwcm9w
SWQxLCBDU1NQcm9wZXJ0eUlEJiBwcm9wSWQyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4mIHJldFZhbHVlMSwgUmVmUHRyPENTU1ZhbHVlPiYgcmV0
VmFsdWUyKQotewotICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHZhbHVlczsKLSAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiB2YWx1ZXMyOwotICAgIENTU1BhcnNlclZhbHVlKiBjdXJyZW50VmFsdWU7
Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVl
MjsKLQotICAgIGJvb2wgYWxsb3dDb21tYSA9IGZhbHNlOwotCi0gICAgcmV0VmFsdWUxID0gcmV0
VmFsdWUyID0gbnVsbHB0cjsKLSAgICBwcm9wSWQxID0gcHJvcElkOwotICAgIHByb3BJZDIgPSBw
cm9wSWQ7Ci0gICAgaWYgKHByb3BJZCA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbikg
ewotICAgICAgICBwcm9wSWQxID0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YOwotICAg
ICAgICBwcm9wSWQyID0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZOwotICAgIH0gZWxz
ZSBpZiAocHJvcElkID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uKSB7Ci0gICAgICAg
IHByb3BJZDEgPSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblg7Ci0gICAgICAgIHByb3BJ
ZDIgPSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblk7Ci0gICAgfSBlbHNlIGlmIChwcm9w
SWQgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0KSB7Ci0gICAgICAgIHByb3BJZDEgPSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRYOwotICAgICAgICBwcm9wSWQyID0gQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kUmVwZWF0WTsKLSAgICB9IGVsc2UgaWYgKHByb3BJZCA9PSBDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tSZXBlYXQpIHsKLSAgICAgICAgcHJvcElkMSA9IENTU1Byb3BlcnR5V2Via2l0
TWFza1JlcGVhdFg7Ci0gICAgICAgIHByb3BJZDIgPSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBl
YXRZOwotICAgIH0KLQotICAgIHdoaWxlICgoY3VycmVudFZhbHVlID0gbV92YWx1ZUxpc3QtPmN1
cnJlbnQoKSkpIHsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjdXJyVmFsdWU7Ci0gICAgICAg
IFJlZlB0cjxDU1NWYWx1ZT4gY3VyclZhbHVlMjsKLQotICAgICAgICBpZiAoYWxsb3dDb21tYSkg
ewotICAgICAgICAgICAgaWYgKCFpc0NvbW1hKGN1cnJlbnRWYWx1ZSkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAg
ICAgICAgIGFsbG93Q29tbWEgPSBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGFsbG93Q29tbWEgPSB0cnVlOwotICAgICAgICAgICAgc3dpdGNoIChwcm9wSWQpIHsKLSAgICAg
ICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgotICAgICAgICAgICAg
ICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUJhY2tncm91bmRDb2xvcigpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoY3VyclZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxp
c3QtPm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRBdHRhY2htZW50OgotICAgICAgICAgICAgICAgICAg
ICBpZiAoY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZVNjcm9sbCB8fCBjdXJyZW50VmFsdWUt
PmlkID09IENTU1ZhbHVlRml4ZWQgfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUxvY2Fs
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShjdXJyZW50VmFsdWUtPmlkKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZToKLSAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWFza0ltYWdlOgotICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VGaWxsSW1h
Z2UoKm1fdmFsdWVMaXN0LCBjdXJyVmFsdWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV92
YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDbGlwOgotICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kT3JpZ2luOgotICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQ2xpcDoKLSAgICAgICAgICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFza09yaWdpbjoKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhl
IGZpcnN0IHRocmVlIHZhbHVlcyBoZXJlIGFyZSBkZXByZWNhdGVkIGFuZCBkbyBub3QgYXBwbHkg
dG8gdGhlIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHRoYXQgaGFzCi0gICAgICAgICAgICAgICAg
ICAgIC8vIHRoZSAtd2Via2l0LSBwcmVmaXggcmVtb3ZlZC4KLSAgICAgICAgICAgICAgICAgICAg
aWYgKGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVCb3JkZXIgfHwgY3VycmVudFZhbHVlLT5p
ZCA9PSBDU1NWYWx1ZVBhZGRpbmcgfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNvbnRl
bnQKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFs
dWVCb3JkZXJCb3ggfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZVBhZGRpbmdCb3ggfHwg
Y3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNvbnRlbnRCb3gKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHx8ICgocHJvcElkID09IENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZENsaXAgfHwg
cHJvcElkID09IENTU1Byb3BlcnR5V2Via2l0TWFza0NsaXApCi0gICAgICAgICAgICAgICAgICAg
ICAgICAmJiAoY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZVRleHQgfHwgY3VycmVudFZhbHVl
LT5pZCA9PSBDU1NWYWx1ZVdlYmtpdFRleHQpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Y3VyclZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoY3VycmVudFZhbHVlLT5pZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlz
dC0+bmV4dCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ2xpcDoKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlQmFja2dyb3VuZENsaXAoKmN1cnJlbnRWYWx1ZSwg
Y3VyclZhbHVlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kT3JpZ2luOgotICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFZh
bHVlLT5pZCA9PSBDU1NWYWx1ZUJvcmRlckJveCB8fCBjdXJyZW50VmFsdWUtPmlkID09IENTU1Zh
bHVlUGFkZGluZ0JveCB8fCBjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlQ29udGVudEJveCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY3VycmVudFZhbHVlLT5pZCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb246Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbjogewotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IHZhbHVlMTsKLSAgICAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiB2YWx1ZTI7Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlRmlsbFBvc2l0
aW9uKCptX3ZhbHVlTGlzdCwgdmFsdWUxLCB2YWx1ZTIpOwotICAgICAgICAgICAgICAgICAgICBj
dXJyVmFsdWUgPSBXVEZNb3ZlKHZhbHVlMSk7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1
ZTIgPSBXVEZNb3ZlKHZhbHVlMik7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlRmlsbFBv
c2l0aW9uIGFkdmFuY2VzIHRoZSBtX3ZhbHVlTGlzdCBwb2ludGVyLgotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblg6Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblg6IHsKLSAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVl
ID0gcGFyc2VQb3NpdGlvblgoKm1fdmFsdWVMaXN0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGN1cnJWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWToKLSAgICAgICAgICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWTogewotICAgICAgICAgICAg
ICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZVBvc2l0aW9uWSgqbV92YWx1ZUxpc3QpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgbV92
YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5k
Q29tcG9zaXRlOgotICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQ29t
cG9zaXRlOgotICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlLT5pZCA+PSBDU1NW
YWx1ZUNsZWFyICYmIGN1cnJlbnRWYWx1ZS0+aWQgPD0gQ1NTVmFsdWVQbHVzTGlnaHRlcikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY3VycmVudFZhbHVlLT5pZCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQmxlbmRNb2RlOgotICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVu
dFZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCBjdXJyZW50VmFsdWUtPmlkID09IENTU1Zh
bHVlTXVsdGlwbHkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IGN1cnJlbnRWYWx1ZS0+aWQg
PT0gQ1NTVmFsdWVTY3JlZW4gfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZU92ZXJsYXkg
fHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZURhcmtlbgotICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUxpZ2h0ZW4gfHwgIGN1cnJlbnRW
YWx1ZS0+aWQgPT0gQ1NTVmFsdWVDb2xvckRvZGdlIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NT
VmFsdWVDb2xvckJ1cm4KLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IGN1cnJlbnRWYWx1ZS0+
aWQgPT0gQ1NTVmFsdWVIYXJkTGlnaHQgfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZVNv
ZnRMaWdodCB8fCBjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlRGlmZmVyZW5jZQotICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUV4Y2x1c2lv
bikgewotICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY3VycmVudFZhbHVlLT5pZCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0OgotICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXNrUmVwZWF0OgotICAgICAgICAgICAgICAgICAgICBwYXJzZUZpbGxSZXBl
YXQoY3VyclZhbHVlLCBjdXJyVmFsdWUyKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2VG
aWxsUmVwZWF0IGFkdmFuY2VzIHRoZSBtX3ZhbHVlTGlzdCBwb2ludGVyCi0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
U2l6ZToKLSAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZFNp
emU6Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplOiB7Ci0g
ICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlRmlsbFNpemUocHJvcElkLCBhbGxv
d0NvbW1hKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFza1NvdXJjZVR5cGU6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRW
YWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVB
bHBoYSB8fCBjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlTHVtaW5hbmNlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShjdXJyZW50VmFsdWUtPmlkKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gbnVsbHB0cjsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKCFjdXJyVmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgICAgICBpZiAodmFsdWUgJiYgIXZhbHVlcykgewotICAgICAgICAgICAgICAgIHZhbHVlcyA9
IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKLSAgICAgICAgICAgICAgICB2
YWx1ZXMtPmFwcGVuZCh2YWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKHZhbHVlMiAmJiAhdmFsdWVzMikgewotICAgICAgICAgICAgICAgIHZh
bHVlczIgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0gICAgICAgICAg
ICAgICAgdmFsdWVzMi0+YXBwZW5kKHZhbHVlMi5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKHZhbHVlcykKLSAgICAgICAgICAgICAgICB2YWx1ZXMt
PmFwcGVuZChjdXJyVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgdmFsdWUgPSBXVEZNb3ZlKGN1cnJWYWx1ZSk7Ci0gICAgICAgICAgICBp
ZiAoY3VyclZhbHVlMikgewotICAgICAgICAgICAgICAgIGlmICh2YWx1ZXMyKQotICAgICAgICAg
ICAgICAgICAgICB2YWx1ZXMyLT5hcHBlbmQoY3VyclZhbHVlMi5yZWxlYXNlTm9uTnVsbCgpKTsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlMiA9IFdURk1v
dmUoY3VyclZhbHVlMik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBX
aGVuIHBhcnNpbmcgYW55IGZpbGwgc2hvcnRoYW5kIHByb3BlcnR5LCB3ZSBsZXQgaXQgaGFuZGxl
IGJ1aWxkaW5nIHVwIHRoZSBsaXN0cyBmb3IgYWxsCi0gICAgICAgIC8vIHByb3BlcnRpZXMuCi0g
ICAgICAgIGlmIChpblNob3J0aGFuZCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMtPmxlbmd0aCgpKSB7Ci0gICAgICAgIHJldFZhbHVlMSA9
IFdURk1vdmUodmFsdWVzKTsKLSAgICAgICAgaWYgKHZhbHVlczIgJiYgdmFsdWVzMi0+bGVuZ3Ro
KCkpCi0gICAgICAgICAgICByZXRWYWx1ZTIgPSBXVEZNb3ZlKHZhbHVlczIpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgIHJldFZhbHVlMSA9
IFdURk1vdmUodmFsdWUpOwotICAgICAgICByZXRWYWx1ZTIgPSBXVEZNb3ZlKHZhbHVlMik7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvbkRlbGF5KCkKLXsK
LSAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKSk7Ci0gICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlv
biwgRlRpbWUpKQotICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZh
bHVlV2l0aENhbGN1bGF0aW9uKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uRGlyZWN0aW9uKCkKLXsK
LSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAg
IGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVl
QWx0ZXJuYXRlIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVJldmVyc2UgfHwgdmFsdWUtPmlkID09
IENTU1ZhbHVlQWx0ZXJuYXRlUmV2ZXJzZSkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7Ci0gICAgcmV0dXJu
IG51bGxwdHI7Ci19Ci0KLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJz
ZUFuaW1hdGlvbkR1cmF0aW9uKCkKLXsKLSAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdp
dGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7Ci0gICAgaWYgKHZhbGlkYXRl
VW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRlRpbWUgfCBGTm9uTmVnKSkKLSAgICAgICAgcmV0
dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZUFuaW1hdGlvbkZpbGxNb2RlKCkKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFs
dWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFs
dWVOb25lIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUZvcndhcmRzIHx8IHZhbHVlLT5pZCA9PSBD
U1NWYWx1ZUJhY2t3YXJkcyB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVCb3RoKQotICAgICAgICBy
ZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFs
dWUtPmlkKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKQotewotICAgIENT
U1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICh2
YWx1ZS5pZCA9PSBDU1NWYWx1ZUluZmluaXRlKQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUuaWQpOwotICAgIFZhbHVl
V2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKHZhbHVlKTsKLSAgICBpZiAodmFs
aWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwgRk5vbk5lZykpCi0gICAg
ICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRp
b24pOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25OYW1lKCkKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSYg
dmFsdWUgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAodmFsdWUudW5pdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyB8fCB2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfSURFTlQpIHsKLSAgICAgICAgaWYgKHZhbHVlLmlkID09IENTU1ZhbHVlTm9u
ZSB8fCAodmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyAmJiBlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgIm5vbmUiKSkpIHsKLSAgICAgICAgICAg
IHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZU5vbmUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVT
dHJpbmdWYWx1ZSh2YWx1ZSk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1SZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25QbGF5U3RhdGUo
KQotewotICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgp
OwotICAgIGlmICh2YWx1ZS5pZCA9PSBDU1NWYWx1ZVJ1bm5pbmcgfHwgdmFsdWUuaWQgPT0gQ1NT
VmFsdWVQYXVzZWQpCi0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0K
LSNpZiBFTkFCTEUoQ1NTX0FOSU1BVElPTlNfTEVWRUxfMikKLVJlZlB0cjxDU1NWYWx1ZT4gQ1NT
UGFyc2VyOjpwYXJzZUFuaW1hdGlvblRyaWdnZXIoKQotewotICAgIENTU1BhcnNlclZhbHVlKiB2
YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NW
YWx1ZUF1dG8pCi0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwotCi0gICAgaWYgKHZhbHVlLT51bml0ICE9
IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7
Ci0KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUtPmZ1bmN0aW9u
LT5uYW1lLCAiY29udGFpbmVyLXNjcm9sbCgiKSkgewotICAgICAgICBpZiAoIWFyZ3MgfHwgKGFy
Z3MtPnNpemUoKSAhPSAxICYmIGFyZ3MtPnNpemUoKSAhPSAzKSkKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1
cnJlbnQoKTsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gZmlyc3RBcmd1bWVudFdpdGhD
YWxjdWxhdGlvbigqYXJndW1lbnQpOwotICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChmaXJzdEFy
Z3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgICAgIGF1dG8gc3RhcnRWYWx1ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNW
YWx1ZShmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKTsKLQotICAgICAgICBhcmd1bWVudCA9
IGFyZ3MtPm5leHQoKTsKLQotICAgICAgICBpZiAoIWFyZ3VtZW50KQotICAgICAgICAgICAgcmV0
dXJuIENTU0FuaW1hdGlvblRyaWdnZXJTY3JvbGxWYWx1ZTo6Y3JlYXRlKFdURk1vdmUoc3RhcnRW
YWx1ZSkpOwotCi0gICAgICAgIGlmICghaXNDb21tYShhcmd1bWVudCkpCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLSAgICAg
ICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gc2Vjb25kQXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFy
Z3VtZW50KTsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoc2Vjb25kQXJndW1lbnRXaXRoQ2Fs
Y3VsYXRpb24sIEZMZW5ndGgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAg
ICAgYXV0byBlbmRWYWx1ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShzZWNvbmRBcmd1
bWVudFdpdGhDYWxjdWxhdGlvbik7Ci0KLSAgICAgICAgcmV0dXJuIENTU0FuaW1hdGlvblRyaWdn
ZXJTY3JvbGxWYWx1ZTo6Y3JlYXRlKFdURk1vdmUoc3RhcnRWYWx1ZSksIFdURk1vdmUoZW5kVmFs
dWUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLSNlbmRpZgotCi1SZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25Qcm9wZXJ0eShBbmlt
YXRpb25QYXJzZUNvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVl
ID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKHZhbHVlLnVuaXQgIT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19JREVOVCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgQ1NT
UHJvcGVydHlJRCByZXN1bHQgPSBjc3NQcm9wZXJ0eUlEKHZhbHVlLnN0cmluZyk7Ci0gICAgaWYg
KHJlc3VsdCAmJiByZXN1bHQgIT0gQ1NTUHJvcGVydHlBbGwpIC8vICJhbGwiIHZhbHVlIGluIGFu
aW1hdGlvbiBpcyBub3QgZXF1aXZhbGVudCB0byB0aGUgYWxsIHByb3BlcnR5LgotICAgICAgICBy
ZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUocmVz
dWx0KTsKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJhbGwi
KSkgewotICAgICAgICBjb250ZXh0LnNhd0FuaW1hdGlvblByb3BlcnR5S2V5d29yZCgpOwotICAg
ICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVBbGwpOwotICAgIH0KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UodmFsdWUsICJub25lIikpIHsKLSAgICAgICAgY29udGV4dC5jb21taXRBbmltYXRpb25Q
cm9wZXJ0eUtleXdvcmQoKTsKLSAgICAgICAgY29udGV4dC5zYXdBbmltYXRpb25Qcm9wZXJ0eUtl
eXdvcmQoKTsKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRy
OwotfQotCi0vKiBzdGF0aWMgKi8KLVZlY3Rvcjxkb3VibGU+IENTU1BhcnNlcjo6cGFyc2VLZXlm
cmFtZVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpIHsKLSAgICBWZWN0b3I8ZG91Ymxl
PiBrZXlzOwotICAgIFZlY3RvcjxTdHJpbmc+IHN0cmluZ3M7Ci0gICAgc2VsZWN0b3Iuc3BsaXQo
JywnLCBzdHJpbmdzKTsKLQotICAgIGtleXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzdHJpbmdz
LnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJpbmdzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGRvdWJsZSBrZXkgPSAtMTsKLSAgICAgICAgU3RyaW5nIGN1ciA9IHN0cmlu
Z3NbaV0uc3RyaXBXaGl0ZVNwYWNlKCk7Ci0KLSAgICAgICAgLy8gRm9yIG5vdyB0aGUgc3ludGF4
IE1VU1QgYmUgJ3h4eCUnIG9yICdmcm9tJyBvciAndG8nLCB3aGVyZSB4eHggaXMgYSBsZWdhbCBm
bG9hdGluZyBwb2ludCBudW1iZXIKLSAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKGN1ciwgImZyb20iKSkKLSAgICAgICAgICAgIGtleSA9IDA7Ci0gICAgICAgIGVsc2Ug
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGN1ciwgInRvIikpCi0gICAgICAgICAg
ICBrZXkgPSAxOwotICAgICAgICBlbHNlIGlmIChjdXIuZW5kc1dpdGgoJyUnKSkgewotICAgICAg
ICAgICAgZG91YmxlIGsgPSBjdXIuc3Vic3RyaW5nKDAsIGN1ci5sZW5ndGgoKSAtIDEpLnRvRG91
YmxlKCk7Ci0gICAgICAgICAgICBpZiAoayA+PSAwICYmIGsgPD0gMTAwKQotICAgICAgICAgICAg
ICAgIGtleSA9IGsgLyAxMDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGtleSA8IDApIHsKLSAg
ICAgICAgICAgIGtleXMuY2xlYXIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGtleXMudW5jaGVja2VkQXBwZW5kKGtleSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGtl
eXM7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5zZm9ybU9yaWdpblNob3J0aGFuZChS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWx1ZTEsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4mIHZhbHVlMiwgUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUzKQotewotICAgIHBhcnNlMlZhbHVl
c0ZpbGxQb3NpdGlvbigqbV92YWx1ZUxpc3QsIHZhbHVlMSwgdmFsdWUyKTsKLQotICAgIC8vIG5v
dyBnZXQgegotICAgIGlmIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0gICAgICAgIFZhbHVl
V2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpKTsKLSAgICAgICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxl
bmd0aCkpIHsKLSAgICAgICAgICAgIHZhbHVlMyA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgp
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICB2YWx1ZTMgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NT
UGFyc2VyOjppc1NwcmluZ1RpbWluZ0Z1bmN0aW9uRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fY29udGV4dC5zcHJpbmdUaW1pbmdGdW5jdGlvbkVuYWJsZWQ7Ci19Ci0KLU9wdGlvbmFs
PGRvdWJsZT4gQ1NTUGFyc2VyOjpwYXJzZUN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZShD
U1NQYXJzZXJWYWx1ZUxpc3QmIGFyZ3MpCi17Ci0gICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJn
dW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MuY3VycmVudCgpKTsKLSAgICBpZiAoIXZhbGlkYXRl
VW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRk51bWJlcikpCi0gICAgICAgIHJldHVybiBO
dWxsb3B0OwotICAgIE9wdGlvbmFsPGRvdWJsZT4gcmVzdWx0ID0gcGFyc2VkRG91YmxlKGFyZ3Vt
ZW50V2l0aENhbGN1bGF0aW9uKTsKLSAgICBDU1NQYXJzZXJWYWx1ZSogbmV4dFZhbHVlID0gYXJn
cy5uZXh0KCk7Ci0gICAgaWYgKCFuZXh0VmFsdWUpIHsKLSAgICAgICAgLy8gVGhlIGxhc3QgbnVt
YmVyIGluIHRoZSBmdW5jdGlvbiBoYXMgbm8gY29tbWEgYWZ0ZXIgaXQsIHNvIHdlJ3JlIGRvbmUu
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIGlmICghaXNDb21tYShuZXh0VmFs
dWUpKQotICAgICAgICByZXR1cm4gTnVsbG9wdDsKLSAgICBhcmdzLm5leHQoKTsKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi1PcHRpb25hbDxkb3VibGU+IENTU1BhcnNlcjo6cGFyc2VTcHJpbmdU
aW1pbmdGdW5jdGlvblZhbHVlKENTU1BhcnNlclZhbHVlTGlzdCYgYXJncykKLXsKLSAgICBWYWx1
ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy5jdXJyZW50KCkp
OwotICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVy
KSkKLSAgICAgICAgcmV0dXJuIE51bGxvcHQ7Ci0gICAgT3B0aW9uYWw8ZG91YmxlPiByZXN1bHQg
PSBwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pOwotICAgIGFyZ3MubmV4dCgp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZUFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKCkKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSYgdmFs
dWUgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAodmFsdWUuaWQgPT0gQ1NTVmFs
dWVFYXNlIHx8IHZhbHVlLmlkID09IENTU1ZhbHVlTGluZWFyIHx8IHZhbHVlLmlkID09IENTU1Zh
bHVlRWFzZUluIHx8IHZhbHVlLmlkID09IENTU1ZhbHVlRWFzZU91dAotICAgICAgICB8fCB2YWx1
ZS5pZCA9PSBDU1NWYWx1ZUVhc2VJbk91dCB8fCB2YWx1ZS5pZCA9PSBDU1NWYWx1ZVN0ZXBTdGFy
dCB8fCB2YWx1ZS5pZCA9PSBDU1NWYWx1ZVN0ZXBFbmQpCi0gICAgICAgIHJldHVybiBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCk7Ci0KLSAg
ICAvLyBXZSBtdXN0IGJlIGEgZnVuY3Rpb24uCi0gICAgaWYgKHZhbHVlLnVuaXQgIT0gQ1NTUGFy
c2VyVmFsdWU6OkZ1bmN0aW9uKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENTU1Bh
cnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlLmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotCi0gICAg
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAi
c3RlcHMoIikpIHsKLSAgICAgICAgLy8gRm9yIHN0ZXBzLCAxIG9yIDIgcGFyYW1zIG11c3QgYmUg
c3BlY2lmaWVkIChjb21tYS1zZXBhcmF0ZWQpCi0gICAgICAgIGlmICghYXJncyB8fCAoYXJncy0+
c2l6ZSgpICE9IDEgJiYgYXJncy0+c2l6ZSgpICE9IDMpKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICAgICAgLy8gVGhlcmUgYXJlIHR3byB2YWx1ZXMuCi0gICAgICAgIGludCBu
dW1TdGVwczsKLSAgICAgICAgYm9vbCBzdGVwQXRTdGFydCA9IGZhbHNlOwotCi0gICAgICAgIENT
U1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKLSAgICAgICAgVmFsdWVX
aXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKLSAgICAg
ICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyKSkK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBudW1TdGVwcyA9IGNsYW1wVG9J
bnRlZ2VyKHBhcnNlZERvdWJsZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOwotICAgICAgICBp
ZiAobnVtU3RlcHMgPCAxKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGFy
Z3VtZW50ID0gYXJncy0+bmV4dCgpOwotCi0gICAgICAgIGlmIChhcmd1bWVudCkgewotICAgICAg
ICAgICAgLy8gVGhlcmUgaXMgYSBjb21tYSBzbyB3ZSBuZWVkIHRvIHBhcnNlIHRoZSBzZWNvbmQg
dmFsdWUKLSAgICAgICAgICAgIGlmICghaXNDb21tYShhcmd1bWVudCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsK
LSAgICAgICAgICAgIGlmIChhcmd1bWVudC0+aWQgIT0gQ1NTVmFsdWVTdGFydCAmJiBhcmd1bWVu
dC0+aWQgIT0gQ1NTVmFsdWVFbmQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgICAgICAgICBzdGVwQXRTdGFydCA9IGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZVN0YXJ0Owot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZTo6
Y3JlYXRlKG51bVN0ZXBzLCBzdGVwQXRTdGFydCk7Ci0gICAgfQotCi0gICAgaWYgKGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiY3ViaWMtYmV6aWVy
KCIpKSB7Ci0gICAgICAgIC8vIEZvciBjdWJpYyBiZXppZXIsIDQgdmFsdWVzIG11c3QgYmUgc3Bl
Y2lmaWVkIChjb21tYS1zZXBhcmF0ZWQpLgotICAgICAgICBpZiAoIWFyZ3MgfHwgYXJncy0+c2l6
ZSgpICE9IDcpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICAvLyBUaGVy
ZSBhcmUgdHdvIHBvaW50cyBzcGVjaWZpZWQuIFRoZSB4IHZhbHVlcyBtdXN0IGJlIGJldHdlZW4g
MCBhbmQgMSBidXQgdGhlIHkgdmFsdWVzIGNhbiBleGNlZWQgdGhpcyByYW5nZS4KLQotICAgICAg
ICBhdXRvIHgxID0gcGFyc2VDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUoKmFyZ3MpOwot
ICAgICAgICBpZiAoIXgxIHx8IHgxLnZhbHVlKCkgPCAwIHx8IHgxLnZhbHVlKCkgPiAxKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgYXV0byB5MSA9IHBhcnNlQ3ViaWNC
ZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlKCphcmdzKTsKLSAgICAgICAgaWYgKCF5MSkKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGF1dG8geDIgPSBwYXJzZUN1YmljQmV6
aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSgqYXJncyk7Ci0gICAgICAgIGlmICgheDIgfHwgeDIudmFs
dWUoKSA8IDAgfHwgeDIudmFsdWUoKSA+IDEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgICAgICBhdXRvIHkyID0gcGFyc2VDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUo
KmFyZ3MpOwotICAgICAgICBpZiAoIXkyKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICAgICAgcmV0dXJuIENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3JlYXRl
KHgxLnZhbHVlKCksIHkxLnZhbHVlKCksIHgyLnZhbHVlKCksIHkyLnZhbHVlKCkpOwotICAgIH0K
LQotICAgIGlmIChpc1NwcmluZ1RpbWluZ0Z1bmN0aW9uRW5hYmxlZCgpICYmIGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAic3ByaW5nKCIpKSB7Ci0g
ICAgICAgIC8vIEZvciBhIHNwcmluZywgNCB2YWx1ZXMgbXVzdCBiZSBzcGVjaWZpZWQgKHNwYWNl
LXNlcGFyYXRlZCkuCi0gICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoZSBhcmd1bWVudHMgYWxsIG9w
dGlvbmFsLgotICAgICAgICBpZiAoIWFyZ3MgfHwgYXJncy0+c2l6ZSgpICE9IDQpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgCi0gICAgICAgIC8vIE1hc3MgbXVzdCBiZSBn
cmVhdGVyIHRoYW4gMC4KLSAgICAgICAgYXV0byBtYXNzID0gcGFyc2VTcHJpbmdUaW1pbmdGdW5j
dGlvblZhbHVlKCphcmdzKTsKLSAgICAgICAgaWYgKCFtYXNzIHx8IG1hc3MudmFsdWUoKSA8PSAw
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgLy8gU3RpZmZuZXNzIG11
c3QgYmUgZ3JlYXRlciB0aGFuIDAuCi0gICAgICAgIGF1dG8gc3RpZmZuZXNzID0gcGFyc2VTcHJp
bmdUaW1pbmdGdW5jdGlvblZhbHVlKCphcmdzKTsKLSAgICAgICAgaWYgKCFzdGlmZm5lc3MgfHwg
c3RpZmZuZXNzLnZhbHVlKCkgPD0gMCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgICAgIC8vIERhbXBpbmcgY29lZmZpY2llbnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1
YWwgdG8gMC4KLSAgICAgICAgYXV0byBkYW1waW5nID0gcGFyc2VTcHJpbmdUaW1pbmdGdW5jdGlv
blZhbHVlKCphcmdzKTsKLSAgICAgICAgaWYgKCFkYW1waW5nIHx8IGRhbXBpbmcudmFsdWUoKSA8
IDApCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICAvLyBJbml0aWFsIHZl
bG9jaXR5IG1heSBoYXZlIGFueSB2YWx1ZS4KLSAgICAgICAgYXV0byBpbml0aWFsVmVsb2NpdHkg
PSBwYXJzZVNwcmluZ1RpbWluZ0Z1bmN0aW9uVmFsdWUoKmFyZ3MpOwotICAgICAgICBpZiAoIWlu
aXRpYWxWZWxvY2l0eSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHJl
dHVybiBDU1NTcHJpbmdUaW1pbmdGdW5jdGlvblZhbHVlOjpjcmVhdGUobWFzcy52YWx1ZSgpLCBz
dGlmZm5lc3MudmFsdWUoKSwgZGFtcGluZy52YWx1ZSgpLCBpbml0aWFsVmVsb2NpdHkudmFsdWUo
KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpw
YXJzZUFuaW1hdGlvblByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcElkLCBSZWZQdHI8Q1NTVmFs
dWU+JiByZXN1bHQsIEFuaW1hdGlvblBhcnNlQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBSZWZQ
dHI8Q1NTVmFsdWVMaXN0PiB2YWx1ZXM7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbDsKLSAgICBS
ZWZQdHI8Q1NTVmFsdWU+IHZhbHVlOwotICAgIGJvb2wgYWxsb3dDb21tYSA9IGZhbHNlOwotCi0g
ICAgcmVzdWx0ID0gbnVsbHB0cjsKLQotICAgIHdoaWxlICgodmFsID0gbV92YWx1ZUxpc3QtPmN1
cnJlbnQoKSkpIHsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjdXJyVmFsdWU7Ci0gICAgICAg
IGlmIChhbGxvd0NvbW1hKSB7Ci0gICAgICAgICAgICBpZiAoIWlzQ29tbWEodmFsKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgp
OwotICAgICAgICAgICAgYWxsb3dDb21tYSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgc3dpdGNoIChwcm9wSWQpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlBbmltYXRpb25EZWxheToKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRBbmltYXRpb25EZWxheToKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2l0aW9u
RGVsYXk6Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5
OgotICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlQW5pbWF0aW9uRGVsYXkoKTsKLSAg
ICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUFuaW1hdGlvbkRpcmVjdGlvbjoKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRBbmltYXRpb25EaXJlY3Rpb246Ci0gICAgICAgICAgICAgICAgY3VyclZhbHVlID0g
cGFyc2VBbmltYXRpb25EaXJlY3Rpb24oKTsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVl
KQotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvbkR1cmF0aW9u
OgotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkR1cmF0aW9uOgot
ICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zaXRpb25EdXJhdGlvbjoKLSAgICAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb246Ci0gICAgICAgICAg
ICAgICAgY3VyclZhbHVlID0gcGFyc2VBbmltYXRpb25EdXJhdGlvbigpOwotICAgICAgICAgICAg
ICAgIGlmIChjdXJyVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0
KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5
QW5pbWF0aW9uRmlsbE1vZGU6Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5p
bWF0aW9uRmlsbE1vZGU6Ci0gICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VBbmltYXRp
b25GaWxsTW9kZSgpOwotICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCi0gICAgICAgICAg
ICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6Ci0gICAg
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6Ci0g
ICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VBbmltYXRpb25JdGVyYXRpb25Db3VudCgp
OwotICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIG1f
dmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIENTU1Byb3BlcnR5QW5pbWF0aW9uTmFtZToKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRBbmltYXRpb25OYW1lOgotICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNl
QW5pbWF0aW9uTmFtZSgpOwotICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCi0gICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5QW5pbWF0aW9uUGxheVN0YXRlOgotICAgICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblBsYXlTdGF0ZToKLSAgICAgICAg
ICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUFuaW1hdGlvblBsYXlTdGF0ZSgpOwotICAgICAgICAg
ICAgICAgIGlmIChjdXJyVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5u
ZXh0KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5VHJhbnNpdGlvblByb3BlcnR5OgotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFRyYW5zaXRpb25Qcm9wZXJ0eToKLSAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUFu
aW1hdGlvblByb3BlcnR5KGNvbnRleHQpOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiAh
Y29udGV4dC5hbmltYXRpb25Qcm9wZXJ0eUtleXdvcmRBbGxvd2VkKCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQotICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvblRpbWluZ0Z1bmN0aW9u
OgotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblRpbWluZ0Z1bmN0
aW9uOgotICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zaXRpb25UaW1pbmdGdW5jdGlv
bjoKLSAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5nRnVu
Y3Rpb246Ci0gICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VBbmltYXRpb25UaW1pbmdG
dW5jdGlvbigpOwotICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCi0gICAgICAgICAgICAg
ICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jaWYg
RU5BQkxFKENTU19BTklNQVRJT05TX0xFVkVMXzIpCi0gICAgICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0QW5pbWF0aW9uVHJpZ2dlcjoKLSAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBw
YXJzZUFuaW1hdGlvblRyaWdnZXIoKTsKLSAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQot
ICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotI2VuZGlmCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFjdXJyVmFsdWUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAodmFsdWUgJiYgIXZhbHVlcykgewotICAg
ICAgICAgICAgICAgIHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQo
KTsKLSAgICAgICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZCh2YWx1ZS5yZWxlYXNlTm9uTnVsbCgp
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHZhbHVlcykKLSAgICAgICAgICAg
ICAgICB2YWx1ZXMtPmFwcGVuZChjdXJyVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdmFsdWUgPSBXVEZNb3ZlKGN1cnJWYWx1ZSk7Ci0K
LSAgICAgICAgICAgIGFsbG93Q29tbWEgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
V2hlbiBwYXJzaW5nIHRoZSAndHJhbnNpdGlvbicgc2hvcnRoYW5kIHByb3BlcnR5LCB3ZSBsZXQg
aXQgaGFuZGxlIGJ1aWxkaW5nIHVwIHRoZSBsaXN0cyBmb3IgYWxsCi0gICAgICAgIC8vIHByb3Bl
cnRpZXMuCi0gICAgICAgIGlmIChpblNob3J0aGFuZCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMtPmxlbmd0aCgpKSB7Ci0gICAgICAgIHJl
c3VsdCA9IFdURk1vdmUodmFsdWVzKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IGlmICh2YWx1ZSkgewotICAgICAgICByZXN1bHQgPSBXVEZNb3ZlKHZhbHVlKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2lmIEVOQUJMRShD
U1NfR1JJRF9MQVlPVVQpCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZEdyaWRQb3NpdGlvbkN1
c3RvbUlkZW50KGNvbnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdmFs
dWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UICYmIHZhbHVlLmlkICE9IENT
U1ZhbHVlU3BhbiAmJiB2YWx1ZS5pZCAhPSBDU1NWYWx1ZUF1dG87Ci19Ci0KLS8vIFRoZSBmdW5j
dGlvbiBwYXJzZXMgWyA8aW50ZWdlcj4gfHwgPGN1c3RvbS1pZGVudD4gXSBpbiA8Z3JpZC1saW5l
PiAod2hpY2ggY2FuIGJlIHN0YW5kIGFsb25lIG9yIHdpdGggJ3NwYW4nKS4KLWJvb2wgQ1NTUGFy
c2VyOjpwYXJzZUludGVnZXJPckN1c3RvbUlkZW50RnJvbUdyaWRQb3NpdGlvbihSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+JiBudW1lcmljVmFsdWUsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4m
IGdyaWRMaW5lTmFtZSkKLXsKLSAgICBBU1NFUlQoaXNDU1NHcmlkTGF5b3V0RW5hYmxlZCgpKTsK
LQotICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVl
TGlzdC0+Y3VycmVudCgpKTsKLSAgICBpZiAodmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0
aW9uLCBGSW50ZWdlcikgJiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFsdWUpIHsK
LSAgICAgICAgbnVtZXJpY1ZhbHVlID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVl
V2l0aENhbGN1bGF0aW9uKTsKLSAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIG5leHRWYWx1ZSA9IG1f
dmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIGlmIChuZXh0VmFsdWUgJiYgaXNWYWxpZEdyaWRQ
b3NpdGlvbkN1c3RvbUlkZW50KCpuZXh0VmFsdWUpKSB7Ci0gICAgICAgICAgICBncmlkTGluZU5h
bWUgPSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSgqbmV4dFZhbHVlKTsKLSAgICAgICAgICAg
IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgaWYgKGlzVmFsaWRHcmlkUG9zaXRpb25DdXN0b21JZGVudCh2YWx1ZVdpdGhD
YWxjdWxhdGlvbikpIHsKLSAgICAgICAgZ3JpZExpbmVOYW1lID0gY3JlYXRlUHJpbWl0aXZlU3Ry
aW5nVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgICAgICBpZiAoQ1NTUGFyc2VyVmFs
dWUqIG5leHRWYWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKLSAgICAgICAgICAgIFZhbHVl
V2l0aENhbGN1bGF0aW9uIG5leHRWYWx1ZVdpdGhDYWxjdWxhdGlvbigqbmV4dFZhbHVlKTsKLSAg
ICAgICAgICAgIGlmICh2YWxpZGF0ZVVuaXQobmV4dFZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50
ZWdlcikgJiYgbmV4dFZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlKSB7Ci0gICAg
ICAgICAgICAgICAgbnVtZXJpY1ZhbHVlID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKG5l
eHRWYWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5l
eHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2Vy
OjpwYXJzZUdyaWRQb3NpdGlvbigpCi17Ci0gICAgQVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJs
ZWQoKSk7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpOwotICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvKSB7Ci0gICAgICAgIG1fdmFs
dWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwotICAgIH0KLQotICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gbnVtZXJpY1ZhbHVlOwotICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gZ3JpZExpbmVOYW1lOwotICAgIGJvb2wgaGFzU2VlblNwYW5LZXl3b3JkID0gZmFs
c2U7Ci0KLSAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlU3BhbikgewotICAgICAgICBoYXNT
ZWVuU3BhbktleXdvcmQgPSB0cnVlOwotICAgICAgICBpZiAoYXV0byogbmV4dFZhbHVlID0gbV92
YWx1ZUxpc3QtPm5leHQoKSkgewotICAgICAgICAgICAgaWYgKCFpc0ZvcndhcmRTbGFzaE9wZXJh
dG9yKCpuZXh0VmFsdWUpICYmICFwYXJzZUludGVnZXJPckN1c3RvbUlkZW50RnJvbUdyaWRQb3Np
dGlvbihudW1lcmljVmFsdWUsIGdyaWRMaW5lTmFtZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHBhcnNlSW50ZWdlck9yQ3VzdG9t
SWRlbnRGcm9tR3JpZFBvc2l0aW9uKG51bWVyaWNWYWx1ZSwgZ3JpZExpbmVOYW1lKSkgewotICAg
ICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgICAgIGlmICh2YWx1ZSAm
JiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVTcGFuKSB7Ci0gICAgICAgICAgICBoYXNTZWVuU3Bhbktl
eXdvcmQgPSB0cnVlOwotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vIENoZWNrIHRoYXQgd2UgaGF2ZSBjb25zdW1lZCBhbGwgdGhlIHZh
bHVlIGxpc3QuIEZvciBzaG9ydGhhbmRzLCB0aGUgcGFyc2VyIHdpbGwgcGFzcwotICAgIC8vIHRo
ZSB3aG9sZSB2YWx1ZSBsaXN0IChpbmNsdWRpbmcgdGhlIG9wcG9zaXRlIHBvc2l0aW9uKS4KLSAg
ICBpZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSAmJiAhaXNGb3J3YXJkU2xhc2hPcGVyYXRvcigq
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
Ly8gSWYgd2UgZGlkbid0IHBhcnNlIGFueXRoaW5nLCB0aGlzIGlzIG5vdCBhIHZhbGlkIGdyaWQg
cG9zaXRpb24uCi0gICAgaWYgKCFoYXNTZWVuU3BhbktleXdvcmQgJiYgIWdyaWRMaW5lTmFtZSAm
JiAhbnVtZXJpY1ZhbHVlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIElmIHdl
IGhhdmUgInNwYW4iIGtleXdvcmQgYWxvbmUgaXMgaW52YWxpZC4KLSAgICBpZiAoaGFzU2VlblNw
YW5LZXl3b3JkICYmICFncmlkTGluZU5hbWUgJiYgIW51bWVyaWNWYWx1ZSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBOZWdhdGl2ZSBudW1iZXJzIGFyZSBub3QgYWxsb3dlZCBm
b3Igc3BhbiAoYnV0IGFyZSBmb3IgPGludGVnZXI+KS4KLSAgICBpZiAoaGFzU2VlblNwYW5LZXl3
b3JkICYmIG51bWVyaWNWYWx1ZSAmJiBudW1lcmljVmFsdWUtPmdldEludFZhbHVlKCkgPCAwKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIEZvciB0aGUgPGN1c3RvbS1pZGVudD4g
Y2FzZS4KLSAgICBpZiAoZ3JpZExpbmVOYW1lICYmICFudW1lcmljVmFsdWUgJiYgIWhhc1NlZW5T
cGFuS2V5d29yZCkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlVmFsdWUoZ3JpZExpbmVOYW1lLT5nZXRTdHJpbmdWYWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1NUUklORyk7Ci0KLSAgICBhdXRvIHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRl
U3BhY2VTZXBhcmF0ZWQoKTsKLSAgICBpZiAoaGFzU2VlblNwYW5LZXl3b3JkKQotICAgICAgICB2
YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZVNwYW4pKTsKLSAgICBpZiAobnVtZXJpY1ZhbHVlKQotICAgICAgICB2YWx1
ZXMtPmFwcGVuZChudW1lcmljVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgaWYgKGdyaWRM
aW5lTmFtZSkKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQoZ3JpZExpbmVOYW1lLnJlbGVhc2VOb25O
dWxsKCkpOwotICAgIEFTU0VSVCh2YWx1ZXMtPmxlbmd0aCgpKTsKLSAgICByZXR1cm4gV1RGTW92
ZSh2YWx1ZXMpOwotfQotCi1zdGF0aWMgUmVmPENTU1ZhbHVlPiBncmlkTWlzc2luZ0dyaWRQb3Np
dGlvblZhbHVlKENTU1ZhbHVlJiB2YWx1ZSkKLXsKLSAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KHZhbHVlKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLmlzU3RyaW5n
KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLQotICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwotfQotCi1ib29s
IENTU1BhcnNlcjo6cGFyc2VHcmlkSXRlbVBvc2l0aW9uU2hvcnRoYW5kKENTU1Byb3BlcnR5SUQg
c2hvcnRoYW5kSWQsIGJvb2wgaW1wb3J0YW50KQotewotICAgIEFTU0VSVChpc0NTU0dyaWRMYXlv
dXRFbmFibGVkKCkpOwotCi0gICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgc2hvcnRoYW5k
SWQpOwotICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmIHNob3J0aGFuZCA9IHNob3J0
aGFuZEZvclByb3BlcnR5KHNob3J0aGFuZElkKTsKLSAgICBBU1NFUlQoc2hvcnRoYW5kLmxlbmd0
aCgpID09IDIpOwotCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBzdGFydFZhbHVlID0gcGFyc2VHcmlk
UG9zaXRpb24oKTsKLSAgICBpZiAoIXN0YXJ0VmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gZW5kVmFsdWU7Ci0gICAgaWYgKG1fdmFsdWVMaXN0LT5j
dXJyZW50KCkpIHsKLSAgICAgICAgaWYgKCFpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKCptX3ZhbHVl
TGlzdC0+Y3VycmVudCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBp
ZiAoIW1fdmFsdWVMaXN0LT5uZXh0KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgZW5kVmFsdWUgPSBwYXJzZUdyaWRQb3NpdGlvbigpOwotICAgICAgICBpZiAoIWVuZFZh
bHVlIHx8IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGVuZFZhbHVlID0gZ3JpZE1pc3NpbmdHcmlkUG9zaXRpb25W
YWx1ZSgqc3RhcnRWYWx1ZSk7Ci0KLSAgICBhZGRQcm9wZXJ0eShzaG9ydGhhbmQucHJvcGVydGll
cygpWzBdLCBzdGFydFZhbHVlLnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFudCk7Ci0gICAgYWRk
UHJvcGVydHkoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVsxXSwgZW5kVmFsdWUucmVsZWFzZU5vbk51
bGwoKSwgaW1wb3J0YW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6
OnBhcnNlR3JpZEdhcFNob3J0aGFuZChib29sIGltcG9ydGFudCkKLXsKLSAgICBBU1NFUlQoaXND
U1NHcmlkTGF5b3V0RW5hYmxlZCgpKTsKLQotICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMs
IENTU1Byb3BlcnR5R3JpZEdhcCk7Ci0gICAgQVNTRVJUKHNob3J0aGFuZEZvclByb3BlcnR5KENT
U1Byb3BlcnR5R3JpZEdhcCkubGVuZ3RoKCkgPT0gMik7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSog
dmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHJvd1ZhbHVlV2l0aENh
bGN1bGF0aW9uKCp2YWx1ZSk7Ci0gICAgaWYgKCF2YWxpZGF0ZVVuaXQocm93VmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVnKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgYXV0byByb3dHYXAgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUocm93VmFsdWVXaXRo
Q2FsY3VsYXRpb24pOwotCi0gICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIGlm
ICghdmFsdWUpIHsKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlkQ29sdW1uR2Fw
LCByb3dHYXAuY29weVJlZigpLCBpbXBvcnRhbnQpOwotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUdyaWRSb3dHYXAsIFdURk1vdmUocm93R2FwKSwgaW1wb3J0YW50KTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gY29sdW1uVmFs
dWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsKLSAgICBpZiAoIXZhbGlkYXRlVW5pdChjb2x1bW5W
YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZOb25OZWcpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAobV92YWx1ZUxpc3QtPm5leHQoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYXV0byBjb2x1bW5HYXAgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
Y29sdW1uVmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotCi0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVy
dHlHcmlkUm93R2FwLCBXVEZNb3ZlKHJvd0dhcCksIGltcG9ydGFudCk7Ci0gICAgYWRkUHJvcGVy
dHkoQ1NTUHJvcGVydHlHcmlkQ29sdW1uR2FwLCBXVEZNb3ZlKGNvbHVtbkdhcCksIGltcG9ydGFu
dCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6
OnBhcnNlR3JpZFRlbXBsYXRlQ29sdW1ucyhUcmFja0xpc3RUeXBlIHRyYWNrTGlzdFR5cGUpCi17
Ci0gICAgQVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSk7Ci0KLSAgICBpZiAoIShtX3Zh
bHVlTGlzdC0+Y3VycmVudCgpICYmIGlzRm9yd2FyZFNsYXNoT3BlcmF0b3IoKm1fdmFsdWVMaXN0
LT5jdXJyZW50KCkpICYmIG1fdmFsdWVMaXN0LT5uZXh0KCkpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICBpZiAoYXV0byBjb2x1bW5zVmFsdWUgPSBwYXJzZUdyaWRUcmFja0xpc3QodHJh
Y2tMaXN0VHlwZSkpIHsKLSAgICAgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCi0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGNvbHVtbnNWYWx1ZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3Jp
ZFRlbXBsYXRlUm93c0FuZEFyZWFzQW5kQ29sdW1ucyhib29sIGltcG9ydGFudCkKLXsKLSAgICBB
U1NFUlQoaXNDU1NHcmlkTGF5b3V0RW5hYmxlZCgpKTsKLQotICAgIC8vIEF0IGxlYXN0IHRlbXBs
YXRlLWFyZWFzIHN0cmluZ3MgbXVzdCBiZSBkZWZpbmVkLgotICAgIGlmICghbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKSB8fCBpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKCptX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTmFtZWRHcmlkQXJlYU1hcCBncmlk
QXJlYU1hcDsKLSAgICB1bnNpZ25lZCByb3dDb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgY29sdW1u
Q291bnQgPSAwOwotICAgIGJvb2wgdHJhaWxpbmdJZGVudFdhc0FkZGVkID0gZmFsc2U7Ci0gICAg
YXV0byB0ZW1wbGF0ZVJvd3MgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7
Ci0KLSAgICB3aGlsZSAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSAmJiAhaXNGb3J3YXJkU2xhc2hP
cGVyYXRvcigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkpIHsKLSAgICAgICAgLy8gSGFuZGxlIGxl
YWRpbmcgPGN1c3RvbS1pZGVudD4qLgotICAgICAgICBpZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQo
KS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6VmFsdWVMaXN0KSB7Ci0gICAgICAgICAgICBpZiAo
dHJhaWxpbmdJZGVudFdhc0FkZGVkKSB7Ci0gICAgICAgICAgICAgICAgLy8gQSByb3cncyB0cmFp
bGluZyBpZGVudCBtdXN0IGJlIGNvbmNhdGVuYXRlZCB3aXRoIHRoZSBuZXh0IHJvdydzIGxlYWRp
bmcgb25lLgotICAgICAgICAgICAgICAgIHBhcnNlR3JpZExpbmVOYW1lcygqbV92YWx1ZUxpc3Qs
IHRlbXBsYXRlUm93cywgZG93bmNhc3Q8Q1NTR3JpZExpbmVOYW1lc1ZhbHVlPih0ZW1wbGF0ZVJv
d3MtPml0ZW0odGVtcGxhdGVSb3dzLT5sZW5ndGgoKSAtIDEpKSk7Ci0gICAgICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICAgICBwYXJzZUdyaWRMaW5lTmFtZXMoKm1fdmFsdWVMaXN0LCB0ZW1w
bGF0ZVJvd3MpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSGFuZGxlIGEgdGVtcGxhdGUtYXJl
YSdzIHJvdy4KLSAgICAgICAgaWYgKCFwYXJzZUdyaWRUZW1wbGF0ZUFyZWFzUm93KGdyaWRBcmVh
TWFwLCByb3dDb3VudCwgY29sdW1uQ291bnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICArK3Jvd0NvdW50OwotCi0gICAgICAgIC8vIEhhbmRsZSB0ZW1wbGF0ZS1yb3dzJ3Mg
dHJhY2stc2l6ZS4KLSAgICAgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkgJiYgbV92YWx1
ZUxpc3QtPmN1cnJlbnQoKS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6VmFsdWVMaXN0ICYm
IG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19T
VFJJTkcpIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBwYXJzZUdyaWRU
cmFja1NpemUoKm1fdmFsdWVMaXN0KTsKLSAgICAgICAgICAgIGlmICghdmFsdWUpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgdGVtcGxhdGVSb3dzLT5hcHBlbmQo
dmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdGVt
cGxhdGVSb3dzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSk7Ci0KLSAgICAgICAgLy8gVGhpcyB3aWxsIGhhbmRsZSB0
aGUgdHJhaWxpbmcvbGVhZGluZyA8Y3VzdG9tLWlkZW50PiogaW4gdGhlIGdyYW1tYXIuCi0gICAg
ICAgIHRyYWlsaW5nSWRlbnRXYXNBZGRlZCA9IGZhbHNlOwotICAgICAgICBpZiAobV92YWx1ZUxp
c3QtPmN1cnJlbnQoKSAmJiBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLT51bml0ID09IENTU1BhcnNl
clZhbHVlOjpWYWx1ZUxpc3QpCi0gICAgICAgICAgICB0cmFpbGluZ0lkZW50V2FzQWRkZWQgPSBw
YXJzZUdyaWRMaW5lTmFtZXMoKm1fdmFsdWVMaXN0LCB0ZW1wbGF0ZVJvd3MpOwotICAgIH0KLQot
ICAgIC8vIFsvIDxleHBsaWNpdC10cmFjay1saXN0PiBdPwotICAgIFJlZlB0cjxDU1NWYWx1ZT4g
dGVtcGxhdGVDb2x1bW5zOwotICAgIGlmIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0gICAg
ICAgIEFTU0VSVChpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgp
KSk7Ci0gICAgICAgIHRlbXBsYXRlQ29sdW1ucyA9IHBhcnNlR3JpZFRlbXBsYXRlQ29sdW1ucyhH
cmlkVGVtcGxhdGVOb1JlcGVhdCk7Ci0gICAgICAgIGlmICghdGVtcGxhdGVDb2x1bW5zKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAvLyBUaGUgdGVtcGxhdGUtY29sdW1ucyA8
dHJhY2stbGlzdD4gY2FuJ3QgYmUgJ25vbmUnLgotICAgICAgICBpZiAodGVtcGxhdGVDb2x1bW5z
LT5pc1ByaW1pdGl2ZVZhbHVlKCkgJiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0ZW1w
bGF0ZUNvbHVtbnMpLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlkVGVt
cGxhdGVSb3dzLCBXVEZNb3ZlKHRlbXBsYXRlUm93cyksIGltcG9ydGFudCk7Ci0gICAgaWYgKHRl
bXBsYXRlQ29sdW1ucykKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlkVGVtcGxh
dGVDb2x1bW5zLCB0ZW1wbGF0ZUNvbHVtbnMucmVsZWFzZU5vbk51bGwoKSwgaW1wb3J0YW50KTsK
LSAgICBlbHNlCi0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZFRlbXBsYXRlQ29s
dW1ucywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb25lKSwgaW1wb3J0YW50KTsKLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRU
ZW1wbGF0ZUFyZWFzLCBDU1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlOjpjcmVhdGUoZ3JpZEFyZWFN
YXAsIHJvd0NvdW50LCBjb2x1bW5Db3VudCksIGltcG9ydGFudCk7Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3JpZFRlbXBsYXRlU2hvcnRoYW5kKGJvb2wg
aW1wb3J0YW50KQotewotICAgIEFTU0VSVChpc0NTU0dyaWRMYXlvdXRFbmFibGVkKCkpOwotCi0g
ICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgQ1NTUHJvcGVydHlHcmlkVGVtcGxhdGUpOwot
ICAgIEFTU0VSVChzaG9ydGhhbmRGb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRUZW1wbGF0ZSku
bGVuZ3RoKCkgPT0gMyk7Ci0KLSAgICAvLyBBdCBsZWFzdCAibm9uZSIgbXVzdCBiZSBkZWZpbmVk
LgotICAgIGlmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgYm9vbCBmaXJzdFZhbHVlSXNOb25lID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+
aWQgPT0gQ1NTVmFsdWVOb25lOwotCi0gICAgLy8gMS0gJ25vbmUnIGNhc2UuCi0gICAgaWYgKGZp
cnN0VmFsdWVJc05vbmUgJiYgIW1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKLSAgICAgICAgYWRkUHJv
cGVydHkoQ1NTUHJvcGVydHlHcmlkVGVtcGxhdGVDb2x1bW5zLCBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpLCBpbXBvcnRhbnQpOwot
ICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRUZW1wbGF0ZVJvd3MsIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSksIGlt
cG9ydGFudCk7Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZFRlbXBsYXRlQXJl
YXMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlTm9uZSksIGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IC8vIDItIDxncmlkLXRlbXBsYXRlLXJvd3M+IC8gPGdyaWQtdGVtcGxhdGUtY29sdW1ucz4gc3lu
dGF4LgotICAgIFJlZlB0cjxDU1NWYWx1ZT4gcm93c1ZhbHVlOwotICAgIGlmIChmaXJzdFZhbHVl
SXNOb25lKQotICAgICAgICByb3dzVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwotICAgIGVsc2UKLSAgICAgICAgcm93
c1ZhbHVlID0gcGFyc2VHcmlkVHJhY2tMaXN0KEdyaWRUZW1wbGF0ZSk7Ci0KLSAgICBpZiAocm93
c1ZhbHVlKSB7Ci0gICAgICAgIGF1dG8gY29sdW1uc1ZhbHVlID0gcGFyc2VHcmlkVGVtcGxhdGVD
b2x1bW5zKCk7Ci0gICAgICAgIGlmICghY29sdW1uc1ZhbHVlKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZFRlbXBsYXRlQ29s
dW1ucywgY29sdW1uc1ZhbHVlLnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFudCk7Ci0gICAgICAg
IGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZFRlbXBsYXRlUm93cywgcm93c1ZhbHVlLnJlbGVh
c2VOb25OdWxsKCksIGltcG9ydGFudCk7Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5
R3JpZFRlbXBsYXRlQXJlYXMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlTm9uZSksIGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotCi0gICAgLy8gMy0gWzxsaW5lLW5hbWVzPj8gPHN0cmluZz4gPHRyYWNrLXNp
emU+PyA8bGluZS1uYW1lcz4/IF0rIHN5bnRheC4KLSAgICAvLyBJdCByZXF1aXJlcyB0byByZXdp
bmQgcGFyc2luZyBkdWUgdG8gcHJldmlvdXMgc3ludGF4IGZhaWx1cmVzLgotICAgIG1fdmFsdWVM
aXN0LT5zZXRDdXJyZW50SW5kZXgoMCk7Ci0gICAgcmV0dXJuIHBhcnNlR3JpZFRlbXBsYXRlUm93
c0FuZEFyZWFzQW5kQ29sdW1ucyhpbXBvcnRhbnQpOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFy
c2VHcmlkU2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50KQotewotICAgIEFTU0VSVChpc0NTU0dyaWRM
YXlvdXRFbmFibGVkKCkpOwotCi0gICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgQ1NTUHJv
cGVydHlHcmlkKTsKLSAgICBBU1NFUlQoc2hvcnRoYW5kRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlH
cmlkKS5sZW5ndGgoKSA9PSA4KTsKLQotICAgIC8vIDEtIDxncmlkLXRlbXBsYXRlPgotICAgIGlm
IChwYXJzZUdyaWRUZW1wbGF0ZVNob3J0aGFuZChpbXBvcnRhbnQpKSB7Ci0gICAgICAgIC8vIEl0
IGNhbiBvbmx5IGJlIHNwZWNpZmllZCB0aGUgZXhwbGljaXQgb3IgdGhlIGltcGxpY2l0IGdyaWQg
cHJvcGVydGllcyBpbiBhIHNpbmdsZSBncmlkIGRlY2xhcmF0aW9uLgotICAgICAgICAvLyBUaGUg
c3ViLXByb3BlcnRpZXMgbm90IHNwZWNpZmllZCBhcmUgc2V0IHRvIHRoZWlyIGluaXRpYWwgdmFs
dWUsIGFzIG5vcm1hbCBmb3Igc2hvcnRoYW5kcy4KLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJv
cGVydHlHcmlkQXV0b0Zsb3csIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSW1wbGlj
aXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJv
cGVydHlHcmlkQXV0b0NvbHVtbnMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSW1w
bGljaXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NT
UHJvcGVydHlHcmlkQXV0b1Jvd3MsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSW1w
bGljaXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NT
UHJvcGVydHlHcmlkQ29sdW1uR2FwLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlt
cGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7Ci0gICAgICAgIGFkZFByb3BlcnR5KENT
U1Byb3BlcnR5R3JpZFJvd0dhcCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJbXBs
aWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICAvLyBOZWVkIHRvIHJld2luZCBwYXJzaW5nIHRvIGV4cGxvcmUgdGhlIGFsdGVy
bmF0aXZlIHN5bnRheCBvZiB0aGlzIHNob3J0aGFuZC4KLSAgICBtX3ZhbHVlTGlzdC0+c2V0Q3Vy
cmVudEluZGV4KDApOwotCi0gICAgLy8gMi0gPGdyaWQtYXV0by1mbG93PiBbIDxncmlkLWF1dG8t
Y29sdW1ucz4gWyAvIDxncmlkLWF1dG8tcm93cz4gXT8gXQotICAgIGlmICghcGFyc2VWYWx1ZShD
U1NQcm9wZXJ0eUdyaWRBdXRvRmxvdywgaW1wb3J0YW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBhdXRvQ29sdW1uc1ZhbHVlOwotICAgIFJlZlB0cjxD
U1NWYWx1ZT4gYXV0b1Jvd3NWYWx1ZTsKLQotICAgIGlmIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgp
KSB7Ci0gICAgICAgIGF1dG9Sb3dzVmFsdWUgPSBwYXJzZUdyaWRUcmFja0xpc3QoR3JpZEF1dG8p
OwotICAgICAgICBpZiAoIWF1dG9Sb3dzVmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0gICAgICAgICAgICBpZiAo
IWlzRm9yd2FyZFNsYXNoT3BlcmF0b3IoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHx8ICFtX3Zh
bHVlTGlzdC0+bmV4dCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIGF1dG9Db2x1bW5zVmFsdWUgPSBwYXJzZUdyaWRUcmFja0xpc3QoR3JpZEF1dG8pOwotICAg
ICAgICAgICAgaWYgKCFhdXRvQ29sdW1uc1ZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBPdGhlciBv
bWl0dGVkIHZhbHVlcyBhcmUgc2V0IHRvIHRoZWlyIGluaXRpYWwgdmFsdWVzLgotICAgICAgICBh
dXRvQ29sdW1uc1ZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJbXBsaWNp
dEluaXRpYWxWYWx1ZSgpOwotICAgICAgICBhdXRvUm93c1ZhbHVlID0gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpOwotICAgIH0KLQotICAgIC8v
IGlmIDxncmlkLWF1dG8tcm93cz4gdmFsdWUgaXMgb21pdHRlZCwgaXQgaXMgc2V0IHRvIHRoZSB2
YWx1ZSBzcGVjaWZpZWQgZm9yIGdyaWQtYXV0by1jb2x1bW5zLgotICAgIGlmICghYXV0b0NvbHVt
bnNWYWx1ZSkKLSAgICAgICAgYXV0b0NvbHVtbnNWYWx1ZSA9IGF1dG9Sb3dzVmFsdWU7Ci0KLSAg
ICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRBdXRvQ29sdW1ucywgYXV0b0NvbHVtbnNWYWx1
ZS5yZWxlYXNlTm9uTnVsbCgpLCBpbXBvcnRhbnQpOwotICAgIGFkZFByb3BlcnR5KENTU1Byb3Bl
cnR5R3JpZEF1dG9Sb3dzLCBhdXRvUm93c1ZhbHVlLnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFu
dCk7Ci0KLSAgICAvLyBJdCBjYW4gb25seSBiZSBzcGVjaWZpZWQgdGhlIGV4cGxpY2l0IG9yIHRo
ZSBpbXBsaWNpdCBncmlkIHByb3BlcnRpZXMgaW4gYSBzaW5nbGUgZ3JpZCBkZWNsYXJhdGlvbi4K
LSAgICAvLyBUaGUgc3ViLXByb3BlcnRpZXMgbm90IHNwZWNpZmllZCBhcmUgc2V0IHRvIHRoZWly
IGluaXRpYWwgdmFsdWUsIGFzIG5vcm1hbCBmb3Igc2hvcnRoYW5kcy4KLSAgICBhZGRQcm9wZXJ0
eShDU1NQcm9wZXJ0eUdyaWRUZW1wbGF0ZUNvbHVtbnMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKLSAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUdyaWRUZW1wbGF0ZVJvd3MsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKLSAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUdyaWRUZW1wbGF0ZUFyZWFzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7Ci0gICAgYWRkUHJv
cGVydHkoQ1NTUHJvcGVydHlHcmlkQ29sdW1uR2FwLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7Ci0gICAgYWRkUHJvcGVy
dHkoQ1NTUHJvcGVydHlHcmlkUm93R2FwLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3JpZEFyZWFTaG9ydGhhbmQoYm9vbCBpbXBvcnRh
bnQpCi17Ci0gICAgQVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSk7Ci0KLSAgICBTaG9y
dGhhbmRTY29wZSBzY29wZSh0aGlzLCBDU1NQcm9wZXJ0eUdyaWRBcmVhKTsKLSAgICBBU1NFUlQo
c2hvcnRoYW5kRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlHcmlkQXJlYSkubGVuZ3RoKCkgPT0gNCk7
Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHJvd1N0YXJ0VmFsdWUgPSBwYXJzZUdyaWRQb3NpdGlv
bigpOwotICAgIGlmICghcm93U3RhcnRWYWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgUmVmUHRyPENTU1ZhbHVlPiBjb2x1bW5TdGFydFZhbHVlOwotICAgIGlmICghcGFyc2VTaW5n
bGVHcmlkQXJlYUxvbmdoYW5kKGNvbHVtblN0YXJ0VmFsdWUpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHJvd0VuZFZhbHVlOwotICAgIGlmICghcGFyc2VT
aW5nbGVHcmlkQXJlYUxvbmdoYW5kKHJvd0VuZFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBjb2x1bW5FbmRWYWx1ZTsKLSAgICBpZiAoIXBhcnNl
U2luZ2xlR3JpZEFyZWFMb25naGFuZChjb2x1bW5FbmRWYWx1ZSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmICghY29sdW1uU3RhcnRWYWx1ZSkKLSAgICAgICAgY29sdW1uU3RhcnRW
YWx1ZSA9IGdyaWRNaXNzaW5nR3JpZFBvc2l0aW9uVmFsdWUoKnJvd1N0YXJ0VmFsdWUpOwotCi0g
ICAgaWYgKCFyb3dFbmRWYWx1ZSkKLSAgICAgICAgcm93RW5kVmFsdWUgPSBncmlkTWlzc2luZ0dy
aWRQb3NpdGlvblZhbHVlKCpyb3dTdGFydFZhbHVlKTsKLQotICAgIGlmICghY29sdW1uRW5kVmFs
dWUpCi0gICAgICAgIGNvbHVtbkVuZFZhbHVlID0gZ3JpZE1pc3NpbmdHcmlkUG9zaXRpb25WYWx1
ZSgqY29sdW1uU3RhcnRWYWx1ZSk7Ci0KLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUdyaWRS
b3dTdGFydCwgcm93U3RhcnRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBpbXBvcnRhbnQpOwotICAg
IGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZENvbHVtblN0YXJ0LCBjb2x1bW5TdGFydFZhbHVl
LnJlbGVhc2VOb25OdWxsKCksIGltcG9ydGFudCk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVy
dHlHcmlkUm93RW5kLCByb3dFbmRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBpbXBvcnRhbnQpOwot
ICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5R3JpZENvbHVtbkVuZCwgY29sdW1uRW5kVmFsdWUu
cmVsZWFzZU5vbk51bGwoKSwgaW1wb3J0YW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBDU1NQYXJzZXI6OnBhcnNlU2luZ2xlR3JpZEFyZWFMb25naGFuZChSZWZQdHI8Q1NTVmFsdWU+
JiBwcm9wZXJ0eSkKLXsKLSAgICBBU1NFUlQoaXNDU1NHcmlkTGF5b3V0RW5hYmxlZCgpKTsKLQot
ICAgIGlmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBpZiAoIWlzRm9yd2FyZFNsYXNoT3BlcmF0b3IoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1fdmFsdWVMaXN0LT5uZXh0KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHByb3BlcnR5ID0gcGFyc2VHcmlkUG9zaXRp
b24oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3JpZExp
bmVOYW1lcyhDU1NQYXJzZXJWYWx1ZUxpc3QmIGlucHV0TGlzdCwgQ1NTVmFsdWVMaXN0JiB2YWx1
ZUxpc3QsIENTU0dyaWRMaW5lTmFtZXNWYWx1ZSogcHJldmlvdXNOYW1lZEFyZWFUcmFpbGluZ0xp
bmVOYW1lcykKLXsKLSAgICBBU1NFUlQoaXNDU1NHcmlkTGF5b3V0RW5hYmxlZCgpKTsKLSAgICBB
U1NFUlQoaW5wdXRMaXN0LmN1cnJlbnQoKSAmJiBpbnB1dExpc3QuY3VycmVudCgpLT51bml0ID09
IENTU1BhcnNlclZhbHVlOjpWYWx1ZUxpc3QpOwotCi0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0JiBp
ZGVudExpc3QgPSAqaW5wdXRMaXN0LmN1cnJlbnQoKS0+dmFsdWVMaXN0OwotICAgIGlmICghaWRl
bnRMaXN0LnNpemUoKSkgewotICAgICAgICBpbnB1dExpc3QubmV4dCgpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gTmVlZCB0byBlbnN1cmUgdGhlIGlkZW50TGlzdCBp
cyBhdCB0aGUgaGVhZGluZyBpbmRleCwgc2luY2UgdGhlIHBhcnNlckxpc3QgbWlnaHQgaGF2ZSBi
ZWVuIHJld291bmQuCi0gICAgaWRlbnRMaXN0LnNldEN1cnJlbnRJbmRleCgwKTsKLSAgICBSZWY8
Q1NTR3JpZExpbmVOYW1lc1ZhbHVlPiBsaW5lTmFtZXMgPSBwcmV2aW91c05hbWVkQXJlYVRyYWls
aW5nTGluZU5hbWVzID8gUmVmPENTU0dyaWRMaW5lTmFtZXNWYWx1ZT4oKnByZXZpb3VzTmFtZWRB
cmVhVHJhaWxpbmdMaW5lTmFtZXMpIDogQ1NTR3JpZExpbmVOYW1lc1ZhbHVlOjpjcmVhdGUoKTsK
LSAgICB3aGlsZSAoQ1NTUGFyc2VyVmFsdWUqIGlkZW50VmFsdWUgPSBpZGVudExpc3QuY3VycmVu
dCgpKSB7Ci0gICAgICAgIEFTU0VSVChpZGVudFZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfSURFTlQpOwotICAgICAgICBsaW5lTmFtZXMtPmFwcGVuZChjcmVhdGVQcmltaXRp
dmVTdHJpbmdWYWx1ZSgqaWRlbnRWYWx1ZSkpOwotICAgICAgICBpZGVudExpc3QubmV4dCgpOwot
ICAgIH0KLSAgICBpZiAoIXByZXZpb3VzTmFtZWRBcmVhVHJhaWxpbmdMaW5lTmFtZXMpCi0gICAg
ICAgIHZhbHVlTGlzdC5hcHBlbmQoV1RGTW92ZShsaW5lTmFtZXMpKTsKLQotICAgIGlucHV0TGlz
dC5uZXh0KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGlzR3JpZFRyYWNr
Rml4ZWRTaXplZChjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUpCi17Ci0gICAgQ1NTVmFs
dWVJRCB2YWx1ZUlEID0gdmFsdWUuZ2V0VmFsdWVJRCgpOwotICAgIGlmICh2YWx1ZUlEID09IENT
U1ZhbHVlV2Via2l0TWluQ29udGVudCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlV2Via2l0TWF4Q29u
dGVudCB8fCB2YWx1ZUlEID09IENTU1ZhbHVlQXV0byB8fCB2YWx1ZS5pc0ZsZXgoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKHZhbHVlLmlzTGVuZ3RoKCkgfHwgdmFsdWUu
aXNQZXJjZW50YWdlKCkgfHwgdmFsdWUuaXNDYWxjdWxhdGVkKCkpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1zdGF0aWMgYm9vbCBpc0dyaWRUcmFja0ZpeGVkU2l6ZWQoY29uc3QgQ1NTVmFsdWUm
IHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJl
dHVybiBpc0dyaWRUcmFja0ZpeGVkU2l6ZWQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZh
bHVlKSk7Ci0KLSAgICBBU1NFUlQodmFsdWUuaXNGdW5jdGlvblZhbHVlKCkpOwotICAgIEFTU0VS
VChkb3duY2FzdDxDU1NGdW5jdGlvblZhbHVlPih2YWx1ZSkuYXJndW1lbnRzKCkpOwotICAgIEFT
U0VSVChkb3duY2FzdDxDU1NGdW5jdGlvblZhbHVlPih2YWx1ZSkuYXJndW1lbnRzKCktPmxlbmd0
aCgpID09IDIpOwotCi0gICAgYXV0byYgbWluID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCpkb3duY2FzdDxDU1NGdW5jdGlvblZhbHVlPih2YWx1ZSkuYXJndW1lbnRzKCktPml0ZW0oMCkp
OwotICAgIGF1dG8mIG1heCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZG93bmNhc3Q8
Q1NTRnVuY3Rpb25WYWx1ZT4odmFsdWUpLmFyZ3VtZW50cygpLT5pdGVtKDEpKTsKLSAgICByZXR1
cm4gaXNHcmlkVHJhY2tGaXhlZFNpemVkKG1pbikgfHwgaXNHcmlkVHJhY2tGaXhlZFNpemVkKG1h
eCk7Ci19Ci0KLVJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUdyaWRUcmFja0xpc3Qo
VHJhY2tMaXN0VHlwZSB0cmFja0xpc3RUeXBlKQotewotICAgIEFTU0VSVChpc0NTU0dyaWRMYXlv
dXRFbmFibGVkKCkpOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKTsKLSAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlTm9uZSkgewotICAgICAg
ICBpZiAodHJhY2tMaXN0VHlwZSA9PSBHcmlkQXV0bykKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1cm4gQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsK
LSAgICB9Ci0KLSAgICBhdXRvIHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBh
cmF0ZWQoKTsKLSAgICAvLyBIYW5kbGUgbGVhZGluZyAgPGN1c3RvbS1pZGVudD4qLgotICAgIHZh
bHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBib29sIGFsbG93R3JpZExpbmVOYW1l
cyA9IHRyYWNrTGlzdFR5cGUgIT0gR3JpZEF1dG87Ci0gICAgaWYgKHZhbHVlICYmIHZhbHVlLT51
bml0ID09IENTU1BhcnNlclZhbHVlOjpWYWx1ZUxpc3QpIHsKLSAgICAgICAgaWYgKCFhbGxvd0dy
aWRMaW5lTmFtZXMpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcGFyc2VH
cmlkTGluZU5hbWVzKCptX3ZhbHVlTGlzdCwgdmFsdWVzKTsKLSAgICB9Ci0KLSAgICBib29sIHNl
ZW5UcmFja1NpemVPclJlcGVhdEZ1bmN0aW9uID0gZmFsc2U7Ci0gICAgYm9vbCBzZWVuQXV0b1Jl
cGVhdCA9IGZhbHNlOwotICAgIGJvb2wgYWxsVHJhY2tzQXJlRml4ZWRTaXplZCA9IHRydWU7Ci0g
ICAgYm9vbCByZXBlYXRBbGxvd2VkID0gdHJhY2tMaXN0VHlwZSA9PSBHcmlkVGVtcGxhdGU7Ci0g
ICAgd2hpbGUgKENTU1BhcnNlclZhbHVlKiBjdXJyZW50VmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpKSB7Ci0gICAgICAgIGlmIChpc0ZvcndhcmRTbGFzaE9wZXJhdG9yKCpjdXJyZW50VmFs
dWUpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChjdXJyZW50VmFsdWUtPnVuaXQg
PT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uICYmIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKGN1cnJlbnRWYWx1ZS0+ZnVuY3Rpb24tPm5hbWUsICJyZXBlYXQoIikpIHsKLSAgICAgICAg
ICAgIGlmICghcmVwZWF0QWxsb3dlZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgICAgIGJvb2wgaXNBdXRvUmVwZWF0OwotICAgICAgICAgICAgaWYgKCFwYXJzZUdy
aWRUcmFja1JlcGVhdEZ1bmN0aW9uKHZhbHVlcywgaXNBdXRvUmVwZWF0LCBhbGxUcmFja3NBcmVG
aXhlZFNpemVkKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAg
IGlmIChpc0F1dG9SZXBlYXQgJiYgc2VlbkF1dG9SZXBlYXQpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBzZWVuQXV0b1JlcGVhdCA9IHNlZW5BdXRvUmVwZWF0
IHx8IGlzQXV0b1JlcGVhdDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFJlZlB0cjxD
U1NWYWx1ZT4gdmFsdWUgPSBwYXJzZUdyaWRUcmFja1NpemUoKm1fdmFsdWVMaXN0KTsKLSAgICAg
ICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICAgICAgICAgIGFsbFRyYWNrc0FyZUZpeGVkU2l6ZWQgPSBhbGxUcmFja3NBcmVGaXhlZFNpemVk
ICYmIGlzR3JpZFRyYWNrRml4ZWRTaXplZCgqdmFsdWUpOwotICAgICAgICAgICAgdmFsdWVzLT5h
cHBlbmQodmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgc2VlblRy
YWNrU2l6ZU9yUmVwZWF0RnVuY3Rpb24gPSB0cnVlOwotCi0gICAgICAgIGlmIChzZWVuQXV0b1Jl
cGVhdCAmJiAhYWxsVHJhY2tzQXJlRml4ZWRTaXplZCkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgICAgIC8vIFRoaXMgd2lsbCBoYW5kbGUgdGhlIHRyYWlsaW5nIDxjdXN0b20t
aWRlbnQ+KiBpbiB0aGUgZ3JhbW1hci4KLSAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpOwotICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFs
dWU6OlZhbHVlTGlzdCkgewotICAgICAgICAgICAgaWYgKCFhbGxvd0dyaWRMaW5lTmFtZXMpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBwYXJzZUdyaWRMaW5l
TmFtZXMoKm1fdmFsdWVMaXN0LCB2YWx1ZXMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KCFzZWVuVHJhY2tTaXplT3JSZXBlYXRGdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICByZXR1cm4gV1RGTW92ZSh2YWx1ZXMpOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFy
c2VHcmlkVHJhY2tSZXBlYXRGdW5jdGlvbihDU1NWYWx1ZUxpc3QmIGxpc3QsIGJvb2wmIGlzQXV0
b1JlcGVhdCwgYm9vbCYgYWxsVHJhY2tzQXJlRml4ZWRTaXplZCkKLXsKLSAgICBBU1NFUlQoaXND
U1NHcmlkTGF5b3V0RW5hYmxlZCgpKTsKLQotICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJndW1l
bnRzID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0gICAg
aWYgKCFhcmd1bWVudHMgfHwgYXJndW1lbnRzLT5zaXplKCkgPCAzIHx8ICFpc0NvbW1hKGFyZ3Vt
ZW50cy0+dmFsdWVBdCgxKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZhbHVlV2l0
aENhbGN1bGF0aW9uIGZpcnN0VmFsdWVXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50cy0+dmFsdWVB
dCgwKSk7Ci0gICAgQ1NTVmFsdWVJRCBmaXJzdFZhbHVlSUQgPSBmaXJzdFZhbHVlV2l0aENhbGN1
bGF0aW9uLnZhbHVlKCkuaWQ7Ci0gICAgaXNBdXRvUmVwZWF0ID0gZmlyc3RWYWx1ZUlEID09IENT
U1ZhbHVlQXV0b0ZpbGwgfHwgZmlyc3RWYWx1ZUlEID09IENTU1ZhbHVlQXV0b0ZpdDsKLSAgICBp
ZiAoIWlzQXV0b1JlcGVhdCAmJiAhdmFsaWRhdGVVbml0KGZpcnN0VmFsdWVXaXRoQ2FsY3VsYXRp
b24sIEZQb3NpdGl2ZUludGVnZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBJ
ZiBhcmd1bWVudHMtPnZhbHVlQXQoMCktPmZWYWx1ZSA+IFNJWkVfTUFYIHRoZW4gcmVwZXRpdGlv
bnMgYmVjb21lcyAwIGR1cmluZyB0aGUgdHlwZSBjYXN0aW5nLCB0aGF0J3Mgd2h5IHdlCi0gICAg
Ly8gY2xhbXAgaXQgZG93biB0byBrR3JpZE1heFRyYWNrcyBiZWZvcmUgdGhlIHR5cGUgY2FzdGlu
Zy4KLSAgICAvLyBUaGUgbnVtYmVyIG9mIHJlcGV0aXRpb25zIGZvciA8YXV0by1yZXBlYXQ+IGlz
IG5vdCBpbXBvcnRhbnQgYXQgcGFyc2luZyBsZXZlbAotICAgIC8vIGJlY2F1c2UgaXQgd2lsbCBi
ZSBjb21wdXRlZCBsYXRlciwgbGV0J3Mgc2V0IGl0IHRvIDEuCi0gICAgdW5zaWduZWQgcmVwZXRp
dGlvbnMgPSBpc0F1dG9SZXBlYXQgPyAxIDogY2xhbXBUbzx1bnNpZ25lZD4ocGFyc2VkRG91Ymxl
KGZpcnN0VmFsdWVXaXRoQ2FsY3VsYXRpb24pLCAwLCBrR3JpZE1heFRyYWNrcyk7Ci0KLSAgICBS
ZWY8Q1NTVmFsdWVMaXN0PiByZXBlYXRlZFZhbHVlcyA9IGlzQXV0b1JlcGVhdCA/IFJlZjxDU1NW
YWx1ZUxpc3Q+KENTU0dyaWRBdXRvUmVwZWF0VmFsdWU6OmNyZWF0ZShmaXJzdFZhbHVlSUQpKSA6
IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAgICBhcmd1bWVudHMtPm5l
eHQoKTsgLy8gU2tpcCB0aGUgcmVwZXRpdGlvbiBjb3VudC4KLSAgICBhcmd1bWVudHMtPm5leHQo
KTsgLy8gU2tpcCB0aGUgY29tbWEuCi0KLSAgICAvLyBIYW5kbGUgbGVhZGluZyA8Y3VzdG9tLWlk
ZW50PiouCi0gICAgQ1NTUGFyc2VyVmFsdWUqIGN1cnJlbnRWYWx1ZSA9IGFyZ3VtZW50cy0+Y3Vy
cmVudCgpOwotICAgIGlmIChjdXJyZW50VmFsdWUgJiYgY3VycmVudFZhbHVlLT51bml0ID09IENT
U1BhcnNlclZhbHVlOjpWYWx1ZUxpc3QpCi0gICAgICAgIHBhcnNlR3JpZExpbmVOYW1lcygqYXJn
dW1lbnRzLCByZXBlYXRlZFZhbHVlcyk7Ci0KLSAgICB1bnNpZ25lZCBudW1iZXJPZlRyYWNrcyA9
IDA7Ci0gICAgd2hpbGUgKGFyZ3VtZW50cy0+Y3VycmVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxD
U1NWYWx1ZT4gdHJhY2tTaXplID0gcGFyc2VHcmlkVHJhY2tTaXplKCphcmd1bWVudHMpOwotICAg
ICAgICBpZiAoIXRyYWNrU2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBhbGxUcmFja3NBcmVGaXhlZFNpemVkID0gYWxsVHJhY2tzQXJlRml4ZWRTaXplZCAmJiBpc0dy
aWRUcmFja0ZpeGVkU2l6ZWQoKnRyYWNrU2l6ZSk7Ci0gICAgICAgIHJlcGVhdGVkVmFsdWVzLT5h
cHBlbmQodHJhY2tTaXplLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICArK251bWJlck9mVHJh
Y2tzOwotCi0gICAgICAgIC8vIFRoaXMgdGFrZXMgY2FyZSBvZiBhbnkgdHJhaWxpbmcgPGN1c3Rv
bS1pZGVudD4qIGluIHRoZSBncmFtbWFyLgotICAgICAgICBjdXJyZW50VmFsdWUgPSBhcmd1bWVu
dHMtPmN1cnJlbnQoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAmJiBjdXJyZW50VmFsdWUt
PnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OlZhbHVlTGlzdCkKLSAgICAgICAgICAgIHBhcnNlR3Jp
ZExpbmVOYW1lcygqYXJndW1lbnRzLCByZXBlYXRlZFZhbHVlcyk7Ci0gICAgfQotCi0gICAgLy8g
V2Ugc2hvdWxkIGhhdmUgZm91bmQgYXQgbGVhc3Qgb25lIDx0cmFjay1zaXplPiwgb3RoZXJ3aXNl
IHRoZSBkZWNsYXJhdGlvbiBpcyBpbnZhbGlkLgotICAgIGlmICghbnVtYmVyT2ZUcmFja3MpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFdlIGNsYW1wIHRoZSBudW1iZXIgb2YgcmVw
ZXRpdGlvbnMgdG8gYSBtdWx0aXBsZSBvZiB0aGUgcmVwZWF0KCkgdHJhY2sgbGlzdCdzIHNpemUs
IHdoaWxlIHN0YXlpbmcgYmVsb3cgdGhlIG1heAotICAgIC8vIGdyaWQgc2l6ZS4KLSAgICByZXBl
dGl0aW9ucyA9IHN0ZDo6bWluKHJlcGV0aXRpb25zLCBrR3JpZE1heFRyYWNrcyAvIG51bWJlck9m
VHJhY2tzKTsKLQotICAgIGlmIChpc0F1dG9SZXBlYXQpCi0gICAgICAgIGxpc3QuYXBwZW5kKFdU
Rk1vdmUocmVwZWF0ZWRWYWx1ZXMpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlcGV0aXRpb25zOyArK2kpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaiA9IDA7IGogPCByZXBlYXRlZFZhbHVlcy0+bGVuZ3RoKCk7ICsraikKLSAgICAgICAgICAg
ICAgICBsaXN0LmFwcGVuZCgqcmVwZWF0ZWRWYWx1ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
aikpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlR3JpZFRy
YWNrU2l6ZShDU1NQYXJzZXJWYWx1ZUxpc3QmIGlucHV0TGlzdCkKLXsKLSAgICBBU1NFUlQoaXND
U1NHcmlkTGF5b3V0RW5hYmxlZCgpKTsKLQotICAgIENTU1BhcnNlclZhbHVlJiBjdXJyZW50VmFs
dWUgPSAqaW5wdXRMaXN0LmN1cnJlbnQoKTsKLSAgICBpbnB1dExpc3QubmV4dCgpOwotCi0gICAg
aWYgKGN1cnJlbnRWYWx1ZS5pZCA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgIHJldHVybiBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8p
OwotCi0gICAgaWYgKGN1cnJlbnRWYWx1ZS51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlv
biAmJiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjdXJyZW50VmFsdWUuZnVuY3Rpb24t
Pm5hbWUsICJtaW5tYXgoIikpIHsKLSAgICAgICAgLy8gVGhlIHNwZWMgZGVmaW5lcyB0aGUgZm9s
bG93aW5nIGdyYW1tYXI6IG1pbm1heCggPHRyYWNrLWJyZWFkdGg+ICwgPHRyYWNrLWJyZWFkdGg+
ICkKLSAgICAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmd1bWVudHMgPSBjdXJyZW50VmFsdWUu
ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0gICAgICAgIGlmICghYXJndW1lbnRzIHx8IGFyZ3VtZW50
cy0+c2l6ZSgpICE9IDMgfHwgIWlzQ29tbWEoYXJndW1lbnRzLT52YWx1ZUF0KDEpKSkKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gbWluVHJhY2tCcmVhZHRoID0gcGFyc2VHcmlkQnJlYWR0aCgqYXJndW1lbnRzLT52YWx1ZUF0
KDApKTsKLSAgICAgICAgaWYgKCFtaW5UcmFja0JyZWFkdGggfHwgbWluVHJhY2tCcmVhZHRoLT5p
c0ZsZXgoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gbWF4VHJhY2tCcmVhZHRoID0gcGFyc2VHcmlkQnJlYWR0aCgqYXJn
dW1lbnRzLT52YWx1ZUF0KDIpKTsKLSAgICAgICAgaWYgKCFtYXhUcmFja0JyZWFkdGgpCi0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBhdXRvIHBhcnNlZEFyZ3VtZW50cyA9
IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKLSAgICAgICAgcGFyc2VkQXJn
dW1lbnRzLT5hcHBlbmQobWluVHJhY2tCcmVhZHRoLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAg
ICBwYXJzZWRBcmd1bWVudHMtPmFwcGVuZChtYXhUcmFja0JyZWFkdGgucmVsZWFzZU5vbk51bGwo
KSk7Ci0gICAgICAgIHJldHVybiBDU1NGdW5jdGlvblZhbHVlOjpjcmVhdGUoIm1pbm1heCgiLCBX
VEZNb3ZlKHBhcnNlZEFyZ3VtZW50cykpOwotICAgIH0KLQotICAgIHJldHVybiBwYXJzZUdyaWRC
cmVhZHRoKGN1cnJlbnRWYWx1ZSk7Ci19Ci0KLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NT
UGFyc2VyOjpwYXJzZUdyaWRCcmVhZHRoKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKLXsKLSAgICBB
U1NFUlQoaXNDU1NHcmlkTGF5b3V0RW5hYmxlZCgpKTsKLQotICAgIGlmICh2YWx1ZS5pZCA9PSBD
U1NWYWx1ZVdlYmtpdE1pbkNvbnRlbnQgfHwgdmFsdWUuaWQgPT0gQ1NTVmFsdWVXZWJraXRNYXhD
b250ZW50IHx8IHZhbHVlLmlkID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgcmV0dXJuIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsKLQot
ICAgIGlmICh2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRlIpIHsKLSAgICAg
ICAgZG91YmxlIGZsZXhWYWx1ZSA9IHZhbHVlLmZWYWx1ZTsKLQotICAgICAgICAvLyBGcmFjdGlv
bmFsIHVuaXQgaXMgYSBub24tbmVnYXRpdmUgZGltZW5zaW9uLgotICAgICAgICBpZiAoZmxleFZh
bHVlIDw9IDApCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICByZXR1cm4g
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShmbGV4VmFsdWUsIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfRlIpOwotICAgIH0KLQotICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZh
bHVlV2l0aENhbGN1bGF0aW9uKHZhbHVlKTsKLSAgICBpZiAoIXZhbGlkYXRlVW5pdCh2YWx1ZVdp
dGhDYWxjdWxhdGlvbiwgRk5vbk5lZyB8IEZMZW5ndGggfCBGUGVyY2VudCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2
YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkR3Jp
ZEF1dG9GbG93SWQoQ1NTVmFsdWVJRCBpZCkKLXsKLSAgICByZXR1cm4gKGlkID09IENTU1ZhbHVl
Um93IHx8IGlkID09IENTU1ZhbHVlQ29sdW1uIHx8IGlkID09IENTU1ZhbHVlRGVuc2UpOwotfQot
Ci1SZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VHcmlkQXV0b0Zsb3coQ1NTUGFyc2Vy
VmFsdWVMaXN0JiBpbnB1dExpc3QpCi17Ci0gICAgQVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJs
ZWQoKSk7Ci0KLSAgICAvLyBbIHJvdyB8IGNvbHVtbiBdIHx8IGRlbnNlCi0gICAgQ1NTUGFyc2Vy
VmFsdWUqIHZhbHVlID0gaW5wdXRMaXN0LmN1cnJlbnQoKTsKLSAgICBpZiAoIXZhbHVlKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcGFyc2VkVmFsdWVzID0gQ1NTVmFsdWVM
aXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotCi0gICAgLy8gRmlyc3QgcGFyYW1ldGVyLgot
ICAgIENTU1ZhbHVlSUQgZmlyc3RJZCA9IHZhbHVlLT5pZDsKLSAgICBpZiAoIWlzVmFsaWRHcmlk
QXV0b0Zsb3dJZChmaXJzdElkKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBT
ZWNvbmQgcGFyYW1ldGVyLCBpZiBhbnkuCi0gICAgLy8gSWYgc2Vjb25kIHBhcmFtZXRlciBpcyBu
b3QgdmFsaWQgd2Ugc2hvdWxkIHByb2Nlc3MgYW55d2F5IHRoZSBmaXJzdCBvbmUgYXMgd2UgY2Fu
IGJlIGluc2lkZSB0aGUgImdyaWQiIHNob3J0aGFuZC4KLSAgICB2YWx1ZSA9IGlucHV0TGlzdC5u
ZXh0KCk7Ci0gICAgaWYgKCF2YWx1ZSB8fCAhaXNWYWxpZEdyaWRBdXRvRmxvd0lkKHZhbHVlLT5p
ZCkpIHsKLSAgICAgICAgaWYgKGZpcnN0SWQgPT0gQ1NTVmFsdWVEZW5zZSkKLSAgICAgICAgICAg
IHBhcnNlZFZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlUm93KSk7Ci0KLSAgICAgICAgcGFyc2VkVmFsdWVzLT5hcHBl
bmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoZmlyc3RJ
ZCkpOwotICAgICAgICByZXR1cm4gV1RGTW92ZShwYXJzZWRWYWx1ZXMpOwotICAgIH0KLQotICAg
IHN3aXRjaCAoZmlyc3RJZCkgewotICAgIGNhc2UgQ1NTVmFsdWVSb3c6Ci0gICAgY2FzZSBDU1NW
YWx1ZUNvbHVtbjoKLSAgICAgICAgcGFyc2VkVmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoZmlyc3RJZCkpOwotICAgICAgICBpZiAo
dmFsdWUtPmlkID09IENTU1ZhbHVlRGVuc2UpIHsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlcy0+
YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZh
bHVlLT5pZCkpOwotICAgICAgICAgICAgaW5wdXRMaXN0Lm5leHQoKTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlRGVuc2U6Ci0gICAgICAgIGlmICh2YWx1ZS0+
aWQgPT0gQ1NTVmFsdWVSb3cgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQ29sdW1uKSB7Ci0gICAg
ICAgICAgICBwYXJzZWRWYWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKLSAgICAgICAgICAgIGlucHV0TGlzdC5u
ZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcGFyc2VkVmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoZmlyc3RJZCkpOwotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdURk1vdmUocGFyc2VkVmFsdWVzKTsK
LX0KLSNlbmRpZiAvKiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKSAqLwotCi0jaWYgRU5BQkxFKERB
U0hCT0FSRF9TVVBQT1JUKQotCi1zdGF0aWMgY29uc3QgaW50IGRhc2hib2FyZFJlZ2lvblBhcmFt
ZXRlckNvdW50ID0gNjsKLXN0YXRpYyBjb25zdCBpbnQgZGFzaGJvYXJkUmVnaW9uU2hvcnRQYXJh
bWV0ZXJDb3VudCA9IDI7Ci0KLXN0YXRpYyBDU1NQYXJzZXJWYWx1ZSogc2tpcENvbW1hSW5EYXNo
Ym9hcmRSZWdpb24oQ1NTUGFyc2VyVmFsdWVMaXN0ICphcmdzKQotewotICAgIGlmIChhcmdzLT5z
aXplKCkgPT0gKGRhc2hib2FyZFJlZ2lvblBhcmFtZXRlckNvdW50ICogMiAtIDEpIHx8IGFyZ3Mt
PnNpemUoKSA9PSAoZGFzaGJvYXJkUmVnaW9uU2hvcnRQYXJhbWV0ZXJDb3VudCAqIDIgLSAxKSkg
ewotICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgY3VycmVudCA9ICphcmdzLT5jdXJyZW50KCk7Ci0g
ICAgICAgIGlmIChjdXJyZW50LnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIGN1
cnJlbnQuaVZhbHVlID09ICcsJykKLSAgICAgICAgICAgIHJldHVybiBhcmdzLT5uZXh0KCk7Ci0g
ICAgfQotICAgIHJldHVybiBhcmdzLT5jdXJyZW50KCk7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpw
YXJzZURhc2hib2FyZFJlZ2lvbnMoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50
KQotewotICAgIGJvb2wgdmFsaWQgPSB0cnVlOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVl
ID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLQotICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFs
dWVOb25lKSB7Ci0gICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+bmV4dCgpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCksIGltcG9ydGFudCk7
Ci0gICAgICAgIHJldHVybiB2YWxpZDsKLSAgICB9Ci0KLSAgICBhdXRvIGZpcnN0UmVnaW9uID0g
RGFzaGJvYXJkUmVnaW9uOjpjcmVhdGUoKTsKLSAgICBEYXNoYm9hcmRSZWdpb24qIHJlZ2lvbiA9
IG51bGxwdHI7Ci0KLSAgICB3aGlsZSAodmFsdWUpIHsKLSAgICAgICAgaWYgKCFyZWdpb24pIHsK
LSAgICAgICAgICAgIHJlZ2lvbiA9IGZpcnN0UmVnaW9uLnB0cigpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgYXV0byBuZXh0UmVnaW9uID0gRGFzaGJvYXJkUmVnaW9uOjpjcmVhdGUo
KTsKLSAgICAgICAgICAgIHJlZ2lvbi0+bV9uZXh0ID0gbmV4dFJlZ2lvbi5jb3B5UmVmKCk7Ci0g
ICAgICAgICAgICByZWdpb24gPSBuZXh0UmVnaW9uLnB0cigpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKHZhbHVlLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikgewotICAgICAg
ICAgICAgdmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gQ29tbWFzIGNvdW50IGFzIHZhbHVlcywgc28gYWxsb3cgKGZ1bmN0aW9uIG5hbWUg
aXMgZGFzaGJvYXJkLXJlZ2lvbiBmb3IgREFTSEJPQVJEX1NVUFBPUlQgZmVhdHVyZSk6Ci0gICAg
ICAgIC8vIGRhc2hib2FyZC1yZWdpb24obGFiZWwsIHR5cGUsIHQsIHIsIGIsIGwpIG9yIGRhc2hi
b2FyZC1yZWdpb24obGFiZWwgdHlwZSB0IHIgYiBsKQotICAgICAgICAvLyBkYXNoYm9hcmQtcmVn
aW9uKGxhYmVsLCB0eXBlLCB0LCByLCBiLCBsKSBvciBkYXNoYm9hcmQtcmVnaW9uKGxhYmVsIHR5
cGUgdCByIGIgbCkKLSAgICAgICAgLy8gYWxzbyBhbGxvdwotICAgICAgICAvLyBkYXNoYm9hcmQt
cmVnaW9uKGxhYmVsLCB0eXBlKSBvciBkYXNoYm9hcmQtcmVnaW9uKGxhYmVsIHR5cGUpCi0gICAg
ICAgIC8vIGRhc2hib2FyZC1yZWdpb24obGFiZWwsIHR5cGUpIG9yIGRhc2hib2FyZC1yZWdpb24o
bGFiZWwgdHlwZSkKLSAgICAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUtPmZ1
bmN0aW9uLT5hcmdzLmdldCgpOwotICAgICAgICBpZiAoIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSwgImRhc2hib2FyZC1yZWdpb24oIikgfHwgIWFy
Z3MpIHsKLSAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIGludCBudW1BcmdzID0gYXJncy0+c2l6ZSgpOwotICAgICAgICBp
ZiAoKG51bUFyZ3MgIT0gZGFzaGJvYXJkUmVnaW9uUGFyYW1ldGVyQ291bnQgJiYgbnVtQXJncyAh
PSAoZGFzaGJvYXJkUmVnaW9uUGFyYW1ldGVyQ291bnQqMi0xKSkKLSAgICAgICAgICAgICYmIChu
dW1BcmdzICE9IGRhc2hib2FyZFJlZ2lvblNob3J0UGFyYW1ldGVyQ291bnQgJiYgbnVtQXJncyAh
PSAoZGFzaGJvYXJkUmVnaW9uU2hvcnRQYXJhbWV0ZXJDb3VudCoyLTEpKSkgewotICAgICAgICAg
ICAgdmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gRmlyc3QgYXJnIGlzIGEgbGFiZWwuCi0gICAgICAgIENTU1BhcnNlclZhbHVlKiBhcmcg
PSBhcmdzLT5jdXJyZW50KCk7Ci0gICAgICAgIGlmIChhcmctPnVuaXQgIT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19JREVOVCkgewotICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVnaW9uLT5tX2xhYmVsID0gYXJnLT5z
dHJpbmc7Ci0KLSAgICAgICAgLy8gU2Vjb25kIGFyZyBpcyBhIHR5cGUuCi0gICAgICAgIGFyZyA9
IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgYXJnID0gc2tpcENvbW1hSW5EYXNoYm9hcmRSZWdpb24o
YXJncyk7Ci0gICAgICAgIGlmIChhcmctPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19J
REVOVCkgewotICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKCph
cmcsICJjaXJjbGUiKSkKLSAgICAgICAgICAgIHJlZ2lvbi0+bV9pc0NpcmNsZSA9IHRydWU7Ci0g
ICAgICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKCphcmcsICJyZWN0
YW5nbGUiKSkKLSAgICAgICAgICAgIHJlZ2lvbi0+bV9pc1JlY3RhbmdsZSA9IHRydWU7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0KLSAgICAgICAgcmVnaW9uLT5tX2dlb21ldHJ5VHlwZSA9IGFyZy0+c3Ry
aW5nOwotCi0gICAgICAgIGlmIChudW1BcmdzID09IGRhc2hib2FyZFJlZ2lvblNob3J0UGFyYW1l
dGVyQ291bnQgfHwgbnVtQXJncyA9PSAoZGFzaGJvYXJkUmVnaW9uU2hvcnRQYXJhbWV0ZXJDb3Vu
dCoyLTEpKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIG9yaWdpbmFsbHkgdXNlZCBDU1NWYWx1ZUlu
dmFsaWQgYnkgYWNjaWRlbnQuIEl0IG1pZ2h0IGJlIG1vcmUgbG9naWNhbCB0byB1c2Ugc29tZXRo
aW5nIGVsc2UuCi0gICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGFtb3VudCA9
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
SW52YWxpZCk7Ci0KLSAgICAgICAgICAgIHJlZ2lvbi0+c2V0VG9wKGFtb3VudC5jb3B5UmVmKCkp
OwotICAgICAgICAgICAgcmVnaW9uLT5zZXRSaWdodChhbW91bnQuY29weVJlZigpKTsKLSAgICAg
ICAgICAgIHJlZ2lvbi0+c2V0Qm90dG9tKGFtb3VudC5jb3B5UmVmKCkpOwotICAgICAgICAgICAg
cmVnaW9uLT5zZXRMZWZ0KFdURk1vdmUoYW1vdW50KSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBOZXh0IGZvdXIgYXJndW1lbnRzIG11c3QgYmUgb2Zmc2V0IG51bWJlcnMKLSAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
YXJnID0gYXJncy0+bmV4dCgpOwotICAgICAgICAgICAgICAgIGFyZyA9IHNraXBDb21tYUluRGFz
aGJvYXJkUmVnaW9uKGFyZ3MpOwotCi0gICAgICAgICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRp
b24gYXJnV2l0aENhbGN1bGF0aW9uKCphcmcpOwotICAgICAgICAgICAgICAgIHZhbGlkID0gYXJn
LT5pZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRhdGVVbml0KGFyZ1dpdGhDYWxjdWxhdGlvbiwg
Rkxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGFt
b3VudCA9IGFyZy0+aWQgPT0gQ1NTVmFsdWVBdXRvID8gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSA6IGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZShhcmdXaXRoQ2FsY3VsYXRpb24pOwotCi0gICAgICAgICAgICAgICAgaWYgKGkg
PT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmVnaW9uLT5zZXRUb3AoV1RGTW92ZShhbW91bnQp
KTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChpID09IDEpCi0gICAgICAgICAgICAgICAgICAg
IHJlZ2lvbi0+c2V0UmlnaHQoV1RGTW92ZShhbW91bnQpKTsKLSAgICAgICAgICAgICAgICBlbHNl
IGlmIChpID09IDIpCi0gICAgICAgICAgICAgICAgICAgIHJlZ2lvbi0+c2V0Qm90dG9tKFdURk1v
dmUoYW1vdW50KSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBy
ZWdpb24tPnNldExlZnQoV1RGTW92ZShhbW91bnQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChhcmdzLT5uZXh0KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIH0KLQotICAgIGlm
ICh2YWxpZCkKLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZVZhbHVlKFJlZlB0cjxEYXNoYm9hcmRSZWdpb24+KFdURk1vdmUoZmlyc3RS
ZWdpb24pKSksIGltcG9ydGFudCk7Ci0KLSAgICByZXR1cm4gdmFsaWQ7Ci19Ci0KLSNlbmRpZiAv
KiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpICovCi0KLSNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZ
T1VUKQotc3RhdGljIFZlY3RvcjxTdHJpbmc+IHBhcnNlR3JpZFRlbXBsYXRlQXJlYXNDb2x1bW5O
YW1lcyhjb25zdCBTdHJpbmcmIGdyaWRSb3dOYW1lcykKLXsKLSAgICBBU1NFUlQoIWdyaWRSb3dO
YW1lcy5pc0VtcHR5KCkpOwotICAgIFZlY3RvcjxTdHJpbmc+IGNvbHVtbk5hbWVzOwotICAgIC8v
IFVzaW5nIFN0cmluZ0ltcGwgdG8gYXZvaWQgY2hlY2tzIGFuZCBpbmRpcmVjdGlvbiBpbiBldmVy
eSBjYWxsIHRvIFN0cmluZzo6b3BlcmF0b3JbXS4KLSAgICBTdHJpbmdJbXBsJiB0ZXh0ID0gKmdy
aWRSb3dOYW1lcy5pbXBsKCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsK
LSAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Ci0g
ICAgICAgIGlmICh0ZXh0W2luZGV4XSAhPSAnICcgJiYgdGV4dFtpbmRleF0gIT0gJy4nKSB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBncmlkQXJlYVN0YXJ0ID0gaW5kZXg7Ci0gICAgICAgICAgICB3
aGlsZSAoaW5kZXggPCBsZW5ndGggJiYgdGV4dFtpbmRleF0gIT0gJyAnICYmIHRleHRbaW5kZXhd
ICE9ICcuJykKLSAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgY29sdW1uTmFt
ZXMuYXBwZW5kKHRleHQuc3Vic3RyaW5nKGdyaWRBcmVhU3RhcnQsIGluZGV4IC0gZ3JpZEFyZWFT
dGFydCkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
dGV4dFtpbmRleF0gPT0gJy4nKSB7Ci0gICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgg
JiYgdGV4dFtpbmRleF0gPT0gJy4nKQotICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAg
ICAgICBjb2x1bW5OYW1lcy5hcHBlbmQoIi4iKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgKytpbmRleDsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29sdW1uTmFt
ZXM7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyaWRUZW1wbGF0ZUFyZWFzUm93KE5hbWVk
R3JpZEFyZWFNYXAmIGdyaWRBcmVhTWFwLCBjb25zdCB1bnNpZ25lZCByb3dDb3VudCwgdW5zaWdu
ZWQmIGNvbHVtbkNvdW50KQotewotICAgIEFTU0VSVChpc0NTU0dyaWRMYXlvdXRFbmFibGVkKCkp
OwotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIGN1cnJlbnRWYWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJy
ZW50KCk7Ci0gICAgaWYgKCFjdXJyZW50VmFsdWUgfHwgY3VycmVudFZhbHVlLT51bml0ICE9IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBTdHJpbmcgZ3JpZFJvd05hbWVzID0gY3VycmVudFZhbHVlLT5zdHJpbmc7Ci0gICAgaWYgKGdy
aWRSb3dOYW1lcy5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IGNvbHVtbk5hbWVzID0gcGFyc2VHcmlkVGVtcGxhdGVB
cmVhc0NvbHVtbk5hbWVzKGdyaWRSb3dOYW1lcyk7Ci0gICAgaWYgKCFjb2x1bW5Db3VudCkgewot
ICAgICAgICBjb2x1bW5Db3VudCA9IGNvbHVtbk5hbWVzLnNpemUoKTsKLSAgICAgICAgQVNTRVJU
KGNvbHVtbkNvdW50KTsKLSAgICB9IGVsc2UgaWYgKGNvbHVtbkNvdW50ICE9IGNvbHVtbk5hbWVz
LnNpemUoKSkgewotICAgICAgICAvLyBUaGUgZGVjbGFyYXRpb24gaXMgaW52YWxpZCBpcyBhbGwg
dGhlIHJvd3MgZG9uJ3QgaGF2ZSB0aGUgbnVtYmVyIG9mIGNvbHVtbnMuCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGN1cnJlbnRDb2x1bW4gPSAwOyBj
dXJyZW50Q29sdW1uIDwgY29sdW1uQ291bnQ7ICsrY3VycmVudENvbHVtbikgewotICAgICAgICBj
b25zdCBTdHJpbmcmIGdyaWRBcmVhTmFtZSA9IGNvbHVtbk5hbWVzW2N1cnJlbnRDb2x1bW5dOwot
Ci0gICAgICAgIC8vIFVuYW1lZCBhcmVhcyBhcmUgYWx3YXlzIHZhbGlkICh3ZSBjb25zaWRlciB0
aGVtIHRvIGJlIDF4MSkuCi0gICAgICAgIGlmIChncmlkQXJlYU5hbWUgPT0gIi4iKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gV2UgaGFuZGxlIHNldmVyYWwgZ3JpZCBhcmVh
cyB3aXRoIHRoZSBzYW1lIG5hbWUgYXQgb25jZSB0byBzaW1wbGlmeSB0aGUgdmFsaWRhdGlvbiBj
b2RlLgotICAgICAgICB1bnNpZ25lZCBsb29rQWhlYWRDb2x1bW47Ci0gICAgICAgIGZvciAobG9v
a0FoZWFkQ29sdW1uID0gY3VycmVudENvbHVtbiArIDE7IGxvb2tBaGVhZENvbHVtbiA8IGNvbHVt
bkNvdW50OyArK2xvb2tBaGVhZENvbHVtbikgewotICAgICAgICAgICAgaWYgKGNvbHVtbk5hbWVz
W2xvb2tBaGVhZENvbHVtbl0gIT0gZ3JpZEFyZWFOYW1lKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byBncmlkQXJlYUl0ZXJhdG9yID0gZ3JpZEFyZWFN
YXAuZmluZChncmlkQXJlYU5hbWUpOwotICAgICAgICBpZiAoZ3JpZEFyZWFJdGVyYXRvciA9PSBn
cmlkQXJlYU1hcC5lbmQoKSkKLSAgICAgICAgICAgIGdyaWRBcmVhTWFwLmFkZChncmlkQXJlYU5h
bWUsIEdyaWRBcmVhKEdyaWRTcGFuOjp0cmFuc2xhdGVkRGVmaW5pdGVHcmlkU3Bhbihyb3dDb3Vu
dCwgcm93Q291bnQgKyAxKSwgR3JpZFNwYW46OnRyYW5zbGF0ZWREZWZpbml0ZUdyaWRTcGFuKGN1
cnJlbnRDb2x1bW4sIGxvb2tBaGVhZENvbHVtbikpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBHcmlkQXJlYSYgZ3JpZEFyZWEgPSBncmlkQXJlYUl0ZXJhdG9yLT52YWx1ZTsKLQotICAg
ICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjaGVja3MgdGVzdCB0aGF0IHRoZSBncmlkIGFyZWEg
aXMgYSBzaW5nbGUgZmlsbGVkLWluIHJlY3RhbmdsZS4KLSAgICAgICAgICAgIC8vIDEuIFRoZSBu
ZXcgcm93IGlzIGFkamFjZW50IHRvIHRoZSBwcmV2aW91c2x5IHBhcnNlZCByb3cuCi0gICAgICAg
ICAgICBpZiAocm93Q291bnQgIT0gZ3JpZEFyZWEucm93cy5lbmRMaW5lKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAvLyAyLiBUaGUgbmV3IGFyZWEgc3Rh
cnRzIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGFzIHRoZSBwcmV2aW91c2x5IHBhcnNlZCBhcmVhLgot
ICAgICAgICAgICAgaWYgKGN1cnJlbnRDb2x1bW4gIT0gZ3JpZEFyZWEuY29sdW1ucy5zdGFydExp
bmUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIC8vIDMu
IFRoZSBuZXcgYXJlYSBlbmRzIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGFzIHRoZSBwcmV2aW91c2x5
IHBhcnNlZCBhcmVhLgotICAgICAgICAgICAgaWYgKGxvb2tBaGVhZENvbHVtbiAhPSBncmlkQXJl
YS5jb2x1bW5zLmVuZExpbmUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgICAgIGdyaWRBcmVhLnJvd3MgPSBHcmlkU3Bhbjo6dHJhbnNsYXRlZERlZmluaXRlR3Jp
ZFNwYW4oZ3JpZEFyZWEucm93cy5zdGFydExpbmUoKSwgZ3JpZEFyZWEucm93cy5lbmRMaW5lKCkg
KyAxKTsKLSAgICAgICAgfQotICAgICAgICBjdXJyZW50Q29sdW1uID0gbG9va0FoZWFkQ29sdW1u
IC0gMTsKLSAgICB9Ci0KLSAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1SZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VHcmlkVGVtcGxhdGVBcmVh
cygpCi17Ci0gICAgQVNTRVJUKGlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSk7Ci0KLSAgICBpZiAo
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKSAmJiBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLT5pZCA9PSBD
U1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgcmV0
dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlTm9uZSk7Ci0gICAgfQotCi0gICAgTmFtZWRHcmlkQXJlYU1hcCBncmlkQXJlYU1hcDsKLSAg
ICB1bnNpZ25lZCByb3dDb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgY29sdW1uQ291bnQgPSAwOwot
Ci0gICAgd2hpbGUgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKLSAgICAgICAgaWYgKCFwYXJz
ZUdyaWRUZW1wbGF0ZUFyZWFzUm93KGdyaWRBcmVhTWFwLCByb3dDb3VudCwgY29sdW1uQ291bnQp
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICsrcm93Q291bnQ7Ci0gICAg
fQotCi0gICAgaWYgKCFyb3dDb3VudCB8fCAhY29sdW1uQ291bnQpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgcmV0dXJuIENTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWU6OmNyZWF0ZShn
cmlkQXJlYU1hcCwgcm93Q291bnQsIGNvbHVtbkNvdW50KTsKLX0KLSNlbmRpZiAvKiBFTkFCTEUo
Q1NTX0dSSURfTEFZT1VUKSAqLwotCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNl
cjo6cGFyc2VDb3VudGVyQ29udGVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIGFyZ3MsIGJvb2wgY291
bnRlcnMpCi17Ci0gICAgdW5zaWduZWQgbnVtQXJncyA9IGFyZ3Muc2l6ZSgpOwotICAgIGlmIChj
b3VudGVycyAmJiBudW1BcmdzICE9IDMgJiYgbnVtQXJncyAhPSA1KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICBpZiAoIWNvdW50ZXJzICYmIG51bUFyZ3MgIT0gMSAmJiBudW1BcmdzICE9
IDMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3Vt
ZW50ID0gYXJncy5jdXJyZW50KCk7Ci0gICAgaWYgKGFyZ3VtZW50LT51bml0ICE9IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfSURFTlQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8g
aWRlbnRpZmllciA9IGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKCphcmd1bWVudCk7Ci0KLSAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNlcGFyYXRvcjsKLSAgICBpZiAoIWNvdW50ZXJz
KQotICAgICAgICBzZXBhcmF0b3IgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZh
bHVlKFN0cmluZygpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIGFyZ3VtZW50ID0gYXJncy5uZXh0KCk7Ci0gICAgICAgIGlmIChhcmd1bWVudC0+
dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgfHwgYXJndW1lbnQtPmlWYWx1ZSAhPSAn
LCcpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBhcmd1bWVudCA9IGFy
Z3MubmV4dCgpOwotICAgICAgICBpZiAoYXJndW1lbnQtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19TVFJJTkcpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBz
ZXBhcmF0b3IgPSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSgqYXJndW1lbnQpOwotICAgIH0K
LQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGlzdFN0eWxlOwotICAgIGFyZ3VtZW50
ID0gYXJncy5uZXh0KCk7Ci0gICAgaWYgKCFhcmd1bWVudCkgLy8gTWFrZSB0aGUgbGlzdCBzdHls
ZSBkZWZhdWx0IGRlY2ltYWwKLSAgICAgICAgbGlzdFN0eWxlID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVEZWNpbWFsKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgaWYgKGFyZ3VtZW50LT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRv
ciB8fCBhcmd1bWVudC0+aVZhbHVlICE9ICcsJykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgICAgIGFyZ3VtZW50ID0gYXJncy5uZXh0KCk7Ci0gICAgICAgIGlmIChhcmd1bWVu
dC0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQotICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgQ1NTVmFsdWVJRCBsaXN0U3R5bGVJRCA9IENTU1ZhbHVl
SW52YWxpZDsKLSAgICAgICAgaWYgKGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZU5vbmUgfHwgKGFy
Z3VtZW50LT5pZCA+PSBDU1NWYWx1ZURpc2MgJiYgYXJndW1lbnQtPmlkIDw9IENTU1ZhbHVlS2F0
YWthbmFJcm9oYSkpCi0gICAgICAgICAgICBsaXN0U3R5bGVJRCA9IGFyZ3VtZW50LT5pZDsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgbGlzdFN0
eWxlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUobGlz
dFN0eWxlSUQpOwotICAgIH0KLQotICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZVZhbHVlKENvdW50ZXI6OmNyZWF0ZShXVEZNb3ZlKGlkZW50aWZpZXIpLCBsaXN0U3R5
bGUucmVsZWFzZU5vbk51bGwoKSwgc2VwYXJhdG9yLnJlbGVhc2VOb25OdWxsKCkpKTsKLX0KLQot
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlQ2xpcFNoYXBlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29s
IGltcG9ydGFudCkKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKTsKLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlv
bi0+YXJncy5nZXQoKTsKLQotICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
dmFsdWUuZnVuY3Rpb24tPm5hbWUsICJyZWN0KCIpIHx8ICFhcmdzKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvLyByZWN0KHQsIHIsIGIsIGwpIHx8IHJlY3QodCByIGIgbCkKLSAgICBp
ZiAoYXJncy0+c2l6ZSgpICE9IDQgJiYgYXJncy0+c2l6ZSgpICE9IDcpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBhdXRvIHJlY3QgPSBSZWN0OjpjcmVhdGUoKTsKLSAgICBib29sIHZhbGlk
ID0gdHJ1ZTsKLSAgICBpbnQgaSA9IDA7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0g
YXJncy0+Y3VycmVudCgpOwotICAgIHdoaWxlIChhcmd1bWVudCkgewotICAgICAgICBWYWx1ZVdp
dGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnQpOwotICAgICAg
ICB2YWxpZCA9IGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZUF1dG8gfHwgdmFsaWRhdGVVbml0KGFy
Z3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoKTsKLSAgICAgICAgaWYgKCF2YWxpZCkKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlbmd0aCA9
IGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZUF1dG8gPyBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pIDogY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKTsKLSAgICAgICAgaWYgKGkgPT0gMCkK
LSAgICAgICAgICAgIHJlY3QtPnNldFRvcChXVEZNb3ZlKGxlbmd0aCkpOwotICAgICAgICBlbHNl
IGlmIChpID09IDEpCi0gICAgICAgICAgICByZWN0LT5zZXRSaWdodChXVEZNb3ZlKGxlbmd0aCkp
OwotICAgICAgICBlbHNlIGlmIChpID09IDIpCi0gICAgICAgICAgICByZWN0LT5zZXRCb3R0b20o
V1RGTW92ZShsZW5ndGgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVjdC0+c2V0TGVm
dChXVEZNb3ZlKGxlbmd0aCkpOwotICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLSAg
ICAgICAgaWYgKGFyZ3VtZW50ICYmIGFyZ3MtPnNpemUoKSA9PSA3KSB7Ci0gICAgICAgICAgICBp
ZiAoYXJndW1lbnQtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIGFyZ3VtZW50
LT5pVmFsdWUgPT0gJywnKSB7Ci0gICAgICAgICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0
KCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgaSsrOwotICAgIH0KLSAgICBpZiAodmFsaWQpIHsKLSAgICAgICAgYWRkUHJvcGVydHkocHJv
cElkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKFdURk1vdmUocmVjdCkp
LCBpbXBvcnRhbnQpOwotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCBjb21w
bGV0ZUJvcmRlclJhZGlpKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmFkaWlbNF0pCi17Ci0g
ICAgaWYgKHJhZGlpWzNdKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFyYWRpaVsyXSkgewot
ICAgICAgICBpZiAoIXJhZGlpWzFdKQotICAgICAgICAgICAgcmFkaWlbMV0gPSByYWRpaVswXTsK
LSAgICAgICAgcmFkaWlbMl0gPSByYWRpaVswXTsKLSAgICB9Ci0gICAgcmFkaWlbM10gPSByYWRp
aVsxXTsKLX0KLQotLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHJlZmFjdG9yZWQgd2l0aCBDU1NQ
YXJzZXI6OnBhcnNlQm9yZGVyUmFkaXVzLgotLy8gQ1NTUGFyc2VyOjpwYXJzZUJvcmRlclJhZGl1
cyBjb250YWlucyBzdXBwb3J0IGZvciBzb21lIGxlZ2FjeSByYWRpdXMgY29uc3RydWN0aW9uLgot
UmVmUHRyPENTU0Jhc2ljU2hhcGVJbnNldD4gQ1NTUGFyc2VyOjpwYXJzZUluc2V0Um91bmRlZENv
cm5lcnMoUmVmPENTU0Jhc2ljU2hhcGVJbnNldD4mJiBzaGFwZSwgQ1NTUGFyc2VyVmFsdWVMaXN0
JiBhcmdzKQotewotICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MubmV4dCgpOwot
Ci0gICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBWZWN0
b3I8Q1NTUGFyc2VyVmFsdWUqPiByYWRpdXNBcmd1bWVudHM7Ci0gICAgd2hpbGUgKGFyZ3VtZW50
KSB7Ci0gICAgICAgIHJhZGl1c0FyZ3VtZW50cy5hcHBlbmQoYXJndW1lbnQpOwotICAgICAgICBh
cmd1bWVudCA9IGFyZ3MubmV4dCgpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIG51bSA9IHJhZGl1
c0FyZ3VtZW50cy5zaXplKCk7Ci0gICAgaWYgKCFudW0gfHwgbnVtID4gOSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJhZGlpWzJdWzRd
OwotCi0gICAgdW5zaWduZWQgaW5kZXhBZnRlclNsYXNoID0gMDsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtOyArK2kpIHsKLSAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0g
KnJhZGl1c0FyZ3VtZW50cy5hdChpKTsKLSAgICAgICAgaWYgKHZhbHVlLnVuaXQgPT0gQ1NTUGFy
c2VyVmFsdWU6Ok9wZXJhdG9yKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaVZhbHVlICE9ICcv
JykKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICAgICAgaWYgKCFp
IHx8IGluZGV4QWZ0ZXJTbGFzaCB8fCBpICsgMSA9PSBudW0gfHwgbnVtID4gaSArIDUpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgICAgIGluZGV4QWZ0ZXJTbGFz
aCA9IGkgKyAxOwotICAgICAgICAgICAgY29tcGxldGVCb3JkZXJSYWRpaShyYWRpaVswXSk7Ci0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpIC0gaW5kZXhB
ZnRlclNsYXNoID49IDQpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBW
YWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbih2YWx1ZSk7Ci0gICAgICAg
IGlmICghdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNl
bnQgfCBGTm9uTmVnKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGF1
dG8gcmFkaXVzID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0
aW9uKTsKLQotICAgICAgICBpZiAoIWluZGV4QWZ0ZXJTbGFzaCkKLSAgICAgICAgICAgIHJhZGlp
WzBdW2ldID0gV1RGTW92ZShyYWRpdXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByYWRp
aVsxXVtpIC0gaW5kZXhBZnRlclNsYXNoXSA9IFdURk1vdmUocmFkaXVzKTsKLSAgICB9Ci0KLSAg
ICBpZiAoIWluZGV4QWZ0ZXJTbGFzaCkgewotICAgICAgICBjb21wbGV0ZUJvcmRlclJhZGlpKHJh
ZGlpWzBdKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAg
ICAgICAgIHJhZGlpWzFdW2ldID0gcmFkaWlbMF1baV07Ci0gICAgfSBlbHNlCi0gICAgICAgIGNv
bXBsZXRlQm9yZGVyUmFkaWkocmFkaWlbMV0pOwotCi0gICAgc2hhcGUtPnNldFRvcExlZnRSYWRp
dXMoY3JlYXRlUHJpbWl0aXZlVmFsdWVQYWlyKFdURk1vdmUocmFkaWlbMF1bMF0pLCBXVEZNb3Zl
KHJhZGlpWzFdWzBdKSkpOwotICAgIHNoYXBlLT5zZXRUb3BSaWdodFJhZGl1cyhjcmVhdGVQcmlt
aXRpdmVWYWx1ZVBhaXIoV1RGTW92ZShyYWRpaVswXVsxXSksIFdURk1vdmUocmFkaWlbMV1bMV0p
KSk7Ci0gICAgc2hhcGUtPnNldEJvdHRvbVJpZ2h0UmFkaXVzKGNyZWF0ZVByaW1pdGl2ZVZhbHVl
UGFpcihXVEZNb3ZlKHJhZGlpWzBdWzJdKSwgV1RGTW92ZShyYWRpaVsxXVsyXSkpKTsKLSAgICBz
aGFwZS0+c2V0Qm90dG9tTGVmdFJhZGl1cyhjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIoV1RGTW92
ZShyYWRpaVswXVszXSksIFdURk1vdmUocmFkaWlbMV1bM10pKSk7Ci0KLSAgICByZXR1cm4gV1RG
TW92ZShzaGFwZSk7Ci19Ci0KLVJlZlB0cjxDU1NCYXNpY1NoYXBlSW5zZXQ+IENTU1BhcnNlcjo6
cGFyc2VCYXNpY1NoYXBlSW5zZXQoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzKQotewotICAgIGF1
dG8gc2hhcGUgPSBDU1NCYXNpY1NoYXBlSW5zZXQ6OmNyZWF0ZSgpOwotCi0gICAgQ1NTUGFyc2Vy
VmFsdWUqIGFyZ3VtZW50ID0gYXJncy5jdXJyZW50KCk7Ci0gICAgVmVjdG9yPFJlZjxDU1NQcmlt
aXRpdmVWYWx1ZT4gPiB3aWR0aEFyZ3VtZW50czsKLSAgICBib29sIGhhc1JvdW5kZWRJbnNldCA9
IGZhbHNlOwotICAgIHdoaWxlIChhcmd1bWVudCkgewotICAgICAgICBpZiAoYXJndW1lbnQtPnVu
aXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCAmJiBlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShhcmd1bWVudC0+c3RyaW5nLCAicm91bmQiKSkgewotICAgICAgICAgICAgaGFz
Um91bmRlZEluc2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgVW5pdHMgdW5pdEZsYWdzID0gRkxlbmd0aCB8IEZQZXJjZW50OwotICAgICAgICBWYWx1
ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnQpOwotICAg
ICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgdW5pdEZsYWdz
KSB8fCB3aWR0aEFyZ3VtZW50cy5zaXplKCkgPiA0KQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICAgICAgd2lkdGhBcmd1bWVudHMuYXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOwotICAgICAgICBhcmd1bWVudCA9IGFy
Z3MubmV4dCgpOwotICAgIH0KLQotICAgIHN3aXRjaCAod2lkdGhBcmd1bWVudHMuc2l6ZSgpKSB7
Ci0gICAgY2FzZSAxOiB7Ci0gICAgICAgIHNoYXBlLT51cGRhdGVTaGFwZVNpemUxVmFsdWUoV1RG
TW92ZSh3aWR0aEFyZ3VtZW50c1swXSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSAyOiB7Ci0gICAgICAgIHNoYXBlLT51cGRhdGVTaGFwZVNpemUyVmFsdWVzKFdURk1vdmUod2lk
dGhBcmd1bWVudHNbMF0pLCBXVEZNb3ZlKHdpZHRoQXJndW1lbnRzWzFdKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgY2FzZSAzOiB7Ci0gICAgICAgIHNoYXBlLT51cGRhdGVTaGFw
ZVNpemUzVmFsdWVzKFdURk1vdmUod2lkdGhBcmd1bWVudHNbMF0pLCBXVEZNb3ZlKHdpZHRoQXJn
dW1lbnRzWzFdKSwgV1RGTW92ZSh3aWR0aEFyZ3VtZW50c1syXSkpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSA0OiB7Ci0gICAgICAgIHNoYXBlLT51cGRhdGVTaGFwZVNpemU0VmFs
dWVzKFdURk1vdmUod2lkdGhBcmd1bWVudHNbMF0pLCBXVEZNb3ZlKHdpZHRoQXJndW1lbnRzWzFd
KSwgV1RGTW92ZSh3aWR0aEFyZ3VtZW50c1syXSksIFdURk1vdmUod2lkdGhBcmd1bWVudHNbM10p
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLQotICAgIGlmIChoYXNSb3VuZGVkSW5zZXQpCi0gICAgICAgIHJldHVy
biBwYXJzZUluc2V0Um91bmRlZENvcm5lcnMoV1RGTW92ZShzaGFwZSksIGFyZ3MpOwotICAgIHJl
dHVybiBXVEZNb3ZlKHNoYXBlKTsKLX0KLQotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQ
YXJzZXI6OnBhcnNlU2hhcGVSYWRpdXMoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQotewotICAgIGlm
ICh2YWx1ZS5pZCA9PSBDU1NWYWx1ZUNsb3Nlc3RTaWRlIHx8IHZhbHVlLmlkID09IENTU1ZhbHVl
RmFydGhlc3RTaWRlKQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUuaWQpOwotCi0gICAgVmFsdWVXaXRoQ2FsY3VsYXRp
b24gdmFsdWVXaXRoQ2FsY3VsYXRpb24odmFsdWUpOwotICAgIGlmICghdmFsaWRhdGVVbml0KHZh
bHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1Zh
bHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKLX0KLQotUmVmUHRyPENTU0Jhc2ljU2hhcGVDaXJj
bGU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlQ2lyY2xlKENTU1BhcnNlclZhbHVlTGlzdCYg
YXJncykKLXsKLSAgICAvLyBjaXJjbGUocmFkaXVzKQotICAgIC8vIGNpcmNsZShyYWRpdXMgYXQg
PHBvc2l0aW9uPikKLSAgICAvLyBjaXJjbGUoYXQgPHBvc2l0aW9uPikKLSAgICAvLyB3aGVyZSBw
b3NpdGlvbiBkZWZpbmVzIGNlbnRlclggYW5kIGNlbnRlclkgdXNpbmcgYSBDU1MgPHBvc2l0aW9u
PiBkYXRhIHR5cGUuCi0gICAgYXV0byBzaGFwZSA9IENTU0Jhc2ljU2hhcGVDaXJjbGU6OmNyZWF0
ZSgpOwotCi0gICAgZm9yIChDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLmN1cnJlbnQo
KTsgYXJndW1lbnQ7IGFyZ3VtZW50ID0gYXJncy5uZXh0KCkpIHsKLSAgICAgICAgLy8gVGhlIGNh
bGwgdG8gcGFyc2VGaWxsUG9zaXRpb24gYmVsb3cgc2hvdWxkIGNvbnN1bWUgYWxsIG9mIHRoZQot
ICAgICAgICAvLyBhcmd1bWVudHMgZXhjZXB0IHRoZSBmaXJzdCB0d28uIFRodXMsIGFuZCBpbmRl
eCBncmVhdGVyIHRoYW4gb25lCi0gICAgICAgIC8vIGluZGljYXRlcyBhbiBpbnZhbGlkIHByb2R1
Y3Rpb24uCi0gICAgICAgIGlmIChhcmdzLmN1cnJlbnRJbmRleCgpID4gMSkKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGlmICghYXJncy5jdXJyZW50SW5kZXgoKSAmJiBh
cmd1bWVudC0+aWQgIT0gQ1NTVmFsdWVBdCkgewotICAgICAgICAgICAgaWYgKFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gcmFkaXVzID0gcGFyc2VTaGFwZVJhZGl1cygqYXJndW1lbnQpKSB7Ci0g
ICAgICAgICAgICAgICAgc2hhcGUtPnNldFJhZGl1cyhyYWRpdXMucmVsZWFzZU5vbk51bGwoKSk7
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFyZ3VtZW50LT5pZCA9
PSBDU1NWYWx1ZUF0ICYmIGFyZ3MubmV4dCgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNlbnRlclg7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNlbnRlclk7Ci0gICAgICAgICAgICBwYXJzZUZpbGxQb3NpdGlvbihhcmdzLCBjZW50ZXJY
LCBjZW50ZXJZKTsKLSAgICAgICAgICAgIGlmIChjZW50ZXJYICYmIGNlbnRlclkgJiYgIWFyZ3Mu
Y3VycmVudCgpKSB7Ci0gICAgICAgICAgICAgICAgc2hhcGUtPnNldENlbnRlclgoY2VudGVyWC5y
ZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgICAgICBzaGFwZS0+c2V0Q2VudGVyWShjZW50
ZXJZLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdURk1vdmUoc2hhcGUpOwotfQotCi1SZWZQdHI8
Q1NTQmFzaWNTaGFwZUVsbGlwc2U+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlRWxsaXBzZShD
U1NQYXJzZXJWYWx1ZUxpc3QmIGFyZ3MpCi17Ci0gICAgLy8gZWxsaXBzZShyYWRpdXNYKQotICAg
IC8vIGVsbGlwc2UocmFkaXVzWCBhdCA8cG9zaXRpb24+KQotICAgIC8vIGVsbGlwc2UocmFkaXVz
WCByYWRpdXNZKQotICAgIC8vIGVsbGlwc2UocmFkaXVzWCByYWRpdXNZIGF0IDxwb3NpdGlvbj4p
Ci0gICAgLy8gZWxsaXBzZShhdCA8cG9zaXRpb24+KQotICAgIC8vIHdoZXJlIHBvc2l0aW9uIGRl
ZmluZXMgY2VudGVyWCBhbmQgY2VudGVyWSB1c2luZyBhIENTUyA8cG9zaXRpb24+IGRhdGEgdHlw
ZS4KLSAgICBhdXRvIHNoYXBlID0gQ1NTQmFzaWNTaGFwZUVsbGlwc2U6OmNyZWF0ZSgpOwotCi0g
ICAgZm9yIChDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLmN1cnJlbnQoKTsgYXJndW1l
bnQ7IGFyZ3VtZW50ID0gYXJncy5uZXh0KCkpIHsKLSAgICAgICAgLy8gVGhlIGNhbGwgdG8gcGFy
c2VGaWxsUG9zaXRpb24gYmVsb3cgc2hvdWxkIGNvbnN1bWUgYWxsIG9mIHRoZQotICAgICAgICAv
LyBhcmd1bWVudHMgZXhjZXB0IHRoZSBmaXJzdCB0aHJlZS4gVGh1cywgYW4gaW5kZXggZ3JlYXRl
ciB0aGFuIHR3bwotICAgICAgICAvLyBpbmRpY2F0ZXMgYW4gaW52YWxpZCBwcm9kdWN0aW9uLgot
ICAgICAgICBpZiAoYXJncy5jdXJyZW50SW5kZXgoKSA+IDIpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgICAgICBpZiAoYXJncy5jdXJyZW50SW5kZXgoKSA8IDIgJiYgYXJndW1l
bnQtPmlkICE9IENTU1ZhbHVlQXQpIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IHJhZGl1cyA9IHBhcnNlU2hhcGVSYWRpdXMoKmFyZ3VtZW50KSkgewotICAgICAg
ICAgICAgICAgIGlmICghc2hhcGUtPnJhZGl1c1goKSkKLSAgICAgICAgICAgICAgICAgICAgc2hh
cGUtPnNldFJhZGl1c1gocmFkaXVzLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc2hhcGUtPnNldFJhZGl1c1kocmFkaXVzLnJlbGVh
c2VOb25OdWxsKCkpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChh
cmd1bWVudC0+aWQgIT0gQ1NTVmFsdWVBdCB8fCAhYXJncy5uZXh0KCkpIC8vIGV4cGVjdGluZyBl
bGxpcHNlKC4uIGF0IDxwb3NpdGlvbj4pCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNlbnRlclg7Ci0gICAgICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY2VudGVyWTsKLSAgICAgICAgcGFyc2VGaWxsUG9zaXRpb24o
YXJncywgY2VudGVyWCwgY2VudGVyWSk7Ci0gICAgICAgIGlmICghY2VudGVyWCB8fCAhY2VudGVy
WSB8fCBhcmdzLmN1cnJlbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
ICAgIHNoYXBlLT5zZXRDZW50ZXJYKGNlbnRlclgucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAg
IHNoYXBlLT5zZXRDZW50ZXJZKGNlbnRlclkucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIFdURk1vdmUoc2hhcGUpOwotfQotCi1SZWZQdHI8Q1NTQmFzaWNTaGFwZVBvbHln
b24+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlUG9seWdvbihDU1NQYXJzZXJWYWx1ZUxpc3Qm
IGFyZ3MpCi17Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGFyZ3Muc2l6ZSgpOwotICAgIGlmICghc2l6
ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHNoYXBlID0gQ1NTQmFzaWNT
aGFwZVBvbHlnb246OmNyZWF0ZSgpOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0g
YXJncy5jdXJyZW50KCk7Ci0gICAgaWYgKGFyZ3VtZW50LT5pZCA9PSBDU1NWYWx1ZUV2ZW5vZGQg
fHwgYXJndW1lbnQtPmlkID09IENTU1ZhbHVlTm9uemVybykgewotICAgICAgICBzaGFwZS0+c2V0
V2luZFJ1bGUoYXJndW1lbnQtPmlkID09IENTU1ZhbHVlRXZlbm9kZCA/IFJVTEVfRVZFTk9ERCA6
IFJVTEVfTk9OWkVSTyk7Ci0KLSAgICAgICAgaWYgKCFpc0NvbW1hKGFyZ3MubmV4dCgpKSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGFyZ3VtZW50ID0gYXJncy5uZXh0
KCk7Ci0gICAgICAgIHNpemUgLT0gMjsKLSAgICB9Ci0KLSAgICAvLyA8bGVuZ3RoPiA8bGVuZ3Ro
PiwgLi4uIDxsZW5ndGg+IDxsZW5ndGg+IC0+IGVhY2ggcGFpciBoYXMgMyBlbGVtZW50cyBleGNl
cHQgdGhlIGxhc3Qgb25lCi0gICAgaWYgKCFzaXplIHx8IChzaXplICUgMykgLSAyKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudFggPSBhcmd1
bWVudDsKLSAgICB3aGlsZSAoYXJndW1lbnRYKSB7Ci0KLSAgICAgICAgVmFsdWVXaXRoQ2FsY3Vs
YXRpb24gYXJndW1lbnRYV2l0aENhbGN1bGF0aW9uKCphcmd1bWVudFgpOwotICAgICAgICBpZiAo
IXZhbGlkYXRlVW5pdChhcmd1bWVudFhXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2Vu
dCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgYXV0byB4TGVuZ3RoID0g
Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50WFdpdGhDYWxjdWxhdGlvbik7Ci0K
LSAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50WSA9IGFyZ3MubmV4dCgpOwotICAgICAg
ICBpZiAoIWFyZ3VtZW50WSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBW
YWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFlXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50WSk7
Ci0gICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50WVdpdGhDYWxjdWxhdGlvbiwgRkxl
bmd0aCB8IEZQZXJjZW50KSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBh
dXRvIHlMZW5ndGggPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRZV2l0aENh
bGN1bGF0aW9uKTsKLQotICAgICAgICBzaGFwZS0+YXBwZW5kUG9pbnQoV1RGTW92ZSh4TGVuZ3Ro
KSwgV1RGTW92ZSh5TGVuZ3RoKSk7Ci0KLSAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIGNvbW1hT3JO
dWxsID0gYXJncy5uZXh0KCk7Ci0gICAgICAgIGlmICghY29tbWFPck51bGwpCi0gICAgICAgICAg
ICBhcmd1bWVudFggPSBudWxscHRyOwotICAgICAgICBlbHNlIGlmICghaXNDb21tYShjb21tYU9y
TnVsbCkpIAotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGVsc2UgCi0gICAg
ICAgICAgICBhcmd1bWVudFggPSBhcmdzLm5leHQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gV1RG
TW92ZShzaGFwZSk7Ci19Ci0KLVJlZlB0cjxDU1NCYXNpY1NoYXBlUGF0aD4gQ1NTUGFyc2VyOjpw
YXJzZUJhc2ljU2hhcGVQYXRoKENTU1BhcnNlclZhbHVlTGlzdCYgYXJncykKLXsKLSAgICB1bnNp
Z25lZCBzaXplID0gYXJncy5zaXplKCk7Ci0gICAgaWYgKHNpemUgIT0gMSAmJiBzaXplICE9IDMp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgV2luZFJ1bGUgd2luZFJ1bGUgPSBSVUxF
X05PTlpFUk87Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLmN1cnJlbnQo
KTsKLSAgICBpZiAoYXJndW1lbnQtPmlkID09IENTU1ZhbHVlRXZlbm9kZCB8fCBhcmd1bWVudC0+
aWQgPT0gQ1NTVmFsdWVOb256ZXJvKSB7Ci0gICAgICAgIHdpbmRSdWxlID0gYXJndW1lbnQtPmlk
ID09IENTU1ZhbHVlRXZlbm9kZCA/IFJVTEVfRVZFTk9ERCA6IFJVTEVfTk9OWkVSTzsKLQotICAg
ICAgICBpZiAoIWlzQ29tbWEoYXJncy5uZXh0KCkpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgIGFyZ3VtZW50ID0gYXJncy5uZXh0KCk7Ci0gICAgfQotCi0gICAgaWYgKGFy
Z3VtZW50LT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gYnl0ZVN0cmVhbSA9IHN0ZDo6bWFrZV91bmlxdWU8
U1ZHUGF0aEJ5dGVTdHJlYW0+KCk7Ci0gICAgaWYgKCFidWlsZFNWR1BhdGhCeXRlU3RyZWFtRnJv
bVN0cmluZyhhcmd1bWVudC0+c3RyaW5nLCAqYnl0ZVN0cmVhbSwgVW5hbHRlcmVkUGFyc2luZykp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBzaGFwZSA9IENTU0Jhc2ljU2hh
cGVQYXRoOjpjcmVhdGUoV1RGTW92ZShieXRlU3RyZWFtKSk7Ci0gICAgc2hhcGUtPnNldFdpbmRS
dWxlKHdpbmRSdWxlKTsKLQotICAgIGFyZ3MubmV4dCgpOwotICAgIHJldHVybiBXVEZNb3ZlKHNo
YXBlKTsKLX0KLQotc3RhdGljIGJvb2wgaXNCb3hWYWx1ZShDU1NWYWx1ZUlEIHZhbHVlSWQsIENT
U1Byb3BlcnR5SUQgcHJvcElkKQotewotICAgIHN3aXRjaCAodmFsdWVJZCkgewotICAgIGNhc2Ug
Q1NTVmFsdWVDb250ZW50Qm94OgotICAgIGNhc2UgQ1NTVmFsdWVQYWRkaW5nQm94OgotICAgIGNh
c2UgQ1NTVmFsdWVCb3JkZXJCb3g6Ci0gICAgY2FzZSBDU1NWYWx1ZU1hcmdpbkJveDoKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBDU1NWYWx1ZUZpbGw6Ci0gICAgY2FzZSBDU1NWYWx1
ZVN0cm9rZToKLSAgICBjYXNlIENTU1ZhbHVlVmlld0JveDoKLSAgICAgICAgcmV0dXJuIHByb3BJ
ZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdENsaXBQYXRoOwotICAgIGRlZmF1bHQ6IGJyZWFrOwotICAg
IH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFy
c2VyOjpwYXJzZUJhc2ljU2hhcGVBbmRPckJveChDU1NQcm9wZXJ0eUlEIHByb3BJZCkKLXsKLSAg
ICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotCi0gICAg
Ym9vbCBzaGFwZUZvdW5kID0gZmFsc2U7Ci0gICAgYm9vbCBib3hGb3VuZCA9IGZhbHNlOwotICAg
IENTU1ZhbHVlSUQgdmFsdWVJZDsKLQotICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3Jl
YXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjsgKytp
KSB7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgdmFs
dWVJZCA9IHZhbHVlLT5pZDsKLSAgICAgICAgaWYgKHZhbHVlLT51bml0ID09IENTU1BhcnNlclZh
bHVlOjpGdW5jdGlvbiAmJiAhc2hhcGVGb3VuZCkgewotICAgICAgICAgICAgLy8gcGFyc2VCYXNp
Y1NoYXBlIGFscmVhZHkgYXNrcyBmb3IgdGhlIG5leHQgdmFsdWUgbGlzdCBpdGVtLgotICAgICAg
ICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzaGFwZVZhbHVlID0gcGFyc2VCYXNpY1No
YXBlKCk7Ci0gICAgICAgICAgICBpZiAoIXNoYXBlVmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBsaXN0LT5hcHBlbmQoc2hhcGVWYWx1ZS5yZWxlYXNl
Tm9uTnVsbCgpKTsKLSAgICAgICAgICAgIHNoYXBlRm91bmQgPSB0cnVlOwotICAgICAgICB9IGVs
c2UgaWYgKGlzQm94VmFsdWUodmFsdWVJZCwgcHJvcElkKSAmJiAhYm94Rm91bmQpIHsKLSAgICAg
ICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUgPSBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZUlkKTsKLSAgICAgICAg
ICAgIGxpc3QtPmFwcGVuZChwYXJzZWRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAg
ICAgIGJveEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHZhbHVl
ID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICB9Ci0KLSAgICBpZiAobV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIFdURk1vdmUo
bGlzdCk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLVJlZlB0cjxDU1NWYWx1ZT4gQ1NT
UGFyc2VyOjpwYXJzZVNoYXBlUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQpCi17Ci0gICAg
Q1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgQ1NT
VmFsdWVJRCB2YWx1ZUlkID0gdmFsdWUuaWQ7Ci0KLSAgICBpZiAodmFsdWVJZCA9PSBDU1NWYWx1
ZU5vbmUpIHsKLSAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlSWQpOwot
ICAgIH0KLQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gaW1hZ2VWYWx1ZTsKLSAgICBpZiAodmFsdWVJ
ZCAhPSBDU1NWYWx1ZU5vbmUgJiYgcGFyc2VGaWxsSW1hZ2UoKm1fdmFsdWVMaXN0LCBpbWFnZVZh
bHVlKSkgewotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1cm4gaW1h
Z2VWYWx1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcGFyc2VCYXNpY1NoYXBlQW5kT3JCb3gocHJv
cElkKTsKLX0KLSNlbmRpZgotCi1SZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VDbGlw
UGF0aCgpCi17Ci0gICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJy
ZW50KCk7Ci0gICAgQ1NTVmFsdWVJRCB2YWx1ZUlkID0gdmFsdWUuaWQ7Ci0KLSAgICBpZiAodmFs
dWVJZCA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAg
ICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKHZhbHVlSWQpOwotICAgIH0KLSAgICBpZiAodmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1VSSSkgewotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICBy
ZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS5zdHJpbmcsIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfVVJJKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcGFyc2VCYXNpY1NoYXBlQW5k
T3JCb3goQ1NTUHJvcGVydHlXZWJraXRDbGlwUGF0aCk7Ci19Ci0KLVJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUJhc2ljU2hhcGUoKQotewotICAgIENTU1BhcnNlclZh
bHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIEFTU0VSVCh2YWx1ZS51
bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbik7Ci0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0
KiBhcmdzID0gdmFsdWUuZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0KLSAgICBpZiAoIWFyZ3MpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmVmUHRyPENTU0Jhc2ljU2hhcGU+IHNoYXBl
OwotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+
bmFtZSwgImNpcmNsZSgiKSkKLSAgICAgICAgc2hhcGUgPSBwYXJzZUJhc2ljU2hhcGVDaXJjbGUo
KmFyZ3MpOwotICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVl
LmZ1bmN0aW9uLT5uYW1lLCAiZWxsaXBzZSgiKSkKLSAgICAgICAgc2hhcGUgPSBwYXJzZUJhc2lj
U2hhcGVFbGxpcHNlKCphcmdzKTsKLSAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgInBvbHlnb24oIikpCi0gICAgICAgIHNoYXBl
ID0gcGFyc2VCYXNpY1NoYXBlUG9seWdvbigqYXJncyk7Ci0gICAgZWxzZSBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJwYXRoKCIpKQotICAg
ICAgICBzaGFwZSA9IHBhcnNlQmFzaWNTaGFwZVBhdGgoKmFyZ3MpOwotICAgIGVsc2UgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiaW5zZXQo
IikpCi0gICAgICAgIHNoYXBlID0gcGFyc2VCYXNpY1NoYXBlSW5zZXQoKmFyZ3MpOwotCi0gICAg
aWYgKCFzaGFwZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBtX3ZhbHVlTGlzdC0+
bmV4dCgpOwotICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVl
KHNoYXBlLnJlbGVhc2VOb25OdWxsKCkpOwotfQotCi0vLyBbICdmb250LXN0eWxlJyB8fCAnZm9u
dC12YXJpYW50JyB8fCAnZm9udC13ZWlnaHQnIF0/ICdmb250LXNpemUnIFsgLyAnbGluZS1oZWln
aHQnIF0/ICdmb250LWZhbWlseScKLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnQoYm9vbCBpbXBv
cnRhbnQpCi17Ci0gICAgLy8gTGV0J3MgY2hlY2sgaWYgdGhlcmUgaXMgYW4gaW5oZXJpdCBvciBp
bml0aWFsIHNvbWV3aGVyZSBpbiB0aGUgc2hvcnRoYW5kLgotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX3ZhbHVlTGlzdC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fdmFsdWVM
aXN0LT52YWx1ZUF0KGkpLT5pZCA9PSBDU1NWYWx1ZUluaGVyaXQgfHwgbV92YWx1ZUxpc3QtPnZh
bHVlQXQoaSktPmlkID09IENTU1ZhbHVlSW5pdGlhbCkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBDU1NQcm9wZXJ0eUZv
bnQpOwotICAgIC8vIE9wdGlvbmFsIGZvbnQtc3R5bGUsIGZvbnQtdmFyaWFudCBhbmQgZm9udC13
ZWlnaHQuCi0gICAgYm9vbCBmb250U3R5bGVQYXJzZWQgPSBmYWxzZTsKLSAgICBib29sIGZvbnRW
YXJpYW50UGFyc2VkID0gZmFsc2U7Ci0gICAgYm9vbCBmb250V2VpZ2h0UGFyc2VkID0gZmFsc2U7
Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlOwotICAgIHdoaWxlICgodmFsdWUgPSBtX3ZhbHVl
TGlzdC0+Y3VycmVudCgpKSkgewotICAgICAgICBpZiAoIWZvbnRTdHlsZVBhcnNlZCAmJiBpc1Zh
bGlkS2V5d29yZFByb3BlcnR5QW5kVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5bGUsIHZhbHVlLT5p
ZCwgbV9jb250ZXh0LCBtX3N0eWxlU2hlZXQpKSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShD
U1NQcm9wZXJ0eUZvbnRTdHlsZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUodmFsdWUtPmlkKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIGZvbnRTdHls
ZVBhcnNlZCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoIWZvbnRWYXJpYW50UGFyc2VkICYm
ICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlU21h
bGxDYXBzKSkgewotICAgICAgICAgICAgLy8gRm9udCB2YXJpYW50IGluIHRoZSBzaG9ydGhhbmQg
aXMgcGFydGljdWxhciwgaXQgb25seSBhY2NlcHRzIG5vcm1hbCBvciBzbWFsbC1jYXBzLgotICAg
ICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMsIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCksIGltcG9y
dGFudCk7Ci0gICAgICAgICAgICBmb250VmFyaWFudFBhcnNlZCA9IHRydWU7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoIWZvbnRXZWlnaHRQYXJzZWQgJiYgcGFyc2VGb250V2VpZ2h0KGltcG9ydGFudCkp
Ci0gICAgICAgICAgICBmb250V2VpZ2h0UGFyc2VkID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgfQotCi0g
ICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFmb250U3R5
bGVQYXJzZWQpCi0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlLCBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1h
bCksIGltcG9ydGFudCwgdHJ1ZSk7Ci0gICAgaWYgKCFmb250VmFyaWFudFBhcnNlZCkKLSAgICAg
ICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMsIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKSwgaW1wb3J0
YW50LCB0cnVlKTsKLSAgICBpZiAoIWZvbnRXZWlnaHRQYXJzZWQpCi0gICAgICAgIGFkZFByb3Bl
cnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpLCBpbXBvcnRhbnQsIHRydWUpOwotCi0g
ICAgLy8gTm93IGEgZm9udCBzaXplIF9tdXN0XyBjb21lLgotICAgIC8vIDxhYnNvbHV0ZS1zaXpl
PiB8IDxyZWxhdGl2ZS1zaXplPiB8IDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgaW5oZXJpdAot
ICAgIGlmICghcGFyc2VGb250U2l6ZShpbXBvcnRhbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWx1ZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGlzRm9yd2FyZFNsYXNoT3BlcmF0b3Io
KnZhbHVlKSkgewotICAgICAgICAvLyBUaGUgbGluZS1oZWlnaHQgcHJvcGVydHkuCi0gICAgICAg
IHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFwYXJzZUxpbmVIZWlnaHQoaW1wb3J0
YW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UKLSAgICAgICAgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCksIGltcG9ydGFudCwgdHJ1ZSk7
Ci0KLSAgICAvLyBGb250IGZhbWlseSBtdXN0IGNvbWUgbm93LgotICAgIFJlZlB0cjxDU1NWYWx1
ZT4gcGFyc2VkRmFtaWx5VmFsdWUgPSBwYXJzZUZvbnRGYW1pbHkoKTsKLSAgICBpZiAoIXBhcnNl
ZEZhbWlseVZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhZGRQcm9wZXJ0eShD
U1NQcm9wZXJ0eUZvbnRGYW1pbHksIHBhcnNlZEZhbWlseVZhbHVlLnJlbGVhc2VOb25OdWxsKCks
IGltcG9ydGFudCk7Ci0KLSAgICAvLyBGSVhNRTogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9X
RC1jc3MzLWZvbnRzLTIwMTEwMzI0LyNmb250LXByb3AgcmVxdWlyZXMgdGhhdAotICAgIC8vICJm
b250LXN0cmV0Y2giLCAiZm9udC1zaXplLWFkanVzdCIsIGFuZCAiZm9udC1rZXJuaW5nIiBiZSBy
ZXNldCB0byB0aGVpciBpbml0aWFsIHZhbHVlcwotICAgIC8vIGJ1dCB3ZSBkb24ndCBzZWVtIHRv
IHN1cHBvcnQgdGhlbSBhdCB0aGUgbW9tZW50LiBUaGV5IHNob3VsZCBhbHNvIGJlIGFkZGVkIGhl
cmUgb25jZSBpbXBsZW1lbnRlZC4KLSAgICBpZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ1NTUGFy
c2VyOjpwYXJzZVN5c3RlbUZvbnQoYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgQVNTRVJUKG1fdmFs
dWVMaXN0LT5zaXplKCkgPT0gMSk7Ci0gICAgQ1NTVmFsdWVJRCBzeXN0ZW1Gb250SUQgPSBtX3Zh
bHVlTGlzdC0+dmFsdWVBdCgwKS0+aWQ7Ci0gICAgQVNTRVJUKHN5c3RlbUZvbnRJRCA+PSBDU1NW
YWx1ZUNhcHRpb24gJiYgc3lzdGVtRm9udElEIDw9IENTU1ZhbHVlU3RhdHVzQmFyKTsKLSAgICBt
X3ZhbHVlTGlzdC0+bmV4dCgpOwotCi0gICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb247Ci0gICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0ZW1Gb250KHN5
c3RlbUZvbnRJRCwgZm9udERlc2NyaXB0aW9uKTsKLSAgICBpZiAoIWZvbnREZXNjcmlwdGlvbi5p
c0Fic29sdXRlU2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBtdXN0IHNldCBm
b250J3MgY29uc3RpdHVlbnQgcHJvcGVydGllcywgZXZlbiBmb3Igc3lzdGVtIGZvbnRzLCBzbyB0
aGUgY2FzY2FkZSBmdW5jdGlvbnMgY29ycmVjdGx5LgotICAgIFNob3J0aGFuZFNjb3BlIHNjb3Bl
KHRoaXMsIENTU1Byb3BlcnR5Rm9udCk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250
U3R5bGUsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGZv
bnREZXNjcmlwdGlvbi5pdGFsaWMoKSA9PSBGb250SXRhbGljT24gPyBDU1NWYWx1ZUl0YWxpYyA6
IENTU1ZhbHVlTm9ybWFsKSwgaW1wb3J0YW50KTsKLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUZvbnRXZWlnaHQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoZm9udERl
c2NyaXB0aW9uLndlaWdodCgpKSwgaW1wb3J0YW50KTsKLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUZvbnRTaXplLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKGZvbnRE
ZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpLCBp
bXBvcnRhbnQpOwotICAgIFJlZjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYW1pbHlMaXN0ID0gQ1NTVmFs
dWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwotICAgIGZvbnRGYW1pbHlMaXN0LT5hcHBl
bmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVGb250RmFtaWx5VmFsdWUoZm9udERl
c2NyaXB0aW9uLmZhbWlseUF0KDApLCBGcm9tU3lzdGVtRm9udElEOjpZZXMpKTsKLSAgICBhZGRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIFdURk1vdmUoZm9udEZhbWlseUxpc3QpLCBp
bXBvcnRhbnQpOwotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzLCBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5v
cm1hbCksIGltcG9ydGFudCk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0
LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZU5vcm1hbCksIGltcG9ydGFudCk7Ci19Ci0KLWNsYXNzIEZvbnRGYW1pbHlWYWx1ZUJ1aWxkZXIg
ewotcHVibGljOgotICAgIEZvbnRGYW1pbHlWYWx1ZUJ1aWxkZXIoQ1NTVmFsdWVMaXN0JiBsaXN0
KQotICAgICAgICA6IG1fbGlzdChsaXN0KQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFkZChj
b25zdCBDU1NQYXJzZXJTdHJpbmcmIHN0cmluZykKLSAgICB7Ci0gICAgICAgIGlmICghbV9idWls
ZGVyLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fYnVpbGRlci5hcHBlbmQoJyAnKTsKLQotICAg
ICAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKSB7Ci0gICAgICAgICAgICBtX2J1aWxkZXIuYXBwZW5k
KHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9idWlsZGVyLmFwcGVuZChzdHJpbmcuY2hhcmFj
dGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21taXQoKQot
ICAgIHsKLSAgICAgICAgaWYgKG1fYnVpbGRlci5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIG1fbGlzdC5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVGb250RmFtaWx5VmFsdWUobV9idWlsZGVyLnRvU3RyaW5nKCkpKTsKLSAgICAgICAgbV9idWls
ZGVyLmNsZWFyKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFN0cmluZ0J1aWxkZXIgbV9idWls
ZGVyOwotICAgIENTU1ZhbHVlTGlzdCYgbV9saXN0OwotfTsKLQotc3RhdGljIGJvb2wgdmFsdWVJ
c0NTU0tleXdvcmQoY29uc3QgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQotewotICAgIC8vIEZJWE1F
OiB3aGVuIHdlIGFkZCAidW5zZXQiLCB3ZSBzaG91bGQgaGFuZGxlIGl0IGhlcmUuCi0gICAgcmV0
dXJuIHZhbHVlLmlkID09IENTU1ZhbHVlSW5pdGlhbCB8fCB2YWx1ZS5pZCA9PSBDU1NWYWx1ZUlu
aGVyaXQgfHwgdmFsdWUuaWQgPT0gQ1NTVmFsdWVEZWZhdWx0OwotfQotCi1SZWZQdHI8Q1NTVmFs
dWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlRm9udEZhbWlseSgpCi17Ci0gICAgYXV0byBsaXN0ID0g
Q1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwotICAgIENTU1BhcnNlclZhbHVl
KiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0KLSAgICBGb250RmFtaWx5VmFsdWVC
dWlsZGVyIGZhbWlseUJ1aWxkZXIobGlzdCk7Ci0gICAgYm9vbCBpbkZhbWlseSA9IGZhbHNlOwot
Ci0gICAgd2hpbGUgKHZhbHVlKSB7Ci0gICAgICAgIENTU1BhcnNlclZhbHVlKiBuZXh0VmFsdWUg
PSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICBib29sIG5leHRWYWxCcmVha3NGb250ID0g
IW5leHRWYWx1ZSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5leHRWYWx1
ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgbmV4dFZhbHVlLT5pVmFsdWUg
PT0gJywnKTsKLSAgICAgICAgYm9vbCBuZXh0VmFsSXNGb250TmFtZSA9IG5leHRWYWx1ZSAmJgot
ICAgICAgICAgICAgKChuZXh0VmFsdWUtPmlkID49IENTU1ZhbHVlU2VyaWYgJiYgbmV4dFZhbHVl
LT5pZCA8PSBDU1NWYWx1ZVdlYmtpdEJvZHkpIHx8Ci0gICAgICAgICAgICAobmV4dFZhbHVlLT51
bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HIHx8IG5leHRWYWx1ZS0+dW5pdCA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSk7Ci0KLSAgICAgICAgYm9vbCB2YWx1ZUlz
S2V5d29yZCA9IHZhbHVlSXNDU1NLZXl3b3JkKCp2YWx1ZSk7Ci0gICAgICAgIGlmICh2YWx1ZUlz
S2V5d29yZCAmJiAhaW5GYW1pbHkpIHsKLSAgICAgICAgICAgIGlmIChuZXh0VmFsQnJlYWtzRm9u
dCkKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChuZXh0VmFsSXNGb250TmFtZSkKLSAgICAgICAgICAgICAgICB2YWx1ZSA9
IG5leHRWYWx1ZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKHZhbHVlLT5pZCA+PSBDU1NWYWx1ZVNlcmlmICYmIHZhbHVlLT5pZCA8PSBDU1NWYWx1ZVdl
YmtpdEJvZHkpIHsKLSAgICAgICAgICAgIGlmIChpbkZhbWlseSkKLSAgICAgICAgICAgICAgICBm
YW1pbHlCdWlsZGVyLmFkZCh2YWx1ZS0+c3RyaW5nKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG5l
eHRWYWxCcmVha3NGb250IHx8ICFuZXh0VmFsSXNGb250TmFtZSkKLSAgICAgICAgICAgICAgICBs
aXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUodmFsdWUtPmlkKSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBmYW1p
bHlCdWlsZGVyLmNvbW1pdCgpOwotICAgICAgICAgICAgICAgIGZhbWlseUJ1aWxkZXIuYWRkKHZh
bHVlLT5zdHJpbmcpOwotICAgICAgICAgICAgICAgIGluRmFtaWx5ID0gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1NUUklORykgewotICAgICAgICAgICAgLy8gU3RyaW5ncyBuZXZlciBzaGFyZSBpbiBh
IGZhbWlseSBuYW1lLgotICAgICAgICAgICAgaW5GYW1pbHkgPSBmYWxzZTsKLSAgICAgICAgICAg
IGZhbWlseUJ1aWxkZXIuY29tbWl0KCk7Ci0gICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVGb250RmFtaWx5VmFsdWUodmFsdWUtPnN0cmluZykp
OwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfSURFTlQpIHsKLSAgICAgICAgICAgIGlmIChpbkZhbWlseSkKLSAgICAgICAgICAgICAgICBm
YW1pbHlCdWlsZGVyLmFkZCh2YWx1ZS0+c3RyaW5nKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG5l
eHRWYWxCcmVha3NGb250IHx8ICFuZXh0VmFsSXNGb250TmFtZSkKLSAgICAgICAgICAgICAgICBs
aXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVGb250RmFtaWx5VmFs
dWUodmFsdWUtPnN0cmluZykpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ZmFtaWx5QnVpbGRlci5jb21taXQoKTsKLSAgICAgICAgICAgICAgICBmYW1pbHlCdWlsZGVyLmFk
ZCh2YWx1ZS0+c3RyaW5nKTsKLSAgICAgICAgICAgICAgICBpbkZhbWlseSA9IHRydWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmICghbmV4dFZhbHVlKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgaWYgKG5leHRWYWxCcmVha3NGb250KSB7Ci0gICAgICAgICAgICB2YWx1ZSA9IG1fdmFsdWVM
aXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICBmYW1pbHlCdWlsZGVyLmNvbW1pdCgpOwotICAgICAg
ICAgICAgaW5GYW1pbHkgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChuZXh0
VmFsSXNGb250TmFtZSkKLSAgICAgICAgICAgIHZhbHVlID0gbmV4dFZhbHVlOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZmFtaWx5QnVpbGRlci5jb21taXQo
KTsKLQotICAgIGlmICghbGlzdC0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHJldHVybiBXVEZNb3ZlKGxpc3QpOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VMaW5l
SGVpZ2h0KGJvb2wgaW1wb3J0YW50KQotewotICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVl
V2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKLSAgICBDU1NWYWx1ZUlE
IGlkID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5pZDsKLSAgICBib29sIHZhbGlkUHJp
bWl0aXZlID0gZmFsc2U7Ci0gICAgLy8gbm9ybWFsIHwgPG51bWJlcj4gfCA8bGVuZ3RoPiB8IDxw
ZXJjZW50YWdlPiB8IGluaGVyaXQKLSAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwpCi0gICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICBlbHNlCi0gICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIg
fCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSk7Ci0gICAgaWYgKHZhbGlkUHJpbWl0aXZl
ICYmICghbV92YWx1ZUxpc3QtPm5leHQoKSB8fCBpblNob3J0aGFuZCgpKSkKLSAgICAgICAgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2
YWx1ZVdpdGhDYWxjdWxhdGlvbiksIGltcG9ydGFudCk7Ci0gICAgcmV0dXJuIHZhbGlkUHJpbWl0
aXZlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VGb250U2l6ZShib29sIGltcG9ydGFudCkK
LXsKLSAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1
ZUxpc3QtPmN1cnJlbnQoKSk7Ci0gICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlV2l0aENhbGN1bGF0
aW9uLnZhbHVlKCkuaWQ7Ci0gICAgYm9vbCB2YWxpZFByaW1pdGl2ZSA9IGZhbHNlOwotICAgIC8v
IDxhYnNvbHV0ZS1zaXplPiB8IDxyZWxhdGl2ZS1zaXplPiB8IDxsZW5ndGg+IHwgPHBlcmNlbnRh
Z2U+IHwgaW5oZXJpdAotICAgIGlmIChpZCA+PSBDU1NWYWx1ZVh4U21hbGwgJiYgaWQgPD0gQ1NT
VmFsdWVMYXJnZXIpCi0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICBlbHNlCi0g
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9u
LCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKTsKLSAgICBpZiAodmFsaWRQcmltaXRpdmUg
JiYgKCFtX3ZhbHVlTGlzdC0+bmV4dCgpIHx8IGluU2hvcnRoYW5kKCkpKQotICAgICAgICBhZGRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2YWx1
ZVdpdGhDYWxjdWxhdGlvbiksIGltcG9ydGFudCk7Ci0gICAgcmV0dXJuIHZhbGlkUHJpbWl0aXZl
OwotfQotCi1zdGF0aWMgQ1NTVmFsdWVJRCBjcmVhdGVGb250V2VpZ2h0VmFsdWVLZXl3b3JkKGlu
dCB3ZWlnaHQpCi17Ci0gICAgQVNTRVJUKCEod2VpZ2h0ICUgMTAwKSAmJiB3ZWlnaHQgPj0gMTAw
ICYmIHdlaWdodCA8PSA5MDApOwotICAgIENTU1ZhbHVlSUQgdmFsdWUgPSBzdGF0aWNfY2FzdDxD
U1NWYWx1ZUlEPihDU1NWYWx1ZTEwMCArIHdlaWdodCAvIDEwMCAtIDEpOwotICAgIEFTU0VSVCh2
YWx1ZSA+PSBDU1NWYWx1ZTEwMCAmJiB2YWx1ZSA8PSBDU1NWYWx1ZTkwMCk7Ci0gICAgcmV0dXJu
IHZhbHVlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VGb250V2VpZ2h0KGJvb2wgaW1wb3J0
YW50KQotewotICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpOwotICAgIGlmICgodmFsdWUuaWQgPj0gQ1NTVmFsdWVOb3JtYWwpICYmICh2YWx1ZS5pZCA8
PSBDU1NWYWx1ZTkwMCkpIHsKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2Vp
Z2h0LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1
ZS5pZCksIGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBWYWx1
ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbih2YWx1ZSk7Ci0gICAgaWYgKHZh
bGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBGTm9uTmVnLCBDU1NR
dWlya3NNb2RlKSkgewotICAgICAgICBpbnQgd2VpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwYXJz
ZWREb3VibGUodmFsdWVXaXRoQ2FsY3VsYXRpb24pKTsKLSAgICAgICAgaWYgKCEod2VpZ2h0ICUg
MTAwKSAmJiB3ZWlnaHQgPj0gMTAwICYmIHdlaWdodCA8PSA5MDApIHsKLSAgICAgICAgICAgIGFk
ZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY3JlYXRlRm9udFdlaWdodFZhbHVlS2V5d29yZCh3ZWln
aHQpKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udFN5
bnRoZXNpcyhib29sIGltcG9ydGFudCkKLXsKLSAgICAvLyBub25lIHwgWyB3ZWlnaHQgfHwgc3R5
bGUgXQotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7
Ci0gICAgaWYgKHZhbHVlICYmIHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAg
YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U3ludGhlc2lzLCBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpLCBpbXBvcnRhbnQpOwot
ICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBib29sIGVuY291bnRlcmVkV2VpZ2h0ID0gZmFsc2U7Ci0gICAgYm9vbCBlbmNvdW50
ZXJlZFN0eWxlID0gZmFsc2U7Ci0gICAgd2hpbGUgKHZhbHVlKSB7Ci0gICAgICAgIHN3aXRjaCAo
dmFsdWUtPmlkKSB7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVXZWlnaHQ6Ci0gICAgICAgICAgICBl
bmNvdW50ZXJlZFdlaWdodCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBDU1NWYWx1ZVN0eWxlOgotICAgICAgICAgICAgZW5jb3VudGVyZWRTdHlsZSA9IHRydWU7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0g
ICAgfQotCi0gICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRl
ZCgpOwotICAgIGlmIChlbmNvdW50ZXJlZFdlaWdodCkKLSAgICAgICAgbGlzdC0+YXBwZW5kKENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlV2Vp
Z2h0KSk7Ci0gICAgaWYgKGVuY291bnRlcmVkU3R5bGUpCi0gICAgICAgIGxpc3QtPmFwcGVuZChD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVN0
eWxlKSk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U3ludGhlc2lzLCBXVEZNb3Zl
KGxpc3QpLCBpbXBvcnRhbnQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU1BhcnNl
cjo6cGFyc2VGb250RmFjZVNyY1VSSShDU1NWYWx1ZUxpc3QmIHZhbHVlTGlzdCkKLXsKLSAgICBh
dXRvIHVyaVZhbHVlID0gQ1NTRm9udEZhY2VTcmNWYWx1ZTo6Y3JlYXRlKGNvbXBsZXRlVVJMKG1f
dmFsdWVMaXN0LT5jdXJyZW50KCktPnN0cmluZykpOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIHZh
bHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICBpZiAoIXZhbHVlKSB7Ci0gICAgICAgIHZh
bHVlTGlzdC5hcHBlbmQoV1RGTW92ZSh1cmlWYWx1ZSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgaWYgKHZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAm
JiB2YWx1ZS0+aVZhbHVlID09ICcsJykgewotICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwot
ICAgICAgICB2YWx1ZUxpc3QuYXBwZW5kKFdURk1vdmUodXJpVmFsdWUpKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHZhbHVlLT51bml0ICE9IENTU1BhcnNlclZhbHVl
OjpGdW5jdGlvbiB8fCAhZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUtPmZ1bmN0
aW9uLT5uYW1lLCAiZm9ybWF0KCIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBG
SVhNRTogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9XRC1jc3MzLWZvbnRzLTIwMTExMDA0LyBz
YXlzIHRoYXQgZm9ybWF0KCkgY29udGFpbnMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBzdHJp
bmdzLAotICAgIC8vIGJ1dCBDU1NGb250RmFjZVNyY1ZhbHVlIHN0b3JlcyBvbmx5IG9uZSBmb3Jt
YXQuIEFsbG93aW5nIG9uZSBmb3JtYXQgZm9yIG5vdy4KLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3Qq
IGFyZ3MgPSB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0gICAgaWYgKCFhcmdzIHx8IGFy
Z3MtPnNpemUoKSAhPSAxIHx8IChhcmdzLT5jdXJyZW50KCktPnVuaXQgIT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19TVFJJTkcgJiYgYXJncy0+Y3VycmVudCgpLT51bml0ICE9IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfSURFTlQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdXJpVmFsdWUt
PnNldEZvcm1hdChhcmdzLT5jdXJyZW50KCktPnN0cmluZyk7Ci0gICAgdmFsdWVMaXN0LmFwcGVu
ZChXVEZNb3ZlKHVyaVZhbHVlKSk7Ci0gICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwot
ICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3Ig
JiYgdmFsdWUtPmlWYWx1ZSA9PSAnLCcpCi0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlU3JjTG9j
YWwoQ1NTVmFsdWVMaXN0JiB2YWx1ZUxpc3QpCi17Ci0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBh
cmdzID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0gICAg
aWYgKCFhcmdzIHx8ICFhcmdzLT5zaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmIChhcmdzLT5zaXplKCkgPT0gMSAmJiBhcmdzLT5jdXJyZW50KCktPnVuaXQgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCi0gICAgICAgIHZhbHVlTGlzdC5hcHBlbmQoQ1NTRm9u
dEZhY2VTcmNWYWx1ZTo6Y3JlYXRlTG9jYWwoYXJncy0+Y3VycmVudCgpLT5zdHJpbmcpKTsKLSAg
ICBlbHNlIGlmIChhcmdzLT5jdXJyZW50KCktPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19JREVOVCkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgICAgIGZvciAo
Q1NTUGFyc2VyVmFsdWUqIGxvY2FsVmFsdWUgPSBhcmdzLT5jdXJyZW50KCk7IGxvY2FsVmFsdWU7
IGxvY2FsVmFsdWUgPSBhcmdzLT5uZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChsb2NhbFZhbHVl
LT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFidWlsZGVyLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQobG9jYWxWYWx1ZS0+c3RyaW5nKTsKLSAgICAgICAgfQotICAgICAgICB2YWx1ZUxpc3QuYXBw
ZW5kKENTU0ZvbnRGYWNlU3JjVmFsdWU6OmNyZWF0ZUxvY2FsKGJ1aWxkZXIudG9TdHJpbmcoKSkp
OwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoQ1NTUGFyc2Vy
VmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKSkgewotICAgICAgICBpZiAodmFsdWUt
PnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIHZhbHVlLT5pVmFsdWUgPT0gJywn
KQotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlU3JjKCkKLXsKLSAgICBhdXRv
IHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKLQotICAgIHdo
aWxlIChDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Ci0g
ICAgICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewot
ICAgICAgICAgICAgaWYgKCFwYXJzZUZvbnRGYWNlU3JjVVJJKHZhbHVlcykpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENT
U1BhcnNlclZhbHVlOjpGdW5jdGlvbiAmJiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2
YWx1ZS0+ZnVuY3Rpb24tPm5hbWUsICJsb2NhbCgiKSkgewotICAgICAgICAgICAgaWYgKCFwYXJz
ZUZvbnRGYWNlU3JjTG9jYWwodmFsdWVzKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBp
ZiAoIXZhbHVlcy0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGFkZFBy
b3BlcnR5KENTU1Byb3BlcnR5U3JjLCBXVEZNb3ZlKHZhbHVlcyksIG1faW1wb3J0YW50KTsKLSAg
ICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU1Bh
cnNlcjo6cGFyc2VGb250RmFjZVVuaWNvZGVSYW5nZSgpCi17Ci0gICAgYXV0byB2YWx1ZXMgPSBD
U1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0gICAgYm9vbCBmYWlsZWQgPSBm
YWxzZTsKLSAgICBib29sIG9wZXJhdG9yRXhwZWN0ZWQgPSBmYWxzZTsKLSAgICBmb3IgKDsgbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKTsgbV92YWx1ZUxpc3QtPm5leHQoKSwgb3BlcmF0b3JFeHBlY3Rl
ZCA9ICFvcGVyYXRvckV4cGVjdGVkKSB7Ci0gICAgICAgIGlmIChvcGVyYXRvckV4cGVjdGVkKSB7
Ci0gICAgICAgICAgICBpZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+dW5pdCA9PSBDU1NQYXJz
ZXJWYWx1ZTo6T3BlcmF0b3IgJiYgbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aVZhbHVlID09ICcs
JykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VOSUNPREVfUkFOR0Up
IHsKLSAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotCi0gICAgICAgIFN0cmluZyByYW5nZVN0cmluZyA9IG1fdmFsdWVMaXN0LT5jdXJyZW50
KCktPnN0cmluZzsKLSAgICAgICAgVUNoYXIzMiBmcm9tID0gMDsKLSAgICAgICAgVUNoYXIzMiB0
byA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHJhbmdlU3RyaW5nLmxlbmd0aCgpOwot
Ci0gICAgICAgIGlmIChsZW5ndGggPCAzKSB7Ci0gICAgICAgICAgICBmYWlsZWQgPSB0cnVlOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNpZ25lZCBpID0gMjsK
LSAgICAgICAgd2hpbGUgKGkgPCBsZW5ndGgpIHsKLSAgICAgICAgICAgIFVDaGFyIGMgPSByYW5n
ZVN0cmluZ1tpXTsKLSAgICAgICAgICAgIGlmIChjID09ICctJyB8fCBjID09ICc/JykKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZyb20gKj0gMTY7Ci0gICAgICAgICAgICBp
ZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpCi0gICAgICAgICAgICAgICAgZnJvbSArPSBjIC0gJzAn
OwotICAgICAgICAgICAgZWxzZSBpZiAoYyA+PSAnQScgJiYgYyA8PSAnRicpCi0gICAgICAgICAg
ICAgICAgZnJvbSArPSAxMCArIGMgLSAnQSc7Ci0gICAgICAgICAgICBlbHNlIGlmIChjID49ICdh
JyAmJiBjIDw9ICdmJykKLSAgICAgICAgICAgICAgICBmcm9tICs9IDEwICsgYyAtICdhJzsKLSAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpKys7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKGZhaWxlZCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlm
IChpID09IGxlbmd0aCkKLSAgICAgICAgICAgIHRvID0gZnJvbTsKLSAgICAgICAgZWxzZSBpZiAo
cmFuZ2VTdHJpbmdbaV0gPT0gJz8nKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcGFuID0gMTsK
LSAgICAgICAgICAgIHdoaWxlIChpIDwgbGVuZ3RoICYmIHJhbmdlU3RyaW5nW2ldID09ICc/Jykg
ewotICAgICAgICAgICAgICAgIHNwYW4gKj0gMTY7Ci0gICAgICAgICAgICAgICAgZnJvbSAqPSAx
NjsKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
aSA8IGxlbmd0aCkKLSAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOwotICAgICAgICAgICAg
dG8gPSBmcm9tICsgc3BhbiAtIDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAo
bGVuZ3RoIDwgaSArIDIpIHsKLSAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaSsrOwotICAgICAg
ICAgICAgd2hpbGUgKGkgPCBsZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBVQ2hhciBjID0gcmFu
Z2VTdHJpbmdbaV07Ci0gICAgICAgICAgICAgICAgdG8gKj0gMTY7Ci0gICAgICAgICAgICAgICAg
aWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKQotICAgICAgICAgICAgICAgICAgICB0byArPSBjIC0g
JzAnOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gJ0EnICYmIGMgPD0gJ0YnKQotICAg
ICAgICAgICAgICAgICAgICB0byArPSAxMCArIGMgLSAnQSc7Ci0gICAgICAgICAgICAgICAgZWxz
ZSBpZiAoYyA+PSAnYScgJiYgYyA8PSAnZicpCi0gICAgICAgICAgICAgICAgICAgIHRvICs9IDEw
ICsgYyAtICdhJzsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChmYWlsZWQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KGZyb20gPD0gdG8pCi0gICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NVbmljb2RlUmFuZ2VW
YWx1ZTo6Y3JlYXRlKGZyb20sIHRvKSk7Ci0gICAgfQotICAgIGlmIChmYWlsZWQgfHwgIXZhbHVl
cy0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhZGRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVVuaWNvZGVSYW5nZSwgV1RGTW92ZSh2YWx1ZXMpLCBtX2ltcG9ydGFudCk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLS8vIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdo
aWNoIGZvcm0gYSB2YWxpZCBkb3VibGUKLS8vIGFuZCBhcmUgdGVybWluYXRlZCBieSB0aGUgZ2l2
ZW4gdGVybWluYXRvciBjaGFyYWN0ZXIKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
Pgotc3RhdGljIGludCBjaGVja0ZvclZhbGlkRG91YmxlKGNvbnN0IENoYXJhY3RlclR5cGUqIHN0
cmluZywgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBjb25zdCBjaGFyIHRlcm1pbmF0b3IpCi17
Ci0gICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0cmluZzsKLSAgICBpZiAobGVuZ3RoIDwgMSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBib29sIGRlY2ltYWxNYXJrU2VlbiA9IGZhbHNlOwotICAg
IGludCBwcm9jZXNzZWRMZW5ndGggPSAwOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewotICAgICAgICBpZiAoc3RyaW5nW2ldID09IHRlcm1pbmF0b3IpIHsKLSAgICAg
ICAgICAgIHByb2Nlc3NlZExlbmd0aCA9IGk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdChzdHJpbmdbaV0pKSB7Ci0gICAgICAgICAgICBp
ZiAoIWRlY2ltYWxNYXJrU2VlbiAmJiBzdHJpbmdbaV0gPT0gJy4nKQotICAgICAgICAgICAgICAg
IGRlY2ltYWxNYXJrU2VlbiA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZGVjaW1hbE1hcmtTZWVu
ICYmIHByb2Nlc3NlZExlbmd0aCA9PSAxKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVy
biBwcm9jZXNzZWRMZW5ndGg7Ci19Ci0KLS8vIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0
ZXJzIGNvbnN1bWVkIGZvciBwYXJzaW5nIGEgdmFsaWQgZG91YmxlCi0vLyB0ZXJtaW5hdGVkIGJ5
IHRoZSBnaXZlbiB0ZXJtaW5hdG9yIGNoYXJhY3RlcgotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+Ci1zdGF0aWMgaW50IHBhcnNlRG91YmxlKGNvbnN0IENoYXJhY3RlclR5cGUqIHN0
cmluZywgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBjb25zdCBjaGFyIHRlcm1pbmF0b3IsIGRv
dWJsZSYgdmFsdWUpCi17Ci0gICAgaW50IGxlbmd0aCA9IGNoZWNrRm9yVmFsaWREb3VibGUoc3Ry
aW5nLCBlbmQsIHRlcm1pbmF0b3IpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIGludCBwb3NpdGlvbiA9IDA7Ci0gICAgZG91YmxlIGxvY2FsVmFsdWUgPSAwOwot
Ci0gICAgLy8gVGhlIGNvbnN1bWVkIGNoYXJhY3RlcnMgaGVyZSBhcmUgZ3VhcmFudGVlZCB0byBi
ZQotICAgIC8vIEFTQ0lJIGRpZ2l0cyB3aXRoIG9yIHdpdGhvdXQgYSBkZWNpbWFsIG1hcmsKLSAg
ICBmb3IgKDsgcG9zaXRpb24gPCBsZW5ndGg7ICsrcG9zaXRpb24pIHsKLSAgICAgICAgaWYgKHN0
cmluZ1twb3NpdGlvbl0gPT0gJy4nKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGxvY2Fs
VmFsdWUgPSBsb2NhbFZhbHVlICogMTAgKyBzdHJpbmdbcG9zaXRpb25dIC0gJzAnOwotICAgIH0K
LQotICAgIGlmICgrK3Bvc2l0aW9uID09IGxlbmd0aCkgewotICAgICAgICB2YWx1ZSA9IGxvY2Fs
VmFsdWU7Ci0gICAgICAgIHJldHVybiBsZW5ndGg7Ci0gICAgfQotCi0gICAgZG91YmxlIGZyYWN0
aW9uID0gMDsKLSAgICBkb3VibGUgc2NhbGUgPSAxOwotCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwg
bGVuZ3RoICYmIHNjYWxlIDwgTUFYX1NDQUxFKSB7Ci0gICAgICAgIGZyYWN0aW9uID0gZnJhY3Rp
b24gKiAxMCArIHN0cmluZ1twb3NpdGlvbisrXSAtICcwJzsKLSAgICAgICAgc2NhbGUgKj0gMTA7
Ci0gICAgfQotCi0gICAgdmFsdWUgPSBsb2NhbFZhbHVlICsgZnJhY3Rpb24gLyBzY2FsZTsKLSAg
ICByZXR1cm4gbGVuZ3RoOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
LXN0YXRpYyBib29sIHBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY29uc3QgQ2hhcmFjdGVyVHlw
ZSomIHN0cmluZywgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBjb25zdCBjaGFyIHRlcm1pbmF0
b3IsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMmIGV4cGVjdCwgaW50JiB2YWx1ZSkKLXsK
LSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjdXJyZW50ID0gc3RyaW5nOwotICAgIGRvdWJsZSBs
b2NhbFZhbHVlID0gMDsKLSAgICBib29sIG5lZ2F0aXZlID0gZmFsc2U7Ci0gICAgd2hpbGUgKGN1
cnJlbnQgIT0gZW5kICYmIGlzSFRNTFNwYWNlKCpjdXJyZW50KSkKLSAgICAgICAgY3VycmVudCsr
OwotICAgIGlmIChjdXJyZW50ICE9IGVuZCAmJiAqY3VycmVudCA9PSAnLScpIHsKLSAgICAgICAg
bmVnYXRpdmUgPSB0cnVlOwotICAgICAgICBjdXJyZW50Kys7Ci0gICAgfQotICAgIGlmIChjdXJy
ZW50ID09IGVuZCB8fCAhaXNBU0NJSURpZ2l0KCpjdXJyZW50KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHdoaWxlIChjdXJyZW50ICE9IGVuZCAmJiBpc0FTQ0lJRGlnaXQoKmN1cnJlbnQp
KSB7Ci0gICAgICAgIGRvdWJsZSBuZXdWYWx1ZSA9IGxvY2FsVmFsdWUgKiAxMCArICpjdXJyZW50
KysgLSAnMCc7Ci0gICAgICAgIGlmIChuZXdWYWx1ZSA+PSAyNTUpIHsKLSAgICAgICAgICAgIC8v
IENsYW1wIHZhbHVlcyBhdCAyNTUuCi0gICAgICAgICAgICBsb2NhbFZhbHVlID0gMjU1OwotICAg
ICAgICAgICAgd2hpbGUgKGN1cnJlbnQgIT0gZW5kICYmIGlzQVNDSUlEaWdpdCgqY3VycmVudCkp
Ci0gICAgICAgICAgICAgICAgKytjdXJyZW50OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgbG9jYWxWYWx1ZSA9IG5ld1ZhbHVlOwotICAgIH0KLQotICAgIGlmIChjdXJy
ZW50ID09IGVuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGV4cGVjdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiAmJiAoKmN1cnJlbnQgPT0gJy4nIHx8ICpjdXJy
ZW50ID09ICclJykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgqY3VycmVudCA9
PSAnLicpIHsKLSAgICAgICAgLy8gV2UgYWxyZWFkeSBwYXJzZWQgdGhlIGludGVncmFsIHBhcnQs
IHRyeSB0byBwYXJzZQotICAgICAgICAvLyB0aGUgZnJhY3Rpb24gcGFydCBvZiB0aGUgcGVyY2Vu
dGFnZSB2YWx1ZS4KLSAgICAgICAgZG91YmxlIHBlcmNlbnRhZ2UgPSAwOwotICAgICAgICBpbnQg
bnVtQ2hhcmFjdGVyc1BhcnNlZCA9IHBhcnNlRG91YmxlKGN1cnJlbnQsIGVuZCwgJyUnLCBwZXJj
ZW50YWdlKTsKLSAgICAgICAgaWYgKCFudW1DaGFyYWN0ZXJzUGFyc2VkKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBjdXJyZW50ICs9IG51bUNoYXJhY3RlcnNQYXJzZWQ7Ci0g
ICAgICAgIGlmICgqY3VycmVudCAhPSAnJScpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGxvY2FsVmFsdWUgKz0gcGVyY2VudGFnZTsKLSAgICB9Ci0KLSAgICBpZiAoZXhwZWN0
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSAmJiAqY3VycmVudCAhPSAnJScp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgqY3VycmVudCA9PSAnJScpIHsKLSAg
ICAgICAgZXhwZWN0ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFOwotICAgICAg
ICBsb2NhbFZhbHVlID0gbG9jYWxWYWx1ZSAvIDEwMC4wICogMjU2LjA7Ci0gICAgICAgIC8vIENs
YW1wIHZhbHVlcyBhdCAyNTUgZm9yIHBlcmNlbnRhZ2VzIG92ZXIgMTAwJQotICAgICAgICBpZiAo
bG9jYWxWYWx1ZSA+IDI1NSkKLSAgICAgICAgICAgIGxvY2FsVmFsdWUgPSAyNTU7Ci0gICAgICAg
IGN1cnJlbnQrKzsKLSAgICB9IGVsc2UKLSAgICAgICAgZXhwZWN0ID0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVI7Ci0KLSAgICB3aGlsZSAoY3VycmVudCAhPSBlbmQgJiYgaXNIVE1MU3Bh
Y2UoKmN1cnJlbnQpKQotICAgICAgICBjdXJyZW50Kys7Ci0gICAgaWYgKGN1cnJlbnQgPT0gZW5k
IHx8ICpjdXJyZW50KysgIT0gdGVybWluYXRvcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IC8vIENsYW1wIG5lZ2F0aXZlIHZhbHVlcyBhdCB6ZXJvLgotICAgIHZhbHVlID0gbmVnYXRpdmUg
PyAwIDogc3RhdGljX2Nhc3Q8aW50Pihsb2NhbFZhbHVlKTsKLSAgICBzdHJpbmcgPSBjdXJyZW50
OwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1RlbnRoQWxwaGEoY29uc3QgQ2hhcmFjdGVyVHlwZSog
c3RyaW5nLCBjb25zdCBpbnQgbGVuZ3RoKQotewotICAgIC8vICIwLlgiCi0gICAgaWYgKGxlbmd0
aCA9PSAzICYmIHN0cmluZ1swXSA9PSAnMCcgJiYgc3RyaW5nWzFdID09ICcuJyAmJiBpc0FTQ0lJ
RGlnaXQoc3RyaW5nWzJdKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyAiLlgiCi0g
ICAgaWYgKGxlbmd0aCA9PSAyICYmIHN0cmluZ1swXSA9PSAnLicgJiYgaXNBU0NJSURpZ2l0KHN0
cmluZ1sxXSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBw
YXJzZUFscGhhVmFsdWUoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHN0cmluZywgY29uc3QgQ2hhcmFj
dGVyVHlwZSogZW5kLCBjb25zdCBjaGFyIHRlcm1pbmF0b3IsIGludCYgdmFsdWUpCi17Ci0gICAg
d2hpbGUgKHN0cmluZyAhPSBlbmQgJiYgaXNIVE1MU3BhY2UoKnN0cmluZykpCi0gICAgICAgICsr
c3RyaW5nOwotCi0gICAgYm9vbCBuZWdhdGl2ZSA9IGZhbHNlOwotCi0gICAgaWYgKHN0cmluZyAh
PSBlbmQgJiYgKnN0cmluZyA9PSAnLScpIHsKLSAgICAgICAgbmVnYXRpdmUgPSB0cnVlOwotICAg
ICAgICArK3N0cmluZzsKLSAgICB9Ci0KLSAgICB2YWx1ZSA9IDA7Ci0KLSAgICBpbnQgbGVuZ3Ro
ID0gZW5kIC0gc3RyaW5nOwotICAgIGlmIChsZW5ndGggPCAyKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoc3RyaW5nW2xlbmd0aCAtIDFdICE9IHRlcm1pbmF0b3IgfHwgIWlzQVND
SUlEaWdpdChzdHJpbmdbbGVuZ3RoIC0gMl0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoc3RyaW5nWzBdICE9ICcwJyAmJiBzdHJpbmdbMF0gIT0gJzEnICYmIHN0cmluZ1swXSAh
PSAnLicpIHsKLSAgICAgICAgaWYgKGNoZWNrRm9yVmFsaWREb3VibGUoc3RyaW5nLCBlbmQsIHRl
cm1pbmF0b3IpKSB7Ci0gICAgICAgICAgICB2YWx1ZSA9IG5lZ2F0aXZlID8gMCA6IDI1NTsKLSAg
ICAgICAgICAgIHN0cmluZyA9IGVuZDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobGVuZ3RoID09IDIg
JiYgc3RyaW5nWzBdICE9ICcuJykgewotICAgICAgICB2YWx1ZSA9ICFuZWdhdGl2ZSAmJiBzdHJp
bmdbMF0gPT0gJzEnID8gMjU1IDogMDsKLSAgICAgICAgc3RyaW5nID0gZW5kOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoaXNUZW50aEFscGhhKHN0cmluZywgbGVuZ3Ro
IC0gMSkpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCB0ZW50aEFscGhhVmFsdWVzW10gPSB7
IDAsIDI1LCA1MSwgNzYsIDEwMiwgMTI3LCAxNTMsIDE3OSwgMjA0LCAyMzAgfTsKLSAgICAgICAg
dmFsdWUgPSBuZWdhdGl2ZSA/IDAgOiB0ZW50aEFscGhhVmFsdWVzW3N0cmluZ1tsZW5ndGggLSAy
XSAtICcwJ107Ci0gICAgICAgIHN0cmluZyA9IGVuZDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgZG91YmxlIGFscGhhID0gMDsKLSAgICBpZiAoIXBhcnNlRG91YmxlKHN0cmlu
ZywgZW5kLCB0ZXJtaW5hdG9yLCBhbHBoYSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB2
YWx1ZSA9IG5lZ2F0aXZlID8gMCA6IHN0YXRpY19jYXN0PGludD4oYWxwaGEgKiBuZXh0YWZ0ZXIo
MjU2LjAsIDAuMCkpOwotICAgIHN0cmluZyA9IGVuZDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgbWln
aHRCZVJHQkEoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
KQotewotICAgIGlmIChsZW5ndGggPCA1KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0
dXJuIGNoYXJhY3RlcnNbNF0gPT0gJygnCi0gICAgICAgICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNz
RXF1YWwoY2hhcmFjdGVyc1swXSwgJ3InKQotICAgICAgICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVz
c0VxdWFsKGNoYXJhY3RlcnNbMV0sICdnJykKLSAgICAgICAgJiYgaXNBU0NJSUFscGhhQ2FzZWxl
c3NFcXVhbChjaGFyYWN0ZXJzWzJdLCAnYicpCi0gICAgICAgICYmIGlzQVNDSUlBbHBoYUNhc2Vs
ZXNzRXF1YWwoY2hhcmFjdGVyc1szXSwgJ2EnKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgbWlnaHRCZVJHQihjb25zdCBDaGFyYWN0
ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgaWYgKGxlbmd0aCA8
IDQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1szXSA9PSAn
KCcKLSAgICAgICAgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXJzWzBdLCAn
cicpCi0gICAgICAgICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1sxXSwg
J2cnKQotICAgICAgICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKGNoYXJhY3RlcnNbMl0s
ICdiJyk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlu
bGluZSBib29sIGZhc3RQYXJzZUNvbG9ySW50ZXJuYWwoUkdCQTMyJiByZ2IsIGNvbnN0IENoYXJh
Y3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCAsIGJvb2wgc3RyaWN0KQotewot
ICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgZXhwZWN0ID0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19VTktOT1dOOwotICAgIAotICAgIGlmICghc3RyaWN0ICYmIGxlbmd0aCA+PSAzKSB7
Ci0gICAgICAgIGlmIChjaGFyYWN0ZXJzWzBdID09ICcjJykgewotICAgICAgICAgICAgaWYgKENv
bG9yOjpwYXJzZUhleENvbG9yKGNoYXJhY3RlcnMgKyAxLCBsZW5ndGggLSAxLCByZ2IpKQotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
aWYgKENvbG9yOjpwYXJzZUhleENvbG9yKGNoYXJhY3RlcnMsIGxlbmd0aCwgcmdiKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRyeSBy
Z2JhKCkgc3ludGF4LgotICAgIGlmIChtaWdodEJlUkdCQShjaGFyYWN0ZXJzLCBsZW5ndGgpKSB7
Ci0gICAgICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGN1cnJlbnQgPSBjaGFyYWN0ZXJzICsgNTsK
LSAgICAgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsK
LSAgICAgICAgaW50IHJlZDsKLSAgICAgICAgaW50IGdyZWVuOwotICAgICAgICBpbnQgYmx1ZTsK
LSAgICAgICAgaW50IGFscGhhOwotICAgICAgICAKLSAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50
T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVuZCwgJywnLCBleHBlY3QsIHJlZCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShj
dXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCBncmVlbikpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGlmICghcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQs
ICcsJywgZXhwZWN0LCBibHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aWYgKCFwYXJzZUFscGhhVmFsdWUoY3VycmVudCwgZW5kLCAnKScsIGFscGhhKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGN1cnJlbnQgIT0gZW5kKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZ2IgPSBtYWtlUkdCQShyZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIFRyeSByZ2Io
KSBzeW50YXguCi0gICAgaWYgKG1pZ2h0QmVSR0IoY2hhcmFjdGVycywgbGVuZ3RoKSkgewotICAg
ICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjdXJyZW50ID0gY2hhcmFjdGVycyArIDQ7Ci0gICAg
ICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7Ci0gICAg
ICAgIGludCByZWQ7Ci0gICAgICAgIGludCBncmVlbjsKLSAgICAgICAgaW50IGJsdWU7Ci0gICAg
ICAgIGlmICghcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhw
ZWN0LCByZWQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXBhcnNl
Q29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgZ3JlZW4pKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBl
cmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnKScsIGV4cGVjdCwgYmx1ZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChjdXJyZW50ICE9IGVuZCkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgcmdiID0gbWFrZVJHQihyZWQsIGdyZWVuLCBibHVlKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlPgotYm9vbCBDU1NQYXJzZXI6OmZhc3RQYXJzZUNvbG9y
KFJHQkEzMiYgcmdiLCBjb25zdCBTdHJpbmdUeXBlJiBuYW1lLCBib29sIHN0cmljdCkKLXsKLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSBuYW1lLmxlbmd0aCgpOwotICAgIGJvb2wgcGFyc2VSZXN1bHQ7
Ci0KLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG5h
bWUuaXM4Qml0KCkpCi0gICAgICAgIHBhcnNlUmVzdWx0ID0gZmFzdFBhcnNlQ29sb3JJbnRlcm5h
bChyZ2IsIG5hbWUuY2hhcmFjdGVyczgoKSwgbGVuZ3RoLCBzdHJpY3QpOwotICAgIGVsc2UKLSAg
ICAgICAgcGFyc2VSZXN1bHQgPSBmYXN0UGFyc2VDb2xvckludGVybmFsKHJnYiwgbmFtZS5jaGFy
YWN0ZXJzMTYoKSwgbGVuZ3RoLCBzdHJpY3QpOwotCi0gICAgaWYgKHBhcnNlUmVzdWx0KQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFRyeSBuYW1lZCBjb2xvcnMuCi0gICAgQ29sb3Ig
dGM7Ci0gICAgdGMuc2V0TmFtZWRDb2xvcihuYW1lKTsKLSAgICBpZiAodGMuaXNWYWxpZCgpKSB7
Ci0gICAgICAgIHJnYiA9IHRjLnJnYigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotICAgIAotaW5saW5lIGRvdWJsZSBDU1NQYXJzZXI6OnBhcnNl
ZERvdWJsZShWYWx1ZVdpdGhDYWxjdWxhdGlvbiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24pCi17Ci0g
ICAgcmV0dXJuIHZhbHVlV2l0aENhbGN1bGF0aW9uLmNhbGN1bGF0aW9uKCkgPyB2YWx1ZVdpdGhD
YWxjdWxhdGlvbi5jYWxjdWxhdGlvbigpLT5kb3VibGVWYWx1ZSgpIDogdmFsdWVXaXRoQ2FsY3Vs
YXRpb24udmFsdWUoKS5mVmFsdWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjppc0NhbGN1bGF0aW9u
KENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdmFsdWUudW5pdCA9PSBDU1NQ
YXJzZXJWYWx1ZTo6RnVuY3Rpb24KLSAgICAgICAgJiYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiY2FsYygiKQotICAgICAgICAgICAgfHwgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICItd2Via2l0
LWNhbGMoIikpOwotfQotCi1pbmxpbmUgaW50IENTU1BhcnNlcjo6Y29sb3JJbnRGcm9tVmFsdWUo
VmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1bGF0aW9uKQotewotICAgIGJvb2wg
aXNQZXJjZW50OwotICAgIAotICAgIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi5jYWxjdWxhdGlv
bigpKQotICAgICAgICBpc1BlcmNlbnQgPSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi5jYWxjdWxhdGlv
bigpLT5jYXRlZ29yeSgpID09IENhbGNQZXJjZW50OwotICAgIGVsc2UKLSAgICAgICAgaXNQZXJj
ZW50ID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUEVSQ0VOVEFHRTsKLQotICAgIGNvbnN0IGRvdWJsZSBkb3VibGVWYWx1ZSA9IHBh
cnNlZERvdWJsZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgCi0gICAgaWYgKGRvdWJsZVZh
bHVlIDw9IDAuMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoaXNQZXJjZW50KSB7Ci0g
ICAgICAgIGlmIChkb3VibGVWYWx1ZSA+PSAxMDAuMCkKLSAgICAgICAgICAgIHJldHVybiAyNTU7
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGRvdWJsZVZhbHVlICogMjU2LjAgLyAx
MDAuMCk7Ci0gICAgfQotCi0gICAgaWYgKGRvdWJsZVZhbHVlID49IDI1NS4wKQotICAgICAgICBy
ZXR1cm4gMjU1OwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oZG91YmxlVmFsdWUpOwot
fQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VDb2xvclBhcmFtZXRlcnMoQ1NTUGFyc2VyVmFsdWUm
IHZhbHVlLCBpbnQqIGNvbG9yQXJyYXksIGJvb2wgcGFyc2VBbHBoYSkKLXsKLSAgICBDU1NQYXJz
ZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsKLSAgICBWYWx1
ZVdpdGhDYWxjdWxhdGlvbiBmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLT5jdXJy
ZW50KCkpOwotICAgIFVuaXRzIHVuaXRUeXBlID0gRlVua25vd247Ci0gICAgLy8gR2V0IHRoZSBm
aXJzdCB2YWx1ZSBhbmQgaXRzIHR5cGUKLSAgICBpZiAodmFsaWRhdGVVbml0KGZpcnN0QXJndW1l
bnRXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyLCBDU1NTdHJpY3RNb2RlKSkKLSAgICAgICAgdW5p
dFR5cGUgPSBGSW50ZWdlcjsKLSAgICBlbHNlIGlmICh2YWxpZGF0ZVVuaXQoZmlyc3RBcmd1bWVu
dFdpdGhDYWxjdWxhdGlvbiwgRlBlcmNlbnQsIENTU1N0cmljdE1vZGUpKQotICAgICAgICB1bml0
VHlwZSA9IEZQZXJjZW50OwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIGNvbG9yQXJyYXlbMF0gPSBjb2xvckludEZyb21WYWx1ZShmaXJzdEFyZ3VtZW50V2l0aENh
bGN1bGF0aW9uKTsKLSAgICBmb3IgKGludCBpID0gMTsgaSA8IDM7IGkrKykgewotICAgICAgICBD
U1NQYXJzZXJWYWx1ZSYgb3BlcmF0b3JBcmd1bWVudCA9ICphcmdzLT5uZXh0KCk7Ci0gICAgICAg
IGlmIChvcGVyYXRvckFyZ3VtZW50LnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYm
IG9wZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9ICcsJykKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24o
KmFyZ3MtPm5leHQoKSk7Ci0gICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENh
bGN1bGF0aW9uLCB1bml0VHlwZSwgQ1NTU3RyaWN0TW9kZSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGNvbG9yQXJyYXlbaV0gPSBjb2xvckludEZyb21WYWx1ZShhcmd1bWVu
dFdpdGhDYWxjdWxhdGlvbik7Ci0gICAgfQotICAgIGlmIChwYXJzZUFscGhhKSB7Ci0gICAgICAg
IENTU1BhcnNlclZhbHVlJiBvcGVyYXRvckFyZ3VtZW50ID0gKmFyZ3MtPm5leHQoKTsKLSAgICAg
ICAgaWYgKG9wZXJhdG9yQXJndW1lbnQudW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3Ig
JiYgb3BlcmF0b3JBcmd1bWVudC5pVmFsdWUgIT0gJywnKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlv
bigqYXJncy0+bmV4dCgpKTsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRo
Q2FsY3VsYXRpb24sIEZOdW1iZXIsIENTU1N0cmljdE1vZGUpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSBwYXJzZWREb3VibGUoYXJndW1l
bnRXaXRoQ2FsY3VsYXRpb24pOwotICAgICAgICAvLyBDb252ZXJ0IHRoZSBmbG9hdGluZyBwb2lu
dGVyIG51bWJlciBvZiBhbHBoYSB0byBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBbMCwgMjU2KSwK
LSAgICAgICAgLy8gd2l0aCBhbiBlcXVhbCBkaXN0cmlidXRpb24gYWNyb3NzIGFsbCAyNTYgdmFs
dWVzLgotICAgICAgICBjb2xvckFycmF5WzNdID0gc3RhdGljX2Nhc3Q8aW50PihzdGQ6Om1heDxk
b3VibGU+KDAsIHN0ZDo6bWluPGRvdWJsZT4oMSwgZG91YmxlVmFsdWUpKSAqIG5leHRhZnRlcigy
NTYuMCwgMC4wKSk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBUaGUgQ1NTMyBz
cGVjaWZpY2F0aW9uIGRlZmluZXMgdGhlIGZvcm1hdCBvZiBhIEhTTCBjb2xvciBhcwotLy8gaHNs
KDxudW1iZXI+LCA8cGVyY2VudD4sIDxwZXJjZW50PikKLS8vIGFuZCB3aXRoIGFscGhhLCB0aGUg
Zm9ybWF0IGlzCi0vLyBoc2xhKDxudW1iZXI+LCA8cGVyY2VudD4sIDxwZXJjZW50PiwgPG51bWJl
cj4pCi0vLyBUaGUgZmlyc3QgdmFsdWUsIEhVRSwgaXMgaW4gYW4gYW5nbGUgd2l0aCBhIHZhbHVl
IGJldHdlZW4gMCBhbmQgMzYwCi1ib29sIENTU1BhcnNlcjo6cGFyc2VIU0xQYXJhbWV0ZXJzKENT
U1BhcnNlclZhbHVlJiB2YWx1ZSwgZG91YmxlKiBjb2xvckFycmF5LCBib29sIHBhcnNlQWxwaGEp
Ci17Ci0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUuZnVuY3Rpb24tPmFyZ3Mu
Z2V0KCk7Ci0gICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxh
dGlvbigqYXJncy0+Y3VycmVudCgpKTsKLSAgICAvLyBHZXQgdGhlIGZpcnN0IHZhbHVlCi0gICAg
aWYgKCF2YWxpZGF0ZVVuaXQoZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciwg
Q1NTU3RyaWN0TW9kZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBub3JtYWxpemUg
dGhlIEh1ZSB2YWx1ZSBhbmQgY2hhbmdlIGl0IHRvIGJlIGJldHdlZW4gMCBhbmQgMS4wCi0gICAg
Y29sb3JBcnJheVswXSA9ICgoKHN0YXRpY19jYXN0PGludD4ocGFyc2VkRG91YmxlKGZpcnN0QXJn
dW1lbnRXaXRoQ2FsY3VsYXRpb24pKSAlIDM2MCkgKyAzNjApICUgMzYwKSAvIDM2MC4wOwotICAg
IGZvciAoaW50IGkgPSAxOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgIENTU1BhcnNlclZhbHVlJiBv
cGVyYXRvckFyZ3VtZW50ID0gKmFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKG9wZXJhdG9yQXJn
dW1lbnQudW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgb3BlcmF0b3JBcmd1bWVu
dC5pVmFsdWUgIT0gJywnKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBWYWx1
ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy0+bmV4dCgpKTsK
LSAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZQZXJj
ZW50LCBDU1NTdHJpY3RNb2RlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Y29sb3JBcnJheVtpXSA9IHN0ZDo6bWF4PGRvdWJsZT4oMCwgc3RkOjptaW48ZG91YmxlPigxMDAs
IHBhcnNlZERvdWJsZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpKSAvIDEwMC4wOyAvLyBuZWVk
cyB0byBiZSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuMAotICAgIH0KLSAgICBpZiAocGFyc2VBbHBo
YSkgewotICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgb3BlcmF0b3JBcmd1bWVudCA9ICphcmdzLT5u
ZXh0KCk7Ci0gICAgICAgIGlmIChvcGVyYXRvckFyZ3VtZW50LnVuaXQgIT0gQ1NTUGFyc2VyVmFs
dWU6Ok9wZXJhdG9yICYmIG9wZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9ICcsJykKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRX
aXRoQ2FsY3VsYXRpb24oKmFyZ3MtPm5leHQoKSk7Ci0gICAgICAgIGlmICghdmFsaWRhdGVVbml0
KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2RlKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY29sb3JBcnJheVszXSA9IHN0ZDo6bWF4PGRv
dWJsZT4oMCwgc3RkOjptaW48ZG91YmxlPigxLCBwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2Fs
Y3VsYXRpb24pKSk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1SZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VDb2xvcihDU1NQYXJzZXJWYWx1ZSogdmFsdWUp
Ci17Ci0gICAgUkdCQTMyIGMgPSBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0gICAgaWYgKCFwYXJzZUNv
bG9yRnJvbVZhbHVlKHZhbHVlID8gKnZhbHVlIDogKm1fdmFsdWVMaXN0LT5jdXJyZW50KCksIGMp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVDb2xvclZhbHVlKGMpOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VD
b2xvckZyb21WYWx1ZShDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFJHQkEzMiYgYykKLXsKLSAgICBp
ZiAoaW5RdWlya3NNb2RlKCkgJiYgdmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X05VTUJFUgotICAgICAgICAmJiB2YWx1ZS5mVmFsdWUgPj0gMC4gJiYgdmFsdWUuZlZhbHVlIDwg
MTAwMDAwMC4pIHsKLSAgICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZzo6Zm9ybWF0KCIlMDZkIiwg
c3RhdGljX2Nhc3Q8aW50PigodmFsdWUuZlZhbHVlKy41KSkpOwotICAgICAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgYmUgc3RyaWN0IHBhcnNpbmcgZm9yIFNWRyBhcyB3ZWxsLgotICAgICAgICBp
ZiAoIWZhc3RQYXJzZUNvbG9yKGMsIHN0ciwgaW5TdHJpY3RNb2RlKCkpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSBpZiAodmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BBUlNFUl9IRVhDT0xPUgotICAgICAgICB8fCB2YWx1ZS51bml0ID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQKLSAgICAgICAgfHwgKGluUXVpcmtzTW9kZSgpICYmIHZh
bHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ESU1FTlNJT04pKSB7Ci0gICAgICAg
IGlmICghZmFzdFBhcnNlQ29sb3IoYywgdmFsdWUuc3RyaW5nLCBpblN0cmljdE1vZGUoKSAmJiB2
YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSBpZiAodmFsdWUudW5pdCA9PSBDU1NQYXJzZXJWYWx1
ZTo6RnVuY3Rpb24KLSAgICAgICAgJiYgdmFsdWUuZnVuY3Rpb24tPmFyZ3MKLSAgICAgICAgJiYg
dmFsdWUuZnVuY3Rpb24tPmFyZ3MtPnNpemUoKSA9PSA1IC8qIHJnYiArIHR3byBjb21tYXMgKi8K
LSAgICAgICAgJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24t
Pm5hbWUsICJyZ2IoIikpIHsKLSAgICAgICAgaW50IGNvbG9yVmFsdWVzWzNdOwotICAgICAgICBp
ZiAoIXBhcnNlQ29sb3JQYXJhbWV0ZXJzKHZhbHVlLCBjb2xvclZhbHVlcywgZmFsc2UpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjID0gbWFrZVJHQihjb2xvclZhbHVlc1sw
XSwgY29sb3JWYWx1ZXNbMV0sIGNvbG9yVmFsdWVzWzJdKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAodmFsdWUudW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24KLSAgICAgICAgICAg
ICYmIHZhbHVlLmZ1bmN0aW9uLT5hcmdzCi0gICAgICAgICAgICAmJiB2YWx1ZS5mdW5jdGlvbi0+
YXJncy0+c2l6ZSgpID09IDcgLyogcmdiYSArIHRocmVlIGNvbW1hcyAqLwotICAgICAgICAgICAg
JiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJy
Z2JhKCIpKSB7Ci0gICAgICAgICAgICBpbnQgY29sb3JWYWx1ZXNbNF07Ci0gICAgICAgICAgICBp
ZiAoIXBhcnNlQ29sb3JQYXJhbWV0ZXJzKHZhbHVlLCBjb2xvclZhbHVlcywgdHJ1ZSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYyA9IG1ha2VSR0JBKGNvbG9y
VmFsdWVzWzBdLCBjb2xvclZhbHVlc1sxXSwgY29sb3JWYWx1ZXNbMl0sIGNvbG9yVmFsdWVzWzNd
KTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS51bml0ID09IENTU1BhcnNlclZhbHVlOjpGdW5j
dGlvbgotICAgICAgICAgICAgJiYgdmFsdWUuZnVuY3Rpb24tPmFyZ3MKLSAgICAgICAgICAgICYm
IHZhbHVlLmZ1bmN0aW9uLT5hcmdzLT5zaXplKCkgPT0gNSAvKiBoc2wgKyB0d28gY29tbWFzICov
Ci0gICAgICAgICAgICAmJiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5j
dGlvbi0+bmFtZSwgImhzbCgiKSkgewotICAgICAgICAgICAgZG91YmxlIGNvbG9yVmFsdWVzWzNd
OwotICAgICAgICAgICAgaWYgKCFwYXJzZUhTTFBhcmFtZXRlcnModmFsdWUsIGNvbG9yVmFsdWVz
LCBmYWxzZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYyA9
IG1ha2VSR0JBRnJvbUhTTEEoY29sb3JWYWx1ZXNbMF0sIGNvbG9yVmFsdWVzWzFdLCBjb2xvclZh
bHVlc1syXSwgMS4wKTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS51bml0ID09IENTU1BhcnNl
clZhbHVlOjpGdW5jdGlvbgotICAgICAgICAgICAgJiYgdmFsdWUuZnVuY3Rpb24tPmFyZ3MKLSAg
ICAgICAgICAgICYmIHZhbHVlLmZ1bmN0aW9uLT5hcmdzLT5zaXplKCkgPT0gNyAvKiBoc2xhICsg
dGhyZWUgY29tbWFzICovCi0gICAgICAgICAgICAmJiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgImhzbGEoIikpIHsKLSAgICAgICAgICAgIGRvdWJs
ZSBjb2xvclZhbHVlc1s0XTsKLSAgICAgICAgICAgIGlmICghcGFyc2VIU0xQYXJhbWV0ZXJzKHZh
bHVlLCBjb2xvclZhbHVlcywgdHJ1ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgYyA9IG1ha2VSR0JBRnJvbUhTTEEoY29sb3JWYWx1ZXNbMF0sIGNvbG9yVmFs
dWVzWzFdLCBjb2xvclZhbHVlc1syXSwgY29sb3JWYWx1ZXNbM10pOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotLy8gVGhpcyBjbGFzcyB0cmFja3MgcGFyc2luZyBzdGF0ZSBmb3Igc2hhZG93IHZhbHVlcy4g
IElmIGl0IGdvZXMgb3V0IG9mIHNjb3BlIChlLmcuLCBkdWUgdG8gYW4gZWFybHkgcmV0dXJuKQot
Ly8gd2l0aG91dCB0aGUgYWxsb3dCcmVhayBiaXQgYmVpbmcgc2V0LCB0aGVuIGl0IHdpbGwgY2xl
YW4gdXAgYWxsIG9mIHRoZSBvYmplY3RzIGFuZCBkZXN0cm95IHRoZW0uCi1zdHJ1Y3QgU2hhZG93
UGFyc2VDb250ZXh0IHsKLSAgICBTaGFkb3dQYXJzZUNvbnRleHQoQ1NTUHJvcGVydHlJRCBwcm9w
LCBDU1NQYXJzZXImIHBhcnNlcikKLSAgICAgICAgOiBwcm9wZXJ0eShwcm9wKQotICAgICAgICAs
IG1fcGFyc2VyKHBhcnNlcikKLSAgICAgICAgLCBhbGxvd1godHJ1ZSkKLSAgICAgICAgLCBhbGxv
d1koZmFsc2UpCi0gICAgICAgICwgYWxsb3dCbHVyKGZhbHNlKQotICAgICAgICAsIGFsbG93U3By
ZWFkKGZhbHNlKQotICAgICAgICAsIGFsbG93Q29sb3IodHJ1ZSkKLSAgICAgICAgLCBhbGxvd1N0
eWxlKHByb3AgPT0gQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3cgfHwgcHJvcCA9PSBDU1NQcm9w
ZXJ0eUJveFNoYWRvdykKLSAgICAgICAgLCBhbGxvd0JyZWFrKHRydWUpCi0gICAgewotICAgIH0K
LQotICAgIGJvb2wgYWxsb3dMZW5ndGgoKSB7IHJldHVybiBhbGxvd1ggfHwgYWxsb3dZIHx8IGFs
bG93Qmx1ciB8fCBhbGxvd1NwcmVhZDsgfQotCi0gICAgdm9pZCBjb21taXRWYWx1ZSgpCi0gICAg
ewotICAgICAgICAvLyBIYW5kbGUgdGhlICwsIGNhc2UgZ3JhY2VmdWxseSBieSBkb2luZyBub3Ro
aW5nLgotICAgICAgICBpZiAoeCB8fCB5IHx8IGJsdXIgfHwgc3ByZWFkIHx8IGNvbG9yIHx8IHN0
eWxlKSB7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlcykKLSAgICAgICAgICAgICAgICB2YWx1ZXMg
PSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0KLSAgICAgICAgICAgIC8v
IENvbnN0cnVjdCB0aGUgY3VycmVudCBzaGFkb3cgdmFsdWUgYW5kIGFkZCBpdCB0byB0aGUgbGlz
dC4KLSAgICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1NoYWRvd1ZhbHVlOjpjcmVhdGUoV1RG
TW92ZSh4KSwgV1RGTW92ZSh5KSwgV1RGTW92ZShibHVyKSwgV1RGTW92ZShzcHJlYWQpLCBXVEZN
b3ZlKHN0eWxlKSwgV1RGTW92ZShjb2xvcikpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5v
dyByZXNldCBmb3IgdGhlIG5leHQgc2hhZG93IHZhbHVlLgotICAgICAgICB4ID0gbnVsbHB0cjsK
LSAgICAgICAgeSA9IG51bGxwdHI7Ci0gICAgICAgIGJsdXIgPSBudWxscHRyOwotICAgICAgICBz
cHJlYWQgPSBudWxscHRyOwotICAgICAgICBzdHlsZSA9IG51bGxwdHI7Ci0gICAgICAgIGNvbG9y
ID0gbnVsbHB0cjsKLQotICAgICAgICBhbGxvd1ggPSB0cnVlOwotICAgICAgICBhbGxvd0NvbG9y
ID0gdHJ1ZTsKLSAgICAgICAgYWxsb3dCcmVhayA9IHRydWU7Ci0gICAgICAgIGFsbG93WSA9IGZh
bHNlOwotICAgICAgICBhbGxvd0JsdXIgPSBmYWxzZTsKLSAgICAgICAgYWxsb3dTcHJlYWQgPSBm
YWxzZTsKLSAgICAgICAgYWxsb3dTdHlsZSA9IHByb3BlcnR5ID09IENTU1Byb3BlcnR5V2Via2l0
Qm94U2hhZG93IHx8IHByb3BlcnR5ID09IENTU1Byb3BlcnR5Qm94U2hhZG93OwotICAgIH0KLQot
ICAgIHZvaWQgY29tbWl0TGVuZ3RoKENTU1BhcnNlcjo6VmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZh
bHVlV2l0aENhbGN1bGF0aW9uKQotICAgIHsKLSAgICAgICAgYXV0byBwcmltaXRpdmVWYWx1ZSA9
IG1fcGFyc2VyLmNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlv
bik7Ci0KLSAgICAgICAgaWYgKGFsbG93WCkgewotICAgICAgICAgICAgeCA9IFdURk1vdmUocHJp
bWl0aXZlVmFsdWUpOwotICAgICAgICAgICAgYWxsb3dYID0gZmFsc2U7Ci0gICAgICAgICAgICBh
bGxvd1kgPSB0cnVlOwotICAgICAgICAgICAgYWxsb3dDb2xvciA9IGZhbHNlOwotICAgICAgICAg
ICAgYWxsb3dTdHlsZSA9IGZhbHNlOwotICAgICAgICAgICAgYWxsb3dCcmVhayA9IGZhbHNlOwot
ICAgICAgICB9IGVsc2UgaWYgKGFsbG93WSkgewotICAgICAgICAgICAgeSA9IFdURk1vdmUocHJp
bWl0aXZlVmFsdWUpOwotICAgICAgICAgICAgYWxsb3dZID0gZmFsc2U7Ci0gICAgICAgICAgICBh
bGxvd0JsdXIgPSB0cnVlOwotICAgICAgICAgICAgYWxsb3dDb2xvciA9IHRydWU7Ci0gICAgICAg
ICAgICBhbGxvd1N0eWxlID0gcHJvcGVydHkgPT0gQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3cg
fHwgcHJvcGVydHkgPT0gQ1NTUHJvcGVydHlCb3hTaGFkb3c7Ci0gICAgICAgICAgICBhbGxvd0Jy
ZWFrID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmIChhbGxvd0JsdXIpIHsKLSAgICAgICAgICAg
IGJsdXIgPSBXVEZNb3ZlKHByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgICAgIGFsbG93Qmx1ciA9
IGZhbHNlOwotICAgICAgICAgICAgYWxsb3dTcHJlYWQgPSBwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0
eVdlYmtpdEJveFNoYWRvdyB8fCBwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eUJveFNoYWRvdzsKLSAg
ICAgICAgfSBlbHNlIGlmIChhbGxvd1NwcmVhZCkgewotICAgICAgICAgICAgc3ByZWFkID0gV1RG
TW92ZShwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAgICAgICBhbGxvd1NwcmVhZCA9IGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBjb21taXRDb2xvcihSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+JiYgdmFsKQotICAgIHsKLSAgICAgICAgY29sb3IgPSB2YWw7Ci0gICAgICAgIGFs
bG93Q29sb3IgPSBmYWxzZTsKLSAgICAgICAgaWYgKGFsbG93WCkgewotICAgICAgICAgICAgYWxs
b3dTdHlsZSA9IGZhbHNlOwotICAgICAgICAgICAgYWxsb3dCcmVhayA9IGZhbHNlOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgYWxsb3dCbHVyID0gZmFsc2U7Ci0gICAgICAgICAgICBh
bGxvd1NwcmVhZCA9IGZhbHNlOwotICAgICAgICAgICAgYWxsb3dTdHlsZSA9IHByb3BlcnR5ID09
IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93IHx8IHByb3BlcnR5ID09IENTU1Byb3BlcnR5Qm94
U2hhZG93OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBjb21taXRTdHlsZShDU1NQYXJz
ZXJWYWx1ZSYgdmFsdWUpCi0gICAgewotICAgICAgICBzdHlsZSA9IENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsKLSAgICAgICAgYWxsb3dT
dHlsZSA9IGZhbHNlOwotICAgICAgICBpZiAoYWxsb3dYKQotICAgICAgICAgICAgYWxsb3dCcmVh
ayA9IGZhbHNlOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGFsbG93Qmx1ciA9IGZhbHNl
OwotICAgICAgICAgICAgYWxsb3dTcHJlYWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGFsbG93Q29s
b3IgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIENTU1Byb3BlcnR5SUQgcHJvcGVy
dHk7Ci0gICAgQ1NTUGFyc2VyJiBtX3BhcnNlcjsKLQotICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+
IHZhbHVlczsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHg7Ci0gICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiB5OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYmx1cjsK
LSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNwcmVhZDsKLSAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IHN0eWxlOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29sb3I7
Ci0KLSAgICBib29sIGFsbG93WDsKLSAgICBib29sIGFsbG93WTsKLSAgICBib29sIGFsbG93Qmx1
cjsKLSAgICBib29sIGFsbG93U3ByZWFkOwotICAgIGJvb2wgYWxsb3dDb2xvcjsKLSAgICBib29s
IGFsbG93U3R5bGU7IC8vIGluc2V0IG9yIG5vdC4KLSAgICBib29sIGFsbG93QnJlYWs7Ci19Owot
Ci1SZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlU2hhZG93KENTU1BhcnNlclZh
bHVlTGlzdCYgdmFsdWVMaXN0LCBDU1NQcm9wZXJ0eUlEIHByb3BJZCkKLXsKLSAgICBTaGFkb3dQ
YXJzZUNvbnRleHQgY29udGV4dChwcm9wSWQsICp0aGlzKTsKLSAgICBDU1NQYXJzZXJWYWx1ZSog
dmFsdWU7Ci0gICAgd2hpbGUgKCh2YWx1ZSA9IHZhbHVlTGlzdC5jdXJyZW50KCkpKSB7Ci0gICAg
ICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7Ci0g
ICAgICAgIC8vIENoZWNrIGZvciBhIGNvbW1hIGJyZWFrIGZpcnN0LgotICAgICAgICBpZiAodmFs
dWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yKSB7Ci0gICAgICAgICAgICBpZiAo
dmFsdWUtPmlWYWx1ZSAhPSAnLCcgfHwgIWNvbnRleHQuYWxsb3dCcmVhaykgewotICAgICAgICAg
ICAgICAgIC8vIE90aGVyIG9wZXJhdG9ycyBhcmVuJ3QgbGVnYWwgb3Igd2UgYXJlbid0IGRvbmUg
d2l0aCB0aGUgY3VycmVudCBzaGFkb3cKLSAgICAgICAgICAgICAgICAvLyB2YWx1ZS4gIFRyZWF0
IGFzIGludmFsaWQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAvLyAtd2Via2l0LXN2Zy1zaGFkb3cgZG9lcyBub3Qgc3VwcG9ydCBt
dWx0aXBsZSB2YWx1ZXMuCi0gICAgICAgICAgICBpZiAocHJvcElkID09IENTU1Byb3BlcnR5V2Vi
a2l0U3ZnU2hhZG93KQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAg
ICAgLy8gVGhlIHZhbHVlIGlzIGdvb2QuICBDb21taXQgaXQuCi0gICAgICAgICAgICBjb250ZXh0
LmNvbW1pdFZhbHVlKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGVVbml0KHZhbHVlV2l0
aENhbGN1bGF0aW9uLCBGTGVuZ3RoLCBDU1NTdHJpY3RNb2RlKSkgewotICAgICAgICAgICAgLy8g
V2UgcmVxdWlyZWQgYSBsZW5ndGggYW5kIGRpZG4ndCBnZXQgb25lLiBJbnZhbGlkLgotICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LmFsbG93TGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICAgICAgICAgIC8vIEJsdXIgcmFkaXVzIG11c3QgYmUgbm9uLW5lZ2F0
aXZlLgotICAgICAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dCbHVyICYmICF2YWxpZGF0ZVVuaXQo
dmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICAgICAgLy8gQSBsZW5n
dGggaXMgYWxsb3dlZCBoZXJlLiAgQ29uc3RydWN0IHRoZSB2YWx1ZSBhbmQgYWRkIGl0LgotICAg
ICAgICAgICAgY29udGV4dC5jb21taXRMZW5ndGgodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAg
ICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUluc2V0KSB7Ci0gICAgICAgICAg
ICBpZiAoIWNvbnRleHQuYWxsb3dTdHlsZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgICAgICAgICAgY29udGV4dC5jb21taXRTdHlsZSh2YWx1ZVdpdGhDYWxjdWxhdGlv
bik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBUaGUgb25seSBvdGhlciB0eXBl
IG9mIHZhbHVlIHRoYXQncyBvayBpcyBhIGNvbG9yIHZhbHVlLgotICAgICAgICAgICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRDb2xvcjsKLSAgICAgICAgICAgIGJvb2wgaXNDb2xv
ciA9IChpc1ZhbGlkU3lzdGVtQ29sb3JWYWx1ZSh2YWx1ZS0+aWQpIHx8IHZhbHVlLT5pZCA9PSBD
U1NWYWx1ZU1lbnUKLSAgICAgICAgICAgICAgICB8fCAodmFsdWUtPmlkID49IENTU1ZhbHVlV2Vi
a2l0Rm9jdXNSaW5nQ29sb3IgJiYgdmFsdWUtPmlkIDw9IENTU1ZhbHVlV2Via2l0VGV4dCAmJiBp
blF1aXJrc01vZGUoKSkKLSAgICAgICAgICAgICAgICB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVD
dXJyZW50Y29sb3IpOwotICAgICAgICAgICAgaWYgKGlzQ29sb3IpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIWNvbnRleHQuYWxsb3dDb2xvcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgICAgICAgICAgcGFyc2VkQ29sb3IgPSBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAoIXBhcnNlZENvbG9yKQotICAgICAgICAgICAgICAgIC8vIEl0J3Mg
bm90IGJ1aWx0LWluLiBUcnkgdG8gcGFyc2UgaXQgYXMgYSBjb2xvci4KLSAgICAgICAgICAgICAg
ICBwYXJzZWRDb2xvciA9IHBhcnNlQ29sb3IodmFsdWUpOwotCi0gICAgICAgICAgICBpZiAoIXBh
cnNlZENvbG9yIHx8ICFjb250ZXh0LmFsbG93Q29sb3IpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7IC8vIFRoaXMgdmFsdWUgaXMgbm90IGEgY29sb3Igb3IgbGVuZ3RoIGFuZCBpcyBp
bnZhbGlkIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IGlzIGEgY29sb3IsIGJ1
dCBhIGNvbG9yIGlzbid0IGFsbG93ZWQgYXQgdGhpcyBwb2ludC4KLQotICAgICAgICAgICAgY29u
dGV4dC5jb21taXRDb2xvcihwYXJzZWRDb2xvci5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZhbHVlTGlzdC5uZXh0KCk7Ci0gICAgfQotCi0gICAgaWYgKGNvbnRleHQu
YWxsb3dCcmVhaykgewotICAgICAgICBjb250ZXh0LmNvbW1pdFZhbHVlKCk7Ci0gICAgICAgIGlm
IChjb250ZXh0LnZhbHVlcyAmJiBjb250ZXh0LnZhbHVlcy0+bGVuZ3RoKCkpCi0gICAgICAgICAg
ICByZXR1cm4gV1RGTW92ZShjb250ZXh0LnZhbHVlcyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51
bGxwdHI7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVJlZmxlY3QoQ1NTUHJvcGVydHlJRCBw
cm9wSWQsIGJvb2wgaW1wb3J0YW50KQotewotICAgIC8vIGJveC1yZWZsZWN0OiA8ZGlyZWN0aW9u
PiA8b2Zmc2V0PiA8bWFzaz4KLQotICAgIC8vIERpcmVjdGlvbiBjb21lcyBmaXJzdC4KLSAgICBD
U1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gZGlyZWN0aW9uOwotICAgIHN3aXRjaCAodmFsdWUtPmlkKSB7
Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVBYm92ZToKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUJlbG93
OgotICAgICAgICBjYXNlIENTU1ZhbHVlTGVmdDoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVJpZ2h0
OgotICAgICAgICAgICAgZGlyZWN0aW9uID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFRo
ZSBvZmZzZXQgY29tZXMgbmV4dC4KLSAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0g
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBvZmZzZXQ7Ci0gICAgaWYgKCF2YWx1ZSkKLSAg
ICAgICAgb2Zmc2V0ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSgwLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKLSAgICBlbHNlIHsKLSAgICAgICAgVmFsdWVXaXRo
Q2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsKLSAgICAgICAgaWYgKCF2
YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2VudCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG9mZnNldCA9IGNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgfQotCi0gICAgLy8gTm93
IGZvciB0aGUgbWFzay4KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IG1hc2s7Ci0gICAgdmFsdWUgPSBt
X3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgIGlmICh2YWx1ZSkgewotICAgICAgICBpZiAoIXBhcnNl
Qm9yZGVySW1hZ2UocHJvcElkLCBtYXNrKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIENTU1JlZmxlY3RWYWx1ZTo6Y3JlYXRlKGRp
cmVjdGlvbi5yZWxlYXNlTm9uTnVsbCgpLCBvZmZzZXQucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92
ZShtYXNrKSksIGltcG9ydGFudCk7Ci0gICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmxleChDU1NQYXJzZXJWYWx1ZUxp
c3QmIGFyZ3MsIGJvb2wgaW1wb3J0YW50KQotewotICAgIGlmICghYXJncy5zaXplKCkgfHwgYXJn
cy5zaXplKCkgPiAzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0IGRv
dWJsZSB1bnNldFZhbHVlID0gLTE7Ci0gICAgZG91YmxlIGZsZXhHcm93ID0gdW5zZXRWYWx1ZTsK
LSAgICBkb3VibGUgZmxleFNocmluayA9IHVuc2V0VmFsdWU7Ci0gICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBmbGV4QmFzaXM7Ci0KLSAgICB3aGlsZSAoQ1NTUGFyc2VyVmFsdWUqIGFyZ3Vt
ZW50ID0gYXJncy5jdXJyZW50KCkpIHsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJn
dW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKLSAgICAgICAgaWYgKHZhbGlkYXRlVW5p
dChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZOb25OZWcpKSB7Ci0gICAgICAg
ICAgICBpZiAoZmxleEdyb3cgPT0gdW5zZXRWYWx1ZSkKLSAgICAgICAgICAgICAgICBmbGV4R3Jv
dyA9IHBhcnNlZERvdWJsZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgICAgICBl
bHNlIGlmIChmbGV4U2hyaW5rID09IHVuc2V0VmFsdWUpCi0gICAgICAgICAgICAgICAgZmxleFNo
cmluayA9IHBhcnNlZERvdWJsZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgICAg
ICBlbHNlIGlmICghcGFyc2VkRG91YmxlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSkgewotICAg
ICAgICAgICAgICAgIC8vIGZsZXggb25seSBhbGxvd3MgYSBiYXNpcyBvZiAwIChzYW5zIHVuaXRz
KSBpZiBmbGV4LWdyb3cgYW5kIGZsZXgtc2hyaW5rIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlbiBz
ZXQuCi0gICAgICAgICAgICAgICAgZmxleEJhc2lzID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVWYWx1ZSgwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2Ugb25seSBhbGxvdyAzIG51bWJlcnMgd2l0
aG91dCB1bml0cyBpZiB0aGUgbGFzdCB2YWx1ZSBpcyAwLiBFLmcuLCBmbGV4OjEgMSAxIGlzIGlu
dmFsaWQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UgaWYgKCFmbGV4QmFzaXMgJiYgKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLnZh
bHVlKCkuaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxj
dWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpKQotICAgICAgICAgICAgZmxl
eEJhc2lzID0gcGFyc2VWYWxpZFByaW1pdGl2ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbi52YWx1
ZSgpLmlkLCBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgLy8gTm90IGEgdmFsaWQgYXJnIGZvciBmbGV4LgotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIGFyZ3MubmV4dCgpOwotICAgIH0KLQotICAgIGlmIChm
bGV4R3JvdyA9PSB1bnNldFZhbHVlKQotICAgICAgICBmbGV4R3JvdyA9IDE7Ci0gICAgaWYgKGZs
ZXhTaHJpbmsgPT0gdW5zZXRWYWx1ZSkKLSAgICAgICAgZmxleFNocmluayA9IDE7Ci0gICAgaWYg
KCFmbGV4QmFzaXMpCi0gICAgICAgIGZsZXhCYXNpcyA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlVmFsdWUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7Ci0KLSAgICBhZGRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUZsZXhHcm93LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZVZhbHVlKGNsYW1wVG9GbG9hdChmbGV4R3JvdyksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
TlVNQkVSKSwgaW1wb3J0YW50KTsKLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZsZXhTaHJp
bmssIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoY2xhbXBUb0Zsb2F0KGZs
ZXhTaHJpbmspLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiksIGltcG9ydGFudCk7Ci0g
ICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGbGV4QmFzaXMsIGZsZXhCYXNpcy5yZWxlYXNlTm9u
TnVsbCgpLCBpbXBvcnRhbnQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdHJ1Y3QgQm9yZGVy
SW1hZ2VQYXJzZUNvbnRleHQgewotICAgIEJvcmRlckltYWdlUGFyc2VDb250ZXh0KCkKLSAgICA6
IG1fY2FuQWR2YW5jZShmYWxzZSkKLSAgICAsIG1fYWxsb3dDb21taXQodHJ1ZSkKLSAgICAsIG1f
YWxsb3dJbWFnZSh0cnVlKQotICAgICwgbV9hbGxvd0ltYWdlU2xpY2UodHJ1ZSkKLSAgICAsIG1f
YWxsb3dSZXBlYXQodHJ1ZSkKLSAgICAsIG1fYWxsb3dGb3J3YXJkU2xhc2hPcGVyYXRvcihmYWxz
ZSkKLSAgICAsIG1fcmVxdWlyZVdpZHRoKGZhbHNlKQotICAgICwgbV9yZXF1aXJlT3V0c2V0KGZh
bHNlKQotICAgIHt9Ci0KLSAgICBib29sIGNhbkFkdmFuY2UoKSBjb25zdCB7IHJldHVybiBtX2Nh
bkFkdmFuY2U7IH0KLSAgICB2b2lkIHNldENhbkFkdmFuY2UoYm9vbCBjYW5BZHZhbmNlKSB7IG1f
Y2FuQWR2YW5jZSA9IGNhbkFkdmFuY2U7IH0KLQotICAgIGJvb2wgYWxsb3dDb21taXQoKSBjb25z
dCB7IHJldHVybiBtX2FsbG93Q29tbWl0OyB9Ci0gICAgYm9vbCBhbGxvd0ltYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9hbGxvd0ltYWdlOyB9Ci0gICAgYm9vbCBhbGxvd0ltYWdlU2xpY2UoKSBjb25z
dCB7IHJldHVybiBtX2FsbG93SW1hZ2VTbGljZTsgfQotICAgIGJvb2wgYWxsb3dSZXBlYXQoKSBj
b25zdCB7IHJldHVybiBtX2FsbG93UmVwZWF0OyB9Ci0gICAgYm9vbCBhbGxvd0ZvcndhcmRTbGFz
aE9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0ZvcndhcmRTbGFzaE9wZXJhdG9yOyB9
Ci0KLSAgICBib29sIHJlcXVpcmVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWlyZVdpZHRo
OyB9Ci0gICAgYm9vbCByZXF1aXJlT3V0c2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZXF1aXJlT3V0
c2V0OyB9Ci0KLSAgICB2b2lkIGNvbW1pdEltYWdlKFJlZlB0cjxDU1NWYWx1ZT4mJiBpbWFnZSkK
LSAgICB7Ci0gICAgICAgIG1faW1hZ2UgPSBXVEZNb3ZlKGltYWdlKTsKLSAgICAgICAgbV9jYW5B
ZHZhbmNlID0gdHJ1ZTsKLSAgICAgICAgbV9hbGxvd0NvbW1pdCA9IHRydWU7Ci0gICAgICAgIG1f
YWxsb3dJbWFnZSA9IG1fYWxsb3dGb3J3YXJkU2xhc2hPcGVyYXRvciA9IG1fcmVxdWlyZVdpZHRo
ID0gbV9yZXF1aXJlT3V0c2V0ID0gZmFsc2U7Ci0gICAgICAgIG1fYWxsb3dJbWFnZVNsaWNlID0g
IW1faW1hZ2VTbGljZTsKLSAgICAgICAgbV9hbGxvd1JlcGVhdCA9ICFtX3JlcGVhdDsKLSAgICB9
Ci0gICAgdm9pZCBjb21taXRJbWFnZVNsaWNlKFJlZlB0cjxDU1NCb3JkZXJJbWFnZVNsaWNlVmFs
dWU+JiYgc2xpY2UpCi0gICAgewotICAgICAgICBtX2ltYWdlU2xpY2UgPSBXVEZNb3ZlKHNsaWNl
KTsKLSAgICAgICAgbV9jYW5BZHZhbmNlID0gdHJ1ZTsKLSAgICAgICAgbV9hbGxvd0NvbW1pdCA9
IG1fYWxsb3dGb3J3YXJkU2xhc2hPcGVyYXRvciA9IHRydWU7Ci0gICAgICAgIG1fYWxsb3dJbWFn
ZVNsaWNlID0gbV9yZXF1aXJlV2lkdGggPSBtX3JlcXVpcmVPdXRzZXQgPSBmYWxzZTsKLSAgICAg
ICAgbV9hbGxvd0ltYWdlID0gIW1faW1hZ2U7Ci0gICAgICAgIG1fYWxsb3dSZXBlYXQgPSAhbV9y
ZXBlYXQ7Ci0gICAgfQotICAgIHZvaWQgY29tbWl0Rm9yd2FyZFNsYXNoT3BlcmF0b3IoKQotICAg
IHsKLSAgICAgICAgbV9jYW5BZHZhbmNlID0gdHJ1ZTsKLSAgICAgICAgbV9hbGxvd0NvbW1pdCA9
IG1fYWxsb3dJbWFnZSA9IG1fYWxsb3dJbWFnZVNsaWNlID0gbV9hbGxvd1JlcGVhdCA9IG1fYWxs
b3dGb3J3YXJkU2xhc2hPcGVyYXRvciA9IGZhbHNlOwotICAgICAgICBpZiAoIW1fYm9yZGVyU2xp
Y2UpIHsKLSAgICAgICAgICAgIG1fcmVxdWlyZVdpZHRoID0gdHJ1ZTsKLSAgICAgICAgICAgIG1f
cmVxdWlyZU91dHNldCA9IGZhbHNlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9y
ZXF1aXJlT3V0c2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fcmVxdWlyZVdpZHRoID0gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgdm9pZCBjb21taXRCb3JkZXJXaWR0aChSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+JiYgc2xpY2UpCi0gICAgewotICAgICAgICBtX2JvcmRlclNsaWNlID0g
V1RGTW92ZShzbGljZSk7Ci0gICAgICAgIG1fY2FuQWR2YW5jZSA9IHRydWU7Ci0gICAgICAgIG1f
YWxsb3dDb21taXQgPSBtX2FsbG93Rm9yd2FyZFNsYXNoT3BlcmF0b3IgPSB0cnVlOwotICAgICAg
ICBtX2FsbG93SW1hZ2VTbGljZSA9IG1fcmVxdWlyZVdpZHRoID0gbV9yZXF1aXJlT3V0c2V0ID0g
ZmFsc2U7Ci0gICAgICAgIG1fYWxsb3dJbWFnZSA9ICFtX2ltYWdlOwotICAgICAgICBtX2FsbG93
UmVwZWF0ID0gIW1fcmVwZWF0OwotICAgIH0KLSAgICB2b2lkIGNvbW1pdEJvcmRlck91dHNldChS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgb3V0c2V0KQotICAgIHsKLSAgICAgICAgbV9vdXRz
ZXQgPSBXVEZNb3ZlKG91dHNldCk7Ci0gICAgICAgIG1fY2FuQWR2YW5jZSA9IHRydWU7Ci0gICAg
ICAgIG1fYWxsb3dDb21taXQgPSB0cnVlOwotICAgICAgICBtX2FsbG93SW1hZ2VTbGljZSA9IG1f
YWxsb3dGb3J3YXJkU2xhc2hPcGVyYXRvciA9IG1fcmVxdWlyZVdpZHRoID0gbV9yZXF1aXJlT3V0
c2V0ID0gZmFsc2U7Ci0gICAgICAgIG1fYWxsb3dJbWFnZSA9ICFtX2ltYWdlOwotICAgICAgICBt
X2FsbG93UmVwZWF0ID0gIW1fcmVwZWF0OwotICAgIH0KLSAgICB2b2lkIGNvbW1pdFJlcGVhdChS
ZWZQdHI8Q1NTVmFsdWU+JiYgcmVwZWF0KQotICAgIHsKLSAgICAgICAgbV9yZXBlYXQgPSBXVEZN
b3ZlKHJlcGVhdCk7Ci0gICAgICAgIG1fY2FuQWR2YW5jZSA9IHRydWU7Ci0gICAgICAgIG1fYWxs
b3dDb21taXQgPSB0cnVlOwotICAgICAgICBtX2FsbG93UmVwZWF0ID0gbV9hbGxvd0ZvcndhcmRT
bGFzaE9wZXJhdG9yID0gbV9yZXF1aXJlV2lkdGggPSBtX3JlcXVpcmVPdXRzZXQgPSBmYWxzZTsK
LSAgICAgICAgbV9hbGxvd0ltYWdlU2xpY2UgPSAhbV9pbWFnZVNsaWNlOwotICAgICAgICBtX2Fs
bG93SW1hZ2UgPSAhbV9pbWFnZTsKLSAgICB9Ci0KLSAgICBSZWY8Q1NTVmFsdWU+IGNvbW1pdFdl
YktpdEJvcmRlckltYWdlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVCb3JkZXJJbWFn
ZVZhbHVlKG1faW1hZ2UuY29weVJlZigpLCBtX2ltYWdlU2xpY2UuY29weVJlZigpLCBtX2JvcmRl
clNsaWNlLmNvcHlSZWYoKSwgbV9vdXRzZXQuY29weVJlZigpLCBtX3JlcGVhdC5jb3B5UmVmKCkp
OwotICAgIH0KLQotICAgIHZvaWQgY29tbWl0Qm9yZGVySW1hZ2UoQ1NTUGFyc2VyJiBwYXJzZXIs
IGJvb2wgaW1wb3J0YW50KQotICAgIHsKLSAgICAgICAgY29tbWl0Qm9yZGVySW1hZ2VQcm9wZXJ0
eShDU1NQcm9wZXJ0eUJvcmRlckltYWdlU291cmNlLCBwYXJzZXIsIFdURk1vdmUobV9pbWFnZSks
IGltcG9ydGFudCk7Ci0gICAgICAgIGNvbW1pdEJvcmRlckltYWdlUHJvcGVydHkoQ1NTUHJvcGVy
dHlCb3JkZXJJbWFnZVNsaWNlLCBwYXJzZXIsIG1faW1hZ2VTbGljZSwgaW1wb3J0YW50KTsKLSAg
ICAgICAgY29tbWl0Qm9yZGVySW1hZ2VQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckltYWdlV2lk
dGgsIHBhcnNlciwgbV9ib3JkZXJTbGljZSwgaW1wb3J0YW50KTsKLSAgICAgICAgY29tbWl0Qm9y
ZGVySW1hZ2VQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckltYWdlT3V0c2V0LCBwYXJzZXIsIG1f
b3V0c2V0LCBpbXBvcnRhbnQpOwotICAgICAgICBjb21taXRCb3JkZXJJbWFnZVByb3BlcnR5KENT
U1Byb3BlcnR5Qm9yZGVySW1hZ2VSZXBlYXQsIHBhcnNlciwgV1RGTW92ZShtX3JlcGVhdCksIGlt
cG9ydGFudCk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21taXRCb3JkZXJJbWFnZVByb3BlcnR5KENT
U1Byb3BlcnR5SUQgcHJvcElkLCBDU1NQYXJzZXImIHBhcnNlciwgUmVmUHRyPENTU1ZhbHVlPiYm
IHZhbHVlLCBib29sIGltcG9ydGFudCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAg
ICAgICAgIHBhcnNlci5hZGRQcm9wZXJ0eShwcm9wSWQsIHZhbHVlLnJlbGVhc2VOb25OdWxsKCks
IGltcG9ydGFudCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhcnNlci5hZGRQcm9wZXJ0
eShwcm9wSWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSW1wbGljaXRJbml0aWFs
VmFsdWUoKSwgaW1wb3J0YW50LCB0cnVlKTsKLSAgICB9Ci0KLSAgICBib29sIG1fY2FuQWR2YW5j
ZTsKLQotICAgIGJvb2wgbV9hbGxvd0NvbW1pdDsKLSAgICBib29sIG1fYWxsb3dJbWFnZTsKLSAg
ICBib29sIG1fYWxsb3dJbWFnZVNsaWNlOwotICAgIGJvb2wgbV9hbGxvd1JlcGVhdDsKLSAgICBi
b29sIG1fYWxsb3dGb3J3YXJkU2xhc2hPcGVyYXRvcjsKLQotICAgIGJvb2wgbV9yZXF1aXJlV2lk
dGg7Ci0gICAgYm9vbCBtX3JlcXVpcmVPdXRzZXQ7Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IG1f
aW1hZ2U7Ci0gICAgUmVmUHRyPENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZT4gbV9pbWFnZVNsaWNl
OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9ib3JkZXJTbGljZTsKLSAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fb3V0c2V0OwotCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBt
X3JlcGVhdDsKLX07Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdlKENTU1Byb3Bl
cnR5SUQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+JiByZXN1bHQsIGJvb2wgaW1wb3J0YW50KQot
ewotICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIHByb3BJZCk7Ci0gICAgQm9yZGVySW1h
Z2VQYXJzZUNvbnRleHQgY29udGV4dDsKLSAgICB3aGlsZSAoQ1NTUGFyc2VyVmFsdWUqIGN1cnJl
bnRWYWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKLSAgICAgICAgY29udGV4dC5zZXRD
YW5BZHZhbmNlKGZhbHNlKTsKLQotICAgICAgICBpZiAoIWNvbnRleHQuY2FuQWR2YW5jZSgpICYm
IGNvbnRleHQuYWxsb3dGb3J3YXJkU2xhc2hPcGVyYXRvcigpICYmIGlzRm9yd2FyZFNsYXNoT3Bl
cmF0b3IoKmN1cnJlbnRWYWx1ZSkpCi0gICAgICAgICAgICBjb250ZXh0LmNvbW1pdEZvcndhcmRT
bGFzaE9wZXJhdG9yKCk7Ci0KLSAgICAgICAgaWYgKCFjb250ZXh0LmNhbkFkdmFuY2UoKSAmJiBj
b250ZXh0LmFsbG93SW1hZ2UoKSkgewotICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+dW5p
dCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkKLSAgICAgICAgICAgICAgICBjb250ZXh0
LmNvbW1pdEltYWdlKENTU0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTChjdXJyZW50VmFs
dWUtPnN0cmluZykpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzR2VuZXJhdGVkSW1hZ2VWYWx1
ZSgqY3VycmVudFZhbHVlKSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFs
dWU7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcnNlR2VuZXJhdGVkSW1hZ2UoKm1fdmFsdWVMaXN0
LCB2YWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0SW1hZ2UoV1RGTW92
ZSh2YWx1ZSkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpc0ltYWdlU2V0RnVuY3Rpb25WYWx1
ZSgqY3VycmVudFZhbHVlKSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFs
dWUgPSBwYXJzZUltYWdlU2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlKQotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LmNvbW1pdEltYWdlKHZhbHVlLnJlbGVhc2VOb25OdWxsKCkp
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlTm9u
ZSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmNvbW1pdEltYWdlKENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKCFjb250ZXh0LmNhbkFkdmFuY2UoKSAmJiBjb250ZXh0LmFsbG93SW1h
Z2VTbGljZSgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVl
PiBpbWFnZVNsaWNlOwotICAgICAgICAgICAgaWYgKHBhcnNlQm9yZGVySW1hZ2VTbGljZShwcm9w
SWQsIGltYWdlU2xpY2UpKQotICAgICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0SW1hZ2VTbGlj
ZShXVEZNb3ZlKGltYWdlU2xpY2UpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghY29udGV4
dC5jYW5BZHZhbmNlKCkgJiYgY29udGV4dC5hbGxvd1JlcGVhdCgpKSB7Ci0gICAgICAgICAgICBS
ZWZQdHI8Q1NTVmFsdWU+IHJlcGVhdDsKLSAgICAgICAgICAgIGlmIChwYXJzZUJvcmRlckltYWdl
UmVwZWF0KHJlcGVhdCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC5jb21taXRSZXBlYXQoV1RG
TW92ZShyZXBlYXQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghY29udGV4dC5jYW5BZHZh
bmNlKCkgJiYgY29udGV4dC5yZXF1aXJlV2lkdGgoKSkgewotICAgICAgICAgICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBib3JkZXJTbGljZTsKLSAgICAgICAgICAgIGlmIChwYXJzZUJvcmRl
ckltYWdlV2lkdGgoYm9yZGVyU2xpY2UpKQotICAgICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0
Qm9yZGVyV2lkdGgoV1RGTW92ZShib3JkZXJTbGljZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCFjb250ZXh0LmNhbkFkdmFuY2UoKSAmJiBjb250ZXh0LnJlcXVpcmVPdXRzZXQoKSkgewot
ICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBib3JkZXJPdXRzZXQ7Ci0gICAg
ICAgICAgICBpZiAocGFyc2VCb3JkZXJJbWFnZU91dHNldChib3JkZXJPdXRzZXQpKQotICAgICAg
ICAgICAgICAgIGNvbnRleHQuY29tbWl0Qm9yZGVyT3V0c2V0KFdURk1vdmUoYm9yZGVyT3V0c2V0
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWNvbnRleHQuY2FuQWR2YW5jZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0g
ICAgfQotCi0gICAgaWYgKGNvbnRleHQuYWxsb3dDb21taXQoKSkgewotICAgICAgICBpZiAocHJv
cElkID09IENTU1Byb3BlcnR5Qm9yZGVySW1hZ2UpCi0gICAgICAgICAgICBjb250ZXh0LmNvbW1p
dEJvcmRlckltYWdlKCp0aGlzLCBpbXBvcnRhbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAvLyBOZWVkIHRvIGZ1bGx5IGNvbW1pdCBhcyBhIHNpbmdsZSB2YWx1ZS4KLSAgICAgICAgICAg
IHJlc3VsdCA9IGNvbnRleHQuY29tbWl0V2ViS2l0Qm9yZGVySW1hZ2UoKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBp
c0JvcmRlckltYWdlUmVwZWF0S2V5d29yZChpbnQgaWQpCi17Ci0gICAgcmV0dXJuIGlkID09IENT
U1ZhbHVlU3RyZXRjaCB8fCBpZCA9PSBDU1NWYWx1ZVJlcGVhdCB8fCBpZCA9PSBDU1NWYWx1ZVNw
YWNlIHx8IGlkID09IENTU1ZhbHVlUm91bmQ7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJv
cmRlckltYWdlUmVwZWF0KFJlZlB0cjxDU1NWYWx1ZT4mIHJlc3VsdCkKLXsKLSAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGZpcnN0VmFsdWU7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBzZWNvbmRWYWx1ZTsKLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsID0gbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKTsKLSAgICBpZiAoIXZhbCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
IChpc0JvcmRlckltYWdlUmVwZWF0S2V5d29yZCh2YWwtPmlkKSkKLSAgICAgICAgZmlyc3RWYWx1
ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbC0+
aWQpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdmFsID0gbV92YWx1
ZUxpc3QtPm5leHQoKTsKLSAgICBpZiAodmFsKSB7Ci0gICAgICAgIGlmIChpc0JvcmRlckltYWdl
UmVwZWF0S2V5d29yZCh2YWwtPmlkKSkKLSAgICAgICAgICAgIHNlY29uZFZhbHVlID0gQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsLT5pZCk7Ci0gICAg
ICAgIGVsc2UgaWYgKCFpblNob3J0aGFuZCgpKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSdyZSBu
b3QgcGFyc2luZyBhIHNob3J0aGFuZCB0aGVuIHdlIGFyZSBpbnZhbGlkLgotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2UgbmVlZCB0
byByZXdpbmQgdGhlIHZhbHVlIGxpc3QsIHNvIHRoYXQgd2hlbiBpdHMgYWR2YW5jZWQgd2UnbGwK
LSAgICAgICAgICAgIC8vIGVuZCB1cCBiYWNrIGF0IHRoaXMgdmFsdWUuCi0gICAgICAgICAgICBt
X3ZhbHVlTGlzdC0+cHJldmlvdXMoKTsKLSAgICAgICAgICAgIHNlY29uZFZhbHVlID0gZmlyc3RW
YWx1ZTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBzZWNvbmRWYWx1ZSA9IGZpcnN0
VmFsdWU7Ci0KLSAgICByZXN1bHQgPSBjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIoZmlyc3RWYWx1
ZS5yZWxlYXNlTm9uTnVsbCgpLCBzZWNvbmRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotY2xhc3MgQm9yZGVySW1hZ2VTbGljZVBhcnNlQ29udGV4dCB7Ci1w
dWJsaWM6Ci0gICAgQm9yZGVySW1hZ2VTbGljZVBhcnNlQ29udGV4dChDU1NQYXJzZXImIHBhcnNl
cikKLSAgICA6IG1fcGFyc2VyKHBhcnNlcikKLSAgICAsIG1fYWxsb3dOdW1iZXIodHJ1ZSkKLSAg
ICAsIG1fYWxsb3dGaWxsKHRydWUpCi0gICAgLCBtX2FsbG93RmluYWxDb21taXQoZmFsc2UpCi0g
ICAgLCBtX2ZpbGwoZmFsc2UpCi0gICAgeyB9Ci0KLSAgICBib29sIGFsbG93TnVtYmVyKCkgY29u
c3QgeyByZXR1cm4gbV9hbGxvd051bWJlcjsgfQotICAgIGJvb2wgYWxsb3dGaWxsKCkgY29uc3Qg
eyByZXR1cm4gbV9hbGxvd0ZpbGw7IH0KLSAgICBib29sIGFsbG93RmluYWxDb21taXQoKSBjb25z
dCB7IHJldHVybiBtX2FsbG93RmluYWxDb21taXQ7IH0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSog
dG9wKCkgY29uc3QgeyByZXR1cm4gbV90b3AuZ2V0KCk7IH0KLQotICAgIHZvaWQgY29tbWl0TnVt
YmVyKENTU1BhcnNlcjo6VmFsdWVXaXRoQ2FsY3VsYXRpb24mIHZhbHVlV2l0aENhbGN1bGF0aW9u
KQotICAgIHsKLSAgICAgICAgYXV0byBwcmltaXRpdmVWYWx1ZSA9IG1fcGFyc2VyLmNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgIGlmICgh
bV90b3ApCi0gICAgICAgICAgICBtX3RvcCA9IFdURk1vdmUocHJpbWl0aXZlVmFsdWUpOwotICAg
ICAgICBlbHNlIGlmICghbV9yaWdodCkKLSAgICAgICAgICAgIG1fcmlnaHQgPSBXVEZNb3ZlKHBy
aW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoIW1fYm90dG9tKQotICAgICAgICAgICAg
bV9ib3R0b20gPSBXVEZNb3ZlKHByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoIW1fbGVmdCk7Ci0gICAgICAgICAgICBtX2xlZnQgPSBXVEZNb3ZlKHBy
aW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fYWxsb3dOdW1iZXIgPSAhbV9s
ZWZ0OwotICAgICAgICBtX2FsbG93RmluYWxDb21taXQgPSB0cnVlOwotICAgIH0KLQotICAgIHZv
aWQgY29tbWl0RmlsbCgpIHsgbV9maWxsID0gdHJ1ZTsgbV9hbGxvd0ZpbGwgPSBmYWxzZTsgbV9h
bGxvd051bWJlciA9ICFtX3RvcDsgfQotCi0gICAgUmVmPENTU0JvcmRlckltYWdlU2xpY2VWYWx1
ZT4gY29tbWl0Qm9yZGVySW1hZ2VTbGljZSgpCi0gICAgewotICAgICAgICAvLyBXZSBuZWVkIHRv
IGNsb25lIGFuZCByZXBlYXQgdmFsdWVzIGZvciBhbnkgb21pc3Npb25zLgotICAgICAgICBBU1NF
UlQobV90b3ApOwotICAgICAgICBpZiAoIW1fcmlnaHQpIHsKLSAgICAgICAgICAgIG1fcmlnaHQg
PSBtX3RvcDsKLSAgICAgICAgICAgIG1fYm90dG9tID0gbV90b3A7Ci0gICAgICAgICAgICBtX2xl
ZnQgPSBtX3RvcDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW1fYm90dG9tKSB7Ci0gICAgICAg
ICAgICBtX2JvdHRvbSA9IG1fdG9wOwotICAgICAgICAgICAgbV9sZWZ0ID0gbV9yaWdodDsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoIW1fbGVmdCkKLSAgICAgICAgICAgIG1fbGVmdCA9IG1fcmln
aHQ7Ci0KLSAgICAgICAgLy8gTm93IGJ1aWxkIGEgcmVjdCB2YWx1ZSB0byBob2xkIGFsbCBmb3Vy
IG9mIG91ciBwcmltaXRpdmUgdmFsdWVzLgotICAgICAgICBhdXRvIHF1YWQgPSBRdWFkOjpjcmVh
dGUoKTsKLSAgICAgICAgcXVhZC0+c2V0VG9wKG1fdG9wLmNvcHlSZWYoKSk7Ci0gICAgICAgIHF1
YWQtPnNldFJpZ2h0KG1fcmlnaHQuY29weVJlZigpKTsKLSAgICAgICAgcXVhZC0+c2V0Qm90dG9t
KG1fYm90dG9tLmNvcHlSZWYoKSk7Ci0gICAgICAgIHF1YWQtPnNldExlZnQobV9sZWZ0LmNvcHlS
ZWYoKSk7Ci0KLSAgICAgICAgLy8gTWFrZSBvdXIgbmV3IGJvcmRlciBpbWFnZSB2YWx1ZSBub3cu
Ci0gICAgICAgIHJldHVybiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU6OmNyZWF0ZShDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKFdURk1vdmUocXVhZCkpLCBtX2ZpbGwpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBDU1NQYXJzZXImIG1fcGFyc2VyOwotCi0gICAgYm9vbCBt
X2FsbG93TnVtYmVyOwotICAgIGJvb2wgbV9hbGxvd0ZpbGw7Ci0gICAgYm9vbCBtX2FsbG93Rmlu
YWxDb21taXQ7Ci0KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fdG9wOwotICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9yaWdodDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IG1fYm90dG9tOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9sZWZ0Owot
Ci0gICAgYm9vbCBtX2ZpbGw7Ci19OwotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFn
ZVNsaWNlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBSZWZQdHI8Q1NTQm9yZGVySW1hZ2VTbGljZVZh
bHVlPiYgcmVzdWx0KQotewotICAgIEJvcmRlckltYWdlU2xpY2VQYXJzZUNvbnRleHQgY29udGV4
dCgqdGhpcyk7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlOwotICAgIHdoaWxlICgodmFsdWUg
PSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSkgewotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlv
biB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOwotICAgICAgICAvLyBGSVhNRSBjYWxjKCkg
aHR0cDovL3dlYmtpdC5vcmcvYi8xNjY2MiA6IGNhbGMgaXMgcGFyc2VkIGJ1dCB2YWx1ZXMgYXJl
IG5vdCBjcmVhdGVkIHlldC4KLSAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dOdW1iZXIoKSAmJiAh
aXNDYWxjdWxhdGlvbih2YWx1ZVdpdGhDYWxjdWxhdGlvbikgJiYgdmFsaWRhdGVVbml0KHZhbHVl
V2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZOb25OZWcgfCBGUGVyY2VudCwgQ1NTU3RyaWN0
TW9kZSkpIHsKLSAgICAgICAgICAgIGNvbnRleHQuY29tbWl0TnVtYmVyKHZhbHVlV2l0aENhbGN1
bGF0aW9uKTsKLSAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0LmFsbG93RmlsbCgpICYmIHZhbHVl
LT5pZCA9PSBDU1NWYWx1ZUZpbGwpCi0gICAgICAgICAgICBjb250ZXh0LmNvbW1pdEZpbGwoKTsK
LSAgICAgICAgZWxzZSBpZiAoIWluU2hvcnRoYW5kKCkpIHsKLSAgICAgICAgICAgIC8vIElmIHdl
J3JlIG5vdCBwYXJzaW5nIGEgc2hvcnRoYW5kIHRoZW4gd2UgYXJlIGludmFsaWQuCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoY29u
dGV4dC5hbGxvd0ZpbmFsQ29tbWl0KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSdyZSBnb2lu
ZyB0byBzdWNjZXNzZnVsbHkgcGFyc2UsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGNvbnN1bWUgdGhp
cyB0b2tlbi4KLSAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+cHJldmlvdXMoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIG1fdmFsdWVM
aXN0LT5uZXh0KCk7Ci0gICAgfQotCi0gICAgaWYgKGNvbnRleHQuYWxsb3dGaW5hbENvbW1pdCgp
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIC13ZWJr
aXQtYm9yZGVyLWltYWdlLCAtd2Via2l0LW1hc2stYm94LWltYWdlIGFuZCAtd2Via2l0LWJveC1y
ZWZsZWN0IGhhdmUgdG8gZG8gYSBmaWxsIGJ5IGRlZmF1bHQuCi0gICAgICAgIC8vIEZJWE1FOiBX
aGF0IGRvIHdlIGRvIHdpdGggLXdlYmtpdC1ib3gtcmVmbGVjdCBhbmQgLXdlYmtpdC1tYXNrLWJv
eC1pbWFnZT8gUHJvYmFibHkganVzdCBoYXZlIHRvIGxlYXZlIHRoZW0gZmlsbGluZy4uLgotICAg
ICAgICBpZiAocHJvcElkID09IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySW1hZ2UgfHwgcHJvcElk
ID09IENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlIHx8IHByb3BJZCA9PSBDU1NQcm9wZXJ0
eVdlYmtpdEJveFJlZmxlY3QpCi0gICAgICAgICAgICBjb250ZXh0LmNvbW1pdEZpbGwoKTsKLQot
ICAgICAgICAvLyBOZWVkIHRvIGZ1bGx5IGNvbW1pdCBhcyBhIHNpbmdsZSB2YWx1ZS4KLSAgICAg
ICAgcmVzdWx0ID0gY29udGV4dC5jb21taXRCb3JkZXJJbWFnZVNsaWNlKCk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotY2xhc3MgQm9yZGVy
SW1hZ2VRdWFkUGFyc2VDb250ZXh0IHsKLXB1YmxpYzoKLSAgICBCb3JkZXJJbWFnZVF1YWRQYXJz
ZUNvbnRleHQoQ1NTUGFyc2VyJiBwYXJzZXIpCi0gICAgOiBtX3BhcnNlcihwYXJzZXIpCi0gICAg
LCBtX2FsbG93TnVtYmVyKHRydWUpCi0gICAgLCBtX2FsbG93RmluYWxDb21taXQoZmFsc2UpCi0g
ICAgeyB9Ci0KLSAgICBib29sIGFsbG93TnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd051
bWJlcjsgfQotICAgIGJvb2wgYWxsb3dGaW5hbENvbW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fYWxs
b3dGaW5hbENvbW1pdDsgfQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB0b3AoKSBjb25zdCB7IHJl
dHVybiBtX3RvcC5nZXQoKTsgfQotCi0gICAgdm9pZCBjb21taXROdW1iZXIoQ1NTUGFyc2VyOjpW
YWx1ZVdpdGhDYWxjdWxhdGlvbiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24pCi0gICAgewotICAgICAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHByaW1pdGl2ZVZhbHVlOwotICAgICAgICBpZiAo
dmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5pZCA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAg
ICAgICBwcmltaXRpdmVWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBwcmltaXRpdmVWYWx1ZSA9IG1fcGFyc2VyLmNyZWF0ZVByaW1pdGl2
ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0KLSAgICAgICAgaWYgKCFtX3Rv
cCkKLSAgICAgICAgICAgIG1fdG9wID0gV1RGTW92ZShwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAg
IGVsc2UgaWYgKCFtX3JpZ2h0KQotICAgICAgICAgICAgbV9yaWdodCA9IFdURk1vdmUocHJpbWl0
aXZlVmFsdWUpOwotICAgICAgICBlbHNlIGlmICghbV9ib3R0b20pCi0gICAgICAgICAgICBtX2Jv
dHRvbSA9IFdURk1vdmUocHJpbWl0aXZlVmFsdWUpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIEFTU0VSVCghbV9sZWZ0KTsKLSAgICAgICAgICAgIG1fbGVmdCA9IFdURk1vdmUocHJpbWl0
aXZlVmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9hbGxvd051bWJlciA9ICFtX2xlZnQ7
Ci0gICAgICAgIG1fYWxsb3dGaW5hbENvbW1pdCA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBz
ZXRBbGxvd0ZpbmFsQ29tbWl0KCkgeyBtX2FsbG93RmluYWxDb21taXQgPSB0cnVlOyB9Ci0gICAg
dm9pZCBzZXRUb3AoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbCkgeyBtX3RvcCA9IFdU
Rk1vdmUodmFsKTsgfQotCi0gICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBjb21taXRCb3JkZXJJ
bWFnZVF1YWQoKQotICAgIHsKLSAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9uZSBhbmQgcmVwZWF0
IHZhbHVlcyBmb3IgYW55IG9taXNzaW9ucy4KLSAgICAgICAgQVNTRVJUKG1fdG9wKTsKLSAgICAg
ICAgaWYgKCFtX3JpZ2h0KSB7Ci0gICAgICAgICAgICBtX3JpZ2h0ID0gbV90b3A7Ci0gICAgICAg
ICAgICBtX2JvdHRvbSA9IG1fdG9wOwotICAgICAgICAgICAgbV9sZWZ0ID0gbV90b3A7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKCFtX2JvdHRvbSkgewotICAgICAgICAgICAgbV9ib3R0b20gPSBt
X3RvcDsKLSAgICAgICAgICAgIG1fbGVmdCA9IG1fcmlnaHQ7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKCFtX2xlZnQpCi0gICAgICAgICAgICBtX2xlZnQgPSBtX3JpZ2h0OwotCi0gICAgICAgIC8v
IE5vdyBidWlsZCBhIHF1YWQgdmFsdWUgdG8gaG9sZCBhbGwgZm91ciBvZiBvdXIgcHJpbWl0aXZl
IHZhbHVlcy4KLSAgICAgICAgYXV0byBxdWFkID0gUXVhZDo6Y3JlYXRlKCk7Ci0gICAgICAgIHF1
YWQtPnNldFRvcChtX3RvcC5jb3B5UmVmKCkpOwotICAgICAgICBxdWFkLT5zZXRSaWdodChtX3Jp
Z2h0LmNvcHlSZWYoKSk7Ci0gICAgICAgIHF1YWQtPnNldEJvdHRvbShtX2JvdHRvbS5jb3B5UmVm
KCkpOwotICAgICAgICBxdWFkLT5zZXRMZWZ0KG1fbGVmdC5jb3B5UmVmKCkpOwotCi0gICAgICAg
IC8vIE1ha2Ugb3VyIG5ldyB2YWx1ZSBub3cuCi0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKFdURk1vdmUocXVhZCkpOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBDU1NQYXJzZXImIG1fcGFyc2VyOwotCi0gICAgYm9vbCBtX2FsbG93TnVtYmVyOwot
ICAgIGJvb2wgbV9hbGxvd0ZpbmFsQ29tbWl0OwotCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBtX3RvcDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fcmlnaHQ7Ci0gICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2JvdHRvbTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IG1fbGVmdDsKLX07Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdl
UXVhZChVbml0cyB2YWxpZFVuaXRzLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiByZXN1bHQp
Ci17Ci0gICAgQm9yZGVySW1hZ2VRdWFkUGFyc2VDb250ZXh0IGNvbnRleHQoKnRoaXMpOwotICAg
IENTU1BhcnNlclZhbHVlKiB2YWx1ZTsKLSAgICB3aGlsZSAoKHZhbHVlID0gbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKSkpIHsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2Fs
Y3VsYXRpb24oKnZhbHVlKTsKLSAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dOdW1iZXIoKSAmJiAo
dmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCB2YWxpZFVuaXRzLCBDU1NTdHJpY3RN
b2RlKSB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvKSkgewotICAgICAgICAgICAgY29udGV4
dC5jb21taXROdW1iZXIodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwotICAgICAgICB9IGVsc2UgaWYg
KCFpblNob3J0aGFuZCgpKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSdyZSBub3QgcGFyc2luZyBh
IHNob3J0aGFuZCB0aGVuIHdlIGFyZSBpbnZhbGlkLgotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dGaW5hbENv
bW1pdCgpKQotICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5wcmV2aW91cygpOyAvLyBUaGUg
c2hvcnRoYW5kIGxvb3Agd2lsbCBhZHZhbmNlIGJhY2sgdG8gdGhpcyBwb2ludC4KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAg
fQotCi0gICAgaWYgKGNvbnRleHQuYWxsb3dGaW5hbENvbW1pdCgpKSB7Ci0gICAgICAgIC8vIE5l
ZWQgdG8gZnVsbHkgY29tbWl0IGFzIGEgc2luZ2xlIHZhbHVlLgotICAgICAgICByZXN1bHQgPSBj
b250ZXh0LmNvbW1pdEJvcmRlckltYWdlUXVhZCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJJ
bWFnZVdpZHRoKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHJlc3VsdCkKLXsKLSAgICByZXR1
cm4gcGFyc2VCb3JkZXJJbWFnZVF1YWQoRkxlbmd0aCB8IEZJbnRlZ2VyIHwgRk5vbk5lZyB8IEZQ
ZXJjZW50LCByZXN1bHQpOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFnZU91
dHNldChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIHBh
cnNlQm9yZGVySW1hZ2VRdWFkKEZMZW5ndGggfCBGSW50ZWdlciB8IEZOb25OZWcsIHJlc3VsdCk7
Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlclJhZGl1cyhDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgdW5zaWduZWQgbnVtID0gbV92YWx1ZUxpc3Qt
PnNpemUoKTsKLSAgICBpZiAobnVtID4gOSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
U2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgcHJvcElkKTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IHJhZGlpWzJdWzRdOwotCi0gICAgdW5zaWduZWQgaW5kZXhBZnRlclNsYXNoID0g
MDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtOyArK2kpIHsKLSAgICAgICAgQ1NT
UGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT52YWx1ZUF0KGkpOwotICAgICAgICBp
ZiAodmFsdWUudW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IpIHsKLSAgICAgICAgICAg
IGlmICh2YWx1ZS5pVmFsdWUgIT0gJy8nKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICAgICAgaWYgKCFpIHx8IGluZGV4QWZ0ZXJTbGFzaCB8fCBpICsgMSA9PSBudW0g
fHwgbnVtID4gaSArIDUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
ICAgICBpbmRleEFmdGVyU2xhc2ggPSBpICsgMTsKLSAgICAgICAgICAgIGNvbXBsZXRlQm9yZGVy
UmFkaWkocmFkaWlbMF0pOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoaSAtIGluZGV4QWZ0ZXJTbGFzaCA+PSA0KQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9u
KHZhbHVlKTsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24s
IEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIGF1dG8gcmFkaXVzID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZh
bHVlV2l0aENhbGN1bGF0aW9uKTsKLQotICAgICAgICBpZiAoIWluZGV4QWZ0ZXJTbGFzaCkgewot
ICAgICAgICAgICAgcmFkaWlbMF1baV0gPSBXVEZNb3ZlKHJhZGl1cyk7Ci0KLSAgICAgICAgICAg
IC8vIExlZ2FjeSBzeW50YXg6IC13ZWJraXQtYm9yZGVyLXJhZGl1czogbDEgbDI7IGlzIGVxdWl2
YWxlbnQgdG8gYm9yZGVyLXJhZGl1czogbDEgLyBsMjsKLSAgICAgICAgICAgIGlmIChudW0gPT0g
MiAmJiBwcm9wSWQgPT0gQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJSYWRpdXMpIHsKLSAgICAgICAg
ICAgICAgICBpbmRleEFmdGVyU2xhc2ggPSAxOwotICAgICAgICAgICAgICAgIGNvbXBsZXRlQm9y
ZGVyUmFkaWkocmFkaWlbMF0pOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIHJhZGlpWzFdW2kgLSBpbmRleEFmdGVyU2xhc2hdID0gV1RGTW92ZShyYWRpdXMpOwot
ICAgIH0KLQotICAgIGlmICghaW5kZXhBZnRlclNsYXNoKSB7Ci0gICAgICAgIGNvbXBsZXRlQm9y
ZGVyUmFkaWkocmFkaWlbMF0pOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNDsg
KytpKQotICAgICAgICAgICAgcmFkaWlbMV1baV0gPSByYWRpaVswXVtpXTsKLSAgICB9IGVsc2UK
LSAgICAgICAgY29tcGxldGVCb3JkZXJSYWRpaShyYWRpaVsxXSk7Ci0KLSAgICBJbXBsaWNpdFNj
b3BlIGltcGxpY2l0U2NvcGUoKnRoaXMsIFByb3BlcnR5SW1wbGljaXQpOwotICAgIGFkZFByb3Bl
cnR5KENTU1Byb3BlcnR5Qm9yZGVyVG9wTGVmdFJhZGl1cywgY3JlYXRlUHJpbWl0aXZlVmFsdWVQ
YWlyKFdURk1vdmUocmFkaWlbMF1bMF0pLCBXVEZNb3ZlKHJhZGlpWzFdWzBdKSksIGltcG9ydGFu
dCk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJUb3BSaWdodFJhZGl1cywgY3Jl
YXRlUHJpbWl0aXZlVmFsdWVQYWlyKFdURk1vdmUocmFkaWlbMF1bMV0pLCBXVEZNb3ZlKHJhZGlp
WzFdWzFdKSksIGltcG9ydGFudCk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJC
b3R0b21SaWdodFJhZGl1cywgY3JlYXRlUHJpbWl0aXZlVmFsdWVQYWlyKFdURk1vdmUocmFkaWlb
MF1bMl0pLCBXVEZNb3ZlKHJhZGlpWzFdWzJdKSksIGltcG9ydGFudCk7Ci0gICAgYWRkUHJvcGVy
dHkoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21MZWZ0UmFkaXVzLCBjcmVhdGVQcmltaXRpdmVWYWx1
ZVBhaXIoV1RGTW92ZShyYWRpaVswXVszXSksIFdURk1vdmUocmFkaWlbMV1bM10pKSwgaW1wb3J0
YW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlQXNwZWN0
UmF0aW8oYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgdW5zaWduZWQgbnVtID0gbV92YWx1ZUxpc3Qt
PnNpemUoKTsKLSAgICBpZiAobnVtID09IDEpIHsKLSAgICAgICAgQ1NTVmFsdWVJRCB2YWx1ZUlk
ID0gbV92YWx1ZUxpc3QtPnZhbHVlQXQoMCktPmlkOwotICAgICAgICBpZiAodmFsdWVJZCA9PSBD
U1NWYWx1ZUF1dG8gfHwgdmFsdWVJZCA9PSBDU1NWYWx1ZUZyb21EaW1lbnNpb25zIHx8IHZhbHVl
SWQgPT0gQ1NTVmFsdWVGcm9tSW50cmluc2ljKSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShD
U1NQcm9wZXJ0eVdlYmtpdEFzcGVjdFJhdGlvLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZUlkKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG51bSAhPSAzKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSYgb3AgPSAqbV92YWx1ZUxpc3Qt
PnZhbHVlQXQoMSk7Ci0KLSAgICBpZiAoIWlzRm9yd2FyZFNsYXNoT3BlcmF0b3Iob3ApKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBsdmFsdWVXaXRo
Q2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT52YWx1ZUF0KDApKTsKLSAgICBWYWx1ZVdpdGhDYWxj
dWxhdGlvbiBydmFsdWVXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT52YWx1ZUF0KDIpKTsK
LSAgICBpZiAoIXZhbGlkYXRlVW5pdChsdmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBG
Tm9uTmVnKSB8fCAhdmFsaWRhdGVVbml0KHJ2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8
IEZOb25OZWcpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBk
b2Vzbid0IGhhbmRsZSBjYWxjdWxhdGVkIHZhbHVlcy4KLSAgICBpZiAoIWx2YWx1ZVdpdGhDYWxj
dWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSB8fCAhcnZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCku
ZlZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVdlYmtpdEFzcGVjdFJhdGlvLCBDU1NBc3BlY3RSYXRpb1ZhbHVlOjpjcmVhdGUobmFycm93
UHJlY2lzaW9uVG9GbG9hdChsdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFsdWUpLCBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHJ2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1
ZSkpLCBpbXBvcnRhbnQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZUNvdW50ZXIoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGludCBkZWZhdWx0VmFsdWUsIGJv
b2wgaW1wb3J0YW50KQotewotICAgIGVudW0geyBJRCwgVkFMIH0gc3RhdGUgPSBJRDsKLQotICAg
IGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKLSAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvdW50ZXJOYW1lOwotCi0gICAgd2hpbGUgKHRydWUp
IHsKLSAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KTsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICAgICAgY2FzZSBJRDoKLSAgICAg
ICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19JREVOVCkgewotICAgICAgICAgICAgICAgICAgICBjb3VudGVyTmFtZSA9IGNyZWF0ZVBy
aW1pdGl2ZVN0cmluZ1ZhbHVlKCp2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlID0g
VkFMOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFZBTDogewotICAgICAgICAgICAgICAgIGludCBpID0g
ZGVmYXVsdFZhbHVlOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+dW5pdCA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikgewotICAgICAgICAgICAgICAgICAgICBp
ID0gY2xhbXBUb0ludGVnZXIodmFsdWUtPmZWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
dmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
bGlzdC0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihXVEZNb3ZlKGNvdW50ZXJOYW1l
KSwKLSAgICAgICAgICAgICAgICAgICAgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVW
YWx1ZShpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpKTsKLSAgICAgICAgICAgICAg
ICBzdGF0ZSA9IElEOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmIChsaXN0LT5sZW5ndGgo
KSA+IDApIHsKLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBXVEZNb3ZlKGxpc3QpLCBpbXBv
cnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLS8vIFRoaXMgc2hvdWxkIGdvIGF3YXkgb25jZSB3ZSBkcm9wIHN1cHBvcnQgZm9yIC13
ZWJraXQtZ3JhZGllbnQKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlRGVw
cmVjYXRlZEdyYWRpZW50UG9pbnQoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBib29sIGhvcml6b250
YWwpCi17Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiByZXN1bHQ7Ci0gICAgaWYgKHZh
bHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkgewotICAgICAgICBpZiAo
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAibGVmdCIpICYmIGhvcml6b250
YWwpCi0gICAgICAgICAgICB8fCAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUs
ICJ0b3AiKSAmJiAhaG9yaXpvbnRhbCkpCi0gICAgICAgICAgICByZXN1bHQgPSBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKDAuLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BF
UkNFTlRBR0UpOwotICAgICAgICBlbHNlIGlmICgoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UodmFsdWUsICJyaWdodCIpICYmIGhvcml6b250YWwpCi0gICAgICAgICAgICB8fCAoZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJib3R0b20iKSAmJiAhaG9yaXpvbnRhbCkp
Ci0gICAgICAgICAgICByZXN1bHQgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZh
bHVlKDEwMC4sIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7Ci0gICAgICAgIGVs
c2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAiY2VudGVyIikpCi0g
ICAgICAgICAgICByZXN1bHQgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVl
KDUwLiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKLSAgICB9IGVsc2UgaWYg
KHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgfHwgdmFsdWUudW5p
dCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCi0gICAgICAgIHJlc3VsdCA9
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUodmFsdWUuZlZhbHVlLCBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzPih2YWx1ZS51bml0KSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGJvb2wgcGFyc2VEZXByZWNhdGVkR3JhZGllbnRD
b2xvclN0b3AoQ1NTUGFyc2VyJiBwYXJzZXIsIENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgQ1NTR3Jh
ZGllbnRDb2xvclN0b3AmIHN0b3ApCi17Ci0gICAgaWYgKHZhbHVlLnVuaXQgIT0gQ1NTUGFyc2Vy
VmFsdWU6OkZ1bmN0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiZnJvbSgiKQot
ICAgICAgICAmJiAhZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24t
Pm5hbWUsICJ0bygiKQotICAgICAgICAmJiAhZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
dmFsdWUuZnVuY3Rpb24tPm5hbWUsICJjb2xvci1zdG9wKCIpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJn
cy5nZXQoKTsKLSAgICBpZiAoIWFyZ3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgImZy
b20oIikKLSAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVu
Y3Rpb24tPm5hbWUsICJ0bygiKSkgewotICAgICAgICAvLyBUaGUgImZyb20iIGFuZCAidG8iIHN0
b3BzIGV4cGVjdCAxIGFyZ3VtZW50LgotICAgICAgICBpZiAoYXJncy0+c2l6ZSgpICE9IDEpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiZnJvbSgiKSkKLSAgICAgICAgICAg
IHN0b3AubV9wb3NpdGlvbiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUo
MCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzdG9wLm1fcG9zaXRpb24gPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZh
bHVlKDEsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKLQotICAgICAgICBDU1NWYWx1
ZUlEIGlkID0gYXJncy0+Y3VycmVudCgpLT5pZDsKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVl
V2Via2l0VGV4dCB8fCBDU1NQYXJzZXI6OmlzVmFsaWRTeXN0ZW1Db2xvclZhbHVlKGlkKSB8fCBp
ZCA9PSBDU1NWYWx1ZU1lbnUpCi0gICAgICAgICAgICBzdG9wLm1fY29sb3IgPSBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZCk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHN0b3AubV9jb2xvciA9IHBhcnNlci5wYXJzZUNvbG9yKGFyZ3MtPmN1cnJl
bnQoKSk7Ci0gICAgICAgIGlmICghc3RvcC5tX2NvbG9yKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIC8vIFRoZSAiY29sb3Itc3RvcCIgZnVuY3Rpb24gZXhwZWN0cyAz
IGFyZ3VtZW50cy4KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUu
ZnVuY3Rpb24tPm5hbWUsICJjb2xvci1zdG9wKCIpKSB7Ci0gICAgICAgIGlmIChhcmdzLT5zaXpl
KCkgIT0gMykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBDU1NQYXJzZXJW
YWx1ZSogc3RvcEFyZyA9IGFyZ3MtPmN1cnJlbnQoKTsKLSAgICAgICAgaWYgKHN0b3BBcmctPnVu
aXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQotICAgICAgICAgICAgc3Rv
cC5tX3Bvc2l0aW9uID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShzdG9w
QXJnLT5mVmFsdWUgLyAxMDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKLSAgICAg
ICAgZWxzZSBpZiAoc3RvcEFyZy0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJF
UikKLSAgICAgICAgICAgIHN0b3AubV9wb3NpdGlvbiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlVmFsdWUoc3RvcEFyZy0+ZlZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBzdG9wQXJnID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoc3RvcEFyZy0+dW5pdCAhPSBD
U1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgfHwgc3RvcEFyZy0+aVZhbHVlICE9ICcsJykKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBzdG9wQXJnID0gYXJncy0+bmV4dCgpOwot
ICAgICAgICBDU1NWYWx1ZUlEIGlkID0gc3RvcEFyZy0+aWQ7Ci0gICAgICAgIGlmIChpZCA9PSBD
U1NWYWx1ZVdlYmtpdFRleHQgfHwgQ1NTUGFyc2VyOjppc1ZhbGlkU3lzdGVtQ29sb3JWYWx1ZShp
ZCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51KQotICAgICAgICAgICAgc3RvcC5tX2NvbG9yID0gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWQpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBzdG9wLm1fY29sb3IgPSBwYXJzZXIucGFyc2VDb2xvcihzdG9w
QXJnKTsKLSAgICAgICAgaWYgKCFzdG9wLm1fY29sb3IpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZURlcHJlY2F0ZWRHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRy
PENTU1ZhbHVlPiYgZ3JhZGllbnQpCi17Ci0gICAgLy8gV2FsayB0aGUgYXJndW1lbnRzLgotICAg
IENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlTGlzdC5jdXJyZW50KCktPmZ1bmN0aW9u
LT5hcmdzLmdldCgpOwotICAgIGlmICghYXJncyB8fCBhcmdzLT5zaXplKCkgPT0gMCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBncmFk
aWVudCB0eXBlLiAgSXQgaXMgYW4gaWRlbnRpZmllci4KLSAgICBDU1NHcmFkaWVudFR5cGUgZ3Jh
ZGllbnRUeXBlOwotICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQo
KTsKLSAgICBpZiAoIWFyZ3VtZW50IHx8IGFyZ3VtZW50LT51bml0ICE9IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfSURFTlQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoKmFyZ3VtZW50LCAibGluZWFyIikpCi0gICAgICAgIGdyYWRp
ZW50VHlwZSA9IENTU0RlcHJlY2F0ZWRMaW5lYXJHcmFkaWVudDsKLSAgICBlbHNlIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSgqYXJndW1lbnQsICJyYWRpYWwiKSkKLSAgICAgICAg
Z3JhZGllbnRUeXBlID0gQ1NTRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50OwotICAgIGVsc2UKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPENTU0dyYWRpZW50VmFsdWU+IHJlc3Vs
dDsKLSAgICBzd2l0Y2ggKGdyYWRpZW50VHlwZSkgewotICAgIGNhc2UgQ1NTRGVwcmVjYXRlZExp
bmVhckdyYWRpZW50OgotICAgICAgICByZXN1bHQgPSBDU1NMaW5lYXJHcmFkaWVudFZhbHVlOjpj
cmVhdGUoTm9uUmVwZWF0aW5nLCBncmFkaWVudFR5cGUpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENTU0RlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudDoKLSAgICAgICAgcmVzdWx0ID0gQ1NTUmFk
aWFsR3JhZGllbnRWYWx1ZTo6Y3JlYXRlKE5vblJlcGVhdGluZywgZ3JhZGllbnRUeXBlKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgLy8gVGhlIHJlc3Qgb2YgdGhlIGdy
YWRpZW50IHR5cGVzIHNob3VsZG4ndCBhcHBlYXIgaGVyZS4KLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgfQotCi0gICAgLy8gQ29tbWEuCi0gICAgYXJndW1lbnQgPSBhcmdzLT5u
ZXh0KCk7Ci0gICAgaWYgKCFpc0NvbW1hKGFyZ3VtZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgLy8gTmV4dCBjb21lcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSBncmFkaWVu
dCBhcyBhbiB4IHkgcGFpci4gIFRoZXJlIGlzIG5vCi0gICAgLy8gY29tbWEgYmV0d2VlbiB0aGUg
eCBhbmQgdGhlIHkgdmFsdWVzLgotICAgIC8vIEZpcnN0IFguICBJdCBjYW4gYmUgbGVmdCwgcmln
aHQsIG51bWJlciBvciBwZXJjZW50LgotICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwotICAg
IGlmICghYXJndW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IHBvaW50ID0gcGFyc2VEZXByZWNhdGVkR3JhZGllbnRQb2ludCgqYXJndW1l
bnQsIHRydWUpOwotICAgIGlmICghcG9pbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXN1bHQtPnNldEZpcnN0WChwb2ludC5yZWxlYXNlTm9uTnVsbCgpKTsKLQotICAgIC8vIEZpcnN0
IFkuICBJdCBjYW4gYmUgdG9wLCBib3R0b20sIG51bWJlciBvciBwZXJjZW50LgotICAgIGFyZ3Vt
ZW50ID0gYXJncy0+bmV4dCgpOwotICAgIGlmICghYXJndW1lbnQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBwb2ludCA9IHBhcnNlRGVwcmVjYXRlZEdyYWRpZW50UG9pbnQoKmFyZ3VtZW50
LCBmYWxzZSk7Ci0gICAgaWYgKCFwb2ludCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJl
c3VsdC0+c2V0Rmlyc3RZKHBvaW50LnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgLy8gQ29tbWEg
YWZ0ZXIgdGhlIGZpcnN0IHBvaW50LgotICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwotICAg
IGlmICghaXNDb21tYShhcmd1bWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8v
IEZvciByYWRpYWwgZ3JhZGllbnRzIG9ubHksIHdlIG5vdyBleHBlY3QgYSBudW1lcmljIHJhZGl1
cy4KLSAgICBpZiAoZ3JhZGllbnRUeXBlID09IENTU0RlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudCkg
ewotICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgLy8gRklYTUU6IFRo
aXMgZG9lcyBub3QgaGFuZGxlIGNhbGN1bGF0aW9uIHZhbHVlcy4KLSAgICAgICAgaWYgKCFhcmd1
bWVudCB8fCBhcmd1bWVudC0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24g
YXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKLSAgICAgICAgZG93bmNhc3Q8Q1NT
UmFkaWFsR3JhZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0Rmlyc3RSYWRpdXMoY3JlYXRlUHJpbWl0
aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSk7Ci0KLSAgICAgICAgLy8g
Q29tbWEgYWZ0ZXIgdGhlIGZpcnN0IHJhZGl1cy4KLSAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5u
ZXh0KCk7Ci0gICAgICAgIGlmICghaXNDb21tYShhcmd1bWVudCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gTmV4dCBpcyB0aGUgZW5kaW5nIHBvaW50IGZvciB0
aGUgZ3JhZGllbnQgYXMgYW4geCwgeSBwYWlyLgotICAgIC8vIFNlY29uZCBYLiAgSXQgY2FuIGJl
IGxlZnQsIHJpZ2h0LCBudW1iZXIgb3IgcGVyY2VudC4KLSAgICBhcmd1bWVudCA9IGFyZ3MtPm5l
eHQoKTsKLSAgICBpZiAoIWFyZ3VtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcG9p
bnQgPSBwYXJzZURlcHJlY2F0ZWRHcmFkaWVudFBvaW50KCphcmd1bWVudCwgdHJ1ZSk7Ci0gICAg
aWYgKCFwb2ludCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdC0+c2V0U2Vjb25k
WChwb2ludC5yZWxlYXNlTm9uTnVsbCgpKTsKLQotICAgIC8vIFNlY29uZCBZLiAgSXQgY2FuIGJl
IHRvcCwgYm90dG9tLCBudW1iZXIgb3IgcGVyY2VudC4KLSAgICBhcmd1bWVudCA9IGFyZ3MtPm5l
eHQoKTsKLSAgICBpZiAoIWFyZ3VtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcG9p
bnQgPSBwYXJzZURlcHJlY2F0ZWRHcmFkaWVudFBvaW50KCphcmd1bWVudCwgZmFsc2UpOwotICAg
IGlmICghcG9pbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQtPnNldFNlY29u
ZFkocG9pbnQucmVsZWFzZU5vbk51bGwoKSk7Ci0KLSAgICAvLyBGb3IgcmFkaWFsIGdyYWRpZW50
cyBvbmx5LCB3ZSBub3cgZXhwZWN0IHRoZSBzZWNvbmQgcmFkaXVzLgotICAgIGlmIChncmFkaWVu
dFR5cGUgPT0gQ1NTRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KSB7Ci0gICAgICAgIC8vIENvbW1h
IGFmdGVyIHRoZSBzZWNvbmQgcG9pbnQuCi0gICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgp
OwotICAgICAgICBpZiAoIWlzQ29tbWEoYXJndW1lbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwotICAgICAgICAvLyBGSVhN
RTogVGhpcyBkb2VzIG5vdCBoYW5kbGUgY2FsY3VsYXRpb24gdmFsdWVzLgotICAgICAgICBpZiAo
IWFyZ3VtZW50IHx8IGFyZ3VtZW50LT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVN
QkVSKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxh
dGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnQpOwotICAgICAgICBkb3duY2Fz
dDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPigqcmVzdWx0KS5zZXRTZWNvbmRSYWRpdXMoY3JlYXRl
UHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSk7Ci0gICAgfQot
Ci0gICAgLy8gV2Ugbm93IHdpbGwgYWNjZXB0IGFueSBudW1iZXIgb2Ygc3RvcHMgKDAgb3IgbW9y
ZSkuCi0gICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0gICAgd2hpbGUgKGFyZ3VtZW50KSB7
Ci0gICAgICAgIC8vIExvb2sgZm9yIHRoZSBjb21tYSBiZWZvcmUgdGhlIG5leHQgc3RvcC4KLSAg
ICAgICAgaWYgKCFpc0NvbW1hKGFyZ3VtZW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICAvLyBOb3cgZXhhbWluZSB0aGUgc3RvcCBpdHNlbGYuCi0gICAgICAgIGFyZ3Vt
ZW50ID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoIWFyZ3VtZW50KQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIFRoZSBmdW5jdGlvbiBuYW1lIG5lZWRzIHRvIGJl
IG9uZSBvZiAiZnJvbSIsICJ0byIsIG9yICJjb2xvci1zdG9wLiIKLSAgICAgICAgQ1NTR3JhZGll
bnRDb2xvclN0b3Agc3RvcDsKLSAgICAgICAgaWYgKCFwYXJzZURlcHJlY2F0ZWRHcmFkaWVudENv
bG9yU3RvcCgqdGhpcywgKmFyZ3VtZW50LCBzdG9wKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgcmVzdWx0LT5hZGRTdG9wKHN0b3ApOwotCi0gICAgICAgIC8vIEFkdmFuY2UK
LSAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0gICAgfQotCi0gICAgZ3JhZGllbnQg
PSBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbHVlRnJvbVNpZGVLZXl3b3JkKENTU1BhcnNlclZhbHVlJiB2
YWx1ZSwgYm9vbCYgaXNIb3Jpem9udGFsKQotewotICAgIGlmICh2YWx1ZS51bml0ICE9IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
c3dpdGNoICh2YWx1ZS5pZCkgewotICAgICAgICBjYXNlIENTU1ZhbHVlTGVmdDoKLSAgICAgICAg
Y2FzZSBDU1NWYWx1ZVJpZ2h0OgotICAgICAgICAgICAgaXNIb3Jpem9udGFsID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlVG9wOgotICAgICAgICBjYXNl
IENTU1ZhbHVlQm90dG9tOgotICAgICAgICAgICAgaXNIb3Jpem9udGFsID0gZmFsc2U7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KLSAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUodmFsdWUuaWQpOwotfQotCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBwYXJzZUdyYWRpZW50Q29sb3JPcktleXdvcmQoQ1NTUGFyc2VyJiBwYXJzZXIsIENT
U1BhcnNlclZhbHVlJiB2YWx1ZSkKLXsKLSAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWUuaWQ7Ci0g
ICAgaWYgKGlkID09IENTU1ZhbHVlV2Via2l0VGV4dCB8fCBDU1NQYXJzZXI6OmlzVmFsaWRTeXN0
ZW1Db2xvclZhbHVlKGlkKSB8fCBpZCA9PSBDU1NWYWx1ZU1lbnUgfHwgaWQgPT0gQ1NTVmFsdWVD
dXJyZW50Y29sb3IpCi0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShpZCk7Ci0KLSAgICByZXR1cm4gcGFyc2VyLnBhcnNlQ29sb3Io
JnZhbHVlKTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVwcmVjYXRlZExpbmVhckdyYWRp
ZW50KENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWU+JiBncmFk
aWVudCwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nKQotewotICAgIGF1dG8gcmVzdWx0ID0g
Q1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6Y3JlYXRlKHJlcGVhdGluZywgQ1NTUHJlZml4ZWRMaW5l
YXJHcmFkaWVudCk7Ci0KLSAgICAvLyBXYWxrIHRoZSBhcmd1bWVudHMuCi0gICAgQ1NTUGFyc2Vy
VmFsdWVMaXN0KiBhcmdzID0gdmFsdWVMaXN0LmN1cnJlbnQoKS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0
KCk7Ci0gICAgaWYgKCFhcmdzIHx8ICFhcmdzLT5zaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKLSAg
ICBpZiAoIWFyZ3VtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgVmFsdWVXaXRoQ2Fs
Y3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKLQotICAgIGJvb2wg
ZXhwZWN0Q29tbWEgPSBmYWxzZTsKLSAgICAvLyBMb29rIGZvciBhbmdsZS4KLSAgICBpZiAodmFs
aWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGQW5nbGUsIENTU1N0cmljdE1vZGUp
KSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0QW5nbGUoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVl
KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSk7Ci0KLSAgICAgICAgYXJncy0+bmV4dCgpOwotICAg
ICAgICBleHBlY3RDb21tYSA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gTG9vayBv
bmUgb3IgdHdvIG9wdGlvbmFsIGtleXdvcmRzIHRoYXQgaW5kaWNhdGUgYSBzaWRlIG9yIGNvcm5l
ci4KLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzdGFydFgsIHN0YXJ0WTsKLSAg
ICAgICAgYm9vbCBpc0hvcml6b250YWwgPSBmYWxzZTsKLSAgICAgICAgaWYgKFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gbG9jYXRpb24gPSB2YWx1ZUZyb21TaWRlS2V5d29yZCgqYXJndW1lbnQs
IGlzSG9yaXpvbnRhbCkpIHsKLSAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpCi0gICAgICAg
ICAgICAgICAgc3RhcnRYID0gV1RGTW92ZShsb2NhdGlvbik7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgc3RhcnRZID0gV1RGTW92ZShsb2NhdGlvbik7Ci0KLSAgICAgICAgICAg
IGlmICgoYXJndW1lbnQgPSBhcmdzLT5uZXh0KCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChs
b2NhdGlvbiA9IHZhbHVlRnJvbVNpZGVLZXl3b3JkKCphcmd1bWVudCwgaXNIb3Jpem9udGFsKSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0YXJ0WCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFggPSBXVEZNb3ZlKGxvY2F0
aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChzdGFydFkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRZID0gV1RGTW92ZShsb2NhdGlvbik7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBhcmdzLT5uZXh0KCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBleHBlY3RD
b21tYSA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXN0YXJ0WCAmJiAhc3RhcnRZ
KQotICAgICAgICAgICAgc3RhcnRZID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVUb3ApOwotCi0gICAgICAgIHJlc3VsdC0+c2V0Rmlyc3RY
KFdURk1vdmUoc3RhcnRYKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0Rmlyc3RZKFdURk1vdmUoc3Rh
cnRZKSk7Ci0gICAgfQotCi0gICAgaWYgKCFwYXJzZUdyYWRpZW50Q29sb3JTdG9wcygqYXJncywg
cmVzdWx0LCBleHBlY3RDb21tYSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgh
cmVzdWx0LT5zdG9wQ291bnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZ3JhZGll
bnQgPSBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFy
c2VyOjpwYXJzZURlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIHZh
bHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVlPiYgZ3JhZGllbnQsIENTU0dyYWRpZW50UmVwZWF0IHJl
cGVhdGluZykKLXsKLSAgICBhdXRvIHJlc3VsdCA9IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNy
ZWF0ZShyZXBlYXRpbmcsIENTU1ByZWZpeGVkUmFkaWFsR3JhZGllbnQpOwotCi0gICAgLy8gV2Fs
ayB0aGUgYXJndW1lbnRzLgotICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlTGlz
dC5jdXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotICAgIGlmICghYXJncyB8fCAhYXJn
cy0+c2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZSog
YXJndW1lbnQgPSBhcmdzLT5jdXJyZW50KCk7Ci0gICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBleHBlY3RDb21tYSA9IGZhbHNlOwotCi0gICAgLy8g
T3B0aW9uYWwgYmFja2dyb3VuZC1wb3NpdGlvbgotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY2VudGVyWDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNlbnRlclk7Ci0gICAg
Ly8gcGFyc2UyVmFsdWVzRmlsbFBvc2l0aW9uIGFkdmFuY2VzIHRoZSBhcmdzIG5leHQgcG9pbnRl
ci4KLSAgICBwYXJzZTJWYWx1ZXNGaWxsUG9zaXRpb24oKmFyZ3MsIGNlbnRlclgsIGNlbnRlclkp
OwotICAgIGFyZ3VtZW50ID0gYXJncy0+Y3VycmVudCgpOwotICAgIGlmICghYXJndW1lbnQpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChjZW50ZXJYIHx8IGNlbnRlclkpIHsKLSAg
ICAgICAgLy8gQ29tbWEKLSAgICAgICAgaWYgKCFpc0NvbW1hKGFyZ3VtZW50KSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLSAg
ICAgICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICByZXN1bHQtPnNldEZpcnN0WChjZW50ZXJYLmNvcHlSZWYoKSk7Ci0gICAgcmVzdWx0LT5z
ZXRTZWNvbmRYKFdURk1vdmUoY2VudGVyWCkpOwotICAgIC8vIENTUzMgcmFkaWFsIGdyYWRpZW50
cyBhbHdheXMgc2hhcmUgdGhlIHNhbWUgc3RhcnQgYW5kIGVuZCBwb2ludC4KLSAgICByZXN1bHQt
PnNldEZpcnN0WShjZW50ZXJZLmNvcHlSZWYoKSk7Ci0gICAgcmVzdWx0LT5zZXRTZWNvbmRZKFdU
Rk1vdmUoY2VudGVyWSkpOwotCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzaGFwZVZh
bHVlOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2l6ZVZhbHVlOwotCi0gICAgLy8g
T3B0aW9uYWwgc2hhcGUgYW5kL29yIHNpemUgaW4gYW55IG9yZGVyLgotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgMjsgKytpKSB7Ci0gICAgICAgIGlmIChhcmd1bWVudC0+dW5pdCAhPSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgYm9v
bCBmb3VuZFZhbHVlID0gZmFsc2U7Ci0gICAgICAgIHN3aXRjaCAoYXJndW1lbnQtPmlkKSB7Ci0g
ICAgICAgIGNhc2UgQ1NTVmFsdWVDaXJjbGU6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVFbGxpcHNl
OgotICAgICAgICAgICAgc2hhcGVWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKGFyZ3VtZW50LT5pZCk7Ci0gICAgICAgICAgICBmb3VuZFZhbHVl
ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlQ2xvc2Vz
dFNpZGU6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVDbG9zZXN0Q29ybmVyOgotICAgICAgICBjYXNl
IENTU1ZhbHVlRmFydGhlc3RTaWRlOgotICAgICAgICBjYXNlIENTU1ZhbHVlRmFydGhlc3RDb3Ju
ZXI6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVDb250YWluOgotICAgICAgICBjYXNlIENTU1ZhbHVl
Q292ZXI6Ci0gICAgICAgICAgICBzaXplVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShhcmd1bWVudC0+aWQpOwotICAgICAgICAgICAgZm91bmRW
YWx1ZSA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGZvdW5kVmFsdWUpIHsKLSAg
ICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwotICAgICAgICAgICAgaWYgKCFhcmd1
bWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGV4cGVj
dENvbW1hID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlc3VsdC0+c2V0U2hhcGUo
c2hhcGVWYWx1ZS5jb3B5UmVmKCkpOwotICAgIHJlc3VsdC0+c2V0U2l6aW5nQmVoYXZpb3Ioc2l6
ZVZhbHVlLmNvcHlSZWYoKSk7Ci0KLSAgICAvLyBPciwgdHdvIGxlbmd0aHMgb3IgcGVyY2VudGFn
ZXMKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGhvcml6b250YWxTaXplOwotICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmVydGljYWxTaXplOwotCi0gICAgaWYgKCFzaGFwZVZh
bHVlICYmICFzaXplVmFsdWUpIHsKLSAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gaFNpemVX
aXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKLSAgICAgICAgaWYgKHZhbGlkYXRlVW5pdChoU2l6
ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSkgewotICAgICAgICAgICAgaG9y
aXpvbnRhbFNpemUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoaFNpemVXaXRoQ2FsY3Vs
YXRpb24pOwotICAgICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgICAg
ICBpZiAoIWFyZ3VtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgVmFsdWVXaXRo
Q2FsY3VsYXRpb24gdlNpemVXaXRoQ2FsY3VsYXRpb24oKmFyZ3VtZW50KTsKLSAgICAgICAgaWYg
KHZhbGlkYXRlVW5pdCh2U2l6ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSkg
ewotICAgICAgICAgICAgdmVydGljYWxTaXplID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVl
KHZTaXplV2l0aENhbGN1bGF0aW9uKTsKLQotICAgICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5u
ZXh0KCk7Ci0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50KQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8vIE11c3QgaGF2ZSBuZWl0aGVyIG9yIGJvdGguCi0gICAgaWYgKCFob3Jpem9u
dGFsU2l6ZSAhPSAhdmVydGljYWxTaXplKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXN1bHQtPnNldEVuZEhvcml6b250YWxTaXplKFdURk1vdmUoaG9yaXpvbnRhbFNpemUpKTsKLSAg
ICByZXN1bHQtPnNldEVuZFZlcnRpY2FsU2l6ZShXVEZNb3ZlKHZlcnRpY2FsU2l6ZSkpOwotCi0g
ICAgaWYgKCFwYXJzZUdyYWRpZW50Q29sb3JTdG9wcygqYXJncywgcmVzdWx0LCBleHBlY3RDb21t
YSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGdyYWRpZW50ID0gV1RGTW92ZShyZXN1
bHQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VMaW5lYXJH
cmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVlPiYg
Z3JhZGllbnQsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZykKLXsKLSAgICBhdXRvIHJlc3Vs
dCA9IENTU0xpbmVhckdyYWRpZW50VmFsdWU6OmNyZWF0ZShyZXBlYXRpbmcsIENTU0xpbmVhckdy
YWRpZW50KTsKLQotICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZhbHVlTGlzdC5jdXJy
ZW50KCktPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotICAgIGlmICghYXJncyB8fCAhYXJncy0+c2l6
ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWFyZ3MtPmN1cnJlbnQoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gZmlyc3RB
cmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy0+Y3VycmVudCgpKTsKLQotICAgIGJvb2wgZXhw
ZWN0Q29tbWEgPSBmYWxzZTsKLSAgICAvLyBMb29rIGZvciBhbmdsZS4KLSAgICBpZiAodmFsaWRh
dGVVbml0KGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZBbmdsZSwgQ1NTU3RyaWN0TW9k
ZSkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXRBbmdsZShjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFs
dWUoZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOwotCi0gICAgICAgIGFyZ3MtPm5leHQo
KTsKLSAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAoZmlyc3RBcmd1
bWVudFdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19JREVOVCAmJiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmaXJzdEFyZ3VtZW50V2l0
aENhbGN1bGF0aW9uLCAidG8iKSkgewotICAgICAgICAvLyB0byBbIFtsZWZ0IHwgcmlnaHRdIHx8
IFt0b3AgfCBib3R0b21dIF0KLSAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIG5leHRBcmd1bWVudCA9
IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKCFuZXh0QXJndW1lbnQpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgYm9vbCBpc0hvcml6b250YWwgPSBmYWxzZTsKLSAgICAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsb2NhdGlvbiA9IHZhbHVlRnJvbVNpZGVLZXl3
b3JkKCpuZXh0QXJndW1lbnQsIGlzSG9yaXpvbnRhbCk7Ci0gICAgICAgIGlmICghbG9jYXRpb24p
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBlbmRYLCBlbmRZOwotICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQotICAgICAgICAg
ICAgZW5kWCA9IFdURk1vdmUobG9jYXRpb24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBl
bmRZID0gV1RGTW92ZShsb2NhdGlvbik7Ci0KLSAgICAgICAgbmV4dEFyZ3VtZW50ID0gYXJncy0+
bmV4dCgpOwotICAgICAgICBpZiAoIW5leHRBcmd1bWVudCkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBsb2NhdGlvbiA9IHZhbHVlRnJvbVNpZGVLZXl3b3JkKCpuZXh0QXJn
dW1lbnQsIGlzSG9yaXpvbnRhbCk7Ci0gICAgICAgIGlmIChsb2NhdGlvbikgewotICAgICAgICAg
ICAgaWYgKGlzSG9yaXpvbnRhbCkgewotICAgICAgICAgICAgICAgIGlmIChlbmRYKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZW5kWCA9IFdURk1v
dmUobG9jYXRpb24pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAo
ZW5kWSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IGVuZFkgPSBXVEZNb3ZlKGxvY2F0aW9uKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
YXJncy0+bmV4dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwot
ICAgICAgICByZXN1bHQtPnNldEZpcnN0WChXVEZNb3ZlKGVuZFgpKTsKLSAgICAgICAgcmVzdWx0
LT5zZXRGaXJzdFkoV1RGTW92ZShlbmRZKSk7Ci0gICAgfQotCi0gICAgaWYgKCFwYXJzZUdyYWRp
ZW50Q29sb3JTdG9wcygqYXJncywgcmVzdWx0LCBleHBlY3RDb21tYSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmICghcmVzdWx0LT5zdG9wQ291bnQoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgZ3JhZGllbnQgPSBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVJhZGlhbEdyYWRpZW50KENTU1BhcnNlclZh
bHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWU+JiBncmFkaWVudCwgQ1NTR3JhZGll
bnRSZXBlYXQgcmVwZWF0aW5nKQotewotICAgIGF1dG8gcmVzdWx0ID0gQ1NTUmFkaWFsR3JhZGll
bnRWYWx1ZTo6Y3JlYXRlKHJlcGVhdGluZywgQ1NTUmFkaWFsR3JhZGllbnQpOwotCi0gICAgQ1NT
UGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWVMaXN0LmN1cnJlbnQoKS0+ZnVuY3Rpb24tPmFy
Z3MuZ2V0KCk7Ci0gICAgaWYgKCFhcmdzIHx8ICFhcmdzLT5zaXplKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQo
KTsKLSAgICBpZiAoIWFyZ3VtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29s
IGV4cGVjdENvbW1hID0gZmFsc2U7Ci0KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNo
YXBlVmFsdWU7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzaXplVmFsdWU7Ci0gICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBob3Jpem9udGFsU2l6ZTsKLSAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IHZlcnRpY2FsU2l6ZTsKLQotICAgIC8vIEZpcnN0IHBhcnQgb2YgZ3Jh
bW1hciwgdGhlIHNpemUvc2hhcGUgY2xhdXNlOgotICAgIC8vIFsgY2lyY2xlIHx8IDxsZW5ndGg+
IF0gfAotICAgIC8vIFsgZWxsaXBzZSB8fCBbIDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IF17Mn0g
XSB8Ci0gICAgLy8gWyBbIGNpcmNsZSB8IGVsbGlwc2VdIHx8IDxzaXplLWtleXdvcmQ+IF0KLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxh
dGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJndW1lbnQpOwotICAgICAgICBpZiAoYXJn
dW1lbnQtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkgewotICAgICAgICAg
ICAgYm9vbCBiYWRJZGVudCA9IGZhbHNlOwotICAgICAgICAgICAgc3dpdGNoIChhcmd1bWVudC0+
aWQpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDaXJjbGU6Ci0gICAgICAgICAgICBjYXNl
IENTU1ZhbHVlRWxsaXBzZToKLSAgICAgICAgICAgICAgICBpZiAoc2hhcGVWYWx1ZSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIHNoYXBlVmFsdWUg
PSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShhcmd1bWVu
dC0+aWQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1
ZUNsb3Nlc3RTaWRlOgotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUNsb3Nlc3RDb3JuZXI6Ci0g
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlRmFydGhlc3RTaWRlOgotICAgICAgICAgICAgY2FzZSBD
U1NWYWx1ZUZhcnRoZXN0Q29ybmVyOgotICAgICAgICAgICAgICAgIGlmIChzaXplVmFsdWUgfHwg
aG9yaXpvbnRhbFNpemUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgICAgICBzaXplVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShhcmd1bWVudC0+aWQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBiYWRJZGVudCA9IHRydWU7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChiYWRJZGVudCkKLSAgICAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgICAg
ICBpZiAoIWFyZ3VtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fSBlbHNlIGlmICh2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgg
fCBGUGVyY2VudCkpIHsKLQotICAgICAgICAgICAgaWYgKHNpemVWYWx1ZSB8fCBob3Jpem9udGFs
U2l6ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBob3Jpem9u
dGFsU2l6ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxh
dGlvbik7Ci0KLSAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwotICAgICAgICAg
ICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZTaXplV2l0aENhbGN1bGF0aW9uKCphcmd1bWVu
dCk7Ci0gICAgICAgICAgICBpZiAodmFsaWRhdGVVbml0KHZTaXplV2l0aENhbGN1bGF0aW9uLCBG
TGVuZ3RoIHwgRlBlcmNlbnQpKSB7Ci0gICAgICAgICAgICAgICAgdmVydGljYWxTaXplID0gY3Jl
YXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZTaXplV2l0aENhbGN1bGF0aW9uKTsKLSAgICAgICAg
ICAgICAgICArK2k7Ci0gICAgICAgICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIC8vIFlvdSBjYW4gc3BlY2lmeSBzaXplIGFzIGEga2V5d29yZCBvciBh
IGxlbmd0aC9wZXJjZW50YWdlLCBub3QgYm90aC4KLSAgICBpZiAoc2l6ZVZhbHVlICYmIGhvcml6
b250YWxTaXplKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gQ2lyY2xlcyBtdXN0IGhh
dmUgMCBvciAxIGxlbmd0aHMuCi0gICAgaWYgKHNoYXBlVmFsdWUgJiYgc2hhcGVWYWx1ZS0+Z2V0
VmFsdWVJRCgpID09IENTU1ZhbHVlQ2lyY2xlICYmIHZlcnRpY2FsU2l6ZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIC8vIEVsbGlwc2VzIG11c3QgaGF2ZSAwIG9yIDIgbGVuZ3RoL3BlcmNl
bnRhZ2VzLgotICAgIGlmIChzaGFwZVZhbHVlICYmIHNoYXBlVmFsdWUtPmdldFZhbHVlSUQoKSA9
PSBDU1NWYWx1ZUVsbGlwc2UgJiYgaG9yaXpvbnRhbFNpemUgJiYgIXZlcnRpY2FsU2l6ZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIElmIHRoZXJlJ3Mgb25seSBvbmUgc2l6ZSwgaXQg
bXVzdCBiZSBhIGxlbmd0aC4KLSAgICBpZiAoIXZlcnRpY2FsU2l6ZSAmJiBob3Jpem9udGFsU2l6
ZSAmJiBob3Jpem9udGFsU2l6ZS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJlc3VsdC0+c2V0U2hhcGUoc2hhcGVWYWx1ZS5jb3B5UmVmKCkpOwotICAgIHJl
c3VsdC0+c2V0U2l6aW5nQmVoYXZpb3Ioc2l6ZVZhbHVlLmNvcHlSZWYoKSk7Ci0gICAgcmVzdWx0
LT5zZXRFbmRIb3Jpem9udGFsU2l6ZShob3Jpem9udGFsU2l6ZS5jb3B5UmVmKCkpOwotICAgIHJl
c3VsdC0+c2V0RW5kVmVydGljYWxTaXplKHZlcnRpY2FsU2l6ZS5jb3B5UmVmKCkpOwotCi0gICAg
Ly8gU2Vjb25kIHBhcnQgb2YgZ3JhbW1hciwgdGhlIGNlbnRlci1wb3NpdGlvbiBjbGF1c2U6Ci0g
ICAgLy8gYXQgPHBvc2l0aW9uPgotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY2VudGVy
WDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNlbnRlclk7Ci0gICAgaWYgKGFyZ3Vt
ZW50LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQgJiYgZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UoKmFyZ3VtZW50LCAiYXQiKSkgewotICAgICAgICBhcmd1bWVudCA9
IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKCFhcmd1bWVudCkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICBwYXJzZUZpbGxQb3NpdGlvbigqYXJncywgY2VudGVyWCwgY2Vu
dGVyWSk7Ci0gICAgICAgIGlmICghKGNlbnRlclggJiYgY2VudGVyWSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5jdXJyZW50KCk7Ci0gICAg
ICAgIGlmICghYXJndW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
cmVzdWx0LT5zZXRGaXJzdFgoY2VudGVyWC5jb3B5UmVmKCkpOwotICAgICAgICByZXN1bHQtPnNl
dEZpcnN0WShjZW50ZXJZLmNvcHlSZWYoKSk7Ci0gICAgICAgIC8vIFJpZ2h0IG5vdywgQ1NTIHJh
ZGlhbCBncmFkaWVudHMgaGF2ZSB0aGUgc2FtZSBzdGFydCBhbmQgZW5kIGNlbnRlcnMuCi0gICAg
ICAgIHJlc3VsdC0+c2V0U2Vjb25kWChjZW50ZXJYLmNvcHlSZWYoKSk7Ci0gICAgICAgIHJlc3Vs
dC0+c2V0U2Vjb25kWShjZW50ZXJZLmNvcHlSZWYoKSk7Ci0gICAgfQotCi0gICAgaWYgKHNoYXBl
VmFsdWUgfHwgc2l6ZVZhbHVlIHx8IGhvcml6b250YWxTaXplIHx8IGNlbnRlclggfHwgY2VudGVy
WSkKLSAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwotCi0gICAgaWYgKCFwYXJzZUdyYWRpZW50
Q29sb3JTdG9wcygqYXJncywgcmVzdWx0LCBleHBlY3RDb21tYSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGdyYWRpZW50ID0gV1RGTW92ZShyZXN1bHQpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VHcmFkaWVudENvbG9yU3RvcHMoQ1NTUGFyc2Vy
VmFsdWVMaXN0JiB2YWx1ZUxpc3QsIENTU0dyYWRpZW50VmFsdWUmIGdyYWRpZW50LCBib29sIGV4
cGVjdENvbW1hKQotewotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IHZhbHVlTGlzdC5jdXJy
ZW50KCk7Ci0gICAgYm9vbCBwcmV2aW91c1N0b3BXYXNNaWRwb2ludCA9IHRydWU7Ci0KLSAgICAv
LyBOb3cgbG9vayBmb3IgY29sb3Igc3RvcHMuCi0gICAgd2hpbGUgKHZhbHVlKSB7Ci0gICAgICAg
IC8vIExvb2sgZm9yIHRoZSBjb21tYSBiZWZvcmUgdGhlIG5leHQgc3RvcC4KLSAgICAgICAgaWYg
KGV4cGVjdENvbW1hKSB7Ci0gICAgICAgICAgICBpZiAoIWlzQ29tbWEodmFsdWUpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZUxpc3Qu
bmV4dCgpOwotICAgICAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA8Y29sb3Itc3RvcD4gPSA8Y29sb3I+IFsg
PHBlcmNlbnRhZ2U+IHwgPGxlbmd0aD4gXT8KLSAgICAgICAgQ1NTR3JhZGllbnRDb2xvclN0b3Ag
c3RvcDsKLSAgICAgICAgc3RvcC5tX2NvbG9yID0gcGFyc2VHcmFkaWVudENvbG9yT3JLZXl3b3Jk
KCp0aGlzLCAqdmFsdWUpOwotICAgICAgICBpZiAoIXN0b3AubV9jb2xvcikgewotICAgICAgICAg
ICAgaWYgKHByZXZpb3VzU3RvcFdhc01pZHBvaW50KSAvLyAyIG1pZHBvaW50cyBpbiBhIHJvdyBp
cyBub3QgYWxsb3dlZC4gVGhpcyBhbHNvIGNhdGNoZXMgc3RhcnRpbmcgd2l0aCBhIG1pZHBvaW50
LgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgc3RvcC5pc01p
ZHBvaW50ID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB2YWx1ZSA9IHZhbHVl
TGlzdC5uZXh0KCk7Ci0KLSAgICAgICAgcHJldmlvdXNTdG9wV2FzTWlkcG9pbnQgPSBzdG9wLmlz
TWlkcG9pbnQ7Ci0KLSAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICBWYWx1ZVdpdGhD
YWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOwotICAgICAgICAgICAgaWYg
KHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50KSkg
ewotICAgICAgICAgICAgICAgIHN0b3AubV9wb3NpdGlvbiA9IGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSB2
YWx1ZUxpc3QubmV4dCgpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzdG9wLmlzTWlkcG9pbnQp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgZ3Jh
ZGllbnQuYWRkU3RvcChzdG9wKTsKLSAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwotICAgIH0K
LQotICAgIC8vIFdlIGNhbid0IGVuZCBvbiBhIG1pZHBvaW50LgotICAgIGlmIChwcmV2aW91c1N0
b3BXYXNNaWRwb2ludCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gTXVzdCBoYXZl
IDIgb3IgbW9yZSBzdG9wcyB0byBiZSB2YWxpZC4KLSAgICByZXR1cm4gZ3JhZGllbnQuc3RvcENv
dW50KCkgPj0gMjsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OmlzR2VuZXJhdGVkSW1hZ2VWYWx1ZShD
U1NQYXJzZXJWYWx1ZSYgdmFsdWUpIGNvbnN0Ci17Ci0gICAgaWYgKHZhbHVlLnVuaXQgIT0gQ1NT
UGFyc2VyVmFsdWU6OkZ1bmN0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICIt
d2Via2l0LWdyYWRpZW50KCIpCi0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoIikKLSAg
ICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5h
bWUsICJsaW5lYXItZ3JhZGllbnQoIikKLSAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LXJlcGVhdGluZy1saW5lYXIt
Z3JhZGllbnQoIikKLSAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFs
dWUuZnVuY3Rpb24tPm5hbWUsICJyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KCIpCi0gICAgICAg
IHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAi
LXdlYmtpdC1yYWRpYWwtZ3JhZGllbnQoIikKLSAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJyYWRpYWwtZ3JhZGllbnQoIikKLSAg
ICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5h
bWUsICItd2Via2l0LXJlcGVhdGluZy1yYWRpYWwtZ3JhZGllbnQoIikKLSAgICAgICAgfHwgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJyZXBlYXRp
bmctcmFkaWFsLWdyYWRpZW50KCIpCi0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1jYW52YXMoIikKLSAgICAgICAg
fHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJj
cm9zcy1mYWRlKCIpCi0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZh
bHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1jcm9zcy1mYWRlKCIpCi0gICAgICAgIHx8IGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiZmlsdGVy
KCIpCi0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLmZ1bmN0
aW9uLT5uYW1lLCAiLXdlYmtpdC1maWx0ZXIoIikKLSAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICItd2Via2l0LW5hbWVkLWltYWdl
KCIpOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VHZW5lcmF0ZWRJbWFnZShDU1NQYXJzZXJW
YWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUpCi17Ci0gICAgQ1NT
UGFyc2VyVmFsdWUmIHBhcnNlclZhbHVlID0gKnZhbHVlTGlzdC5jdXJyZW50KCk7Ci0KLSAgICBp
ZiAocGFyc2VyVmFsdWUudW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShw
YXJzZXJWYWx1ZS5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtZ3JhZGllbnQoIikpCi0gICAgICAg
IHJldHVybiBwYXJzZURlcHJlY2F0ZWRHcmFkaWVudCh2YWx1ZUxpc3QsIHZhbHVlKTsKLQotICAg
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzZXJWYWx1ZS5mdW5jdGlvbi0+
bmFtZSwgIi13ZWJraXQtbGluZWFyLWdyYWRpZW50KCIpKQotICAgICAgICByZXR1cm4gcGFyc2VE
ZXByZWNhdGVkTGluZWFyR3JhZGllbnQodmFsdWVMaXN0LCB2YWx1ZSwgTm9uUmVwZWF0aW5nKTsK
LQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzZXJWYWx1ZS5mdW5j
dGlvbi0+bmFtZSwgImxpbmVhci1ncmFkaWVudCgiKSkKLSAgICAgICAgcmV0dXJuIHBhcnNlTGlu
ZWFyR3JhZGllbnQodmFsdWVMaXN0LCB2YWx1ZSwgTm9uUmVwZWF0aW5nKTsKLQotICAgIGlmIChl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzZXJWYWx1ZS5mdW5jdGlvbi0+bmFtZSwg
Ii13ZWJraXQtcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgiKSkKLSAgICAgICAgcmV0dXJuIHBh
cnNlRGVwcmVjYXRlZExpbmVhckdyYWRpZW50KHZhbHVlTGlzdCwgdmFsdWUsIFJlcGVhdGluZyk7
Ci0KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFyc2VyVmFsdWUuZnVu
Y3Rpb24tPm5hbWUsICJyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KCIpKQotICAgICAgICByZXR1
cm4gcGFyc2VMaW5lYXJHcmFkaWVudCh2YWx1ZUxpc3QsIHZhbHVlLCBSZXBlYXRpbmcpOwotCi0g
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBhcnNlclZhbHVlLmZ1bmN0aW9u
LT5uYW1lLCAiLXdlYmtpdC1yYWRpYWwtZ3JhZGllbnQoIikpCi0gICAgICAgIHJldHVybiBwYXJz
ZURlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudCh2YWx1ZUxpc3QsIHZhbHVlLCBOb25SZXBlYXRpbmcp
OwotCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBhcnNlclZhbHVlLmZ1
bmN0aW9uLT5uYW1lLCAicmFkaWFsLWdyYWRpZW50KCIpKQotICAgICAgICByZXR1cm4gcGFyc2VS
YWRpYWxHcmFkaWVudCh2YWx1ZUxpc3QsIHZhbHVlLCBOb25SZXBlYXRpbmcpOwotCi0gICAgaWYg
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBhcnNlclZhbHVlLmZ1bmN0aW9uLT5uYW1l
LCAiLXdlYmtpdC1yZXBlYXRpbmctcmFkaWFsLWdyYWRpZW50KCIpKQotICAgICAgICByZXR1cm4g
cGFyc2VEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQodmFsdWVMaXN0LCB2YWx1ZSwgUmVwZWF0aW5n
KTsKLQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwYXJzZXJWYWx1ZS5m
dW5jdGlvbi0+bmFtZSwgInJlcGVhdGluZy1yYWRpYWwtZ3JhZGllbnQoIikpCi0gICAgICAgIHJl
dHVybiBwYXJzZVJhZGlhbEdyYWRpZW50KHZhbHVlTGlzdCwgdmFsdWUsIFJlcGVhdGluZyk7Ci0K
LSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFyc2VyVmFsdWUuZnVuY3Rp
b24tPm5hbWUsICItd2Via2l0LWNhbnZhcygiKSkKLSAgICAgICAgcmV0dXJuIHBhcnNlQ2FudmFz
KHZhbHVlTGlzdCwgdmFsdWUpOwotCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHBhcnNlclZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1jcm9zcy1mYWRlKCIpKQot
ICAgICAgICByZXR1cm4gcGFyc2VDcm9zc2ZhZGUodmFsdWVMaXN0LCB2YWx1ZSwgdHJ1ZSk7Ci0K
LSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGFyc2VyVmFsdWUuZnVuY3Rp
b24tPm5hbWUsICJjcm9zcy1mYWRlKCIpKQotICAgICAgICByZXR1cm4gcGFyc2VDcm9zc2ZhZGUo
dmFsdWVMaXN0LCB2YWx1ZSwgZmFsc2UpOwotCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKHBhcnNlclZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiZmlsdGVyKCIpIHx8IGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBhcnNlclZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdl
YmtpdC1maWx0ZXIoIikpCi0gICAgICAgIHJldHVybiBwYXJzZUZpbHRlckltYWdlKHZhbHVlTGlz
dCwgdmFsdWUpOwotCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBhcnNl
clZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAiLXdlYmtpdC1uYW1lZC1pbWFnZSgiKSkKLSAgICAgICAg
cmV0dXJuIHBhcnNlTmFtZWRJbWFnZSh2YWx1ZUxpc3QsIHZhbHVlKTsKLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsdGVySW1hZ2UoQ1NTUGFyc2VyVmFs
dWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZT4mIGZpbHRlcikKLXsKLSAgICAvLyBX
YWxrIHRoZSBhcmd1bWVudHMuCi0gICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWVM
aXN0LmN1cnJlbnQoKS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7Ci0gICAgaWYgKCFhcmdzKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gYXJncy0+Y3Vy
cmVudCgpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8v
IFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgaW1hZ2UuIEl0IGlzIGEgZmlsbCBpbWFnZS4KLSAg
ICBSZWZQdHI8Q1NTVmFsdWU+IGltYWdlVmFsdWU7Ci0gICAgaWYgKCFwYXJzZUZpbGxJbWFnZSgq
YXJncywgaW1hZ2VWYWx1ZSkpIHsKLSAgICAgICAgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQotICAgICAgICAgICAgaW1hZ2VWYWx1ZSA9IENTU0ltYWdl
VmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTCh2YWx1ZS0+c3RyaW5nKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB2YWx1ZSA9IGFyZ3MtPm5l
eHQoKTsKLQotICAgIC8vIFNraXAgYSBjb21tYQotICAgIGlmICghaXNDb21tYSh2YWx1ZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB2YWx1ZSA9IGFyZ3MtPm5leHQoKTsKLQotICAgIFJl
ZlB0cjxDU1NWYWx1ZUxpc3Q+IGZpbHRlclZhbHVlOwotICAgIGlmICghdmFsdWUgfHwgIXBhcnNl
RmlsdGVyKCphcmdzLCBmaWx0ZXJWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB2
YWx1ZSA9IGFyZ3MtPm5leHQoKTsKLQotICAgIGZpbHRlciA9IENTU0ZpbHRlckltYWdlVmFsdWU6
OmNyZWF0ZShpbWFnZVZhbHVlLnJlbGVhc2VOb25OdWxsKCksIGZpbHRlclZhbHVlLnJlbGVhc2VO
b25OdWxsKCkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUNyb3NzZmFkZShDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVl
PiYgY3Jvc3NmYWRlLCBib29sIHByZWZpeGVkKQotewotICAgIC8vIFdhbGsgdGhlIGFyZ3VtZW50
cy4KLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZUxpc3QuY3VycmVudCgpLT5m
dW5jdGlvbi0+YXJncy5nZXQoKTsKLSAgICBpZiAoIWFyZ3MgfHwgYXJncy0+c2l6ZSgpICE9IDUp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9
IGFyZ3MtPmN1cnJlbnQoKTsKLQotICAgIC8vIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgImZy
b20iIGltYWdlLiBJdCBpcyBhIGZpbGwgaW1hZ2UuCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBmcm9t
SW1hZ2VWYWx1ZTsKLSAgICBpZiAoIWFyZ3VtZW50IHx8ICFwYXJzZUZpbGxJbWFnZSgqYXJncywg
ZnJvbUltYWdlVmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXJndW1lbnQgPSBh
cmdzLT5uZXh0KCk7Ci0KLSAgICAvLyBTa2lwIGEgY29tbWEKLSAgICBpZiAoIWlzQ29tbWEoYXJn
dW1lbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0
KCk7Ci0KLSAgICAvLyBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSAidG8iIGltYWdlLiBJdCBp
cyBhIGZpbGwgaW1hZ2UuCi0gICAgUmVmUHRyPENTU1ZhbHVlPiB0b0ltYWdlVmFsdWU7Ci0gICAg
aWYgKCFhcmd1bWVudCB8fCAhcGFyc2VGaWxsSW1hZ2UoKmFyZ3MsIHRvSW1hZ2VWYWx1ZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLQotICAg
IC8vIFNraXAgYSBjb21tYQotICAgIGlmICghaXNDb21tYShhcmd1bWVudCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLQotICAgIC8vIFRoZSB0
aGlyZCBhcmd1bWVudCBpcyB0aGUgY3Jvc3NmYWRlIHZhbHVlLiBJdCBpcyBhIHBlcmNlbnRhZ2Ug
b3IgYSBmcmFjdGlvbmFsIG51bWJlci4KLSAgICBpZiAoIWFyZ3VtZW50KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwZXJjZW50YWdl
OwotICAgIGlmIChhcmd1bWVudC0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNF
TlRBR0UpCi0gICAgICAgIHBlcmNlbnRhZ2UgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZVZhbHVlKGNsYW1wVG88ZG91YmxlPihhcmd1bWVudC0+ZlZhbHVlIC8gMTAwLCAwLCAxKSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwotICAgIGVsc2UgaWYgKGFyZ3VtZW50LT51
bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKQotICAgICAgICBwZXJjZW50YWdl
ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShjbGFtcFRvPGRvdWJsZT4o
YXJndW1lbnQtPmZWYWx1ZSwgMCwgMSksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsK
LSAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNyb3NzZmFkZSA9IENTU0Ny
b3NzZmFkZVZhbHVlOjpjcmVhdGUoZnJvbUltYWdlVmFsdWUucmVsZWFzZU5vbk51bGwoKSwgdG9J
bWFnZVZhbHVlLnJlbGVhc2VOb25OdWxsKCksIHBlcmNlbnRhZ2UucmVsZWFzZU5vbk51bGwoKSwg
cHJlZml4ZWQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUNhbnZhcyhDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVlPiYg
Y2FudmFzKQotewotICAgIC8vIFdhbGsgdGhlIGFyZ3VtZW50cy4KLSAgICBDU1NQYXJzZXJWYWx1
ZUxpc3QqIGFyZ3MgPSB2YWx1ZUxpc3QuY3VycmVudCgpLT5mdW5jdGlvbi0+YXJncy5nZXQoKTsK
LSAgICBpZiAoIWFyZ3MgfHwgYXJncy0+c2l6ZSgpICE9IDEpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIC8vIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgY2FudmFzIG5hbWUuICBJdCBp
cyBhbiBpZGVudGlmaWVyLgotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IGFyZ3MtPmN1cnJl
bnQoKTsKLSAgICBpZiAoIXZhbHVlIHx8IHZhbHVlLT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfSURFTlQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNhbnZhcyA9IENTU0Nh
bnZhc1ZhbHVlOjpjcmVhdGUodmFsdWUtPnN0cmluZyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgQ1NTUGFyc2VyOjpwYXJzZU5hbWVkSW1hZ2UoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1
ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZT4mIG5hbWVkSW1hZ2UpCi17Ci0gICAgQ1NTUGFyc2VyVmFs
dWVMaXN0KiBhcmdzID0gdmFsdWVMaXN0LmN1cnJlbnQoKS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7
Ci0gICAgaWYgKCFhcmdzIHx8IGFyZ3MtPnNpemUoKSAhPSAxKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAvLyBUaGUgb25seSBhcmd1bWVudCBpcyB0aGUgaW1hZ2UgbmFtZS4KLSAgICBD
U1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBhcmdzLT5jdXJyZW50KCk7Ci0gICAgaWYgKCF2YWx1ZSB8
fCB2YWx1ZS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBuYW1lZEltYWdlID0gQ1NTTmFtZWRJbWFnZVZhbHVlOjpjcmVh
dGUodmFsdWUtPnN0cmluZyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NT
X0lNQUdFX1JFU09MVVRJT04pCi1SZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNl
SW1hZ2VSZXNvbHV0aW9uKCkKLXsKLSAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0
ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgYm9vbCBoYXZlUmVzb2x1dGlvbiA9IGZhbHNlOwotICAg
IGJvb2wgaGF2ZUZyb21JbWFnZSA9IGZhbHNlOwotICAgIGJvb2wgaGF2ZVNuYXAgPSBmYWxzZTsK
LQotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0g
ICAgd2hpbGUgKHZhbHVlKSB7Ci0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0
aENhbGN1bGF0aW9uKCp2YWx1ZSk7Ci0gICAgICAgIGlmICghaGF2ZUZyb21JbWFnZSAmJiB2YWx1
ZS0+aWQgPT0gQ1NTVmFsdWVGcm9tSW1hZ2UpIHsKLSAgICAgICAgICAgIGxpc3QtPmFwcGVuZChD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQp
KTsKLSAgICAgICAgICAgIGhhdmVGcm9tSW1hZ2UgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYg
KCFoYXZlU25hcCAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVTbmFwKSB7Ci0gICAgICAgICAgICBs
aXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUodmFsdWUtPmlkKSk7Ci0gICAgICAgICAgICBoYXZlU25hcCA9IHRydWU7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoIWhhdmVSZXNvbHV0aW9uICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxh
dGlvbiwgRlJlc29sdXRpb24gfCBGTm9uTmVnKSAmJiB2YWx1ZS0+ZlZhbHVlID4gMCkgewotICAg
ICAgICAgICAgbGlzdC0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdp
dGhDYWxjdWxhdGlvbikpOwotICAgICAgICAgICAgaGF2ZVJlc29sdXRpb24gPSB0cnVlOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB2YWx1ZSA9
IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgfQotICAgIGlmICghbGlzdC0+bGVuZ3RoKCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghaGF2ZUZyb21JbWFnZSAmJiAhaGF2ZVJl
c29sdXRpb24pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBXVEZNb3ZlKGxp
c3QpOwotfQotI2VuZGlmCi0KLVJlZlB0cjxDU1NJbWFnZVNldFZhbHVlPiBDU1NQYXJzZXI6OnBh
cnNlSW1hZ2VTZXQoKQotewotICAgIENTU1BhcnNlclZhbHVlJiB2YWx1ZSA9ICptX3ZhbHVlTGlz
dC0+Y3VycmVudCgpOwotICAgIEFTU0VSVCh2YWx1ZS51bml0ID09IENTU1BhcnNlclZhbHVlOjpG
dW5jdGlvbik7Ci0KLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGZ1bmN0aW9uQXJncyA9IHZhbHVl
LmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotICAgIGlmICghZnVuY3Rpb25BcmdzIHx8ICFmdW5jdGlv
bkFyZ3MtPnNpemUoKSB8fCAhZnVuY3Rpb25BcmdzLT5jdXJyZW50KCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgYXV0byBpbWFnZVNldCA9IENTU0ltYWdlU2V0VmFsdWU6OmNyZWF0
ZSgpOwotICAgIENTU1BhcnNlclZhbHVlKiBhcmcgPSBmdW5jdGlvbkFyZ3MtPmN1cnJlbnQoKTsK
LSAgICB3aGlsZSAoYXJnKSB7Ci0gICAgICAgIGlmIChhcmctPnVuaXQgIT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19VUkkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBp
bWFnZVNldC0+YXBwZW5kKENTU0ltYWdlVmFsdWU6OmNyZWF0ZShjb21wbGV0ZVVSTChhcmctPnN0
cmluZykpKTsKLSAgICAgICAgYXJnID0gZnVuY3Rpb25BcmdzLT5uZXh0KCk7Ci0gICAgICAgIGlm
ICghYXJnIHx8IGFyZy0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RJTUVOU0lPTikK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGRvdWJsZSBpbWFnZVNjYWxl
RmFjdG9yID0gMDsKLSAgICAgICAgY29uc3QgU3RyaW5nJiBzdHJpbmcgPSBhcmctPnN0cmluZzsK
LSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotICAgICAgICBpZiAo
IWxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpZiAoc3RyaW5n
LmlzOEJpdCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBMQ2hhciogc3RhcnQgPSBzdHJpbmcuY2hh
cmFjdGVyczgoKTsKLSAgICAgICAgICAgIHBhcnNlRG91YmxlKHN0YXJ0LCBzdGFydCArIGxlbmd0
aCwgJ3gnLCBpbWFnZVNjYWxlRmFjdG9yKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGNvbnN0IFVDaGFyKiBzdGFydCA9IHN0cmluZy5jaGFyYWN0ZXJzMTYoKTsKLSAgICAgICAgICAg
IHBhcnNlRG91YmxlKHN0YXJ0LCBzdGFydCArIGxlbmd0aCwgJ3gnLCBpbWFnZVNjYWxlRmFjdG9y
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW1hZ2VTY2FsZUZhY3RvciA8PSAwKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGltYWdlU2V0LT5hcHBlbmQoQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShpbWFnZVNjYWxlRmFjdG9yLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUikpOwotCi0gICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBtb3Jl
IGFyZ3VtZW50cywgd2UncmUgZG9uZS4KLSAgICAgICAgYXJnID0gZnVuY3Rpb25BcmdzLT5uZXh0
KCk7Ci0gICAgICAgIGlmICghYXJnKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8g
SWYgdGhlcmUgYXJlIG1vcmUgYXJndW1lbnRzLCB0aGV5IHNob3VsZCBiZSBhZnRlciBhIGNvbW1h
LgotICAgICAgICBpZiAoIWlzQ29tbWEoYXJnKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgICAgIC8vIFNraXAgdGhlIGNvbW1hIGFuZCBtb3ZlIG9uIHRvIHRoZSBuZXh0IGFy
Z3VtZW50LgotICAgICAgICBhcmcgPSBmdW5jdGlvbkFyZ3MtPm5leHQoKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gV1RGTW92ZShpbWFnZVNldCk7Ci19Ci0KLWNsYXNzIFRyYW5zZm9ybU9wZXJhdGlv
bkluZm8gewotcHVibGljOgotICAgIFRyYW5zZm9ybU9wZXJhdGlvbkluZm8oY29uc3QgQ1NTUGFy
c2VyU3RyaW5nJiBuYW1lKQotICAgICAgICA6IG1fdHlwZShXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6VW5rbm93blRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAgLCBtX2FyZ0NvdW50KDEpCi0g
ICAgICAgICwgbV9hbGxvd1NpbmdsZUFyZ3VtZW50KGZhbHNlKQotICAgICAgICAsIG1fdW5pdChD
U1NQYXJzZXI6OkZVbmtub3duKQotICAgIHsKLSAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnM7Ci0gICAgICAgIHVuc2lnbmVkIG5hbWVMZW5ndGggPSBuYW1lLmxlbmd0aCgpOwotCi0gICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGxvbmdlc3ROYW1lTGVuZ3RoID0gMTI7Ci0gICAgICAgIFVDaGFy
IGNoYXJhY3RlckJ1ZmZlcltsb25nZXN0TmFtZUxlbmd0aF07Ci0gICAgICAgIGlmIChuYW1lLmlz
OEJpdCgpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdGQ6Om1pbihsb25nZXN0
TmFtZUxlbmd0aCwgbmFtZUxlbmd0aCk7Ci0gICAgICAgICAgICBjb25zdCBMQ2hhciogY2hhcmFj
dGVyczggPSBuYW1lLmNoYXJhY3RlcnM4KCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgY2hhcmFjdGVyQnVmZmVyW2ld
ID0gY2hhcmFjdGVyczhbaV07Ci0gICAgICAgICAgICBjaGFyYWN0ZXJzID0gY2hhcmFjdGVyQnVm
ZmVyOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNoYXJhY3RlcnMgPSBuYW1lLmNoYXJh
Y3RlcnMxNigpOwotCi0gICAgICAgIHN3aXRjaCAobmFtZUxlbmd0aCkgewotICAgICAgICBjYXNl
IDU6Ci0gICAgICAgICAgICAvLyBWYWxpZCBuYW1lOiBza2V3KC4KLSAgICAgICAgICAgIGlmICgo
KGNoYXJhY3RlcnNbMF0gPT0gJ3MnKSB8fCAoY2hhcmFjdGVyc1swXSA9PSAnUycpKQotICAgICAg
ICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzFdID09ICdrJykgfHwgKGNoYXJhY3RlcnNbMV0gPT0g
J0snKSkKLSAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1syXSA9PSAnZScpIHx8IChjaGFy
YWN0ZXJzWzJdID09ICdFJykpCi0gICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbM10gPT0g
J3cnKSB8fCAoY2hhcmFjdGVyc1szXSA9PSAnVycpKQotICAgICAgICAgICAgICAgICYgKGNoYXJh
Y3RlcnNbNF0gPT0gJygnKSkgewotICAgICAgICAgICAgICAgIG1fdW5pdCA9IENTU1BhcnNlcjo6
RkFuZ2xlOwotICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOwotICAgICAgICAgICAgICAgIG1fYWxsb3dTaW5nbGVB
cmd1bWVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbV9hcmdDb3VudCA9IDM7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAg
Ly8gVmFsaWQgbmFtZXM6IHNrZXd4KCwgc2tld3koLCBzY2FsZSguCi0gICAgICAgICAgICBpZiAo
KGNoYXJhY3RlcnNbMV0gPT0gJ2MnKSB8fCAoY2hhcmFjdGVyc1sxXSA9PSAnQycpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCgoY2hhcmFjdGVyc1swXSA9PSAncycpIHx8IChjaGFyYWN0ZXJzWzBd
ID09ICdTJykpCi0gICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzJdID09ICdhJykg
fHwgKGNoYXJhY3RlcnNbMl0gPT0gJ0EnKSkKLSAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJh
Y3RlcnNbM10gPT0gJ2wnKSB8fCAoY2hhcmFjdGVyc1szXSA9PSAnTCcpKQotICAgICAgICAgICAg
ICAgICAgICAmICgoY2hhcmFjdGVyc1s0XSA9PSAnZScpIHx8IChjaGFyYWN0ZXJzWzRdID09ICdF
JykpCi0gICAgICAgICAgICAgICAgICAgICYgKGNoYXJhY3RlcnNbNV0gPT0gJygnKSkgewotICAg
ICAgICAgICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZOdW1iZXI7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVRyYW5zZm9y
bU9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgbV9hbGxvd1NpbmdsZUFyZ3VtZW50ID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbV9hcmdDb3VudCA9IDM7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmICgoKGNoYXJhY3RlcnNbMF0gPT0gJ3MnKSB8fCAo
Y2hhcmFjdGVyc1swXSA9PSAnUycpKQotICAgICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFj
dGVyc1sxXSA9PSAnaycpIHx8IChjaGFyYWN0ZXJzWzFdID09ICdLJykpCi0gICAgICAgICAgICAg
ICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzJdID09ICdlJykgfHwgKGNoYXJhY3RlcnNbMl0gPT0g
J0UnKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbM10gPT0gJ3cnKSB8
fCAoY2hhcmFjdGVyc1szXSA9PSAnVycpKQotICAgICAgICAgICAgICAgICAgICAgICAmIChjaGFy
YWN0ZXJzWzVdID09ICcoJykpIHsKLSAgICAgICAgICAgICAgICBpZiAoKGNoYXJhY3RlcnNbNF0g
PT0gJ3gnKSB8fCAoY2hhcmFjdGVyc1s0XSA9PSAnWCcpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1fdW5pdCA9IENTU1BhcnNlcjo6RkFuZ2xlOwotICAgICAgICAgICAgICAgICAgICBtX3R5cGUg
PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1hUcmFuc2Zvcm1PcGVyYXRpb247Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICgoY2hhcmFjdGVyc1s0XSA9PSAneScpIHx8IChjaGFyYWN0
ZXJzWzRdID09ICdZJykpIHsKLSAgICAgICAgICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2Vy
OjpGQW5nbGU7Ci0gICAgICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpTa2V3WVRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA3OgotICAgICAgICAg
ICAgLy8gVmFsaWQgbmFtZXM6IG1hdHJpeCgsIHJvdGF0ZSgsIHNjYWxleCgsIHNjYWxleSgsIHNj
YWxleiguCi0gICAgICAgICAgICBpZiAoKGNoYXJhY3RlcnNbMF0gPT0gJ20nKSB8fCAoY2hhcmFj
dGVyc1swXSA9PSAnTScpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCgoY2hhcmFjdGVyc1sxXSA9
PSAnYScpIHx8IChjaGFyYWN0ZXJzWzFdID09ICdBJykpCi0gICAgICAgICAgICAgICAgICAgICYg
KChjaGFyYWN0ZXJzWzJdID09ICd0JykgfHwgKGNoYXJhY3RlcnNbMl0gPT0gJ1QnKSkKLSAgICAg
ICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbM10gPT0gJ3InKSB8fCAoY2hhcmFjdGVyc1sz
XSA9PSAnUicpKQotICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s0XSA9PSAnaScp
IHx8IChjaGFyYWN0ZXJzWzRdID09ICdJJykpCi0gICAgICAgICAgICAgICAgICAgICYgKChjaGFy
YWN0ZXJzWzVdID09ICd4JykgfHwgKGNoYXJhY3RlcnNbNV0gPT0gJ1gnKSkKLSAgICAgICAgICAg
ICAgICAgICAgJiAoY2hhcmFjdGVyc1s2XSA9PSAnKCcpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1fdW5pdCA9IENTU1BhcnNlcjo6Rk51bWJlcjsKLSAgICAgICAgICAgICAgICAgICAgbV90eXBl
ID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6Ok1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjsKLSAg
ICAgICAgICAgICAgICAgICAgbV9hcmdDb3VudCA9IDExOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoKGNoYXJhY3RlcnNbMF0gPT0gJ3InKSB8fCAoY2hhcmFjdGVy
c1swXSA9PSAnUicpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCgoY2hhcmFjdGVyc1sxXSA9PSAn
bycpIHx8IChjaGFyYWN0ZXJzWzFdID09ICdPJykpCi0gICAgICAgICAgICAgICAgICAgICYgKChj
aGFyYWN0ZXJzWzJdID09ICd0JykgfHwgKGNoYXJhY3RlcnNbMl0gPT0gJ1QnKSkKLSAgICAgICAg
ICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbM10gPT0gJ2EnKSB8fCAoY2hhcmFjdGVyc1szXSA9
PSAnQScpKQotICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s0XSA9PSAndCcpIHx8
IChjaGFyYWN0ZXJzWzRdID09ICdUJykpCi0gICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0
ZXJzWzVdID09ICdlJykgfHwgKGNoYXJhY3RlcnNbNV0gPT0gJ0UnKSkKLSAgICAgICAgICAgICAg
ICAgICAgJiAoY2hhcmFjdGVyc1s2XSA9PSAnKCcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1f
dW5pdCA9IENTU1BhcnNlcjo6RkFuZ2xlOwotICAgICAgICAgICAgICAgICAgICBtX3R5cGUgPSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKChjaGFyYWN0ZXJzWzBdID09ICdz
JykgfHwgKGNoYXJhY3RlcnNbMF0gPT0gJ1MnKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAo
KGNoYXJhY3RlcnNbMV0gPT0gJ2MnKSB8fCAoY2hhcmFjdGVyc1sxXSA9PSAnQycpKQotICAgICAg
ICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1syXSA9PSAnYScpIHx8IChjaGFyYWN0ZXJz
WzJdID09ICdBJykpCi0gICAgICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzNdID09
ICdsJykgfHwgKGNoYXJhY3RlcnNbM10gPT0gJ0wnKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
JiAoKGNoYXJhY3RlcnNbNF0gPT0gJ2UnKSB8fCAoY2hhcmFjdGVyc1s0XSA9PSAnRScpKQotICAg
ICAgICAgICAgICAgICAgICAgICAmIChjaGFyYWN0ZXJzWzZdID09ICcoJykpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoKGNoYXJhY3RlcnNbNV0gPT0gJ3gnKSB8fCAoY2hhcmFjdGVyc1s1XSA9PSAn
WCcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fdW5pdCA9IENTU1BhcnNlcjo6Rk51bWJlcjsK
LSAgICAgICAgICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNj
YWxlWFRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChjaGFy
YWN0ZXJzWzVdID09ICd5JykgfHwgKGNoYXJhY3RlcnNbNV0gPT0gJ1knKSkgewotICAgICAgICAg
ICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZOdW1iZXI7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVy
YXRpb247Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoY2hhcmFjdGVyc1s1XSA9PSAneicp
IHx8IChjaGFyYWN0ZXJzWzVdID09ICdaJykpIHsKLSAgICAgICAgICAgICAgICAgICAgbV91bml0
ID0gQ1NTUGFyc2VyOjpGTnVtYmVyOwotICAgICAgICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVaVHJhbnNmb3JtT3BlcmF0aW9uOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IDg6Ci0gICAgICAgICAgICAvLyBWYWxpZCBuYW1lczogcm90YXRleCgsIHJvdGF0ZXkoLCByb3Rh
dGV6KCwgc2NhbGUzZCguCi0gICAgICAgICAgICBpZiAoKGNoYXJhY3RlcnNbMF0gPT0gJ3MnKSB8
fCAoY2hhcmFjdGVyc1swXSA9PSAnUycpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCgoY2hhcmFj
dGVyc1sxXSA9PSAnYycpIHx8IChjaGFyYWN0ZXJzWzFdID09ICdDJykpCi0gICAgICAgICAgICAg
ICAgICAgICYgKChjaGFyYWN0ZXJzWzJdID09ICdhJykgfHwgKGNoYXJhY3RlcnNbMl0gPT0gJ0En
KSkKLSAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbM10gPT0gJ2wnKSB8fCAoY2hh
cmFjdGVyc1szXSA9PSAnTCcpKQotICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s0
XSA9PSAnZScpIHx8IChjaGFyYWN0ZXJzWzRdID09ICdFJykpCi0gICAgICAgICAgICAgICAgICAg
ICYgKGNoYXJhY3RlcnNbNV0gPT0gJzMnKQotICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFj
dGVyc1s2XSA9PSAnZCcpIHx8IChjaGFyYWN0ZXJzWzZdID09ICdEJykpCi0gICAgICAgICAgICAg
ICAgICAgICYgKGNoYXJhY3RlcnNbN10gPT0gJygnKSkgewotICAgICAgICAgICAgICAgICAgICBt
X3VuaXQgPSBDU1NQYXJzZXI6OkZOdW1iZXI7Ci0gICAgICAgICAgICAgICAgICAgIG1fdHlwZSA9
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZTNEVHJhbnNmb3JtT3BlcmF0aW9uOwotICAg
ICAgICAgICAgICAgICAgICBtX2FyZ0NvdW50ID0gNTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKCgoY2hhcmFjdGVyc1swXSA9PSAncicpIHx8IChjaGFyYWN0ZXJz
WzBdID09ICdSJykpCi0gICAgICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzFdID09
ICdvJykgfHwgKGNoYXJhY3RlcnNbMV0gPT0gJ08nKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
JiAoKGNoYXJhY3RlcnNbMl0gPT0gJ3QnKSB8fCAoY2hhcmFjdGVyc1syXSA9PSAnVCcpKQotICAg
ICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1szXSA9PSAnYScpIHx8IChjaGFyYWN0
ZXJzWzNdID09ICdBJykpCi0gICAgICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzRd
ID09ICd0JykgfHwgKGNoYXJhY3RlcnNbNF0gPT0gJ1QnKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgJiAoKGNoYXJhY3RlcnNbNV0gPT0gJ2UnKSB8fCAoY2hhcmFjdGVyc1s1XSA9PSAnRScpKQot
ICAgICAgICAgICAgICAgICAgICAgICAmIChjaGFyYWN0ZXJzWzddID09ICcoJykpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoKGNoYXJhY3RlcnNbNl0gPT0gJ3gnKSB8fCAoY2hhcmFjdGVyc1s2XSA9
PSAnWCcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fdW5pdCA9IENTU1BhcnNlcjo6RkFuZ2xl
OwotICAgICAgICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
Um90YXRlWFRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChj
aGFyYWN0ZXJzWzZdID09ICd5JykgfHwgKGNoYXJhY3RlcnNbNl0gPT0gJ1knKSkgewotICAgICAg
ICAgICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZBbmdsZTsKLSAgICAgICAgICAgICAg
ICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVlUcmFuc2Zvcm1P
cGVyYXRpb247Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoY2hhcmFjdGVyc1s2XSA9PSAn
eicpIHx8IChjaGFyYWN0ZXJzWzZdID09ICdaJykpIHsKLSAgICAgICAgICAgICAgICAgICAgbV91
bml0ID0gQ1NTUGFyc2VyOjpGQW5nbGU7Ci0gICAgICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVaVHJhbnNmb3JtT3BlcmF0aW9uOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIDk6Ci0gICAgICAgICAgICAvLyBWYWxpZCBuYW1lczogbWF0cml4M2QoLCByb3RhdGUzZCgu
Ci0gICAgICAgICAgICBpZiAoKGNoYXJhY3RlcnNbMF0gPT0gJ20nKSB8fCAoY2hhcmFjdGVyc1sw
XSA9PSAnTScpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCgoY2hhcmFjdGVyc1sxXSA9PSAnYScp
IHx8IChjaGFyYWN0ZXJzWzFdID09ICdBJykpCi0gICAgICAgICAgICAgICAgICAgICYgKChjaGFy
YWN0ZXJzWzJdID09ICd0JykgfHwgKGNoYXJhY3RlcnNbMl0gPT0gJ1QnKSkKLSAgICAgICAgICAg
ICAgICAgICAgJiAoKGNoYXJhY3RlcnNbM10gPT0gJ3InKSB8fCAoY2hhcmFjdGVyc1szXSA9PSAn
UicpKQotICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s0XSA9PSAnaScpIHx8IChj
aGFyYWN0ZXJzWzRdID09ICdJJykpCi0gICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJz
WzVdID09ICd4JykgfHwgKGNoYXJhY3RlcnNbNV0gPT0gJ1gnKSkKLSAgICAgICAgICAgICAgICAg
ICAgJiAoY2hhcmFjdGVyc1s2XSA9PSAnMycpCi0gICAgICAgICAgICAgICAgICAgICYgKChjaGFy
YWN0ZXJzWzddID09ICdkJykgfHwgKGNoYXJhY3RlcnNbN10gPT0gJ0QnKSkKLSAgICAgICAgICAg
ICAgICAgICAgJiAoY2hhcmFjdGVyc1s4XSA9PSAnKCcpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1fdW5pdCA9IENTU1BhcnNlcjo6Rk51bWJlcjsKLSAgICAgICAgICAgICAgICAgICAgbV90eXBl
ID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6Ok1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOwot
ICAgICAgICAgICAgICAgICAgICBtX2FyZ0NvdW50ID0gMzE7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSBlbHNlIGlmICgoKGNoYXJhY3RlcnNbMF0gPT0gJ3InKSB8fCAoY2hhcmFj
dGVyc1swXSA9PSAnUicpKQotICAgICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1sx
XSA9PSAnbycpIHx8IChjaGFyYWN0ZXJzWzFdID09ICdPJykpCi0gICAgICAgICAgICAgICAgICAg
ICAgICYgKChjaGFyYWN0ZXJzWzJdID09ICd0JykgfHwgKGNoYXJhY3RlcnNbMl0gPT0gJ1QnKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbM10gPT0gJ2EnKSB8fCAoY2hh
cmFjdGVyc1szXSA9PSAnQScpKQotICAgICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVy
c1s0XSA9PSAndCcpIHx8IChjaGFyYWN0ZXJzWzRdID09ICdUJykpCi0gICAgICAgICAgICAgICAg
ICAgICAgICYgKChjaGFyYWN0ZXJzWzVdID09ICdlJykgfHwgKGNoYXJhY3RlcnNbNV0gPT0gJ0Un
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoY2hhcmFjdGVyc1s2XSA9PSAnMycpCi0gICAg
ICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzddID09ICdkJykgfHwgKGNoYXJhY3Rl
cnNbN10gPT0gJ0QnKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoY2hhcmFjdGVyc1s4XSA9
PSAnKCcpKSB7Ci0gICAgICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGTnVtYmVyOwot
ICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGUz
RFRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICBtX2FyZ0NvdW50ID0gNzsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDEwOgotICAgICAg
ICAgICAgLy8gVmFsaWQgbmFtZTogdHJhbnNsYXRlKC4KLSAgICAgICAgICAgIGlmICgoKGNoYXJh
Y3RlcnNbMF0gPT0gJ3QnKSB8fCAoY2hhcmFjdGVyc1swXSA9PSAnVCcpKQotICAgICAgICAgICAg
ICAgICYgKChjaGFyYWN0ZXJzWzFdID09ICdyJykgfHwgKGNoYXJhY3RlcnNbMV0gPT0gJ1InKSkK
LSAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1syXSA9PSAnYScpIHx8IChjaGFyYWN0ZXJz
WzJdID09ICdBJykpCi0gICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbM10gPT0gJ24nKSB8
fCAoY2hhcmFjdGVyc1szXSA9PSAnTicpKQotICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJz
WzRdID09ICdzJykgfHwgKGNoYXJhY3RlcnNbNF0gPT0gJ1MnKSkKLSAgICAgICAgICAgICAgICAm
ICgoY2hhcmFjdGVyc1s1XSA9PSAnbCcpIHx8IChjaGFyYWN0ZXJzWzVdID09ICdMJykpCi0gICAg
ICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbNl0gPT0gJ2EnKSB8fCAoY2hhcmFjdGVyc1s2XSA9
PSAnQScpKQotICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzddID09ICd0JykgfHwgKGNo
YXJhY3RlcnNbN10gPT0gJ1QnKSkKLSAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1s4XSA9
PSAnZScpIHx8IChjaGFyYWN0ZXJzWzhdID09ICdFJykpCi0gICAgICAgICAgICAgICAgJiAoY2hh
cmFjdGVyc1s5XSA9PSAnKCcpKSB7Ci0gICAgICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2Vy
OjpGTGVuZ3RoIHwgQ1NTUGFyc2VyOjpGUGVyY2VudDsKLSAgICAgICAgICAgICAgICBtX3R5cGUg
PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOwot
ICAgICAgICAgICAgICAgIG1fYWxsb3dTaW5nbGVBcmd1bWVudCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgbV9hcmdDb3VudCA9IDM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSAxMToKLSAgICAgICAgICAgIC8vIFZhbGlkIG5hbWVzOiB0cmFuc2xhdGV4
KCwgdHJhbnNsYXRleSgsIHRyYW5zbGF0ZXooLgotICAgICAgICAgICAgaWYgKCgoY2hhcmFjdGVy
c1swXSA9PSAndCcpIHx8IChjaGFyYWN0ZXJzWzBdID09ICdUJykpCi0gICAgICAgICAgICAgICAg
JiAoKGNoYXJhY3RlcnNbMV0gPT0gJ3InKSB8fCAoY2hhcmFjdGVyc1sxXSA9PSAnUicpKQotICAg
ICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzJdID09ICdhJykgfHwgKGNoYXJhY3RlcnNbMl0g
PT0gJ0EnKSkKLSAgICAgICAgICAgICAgICAmICgoY2hhcmFjdGVyc1szXSA9PSAnbicpIHx8IChj
aGFyYWN0ZXJzWzNdID09ICdOJykpCi0gICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbNF0g
PT0gJ3MnKSB8fCAoY2hhcmFjdGVyc1s0XSA9PSAnUycpKQotICAgICAgICAgICAgICAgICYgKChj
aGFyYWN0ZXJzWzVdID09ICdsJykgfHwgKGNoYXJhY3RlcnNbNV0gPT0gJ0wnKSkKLSAgICAgICAg
ICAgICAgICAmICgoY2hhcmFjdGVyc1s2XSA9PSAnYScpIHx8IChjaGFyYWN0ZXJzWzZdID09ICdB
JykpCi0gICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbN10gPT0gJ3QnKSB8fCAoY2hhcmFj
dGVyc1s3XSA9PSAnVCcpKQotICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzhdID09ICdl
JykgfHwgKGNoYXJhY3RlcnNbOF0gPT0gJ0UnKSkKLSAgICAgICAgICAgICAgICAmIChjaGFyYWN0
ZXJzWzEwXSA9PSAnKCcpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChjaGFyYWN0ZXJzWzldID09
ICd4JykgfHwgKGNoYXJhY3RlcnNbOV0gPT0gJ1gnKSkgewotICAgICAgICAgICAgICAgICAgICBt
X3VuaXQgPSBDU1NQYXJzZXI6OkZMZW5ndGggfCBDU1NQYXJzZXI6OkZQZXJjZW50OwotICAgICAg
ICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRl
WFRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChjaGFyYWN0
ZXJzWzldID09ICd5JykgfHwgKGNoYXJhY3RlcnNbOV0gPT0gJ1knKSkgewotICAgICAgICAgICAg
ICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZMZW5ndGggfCBDU1NQYXJzZXI6OkZQZXJjZW50
OwotICAgICAgICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KChjaGFyYWN0ZXJzWzldID09ICd6JykgfHwgKGNoYXJhY3RlcnNbOV0gPT0gJ1onKSkgewotICAg
ICAgICAgICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZMZW5ndGggfCBDU1NQYXJzZXI6
OkZQZXJjZW50OwotICAgICAgICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6VHJhbnNsYXRlWlRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxMjoKLSAg
ICAgICAgICAgIC8vIFZhbGlkIG5hbWVzOiBwZXJzcGVjdGl2ZSgsIHRyYW5zbGF0ZTNkKC4KLSAg
ICAgICAgICAgIGlmICgoY2hhcmFjdGVyc1swXSA9PSAncCcpIHx8IChjaGFyYWN0ZXJzWzBdID09
ICdQJykpIHsKLSAgICAgICAgICAgICAgICBpZiAoKChjaGFyYWN0ZXJzWzFdID09ICdlJykgfHwg
KGNoYXJhY3RlcnNbMV0gPT0gJ0UnKSkKLSAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3Rl
cnNbMl0gPT0gJ3InKSB8fCAoY2hhcmFjdGVyc1syXSA9PSAnUicpKQotICAgICAgICAgICAgICAg
ICAgICAmICgoY2hhcmFjdGVyc1szXSA9PSAncycpIHx8IChjaGFyYWN0ZXJzWzNdID09ICdTJykp
Ci0gICAgICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzRdID09ICdwJykgfHwgKGNoYXJh
Y3RlcnNbNF0gPT0gJ1AnKSkKLSAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbNV0g
PT0gJ2UnKSB8fCAoY2hhcmFjdGVyc1s1XSA9PSAnRScpKQotICAgICAgICAgICAgICAgICAgICAm
ICgoY2hhcmFjdGVyc1s2XSA9PSAnYycpIHx8IChjaGFyYWN0ZXJzWzZdID09ICdDJykpCi0gICAg
ICAgICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzddID09ICd0JykgfHwgKGNoYXJhY3RlcnNb
N10gPT0gJ1QnKSkKLSAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbOF0gPT0gJ2kn
KSB8fCAoY2hhcmFjdGVyc1s4XSA9PSAnSScpKQotICAgICAgICAgICAgICAgICAgICAmICgoY2hh
cmFjdGVyc1s5XSA9PSAndicpIHx8IChjaGFyYWN0ZXJzWzldID09ICdWJykpCi0gICAgICAgICAg
ICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzEwXSA9PSAnZScpIHx8IChjaGFyYWN0ZXJzWzEwXSA9
PSAnRScpKQotICAgICAgICAgICAgICAgICAgICAmIChjaGFyYWN0ZXJzWzExXSA9PSAnKCcpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIG1fdW5pdCA9IENTU1BhcnNlcjo6Rk51bWJlcjsKLSAgICAg
ICAgICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlBlcnNwZWN0
aXZlVHJhbnNmb3JtT3BlcmF0aW9uOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoKChjaGFyYWN0ZXJzWzBdID09ICd0JykgfHwgKGNoYXJhY3RlcnNbMF0gPT0gJ1Qn
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbMV0gPT0gJ3InKSB8fCAo
Y2hhcmFjdGVyc1sxXSA9PSAnUicpKQotICAgICAgICAgICAgICAgICAgICAgICAmICgoY2hhcmFj
dGVyc1syXSA9PSAnYScpIHx8IChjaGFyYWN0ZXJzWzJdID09ICdBJykpCi0gICAgICAgICAgICAg
ICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzNdID09ICduJykgfHwgKGNoYXJhY3RlcnNbM10gPT0g
J04nKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbNF0gPT0gJ3MnKSB8
fCAoY2hhcmFjdGVyc1s0XSA9PSAnUycpKQotICAgICAgICAgICAgICAgICAgICAgICAmICgoY2hh
cmFjdGVyc1s1XSA9PSAnbCcpIHx8IChjaGFyYWN0ZXJzWzVdID09ICdMJykpCi0gICAgICAgICAg
ICAgICAgICAgICAgICYgKChjaGFyYWN0ZXJzWzZdID09ICdhJykgfHwgKGNoYXJhY3RlcnNbNl0g
PT0gJ0EnKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoKGNoYXJhY3RlcnNbN10gPT0gJ3Qn
KSB8fCAoY2hhcmFjdGVyc1s3XSA9PSAnVCcpKQotICAgICAgICAgICAgICAgICAgICAgICAmICgo
Y2hhcmFjdGVyc1s4XSA9PSAnZScpIHx8IChjaGFyYWN0ZXJzWzhdID09ICdFJykpCi0gICAgICAg
ICAgICAgICAgICAgICAgICYgKGNoYXJhY3RlcnNbOV0gPT0gJzMnKQotICAgICAgICAgICAgICAg
ICAgICAgICAmICgoY2hhcmFjdGVyc1sxMF0gPT0gJ2QnKSB8fCAoY2hhcmFjdGVyc1sxMF0gPT0g
J0QnKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiAoY2hhcmFjdGVyc1sxMV0gPT0gJygnKSkg
ewotICAgICAgICAgICAgICAgIG1fdW5pdCA9IENTU1BhcnNlcjo6Rkxlbmd0aCB8IENTU1BhcnNl
cjo6RlBlcmNlbnQ7Ci0gICAgICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlRyYW5zbGF0ZTNEVHJhbnNmb3JtT3BlcmF0aW9uOwotICAgICAgICAgICAgICAgIG1f
YXJnQ291bnQgPSA1OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0gLy8gZW5kIHN3aXRjaCAoKQotICAgIH0KLQotICAgIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpUcmFuc2Zvcm1PcGVyYXRpb25UeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0K
LSAgICB1bnNpZ25lZCBhcmdDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYXJnQ291bnQ7IH0KLSAg
ICBDU1NQYXJzZXI6OlVuaXRzIHVuaXQoKSBjb25zdCB7IHJldHVybiBtX3VuaXQ7IH0KLQotICAg
IGJvb2wgdW5rbm93bigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6VW5rbm93blRyYW5zZm9ybU9wZXJhdGlvbjsgfQotICAgIGJvb2wgaGFzQ29ycmVj
dEFyZ0NvdW50KHVuc2lnbmVkIGFyZ0NvdW50KSB7IHJldHVybiBtX2FyZ0NvdW50ID09IGFyZ0Nv
dW50IHx8IChtX2FsbG93U2luZ2xlQXJndW1lbnQgJiYgYXJnQ291bnQgPT0gMSk7IH0KLQotcHJp
dmF0ZToKLSAgICBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNmb3JtT3BlcmF0aW9uVHlw
ZSBtX3R5cGU7Ci0gICAgdW5zaWduZWQgbV9hcmdDb3VudDsKLSAgICBib29sIG1fYWxsb3dTaW5n
bGVBcmd1bWVudDsKLSAgICBDU1NQYXJzZXI6OlVuaXRzIG1fdW5pdDsKLX07Ci0KLVJlZlB0cjxD
U1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm0oKQotewotICAgIGlmICghbV92
YWx1ZUxpc3QpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBsaXN0ID0gQ1NT
VmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAgIGZvciAoQ1NTUGFyc2VyVmFs
dWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsgdmFsdWU7IHZhbHVlID0gbV92YWx1
ZUxpc3QtPm5leHQoKSkgewotICAgICAgICBhdXRvIHBhcnNlZFRyYW5zZm9ybVZhbHVlID0gcGFy
c2VUcmFuc2Zvcm1WYWx1ZSgqdmFsdWUpOwotICAgICAgICBpZiAoIXBhcnNlZFRyYW5zZm9ybVZh
bHVlKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgbGlzdC0+YXBwZW5k
KHBhcnNlZFRyYW5zZm9ybVZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIH0KLQotICAgIHJl
dHVybiBXVEZNb3ZlKGxpc3QpOwotfQotCi1SZWZQdHI8V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU+
IENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm1WYWx1ZShDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCi17
Ci0gICAgaWYgKHZhbHVlLnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uIHx8ICF2YWx1
ZS5mdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBFdmVyeSBwcmlt
aXRpdmUgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LgotICAgIENTU1BhcnNlclZhbHVl
TGlzdCogYXJncyA9IHZhbHVlLmZ1bmN0aW9uLT5hcmdzLmdldCgpOwotICAgIGlmICghYXJncykK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBTZWUgaWYgdGhlIHNwZWNpZmllZCBw
cmltaXRpdmUgaXMgb25lIHdlIHVuZGVyc3RhbmQuCi0gICAgVHJhbnNmb3JtT3BlcmF0aW9uSW5m
byBpbmZvKHZhbHVlLmZ1bmN0aW9uLT5uYW1lKTsKLSAgICBpZiAoaW5mby51bmtub3duKCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKCFpbmZvLmhhc0NvcnJlY3RBcmdDb3Vu
dChhcmdzLT5zaXplKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIFRoZSB0
cmFuc2Zvcm0gaXMgYSBsaXN0IG9mIGZ1bmN0aW9uYWwgcHJpbWl0aXZlcyB0aGF0IHNwZWNpZnkg
dHJhbnNmb3JtIG9wZXJhdGlvbnMuCi0gICAgLy8gV2UgY29sbGVjdCBhIGxpc3Qgb2YgV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWVzLCB3aGVyZSBlYWNoIHZhbHVlIHNwZWNpZmllcyBhIHNpbmdsZSBv
cGVyYXRpb24uCi0KLSAgICAvLyBDcmVhdGUgdGhlIG5ldyBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZSBmb3IgdGhpcyBvcGVyYXRpb24gYW5kIGFkZCBpdCB0byBvdXIgbGlzdC4KLSAgICBhdXRvIHRy
YW5zZm9ybVZhbHVlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OmNyZWF0ZShpbmZvLnR5cGUo
KSk7Ci0KLSAgICAvLyBTbmFnIG91ciB2YWx1ZXMuCi0gICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3Vt
ZW50ID0gYXJncy0+Y3VycmVudCgpOwotICAgIHVuc2lnbmVkIGFyZ051bWJlciA9IDA7Ci0gICAg
d2hpbGUgKGFyZ3VtZW50KSB7Ci0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50
V2l0aENhbGN1bGF0aW9uKCphcmd1bWVudCk7Ci0gICAgICAgIENTU1BhcnNlcjo6VW5pdHMgdW5p
dCA9IGluZm8udW5pdCgpOwotCi0gICAgICAgIGlmIChpbmZvLnR5cGUoKSA9PSBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6Um90YXRlM0RUcmFuc2Zvcm1PcGVyYXRpb24gJiYgYXJnTnVtYmVyID09
IDMpIHsKLSAgICAgICAgICAgIC8vIDR0aCBwYXJhbSBvZiByb3RhdGUzZCgpIGlzIGFuIGFuZ2xl
IHJhdGhlciB0aGFuIGEgYmFyZSBudW1iZXIsIHZhbGlkYXRlIGl0IGFzIHN1Y2gKLSAgICAgICAg
ICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGQW5nbGUsIENT
U1N0cmljdE1vZGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9
IGVsc2UgaWYgKGluZm8udHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xh
dGUzRFRyYW5zZm9ybU9wZXJhdGlvbiAmJiBhcmdOdW1iZXIgPT0gMikgewotICAgICAgICAgICAg
Ly8gM3JkIHBhcmFtIG9mIHRyYW5zbGF0ZTNkKCkgY2Fubm90IGJlIGEgcGVyY2VudGFnZQotICAg
ICAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5n
dGgsIENTU1N0cmljdE1vZGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICB9IGVsc2UgaWYgKGluZm8udHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpU
cmFuc2xhdGVaVHJhbnNmb3JtT3BlcmF0aW9uICYmICFhcmdOdW1iZXIpIHsKLSAgICAgICAgICAg
IC8vIDFzdCBwYXJhbSBvZiB0cmFuc2xhdGVaKCkgY2Fubm90IGJlIGEgcGVyY2VudGFnZQotICAg
ICAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5n
dGgsIENTU1N0cmljdE1vZGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICB9IGVsc2UgaWYgKGluZm8udHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpQ
ZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbiAmJiAhYXJnTnVtYmVyKSB7Ci0gICAgICAgICAg
ICAvLyAxc3QgcGFyYW0gb2YgcGVyc3BlY3RpdmUoKSBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51
bWJlciAoZGVwcmVjYXRlZCkgb3IgbGVuZ3RoLgotICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVVu
aXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTGVuZ3RoIHwgRk5vbk5lZywg
Q1NTU3RyaWN0TW9kZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IH0gZWxzZSBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgdW5pdCwg
Q1NTU3RyaWN0TW9kZSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICAv
LyBBZGQgdGhlIHZhbHVlIHRvIHRoZSBjdXJyZW50IHRyYW5zZm9ybSBvcGVyYXRpb24uCi0gICAg
ICAgIHRyYW5zZm9ybVZhbHVlLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFy
Z3VtZW50V2l0aENhbGN1bGF0aW9uKSk7Ci0KLSAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0
KCk7Ci0gICAgICAgIGlmICghYXJndW1lbnQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
aWYgKGFyZ3VtZW50LT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciB8fCBhcmd1bWVu
dC0+aVZhbHVlICE9ICcsJykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBh
cmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKLQotICAgICAgICArK2FyZ051bWJlcjsKLSAgICB9Ci0K
LSAgICByZXR1cm4gV1RGTW92ZSh0cmFuc2Zvcm1WYWx1ZSk7Ci19Ci0KLWJvb2wgQ1NTUGFyc2Vy
Ojppc0JsZW5kTW9kZShDU1NWYWx1ZUlEIHZhbHVlSUQpCi17Ci0gICAgcmV0dXJuICh2YWx1ZUlE
ID49IENTU1ZhbHVlTXVsdGlwbHkgJiYgdmFsdWVJRCA8PSBDU1NWYWx1ZUx1bWlub3NpdHkpCi0g
ICAgICAgIHx8IHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3JtYWwKLSAgICAgICAgfHwgdmFsdWVJRCA9
PSBDU1NWYWx1ZU92ZXJsYXk7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjppc0NvbXBvc2l0ZU9wZXJh
dG9yKENTU1ZhbHVlSUQgdmFsdWVJRCkKLXsKLSAgICAvLyBGSVhNRTogQWRkIENTU1ZhbHVlRGVz
dGluYXRpb24gYW5kIENTU1ZhbHVlTGlnaHRlciB3aGVuIHRoZSBDb21wb3NpdGluZyBzcGVjIHVw
ZGF0ZXMuCi0gICAgcmV0dXJuIHZhbHVlSUQgPj0gQ1NTVmFsdWVDbGVhciAmJiB2YWx1ZUlEIDw9
IENTU1ZhbHVlWG9yOwotfQotCi1zdGF0aWMgdm9pZCBmaWx0ZXJJbmZvRm9yTmFtZShjb25zdCBD
U1NQYXJzZXJTdHJpbmcmIG5hbWUsIFdlYktpdENTU0ZpbHRlclZhbHVlOjpGaWx0ZXJPcGVyYXRp
b25UeXBlJiBmaWx0ZXJUeXBlLCB1bnNpZ25lZCYgbWF4aW11bUFyZ3VtZW50Q291bnQpCi17Ci0g
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsICJncmF5c2NhbGUoIikp
Ci0gICAgICAgIGZpbHRlclR5cGUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6R3JheXNjYWxlRmls
dGVyT3BlcmF0aW9uOwotICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KG5hbWUsICJzZXBpYSgiKSkKLSAgICAgICAgZmlsdGVyVHlwZSA9IFdlYktpdENTU0ZpbHRlclZh
bHVlOjpTZXBpYUZpbHRlck9wZXJhdGlvbjsKLSAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShuYW1lLCAic2F0dXJhdGUoIikpCi0gICAgICAgIGZpbHRlclR5cGUgPSBX
ZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2F0dXJhdGVGaWx0ZXJPcGVyYXRpb247Ci0gICAgZWxzZSBp
ZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgImh1ZS1yb3RhdGUoIikpCi0g
ICAgICAgIGZpbHRlclR5cGUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6SHVlUm90YXRlRmlsdGVy
T3BlcmF0aW9uOwotICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5h
bWUsICJpbnZlcnQoIikpCi0gICAgICAgIGZpbHRlclR5cGUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZTo6SW52ZXJ0RmlsdGVyT3BlcmF0aW9uOwotICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKG5hbWUsICJvcGFjaXR5KCIpKQotICAgICAgICBmaWx0ZXJUeXBlID0gV2Vi
S2l0Q1NTRmlsdGVyVmFsdWU6Ok9wYWNpdHlGaWx0ZXJPcGVyYXRpb247Ci0gICAgZWxzZSBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgImJyaWdodG5lc3MoIikpCi0gICAg
ICAgIGZpbHRlclR5cGUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6QnJpZ2h0bmVzc0ZpbHRlck9w
ZXJhdGlvbjsKLSAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1l
LCAiY29udHJhc3QoIikpCi0gICAgICAgIGZpbHRlclR5cGUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZTo6Q29udHJhc3RGaWx0ZXJPcGVyYXRpb247Ci0gICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UobmFtZSwgImJsdXIoIikpCi0gICAgICAgIGZpbHRlclR5cGUgPSBXZWJL
aXRDU1NGaWx0ZXJWYWx1ZTo6Qmx1ckZpbHRlck9wZXJhdGlvbjsKLSAgICBlbHNlIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCAiZHJvcC1zaGFkb3coIikpIHsKLSAgICAg
ICAgZmlsdGVyVHlwZSA9IFdlYktpdENTU0ZpbHRlclZhbHVlOjpEcm9wU2hhZG93RmlsdGVyT3Bl
cmF0aW9uOwotICAgICAgICBtYXhpbXVtQXJndW1lbnRDb3VudCA9IDQ7ICAvLyB4LW9mZnNldCwg
eS1vZmZzZXQsIGJsdXItcmFkaXVzLCBjb2xvciAtLSBzcHJlYWQgYW5kIGluc2V0IHN0eWxlIG5v
dCBhbGxvd2VkLgotICAgIH0KLX0KLQotUmVmUHRyPFdlYktpdENTU0ZpbHRlclZhbHVlPiBDU1NQ
YXJzZXI6OnBhcnNlQnVpbHRpbkZpbHRlckFyZ3VtZW50cyhDU1NQYXJzZXJWYWx1ZUxpc3QmIGFy
Z3MsIFdlYktpdENTU0ZpbHRlclZhbHVlOjpGaWx0ZXJPcGVyYXRpb25UeXBlIGZpbHRlclR5cGUp
Ci17Ci0gICAgYXV0byBmaWx0ZXJWYWx1ZSA9IFdlYktpdENTU0ZpbHRlclZhbHVlOjpjcmVhdGUo
ZmlsdGVyVHlwZSk7Ci0KLSAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsgICAgCi0gICAgY2FzZSBX
ZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6R3JheXNjYWxlRmlsdGVyT3BlcmF0aW9uOgotICAgIGNhc2Ug
V2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlNlcGlhRmlsdGVyT3BlcmF0aW9uOgotICAgIGNhc2UgV2Vi
S2l0Q1NTRmlsdGVyVmFsdWU6OlNhdHVyYXRlRmlsdGVyT3BlcmF0aW9uOgotICAgIGNhc2UgV2Vi
S2l0Q1NTRmlsdGVyVmFsdWU6OkludmVydEZpbHRlck9wZXJhdGlvbjoKLSAgICBjYXNlIFdlYktp
dENTU0ZpbHRlclZhbHVlOjpPcGFjaXR5RmlsdGVyT3BlcmF0aW9uOgotICAgIGNhc2UgV2ViS2l0
Q1NTRmlsdGVyVmFsdWU6OkNvbnRyYXN0RmlsdGVyT3BlcmF0aW9uOiB7Ci0gICAgICAgIC8vIE9u
ZSBvcHRpb25hbCBhcmd1bWVudCwgMC0xIG9yIDAlLTEwMCUsIGlmIG1pc3NpbmcgdXNlIDEwMCUu
Ci0gICAgICAgIGlmIChhcmdzLnNpemUoKSA+IDEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgICAgICBpZiAoYXJncy5zaXplKCkpIHsKLSAgICAgICAgICAgIFZhbHVlV2l0aENh
bGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLmN1cnJlbnQoKSk7Ci0gICAg
ICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRk51bWJl
ciB8IEZQZXJjZW50IHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgICAgIGF1dG8gcHJpbWl0aXZlVmFsdWUgPSBjcmVh
dGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pOwotCi0gICAg
ICAgICAgICAvLyBTYXR1cmF0ZSBhbmQgQ29udHJhc3QgYWxsb3cgdmFsdWVzIG92ZXIgMTAwJS4K
LSAgICAgICAgICAgIGlmIChmaWx0ZXJUeXBlICE9IFdlYktpdENTU0ZpbHRlclZhbHVlOjpTYXR1
cmF0ZUZpbHRlck9wZXJhdGlvbgotICAgICAgICAgICAgICAgICYmIGZpbHRlclR5cGUgIT0gV2Vi
S2l0Q1NTRmlsdGVyVmFsdWU6OkNvbnRyYXN0RmlsdGVyT3BlcmF0aW9uKSB7Ci0gICAgICAgICAg
ICAgICAgZG91YmxlIG1heEFsbG93ZWQgPSBwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgp
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSA/IDEwMC4wIDogMS4wOwotICAg
ICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSA+IG1heEFs
bG93ZWQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKFdURk1vdmUocHJpbWl0aXZlVmFs
dWUpKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBXZWJLaXRD
U1NGaWx0ZXJWYWx1ZTo6QnJpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjogewotICAgICAgICAvLyBP
bmUgb3B0aW9uYWwgYXJndW1lbnQsIGlmIG1pc3NpbmcgdXNlIDEwMCUuCi0gICAgICAgIGlmIChh
cmdzLnNpemUoKSA+IDEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBp
ZiAoYXJncy5zaXplKCkpIHsKLSAgICAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3Vt
ZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLmN1cnJlbnQoKSk7Ci0gICAgICAgICAgICBpZiAoIXZh
bGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZQZXJjZW50LCBD
U1NTdHJpY3RNb2RlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAg
ICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJn
dW1lbnRXaXRoQ2FsY3VsYXRpb24pKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6SHVlUm90YXRlRmlsdGVyT3BlcmF0aW9u
OiB7Ci0gICAgICAgIC8vIGh1ZS1yb3RhdGUoKSB0YWtlcyBvbmUgb3B0aW9uYWwgYW5nbGUuCi0g
ICAgICAgIGlmIChhcmdzLnNpemUoKSA+IDEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgCi0gICAgICAgIGlmIChhcmdzLnNpemUoKSkgewotICAgICAgICAgICAgVmFsdWVX
aXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MuY3VycmVudCgpKTsK
LSAgICAgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBG
QW5nbGUsIENTU1N0cmljdE1vZGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICAKLSAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJsdXJGaWx0
ZXJPcGVyYXRpb246IHsKLSAgICAgICAgLy8gQmx1ciB0YWtlcyBhIHNpbmdsZSBsZW5ndGguIFpl
cm8gcGFyYW1ldGVycyBhcmUgYWxsb3dlZC4KLSAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpID4gMSkK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAKLSAgICAgICAgaWYgKGFyZ3Mu
c2l6ZSgpKSB7Ci0gICAgICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhD
YWxjdWxhdGlvbigqYXJncy5jdXJyZW50KCkpOwotICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVVu
aXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RN
b2RlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICAgICAgZmls
dGVyVmFsdWUtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRo
Q2FsY3VsYXRpb24pKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjogewotICAg
ICAgICAvLyBkcm9wLXNoYWRvdygpIHRha2VzIGEgc2luZ2xlIHNoYWRvdy4KLSAgICAgICAgUmVm
UHRyPENTU1ZhbHVlTGlzdD4gc2hhZG93VmFsdWVMaXN0ID0gcGFyc2VTaGFkb3coYXJncywgQ1NT
UHJvcGVydHlGaWx0ZXIpOwotICAgICAgICBpZiAoIXNoYWRvd1ZhbHVlTGlzdCB8fCBzaGFkb3dW
YWx1ZUxpc3QtPmxlbmd0aCgpICE9IDEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgCi0gICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoKnNoYWRvd1ZhbHVlTGlzdC0+aXRl
bVdpdGhvdXRCb3VuZHNDaGVjaygwKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZh
dWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIFdU
Rk1vdmUoZmlsdGVyVmFsdWUpOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VGaWx0ZXIoQ1NT
UGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+JiByZXN1bHQp
Ci17Ci0gICAgLy8gVGhlIGZpbHRlciBpcyBhIGxpc3Qgb2YgZnVuY3Rpb25hbCBwcmltaXRpdmVz
IHRoYXQgc3BlY2lmeSBpbmRpdmlkdWFsIG9wZXJhdGlvbnMuCi0gICAgYXV0byBsaXN0ID0gQ1NT
VmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAgIGZvciAoYXV0byogdmFsdWUg
PSB2YWx1ZUxpc3QuY3VycmVudCgpOyB2YWx1ZTsgdmFsdWUgPSB2YWx1ZUxpc3QubmV4dCgpKSB7
Ci0gICAgICAgIGlmICh2YWx1ZS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSAm
JiAodmFsdWUtPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uIHx8ICF2YWx1ZS0+ZnVu
Y3Rpb24pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFdlYktpdENTU0Zp
bHRlclZhbHVlOjpGaWx0ZXJPcGVyYXRpb25UeXBlIGZpbHRlclR5cGUgPSBXZWJLaXRDU1NGaWx0
ZXJWYWx1ZTo6VW5rbm93bkZpbHRlck9wZXJhdGlvbjsKLQotICAgICAgICAvLyBTZWUgaWYgdGhl
IHNwZWNpZmllZCBwcmltaXRpdmUgaXMgb25lIHdlIHVuZGVyc3RhbmQuCi0gICAgICAgIGlmICh2
YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewotICAgICAgICAgICAg
YXV0byByZWZlcmVuY2VGaWx0ZXJWYWx1ZSA9IFdlYktpdENTU0ZpbHRlclZhbHVlOjpjcmVhdGUo
V2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAg
ICAgICByZWZlcmVuY2VGaWx0ZXJWYWx1ZS0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUodmFsdWUtPnN0cmluZywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpKTsKLSAgICAgICAg
ICAgIGxpc3QtPmFwcGVuZChXVEZNb3ZlKHJlZmVyZW5jZUZpbHRlclZhbHVlKSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBjb25zdCBDU1NQYXJzZXJTdHJpbmcgbmFtZSA9IHZhbHVl
LT5mdW5jdGlvbi0+bmFtZTsKLSAgICAgICAgICAgIHVuc2lnbmVkIG1heGltdW1Bcmd1bWVudENv
dW50ID0gMTsKLQotICAgICAgICAgICAgZmlsdGVySW5mb0Zvck5hbWUobmFtZSwgZmlsdGVyVHlw
ZSwgbWF4aW11bUFyZ3VtZW50Q291bnQpOwotCi0gICAgICAgICAgICBpZiAoZmlsdGVyVHlwZSA9
PSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6VW5rbm93bkZpbHRlck9wZXJhdGlvbikKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIENTU1BhcnNlclZhbHVlTGlzdCog
YXJncyA9IHZhbHVlLT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKLSAgICAgICAgICAgIGlmICghYXJn
cykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxX
ZWJLaXRDU1NGaWx0ZXJWYWx1ZT4gZmlsdGVyVmFsdWUgPSBwYXJzZUJ1aWx0aW5GaWx0ZXJBcmd1
bWVudHMoKmFyZ3MsIGZpbHRlclR5cGUpOwotICAgICAgICAgICAgaWYgKCFmaWx0ZXJWYWx1ZSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGxpc3QtPmFwcGVuZChmaWx0ZXJWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJlc3VsdCA9IFdURk1vdmUobGlzdCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotI2lmIEVOQUJMRShDU1NfUkVHSU9OUykKLXN0YXRpYyBib29sIHZhbGlkRmxvd05hbWUo
Y29uc3QgU3RyaW5nJiBmbG93TmFtZSkKLXsKLSAgICByZXR1cm4gIShlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShmbG93TmFtZSwgImF1dG8iKQotICAgICAgICB8fCBlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShmbG93TmFtZSwgImRlZmF1bHQiKQotICAgICAgICB8fCBlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmbG93TmFtZSwgImluaGVyaXQiKQotICAgICAgICB8fCBl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmbG93TmFtZSwgImluaXRpYWwiKQotICAgICAg
ICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmbG93TmFtZSwgIm5vbmUiKSk7Ci19
Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQotYm9vbCBDU1NQYXJz
ZXI6OmlzVGV4dEF1dG9zaXppbmdFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250
ZXh0LnRleHRBdXRvc2l6aW5nRW5hYmxlZDsKLX0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKENTU19H
UklEX0xBWU9VVCkKLWJvb2wgQ1NTUGFyc2VyOjppc0NTU0dyaWRMYXlvdXRFbmFibGVkKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9jb250ZXh0LmNzc0dyaWRMYXlvdXRFbmFibGVkOwotfQotI2Vu
ZGlmCi0KLSNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCi0KLS8vIG5vbmUgfCA8aWRlbnQ+Ci1ib29s
IENTU1BhcnNlcjo6cGFyc2VGbG93VGhyZWFkKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGlt
cG9ydGFudCkKLXsKLSAgICBBU1NFUlQocHJvcElkID09IENTU1Byb3BlcnR5V2Via2l0Rmxvd0lu
dG8pOwotCi0gICAgaWYgKG1fdmFsdWVMaXN0LT5zaXplKCkgIT0gMSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJl
bnQoKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
dmFsdWUtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAg
ICAgYWRkUHJvcGVydHkocHJvcElkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgaW5wdXRQcm9wZXJ0eSA9IFN0cmluZyh2YWx1ZS0+c3Ry
aW5nKTsKLSAgICBpZiAoIWlucHV0UHJvcGVydHkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmICgh
dmFsaWRGbG93TmFtZShpbnB1dFByb3BlcnR5KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZVZhbHVlKGlucHV0UHJvcGVydHksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSwg
aW1wb3J0YW50KTsKLSAgICB9IGVsc2UKLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUp
LCBpbXBvcnRhbnQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIC13ZWJraXQtZmxvdy1m
cm9tOiBub25lIHwgPGlkZW50PgotYm9vbCBDU1NQYXJzZXI6OnBhcnNlUmVnaW9uVGhyZWFkKENT
U1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKLXsKLSAgICBBU1NFUlQocHJvcElk
ID09IENTU1Byb3BlcnR5V2Via2l0Rmxvd0Zyb20pOwotCi0gICAgaWYgKG1fdmFsdWVMaXN0LT5z
aXplKCkgIT0gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ1NTUGFyc2VyVmFsdWUq
IHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAodmFsdWUtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19JREVOVCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHZhbHVlLT5p
ZCA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSwgaW1wb3J0
YW50KTsKLSAgICBlbHNlIHsKLSAgICAgICAgU3RyaW5nIGlucHV0UHJvcGVydHkgPSBTdHJpbmco
dmFsdWUtPnN0cmluZyk7Ci0gICAgICAgIGlmICghaW5wdXRQcm9wZXJ0eS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgICAgIGlmICghdmFsaWRGbG93TmFtZShpbnB1dFByb3BlcnR5KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoaW5wdXRQcm9wZXJ0eSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpLCBpbXBvcnRhbnQpOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKSwgaW1wb3J0YW50KTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VUcmFu
c2Zvcm1PcmlnaW4oQ1NTUHJvcGVydHlJRCBwcm9wSWQsIENTU1Byb3BlcnR5SUQmIHByb3BJZDEs
IENTU1Byb3BlcnR5SUQmIHByb3BJZDIsIENTU1Byb3BlcnR5SUQmIHByb3BJZDMsIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4mIHZhbHVlLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWx1
ZTIsIFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMykKLXsKLSAgICBwcm9wSWQxID0gcHJvcElkOwot
ICAgIHByb3BJZDIgPSBwcm9wSWQ7Ci0gICAgcHJvcElkMyA9IHByb3BJZDsKLSAgICBpZiAocHJv
cElkID09IENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luKSB7Ci0gICAgICAgIHByb3BJZDEgPSBD
U1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdpblg7Ci0gICAgICAgIHByb3BJZDIgPSBDU1NQcm9wZXJ0
eVRyYW5zZm9ybU9yaWdpblk7Ci0gICAgICAgIHByb3BJZDMgPSBDU1NQcm9wZXJ0eVRyYW5zZm9y
bU9yaWdpblo7Ci0gICAgfQotCi0gICAgc3dpdGNoIChwcm9wSWQpIHsKLSAgICBjYXNlIENTU1By
b3BlcnR5VHJhbnNmb3JtT3JpZ2luOgotICAgICAgICBpZiAoIXBhcnNlVHJhbnNmb3JtT3JpZ2lu
U2hvcnRoYW5kKHZhbHVlLCB2YWx1ZTIsIHZhbHVlMykpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIC8vIHBhcnNlVHJhbnNmb3JtT3JpZ2luU2hvcnRoYW5kIGFkdmFuY2VzIHRo
ZSBtX3ZhbHVlTGlzdCBwb2ludGVyCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUHJvcGVy
dHlUcmFuc2Zvcm1PcmlnaW5YOiB7Ci0gICAgICAgIHZhbHVlID0gcGFyc2VQb3NpdGlvblgoKm1f
dmFsdWVMaXN0KTsKLSAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgbV92YWx1ZUxpc3Qt
Pm5leHQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFu
c2Zvcm1PcmlnaW5ZOiB7Ci0gICAgICAgIHZhbHVlID0gcGFyc2VQb3NpdGlvblkoKm1fdmFsdWVM
aXN0KTsKLSAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQo
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2Zvcm1P
cmlnaW5aOiB7Ci0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0
aW9uKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKLSAgICAgICAgaWYgKHZhbGlkYXRlVW5pdCh2
YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCkpCi0gICAgICAgICAgICB2YWx1ZSA9IGNyZWF0
ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7Ci0gICAgICAgIGlm
ICh2YWx1ZSkKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotYm9v
bCBDU1NQYXJzZXI6OnBhcnNlUGVyc3BlY3RpdmVPcmlnaW4oQ1NTUHJvcGVydHlJRCBwcm9wSWQs
IENTU1Byb3BlcnR5SUQmIHByb3BJZDEsIENTU1Byb3BlcnR5SUQmIHByb3BJZDIsIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4mIHZhbHVlLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWx1
ZTIpCi17Ci0gICAgcHJvcElkMSA9IHByb3BJZDsKLSAgICBwcm9wSWQyID0gcHJvcElkOwotICAg
IGlmIChwcm9wSWQgPT0gQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZU9yaWdpbikgewotICAgICAgICBw
cm9wSWQxID0gQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZU9yaWdpblg7Ci0gICAgICAgIHByb3BJZDIg
PSBDU1NQcm9wZXJ0eVBlcnNwZWN0aXZlT3JpZ2luWTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHBy
b3BJZCkgewotICAgIGNhc2UgQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZU9yaWdpbjoKLSAgICAgICAg
aWYgKG1fdmFsdWVMaXN0LT5zaXplKCkgPiAyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBwYXJzZTJWYWx1ZXNGaWxsUG9zaXRpb24oKm1fdmFsdWVMaXN0LCB2YWx1ZSwgdmFs
dWUyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBlcnNwZWN0aXZlT3Jp
Z2luWDogewotICAgICAgICB2YWx1ZSA9IHBhcnNlUG9zaXRpb25YKCptX3ZhbHVlTGlzdCk7Ci0g
ICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5UGVyc3BlY3RpdmVPcmlnaW5Z
OiB7Ci0gICAgICAgIHZhbHVlID0gcGFyc2VQb3NpdGlvblkoKm1fdmFsdWVMaXN0KTsKLSAgICAg
ICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbHVlOwotfQot
Ci12b2lkIENTU1BhcnNlcjo6YWRkVGV4dERlY29yYXRpb25Qcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IHByb3BJZCwgUmVmUHRyPENTU1ZhbHVlPiYmIHZhbHVlLCBib29sIGltcG9ydGFudCkKLXsKLSAg
ICAvLyBUaGUgdGV4dC1kZWNvcmF0aW9uLWxpbmUgcHJvcGVydHkgdGFrZXMgcHJpb3JpdHkgb3Zl
ciB0ZXh0LWRlY29yYXRpb24sIHVubGVzcyB0aGUgbGF0dGVyIGhhcyBpbXBvcnRhbnQgcHJpb3Jp
dHkgc2V0LgotICAgIGlmIChwcm9wSWQgPT0gQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbiAmJiAh
aW1wb3J0YW50ICYmICFpblNob3J0aGFuZCgpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlm
IChtX3BhcnNlZFByb3BlcnRpZXNbaV0uaWQoKSA9PSBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNv
cmF0aW9uTGluZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgYWRkUHJvcGVydHkocHJvcElkLCBXVEZNb3ZlKHZhbHVlKSwgaW1wb3J0YW50KTsKLX0KLQot
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlVGV4dERlY29yYXRpb24oQ1NTUHJvcGVydHlJRCBwcm9wSWQs
IGJvb2wgaW1wb3J0YW50KQotewotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVM
aXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKHZhbHVlICYmIHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5v
bmUpIHsKLSAgICAgICAgYWRkVGV4dERlY29yYXRpb25Qcm9wZXJ0eShwcm9wSWQsIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSksIGlt
cG9ydGFudCk7Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VT
ZXBhcmF0ZWQoKTsKLSAgICBib29sIGlzVmFsaWQgPSB0cnVlOwotICAgIHdoaWxlIChpc1ZhbGlk
ICYmIHZhbHVlKSB7Ci0gICAgICAgIHN3aXRjaCAodmFsdWUtPmlkKSB7Ci0gICAgICAgIGNhc2Ug
Q1NTVmFsdWVCbGluazoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUxpbmVUaHJvdWdoOgotICAgICAg
ICBjYXNlIENTU1ZhbHVlT3ZlcmxpbmU6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVVbmRlcmxpbmU6
Ci0jaWYgRU5BQkxFKExFVFRFUlBSRVNTKQotICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0TGV0
dGVycHJlc3M6Ci0jZW5kaWYKLSAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNl
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzVmFsaWQpCi0g
ICAgICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgfQotCi0gICAgLy8g
VmFsdWVzIGFyZSBlaXRoZXIgdmFsaWQgb3IgaW4gc2hvcnRoYW5kIHNjb3BlLgotICAgIGlmIChs
aXN0LT5sZW5ndGgoKSAmJiAoaXNWYWxpZCB8fCBpblNob3J0aGFuZCgpKSkgewotICAgICAgICBh
ZGRUZXh0RGVjb3JhdGlvblByb3BlcnR5KHByb3BJZCwgV1RGTW92ZShsaXN0KSwgaW1wb3J0YW50
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIENTU1BhcnNlcjo6cGFyc2VUZXh0RGVjb3JhdGlvblNraXAoYm9vbCBpbXBvcnRhbnQp
Ci17Ci0gICAgLy8gVGhlIHRleHQtZGVjb3JhdGlvbi1za2lwIHByb3BlcnR5IGhhcyBzeW50YXgg
Im5vbmUgfCBbIG9iamVjdHMgfHwgc3BhY2VzIHx8IGluayB8fCBlZGdlcyB8fCBib3gtZGVjb3Jh
dGlvbiBdIi4KLSAgICAvLyBIb3dldmVyLCBvbmx5ICdub25lJyBhbmQgJ2luaycgYXJlIGltcGxl
bWVudGVkIHlldCwgc28gd2Ugd2lsbCBwYXJzZSBzeW50YXggIm5vbmUgfCBpbmsiIGZvciBub3cu
Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAg
ICBkbyB7Ci0gICAgICAgIHN3aXRjaCAodmFsdWUtPmlkKSB7Ci0gICAgICAgIGNhc2UgQ1NTVmFs
dWVOb25lOgotICAgICAgICBjYXNlIENTU1ZhbHVlQXV0bzoKLSAgICAgICAgY2FzZSBDU1NWYWx1
ZUluazoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZU9iamVjdHM6Ci0gICAgICAgICAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uU2tpcCwgQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSwgaW1wb3J0YW50KTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlICgodmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4
dCgpKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VUZXh0
VW5kZXJsaW5lUG9zaXRpb24oYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgLy8gVGhlIHRleHQtdW5k
ZXJsaW5lLXBvc2l0aW9uIHByb3BlcnR5IGhhcyBzaW50YXggImF1dG8gfCBhbHBoYWJldGljIHwg
WyB1bmRlciB8fCBbIGxlZnQgfCByaWdodCBdIF0iLgotICAgIC8vIEhvd2V2ZXIsIHZhbHVlcyAn
bGVmdCcgYW5kICdyaWdodCcgYXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQsIHNvIHdlIHdpbGwgcGFy
c2Ugc2ludGF4Ci0gICAgLy8gImF1dG8gfCBhbHBoYWJldGljIHwgdW5kZXIiIGZvciBub3cuCi0g
ICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAg
c3dpdGNoICh2YWx1ZS5pZCkgewotICAgIGNhc2UgQ1NTVmFsdWVBdXRvOgotICAgIGNhc2UgQ1NT
VmFsdWVBbHBoYWJldGljOgotICAgIGNhc2UgQ1NTVmFsdWVVbmRlcjoKLSAgICAgICAgaWYgKG1f
dmFsdWVMaXN0LT5uZXh0KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0VW5kZXJsaW5lUG9zaXRpb24sIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKSwgaW1w
b3J0YW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNl
VGV4dEVtcGhhc2lzU3R5bGUoYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgdW5zaWduZWQgdmFsdWVM
aXN0U2l6ZSA9IG1fdmFsdWVMaXN0LT5zaXplKCk7Ci0KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGZpbGw7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzaGFwZTsKLQotICAg
IGZvciAoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsgdmFs
dWU7IHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKSkgewotICAgICAgICBpZiAodmFsdWUtPnVu
aXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpIHsKLSAgICAgICAgICAgIGlmIChm
aWxsIHx8IHNoYXBlIHx8ICh2YWx1ZUxpc3RTaXplICE9IDEgJiYgIWluU2hvcnRoYW5kKCkpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KENT
U1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzU3R5bGUsIGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1Zh
bHVlKCp2YWx1ZSksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgp
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmFs
dWUtPmlkID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAgICAgaWYgKGZpbGwgfHwgc2hhcGUg
fHwgKHZhbHVlTGlzdFNpemUgIT0gMSAmJiAhaW5TaG9ydGhhbmQoKSkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJr
aXRUZXh0RW1waGFzaXNTdHlsZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIG1fdmFs
dWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVPcGVuIHx8IHZhbHVlLT5pZCA9PSBDU1NW
YWx1ZUZpbGxlZCkgewotICAgICAgICAgICAgaWYgKGZpbGwpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgZmlsbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFs
dWUtPmlkID09IENTU1ZhbHVlRG90IHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNpcmNsZSB8fCB2
YWx1ZS0+aWQgPT0gQ1NTVmFsdWVEb3VibGVDaXJjbGUgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVl
VHJpYW5nbGUgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlU2VzYW1lKSB7Ci0gICAgICAgICAgICBp
ZiAoc2hhcGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgc2hh
cGUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1
ZS0+aWQpOwotICAgICAgICB9IGVsc2UgaWYgKCFpblNob3J0aGFuZCgpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICBpZiAoZmlsbCAmJiBzaGFwZSkgewotICAgICAgICBhdXRvIHBhcnNlZFZhbHVlcyA9IENT
U1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAgICAgICAgcGFyc2VkVmFsdWVz
LT5hcHBlbmQoZmlsbC5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgcGFyc2VkVmFsdWVzLT5h
cHBlbmQoc2hhcGUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1By
b3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzU3R5bGUsIFdURk1vdmUocGFyc2VkVmFsdWVzKSwgaW1w
b3J0YW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmIChmaWxsKSB7Ci0g
ICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzU3R5bGUsIGZp
bGwucmVsZWFzZU5vbk51bGwoKSwgaW1wb3J0YW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIGlmIChzaGFwZSkgewotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdl
YmtpdFRleHRFbXBoYXNpc1N0eWxlLCBzaGFwZS5yZWxlYXNlTm9uTnVsbCgpLCBpbXBvcnRhbnQp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRleHRFbXBoYXNpc1Bvc2l0aW9uKGJvb2wgaW1wb3J0YW50
KQotewotICAgIGJvb2wgZm91bmRPdmVyT3JVbmRlciA9IGZhbHNlOwotICAgIENTU1ZhbHVlSUQg
b3ZlclVuZGVyVmFsdWVJRCA9IENTU1ZhbHVlT3ZlcjsKLSAgICBib29sIGZvdW5kTGVmdE9yUmln
aHQgPSBmYWxzZTsKLSAgICBDU1NWYWx1ZUlEIGxlZnRSaWdodFZhbHVlSUQgPSBDU1NWYWx1ZVJp
Z2h0OwotICAgIGZvciAoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJl
bnQoKTsgdmFsdWU7IHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKSkgewotICAgICAgICBzd2l0
Y2ggKHZhbHVlLT5pZCkgewotICAgICAgICBjYXNlIENTU1ZhbHVlT3ZlcjoKLSAgICAgICAgICAg
IGlmIChmb3VuZE92ZXJPclVuZGVyKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIGZvdW5kT3Zlck9yVW5kZXIgPSB0cnVlOwotICAgICAgICAgICAgb3ZlclVuZGVy
VmFsdWVJRCA9IENTU1ZhbHVlT3ZlcjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU1ZhbHVlVW5kZXI6Ci0gICAgICAgICAgICBpZiAoZm91bmRPdmVyT3JVbmRlcikKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBmb3VuZE92ZXJPclVuZGVyID0g
dHJ1ZTsKLSAgICAgICAgICAgIG92ZXJVbmRlclZhbHVlSUQgPSBDU1NWYWx1ZVVuZGVyOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVMZWZ0OgotICAgICAgICAgICAg
aWYgKGZvdW5kTGVmdE9yUmlnaHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgZm91bmRMZWZ0T3JSaWdodCA9IHRydWU7Ci0gICAgICAgICAgICBsZWZ0UmlnaHRW
YWx1ZUlEID0gQ1NTVmFsdWVMZWZ0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q1NTVmFsdWVSaWdodDoKLSAgICAgICAgICAgIGlmIChmb3VuZExlZnRPclJpZ2h0KQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGZvdW5kTGVmdE9yUmlnaHQgPSB0
cnVlOwotICAgICAgICAgICAgbGVmdFJpZ2h0VmFsdWVJRCA9IENTU1ZhbHVlUmlnaHQ7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIWZvdW5kT3Zlck9yVW5kZXIpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNl
U2VwYXJhdGVkKCk7Ci0gICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKG92ZXJVbmRlclZhbHVlSUQpKTsKLSAgICBpZiAoZm91bmRM
ZWZ0T3JSaWdodCkKLSAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGxlZnRSaWdodFZhbHVlSUQpKTsKLSAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc1Bvc2l0aW9uLCBXVEZNb3ZlKGxpc3Qp
LCBpbXBvcnRhbnQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1SZWZQdHI8Q1NTVmFsdWVMaXN0
PiBDU1NQYXJzZXI6OnBhcnNlVGV4dEluZGVudCgpCi17Ci0gICAgLy8gPGxlbmd0aD4gfCA8cGVy
Y2VudGFnZT4gfCBpbmhlcml0ICB3aGVuIENTUzNfVEVYVCBpcyBkaXNhYmxlZC4KLSAgICAvLyBb
IDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IF0gJiYgWyAtd2Via2l0LWhhbmdpbmcgfHwgLXdlYmtp
dC1lYWNoLWxpbmUgXT8gfCBpbmhlcml0ICB3aGVuIENTUzNfVEVYVCBpcyBlbmFibGVkLgotICAg
IGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAgICBi
b29sIGhhc0xlbmd0aE9yUGVyY2VudGFnZSA9IGZhbHNlOwotI2lmIEVOQUJMRShDU1MzX1RFWFQp
Ci0gICAgYm9vbCBoYXNFYWNoTGluZSA9IGZhbHNlOwotICAgIGJvb2wgaGFzSGFuZ2luZyA9IGZh
bHNlOwotI2VuZGlmCi0KLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+
Y3VycmVudCgpOwotICAgIHdoaWxlICh2YWx1ZSkgewotICAgICAgICBWYWx1ZVdpdGhDYWxjdWxh
dGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOwotICAgICAgICBpZiAoIWhhc0xlbmd0
aE9yUGVyY2VudGFnZSAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5n
dGggfCBGUGVyY2VudCkpIHsKLSAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjcmVhdGVQcmltaXRp
dmVOdW1lcmljVmFsdWUodmFsdWVXaXRoQ2FsY3VsYXRpb24pKTsKLSAgICAgICAgICAgIGhhc0xl
bmd0aE9yUGVyY2VudGFnZSA9IHRydWU7Ci0gICAgICAgIH0KLSNpZiBFTkFCTEUoQ1NTM19URVhU
KQotICAgICAgICBlbHNlIGlmICghaGFzRWFjaExpbmUgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVl
V2Via2l0RWFjaExpbmUpIHsKLSAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVdlYmtpdEVhY2hMaW5l
KSk7Ci0gICAgICAgICAgICBoYXNFYWNoTGluZSA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAo
IWhhc0hhbmdpbmcgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlV2Via2l0SGFuZ2luZykgewotICAg
ICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlV2Via2l0SGFuZ2luZykpOwotICAgICAgICAgICAgaGFzSGFu
Z2luZyA9IHRydWU7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7
Ci0gICAgfQotCi0gICAgaWYgKCFoYXNMZW5ndGhPclBlcmNlbnRhZ2UpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgcmV0dXJuIFdURk1vdmUobGlzdCk7Ci19Ci0KLWJvb2wgQ1NTUGFy
c2VyOjpwYXJzZUhhbmdpbmdQdW5jdHVhdGlvbihib29sIGltcG9ydGFudCkKLXsKLSAgICBDU1NQ
YXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICh2YWx1
ZSAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgIGFkZFByb3BlcnR5KENT
U1Byb3BlcnR5SGFuZ2luZ1B1bmN0dWF0aW9uLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpLCBpbXBvcnRhbnQpOwotICAgICAgICBt
X3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0g
ICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAg
IGJvb2wgaXNWYWxpZCA9IHRydWU7Ci0gICAgc3RkOjpiaXRzZXQ8bnVtQ1NTVmFsdWVLZXl3b3Jk
cz4gc2VlblZhbHVlczsKLSAgICB3aGlsZSAoaXNWYWxpZCAmJiB2YWx1ZSkgewotICAgICAgICBp
ZiAoc2VlblZhbHVlc1t2YWx1ZS0+aWRdCi0gICAgICAgICAgICB8fCAodmFsdWUtPmlkID09IENT
U1ZhbHVlQWxsb3dFbmQgJiYgc2VlblZhbHVlc1tDU1NWYWx1ZUZvcmNlRW5kXSkKLSAgICAgICAg
ICAgIHx8ICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVGb3JjZUVuZCAmJiBzZWVuVmFsdWVzW0NTU1Zh
bHVlQWxsb3dFbmRdKSkgewotICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoICh2YWx1ZS0+aWQpIHsKLSAgICAg
ICAgY2FzZSBDU1NWYWx1ZUFsbG93RW5kOgotICAgICAgICBjYXNlIENTU1ZhbHVlRmlyc3Q6Ci0g
ICAgICAgIGNhc2UgQ1NTVmFsdWVGb3JjZUVuZDoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUxhc3Q6
Ci0gICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSk7Ci0gICAgICAgICAgICBzZWVuVmFsdWVzLnNl
dCh2YWx1ZS0+aWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBpc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoaXNWYWxpZCkKLSAgICAgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5l
eHQoKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gVmFsdWVzIGFyZSBlaXRoZXIgdmFsaWQgb3IgaW4g
c2hvcnRoYW5kIHNjb3BlLgotICAgIGlmIChsaXN0LT5sZW5ndGgoKSAmJiBpc1ZhbGlkKSB7Ci0g
ICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5SGFuZ2luZ1B1bmN0dWF0aW9uLCBXVEZNb3Zl
KGxpc3QpLCBpbXBvcnRhbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VMaW5lQm94Q29udGFp
bihib29sIGltcG9ydGFudCkKLXsKLSAgICBMaW5lQm94Q29udGFpbiBsaW5lQm94Q29udGFpbiA9
IExpbmVCb3hDb250YWluTm9uZTsKLQotICAgIGZvciAoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0g
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsgdmFsdWU7IHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQo
KSkgewotICAgICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlQmxvY2spIHsKLSAgICAgICAg
ICAgIGlmIChsaW5lQm94Q29udGFpbiAmIExpbmVCb3hDb250YWluQmxvY2spCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbGluZUJveENvbnRhaW4gfD0gTGluZUJv
eENvbnRhaW5CbG9jazsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVJ
bmxpbmUpIHsKLSAgICAgICAgICAgIGlmIChsaW5lQm94Q29udGFpbiAmIExpbmVCb3hDb250YWlu
SW5saW5lKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGxpbmVC
b3hDb250YWluIHw9IExpbmVCb3hDb250YWluSW5saW5lOwotICAgICAgICB9IGVsc2UgaWYgKHZh
bHVlLT5pZCA9PSBDU1NWYWx1ZUZvbnQpIHsKLSAgICAgICAgICAgIGlmIChsaW5lQm94Q29udGFp
biAmIExpbmVCb3hDb250YWluRm9udCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBsaW5lQm94Q29udGFpbiB8PSBMaW5lQm94Q29udGFpbkZvbnQ7Ci0gICAgICAg
IH0gZWxzZSBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlR2x5cGhzKSB7Ci0gICAgICAgICAgICBp
ZiAobGluZUJveENvbnRhaW4gJiBMaW5lQm94Q29udGFpbkdseXBocykKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBsaW5lQm94Q29udGFpbiB8PSBMaW5lQm94Q29u
dGFpbkdseXBoczsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVSZXBs
YWNlZCkgewotICAgICAgICAgICAgaWYgKGxpbmVCb3hDb250YWluICYgTGluZUJveENvbnRhaW5S
ZXBsYWNlZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBsaW5l
Qm94Q29udGFpbiB8PSBMaW5lQm94Q29udGFpblJlcGxhY2VkOwotICAgICAgICB9IGVsc2UgaWYg
KHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUlubGluZUJveCkgewotICAgICAgICAgICAgaWYgKGxpbmVC
b3hDb250YWluICYgTGluZUJveENvbnRhaW5JbmxpbmVCb3gpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgbGluZUJveENvbnRhaW4gfD0gTGluZUJveENvbnRhaW5J
bmxpbmVCb3g7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlSW5pdGlh
bExldHRlcikgewotICAgICAgICAgICAgaWYgKGxpbmVCb3hDb250YWluICYgTGluZUJveENvbnRh
aW5Jbml0aWFsTGV0dGVyKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIGxpbmVCb3hDb250YWluIHw9IExpbmVCb3hDb250YWluSW5pdGlhbExldHRlcjsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFs
aW5lQm94Q29udGFpbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYWRkUHJvcGVydHko
Q1NTUHJvcGVydHlXZWJraXRMaW5lQm94Q29udGFpbiwgQ1NTTGluZUJveENvbnRhaW5WYWx1ZTo6
Y3JlYXRlKGxpbmVCb3hDb250YWluKSwgaW1wb3J0YW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udEZlYXR1cmVUYWcoQ1NTVmFsdWVMaXN0JiBzZXR0
aW5ncykKLXsKLSAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpOwotICAgIC8vIEZlYXR1cmUgdGFnIG5hbWUgY29tZXMgZmlyc3QKLSAgICBpZiAodmFsdWUt
PnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBGb250RmVhdHVyZVRhZyB0YWc7Ci0gICAgaWYgKHZhbHVlLT5zdHJpbmcubGVu
Z3RoKCkgIT0gdGFnLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB0YWcuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgLy8gTGltaXRzIHRo
ZSByYW5nZSBvZiBjaGFyYWN0ZXJzIHRvIDB4MjAtMHg3RSwgZm9sbG93aW5nIHRoZSB0YWcgbmFt
ZSBydWxlcyBkZWZpZW5kIGluIHRoZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uLgotICAgICAgICBV
Q2hhciBjaGFyYWN0ZXIgPSB2YWx1ZS0+c3RyaW5nW2ldOwotICAgICAgICBpZiAoY2hhcmFjdGVy
IDwgMHgyMCB8fCBjaGFyYWN0ZXIgPiAweDdFKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB0YWdbaV0gPSB0b0FTQ0lJTG93ZXIoY2hhcmFjdGVyKTsKLSAgICB9Ci0KLSAgICBp
bnQgdGFnVmFsdWUgPSAxOwotICAgIC8vIEZlYXR1cmUgdGFnIHZhbHVlcyBjb3VsZCBmb2xsb3c6
IDxpbnRlZ2VyPiB8IG9uIHwgb2ZmCi0gICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwot
ICAgIGlmICh2YWx1ZSkgewotICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIgJiYgdmFsdWUtPmlzSW50ICYmIHZhbHVlLT5mVmFsdWUgPj0gMCkg
ewotICAgICAgICAgICAgdGFnVmFsdWUgPSBjbGFtcFRvSW50ZWdlcih2YWx1ZS0+ZlZhbHVlKTsK
LSAgICAgICAgICAgIGlmICh0YWdWYWx1ZSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgfSBlbHNlIGlm
ICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVPbiB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVPZmYpIHsK
LSAgICAgICAgICAgIHRhZ1ZhbHVlID0gdmFsdWUtPmlkID09IENTU1ZhbHVlT247Ci0gICAgICAg
ICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIHNldHRpbmdz
LmFwcGVuZChDU1NGb250RmVhdHVyZVZhbHVlOjpjcmVhdGUoV1RGTW92ZSh0YWcpLCB0YWdWYWx1
ZSkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VGb250RmVh
dHVyZVNldHRpbmdzKGJvb2wgaW1wb3J0YW50KQotewotICAgIGlmIChtX3ZhbHVlTGlzdC0+c2l6
ZSgpID09IDEgJiYgbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQgPT0gQ1NTVmFsdWVOb3JtYWwp
IHsKLSAgICAgICAgYXV0byBub3JtYWxWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKTsKLSAgICAgICAgbV92YWx1ZUxp
c3QtPm5leHQoKTsKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250RmVhdHVyZVNl
dHRpbmdzLCBXVEZNb3ZlKG5vcm1hbFZhbHVlKSwgaW1wb3J0YW50KTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgYXV0byBzZXR0aW5ncyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRl
Q29tbWFTZXBhcmF0ZWQoKTsKLSAgICBmb3IgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFs
dWVMaXN0LT5jdXJyZW50KCk7IHZhbHVlOyB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsK
LSAgICAgICAgaWYgKCFwYXJzZUZvbnRGZWF0dXJlVGFnKHNldHRpbmdzKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICAvLyBJZiB0aGUgbGlzdCBpc24ndCBwYXJzZWQgZnVs
bHksIHRoZSBjdXJyZW50IHZhbHVlIHNob3VsZCBiZSBjb21tYS4KLSAgICAgICAgdmFsdWUgPSBt
X3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgICAgICBpZiAodmFsdWUgJiYgIWlzQ29tbWEodmFs
dWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoc2V0dGluZ3Mt
Pmxlbmd0aCgpKSB7Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udEZlYXR1cmVT
ZXR0aW5ncywgV1RGTW92ZShzZXR0aW5ncyksIGltcG9ydGFudCk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUZvbnRWYXJpYW50TGlnYXR1cmVzKGJvb2wgaW1wb3J0YW50LCBib29sIHVua25vd25Jc0ZhaWx1
cmUsIGJvb2wgaW1wbGljaXQpCi17Ci0gICAgYXV0byB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNy
ZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgRm9udFZhcmlhbnRMaWdhdHVyZXMgY29tbW9uTGln
YXR1cmVzID0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDsKLSAgICBGb250VmFyaWFudExp
Z2F0dXJlcyBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzID0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5v
cm1hbDsKLSAgICBGb250VmFyaWFudExpZ2F0dXJlcyBoaXN0b3JpY2FsTGlnYXR1cmVzID0gRm9u
dFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbDsKLSAgICBGb250VmFyaWFudExpZ2F0dXJlcyBjb250
ZXh0dWFsQWx0ZXJuYXRlcyA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWw7Ci0KLSAgICBm
b3IgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7IHZhbHVl
OyB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKLSAgICAgICAgaWYgKHZhbHVlLT51bml0
ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgc3dpdGNoICh2YWx1ZS0+aWQpIHsKLSAgICAgICAgY2FzZSBDU1NWYWx1
ZU5vQ29tbW9uTGlnYXR1cmVzOgotICAgICAgICAgICAgY29tbW9uTGlnYXR1cmVzID0gRm9udFZh
cmlhbnRMaWdhdHVyZXM6Ok5vOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NT
VmFsdWVDb21tb25MaWdhdHVyZXM6Ci0gICAgICAgICAgICBjb21tb25MaWdhdHVyZXMgPSBGb250
VmFyaWFudExpZ2F0dXJlczo6WWVzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q1NTVmFsdWVOb0Rpc2NyZXRpb25hcnlMaWdhdHVyZXM6Ci0gICAgICAgICAgICBkaXNjcmV0aW9u
YXJ5TGlnYXR1cmVzID0gRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVEaXNjcmV0aW9uYXJ5TGlnYXR1cmVzOgotICAgICAg
ICAgICAgZGlzY3JldGlvbmFyeUxpZ2F0dXJlcyA9IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZU5vSGlzdG9yaWNhbExp
Z2F0dXJlczoKLSAgICAgICAgICAgIGhpc3RvcmljYWxMaWdhdHVyZXMgPSBGb250VmFyaWFudExp
Z2F0dXJlczo6Tm87Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUhp
c3RvcmljYWxMaWdhdHVyZXM6Ci0gICAgICAgICAgICBoaXN0b3JpY2FsTGlnYXR1cmVzID0gRm9u
dFZhcmlhbnRMaWdhdHVyZXM6OlllczsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU1ZhbHVlQ29udGV4dHVhbDoKLSAgICAgICAgICAgIGNvbnRleHR1YWxBbHRlcm5hdGVzID0g
Rm9udFZhcmlhbnRMaWdhdHVyZXM6OlllczsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENTU1ZhbHVlTm9Db250ZXh0dWFsOgotICAgICAgICAgICAgY29udGV4dHVhbEFsdGVybmF0
ZXMgPSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm87Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmICh1bmtub3duSXNGYWlsdXJlKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgc3dpdGNoIChjb21tb25MaWdhdHVyZXMpIHsKLSAgICBjYXNlIEZvbnRWYXJp
YW50TGlnYXR1cmVzOjpOb3JtYWw6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlh
bnRMaWdhdHVyZXM6OlllczoKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVDb21tb25MaWdhdHVyZXMp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm86Ci0g
ICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlTm9Db21tb25MaWdhdHVyZXMpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotCi0gICAgc3dpdGNoIChkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKSB7Ci0gICAgY2Fz
ZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsOgotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM6Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlRGlzY3Jl
dGlvbmFyeUxpZ2F0dXJlcykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50
TGlnYXR1cmVzOjpObzoKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb0Rpc2NyZXRpb25hcnlMaWdh
dHVyZXMpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgc3dpdGNoIChoaXN0b3JpY2Fs
TGlnYXR1cmVzKSB7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsOgotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVzOjpZZXM6Ci0gICAgICAg
IHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlSGlzdG9yaWNhbExpZ2F0dXJlcykpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZvbnRWYXJpYW50TGlnYXR1cmVzOjpObzoKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQo
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVO
b0hpc3RvcmljYWxMaWdhdHVyZXMpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgc3dp
dGNoIChjb250ZXh0dWFsQWx0ZXJuYXRlcykgewotICAgIGNhc2UgRm9udFZhcmlhbnRMaWdhdHVy
ZXM6Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJl
czo6WWVzOgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUNvbnRleHR1YWwpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBGb250VmFyaWFudExpZ2F0dXJlczo6Tm86Ci0gICAgICAgIHZhbHVlcy0+
YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlTm9Db250ZXh0dWFsKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmICgh
dmFsdWVzLT5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuICF1bmtub3duSXNGYWlsdXJlOwotCi0g
ICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudExpZ2F0dXJlcywgV1RGTW92ZSh2
YWx1ZXMpLCBpbXBvcnRhbnQsIGltcGxpY2l0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBDU1NQYXJzZXI6OnBhcnNlRm9udFZhcmlhbnROdW1lcmljKGJvb2wgaW1wb3J0YW50LCBib29s
IHVua25vd25Jc0ZhaWx1cmUsIGJvb2wgaW1wbGljaXQpCi17Ci0gICAgYXV0byB2YWx1ZXMgPSBD
U1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgRm9udFZhcmlhbnROdW1l
cmljRmlndXJlIGZpZ3VyZSA9IEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsOwotICAg
IEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmcgc3BhY2luZyA9IEZvbnRWYXJpYW50TnVtZXJpY1Nw
YWNpbmc6Ok5vcm1hbDsKLSAgICBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbiBmcmFjdGlvbiA9
IEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWw7Ci0gICAgRm9udFZhcmlhbnROdW1l
cmljT3JkaW5hbCBvcmRpbmFsID0gRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6Tm9ybWFsOwot
ICAgIEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvIHNsYXNoZWRaZXJvID0gRm9udFZhcmlh
bnROdW1lcmljU2xhc2hlZFplcm86Ok5vcm1hbDsKLQotICAgIGZvciAoQ1NTUGFyc2VyVmFsdWUq
IHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsgdmFsdWU7IHZhbHVlID0gbV92YWx1ZUxp
c3QtPm5leHQoKSkgewotICAgICAgICBpZiAodmFsdWUtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19JREVOVCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBzd2l0
Y2ggKHZhbHVlLT5pZCkgewotICAgICAgICBjYXNlIENTU1ZhbHVlTGluaW5nTnVtczoKLSAgICAg
ICAgICAgIGZpZ3VyZSA9IEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6TGluaW5nTnVtYmVyczsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlT2xkc3R5bGVOdW1zOgot
ICAgICAgICAgICAgZmlndXJlID0gRm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpPbGRTdHlsZU51
bWJlcnM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVByb3BvcnRp
b25hbE51bXM6Ci0gICAgICAgICAgICBzcGFjaW5nID0gRm9udFZhcmlhbnROdW1lcmljU3BhY2lu
Zzo6UHJvcG9ydGlvbmFsTnVtYmVyczsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU1ZhbHVlVGFidWxhck51bXM6Ci0gICAgICAgICAgICBzcGFjaW5nID0gRm9udFZhcmlhbnRO
dW1lcmljU3BhY2luZzo6VGFidWxhck51bWJlcnM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBDU1NWYWx1ZURpYWdvbmFsRnJhY3Rpb25zOgotICAgICAgICAgICAgZnJhY3Rpb24g
PSBGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6RGlhZ29uYWxGcmFjdGlvbnM7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVN0YWNrZWRGcmFjdGlvbnM6Ci0gICAg
ICAgICAgICBmcmFjdGlvbiA9IEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpTdGFja2VkRnJh
Y3Rpb25zOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVPcmRpbmFs
OgotICAgICAgICAgICAgb3JkaW5hbCA9IEZvbnRWYXJpYW50TnVtZXJpY09yZGluYWw6OlllczsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlU2xhc2hlZFplcm86Ci0g
ICAgICAgICAgICBzbGFzaGVkWmVybyA9IEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvOjpZ
ZXM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlm
ICh1bmtub3duSXNGYWlsdXJlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3dpdGNoIChmaWd1cmUp
IHsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsOgotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6TGluaW5nTnVtYmVyczoK
LSAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVMaW5pbmdOdW1zKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpPbGRTdHlsZU51bWJlcnM6Ci0gICAgICAg
IHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlT2xkc3R5bGVOdW1zKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIHN3aXRjaCAoc3BhY2luZykgewotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljU3BhY2lu
Zzo6Tm9ybWFsOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY1Nw
YWNpbmc6OlByb3BvcnRpb25hbE51bWJlcnM6Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlUHJvcG9y
dGlvbmFsTnVtcykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJp
Y1NwYWNpbmc6OlRhYnVsYXJOdW1iZXJzOgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVRhYnVsYXJO
dW1zKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHN3aXRjaCAoZnJhY3Rpb24pIHsK
LSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWw6Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246OkRpYWdvbmFsRnJhY3Rp
b25zOgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZURpYWdvbmFsRnJhY3Rpb25zKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246OlN0YWNrZWRGcmFj
dGlvbnM6Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlU3RhY2tlZEZyYWN0aW9ucykpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKG9yZGluYWwpIHsKLSAgICBjYXNlIEZvbnRW
YXJpYW50TnVtZXJpY09yZGluYWw6Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
b250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpZZXM6Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5kKENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlT3Jk
aW5hbCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHNsYXNoZWRaZXJv
KSB7Ci0gICAgY2FzZSBGb250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6Tm9ybWFsOgotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvOjpZZXM6
Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlU2xhc2hlZFplcm8pKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgaWYgKCF2YWx1ZXMtPmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gIXVua25v
d25Jc0ZhaWx1cmU7Ci0KLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50TnVt
ZXJpYywgV1RGTW92ZSh2YWx1ZXMpLCBpbXBvcnRhbnQsIGltcGxpY2l0KTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udFZhcmlhbnRFYXN0QXNpYW4oYm9v
bCBpbXBvcnRhbnQsIGJvb2wgdW5rbm93bklzRmFpbHVyZSwgYm9vbCBpbXBsaWNpdCkKLXsKLSAg
ICBhdXRvIHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAg
ICBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFzdEFz
aWFuVmFyaWFudDo6Tm9ybWFsOwotICAgIEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGggd2lkdGgg
PSBGb250VmFyaWFudEVhc3RBc2lhbldpZHRoOjpOb3JtYWw7Ci0gICAgRm9udFZhcmlhbnRFYXN0
QXNpYW5SdWJ5IHJ1YnkgPSBGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk6Ok5vcm1hbDsKLQotICAg
IGZvciAoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsgdmFs
dWU7IHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKSkgewotICAgICAgICBpZiAodmFsdWUtPnVu
aXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBzd2l0Y2ggKHZhbHVlLT5pZCkgewotICAgICAgICBjYXNlIENTU1Zh
bHVlSmlzNzg6Ci0gICAgICAgICAgICB2YXJpYW50ID0gRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJp
YW50OjpKaXM3ODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlSmlz
ODM6Ci0gICAgICAgICAgICB2YXJpYW50ID0gRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpK
aXM4MzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlSmlzOTA6Ci0g
ICAgICAgICAgICB2YXJpYW50ID0gRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM5MDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlSmlzMDQ6Ci0gICAgICAg
ICAgICB2YXJpYW50ID0gRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXMwNDsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlU2ltcGxpZmllZDoKLSAgICAgICAg
ICAgIHZhcmlhbnQgPSBGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6OlNpbXBsaWZpZWQ7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVRyYWRpdGlvbmFsOgotICAg
ICAgICAgICAgdmFyaWFudCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6VHJhZGl0aW9u
YWw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUZ1bGxXaWR0aDoK
LSAgICAgICAgICAgIHdpZHRoID0gRm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6RnVsbDsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlUHJvcG9ydGlvbmFsV2lkdGg6
Ci0gICAgICAgICAgICB3aWR0aCA9IEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OlByb3BvcnRp
b25hbDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlUnVieToKLSAg
ICAgICAgICAgIHJ1YnkgPSBGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk6OlllczsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKHVua25vd25Jc0Zh
aWx1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHZhcmlhbnQpIHsKLSAgICBjYXNl
IEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Tm9ybWFsOgotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzNzg6Ci0gICAgICAgIHZhbHVl
cy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlSmlzNzgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVh
c3RBc2lhblZhcmlhbnQ6OkppczgzOgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUppczgzKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpKaXM5
MDoKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVKaXM5MCkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6SmlzMDQ6Ci0gICAgICAgIHZhbHVlcy0+
YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlSmlzMDQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudEVhc3RB
c2lhblZhcmlhbnQ6OlNpbXBsaWZpZWQ6Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlU2ltcGxpZmll
ZCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50RWFzdEFzaWFuVmFyaWFu
dDo6VHJhZGl0aW9uYWw6Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVHJhZGl0aW9uYWwpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgc3dpdGNoICh3aWR0aCkgewotICAgIGNhc2UgRm9u
dFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6Tm9ybWFsOgotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6OkZ1bGw6Ci0gICAgICAgIHZhbHVlcy0+YXBwZW5k
KENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
RnVsbFdpZHRoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNp
YW5XaWR0aDo6UHJvcG9ydGlvbmFsOgotICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVByb3BvcnRpb25h
bFdpZHRoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHN3aXRjaCAocnVieSkgewot
ICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpOb3JtYWw6Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpZZXM6Ci0gICAgICAgIHZhbHVl
cy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlUnVieSkpOwotICAgIH0KLQotICAgIGlmICghdmFsdWVzLT5sZW5ndGgoKSkKLSAg
ICAgICAgcmV0dXJuICF1bmtub3duSXNGYWlsdXJlOwotCi0gICAgYWRkUHJvcGVydHkoQ1NTUHJv
cGVydHlGb250VmFyaWFudEVhc3RBc2lhbiwgV1RGTW92ZSh2YWx1ZXMpLCBpbXBvcnRhbnQsIGlt
cGxpY2l0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9u
dFZhcmlhbnQoYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhp
cywgQ1NTUHJvcGVydHlGb250VmFyaWFudCk7Ci0gICAgaWYgKCFwYXJzZUZvbnRWYXJpYW50TGln
YXR1cmVzKGltcG9ydGFudCwgZmFsc2UsIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1fdmFsdWVMaXN0LT5zZXRDdXJyZW50SW5kZXgoMCk7Ci0gICAgaWYgKCFwYXJzZUZvbnRW
YXJpYW50TnVtZXJpYyhpbXBvcnRhbnQsIGZhbHNlLCBmYWxzZSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX3ZhbHVlTGlzdC0+c2V0Q3VycmVudEluZGV4KDApOwotICAgIGlmICghcGFy
c2VGb250VmFyaWFudEVhc3RBc2lhbihpbXBvcnRhbnQsIGZhbHNlLCBmYWxzZSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX3ZhbHVlTGlzdC0+c2V0Q3VycmVudEluZGV4KDApOwotCi0g
ICAgRm9udFZhcmlhbnRQb3NpdGlvbiBwb3NpdGlvbiA9IEZvbnRWYXJpYW50UG9zaXRpb246Ok5v
cm1hbDsKLSAgICBGb250VmFyaWFudENhcHMgY2FwcyA9IEZvbnRWYXJpYW50Q2Fwczo6Tm9ybWFs
OwotICAgIEZvbnRWYXJpYW50QWx0ZXJuYXRlcyBhbHRlcm5hdGVzID0gRm9udFZhcmlhbnRBbHRl
cm5hdGVzOjpOb3JtYWw7Ci0KLSAgICBmb3IgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFs
dWVMaXN0LT5jdXJyZW50KCk7IHZhbHVlOyB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsK
LSAgICAgICAgaWYgKHZhbHVlLT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgc3dpdGNoICh2YWx1ZS0+aWQp
IHsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZU5vQ29tbW9uTGlnYXR1cmVzOgotICAgICAgICBjYXNl
IENTU1ZhbHVlQ29tbW9uTGlnYXR1cmVzOgotICAgICAgICBjYXNlIENTU1ZhbHVlTm9EaXNjcmV0
aW9uYXJ5TGlnYXR1cmVzOgotICAgICAgICBjYXNlIENTU1ZhbHVlRGlzY3JldGlvbmFyeUxpZ2F0
dXJlczoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZU5vSGlzdG9yaWNhbExpZ2F0dXJlczoKLSAgICAg
ICAgY2FzZSBDU1NWYWx1ZUhpc3RvcmljYWxMaWdhdHVyZXM6Ci0gICAgICAgIGNhc2UgQ1NTVmFs
dWVDb250ZXh0dWFsOgotICAgICAgICBjYXNlIENTU1ZhbHVlTm9Db250ZXh0dWFsOgotICAgICAg
ICBjYXNlIENTU1ZhbHVlTGluaW5nTnVtczoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZU9sZHN0eWxl
TnVtczoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVByb3BvcnRpb25hbE51bXM6Ci0gICAgICAgIGNh
c2UgQ1NTVmFsdWVUYWJ1bGFyTnVtczoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZURpYWdvbmFsRnJh
Y3Rpb25zOgotICAgICAgICBjYXNlIENTU1ZhbHVlU3RhY2tlZEZyYWN0aW9uczoKLSAgICAgICAg
Y2FzZSBDU1NWYWx1ZU9yZGluYWw6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVTbGFzaGVkWmVybzoK
LSAgICAgICAgY2FzZSBDU1NWYWx1ZUppczc4OgotICAgICAgICBjYXNlIENTU1ZhbHVlSmlzODM6
Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVKaXM5MDoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUppczA0
OgotICAgICAgICBjYXNlIENTU1ZhbHVlU2ltcGxpZmllZDoKLSAgICAgICAgY2FzZSBDU1NWYWx1
ZVRyYWRpdGlvbmFsOgotICAgICAgICBjYXNlIENTU1ZhbHVlRnVsbFdpZHRoOgotICAgICAgICBj
YXNlIENTU1ZhbHVlUHJvcG9ydGlvbmFsV2lkdGg6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVSdWJ5
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVTdWI6Ci0gICAgICAg
ICAgICBwb3NpdGlvbiA9IEZvbnRWYXJpYW50UG9zaXRpb246OlN1YnNjcmlwdDsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlU3VwZXI6Ci0gICAgICAgICAgICBwb3Np
dGlvbiA9IEZvbnRWYXJpYW50UG9zaXRpb246OlN1cGVyc2NyaXB0OwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbENhcHM6Ci0gICAgICAgICAgICBjYXBzID0g
Rm9udFZhcmlhbnRDYXBzOjpTbWFsbDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU1ZhbHVlQWxsU21hbGxDYXBzOgotICAgICAgICAgICAgY2FwcyA9IEZvbnRWYXJpYW50Q2Fw
czo6QWxsU21hbGw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVBl
dGl0ZUNhcHM6Ci0gICAgICAgICAgICBjYXBzID0gRm9udFZhcmlhbnRDYXBzOjpQZXRpdGU7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUFsbFBldGl0ZUNhcHM6Ci0g
ICAgICAgICAgICBjYXBzID0gRm9udFZhcmlhbnRDYXBzOjpBbGxQZXRpdGU7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVVuaWNhc2U6Ci0gICAgICAgICAgICBjYXBz
ID0gRm9udFZhcmlhbnRDYXBzOjpVbmljYXNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQ1NTVmFsdWVUaXRsaW5nQ2FwczoKLSAgICAgICAgICAgIGNhcHMgPSBGb250VmFyaWFu
dENhcHM6OlRpdGxpbmc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1
ZUhpc3RvcmljYWxGb3JtczoKLSAgICAgICAgICAgIGFsdGVybmF0ZXMgPSBGb250VmFyaWFudEFs
dGVybmF0ZXM6Okhpc3RvcmljYWxGb3JtczsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgc3dpdGNoIChwb3NpdGlvbikgewotICAgIGNhc2UgRm9udFZhcmlhbnRQb3NpdGlvbjo6Tm9y
bWFsOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50UG9zaXRpb246OlN1YnNj
cmlwdDoKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudFBvc2l0aW9u
LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZVN1YiksIGltcG9ydGFudCwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRW
YXJpYW50UG9zaXRpb246OlN1cGVyc2NyaXB0OgotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUZvbnRWYXJpYW50UG9zaXRpb24sIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlU3VwZXIpLCBpbXBvcnRhbnQsIGZhbHNlKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgc3dpdGNoIChjYXBzKSB7Ci0gICAgY2FzZSBGb250VmFy
aWFudENhcHM6Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudENh
cHM6OlNtYWxsOgotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50Q2Fw
cywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVTbWFsbENhcHMpLCBpbXBvcnRhbnQsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGb250VmFyaWFudENhcHM6OkFsbFNtYWxsOgotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUZvbnRWYXJpYW50Q2FwcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVBbGxTbWFsbENhcHMpLCBpbXBvcnRhbnQsIGZhbHNlKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OlBldGl0ZToKLSAgICAgICAg
YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMsIENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlUGV0aXRlQ2FwcyksIGltcG9y
dGFudCwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6
QWxsUGV0aXRlOgotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50Q2Fw
cywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVBbGxQZXRpdGVDYXBzKSwgaW1wb3J0YW50LCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRm9udFZhcmlhbnRDYXBzOjpVbmljYXNlOgotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUZvbnRWYXJpYW50Q2FwcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVVbmljYXNlKSwgaW1wb3J0YW50LCBmYWxzZSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpUaXRsaW5nOgotICAgICAgICBh
ZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50Q2FwcywgQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVUaXRsaW5nQ2FwcyksIGltcG9y
dGFudCwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGFsdGVy
bmF0ZXMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6Tm9ybWFsOgotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEZvbnRWYXJpYW50QWx0ZXJuYXRlczo6SGlzdG9yaWNhbEZvcm1z
OgotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50QWx0ZXJuYXRlcywg
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVI
aXN0b3JpY2FsRm9ybXMpLCBpbXBvcnRhbnQsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkV2ls
bENoYW5nZUFuaW1hdGFibGVGZWF0dXJlKGNvbnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUuaWQgPT0gQ1NTVmFsdWVOb25lIHx8IHZhbHVlLmlkID09IENTU1ZhbHVl
QXV0byB8fCB2YWx1ZS5pZCA9PSBDU1NWYWx1ZUFsbCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKHZhbHVlSXNDU1NLZXl3b3JkKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKGNzc1Byb3BlcnR5SUQodmFsdWUuc3RyaW5nKSA9PSBDU1NQcm9wZXJ0eVdp
bGxDaGFuZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIENTU1BhcnNlcjo6cGFyc2VXaWxsQ2hhbmdlKGJvb2wgaW1wb3J0YW50KQotewotICAg
IGF1dG8gd2lsbENoYW5nZVByb3BlcnR5VmFsdWVzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21t
YVNlcGFyYXRlZCgpOwotCi0gICAgYm9vbCBleHBlY3RDb21tYSA9IGZhbHNlOwotICAgIGZvciAo
Q1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsgdmFsdWU7IHZh
bHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKSkgewotICAgICAgICBpZiAoZXhwZWN0Q29tbWEpIHsK
LSAgICAgICAgICAgIGlmICghaXNDb21tYSh2YWx1ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBleHBlY3RDb21tYSA9IGZhbHNlOwot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmFsdWUtPnVu
aXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBpZiAoIWlzVmFsaWRXaWxsQ2hhbmdlQW5pbWF0YWJsZUZlYXR1cmUo
KnZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IGNzc1ZhbHVlOwotICAgICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlU2Nyb2xs
UG9zaXRpb24gfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQ29udGVudHMpCi0gICAgICAgICAgICBj
c3NWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KHZhbHVlLT5pZCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRCh2YWx1ZS0+c3RyaW5nKTsKLSAgICAgICAgICAgIGlm
IChwcm9wZXJ0eUlEICE9IENTU1Byb3BlcnR5SW52YWxpZCkKLSAgICAgICAgICAgICAgICBjc3NW
YWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHBy
b3BlcnR5SUQpOwotICAgICAgICAgICAgZWxzZSAvLyBUaGlzIG1pZ2h0IGJlIGEgcHJvcGVydHkg
d2UgZG9uJ3Qgc3VwcG9ydC4KLSAgICAgICAgICAgICAgICBjc3NWYWx1ZSA9IGNyZWF0ZVByaW1p
dGl2ZVN0cmluZ1ZhbHVlKCp2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB3aWxsQ2hhbmdl
UHJvcGVydHlWYWx1ZXMtPmFwcGVuZChjc3NWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAg
ICAgZXhwZWN0Q29tbWEgPSB0cnVlOwotICAgIH0KLQotICAgIGFkZFByb3BlcnR5KENTU1Byb3Bl
cnR5V2lsbENoYW5nZSwgV1RGTW92ZSh3aWxsQ2hhbmdlUHJvcGVydHlWYWx1ZXMpLCBpbXBvcnRh
bnQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1SZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlQ2FsY3VsYXRpb24oQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBDYWxjdWxhdGlvblBl
cm1pdHRlZFZhbHVlUmFuZ2UgcmFuZ2UpCi17Ci0gICAgQVNTRVJUKGlzQ2FsY3VsYXRpb24odmFs
dWUpKTsKLSAgICAKLSAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlv
bi0+YXJncy5nZXQoKTsKLSAgICBpZiAoIWFyZ3MgfHwgIWFyZ3MtPnNpemUoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUodmFsdWUu
ZnVuY3Rpb24tPm5hbWUsICphcmdzLCByYW5nZSk7Ci19Ci0KLSNkZWZpbmUgRU5EX1RPS0VOIDAK
LQotI2luY2x1ZGUgIkNTU0dyYW1tYXIuaCIKLQotZW51bSBDaGFyYWN0ZXJUeXBlIHsKLSAgICAv
LyBUeXBlcyBmb3IgdGhlIG1haW4gc3dpdGNoLgotCi0gICAgLy8gVGhlIGZpcnN0IDQgdHlwZXMg
bXVzdCBiZSBncm91cGVkIHRvZ2V0aGVyLCBhcyB0aGV5Ci0gICAgLy8gcmVwcmVzZW50IHRoZSBh
bGxvd2VkIGNoYXJzIGluIGFuIGlkZW50aWZpZXIuCi0gICAgQ2hhcmFjdGVyQ2FzZWxlc3NVLAot
ICAgIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLSAgICBDaGFyYWN0ZXJOdW1iZXIsCi0gICAg
Q2hhcmFjdGVyRGFzaCwKLQotICAgIENoYXJhY3Rlck90aGVyLAotICAgIENoYXJhY3Rlck51bGws
Ci0gICAgQ2hhcmFjdGVyV2hpdGVTcGFjZSwKLSAgICBDaGFyYWN0ZXJFbmRDb25kaXRpb25RdWVy
eSwKLSAgICBDaGFyYWN0ZXJFbmROdGhDaGlsZCwKLSAgICBDaGFyYWN0ZXJRdW90ZSwKLSAgICBD
aGFyYWN0ZXJFeGNsYW1hdGlvbk1hcmssCi0gICAgQ2hhcmFjdGVySGFzaG1hcmssCi0gICAgQ2hh
cmFjdGVyRG9sbGFyLAotICAgIENoYXJhY3RlckFzdGVyaXNrLAotICAgIENoYXJhY3RlclBsdXMs
Ci0gICAgQ2hhcmFjdGVyRG90LAotICAgIENoYXJhY3RlclNsYXNoLAotICAgIENoYXJhY3Rlckxl
c3MsCi0gICAgQ2hhcmFjdGVyQXQsCi0gICAgQ2hhcmFjdGVyQmFja1NsYXNoLAotICAgIENoYXJh
Y3RlclhvciwKLSAgICBDaGFyYWN0ZXJWZXJ0aWNhbEJhciwKLSAgICBDaGFyYWN0ZXJUaWxkZSwK
LX07Ci0KLS8vIDEyOCBBU0NJSSBjb2Rlcwotc3RhdGljIGNvbnN0IENoYXJhY3RlclR5cGUgdHlw
ZXNPZkFTQ0lJQ2hhcmFjdGVyc1sxMjhdID0gewotLyogICAwIC0gTnVsbCAgICAgICAgICAgICAg
ICovIENoYXJhY3Rlck51bGwsCi0vKiAgIDEgLSBTdGFydCBvZiBIZWFkaW5nICAgKi8gQ2hhcmFj
dGVyT3RoZXIsCi0vKiAgIDIgLSBTdGFydCBvZiBUZXh0ICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIs
Ci0vKiAgIDMgLSBFbmQgb2YgVGV4dCAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgIDQg
LSBFbmQgb2YgVHJhbnNtLiAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgIDUgLSBFbnF1aXJ5
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgIDYgLSBBY2tub3dsZWRnbWVudCAg
ICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgIDcgLSBCZWxsICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVyT3RoZXIsCi0vKiAgIDggLSBCYWNrIFNwYWNlICAgICAgICAgKi8gQ2hhcmFjdGVyT3Ro
ZXIsCi0vKiAgIDkgLSBIb3Jpem9udGFsIFRhYiAgICAgKi8gQ2hhcmFjdGVyV2hpdGVTcGFjZSwK
LS8qICAxMCAtIExpbmUgRmVlZCAgICAgICAgICAqLyBDaGFyYWN0ZXJXaGl0ZVNwYWNlLAotLyog
IDExIC0gVmVydGljYWwgVGFiICAgICAgICovIENoYXJhY3Rlck90aGVyLAotLyogIDEyIC0gRm9y
bSBGZWVkICAgICAgICAgICovIENoYXJhY3RlcldoaXRlU3BhY2UsCi0vKiAgMTMgLSBDYXJyaWFn
ZSBSZXR1cm4gICAgKi8gQ2hhcmFjdGVyV2hpdGVTcGFjZSwKLS8qICAxNCAtIFNoaWZ0IE91dCAg
ICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICAxNSAtIFNoaWZ0IEluICAgICAgICAgICAq
LyBDaGFyYWN0ZXJPdGhlciwKLS8qICAxNiAtIERhdGEgTGluZSBFc2NhcGUgICAqLyBDaGFyYWN0
ZXJPdGhlciwKLS8qICAxNyAtIERldmljZSBDb250cm9sIDEgICAqLyBDaGFyYWN0ZXJPdGhlciwK
LS8qICAxOCAtIERldmljZSBDb250cm9sIDIgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICAxOSAt
IERldmljZSBDb250cm9sIDMgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICAyMCAtIERldmljZSBD
b250cm9sIDQgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICAyMSAtIE5lZ2F0aXZlIEFjay4gICAg
ICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICAyMiAtIFN5bmNocm9ub3VzIElkbGUgICAqLyBDaGFy
YWN0ZXJPdGhlciwKLS8qICAyMyAtIEVuZCBvZiBUcmFuc21pdCAgICAqLyBDaGFyYWN0ZXJPdGhl
ciwKLS8qICAyNCAtIENhbmNlbCAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICAy
NSAtIEVuZCBvZiBNZWRpdW0gICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICAyNiAtIFN1YnN0
aXR1dGUgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICAyNyAtIEVzY2FwZSAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICAyOCAtIEZpbGUgU2VwYXJhdG9yICAgICAqLyBD
aGFyYWN0ZXJPdGhlciwKLS8qICAyOSAtIEdyb3VwIFNlcGFyYXRvciAgICAqLyBDaGFyYWN0ZXJP
dGhlciwKLS8qICAzMCAtIFJlY29yZCBTZXBhcmF0b3IgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8q
ICAzMSAtIFVuaXQgU2VwYXJhdG9yICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICAzMiAtIFNw
YWNlICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJXaGl0ZVNwYWNlLAotLyogIDMzIC0gISAgICAg
ICAgICAgICAgICAgICovIENoYXJhY3RlckV4Y2xhbWF0aW9uTWFyaywKLS8qICAzNCAtICIgICAg
ICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJRdW90ZSwKLS8qICAzNSAtICMgICAgICAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJIYXNobWFyaywKLS8qICAzNiAtICQgICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJEb2xsYXIsCi0vKiAgMzcgLSAlICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVyT3RoZXIsCi0vKiAgMzggLSAmICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIs
Ci0vKiAgMzkgLSAnICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyUXVvdGUsCi0vKiAgNDAg
LSAoICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi0vKiAgNDEgLSApICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVyRW5kTnRoQ2hpbGQsCi0vKiAgNDIgLSAqICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVyQXN0ZXJpc2ssCi0vKiAgNDMgLSArICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVyUGx1cywKLS8qICA0NCAtICwgICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJPdGhlciwKLS8qICA0NSAtIC0gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJEYXNo
LAotLyogIDQ2IC0gLiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlckRvdCwKLS8qICA0NyAt
IC8gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJTbGFzaCwKLS8qICA0OCAtIDAgICAgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCi0vKiAgNDkgLSAxICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAotLyogIDUwIC0gMiAgICAgICAgICAgICAgICAgICovIENo
YXJhY3Rlck51bWJlciwKLS8qICA1MSAtIDMgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJO
dW1iZXIsCi0vKiAgNTIgLSA0ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAot
LyogIDUzIC0gNSAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck51bWJlciwKLS8qICA1NCAt
IDYgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJOdW1iZXIsCi0vKiAgNTUgLSA3ICAgICAg
ICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTnVtYmVyLAotLyogIDU2IC0gOCAgICAgICAgICAgICAg
ICAgICovIENoYXJhY3Rlck51bWJlciwKLS8qICA1NyAtIDkgICAgICAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJOdW1iZXIsCi0vKiAgNTggLSA6ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
T3RoZXIsCi0vKiAgNTkgLSA7ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyRW5kQ29uZGl0
aW9uUXVlcnksCi0vKiAgNjAgLSA8ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyTGVzcywK
LS8qICA2MSAtID0gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICA2MiAt
ID4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICA2MyAtID8gICAgICAg
ICAgICAgICAgICAqLyBDaGFyYWN0ZXJPdGhlciwKLS8qICA2NCAtIEAgICAgICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJBdCwKLS8qICA2NSAtIEEgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0
ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgNjYgLSBCICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVySWRlbnRpZmllclN0YXJ0LAotLyogIDY3IC0gQyAgICAgICAgICAgICAgICAgICovIENoYXJh
Y3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA2OCAtIEQgICAgICAgICAgICAgICAgICAqLyBDaGFy
YWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgNjkgLSBFICAgICAgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDcwIC0gRiAgICAgICAgICAgICAgICAgICovIENo
YXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA3MSAtIEcgICAgICAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgNzIgLSBIICAgICAgICAgICAgICAgICAgKi8g
Q2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDczIC0gSSAgICAgICAgICAgICAgICAgICov
IENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA3NCAtIEogICAgICAgICAgICAgICAgICAq
LyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgNzUgLSBLICAgICAgICAgICAgICAgICAg
Ki8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDc2IC0gTCAgICAgICAgICAgICAgICAg
ICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA3NyAtIE0gICAgICAgICAgICAgICAg
ICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgNzggLSBOICAgICAgICAgICAgICAg
ICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDc5IC0gTyAgICAgICAgICAgICAg
ICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA4MCAtIFAgICAgICAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgODEgLSBRICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDgyIC0gUiAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA4MyAtIFMgICAgICAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgODQgLSBUICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDg1IC0gVSAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3RlckNhc2VsZXNzVSwKLS8qICA4NiAtIFYgICAgICAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgODcgLSBXICAgICAgICAgICAg
ICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDg4IC0gWCAgICAgICAgICAg
ICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8qICA4OSAtIFkgICAgICAgICAg
ICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0vKiAgOTAgLSBaICAgICAgICAg
ICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAotLyogIDkxIC0gWyAgICAgICAg
ICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAotLyogIDkyIC0gXCAgICAgICAgICAgICAgICAg
ICovIENoYXJhY3RlckJhY2tTbGFzaCwKLS8qICA5MyAtIF0gICAgICAgICAgICAgICAgICAqLyBD
aGFyYWN0ZXJPdGhlciwKLS8qICA5NCAtIF4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJY
b3IsCi0vKiAgOTUgLSBfICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0
YXJ0LAotLyogIDk2IC0gYCAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlck90aGVyLAotLyog
IDk3IC0gYSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwKLS8q
ICA5OCAtIGIgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQsCi0v
KiAgOTkgLSBjICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LAot
LyogMTAwIC0gZCAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFydCwK
LS8qIDEwMSAtIGUgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQs
Ci0vKiAxMDIgLSBmICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0
LAotLyogMTAzIC0gZyAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJTdGFy
dCwKLS8qIDEwNCAtIGggICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVyU3Rh
cnQsCi0vKiAxMDUgLSBpICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmllclN0
YXJ0LAotLyogMTA2IC0gaiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZpZXJT
dGFydCwKLS8qIDEwNyAtIGsgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlmaWVy
U3RhcnQsCi0vKiAxMDggLSBsICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRpZmll
clN0YXJ0LAotLyogMTA5IC0gbSAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50aWZp
ZXJTdGFydCwKLS8qIDExMCAtIG4gICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVudGlm
aWVyU3RhcnQsCi0vKiAxMTEgLSBvICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRlbnRp
ZmllclN0YXJ0LAotLyogMTEyIC0gcCAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50
aWZpZXJTdGFydCwKLS8qIDExMyAtIHEgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVu
dGlmaWVyU3RhcnQsCi0vKiAxMTQgLSByICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRl
bnRpZmllclN0YXJ0LAotLyogMTE1IC0gcyAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlcklk
ZW50aWZpZXJTdGFydCwKLS8qIDExNiAtIHQgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJ
ZGVudGlmaWVyU3RhcnQsCi0vKiAxMTcgLSB1ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
Q2FzZWxlc3NVLAotLyogMTE4IC0gdiAgICAgICAgICAgICAgICAgICovIENoYXJhY3RlcklkZW50
aWZpZXJTdGFydCwKLS8qIDExOSAtIHcgICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJZGVu
dGlmaWVyU3RhcnQsCi0vKiAxMjAgLSB4ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVySWRl
bnRpZmllclN0YXJ0LAotLyogMTIxIC0geSAgICAgICAgICAgICAgICAgICovIENoYXJhY3Rlcklk
ZW50aWZpZXJTdGFydCwKLS8qIDEyMiAtIHogICAgICAgICAgICAgICAgICAqLyBDaGFyYWN0ZXJJ
ZGVudGlmaWVyU3RhcnQsCi0vKiAxMjMgLSB7ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
RW5kQ29uZGl0aW9uUXVlcnksCi0vKiAxMjQgLSB8ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFj
dGVyVmVydGljYWxCYXIsCi0vKiAxMjUgLSB9ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
T3RoZXIsCi0vKiAxMjYgLSB+ICAgICAgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyVGlsZGUsCi0v
KiAxMjcgLSBEZWxldGUgICAgICAgICAgICAgKi8gQ2hhcmFjdGVyT3RoZXIsCi19OwotCi0vLyBV
dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGhlIENTUyB0b2tlbml6ZXIuCi0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBib29sIGlzQ1NTTGV0dGVyKENoYXJh
Y3RlclR5cGUgY2hhcmFjdGVyKQotewotICAgIHJldHVybiBjaGFyYWN0ZXIgPj0gMTI4IHx8IHR5
cGVzT2ZBU0NJSUNoYXJhY3RlcnNbY2hhcmFjdGVyXSA8PSBDaGFyYWN0ZXJEYXNoOwotfQotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0NT
U0VzY2FwZShDaGFyYWN0ZXJUeXBlIGNoYXJhY3RlcikKLXsKLSAgICByZXR1cm4gY2hhcmFjdGVy
ID49ICcgJyAmJiBjaGFyYWN0ZXIgIT0gMTI3OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1VSSUxldHRlcihDaGFyYWN0ZXJUeXBl
IGNoYXJhY3RlcikKLXsKLSAgICByZXR1cm4gKGNoYXJhY3RlciA+PSAnKicgJiYgY2hhcmFjdGVy
ICE9IDEyNykgfHwgKGNoYXJhY3RlciA+PSAnIycgJiYgY2hhcmFjdGVyIDw9ICcmJykgfHwgY2hh
cmFjdGVyID09ICchJzsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1z
dGF0aWMgaW5saW5lIGJvb2wgaXNJZGVudGlmaWVyU3RhcnRBZnRlckRhc2goQ2hhcmFjdGVyVHlw
ZSogY3VycmVudENoYXJhY3RlcikKLXsKLSAgICByZXR1cm4gaXNBU0NJSUFscGhhKGN1cnJlbnRD
aGFyYWN0ZXJbMF0pIHx8IGN1cnJlbnRDaGFyYWN0ZXJbMF0gPT0gJ18nIHx8IGN1cnJlbnRDaGFy
YWN0ZXJbMF0gPj0gMTI4Ci0gICAgICAgIHx8IChjdXJyZW50Q2hhcmFjdGVyWzBdID09ICdcXCcg
JiYgaXNDU1NFc2NhcGUoY3VycmVudENoYXJhY3RlclsxXSkpOwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0N1c3RvbVByb3BlcnR5
SWRlbnRpZmllcihDaGFyYWN0ZXJUeXBlKiBjdXJyZW50Q2hhcmFjdGVyKQotewotICAgIHJldHVy
biBpc0FTQ0lJQWxwaGEoY3VycmVudENoYXJhY3RlclswXSkgfHwgY3VycmVudENoYXJhY3Rlclsw
XSA9PSAnXycgfHwgY3VycmVudENoYXJhY3RlclswXSA+PSAxMjgKLSAgICAgICAgfHwgKGN1cnJl
bnRDaGFyYWN0ZXJbMF0gPT0gJ1xcJyAmJiBpc0NTU0VzY2FwZShjdXJyZW50Q2hhcmFjdGVyWzFd
KSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGlu
ZSBib29sIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIoQ2hhcmFjdGVyVHlwZSogY3NzU3RyaW5nLCBj
b25zdCBjaGFyKiBjb25zdGFudFN0cmluZykKLXsKLSAgICAvLyBDb21wYXJlIGFuIGNoYXJhY3Rl
ciBtZW1vcnkgZGF0YSB3aXRoIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZy4KLSAgICBkbyB7Ci0g
ICAgICAgIC8vIFRoZSBpbnB1dCBtdXN0IGJlIHBhcnQgb2YgYW4gaWRlbnRpZmllciBpZiBjb25z
dGFudENoYXIgb3IgY29uc3RTdHJpbmcKLSAgICAgICAgLy8gY29udGFpbnMgJy0nLiBPdGhlcndp
c2UgdG9BU0NJSUxvd2VyVW5jaGVja2VkKCdccicpIHdvdWxkIGJlIGVxdWFsIHRvICctJy4KLSAg
ICAgICAgQVNTRVJUKCgqY29uc3RhbnRTdHJpbmcgPj0gJ2EnICYmICpjb25zdGFudFN0cmluZyA8
PSAneicpIHx8ICpjb25zdGFudFN0cmluZyA9PSAnLScpOwotICAgICAgICBBU1NFUlQoKmNvbnN0
YW50U3RyaW5nICE9ICctJyB8fCBpc0NTU0xldHRlcigqY3NzU3RyaW5nKSk7Ci0gICAgICAgIGlm
ICh0b0FTQ0lJTG93ZXJVbmNoZWNrZWQoKmNzc1N0cmluZysrKSAhPSAoKmNvbnN0YW50U3RyaW5n
KyspKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gd2hpbGUgKCpjb25zdGFudFN0
cmluZyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPgotc3RhdGljIGlubGluZSBib29sIGlzRXF1YWxUb0NTU0Nhc2VTZW5zaXRpdmVJZGVu
dGlmaWVyKENoYXJhY3RlclR5cGUqIHN0cmluZywgY29uc3QgY2hhciogY29uc3RhbnRTdHJpbmcp
Ci17Ci0gICAgZG8gewotICAgICAgICBpZiAoKnN0cmluZysrICE9ICpjb25zdGFudFN0cmluZysr
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gd2hpbGUgKCpjb25zdGFudFN0cmlu
Zyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPgotc3RhdGljIENoYXJhY3RlclR5cGUqIGNoZWNrQW5kU2tpcEVzY2FwZShDaGFyYWN0ZXJU
eXBlKiBjdXJyZW50Q2hhcmFjdGVyKQotewotICAgIC8vIFJldHVybnMgd2l0aCAwLCBpZiBlc2Nh
cGUgY2hlY2sgaXMgZmFpbGVkLiBPdGhlcndpc2UKLSAgICAvLyBpdCByZXR1cm5zIHdpdGggdGhl
IGZvbGxvd2luZyBjaGFyYWN0ZXIuCi0gICAgQVNTRVJUKCpjdXJyZW50Q2hhcmFjdGVyID09ICdc
XCcpOwotCi0gICAgKytjdXJyZW50Q2hhcmFjdGVyOwotICAgIGlmICghaXNDU1NFc2NhcGUoKmN1
cnJlbnRDaGFyYWN0ZXIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChpc0FT
Q0lJSGV4RGlnaXQoKmN1cnJlbnRDaGFyYWN0ZXIpKSB7Ci0gICAgICAgIGludCBsZW5ndGggPSA2
OwotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgICsrY3VycmVudENoYXJhY3RlcjsKLSAgICAg
ICAgfSB3aGlsZSAoaXNBU0NJSUhleERpZ2l0KCpjdXJyZW50Q2hhcmFjdGVyKSAmJiAtLWxlbmd0
aCk7Ci0KLSAgICAgICAgLy8gT3B0aW9uYWwgc3BhY2UgYWZ0ZXIgdGhlIGVzY2FwZSBzZXF1ZW5j
ZS4KLSAgICAgICAgaWYgKGlzSFRNTFNwYWNlKCpjdXJyZW50Q2hhcmFjdGVyKSkKLSAgICAgICAg
ICAgICsrY3VycmVudENoYXJhY3RlcjsKLSAgICAgICAgcmV0dXJuIGN1cnJlbnRDaGFyYWN0ZXI7
Ci0gICAgfQotICAgIHJldHVybiBjdXJyZW50Q2hhcmFjdGVyICsgMTsKLX0KLQotdGVtcGxhdGUg
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIENoYXJhY3RlclR5cGUqIHNr
aXBXaGl0ZVNwYWNlKENoYXJhY3RlclR5cGUqIGN1cnJlbnRDaGFyYWN0ZXIpCi17Ci0gICAgd2hp
bGUgKGlzSFRNTFNwYWNlKCpjdXJyZW50Q2hhcmFjdGVyKSkKLSAgICAgICAgKytjdXJyZW50Q2hh
cmFjdGVyOwotICAgIHJldHVybiBjdXJyZW50Q2hhcmFjdGVyOwotfQotCi0vLyBNYWluIENTUyB0
b2tlbml6ZXIgZnVuY3Rpb25zLgotCi10ZW1wbGF0ZSA8PgotTENoYXIqIENTU1BhcnNlclN0cmlu
Zzo6Y2hhcmFjdGVyczxMQ2hhcj4oKSBjb25zdCB7IHJldHVybiBjaGFyYWN0ZXJzOCgpOyB9Ci0K
LXRlbXBsYXRlIDw+Ci1VQ2hhciogQ1NTUGFyc2VyU3RyaW5nOjpjaGFyYWN0ZXJzPFVDaGFyPigp
IGNvbnN0IHsgcmV0dXJuIGNoYXJhY3RlcnMxNigpOyB9Ci0KLXRlbXBsYXRlIDw+Ci1pbmxpbmUg
TENoYXIqJiBDU1NQYXJzZXI6OmN1cnJlbnRDaGFyYWN0ZXI8TENoYXI+KCkKLXsKLSAgICByZXR1
cm4gbV9jdXJyZW50Q2hhcmFjdGVyODsKLX0KLQotdGVtcGxhdGUgPD4KLWlubGluZSBVQ2hhciom
IENTU1BhcnNlcjo6Y3VycmVudENoYXJhY3RlcjxVQ2hhcj4oKQotewotICAgIHJldHVybiBtX2N1
cnJlbnRDaGFyYWN0ZXIxNjsKLX0KLQotVUNoYXIqJiBDU1NQYXJzZXI6OmN1cnJlbnRDaGFyYWN0
ZXIxNigpCi17Ci0gICAgaWYgKCFtX2N1cnJlbnRDaGFyYWN0ZXIxNikgewotICAgICAgICBtX2Rh
dGFTdGFydDE2ID0gc3RkOjptYWtlX3VuaXF1ZTxVQ2hhcltdPihtX2xlbmd0aCk7Ci0gICAgICAg
IG1fY3VycmVudENoYXJhY3RlcjE2ID0gbV9kYXRhU3RhcnQxNi5nZXQoKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gbV9jdXJyZW50Q2hhcmFjdGVyMTY7Ci19Ci0KLXRlbXBsYXRlIDw+Ci1pbmxpbmUg
TENoYXIqIENTU1BhcnNlcjo6dG9rZW5TdGFydDxMQ2hhcj4oKQotewotICAgIHJldHVybiBtX3Rv
a2VuU3RhcnQucHRyODsKLX0KLQotdGVtcGxhdGUgPD4KLWlubGluZSBVQ2hhciogQ1NTUGFyc2Vy
Ojp0b2tlblN0YXJ0PFVDaGFyPigpCi17Ci0gICAgcmV0dXJuIG1fdG9rZW5TdGFydC5wdHIxNjsK
LX0KLQotQ1NTUGFyc2VyOjpMb2NhdGlvbiBDU1NQYXJzZXI6OmN1cnJlbnRMb2NhdGlvbigpCi17
Ci0gICAgTG9jYXRpb24gbG9jYXRpb247Ci0gICAgbG9jYXRpb24ubGluZU51bWJlciA9IG1fdG9r
ZW5TdGFydExpbmVOdW1iZXI7Ci0gICAgbG9jYXRpb24uY29sdW1uTnVtYmVyID0gbV90b2tlblN0
YXJ0Q29sdW1uTnVtYmVyOwotCi0gICAgQVNTRVJUKGxvY2F0aW9uLmxpbmVOdW1iZXIgPj0gMCk7
Ci0gICAgQVNTRVJUKGxvY2F0aW9uLmNvbHVtbk51bWJlciA+PSAwKTsKLQotICAgIGlmIChsb2Nh
dGlvbi5saW5lTnVtYmVyID09IG1fc2hlZXRTdGFydExpbmVOdW1iZXIpCi0gICAgICAgIGxvY2F0
aW9uLmNvbHVtbk51bWJlciArPSBtX3NoZWV0U3RhcnRDb2x1bW5OdW1iZXI7Ci0KLSAgICBpZiAo
aXM4Qml0U291cmNlKCkpCi0gICAgICAgIGxvY2F0aW9uLnRva2VuLmluaXQodG9rZW5TdGFydDxM
Q2hhcj4oKSwgY3VycmVudENoYXJhY3RlcjxMQ2hhcj4oKSAtIHRva2VuU3RhcnQ8TENoYXI+KCkp
OwotICAgIGVsc2UKLSAgICAgICAgbG9jYXRpb24udG9rZW4uaW5pdCh0b2tlblN0YXJ0PFVDaGFy
PigpLCBjdXJyZW50Q2hhcmFjdGVyPFVDaGFyPigpIC0gdG9rZW5TdGFydDxVQ2hhcj4oKSk7Ci0K
LSAgICByZXR1cm4gbG9jYXRpb247Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPgotaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjppc0lkZW50aWZpZXJTdGFydCgpCi17Ci0gICAg
Ly8gQ2hlY2sgd2hldGhlciBhbiBpZGVudGlmaWVyIGlzIHN0YXJ0ZWQuCi0gICAgcmV0dXJuIGlz
SWRlbnRpZmllclN0YXJ0QWZ0ZXJEYXNoKCgqY3VycmVudENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBl
PigpICE9ICctJykgPyBjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCkgOiBjdXJyZW50
Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCkgKyAxKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIENoYXJhY3RlclR5cGUqIGNoZWNrQW5kU2tp
cFN0cmluZyhDaGFyYWN0ZXJUeXBlKiBjdXJyZW50Q2hhcmFjdGVyLCBpbnQgcXVvdGUpCi17Ci0g
ICAgLy8gUmV0dXJucyB3aXRoIDAsIGlmIHN0cmluZyBjaGVjayBpcyBmYWlsZWQuIE90aGVyd2lz
ZQotICAgIC8vIGl0IHJldHVybnMgd2l0aCB0aGUgZm9sbG93aW5nIGNoYXJhY3Rlci4gVGhpcyBp
cyBuZWNlc3NhcnkKLSAgICAvLyBzaW5jZSB3ZSBjYW5ub3QgcmV2ZXJ0IGVzY2FwZSBzZXF1ZW5j
ZXMsIHRodXMgc3RyaW5ncwotICAgIC8vIG11c3QgYmUgdmFsaWRhdGVkIGJlZm9yZSBwYXJzaW5n
LgotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSgqY3VycmVudENoYXJh
Y3RlciA9PSBxdW90ZSkpIHsKLSAgICAgICAgICAgIC8vIFN0cmluZyBwYXJzaW5nIGlzIHN1Y2Nl
c3NmdWwuCi0gICAgICAgICAgICByZXR1cm4gY3VycmVudENoYXJhY3RlciArIDE7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKFVOTElLRUxZKCEqY3VycmVudENoYXJhY3RlcikpIHsKLSAgICAgICAg
ICAgIC8vIFN0cmluZyBwYXJzaW5nIGlzIHN1Y2Nlc3NmdWwgdXAgdG8gZW5kIG9mIGlucHV0Lgot
ICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRDaGFyYWN0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKFVOTElLRUxZKCpjdXJyZW50Q2hhcmFjdGVyIDw9ICdccicgJiYgKCpjdXJyZW50Q2hhcmFj
dGVyID09ICdcbicgfHwgKCpjdXJyZW50Q2hhcmFjdGVyIHwgMHgxKSA9PSAnXHInKSkpIHsKLSAg
ICAgICAgICAgIC8vIFN0cmluZyBwYXJzaW5nIGlzIGZhaWxlZCBmb3IgY2hhcmFjdGVyICdcbics
ICdcZicgb3IgJ1xyJy4KLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKExJS0VMWShjdXJyZW50Q2hhcmFjdGVyWzBdICE9ICdcXCcpKQotICAgICAg
ICAgICAgKytjdXJyZW50Q2hhcmFjdGVyOwotICAgICAgICBlbHNlIGlmIChjdXJyZW50Q2hhcmFj
dGVyWzFdID09ICdcbicgfHwgY3VycmVudENoYXJhY3RlclsxXSA9PSAnXGYnKQotICAgICAgICAg
ICAgY3VycmVudENoYXJhY3RlciArPSAyOwotICAgICAgICBlbHNlIGlmIChjdXJyZW50Q2hhcmFj
dGVyWzFdID09ICdccicpCi0gICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVyICs9IGN1cnJlbnRD
aGFyYWN0ZXJbMl0gPT0gJ1xuJyA/IDMgOiAyOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IGN1cnJlbnRDaGFyYWN0ZXIgPSBjaGVja0FuZFNraXBFc2NhcGUoY3VycmVudENoYXJhY3Rlcik7
Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnRDaGFyYWN0ZXIpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPgotdW5zaWduZWQgQ1NTUGFyc2VyOjpwYXJzZUVzY2FwZShDaGFyYWN0ZXJU
eXBlKiYgc3JjKQotewotICAgIEFTU0VSVCgqc3JjID09ICdcXCcgJiYgaXNDU1NFc2NhcGUoc3Jj
WzFdKSk7Ci0KLSAgICB1bnNpZ25lZCB1bmljb2RlID0gMDsKLQotICAgICsrc3JjOwotICAgIGlm
IChpc0FTQ0lJSGV4RGlnaXQoKnNyYykpIHsKLQotICAgICAgICBpbnQgbGVuZ3RoID0gNjsKLQot
ICAgICAgICBkbyB7Ci0gICAgICAgICAgICB1bmljb2RlID0gKHVuaWNvZGUgPDwgNCkgKyB0b0FT
Q0lJSGV4VmFsdWUoKnNyYysrKTsKLSAgICAgICAgfSB3aGlsZSAoLS1sZW5ndGggJiYgaXNBU0NJ
SUhleERpZ2l0KCpzcmMpKTsKLQotICAgICAgICBpZiAodW5pY29kZSA+IFVDSEFSX01BWF9WQUxV
RSkKLSAgICAgICAgICAgIHVuaWNvZGUgPSByZXBsYWNlbWVudENoYXJhY3RlcjsKLQotICAgICAg
ICAvLyBPcHRpb25hbCBzcGFjZSBhZnRlciB0aGUgZXNjYXBlIHNlcXVlbmNlLgotICAgICAgICBp
ZiAoaXNIVE1MU3BhY2UoKnNyYykpCi0gICAgICAgICAgICArK3NyYzsKLQotICAgICAgICByZXR1
cm4gdW5pY29kZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gKmN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFj
dGVyVHlwZT4oKSsrOwotfQotCi10ZW1wbGF0ZSA8PgotaW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpV
bmljb2RlVG9DaGFyczxMQ2hhcj4oTENoYXIqJiByZXN1bHQsIHVuc2lnbmVkIHVuaWNvZGUpCi17
Ci0gICAgQVNTRVJUKHVuaWNvZGUgPD0gMHhmZik7Ci0gICAgKnJlc3VsdCA9IHVuaWNvZGU7Ci0K
LSAgICArK3Jlc3VsdDsKLX0KLQotdGVtcGxhdGUgPD4KLWlubGluZSB2b2lkIENTU1BhcnNlcjo6
VW5pY29kZVRvQ2hhcnM8VUNoYXI+KFVDaGFyKiYgcmVzdWx0LCB1bnNpZ25lZCB1bmljb2RlKQot
ewotICAgIC8vIFJlcGxhY2UgdW5pY29kZSB3aXRoIGEgc3Vycm9nYXRlIHBhaXJzIHdoZW4gaXQg
aXMgYmlnZ2VyIHRoYW4gMHhmZmZmCi0gICAgaWYgKFUxNl9MRU5HVEgodW5pY29kZSkgPT0gMikg
ewotICAgICAgICAqcmVzdWx0KysgPSBVMTZfTEVBRCh1bmljb2RlKTsKLSAgICAgICAgKnJlc3Vs
dCA9IFUxNl9UUkFJTCh1bmljb2RlKTsKLSAgICB9IGVsc2UKLSAgICAgICAgKnJlc3VsdCA9IHVu
aWNvZGU7Ci0KLSAgICArK3Jlc3VsdDsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFNyY0NoYXJh
Y3RlclR5cGUsIHR5cGVuYW1lIERlc3RDaGFyYWN0ZXJUeXBlPgotaW5saW5lIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZUlkZW50aWZpZXJJbnRlcm5hbChTcmNDaGFyYWN0ZXJUeXBlKiYgc3JjLCBEZXN0
Q2hhcmFjdGVyVHlwZSomIHJlc3VsdCwgYm9vbCYgaGFzRXNjYXBlKQotewotICAgIGhhc0VzY2Fw
ZSA9IGZhbHNlOwotICAgIGRvIHsKLSAgICAgICAgaWYgKExJS0VMWSgqc3JjICE9ICdcXCcpKQot
ICAgICAgICAgICAgKnJlc3VsdCsrID0gKnNyYysrOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIGhhc0VzY2FwZSA9IHRydWU7Ci0gICAgICAgICAgICBTcmNDaGFyYWN0ZXJUeXBlKiBzYXZl
ZEVzY2FwZVN0YXJ0ID0gc3JjOwotICAgICAgICAgICAgdW5zaWduZWQgdW5pY29kZSA9IHBhcnNl
RXNjYXBlPFNyY0NoYXJhY3RlclR5cGU+KHNyYyk7Ci0gICAgICAgICAgICBpZiAodW5pY29kZSA+
IDB4ZmYgJiYgc2l6ZW9mKERlc3RDaGFyYWN0ZXJUeXBlKSA9PSAxKSB7Ci0gICAgICAgICAgICAg
ICAgc3JjID0gc2F2ZWRFc2NhcGVTdGFydDsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBVbmljb2RlVG9DaGFycyhyZXN1bHQsIHVuaWNv
ZGUpOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoaXNDU1NMZXR0ZXIoc3JjWzBdKSB8fCAoc3Jj
WzBdID09ICdcXCcgJiYgaXNDU1NFc2NhcGUoc3JjWzFdKSkpOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIHZvaWQgQ1NT
UGFyc2VyOjpwYXJzZUlkZW50aWZpZXIoQ2hhcmFjdGVyVHlwZSomIHJlc3VsdCwgQ1NTUGFyc2Vy
U3RyaW5nJiByZXN1bHRTdHJpbmcsIGJvb2wmIGhhc0VzY2FwZSkKLXsKLSAgICBDaGFyYWN0ZXJU
eXBlKiBzdGFydCA9IGN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlwZT4oKTsKLSAgICBpZiAo
VU5MSUtFTFkoIXBhcnNlSWRlbnRpZmllckludGVybmFsKGN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFj
dGVyVHlwZT4oKSwgcmVzdWx0LCBoYXNFc2NhcGUpKSkgewotICAgICAgICAvLyBGb3VuZCBhbiBl
c2NhcGUgd2UgY291bGRuJ3QgaGFuZGxlIHdpdGggOCBiaXRzLCBjb3B5IHdoYXQgaGFzIGJlZW4g
cmVjb2duaXplZCBhbmQgY29udGludWUKLSAgICAgICAgQVNTRVJUKGlzOEJpdFNvdXJjZSgpKTsK
LSAgICAgICAgVUNoYXIqJiByZXN1bHQxNiA9IGN1cnJlbnRDaGFyYWN0ZXIxNigpOwotICAgICAg
ICBVQ2hhciogc3RhcnQxNiA9IHJlc3VsdDE2OwotICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAg
IGZvciAoOyBpIDwgcmVzdWx0IC0gc3RhcnQ7ICsraSkKLSAgICAgICAgICAgIHJlc3VsdDE2W2ld
ID0gc3RhcnRbaV07Ci0KLSAgICAgICAgcmVzdWx0MTYgKz0gaTsKLQotICAgICAgICBwYXJzZUlk
ZW50aWZpZXJJbnRlcm5hbChjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCksIHJlc3Vs
dDE2LCBoYXNFc2NhcGUpOwotCi0gICAgICAgIHJlc3VsdCArPSByZXN1bHQxNiAtIHN0YXJ0MTY7
Ci0gICAgICAgIHJlc3VsdFN0cmluZy5pbml0KHN0YXJ0MTYsIHJlc3VsdDE2IC0gc3RhcnQxNik7
Ci0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJlc3VsdFN0cmluZy5pbml0KHN0YXJ0
LCByZXN1bHQgLSBzdGFydCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBTcmNDaGFyYWN0ZXJU
eXBlLCB0eXBlbmFtZSBEZXN0Q2hhcmFjdGVyVHlwZT4KLWlubGluZSBib29sIENTU1BhcnNlcjo6
cGFyc2VTdHJpbmdJbnRlcm5hbChTcmNDaGFyYWN0ZXJUeXBlKiYgc3JjLCBEZXN0Q2hhcmFjdGVy
VHlwZSomIHJlc3VsdCwgVUNoYXIgcXVvdGUpCi17Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKCpzcmMgPT0gcXVvdGUpKSB7Ci0gICAgICAgICAgICAvLyBTdHJpbmcg
cGFyc2luZyBpcyBkb25lLgotICAgICAgICAgICAgKytzcmM7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoVU5MSUtFTFkoISpzcmMpKSB7Ci0gICAgICAg
ICAgICAvLyBTdHJpbmcgcGFyc2luZyBpcyBkb25lLCBidXQgZG9uJ3QgYWR2YW5jZSBwb2ludGVy
IGlmIGF0IHRoZSBlbmQgb2YgaW5wdXQuCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgICBBU1NFUlQoKnNyYyA+ICdccicgfHwgKCpzcmMgPCAnXG4nICYmICpzcmMp
IHx8ICpzcmMgPT0gJ1x2Jyk7Ci0KLSAgICAgICAgaWYgKExJS0VMWShzcmNbMF0gIT0gJ1xcJykp
Ci0gICAgICAgICAgICAqcmVzdWx0KysgPSAqc3JjKys7Ci0gICAgICAgIGVsc2UgaWYgKHNyY1sx
XSA9PSAnXG4nIHx8IHNyY1sxXSA9PSAnXGYnKQotICAgICAgICAgICAgc3JjICs9IDI7Ci0gICAg
ICAgIGVsc2UgaWYgKHNyY1sxXSA9PSAnXHInKQotICAgICAgICAgICAgc3JjICs9IHNyY1syXSA9
PSAnXG4nID8gMyA6IDI7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgU3JjQ2hhcmFjdGVy
VHlwZSogc2F2ZWRFc2NhcGVTdGFydCA9IHNyYzsKLSAgICAgICAgICAgIHVuc2lnbmVkIHVuaWNv
ZGUgPSBwYXJzZUVzY2FwZTxTcmNDaGFyYWN0ZXJUeXBlPihzcmMpOwotICAgICAgICAgICAgaWYg
KHVuaWNvZGUgPiAweGZmICYmIHNpemVvZihEZXN0Q2hhcmFjdGVyVHlwZSkgPT0gMSkgewotICAg
ICAgICAgICAgICAgIHNyYyA9IHNhdmVkRXNjYXBlU3RhcnQ7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgVW5pY29kZVRvQ2hhcnMocmVz
dWx0LCB1bmljb2RlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSB2b2lkIENTU1BhcnNl
cjo6cGFyc2VTdHJpbmcoQ2hhcmFjdGVyVHlwZSomIHJlc3VsdCwgQ1NTUGFyc2VyU3RyaW5nJiBy
ZXN1bHRTdHJpbmcsIFVDaGFyIHF1b3RlKQotewotICAgIENoYXJhY3RlclR5cGUqIHN0YXJ0ID0g
Y3VycmVudENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigpOwotCi0gICAgaWYgKFVOTElLRUxZKCFw
YXJzZVN0cmluZ0ludGVybmFsKGN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlwZT4oKSwgcmVz
dWx0LCBxdW90ZSkpKSB7Ci0gICAgICAgIC8vIEZvdW5kIGFuIGVzY2FwZSB3ZSBjb3VsZG4ndCBo
YW5kbGUgd2l0aCA4IGJpdHMsIGNvcHkgd2hhdCBoYXMgYmVlbiByZWNvZ25pemVkIGFuZCBjb250
aW51ZQotICAgICAgICBBU1NFUlQoaXM4Qml0U291cmNlKCkpOwotICAgICAgICBVQ2hhciomIHJl
c3VsdDE2ID0gY3VycmVudENoYXJhY3RlcjE2KCk7Ci0gICAgICAgIFVDaGFyKiBzdGFydDE2ID0g
cmVzdWx0MTY7Ci0gICAgICAgIGludCBpID0gMDsKLSAgICAgICAgZm9yICg7IGkgPCByZXN1bHQg
LSBzdGFydDsgKytpKQotICAgICAgICAgICAgcmVzdWx0MTZbaV0gPSBzdGFydFtpXTsKLQotICAg
ICAgICByZXN1bHQxNiArPSBpOwotCi0gICAgICAgIHBhcnNlU3RyaW5nSW50ZXJuYWwoY3VycmVu
dENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigpLCByZXN1bHQxNiwgcXVvdGUpOwotCi0gICAgICAg
IHJlc3VsdFN0cmluZy5pbml0KHN0YXJ0MTYsIHJlc3VsdDE2IC0gc3RhcnQxNik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICByZXN1bHRTdHJpbmcuaW5pdChzdGFydCwgcmVzdWx0IC0g
c3RhcnQpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSBi
b29sIENTU1BhcnNlcjo6ZmluZFVSSShDaGFyYWN0ZXJUeXBlKiYgc3RhcnQsIENoYXJhY3RlclR5
cGUqJiBlbmQsIFVDaGFyJiBxdW90ZSkKLXsKLSAgICBzdGFydCA9IHNraXBXaGl0ZVNwYWNlKGN1
cnJlbnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlwZT4oKSk7Ci0gICAgCi0gICAgaWYgKCpzdGFydCA9
PSAnIicgfHwgKnN0YXJ0ID09ICdcJycpIHsKLSAgICAgICAgcXVvdGUgPSAqc3RhcnQrKzsKLSAg
ICAgICAgZW5kID0gY2hlY2tBbmRTa2lwU3RyaW5nKHN0YXJ0LCBxdW90ZSk7Ci0gICAgICAgIGlm
ICghZW5kKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IHF1b3RlID0gMDsKLSAgICAgICAgZW5kID0gc3RhcnQ7Ci0gICAgICAgIHdoaWxlIChpc1VSSUxl
dHRlcigqZW5kKSkgewotICAgICAgICAgICAgaWYgKExJS0VMWSgqZW5kICE9ICdcXCcpKQotICAg
ICAgICAgICAgICAgICsrZW5kOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ZW5kID0gY2hlY2tBbmRTa2lwRXNjYXBlKGVuZCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFlbmQp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGVuZCA9IHNraXBXaGl0ZVNwYWNlKGVuZCk7Ci0gICAgaWYgKCpl
bmQgIT0gJyknKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBTcmNDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBEZXN0
Q2hhcmFjdGVyVHlwZT4KLWlubGluZSBib29sIENTU1BhcnNlcjo6cGFyc2VVUklJbnRlcm5hbChT
cmNDaGFyYWN0ZXJUeXBlKiYgc3JjLCBEZXN0Q2hhcmFjdGVyVHlwZSomIGRlc3QsIFVDaGFyIHF1
b3RlKQotewotICAgIGlmIChxdW90ZSkgewotICAgICAgICBBU1NFUlQocXVvdGUgPT0gJyInIHx8
IHF1b3RlID09ICdcJycpOwotICAgICAgICByZXR1cm4gcGFyc2VTdHJpbmdJbnRlcm5hbChzcmMs
IGRlc3QsIHF1b3RlKTsKLSAgICB9Ci0gICAgCi0gICAgd2hpbGUgKGlzVVJJTGV0dGVyKCpzcmMp
KSB7Ci0gICAgICAgIGlmIChMSUtFTFkoKnNyYyAhPSAnXFwnKSkKLSAgICAgICAgICAgICpkZXN0
KysgPSAqc3JjKys7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdW5zaWduZWQgdW5pY29k
ZSA9IHBhcnNlRXNjYXBlPFNyY0NoYXJhY3RlclR5cGU+KHNyYyk7Ci0gICAgICAgICAgICBpZiAo
dW5pY29kZSA+IDB4ZmYgJiYgc2l6ZW9mKFNyY0NoYXJhY3RlclR5cGUpID09IDEpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgVW5pY29kZVRvQ2hhcnMoZGVzdCwg
dW5pY29kZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgdm9pZCBDU1NQYXJzZXI6OnBh
cnNlVVJJKENTU1BhcnNlclN0cmluZyYgc3RyaW5nKQotewotICAgIENoYXJhY3RlclR5cGUqIHVy
aVN0YXJ0OwotICAgIENoYXJhY3RlclR5cGUqIHVyaUVuZDsKLSAgICBVQ2hhciBxdW90ZTsKLSAg
ICBpZiAoIWZpbmRVUkkodXJpU3RhcnQsIHVyaUVuZCwgcXVvdGUpKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgQ2hhcmFjdGVyVHlwZSogZGVzdCA9IGN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFj
dGVyVHlwZT4oKSA9IHVyaVN0YXJ0OwotICAgIGlmIChMSUtFTFkocGFyc2VVUklJbnRlcm5hbChj
dXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCksIGRlc3QsIHF1b3RlKSkpCi0gICAgICAg
IHN0cmluZy5pbml0KHVyaVN0YXJ0LCBkZXN0IC0gdXJpU3RhcnQpOwotICAgIGVsc2UgewotICAg
ICAgICAvLyBBbiBlc2NhcGUgc2VxdWVuY2Ugd2FzIGVuY291bnRlcmVkIHRoYXQgY2FuJ3QgYmUg
c3RvcmVkIGluIDggYml0cy4KLSAgICAgICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgY2hhcmFjdGVy
IHRvIHRoZSBzdGFydCBvZiB0aGUgVVJJIGFuZCByZS1wYXJzZSB3aXRoCi0gICAgICAgIC8vIGEg
MTYtYml0IGRlc3RpbmF0aW9uLgotICAgICAgICBBU1NFUlQoaXM4Qml0U291cmNlKCkpOwotICAg
ICAgICBVQ2hhciogdXJpU3RhcnQxNiA9IGN1cnJlbnRDaGFyYWN0ZXIxNigpOwotICAgICAgICBj
dXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCkgPSB1cmlTdGFydDsKLSAgICAgICAgYm9v
bCByZXN1bHQgPSBwYXJzZVVSSUludGVybmFsKGN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlw
ZT4oKSwgY3VycmVudENoYXJhY3RlcjE2KCksIHF1b3RlKTsKLSAgICAgICAgQVNTRVJUX1VOVVNF
RChyZXN1bHQsIHJlc3VsdCk7Ci0gICAgICAgIHN0cmluZy5pbml0KHVyaVN0YXJ0MTYsIGN1cnJl
bnRDaGFyYWN0ZXIxNigpIC0gdXJpU3RhcnQxNik7Ci0gICAgfQotCi0gICAgY3VycmVudENoYXJh
Y3RlcjxDaGFyYWN0ZXJUeXBlPigpID0gdXJpRW5kICsgMTsKLSAgICBtX3Rva2VuID0gVVJJOwot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSBib29sIENTU1Bh
cnNlcjo6cGFyc2VVbmljb2RlUmFuZ2UoKQotewotICAgIENoYXJhY3RlclR5cGUqIGNoYXJhY3Rl
ciA9IGN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlwZT4oKSArIDE7Ci0gICAgaW50IGxlbmd0
aCA9IDY7Ci0gICAgQVNTRVJUKCpjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCkgPT0g
JysnKTsKLQotICAgIHdoaWxlIChpc0FTQ0lJSGV4RGlnaXQoKmNoYXJhY3RlcikgJiYgbGVuZ3Ro
KSB7Ci0gICAgICAgICsrY2hhcmFjdGVyOwotICAgICAgICAtLWxlbmd0aDsKLSAgICB9Ci0KLSAg
ICBpZiAobGVuZ3RoICYmICpjaGFyYWN0ZXIgPT0gJz8nKSB7Ci0gICAgICAgIC8vIEF0IG1vc3Qg
NSBoZXggZGlnaXQgZm9sbG93ZWQgYnkgYSBxdWVzdGlvbiBtYXJrLgotICAgICAgICBkbyB7Ci0g
ICAgICAgICAgICArK2NoYXJhY3RlcjsKLSAgICAgICAgICAgIC0tbGVuZ3RoOwotICAgICAgICB9
IHdoaWxlICgqY2hhcmFjdGVyID09ICc/JyAmJiBsZW5ndGgpOwotICAgICAgICBjdXJyZW50Q2hh
cmFjdGVyPENoYXJhY3RlclR5cGU+KCkgPSBjaGFyYWN0ZXI7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIGlmIChsZW5ndGggPCA2KSB7Ci0gICAgICAgIC8vIEF0IGxlYXN0IG9u
ZSBoZXggZGlnaXQuCi0gICAgICAgIGlmIChjaGFyYWN0ZXJbMF0gPT0gJy0nICYmIGlzQVNDSUlI
ZXhEaWdpdChjaGFyYWN0ZXJbMV0pKSB7Ci0gICAgICAgICAgICAvLyBGb2xsb3dlZCBieSBhIGRh
c2ggYW5kIGEgaGV4IGRpZ2l0LgotICAgICAgICAgICAgKytjaGFyYWN0ZXI7Ci0gICAgICAgICAg
ICBsZW5ndGggPSA2OwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICsrY2hhcmFj
dGVyOwotICAgICAgICAgICAgfSB3aGlsZSAoLS1sZW5ndGggJiYgaXNBU0NJSUhleERpZ2l0KCpj
aGFyYWN0ZXIpKTsKLSAgICAgICAgfQotICAgICAgICBjdXJyZW50Q2hhcmFjdGVyPENoYXJhY3Rl
clR5cGU+KCkgPSBjaGFyYWN0ZXI7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9v
bCBDU1NQYXJzZXI6OnBhcnNlTnRoQ2hpbGQoKQotewotICAgIENoYXJhY3RlclR5cGUqIGNoYXJh
Y3RlciA9IGN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlwZT4oKTsKLQotICAgIHdoaWxlIChp
c0FTQ0lJRGlnaXQoKmNoYXJhY3RlcikpCi0gICAgICAgICsrY2hhcmFjdGVyOwotICAgIGlmIChp
c0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKCpjaGFyYWN0ZXIsICduJykpIHsKLSAgICAgICAgY3Vy
cmVudENoYXJhY3RlcjxDaGFyYWN0ZXJUeXBlPigpID0gY2hhcmFjdGVyICsgMTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIENTU1BhcnNlcjo6cGFyc2VOdGhDaGlsZEV4dHJh
KCkKLXsKLSAgICBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXIgPSBza2lwV2hpdGVTcGFjZShjdXJy
ZW50Q2hhcmFjdGVyPENoYXJhY3RlclR5cGU+KCkpOwotICAgIGlmICgqY2hhcmFjdGVyICE9ICcr
JyAmJiAqY2hhcmFjdGVyICE9ICctJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY2hh
cmFjdGVyID0gc2tpcFdoaXRlU3BhY2UoY2hhcmFjdGVyICsgMSk7Ci0gICAgaWYgKCFpc0FTQ0lJ
RGlnaXQoKmNoYXJhY3RlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRvIHsKLSAg
ICAgICAgKytjaGFyYWN0ZXI7Ci0gICAgfSB3aGlsZSAoaXNBU0NJSURpZ2l0KCpjaGFyYWN0ZXIp
KTsKLQotICAgIGN1cnJlbnRDaGFyYWN0ZXI8Q2hhcmFjdGVyVHlwZT4oKSA9IGNoYXJhY3RlcjsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
Ci1pbmxpbmUgYm9vbCBDU1NQYXJzZXI6OmRldGVjdEZ1bmN0aW9uVHlwZVRva2VuKGludCBsZW5n
dGgpCi17Ci0gICAgQVNTRVJUKGxlbmd0aCA+IDApOwotICAgIENoYXJhY3RlclR5cGUqIG5hbWUg
PSB0b2tlblN0YXJ0PENoYXJhY3RlclR5cGU+KCk7Ci0KLSAgICBzd2l0Y2ggKGxlbmd0aCkgewot
ICAgIGNhc2UgMzoKLSAgICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsw
XSwgJ24nKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMV0sICdvJykgJiYgaXNB
U0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzJdLCAndCcpKSB7Ci0gICAgICAgICAgICBtX3Rv
a2VuID0gTk9URlVOQ1RJT047Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzBdLCAndScpICYmIGlz
QVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxXSwgJ3InKSAmJiBpc0FTQ0lJQWxwaGFDYXNl
bGVzc0VxdWFsKG5hbWVbMl0sICdsJykpIHsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBVUkk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaXNBU0NJSUFs
cGhhQ2FzZWxlc3NFcXVhbChuYW1lWzBdLCAndicpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1
YWwobmFtZVsxXSwgJ2EnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMl0sICdy
JykpIHsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBWQVJGVU5DVElPTjsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgICAgICBp
ZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzBdLCAnYycpICYmIGlzQVNDSUlBbHBo
YUNhc2VsZXNzRXF1YWwobmFtZVsxXSwgJ3UnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFs
KG5hbWVbMl0sICdlJykpIHsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBDVUVGVU5DVElPTjsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NT
X1NFTEVDVE9SU19MRVZFTDQpCi0gICAgICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFs
KG5hbWVbMF0sICdkJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzFdLCAnaScp
ICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsyXSwgJ3InKSkgewotICAgICAgICAg
ICAgbV90b2tlbiA9IERJUkZVTkNUSU9OOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSNlbmRpZgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjYXNlIDQ6Ci0gICAg
ICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUsICJjYWxjIikpIHsKLSAgICAgICAg
ICAgIG1fdG9rZW4gPSBDQUxDRlVOQ1RJT047Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lLCAibGFuZyIp
KSB7Ci0gICAgICAgICAgICBtX3Rva2VuID0gTEFOR0ZVTkNUSU9OOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSNpZiBFTkFCTEUoQ1NTX1NFTEVDVE9SU19MRVZFTDQpCi0g
ICAgICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUsICJyb2xlIikpIHsKLSAgICAg
ICAgICAgIG1fdG9rZW4gPSBST0xFRlVOQ1RJT047Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5h
bWUsICJob3N0IikpIHsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBIT1NURlVOQ1RJT047Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBjYXNlIDc6Ci0gICAgICAgIGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUsICJt
YXRjaGVzIikpIHsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBNQVRDSEVTRlVOQ1RJT047Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaXNFcXVhbFRvQ1NT
SWRlbnRpZmllcihuYW1lLCAic2xvdHRlZCIpKSB7Ci0gICAgICAgICAgICBtX3Rva2VuID0gU0xP
VFRFREZVTkNUSU9OOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY2FzZSA5OgotICAgICAgICBpZiAoaXNFcXVhbFRvQ1NT
SWRlbnRpZmllcihuYW1lLCAibnRoLWNoaWxkIikpIHsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBO
VEhDSElMREZVTkNUSU9OUzsKLSAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBOdGhDaGlsZE1v
ZGU7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBjYXNlIDExOgotICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRpZmll
cihuYW1lLCAibnRoLW9mLXR5cGUiKSkgewotICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE50
aENoaWxkTW9kZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGNhc2UgMTQ6Ci0gICAgICAgIGlmIChpc0VxdWFsVG9DU1NJ
ZGVudGlmaWVyKG5hbWUsICJudGgtbGFzdC1jaGlsZCIpKSB7Ci0gICAgICAgICAgICBtX3Rva2Vu
ID0gTlRIQ0hJTERGVU5DVElPTlM7Ci0gICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTnRoQ2hp
bGRNb2RlOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgY2FzZSAxNjoKLSAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lkZW50
aWZpZXIobmFtZSwgIm50aC1sYXN0LW9mLXR5cGUiKSkgewotICAgICAgICAgICAgbV9wYXJzaW5n
TW9kZSA9IE50aENoaWxkTW9kZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIHZvaWQgQ1NTUGFyc2Vy
OjpkZXRlY3RNZWRpYVF1ZXJ5VG9rZW4oaW50IGxlbmd0aCkKLXsKLSAgICBBU1NFUlQobV9wYXJz
aW5nTW9kZSA9PSBNZWRpYVF1ZXJ5TW9kZSk7Ci0gICAgQ2hhcmFjdGVyVHlwZSogbmFtZSA9IHRv
a2VuU3RhcnQ8Q2hhcmFjdGVyVHlwZT4oKTsKLQotICAgIGlmIChsZW5ndGggPT0gMykgewotICAg
ICAgICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzBdLCAnYScpICYmIGlzQVND
SUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxXSwgJ24nKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVz
c0VxdWFsKG5hbWVbMl0sICdkJykpCi0gICAgICAgICAgICBtX3Rva2VuID0gTUVESUFfQU5EOwot
ICAgICAgICBlbHNlIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMF0sICduJykg
JiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzFdLCAnbycpICYmIGlzQVNDSUlBbHBo
YUNhc2VsZXNzRXF1YWwobmFtZVsyXSwgJ3QnKSkKLSAgICAgICAgICAgIG1fdG9rZW4gPSBNRURJ
QV9OT1Q7Ci0gICAgfSBlbHNlIGlmIChsZW5ndGggPT0gNCkgewotICAgICAgICBpZiAoaXNBU0NJ
SUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzBdLCAnbycpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNz
RXF1YWwobmFtZVsxXSwgJ24nKQotICAgICAgICAgICAgICAgICYmIGlzQVNDSUlBbHBoYUNhc2Vs
ZXNzRXF1YWwobmFtZVsyXSwgJ2wnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVb
M10sICd5JykpCi0gICAgICAgICAgICBtX3Rva2VuID0gTUVESUFfT05MWTsKLSAgICB9Ci19Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIHZvaWQgQ1NTUGFyc2Vy
OjpkZXRlY3ROdW1iZXJUb2tlbihDaGFyYWN0ZXJUeXBlKiB0eXBlLCBpbnQgbGVuZ3RoKQotewot
ICAgIEFTU0VSVChsZW5ndGggPiAwKTsKLQotICAgIHN3aXRjaCAodG9BU0NJSUxvd2VyVW5jaGVj
a2VkKHR5cGVbMF0pKSB7Ci0gICAgY2FzZSAnYyc6Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMiAm
JiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdtJykpCi0gICAgICAgICAgICBt
X3Rva2VuID0gQ01TOwotICAgICAgICBlbHNlIGlmIChsZW5ndGggPT0gMiAmJiBpc0FTQ0lJQWxw
aGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdoJykpCi0gICAgICAgICAgICBtX3Rva2VuID0gQ0hT
OwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlICdkJzoKLSAgICAgICAgaWYgKGxlbmd0aCA9
PSAzICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ2UnKSAmJiBpc0FTQ0lJ
QWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICdnJykpCi0gICAgICAgICAgICBtX3Rva2VuID0g
REVHUzsKLSNpZiBFTkFCTEUoQ1NTX0lNQUdFX1JFU09MVVRJT04pIHx8IEVOQUJMRShSRVNPTFVU
SU9OX01FRElBX1FVRVJZKQotICAgICAgICBlbHNlIGlmIChsZW5ndGggPiAyICYmIGlzQVNDSUlB
bHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3AnKSkgewotICAgICAgICAgICAgaWYgKGxlbmd0
aCA9PSA0KSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSBkaXNjdXNzaW9uIGFib3V0
IHRoZSBuYW1lIG9mIHRoaXMgdW5pdCBvbiB3d3ctc3R5bGUuCi0gICAgICAgICAgICAgICAgLy8g
S2VlcCB0aGlzIGNvbXBpbGUgdGltZSBndWFyZCBpbiBwbGFjZSB1bnRpbCB0aGF0IGlzIHJlc29s
dmVkLgotICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVi
bGljL3d3dy1zdHlsZS8yMDEyTWF5LzA5MTUuaHRtbAotICAgICAgICAgICAgICAgIGlmIChpc0FT
Q0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICdwJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxl
c3NFcXVhbCh0eXBlWzNdLCAneCcpKQotICAgICAgICAgICAgICAgICAgICBtX3Rva2VuID0gRFBQ
WDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5
cGVbMl0sICdjJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzNdLCAnbScpKQot
ICAgICAgICAgICAgICAgICAgICBtX3Rva2VuID0gRFBDTTsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAobGVuZ3RoID09IDMgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAnaScp
KQotICAgICAgICAgICAgICAgICAgICBtX3Rva2VuID0gRFBJOwotICAgICAgICB9Ci0jZW5kaWYK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSAnZSc6Ci0gICAgICAgIGlmIChsZW5ndGggPT0g
MikgewotICAgICAgICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwg
J20nKSkKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gRU1TOwotICAgICAgICAgICAgZWxzZSBp
ZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAneCcpKQotICAgICAgICAgICAg
ICAgIG1fdG9rZW4gPSBFWFM7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2Fz
ZSAnZic6Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMiAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0Vx
dWFsKHR5cGVbMV0sICdyJykpCi0gICAgICAgICAgICBtX3Rva2VuID0gRlI7Ci0gICAgICAgIHJl
dHVybjsKLSAgICBjYXNlICdnJzoKLSAgICAgICAgaWYgKGxlbmd0aCA9PSA0ICYmIGlzQVNDSUlB
bHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3InKQotICAgICAgICAgICAgICAgICYmIGlzQVND
SUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsyXSwgJ2EnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVz
c0VxdWFsKHR5cGVbM10sICdkJykpCi0gICAgICAgICAgICBtX3Rva2VuID0gR1JBRFM7Ci0gICAg
ICAgIHJldHVybjsKLQotICAgIGNhc2UgJ2gnOgotICAgICAgICBpZiAobGVuZ3RoID09IDIgJiYg
aXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAneicpKQotICAgICAgICAgICAgbV90
b2tlbiA9IEhFUlRaOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlICdpJzoKLSAgICAgICAg
aWYgKGxlbmd0aCA9PSAyICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ24n
KSkKLSAgICAgICAgICAgIG1fdG9rZW4gPSBJTlM7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNh
c2UgJ2snOgotICAgICAgICBpZiAobGVuZ3RoID09IDMgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NF
cXVhbCh0eXBlWzFdLCAnaCcpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsyXSwg
J3onKSkKLSAgICAgICAgICAgIG1fdG9rZW4gPSBLSEVSVFo7Ci0gICAgICAgIHJldHVybjsKLQot
ICAgIGNhc2UgJ20nOgotICAgICAgICBpZiAobGVuZ3RoID09IDIpIHsKLSAgICAgICAgICAgIGlm
IChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdtJykpCi0gICAgICAgICAgICAg
ICAgbV90b2tlbiA9IE1NUzsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNhc2Vs
ZXNzRXF1YWwodHlwZVsxXSwgJ3MnKSkKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gTVNFQ1M7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSAncCc6Ci0gICAgICAgIGlm
IChsZW5ndGggPT0gMikgewotICAgICAgICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1
YWwodHlwZVsxXSwgJ3gnKSkKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gUFhTOwotICAgICAg
ICAgICAgZWxzZSBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAndCcpKQot
ICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBQVFM7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0FT
Q0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMV0sICdjJykpCi0gICAgICAgICAgICAgICAgbV90
b2tlbiA9IFBDUzsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlICdyJzoK
LSAgICAgICAgaWYgKGxlbmd0aCA9PSAzKSB7Ci0gICAgICAgICAgICBpZiAoaXNBU0NJSUFscGhh
Q2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnYScpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwo
dHlwZVsyXSwgJ2QnKSkKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gUkFEUzsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ2UnKSAmJiBp
c0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbMl0sICdtJykpCi0gICAgICAgICAgICAgICAg
bV90b2tlbiA9IFJFTVM7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSAn
cyc6Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMSkKLSAgICAgICAgICAgIG1fdG9rZW4gPSBTRUNT
OwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlICd0JzoKLSAgICAgICAgaWYgKGxlbmd0aCA9
PSA0ICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ3UnKQotICAgICAgICAg
ICAgICAgICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsyXSwgJ3InKSAmJiBpc0FT
Q0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbM10sICduJykpCi0gICAgICAgICAgICBtX3Rva2Vu
ID0gVFVSTlM7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlICd2JzoKLSAgICAgICAgaWYgKGxl
bmd0aCA9PSAyKSB7Ci0gICAgICAgICAgICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0
eXBlWzFdLCAndycpKQotICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBWVzsKLSAgICAgICAgICAg
IGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlwZVsxXSwgJ2gnKSkKLSAgICAg
ICAgICAgICAgICBtX3Rva2VuID0gVkg7Ci0gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09IDQg
JiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzFdLCAnbScpKSB7Ci0gICAgICAgICAg
ICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbCh0eXBlWzJdLCAnaScpICYmIGlzQVNDSUlB
bHBoYUNhc2VsZXNzRXF1YWwodHlwZVszXSwgJ24nKSkKLSAgICAgICAgICAgICAgICBtX3Rva2Vu
ID0gVk1JTjsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwo
dHlwZVsyXSwgJ2EnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbM10sICd4Jykp
Ci0gICAgICAgICAgICAgICAgbV90b2tlbiA9IFZNQVg7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKHR5cGVbMF0gPT0gJ18nICYmIGxlbmd0
aCA9PSA1ICYmIHR5cGVbMV0gPT0gJ18nICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwodHlw
ZVsyXSwgJ3EnKQotICAgICAgICAgICAgICAgICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwo
dHlwZVszXSwgJ2UnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHR5cGVbNF0sICdtJykp
Ci0gICAgICAgICAgICBtX3Rva2VuID0gUUVNUzsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0K
LQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgdm9pZCBDU1NQYXJz
ZXI6OmRldGVjdERhc2hUb2tlbihpbnQgbGVuZ3RoKQotewotICAgIENoYXJhY3RlclR5cGUqIG5h
bWUgPSB0b2tlblN0YXJ0PENoYXJhY3RlclR5cGU+KCk7Ci0KLSAgICBpZiAobGVuZ3RoID09IDEx
KSB7Ci0gICAgICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMTBdLCAneScp
ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDEsICJ3ZWJraXQtYW4iKSkKLSAgICAg
ICAgICAgIG1fdG9rZW4gPSBBTllGVU5DVElPTjsKLSAgICAgICAgZWxzZSBpZiAoaXNBU0NJSUFs
cGhhQ2FzZWxlc3NFcXVhbChuYW1lWzEwXSwgJ24nKSAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVy
KG5hbWUgKyAxLCAid2Via2l0LW1pIikpCi0gICAgICAgICAgICBtX3Rva2VuID0gTUlORlVOQ1RJ
T047Ci0gICAgICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxMF0s
ICd4JykgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMSwgIndlYmtpdC1tYSIpKQot
ICAgICAgICAgICAgbV90b2tlbiA9IE1BWEZVTkNUSU9OOwotICAgIH0gZWxzZSBpZiAobGVuZ3Ro
ID09IDEyICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDEsICJ3ZWJraXQtY2FsYyIp
KQotICAgICAgICBtX3Rva2VuID0gQ0FMQ0ZVTkNUSU9OOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSB2b2lkIENTU1BhcnNlcjo6ZGV0ZWN0QXRUb2tlbihp
bnQgbGVuZ3RoLCBib29sIGhhc0VzY2FwZSkKLXsKLSAgICBDaGFyYWN0ZXJUeXBlKiBuYW1lID0g
dG9rZW5TdGFydDxDaGFyYWN0ZXJUeXBlPigpOwotICAgIEFTU0VSVChuYW1lWzBdID09ICdAJyAm
JiBsZW5ndGggPj0gMik7Ci0KLSAgICAvLyBjaGFyc2V0LCBmb250LWZhY2UsIGltcG9ydCwgbWVk
aWEsIG5hbWVzcGFjZSwgcGFnZSwgc3VwcG9ydHMsCi0gICAgLy8gLXdlYmtpdC1rZXlmcmFtZXMs
IGFuZCAtd2Via2l0LW1lZGlhcXVlcnkgYXJlIG5vdCBhZmZlY3RlZCBieSBoYXNFc2NhcGUuCi0g
ICAgc3dpdGNoICh0b0FTQ0lJTG93ZXJVbmNoZWNrZWQobmFtZVsxXSkpIHsKLSAgICBjYXNlICdi
JzoKLSAgICAgICAgaWYgKGhhc0VzY2FwZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBzd2l0Y2ggKGxlbmd0aCkgewotICAgICAgICBjYXNlIDEyOgotICAgICAgICAgICAgaWYgKGlz
RXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJvdHRvbS1sZWZ0IikpCi0gICAgICAgICAg
ICAgICAgbV90b2tlbiA9IEJPVFRPTUxFRlRfU1lNOwotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIGNhc2UgMTM6Ci0gICAgICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihu
YW1lICsgMiwgIm90dG9tLXJpZ2h0IikpCi0gICAgICAgICAgICAgICAgbV90b2tlbiA9IEJPVFRP
TVJJR0hUX1NZTTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIDE0OgotICAg
ICAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJvdHRvbS1jZW50
ZXIiKSkKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gQk9UVE9NQ0VOVEVSX1NZTTsKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIDE5OgotICAgICAgICAgICAgaWYgKGlzRXF1
YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJvdHRvbS1sZWZ0LWNvcm5lciIpKQotICAgICAg
ICAgICAgICAgIG1fdG9rZW4gPSBCT1RUT01MRUZUQ09STkVSX1NZTTsKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBjYXNlIDIwOgotICAgICAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lk
ZW50aWZpZXIobmFtZSArIDIsICJvdHRvbS1yaWdodC1jb3JuZXIiKSkKLSAgICAgICAgICAgICAg
ICBtX3Rva2VuID0gQk9UVE9NUklHSFRDT1JORVJfU1lNOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgJ2MnOgotICAgICAgICBpZiAo
bGVuZ3RoID09IDggJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgImhhcnNldCIp
KQotICAgICAgICAgICAgbV90b2tlbiA9IENIQVJTRVRfU1lNOwotICAgICAgICByZXR1cm47Ci0K
LSAgICBjYXNlICdmJzoKLSAgICAgICAgaWYgKGxlbmd0aCA9PSAxMCAmJiBpc0VxdWFsVG9DU1NJ
ZGVudGlmaWVyKG5hbWUgKyAyLCAib250LWZhY2UiKSkKLSAgICAgICAgICAgIG1fdG9rZW4gPSBG
T05UX0ZBQ0VfU1lNOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlICdpJzoKLSAgICAgICAg
aWYgKGxlbmd0aCA9PSA3ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJtcG9y
dCIpKSB7Ci0gICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTWVkaWFRdWVyeU1vZGU7Ci0gICAg
ICAgICAgICBtX3Rva2VuID0gSU1QT1JUX1NZTTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47
Ci0KLSAgICBjYXNlICdrJzoKLSAgICAgICAgaWYgKGxlbmd0aCA9PSAxMCAmJiBpc0VxdWFsVG9D
U1NJZGVudGlmaWVyKG5hbWUgKyAyLCAiZXlmcmFtZXMiKSkKLSAgICAgICAgICAgIG1fdG9rZW4g
PSBLRVlGUkFNRVNfU1lNOwotICAgICAgICBlbHNlIGlmIChsZW5ndGggPT0gMTQgJiYgIWhhc0Vz
Y2FwZSAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAiZXlmcmFtZS1ydWxlIikp
Ci0gICAgICAgICAgICBtX3Rva2VuID0gS0VZRlJBTUVfUlVMRV9TWU07Ci0gICAgICAgIHJldHVy
bjsKLQotICAgIGNhc2UgJ2wnOgotICAgICAgICBpZiAoaGFzRXNjYXBlKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGlmIChsZW5ndGggPT0gOSkgewotICAgICAgICAgICAgaWYgKGlz
RXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJlZnQtdG9wIikpCi0gICAgICAgICAgICAg
ICAgbV90b2tlbiA9IExFRlRUT1BfU1lNOwotICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PSAx
MikgewotICAgICAgICAgICAgLy8gQ2hlY2tpbmcgdGhlIGxhc3QgY2hhcmFjdGVyIGZpcnN0IGNv
dWxkIGZ1cnRoZXIgcmVkdWNlIHRoZSBwb3NzaWJpbGUgY2FzZXMuCi0gICAgICAgICAgICBpZiAo
aXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzExXSwgJ2UnKSAmJiBpc0VxdWFsVG9DU1NJ
ZGVudGlmaWVyKG5hbWUgKyAyLCAiZWZ0LW1pZGRsIikpCi0gICAgICAgICAgICAgICAgbV90b2tl
biA9IExFRlRNSURETEVfU1lNOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNBU0NJSUFscGhhQ2Fz
ZWxlc3NFcXVhbChuYW1lWzExXSwgJ20nKSAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUg
KyAyLCAiZWZ0LWJvdHRvIikpCi0gICAgICAgICAgICAgICAgbV90b2tlbiA9IExFRlRCT1RUT01f
U1lNOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgJ20nOgotICAgICAg
ICBpZiAobGVuZ3RoID09IDYgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgImVk
aWEiKSkgewotICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlhUXVlcnlNb2RlOwotICAg
ICAgICAgICAgbV90b2tlbiA9IE1FRElBX1NZTTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47
Ci0KLSAgICBjYXNlICduJzoKLSAgICAgICAgaWYgKGxlbmd0aCA9PSAxMCAmJiBpc0VxdWFsVG9D
U1NJZGVudGlmaWVyKG5hbWUgKyAyLCAiYW1lc3BhY2UiKSkKLSAgICAgICAgICAgIG1fdG9rZW4g
PSBOQU1FU1BBQ0VfU1lNOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlICdwJzoKLSAgICAg
ICAgaWYgKGxlbmd0aCA9PSA1ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJh
Z2UiKSkKLSAgICAgICAgICAgIG1fdG9rZW4gPSBQQUdFX1NZTTsKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgY2FzZSAncic6Ci0gICAgICAgIGlmIChoYXNFc2NhcGUpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgaWYgKGxlbmd0aCA9PSAxMCkgewotICAgICAgICAgICAgaWYgKGlzRXF1
YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJpZ2h0LXRvcCIpKQotICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBSSUdIVFRPUF9TWU07Ci0gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09IDEz
KSB7Ci0gICAgICAgICAgICAvLyBDaGVja2luZyB0aGUgbGFzdCBjaGFyYWN0ZXIgZmlyc3QgY291
bGQgZnVydGhlciByZWR1Y2UgdGhlIHBvc3NpYmlsZSBjYXNlcy4KLSAgICAgICAgICAgIGlmIChp
c0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMTJdLCAnZScpICYmIGlzRXF1YWxUb0NTU0lk
ZW50aWZpZXIobmFtZSArIDIsICJpZ2h0LW1pZGRsIikpCi0gICAgICAgICAgICAgICAgbV90b2tl
biA9IFJJR0hUTUlERExFX1NZTTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzQVNDSUlBbHBoYUNh
c2VsZXNzRXF1YWwobmFtZVsxMl0sICdtJykgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1l
ICsgMiwgImlnaHQtYm90dG8iKSkKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gUklHSFRCT1RU
T01fU1lNOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgJ3MnOgotICAg
ICAgICBpZiAobGVuZ3RoID09IDkgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwg
InVwcG9ydHMiKSkgewotICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IFN1cHBvcnRzTW9kZTsK
LSAgICAgICAgICAgIG1fdG9rZW4gPSBTVVBQT1JUU19TWU07Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuOwotCi0gICAgY2FzZSAndCc6Ci0gICAgICAgIGlmIChoYXNFc2NhcGUpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgc3dpdGNoIChsZW5ndGgpIHsKLSAgICAgICAgY2FzZSA5
OgotICAgICAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJvcC1s
ZWZ0IikpCi0gICAgICAgICAgICAgICAgbV90b2tlbiA9IFRPUExFRlRfU1lNOwotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGNhc2UgMTA6Ci0gICAgICAgICAgICBpZiAoaXNFcXVhbFRv
Q1NTSWRlbnRpZmllcihuYW1lICsgMiwgIm9wLXJpZ2h0IikpCi0gICAgICAgICAgICAgICAgbV90
b2tlbiA9IFRPUFJJR0hUX1NZTTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNl
IDExOgotICAgICAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJv
cC1jZW50ZXIiKSkKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gVE9QQ0VOVEVSX1NZTTsKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIDE2OgotICAgICAgICAgICAgaWYgKGlz
RXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJvcC1sZWZ0LWNvcm5lciIpKQotICAgICAg
ICAgICAgICAgIG1fdG9rZW4gPSBUT1BMRUZUQ09STkVSX1NZTTsKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBjYXNlIDE3OgotICAgICAgICAgICAgaWYgKGlzRXF1YWxUb0NTU0lkZW50
aWZpZXIobmFtZSArIDIsICJvcC1yaWdodC1jb3JuZXIiKSkKLSAgICAgICAgICAgICAgICBtX3Rv
a2VuID0gVE9QUklHSFRDT1JORVJfU1lNOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgJy0nOgotICAgICAgICBzd2l0Y2ggKGxlbmd0
aCkgewotICAgICAgICBjYXNlIDEzOgotICAgICAgICAgICAgaWYgKCFoYXNFc2NhcGUgJiYgaXNF
cXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgIndlYmtpdC1ydWxlIikpCi0gICAgICAgICAg
ICAgICAgbV90b2tlbiA9IFdFQktJVF9SVUxFX1NZTTsKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBjYXNlIDE0OgotICAgICAgICAgICAgaWYgKGhhc0VzY2FwZSkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIC8vIENoZWNraW5nIHRoZSBsYXN0IGNoYXJhY3Rl
ciBmaXJzdCBjb3VsZCBmdXJ0aGVyIHJlZHVjZSB0aGUgcG9zc2liaWxlIGNhc2VzLgotICAgICAg
ICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxM10sICdzJykgJiYgaXNF
cXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgIndlYmtpdC1kZWNsIikpCi0gICAgICAgICAg
ICAgICAgbV90b2tlbiA9IFdFQktJVF9ERUNMU19TWU07Ci0gICAgICAgICAgICBlbHNlIGlmIChp
c0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5hbWVbMTNdLCAnZScpICYmIGlzRXF1YWxUb0NTU0lk
ZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQtdmFsdSIpKQotICAgICAgICAgICAgICAgIG1fdG9r
ZW4gPSBXRUJLSVRfVkFMVUVfU1lNOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGNh
c2UgMTU6Ci0gICAgICAgICAgICBpZiAoaGFzRXNjYXBlKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLQotI2lmIEVOQUJMRShDU1NfUkVHSU9OUykKLSAgICAgICAgICAgIGlmIChpc0FTQ0lJQWxw
aGFDYXNlbGVzc0VxdWFsKG5hbWVbMTRdLCAnbicpICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIo
bmFtZSArIDIsICJ3ZWJraXQtcmVnaW8iKSkKLSAgICAgICAgICAgICAgICBtX3Rva2VuID0gV0VC
S0lUX1JFR0lPTl9SVUxFX1NZTTsKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIGNhc2UgMTc6Ci0gICAgICAgICAgICBpZiAoaGFzRXNjYXBlKQotICAgICAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFt
ZVsxNl0sICdyJykgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgIndlYmtpdC1z
ZWxlY3RvIikpCi0gICAgICAgICAgICAgICAgbV90b2tlbiA9IFdFQktJVF9TRUxFQ1RPUl9TWU07
Ci0jaWYgRU5BQkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikKLSAgICAgICAgICAgIGVsc2UgaWYg
KGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsxNl0sICd0JykgJiYgaXNFcXVhbFRvQ1NT
SWRlbnRpZmllcihuYW1lICsgMiwgIndlYmtpdC12aWV3cG9yIikpCi0gICAgICAgICAgICAgICAg
bV90b2tlbiA9IFdFQktJVF9WSUVXUE9SVF9SVUxFX1NZTTsKLSNlbmRpZgotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGNhc2UgMTg6Ci0gICAgICAgICAgICBpZiAoaXNFcXVhbFRvQ1NT
SWRlbnRpZmllcihuYW1lICsgMiwgIndlYmtpdC1rZXlmcmFtZXMiKSkKLSAgICAgICAgICAgICAg
ICBtX3Rva2VuID0gS0VZRlJBTUVTX1NZTTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzRXF1YWxU
b0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJ3ZWJraXQtc2l6ZXNhdHRyIikpCi0gICAgICAgICAg
ICAgICAgbV90b2tlbiA9IFdFQktJVF9TSVpFU0FUVFJfU1lNOwotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGNhc2UgMTk6Ci0gICAgICAgICAgICBpZiAoaXNFcXVhbFRvQ1NTSWRlbnRp
ZmllcihuYW1lICsgMiwgIndlYmtpdC1tZWRpYXF1ZXJ5IikpIHsKLSAgICAgICAgICAgICAgICBt
X3BhcnNpbmdNb2RlID0gTWVkaWFRdWVyeU1vZGU7Ci0gICAgICAgICAgICAgICAgbV90b2tlbiA9
IFdFQktJVF9NRURJQVFVRVJZX1NZTTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBjYXNlIDIyOgotICAgICAgICAgICAgaWYgKCFoYXNFc2NhcGUgJiYgaXNF
cXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgIndlYmtpdC1rZXlmcmFtZS1ydWxlIikpCi0g
ICAgICAgICAgICAgICAgbV90b2tlbiA9IEtFWUZSQU1FX1JVTEVfU1lNOwotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGNhc2UgMjc6Ci0gICAgICAgICAgICBpZiAoaXNFcXVhbFRvQ1NT
SWRlbnRpZmllcihuYW1lICsgMiwgIndlYmtpdC1zdXBwb3J0cy1jb25kaXRpb24iKSkgewotICAg
ICAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBTdXBwb3J0c01vZGU7Ci0gICAgICAgICAgICAg
ICAgbV90b2tlbiA9IFdFQktJVF9TVVBQT1JUU19DT05ESVRJT05fU1lNOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotfQotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSB2b2lkIENTU1BhcnNlcjo6ZGV0ZWN0U3Vw
cG9ydHNUb2tlbihpbnQgbGVuZ3RoKQotewotICAgIEFTU0VSVChtX3BhcnNpbmdNb2RlID09IFN1
cHBvcnRzTW9kZSk7Ci0gICAgQ2hhcmFjdGVyVHlwZSogbmFtZSA9IHRva2VuU3RhcnQ8Q2hhcmFj
dGVyVHlwZT4oKTsKLQotICAgIGlmIChsZW5ndGggPT0gMikgewotICAgICAgICBpZiAoaXNBU0NJ
SUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lWzBdLCAnbycpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNz
RXF1YWwobmFtZVsxXSwgJ3InKSkKLSAgICAgICAgICAgIG1fdG9rZW4gPSBTVVBQT1JUU19PUjsK
LSAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PSAzKSB7Ci0gICAgICAgIGlmIChpc0FTQ0lJQWxwaGFD
YXNlbGVzc0VxdWFsKG5hbWVbMF0sICdhJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChu
YW1lWzFdLCAnbicpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVsyXSwgJ2QnKSkK
LSAgICAgICAgICAgIG1fdG9rZW4gPSBTVVBQT1JUU19BTkQ7Ci0gICAgICAgIGVsc2UgaWYgKGlz
QVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZVswXSwgJ24nKSAmJiBpc0FTQ0lJQWxwaGFDYXNl
bGVzc0VxdWFsKG5hbWVbMV0sICdvJykgJiYgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChuYW1l
WzJdLCAndCcpKQotICAgICAgICAgICAgbV90b2tlbiA9IFNVUFBPUlRTX05PVDsKLSAgICB9Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBTcmNDaGFyYWN0ZXJUeXBlPgotaW50IENTU1BhcnNlcjo6
cmVhbExleCh2b2lkKiB5eWx2YWxXaXRob3V0VHlwZSkKLXsKLSAgICBZWVNUWVBFKiB5eWx2YWwg
PSBzdGF0aWNfY2FzdDxZWVNUWVBFKj4oeXlsdmFsV2l0aG91dFR5cGUpOwotICAgIC8vIFdyaXRl
IHBvaW50ZXIgZm9yIHRoZSBuZXh0IGNoYXJhY3Rlci4KLSAgICBTcmNDaGFyYWN0ZXJUeXBlKiBy
ZXN1bHQ7Ci0gICAgQ1NTUGFyc2VyU3RyaW5nIHJlc3VsdFN0cmluZzsKLSAgICBib29sIGhhc0Vz
Y2FwZTsKLQotICAgIC8vIFRoZSBpbnB1dCBidWZmZXIgaXMgdGVybWluYXRlZCBieSBhIFwwIGNo
YXJhY3Rlciwgc28KLSAgICAvLyBpdCBpcyBzYWZlIHRvIHJlYWQgb25lIGNoYXJhY3RlciBhaGVh
ZCBvZiBhIGtub3duIG5vbi1udWxsLgotI2lmbmRlZiBOREVCVUcKLSAgICAvLyBJbiBkZWJ1ZyB3
ZSBjaGVjayB3aXRoIGFuIEFTU0VSVCB0aGF0IHRoZSBsZW5ndGggaXMgPiAwIGZvciBzdHJpbmcg
dHlwZXMuCi0gICAgeXlsdmFsLT5zdHJpbmcuY2xlYXIoKTsKLSNlbmRpZgotCi1yZXN0YXJ0QWZ0
ZXJDb21tZW50OgotICAgIHJlc3VsdCA9IGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlw
ZT4oKTsKLSAgICBzZXRUb2tlblN0YXJ0KHJlc3VsdCk7Ci0gICAgbV90b2tlblN0YXJ0TGluZU51
bWJlciA9IG1fbGluZU51bWJlcjsKLSAgICBtX3Rva2VuU3RhcnRDb2x1bW5OdW1iZXIgPSB0b2tl
blN0YXJ0T2Zmc2V0KCkgLSBtX2NvbHVtbk9mZnNldEZvckxpbmU7Ci0gICAgbV90b2tlbiA9ICpj
dXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0gICAgKytjdXJyZW50Q2hhcmFj
dGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0KLSAgICBzd2l0Y2ggKChtX3Rva2VuIDw9IDEyNykg
PyB0eXBlc09mQVNDSUlDaGFyYWN0ZXJzW21fdG9rZW5dIDogQ2hhcmFjdGVySWRlbnRpZmllclN0
YXJ0KSB7Ci0gICAgY2FzZSBDaGFyYWN0ZXJDYXNlbGVzc1U6Ci0gICAgICAgIGlmIChVTkxJS0VM
WSgqY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpID09ICcrJykpIHsKLSAgICAg
ICAgICAgIGlmIChwYXJzZVVuaWNvZGVSYW5nZTxTcmNDaGFyYWN0ZXJUeXBlPigpKSB7Ci0gICAg
ICAgICAgICAgICAgbV90b2tlbiA9IFVOSUNPREVSQU5HRTsKLSAgICAgICAgICAgICAgICB5eWx2
YWwtPnN0cmluZy5pbml0KHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSwgY3VycmVudENo
YXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpIC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBl
PigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBGQUxMVEhST1VHSDsgLy8gVG8gQ2hhcmFjdGVySWRlbnRpZmllclN0YXJ0LgotCi0g
ICAgY2FzZSBDaGFyYWN0ZXJJZGVudGlmaWVyU3RhcnQ6Ci0gICAgICAgIC0tY3VycmVudENoYXJh
Y3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotICAgICAgICBwYXJzZUlkZW50aWZpZXIocmVzdWx0
LCB5eWx2YWwtPnN0cmluZywgaGFzRXNjYXBlKTsKLSAgICAgICAgbV90b2tlbiA9IElERU5UOwot
Ci0gICAgICAgIGlmIChVTkxJS0VMWSgqY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBl
PigpID09ICcoJykpIHsKLSAgICAgICAgICAgIGlmIChtX3BhcnNpbmdNb2RlID09IFN1cHBvcnRz
TW9kZSAmJiAhaGFzRXNjYXBlKSB7Ci0gICAgICAgICAgICAgICAgZGV0ZWN0U3VwcG9ydHNUb2tl
bjxTcmNDaGFyYWN0ZXJUeXBlPihyZXN1bHQgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+
KCkpOwotICAgICAgICAgICAgICAgIGlmIChtX3Rva2VuICE9IElERU5UKQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fdG9rZW4gPSBGVU5D
VElPTjsKLSAgICAgICAgICAgIGJvb2wgc2hvdWxkU2tpcFBhcmVudGhlc2lzID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGlmICghaGFzRXNjYXBlKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBkZXRlY3Rl
ZCA9IGRldGVjdEZ1bmN0aW9uVHlwZVRva2VuPFNyY0NoYXJhY3RlclR5cGU+KHJlc3VsdCAtIHRv
a2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFkZXRl
Y3RlZCAmJiBtX3BhcnNpbmdNb2RlID09IE1lZGlhUXVlcnlNb2RlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIC4uLiBhbmQobWF4LXdpZHRoOiA0ODBweCkgLi4uIGxvb2tzIGxpa2UgYSBmdW5j
dGlvbiwgYnV0IGluIGZhY3QgaXQgaXMgbm90LAotICAgICAgICAgICAgICAgICAgICAvLyBzbyBy
dW4gbW9yZSBkZXRlY3Rpb24gY29kZSBpbiB0aGUgTWVkaWFRdWVyeU1vZGUuCi0gICAgICAgICAg
ICAgICAgICAgIGRldGVjdE1lZGlhUXVlcnlUb2tlbjxTcmNDaGFyYWN0ZXJUeXBlPihyZXN1bHQg
LSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkpOwotICAgICAgICAgICAgICAgICAgICBz
aG91bGRTa2lwUGFyZW50aGVzaXMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChMSUtFTFkoc2hvdWxkU2tpcFBhcmVudGhlc2lzKSkg
ewotICAgICAgICAgICAgICAgICsrY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigp
OwotICAgICAgICAgICAgICAgICsrcmVzdWx0OwotICAgICAgICAgICAgICAgICsreXlsdmFsLT5z
dHJpbmcubV9sZW5ndGg7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0b2tlbigp
ID09IFVSSSkgewotICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBGVU5DVElPTjsKLSAgICAgICAg
ICAgICAgICAvLyBDaGVjayB3aGV0aGVyIGl0IGlzIHJlYWxseSBhbiBVUkkuCi0gICAgICAgICAg
ICAgICAgaWYgKHl5bHZhbC0+c3RyaW5nLmlzOEJpdCgpKQotICAgICAgICAgICAgICAgICAgICBw
YXJzZVVSSTxMQ2hhcj4oeXlsdmFsLT5zdHJpbmcpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgcGFyc2VVUkk8VUNoYXI+KHl5bHZhbC0+c3RyaW5nKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChVTkxJS0VMWShtX3BhcnNpbmdNb2RlICE9IE5v
cm1hbE1vZGUpICYmICFoYXNFc2NhcGUpIHsKLSAgICAgICAgICAgIGlmIChtX3BhcnNpbmdNb2Rl
ID09IE1lZGlhUXVlcnlNb2RlKQotICAgICAgICAgICAgICAgIGRldGVjdE1lZGlhUXVlcnlUb2tl
bjxTcmNDaGFyYWN0ZXJUeXBlPihyZXN1bHQgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+
KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAobV9wYXJzaW5nTW9kZSA9PSBTdXBwb3J0c01vZGUp
Ci0gICAgICAgICAgICAgICAgZGV0ZWN0U3VwcG9ydHNUb2tlbjxTcmNDaGFyYWN0ZXJUeXBlPihy
ZXN1bHQgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkpOwotICAgICAgICAgICAgZWxz
ZSBpZiAobV9wYXJzaW5nTW9kZSA9PSBOdGhDaGlsZE1vZGUgJiYgaXNBU0NJSUFscGhhQ2FzZWxl
c3NFcXVhbCh0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KClbMF0sICduJykpIHsKLSAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0IC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpID09
IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nICJuIiBpcyBJREVOVCBidXQgIm4r
MSIgaXMgTlRILgotICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VOdGhDaGlsZEV4dHJhPFNy
Y0NoYXJhY3RlclR5cGU+KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBO
VEg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5tX2xlbmd0aCA9IGN1
cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFj
dGVyVHlwZT4oKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAocmVzdWx0IC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpID49IDIgJiYgdG9r
ZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpWzFdID09ICctJykgewotICAgICAgICAgICAgICAg
ICAgICAvLyBTdHJpbmcgIm4tIiBpcyBJREVOVCBidXQgIm4tMSIgaXMgTlRILgotICAgICAgICAg
ICAgICAgICAgICAvLyBTZXQgY3VycmVudENoYXJhY3RlciB0byAnLScgdG8gY29udGludWUgcGFy
c2luZy4KLSAgICAgICAgICAgICAgICAgICAgU3JjQ2hhcmFjdGVyVHlwZSogbmV4dENoYXJhY3Rl
ciA9IHJlc3VsdDsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudENoYXJhY3RlcjxTcmNDaGFy
YWN0ZXJUeXBlPigpID0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpICsgMTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhcnNlTnRoQ2hpbGRFeHRyYTxTcmNDaGFyYWN0ZXJUeXBlPigp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3Rva2VuID0gTlRIOwotICAgICAgICAgICAg
ICAgICAgICAgICAgeXlsdmFsLT5zdHJpbmcuc2V0TGVuZ3RoKGN1cnJlbnRDaGFyYWN0ZXI8U3Jj
Q2hhcmFjdGVyVHlwZT4oKSAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXZl
cnQgdGhlIGNoYW5nZSB0byBjdXJyZW50Q2hhcmFjdGVyIGlmIHVuc3VjY2Vzc2Z1bC4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9
IG5leHRDaGFyYWN0ZXI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fcGFyc2luZ01vZGUgPT0g
TnRoQ2hpbGRNb2RlICYmIG1fdG9rZW4gPT0gSURFTlQgJiYgeXlsdmFsLT5zdHJpbmcubGVuZ3Ro
KCkgPT0gMiAmJiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh5eWx2YWwtPnN0cmluZywg
Im9mIikpIHsKLSAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBOb3JtYWxNb2RlOwotICAgICAg
ICAgICAgbV90b2tlbiA9IE5USENISUxEU0VMRUNUT1JTRVBBUkFUT1I7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENoYXJhY3RlckRvdDoKLSAgICAgICAgaWYgKCFpc0FT
Q0lJRGlnaXQoY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpWzBdKSkKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBGQUxMVEhST1VHSDsgLy8gVG8gQ2hhcmFjdGVyTnVtYmVy
LgotCi0gICAgY2FzZSBDaGFyYWN0ZXJOdW1iZXI6IHsKLSAgICAgICAgYm9vbCBkb3RTZWVuID0g
KG1fdG9rZW4gPT0gJy4nKTsKLQotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAg
aWYgKCFpc0FTQ0lJRGlnaXQoY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpWzBd
KSkgewotICAgICAgICAgICAgICAgIC8vIE9ubHkgb25lIGRvdCBpcyBhbGxvd2VkIGZvciBhIG51
bWJlciwKLSAgICAgICAgICAgICAgICAvLyBhbmQgaXQgbXVzdCBiZSBmb2xsb3dlZCBieSBhIGRp
Z2l0LgotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5
cGU+KClbMF0gIT0gJy4nIHx8IGRvdFNlZW4gfHwgIWlzQVNDSUlEaWdpdChjdXJyZW50Q2hhcmFj
dGVyPFNyY0NoYXJhY3RlclR5cGU+KClbMV0pKQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBkb3RTZWVuID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICsrY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKFVOTElLRUxZKG1fcGFyc2luZ01vZGUgPT0gTnRoQ2hpbGRNb2RlKSAmJiAh
ZG90U2VlbiAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKCpjdXJyZW50Q2hhcmFjdGVyPFNy
Y0NoYXJhY3RlclR5cGU+KCksICduJykpIHsKLSAgICAgICAgICAgIC8vICJbMC05XStuIiBpcyBh
bHdheXMgYW4gTnRoQ2hpbGQuCi0gICAgICAgICAgICArK2N1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hh
cmFjdGVyVHlwZT4oKTsKLSAgICAgICAgICAgIHBhcnNlTnRoQ2hpbGRFeHRyYTxTcmNDaGFyYWN0
ZXJUeXBlPigpOwotICAgICAgICAgICAgbV90b2tlbiA9IE5USDsKLSAgICAgICAgICAgIHl5bHZh
bC0+c3RyaW5nLmluaXQodG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpLCBjdXJyZW50Q2hh
cmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+
KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBVc2UgU1ZH
IHBhcnNlciBmb3IgbnVtYmVycyBvbiBTVkcgcHJlc2VudGF0aW9uIGF0dHJpYnV0ZXMuCi0gICAg
ICAgIGlmIChtX2NvbnRleHQubW9kZSA9PSBTVkdBdHRyaWJ1dGVNb2RlKSB7Ci0gICAgICAgICAg
ICAvLyBXZSBuZWVkIHRvIHRha2UgY2FyZSBvZiB1bml0cyBsaWtlICdlbScgb3IgJ2V4Jy4KLSAg
ICAgICAgICAgIFNyY0NoYXJhY3RlclR5cGUqIGNoYXJhY3RlciA9IGN1cnJlbnRDaGFyYWN0ZXI8
U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAgICAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVz
c0VxdWFsKCpjaGFyYWN0ZXIsICdlJykpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoY2hhcmFj
dGVyIC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpID4gMCk7Ci0gICAgICAgICAgICAg
ICAgKytjaGFyYWN0ZXI7Ci0gICAgICAgICAgICAgICAgaWYgKCpjaGFyYWN0ZXIgPT0gJy0nIHx8
ICpjaGFyYWN0ZXIgPT0gJysnIHx8IGlzQVNDSUlEaWdpdCgqY2hhcmFjdGVyKSkgewotICAgICAg
ICAgICAgICAgICAgICArK2NoYXJhY3RlcjsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGlz
QVNDSUlEaWdpdCgqY2hhcmFjdGVyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICsrY2hhcmFj
dGVyOwotICAgICAgICAgICAgICAgICAgICAvLyBVc2UgRkxPQVRUT0tFTiBpZiB0aGUgc3RyaW5n
IGNvbnRhaW5zIGV4cG9uZW50cy4KLSAgICAgICAgICAgICAgICAgICAgZG90U2VlbiA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4o
KSA9IGNoYXJhY3RlcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAoIXBhcnNlU1ZHTnVtYmVyKHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSwg
Y2hhcmFjdGVyIC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpLCB5eWx2YWwtPm51bWJl
cikpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
eXlsdmFsLT5udW1iZXIgPSBjaGFyYWN0ZXJzVG9Eb3VibGUodG9rZW5TdGFydDxTcmNDaGFyYWN0
ZXJUeXBlPigpLCBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgLSB0b2tlblN0
YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkpOwotIAotICAgICAgICAvLyBUeXBlIG9mIHRoZSBmdW5j
dGlvbi4KLSAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkp
IHsKLSAgICAgICAgICAgIFNyY0NoYXJhY3RlclR5cGUqIHR5cGUgPSBjdXJyZW50Q2hhcmFjdGVy
PFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0gICAgICAgICAgICByZXN1bHQgPSBjdXJyZW50Q2hhcmFj
dGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0KLSAgICAgICAgICAgIHBhcnNlSWRlbnRpZmllcihy
ZXN1bHQsIHJlc3VsdFN0cmluZywgaGFzRXNjYXBlKTsKLQotICAgICAgICAgICAgbV90b2tlbiA9
IERJTUVOOwotICAgICAgICAgICAgaWYgKCFoYXNFc2NhcGUpCi0gICAgICAgICAgICAgICAgZGV0
ZWN0TnVtYmVyVG9rZW4odHlwZSwgY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigp
IC0gdHlwZSk7Ci0KLSAgICAgICAgICAgIGlmIChtX3Rva2VuID09IERJTUVOKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gVGhlIGRlY29kZWQgbnVtYmVyIGlzIG92ZXJ3cml0dGVuLCBidXQgdGhpcyBp
cyBpbnRlbnRpb25hbC4KLSAgICAgICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5pbml0KHRva2Vu
U3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSwgY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJU
eXBlPigpIC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlIGlmICgqY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigp
ID09ICclJykgewotICAgICAgICAgICAgLy8gQWx0aG91Z2ggdGhlIENTUyBncmFtbWFyIHNheXMg
e251bX0lIHdlIGZvbGxvdwotICAgICAgICAgICAgLy8gd2Via2l0IGF0IHRoZSBtb21lbnQgd2hp
Y2ggdXNlcyB7bnVtfSUrLgotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICsrY3Vy
cmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotICAgICAgICAgICAgfSB3aGlsZSAo
KmN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9PSAnJScpOwotICAgICAgICAg
ICAgbV90b2tlbiA9IFBFUkNFTlRBR0U7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV90
b2tlbiA9IGRvdFNlZW4gPyBGTE9BVFRPS0VOIDogSU5URUdFUjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgY2FzZSBDaGFyYWN0ZXJEYXNoOgotICAgICAgICBpZiAoaXNJZGVudGlmaWVy
U3RhcnRBZnRlckRhc2goY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpKSkgewot
ICAgICAgICAgICAgLS1jdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0gICAg
ICAgICAgICBwYXJzZUlkZW50aWZpZXIocmVzdWx0LCByZXN1bHRTdHJpbmcsIGhhc0VzY2FwZSk7
Ci0gICAgICAgICAgICBtX3Rva2VuID0gSURFTlQ7Ci0KLSAgICAgICAgICAgIGlmICgqY3VycmVu
dENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpID09ICcoJykgewotICAgICAgICAgICAgICAg
IG1fdG9rZW4gPSBGVU5DVElPTjsKLSAgICAgICAgICAgICAgICBpZiAoIWhhc0VzY2FwZSkKLSAg
ICAgICAgICAgICAgICAgICAgZGV0ZWN0RGFzaFRva2VuPFNyY0NoYXJhY3RlclR5cGU+KHJlc3Vs
dCAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSk7Ci0gICAgICAgICAgICAgICAgKytj
dXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0gICAgICAgICAgICAgICAgKyty
ZXN1bHQ7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKFVOTElLRUxZKG1fcGFyc2luZ01vZGUgPT0g
TnRoQ2hpbGRNb2RlKSAmJiAhaGFzRXNjYXBlICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwo
dG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpWzFdLCAnbicpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdCAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9PSAyKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZyAiLW4iIGlzIElERU5UIGJ1dCAiLW4rMSIgaXMg
TlRILgotICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VOdGhDaGlsZEV4dHJhPFNyY0NoYXJh
Y3RlclR5cGU+KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBOVEg7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJh
Y3RlclR5cGU+KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKHJlc3VsdCAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSA+PSAzICYmIHRv
a2VuU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKVsyXSA9PSAnLScpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gU3RyaW5nICItbi0iIGlzIElERU5UIGJ1dCAiLW4tMSIgaXMgTlRILgotICAgICAg
ICAgICAgICAgICAgICAvLyBTZXQgY3VycmVudENoYXJhY3RlciB0byBzZWNvbmQgJy0nIG9mICct
bi0nIHRvIGNvbnRpbnVlIHBhcnNpbmcuCi0gICAgICAgICAgICAgICAgICAgIFNyY0NoYXJhY3Rl
clR5cGUqIG5leHRDaGFyYWN0ZXIgPSByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSA9IHRva2VuU3RhcnQ8U3JjQ2hhcmFjdGVy
VHlwZT4oKSArIDI7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZU50aENoaWxkRXh0cmE8
U3JjQ2hhcmFjdGVyVHlwZT4oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV90b2tlbiA9
IE5USDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGN1cnJlbnRDaGFyYWN0ZXI8
U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFJldmVydCB0aGUgY2hhbmdlIHRvIGN1cnJlbnRDaGFyYWN0
ZXIgaWYgdW5zdWNjZXNzZnVsLgotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENoYXJh
Y3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpID0gbmV4dENoYXJhY3RlcjsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
c3VsdFN0cmluZy5zZXRMZW5ndGgocmVzdWx0IC0gdG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBl
PigpKTsKLSAgICAgICAgICAgIHl5bHZhbC0+c3RyaW5nID0gcmVzdWx0U3RyaW5nOwotICAgICAg
ICB9IGVsc2UgaWYgKGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKVswXSA9PSAn
LScgJiYgY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpWzFdID09ICc+Jykgewot
ICAgICAgICAgICAgY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpICs9IDI7Ci0g
ICAgICAgICAgICBtX3Rva2VuID0gU0dNTF9DRDsKLSAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50
Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KClbMF0gPT0gJy0nKSB7Ci0gICAgICAgICAgICAt
LWN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAgICAgICAgICAgIHBhcnNl
SWRlbnRpZmllcihyZXN1bHQsIHJlc3VsdFN0cmluZywgaGFzRXNjYXBlKTsKLSAgICAgICAgICAg
IG1fdG9rZW4gPSBDVVNUT01fUFJPUEVSVFk7Ci0gICAgICAgICAgICB5eWx2YWwtPnN0cmluZyA9
IHJlc3VsdFN0cmluZzsKLSAgICAgICAgfSBlbHNlIGlmIChVTkxJS0VMWShtX3BhcnNpbmdNb2Rl
ID09IE50aENoaWxkTW9kZSkpIHsKLSAgICAgICAgICAgIC8vICItWzAtOV0rbiIgaXMgYWx3YXlz
IGFuIE50aENoaWxkLgotICAgICAgICAgICAgaWYgKHBhcnNlTnRoQ2hpbGQ8U3JjQ2hhcmFjdGVy
VHlwZT4oKSkgewotICAgICAgICAgICAgICAgIHBhcnNlTnRoQ2hpbGRFeHRyYTxTcmNDaGFyYWN0
ZXJUeXBlPigpOwotICAgICAgICAgICAgICAgIG1fdG9rZW4gPSBOVEg7Ci0gICAgICAgICAgICAg
ICAgeXlsdmFsLT5zdHJpbmcuaW5pdCh0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCksIGN1
cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSAtIHRva2VuU3RhcnQ8U3JjQ2hhcmFj
dGVyVHlwZT4oKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0K
LSAgICBjYXNlIENoYXJhY3Rlck90aGVyOgotICAgICAgICAvLyBtX3Rva2VuIGlzIHNpbXBseSB0
aGUgY3VycmVudCBjaGFyYWN0ZXIuCi0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDaGFyYWN0
ZXJOdWxsOgotICAgICAgICAvLyBEbyBub3QgYWR2YW5jZSBwb2ludGVyIGF0IHRoZSBlbmQgb2Yg
aW5wdXQuCi0gICAgICAgIC0tY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwot
ICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ2hhcmFjdGVyV2hpdGVTcGFjZToKLSAgICAgICAg
bV90b2tlbiA9IFdISVRFU1BBQ0U7Ci0gICAgICAgIC8vIE1pZ2h0IHN0YXJ0IHdpdGggYSAnXG4n
LgotICAgICAgICAtLWN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAgICAg
ICAgZG8gewotICAgICAgICAgICAgaWYgKCpjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5
cGU+KCkgPT0gJ1xuJykgewotICAgICAgICAgICAgICAgICsrbV9saW5lTnVtYmVyOwotICAgICAg
ICAgICAgICAgIG1fY29sdW1uT2Zmc2V0Rm9yTGluZSA9IGN1cnJlbnRDaGFyYWN0ZXJPZmZzZXQo
KSArIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICArK2N1cnJlbnRDaGFyYWN0ZXI8U3Jj
Q2hhcmFjdGVyVHlwZT4oKTsKLSAgICAgICAgfSB3aGlsZSAoKmN1cnJlbnRDaGFyYWN0ZXI8U3Jj
Q2hhcmFjdGVyVHlwZT4oKSA8PSAnICcgJiYgKHR5cGVzT2ZBU0NJSUNoYXJhY3RlcnNbKmN1cnJl
bnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKV0gPT0gQ2hhcmFjdGVyV2hpdGVTcGFjZSkp
OwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ2hhcmFjdGVyRW5kQ29uZGl0aW9uUXVlcnk6
IHsKLSAgICAgICAgYm9vbCBpc1BhcnNpbmdDb25kaXRpb24gPSBtX3BhcnNpbmdNb2RlID09IE1l
ZGlhUXVlcnlNb2RlIHx8IG1fcGFyc2luZ01vZGUgPT0gU3VwcG9ydHNNb2RlOwotICAgICAgICBp
ZiAoaXNQYXJzaW5nQ29uZGl0aW9uKQotICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE5vcm1h
bE1vZGU7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQ2hhcmFjdGVyRW5kTnRo
Q2hpbGQ6Ci0gICAgICAgIGlmIChtX3BhcnNpbmdNb2RlID09IE50aENoaWxkTW9kZSkKLSAgICAg
ICAgICAgIG1fcGFyc2luZ01vZGUgPSBOb3JtYWxNb2RlOwotICAgICAgICBicmVhazsKLQotICAg
IGNhc2UgQ2hhcmFjdGVyUXVvdGU6Ci0gICAgICAgIGlmIChjaGVja0FuZFNraXBTdHJpbmcoY3Vy
cmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpLCBtX3Rva2VuKSkgewotICAgICAgICAg
ICAgKytyZXN1bHQ7Ci0gICAgICAgICAgICBwYXJzZVN0cmluZzxTcmNDaGFyYWN0ZXJUeXBlPihy
ZXN1bHQsIHl5bHZhbC0+c3RyaW5nLCBtX3Rva2VuKTsKLSAgICAgICAgICAgIG1fdG9rZW4gPSBT
VFJJTkc7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENoYXJhY3RlckV4
Y2xhbWF0aW9uTWFyazogewotICAgICAgICBTcmNDaGFyYWN0ZXJUeXBlKiBzdGFydCA9IHNraXBX
aGl0ZVNwYWNlKGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSk7Ci0gICAgICAg
IGlmIChpc0VxdWFsVG9DU1NJZGVudGlmaWVyKHN0YXJ0LCAiaW1wb3J0YW50IikpIHsKLSAgICAg
ICAgICAgIG1fdG9rZW4gPSBJTVBPUlRBTlRfU1lNOwotICAgICAgICAgICAgY3VycmVudENoYXJh
Y3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpID0gc3RhcnQgKyA5OwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQ2hhcmFjdGVySGFzaG1hcms6IHsKLSAgICAgICAg
U3JjQ2hhcmFjdGVyVHlwZSogc3RhcnQgPSBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5
cGU+KCk7Ci0gICAgICAgIHJlc3VsdCA9IGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlw
ZT4oKTsKLQotICAgICAgICBpZiAoaXNBU0NJSURpZ2l0KCpjdXJyZW50Q2hhcmFjdGVyPFNyY0No
YXJhY3RlclR5cGU+KCkpKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIG11c3QgYmUgYSB2YWxpZCBo
ZXggbnVtYmVyIHRva2VuLgotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICsrY3Vy
cmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotICAgICAgICAgICAgfSB3aGlsZSAo
aXNBU0NJSUhleERpZ2l0KCpjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkpKTsK
LSAgICAgICAgICAgIG1fdG9rZW4gPSBIRVg7Ci0gICAgICAgICAgICB5eWx2YWwtPnN0cmluZy5p
bml0KHN0YXJ0LCBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgLSBzdGFydCk7
Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNJZGVudGlmaWVyU3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4o
KSkgewotICAgICAgICAgICAgbV90b2tlbiA9IElEU0VMOwotICAgICAgICAgICAgcGFyc2VJZGVu
dGlmaWVyKHJlc3VsdCwgeXlsdmFsLT5zdHJpbmcsIGhhc0VzY2FwZSk7Ci0gICAgICAgICAgICBp
ZiAoIWhhc0VzY2FwZSkgewotICAgICAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGlk
ZW50aWZpZXIgaXMgYWxzbyBhIHZhbGlkIGhleCBudW1iZXIuCi0gICAgICAgICAgICAgICAgU3Jj
Q2hhcmFjdGVyVHlwZSogY3VycmVudCA9IHN0YXJ0OwotICAgICAgICAgICAgICAgIG1fdG9rZW4g
PSBIRVg7Ci0gICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICBpZiAoIWlz
QVNDSUlIZXhEaWdpdCgqY3VycmVudCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdG9r
ZW4gPSBJRFNFTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICsrY3VycmVudDsKLSAgICAgICAgICAgICAg
ICB9IHdoaWxlIChjdXJyZW50IDwgcmVzdWx0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIENoYXJhY3RlclNsYXNoOgotICAgICAg
ICAvLyBJZ25vcmUgY29tbWVudHMuIFRoZXkgYXJlIG5vdCBldmVuIGNvbnNpZGVyZWQgYXMgd2hp
dGUgc3BhY2VzLgotICAgICAgICBpZiAoKmN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlw
ZT4oKSA9PSAnKicpIHsKLSAgICAgICAgICAgICsrY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0
ZXJUeXBlPigpOwotICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFj
dGVyVHlwZT4oKVswXSAhPSAnKicgfHwgY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBl
PigpWzFdICE9ICcvJykgewotICAgICAgICAgICAgICAgIGlmICgqY3VycmVudENoYXJhY3RlcjxT
cmNDaGFyYWN0ZXJUeXBlPigpID09ICdcbicpIHsKLSAgICAgICAgICAgICAgICAgICAgKyttX2xp
bmVOdW1iZXI7Ci0gICAgICAgICAgICAgICAgICAgIG1fY29sdW1uT2Zmc2V0Rm9yTGluZSA9IGN1
cnJlbnRDaGFyYWN0ZXJPZmZzZXQoKSArIDE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgq
Y3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpID09ICdcMCcpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gVW50ZXJtaW5hdGVkIGNvbW1lbnRzIGFyZSBzaW1wbHkgaWdub3JlZC4K
LSAgICAgICAgICAgICAgICAgICAgY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigp
IC09IDI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICArK2N1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlw
ZT4oKSArPSAyOwotICAgICAgICAgICAgZ290byByZXN0YXJ0QWZ0ZXJDb21tZW50OwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDaGFyYWN0ZXJEb2xsYXI6Ci0gICAgICAg
IGlmICgqY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpID09ICc9JykgewotICAg
ICAgICAgICAgKytjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0gICAgICAg
ICAgICBtX3Rva2VuID0gRU5EU1dJVEg7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAg
ICBjYXNlIENoYXJhY3RlckFzdGVyaXNrOgotICAgICAgICBpZiAoKmN1cnJlbnRDaGFyYWN0ZXI8
U3JjQ2hhcmFjdGVyVHlwZT4oKSA9PSAnPScpIHsKLSAgICAgICAgICAgICsrY3VycmVudENoYXJh
Y3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpOwotICAgICAgICAgICAgbV90b2tlbiA9IENPTlRBSU5T
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDaGFyYWN0ZXJQbHVzOgot
ICAgICAgICBpZiAoVU5MSUtFTFkobV9wYXJzaW5nTW9kZSA9PSBOdGhDaGlsZE1vZGUpKSB7Ci0g
ICAgICAgICAgICAvLyBTaW1wbGVzdCBjYXNlLiAiK1swLTldKm4iIGlzIGFsd2F5cyBOdGhDaGls
ZC4KLSAgICAgICAgICAgIGlmIChwYXJzZU50aENoaWxkPFNyY0NoYXJhY3RlclR5cGU+KCkpIHsK
LSAgICAgICAgICAgICAgICBwYXJzZU50aENoaWxkRXh0cmE8U3JjQ2hhcmFjdGVyVHlwZT4oKTsK
LSAgICAgICAgICAgICAgICBtX3Rva2VuID0gTlRIOwotICAgICAgICAgICAgICAgIHl5bHZhbC0+
c3RyaW5nLmluaXQodG9rZW5TdGFydDxTcmNDaGFyYWN0ZXJUeXBlPigpLCBjdXJyZW50Q2hhcmFj
dGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5cGU+KCkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBD
aGFyYWN0ZXJMZXNzOgotICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJU
eXBlPigpWzBdID09ICchJyAmJiBjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KClb
MV0gPT0gJy0nICYmIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKVsyXSA9PSAn
LScpIHsKLSAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKSAr
PSAzOwotICAgICAgICAgICAgbV90b2tlbiA9IFNHTUxfQ0Q7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIENoYXJhY3RlckF0OgotICAgICAgICBpZiAoaXNJZGVudGlmaWVy
U3RhcnQ8U3JjQ2hhcmFjdGVyVHlwZT4oKSkgewotICAgICAgICAgICAgbV90b2tlbiA9IEFUS0VZ
V09SRDsKLSAgICAgICAgICAgICsrcmVzdWx0OwotICAgICAgICAgICAgcGFyc2VJZGVudGlmaWVy
KHJlc3VsdCwgcmVzdWx0U3RyaW5nLCBoYXNFc2NhcGUpOwotICAgICAgICAgICAgZGV0ZWN0QXRU
b2tlbjxTcmNDaGFyYWN0ZXJUeXBlPihyZXN1bHQgLSB0b2tlblN0YXJ0PFNyY0NoYXJhY3RlclR5
cGU+KCksIGhhc0VzY2FwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IENoYXJhY3RlckJhY2tTbGFzaDoKLSAgICAgICAgaWYgKGlzQ1NTRXNjYXBlKCpjdXJyZW50Q2hh
cmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkpKSB7Ci0gICAgICAgICAgICAtLWN1cnJlbnRDaGFy
YWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAgICAgICAgICAgIHBhcnNlSWRlbnRpZmllcihy
ZXN1bHQsIHl5bHZhbC0+c3RyaW5nLCBoYXNFc2NhcGUpOwotICAgICAgICAgICAgbV90b2tlbiA9
IElERU5UOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX3BhcnNpbmdNb2RlID09IE50aENoaWxk
TW9kZSAmJiBtX3Rva2VuID09IElERU5UICYmIHl5bHZhbC0+c3RyaW5nLmxlbmd0aCgpID09IDIg
JiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoeXlsdmFsLT5zdHJpbmcsICJvZiIpKSB7
Ci0gICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTm9ybWFsTW9kZTsKLSAgICAgICAgICAgIG1f
dG9rZW4gPSBOVEhDSElMRFNFTEVDVE9SU0VQQVJBVE9SOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgY2FzZSBDaGFyYWN0ZXJYb3I6Ci0gICAgICAgIGlmICgqY3VycmVudENoYXJh
Y3RlcjxTcmNDaGFyYWN0ZXJUeXBlPigpID09ICc9JykgewotICAgICAgICAgICAgKytjdXJyZW50
Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCk7Ci0gICAgICAgICAgICBtX3Rva2VuID0gQkVH
SU5TV0lUSDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ2hhcmFjdGVy
VmVydGljYWxCYXI6Ci0gICAgICAgIGlmICgqY3VycmVudENoYXJhY3RlcjxTcmNDaGFyYWN0ZXJU
eXBlPigpID09ICc9JykgewotICAgICAgICAgICAgKytjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJh
Y3RlclR5cGU+KCk7Ci0gICAgICAgICAgICBtX3Rva2VuID0gREFTSE1BVENIOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDaGFyYWN0ZXJUaWxkZToKLSAgICAgICAgaWYg
KCpjdXJyZW50Q2hhcmFjdGVyPFNyY0NoYXJhY3RlclR5cGU+KCkgPT0gJz0nKSB7Ci0gICAgICAg
ICAgICArK2N1cnJlbnRDaGFyYWN0ZXI8U3JjQ2hhcmFjdGVyVHlwZT4oKTsKLSAgICAgICAgICAg
IG1fdG9rZW4gPSBJTkNMVURFUzsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdG9rZW4oKTsKLX0KLQotUmVmUHRyPFN0eWxlUnVsZUltcG9ydD4g
Q1NTUGFyc2VyOjpjcmVhdGVJbXBvcnRSdWxlKGNvbnN0IENTU1BhcnNlclN0cmluZyYgdXJsLCBS
ZWZQdHI8TWVkaWFRdWVyeVNldD4mJiBtZWRpYSkKLXsKLSAgICBpZiAoIW1lZGlhIHx8ICFtX2Fs
bG93SW1wb3J0UnVsZXMpIHsKLSAgICAgICAgcG9wUnVsZURhdGEoKTsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotICAgIGF1dG8gcnVsZSA9IFN0eWxlUnVsZUltcG9ydDo6Y3JlYXRl
KHVybCwgbWVkaWEucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgcHJvY2Vzc0FuZEFkZE5ld1J1bGVU
b1NvdXJjZVRyZWVJZk5lZWRlZCgpOwotICAgIHJldHVybiBXVEZNb3ZlKHJ1bGUpOwotfQotCi1S
ZWY8U3R5bGVSdWxlTWVkaWE+IENTU1BhcnNlcjo6Y3JlYXRlTWVkaWFSdWxlKFJlZlB0cjxNZWRp
YVF1ZXJ5U2V0PiYmIG1lZGlhLCBSdWxlTGlzdCogcnVsZXMpCi17Ci0gICAgbV9hbGxvd0ltcG9y
dFJ1bGVzID0gbV9hbGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucyA9IGZhbHNlOwotICAgIFJlZlB0
cjxTdHlsZVJ1bGVNZWRpYT4gcnVsZTsKLSAgICBSdWxlTGlzdCBlbXB0eVJ1bGVzOwotICAgIGlm
ICghbWVkaWEpIHsKLSAgICAgICAgLy8gVG8gY29tcGx5IHdpdGggdzNjIHRlc3Qgc3VpdGUgZXhw
ZWN0YXRpb24sIGNyZWF0ZSBhbiBlbXB0eSBtZWRpYSBxdWVyeQotICAgICAgICAvLyBldmVuIHdo
ZW4gaXQgaXMgc3ludGFjdGljYWxseSBpbmNvcnJlY3QuCi0gICAgICAgIHJ1bGUgPSBTdHlsZVJ1
bGVNZWRpYTo6Y3JlYXRlKE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZSgpLCBlbXB0eVJ1bGVzKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBtZWRpYS0+c2hyaW5rVG9GaXQoKTsKLSAgICAgICAgcnVsZSA9
IFN0eWxlUnVsZU1lZGlhOjpjcmVhdGUobWVkaWEucmVsZWFzZU5vbk51bGwoKSwgcnVsZXMgPyAq
cnVsZXMgOiBlbXB0eVJ1bGVzKTsKLSAgICB9Ci0gICAgcHJvY2Vzc0FuZEFkZE5ld1J1bGVUb1Nv
dXJjZVRyZWVJZk5lZWRlZCgpOwotICAgIHJldHVybiBydWxlLnJlbGVhc2VOb25OdWxsKCk7Ci19
Ci0KLVJlZjxTdHlsZVJ1bGVNZWRpYT4gQ1NTUGFyc2VyOjpjcmVhdGVFbXB0eU1lZGlhUnVsZShS
dWxlTGlzdCogcnVsZXMpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZU1lZGlhUnVsZShNZWRpYVF1ZXJ5
U2V0OjpjcmVhdGUoKSwgcnVsZXMpOwotfQotCi1SZWY8U3R5bGVSdWxlU3VwcG9ydHM+IENTU1Bh
cnNlcjo6Y3JlYXRlU3VwcG9ydHNSdWxlKGJvb2wgY29uZGl0aW9uSXNTdXBwb3J0ZWQsIFJ1bGVM
aXN0KiBydWxlcykKLXsKLSAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNl
RGVjbGFyYXRpb25zID0gZmFsc2U7Ci0KLSAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IGRh
dGEgPSBwb3BTdXBwb3J0c1J1bGVEYXRhKCk7Ci0gICAgU3RyaW5nIGNvbmRpdGlvblRleHQ7Ci0g
ICAgdW5zaWduZWQgY29uZGl0aW9uT2Zmc2V0ID0gZGF0YS0+cnVsZUhlYWRlclJhbmdlLnN0YXJ0
ICsgOTsKLSAgICB1bnNpZ25lZCBjb25kaXRpb25MZW5ndGggPSBkYXRhLT5ydWxlSGVhZGVyUmFu
Z2UubGVuZ3RoKCkgLSA5OwotCi0gICAgaWYgKGlzOEJpdFNvdXJjZSgpKQotICAgICAgICBjb25k
aXRpb25UZXh0ID0gU3RyaW5nKG1fZGF0YVN0YXJ0OC5nZXQoKSArIGNvbmRpdGlvbk9mZnNldCwg
Y29uZGl0aW9uTGVuZ3RoKS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICBlbHNlCi0gICAgICAgIGNv
bmRpdGlvblRleHQgPSBTdHJpbmcobV9kYXRhU3RhcnQxNi5nZXQoKSArIGNvbmRpdGlvbk9mZnNl
dCwgY29uZGl0aW9uTGVuZ3RoKS5zdHJpcFdoaXRlU3BhY2UoKTsKLQotICAgIFJlZlB0cjxTdHls
ZVJ1bGVTdXBwb3J0cz4gcnVsZTsKLSAgICBpZiAocnVsZXMpCi0gICAgICAgIHJ1bGUgPSBTdHls
ZVJ1bGVTdXBwb3J0czo6Y3JlYXRlKGNvbmRpdGlvblRleHQsIGNvbmRpdGlvbklzU3VwcG9ydGVk
LCAqcnVsZXMpOwotICAgIGVsc2UgewotICAgICAgICBSdWxlTGlzdCBlbXB0eVJ1bGVzOwotICAg
ICAgICBydWxlID0gU3R5bGVSdWxlU3VwcG9ydHM6OmNyZWF0ZShjb25kaXRpb25UZXh0LCBjb25k
aXRpb25Jc1N1cHBvcnRlZCwgZW1wdHlSdWxlcyk7Ci0gICAgfQotCi0gICAgcHJvY2Vzc0FuZEFk
ZE5ld1J1bGVUb1NvdXJjZVRyZWVJZk5lZWRlZCgpOwotCi0gICAgcmV0dXJuIHJ1bGUucmVsZWFz
ZU5vbk51bGwoKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6Om1hcmtTdXBwb3J0c1J1bGVIZWFkZXJT
dGFydCgpCi17Ci0gICAgaWYgKCFtX3N1cHBvcnRzUnVsZURhdGFTdGFjaykKLSAgICAgICAgbV9z
dXBwb3J0c1J1bGVEYXRhU3RhY2sgPSBzdGQ6Om1ha2VfdW5pcXVlPFJ1bGVTb3VyY2VEYXRhTGlz
dD4oKTsKLQotICAgIGF1dG8gZGF0YSA9IENTU1J1bGVTb3VyY2VEYXRhOjpjcmVhdGUoQ1NTUnVs
ZVNvdXJjZURhdGE6OlNVUFBPUlRTX1JVTEUpOwotICAgIGRhdGEtPnJ1bGVIZWFkZXJSYW5nZS5z
dGFydCA9IHRva2VuU3RhcnRPZmZzZXQoKTsKLSAgICBtX3N1cHBvcnRzUnVsZURhdGFTdGFjay0+
YXBwZW5kKFdURk1vdmUoZGF0YSkpOwotfQotCi12b2lkIENTU1BhcnNlcjo6bWFya1N1cHBvcnRz
UnVsZUhlYWRlckVuZCgpCi17Ci0gICAgQVNTRVJUKG1fc3VwcG9ydHNSdWxlRGF0YVN0YWNrICYm
ICFtX3N1cHBvcnRzUnVsZURhdGFTdGFjay0+aXNFbXB0eSgpKTsKLQotICAgIGlmIChpczhCaXRT
b3VyY2UoKSkKLSAgICAgICAgbV9zdXBwb3J0c1J1bGVEYXRhU3RhY2stPmxhc3QoKS0+cnVsZUhl
YWRlclJhbmdlLmVuZCA9IHRva2VuU3RhcnQ8TENoYXI+KCkgLSBtX2RhdGFTdGFydDguZ2V0KCk7
Ci0gICAgZWxzZQotICAgICAgICBtX3N1cHBvcnRzUnVsZURhdGFTdGFjay0+bGFzdCgpLT5ydWxl
SGVhZGVyUmFuZ2UuZW5kID0gdG9rZW5TdGFydDxVQ2hhcj4oKSAtIG1fZGF0YVN0YXJ0MTYuZ2V0
KCk7Ci19Ci0KLVJlZjxDU1NSdWxlU291cmNlRGF0YT4gQ1NTUGFyc2VyOjpwb3BTdXBwb3J0c1J1
bGVEYXRhKCkKLXsKLSAgICBBU1NFUlQobV9zdXBwb3J0c1J1bGVEYXRhU3RhY2sgJiYgIW1fc3Vw
cG9ydHNSdWxlRGF0YVN0YWNrLT5pc0VtcHR5KCkpOwotICAgIHJldHVybiBtX3N1cHBvcnRzUnVs
ZURhdGFTdGFjay0+dGFrZUxhc3QoKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OnByb2Nlc3NBbmRB
ZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKQotewotICAgIGlmICghaXNFeHRyYWN0aW5n
U291cmNlRGF0YSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbWFya1J1bGVCb2R5RW5kKCk7Ci0g
ICAgUmVmPENTU1J1bGVTb3VyY2VEYXRhPiBydWxlID0gKnBvcFJ1bGVEYXRhKCk7Ci0gICAgZml4
VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhydWxlKTsKLSAgICBhZGROZXdSdWxlVG9Tb3VyY2VUcmVl
KFdURk1vdmUocnVsZSkpOwotfQotCi12b2lkIENTU1BhcnNlcjo6YWRkTmV3UnVsZVRvU291cmNl
VHJlZShSZWY8Q1NTUnVsZVNvdXJjZURhdGE+JiYgcnVsZSkKLXsKLSAgICAvLyBQcmVjb25kaXRp
b246IChpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpLgotICAgIGlmICghbV9ydWxlU291cmNlRGF0
YVJlc3VsdCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX2N1cnJlbnRSdWxlRGF0YVN0YWNr
LT5pc0VtcHR5KCkpCi0gICAgICAgIG1fcnVsZVNvdXJjZURhdGFSZXN1bHQtPmFwcGVuZChXVEZN
b3ZlKHJ1bGUpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmxh
c3QoKS0+Y2hpbGRSdWxlcy5hcHBlbmQoV1RGTW92ZShydWxlKSk7Ci19Ci0KLVJlZlB0cjxDU1NS
dWxlU291cmNlRGF0YT4gQ1NTUGFyc2VyOjpwb3BSdWxlRGF0YSgpCi17Ci0gICAgaWYgKCFtX3J1
bGVTb3VyY2VEYXRhUmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEFTU0VS
VCghbV9jdXJyZW50UnVsZURhdGFTdGFjay0+aXNFbXB0eSgpKTsKLSAgICBtX2N1cnJlbnRSdWxl
RGF0YSA9IG51bGxwdHI7Ci0gICAgcmV0dXJuIG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPnRha2VM
YXN0KCk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjpzeW50YXhFcnJvcihjb25zdCBMb2NhdGlvbiYg
bG9jYXRpb24sIFN5bnRheEVycm9yVHlwZSBlcnJvcikKLXsKLSAgICBpZiAoIWlzTG9nZ2luZ0Vy
cm9ycygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0g
ICAgc3dpdGNoIChlcnJvcikgewotICAgIGNhc2UgUHJvcGVydHlEZWNsYXJhdGlvbkVycm9yOgot
ICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIkludmFsaWQgQ1NTIHByb3BlcnR5IGRlY2xh
cmF0aW9uIGF0OiAiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnVp
bGRlci5hcHBlbmRMaXRlcmFsKCJVbmV4cGVjdGVkIENTUyB0b2tlbjogIik7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIGlmIChsb2NhdGlvbi50b2tlbi5pczhCaXQoKSkKLSAgICAgICAg
YnVpbGRlci5hcHBlbmQobG9jYXRpb24udG9rZW4uY2hhcmFjdGVyczgoKSwgbG9jYXRpb24udG9r
ZW4ubGVuZ3RoKCkpOwotICAgIGVsc2UKLSAgICAgICAgYnVpbGRlci5hcHBlbmQobG9jYXRpb24u
dG9rZW4uY2hhcmFjdGVyczE2KCksIGxvY2F0aW9uLnRva2VuLmxlbmd0aCgpKTsKLQotICAgIGxv
Z0Vycm9yKGJ1aWxkZXIudG9TdHJpbmcoKSwgbG9jYXRpb24ubGluZU51bWJlciwgbG9jYXRpb24u
Y29sdW1uTnVtYmVyKTsKLQotICAgIG1faWdub3JlRXJyb3JzSW5EZWNsYXJhdGlvbiA9IHRydWU7
Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyOjppc0xvZ2dpbmdFcnJvcnMoKQotewotICAgIHJldHVybiBt
X2xvZ0Vycm9ycyAmJiAhbV9pZ25vcmVFcnJvcnNJbkRlY2xhcmF0aW9uOwotfQotCi12b2lkIENT
U1BhcnNlcjo6bG9nRXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBpbnQgbGluZU51bWJlciwg
aW50IGNvbHVtbk51bWJlcikKLXsKLSAgICBQYWdlQ29uc29sZUNsaWVudCYgY29uc29sZSA9IG1f
c3R5bGVTaGVldC0+c2luZ2xlT3duZXJEb2N1bWVudCgpLT5wYWdlKCktPmNvbnNvbGUoKTsKLSAg
ICBjb25zb2xlLmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6Q1NTLCBNZXNzYWdlTGV2ZWw6Oldh
cm5pbmcsIG1lc3NhZ2UsIG1fc3R5bGVTaGVldC0+YmFzZVVSTCgpLnN0cmluZygpLCBsaW5lTnVt
YmVyICsgMSwgY29sdW1uTnVtYmVyICsgMSk7Ci19Ci0KLVJlZjxTdHlsZVJ1bGVLZXlmcmFtZXM+
IENTU1BhcnNlcjo6Y3JlYXRlS2V5ZnJhbWVzUnVsZShjb25zdCBTdHJpbmcmIG5hbWUsIHN0ZDo6
dW5pcXVlX3B0cjxWZWN0b3I8UmVmUHRyPFN0eWxlS2V5ZnJhbWU+Pj4ga2V5ZnJhbWVzKQotewot
ICAgIG1fYWxsb3dJbXBvcnRSdWxlcyA9IG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMgPSBm
YWxzZTsKLSAgICBSZWY8U3R5bGVSdWxlS2V5ZnJhbWVzPiBydWxlID0gU3R5bGVSdWxlS2V5ZnJh
bWVzOjpjcmVhdGUoKTsKLSAgICBmb3IgKGF1dG8mIGtleUZyYW1lIDogKmtleWZyYW1lcykKLSAg
ICAgICAgcnVsZS0+cGFyc2VyQXBwZW5kS2V5ZnJhbWUoV1RGTW92ZShrZXlGcmFtZSkpOwotICAg
IHJ1bGUtPnNldE5hbWUobmFtZSk7Ci0gICAgcHJvY2Vzc0FuZEFkZE5ld1J1bGVUb1NvdXJjZVRy
ZWVJZk5lZWRlZCgpOwotICAgIHJldHVybiBydWxlOwotfQotCi1SZWZQdHI8U3R5bGVSdWxlPiBD
U1NQYXJzZXI6OmNyZWF0ZVN0eWxlUnVsZShWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNl
clNlbGVjdG9yPj4qIHNlbGVjdG9ycykKLXsKLSAgICBSZWZQdHI8U3R5bGVSdWxlPiBydWxlOwot
ICAgIGlmIChzZWxlY3RvcnMpIHsKLSAgICAgICAgbV9hbGxvd0ltcG9ydFJ1bGVzID0gZmFsc2U7
Ci0gICAgICAgIG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMgPSBmYWxzZTsKLSAgICAgICAg
cnVsZSA9IFN0eWxlUnVsZTo6Y3JlYXRlKG1fbGFzdFNlbGVjdG9yTGluZU51bWJlciwgY3JlYXRl
U3R5bGVQcm9wZXJ0aWVzKCkpOwotICAgICAgICBydWxlLT5wYXJzZXJBZG9wdFNlbGVjdG9yVmVj
dG9yKCpzZWxlY3RvcnMpOwotICAgICAgICBwcm9jZXNzQW5kQWRkTmV3UnVsZVRvU291cmNlVHJl
ZUlmTmVlZGVkKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHBvcFJ1bGVEYXRhKCk7Ci0gICAgY2xl
YXJQcm9wZXJ0aWVzKCk7Ci0gICAgcmV0dXJuIHJ1bGU7Ci19Ci0KLVJlZlB0cjxTdHlsZVJ1bGVG
b250RmFjZT4gQ1NTUGFyc2VyOjpjcmVhdGVGb250RmFjZVJ1bGUoKQotewotICAgIG1fYWxsb3dJ
bXBvcnRSdWxlcyA9IG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMgPSBmYWxzZTsKLSAgICBm
b3IgKGF1dG8mIHByb3BlcnR5IDogbV9wYXJzZWRQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIGlmIChw
cm9wZXJ0eS5pZCgpID09IENTU1Byb3BlcnR5Rm9udEZhbWlseSAmJiAoIWlzPENTU1ZhbHVlTGlz
dD4oKnByb3BlcnR5LnZhbHVlKCkpIHx8IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnByb3BlcnR5
LnZhbHVlKCkpLmxlbmd0aCgpICE9IDEpKSB7Ci0gICAgICAgICAgICAvLyBVbmxpa2UgZm9udC1m
YW1pbHkgcHJvcGVydHksIGZvbnQtZmFtaWx5IGRlc2NyaXB0b3IgaW4gQGZvbnQtZmFjZSBydWxl
Ci0gICAgICAgICAgICAvLyBoYXMgdG8gYmUgYSB2YWx1ZSBsaXN0IHdpdGggZXhhY3RseSBvbmUg
ZmFtaWx5IG5hbWUuIEl0IGNhbm5vdCBoYXZlIGEKLSAgICAgICAgICAgIC8vIGhhdmUgJ2luaXRp
YWwnIHZhbHVlIGFuZCBjYW5ub3QgJ2luaGVyaXQnIGZyb20gcGFyZW50LgotICAgICAgICAgICAg
Ly8gU2VlIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2NzczMtZm9udHMvI2ZvbnQtZmFtaWx5LWRl
c2MKLSAgICAgICAgICAgIGNsZWFyUHJvcGVydGllcygpOwotICAgICAgICAgICAgcG9wUnVsZURh
dGEoKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgfQotICAg
IGF1dG8gcnVsZSA9IFN0eWxlUnVsZUZvbnRGYWNlOjpjcmVhdGUoY3JlYXRlU3R5bGVQcm9wZXJ0
aWVzKCkpOwotICAgIGNsZWFyUHJvcGVydGllcygpOwotICAgIHByb2Nlc3NBbmRBZGROZXdSdWxl
VG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKLSAgICByZXR1cm4gV1RGTW92ZShydWxlKTsKLX0KLQot
dm9pZCBDU1NQYXJzZXI6OmFkZE5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwg
Y29uc3QgQXRvbWljU3RyaW5nJiB1cmkpCi17Ci0gICAgaWYgKCFtX3N0eWxlU2hlZXQgfHwgIW1f
YWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2FsbG93
SW1wb3J0UnVsZXMgPSBmYWxzZTsKLSAgICBtX3N0eWxlU2hlZXQtPnBhcnNlckFkZE5hbWVzcGFj
ZShwcmVmaXgsIHVyaSk7Ci0gICAgaWYgKHByZWZpeC5pc0VtcHR5KCkgJiYgIXVyaS5pc051bGwo
KSkKLSAgICAgICAgbV9kZWZhdWx0TmFtZXNwYWNlID0gdXJpOwotfQotCi1RdWFsaWZpZWROYW1l
IENTU1BhcnNlcjo6ZGV0ZXJtaW5lTmFtZUluTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYg
cHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKLXsKLSAgICBpZiAocHJlZml4
LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxO
YW1lLCBudWxsQXRvbSk7IC8vIE5vIG5hbWVzcGFjZS4gSWYgYW4gZWxlbWVudC9hdHRyaWJ1dGUg
aGFzIGEgbmFtZXNwYWNlLCB3ZSB3b24ndCBtYXRjaCBpdC4KLSAgICBpZiAocHJlZml4LmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIFF1YWxpZmllZE5hbWUoZW1wdHlBdG9tLCBsb2NhbE5hbWUs
IGVtcHR5QXRvbSk7IC8vIEVtcHR5IG5hbWVzcGFjZS4KLSAgICBpZiAocHJlZml4ID09IHN0YXJB
dG9tKQotICAgICAgICByZXR1cm4gUXVhbGlmaWVkTmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgc3Rh
ckF0b20pOyAvLyBXZSdsbCBtYXRjaCBhbnkgbmFtZXNwYWNlLgotCi0gICAgaWYgKCFtX3N0eWxl
U2hlZXQpCi0gICAgICAgIHJldHVybiBRdWFsaWZpZWROYW1lKHByZWZpeCwgbG9jYWxOYW1lLCBt
X2RlZmF1bHROYW1lc3BhY2UpOwotICAgIHJldHVybiBRdWFsaWZpZWROYW1lKHByZWZpeCwgbG9j
YWxOYW1lLCBtX3N0eWxlU2hlZXQtPmRldGVybWluZU5hbWVzcGFjZShwcmVmaXgpKTsKLX0KLQot
dm9pZCBDU1NQYXJzZXI6OnJld3JpdGVTcGVjaWZpZXJzV2l0aE5hbWVzcGFjZUlmTmVlZGVkKENT
U1BhcnNlclNlbGVjdG9yJiBzcGVjaWZpZXJzKQotewotICAgIGlmIChtX2RlZmF1bHROYW1lc3Bh
Y2UgIT0gc3RhckF0b20gfHwgc3BlY2lmaWVycy5pc0N1c3RvbVBzZXVkb0VsZW1lbnQoKSkgewot
ICAgICAgICBRdWFsaWZpZWROYW1lIGVsZW1lbnROYW1lKG51bGxBdG9tLCBzdGFyQXRvbSwgbV9k
ZWZhdWx0TmFtZXNwYWNlKTsKLSAgICAgICAgcmV3cml0ZVNwZWNpZmllcnNXaXRoRWxlbWVudE5h
bWUoZWxlbWVudE5hbWUsIHNwZWNpZmllcnMsIC8qdGFnSXNGb3JOYW1lc3BhY2VSdWxlKi90cnVl
KTsKLSAgICB9Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjpyZXdyaXRlU3BlY2lmaWVyc1dpdGhFbGVt
ZW50TmFtZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVByZWZpeCwgY29uc3QgQXRvbWlj
U3RyaW5nJiBlbGVtZW50TmFtZSwgQ1NTUGFyc2VyU2VsZWN0b3ImIHNwZWNpZmllcnMpCi17Ci0g
ICAgUXVhbGlmaWVkTmFtZSB0YWcoZGV0ZXJtaW5lTmFtZUluTmFtZXNwYWNlKG5hbWVzcGFjZVBy
ZWZpeCwgZWxlbWVudE5hbWUpKTsKLSAgICByZXdyaXRlU3BlY2lmaWVyc1dpdGhFbGVtZW50TmFt
ZSh0YWcsIHNwZWNpZmllcnMsIGZhbHNlKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OnJld3JpdGVT
cGVjaWZpZXJzV2l0aEVsZW1lbnROYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZywgQ1NTUGFy
c2VyU2VsZWN0b3ImIHNwZWNpZmllcnMsIGJvb2wgdGFnSXNGb3JOYW1lc3BhY2VSdWxlKQotewot
ICAgIGlmICghc3BlY2lmaWVycy5pc0N1c3RvbVBzZXVkb0VsZW1lbnQoKSkgewotICAgICAgICBp
ZiAodGFnID09IGFueVFOYW1lKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICgh
c3BlY2lmaWVycy5pc1BzZXVkb0VsZW1lbnRDdWVGdW5jdGlvbigpKQotICAgICAgICAgICAgc3Bl
Y2lmaWVycy5wcmVwZW5kVGFnU2VsZWN0b3IodGFnLCB0YWdJc0Zvck5hbWVzcGFjZVJ1bGUpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ1NTUGFyc2VyU2VsZWN0b3IqIGxhc3RTaGFk
b3dEZXNjZW5kYW50ID0gJnNwZWNpZmllcnM7Ci0gICAgQ1NTUGFyc2VyU2VsZWN0b3IqIGhpc3Rv
cnkgPSAmc3BlY2lmaWVyczsKLSAgICB3aGlsZSAoaGlzdG9yeS0+dGFnSGlzdG9yeSgpKSB7Ci0g
ICAgICAgIGhpc3RvcnkgPSBoaXN0b3J5LT50YWdIaXN0b3J5KCk7Ci0gICAgICAgIGlmIChoaXN0
b3J5LT5pc0N1c3RvbVBzZXVkb0VsZW1lbnQoKSB8fCBoaXN0b3J5LT5oYXNTaGFkb3dEZXNjZW5k
YW50KCkpCi0gICAgICAgICAgICBsYXN0U2hhZG93RGVzY2VuZGFudCA9IGhpc3Rvcnk7Ci0gICAg
fQotCi0gICAgaWYgKGxhc3RTaGFkb3dEZXNjZW5kYW50LT50YWdIaXN0b3J5KCkpIHsKLSAgICAg
ICAgaWYgKHRhZyAhPSBhbnlRTmFtZSgpKQotICAgICAgICAgICAgbGFzdFNoYWRvd0Rlc2NlbmRh
bnQtPnRhZ0hpc3RvcnkoKS0+cHJlcGVuZFRhZ1NlbGVjdG9yKHRhZywgdGFnSXNGb3JOYW1lc3Bh
Y2VSdWxlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZvciBzaGFkb3ctSUQg
cHNldWRvLWVsZW1lbnRzIHRvIGJlIGNvcnJlY3RseSBtYXRjaGVkLCB0aGUgU2hhZG93RGVzY2Vu
ZGFudCBjb21iaW5hdG9yIGhhcyB0byBiZSB1c2VkLgotICAgIC8vIFdlIHRoZXJlZm9yZSBjcmVh
dGUgYSBuZXcgU2VsZWN0b3Igd2l0aCB0aGF0IGNvbWJpbmF0b3IgaGVyZSBpbiBhbnkgY2FzZSwg
ZXZlbiBpZiBtYXRjaGluZyBhbnkgKGhvc3QpIGVsZW1lbnQgaW4gYW55IG5hbWVzcGFjZSAoaS5l
LiAnKicpLgotICAgIGxhc3RTaGFkb3dEZXNjZW5kYW50LT5zZXRUYWdIaXN0b3J5KHN0ZDo6bWFr
ZV91bmlxdWU8Q1NTUGFyc2VyU2VsZWN0b3I+KHRhZykpOwotICAgIGxhc3RTaGFkb3dEZXNjZW5k
YW50LT5zZXRSZWxhdGlvbihDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2VuZGFudCk7Ci19Ci0KLXN0
ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gQ1NTUGFyc2VyOjpyZXdyaXRlU3BlY2lm
aWVycyhzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNwZWNpZmllcnMsIHN0ZDo6
dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gbmV3U3BlY2lmaWVyKQotewotICAgIGlmIChu
ZXdTcGVjaWZpZXItPmlzQ3VzdG9tUHNldWRvRWxlbWVudCgpIHx8IG5ld1NwZWNpZmllci0+aXNQ
c2V1ZG9FbGVtZW50Q3VlRnVuY3Rpb24oKSkgewotICAgICAgICAvLyBVbmtub3duIHBzZXVkbyBl
bGVtZW50IGFsd2F5cyBnb2VzIGF0IHRoZSB0b3Agb2Ygc2VsZWN0b3IgY2hhaW4uCi0gICAgICAg
IG5ld1NwZWNpZmllci0+YXBwZW5kVGFnSGlzdG9yeShDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2Vu
ZGFudCwgV1RGTW92ZShzcGVjaWZpZXJzKSk7Ci0gICAgICAgIHJldHVybiBuZXdTcGVjaWZpZXI7
Ci0gICAgfQotICAgIGlmIChzcGVjaWZpZXJzLT5pc0N1c3RvbVBzZXVkb0VsZW1lbnQoKSkgewot
ICAgICAgICAvLyBTcGVjaWZpZXJzIGZvciB1bmtub3duIHBzZXVkbyBlbGVtZW50IGdvIHJpZ2h0
IGJlaGluZCBpdCBpbiB0aGUgY2hhaW4uCi0gICAgICAgIHNwZWNpZmllcnMtPmluc2VydFRhZ0hp
c3RvcnkoQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yLCBXVEZNb3ZlKG5ld1NwZWNpZmllciksIENT
U1NlbGVjdG9yOjpTaGFkb3dEZXNjZW5kYW50KTsKLSAgICAgICAgcmV0dXJuIHNwZWNpZmllcnM7
Ci0gICAgfQotICAgIHNwZWNpZmllcnMtPmFwcGVuZFRhZ0hpc3RvcnkoQ1NTU2VsZWN0b3I6OlN1
YlNlbGVjdG9yLCBXVEZNb3ZlKG5ld1NwZWNpZmllcikpOwotICAgIHJldHVybiBzcGVjaWZpZXJz
OwotfQotCi1SZWZQdHI8U3R5bGVSdWxlUGFnZT4gQ1NTUGFyc2VyOjpjcmVhdGVQYWdlUnVsZShz
dGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHBhZ2VTZWxlY3RvcikKLXsKLSAgICAv
LyBGSVhNRTogTWFyZ2luIGF0LXJ1bGVzIGFyZSBpZ25vcmVkLgotICAgIG1fYWxsb3dJbXBvcnRS
dWxlcyA9IG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMgPSBmYWxzZTsKLSAgICBpZiAocGFn
ZVNlbGVjdG9yKSB7Ci0gICAgICAgIGF1dG8gcnVsZSA9IFN0eWxlUnVsZVBhZ2U6OmNyZWF0ZShj
cmVhdGVTdHlsZVByb3BlcnRpZXMoKSk7Ci0gICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
Q1NTUGFyc2VyU2VsZWN0b3I+PiBzZWxlY3RvclZlY3RvcjsKLSAgICAgICAgc2VsZWN0b3JWZWN0
b3IuYXBwZW5kKFdURk1vdmUocGFnZVNlbGVjdG9yKSk7Ci0gICAgICAgIHJ1bGUtPnBhcnNlckFk
b3B0U2VsZWN0b3JWZWN0b3Ioc2VsZWN0b3JWZWN0b3IpOwotICAgICAgICBwcm9jZXNzQW5kQWRk
TmV3UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKCk7Ci0gICAgICAgIGNsZWFyUHJvcGVydGllcygp
OwotICAgICAgICByZXR1cm4gV1RGTW92ZShydWxlKTsKLSAgICB9Ci0KLSAgICBwb3BSdWxlRGF0
YSgpOwotICAgIGNsZWFyUHJvcGVydGllcygpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1z
dGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+
PiBDU1NQYXJzZXI6OmNyZWF0ZVNlbGVjdG9yVmVjdG9yKCkKLXsKLSAgICBpZiAobV9yZWN5Y2xl
ZFNlbGVjdG9yVmVjdG9yKSB7Ci0gICAgICAgIG1fcmVjeWNsZWRTZWxlY3RvclZlY3Rvci0+c2hy
aW5rKDApOwotICAgICAgICByZXR1cm4gV1RGTW92ZShtX3JlY3ljbGVkU2VsZWN0b3JWZWN0b3Ip
OwotICAgIH0KLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPENTU1BhcnNlclNlbGVjdG9yPj4+KCk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjpyZWN5Y2xl
U2VsZWN0b3JWZWN0b3Ioc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NT
UGFyc2VyU2VsZWN0b3I+Pj4gdmVjdG9yKQotewotICAgIGlmICh2ZWN0b3IgJiYgIW1fcmVjeWNs
ZWRTZWxlY3RvclZlY3RvcikKLSAgICAgICAgbV9yZWN5Y2xlZFNlbGVjdG9yVmVjdG9yID0gV1RG
TW92ZSh2ZWN0b3IpOwotfQotCi1SZWZQdHI8U3R5bGVSdWxlUmVnaW9uPiBDU1NQYXJzZXI6OmNy
ZWF0ZVJlZ2lvblJ1bGUoVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+
KiByZWdpb25TZWxlY3RvciwgUnVsZUxpc3QqIHJ1bGVzKQotewotICAgIGlmICghcmVnaW9uU2Vs
ZWN0b3IgfHwgIXJ1bGVzKSB7Ci0gICAgICAgIHBvcFJ1bGVEYXRhKCk7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLQotICAgIG1fYWxsb3dJbXBvcnRSdWxlcyA9IG1fYWxsb3dOYW1l
c3BhY2VEZWNsYXJhdGlvbnMgPSBmYWxzZTsKLQotICAgIGF1dG8gcmVnaW9uUnVsZSA9IFN0eWxl
UnVsZVJlZ2lvbjo6Y3JlYXRlKHJlZ2lvblNlbGVjdG9yLCAqcnVsZXMpOwotCi0gICAgaWYgKGlz
RXh0cmFjdGluZ1NvdXJjZURhdGEoKSkKLSAgICAgICAgYWRkTmV3UnVsZVRvU291cmNlVHJlZShD
U1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlVW5rbm93bigpKTsKLQotICAgIHJldHVybiBXVEZNb3Zl
KHJlZ2lvblJ1bGUpOwotfQotCi12b2lkIENTU1BhcnNlcjo6Y3JlYXRlTWFyZ2luQXRSdWxlKENT
U1NlbGVjdG9yOjpNYXJnaW5Cb3hUeXBlIC8qIG1hcmdpbkJveCAqLykKLXsKLSAgICAvLyBGSVhN
RTogSW1wbGVtZW50IG1hcmdpbiBhdC1ydWxlIGhlcmUsIHVzaW5nOgotICAgIC8vICAgICAgICAt
IG1hcmdpbkJveDogbWFyZ2luIGJveAotICAgIC8vICAgICAgICAtIG1fcGFyc2VkUHJvcGVydGll
czogcHJvcGVydGllcyBhdCBbbV9udW1QYXJzZWRQcm9wZXJ0aWVzQmVmb3JlTWFyZ2luQm94LCBt
X3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpXSBhcmUgZm9yIHRoaXMgYXQtcnVsZS4KLSAgICAvLyBE
b24ndCBmb3JnZXQgdG8gYWxzbyB1cGRhdGUgdGhlIGFjdGlvbiBmb3IgcGFnZSBzeW1ib2wgaW4g
Q1NTR3JhbW1hci55IHN1Y2ggdGhhdCBtYXJnaW4gYXQtcnVsZSBkYXRhIGlzIGNsZWFyZWQgaWYg
cGFnZV9zZWxlY3RvciBpcyBpbnZhbGlkLgotCi0gICAgZW5kRGVjbGFyYXRpb25zRm9yTWFyZ2lu
Qm94KCk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjpzdGFydERlY2xhcmF0aW9uc0Zvck1hcmdpbkJv
eCgpCi17Ci0gICAgbV9udW1QYXJzZWRQcm9wZXJ0aWVzQmVmb3JlTWFyZ2luQm94ID0gbV9wYXJz
ZWRQcm9wZXJ0aWVzLnNpemUoKTsKLX0KLQotdm9pZCBDU1NQYXJzZXI6OmVuZERlY2xhcmF0aW9u
c0Zvck1hcmdpbkJveCgpCi17Ci0gICAgcm9sbGJhY2tMYXN0UHJvcGVydGllcyhtX3BhcnNlZFBy
b3BlcnRpZXMuc2l6ZSgpIC0gbV9udW1QYXJzZWRQcm9wZXJ0aWVzQmVmb3JlTWFyZ2luQm94KTsK
LSAgICBtX251bVBhcnNlZFByb3BlcnRpZXNCZWZvcmVNYXJnaW5Cb3ggPSBpbnZhbGlkUGFyc2Vk
UHJvcGVydGllc0NvdW50OwotfQotCi1SZWZQdHI8U3R5bGVLZXlmcmFtZT4gQ1NTUGFyc2VyOjpj
cmVhdGVLZXlmcmFtZShDU1NQYXJzZXJWYWx1ZUxpc3QmIGtleXMpCi17Ci0gICAgLy8gQ3JlYXRl
IGEga2V5IHN0cmluZyBmcm9tIHRoZSBwYXNzZWQga2V5cwotICAgIFN0cmluZ0J1aWxkZXIga2V5
U3RyaW5nOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIC8vIEp1c3QgYXMgcGVyIHRoZSBjb21tZW50IGJlbG93LCB3ZSBpZ25vcmUga2V5
ZnJhbWVzIHdpdGgKLSAgICAgICAgLy8gaW52YWxpZCBrZXkgdmFsdWVzIChwbGFpbiBudW1iZXJz
IG9yIHVua25vd24gaWRlbnRpZmllcnMpCi0gICAgICAgIC8vIG1hcmtlZCBhcyBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1VOS05PV04gZHVyaW5nIHBhcnNpbmcuCi0gICAgICAgIGlmIChrZXlzLnZh
bHVlQXQoaSktPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTktOT1dOKSB7Ci0gICAg
ICAgICAgICBjbGVhclByb3BlcnRpZXMoKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKGtleXMudmFsdWVBdChpKS0+dW5pdCA9PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7Ci0gICAgICAgIGZsb2F0IGtleSA9IHN0YXRpY19j
YXN0PGZsb2F0PihrZXlzLnZhbHVlQXQoaSktPmZWYWx1ZSk7Ci0gICAgICAgIGlmIChrZXkgPCAw
IHx8IGtleSA+IDEwMCkgewotICAgICAgICAgICAgLy8gQXMgcGVyIGh0dHA6Ly93d3cudzMub3Jn
L1RSL2NzczMtYW5pbWF0aW9ucy8ja2V5ZnJhbWVzLAotICAgICAgICAgICAgLy8gIklmIGEga2V5
ZnJhbWUgc2VsZWN0b3Igc3BlY2lmaWVzIG5lZ2F0aXZlIHBlcmNlbnRhZ2UgdmFsdWVzCi0gICAg
ICAgICAgICAvLyBvciB2YWx1ZXMgaGlnaGVyIHRoYW4gMTAwJSwgdGhlbiB0aGUga2V5ZnJhbWUg
d2lsbCBiZSBpZ25vcmVkLiIKLSAgICAgICAgICAgIGNsZWFyUHJvcGVydGllcygpOwotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGkgIT0gMCkKLSAg
ICAgICAgICAgIGtleVN0cmluZy5hcHBlbmQoJywnKTsKLSAgICAgICAga2V5U3RyaW5nLmFwcGVu
ZE51bWJlcihrZXkpOwotICAgICAgICBrZXlTdHJpbmcuYXBwZW5kKCclJyk7Ci0gICAgfQotCi0g
ICAgYXV0byBrZXlmcmFtZSA9IFN0eWxlS2V5ZnJhbWU6OmNyZWF0ZShjcmVhdGVTdHlsZVByb3Bl
cnRpZXMoKSk7Ci0gICAga2V5ZnJhbWUtPnNldEtleVRleHQoa2V5U3RyaW5nLnRvU3RyaW5nKCkp
OwotCi0gICAgY2xlYXJQcm9wZXJ0aWVzKCk7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShrZXlmcmFt
ZSk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjppbnZhbGlkQmxvY2tIaXQoKQotewotICAgIGlmICht
X3N0eWxlU2hlZXQgJiYgIW1faGFkU3ludGFjdGljYWxseVZhbGlkQ1NTUnVsZSkKLSAgICAgICAg
bV9zdHlsZVNoZWV0LT5zZXRIYXNTeW50YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXIoZmFsc2UpOwot
fQotCi12b2lkIENTU1BhcnNlcjo6dXBkYXRlTGFzdFNlbGVjdG9yTGluZUFuZFBvc2l0aW9uKCkK
LXsKLSAgICBtX2xhc3RTZWxlY3RvckxpbmVOdW1iZXIgPSBtX2xpbmVOdW1iZXI7Ci19Ci0KLXZv
aWQgQ1NTUGFyc2VyOjp1cGRhdGVMYXN0TWVkaWFMaW5lKE1lZGlhUXVlcnlTZXQmIG1lZGlhKQot
ewotICAgIG1lZGlhLnNldExhc3RMaW5lKG1fbGluZU51bWJlcik7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSB2b2lkIGZpeFVucGFyc2VkUHJv
cGVydGllcyhjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCBDU1NSdWxlU291cmNlRGF0
YSYgcnVsZURhdGEpCi17Ci0gICAgYXV0byYgcHJvcGVydHlEYXRhID0gcnVsZURhdGEuc3R5bGVT
b3VyY2VEYXRhLT5wcm9wZXJ0eURhdGE7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IHByb3BlcnR5RGF0
YS5zaXplKCk7Ci0gICAgaWYgKCFzaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25l
ZCBzdHlsZVN0YXJ0ID0gcnVsZURhdGEucnVsZUJvZHlSYW5nZS5zdGFydDsKLSAgICBhdXRvKiBu
ZXh0RGF0YSA9ICZwcm9wZXJ0eURhdGFbMF07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICBhdXRvKiBjdXJyZW50RGF0YSA9IG5leHREYXRhOwotICAg
ICAgICBuZXh0RGF0YSA9IGkgPCBzaXplIC0gMSA/ICZwcm9wZXJ0eURhdGFbaSArIDFdIDogMDsK
LQotICAgICAgICBpZiAoY3VycmVudERhdGEtPnBhcnNlZE9rKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGlmIChjdXJyZW50RGF0YS0+cmFuZ2UuZW5kID4gMCAmJiBjaGFyYWN0ZXJz
W3N0eWxlU3RhcnQgKyBjdXJyZW50RGF0YS0+cmFuZ2UuZW5kIC0gMV0gPT0gJzsnKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgdW5zaWduZWQgcHJvcGVydHlFbmRJblN0eWxlU2hl
ZXQ7Ci0gICAgICAgIGlmICghbmV4dERhdGEpCi0gICAgICAgICAgICBwcm9wZXJ0eUVuZEluU3R5
bGVTaGVldCA9IHJ1bGVEYXRhLnJ1bGVCb2R5UmFuZ2UuZW5kIC0gMTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgPSBzdHlsZVN0YXJ0ICsgbmV4dERh
dGEtPnJhbmdlLnN0YXJ0IC0gMTsKLQotICAgICAgICB3aGlsZSAoaXNIVE1MU3BhY2UoY2hhcmFj
dGVyc1twcm9wZXJ0eUVuZEluU3R5bGVTaGVldF0pKQotICAgICAgICAgICAgLS1wcm9wZXJ0eUVu
ZEluU3R5bGVTaGVldDsKLQotICAgICAgICAvLyBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCBwb2lu
dHMgYXQgdGhlIGxhc3QgcHJvcGVydHkgdGV4dCBjaGFyYWN0ZXIuCi0gICAgICAgIHVuc2lnbmVk
IG5ld1Byb3BlcnR5RW5kID0gcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgLSBzdHlsZVN0YXJ0ICsg
MTsgLy8gRXhjbHVzaXZlIG9mIHRoZSBsYXN0IHByb3BlcnR5IHRleHQgY2hhcmFjdGVyLgotICAg
ICAgICBpZiAoY3VycmVudERhdGEtPnJhbmdlLmVuZCAhPSBuZXdQcm9wZXJ0eUVuZCkgewotICAg
ICAgICAgICAgY3VycmVudERhdGEtPnJhbmdlLmVuZCA9IG5ld1Byb3BlcnR5RW5kOwotICAgICAg
ICAgICAgdW5zaWduZWQgdmFsdWVTdGFydEluU3R5bGVTaGVldCA9IHN0eWxlU3RhcnQgKyBjdXJy
ZW50RGF0YS0+cmFuZ2Uuc3RhcnQgKyBjdXJyZW50RGF0YS0+bmFtZS5sZW5ndGgoKTsKLSAgICAg
ICAgICAgIHdoaWxlICh2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0IDwgcHJvcGVydHlFbmRJblN0eWxl
U2hlZXQgJiYgY2hhcmFjdGVyc1t2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0XSAhPSAnOicpCi0gICAg
ICAgICAgICAgICAgKyt2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0OwotICAgICAgICAgICAgaWYgKHZh
bHVlU3RhcnRJblN0eWxlU2hlZXQgPCBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCkKLSAgICAgICAg
ICAgICAgICArK3ZhbHVlU3RhcnRJblN0eWxlU2hlZXQ7IC8vIFNoaWZ0IHBhc3QgdGhlICc6Jy4K
LSAgICAgICAgICAgIHdoaWxlICh2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0IDwgcHJvcGVydHlFbmRJ
blN0eWxlU2hlZXQgJiYgaXNIVE1MU3BhY2UoY2hhcmFjdGVyc1t2YWx1ZVN0YXJ0SW5TdHlsZVNo
ZWV0XSkpCi0gICAgICAgICAgICAgICAgKyt2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0OwotICAgICAg
ICAgICAgLy8gTmVlZCB0byBleGNsdWRlIHRoZSB0cmFpbGluZyAnOycgZnJvbSB0aGUgcHJvcGVy
dHkgdmFsdWUuCi0gICAgICAgICAgICBjdXJyZW50RGF0YS0+dmFsdWUgPSBTdHJpbmcoY2hhcmFj
dGVycyArIHZhbHVlU3RhcnRJblN0eWxlU2hlZXQsIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0IC0g
dmFsdWVTdGFydEluU3R5bGVTaGVldCArIChjaGFyYWN0ZXJzW3Byb3BlcnR5RW5kSW5TdHlsZVNo
ZWV0XSA9PSAnOycgPyAwIDogMSkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENTU1Bh
cnNlcjo6Zml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhDU1NSdWxlU291cmNlRGF0YSYgcnVsZURh
dGEpCi17Ci0gICAgaWYgKCFydWxlRGF0YS5zdHlsZVNvdXJjZURhdGEpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChpczhCaXRTb3VyY2UoKSkgewotICAgICAgICBmaXhVbnBhcnNlZFByb3Bl
cnRpZXM8TENoYXI+KG1fZGF0YVN0YXJ0OC5nZXQoKSArIG1fcGFyc2VkVGV4dFByZWZpeExlbmd0
aCwgcnVsZURhdGEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZml4VW5wYXJzZWRQ
cm9wZXJ0aWVzPFVDaGFyPihtX2RhdGFTdGFydDE2LmdldCgpICsgbV9wYXJzZWRUZXh0UHJlZml4
TGVuZ3RoLCBydWxlRGF0YSk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjptYXJrUnVsZUhlYWRlclN0
YXJ0KENTU1J1bGVTb3VyY2VEYXRhOjpUeXBlIHJ1bGVUeXBlKQotewotICAgIGlmICghaXNFeHRy
YWN0aW5nU291cmNlRGF0YSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBQb3Agb2ZmIGRh
dGEgZm9yIGEgcHJldmlvdXMgaW52YWxpZCBydWxlLgotICAgIGlmIChtX2N1cnJlbnRSdWxlRGF0
YSkKLSAgICAgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay0+cmVtb3ZlTGFzdCgpOwotCi0gICAg
YXV0byBkYXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZShydWxlVHlwZSk7Ci0gICAgZGF0
YS0+cnVsZUhlYWRlclJhbmdlLnN0YXJ0ID0gdG9rZW5TdGFydE9mZnNldCgpOwotICAgIG1fY3Vy
cmVudFJ1bGVEYXRhID0gZGF0YS5jb3B5UmVmKCk7Ci0gICAgbV9jdXJyZW50UnVsZURhdGFTdGFj
ay0+YXBwZW5kKFdURk1vdmUoZGF0YSkpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KLWlubGluZSB2b2lkIENTU1BhcnNlcjo6c2V0UnVsZUhlYWRlckVuZChjb25zdCBD
aGFyYWN0ZXJUeXBlKiBkYXRhU3RhcnQpCi17Ci0gICAgQ2hhcmFjdGVyVHlwZSogbGlzdEVuZCA9
IHRva2VuU3RhcnQ8Q2hhcmFjdGVyVHlwZT4oKTsKLSAgICB3aGlsZSAobGlzdEVuZCA+IGRhdGFT
dGFydCArIDEpIHsKLSAgICAgICAgaWYgKGlzSFRNTFNwYWNlKCoobGlzdEVuZCAtIDEpKSkKLSAg
ICAgICAgICAgIC0tbGlzdEVuZDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay0+bGFzdCgpLT5ydWxlSGVhZGVyUmFu
Z2UuZW5kID0gbGlzdEVuZCAtIGRhdGFTdGFydDsKLX0KLQotdm9pZCBDU1NQYXJzZXI6Om1hcmtS
dWxlSGVhZGVyRW5kKCkKLXsKLSAgICBpZiAoIWlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCghbV9jdXJyZW50UnVsZURhdGFTdGFjay0+aXNFbXB0
eSgpKTsKLQotICAgIGlmIChpczhCaXRTb3VyY2UoKSkKLSAgICAgICAgc2V0UnVsZUhlYWRlckVu
ZDxMQ2hhcj4obV9kYXRhU3RhcnQ4LmdldCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHNldFJ1bGVI
ZWFkZXJFbmQ8VUNoYXI+KG1fZGF0YVN0YXJ0MTYuZ2V0KCkpOwotfQotCi12b2lkIENTU1BhcnNl
cjo6bWFya1NlbGVjdG9yU3RhcnQoKQotewotICAgIGlmICghaXNFeHRyYWN0aW5nU291cmNlRGF0
YSgpIHx8IG1fbmVzdGVkU2VsZWN0b3JMZXZlbCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VS
VCghbV9zZWxlY3RvclJhbmdlLmVuZCk7Ci0KLSAgICBtX3NlbGVjdG9yUmFuZ2Uuc3RhcnQgPSB0
b2tlblN0YXJ0T2Zmc2V0KCk7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjptYXJrU2VsZWN0b3JFbmQo
KQotewotICAgIGlmICghaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpIHx8IG1fbmVzdGVkU2VsZWN0
b3JMZXZlbCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCghbV9zZWxlY3RvclJhbmdlLmVu
ZCk7Ci0gICAgQVNTRVJUKG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPnNpemUoKSk7Ci0KLSAgICBt
X3NlbGVjdG9yUmFuZ2UuZW5kID0gdG9rZW5TdGFydE9mZnNldCgpOwotICAgIG1fY3VycmVudFJ1
bGVEYXRhU3RhY2stPmxhc3QoKS0+c2VsZWN0b3JSYW5nZXMuYXBwZW5kKG1fc2VsZWN0b3JSYW5n
ZSk7Ci0gICAgbV9zZWxlY3RvclJhbmdlLnN0YXJ0ID0gMDsKLSAgICBtX3NlbGVjdG9yUmFuZ2Uu
ZW5kID0gMDsKLX0KLQotdm9pZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9keVN0YXJ0KCkKLXsKLSAg
ICBpZiAoIWlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1f
Y3VycmVudFJ1bGVEYXRhID0gbnVsbHB0cjsKLSAgICB1bnNpZ25lZCBvZmZzZXQgPSB0b2tlblN0
YXJ0T2Zmc2V0KCk7Ci0gICAgaWYgKHRva2VuU3RhcnRDaGFyKCkgPT0gJ3snKQotICAgICAgICAr
K29mZnNldDsgLy8gU2tpcCB0aGUgcnVsZSBib2R5IG9wZW5pbmcgYnJhY2UuCi0gICAgQVNTRVJU
KCFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5pc0VtcHR5KCkpOwotICAgIG1fY3VycmVudFJ1bGVE
YXRhU3RhY2stPmxhc3QoKS0+cnVsZUJvZHlSYW5nZS5zdGFydCA9IG9mZnNldDsKLX0KLQotdm9p
ZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9keUVuZCgpCi17Ci0gICAgLy8gUHJlY29uZGl0aW9uOiAo
IWlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkKLSAgICB1bnNpZ25lZCBvZmZzZXQgPSB0b2tlblN0
YXJ0T2Zmc2V0KCk7Ci0gICAgQVNTRVJUKCFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5pc0VtcHR5
KCkpOwotICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmxhc3QoKS0+cnVsZUJvZHlSYW5nZS5l
bmQgPSBvZmZzZXQ7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyOjptYXJrUHJvcGVydHlTdGFydCgpCi17
Ci0gICAgbV9pZ25vcmVFcnJvcnNJbkRlY2xhcmF0aW9uID0gZmFsc2U7Ci0gICAgaWYgKCFpc0V4
dHJhY3RpbmdTb3VyY2VEYXRhKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAobV9jdXJyZW50
UnVsZURhdGFTdGFjay0+aXNFbXB0eSgpIHx8ICFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5sYXN0
KCktPnN0eWxlU291cmNlRGF0YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wcm9wZXJ0eVJh
bmdlLnN0YXJ0ID0gdG9rZW5TdGFydE9mZnNldCgpOwotfQotCi12b2lkIENTU1BhcnNlcjo6bWFy
a1Byb3BlcnR5RW5kKGJvb2wgaXNJbXBvcnRhbnRGb3VuZCwgYm9vbCBpc1Byb3BlcnR5UGFyc2Vk
KQotewotICAgIGlmICghaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmlzRW1wdHkoKSB8fCAhbV9jdXJyZW50
UnVsZURhdGFTdGFjay0+bGFzdCgpLT5zdHlsZVNvdXJjZURhdGEpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHVuc2lnbmVkIG9mZnNldCA9IHRva2VuU3RhcnRPZmZzZXQoKTsKLSAgICBpZiAodG9r
ZW5TdGFydENoYXIoKSA9PSAnOycpIC8vIEluY2x1ZGUgc2VtaWNvbG9uIGludG8gdGhlIHByb3Bl
cnR5IHRleHQuCi0gICAgICAgICsrb2Zmc2V0OwotICAgIG1fcHJvcGVydHlSYW5nZS5lbmQgPSBv
ZmZzZXQ7Ci0gICAgaWYgKG1fcHJvcGVydHlSYW5nZS5zdGFydCAhPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCkgJiYgIW1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmlzRW1wdHko
KSkgewotICAgICAgICAvLyBUaGlzIHN0dWZmIGlzIG9ubHkgZXhlY3V0ZWQgd2hlbiB0aGUgc3R5
bGUgZGF0YSByZXRyaWV2YWwgaXMgcmVxdWVzdGVkIGJ5IGNsaWVudC4KLSAgICAgICAgY29uc3Qg
dW5zaWduZWQgc3RhcnQgPSBtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQ7Ci0gICAgICAgIGNvbnN0IHVu
c2lnbmVkIGVuZCA9IG1fcHJvcGVydHlSYW5nZS5lbmQ7Ci0gICAgICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKHN0YXJ0IDwgZW5kKTsKLSAgICAgICAgU3RyaW5nIHByb3BlcnR5
U3RyaW5nOwotICAgICAgICBpZiAoaXM4Qml0U291cmNlKCkpCi0gICAgICAgICAgICBwcm9wZXJ0
eVN0cmluZyA9IFN0cmluZyhtX2RhdGFTdGFydDguZ2V0KCkgKyBzdGFydCwgZW5kIC0gc3RhcnQp
LnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwcm9wZXJ0eVN0
cmluZyA9IFN0cmluZyhtX2RhdGFTdGFydDE2LmdldCgpICsgc3RhcnQsIGVuZCAtIHN0YXJ0KS5z
dHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgaWYgKHByb3BlcnR5U3RyaW5nLmVuZHNXaXRoKCc7
JykpCi0gICAgICAgICAgICBwcm9wZXJ0eVN0cmluZyA9IHByb3BlcnR5U3RyaW5nLmxlZnQocHJv
cGVydHlTdHJpbmcubGVuZ3RoKCkgLSAxKTsKLSAgICAgICAgc2l6ZV90IGNvbG9uSW5kZXggPSBw
cm9wZXJ0eVN0cmluZy5maW5kKCc6Jyk7Ci0gICAgICAgIEFTU0VSVChjb2xvbkluZGV4ICE9IG5v
dEZvdW5kKTsKLQotICAgICAgICBTdHJpbmcgbmFtZSA9IHByb3BlcnR5U3RyaW5nLmxlZnQoY29s
b25JbmRleCkuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAgICAgIFN0cmluZyB2YWx1ZSA9IHByb3Bl
cnR5U3RyaW5nLnN1YnN0cmluZyhjb2xvbkluZGV4ICsgMSwgcHJvcGVydHlTdHJpbmcubGVuZ3Ro
KCkpLnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICAvLyBUaGUgcHJvcGVydHkgcmFuZ2UgaXMg
cmVsYXRpdmUgdG8gdGhlIGRlY2xhcmF0aW9uIHN0YXJ0IG9mZnNldC4KLSAgICAgICAgU291cmNl
UmFuZ2UmIHRvcFJ1bGVCb2R5UmFuZ2UgPSBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5sYXN0KCkt
PnJ1bGVCb2R5UmFuZ2U7Ci0gICAgICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmxhc3QoKS0+
c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGEuYXBwZW5kKAotICAgICAgICAgICAgQ1NTUHJv
cGVydHlTb3VyY2VEYXRhKG5hbWUsIHZhbHVlLCBpc0ltcG9ydGFudEZvdW5kLCBpc1Byb3BlcnR5
UGFyc2VkLCBTb3VyY2VSYW5nZShzdGFydCAtIHRvcFJ1bGVCb2R5UmFuZ2Uuc3RhcnQsIGVuZCAt
IHRvcFJ1bGVCb2R5UmFuZ2Uuc3RhcnQpKSk7Ci0gICAgfQotICAgIHJlc2V0UHJvcGVydHlSYW5n
ZSgpOwotfQotCi0jaWYgRU5BQkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikKLVJlZjxTdHlsZVJ1
bGVWaWV3cG9ydD4gQ1NTUGFyc2VyOjpjcmVhdGVWaWV3cG9ydFJ1bGUoKQotewotICAgIG1fYWxs
b3dJbXBvcnRSdWxlcyA9IG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMgPSBmYWxzZTsKLQot
ICAgIGF1dG8gcnVsZSA9IFN0eWxlUnVsZVZpZXdwb3J0OjpjcmVhdGUoY3JlYXRlU3R5bGVQcm9w
ZXJ0aWVzKCkpOwotICAgIGNsZWFyUHJvcGVydGllcygpOwotCi0gICAgcHJvY2Vzc0FuZEFkZE5l
d1J1bGVUb1NvdXJjZVRyZWVJZk5lZWRlZCgpOwotCi0gICAgcmV0dXJuIHJ1bGU7Ci19Ci0KLWJv
b2wgQ1NTUGFyc2VyOjpwYXJzZVZpZXdwb3J0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQs
IGJvb2wgaW1wb3J0YW50KQotewotICAgIGlmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRo
Q2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOwotCi0gICAgQ1NTVmFsdWVJRCBp
ZCA9IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQ7Ci0gICAgYm9vbCB2YWxpZFByaW1p
dGl2ZSA9IGZhbHNlOwotCi0gICAgc3dpdGNoIChwcm9wSWQpIHsKLSAgICBjYXNlIENTU1Byb3Bl
cnR5TWluV2lkdGg6IC8vIGF1dG8gfCBkZXZpY2Utd2lkdGggfCBkZXZpY2UtaGVpZ2h0IHwgPGxl
bmd0aD4gfCA8cGVyY2VudGFnZT4KLSAgICBjYXNlIENTU1Byb3BlcnR5TWF4V2lkdGg6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eU1pbkhlaWdodDoKLSAgICBjYXNlIENTU1Byb3BlcnR5TWF4SGVpZ2h0
OgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09IENTU1ZhbHVlRGV2aWNl
V2lkdGggfHwgaWQgPT0gQ1NTVmFsdWVEZXZpY2VIZWlnaHQpCi0gICAgICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBG
UGVyY2VudCB8IEZOb25OZWcpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdpZHRoOiAvLyBzaG9ydGhhbmQKLSAgICAgICAgcmV0dXJuIHBhcnNlVmlld3BvcnRTaG9ydGhh
bmQocHJvcElkLCBDU1NQcm9wZXJ0eU1pbldpZHRoLCBDU1NQcm9wZXJ0eU1heFdpZHRoLCBpbXBv
cnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlIZWlnaHQ6Ci0gICAgICAgIHJldHVybiBwYXJz
ZVZpZXdwb3J0U2hvcnRoYW5kKHByb3BJZCwgQ1NTUHJvcGVydHlNaW5IZWlnaHQsIENTU1Byb3Bl
cnR5TWF4SGVpZ2h0LCBpbXBvcnRhbnQpOwotICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5ab29tOiAv
LyBhdXRvIHwgPG51bWJlcj4gfCA8cGVyY2VudGFnZT4KLSAgICBjYXNlIENTU1Byb3BlcnR5TWF4
Wm9vbToKLSAgICBjYXNlIENTU1Byb3BlcnR5Wm9vbToKLSAgICAgICAgaWYgKGlkID09IENTU1Zh
bHVlQXV0bykKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1
ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZQZXJjZW50IHwgRk5vbk5lZykpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5VXNlclpvb206IC8vIHpvb20gfCBmaXhlZAot
ICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVab29tIHx8IGlkID09IENTU1ZhbHVlRml4ZWQpCi0g
ICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ1NTUHJvcGVydHlPcmllbnRhdGlvbjogLy8gYXV0byB8IHBvcnRyYWl0IHwgbGFuZHNjYXBl
Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgaWQgPT0gQ1NTVmFsdWVQb3J0cmFp
dCB8fCBpZCA9PSBDU1NWYWx1ZUxhbmRzY2FwZSkKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHBhcnNlZFZhbHVlOwotICAgIGlmICh2YWxpZFByaW1pdGl2ZSkgewotICAg
ICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlVmFsaWRQcmltaXRpdmUoaWQsIHZhbHVlV2l0aENhbGN1
bGF0aW9uKTsKLSAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICB9Ci0KLSAgICBpZiAo
IXBhcnNlZFZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV92YWx1ZUxp
c3QtPmN1cnJlbnQoKSAmJiAhaW5TaG9ydGhhbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgYWRkUHJvcGVydHkocHJvcElkLCBwYXJzZWRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpLCBp
bXBvcnRhbnQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU1BhcnNlcjo6cGFyc2VW
aWV3cG9ydFNob3J0aGFuZChDU1NQcm9wZXJ0eUlEIHByb3BJZCwgQ1NTUHJvcGVydHlJRCBmaXJz
dCwgQ1NTUHJvcGVydHlJRCBzZWNvbmQsIGJvb2wgaW1wb3J0YW50KQotewotICAgIHVuc2lnbmVk
IG51bVZhbHVlcyA9IG1fdmFsdWVMaXN0LT5zaXplKCk7Ci0KLSAgICBpZiAobnVtVmFsdWVzID4g
MikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhp
cywgcHJvcElkKTsKLQotICAgIGlmICghcGFyc2VWaWV3cG9ydFByb3BlcnR5KGZpcnN0LCBpbXBv
cnRhbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBJZiBqdXN0IG9uZSB2YWx1
ZSBpcyBzdXBwbGllZCwgdGhlIHNlY29uZCB2YWx1ZQotICAgIC8vIGlzIGltcGxpY2l0bHkgaW5p
dGlhbGl6ZWQgd2l0aCB0aGUgZmlyc3QgdmFsdWUuCi0gICAgaWYgKG51bVZhbHVlcyA9PSAxKQot
ICAgICAgICBtX3ZhbHVlTGlzdC0+cHJldmlvdXMoKTsKLQotICAgIHJldHVybiBwYXJzZVZpZXdw
b3J0UHJvcGVydHkoc2Vjb25kLCBpbXBvcnRhbnQpOwotfQotI2VuZGlmCi0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIENTU1Byb3BlcnR5SUQgY3NzUHJvcGVydHlJ
RChjb25zdCBDaGFyYWN0ZXJUeXBlKiBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGxlbmd0aCkKLXsK
LSAgICBjaGFyIGJ1ZmZlclttYXhDU1NQcm9wZXJ0eU5hbWVMZW5ndGggKyAxICsgMV07IC8vIDEg
dG8gdHVybiAiYXBwbGUiLyJraHRtbCIgaW50byAid2Via2l0IiwgMSBmb3IgbnVsbCBjaGFyYWN0
ZXIKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gbGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgQ2hhcmFjdGVyVHlwZSBjID0gcHJvcGVydHlOYW1lW2ldOwotICAgICAgICBpZiAoYyA9PSAw
IHx8IGMgPj0gMHg3RikKLSAgICAgICAgICAgIHJldHVybiBDU1NQcm9wZXJ0eUludmFsaWQ7IC8v
IGlsbGVnYWwgY2hhcmFjdGVyCi0gICAgICAgIGJ1ZmZlcltpXSA9IHRvQVNDSUlMb3dlcihjKTsK
LSAgICB9Ci0gICAgYnVmZmVyW2xlbmd0aF0gPSAnXDAnOwotCi0gICAgY29uc3QgY2hhciogbmFt
ZSA9IGJ1ZmZlcjsKLSAgICBpZiAoYnVmZmVyWzBdID09ICctJykgewotI2lmIEVOQUJMRShMRUdB
Q1lfQ1NTX1ZFTkRPUl9QUkVGSVhFUykKLSAgICAgICAgLy8gSWYgdGhlIHByZWZpeCBpcyAtYXBw
bGUtIG9yIC1raHRtbC0sIGNoYW5nZSBpdCB0byAtd2Via2l0LS4KLSAgICAgICAgLy8gVGhpcyBt
YWtlcyB0aGUgc3RyaW5nIG9uZSBjaGFyYWN0ZXIgbG9uZ2VyLgotICAgICAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5sZWdhY3lDU1NWZW5kb3JQcmVmaXhl
c0VuYWJsZWQoKQotICAgICAgICAgICAgJiYgKGhhc1ByZWZpeChidWZmZXIsIGxlbmd0aCwgIi1h
cHBsZS0iKSB8fCBoYXNQcmVmaXgoYnVmZmVyLCBsZW5ndGgsICIta2h0bWwtIikpKSB7Ci0gICAg
ICAgICAgICBtZW1tb3ZlKGJ1ZmZlciArIDcsIGJ1ZmZlciArIDYsIGxlbmd0aCArIDEgLSA2KTsK
LSAgICAgICAgICAgIG1lbWNweShidWZmZXIsICItd2Via2l0IiwgNyk7Ci0gICAgICAgICAgICAr
K2xlbmd0aDsKLSAgICAgICAgfQotI2VuZGlmCi0jaWYgUExBVEZPUk0oSU9TKQotICAgICAgICBj
c3NQcm9wZXJ0eU5hbWVJT1NBbGlhc2luZyhidWZmZXIsIG5hbWUsIGxlbmd0aCk7Ci0jZW5kaWYK
LSAgICB9Ci0KLSAgICBjb25zdCBQcm9wZXJ0eSogaGFzaFRhYmxlRW50cnkgPSBmaW5kUHJvcGVy
dHkobmFtZSwgbGVuZ3RoKTsKLSAgICByZXR1cm4gaGFzaFRhYmxlRW50cnkgPyBzdGF0aWNfY2Fz
dDxDU1NQcm9wZXJ0eUlEPihoYXNoVGFibGVFbnRyeS0+aWQpIDogQ1NTUHJvcGVydHlJbnZhbGlk
OwotfQotCi1DU1NQcm9wZXJ0eUlEIGNzc1Byb3BlcnR5SUQoY29uc3QgU3RyaW5nJiBzdHJpbmcp
Ci17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotCi0gICAgaWYgKCFs
ZW5ndGgpCi0gICAgICAgIHJldHVybiBDU1NQcm9wZXJ0eUludmFsaWQ7Ci0gICAgaWYgKGxlbmd0
aCA+IG1heENTU1Byb3BlcnR5TmFtZUxlbmd0aCkKLSAgICAgICAgcmV0dXJuIENTU1Byb3BlcnR5
SW52YWxpZDsKLSAgICAKLSAgICByZXR1cm4gc3RyaW5nLmlzOEJpdCgpID8gY3NzUHJvcGVydHlJ
RChzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoKSA6IGNzc1Byb3BlcnR5SUQoc3RyaW5nLmNo
YXJhY3RlcnMxNigpLCBsZW5ndGgpOwotfQotCi1DU1NQcm9wZXJ0eUlEIGNzc1Byb3BlcnR5SUQo
Y29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0g
c3RyaW5nLmxlbmd0aCgpOwotCi0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBDU1NQ
cm9wZXJ0eUludmFsaWQ7Ci0gICAgaWYgKGxlbmd0aCA+IG1heENTU1Byb3BlcnR5TmFtZUxlbmd0
aCkKLSAgICAgICAgcmV0dXJuIENTU1Byb3BlcnR5SW52YWxpZDsKLSAgICAKLSAgICByZXR1cm4g
c3RyaW5nLmlzOEJpdCgpID8gY3NzUHJvcGVydHlJRChzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVu
Z3RoKSA6IGNzc1Byb3BlcnR5SUQoc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBsZW5ndGgpOwotfQot
Ci0jaWYgUExBVEZPUk0oSU9TKQotdm9pZCBjc3NQcm9wZXJ0eU5hbWVJT1NBbGlhc2luZyhjb25z
dCBjaGFyKiBwcm9wZXJ0eU5hbWUsIGNvbnN0IGNoYXIqJiBwcm9wZXJ0eU5hbWVBbGlhcywgdW5z
aWduZWQmIG5ld0xlbmd0aCkKLXsKLSAgICBpZiAoIXN0cmNtcChwcm9wZXJ0eU5hbWUsICItd2Vi
a2l0LWh5cGhlbmF0ZS1sb2NhbGUiKSkgewotICAgICAgICAvLyBXb3JrZWQgaW4gaU9TIDQuMi4K
LSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgd2Via2l0TG9jYWxlW10gPSAiLXdlYmtpdC1sb2Nh
bGUiOwotICAgICAgICBwcm9wZXJ0eU5hbWVBbGlhcyA9IHdlYmtpdExvY2FsZTsKLSAgICAgICAg
bmV3TGVuZ3RoID0gc3RybGVuKHdlYmtpdExvY2FsZSk7Ci0gICAgfQotfQotI2VuZGlmCi0KLXN0
YXRpYyBib29sIGlzQXBwbGVMZWdhY3lDc3NWYWx1ZUtleXdvcmQoY29uc3QgY2hhciogdmFsdWVL
ZXl3b3JkLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgYXBwbGVQ
cmVmaXhbXSA9ICItYXBwbGUtIjsKLSAgICBzdGF0aWMgY29uc3QgY2hhciBhcHBsZVN5c3RlbVBy
ZWZpeFtdID0gIi1hcHBsZS1zeXN0ZW0iOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBhcHBsZVdp
cmVsZXNzUGxheWJhY2tUYXJnZXRBY3RpdmUgPSBnZXRWYWx1ZU5hbWUoQ1NTVmFsdWVBcHBsZVdp
cmVsZXNzUGxheWJhY2tUYXJnZXRBY3RpdmUpOwotCi0gICAgcmV0dXJuIGhhc1ByZWZpeCh2YWx1
ZUtleXdvcmQsIGxlbmd0aCwgYXBwbGVQcmVmaXgpCi0gICAgICAgICYmICFoYXNQcmVmaXgodmFs
dWVLZXl3b3JkLCBsZW5ndGgsIGFwcGxlU3lzdGVtUHJlZml4KQotICAgICAgICAmJiAhV1RGOjpl
cXVhbChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4odmFsdWVLZXl3b3JkKSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGFwcGxlV2lyZWxlc3NQbGF5YmFja1RhcmdldEFjdGl2
ZSksIGxlbmd0aCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3Rh
dGljIENTU1ZhbHVlSUQgY3NzVmFsdWVLZXl3b3JkSUQoY29uc3QgQ2hhcmFjdGVyVHlwZSogdmFs
dWVLZXl3b3JkLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgY2hhciBidWZmZXJbbWF4Q1NTVmFs
dWVLZXl3b3JkTGVuZ3RoICsgMSArIDFdOyAvLyAxIHRvIHR1cm4gImFwcGxlIi8ia2h0bWwiIGlu
dG8gIndlYmtpdCIsIDEgZm9yIG51bGwgY2hhcmFjdGVyCi0KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpICE9IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIENoYXJhY3RlclR5cGUgYyA9IHZhbHVl
S2V5d29yZFtpXTsKLSAgICAgICAgaWYgKGMgPT0gMCB8fCBjID49IDB4N0YpCi0gICAgICAgICAg
ICByZXR1cm4gQ1NTVmFsdWVJbnZhbGlkOyAvLyBpbGxlZ2FsIGtleXdvcmQuCi0gICAgICAgIGJ1
ZmZlcltpXSA9IFdURjo6dG9BU0NJSUxvd2VyKGMpOwotICAgIH0KLSAgICBidWZmZXJbbGVuZ3Ro
XSA9ICdcMCc7Ci0KLSAgICBpZiAoYnVmZmVyWzBdID09ICctJykgewotICAgICAgICAvLyBJZiB0
aGUgcHJlZml4IGlzIC1hcHBsZS0gb3IgLWtodG1sLSwgY2hhbmdlIGl0IHRvIC13ZWJraXQtLgot
ICAgICAgICAvLyBUaGlzIG1ha2VzIHRoZSBzdHJpbmcgb25lIGNoYXJhY3RlciBsb25nZXIuCi0g
ICAgICAgIC8vIE9uIGlPUyB3ZSBkb24ndCB3YW50IHRvIGNoYW5nZSB2YWx1ZXMgc3RhcnRpbmcg
d2l0aCAtYXBwbGUtc3lzdGVtIHRvIC13ZWJraXQtc3lzdGVtLgotICAgICAgICAvLyBGSVhNRTog
UmVtb3ZlIHRoaXMgbWFuZ2xpbmcgd2l0aG91dCBicmVha2luZyB0aGUgd2ViLgotICAgICAgICBp
ZiAoaXNBcHBsZUxlZ2FjeUNzc1ZhbHVlS2V5d29yZChidWZmZXIsIGxlbmd0aCkgfHwgaGFzUHJl
Zml4KGJ1ZmZlciwgbGVuZ3RoLCAiLWtodG1sLSIpKSB7Ci0gICAgICAgICAgICBtZW1tb3ZlKGJ1
ZmZlciArIDcsIGJ1ZmZlciArIDYsIGxlbmd0aCArIDEgLSA2KTsKLSAgICAgICAgICAgIG1lbWNw
eShidWZmZXIsICItd2Via2l0IiwgNyk7Ci0gICAgICAgICAgICArK2xlbmd0aDsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGNvbnN0IFZhbHVlKiBoYXNoVGFibGVFbnRyeSA9IGZpbmRWYWx1ZShi
dWZmZXIsIGxlbmd0aCk7Ci0gICAgcmV0dXJuIGhhc2hUYWJsZUVudHJ5ID8gc3RhdGljX2Nhc3Q8
Q1NTVmFsdWVJRD4oaGFzaFRhYmxlRW50cnktPmlkKSA6IENTU1ZhbHVlSW52YWxpZDsKLX0KLQot
Q1NTVmFsdWVJRCBjc3NWYWx1ZUtleXdvcmRJRChjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHN0cmlu
ZykKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgaWYgKCFs
ZW5ndGgpCi0gICAgICAgIHJldHVybiBDU1NWYWx1ZUludmFsaWQ7Ci0gICAgaWYgKGxlbmd0aCA+
IG1heENTU1ZhbHVlS2V5d29yZExlbmd0aCkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlSW52YWxp
ZDsKLQotICAgIHJldHVybiBzdHJpbmcuaXM4Qml0KCkgPyBjc3NWYWx1ZUtleXdvcmRJRChzdHJp
bmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoKSA6IGNzc1ZhbHVlS2V5d29yZElEKHN0cmluZy5jaGFy
YWN0ZXJzMTYoKSwgbGVuZ3RoKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNDU1NUb2tlbml6ZXJJZGVudGlmaWVyKGNvbnN0IENo
YXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBjb25zdCBD
aGFyYWN0ZXJUeXBlKiBlbmQgPSBjaGFyYWN0ZXJzICsgbGVuZ3RoOwotCi0gICAgLy8gLT8KLSAg
ICBpZiAoY2hhcmFjdGVycyAhPSBlbmQgJiYgY2hhcmFjdGVyc1swXSA9PSAnLScpCi0gICAgICAg
ICsrY2hhcmFjdGVyczsKLQotICAgIC8vIHtubXN0YXJ0fQotICAgIGlmIChjaGFyYWN0ZXJzID09
IGVuZCB8fCAhKGNoYXJhY3RlcnNbMF0gPT0gJ18nIHx8IGNoYXJhY3RlcnNbMF0gPj0gMTI4IHx8
IGlzQVNDSUlBbHBoYShjaGFyYWN0ZXJzWzBdKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICArK2NoYXJhY3RlcnM7Ci0KLSAgICAvLyB7bm1jaGFyfSoKLSAgICBmb3IgKDsgY2hhcmFjdGVy
cyAhPSBlbmQ7ICsrY2hhcmFjdGVycykgewotICAgICAgICBpZiAoIShjaGFyYWN0ZXJzWzBdID09
ICdfJyB8fCBjaGFyYWN0ZXJzWzBdID09ICctJyB8fCBjaGFyYWN0ZXJzWzBdID49IDEyOCB8fCBp
c0FTQ0lJQWxwaGFudW1lcmljKGNoYXJhY3RlcnNbMF0pKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gImlkZW50IiBmcm9tIHRo
ZSBDU1MgdG9rZW5pemVyLCBtaW51cyBiYWNrc2xhc2gtZXNjYXBlIHNlcXVlbmNlcwotc3RhdGlj
IGJvb2wgaXNDU1NUb2tlbml6ZXJJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewot
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLQotICAgIGlmICghbGVuZ3Ro
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQotICAg
ICAgICByZXR1cm4gaXNDU1NUb2tlbml6ZXJJZGVudGlmaWVyKHN0cmluZy5jaGFyYWN0ZXJzOCgp
LCBsZW5ndGgpOwotICAgIHJldHVybiBpc0NTU1Rva2VuaXplcklkZW50aWZpZXIoc3RyaW5nLmNo
YXJhY3RlcnMxNigpLCBsZW5ndGgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0NTU1Rva2VuaXplclVSTChjb25zdCBDaGFyYWN0
ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgY29uc3QgQ2hhcmFj
dGVyVHlwZSogZW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsKLSAgICAKLSAgICBmb3IgKDsgY2hh
cmFjdGVycyAhPSBlbmQ7ICsrY2hhcmFjdGVycykgewotICAgICAgICBDaGFyYWN0ZXJUeXBlIGMg
PSBjaGFyYWN0ZXJzWzBdOwotICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICAgIGNhc2Ug
JyEnOgotICAgICAgICAgICAgY2FzZSAnIyc6Ci0gICAgICAgICAgICBjYXNlICckJzoKLSAgICAg
ICAgICAgIGNhc2UgJyUnOgotICAgICAgICAgICAgY2FzZSAnJic6Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChjIDwgJyon
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaWYg
KGMgPD0gJ34nKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBp
ZiAoYyA8IDEyOCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyAidXJsIiBmcm9tIHRoZSBD
U1MgdG9rZW5pemVyLCBtaW51cyBiYWNrc2xhc2gtZXNjYXBlIHNlcXVlbmNlcwotc3RhdGljIGJv
b2wgaXNDU1NUb2tlbml6ZXJVUkwoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotCi0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgaWYgKHN0cmluZy5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJu
IGlzQ1NTVG9rZW5pemVyVVJMKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgpOwotICAgIHJl
dHVybiBpc0NTU1Rva2VuaXplclVSTChzdHJpbmcuY2hhcmFjdGVyczE2KCksIGxlbmd0aCk7Ci19
Ci0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIFN0
cmluZyBxdW90ZUNTU1N0cmluZ0ludGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICAvLyBGb3IgZWZmaWNpZW5jeSwgd2UgZmlyc3Qg
cHJlLWNhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBxdW90ZWQgc3RyaW5nLCB0aGVuIHdlIGJ1
aWxkIHRoZSBhY3R1YWwgb25lLgotICAgIC8vIFBsZWFzZSBzZWUgYmVsb3cgZm9yIHRoZSBhY3R1
YWwgbG9naWMuCi0gICAgdW5zaWduZWQgcXVvdGVkU3RyaW5nU2l6ZSA9IDI7IC8vIFR3byBxdW90
ZXMgc3Vycm91bmRpbmcgdGhlIGVudGlyZSBzdHJpbmcuCi0gICAgYm9vbCBhZnRlckVzY2FwZSA9
IGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAg
ICAgICBDaGFyYWN0ZXJUeXBlIGNoID0gY2hhcmFjdGVyc1tpXTsKLSAgICAgICAgaWYgKGNoID09
ICdcXCcgfHwgY2ggPT0gJ1wnJykgewotICAgICAgICAgICAgcXVvdGVkU3RyaW5nU2l6ZSArPSAy
OwotICAgICAgICAgICAgYWZ0ZXJFc2NhcGUgPSBmYWxzZTsKLSAgICAgICAgfSBlbHNlIGlmIChj
aCA8IDB4MjAgfHwgY2ggPT0gMHg3RikgewotICAgICAgICAgICAgcXVvdGVkU3RyaW5nU2l6ZSAr
PSAyICsgKGNoID49IDB4MTApOwotICAgICAgICAgICAgYWZ0ZXJFc2NhcGUgPSB0cnVlOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgcXVvdGVkU3RyaW5nU2l6ZSArPSAxICsgKGFmdGVy
RXNjYXBlICYmIChpc0FTQ0lJSGV4RGlnaXQoY2gpIHx8IGNoID09ICcgJykpOwotICAgICAgICAg
ICAgYWZ0ZXJFc2NhcGUgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFN0cmluZ0J1
ZmZlcjxDaGFyYWN0ZXJUeXBlPiBidWZmZXIocXVvdGVkU3RyaW5nU2l6ZSk7Ci0gICAgdW5zaWdu
ZWQgaW5kZXggPSAwOwotICAgIGJ1ZmZlcltpbmRleCsrXSA9ICdcJyc7Ci0gICAgYWZ0ZXJFc2Nh
cGUgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgQ2hhcmFjdGVyVHlwZSBjaCA9IGNoYXJhY3RlcnNbaV07Ci0gICAgICAgIGlmIChj
aCA9PSAnXFwnIHx8IGNoID09ICdcJycpIHsKLSAgICAgICAgICAgIGJ1ZmZlcltpbmRleCsrXSA9
ICdcXCc7Ci0gICAgICAgICAgICBidWZmZXJbaW5kZXgrK10gPSBjaDsKLSAgICAgICAgICAgIGFm
dGVyRXNjYXBlID0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2ggPCAweDIwIHx8IGNoID09
IDB4N0YpIHsgLy8gQ29udHJvbCBjaGFyYWN0ZXJzLgotICAgICAgICAgICAgYnVmZmVyW2luZGV4
KytdID0gJ1xcJzsKLSAgICAgICAgICAgIHBsYWNlQnl0ZUFzSGV4Q29tcHJlc3NJZlBvc3NpYmxl
KGNoLCBidWZmZXIsIGluZGV4LCBMb3dlcmNhc2UpOwotICAgICAgICAgICAgYWZ0ZXJFc2NhcGUg
PSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gU3BhY2UgY2hhcmFjdGVy
IG1heSBiZSByZXF1aXJlZCB0byBzZXBhcmF0ZSBiYWNrc2xhc2gtZXNjYXBlIHNlcXVlbmNlIGFu
ZCBub3JtYWwgY2hhcmFjdGVycy4KLSAgICAgICAgICAgIGlmIChhZnRlckVzY2FwZSAmJiAoaXNB
U0NJSUhleERpZ2l0KGNoKSB8fCBjaCA9PSAnICcpKQotICAgICAgICAgICAgICAgIGJ1ZmZlcltp
bmRleCsrXSA9ICcgJzsKLSAgICAgICAgICAgIGJ1ZmZlcltpbmRleCsrXSA9IGNoOwotICAgICAg
ICAgICAgYWZ0ZXJFc2NhcGUgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBidWZmZXJb
aW5kZXgrK10gPSAnXCcnOwotCi0gICAgQVNTRVJUKHF1b3RlZFN0cmluZ1NpemUgPT0gaW5kZXgp
OwotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7Ci19Ci0KLS8vIFdlIHVzZSBzaW5n
bGUgcXVvdGVzIGZvciBub3cgYmVjYXVzZSBtYXJrdXAuY3BwIHVzZXMgZG91YmxlIHF1b3Rlcy4K
LVN0cmluZyBxdW90ZUNTU1N0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICAvLyBU
aGlzIGZ1bmN0aW9uIGV4cGFuZHMgZWFjaCBjaGFyYWN0ZXIgdG8gYXQgbW9zdCAzIGNoYXJhY3Rl
cnMgKCdcdTAwMTAnIC0+ICdcJyAnMScgJzAnKSBhcyB3ZWxsIGFzIGFkZHMKLSAgICAvLyAyIHF1
b3RlIGNoYXJhY3RlcnMgKGJlZm9yZSBhbmQgYWZ0ZXIpLiBNYWtlIHN1cmUgdGhlIHJlc3VsdGlu
ZyBzaXplICgzICogbGVuZ3RoICsgMikgd2lsbCBub3Qgb3ZlcmZsb3cgdW5zaWduZWQuCi0KLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBpZiAoIWxlbmd0aCkK
LSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiXCdcJyIpOwotCi0gICAgaWYgKGxlbmd0aCA+
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAvIDMgLSAyKQotICAgICAgICBy
ZXR1cm4gZW1wdHlTdHJpbmcoKTsKLQotICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAg
IHJldHVybiBxdW90ZUNTU1N0cmluZ0ludGVybmFsKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBsZW5n
dGgpOwotICAgIHJldHVybiBxdW90ZUNTU1N0cmluZ0ludGVybmFsKHN0cmluZy5jaGFyYWN0ZXJz
MTYoKSwgbGVuZ3RoKTsKLX0KLQotU3RyaW5nIHF1b3RlQ1NTU3RyaW5nSWZOZWVkZWQoY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgcmV0dXJuIGlzQ1NTVG9rZW5pemVySWRlbnRpZmllcihz
dHJpbmcpID8gc3RyaW5nIDogcXVvdGVDU1NTdHJpbmcoc3RyaW5nKTsKLX0KLQotU3RyaW5nIHF1
b3RlQ1NTVVJMSWZOZWVkZWQoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgcmV0dXJuIGlz
Q1NTVG9rZW5pemVyVVJMKHN0cmluZykgPyBzdHJpbmcgOiBxdW90ZUNTU1N0cmluZyhzdHJpbmcp
OwotfQotCi1ib29sIGlzVmFsaWROdGhUb2tlbihjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHRva2Vu
KQotewotICAgIC8vIFRoZSB0b2tlbml6ZXIgY2hlY2tzIGZvciB0aGUgY29uc3RydWN0IG9mIGFu
K2IuCi0gICAgLy8gSG93ZXZlciwgc2luY2UgdGhlIHtpZGVudH0gcnVsZSBwcmVjZWRlcyB0aGUg
e250aH0gcnVsZSwgc29tZSBvZiB0aG9zZQotICAgIC8vIHRva2VucyBhcmUgaWRlbnRpZmllZCBh
cyBzdHJpbmcgbGl0ZXJhbC4gRnVydGhlcm1vcmUgd2UgbmVlZCB0byBhY2NlcHQKLSAgICAvLyAi
b2RkIiBhbmQgImV2ZW4iIHdoaWNoIGRvZXMgbm90IG1hdGNoIHRvIGFuK2IuCi0gICAgcmV0dXJu
IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHRva2VuLCAib2RkIikKLSAgICAgICAgfHwg
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodG9rZW4sICJldmVuIikKLSAgICAgICAgfHwg
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodG9rZW4sICJuIikKLSAgICAgICAgfHwgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodG9rZW4sICItbiIpOwotfQotCi19CkluZGV4OiBX
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NQYXJz
ZXIuaAkocmV2aXNpb24gMjA0NzQzKQorKysgV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsODAwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgTGFy
cyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwLCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA5IC0gMjAx
MCAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkNTU0NhbGN1bGF0aW9uVmFsdWUuaCIKLSNpbmNsdWRl
ICJDU1NHcmFkaWVudFZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTUGFyc2VyTW9kZS5oIgotI2luY2x1
ZGUgIkNTU1BhcnNlclZhbHVlcy5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5LmgiCi0jaW5jbHVk
ZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5U291cmNlRGF0YS5o
IgotI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2lu
Y2x1ZGUgIk1lZGlhUXVlcnkuaCIKLSNpbmNsdWRlICJTb3VyY2VTaXplTGlzdC5oIgotI2luY2x1
ZGUgIlN0eWxlUnVsZUltcG9ydC5oIgotI2luY2x1ZGUgIldlYktpdENTU0ZpbHRlclZhbHVlLmgi
Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgotCi0jaWYgRU5BQkxFKENTU19HUklEX0xBWU9V
VCkKLSNpbmNsdWRlICJHcmlkQXJlYS5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgQW5pbWF0aW9uUGFyc2VDb250ZXh0OwotY2xhc3MgQ1NTQm9yZGVySW1hZ2VTbGlj
ZVZhbHVlOwotY2xhc3MgQ1NTQ29udGVudERpc3RyaWJ1dGlvblZhbHVlOwotY2xhc3MgQ1NTUHJp
bWl0aXZlVmFsdWU7Ci1jbGFzcyBDU1NTZWxlY3Rvckxpc3Q7Ci1jbGFzcyBDU1NWYWx1ZTsKLWNs
YXNzIENTU1ZhbHVlTGlzdDsKLWNsYXNzIENTU0Jhc2ljU2hhcGU7Ci1jbGFzcyBDU1NCYXNpY1No
YXBlQ2lyY2xlOwotY2xhc3MgQ1NTQmFzaWNTaGFwZUVsbGlwc2U7Ci1jbGFzcyBDU1NCYXNpY1No
YXBlSW5zZXQ7Ci1jbGFzcyBDU1NCYXNpY1NoYXBlUGF0aDsKLWNsYXNzIENTU0Jhc2ljU2hhcGVQ
b2x5Z29uOwotY2xhc3MgQ1NTR3JpZExpbmVOYW1lc1ZhbHVlOwotY2xhc3MgQ1NTSW1hZ2VTZXRW
YWx1ZTsKLWNsYXNzIENTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWU7Ci1jbGFzcyBEb2N1bWVudDsK
LWNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBJbW11dGFibGVTdHlsZVByb3BlcnRpZXM7Ci1jbGFzcyBN
ZWRpYVF1ZXJ5RXhwcmVzc2lvbjsKLWNsYXNzIE1lZGlhUXVlcnlTZXQ7Ci1jbGFzcyBNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzOwotY2xhc3MgU1ZHQ29sb3I7Ci1jbGFzcyBTVkdQYWludDsKLWNsYXNz
IFN0eWxlS2V5ZnJhbWU7Ci1jbGFzcyBTdHlsZVByb3BlcnR5U2hvcnRoYW5kOwotY2xhc3MgU3R5
bGVSdWxlOwotY2xhc3MgU3R5bGVSdWxlQmFzZTsKLWNsYXNzIFN0eWxlUnVsZUZvbnRGYWNlOwot
Y2xhc3MgU3R5bGVSdWxlS2V5ZnJhbWVzOwotY2xhc3MgU3R5bGVSdWxlTWVkaWE7Ci1jbGFzcyBT
dHlsZVJ1bGVQYWdlOwotY2xhc3MgU3R5bGVSdWxlUmVnaW9uOwotY2xhc3MgU3R5bGVSdWxlU3Vw
cG9ydHM7Ci1jbGFzcyBTdHlsZVJ1bGVWaWV3cG9ydDsKLWNsYXNzIFN0eWxlS2V5ZnJhbWU7Ci1j
bGFzcyBTdHlsZVNoZWV0Q29udGVudHM7Ci1jbGFzcyBTdHlsZWRFbGVtZW50OwotY2xhc3MgV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWU7Ci0KLWNsYXNzIENTU1BhcnNlciB7Ci0gICAgZnJpZW5kIGlu
bGluZSBpbnQgY3NzeXlsZXgodm9pZCosIENTU1BhcnNlciopOwotCi1wdWJsaWM6Ci0gICAgc3Ry
dWN0IExvY2F0aW9uOwotICAgIGVudW0gU3ludGF4RXJyb3JUeXBlIHsKLSAgICAgICAgUHJvcGVy
dHlEZWNsYXJhdGlvbkVycm9yLAotICAgICAgICBHZW5lcmFsU3ludGF4RXJyb3IKLSAgICB9Owot
Ci0gICAgZW51bSBjbGFzcyBQYXJzZVJlc3VsdCB7Ci0gICAgICAgIENoYW5nZWQsCi0gICAgICAg
IFVuY2hhbmdlZCwKLSAgICAgICAgRXJyb3IKLSAgICB9OwotCi0gICAgY2xhc3MgVmFsdWVXaXRo
Q2FsY3VsYXRpb24gewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgVmFsdWVXaXRoQ2Fs
Y3VsYXRpb24oQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQotICAgICAgICAgICAgOiBtX3ZhbHVlKHZh
bHVlKQotICAgICAgICB7IH0KLQotICAgICAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgICAgIG9wZXJhdG9yIENTU1BhcnNlclZhbHVlJigp
IHsgcmV0dXJuIG1fdmFsdWU7IH0KLQotICAgICAgICBSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBjYWxj
dWxhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY2FsY3VsYXRpb247IH0KLSAgICAgICAgdm9pZCBz
ZXRDYWxjdWxhdGlvbihSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiYmIGNhbGN1bGF0aW9uKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNDYWxjdWxhdGlvbihtX3ZhbHVlKSk7Ci0gICAgICAg
ICAgICBtX2NhbGN1bGF0aW9uID0gY2FsY3VsYXRpb247Ci0gICAgICAgIH0KLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIENTU1BhcnNlclZhbHVlJiBtX3ZhbHVlOwotICAgICAgICBSZWZQdHI8Q1NT
Q2FsY1ZhbHVlPiBtX2NhbGN1bGF0aW9uOwotICAgIH07Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBD
U1NQYXJzZXIoY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIH5D
U1NQYXJzZXIoKTsKLQotICAgIHZvaWQgcGFyc2VTaGVldChTdHlsZVNoZWV0Q29udGVudHMqLCBj
b25zdCBTdHJpbmcmLCBjb25zdCBUZXh0UG9zaXRpb24mLCBSdWxlU291cmNlRGF0YUxpc3QqLCBi
b29sIGxvZ0Vycm9ycyk7Ci0gICAgUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHBhcnNlUnVsZShTdHls
ZVNoZWV0Q29udGVudHMqLCBjb25zdCBTdHJpbmcmKTsKLSAgICBSZWZQdHI8U3R5bGVLZXlmcmFt
ZT4gcGFyc2VLZXlmcmFtZVJ1bGUoU3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3QgU3RyaW5nJik7
Ci0gICAgYm9vbCBwYXJzZVN1cHBvcnRzQ29uZGl0aW9uKGNvbnN0IFN0cmluZyYpOwotCi0gICAg
c3RhdGljIFBhcnNlUmVzdWx0IHBhcnNlVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyYsIENT
U1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2Rl
LCBTdHlsZVNoZWV0Q29udGVudHMqKTsKLSAgICBzdGF0aWMgUGFyc2VSZXN1bHQgcGFyc2VDdXN0
b21Qcm9wZXJ0eVZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMmLCBjb25zdCBBdG9taWNTdHJp
bmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNl
ck1vZGUsIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpOwotCi0gICAgc3Rh
dGljIGJvb2wgcGFyc2VDb2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJpbmcmLCBib29sIHN0
cmljdCA9IGZhbHNlKTsKLSAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkU3lzdGVtQ29sb3JWYWx1ZShD
U1NWYWx1ZUlEKTsKLSAgICBzdGF0aWMgYm9vbCBwYXJzZVN5c3RlbUNvbG9yKFJHQkEzMiYgY29s
b3IsIGNvbnN0IFN0cmluZyYsIERvY3VtZW50Kik7Ci0gICAgc3RhdGljIFJlZlB0cjxDU1NWYWx1
ZUxpc3Q+IHBhcnNlRm9udEZhY2VWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmKTsKLSAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlVmFsaWRQcmltaXRpdmUoQ1NTVmFsdWVJRCBpZGVu
dCwgVmFsdWVXaXRoQ2FsY3VsYXRpb24mKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgcGFy
c2VEZWNsYXJhdGlvbihNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgU3RyaW5nJiwgUmVm
UHRyPENTU1J1bGVTb3VyY2VEYXRhPiYmLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHls
ZVNoZWV0KTsKLSAgICBzdGF0aWMgUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydGllcz4gcGFyc2VJ
bmxpbmVTdHlsZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYsIEVsZW1lbnQqKTsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4gcGFyc2VNZWRpYVF1ZXJ5KGNvbnN0IFN0cmluZyYpOwot
Ci0gICAgdm9pZCBhZGRQcm9wZXJ0eVdpdGhQcmVmaXhpbmdWYXJpYW50KENTU1Byb3BlcnR5SUQs
IFJlZlB0cjxDU1NWYWx1ZT4mJiwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgaW1wbGljaXQgPSBmYWxz
ZSk7Ci0gICAgdm9pZCBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBSZWZQdHI8Q1NTVmFsdWU+
JiYsIGJvb2wgaW1wb3J0YW50LCBib29sIGltcGxpY2l0ID0gZmFsc2UpOwotICAgIHZvaWQgcm9s
bGJhY2tMYXN0UHJvcGVydGllcyhpbnQgbnVtKTsKLSAgICBib29sIGhhc1Byb3BlcnRpZXMoKSBj
b25zdCB7IHJldHVybiAhbV9wYXJzZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKTsgfQotICAgIHZvaWQg
YWRkRXhwYW5kZWRQcm9wZXJ0eUZvclZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBSZWY8Q1NT
VmFsdWU+JiYsIGJvb2wpOwotCi0gICAgYm9vbCBwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQsIGJv
b2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNlU2hvcnRoYW5kKENTU1Byb3BlcnR5SUQsIGNv
bnN0IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmLCBib29sIGltcG9ydGFudCk7Ci0gICAgYm9vbCBw
YXJzZTRWYWx1ZXMoQ1NTUHJvcGVydHlJRCwgY29uc3QgQ1NTUHJvcGVydHlJRCogcHJvcGVydGll
cywgYm9vbCBpbXBvcnRhbnQpOwotICAgIGJvb2wgcGFyc2VDb250ZW50KENTU1Byb3BlcnR5SUQs
IGJvb2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNlUXVvdGVzKENTU1Byb3BlcnR5SUQsIGJv
b2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNlQWx0KENTU1Byb3BlcnR5SUQsIGJvb2wgaW1w
b3J0YW50KTsKLSAgICAKLSAgICBib29sIHBhcnNlQ3VzdG9tUHJvcGVydHlEZWNsYXJhdGlvbihi
b29sIGltcG9ydGFudCwgQ1NTVmFsdWVJRCk7Ci0gICAgCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBwYXJzZUF0dHIoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzKTsKLQotICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VCYWNrZ3JvdW5kQ29sb3IoKTsKLQotICAgIHN0cnVj
dCBTb3VyY2VTaXplIHsKLSAgICAgICAgTWVkaWFRdWVyeUV4cHJlc3Npb24gZXhwcmVzc2lvbjsK
LSAgICAgICAgUmVmPENTU1ZhbHVlPiBsZW5ndGg7Ci0KLSAgICAgICAgU291cmNlU2l6ZShTb3Vy
Y2VTaXplJiYpOwotICAgICAgICBTb3VyY2VTaXplKE1lZGlhUXVlcnlFeHByZXNzaW9uJiYsIFJl
ZjxDU1NWYWx1ZT4mJik7Ci0gICAgfTsKLSAgICBWZWN0b3I8U291cmNlU2l6ZT4gcGFyc2VTaXpl
c0F0dHJpYnV0ZShTdHJpbmdWaWV3KTsKLSAgICBPcHRpb25hbDxTb3VyY2VTaXplPiBzb3VyY2VT
aXplKE1lZGlhUXVlcnlFeHByZXNzaW9uJiYsIENTU1BhcnNlclZhbHVlJik7Ci0KLSAgICBib29s
IHBhcnNlRmlsbEltYWdlKENTU1BhcnNlclZhbHVlTGlzdCYsIFJlZlB0cjxDU1NWYWx1ZT4mKTsK
LQotICAgIGVudW0gRmlsbFBvc2l0aW9uRmxhZyB7IEludmFsaWRGaWxsUG9zaXRpb24gPSAwLCBB
bWJpZ3VvdXNGaWxsUG9zaXRpb24gPSAxLCBYRmlsbFBvc2l0aW9uID0gMiwgWUZpbGxQb3NpdGlv
biA9IDQgfTsKLSAgICBlbnVtIEZpbGxQb3NpdGlvblBhcnNpbmdNb2RlIHsgUmVzb2x2ZVZhbHVl
c0FzUGVyY2VudCA9IDAsIFJlc29sdmVWYWx1ZXNBc0tleXdvcmQgPSAxIH07Ci0gICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZUZpbGxQb3NpdGlvbkNvbXBvbmVudChDU1NQYXJzZXJW
YWx1ZUxpc3QmLCB1bnNpZ25lZCYgY3VtdWxhdGl2ZUZsYWdzLCBGaWxsUG9zaXRpb25GbGFnJiBp
bmRpdmlkdWFsRmxhZywgRmlsbFBvc2l0aW9uUGFyc2luZ01vZGUgPSBSZXNvbHZlVmFsdWVzQXNQ
ZXJjZW50KTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlUG9zaXRpb25YKENT
U1BhcnNlclZhbHVlTGlzdCYpOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VQ
b3NpdGlvblkoQ1NTUGFyc2VyVmFsdWVMaXN0Jik7Ci0gICAgdm9pZCBwYXJzZTJWYWx1ZXNGaWxs
UG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0JiwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYs
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mKTsKLSAgICBib29sIGlzUG90ZW50aWFsUG9zaXRp
b25WYWx1ZShDU1NQYXJzZXJWYWx1ZSYpOwotICAgIHZvaWQgcGFyc2VGaWxsUG9zaXRpb24oQ1NT
UGFyc2VyVmFsdWVMaXN0JiwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYsIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4mKTsKLSAgICB2b2lkIHBhcnNlM1ZhbHVlc0ZpbGxQb3NpdGlvbihDU1NQ
YXJzZXJWYWx1ZUxpc3QmLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiwgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiYsIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4mJiwgUmVmPENTU1ByaW1pdGl2
ZVZhbHVlPiYmKTsKLSAgICB2b2lkIHBhcnNlNFZhbHVlc0ZpbGxQb3NpdGlvbihDU1NQYXJzZXJW
YWx1ZUxpc3QmLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiwgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiYsIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4mJiwgUmVmPENTU1ByaW1pdGl2ZVZhbHVl
PiYmKTsKLQotICAgIHZvaWQgcGFyc2VGaWxsUmVwZWF0KFJlZlB0cjxDU1NWYWx1ZT4mLCBSZWZQ
dHI8Q1NTVmFsdWU+Jik7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZUZpbGxT
aXplKENTU1Byb3BlcnR5SUQsIGJvb2wgJmFsbG93Q29tbWEpOwotCi0gICAgYm9vbCBwYXJzZUZp
bGxQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgQ1NTUHJvcGVydHlJRCYgcHJvcElkMSwg
Q1NTUHJvcGVydHlJRCYgcHJvcElkMiwgUmVmUHRyPENTU1ZhbHVlPiYsIFJlZlB0cjxDU1NWYWx1
ZT4mKTsKLSAgICBib29sIHBhcnNlRmlsbFNob3J0aGFuZChDU1NQcm9wZXJ0eUlELCBjb25zdCBD
U1NQcm9wZXJ0eUlEKiBwcm9wZXJ0aWVzLCBpbnQgbnVtUHJvcGVydGllcywgYm9vbCBpbXBvcnRh
bnQpOwotCi0gICAgdm9pZCBhZGRGaWxsVmFsdWUoUmVmUHRyPENTU1ZhbHVlPiYgbHZhbCwgUmVm
PENTU1ZhbHVlPiYmIHJ2YWwpOwotICAgIHZvaWQgYWRkQW5pbWF0aW9uVmFsdWUoUmVmUHRyPENT
U1ZhbHVlPiYgbHZhbCwgUmVmPENTU1ZhbHVlPiYmIHJ2YWwpOwotCi0gICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBwYXJzZUFuaW1hdGlvbkRlbGF5KCk7Ci0gICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBwYXJzZUFuaW1hdGlvbkRpcmVjdGlvbigpOwotICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gcGFyc2VBbmltYXRpb25EdXJhdGlvbigpOwotICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gcGFyc2VBbmltYXRpb25GaWxsTW9kZSgpOwotICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gcGFyc2VBbmltYXRpb25JdGVyYXRpb25Db3VudCgpOwotICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VBbmltYXRpb25OYW1lKCk7Ci0gICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBwYXJzZUFuaW1hdGlvblBsYXlTdGF0ZSgpOwotICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gcGFyc2VBbmltYXRpb25Qcm9wZXJ0eShBbmltYXRpb25QYXJzZUNvbnRl
eHQmKTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24o
KTsKLSNpZiBFTkFCTEUoQ1NTX0FOSU1BVElPTlNfTEVWRUxfMikKLSAgICBSZWZQdHI8Q1NTVmFs
dWU+IHBhcnNlQW5pbWF0aW9uVHJpZ2dlcigpOwotI2VuZGlmCi0gICAgc3RhdGljIFZlY3Rvcjxk
b3VibGU+IHBhcnNlS2V5ZnJhbWVTZWxlY3Rvcihjb25zdCBTdHJpbmcmKTsKLQotICAgIGJvb2wg
cGFyc2VUcmFuc2Zvcm1PcmlnaW5TaG9ydGhhbmQoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYs
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mLCBSZWZQdHI8Q1NTVmFsdWU+Jik7Ci0gICAgT3B0
aW9uYWw8ZG91YmxlPiBwYXJzZUN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZShDU1NQYXJz
ZXJWYWx1ZUxpc3QmKTsKLSAgICBPcHRpb25hbDxkb3VibGU+IHBhcnNlU3ByaW5nVGltaW5nRnVu
Y3Rpb25WYWx1ZShDU1NQYXJzZXJWYWx1ZUxpc3QmKTsKLSAgICBib29sIHBhcnNlQW5pbWF0aW9u
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgUmVmUHRyPENTU1ZhbHVlPiYsIEFuaW1hdGlvblBhcnNl
Q29udGV4dCYpOwotICAgIGJvb2wgcGFyc2VUcmFuc2l0aW9uU2hvcnRoYW5kKENTU1Byb3BlcnR5
SUQsIGJvb2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNlQW5pbWF0aW9uU2hvcnRoYW5kKENT
U1Byb3BlcnR5SUQsIGJvb2wgaW1wb3J0YW50KTsKLQotICAgIGJvb2wgaXNTcHJpbmdUaW1pbmdG
dW5jdGlvbkVuYWJsZWQoKSBjb25zdDsKLQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
cGFyc2VDb2x1bW5XaWR0aCgpOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VD
b2x1bW5Db3VudCgpOwotICAgIGJvb2wgcGFyc2VDb2x1bW5zU2hvcnRoYW5kKGJvb2wgaW1wb3J0
YW50KTsKLQotI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQotICAgIGJvb2wgaXNUZXh0
QXV0b3NpemluZ0VuYWJsZWQoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKENTU19HUklE
X0xBWU9VVCkKLSAgICBib29sIGlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSBjb25zdDsKLSAgICBS
ZWZQdHI8Q1NTVmFsdWU+IHBhcnNlR3JpZFBvc2l0aW9uKCk7Ci0gICAgYm9vbCBwYXJzZUdyaWRJ
dGVtUG9zaXRpb25TaG9ydGhhbmQoQ1NTUHJvcGVydHlJRCwgYm9vbCBpbXBvcnRhbnQpOwotICAg
IGVudW0gVHJhY2tMaXN0VHlwZSB7IEdyaWRUZW1wbGF0ZSwgR3JpZFRlbXBsYXRlTm9SZXBlYXQs
IEdyaWRBdXRvIH07Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUdyaWRUZW1wbGF0ZUNvbHVt
bnMoVHJhY2tMaXN0VHlwZSA9IEdyaWRUZW1wbGF0ZSk7Ci0gICAgYm9vbCBwYXJzZUdyaWRUZW1w
bGF0ZVJvd3NBbmRBcmVhc0FuZENvbHVtbnMoYm9vbCBpbXBvcnRhbnQpOwotICAgIGJvb2wgcGFy
c2VHcmlkVGVtcGxhdGVTaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpOwotICAgIGJvb2wgcGFyc2VH
cmlkU2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNlR3JpZEFyZWFTaG9y
dGhhbmQoYm9vbCBpbXBvcnRhbnQpOwotICAgIGJvb2wgcGFyc2VHcmlkR2FwU2hvcnRoYW5kKGJv
b2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNlU2luZ2xlR3JpZEFyZWFMb25naGFuZChSZWZQ
dHI8Q1NTVmFsdWU+Jik7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUdyaWRUcmFja0xpc3Qo
VHJhY2tMaXN0VHlwZSk7Ci0gICAgYm9vbCBwYXJzZUdyaWRUcmFja1JlcGVhdEZ1bmN0aW9uKENT
U1ZhbHVlTGlzdCYsIGJvb2wmIGlzQXV0b1JlcGVhdCwgYm9vbCYgYWxsVHJhY2tzQXJlRml4ZWRT
aXplZCk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUdyaWRUcmFja1NpemUoQ1NTUGFyc2Vy
VmFsdWVMaXN0JiBpbnB1dExpc3QpOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFy
c2VHcmlkQnJlYWR0aChDU1NQYXJzZXJWYWx1ZSYpOwotICAgIGJvb2wgcGFyc2VHcmlkVGVtcGxh
dGVBcmVhc1JvdyhOYW1lZEdyaWRBcmVhTWFwJiwgY29uc3QgdW5zaWduZWQsIHVuc2lnbmVkJik7
Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUdyaWRUZW1wbGF0ZUFyZWFzKCk7Ci0gICAgYm9v
bCBwYXJzZUdyaWRMaW5lTmFtZXMoQ1NTUGFyc2VyVmFsdWVMaXN0JiwgQ1NTVmFsdWVMaXN0Jiwg
Q1NTR3JpZExpbmVOYW1lc1ZhbHVlKiA9IG51bGxwdHIpOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4g
cGFyc2VHcmlkQXV0b0Zsb3coQ1NTUGFyc2VyVmFsdWVMaXN0Jik7Ci0jZW5kaWYKLQotICAgIGJv
b2wgcGFyc2VEYXNoYm9hcmRSZWdpb25zKENTU1Byb3BlcnR5SUQsIGJvb2wgaW1wb3J0YW50KTsK
LQotICAgIGJvb2wgcGFyc2VDbGlwU2hhcGUoQ1NTUHJvcGVydHlJRCwgYm9vbCBpbXBvcnRhbnQp
OwotCi0gICAgYm9vbCBwYXJzZUxlZ2FjeVBvc2l0aW9uKENTU1Byb3BlcnR5SUQsIGJvb2wgaW1w
b3J0YW50KTsKLSAgICBib29sIHBhcnNlSXRlbVBvc2l0aW9uT3ZlcmZsb3dQb3NpdGlvbihDU1NQ
cm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7Ci0gICAgUmVmUHRyPENTU0NvbnRlbnREaXN0cmli
dXRpb25WYWx1ZT4gcGFyc2VDb250ZW50RGlzdHJpYnV0aW9uT3ZlcmZsb3dQb3NpdGlvbigpOwot
Ci0jaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVNoYXBl
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7Ci0jZW5kaWYKLQotICAgIFJlZlB0cjxDU1NWYWx1ZUxp
c3Q+IHBhcnNlQmFzaWNTaGFwZUFuZE9yQm94KENTU1Byb3BlcnR5SUQgcHJvcElkKTsKLSAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlQmFzaWNTaGFwZSgpOwotICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VTaGFwZVJhZGl1cyhDU1NQYXJzZXJWYWx1ZSYpOwotICAg
IFJlZlB0cjxDU1NCYXNpY1NoYXBlQ2lyY2xlPiBwYXJzZUJhc2ljU2hhcGVDaXJjbGUoQ1NTUGFy
c2VyVmFsdWVMaXN0Jik7Ci0gICAgUmVmUHRyPENTU0Jhc2ljU2hhcGVFbGxpcHNlPiBwYXJzZUJh
c2ljU2hhcGVFbGxpcHNlKENTU1BhcnNlclZhbHVlTGlzdCYpOwotICAgIFJlZlB0cjxDU1NCYXNp
Y1NoYXBlUG9seWdvbj4gcGFyc2VCYXNpY1NoYXBlUG9seWdvbihDU1NQYXJzZXJWYWx1ZUxpc3Qm
KTsKLSAgICBSZWZQdHI8Q1NTQmFzaWNTaGFwZVBhdGg+IHBhcnNlQmFzaWNTaGFwZVBhdGgoQ1NT
UGFyc2VyVmFsdWVMaXN0Jik7Ci0gICAgUmVmUHRyPENTU0Jhc2ljU2hhcGVJbnNldD4gcGFyc2VC
YXNpY1NoYXBlSW5zZXQoQ1NTUGFyc2VyVmFsdWVMaXN0Jik7Ci0KLSAgICBib29sIHBhcnNlRm9u
dChib29sIGltcG9ydGFudCk7Ci0gICAgdm9pZCBwYXJzZVN5c3RlbUZvbnQoYm9vbCBpbXBvcnRh
bnQpOwotICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBhcnNlRm9udEZhbWlseSgpOwotCi0gICAg
Ym9vbCBwYXJzZUNvdW50ZXIoQ1NTUHJvcGVydHlJRCwgaW50IGRlZmF1bHRWYWx1ZSwgYm9vbCBp
bXBvcnRhbnQpOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VDb3VudGVyQ29u
dGVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIGFyZ3MsIGJvb2wgY291bnRlcnMpOwotCi0gICAgYm9v
bCBwYXJzZUNvbG9yUGFyYW1ldGVycyhDU1NQYXJzZXJWYWx1ZSYsIGludCogY29sb3JWYWx1ZXMs
IGJvb2wgcGFyc2VBbHBoYSk7Ci0gICAgYm9vbCBwYXJzZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2Vy
VmFsdWUmLCBkb3VibGUqIGNvbG9yVmFsdWVzLCBib29sIHBhcnNlQWxwaGEpOwotICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VDb2xvcihDU1NQYXJzZXJWYWx1ZSogPSBudWxscHRy
KTsKLSAgICBib29sIHBhcnNlQ29sb3JGcm9tVmFsdWUoQ1NTUGFyc2VyVmFsdWUmLCBSR0JBMzIm
KTsKLSAgICB2b2lkIHBhcnNlU2VsZWN0b3IoY29uc3QgU3RyaW5nJiwgQ1NTU2VsZWN0b3JMaXN0
Jik7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlPgotICAgIHN0YXRpYyBib29s
IGZhc3RQYXJzZUNvbG9yKFJHQkEzMiYsIGNvbnN0IFN0cmluZ1R5cGUmLCBib29sIHN0cmljdCk7
Ci0KLSAgICBib29sIHBhcnNlTGluZUhlaWdodChib29sIGltcG9ydGFudCk7Ci0gICAgYm9vbCBw
YXJzZUZvbnRTaXplKGJvb2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNlRm9udFdlaWdodChi
b29sIGltcG9ydGFudCk7Ci0gICAgYm9vbCBwYXJzZUZvbnRTeW50aGVzaXMoYm9vbCBpbXBvcnRh
bnQpOwotICAgIGJvb2wgcGFyc2VGb250RmFjZVNyYygpOwotICAgIGJvb2wgcGFyc2VGb250RmFj
ZVVuaWNvZGVSYW5nZSgpOwotCi0gICAgYm9vbCBwYXJzZVNWR1ZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcElkLCBib29sIGltcG9ydGFudCk7Ci0gICAgUmVmUHRyPFNWR1BhaW50PiBwYXJzZVNWR1Bh
aW50KCk7Ci0gICAgUmVmUHRyPFNWR0NvbG9yPiBwYXJzZVNWR0NvbG9yKCk7Ci0gICAgUmVmUHRy
PENTU1ZhbHVlTGlzdD4gcGFyc2VTVkdTdHJva2VEYXNoYXJyYXkoKTsKLSAgICBSZWZQdHI8Q1NT
VmFsdWVMaXN0PiBwYXJzZVBhaW50T3JkZXIoKTsKLQotICAgIC8vIENTUzMgUGFyc2luZyBSb3V0
aW5lcyAoZm9yIHByb3BlcnRpZXMgc3BlY2lmaWMgdG8gQ1NTMykKLSAgICBSZWZQdHI8Q1NTVmFs
dWVMaXN0PiBwYXJzZVNoYWRvdyhDU1NQYXJzZXJWYWx1ZUxpc3QmLCBDU1NQcm9wZXJ0eUlEKTsK
LSAgICBib29sIHBhcnNlQm9yZGVySW1hZ2UoQ1NTUHJvcGVydHlJRCwgUmVmUHRyPENTU1ZhbHVl
PiYsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpOwotICAgIGJvb2wgcGFyc2VCb3JkZXJJbWFnZVJl
cGVhdChSZWZQdHI8Q1NTVmFsdWU+Jik7Ci0gICAgYm9vbCBwYXJzZUJvcmRlckltYWdlU2xpY2Uo
Q1NTUHJvcGVydHlJRCwgUmVmUHRyPENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZT4mKTsKLSAgICBi
b29sIHBhcnNlQm9yZGVySW1hZ2VXaWR0aChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+Jik7Ci0g
ICAgYm9vbCBwYXJzZUJvcmRlckltYWdlT3V0c2V0KFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4m
KTsKLSAgICBib29sIHBhcnNlQm9yZGVyUmFkaXVzKENTU1Byb3BlcnR5SUQsIGJvb2wgaW1wb3J0
YW50KTsKLQotICAgIGJvb2wgcGFyc2VBc3BlY3RSYXRpbyhib29sIGltcG9ydGFudCk7Ci0KLSAg
ICBib29sIHBhcnNlUmVmbGVjdChDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7Ci0KLSAg
ICBib29sIHBhcnNlRmxleChDU1NQYXJzZXJWYWx1ZUxpc3QmIGFyZ3MsIGJvb2wgaW1wb3J0YW50
KTsKLQotICAgIC8vIEltYWdlIGdlbmVyYXRvcnMKLSAgICBib29sIHBhcnNlQ2FudmFzKENTU1Bh
cnNlclZhbHVlTGlzdCYsIFJlZlB0cjxDU1NWYWx1ZT4mKTsKLSAgICBib29sIHBhcnNlTmFtZWRJ
bWFnZShDU1NQYXJzZXJWYWx1ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWU+Jik7Ci0KLSAgICBib29s
IHBhcnNlRGVwcmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCYsIFJlZlB0cjxDU1NW
YWx1ZT4mKTsKLSAgICBib29sIHBhcnNlRGVwcmVjYXRlZExpbmVhckdyYWRpZW50KENTU1BhcnNl
clZhbHVlTGlzdCYsIFJlZlB0cjxDU1NWYWx1ZT4mLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRp
bmcpOwotICAgIGJvb2wgcGFyc2VEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVmFs
dWVMaXN0JiwgUmVmUHRyPENTU1ZhbHVlPiYsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZyk7
Ci0gICAgYm9vbCBwYXJzZUxpbmVhckdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCYsIFJlZlB0
cjxDU1NWYWx1ZT4mLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcpOwotICAgIGJvb2wgcGFy
c2VSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWU+Jiwg
Q1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nKTsKLSAgICBib29sIHBhcnNlR3JhZGllbnRDb2xv
clN0b3BzKENTU1BhcnNlclZhbHVlTGlzdCYsIENTU0dyYWRpZW50VmFsdWUmLCBib29sIGV4cGVj
dENvbW1hKTsKLQotICAgIGJvb2wgcGFyc2VDcm9zc2ZhZGUoQ1NTUGFyc2VyVmFsdWVMaXN0Jiwg
UmVmUHRyPENTU1ZhbHVlPiYsIGJvb2wgcHJlZml4ZWQpOwotCi0jaWYgRU5BQkxFKENTU19JTUFH
RV9SRVNPTFVUSU9OKQotICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBhcnNlSW1hZ2VSZXNvbHV0
aW9uKCk7Ci0jZW5kaWYKLQotICAgIFJlZlB0cjxDU1NJbWFnZVNldFZhbHVlPiBwYXJzZUltYWdl
U2V0KCk7Ci0KLSAgICBib29sIHBhcnNlRmlsdGVySW1hZ2UoQ1NTUGFyc2VyVmFsdWVMaXN0Jiwg
UmVmUHRyPENTU1ZhbHVlPiYpOwotCi0gICAgYm9vbCBwYXJzZUZpbHRlcihDU1NQYXJzZXJWYWx1
ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWVMaXN0PiYpOwotICAgIFJlZlB0cjxXZWJLaXRDU1NGaWx0
ZXJWYWx1ZT4gcGFyc2VCdWlsdGluRmlsdGVyQXJndW1lbnRzKENTU1BhcnNlclZhbHVlTGlzdCYs
IFdlYktpdENTU0ZpbHRlclZhbHVlOjpGaWx0ZXJPcGVyYXRpb25UeXBlKTsKLQotICAgIFJlZlB0
cjxDU1NWYWx1ZT4gcGFyc2VDbGlwUGF0aCgpOwotCi0gICAgc3RhdGljIGJvb2wgaXNCbGVuZE1v
ZGUoQ1NTVmFsdWVJRCk7Ci0gICAgc3RhdGljIGJvb2wgaXNDb21wb3NpdGVPcGVyYXRvcihDU1NW
YWx1ZUlEKTsKLQotICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBhcnNlVHJhbnNmb3JtKCk7Ci0g
ICAgUmVmUHRyPFdlYktpdENTU1RyYW5zZm9ybVZhbHVlPiBwYXJzZVRyYW5zZm9ybVZhbHVlKENT
U1BhcnNlclZhbHVlJik7Ci0gICAgYm9vbCBwYXJzZVRyYW5zZm9ybU9yaWdpbihDU1NQcm9wZXJ0
eUlEIHByb3BJZCwgQ1NTUHJvcGVydHlJRCYgcHJvcElkMSwgQ1NTUHJvcGVydHlJRCYgcHJvcElk
MiwgQ1NTUHJvcGVydHlJRCYgcHJvcElkMywgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYsIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mLCBSZWZQdHI8Q1NTVmFsdWU+Jik7Ci0gICAgYm9vbCBw
YXJzZVBlcnNwZWN0aXZlT3JpZ2luKENTU1Byb3BlcnR5SUQgcHJvcElkLCBDU1NQcm9wZXJ0eUlE
JiBwcm9wSWQxLCBDU1NQcm9wZXJ0eUlEJiBwcm9wSWQyLCAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiYsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mKTsKLQotICAgIGJvb2wgcGFyc2VUZXh0
RW1waGFzaXNTdHlsZShib29sIGltcG9ydGFudCk7Ci0gICAgYm9vbCBwYXJzZVRleHRFbXBoYXNp
c1Bvc2l0aW9uKGJvb2wgaW1wb3J0YW50KTsKLQotICAgIHZvaWQgYWRkVGV4dERlY29yYXRpb25Q
cm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBSZWZQdHI8Q1NTVmFsdWU+JiYsIGJvb2wgaW1wb3J0YW50
KTsKLSAgICBib29sIHBhcnNlVGV4dERlY29yYXRpb24oQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJv
b2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNlVGV4dERlY29yYXRpb25Ta2lwKGJvb2wgaW1w
b3J0YW50KTsKLSAgICBib29sIHBhcnNlVGV4dFVuZGVybGluZVBvc2l0aW9uKGJvb2wgaW1wb3J0
YW50KTsKLQotICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBhcnNlVGV4dEluZGVudCgpOwotICAg
IAotICAgIGJvb2wgcGFyc2VIYW5naW5nUHVuY3R1YXRpb24oYm9vbCBpbXBvcnRhbnQpOwotCi0g
ICAgYm9vbCBwYXJzZUxpbmVCb3hDb250YWluKGJvb2wgaW1wb3J0YW50KTsKLSAgICBSZWZQdHI8
Q1NTQ2FsY1ZhbHVlPiBwYXJzZUNhbGN1bGF0aW9uKENTU1BhcnNlclZhbHVlJiwgQ2FsY3VsYXRp
b25QZXJtaXR0ZWRWYWx1ZVJhbmdlKTsKLQotICAgIGJvb2wgcGFyc2VGb250RmVhdHVyZVRhZyhD
U1NWYWx1ZUxpc3QmKTsKLSAgICBib29sIHBhcnNlRm9udEZlYXR1cmVTZXR0aW5ncyhib29sIGlt
cG9ydGFudCk7Ci0KLSAgICBib29sIHBhcnNlRmxvd1RocmVhZChDU1NQcm9wZXJ0eUlELCBib29s
IGltcG9ydGFudCk7Ci0gICAgYm9vbCBwYXJzZVJlZ2lvblRocmVhZChDU1NQcm9wZXJ0eUlELCBi
b29sIGltcG9ydGFudCk7Ci0KLSAgICBib29sIHBhcnNlRm9udFZhcmlhbnRMaWdhdHVyZXMoYm9v
bCBpbXBvcnRhbnQsIGJvb2wgdW5rbm93bklzRmFpbHVyZSwgYm9vbCBpbXBsaWNpdCk7Ci0gICAg
Ym9vbCBwYXJzZUZvbnRWYXJpYW50TnVtZXJpYyhib29sIGltcG9ydGFudCwgYm9vbCB1bmtub3du
SXNGYWlsdXJlLCBib29sIGltcGxpY2l0KTsKLSAgICBib29sIHBhcnNlRm9udFZhcmlhbnRFYXN0
QXNpYW4oYm9vbCBpbXBvcnRhbnQsIGJvb2wgdW5rbm93bklzRmFpbHVyZSwgYm9vbCBpbXBsaWNp
dCk7Ci0gICAgYm9vbCBwYXJzZUZvbnRWYXJpYW50KGJvb2wgaW1wb3J0YW50KTsKLQotICAgIGJv
b2wgcGFyc2VXaWxsQ2hhbmdlKGJvb2wgaW1wb3J0YW50KTsKLQotICAgIC8vIEZhc3RlciB0aGFu
IGRvaW5nIGEgbmV3L2RlbGV0ZSBlYWNoIHRpbWUgc2luY2UgaXQga2VlcHMgb25lIHZlY3Rvci4K
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxl
Y3Rvcj4+PiBjcmVhdGVTZWxlY3RvclZlY3RvcigpOwotICAgIHZvaWQgcmVjeWNsZVNlbGVjdG9y
VmVjdG9yKHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNl
bGVjdG9yPj4+KTsKLQotICAgIFJlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+IGNyZWF0ZUltcG9ydFJ1
bGUoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiwgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+JiYpOwotICAg
IFJlZlB0cjxTdHlsZUtleWZyYW1lPiBjcmVhdGVLZXlmcmFtZShDU1NQYXJzZXJWYWx1ZUxpc3Qm
KTsKLSAgICBSZWY8U3R5bGVSdWxlS2V5ZnJhbWVzPiBjcmVhdGVLZXlmcmFtZXNSdWxlKGNvbnN0
IFN0cmluZyYsIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8UmVmUHRyPFN0eWxlS2V5ZnJhbWU+Pj4p
OwotCi0gICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiBSdWxlTGlzdDsK
LSAgICBSZWY8U3R5bGVSdWxlTWVkaWE+IGNyZWF0ZU1lZGlhUnVsZShSZWZQdHI8TWVkaWFRdWVy
eVNldD4mJiwgUnVsZUxpc3QqKTsKLSAgICBSZWY8U3R5bGVSdWxlTWVkaWE+IGNyZWF0ZUVtcHR5
TWVkaWFSdWxlKFJ1bGVMaXN0Kik7Ci0gICAgUmVmUHRyPFN0eWxlUnVsZT4gY3JlYXRlU3R5bGVS
dWxlKFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+Piogc2VsZWN0b3Jz
KTsKLSAgICBSZWZQdHI8U3R5bGVSdWxlRm9udEZhY2U+IGNyZWF0ZUZvbnRGYWNlUnVsZSgpOwot
ICAgIFJlZlB0cjxTdHlsZVJ1bGVQYWdlPiBjcmVhdGVQYWdlUnVsZShzdGQ6OnVuaXF1ZV9wdHI8
Q1NTUGFyc2VyU2VsZWN0b3I+IHBhZ2VTZWxlY3Rvcik7Ci0gICAgUmVmUHRyPFN0eWxlUnVsZVJl
Z2lvbj4gY3JlYXRlUmVnaW9uUnVsZShWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNl
bGVjdG9yPj4qIHJlZ2lvblNlbGVjdG9yLCBSdWxlTGlzdCogcnVsZXMpOwotICAgIHZvaWQgY3Jl
YXRlTWFyZ2luQXRSdWxlKENTU1NlbGVjdG9yOjpNYXJnaW5Cb3hUeXBlKTsKLSAgICBSZWY8U3R5
bGVSdWxlU3VwcG9ydHM+IGNyZWF0ZVN1cHBvcnRzUnVsZShib29sIGNvbmRpdGlvbklzU3VwcG9y
dGVkLCBSdWxlTGlzdCopOwotICAgIHZvaWQgbWFya1N1cHBvcnRzUnVsZUhlYWRlclN0YXJ0KCk7
Ci0gICAgdm9pZCBtYXJrU3VwcG9ydHNSdWxlSGVhZGVyRW5kKCk7Ci0gICAgUmVmPENTU1J1bGVT
b3VyY2VEYXRhPiBwb3BTdXBwb3J0c1J1bGVEYXRhKCk7Ci0KLSAgICB2b2lkIHN0YXJ0RGVjbGFy
YXRpb25zRm9yTWFyZ2luQm94KCk7Ci0gICAgdm9pZCBlbmREZWNsYXJhdGlvbnNGb3JNYXJnaW5C
b3goKTsKLQotICAgIHZvaWQgYWRkTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4
LCBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSk7Ci0gICAgUXVhbGlmaWVkTmFtZSBkZXRlcm1pbmVO
YW1lSW5OYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0
cmluZyYgbG9jYWxOYW1lKTsKLQotICAgIHZvaWQgcmV3cml0ZVNwZWNpZmllcnNXaXRoRWxlbWVu
dE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VQcmVmaXgsIGNvbnN0IEF0b21pY1N0
cmluZyYgZWxlbWVudE5hbWUsIENTU1BhcnNlclNlbGVjdG9yJik7Ci0gICAgdm9pZCByZXdyaXRl
U3BlY2lmaWVyc1dpdGhFbGVtZW50TmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBD
U1NQYXJzZXJTZWxlY3RvciYsIGJvb2wgaXNOYW1lc3BhY2VQbGFjZWhvbGRlciA9IGZhbHNlKTsK
LSAgICB2b2lkIHJld3JpdGVTcGVjaWZpZXJzV2l0aE5hbWVzcGFjZUlmTmVlZGVkKENTU1BhcnNl
clNlbGVjdG9yJik7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiByZXdy
aXRlU3BlY2lmaWVycyhzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+LCBzdGQ6OnVu
aXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+KTsKLQotICAgIHZvaWQgaW52YWxpZEJsb2NrSGl0
KCk7Ci0KLSAgICB2b2lkIHVwZGF0ZUxhc3RTZWxlY3RvckxpbmVBbmRQb3NpdGlvbigpOwotICAg
IHZvaWQgdXBkYXRlTGFzdE1lZGlhTGluZShNZWRpYVF1ZXJ5U2V0Jik7Ci0KLSAgICB2b2lkIGNs
ZWFyUHJvcGVydGllcygpOwotCi0gICAgUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydGllcz4gY3Jl
YXRlU3R5bGVQcm9wZXJ0aWVzKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW52YWxp
ZFBhcnNlZFByb3BlcnRpZXNDb3VudDsKLQotICAgIENTU1BhcnNlckNvbnRleHQgbV9jb250ZXh0
OwotCi0gICAgYm9vbCBtX2ltcG9ydGFudCB7IGZhbHNlIH07Ci0gICAgQ1NTUHJvcGVydHlJRCBt
X2lkIHsgQ1NTUHJvcGVydHlJbnZhbGlkIH07Ci0gICAgQXRvbWljU3RyaW5nIG1fY3VzdG9tUHJv
cGVydHlOYW1lOwotICAgIFN0eWxlU2hlZXRDb250ZW50cyogbV9zdHlsZVNoZWV0IHsgbnVsbHB0
ciB9OwotICAgIFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiBtX3J1bGU7Ci0gICAgUmVmUHRyPFN0eWxl
S2V5ZnJhbWU+IG1fa2V5ZnJhbWU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnk+IG1f
bWVkaWFRdWVyeTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFNvdXJjZVNpemU+PiBtX3Nv
dXJjZVNpemVMaXN0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJWYWx1ZUxpc3Q+IG1f
dmFsdWVMaXN0OwotICAgIGJvb2wgbV9zdXBwb3J0c0NvbmRpdGlvbiB7IGZhbHNlIH07Ci0KLSAg
ICBQYXJzZWRQcm9wZXJ0eVZlY3RvciBtX3BhcnNlZFByb3BlcnRpZXM7Ci0gICAgQ1NTU2VsZWN0
b3JMaXN0KiBtX3NlbGVjdG9yTGlzdEZvclBhcnNlU2VsZWN0b3IgeyBudWxscHRyIH07Ci0KLSAg
ICB1bnNpZ25lZCBtX251bVBhcnNlZFByb3BlcnRpZXNCZWZvcmVNYXJnaW5Cb3ggeyBpbnZhbGlk
UGFyc2VkUHJvcGVydGllc0NvdW50IH07Ci0KLSAgICBpbnQgbV9pblBhcnNlU2hvcnRoYW5kIHsg
MCB9OwotICAgIENTU1Byb3BlcnR5SUQgbV9jdXJyZW50U2hvcnRoYW5kIHsgQ1NTUHJvcGVydHlJ
bnZhbGlkIH07Ci0gICAgYm9vbCBtX2ltcGxpY2l0U2hvcnRoYW5kIHsgZmFsc2UgfTsKLQotICAg
IGJvb2wgbV9oYWRTeW50YWN0aWNhbGx5VmFsaWRDU1NSdWxlIHsgZmFsc2UgfTsKLSAgICBib29s
IG1fbG9nRXJyb3JzIHsgZmFsc2UgfTsKLSAgICBib29sIG1faWdub3JlRXJyb3JzSW5EZWNsYXJh
dGlvbiB7IGZhbHNlIH07Ci0KLSAgICBBdG9taWNTdHJpbmcgbV9kZWZhdWx0TmFtZXNwYWNlIHsg
c3RhckF0b20gfTsKLQotICAgIC8vIHRva2VuaXplciBtZXRob2RzIGFuZCBkYXRhCi0gICAgc2l6
ZV90IG1fcGFyc2VkVGV4dFByZWZpeExlbmd0aCB7IDAgfTsKLSAgICB1bnNpZ25lZCBtX25lc3Rl
ZFNlbGVjdG9yTGV2ZWwgeyAwIH07Ci0gICAgU291cmNlUmFuZ2UgbV9zZWxlY3RvclJhbmdlOwot
ICAgIFNvdXJjZVJhbmdlIG1fcHJvcGVydHlSYW5nZSB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPFJ1bGVTb3VyY2VEYXRhTGlzdD4gbV9jdXJyZW50UnVsZURhdGFT
dGFjazsKLSAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IG1fY3VycmVudFJ1bGVEYXRhOwot
ICAgIFJ1bGVTb3VyY2VEYXRhTGlzdCogbV9ydWxlU291cmNlRGF0YVJlc3VsdCB7IG51bGxwdHIg
fTsKLQotICAgIHZvaWQgZml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhDU1NSdWxlU291cmNlRGF0
YSYpOwotICAgIHZvaWQgbWFya1J1bGVIZWFkZXJTdGFydChDU1NSdWxlU291cmNlRGF0YTo6VHlw
ZSk7Ci0gICAgdm9pZCBtYXJrUnVsZUhlYWRlckVuZCgpOwotCi0gICAgdm9pZCBzdGFydE5lc3Rl
ZFNlbGVjdG9yTGlzdCgpIHsgKyttX25lc3RlZFNlbGVjdG9yTGV2ZWw7IH0KLSAgICB2b2lkIGVu
ZE5lc3RlZFNlbGVjdG9yTGlzdCgpIHsgLS1tX25lc3RlZFNlbGVjdG9yTGV2ZWw7IH0KLSAgICB2
b2lkIG1hcmtTZWxlY3RvclN0YXJ0KCk7Ci0gICAgdm9pZCBtYXJrU2VsZWN0b3JFbmQoKTsKLQot
ICAgIHZvaWQgbWFya1J1bGVCb2R5U3RhcnQoKTsKLSAgICB2b2lkIG1hcmtSdWxlQm9keUVuZCgp
OwotICAgIHZvaWQgbWFya1Byb3BlcnR5U3RhcnQoKTsKLSAgICB2b2lkIG1hcmtQcm9wZXJ0eUVu
ZChib29sIGlzSW1wb3J0YW50Rm91bmQsIGJvb2wgaXNQcm9wZXJ0eVBhcnNlZCk7Ci0gICAgdm9p
ZCBwcm9jZXNzQW5kQWRkTmV3UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKCk7Ci0gICAgdm9pZCBh
ZGROZXdSdWxlVG9Tb3VyY2VUcmVlKFJlZjxDU1NSdWxlU291cmNlRGF0YT4mJik7Ci0gICAgUmVm
UHRyPENTU1J1bGVTb3VyY2VEYXRhPiBwb3BSdWxlRGF0YSgpOwotICAgIHZvaWQgcmVzZXRQcm9w
ZXJ0eVJhbmdlKCkgeyBtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgPSBtX3Byb3BlcnR5UmFuZ2UuZW5k
ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOyB9Ci0gICAgYm9vbCBpc0V4
dHJhY3RpbmdTb3VyY2VEYXRhKCkgY29uc3QgeyByZXR1cm4gISFtX2N1cnJlbnRSdWxlRGF0YVN0
YWNrOyB9Ci0gICAgdm9pZCBzeW50YXhFcnJvcihjb25zdCBMb2NhdGlvbiYsIFN5bnRheEVycm9y
VHlwZSA9IEdlbmVyYWxTeW50YXhFcnJvcik7Ci0KLSAgICBpbmxpbmUgaW50IGxleCh2b2lkKiB5
eWx2YWwpIHsgcmV0dXJuICh0aGlzLT4qbV9sZXhGdW5jKSh5eWx2YWwpOyB9Ci0KLSAgICBpbnQg
dG9rZW4oKSB7IHJldHVybiBtX3Rva2VuOyB9Ci0KLSNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQ
VEFUSU9OKQotICAgIHZvaWQgbWFya1ZpZXdwb3J0UnVsZUJvZHlTdGFydCgpIHsgbV9pblZpZXdw
b3J0ID0gdHJ1ZTsgfQotICAgIHZvaWQgbWFya1ZpZXdwb3J0UnVsZUJvZHlFbmQoKSB7IG1faW5W
aWV3cG9ydCA9IGZhbHNlOyB9Ci0gICAgUmVmPFN0eWxlUnVsZVZpZXdwb3J0PiBjcmVhdGVWaWV3
cG9ydFJ1bGUoKTsKLSNlbmRpZgotCi0gICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUoVmFsdWVXaXRoQ2FsY3VsYXRpb24mKTsKLSAgICBSZWY8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKENTU1BhcnNlclZhbHVl
Jik7Ci0KLSAgICBzdGF0aWMgVVJMIGNvbXBsZXRlVVJMKGNvbnN0IENTU1BhcnNlckNvbnRleHQm
LCBjb25zdCBTdHJpbmcmIHVybCk7Ci0KLSAgICBMb2NhdGlvbiBjdXJyZW50TG9jYXRpb24oKTsK
LSAgICBzdGF0aWMgYm9vbCBpc0NhbGN1bGF0aW9uKENTU1BhcnNlclZhbHVlJik7Ci0KLSAgICB2
b2lkIHNldEN1c3RvbVByb3BlcnR5TmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFt
ZSkgeyBtX2N1c3RvbVByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsgfQotCi0gICAgUmVmUHRy
PENTU1ZhbHVlPiBwYXJzZVZhcmlhYmxlRGVwZW5kZW50VmFsdWUoQ1NTUHJvcGVydHlJRCwgY29u
c3QgQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSYsIGNvbnN0IEN1c3RvbVByb3BlcnR5VmFsdWVN
YXAmIGN1c3RvbVByb3BlcnRpZXMsIFRleHREaXJlY3Rpb24sIFdyaXRpbmdNb2RlKTsKLQotcHJp
dmF0ZToKLSAgICBib29sIGlzOEJpdFNvdXJjZSgpIHsgcmV0dXJuIG1faXM4Qml0U291cmNlOyB9
Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU291cmNlQ2hhcmFjdGVyVHlwZT4KLSAgICBpbnQg
cmVhbExleCh2b2lkKiB5eWx2YWwpOwotCi0gICAgVUNoYXIqJiBjdXJyZW50Q2hhcmFjdGVyMTYo
KTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotICAgIGlubGluZSBD
aGFyYWN0ZXJUeXBlKiYgY3VycmVudENoYXJhY3RlcigpOwotCi0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+Ci0gICAgaW5saW5lIENoYXJhY3RlclR5cGUqIHRva2VuU3RhcnQo
KTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotICAgIGlubGluZSB2
b2lkIHNldFRva2VuU3RhcnQoQ2hhcmFjdGVyVHlwZSopOwotCi0gICAgaW5saW5lIHVuc2lnbmVk
IHRva2VuU3RhcnRPZmZzZXQoKTsKLSAgICBpbmxpbmUgVUNoYXIgdG9rZW5TdGFydENoYXIoKTsK
LQotICAgIGlubGluZSB1bnNpZ25lZCBjdXJyZW50Q2hhcmFjdGVyT2Zmc2V0KCk7Ci0KLSAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLSAgICBpbmxpbmUgYm9vbCBpc0lkZW50
aWZpZXJTdGFydCgpOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci0g
ICAgdW5zaWduZWQgcGFyc2VFc2NhcGUoQ2hhcmFjdGVyVHlwZSomKTsKLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgRGVzdENoYXJhY3RlclR5cGU+Ci0gICAgaW5saW5lIHZvaWQgVW5pY29kZVRvQ2hh
cnMoRGVzdENoYXJhY3RlclR5cGUqJiwgdW5zaWduZWQpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBTcmNDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBEZXN0Q2hhcmFjdGVyVHlwZT4KLSAgICBpbmxp
bmUgYm9vbCBwYXJzZUlkZW50aWZpZXJJbnRlcm5hbChTcmNDaGFyYWN0ZXJUeXBlKiYsIERlc3RD
aGFyYWN0ZXJUeXBlKiYsIGJvb2wmKTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPgotICAgIGlubGluZSB2b2lkIHBhcnNlSWRlbnRpZmllcihDaGFyYWN0ZXJUeXBlKiYs
IENTU1BhcnNlclN0cmluZyYsIGJvb2wmKTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBTcmND
aGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBEZXN0Q2hhcmFjdGVyVHlwZT4KLSAgICBpbmxpbmUgYm9v
bCBwYXJzZVN0cmluZ0ludGVybmFsKFNyY0NoYXJhY3RlclR5cGUqJiwgRGVzdENoYXJhY3RlclR5
cGUqJiwgVUNoYXIpOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci0g
ICAgaW5saW5lIHZvaWQgcGFyc2VTdHJpbmcoQ2hhcmFjdGVyVHlwZSomLCBDU1NQYXJzZXJTdHJp
bmcmIHJlc3VsdFN0cmluZywgVUNoYXIpOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+Ci0gICAgaW5saW5lIGJvb2wgZmluZFVSSShDaGFyYWN0ZXJUeXBlKiYgc3RhcnQs
IENoYXJhY3RlclR5cGUqJiBlbmQsIFVDaGFyJiBxdW90ZSk7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgU3JjQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgRGVzdENoYXJhY3RlclR5cGU+Ci0gICAg
aW5saW5lIGJvb2wgcGFyc2VVUklJbnRlcm5hbChTcmNDaGFyYWN0ZXJUeXBlKiYsIERlc3RDaGFy
YWN0ZXJUeXBlKiYsIFVDaGFyIHF1b3RlKTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgotICAgIGlubGluZSB2b2lkIHBhcnNlVVJJKENTU1BhcnNlclN0cmluZyYpOwot
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotICAgIGlubGluZSBib29sIHBh
cnNlVW5pY29kZVJhbmdlKCk7Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
Ci0gICAgYm9vbCBwYXJzZU50aENoaWxkKCk7Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+Ci0gICAgYm9vbCBwYXJzZU50aENoaWxkRXh0cmEoKTsKLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLSAgICBpbmxpbmUgYm9vbCBkZXRlY3RGdW5jdGlvblR5
cGVUb2tlbihpbnQpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotICAg
IGlubGluZSB2b2lkIGRldGVjdE1lZGlhUXVlcnlUb2tlbihpbnQpOwotICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotICAgIGlubGluZSB2b2lkIGRldGVjdE51bWJlclRva2Vu
KENoYXJhY3RlclR5cGUqLCBpbnQpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPgotICAgIGlubGluZSB2b2lkIGRldGVjdERhc2hUb2tlbihpbnQpOwotICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotICAgIGlubGluZSB2b2lkIGRldGVjdEF0VG9rZW4o
aW50LCBib29sKTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLSAgICBp
bmxpbmUgdm9pZCBkZXRlY3RTdXBwb3J0c1Rva2VuKGludCk7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLSAgICBpbmxpbmUgdm9pZCBzZXRSdWxlSGVhZGVyRW5kKGNv
bnN0IENoYXJhY3RlclR5cGUqKTsKLQotICAgIHZvaWQgc2V0U3R5bGVTaGVldChTdHlsZVNoZWV0
Q29udGVudHMqIHN0eWxlU2hlZXQpIHsgbV9zdHlsZVNoZWV0ID0gc3R5bGVTaGVldDsgfQotCi0g
ICAgaW5saW5lIGJvb2wgaW5TdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0Lm1v
ZGUgPT0gQ1NTU3RyaWN0TW9kZSB8fCBtX2NvbnRleHQubW9kZSA9PSBTVkdBdHRyaWJ1dGVNb2Rl
OyB9Ci0gICAgaW5saW5lIGJvb2wgaW5RdWlya3NNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZXh0Lm1vZGUgPT0gQ1NTUXVpcmtzTW9kZTsgfQotICAgIAotICAgIFVSTCBjb21wbGV0ZVVSTChj
b25zdCBTdHJpbmcmIHVybCkgY29uc3Q7Ci0KLSAgICB2b2lkIHJlY2hlY2tBdEtleXdvcmQoY29u
c3QgVUNoYXIqIHN0ciwgaW50IGxlbik7Ci0KLSAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBwcmVmaXhM
ZW5ndGgsIHVuc2lnbmVkIHN1ZmZpeExlbmd0aD4KLSAgICB2b2lkIHNldHVwUGFyc2VyKGNvbnN0
IGNoYXIgKCZwcmVmaXgpW3ByZWZpeExlbmd0aF0sIFN0cmluZ1ZpZXcgc3RyaW5nLCBjb25zdCBj
aGFyICgmc3VmZml4KVtzdWZmaXhMZW5ndGhdKQotICAgIHsKLSAgICAgICAgc2V0dXBQYXJzZXIo
cHJlZml4LCBwcmVmaXhMZW5ndGggLSAxLCBzdHJpbmcsIHN1ZmZpeCwgc3VmZml4TGVuZ3RoIC0g
MSk7Ci0gICAgfQotICAgIHZvaWQgc2V0dXBQYXJzZXIoY29uc3QgY2hhciogcHJlZml4LCB1bnNp
Z25lZCBwcmVmaXhMZW5ndGgsIFN0cmluZ1ZpZXcsIGNvbnN0IGNoYXIqIHN1ZmZpeCwgdW5zaWdu
ZWQgc3VmZml4TGVuZ3RoKTsKLSAgICBib29sIGluU2hvcnRoYW5kKCkgY29uc3QgeyByZXR1cm4g
bV9pblBhcnNlU2hvcnRoYW5kOyB9Ci0KLSAgICBib29sIGlzVmFsaWRTaXplKFZhbHVlV2l0aENh
bGN1bGF0aW9uJik7Ci0KLSAgICBib29sIGlzR2VuZXJhdGVkSW1hZ2VWYWx1ZShDU1NQYXJzZXJW
YWx1ZSYpIGNvbnN0OwotICAgIGJvb2wgcGFyc2VHZW5lcmF0ZWRJbWFnZShDU1NQYXJzZXJWYWx1
ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWU+Jik7Ci0KLSAgICBQYXJzZVJlc3VsdCBwYXJzZVZhbHVl
KE11dGFibGVTdHlsZVByb3BlcnRpZXMmLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBi
b29sIGltcG9ydGFudCwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCk7Ci0g
ICAgUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydGllcz4gcGFyc2VEZWNsYXJhdGlvbihjb25zdCBT
dHJpbmcmLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KTsKLQotICAgIFJl
ZlB0cjxDU1NCYXNpY1NoYXBlSW5zZXQ+IHBhcnNlSW5zZXRSb3VuZGVkQ29ybmVycyhSZWY8Q1NT
QmFzaWNTaGFwZUluc2V0PiYmLCBDU1NQYXJzZXJWYWx1ZUxpc3QmKTsKLQotICAgIGVudW0gU2l6
ZVBhcmFtZXRlclR5cGUgewotICAgICAgICBOb25lLAotICAgICAgICBBdXRvLAotICAgICAgICBM
ZW5ndGgsCi0gICAgICAgIFBhZ2VTaXplLAotICAgICAgICBPcmllbnRhdGlvbiwKLSAgICB9Owot
Ci0gICAgYm9vbCBwYXJzZVBhZ2UoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50
KTsKLSAgICBib29sIHBhcnNlU2l6ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRh
bnQpOwotICAgIFNpemVQYXJhbWV0ZXJUeXBlIHBhcnNlU2l6ZVBhcmFtZXRlcihDU1NWYWx1ZUxp
c3QmIHBhcnNlZFZhbHVlcywgQ1NTUGFyc2VyVmFsdWUmLCBTaXplUGFyYW1ldGVyVHlwZSBwcmV2
UGFyYW1UeXBlKTsKLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgYm9vbCBwYXJz
ZU5vbkVsZW1lbnRTbmFwUG9pbnRzKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFu
dCk7Ci0gICAgYm9vbCBwYXJzZVNjcm9sbFNuYXBEZXN0aW5hdGlvbihDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpOwotICAgIGJvb2wgcGFyc2VTY3JvbGxTbmFwQ29vcmRpbmF0
ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpOwotICAgIGJvb2wgcGFyc2VT
Y3JvbGxTbmFwUG9zaXRpb25zKFJlZlB0cjxDU1NWYWx1ZT4mIGNzc1ZhbHVlWCwgUmVmUHRyPENT
U1ZhbHVlPiYgY3NzVmFsdWVZKTsKLSNlbmRpZgotCi0gICAgYm9vbCBwYXJzZUZvbnRGYWNlU3Jj
VVJJKENTU1ZhbHVlTGlzdCYpOwotICAgIGJvb2wgcGFyc2VGb250RmFjZVNyY0xvY2FsKENTU1Zh
bHVlTGlzdCYpOwotCi0gICAgYm9vbCBwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYpOwotCi0jaWYg
RU5BQkxFKENTU19HUklEX0xBWU9VVCkKLSAgICBib29sIHBhcnNlSW50ZWdlck9yQ3VzdG9tSWRl
bnRGcm9tR3JpZFBvc2l0aW9uKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIG51bWVyaWNWYWx1
ZSwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYgZ3JpZExpbmVOYW1lKTsKLSNlbmRpZgotCi0g
ICAgZW51bSBQYXJzaW5nTW9kZSB7Ci0gICAgICAgIE5vcm1hbE1vZGUsCi0gICAgICAgIE1lZGlh
UXVlcnlNb2RlLAotICAgICAgICBTdXBwb3J0c01vZGUsCi0gICAgICAgIE50aENoaWxkTW9kZQot
ICAgIH07Ci0KLSAgICBQYXJzaW5nTW9kZSBtX3BhcnNpbmdNb2RlIHsgTm9ybWFsTW9kZSB9Owot
ICAgIGJvb2wgbV9pczhCaXRTb3VyY2UgeyBmYWxzZSB9OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxM
Q2hhcltdPiBtX2RhdGFTdGFydDg7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFVDaGFyW10+IG1fZGF0
YVN0YXJ0MTY7Ci0gICAgTENoYXIqIG1fY3VycmVudENoYXJhY3RlcjggeyBudWxscHRyIH07Ci0g
ICAgVUNoYXIqIG1fY3VycmVudENoYXJhY3RlcjE2IHsgbnVsbHB0ciB9OwotICAgIHVuaW9uIHsK
LSAgICAgICAgTENoYXIqIHB0cjg7Ci0gICAgICAgIFVDaGFyKiBwdHIxNjsKLSAgICB9IG1fdG9r
ZW5TdGFydCB7IG51bGxwdHIgfTsKLSAgICB1bnNpZ25lZCBtX2xlbmd0aCB7IDAgfTsKLSAgICBp
bnQgbV90b2tlbiB7IDAgfTsKLSAgICBpbnQgbV9saW5lTnVtYmVyIHsgMCB9OwotICAgIGludCBt
X3Rva2VuU3RhcnRMaW5lTnVtYmVyIHsgMCB9OwotICAgIGludCBtX3Rva2VuU3RhcnRDb2x1bW5O
dW1iZXIgeyAwIH07Ci0gICAgaW50IG1fbGFzdFNlbGVjdG9yTGluZU51bWJlciB7IDAgfTsKLSAg
ICBpbnQgbV9jb2x1bW5PZmZzZXRGb3JMaW5lIHsgMCB9OwotCi0gICAgaW50IG1fc2hlZXRTdGFy
dExpbmVOdW1iZXIgeyAwIH07Ci0gICAgaW50IG1fc2hlZXRTdGFydENvbHVtbk51bWJlciB7IDAg
fTsKLQotICAgIGJvb2wgbV9hbGxvd0ltcG9ydFJ1bGVzIHsgdHJ1ZSB9OwotICAgIGJvb2wgbV9h
bGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucyB7IHRydWUgfTsKLQotI2lmIEVOQUJMRShDU1NfREVW
SUNFX0FEQVBUQVRJT04pCi0gICAgYm9vbCBwYXJzZVZpZXdwb3J0UHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KTsKLSAgICBib29sIHBhcnNlVmlld3BvcnRTaG9y
dGhhbmQoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIENTU1Byb3BlcnR5SUQgZmlyc3QsIENTU1Byb3Bl
cnR5SUQgc2Vjb25kLCBib29sIGltcG9ydGFudCk7Ci0KLSAgICBib29sIGluVmlld3BvcnQoKSBj
b25zdCB7IHJldHVybiBtX2luVmlld3BvcnQ7IH0KLSAgICBib29sIG1faW5WaWV3cG9ydCB7IGZh
bHNlIH07Ci0jZW5kaWYKLQotICAgIGJvb2wgdXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhh
bmRCZWhhdmlvcigpIGNvbnN0OwotCi0gICAgaW50IChDU1NQYXJzZXI6OiptX2xleEZ1bmMpKHZv
aWQqKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1Bh
cnNlclNlbGVjdG9yPj4+IG1fcmVjeWNsZWRTZWxlY3RvclZlY3RvcjsKLQotICAgIHN0ZDo6dW5p
cXVlX3B0cjxSdWxlU291cmNlRGF0YUxpc3Q+IG1fc3VwcG9ydHNSdWxlRGF0YVN0YWNrOwotCi0g
ICAgLy8gZGVmaW5lcyB1bml0cyBhbGxvd2VkIGZvciBhIGNlcnRhaW4gcHJvcGVydHksIHVzZWQg
aW4gcGFyc2VVbml0Ci0gICAgZW51bSBVbml0cyB7Ci0gICAgICAgIEZVbmtub3duID0gMHgwMDAw
LAotICAgICAgICBGSW50ZWdlciA9IDB4MDAwMSwKLSAgICAgICAgRk51bWJlciA9IDB4MDAwMiwg
Ly8gUmVhbCBOdW1iZXJzCi0gICAgICAgIEZQZXJjZW50ID0gMHgwMDA0LAotICAgICAgICBGTGVu
Z3RoID0gMHgwMDA4LAotICAgICAgICBGQW5nbGUgPSAweDAwMTAsCi0gICAgICAgIEZUaW1lID0g
MHgwMDIwLAotICAgICAgICBGRnJlcXVlbmN5ID0gMHgwMDQwLAotICAgICAgICBGUG9zaXRpdmVJ
bnRlZ2VyID0gMHgwMDgwLAotICAgICAgICBGUmVsYXRpdmUgPSAweDAxMDAsCi0jaWYgRU5BQkxF
KENTU19JTUFHRV9SRVNPTFVUSU9OKSB8fCBFTkFCTEUoUkVTT0xVVElPTl9NRURJQV9RVUVSWSkK
LSAgICAgICAgRlJlc29sdXRpb24gPSAweDAyMDAsCi0jZW5kaWYKLSAgICAgICAgRk5vbk5lZyA9
IDB4MDQwMAotICAgIH07Ci0KLSAgICBmcmllbmQgaW5saW5lIFVuaXRzIG9wZXJhdG9yfChVbml0
cyBhLCBVbml0cyBiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFVuaXRzPihz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oYSkgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYikpOwotICAg
IH0KLQotICAgIGVudW0gUmVsZWFzZVBhcnNlZENhbGNWYWx1ZUNvbmRpdGlvbiB7Ci0gICAgICAg
IFJlbGVhc2VQYXJzZWRDYWxjVmFsdWUsCi0gICAgICAgIERvTm90UmVsZWFzZVBhcnNlZENhbGNW
YWx1ZQotICAgIH07Ci0KLSAgICBib29sIGlzTG9nZ2luZ0Vycm9ycygpOwotICAgIHZvaWQgbG9n
RXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51
bWJlcik7Ci0KLSAgICBib29sIHZhbGlkYXRlQ2FsY3VsYXRpb25Vbml0KFZhbHVlV2l0aENhbGN1
bGF0aW9uJiwgVW5pdHMpOwotCi0gICAgYm9vbCBzaG91bGRBY2NlcHRVbml0TGVzc1ZhbHVlcyhD
U1NQYXJzZXJWYWx1ZSYsIFVuaXRzLCBDU1NQYXJzZXJNb2RlKTsKLQotICAgIGlubGluZSBib29s
IHZhbGlkYXRlVW5pdChWYWx1ZVdpdGhDYWxjdWxhdGlvbiYgdmFsdWUsIFVuaXRzIHVuaXRGbGFn
cykgeyByZXR1cm4gdmFsaWRhdGVVbml0KHZhbHVlLCB1bml0RmxhZ3MsIG1fY29udGV4dC5tb2Rl
KTsgfQotICAgIGJvb2wgdmFsaWRhdGVVbml0KFZhbHVlV2l0aENhbGN1bGF0aW9uJiwgVW5pdHMs
IENTU1BhcnNlck1vZGUpOwotCi0gICAgYm9vbCBwYXJzZUJvcmRlckltYWdlUXVhZChVbml0cywg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYpOwotICAgIGludCBjb2xvckludEZyb21WYWx1ZShW
YWx1ZVdpdGhDYWxjdWxhdGlvbiYpOwotICAgIGRvdWJsZSBwYXJzZWREb3VibGUoVmFsdWVXaXRo
Q2FsY3VsYXRpb24mKTsKLSAgICAKLSAgICBmcmllbmQgY2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9u
SW5mbzsKLSAgICBmcmllbmQgY2xhc3MgRmlsdGVyT3BlcmF0aW9uSW5mbzsKLX07Ci0KLUNTU1By
b3BlcnR5SUQgY3NzUHJvcGVydHlJRChjb25zdCBDU1NQYXJzZXJTdHJpbmcmKTsKLUNTU1Byb3Bl
cnR5SUQgY3NzUHJvcGVydHlJRChjb25zdCBTdHJpbmcmKTsKLUNTU1ZhbHVlSUQgY3NzVmFsdWVL
ZXl3b3JkSUQoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJik7Ci0jaWYgUExBVEZPUk0oSU9TKQotdm9p
ZCBjc3NQcm9wZXJ0eU5hbWVJT1NBbGlhc2luZyhjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IGNoYXIqJiBwcm9wZXJ0eU5hbWVBbGlhcywgdW5zaWduZWQmIG5ld0xlbmd0aCk7Ci0jZW5k
aWYKLQotY2xhc3MgU2hvcnRoYW5kU2NvcGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotcHVibGljOgotICAgIFNob3J0aGFuZFNjb3BlKENTU1BhcnNlciogcGFyc2VyLCBDU1NQcm9w
ZXJ0eUlEIHByb3BJZCkgOiBtX3BhcnNlcihwYXJzZXIpCi0gICAgewotICAgICAgICBpZiAoISht
X3BhcnNlci0+bV9pblBhcnNlU2hvcnRoYW5kKyspKQotICAgICAgICAgICAgbV9wYXJzZXItPm1f
Y3VycmVudFNob3J0aGFuZCA9IHByb3BJZDsKLSAgICB9Ci0gICAgflNob3J0aGFuZFNjb3BlKCkK
LSAgICB7Ci0gICAgICAgIGlmICghKC0tbV9wYXJzZXItPm1faW5QYXJzZVNob3J0aGFuZCkpCi0g
ICAgICAgICAgICBtX3BhcnNlci0+bV9jdXJyZW50U2hvcnRoYW5kID0gQ1NTUHJvcGVydHlJbnZh
bGlkOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBDU1NQYXJzZXIqIG1fcGFyc2VyOwotfTsKLQot
c3RydWN0IENTU1BhcnNlcjo6TG9jYXRpb24gewotICAgIGludCBsaW5lTnVtYmVyOwotICAgIGlu
dCBjb2x1bW5OdW1iZXI7Ci0gICAgQ1NTUGFyc2VyU3RyaW5nIHRva2VuOwotfTsKLQotU3RyaW5n
IHF1b3RlQ1NTU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotU3RyaW5nIHF1b3RlQ1NTU3RyaW5nSWZO
ZWVkZWQoY29uc3QgU3RyaW5nJik7Ci1TdHJpbmcgcXVvdGVDU1NVUkxJZk5lZWRlZChjb25zdCBT
dHJpbmcmKTsKLQotYm9vbCBpc1ZhbGlkTnRoVG9rZW4oY29uc3QgQ1NTUGFyc2VyU3RyaW5nJik7
Ci0KLXRlbXBsYXRlIDw+Ci1pbmxpbmUgdm9pZCBDU1NQYXJzZXI6OnNldFRva2VuU3RhcnQ8TENo
YXI+KExDaGFyKiB0b2tlblN0YXJ0KQotewotICAgIG1fdG9rZW5TdGFydC5wdHI4ID0gdG9rZW5T
dGFydDsKLX0KLQotdGVtcGxhdGUgPD4KLWlubGluZSB2b2lkIENTU1BhcnNlcjo6c2V0VG9rZW5T
dGFydDxVQ2hhcj4oVUNoYXIqIHRva2VuU3RhcnQpCi17Ci0gICAgbV90b2tlblN0YXJ0LnB0cjE2
ID0gdG9rZW5TdGFydDsKLX0KLQotaW5saW5lIHVuc2lnbmVkIENTU1BhcnNlcjo6dG9rZW5TdGFy
dE9mZnNldCgpCi17Ci0gICAgaWYgKGlzOEJpdFNvdXJjZSgpKQotICAgICAgICByZXR1cm4gbV90
b2tlblN0YXJ0LnB0cjggLSBtX2RhdGFTdGFydDguZ2V0KCk7Ci0gICAgcmV0dXJuIG1fdG9rZW5T
dGFydC5wdHIxNiAtIG1fZGF0YVN0YXJ0MTYuZ2V0KCk7Ci19Ci0KLXVuc2lnbmVkIENTU1BhcnNl
cjo6Y3VycmVudENoYXJhY3Rlck9mZnNldCgpCi17Ci0gICAgaWYgKGlzOEJpdFNvdXJjZSgpKQot
ICAgICAgICByZXR1cm4gbV9jdXJyZW50Q2hhcmFjdGVyOCAtIG1fZGF0YVN0YXJ0OC5nZXQoKTsK
LSAgICByZXR1cm4gbV9jdXJyZW50Q2hhcmFjdGVyMTYgLSBtX2RhdGFTdGFydDE2LmdldCgpOwot
fQotCi1pbmxpbmUgVUNoYXIgQ1NTUGFyc2VyOjp0b2tlblN0YXJ0Q2hhcigpCi17Ci0gICAgaWYg
KGlzOEJpdFNvdXJjZSgpKQotICAgICAgICByZXR1cm4gKm1fdG9rZW5TdGFydC5wdHI4OwotICAg
IHJldHVybiAqbV90b2tlblN0YXJ0LnB0cjE2OwotfQotCi1pbmxpbmUgYm9vbCBpc0N1c3RvbVBy
b3BlcnR5TmFtZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gcHJv
cGVydHlOYW1lLmxlbmd0aCgpID4gMiAmJiBwcm9wZXJ0eU5hbWUuY2hhcmFjdGVyQXQoMCkgPT0g
Jy0nICYmIHByb3BlcnR5TmFtZS5jaGFyYWN0ZXJBdCgxKSA9PSAnLSc7Ci19Ci0KLWlubGluZSBp
bnQgY3NzeXlsZXgodm9pZCogeXlsdmFsLCBDU1NQYXJzZXIqIHBhcnNlcikKLXsKLSAgICByZXR1
cm4gcGFyc2VyLT5sZXgoeXlsdmFsKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9jc3MvQ1NTUGFyc2VyTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3Nz
L0NTU1BhcnNlck1vZGUuaAkocmV2aXNpb24gMjA0NzQzKQorKysgV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAq
ICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWlt
ZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAqIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IKLSAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgotICogVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENTU1BhcnNlck1vZGVfaAotI2RlZmluZSBDU1NQYXJz
ZXJNb2RlX2gKLQotI2luY2x1ZGUgIlVSTC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIERvY3VtZW50OwotCi1lbnVtIENTU1BhcnNlck1vZGUgewotICAgIENTU1F1aXJrc01vZGUs
Ci0gICAgQ1NTU3RyaWN0TW9kZSwKLSAgICAvLyBTVkcgc2hvdWxkIGFsd2F5cyBiZSBpbiBzdHJp
Y3QgbW9kZS4gRm9yIFNWRyBhdHRyaWJ1dGVzLCB0aGUgcnVsZXMgZGlmZmVyIHRvIHN0cmljdCBz
b21ldGltZXMuCi0gICAgU1ZHQXR0cmlidXRlTW9kZQotfTsKLQotaW5saW5lIENTU1BhcnNlck1v
ZGUgc3RyaWN0VG9DU1NQYXJzZXJNb2RlKGJvb2wgaW5TdHJpY3RNb2RlKQotewotICAgIHJldHVy
biBpblN0cmljdE1vZGUgPyBDU1NTdHJpY3RNb2RlIDogQ1NTUXVpcmtzTW9kZTsKLX0KLQotaW5s
aW5lIGJvb2wgaXNTdHJpY3RQYXJzZXJNb2RlKENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkK
LXsKLSAgICByZXR1cm4gY3NzUGFyc2VyTW9kZSA9PSBDU1NTdHJpY3RNb2RlIHx8IGNzc1BhcnNl
ck1vZGUgPT0gU1ZHQXR0cmlidXRlTW9kZTsKLX0KLQotc3RydWN0IENTU1BhcnNlckNvbnRleHQg
ewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIENTU1BhcnNlckNv
bnRleHQoQ1NTUGFyc2VyTW9kZSwgY29uc3QgVVJMJiBiYXNlVVJMID0gVVJMKCkpOwotICAgIFdF
QkNPUkVfRVhQT1JUIENTU1BhcnNlckNvbnRleHQoRG9jdW1lbnQmLCBjb25zdCBVUkwmIGJhc2VV
UkwgPSBVUkwoKSwgY29uc3QgU3RyaW5nJiBjaGFyc2V0ID0gZW1wdHlTdHJpbmcoKSk7Ci0KLSAg
ICBVUkwgYmFzZVVSTDsKLSAgICBTdHJpbmcgY2hhcnNldDsKLSAgICBDU1NQYXJzZXJNb2RlIG1v
ZGUgeyBDU1NTdHJpY3RNb2RlIH07Ci0gICAgYm9vbCBpc0hUTUxEb2N1bWVudCB7IGZhbHNlIH07
Ci0jaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKLSAgICBib29sIGNzc0dyaWRMYXlvdXRFbmFi
bGVkIHsgZmFsc2UgfTsKLSNlbmRpZgotI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQot
ICAgIGJvb2wgdGV4dEF1dG9zaXppbmdFbmFibGVkIHsgZmFsc2UgfTsKLSNlbmRpZgotICAgIGJv
b2wgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5mb3JjZXND
U1NNSU1FVHlwZUluTm9RdWlya3NNb2RlIHsgdHJ1ZSB9OwotICAgIGJvb2wgdXNlTGVnYWN5QmFj
a2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciB7IGZhbHNlIH07Ci0gICAgYm9vbCBzcHJpbmdU
aW1pbmdGdW5jdGlvbkVuYWJsZWQgeyBmYWxzZSB9OwotfTsKLQotYm9vbCBvcGVyYXRvcj09KGNv
bnN0IENTU1BhcnNlckNvbnRleHQmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0Jik7Ci1pbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGEsIGNvbnN0IENTU1BhcnNl
ckNvbnRleHQmIGIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQotCi1XRUJDT1JFX0VYUE9SVCBjb25z
dCBDU1NQYXJzZXJDb250ZXh0JiBzdHJpY3RDU1NQYXJzZXJDb250ZXh0KCk7Ci0KLX07Ci0KLSNl
bmRpZiAvLyBDU1NQYXJzZXJNb2RlX2gKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1BhcnNlclZhbHVl
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcAkocmV2
aXNpb24gMjA0NzQzKQorKysgV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0NDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA4LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkNTU1BhcnNlclZhbHVlcy5oIgotCi0jaW5jbHVkZSAiQ1NTQ3Vz
dG9tUHJvcGVydHlWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCi0jaW5j
bHVkZSAiQ1NTRnVuY3Rpb25WYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCi0jaW5j
bHVkZSAiQ1NTU2VsZWN0b3JMaXN0LmgiCi0jaW5jbHVkZSAiQ1NTVmFyaWFibGVWYWx1ZS5oIgot
I2luY2x1ZGUgIlNlbGVjdG9yUHNldWRvVHlwZU1hcC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci0KLXZvaWQgZGVzdHJveShjb25zdCBDU1NQYXJzZXJW
YWx1ZSYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OkZ1
bmN0aW9uKQotICAgICAgICBkZWxldGUgdmFsdWUuZnVuY3Rpb247Ci0gICAgZWxzZSBpZiAodmFs
dWUudW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6VmFsdWVMaXN0KQotICAgICAgICBkZWxldGUgdmFs
dWUudmFsdWVMaXN0OwotICAgIGVsc2UgaWYgKHZhbHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6
OlZhcmlhYmxlKQotICAgICAgICBkZWxldGUgdmFsdWUudmFyaWFibGU7Ci19Ci0KLUNTU1BhcnNl
clZhbHVlTGlzdDo6fkNTU1BhcnNlclZhbHVlTGlzdCgpCi17Ci0gICAgZm9yIChhdXRvJiB2YWx1
ZSA6IG1fdmFsdWVzKQotICAgICAgICBkZXN0cm95KHZhbHVlKTsKLX0KLQotdm9pZCBDU1NQYXJz
ZXJWYWx1ZUxpc3Q6OmFkZFZhbHVlKGNvbnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKLXsKLSAg
ICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUpOwotfQotCi12b2lkIENTU1BhcnNlclZhbHVlTGlzdDo6
aW5zZXJ0VmFsdWVBdCh1bnNpZ25lZCBpLCBjb25zdCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCi17
Ci0gICAgbV92YWx1ZXMuaW5zZXJ0KGksIHZhbHVlKTsKLX0KLQotdm9pZCBDU1NQYXJzZXJWYWx1
ZUxpc3Q6OmV4dGVuZChDU1NQYXJzZXJWYWx1ZUxpc3QmIG90aGVyKQotewotICAgIGZvciAoYXV0
byYgdmFsdWUgOiBvdGhlci5tX3ZhbHVlcykgewotICAgICAgICBtX3ZhbHVlcy5hcHBlbmQodmFs
dWUpOwotICAgICAgICB2YWx1ZS51bml0ID0gMDsgLy8gV2UgbW92ZWQgdGhlIENTU1BhcnNlclZh
bHVlIGZyb20gdGhlIG90aGVyIGxpc3Q7IHRoaXMgYWN0cyBsaWtlIHN0ZDo6bW92ZS4KLSAgICB9
Ci19Ci0KLWJvb2wgQ1NTUGFyc2VyVmFsdWVMaXN0Ojpjb250YWluc1ZhcmlhYmxlcygpIGNvbnN0
Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgaSsrKSB7Ci0gICAgICAg
IGF1dG8qIHBhcnNlclZhbHVlID0gJm1fdmFsdWVzW2ldOwotICAgICAgICBpZiAocGFyc2VyVmFs
dWUtPnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OlZhcmlhYmxlKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIGlmIChwYXJzZXJWYWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6
RnVuY3Rpb24gJiYgcGFyc2VyVmFsdWUtPmZ1bmN0aW9uLT5hcmdzCi0gICAgICAgICAgICAmJiBw
YXJzZXJWYWx1ZS0+ZnVuY3Rpb24tPmFyZ3MtPmNvbnRhaW5zVmFyaWFibGVzKCkpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKHBhcnNlclZhbHVlLT51bml0ID09IENTU1Bh
cnNlclZhbHVlOjpWYWx1ZUxpc3QgJiYgcGFyc2VyVmFsdWUtPnZhbHVlTGlzdC0+Y29udGFpbnNW
YXJpYWJsZXMoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLVJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyVmFsdWU6OmNyZWF0ZUNTU1Zh
bHVlKCkKLXsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlZFZhbHVlOwotICAgIGlmIChpZCkK
LSAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKGlkKTsK
LSAgICAKLSAgICBpZiAodW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IpIHsKLSAgICAg
ICAgYXV0byBwcmltaXRpdmVWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVQYXJzZXJP
cGVyYXRvcihpVmFsdWUpOwotICAgICAgICBwcmltaXRpdmVWYWx1ZS0+c2V0UHJpbWl0aXZlVHlw
ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9PUEVSQVRPUik7Ci0gICAgICAgIHJldHVy
biBXVEZNb3ZlKHByaW1pdGl2ZVZhbHVlKTsKLSAgICB9Ci0gICAgaWYgKHVuaXQgPT0gQ1NTUGFy
c2VyVmFsdWU6OkZ1bmN0aW9uKQotICAgICAgICByZXR1cm4gQ1NTRnVuY3Rpb25WYWx1ZTo6Y3Jl
YXRlKGZ1bmN0aW9uKTsKLSAgICBpZiAodW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6VmFyaWFibGUp
Ci0gICAgICAgIHJldHVybiBDU1NWYXJpYWJsZVZhbHVlOjpjcmVhdGUodmFyaWFibGUpOwotICAg
IGlmICh1bml0ID09IENTU1BhcnNlclZhbHVlOjpWYWx1ZUxpc3QpCi0gICAgICAgIHJldHVybiBD
U1NWYWx1ZUxpc3Q6OmNyZWF0ZUZyb21QYXJzZXJWYWx1ZUxpc3QoKnZhbHVlTGlzdCk7Ci0KLSAg
ICBpZiAodW5pdCA+PSBDU1NQYXJzZXJWYWx1ZTo6UV9FTVMpCi0gICAgICAgIHJldHVybiBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlQWxsb3dpbmdNYXJnaW5RdWlyayhmVmFsdWUsIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfRU1TKTsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMg
cHJpbWl0aXZlVW5pdCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXM+
KHVuaXQpOwotICAgIHN3aXRjaCAocHJpbWl0aXZlVW5pdCkgewotICAgIGNhc2UgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19JREVOVDoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFJP
UEVSVFlfSUQ6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZBTFVFX0lEOgotICAg
ICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHJpbmcsIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUEFSU0VSX0lERU5USUZJRVIpOwotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVI6Ci0gICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KGZWYWx1ZSwgaXNJbnQgPyBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9JTlRFR0VSIDog
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19TVFJJTkc6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSToKLSAg
ICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEFSU0VSX0hFWENPTE9SOgotICAgIGNhc2Ug
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ESU1FTlNJT046Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1VOSUNPREVfUkFOR0U6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1BBUlNFUl9XSElURVNQQUNFOgotICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShzdHJpbmcsIHByaW1pdGl2ZVVuaXQpOwotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QRVJDRU5UQUdFOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVM6Ci0g
ICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VYUzoKLSAgICBjYXNlIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUFg6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NNOgotICAg
IGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19NTToKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfSU46Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BUOgotICAgIGNh
c2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQzoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfREVHOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SQUQ6Ci0gICAgY2Fz
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0dSQUQ6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX01TOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TOgotICAgIGNhc2Ug
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19IWjoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfS0haOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WVzoKLSAgICBjYXNlIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfVkg6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1ZNSU46Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZNQVg6Ci0gICAgY2FzZSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1RVUk46Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1JFTVM6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NIUzoKLSAgICBjYXNl
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRlI6Ci0gICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKGZWYWx1ZSwgcHJpbWl0aXZlVW5pdCk7Ci0gICAgY2FzZSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1VOS05PV046Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0FU
VFI6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NPVU5URVI6Ci0gICAgY2FzZSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JFQ1Q6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1JHQkNPTE9SOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUFBYOgotICAg
IGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUEk6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0RQQ006Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBSVI6Ci0j
aWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19EQVNIQk9BUkRfUkVHSU9OOgotI2VuZGlmCi0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BBUlNFUl9PUEVSQVRPUjoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UEFSU0VSX0lOVEVHRVI6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9J
REVOVElGSUVSOgotICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19DT1VOVEVSX05BTUU6
Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NIQVBFOgotICAgIGNhc2UgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19GT05UX0ZBTUlMWToKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUVVBRDoKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGNhc2UgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19MRU5HVEhfUkVQRUFUOgotI2VuZGlmCi0gICAgY2FzZSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0NBTEM6Ci0gICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NB
TENfUEVSQ0VOVEFHRV9XSVRIX05VTUJFUjoKLSAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfQ0FMQ19QRVJDRU5UQUdFX1dJVEhfTEVOR1RIOgotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLQotQ1NTUGFyc2VyU2VsZWN0b3IqIENTU1BhcnNlclNlbGVjdG9yOjpwYXJzZVBhZ2VQc2V1
ZG9TZWxlY3Rvcihjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHBzZXVkb1R5cGVTdHJpbmcpCi17Ci0g
ICAgQ1NTU2VsZWN0b3I6OlBhZ2VQc2V1ZG9DbGFzc1R5cGUgcHNldWRvVHlwZTsKLSAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocHNldWRvVHlwZVN0cmluZywgImZpcnN0Iikp
Ci0gICAgICAgIHBzZXVkb1R5cGUgPSBDU1NTZWxlY3Rvcjo6UGFnZVBzZXVkb0NsYXNzRmlyc3Q7
Ci0gICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocHNldWRvVHlwZVN0
cmluZywgImxlZnQiKSkKLSAgICAgICAgcHNldWRvVHlwZSA9IENTU1NlbGVjdG9yOjpQYWdlUHNl
dWRvQ2xhc3NMZWZ0OwotICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KHBzZXVkb1R5cGVTdHJpbmcsICJyaWdodCIpKQotICAgICAgICBwc2V1ZG9UeXBlID0gQ1NTU2Vs
ZWN0b3I6OlBhZ2VQc2V1ZG9DbGFzc1JpZ2h0OwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBhdXRvIHNlbGVjdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NQYXJzZXJT
ZWxlY3Rvcj4oKTsKLSAgICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+c2V0TWF0Y2goQ1NTU2VsZWN0
b3I6OlBhZ2VQc2V1ZG9DbGFzcyk7Ci0gICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldFBhZ2VQ
c2V1ZG9UeXBlKHBzZXVkb1R5cGUpOwotICAgIHJldHVybiBzZWxlY3Rvci5yZWxlYXNlKCk7Ci19
Ci0KLUNTU1BhcnNlclNlbGVjdG9yKiBDU1NQYXJzZXJTZWxlY3Rvcjo6cGFyc2VQc2V1ZG9FbGVt
ZW50U2VsZWN0b3IoQ1NTUGFyc2VyU3RyaW5nJiBwc2V1ZG9UeXBlU3RyaW5nKQotewotICAgIHBz
ZXVkb1R5cGVTdHJpbmcuY29udmVydFRvQVNDSUlMb3dlcmNhc2VJblBsYWNlKCk7Ci0gICAgQXRv
bWljU3RyaW5nIG5hbWUgPSBwc2V1ZG9UeXBlU3RyaW5nOwotCi0gICAgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0VsZW1lbnRUeXBlIHBzZXVkb1R5cGUgPSBDU1NTZWxlY3Rvcjo6cGFyc2VQc2V1ZG9FbGVt
ZW50VHlwZShuYW1lKTsKLSAgICBpZiAocHNldWRvVHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRv
RWxlbWVudFVua25vd24pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBzZWxl
Y3RvciA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NTUGFyc2VyU2VsZWN0b3I+KCk7Ci0gICAgc2VsZWN0
b3ItPm1fc2VsZWN0b3ItPnNldE1hdGNoKENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50KTsKLSAg
ICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+c2V0UHNldWRvRWxlbWVudFR5cGUocHNldWRvVHlwZSk7
Ci0gICAgaWYgKHBzZXVkb1R5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRXZWJLaXRD
dXN0b21MZWdhY3lQcmVmaXhlZCkgewotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG5hbWUg
PT0gIi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIiLCAiLXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRl
ciBpcyB0aGUgb25seSBMZWdhY3lQcmVmaXggcHNldWRvIHR5cGUuIik7Ci0gICAgICAgIGlmIChu
YW1lID09ICItd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIikKLSAgICAgICAgICAgIG5hbWUgPSBB
dG9taWNTdHJpbmcoInBsYWNlaG9sZGVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7Ci0gICAgfQotICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRWYWx1ZShuYW1lKTsK
LSAgICByZXR1cm4gc2VsZWN0b3IucmVsZWFzZSgpOwotfQotCi0jaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQotQ1NTUGFyc2VyU2VsZWN0b3IqIENTU1BhcnNlclNlbGVjdG9yOjpwYXJzZVBzZXVkb0Vs
ZW1lbnRDdWVGdW5jdGlvblNlbGVjdG9yKGNvbnN0IENTU1BhcnNlclN0cmluZyYgZnVuY3Rpb25J
ZGVudGlmaWVyLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPj4qIHBh
cnNlZFNlbGVjdG9yVmVjdG9yKQotewotICAgIEFTU0VSVF9VTlVTRUQoZnVuY3Rpb25JZGVudGlm
aWVyLCBTdHJpbmcoZnVuY3Rpb25JZGVudGlmaWVyKSA9PSAiY3VlKCIpOwotCi0gICAgc3RkOjp1
bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+Pj4gc2Vs
ZWN0b3JWZWN0b3IocGFyc2VkU2VsZWN0b3JWZWN0b3IpOwotCi0gICAgaWYgKCFzZWxlY3RvclZl
Y3RvcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHNlbGVjdG9yID0gc3Rk
OjptYWtlX3VuaXF1ZTxDU1NQYXJzZXJTZWxlY3Rvcj4oKTsKLSAgICBzZWxlY3Rvci0+bV9zZWxl
Y3Rvci0+c2V0TWF0Y2goQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpOwotICAgIHNlbGVjdG9y
LT5tX3NlbGVjdG9yLT5zZXRQc2V1ZG9FbGVtZW50VHlwZShDU1NTZWxlY3Rvcjo6UHNldWRvRWxl
bWVudEN1ZSk7Ci0gICAgc2VsZWN0b3ItPmFkb3B0U2VsZWN0b3JWZWN0b3IoKnNlbGVjdG9yVmVj
dG9yKTsKLSAgICByZXR1cm4gc2VsZWN0b3IucmVsZWFzZSgpOwotfQotI2VuZGlmCi0KLUNTU1Bh
cnNlclNlbGVjdG9yKiBDU1NQYXJzZXJTZWxlY3Rvcjo6cGFyc2VQc2V1ZG9FbGVtZW50U2xvdHRl
ZEZ1bmN0aW9uU2VsZWN0b3IoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBmdW5jdGlvbklkZW50aWZp
ZXIsIENTU1BhcnNlclNlbGVjdG9yKiBwYXJzZWRTZWxlY3RvcikKLXsKLSAgICBBU1NFUlRfVU5V
U0VEKGZ1bmN0aW9uSWRlbnRpZmllciwgU3RyaW5nKGZ1bmN0aW9uSWRlbnRpZmllcikgPT0gInNs
b3R0ZWQoIik7Ci0KLSAgICBpZiAoIXBhcnNlZFNlbGVjdG9yKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gb3duZWRQYXJz
ZWRTZWxlY3RvcihwYXJzZWRTZWxlY3Rvcik7Ci0KLSAgICBmb3IgKGF1dG8qIGNvbXBvbmVudCA9
IHBhcnNlZFNlbGVjdG9yOyBjb21wb25lbnQ7IGNvbXBvbmVudCA9IGNvbXBvbmVudC0+dGFnSGlz
dG9yeSgpKSB7Ci0gICAgICAgIGlmIChjb21wb25lbnQtPm1hdGNoZXNQc2V1ZG9FbGVtZW50KCkp
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBhdXRvIHNlbGVjdG9y
VmVjdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNl
clNlbGVjdG9yPj4+KCk7Ci0gICAgc2VsZWN0b3JWZWN0b3ItPmFwcGVuZChXVEZNb3ZlKG93bmVk
UGFyc2VkU2VsZWN0b3IpKTsKLQotICAgIGF1dG8gc2VsZWN0b3IgPSBzdGQ6Om1ha2VfdW5pcXVl
PENTU1BhcnNlclNlbGVjdG9yPigpOwotICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRNYXRj
aChDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCk7Ci0gICAgc2VsZWN0b3ItPm1fc2VsZWN0b3It
PnNldFBzZXVkb0VsZW1lbnRUeXBlKENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50U2xvdHRlZCk7
Ci0gICAgc2VsZWN0b3ItPmFkb3B0U2VsZWN0b3JWZWN0b3IoKnNlbGVjdG9yVmVjdG9yKTsKLSAg
ICByZXR1cm4gc2VsZWN0b3IucmVsZWFzZSgpOwotfQotCi1DU1NQYXJzZXJTZWxlY3RvciogQ1NT
UGFyc2VyU2VsZWN0b3I6OnBhcnNlUHNldWRvQ2xhc3NIb3N0RnVuY3Rpb25TZWxlY3Rvcihjb25z
dCBDU1NQYXJzZXJTdHJpbmcmIGZ1bmN0aW9uSWRlbnRpZmllciwgQ1NTUGFyc2VyU2VsZWN0b3Iq
IHBhcnNlZFNlbGVjdG9yKQotewotICAgIEFTU0VSVF9VTlVTRUQoZnVuY3Rpb25JZGVudGlmaWVy
LCBTdHJpbmcoZnVuY3Rpb25JZGVudGlmaWVyKSA9PSAiaG9zdCgiKTsKLQotICAgIGlmICghcGFy
c2VkU2VsZWN0b3IpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgc3RkOjp1bmlxdWVf
cHRyPENTU1BhcnNlclNlbGVjdG9yPiBvd25lZFBhcnNlZFNlbGVjdG9yKHBhcnNlZFNlbGVjdG9y
KTsKLQotICAgIGZvciAoYXV0byogY29tcG9uZW50ID0gcGFyc2VkU2VsZWN0b3I7IGNvbXBvbmVu
dDsgY29tcG9uZW50ID0gY29tcG9uZW50LT50YWdIaXN0b3J5KCkpIHsKLSAgICAgICAgaWYgKGNv
bXBvbmVudC0+bWF0Y2hlc1BzZXVkb0VsZW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KLQotICAgIGF1dG8gc2VsZWN0b3JWZWN0b3IgPSBzdGQ6Om1ha2VfdW5pcXVl
PFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+Pj4oKTsKLSAgICBzZWxl
Y3RvclZlY3Rvci0+YXBwZW5kKFdURk1vdmUob3duZWRQYXJzZWRTZWxlY3RvcikpOwotCi0gICAg
YXV0byBzZWxlY3RvciA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NTUGFyc2VyU2VsZWN0b3I+KCk7Ci0g
ICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldE1hdGNoKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
cyk7Ci0gICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldFBzZXVkb0NsYXNzVHlwZShDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3NIb3N0KTsKLSAgICBzZWxlY3Rvci0+YWRvcHRTZWxlY3RvclZlY3Rv
cigqc2VsZWN0b3JWZWN0b3IpOwotICAgIHJldHVybiBzZWxlY3Rvci5yZWxlYXNlKCk7Ci19Ci0K
LUNTU1BhcnNlclNlbGVjdG9yKiBDU1NQYXJzZXJTZWxlY3Rvcjo6cGFyc2VQc2V1ZG9DbGFzc0Fu
ZENvbXBhdGliaWxpdHlFbGVtZW50U2VsZWN0b3IoQ1NTUGFyc2VyU3RyaW5nJiBwc2V1ZG9UeXBl
U3RyaW5nKQotewotICAgIGlmIChwc2V1ZG9UeXBlU3RyaW5nLmxlbmd0aCgpICYmIHBzZXVkb1R5
cGVTdHJpbmdbcHNldWRvVHlwZVN0cmluZy5sZW5ndGgoKSAtIDFdID09ICcoJykKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBQc2V1ZG9DbGFzc09yQ29tcGF0aWJpbGl0eVBzZXVkb0Vs
ZW1lbnQgcHNldWRvVHlwZSA9IHBhcnNlUHNldWRvQ2xhc3NBbmRDb21wYXRpYmlsaXR5RWxlbWVu
dFN0cmluZyhwc2V1ZG9UeXBlU3RyaW5nKTsKLSAgICBpZiAocHNldWRvVHlwZS5wc2V1ZG9DbGFz
cyAhPSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NVbmtub3duKSB7Ci0gICAgICAgIGF1dG8gc2Vs
ZWN0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU1BhcnNlclNlbGVjdG9yPigpOwotICAgICAgICBz
ZWxlY3Rvci0+bV9zZWxlY3Rvci0+c2V0TWF0Y2goQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKTsK
LSAgICAgICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldFBzZXVkb0NsYXNzVHlwZShwc2V1ZG9U
eXBlLnBzZXVkb0NsYXNzKTsKLSAgICAgICAgcmV0dXJuIHNlbGVjdG9yLnJlbGVhc2UoKTsKLSAg
ICB9Ci0gICAgaWYgKHBzZXVkb1R5cGUuY29tcGF0aWJpbGl0eVBzZXVkb0VsZW1lbnQgIT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRVbmtub3duKSB7Ci0gICAgICAgIGF1dG8gc2VsZWN0b3Ig
PSBzdGQ6Om1ha2VfdW5pcXVlPENTU1BhcnNlclNlbGVjdG9yPigpOwotICAgICAgICBzZWxlY3Rv
ci0+bV9zZWxlY3Rvci0+c2V0TWF0Y2goQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpOwotICAg
ICAgICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+c2V0UHNldWRvRWxlbWVudFR5cGUocHNldWRvVHlw
ZS5jb21wYXRpYmlsaXR5UHNldWRvRWxlbWVudCk7Ci0gICAgICAgIEF0b21pY1N0cmluZyBuYW1l
ID0gcHNldWRvVHlwZVN0cmluZzsKLSAgICAgICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldFZh
bHVlKG5hbWUpOwotICAgICAgICByZXR1cm4gc2VsZWN0b3IucmVsZWFzZSgpOwotICAgIH0KLSAg
ICByZXR1cm4gbnVsbHB0cjsKLX0KLQotQ1NTUGFyc2VyU2VsZWN0b3I6OkNTU1BhcnNlclNlbGVj
dG9yKCkKLSAgICA6IG1fc2VsZWN0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDU1NTZWxlY3Rvcj4oKSkK
LXsKLX0KLQotQ1NTUGFyc2VyU2VsZWN0b3I6OkNTU1BhcnNlclNlbGVjdG9yKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ1FOYW1lKQotICAgIDogbV9zZWxlY3RvcihzdGQ6Om1ha2VfdW5pcXVlPENT
U1NlbGVjdG9yPih0YWdRTmFtZSkpCi17Ci19Ci0KLUNTU1BhcnNlclNlbGVjdG9yOjp+Q1NTUGFy
c2VyU2VsZWN0b3IoKQotewotICAgIGlmICghbV90YWdIaXN0b3J5KQotICAgICAgICByZXR1cm47
Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4sIDE2PiB0b0Rl
bGV0ZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNlbGVjdG9yID0g
V1RGTW92ZShtX3RhZ0hpc3RvcnkpOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gbmV4dCA9IFdURk1vdmUoc2VsZWN0b3ItPm1f
dGFnSGlzdG9yeSk7Ci0gICAgICAgIHRvRGVsZXRlLmFwcGVuZChXVEZNb3ZlKHNlbGVjdG9yKSk7
Ci0gICAgICAgIGlmICghbmV4dCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzZWxlY3Rv
ciA9IFdURk1vdmUobmV4dCk7Ci0gICAgfQotfQotCi12b2lkIENTU1BhcnNlclNlbGVjdG9yOjph
ZG9wdFNlbGVjdG9yVmVjdG9yKFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0
b3I+PiYgc2VsZWN0b3JWZWN0b3IpCi17Ci0gICAgYXV0byBzZWxlY3Rvckxpc3QgPSBzdGQ6Om1h
a2VfdW5pcXVlPENTU1NlbGVjdG9yTGlzdD4oKTsKLSAgICBzZWxlY3Rvckxpc3QtPmFkb3B0U2Vs
ZWN0b3JWZWN0b3Ioc2VsZWN0b3JWZWN0b3IpOwotICAgIG1fc2VsZWN0b3ItPnNldFNlbGVjdG9y
TGlzdChXVEZNb3ZlKHNlbGVjdG9yTGlzdCkpOwotfQotCi12b2lkIENTU1BhcnNlclNlbGVjdG9y
OjpzZXRMYW5nQXJndW1lbnRMaXN0KGNvbnN0IFZlY3RvcjxDU1NQYXJzZXJTdHJpbmc+JiBzdHJp
bmdWZWN0b3IpCi17Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghc3RyaW5nVmVjdG9yLmlzRW1w
dHkoKSwgIk5vIENTUyBTZWxlY3RvciB0YWtlcyBhbiBlbXB0eSBhcmd1bWVudCBsaXN0LiIpOwot
ICAgIGF1dG8gYXJndW1lbnRMaXN0ID0gc3RkOjptYWtlX3VuaXF1ZTxWZWN0b3I8QXRvbWljU3Ry
aW5nPj4oKTsKLSAgICBhcmd1bWVudExpc3QtPnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc3RyaW5n
VmVjdG9yLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBBdG9taWNTdHJpbmcmIGxhbmd1YWdlQXJn
dW1lbnQgOiBzdHJpbmdWZWN0b3IpCi0gICAgICAgIGFyZ3VtZW50TGlzdC0+YXBwZW5kKGxhbmd1
YWdlQXJndW1lbnQpOwotICAgIG1fc2VsZWN0b3ItPnNldExhbmdBcmd1bWVudExpc3QoV1RGTW92
ZShhcmd1bWVudExpc3QpKTsKLX0KLQotdm9pZCBDU1NQYXJzZXJTZWxlY3Rvcjo6c2V0UHNldWRv
Q2xhc3NWYWx1ZShjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHBzZXVkb0NsYXNzU3RyaW5nKQotewot
ICAgIEFTU0VSVChtX3NlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
cyk7Ci0KLSAgICBQc2V1ZG9DbGFzc09yQ29tcGF0aWJpbGl0eVBzZXVkb0VsZW1lbnQgcHNldWRv
VHlwZSA9IHBhcnNlUHNldWRvQ2xhc3NBbmRDb21wYXRpYmlsaXR5RWxlbWVudFN0cmluZyhwc2V1
ZG9DbGFzc1N0cmluZyk7Ci0gICAgbV9zZWxlY3Rvci0+c2V0UHNldWRvQ2xhc3NUeXBlKHBzZXVk
b1R5cGUucHNldWRvQ2xhc3MpOwotfQotCi1zdGF0aWMgYm9vbCBzZWxlY3Rvckxpc3RNYXRjaGVz
UHNldWRvRWxlbWVudChjb25zdCBDU1NTZWxlY3Rvckxpc3QqIHNlbGVjdG9yTGlzdCkKLXsKLSAg
ICBpZiAoIXNlbGVjdG9yTGlzdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChj
b25zdCBDU1NTZWxlY3Rvciogc3ViU2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1
YlNlbGVjdG9yOyBzdWJTZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzdWJTZWxlY3Rv
cikpIHsKLSAgICAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBzdWJTZWxl
Y3Rvcjsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewotICAg
ICAgICAgICAgaWYgKHNlbGVjdG9yLT5tYXRjaGVzUHNldWRvRWxlbWVudCgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKGNvbnN0IENTU1NlbGVjdG9yTGlz
dCogc3Vic2VsZWN0b3JMaXN0ID0gc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHNlbGVjdG9yTGlzdE1hdGNoZXNQc2V1ZG9FbGVtZW50KHN1YnNlbGVjdG9y
TGlzdCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDU1NQYXJzZXJT
ZWxlY3Rvcjo6bWF0Y2hlc1BzZXVkb0VsZW1lbnQoKSBjb25zdAotewotICAgIHJldHVybiBtX3Nl
bGVjdG9yLT5tYXRjaGVzUHNldWRvRWxlbWVudCgpIHx8IHNlbGVjdG9yTGlzdE1hdGNoZXNQc2V1
ZG9FbGVtZW50KG1fc2VsZWN0b3ItPnNlbGVjdG9yTGlzdCgpKTsKLX0KLQotdm9pZCBDU1NQYXJz
ZXJTZWxlY3Rvcjo6aW5zZXJ0VGFnSGlzdG9yeShDU1NTZWxlY3Rvcjo6UmVsYXRpb24gYmVmb3Jl
LCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNlbGVjdG9yLCBDU1NTZWxlY3Rv
cjo6UmVsYXRpb24gYWZ0ZXIpCi17Ci0gICAgaWYgKG1fdGFnSGlzdG9yeSkKLSAgICAgICAgc2Vs
ZWN0b3ItPnNldFRhZ0hpc3RvcnkoV1RGTW92ZShtX3RhZ0hpc3RvcnkpKTsKLSAgICBzZXRSZWxh
dGlvbihiZWZvcmUpOwotICAgIHNlbGVjdG9yLT5zZXRSZWxhdGlvbihhZnRlcik7Ci0gICAgbV90
YWdIaXN0b3J5ID0gV1RGTW92ZShzZWxlY3Rvcik7Ci19Ci0KLXZvaWQgQ1NTUGFyc2VyU2VsZWN0
b3I6OmFwcGVuZFRhZ0hpc3RvcnkoQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHJlbGF0aW9uLCBzdGQ6
OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNlbGVjdG9yKQotewotICAgIENTU1BhcnNl
clNlbGVjdG9yKiBlbmQgPSB0aGlzOwotICAgIHdoaWxlIChlbmQtPnRhZ0hpc3RvcnkoKSkKLSAg
ICAgICAgZW5kID0gZW5kLT50YWdIaXN0b3J5KCk7Ci0KLSAgICBlbmQtPnNldFJlbGF0aW9uKHJl
bGF0aW9uKTsKLSAgICBlbmQtPnNldFRhZ0hpc3RvcnkoV1RGTW92ZShzZWxlY3RvcikpOwotfQot
Ci12b2lkIENTU1BhcnNlclNlbGVjdG9yOjphcHBlbmRUYWdIaXN0b3J5KENTU1BhcnNlclNlbGVj
dG9yQ29tYmluYXRvciByZWxhdGlvbiwgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9y
PiBzZWxlY3RvcikKLXsKLSAgICBDU1NQYXJzZXJTZWxlY3RvciogZW5kID0gdGhpczsKLSAgICB3
aGlsZSAoZW5kLT50YWdIaXN0b3J5KCkpCi0gICAgICAgIGVuZCA9IGVuZC0+dGFnSGlzdG9yeSgp
OwotCi0gICAgQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHNlbGVjdG9yUmVsYXRpb247Ci0gICAgc3dp
dGNoIChyZWxhdGlvbikgewotICAgIGNhc2UgQ1NTUGFyc2VyU2VsZWN0b3JDb21iaW5hdG9yOjpD
aGlsZDoKLSAgICAgICAgc2VsZWN0b3JSZWxhdGlvbiA9IENTU1NlbGVjdG9yOjpDaGlsZDsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQYXJzZXJTZWxlY3RvckNvbWJpbmF0b3I6OkRlc2Nl
bmRhbnRTcGFjZToKLSAgICAgICAgc2VsZWN0b3JSZWxhdGlvbiA9IENTU1NlbGVjdG9yOjpEZXNj
ZW5kYW50OwotICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoQ1NTX1NFTEVDVE9SU19MRVZFTDQp
Ci0gICAgY2FzZSBDU1NQYXJzZXJTZWxlY3RvckNvbWJpbmF0b3I6OkRlc2NlbmRhbnREb3VibGVD
aGlsZDoKLSAgICAgICAgc2VsZWN0b3JSZWxhdGlvbiA9IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50
OwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgQ1NTUGFyc2VyU2VsZWN0b3JDb21i
aW5hdG9yOjpEaXJlY3RBZGphY2VudDoKLSAgICAgICAgc2VsZWN0b3JSZWxhdGlvbiA9IENTU1Nl
bGVjdG9yOjpEaXJlY3RBZGphY2VudDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQYXJz
ZXJTZWxlY3RvckNvbWJpbmF0b3I6OkluZGlyZWN0QWRqYWNlbnQ6Ci0gICAgICAgIHNlbGVjdG9y
UmVsYXRpb24gPSBDU1NTZWxlY3Rvcjo6SW5kaXJlY3RBZGphY2VudDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGVuZC0+c2V0UmVsYXRpb24oc2VsZWN0b3JSZWxhdGlvbik7Ci0KLSNpZiBF
TkFCTEUoQ1NTX1NFTEVDVE9SU19MRVZFTDQpCi0gICAgaWYgKHJlbGF0aW9uID09IENTU1BhcnNl
clNlbGVjdG9yQ29tYmluYXRvcjo6RGVzY2VuZGFudERvdWJsZUNoaWxkKQotICAgICAgICBlbmQt
PnNldERlc2NlbmRhbnRVc2VEb3VibGVDaGlsZFN5bnRheCgpOwotI2VuZGlmCi0KLSAgICBlbmQt
PnNldFRhZ0hpc3RvcnkoV1RGTW92ZShzZWxlY3RvcikpOwotfQotCi12b2lkIENTU1BhcnNlclNl
bGVjdG9yOjpwcmVwZW5kVGFnU2VsZWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnUU5hbWUs
IGJvb2wgdGFnSXNGb3JOYW1lc3BhY2VSdWxlKQotewotICAgIGF1dG8gc2Vjb25kID0gc3RkOjpt
YWtlX3VuaXF1ZTxDU1NQYXJzZXJTZWxlY3Rvcj4oKTsKLSAgICBzZWNvbmQtPm1fc2VsZWN0b3Ig
PSBXVEZNb3ZlKG1fc2VsZWN0b3IpOwotICAgIHNlY29uZC0+bV90YWdIaXN0b3J5ID0gV1RGTW92
ZShtX3RhZ0hpc3RvcnkpOwotICAgIG1fdGFnSGlzdG9yeSA9IFdURk1vdmUoc2Vjb25kKTsKLQot
ICAgIG1fc2VsZWN0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU1NlbGVjdG9yPih0YWdRTmFtZSwg
dGFnSXNGb3JOYW1lc3BhY2VSdWxlKTsKLSAgICBtX3NlbGVjdG9yLT5zZXRSZWxhdGlvbihDU1NT
ZWxlY3Rvcjo6U3ViU2VsZWN0b3IpOwotfQotCi19Ci0KSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1Bh
cnNlclZhbHVlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1BhcnNlclZhbHVlcy5o
CShyZXZpc2lvbiAyMDQ3NDMpCisrKyBXZWJDb3JlL2Nzcy9DU1NQYXJzZXJWYWx1ZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSwyNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNT
U1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKLSNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdI
YXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgQ1NTVmFsdWU7Ci1jbGFzcyBRdWFsaWZpZWROYW1lOwotCi0vLyBUaGlz
IHNob3VsZCBiZSBhIFN0cmluZ1ZpZXcgYnV0IGN1cnJlbnRseSBpdCBjYW4ndCBiZWNhdXNlIGl0
J3MgdXNlZCBhcyBhbiBlbGVtZW50IG9mIGEgdW5pb24gaW4gQ1NTUGFyc2VyVmFsdWUuCi1zdHJ1
Y3QgQ1NTUGFyc2VyU3RyaW5nIHsKLSAgICB2b2lkIGluaXQoTENoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIG1fZGF0YS5jaGFyYWN0ZXJzOCA9IGNoYXJh
Y3RlcnM7Ci0gICAgICAgIG1fbGVuZ3RoID0gbGVuZ3RoOwotICAgICAgICBtX2lzOEJpdCA9IHRy
dWU7Ci0gICAgfQotCi0gICAgdm9pZCBpbml0KFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgpCi0gICAgewotICAgICAgICBtX2RhdGEuY2hhcmFjdGVyczE2ID0gY2hhcmFjdGVyczsK
LSAgICAgICAgbV9sZW5ndGggPSBsZW5ndGg7Ci0gICAgICAgIG1faXM4Qml0ID0gZmFsc2U7Ci0g
ICAgfQotCi0gICAgdm9pZCBpbml0KGNvbnN0IFN0cmluZyYgc3RyaW5nKQotICAgIHsKLSAgICAg
ICAgbV9sZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgICAgIGlmICghbV9sZW5ndGggfHwg
c3RyaW5nLmlzOEJpdCgpKSB7Ci0gICAgICAgICAgICBtX2RhdGEuY2hhcmFjdGVyczggPSBjb25z
dF9jYXN0PExDaGFyKj4oc3RyaW5nLmNoYXJhY3RlcnM4KCkpOwotICAgICAgICAgICAgbV9pczhC
aXQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9kYXRhLmNoYXJhY3Rl
cnMxNiA9IGNvbnN0X2Nhc3Q8VUNoYXIqPihzdHJpbmcuY2hhcmFjdGVyczE2KCkpOwotICAgICAg
ICAgICAgbV9pczhCaXQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgY2xl
YXIoKQotICAgIHsKLSAgICAgICAgbV9kYXRhLmNoYXJhY3RlcnM4ID0gMDsKLSAgICAgICAgbV9s
ZW5ndGggPSAwOwotICAgICAgICBtX2lzOEJpdCA9IHRydWU7Ci0gICAgfQotCi0gICAgYm9vbCBp
czhCaXQoKSBjb25zdCB7IHJldHVybiBtX2lzOEJpdDsgfQotICAgIExDaGFyKiBjaGFyYWN0ZXJz
OCgpIGNvbnN0IHsgQVNTRVJUKGlzOEJpdCgpKTsgcmV0dXJuIG1fZGF0YS5jaGFyYWN0ZXJzODsg
fQotICAgIFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdCB7IEFTU0VSVCghaXM4Qml0KCkpOyBy
ZXR1cm4gbV9kYXRhLmNoYXJhY3RlcnMxNjsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMoKSBjb25zdDsKLQotICAgIHVuc2ln
bmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9Ci0gICAgdm9pZCBzZXRMZW5n
dGgodW5zaWduZWQgbGVuZ3RoKSB7IG1fbGVuZ3RoID0gbGVuZ3RoOyB9Ci0KLSAgICB2b2lkIGNv
bnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5QbGFjZSgpOwotCi0gICAgVUNoYXIgb3BlcmF0b3JbXSh1
bnNpZ25lZCBpKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04oaSA8IG1fbGVuZ3RoKTsKLSAgICAgICAgaWYgKGlzOEJpdCgpKQotICAgICAgICAg
ICAgcmV0dXJuIG1fZGF0YS5jaGFyYWN0ZXJzOFtpXTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5j
aGFyYWN0ZXJzMTZbaV07Ci0gICAgfQotCi0gICAgb3BlcmF0b3IgU3RyaW5nKCkgY29uc3QgeyBy
ZXR1cm4gaXM4Qml0KCkgPyBTdHJpbmcobV9kYXRhLmNoYXJhY3RlcnM4LCBtX2xlbmd0aCkgOiBT
dHJpbmcobV9kYXRhLmNoYXJhY3RlcnMxNiwgbV9sZW5ndGgpOyB9Ci0gICAgb3BlcmF0b3IgQXRv
bWljU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gaXM4Qml0KCkgPyBBdG9taWNTdHJpbmcobV9kYXRh
LmNoYXJhY3RlcnM4LCBtX2xlbmd0aCkgOiBBdG9taWNTdHJpbmcobV9kYXRhLmNoYXJhY3RlcnMx
NiwgbV9sZW5ndGgpOyB9Ci0KLSAgICB1bmlvbiB7Ci0gICAgICAgIExDaGFyKiBjaGFyYWN0ZXJz
ODsKLSAgICAgICAgVUNoYXIqIGNoYXJhY3RlcnMxNjsKLSAgICB9IG1fZGF0YTsKLSAgICB1bnNp
Z25lZCBtX2xlbmd0aDsKLSAgICBib29sIG1faXM4Qml0OwotfTsKLQotdGVtcGxhdGU8dW5zaWdu
ZWQgbGVuZ3RoPiBib29sIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IENTU1Bh
cnNlclN0cmluZyYsIGNvbnN0IGNoYXIgKCZsb3dlcmNhc2VMZXR0ZXJzKVtsZW5ndGhdKTsKLQot
c3RydWN0IENTU1BhcnNlckZ1bmN0aW9uOwotc3RydWN0IENTU1BhcnNlclZhcmlhYmxlOwotCi1z
dHJ1Y3QgQ1NTUGFyc2VyVmFsdWUgewotICAgIENTU1ZhbHVlSUQgaWQ7Ci0gICAgYm9vbCBpc0lu
dDsKLSAgICB1bmlvbiB7Ci0gICAgICAgIGRvdWJsZSBmVmFsdWU7Ci0gICAgICAgIGludCBpVmFs
dWU7Ci0gICAgICAgIENTU1BhcnNlclN0cmluZyBzdHJpbmc7Ci0gICAgICAgIENTU1BhcnNlckZ1
bmN0aW9uKiBmdW5jdGlvbjsKLSAgICAgICAgQ1NTUGFyc2VyVmFyaWFibGUqIHZhcmlhYmxlOwot
ICAgICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdDsKLSAgICB9OwotICAgIGVudW0g
ewotICAgICAgICBPcGVyYXRvciAgPSAweDEwMDAwMCwKLSAgICAgICAgRnVuY3Rpb24gID0gMHgx
MDAwMDEsCi0gICAgICAgIFZhbHVlTGlzdCA9IDB4MTAwMDAyLAotICAgICAgICBRX0VNUyAgICAg
PSAweDEwMDAwMywKLSAgICAgICAgVmFyaWFibGUgID0gMHgxMDAwMDQKLSAgICB9OwotICAgIGlu
dCB1bml0OwotCi0gICAgdm9pZCBzZXRGcm9tVmFsdWVMaXN0KHN0ZDo6dW5pcXVlX3B0cjxDU1NQ
YXJzZXJWYWx1ZUxpc3Q+KTsKLQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3JlYXRlQ1NTVmFsdWUo
KTsKLX07Ci0KLXZvaWQgZGVzdHJveShjb25zdCBDU1NQYXJzZXJWYWx1ZSYpOwotCi1jbGFzcyBD
U1NQYXJzZXJWYWx1ZUxpc3QgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGlj
OgotICAgIENTU1BhcnNlclZhbHVlTGlzdCgpCi0gICAgICAgIDogbV9jdXJyZW50KDApCi0gICAg
ewotICAgIH0KLSAgICB+Q1NTUGFyc2VyVmFsdWVMaXN0KCk7Ci0KLSAgICB2b2lkIGFkZFZhbHVl
KGNvbnN0IENTU1BhcnNlclZhbHVlJik7Ci0gICAgdm9pZCBpbnNlcnRWYWx1ZUF0KHVuc2lnbmVk
LCBjb25zdCBDU1NQYXJzZXJWYWx1ZSYpOwotICAgIHZvaWQgZXh0ZW5kKENTU1BhcnNlclZhbHVl
TGlzdCYpOwotCi0gICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNp
emUoKTsgfQotICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRleCgpIHsgcmV0dXJuIG1fY3VycmVudDsg
fQotICAgIENTU1BhcnNlclZhbHVlKiBjdXJyZW50KCkgeyByZXR1cm4gbV9jdXJyZW50IDwgbV92
YWx1ZXMuc2l6ZSgpID8gJm1fdmFsdWVzW21fY3VycmVudF0gOiAwOyB9Ci0gICAgQ1NTUGFyc2Vy
VmFsdWUqIG5leHQoKSB7ICsrbV9jdXJyZW50OyByZXR1cm4gY3VycmVudCgpOyB9Ci0gICAgQ1NT
UGFyc2VyVmFsdWUqIHByZXZpb3VzKCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9jdXJyZW50KQot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIC0tbV9jdXJyZW50OwotICAgICAgICByZXR1
cm4gY3VycmVudCgpOwotICAgIH0KLSAgICB2b2lkIHNldEN1cnJlbnRJbmRleCh1bnNpZ25lZCBp
bmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpbmRleCA8IG1fdmFsdWVzLnNpemUoKSk7Ci0g
ICAgICAgIGlmIChpbmRleCA8IG1fdmFsdWVzLnNpemUoKSkKLSAgICAgICAgICAgIG1fY3VycmVu
dCA9IGluZGV4OwotICAgIH0KLQotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZUF0KHVuc2lnbmVk
IGkpIHsgcmV0dXJuIGkgPCBtX3ZhbHVlcy5zaXplKCkgPyAmbV92YWx1ZXNbaV0gOiAwOyB9Ci0K
LSAgICB2b2lkIGNsZWFyKCkgeyBtX3ZhbHVlcy5jbGVhcigpOyB9Ci0gICAgCi0gICAgU3RyaW5n
IHRvU3RyaW5nKCk7Ci0gICAgCi0gICAgYm9vbCBjb250YWluc1ZhcmlhYmxlcygpIGNvbnN0Owot
Ci1wcml2YXRlOgotICAgIHVuc2lnbmVkIG1fY3VycmVudDsKLSAgICBWZWN0b3I8Q1NTUGFyc2Vy
VmFsdWUsIDQ+IG1fdmFsdWVzOwotfTsKLQotc3RydWN0IENTU1BhcnNlckZ1bmN0aW9uIHsKLSAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBDU1NQYXJzZXJTdHJpbmcg
bmFtZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyVmFsdWVMaXN0PiBhcmdzOwotfTsK
LQotc3RydWN0IENTU1BhcnNlclZhcmlhYmxlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBDU1NQYXJzZXJTdHJpbmcgbmFtZTsgLy8gVGhlIGN1c3RvbSBwcm9w
ZXJ0eSBuYW1lCi0gICAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclZhbHVlTGlzdD4gYXJnczsg
Ly8gVGhlIGZhbGxiYWNrIGFyZ3MKLX07Ci0KLWVudW0gY2xhc3MgQ1NTUGFyc2VyU2VsZWN0b3JD
b21iaW5hdG9yIHsKLSAgICBDaGlsZCwKLSAgICBEZXNjZW5kYW50U3BhY2UsCi0jaWYgRU5BQkxF
KENTU19TRUxFQ1RPUlNfTEVWRUw0KQotICAgIERlc2NlbmRhbnREb3VibGVDaGlsZCwKLSNlbmRp
ZgotICAgIERpcmVjdEFkamFjZW50LAotICAgIEluZGlyZWN0QWRqYWNlbnQKLX07Ci0KLWNsYXNz
IENTU1BhcnNlclNlbGVjdG9yIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgQ1NTUGFyc2VyU2VsZWN0b3IqIHBhcnNlUGFnZVBzZXVkb1NlbGVjdG9y
KGNvbnN0IENTU1BhcnNlclN0cmluZyYgcHNldWRvVHlwZVN0cmluZyk7Ci0gICAgc3RhdGljIENT
U1BhcnNlclNlbGVjdG9yKiBwYXJzZVBzZXVkb0VsZW1lbnRTZWxlY3RvcihDU1NQYXJzZXJTdHJp
bmcmIHBzZXVkb1R5cGVTdHJpbmcpOwotICAgIHN0YXRpYyBDU1NQYXJzZXJTZWxlY3RvciogcGFy
c2VQc2V1ZG9FbGVtZW50Q3VlRnVuY3Rpb25TZWxlY3Rvcihjb25zdCBDU1NQYXJzZXJTdHJpbmcm
IGZ1bmN0aW9uSWRlbnRpZmllciwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxl
Y3Rvcj4+Kik7Ci0gICAgc3RhdGljIENTU1BhcnNlclNlbGVjdG9yKiBwYXJzZVBzZXVkb0VsZW1l
bnRTbG90dGVkRnVuY3Rpb25TZWxlY3Rvcihjb25zdCBDU1NQYXJzZXJTdHJpbmcmIGZ1bmN0aW9u
SWRlbnRpZmllciwgQ1NTUGFyc2VyU2VsZWN0b3IqKTsKLSAgICBzdGF0aWMgQ1NTUGFyc2VyU2Vs
ZWN0b3IqIHBhcnNlUHNldWRvQ2xhc3NIb3N0RnVuY3Rpb25TZWxlY3Rvcihjb25zdCBDU1NQYXJz
ZXJTdHJpbmcmIGZ1bmN0aW9uSWRlbnRpZmllciwgQ1NTUGFyc2VyU2VsZWN0b3IqKTsKLSAgICBz
dGF0aWMgQ1NTUGFyc2VyU2VsZWN0b3IqIHBhcnNlUHNldWRvQ2xhc3NBbmRDb21wYXRpYmlsaXR5
RWxlbWVudFNlbGVjdG9yKENTU1BhcnNlclN0cmluZyYgcHNldWRvVHlwZVN0cmluZyk7Ci0KLSAg
ICBDU1NQYXJzZXJTZWxlY3RvcigpOwotICAgIGV4cGxpY2l0IENTU1BhcnNlclNlbGVjdG9yKGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKLSAgICB+Q1NTUGFyc2VyU2VsZWN0b3IoKTsKLQotICAgIHN0
ZDo6dW5pcXVlX3B0cjxDU1NTZWxlY3Rvcj4gcmVsZWFzZVNlbGVjdG9yKCkgeyByZXR1cm4gV1RG
TW92ZShtX3NlbGVjdG9yKTsgfQotCi0gICAgdm9pZCBzZXRWYWx1ZShjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlKSB7IG1fc2VsZWN0b3ItPnNldFZhbHVlKHZhbHVlKTsgfQotICAgIHZvaWQgc2V0
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHZhbHVlLCBib29sIGlzQ2FzZUluc2Vuc2l0
aXZlKSB7IG1fc2VsZWN0b3ItPnNldEF0dHJpYnV0ZSh2YWx1ZSwgaXNDYXNlSW5zZW5zaXRpdmUp
OyB9Ci0gICAgdm9pZCBzZXRBcmd1bWVudChjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKSB7IG1f
c2VsZWN0b3ItPnNldEFyZ3VtZW50KHZhbHVlKTsgfQotICAgIHZvaWQgc2V0QXR0cmlidXRlVmFs
dWVNYXRjaGluZ0lzQ2FzZUluc2Vuc2l0aXZlKGJvb2wgaXNDYXNlSW5zZW5zaXRpdmUpIHsgbV9z
ZWxlY3Rvci0+c2V0QXR0cmlidXRlVmFsdWVNYXRjaGluZ0lzQ2FzZUluc2Vuc2l0aXZlKGlzQ2Fz
ZUluc2Vuc2l0aXZlKTsgfQotICAgIHZvaWQgc2V0TWF0Y2goQ1NTU2VsZWN0b3I6Ok1hdGNoIHZh
bHVlKSB7IG1fc2VsZWN0b3ItPnNldE1hdGNoKHZhbHVlKTsgfQotICAgIHZvaWQgc2V0UmVsYXRp
b24oQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHZhbHVlKSB7IG1fc2VsZWN0b3ItPnNldFJlbGF0aW9u
KHZhbHVlKTsgfQotICAgIHZvaWQgc2V0Rm9yUGFnZSgpIHsgbV9zZWxlY3Rvci0+c2V0Rm9yUGFn
ZSgpOyB9Ci0KLSAgICB2b2lkIGFkb3B0U2VsZWN0b3JWZWN0b3IoVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+JiBzZWxlY3RvclZlY3Rvcik7Ci0gICAgdm9pZCBzZXRM
YW5nQXJndW1lbnRMaXN0KGNvbnN0IFZlY3RvcjxDU1NQYXJzZXJTdHJpbmc+JiBzdHJpbmdWZWN0
b3IpOwotCi0gICAgdm9pZCBzZXRQc2V1ZG9DbGFzc1ZhbHVlKGNvbnN0IENTU1BhcnNlclN0cmlu
ZyYgcHNldWRvQ2xhc3NTdHJpbmcpOwotICAgIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1R5cGUg
cHNldWRvQ2xhc3NUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rvci0+cHNldWRvQ2xhc3NU
eXBlKCk7IH0KLSAgICBib29sIGlzQ3VzdG9tUHNldWRvRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2VsZWN0b3ItPmlzQ3VzdG9tUHNldWRvRWxlbWVudCgpOyB9Ci0KLSAgICBib29sIGlzUHNl
dWRvRWxlbWVudEN1ZUZ1bmN0aW9uKCkgY29uc3QKLSAgICB7Ci0jaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQotICAgICAgICByZXR1cm4gbV9zZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6
UHNldWRvRWxlbWVudCAmJiBtX3NlbGVjdG9yLT5wc2V1ZG9FbGVtZW50VHlwZSgpID09IENTU1Nl
bGVjdG9yOjpQc2V1ZG9FbGVtZW50Q3VlOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
I2VuZGlmCi0gICAgfQotCi0gICAgYm9vbCBoYXNTaGFkb3dEZXNjZW5kYW50KCkgY29uc3Q7Ci0g
ICAgYm9vbCBtYXRjaGVzUHNldWRvRWxlbWVudCgpIGNvbnN0OwotCi0gICAgQ1NTUGFyc2VyU2Vs
ZWN0b3IqIHRhZ0hpc3RvcnkoKSBjb25zdCB7IHJldHVybiBtX3RhZ0hpc3RvcnkuZ2V0KCk7IH0K
LSAgICB2b2lkIHNldFRhZ0hpc3Rvcnkoc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9y
PiBzZWxlY3RvcikgeyBtX3RhZ0hpc3RvcnkgPSBXVEZNb3ZlKHNlbGVjdG9yKTsgfQotICAgIHZv
aWQgY2xlYXJUYWdIaXN0b3J5KCkgeyBtX3RhZ0hpc3RvcnkucmVzZXQoKTsgfQotICAgIHZvaWQg
aW5zZXJ0VGFnSGlzdG9yeShDU1NTZWxlY3Rvcjo6UmVsYXRpb24gYmVmb3JlLCBzdGQ6OnVuaXF1
ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+LCBDU1NTZWxlY3Rvcjo6UmVsYXRpb24gYWZ0ZXIpOwot
ICAgIHZvaWQgYXBwZW5kVGFnSGlzdG9yeShDU1NTZWxlY3Rvcjo6UmVsYXRpb24sIHN0ZDo6dW5p
cXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4pOwotICAgIHZvaWQgYXBwZW5kVGFnSGlzdG9yeShD
U1NQYXJzZXJTZWxlY3RvckNvbWJpbmF0b3IsIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxl
Y3Rvcj4pOwotICAgIHZvaWQgcHJlcGVuZFRhZ1NlbGVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBib29sIHRhZ0lzRm9yTmFtZXNwYWNlUnVsZSA9IGZhbHNlKTsKLQotcHJpdmF0ZToKLSNpZiBF
TkFCTEUoQ1NTX1NFTEVDVE9SU19MRVZFTDQpCi0gICAgdm9pZCBzZXREZXNjZW5kYW50VXNlRG91
YmxlQ2hpbGRTeW50YXgoKSB7IG1fc2VsZWN0b3ItPnNldERlc2NlbmRhbnRVc2VEb3VibGVDaGls
ZFN5bnRheCgpOyB9Ci0jZW5kaWYKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NTZWxlY3Rvcj4g
bV9zZWxlY3RvcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IG1fdGFn
SGlzdG9yeTsKLX07Ci0KLWlubGluZSBib29sIENTU1BhcnNlclNlbGVjdG9yOjpoYXNTaGFkb3dE
ZXNjZW5kYW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zZWxlY3Rvci0+cmVsYXRpb24oKSA9
PSBDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2VuZGFudDsKLX0KLQotaW5saW5lIHZvaWQgQ1NTUGFy
c2VyVmFsdWU6OnNldEZyb21WYWx1ZUxpc3Qoc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclZhbHVl
TGlzdD4gdmFsdWVMaXN0KQotewotICAgIGlkID0gQ1NTVmFsdWVJbnZhbGlkOwotICAgIHRoaXMt
PnZhbHVlTGlzdCA9IHZhbHVlTGlzdC5yZWxlYXNlKCk7Ci0gICAgdW5pdCA9IFZhbHVlTGlzdDsK
LX0KLQotdGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBpbmxpbmUgYm9vbCBlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHN0cmluZywgY29uc3QgY2hh
ciAoJmxvd2VyY2FzZUxldHRlcnMpW2xlbmd0aF0pCi17Ci0gICAgcmV0dXJuIFdURjo6ZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2VDb21tb24oc3RyaW5nLCBsb3dlcmNhc2VMZXR0ZXJzKTsK
LX0KLQotfQpJbmRleDogV2ViQ29yZS9jc3MvU1ZHQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2Nzcy9TVkdDU1NQYXJzZXIuY3BwCShyZXZpc2lvbiAyMDQ3NDMpCisrKyBXZWJD
b3JlL2Nzcy9TVkdDU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQzMiArMCwwIEBA
Ci0vKgotICAgIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDcs
IDIwMTAgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDYgQXBwbGUgSW5jLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
Ci0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkNTU0lu
aGVyaXRlZFZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTSW5pdGlhbFZhbHVlLmgiCi0jaW5jbHVkZSAi
Q1NTUGFyc2VyLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNT
U1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKLSNpbmNsdWRlICJS
ZW5kZXJUaGVtZS5oIgotI2luY2x1ZGUgIlNWR1BhaW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotc3RhdGljIGJvb2wgaXNWYWxpZFN5c3RlbUNvbnRyb2xDb2xvclZhbHVlKENTU1ZhbHVl
SUQgaWQpCi17Ci0gICAgcmV0dXJuIGlkID49IENTU1ZhbHVlQWN0aXZlYm9yZGVyICYmIENTU1Bh
cnNlcjo6aXNWYWxpZFN5c3RlbUNvbG9yVmFsdWUoaWQpOwotfQotCi1ib29sIENTU1BhcnNlcjo6
cGFyc2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCi17Ci0g
ICAgaWYgKCFtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0
LT5jdXJyZW50KCkpOwotCi0gICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlV2l0aENhbGN1bGF0aW9u
LnZhbHVlKCkuaWQ7Ci0KLSAgICBib29sIHZhbGlkX3ByaW1pdGl2ZSA9IGZhbHNlOwotICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gcGFyc2VkVmFsdWU7Ci0KLSAgICBzd2l0Y2ggKHByb3BJZCkgewotICAg
IC8qIFRoZSBjb21tZW50IHRvIHRoZSByaWdodCBkZWZpbmVzIGFsbCB2YWxpZCB2YWx1ZSBvZiB0
aGVzZQotICAgICAqIHByb3BlcnRpZXMgYXMgZGVmaW5lZCBpbiBTVkcgMS4xLCBBcHBlbmRpeCBO
LiBQcm9wZXJ0eSBpbmRleCAqLwotICAgIGNhc2UgQ1NTUHJvcGVydHlBbGlnbm1lbnRCYXNlbGlu
ZToKLSAgICAvLyBhdXRvIHwgYmFzZWxpbmUgfCBiZWZvcmUtZWRnZSB8IHRleHQtYmVmb3JlLWVk
Z2UgfCBtaWRkbGUgfAotICAgIC8vIGNlbnRyYWwgfCBhZnRlci1lZGdlIHwgdGV4dC1hZnRlci1l
ZGdlIHwgaWRlb2dyYXBoaWMgfCBhbHBoYWJldGljIHwKLSAgICAvLyBoYW5naW5nIHwgbWF0aGVt
YXRpY2FsIHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09
IENTU1ZhbHVlQmFzZWxpbmUgfHwgaWQgPT0gQ1NTVmFsdWVNaWRkbGUgfHwKLSAgICAgICAgICAo
aWQgPj0gQ1NTVmFsdWVCZWZvcmVFZGdlICYmIGlkIDw9IENTU1ZhbHVlTWF0aGVtYXRpY2FsKSkK
LSAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUJhc2VsaW5lU2hpZnQ6Ci0gICAgLy8gYmFzZWxpbmUgfCBzdXBl
ciB8IHN1YiB8IDxwZXJjZW50YWdlPiB8IDxsZW5ndGg+IHwgaW5oZXJpdAotICAgICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVCYXNlbGluZSB8fCBpZCA9PSBDU1NWYWx1ZVN1YiB8fAotICAgICAgICAg
ICBpZCA+PSBDU1NWYWx1ZVN1cGVyKQotICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1
ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdmFsaWRhdGVV
bml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQsIFNWR0F0dHJpYnV0
ZU1vZGUpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlEb21pbmFudEJh
c2VsaW5lOgotICAgIC8vIGF1dG8gfCB1c2Utc2NyaXB0IHwgbm8tY2hhbmdlIHwgcmVzZXQtc2l6
ZSB8IGlkZW9ncmFwaGljIHwKLSAgICAvLyBhbHBoYWJldGljIHwgaGFuZ2luZyB8IG1hdGhlbWF0
aWNhbCB8IGNlbnRyYWwgfCBtaWRkbGUgfAotICAgIC8vIHRleHQtYWZ0ZXItZWRnZSB8IHRleHQt
YmVmb3JlLWVkZ2UgfCBpbmhlcml0Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwg
aWQgPT0gQ1NTVmFsdWVNaWRkbGUgfHwKLSAgICAgICAgICAoaWQgPj0gQ1NTVmFsdWVVc2VTY3Jp
cHQgJiYgaWQgPD0gQ1NTVmFsdWVSZXNldFNpemUpIHx8Ci0gICAgICAgICAgKGlkID49IENTU1Zh
bHVlQ2VudHJhbCAmJiBpZCA8PSBDU1NWYWx1ZU1hdGhlbWF0aWNhbCkpCi0gICAgICAgICAgICB2
YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJv
cGVydHlFbmFibGVCYWNrZ3JvdW5kOgotICAgIC8vIGFjY3VtdWxhdGUgfCBuZXcgW3hdIFt5XSBb
d2lkdGhdIFtoZWlnaHRdIHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBY2N1
bXVsYXRlKSAvLyBUT0RPIDogbmV3Ci0gICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVl
OwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJrZXJTdGFydDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5TWFya2VyTWlkOgotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJrZXJF
bmQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1hc2s6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1
ZU5vbmUpCi0gICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBlbHNl
IGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19VUkkpIHsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0cmluZywgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19VUkkpOwotICAgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQotICAgICAg
ICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5Q2xpcFJ1bGU6ICAgICAgICAgICAgLy8gbm9uemVybyB8
IGV2ZW5vZGQgfCBpbmhlcml0Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZpbGxSdWxlOgotICAgICAg
ICBpZiAoaWQgPT0gQ1NTVmFsdWVOb256ZXJvIHx8IGlkID09IENTU1ZhbHVlRXZlbm9kZCkKLSAg
ICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVN0cm9rZU1pdGVybGltaXQ6ICAgLy8gPG1pdGVybGltaXQ+IHwgaW5o
ZXJpdAotICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZOdW1iZXIgfCBGTm9uTmVnLCBTVkdBdHRyaWJ1dGVNb2RlKTsKLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlTGluZWpvaW46ICAgLy8gbWl0ZXIg
fCByb3VuZCB8IGJldmVsIHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVNaXRl
ciB8fCBpZCA9PSBDU1NWYWx1ZVJvdW5kIHx8IGlkID09IENTU1ZhbHVlQmV2ZWwpCi0gICAgICAg
ICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2Ug
Q1NTUHJvcGVydHlTdHJva2VMaW5lY2FwOiAgICAvLyBidXR0IHwgcm91bmQgfCBzcXVhcmUgfCBp
bmhlcml0Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUJ1dHQgfHwgaWQgPT0gQ1NTVmFsdWVS
b3VuZCB8fCBpZCA9PSBDU1NWYWx1ZVNxdWFyZSkKLSAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2
ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZU9w
YWNpdHk6ICAgLy8gPG9wYWNpdHktdmFsdWU+IHwgaW5oZXJpdAotICAgIGNhc2UgQ1NTUHJvcGVy
dHlGaWxsT3BhY2l0eToKLSAgICBjYXNlIENTU1Byb3BlcnR5U3RvcE9wYWNpdHk6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUZsb29kT3BhY2l0eToKLSAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gKCFp
ZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGUGVyY2Vu
dCwgU1ZHQXR0cmlidXRlTW9kZSkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJv
cGVydHlTaGFwZVJlbmRlcmluZzoKLSAgICAvLyBhdXRvIHwgb3B0aW1pemVTcGVlZCB8IGNyaXNw
RWRnZXMgfCBnZW9tZXRyaWNQcmVjaXNpb24gfCBpbmhlcml0Ci0gICAgICAgIGlmIChpZCA9PSBD
U1NWYWx1ZUF1dG8gfHwgaWQgPT0gQ1NTVmFsdWVPcHRpbWl6ZXNwZWVkIHx8Ci0gICAgICAgICAg
ICBpZCA9PSBDU1NWYWx1ZUNyaXNwZWRnZXMgfHwgaWQgPT0gQ1NTVmFsdWVHZW9tZXRyaWNwcmVj
aXNpb24pCi0gICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVh
azsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvclJlbmRlcmluZzogLy8gYXV0byB8IG9wdGlt
aXplU3BlZWQgfCBvcHRpbWl6ZVF1YWxpdHkgfCBpbmhlcml0Ci0gICAgICAgIGlmIChpZCA9PSBD
U1NWYWx1ZUF1dG8gfHwgaWQgPT0gQ1NTVmFsdWVPcHRpbWl6ZXNwZWVkIHx8Ci0gICAgICAgICAg
ICBpZCA9PSBDU1NWYWx1ZU9wdGltaXplcXVhbGl0eSkKLSAgICAgICAgICAgIHZhbGlkX3ByaW1p
dGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUJ1ZmZl
cmVkUmVuZGVyaW5nOiAvLyBhdXRvIHwgZHluYW1pYyB8IHN0YXRpYwotICAgICAgICBpZiAoaWQg
PT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09IENTU1ZhbHVlRHluYW1pYyB8fCBpZCA9PSBDU1NWYWx1
ZVN0YXRpYykKLSAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9yUHJvZmlsZTogLy8gYXV0byB8IHNSR0Ig
fCA8bmFtZT4gfCA8dXJpPiBpbmhlcml0Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8g
fHwgaWQgPT0gQ1NTVmFsdWVTcmdiKQotICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1
ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5Q29sb3JJbnRlcnBvbGF0
aW9uOiAgIC8vIGF1dG8gfCBzUkdCIHwgbGluZWFyUkdCIHwgaW5oZXJpdAotICAgIGNhc2UgQ1NT
UHJvcGVydHlDb2xvckludGVycG9sYXRpb25GaWx0ZXJzOgotICAgICAgICBpZiAoaWQgPT0gQ1NT
VmFsdWVBdXRvIHx8IGlkID09IENTU1ZhbHVlU3JnYiB8fCBpZCA9PSBDU1NWYWx1ZUxpbmVhcnJn
YikKLSAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgLyogU3RhcnQgb2Ygc3VwcG9ydGVkIENTUyBwcm9wZXJ0aWVzIHdpdGggdmFsaWRhdGlv
bi4gVGhpcyBpcyBuZWVkZWQgZm9yIHBhcnNlU2hvcnRIYW5kIHRvIHdvcmsKLSAgICAgKiBjb3Jy
ZWN0bHkgYW5kIGFsbG93cyBvcHRpbWl6YXRpb24gaW4gYXBwbHlSdWxlKC4uKQotICAgICAqLwot
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRBbmNob3I6ICAgIC8vIHN0YXJ0IHwgbWlkZGxlIHwg
ZW5kIHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVTdGFydCB8fCBpZCA9PSBD
U1NWYWx1ZU1pZGRsZSB8fCBpZCA9PSBDU1NWYWx1ZUVuZCkKLSAgICAgICAgICAgIHZhbGlkX3By
aW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUds
eXBoT3JpZW50YXRpb25WZXJ0aWNhbDogLy8gYXV0byB8IDxhbmdsZT4gfCBpbmhlcml0Ci0gICAg
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pIHsKLSAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2
ZSA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBGQUxMVEhS
T1VHSDsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlHbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbDog
Ly8gPGFuZ2xlPiAocmVzdHJpY3RlZCB0byBfZGVnXyBwZXIgU1ZHIDEuMSBzcGVjKSB8IGluaGVy
aXQKLSAgICAgICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX0RFRyB8fCB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVu
aXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpIHsKLSAgICAgICAgICAgIHBhcnNl
ZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52
YWx1ZSgpLmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcpOwotCi0gICAgICAgICAg
ICBpZiAocGFyc2VkVmFsdWUpCi0gICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFpbnRPcmRl
cjoKLSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9ybWFsKQotICAgICAgICAgICAgdmFsaWRf
cHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFyc2VkVmFsdWUg
PSBwYXJzZVBhaW50T3JkZXIoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eUZpbGw6ICAgICAgICAgICAgICAgICAvLyA8cGFpbnQ+IHwgaW5oZXJpdAotICAgIGNhc2UgQ1NT
UHJvcGVydHlTdHJva2U6ICAgICAgICAgICAgICAgLy8gPHBhaW50PiB8IGluaGVyaXQKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgICAg
ICBwYXJzZWRWYWx1ZSA9IFNWR1BhaW50OjpjcmVhdGVOb25lKCk7Ci0gICAgICAgICAgICBlbHNl
IGlmIChpZCA9PSBDU1NWYWx1ZUN1cnJlbnRjb2xvcikKLSAgICAgICAgICAgICAgICBwYXJzZWRW
YWx1ZSA9IFNWR1BhaW50OjpjcmVhdGVDdXJyZW50Q29sb3IoKTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKGlzVmFsaWRTeXN0ZW1Db250cm9sQ29sb3JWYWx1ZShpZCkgfHwgaWQgPT0gQ1NTVmFsdWVN
ZW51KQotICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gU1ZHUGFpbnQ6OmNyZWF0ZUNvbG9y
KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+c3lzdGVtQ29sb3IoaWQpKTsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewotICAgICAgICAgICAgICAgIFJHQkEzMiBjID0gQ29sb3I6
OnRyYW5zcGFyZW50OwotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+bmV4dCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUNvbG9yRnJvbVZhbHVlKCptX3ZhbHVlTGlz
dC0+Y3VycmVudCgpLCBjKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0g
U1ZHUGFpbnQ6OmNyZWF0ZVVSSUFuZENvbG9yKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCku
c3RyaW5nLCBjKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobV92YWx1ZUxpc3QtPmN1
cnJlbnQoKS0+aWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgICAgICAgICAgICAgcGFy
c2VkVmFsdWUgPSBTVkdQYWludDo6Y3JlYXRlVVJJQW5kTm9uZSh2YWx1ZVdpdGhDYWxjdWxhdGlv
bi52YWx1ZSgpLnN0cmluZyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlm
ICghcGFyc2VkVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gU1ZHUGFp
bnQ6OmNyZWF0ZVVSSSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0cmluZyk7Ci0gICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlU1ZHUGFp
bnQoKTsKLQotICAgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQotICAgICAgICAgICAgICAgIG1f
dmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IENTU1Byb3BlcnR5U3RvcENvbG9yOiAvLyBUT0RPIDogaWNjY29sb3IKLSAgICBjYXNlIENTU1By
b3BlcnR5Rmxvb2RDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5TGlnaHRpbmdDb2xvcjoKLSAg
ICAgICAgaWYgKENTU1BhcnNlcjo6aXNWYWxpZFN5c3RlbUNvbG9yVmFsdWUoaWQpCi0gICAgICAg
ICAgICB8fCAoaWQgPj0gQ1NTVmFsdWVBbGljZWJsdWUgJiYgaWQgPD0gQ1NTVmFsdWVZZWxsb3dn
cmVlbikpCi0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR0NvbG9yOjpjcmVhdGVGcm9tU3Ry
aW5nKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuc3RyaW5nKTsKLSAgICAgICAgZWxzZSBp
ZiAoaWQgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpCi0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9
IFNWR0NvbG9yOjpjcmVhdGVDdXJyZW50Q29sb3IoKTsKLSAgICAgICAgZWxzZSAvLyBUT0RPIDog
c3ZnY29sb3IgKGljY0NvbG9yKQotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZVNWR0Nv
bG9yKCk7Ci0KLSAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQotICAgICAgICAgICAgbV92YWx1ZUxp
c3QtPm5leHQoKTsKLQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlWZWN0
b3JFZmZlY3Q6IC8vIG5vbmUgfCBub24tc2NhbGluZy1zdHJva2UgfCBpbmhlcml0Ci0gICAgICAg
IGlmIChpZCA9PSBDU1NWYWx1ZU5vbmUgfHwgaWQgPT0gQ1NTVmFsdWVOb25TY2FsaW5nU3Ryb2tl
KQotICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0K
LSAgICBjYXNlIENTU1Byb3BlcnR5V3JpdGluZ01vZGU6Ci0gICAgLy8gbHItdGIgfCBybF90YiB8
IHRiLXJsIHwgbHIgfCBybCB8IHRiIHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFs
dWVMclRiIHx8IGlkID09IENTU1ZhbHVlUmxUYiB8fCBpZCA9PSBDU1NWYWx1ZVRiUmwgfHwgaWQg
PT0gQ1NTVmFsdWVMciB8fCBpZCA9PSBDU1NWYWx1ZVJsIHx8IGlkID09IENTU1ZhbHVlVGIpCi0g
ICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLQotICAg
IGNhc2UgQ1NTUHJvcGVydHlTdHJva2VXaWR0aDogICAgICAgICAvLyA8bGVuZ3RoPiB8IGluaGVy
aXQKLSAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlRGFzaG9mZnNldDoKLSAgICAgICAgdmFsaWRf
cHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwg
RlBlcmNlbnQsIFNWR0F0dHJpYnV0ZU1vZGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENT
U1Byb3BlcnR5U3Ryb2tlRGFzaGFycmF5OiAgICAgLy8gbm9uZSB8IDxkYXNoYXJyYXk+IHwgaW5o
ZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgdmFsaWRf
cHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFyc2VkVmFsdWUg
PSBwYXJzZVNWR1N0cm9rZURhc2hhcnJheSgpOwotCi0gICAgICAgIGJyZWFrOwotCi0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUtlcm5pbmc6ICAgICAgICAgICAgICAvLyBhdXRvIHwgbm9ybWFsIHwgPGxl
bmd0aD4gfCBpbmhlcml0Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgaWQgPT0g
Q1NTVmFsdWVOb3JtYWwpCi0gICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFs
dWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgsIFNWR0F0dHJpYnV0ZU1vZGUpOwotICAgICAgICBi
cmVhazsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlDbGlwUGF0aDogICAgLy8gPHVyaT4gfCBub25l
IHwgaW5oZXJpdAotICAgIGNhc2UgQ1NTUHJvcGVydHlGaWx0ZXI6Ci0gICAgICAgIGlmIChpZCA9
PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAg
ICAgICBlbHNlIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0cmluZywg
KENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVl
KCkudW5pdCk7Ci0gICAgICAgICAgICBpZiAocGFyc2VkVmFsdWUpCi0gICAgICAgICAgICAgICAg
bV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0U3ZnU2hhZG93OgotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVO
b25lKQotICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBhdXRvIHNoYWRvd1ZhbHVlTGlzdCA9IHBhcnNlU2hhZG93KCptX3ZhbHVl
TGlzdCwgcHJvcElkKTsKLSAgICAgICAgICAgIGlmIChzaGFkb3dWYWx1ZUxpc3QpIHsKLSAgICAg
ICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUoc2hhZG93VmFsdWVMaXN0KSwg
aW1wb3J0YW50KTsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBDU1NQcm9wZXJ0
eU1hc2tUeXBlOiAvLyBsdW1pbmFuY2UgfCBhbHBoYSB8IGluaGVyaXQKLSAgICAgICAgaWYgKGlk
ID09IENTU1ZhbHVlTHVtaW5hbmNlIHx8IGlkID09IENTU1ZhbHVlQWxwaGEpCi0gICAgICAgICAg
ICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICBicmVhazsKLQotICAgIC8qIHNob3J0
aGFuZCBwcm9wZXJ0aWVzICovCi0gICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmtlcjoKLSAgICB7Ci0g
ICAgICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIHByb3BJZCk7Ci0gICAgICAgIG1faW1w
bGljaXRTaG9ydGhhbmQgPSB0cnVlOwotICAgICAgICBpZiAoIXBhcnNlVmFsdWUoQ1NTUHJvcGVy
dHlNYXJrZXJTdGFydCwgaW1wb3J0YW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKLSAgICAgICAgICAgIHJvbGxiYWNr
TGFzdFByb3BlcnRpZXMoMSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgQ1NTVmFsdWUqIHZhbHVlID0gbV9wYXJzZWRQcm9wZXJ0aWVzLmxhc3QoKS52YWx1
ZSgpOwotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmtlck1pZCwgdmFsdWUsIGlt
cG9ydGFudCk7Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5TWFya2VyRW5kLCB2YWx1
ZSwgaW1wb3J0YW50KTsKLSAgICAgICAgbV9pbXBsaWNpdFNob3J0aGFuZCA9IGZhbHNlOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUN4OgotICAgIGNh
c2UgQ1NTUHJvcGVydHlDeToKLSAgICBjYXNlIENTU1Byb3BlcnR5UjoKLSAgICBjYXNlIENTU1By
b3BlcnR5Ung6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVJ5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlY
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlZOgotICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSAoIWlk
ICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIElmIHlvdSBjcmFz
aCBoZXJlLCBpdCdzIGJlY2F1c2UgeW91IGFkZGVkIGEgY3NzIHByb3BlcnR5IGFuZCBhcmUgbm90
IGhhbmRsaW5nIGl0Ci0gICAgICAgIC8vIGluIGVpdGhlciB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQg
b3IgdGhlIG9uZSBpbiBDU1NQYXJzZXI6OnBhcnNlVmFsdWUKLSAgICAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRSgwLCAidW5pbXBsZW1lbnRlZCBwcm9wZXJ0eUlEOiAlZCIsIHByb3BJZCk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAodmFsaWRfcHJpbWl0aXZlKSB7Ci0g
ICAgICAgIGlmIChpZCAhPSAwKQotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihpZCk7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlV2l0
aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklO
RykKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2
YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0cmluZywgKENTU1ByaW1pdGl2ZVZhbHVlOjpV
bml0VHlwZXMpIHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCk7Ci0gICAgICAgIGVs
c2UgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA+PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPD0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFopCi0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFs
dWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52
YWx1ZSgpLnVuaXQpOwotICAgICAgICBlbHNlIGlmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1
ZSgpLnVuaXQgPj0gQ1NTUGFyc2VyVmFsdWU6OlFfRU1TKQotICAgICAgICAgICAgcGFyc2VkVmFs
dWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQWxsb3dpbmdNYXJnaW5RdWlyayh2YWx1ZVdp
dGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVMp
OwotICAgICAgICBpZiAoaXNDYWxjdWxhdGlvbih2YWx1ZVdpdGhDYWxjdWxhdGlvbikpCi0gICAg
ICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWVXaXRo
Q2FsY3VsYXRpb24uY2FsY3VsYXRpb24oKSk7Ci0gICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7
Ci0gICAgfQotICAgIGlmICghcGFyc2VkVmFsdWUgfHwgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkg
JiYgIWluU2hvcnRoYW5kKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhZGRQcm9w
ZXJ0eShwcm9wSWQsIFdURk1vdmUocGFyc2VkVmFsdWUpLCBpbXBvcnRhbnQpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1SZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlU1ZHU3Ry
b2tlRGFzaGFycmF5KCkKLXsKLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiByZXQgPSBDU1NWYWx1
ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0gICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVl
ID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBib29sIHZhbGlkX3ByaW1pdGl2ZSA9IHRy
dWU7Ci0gICAgd2hpbGUgKHZhbHVlKSB7Ci0gICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZh
bHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7Ci0gICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHZh
bGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5v
bk5lZywgU1ZHQXR0cmlidXRlTW9kZSk7Ci0gICAgICAgIGlmICghdmFsaWRfcHJpbWl0aXZlKQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgZG9lc24ndCBo
YW5kbGUgY2FsY3VsYXRlZCB2YWx1ZXMuCi0gICAgICAgIGlmICh2YWx1ZS0+aWQgIT0gMCkKLSAg
ICAgICAgICAgIHJldC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVy
KHZhbHVlLT5pZCkpOwotICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA+PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZS0+dW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX0tIWikKLSAgICAgICAgICAgIHJldC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUodmFsdWUtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlLT51
bml0KSk7Ci0gICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgaWYg
KHZhbHVlICYmIHZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiB2YWx1
ZS0+aVZhbHVlID09ICcsJykKLSAgICAgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQo
KTsKLSAgICB9Ci0gICAgaWYgKCF2YWxpZF9wcmltaXRpdmUpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLVJlZlB0cjxTVkdQYWludD4gQ1NTUGFyc2VyOjpw
YXJzZVNWR1BhaW50KCkKLXsKLSAgICBSR0JBMzIgYyA9IENvbG9yOjp0cmFuc3BhcmVudDsKLSAg
ICBpZiAoIXBhcnNlQ29sb3JGcm9tVmFsdWUoKm1fdmFsdWVMaXN0LT5jdXJyZW50KCksIGMpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gU1ZHUGFpbnQ6OmNyZWF0ZUNvbG9y
KENvbG9yKGMpKTsKLX0KLQotUmVmUHRyPFNWR0NvbG9yPiBDU1NQYXJzZXI6OnBhcnNlU1ZHQ29s
b3IoKQotewotICAgIFJHQkEzMiBjID0gQ29sb3I6OnRyYW5zcGFyZW50OwotICAgIGlmICghcGFy
c2VDb2xvckZyb21WYWx1ZSgqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSwgYykpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIHJldHVybiBTVkdDb2xvcjo6Y3JlYXRlRnJvbUNvbG9yKENvbG9y
KGMpKTsKLX0KLQotUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZVBhaW50T3Jk
ZXIoKQotewotICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50
KCk7Ci0KLSAgICBWZWN0b3I8Q1NTVmFsdWVJRD4gcGFpbnRUeXBlTGlzdDsKLSAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGZpbGw7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBz
dHJva2U7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtYXJrZXJzOwotICAgIHdoaWxl
ICh2YWx1ZSkgewotICAgICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlRmlsbCAmJiAhZmls
bCkKLSAgICAgICAgICAgIGZpbGwgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmll
cih2YWx1ZS0+aWQpOwotICAgICAgICBlbHNlIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVTdHJv
a2UgJiYgIXN0cm9rZSkKLSAgICAgICAgICAgIHN0cm9rZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGVJZGVudGlmaWVyKHZhbHVlLT5pZCk7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlLT5pZCA9
PSBDU1NWYWx1ZU1hcmtlcnMgJiYgIW1hcmtlcnMpCi0gICAgICAgICAgICBtYXJrZXJzID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIodmFsdWUtPmlkKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHBhaW50VHlwZUxpc3QuYXBw
ZW5kKHZhbHVlLT5pZCk7Ci0gICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAg
ICB9Ci0KLSAgICAvLyBBZnRlciBwYXJzaW5nIHdlIHNlcmlhbGl6ZSB0aGUgcGFpbnQtb3JkZXIg
bGlzdC4gU2luY2UgaXQgaXMgbm90IHBvc3NpYmxlIHRvCi0gICAgLy8gcG9wIGEgbGFzdCBsaXN0
IGl0ZW1zIGZyb20gQ1NTVmFsdWVMaXN0IHdpdGhvdXQgYmlnZ2VyIGNvc3QsIHdlIGNyZWF0ZSB0
aGUKLSAgICAvLyBsaXN0IGFmdGVyIHBhcnNpbmcuIAotICAgIENTU1ZhbHVlSUQgZmlyc3RQYWlu
dE9yZGVyVHlwZSA9IHBhaW50VHlwZUxpc3QuYXQoMCk7Ci0gICAgYXV0byBwYWludE9yZGVyTGlz
dCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAgICBzd2l0Y2ggKGZp
cnN0UGFpbnRPcmRlclR5cGUpIHsKLSAgICBjYXNlIENTU1ZhbHVlRmlsbDoKLSAgICAgICAgRkFM
TFRIUk9VR0g7Ci0gICAgY2FzZSBDU1NWYWx1ZVN0cm9rZToKLSAgICAgICAgcGFpbnRPcmRlckxp
c3QtPmFwcGVuZChmaXJzdFBhaW50T3JkZXJUeXBlID09IENTU1ZhbHVlRmlsbCA/IGZpbGwucmVs
ZWFzZU5vbk51bGwoKSA6IHN0cm9rZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgaWYgKHBh
aW50VHlwZUxpc3Quc2l6ZSgpID4gMSkgewotICAgICAgICAgICAgaWYgKHBhaW50VHlwZUxpc3Qu
YXQoMSkgPT0gQ1NTVmFsdWVNYXJrZXJzKQotICAgICAgICAgICAgICAgIHBhaW50T3JkZXJMaXN0
LT5hcHBlbmQobWFya2Vycy5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgfQotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENTU1ZhbHVlTWFya2VyczoKLSAgICAgICAgcGFpbnRPcmRlckxpc3Qt
PmFwcGVuZChtYXJrZXJzLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICBpZiAocGFpbnRUeXBl
TGlzdC5zaXplKCkgPiAxKSB7Ci0gICAgICAgICAgICBpZiAocGFpbnRUeXBlTGlzdC5hdCgxKSA9
PSBDU1NWYWx1ZVN0cm9rZSkKLSAgICAgICAgICAgICAgICBwYWludE9yZGVyTGlzdC0+YXBwZW5k
KHN0cm9rZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgcmV0
dXJuIFdURk1vdmUocGFpbnRPcmRlckxpc3QpOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1NldHRpbmdzLmluCShyZXZp
c2lvbiAyMDQ3NDMpCisrKyBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaW4JKHdvcmtpbmcgY29weSkK
QEAgLTI1MSw2ICsyNTEsOCBAQAogCiBuZXdCbG9ja0luc2lkZUlubGluZU1vZGVsRW5hYmxlZCBp
bml0aWFsPWZhbHNlLCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQogCituZXdDU1NQ
YXJzZXJFbmFibGVkIGluaXRpYWw9ZmFsc2UKKwogaHR0cEVxdWl2RW5hYmxlZCBpbml0aWFsPXRy
dWUKIAogIyBTb21lIHBvcnRzIChlLmcuIGlPUykgbWlnaHQgY2hvb3NlIHRvIGRpc3BsYXkgYXR0
YWNobWVudHMgaW5saW5lLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHJlc3BvbnNlIGluY2x1
ZGVzIHRoZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321871</attachid>
            <date>2017-09-26 14:22:31 -0700</date>
            <delta_ts>2017-09-26 14:34:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>431149</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjUyMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3NSBAQAorMjAxNy0wOS0yNiAgRGF2aWQg
SHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lICJSZWdpb24iIHRvICJG
cmFnbWVudCIgZm9yIFJlbmRlclJlZ2lvbiBhbmQgYXNzb2NpYXRlZCBjbGFzc2VzL21ldGhvZHMu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc1MDYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZl
VmFsdWVNYXBwaW5ncy5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6OkNT
U1ByaW1pdGl2ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpv
cGVyYXRvciBCcmVha0luc2lkZSBjb25zdCk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlS2V5d29y
ZHMuaW46CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvRml4
ZWRUYWJsZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaXhlZFRhYmxlTGF5b3V0Ojpj
YWxjV2lkdGhBcnJheSk6CisgICAgICAgICogcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29y
aXRobS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlTWFyZ2luTG9naWNhbFNpemVGb3JD
aGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbmRlZmluaXRlU2l6ZVN0cmF0ZWd5OjptaW5Mb2dp
Y2FsV2lkdGhGb3JDaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEZWZpbml0ZVNpemVT
dHJhdGVneTo6bWluTG9naWNhbFdpZHRoRm9yQ2hpbGQgY29uc3QpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cHJl
cGFyZVBhZ2luYXRpb25CZWZvcmVCbG9ja0xheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6YWRkT3ZlcmZsb3dGcm9tQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmNsZWFyTGF5b3V0T3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OmFkZFZpc3VhbE92ZXJmbG93RnJvbVRoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpjb21wdXRlU3RhcnRQb3NpdGlvbkRlbHRhRm9yQ2hpbGRBdm9pZGluZ0Zsb2F0
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2ltcGxpZmllZExheW91dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bWFya0ZpeGVkUG9zaXRpb25PYmplY3RGb3JM
YXlvdXRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0UG9z
aXRpb25lZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2VsZWN0aW9u
R2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbExlZnRPZmZzZXRG
b3JDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dpY2Fs
UmlnaHRPZmZzZXRGb3JDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjphZGp1c3RMb2dpY2FsTGVmdE9mZnNldEZvckxpbmUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OmFkanVzdExvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnRXaXRoSW5s
aW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6aXNDaGlsZEhpdFRlc3RDYW5kaWRhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBh
Z2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmZyYWdtZW50QXRCbG9j
a09mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjYW5Db21wdXRlRnJhZ21lbnRSYW5n
ZUZvckJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29tcHV0ZUZyYWdtZW50
UmFuZ2VGb3JCb3hDaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
ZXN0aW1hdGVGcmFnbWVudFJhbmdlRm9yQm94Q2hpbGQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OnVwZGF0ZUZyYWdtZW50UmFuZ2VGb3JCb3hDaGlsZCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVnaW9uQXRCbG9ja09mZnNldCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjYW5Db21wdXRlUmVnaW9uUmFuZ2VGb3JCb3gp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVSZWdpb25S
YW5nZUZvckJveENoaWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjplc3RpbWF0ZVJlZ2lvblJhbmdlRm9yQm94Q2hpbGQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvblJhbmdlRm9yQm94Q2hp
bGQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxp
bmVJbkZyYWdtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dp
Y2FsUmlnaHRPZmZzZXRGb3JMaW5lSW5GcmFnbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6bG9naWNhbExlZnRPZmZzZXRGb3JMaW5lSW5GcmFnbWVudCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c3RhcnRPZmZzZXRGb3JMaW5lSW5GcmFn
bWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZW5kT2Zmc2V0Rm9y
TGluZUluRnJhZ21lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmF2
YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckNvbnRlbnQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnN0YXJ0T2Zmc2V0Rm9yQ29udGVudCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZW5kT2Zmc2V0Rm9yQ29udGVudCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbExlZnRPZmZzZXRGb3JDb250
ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRP
ZmZzZXRGb3JDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjph
dmFpbGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lSW5SZWdpb24gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmVJblJl
Z2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9n
aWNhbExlZnRPZmZzZXRGb3JMaW5lSW5SZWdpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OnN0YXJ0T2Zmc2V0Rm9yTGluZUluUmVnaW9uIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjplbmRPZmZzZXRGb3JMaW5l
SW5SZWdpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
a0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9j
ayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxheW91dEJsb2NrQ2hpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpzZXRTdGF0aWNJbmxpbmVQb3Np
dGlvbkZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6YXBwbHlC
ZWZvcmVCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmFwcGx5QWZ0
ZXJCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmFkanVzdExpbmVQ
b3NpdGlvbkZvclBhZ2luYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93
OjpoYXNOZXh0UGFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6
OmFkanVzdEZvclVuc3BsaXR0YWJsZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrRmxvdzo6cHVzaFRvTmV4dFBhZ2VXaXRoTWluaW11bUxvZ2ljYWxIZWlnaHQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlvbk5ld0Zsb2F0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmdldENsZWFyRGVsdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpuZWVkc0xheW91dEFmdGVyRnJhZ21lbnRSYW5n
ZUNoYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmZpbmRD
bG9zZXN0VGV4dEF0QWJzb2x1dGVQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
a0Zsb3c6OnBvc2l0aW9uRm9yUG9pbnRXaXRoSW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlvbkZvclBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrRmxvdzo6bGF5b3V0RXhjbHVkZWRDaGlsZHJlbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6Om5lZWRzTGF5b3V0QWZ0ZXJSZWdpb25SYW5nZUNoYW5n
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxpbmtUb0VuZExpbmVJZk5lZWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxheW91dExpbmVCb3hlcyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmRldGVybWluZVN0YXJ0UG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpjaGVja1BhZ2luYXRpb25B
bmRGbG9hdHNBdEVuZExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93Ojps
aW5lV2lkdGhGb3JQYWdpbmF0ZWRMaW5lQ2hhbmdlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9ja0Zsb3c6OmFkZE92ZXJmbG93RnJvbUlubGluZUNoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6cG9zaXRpb25OZXdGbG9hdE9uTGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnVwZGF0ZUZyYWdtZW50Rm9yTGluZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnVwZGF0ZVJlZ2lvbkZv
ckxpbmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjbGFtcFRvU3RhcnRBbmRFbmRGcmFnbWVu
dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpoYXNGcmFnbWVudFJhbmdl
SW5GbG93VGhyZWFkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2xpZW50
Qm94UmVjdEluRnJhZ21lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpi
b3JkZXJCb3hSZWN0SW5GcmFnbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OmNvbnN0cmFpbkxvZ2ljYWxXaWR0aEluRnJhZ21lbnRCeU1pbk1heCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpj
bGlwUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNocmlua0xvZ2ljYWxXaWR0
aFRvQXZvaWRGbG9hdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb250
YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5GcmFnbWVudCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0F2YWlsYWJsZUxpbmVXaWR0
aEluRnJhZ21lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvZmZzZXRG
cm9tQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0
ZVJlY3RGb3JSZXBhaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6dXBk
YXRlTG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUxv
Z2ljYWxXaWR0aEluRnJhZ21lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
Ojpjb21wdXRlTG9naWNhbFdpZHRoSW5GcmFnbWVudFVzaW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6cmVuZGVyQm94RnJhZ21lbnRJbmZvIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OnRhYmxlQ2VsbFNob3VsZEhhdmVaZXJvSW5pdGlhbFNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlv
bmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2Nr
TG9naWNhbEhlaWdodEZvclBvc2l0aW9uZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y29t
cHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFJlcGxh
Y2VkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cG9zaXRpb25Gb3JQb2lu
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNyZWF0ZXNOZXdGb3JtYXR0aW5nQ29u
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmFkZFZpc3VhbEVmZmVj
dE92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6YWRkT3ZlcmZsb3dGcm9t
Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjbGVhck92ZXJmbG93KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Omhhc1JlZ2lvblJhbmdl
SW5GbG93VGhyZWFkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6Y2xpZW50Qm94UmVjdEluUmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6Ym9yZGVyQm94UmVjdEluUmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29uc3RyYWluTG9naWNhbFdpZHRoSW5SZWdpb25C
eU1pbk1heCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNv
bnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnRJblJlZ2lvbiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0F2YWlsYWJs
ZUxpbmVXaWR0aEluUmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uVXNp
bmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpyZW5kZXJC
b3hSZWdpb25JbmZvIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3RGb3JD
aGlsZExheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNhbkhhdmVPdXRzaWRl
RnJhZ21lbnRSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om5lZWRz
TGF5b3V0QWZ0ZXJGcmFnbWVudFJhbmdlQ2hhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6Y2FuSGF2ZU91dHNpZGVSZWdpb25SYW5nZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om5lZWRzTGF5b3V0QWZ0ZXJSZWdpb25SYW5nZUNo
YW5nZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveEZyYWdt
ZW50SW5mby5oOiBDb3BpZWQgZnJvbSByZW5kZXJpbmcvUmVuZGVyQm94UmVnaW9uSW5mby5oLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94RnJhZ21lbnRJbmZvOjpSZW5kZXJCb3hGcmFnbWVu
dEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94UmVnaW9uSW5mbzo6UmVuZGVyQm94
UmVnaW9uSW5mbyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hSZWdpb25J
bmZvOjpsb2dpY2FsTGVmdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3hSZWdpb25JbmZvOjpsb2dpY2FsV2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94UmVnaW9uSW5mbzo6c2hpZnRMb2dpY2FsTGVmdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hSZWdpb25JbmZvOjppc1NoaWZ0ZWQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94UmVnaW9uSW5mbzo6Y3JlYXRl
T3ZlcmZsb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94UmVnaW9uSW5m
bzo6b3ZlcmZsb3cgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
UmVnaW9uSW5mbzo6Y2xlYXJPdmVyZmxvdyk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1v
ZGVsT2JqZWN0OjphZGp1c3RlZFBvc2l0aW9uUmVsYXRpdmVUb09mZnNldFBhcmVudCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6bWFwQWJzb2x1dGVUb0xv
Y2FsUG9pbnQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNhbkhhdmVCb3hJ
bmZvSW5GcmFnbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9i
amVjdDo6Y2FuSGF2ZUJveEluZm9JblJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJveFJlZ2lvbkluZm8uaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyRWxlbWVudC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVV
cGxvYWRDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250
cm9sOjpwb3NpdGlvbkZvclBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmlsZVVw
bG9hZENvbnRyb2wuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmNvbXB1dGVNYWluQXhpc0V4
dGVudEZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94OjphcHBs
eVN0cmV0Y2hBbGlnbm1lbnRUb0NoaWxkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxv
d1RocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpSZW5kZXJG
bG93VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnN0eWxlRGlk
Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnJlbW92ZUZsb3dD
aGlsZEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6cmVtb3ZlRnJh
Z21lbnRGcm9tVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6Omlu
dmFsaWRhdGVGcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6
dmFsaWRhdGVGcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6
bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0ZUxvZ2lj
YWxXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpjb21wdXRlTG9n
aWNhbEhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpy
ZXBhaW50UmVjdGFuZ2xlSW5GcmFnbWVudHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRmxvd1RocmVhZDo6ZnJhZ21lbnRBdEJsb2NrT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmFkanVzdGVkUG9zaXRpb25SZWxhdGl2ZVRvT2Zmc2V0
UGFyZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnBhZ2VM
b2dpY2FsVG9wRm9yT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dU
aHJlYWQ6OnBhZ2VMb2dpY2FsV2lkdGhGb3JPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRmxvd1RocmVhZDo6cGFnZUxvZ2ljYWxIZWlnaHRGb3JPZmZzZXQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6cGFnZVJlbWFpbmluZ0xvZ2ljYWxI
ZWlnaHRGb3JPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVh
ZDo6bWFwRnJvbUZsb3dUb0ZyYWdtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckZsb3dUaHJlYWQ6OnJlbW92ZVJlbmRlckJveEZyYWdtZW50SW5mbyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGbG93VGhyZWFkOjpyZW1vdmVMaW5lRnJhZ21lbnRJbmZvKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmxvZ2ljYWxXaWR0aENoYW5nZWRJbkZyYWdtZW50
c0ZvckJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmNvbnRlbnRM
b2dpY2FsV2lkdGhPZkZpcnN0RnJhZ21lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRmxvd1RocmVhZDo6Y29udGVudExvZ2ljYWxIZWlnaHRPZkZpcnN0RnJhZ21lbnQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Y29udGVudExvZ2ljYWxMZWZ0
T2ZGaXJzdEZyYWdtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJl
YWQ6OmZpcnN0RnJhZ21lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1Ro
cmVhZDo6bGFzdEZyYWdtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dU
aHJlYWQ6OmNsZWFyUmVuZGVyQm94RnJhZ21lbnRJbmZvQW5kQ3VzdG9tU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6c2V0RnJhZ21lbnRSYW5nZUZvckJveCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpoYXNDYWNoZWRGcmFnbWVudFJhbmdl
Rm9yQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmdldEZy
YWdtZW50UmFuZ2VGb3JCb3hGcm9tQ2FjaGVkSW5mbyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJGbG93VGhyZWFkOjpnZXRGcmFnbWVudFJhbmdlRm9yQm94IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmNvbXB1dGVkRnJhZ21lbnRSYW5nZUZvckJv
eCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpmcmFnbWVudElu
UmFuZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6b2JqZWN0
U2hvdWxkRnJhZ21lbnRJbkZsb3dGcmFnbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGbG93VGhyZWFkOjpvYmplY3RJbkZsb3dGcmFnbWVudCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpjaGVja0xpbmVzQ29uc2lzdGVuY3kgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJMaW5lc1RvRnJhZ21lbnRN
YXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6ZGVsZXRlTGluZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6d2lsbEJlRGVzdHJveWVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6Om1hcmtGcmFnbWVudHNGb3JPdmVyZmxv
d0xheW91dElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnVw
ZGF0ZUZyYWdtZW50c0Zsb3dUaHJlYWRQb3J0aW9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGbG93VGhyZWFkOjphZGRGb3JjZWRGcmFnbWVudEJyZWFrKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckZsb3dUaHJlYWQ6OmNvbGxlY3RMYXllckZyYWdtZW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpmcmFnbWVudHNCb3VuZGluZ0JveCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RG
cmFnbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpGcmFn
bWVudFNlYXJjaEFkYXB0ZXI6OmNvbGxlY3RJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGbG93VGhyZWFkOjptYXBMb2NhbFRvQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmFkZEZyYWdtZW50c1Zpc3VhbEVmZmVjdE92ZXJmbG93
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmFkZEZyYWdtZW50c1Zpc3Vh
bE92ZXJmbG93RnJvbVRoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6
OmFkZEZyYWdtZW50c092ZXJmbG93RnJvbUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckZsb3dUaHJlYWQ6OmFkZEZyYWdtZW50c0xheW91dE92ZXJmbG93KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckZsb3dUaHJlYWQ6OmFkZEZyYWdtZW50c1Zpc3VhbE92ZXJmbG93KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmNsZWFyRnJhZ21lbnRzT3ZlcmZsb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Y3VycmVudEZyYWdtZW50IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmNvbnRhaW5pbmdGcmFnbWVu
dE1hcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpyZW1vdmVSZWdpb25G
cm9tVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6
OmludmFsaWRhdGVSZWdpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZs
b3dUaHJlYWQ6OnZhbGlkYXRlUmVnaW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGbG93VGhyZWFkOjpyZXBhaW50UmVjdGFuZ2xlSW5SZWdpb25zIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnJlZ2lvbkF0QmxvY2tPZmZz
ZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6
bWFwRnJvbUZsb3dUb1JlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGbG93VGhyZWFkOjpyZW1vdmVSZW5kZXJCb3hSZWdpb25JbmZvKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnJlbW92ZUxpbmVSZWdpb25JbmZvKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmxvZ2ljYWxXaWR0
aENoYW5nZWRJblJlZ2lvbnNGb3JCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGbG93VGhyZWFkOjpjb250ZW50TG9naWNhbFdpZHRoT2ZGaXJzdFJlZ2lvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpjb250ZW50TG9n
aWNhbEhlaWdodE9mRmlyc3RSZWdpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRmxvd1RocmVhZDo6Y29udGVudExvZ2ljYWxMZWZ0T2ZGaXJzdFJlZ2lvbiBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpmaXJzdFJl
Z2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFk
OjpsYXN0UmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZs
b3dUaHJlYWQ6OmNsZWFyUmVuZGVyQm94UmVnaW9uSW5mb0FuZEN1c3RvbVN0eWxlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnNldFJlZ2lvblJhbmdlRm9y
Qm94KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6Omhhc0Nh
Y2hlZFJlZ2lvblJhbmdlRm9yQm94IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckZsb3dUaHJlYWQ6OmdldFJlZ2lvblJhbmdlRm9yQm94RnJvbUNhY2hlZEluZm8gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Z2V0UmVn
aW9uUmFuZ2VGb3JCb3ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Rmxvd1RocmVhZDo6Y29tcHV0ZWRSZWdpb25SYW5nZUZvckJveCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpyZWdpb25JblJhbmdlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6Om9iamVjdFNob3Vs
ZEZyYWdtZW50SW5GbG93UmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckZsb3dUaHJlYWQ6Om9iamVjdEluRmxvd1JlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpjbGVhckxpbmVzVG9SZWdpb25NYXAp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6bWFya1JlZ2lv
bnNGb3JPdmVyZmxvd0xheW91dElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0ZVJlZ2lvbnNGbG93VGhyZWFkUG9ydGlvblJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6YWRkRm9yY2VkUmVn
aW9uQnJlYWspOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6
b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OlJlZ2lvblNlYXJjaEFkYXB0ZXI6OmNvbGxl
Y3RJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFk
OjphZGRSZWdpb25zVmlzdWFsRWZmZWN0T3ZlcmZsb3cpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRmxvd1RocmVhZDo6YWRkUmVnaW9uc1Zpc3VhbE92ZXJmbG93RnJvbVRoZW1l
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmFkZFJlZ2lv
bnNPdmVyZmxvd0Zyb21DaGlsZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
bG93VGhyZWFkOjphZGRSZWdpb25zTGF5b3V0T3ZlcmZsb3cpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6YWRkUmVnaW9uc1Zpc3VhbE92ZXJmbG93KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmNsZWFyUmVnaW9uc092
ZXJmbG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmN1
cnJlbnRSZWdpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxv
d1RocmVhZDo6Y29udGFpbmluZ1JlZ2lvbk1hcCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckZsb3dUaHJlYWQuaDoKKyAgICAgICAgKFdURjo6VmFsdWVUb1N0cmluZzxXZWJD
b3JlOjpSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6c3RyaW5nKToKKyAgICAgICAgKFdURjo6VmFs
dWVUb1N0cmluZzxXZWJDb3JlOjpSZW5kZXJSZWdpb246OnN0cmluZyk6IERlbGV0ZWQuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50Q29udGFpbmVyLmNwcDogQ29waWVkIGZyb20g
cmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFn
bWVudENvbnRhaW5lcjo6UmVuZGVyRnJhZ21lbnRDb250YWluZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRnJhZ21lbnRDb250YWluZXI6Om1hcEZyYWdtZW50UG9pbnRJbnRvRmxvd1RocmVh
ZENvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYWdtZW50Q29udGFpbmVy
Ojpwb3NpdGlvbkZvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYWdtZW50Q29u
dGFpbmVyOjpwYWdlTG9naWNhbFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckZyYWdtZW50Q29udGFpbmVyOjpwYWdlTG9naWNhbEhlaWdodCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6bG9naWNhbEhlaWdodE9mQWxsRmxvd1Ro
cmVhZENvbnRlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRDb250
YWluZXI6OmZsb3dUaHJlYWRQb3J0aW9uT3ZlcmZsb3dSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckZyYWdtZW50Q29udGFpbmVyOjpmbG93VGhyZWFkUG9ydGlvbkxvY2F0aW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYWdtZW50Q29udGFpbmVyOjpvdmVyZmxvd1Jl
Y3RGb3JGbG93VGhyZWFkUG9ydGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFnbWVu
dENvbnRhaW5lcjo6cGFnZUxvZ2ljYWxUb3BGb3JPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRnJhZ21lbnRDb250YWluZXI6OmlzRmlyc3RGcmFnbWVudCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6aXNMYXN0RnJhZ21lbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRDb250YWluZXI6OnNob3Vs
ZENsaXBGbG93VGhyZWFkQ29udGVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
cmFnbWVudENvbnRhaW5lcjo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRnJhZ21lbnRDb250YWluZXI6OmNvbXB1dGVPdmVyZmxvd0Zyb21GbG93VGhyZWFkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYWdtZW50Q29udGFpbmVyOjpyZXBhaW50Rmxvd1RocmVh
ZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRDb250YWluZXI6OnJl
cGFpbnRGbG93VGhyZWFkQ29udGVudFJlY3RhbmdsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJGcmFnbWVudENvbnRhaW5lcjo6aW5zdGFsbEZsb3dUaHJlYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRnJhZ21lbnRDb250YWluZXI6OmF0dGFjaEZyYWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZyYWdtZW50Q29udGFpbmVyOjpkZXRhY2hGcmFnbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6cmVuZGVyQm94RnJhZ21lbnRJbmZv
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYWdtZW50Q29udGFpbmVyOjpzZXRS
ZW5kZXJCb3hGcmFnbWVudEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRD
b250YWluZXI6OnRha2VSZW5kZXJCb3hGcmFnbWVudEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRnJhZ21lbnRDb250YWluZXI6OnJlbW92ZVJlbmRlckJveEZyYWdtZW50SW5mbyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6ZGVsZXRlQWxsUmVuZGVy
Qm94RnJhZ21lbnRJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYWdtZW50Q29udGFp
bmVyOjpsb2dpY2FsVG9wT2ZGbG93VGhyZWFkQ29udGVudFJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRDb250YWluZXI6OmxvZ2ljYWxCb3R0b21PZkZsb3dUaHJl
YWRDb250ZW50UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFnbWVudENv
bnRhaW5lcjo6aW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFn
bWVudENvbnRhaW5lcjo6d2lsbEJlUmVtb3ZlZEZyb21UcmVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckZyYWdtZW50Q29udGFpbmVyOjpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6Y29tcHV0
ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21l
bnRDb250YWluZXI6OmFkanVzdEZyYWdtZW50Qm91bmRzRnJvbUZsb3dUaHJlYWRQb3J0aW9uUmVj
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6ZW5z
dXJlT3ZlcmZsb3dGb3JCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRDb250
YWluZXI6OnJlY3RGbG93UG9ydGlvbkZvckJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6YWRkTGF5b3V0T3ZlcmZsb3dGb3JCb3gpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRDb250YWluZXI6OmFkZFZpc3VhbE92ZXJmbG93Rm9y
Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYWdtZW50Q29udGFpbmVyOjpsYXlvdXRP
dmVyZmxvd1JlY3RGb3JCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRDb250
YWluZXI6OnZpc3VhbE92ZXJmbG93UmVjdEZvckJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJGcmFnbWVudENvbnRhaW5lcjo6bGF5b3V0T3ZlcmZsb3dSZWN0Rm9yQm94Rm9yUHJvcGFnYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRDb250YWluZXI6OnZpc3VhbE92
ZXJmbG93UmVjdEZvckJveEZvclByb3BhZ2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cnJl
bnRSZW5kZXJGcmFnbWVudENvbnRhaW5lck1haW50YWluZXI6OkN1cnJlbnRSZW5kZXJGcmFnbWVu
dENvbnRhaW5lck1haW50YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3VycmVudFJlbmRlckZy
YWdtZW50Q29udGFpbmVyTWFpbnRhaW5lcjo6fkN1cnJlbnRSZW5kZXJGcmFnbWVudENvbnRhaW5l
ck1haW50YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpSZW5kZXJSZWdp
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjptYXBSZWdpb25Q
b2ludEludG9GbG93VGhyZWFkQ29vcmRpbmF0ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyUmVnaW9uOjpwb3NpdGlvbkZvclBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclJlZ2lvbjo6cGFnZUxvZ2ljYWxXaWR0aCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OnBhZ2VMb2dpY2FsSGVpZ2h0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6bG9naWNhbEhlaWdodE9m
QWxsRmxvd1RocmVhZENvbnRlbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyUmVnaW9uOjpmbG93VGhyZWFkUG9ydGlvbk92ZXJmbG93UmVjdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmZsb3dUaHJlYWRQb3J0aW9uTG9jYXRpb24g
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpvdmVyZmxv
d1JlY3RGb3JGbG93VGhyZWFkUG9ydGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJSZWdpb246OnBhZ2VMb2dpY2FsVG9wRm9yT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6aXNGaXJzdFJlZ2lvbiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmlzTGFzdFJlZ2lvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OnNob3VsZENsaXBGbG93
VGhyZWFkQ29udGVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJS
ZWdpb246OnN0eWxlRGlkQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clJlZ2lvbjo6Y29tcHV0ZU92ZXJmbG93RnJvbUZsb3dUaHJlYWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpyZXBhaW50Rmxvd1RocmVhZENvbnRlbnQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpyZXBhaW50Rmxvd1RocmVhZENv
bnRlbnRSZWN0YW5nbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9u
OjppbnN0YWxsRmxvd1RocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJS
ZWdpb246OmF0dGFjaFJlZ2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJS
ZWdpb246OmRldGFjaFJlZ2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJS
ZWdpb246OnJlbmRlckJveFJlZ2lvbkluZm8gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUmVnaW9uOjpzZXRSZW5kZXJCb3hSZWdpb25JbmZvKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6dGFrZVJlbmRlckJveFJlZ2lvbkluZm8pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpyZW1vdmVSZW5kZXJCb3hS
ZWdpb25JbmZvKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6ZGVs
ZXRlQWxsUmVuZGVyQm94UmVnaW9uSW5mbyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJSZWdpb246OmxvZ2ljYWxUb3BPZkZsb3dUaHJlYWRDb250ZW50UmVjdCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmxvZ2ljYWxCb3R0b21PZkZs
b3dUaHJlYWRDb250ZW50UmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJSZWdpb246Omluc2VydGVkSW50b1RyZWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyUmVnaW9uOjp3aWxsQmVSZW1vdmVkRnJvbVRyZWUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmNvbXB1dGVQ
cmVmZXJyZWRMb2dpY2FsV2lkdGhzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clJlZ2lvbjo6YWRqdXN0UmVnaW9uQm91bmRzRnJvbUZsb3dUaHJlYWRQb3J0aW9uUmVjdCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmVuc3VyZU92ZXJm
bG93Rm9yQm94KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6cmVj
dEZsb3dQb3J0aW9uRm9yQm94IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclJlZ2lvbjo6YWRkTGF5b3V0T3ZlcmZsb3dGb3JCb3gpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyUmVnaW9uOjphZGRWaXN1YWxPdmVyZmxvd0ZvckJveCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmxheW91dE92ZXJmbG93UmVjdEZvckJv
eCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OnZpc3VhbE92ZXJm
bG93UmVjdEZvckJveCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246
OmxheW91dE92ZXJmbG93UmVjdEZvckJveEZvclByb3BhZ2F0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6dmlzdWFsT3ZlcmZsb3dSZWN0Rm9yQm94Rm9yUHJv
cGFnYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VycmVudFJlbmRlclJlZ2lv
bk1haW50YWluZXI6OkN1cnJlbnRSZW5kZXJSZWdpb25NYWludGFpbmVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkN1cnJlbnRSZW5kZXJSZWdpb25NYWludGFpbmVyOjp+Q3VycmVudFJl
bmRlclJlZ2lvbk1haW50YWluZXIpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJGcmFnbWVudENvbnRhaW5lci5oOiBDb3BpZWQgZnJvbSByZW5kZXJpbmcvUmVuZGVyUmVnaW9u
LmguCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6aXNSZW5kZXJG
cmFnbWVudENvbnRhaW5lclNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFn
bWVudENvbnRhaW5lcjo6YWJzb2x1dGVRdWFkc0ZvckJveEluRnJhZ21lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Q3VycmVudFJlbmRlckZyYWdtZW50Q29udGFpbmVyTWFpbnRhaW5lcjo6ZnJhZ21l
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpzZXRGbG93VGhyZWFk
UG9ydGlvblJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpm
bG93VGhyZWFkUG9ydGlvblJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyUmVnaW9uOjpmbG93VGhyZWFkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclJlZ2lvbjo6aXNWYWxpZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJSZWdpb246OnNldElzVmFsaWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyUmVnaW9uOjpsb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRlbnQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpsb2dpY2FsQm90dG9tRm9y
Rmxvd1RocmVhZENvbnRlbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyUmVnaW9uOjppc1JlbmRlclJlZ2lvblNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJSZWdpb246OmNvbGxlY3RMYXllckZyYWdtZW50cyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmFic29sdXRlUXVhZHNGb3JCb3hJblJlZ2lv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJyZW50UmVuZGVyUmVnaW9uTWFpbnRh
aW5lcjo6cmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
RnJhZ21lbnRDb250YWluZXJTZXQuY3BwOiBDb3BpZWQgZnJvbSByZW5kZXJpbmcvUmVuZGVyUmVn
aW9uU2V0LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0
OjpSZW5kZXJGcmFnbWVudENvbnRhaW5lclNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
cmFnbWVudENvbnRhaW5lclNldDo6aW5zdGFsbEZsb3dUaHJlYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQ6OmV4cGFuZFRvRW5jb21wYXNzRmxvd1RocmVh
ZENvbnRlbnRzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uU2V0OjpS
ZW5kZXJSZWdpb25TZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9u
U2V0OjppbnN0YWxsRmxvd1RocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJSZWdpb25TZXQ6OmV4cGFuZFRvRW5jb21wYXNzRmxvd1RocmVhZENvbnRlbnRzSWZOZWVkZWQp
OiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGcmFnbWVudENvbnRhaW5lclNl
dC5oOiBDb3BpZWQgZnJvbSByZW5kZXJpbmcvUmVuZGVyUmVnaW9uU2V0LmguCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6
Y29tcHV0ZU1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQgY29uc3QpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpw
b3NpdGlvbkZvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6bGluZXNW
aXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94SW5GcmFnbWVudCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJJbmxpbmU6OmxpbmVzVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveEluUmVnaW9u
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFj
Y3VtdWxhdGVPZmZzZXRUb3dhcmRzQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tp
bmc6OnBhaW50SW50b0xheWVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2Fu
QmVDb21wb3NpdGVkIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFr
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVCcmVhazo6cG9zaXRpb25Gb3JQb2lu
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjphZGRGcmFnbWVudFRvVGhyZWFkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6d2lsbEJlUmVtb3Zl
ZEZyb21UcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVh
ZDo6cHJvY2Vzc1Bvc3NpYmxlU3Bhbm5lckRlc2NlbmRhbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpmbG93VGhyZWFkUmVsYXRpdmVXaWxsQmVSZW1v
dmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6c2V0
UGFnZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVh
ZDo6dXBkYXRlTWluaW11bVBhZ2VIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVs
dGlDb2x1bW5GbG93VGhyZWFkOjpmcmFnbWVudEF0QmxvY2tPZmZzZXQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpzZXRGcmFnbWVudFJhbmdl
Rm9yQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6
YWRkRm9yY2VkRnJhZ21lbnRCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNv
bHVtbkZsb3dUaHJlYWQ6Om9mZnNldEZyb21Db250YWluZXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjptYXBBYnNvbHV0ZVRvTG9jYWxQb2lu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6
OnBoeXNpY2FsVHJhbnNsYXRpb25Gcm9tRnJhZ21lbnRUb0Zsb3cgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjptYXBGcm9tRmxvd1RvRnJhZ21l
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFk
OjpwaHlzaWNhbFRyYW5zbGF0aW9uT2Zmc2V0RnJvbUZsb3dUb0ZyYWdtZW50IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6cGh5c2ljYWxUcmFu
c2xhdGlvbkZyb21GbG93VG9GcmFnbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmFkZFJlZ2lvblRvVGhyZWFkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6cmVnaW9uQXRCbG9j
a09mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNv
bHVtbkZsb3dUaHJlYWQ6OnNldFJlZ2lvblJhbmdlRm9yQm94KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6YWRkRm9yY2VkUmVnaW9uQnJl
YWspOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhy
ZWFkOjpwaHlzaWNhbFRyYW5zbGF0aW9uRnJvbVJlZ2lvblRvRmxvdyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6Om1hcEZyb21G
bG93VG9SZWdpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVs
dGlDb2x1bW5GbG93VGhyZWFkOjpwaHlzaWNhbFRyYW5zbGF0aW9uT2Zmc2V0RnJvbUZsb3dUb1Jl
Z2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVt
bkZsb3dUaHJlYWQ6OnBoeXNpY2FsVHJhbnNsYXRpb25Gcm9tRmxvd1RvUmVnaW9uIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFk
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uU2V0OjpSZW5kZXJNdWx0aUNvbHVtblNldCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtblNldDo6dXBkYXRlTG9naWNhbFdp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uU2V0OjpiZWdpbkZsb3cp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5TZXQ6OmVuZEZsb3cpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5TZXQ6OmxheW91dCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtblNldDo6Zmxvd1RocmVhZFBvcnRpb25PdmVyZmxvd1Jl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnJlcGFpbnRGbG93
VGhyZWFkQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtblNldDo6
Y29sbGVjdExheWVyRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29s
dW1uU2V0OjphZGp1c3RGcmFnbWVudEJvdW5kc0Zyb21GbG93VGhyZWFkUG9ydGlvblJlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnBvc2l0aW9uRm9y
UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnRyYW5zbGF0
ZUZyYWdtZW50UG9pbnRUb0Zsb3dUaHJlYWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTXVsdGlDb2x1bW5TZXQ6OnVwZGF0ZUhpdFRlc3RSZXN1bHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTXVsdGlDb2x1bW5TZXQ6OmFkanVzdFJlZ2lvbkJvdW5kc0Zyb21GbG93VGhyZWFk
UG9ydGlvblJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVs
dGlDb2x1bW5TZXQ6OnRyYW5zbGF0ZVJlZ2lvblBvaW50VG9GbG93VGhyZWFkIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6Y29udGFpbmVyRm9yUmVwYWludCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6OnJlcGFpbnRVc2luZ0NvbnRhaW5lciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJPYmplY3Q6Om91dHB1dFJlZ2lvbnNJbmZvcm1hdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVj
dDo6aXNSZW5kZXJGcmFnbWVudENvbnRhaW5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6OmlzUmVuZGVyUmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyUmVnaW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlZ2lv
blNldC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlZ2lvblNldC5o
OiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6cG9zaXRpb25Gb3JQb2ludCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjp1cGRhdGVMb2dpY2Fs
V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6Om92ZXJmbG93Q2xpcFJlY3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnBvc2l0aW9u
Rm9yUG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Lmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJpbmdBbGxJbk9uZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y29udGFpbmluZ0ZyYWdtZW50TWFwKToKKyAgICAgICAgKFdl
YkNvcmU6OlJvb3RJbmxpbmVCb3g6On5Sb290SW5saW5lQm94KToKKyAgICAgICAgKFdlYkNvcmU6
OlJvb3RJbmxpbmVCb3g6OmNvbnRhaW5pbmdGcmFnbWVudCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSb290SW5saW5lQm94OjpjbGVhckNvbnRhaW5pbmdGcmFnbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpSb290SW5saW5lQm94OjpzZXRDb250YWluaW5nRnJhZ21lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Y29udGFpbmluZ1JlZ2lvbk1hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSb290SW5saW5lQm94Ojpjb250YWluaW5nUmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OmNsZWFyQ29udGFpbmluZ1JlZ2lvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpzZXRDb250YWluaW5nUmVnaW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTaGFwZU91dHNpZGVJbmZvOjpsb2dpY2FsTGVmdE9mZnNldCBjb25zdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR0lubGluZVRleHQ6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0Ojpwb3NpdGlv
bkZvclBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaDoKKwog
MjAxNy0wOS0yNiAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29ueS5jb20+CiAKICAg
ICAgICAgW0N1cmxdIEludHJvZHVjZSBDdXJsUmVzcG9uc2UgdG8gaG9sZCByZXNwb25zZSBpbmZv
cm1hdGlvbiBhbW9uZyB0aHJlYWRzLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjIyNDYyKQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC02MDMwLDggKzYwMzAsOCBAQAogCQlCQ0U3ODk4NjExMjBFN0E2MDA2MEVDRTUgLyogQmlk
aVJ1bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNF
Nzg5ODUxMTIwRTdBNjAwNjBFQ0U1IC8qIEJpZGlSdW4uaCAqLzsgfTsKIAkJQkNFNzg5OEIxMTIw
RTgwMjAwNjBFQ0U1IC8qIEJpZGlSdW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNFNzg5OEExMTIwRTgwMjAwNjBFQ0U1IC8qIEJpZGlSdW4uY3Bw
ICovOyB9OwogCQlCQ0U3QjE5MzBENEU4Njk2MDA3NUE1MzkgLyogSlNIaXN0b3J5Q3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTdCMTky
MEQ0RTg2OTYwMDc1QTUzOSAvKiBKU0hpc3RvcnlDdXN0b20uY3BwICovOyB9OwotCQlCQ0U5M0Y0
NTE1MTdDNTY3MDA4Q0NGNzQgLyogUmVuZGVyUmVnaW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0U5M0Y0NDE1MTdDNTY3MDA4Q0NGNzQgLyog
UmVuZGVyUmVnaW9uU2V0LmggKi87IH07Ci0JCUJDRTkzRjQ3MTUxN0M2RDUwMDhDQ0Y3NCAvKiBS
ZW5kZXJSZWdpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkNFOTNGNDYxNTE3QzZENTAwOENDRjc0IC8qIFJlbmRlclJlZ2lvblNldC5jcHAg
Ki87IH07CisJCUJDRTkzRjQ1MTUxN0M1NjcwMDhDQ0Y3NCAvKiBSZW5kZXJGcmFnbWVudENvbnRh
aW5lclNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkNFOTNGNDQxNTE3QzU2NzAwOENDRjc0IC8qIFJlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0Lmgg
Ki87IH07CisJCUJDRTkzRjQ3MTUxN0M2RDUwMDhDQ0Y3NCAvKiBSZW5kZXJGcmFnbWVudENvbnRh
aW5lclNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0U5M0Y0NjE1MTdDNkQ1MDA4Q0NGNzQgLyogUmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQu
Y3BwICovOyB9OwogCQlCQ0VBNDc4RjA5N0NBQUM4MDA5NEM5RTQgLyogQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDRUE0NzdDMDk3Q0FBQzgwMDk0QzlFNCAvKiBDU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24uY3BwICovOyB9OwogCQlCQ0VBNDc5MDA5N0NBQUM4MDA5NEM5RTQgLyogQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQ0VBNDc3RDA5N0NBQUM4MDA5NEM5RTQgLyogQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQkNFQTQ4NTIwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckJsb2NrTGluZUxheW91dC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDgx
MzA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcCAqLzsgfTsKQEAg
LTYwNjgsNyArNjA2OCw3IEBACiAJCUJDRUE0ODhDMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJU
ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VB
NDg0RDA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRUE0ODhEMDk3RDkzMDIwMDk0QzlFNCAv
KiBSZW5kZXJUZXh0RnJhZ21lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkNFQTQ4NEUwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRleHRGcmFn
bWVudC5jcHAgKi87IH07CiAJCUJDRUE0ODhFMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUZXh0
RnJhZ21lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDRUE0ODRGMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUZXh0RnJhZ21lbnQuaCAqLzsgfTsK
LQkJQkNFQjE3OUMxNDMzNzlGNTAwNTJFQUU5IC8qIFJlbmRlckJveFJlZ2lvbkluZm8uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUIxNzlCMTQzMzc5
RjUwMDUyRUFFOSAvKiBSZW5kZXJCb3hSZWdpb25JbmZvLmggKi87IH07CisJCUJDRUIxNzlDMTQz
Mzc5RjUwMDUyRUFFOSAvKiBSZW5kZXJCb3hGcmFnbWVudEluZm8uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUIxNzlCMTQzMzc5RjUwMDUyRUFFOSAv
KiBSZW5kZXJCb3hGcmFnbWVudEluZm8uaCAqLzsgfTsKIAkJQkNFQzAxQkQwQzI3NERBQzAwOUY0
RUM5IC8qIFNjcmVlbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0VDMDFCQTBDMjc0REFDMDA5RjRFQzkgLyogU2NyZWVuLmNwcCAqLzsgfTsKIAkJ
QkNFQzAxQkUwQzI3NERBQzAwOUY0RUM5IC8qIFNjcmVlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQzAxQkIwQzI3NERBQzAwOUY0RUM5IC8qIFNj
cmVlbi5oICovOyB9OwogCQlCQ0VDMDFDMjBDMjc0REREMDA5RjRFQzkgLyogSlNTY3JlZW4uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQzAxQzAw
QzI3NERERDAwOUY0RUM5IC8qIEpTU2NyZWVuLmNwcCAqLzsgfTsKQEAgLTY1ODEsOCArNjU4MSw4
IEBACiAJCUQ2RTUyOEEzMTQ5QTkyNkQwMEVGRTFGMyAvKiBNdXRhdGlvbk9ic2VydmVySW50ZXJl
c3RHcm91cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBENkU1MjhBMTE0OUE5MjZEMDBFRkUxRjMgLyogTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3Jv
dXAuY3BwICovOyB9OwogCQlENkU1MjhBNDE0OUE5MjZEMDBFRkUxRjMgLyogTXV0YXRpb25PYnNl
cnZlckludGVyZXN0R3JvdXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEQ2RTUyOEEyMTQ5QTkyNkQwMEVGRTFGMyAvKiBNdXRhdGlvbk9ic2VydmVySW50
ZXJlc3RHcm91cC5oICovOyB9OwogCQlENkY3OTYwRDE2NkZGRUNFMDA3NkREMTggLyogSlNIVE1M
VGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEQ2Rjc5NjBDMTY2RkZFQ0UwMDc2REQxOCAvKiBKU0hUTUxUZW1wbGF0
ZUVsZW1lbnRDdXN0b20uY3BwICovOyB9OwotCQlENzBBRDY1NzEzRTEzNDJCMDA1QjUwQjQgLyog
UmVuZGVyUmVnaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEQ3MEFENjU1MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJSZWdpb24uY3BwICovOyB9
OwotCQlENzBBRDY1ODEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENzBBRDY1NjEzRTEzNDJCMDA1
QjUwQjQgLyogUmVuZGVyUmVnaW9uLmggKi87IH07CisJCUQ3MEFENjU3MTNFMTM0MkIwMDVCNTBC
NCAvKiBSZW5kZXJGcmFnbWVudENvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENzBBRDY1NTEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVy
RnJhZ21lbnRDb250YWluZXIuY3BwICovOyB9OworCQlENzBBRDY1ODEzRTEzNDJCMDA1QjUwQjQg
LyogUmVuZGVyRnJhZ21lbnRDb250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEQ3MEFENjU2MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJGcmFn
bWVudENvbnRhaW5lci5oICovOyB9OwogCQlEOEI2MTUyRjEwMzI0OTUxMDBDODU1NEEgLyogQ29v
a2llLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEOEI2
MTUyRTEwMzI0OTUxMDBDODU1NEEgLyogQ29va2llLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREFFRDIwMzAxNkYyNDQyQjAwNzBFQzBGIC8qIFBh
Z2VDb25zb2xlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IERBQUNCM0Q5MTZGMjQxNjQwMDY2NjEzNSAvKiBQYWdlQ29uc29sZUNsaWVudC5j
cHAgKi87IH07CiAJCURBRUQyMDMxMTZGMjQ0NDgwMDcwRUMwRiAvKiBQYWdlQ29uc29sZUNsaWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREFBQ0Iz
REExNkYyNDE2NDAwNjY2MTM1IC8qIFBhZ2VDb25zb2xlQ2xpZW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0NzMxLDggKzE0NzMxLDggQEAK
IAkJQkNFNzg5ODUxMTIwRTdBNjAwNjBFQ0U1IC8qIEJpZGlSdW4uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQmlkaVJ1bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQ0U3ODk4QTExMjBFODAyMDA2MEVDRTUgLyogQmlkaVJ1bi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaWRpUnVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQkNFN0IxOTIwRDRFODY5NjAwNzVBNTM5IC8qIEpTSGlzdG9yeUN1c3RvbS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hpc3RvcnlDdXN0b20uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQ0U5M0Y0NDE1MTdDNTY3MDA4Q0NGNzQg
LyogUmVuZGVyUmVnaW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlclJlZ2lvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQ0U5M0Y0NjE1
MTdDNkQ1MDA4Q0NGNzQgLyogUmVuZGVyUmVnaW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclJlZ2lvblNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUJDRTkzRjQ0MTUxN0M1NjcwMDhDQ0Y3NCAvKiBSZW5kZXJGcmFnbWVudENv
bnRhaW5lclNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJGcmFn
bWVudENvbnRhaW5lclNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0U5M0Y0
NjE1MTdDNkQ1MDA4Q0NGNzQgLyogUmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyRnJhZ21lbnRDb250YWluZXJT
ZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0VBNDc3QzA5N0NBQUM4MDA5
NEM5RTQgLyogQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0VBNDc3RDA5N0NBQUM4MDA5NEM5RTQgLyog
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkNFQTQ3OEMwOTdDQUFDODAwOTRDOUU0IC8qIENTU1ZhbHVlS2V5d29yZHMu
aW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IENTU1ZhbHVlS2V5d29yZHMuaW47IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDc3MSw3ICsxNDc3MSw3IEBACiAJCUJDRUE0ODREMDk3
RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW5kZXJUZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRUE0
ODRFMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUZXh0RnJhZ21lbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclRleHRGcmFnbWVudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRUE0ODRGMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5k
ZXJUZXh0RnJhZ21lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
clRleHRGcmFnbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQ0VCMTc5QjE0
MzM3OUY1MDA1MkVBRTkgLyogUmVuZGVyQm94UmVnaW9uSW5mby5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJCb3hSZWdpb25JbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUJDRUIxNzlCMTQzMzc5RjUwMDUyRUFFOSAvKiBSZW5kZXJCb3hGcmFnbWVu
dEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyQm94RnJhZ21l
bnRJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRUMwMUJBMEMyNzREQUMw
MDlGNEVDOSAvKiBTY3JlZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNjcmVlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRUMwMUJCMEMy
NzREQUMwMDlGNEVDOSAvKiBTY3JlZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNjcmVlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0VDMDFCQzBDMjc0
REFDMDA5RjRFQzkgLyogU2NyZWVuLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU2NyZWVu
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1MzYyLDggKzE1MzYyLDggQEAK
IAkJRDZFRkMwQkMxNjY2REY3QTAwM0QyOTFFIC8qIEhUTUxUZW1wbGF0ZUVsZW1lbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFRlbXBsYXRlRWxlbWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlENkVGQzBCRDE2NjZERjdBMDAzRDI5MUUgLyogSFRN
TFRlbXBsYXRlRWxlbWVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSFRNTFRlbXBsYXRl
RWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQ2Rjc5NjBDMTY2RkZF
Q0UwMDc2REQxOCAvKiBKU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRDcwQUQ2NTUxM0UxMzQyQjAwNUI1MEI0
IC8qIFJlbmRlclJlZ2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZW5kZXJSZWdpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlENzBBRDY1
NjEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbmRlclJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlENzBBRDY1NTEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyRnJhZ21lbnRDb250YWluZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyRnJhZ21lbnRDb250
YWluZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlENzBBRDY1NjEzRTEzNDJC
MDA1QjUwQjQgLyogUmVuZGVyRnJhZ21lbnRDb250YWluZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyRnJhZ21lbnRDb250YWluZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRDhCNjE1MkUxMDMyNDk1MTAwQzg1NTRBIC8qIENvb2tpZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb29raWUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJREFBQ0IzRDkxNkYyNDE2NDAwNjY2MTM1IC8qIFBhZ2VDb25zb2xlQ2xpZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VDb25zb2xlQ2xp
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREFBQ0IzREExNkYyNDE2NDAw
NjY2MTM1IC8qIFBhZ2VDb25zb2xlQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBhZ2VDb25zb2xlQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yNTkwOSw3ICsyNTkwOSw3IEBACiAJCQkJQkNFQTQ4MjMwOTdEOTMwMjAwOTRDOUU0IC8qIFJl
bmRlckJveC5oICovLAogCQkJCUJDOTZEQjQ1MEYzQTg4MjIwMDU3M0NCMyAvKiBSZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHAgKi8sCiAJCQkJQkM5NkRCNDIwRjNBODgwRTAwNTczQ0IzIC8qIFJlbmRl
ckJveE1vZGVsT2JqZWN0LmggKi8sCi0JCQkJQkNFQjE3OUIxNDMzNzlGNTAwNTJFQUU5IC8qIFJl
bmRlckJveFJlZ2lvbkluZm8uaCAqLywKKwkJCQlCQ0VCMTc5QjE0MzM3OUY1MDA1MkVBRTkgLyog
UmVuZGVyQm94RnJhZ21lbnRJbmZvLmggKi8sCiAJCQkJQkNFQTQ4MjYwOTdEOTMwMjAwOTRDOUU0
IC8qIFJlbmRlckJ1dHRvbi5jcHAgKi8sCiAJCQkJQkNFQTQ4MjcwOTdEOTMwMjAwOTRDOUU0IC8q
IFJlbmRlckJ1dHRvbi5oICovLAogCQkJCUI1NjU3OUI0MTgyNEQxMkEwMEU3OUYyMyAvKiBSZW5k
ZXJDaGlsZEl0ZXJhdG9yLmggKi8sCkBAIC0yNjAwNCwxMCArMjYwMDQsMTAgQEAKIAkJCQlBREUx
NjczNjE4MTA1MEMzMDA0NjNBMkUgLyogUmVuZGVyUHRyLmggKi8sCiAJCQkJNUE1NzRGMjIxMzFE
QjkzOTAwNDcxQjg4IC8qIFJlbmRlclF1b3RlLmNwcCAqLywKIAkJCQk1QTU3NEYyMzEzMURCOTM5
MDA0NzFCODggLyogUmVuZGVyUXVvdGUuaCAqLywKLQkJCQlENzBBRDY1NTEzRTEzNDJCMDA1QjUw
QjQgLyogUmVuZGVyUmVnaW9uLmNwcCAqLywKLQkJCQlENzBBRDY1NjEzRTEzNDJCMDA1QjUwQjQg
LyogUmVuZGVyUmVnaW9uLmggKi8sCi0JCQkJQkNFOTNGNDYxNTE3QzZENTAwOENDRjc0IC8qIFJl
bmRlclJlZ2lvblNldC5jcHAgKi8sCi0JCQkJQkNFOTNGNDQxNTE3QzU2NzAwOENDRjc0IC8qIFJl
bmRlclJlZ2lvblNldC5oICovLAorCQkJCUQ3MEFENjU1MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5k
ZXJGcmFnbWVudENvbnRhaW5lci5jcHAgKi8sCisJCQkJRDcwQUQ2NTYxM0UxMzQyQjAwNUI1MEI0
IC8qIFJlbmRlckZyYWdtZW50Q29udGFpbmVyLmggKi8sCisJCQkJQkNFOTNGNDYxNTE3QzZENTAw
OENDRjc0IC8qIFJlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0LmNwcCAqLywKKwkJCQlCQ0U5M0Y0
NDE1MTdDNTY3MDA4Q0NGNzQgLyogUmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQuaCAqLywKIAkJ
CQlBODcxREZERTBBMTUzNzZCMDBCMTJBNjggLyogUmVuZGVyUmVwbGFjZWQuY3BwICovLAogCQkJ
CUE4NzFERkRGMEExNTM3NkIwMEIxMkE2OCAvKiBSZW5kZXJSZXBsYWNlZC5oICovLAogCQkJCUJD
QTg0NkQ0MERDNjdBMzUwMDI2QzMwOSAvKiBSZW5kZXJSZXBsaWNhLmNwcCAqLywKQEAgLTI5Njcz
LDcgKzI5NjczLDcgQEAKIAkJCQlCQzEwRDc2ODE3RDhFRTcxMDA1RTI2MjYgLyogUmVuZGVyQmxv
Y2tGbG93LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg2MjA5N0Q5MzAyMDA5NEM5RTQgLyog
UmVuZGVyQm94LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzk2REI0MzBGM0E4ODBFMDA1NzNDQjMg
LyogUmVuZGVyQm94TW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDRUIxNzlDMTQz
Mzc5RjUwMDUyRUFFOSAvKiBSZW5kZXJCb3hSZWdpb25JbmZvLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlCQ0VCMTc5QzE0MzM3OUY1MDA1MkVBRTkgLyogUmVuZGVyQm94RnJhZ21lbnRJbmZvLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0VBNDg2NjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyQnV0dG9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTY1NzlCNTE4MjREMTJBMDBFNzlGMjMgLyogUmVuZGVy
Q2hpbGRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFNDQxMzQxMkY3NDhFMjAwOUI4
NEI4IC8qIFJlbmRlckNvbWJpbmVUZXh0LmggaW4gSGVhZGVycyAqLywKQEAgLTI5NzM3LDggKzI5
NzM3LDggQEAKIAkJCQlBNDNCRjU5RDExNDkyOTI4MDBDNjQzQ0EgLyogUmVuZGVyUHJvZ3Jlc3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCUI1QjY1ODc0MTg2RkRFNEMwMDlDMjZFOCAvKiBSZW5kZXJQ
dHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTVBNTc0RjI1MTMxREI5MzkwMDQ3MUI4OCAvKiBSZW5k
ZXJRdW90ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRDcwQUQ2NTgxM0UxMzQyQjAwNUI1MEI0IC8q
IFJlbmRlclJlZ2lvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkNFOTNGNDUxNTE3QzU2NzAwOEND
Rjc0IC8qIFJlbmRlclJlZ2lvblNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRDcwQUQ2NTgxM0Ux
MzQyQjAwNUI1MEI0IC8qIFJlbmRlckZyYWdtZW50Q29udGFpbmVyLmggaW4gSGVhZGVycyAqLywK
KwkJCQlCQ0U5M0Y0NTE1MTdDNTY3MDA4Q0NGNzQgLyogUmVuZGVyRnJhZ21lbnRDb250YWluZXJT
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NzFERkUzMEExNTM3NkIwMEIxMkE2OCAvKiBSZW5k
ZXJSZXBsYWNlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBODQ2RDcwREM2N0EzNTAwMjZDMzA5
IC8qIFJlbmRlclJlcGxpY2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NzlGQUVFMTA5QUUzNzUw
MERFRDY1NSAvKiBSZW5kZXJSdWJ5LmggaW4gSGVhZGVycyAqLywKQEAgLTMzNzAxLDggKzMzNzAx
LDggQEAKIAkJCQlCQ0VBNDg3RjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyT2JqZWN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE0M0JGNTlDMTE0OTI5MjgwMEM2NDNDQSAvKiBSZW5kZXJQcm9n
cmVzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QTU3NEYyNDEzMURCOTM5MDA0NzFCODggLyog
UmVuZGVyUXVvdGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRDcwQUQ2NTcxM0UxMzQyQjAwNUI1
MEI0IC8qIFJlbmRlclJlZ2lvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCQ0U5M0Y0NzE1MTdD
NkQ1MDA4Q0NGNzQgLyogUmVuZGVyUmVnaW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQ3
MEFENjU3MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJGcmFnbWVudENvbnRhaW5lci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlCQ0U5M0Y0NzE1MTdDNkQ1MDA4Q0NGNzQgLyogUmVuZGVyRnJhZ21l
bnRDb250YWluZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg3MURGRTIwQTE1Mzc2QjAw
QjEyQTY4IC8qIFJlbmRlclJlcGxhY2VkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQTg0NkQ2
MERDNjdBMzUwMDI2QzMwOSAvKiBSZW5kZXJSZXBsaWNhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0NzlGQUVEMTA5QUUzNzUwMERFRDY1NSAvKiBSZW5kZXJSdWJ5LmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5n
cy5oCShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZl
VmFsdWVNYXBwaW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjg1LDkgKzIyODUsNiBAQCB0ZW1w
bGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTCiAgICAgY2FzZSBBdm9pZFBhZ2VC
cmVha0luc2lkZToKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVBdm9pZFBhZ2U7
CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXZvaWRSZWdpb25CcmVha0luc2lkZToKLSAgICAg
ICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVBdm9pZFJlZ2lvbjsKLSAgICAgICAgYnJlYWs7
CiAgICAgfQogfQogCkBAIC0yMzA0LDggKzIzMDEsNiBAQCB0ZW1wbGF0ZTw+IGlubGluZSBDU1NQ
cmltaXRpdmVWYWx1ZTo6b3BlCiAgICAgICAgIHJldHVybiBBdm9pZENvbHVtbkJyZWFrSW5zaWRl
OwogICAgIGNhc2UgQ1NTVmFsdWVBdm9pZFBhZ2U6CiAgICAgICAgIHJldHVybiBBdm9pZFBhZ2VC
cmVha0luc2lkZTsKLSAgICBjYXNlIENTU1ZhbHVlQXZvaWRSZWdpb246Ci0gICAgICAgIHJldHVy
biBBdm9pZFJlZ2lvbkJyZWFrSW5zaWRlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUtleXdvcmRzLmluCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUtleXdvcmRzLmluCShyZXZpc2lv
biAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVLZXl3b3Jkcy5pbgkod29y
a2luZyBjb3B5KQpAQCAtODU3LDcgKzg1Nyw2IEBAIGVudgogLy8KIGF2b2lkLWNvbHVtbgogYXZv
aWQtcGFnZQotYXZvaWQtcmVnaW9uCiBwYWdlCiByZWN0bwogcmVnaW9uCkBAIC0xMDk4LDggKzEw
OTcsNiBAQCB4CiB5CiAjZW5kaWYKIAotLy8gLXdlYmtpdC1yZWdpb24tZnJhZ21lbnQKLS8vIGF1
dG8KIGJyZWFrCiAKIHdyYXAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDIy
MjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODAsNyArODAsNyBAQAogI2luY2x1ZGUgIlBvaW50ZXJMb2NrQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgotI2luY2x1
ZGUgIlJlbmRlclJlZ2lvbi5oIgorI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50Q29udGFpbmVyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHJldmlz
aW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODY4LDcgKzg2OCw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICBpZiAob2xkRmlsbENvbG9y
ICE9IGNvbG9yKQogICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3Ip
OwogfQotCisgCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJlY3Qo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Rml4ZWRUYWJsZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
MCw3ICsxNDAsNyBAQCBmbG9hdCBGaXhlZFRhYmxlTGF5b3V0OjpjYWxjV2lkdGhBcnJheSgpCiAg
ICAgICAgIHVuc2lnbmVkIHNwYW4gPSBjZWxsLT5jb2xTcGFuKCk7CiAgICAgICAgIGZsb2F0IGZp
eGVkQm9yZGVyQm94TG9naWNhbFdpZHRoID0gMDsKICAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQg
b3RoZXIgbGVuZ3RoIHR5cGVzLiBJZiB0aGUgd2lkdGggaXMgbm9uLWF1dG8sIGl0IHNob3VsZCBw
cm9iYWJseSBqdXN0IHVzZQotICAgICAgICAvLyBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lk
dGhJblJlZ2lvblVzaW5nIHRvIGNvbXB1dGUgdGhlIHdpZHRoLgorICAgICAgICAvLyBSZW5kZXJC
b3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJbkZyYWdtZW50VXNpbmcgdG8gY29tcHV0ZSB0aGUgd2lk
dGguCiAgICAgICAgIGlmIChsb2dpY2FsV2lkdGguaXNGaXhlZCgpICYmIGxvZ2ljYWxXaWR0aC5p
c1Bvc2l0aXZlKCkpIHsKICAgICAgICAgICAgIGZpeGVkQm9yZGVyQm94TG9naWNhbFdpZHRoID0g
Y2VsbC0+YWRqdXN0Qm9yZGVyQm94TG9naWNhbFdpZHRoRm9yQm94U2l6aW5nKGxvZ2ljYWxXaWR0
aC52YWx1ZSgpKTsKICAgICAgICAgICAgIGxvZ2ljYWxXaWR0aC5zZXRWYWx1ZShGaXhlZCwgZml4
ZWRCb3JkZXJCb3hMb2dpY2FsV2lkdGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5jcHAJKHJldmlzaW9uIDIyMjQ2
MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAgc3RhdGljIExheW91dFVuaXQg
Y29tcHV0ZU1hcmdpbkxvZ2ljYWxTaQogICAgIExheW91dFVuaXQgbWFyZ2luU3RhcnQ7CiAgICAg
TGF5b3V0VW5pdCBtYXJnaW5FbmQ7CiAgICAgaWYgKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKQot
ICAgICAgICBjaGlsZC5jb21wdXRlSW5saW5lRGlyZWN0aW9uTWFyZ2lucyhyZW5kZXJHcmlkLCBj
aGlsZC5jb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5SZWdpb24obnVsbHB0
ciksIGNoaWxkLmxvZ2ljYWxXaWR0aCgpLCBtYXJnaW5TdGFydCwgbWFyZ2luRW5kKTsKKyAgICAg
ICAgY2hpbGQuY29tcHV0ZUlubGluZURpcmVjdGlvbk1hcmdpbnMocmVuZGVyR3JpZCwgY2hpbGQu
Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudEluRnJhZ21lbnQobnVsbHB0ciks
IGNoaWxkLmxvZ2ljYWxXaWR0aCgpLCBtYXJnaW5TdGFydCwgbWFyZ2luRW5kKTsKICAgICBlbHNl
CiAgICAgICAgIGNoaWxkLmNvbXB1dGVCbG9ja0RpcmVjdGlvbk1hcmdpbnMocmVuZGVyR3JpZCwg
bWFyZ2luU3RhcnQsIG1hcmdpbkVuZCk7CiAKQEAgLTgyNCw3ICs4MjQsNyBAQCBwcml2YXRlOgog
CiBMYXlvdXRVbml0IEluZGVmaW5pdGVTaXplU3RyYXRlZ3k6Om1pbkxvZ2ljYWxXaWR0aEZvckNo
aWxkKFJlbmRlckJveCYgY2hpbGQsIExlbmd0aCBjaGlsZE1pblNpemUsIEdyaWRUcmFja1Npemlu
Z0RpcmVjdGlvbiBjaGlsZElubGluZURpcmVjdGlvbikgY29uc3QKIHsKLSAgICByZXR1cm4gY2hp
bGQuY29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uVXNpbmcoTWluU2l6ZSwgY2hpbGRNaW5TaXpl
LCBvdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQsIGNoaWxk
SW5saW5lRGlyZWN0aW9uKS52YWx1ZV9vcigwKSwgKnJlbmRlckdyaWQoKSwgbnVsbHB0cikgKyBt
YXJnaW5JbnRyaW5zaWNMb2dpY2FsV2lkdGhGb3JDaGlsZChyZW5kZXJHcmlkKCksIGNoaWxkKTsK
KyAgICByZXR1cm4gY2hpbGQuY29tcHV0ZUxvZ2ljYWxXaWR0aEluRnJhZ21lbnRVc2luZyhNaW5T
aXplLCBjaGlsZE1pblNpemUsIG92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JD
aGlsZChjaGlsZCwgY2hpbGRJbmxpbmVEaXJlY3Rpb24pLnZhbHVlX29yKDApLCAqcmVuZGVyR3Jp
ZCgpLCBudWxscHRyKSArIG1hcmdpbkludHJpbnNpY0xvZ2ljYWxXaWR0aEZvckNoaWxkKHJlbmRl
ckdyaWQoKSwgY2hpbGQpOwogfQogCiB2b2lkIEluZGVmaW5pdGVTaXplU3RyYXRlZ3k6OmxheW91
dEdyaWRJdGVtRm9yTWluU2l6ZUNvbXB1dGF0aW9uKFJlbmRlckJveCYgY2hpbGQsIGJvb2wgb3Zl
cnJpZGVTaXplSGFzQ2hhbmdlZCkgY29uc3QKQEAgLTkyMyw3ICs5MjMsNyBAQCBMYXlvdXRVbml0
IERlZmluaXRlU2l6ZVN0cmF0ZWd5OjptaW5Mb2dpCiB7CiAgICAgTGF5b3V0VW5pdCBtYXJnaW5M
b2dpY2FsV2lkdGggPQogICAgICAgICBjb21wdXRlTWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZChj
aGlsZElubGluZURpcmVjdGlvbiwgKnJlbmRlckdyaWQoKSwgY2hpbGQpOwotICAgIHJldHVybiBj
aGlsZC5jb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb25Vc2luZyhNaW5TaXplLCBjaGlsZE1pblNp
emUsIG92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjaGlsZCwgY2hp
bGRJbmxpbmVEaXJlY3Rpb24pLnZhbHVlX29yKDApLCAqcmVuZGVyR3JpZCgpLCBudWxscHRyKSAr
IG1hcmdpbkxvZ2ljYWxXaWR0aDsKKyAgICByZXR1cm4gY2hpbGQuY29tcHV0ZUxvZ2ljYWxXaWR0
aEluRnJhZ21lbnRVc2luZyhNaW5TaXplLCBjaGlsZE1pblNpemUsIG92ZXJyaWRlQ29udGFpbmlu
Z0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjaGlsZCwgY2hpbGRJbmxpbmVEaXJlY3Rpb24pLnZh
bHVlX29yKDApLCAqcmVuZGVyR3JpZCgpLCBudWxscHRyKSArIG1hcmdpbkxvZ2ljYWxXaWR0aDsK
IH0KIAogdm9pZCBEZWZpbml0ZVNpemVTdHJhdGVneTo6bWF4aW1pemVUcmFja3MoVmVjdG9yPEdy
aWRUcmFjaz4mIHRyYWNrcywgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiYgZnJlZVNwYWNlKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAy
MjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgotI2luY2x1ZGUgIlJl
bmRlckJveFJlZ2lvbkluZm8uaCIKKyNpbmNsdWRlICJSZW5kZXJCb3hGcmFnbWVudEluZm8uaCIK
ICNpbmNsdWRlICJSZW5kZXJCdXR0b24uaCIKICNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiUmVuZGVyQ29tYmluZVRleHQuaCIKQEAgLTU2LDcgKzU2LDcgQEAKICNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNp
bmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgotI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgorI2lu
Y2x1ZGUgIlJlbmRlckZyYWdtZW50Q29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGV4dEZyYWdtZW50LmgiCkBAIC0xMDkwLDEwICsxMDkwLDEwIEBAIHN0YXRpYyBSZW5k
ZXJCbG9ja1JhcmVEYXRhJiBlbnN1cmVCbG9ja1IKIAogdm9pZCBSZW5kZXJCbG9jazo6cHJlcGFy
ZVBhZ2luYXRpb25CZWZvcmVCbG9ja0xheW91dChib29sJiByZWxheW91dENoaWxkcmVuKQogewot
ICAgIC8vIFJlZ2lvbnMgY2hhbmdpbmcgd2lkdGhzIGNhbiBmb3JjZSB1cyB0byByZWxheW91dCBv
dXIgY2hpbGRyZW4uCisgICAgLy8gRnJhZ21lbnRzIGNoYW5naW5nIHdpZHRocyBjYW4gZm9yY2Ug
dXMgdG8gcmVsYXlvdXQgb3VyIGNoaWxkcmVuLgogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dU
aHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CiAgICAgaWYgKGZsb3dUaHJlYWQp
Ci0gICAgICAgIGZsb3dUaHJlYWQtPmxvZ2ljYWxXaWR0aENoYW5nZWRJblJlZ2lvbnNGb3JCbG9j
ayh0aGlzLCByZWxheW91dENoaWxkcmVuKTsKKyAgICAgICAgZmxvd1RocmVhZC0+bG9naWNhbFdp
ZHRoQ2hhbmdlZEluRnJhZ21lbnRzRm9yQmxvY2sodGhpcywgcmVsYXlvdXRDaGlsZHJlbik7CiB9
CiAKIGJvb2wgUmVuZGVyQmxvY2s6OnJlY29tcHV0ZUxvZ2ljYWxXaWR0aCgpCkBAIC0xMTIxLDEw
ICsxMTIxLDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJvbUNoaWxkcmUKICAg
ICBlbHNlCiAgICAgICAgIGFkZE92ZXJmbG93RnJvbUJsb2NrQ2hpbGRyZW4oKTsKICAgICAKLSAg
ICAvLyBJZiB0aGlzIGJsb2NrIGlzIGZsb3dlZCBpbnNpZGUgYSBmbG93IHRocmVhZCwgbWFrZSBz
dXJlIGl0cyBvdmVyZmxvdyBpcyBwcm9wYWdhdGVkIHRvIHRoZSBjb250YWluaW5nIHJlZ2lvbnMu
CisgICAgLy8gSWYgdGhpcyBibG9jayBpcyBmbG93ZWQgaW5zaWRlIGEgZmxvdyB0aHJlYWQsIG1h
a2Ugc3VyZSBpdHMgb3ZlcmZsb3cgaXMgcHJvcGFnYXRlZCB0byB0aGUgY29udGFpbmluZyBmcmFn
bWVudHMuCiAgICAgaWYgKG1fb3ZlcmZsb3cpIHsKICAgICAgICAgaWYgKFJlbmRlckZsb3dUaHJl
YWQqIGNvbnRhaW5pbmdGbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpKQot
ICAgICAgICAgICAgY29udGFpbmluZ0Zsb3dUaHJlYWQtPmFkZFJlZ2lvbnNWaXN1YWxPdmVyZmxv
dyh0aGlzLCBtX292ZXJmbG93LT52aXN1YWxPdmVyZmxvd1JlY3QoKSk7CisgICAgICAgICAgICBj
b250YWluaW5nRmxvd1RocmVhZC0+YWRkRnJhZ21lbnRzVmlzdWFsT3ZlcmZsb3codGhpcywgbV9v
dmVyZmxvdy0+dmlzdWFsT3ZlcmZsb3dSZWN0KCkpOwogICAgIH0KIH0KIApAQCAtMTE2NSw3ICsx
MTY1LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJMYXlvdXRPdmVyZmxvdygpCiAgICAgICAg
IHJldHVybjsKICAgICAKICAgICBpZiAodmlzdWFsT3ZlcmZsb3dSZWN0KCkgPT0gYm9yZGVyQm94
UmVjdCgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgY29tcGxldGUgc29sdXRpb24g
Zm9yIHJlZ2lvbnMgb3ZlcmZsb3cuCisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgY29tcGxl
dGUgc29sdXRpb24gZm9yIGZyYWdtZW50cyBvdmVyZmxvdy4KICAgICAgICAgY2xlYXJPdmVyZmxv
dygpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTIwNiwyMiArMTIwNiwyMiBAQCB2b2lk
IFJlbmRlckJsb2NrOjphZGRWaXN1YWxPdmVyZmxvd0Zyb21UCiAgICAgYWRkVmlzdWFsT3ZlcmZs
b3coc25hcHBlZEludFJlY3QoTGF5b3V0UmVjdChpbmZsYXRlZFJlY3QpKSk7CiAKICAgICBpZiAo
UmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2so
KSkKLSAgICAgICAgZmxvd1RocmVhZC0+YWRkUmVnaW9uc1Zpc3VhbE92ZXJmbG93RnJvbVRoZW1l
KHRoaXMpOworICAgICAgICBmbG93VGhyZWFkLT5hZGRGcmFnbWVudHNWaXN1YWxPdmVyZmxvd0Zy
b21UaGVtZSh0aGlzKTsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6Y29tcHV0ZVN0YXJ0
UG9zaXRpb25EZWx0YUZvckNoaWxkQXZvaWRpbmdGbG9hdHMoY29uc3QgUmVuZGVyQm94JiBjaGls
ZCwgTGF5b3V0VW5pdCBjaGlsZE1hcmdpblN0YXJ0LCBSZW5kZXJSZWdpb24qIHJlZ2lvbikKK0xh
eW91dFVuaXQgUmVuZGVyQmxvY2s6OmNvbXB1dGVTdGFydFBvc2l0aW9uRGVsdGFGb3JDaGlsZEF2
b2lkaW5nRmxvYXRzKGNvbnN0IFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgY2hpbGRNYXJn
aW5TdGFydCwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50KQogewotICAgIExheW91
dFVuaXQgc3RhcnRQb3NpdGlvbiA9IHN0YXJ0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24pOworICAg
IExheW91dFVuaXQgc3RhcnRQb3NpdGlvbiA9IHN0YXJ0T2Zmc2V0Rm9yQ29udGVudChmcmFnbWVu
dCk7CiAKICAgICAvLyBBZGQgaW4gb3VyIHN0YXJ0IG1hcmdpbi4KICAgICBMYXlvdXRVbml0IG9s
ZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIGNoaWxkTWFyZ2luU3RhcnQ7CiAgICAgTGF5b3V0
VW5pdCBuZXdQb3NpdGlvbiA9IG9sZFBvc2l0aW9uOwogCiAgICAgTGF5b3V0VW5pdCBibG9ja09m
ZnNldCA9IGxvZ2ljYWxUb3BGb3JDaGlsZChjaGlsZCk7Ci0gICAgaWYgKHJlZ2lvbikKLSAgICAg
ICAgYmxvY2tPZmZzZXQgPSBzdGQ6Om1heChibG9ja09mZnNldCwgYmxvY2tPZmZzZXQgKyAocmVn
aW9uLT5sb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRlbnQoKSAtIG9mZnNldEZyb21Mb2dpY2Fs
VG9wT2ZGaXJzdFBhZ2UoKSkpOworICAgIGlmIChmcmFnbWVudCkKKyAgICAgICAgYmxvY2tPZmZz
ZXQgPSBzdGQ6Om1heChibG9ja09mZnNldCwgYmxvY2tPZmZzZXQgKyAoZnJhZ21lbnQtPmxvZ2lj
YWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgpIC0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0
UGFnZSgpKSk7CiAKLSAgICBMYXlvdXRVbml0IHN0YXJ0T2ZmID0gc3RhcnRPZmZzZXRGb3JMaW5l
SW5SZWdpb24oYmxvY2tPZmZzZXQsIERvTm90SW5kZW50VGV4dCwgcmVnaW9uLCBsb2dpY2FsSGVp
Z2h0Rm9yQ2hpbGQoY2hpbGQpKTsKKyAgICBMYXlvdXRVbml0IHN0YXJ0T2ZmID0gc3RhcnRPZmZz
ZXRGb3JMaW5lSW5GcmFnbWVudChibG9ja09mZnNldCwgRG9Ob3RJbmRlbnRUZXh0LCBmcmFnbWVu
dCwgbG9naWNhbEhlaWdodEZvckNoaWxkKGNoaWxkKSk7CiAKICAgICBpZiAoc3R5bGUoKS50ZXh0
QWxpZ24oKSAhPSBXRUJLSVRfQ0VOVEVSICYmICFjaGlsZC5zdHlsZSgpLm1hcmdpblN0YXJ0VXNp
bmcoJnN0eWxlKCkpLmlzQXV0bygpKSB7CiAgICAgICAgIGlmIChjaGlsZE1hcmdpblN0YXJ0IDwg
MCkKQEAgLTEzNTUsNyArMTM1NSw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnNpbXBsaWZpZWRMYXlv
dXQoKQogICAgICAgICBzaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCgpOwogCiAgICAgLy8gTWFr
ZSBzdXJlIGEgZm9yY2VkIGJyZWFrIGlzIGFwcGxpZWQgYWZ0ZXIgdGhlIGNvbnRlbnQgaWYgd2Ug
YXJlIGEgZmxvdyB0aHJlYWQgaW4gYSBzaW1wbGlmaWVkIGxheW91dC4KLSAgICAvLyBUaGlzIGVu
c3VyZXMgdGhlIHNpemUgaW5mb3JtYXRpb24gaXMgY29ycmVjdGx5IGNvbXB1dGVkIGZvciB0aGUg
bGFzdCBhdXRvLWhlaWdodCByZWdpb24gcmVjZWl2aW5nIGNvbnRlbnQuCisgICAgLy8gVGhpcyBl
bnN1cmVzIHRoZSBzaXplIGluZm9ybWF0aW9uIGlzIGNvcnJlY3RseSBjb21wdXRlZCBmb3IgdGhl
IGxhc3QgYXV0by1oZWlnaHQgZnJhZ21lbnQgcmVjZWl2aW5nIGNvbnRlbnQuCiAgICAgaWYgKGlz
PFJlbmRlckZsb3dUaHJlYWQ+KCp0aGlzKSkKICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxvd1Ro
cmVhZD4oKnRoaXMpLmFwcGx5QnJlYWtBZnRlckNvbnRlbnQoY2xpZW50TG9naWNhbEJvdHRvbSgp
KTsKIApAQCAtMTQwNiw3ICsxNDA2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFya0ZpeGVkUG9z
aXRpb25PYmplYwogCiAgICAgaWYgKGhhc1N0YXRpY0lubGluZVBvc2l0aW9uKSB7CiAgICAgICAg
IExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyBjb21wdXRlZFZhbHVlczsKLSAgICAgICAgcG9z
aXRpb25lZENoaWxkLmNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvbihjb21wdXRlZFZhbHVlcyk7
CisgICAgICAgIHBvc2l0aW9uZWRDaGlsZC5jb21wdXRlTG9naWNhbFdpZHRoSW5GcmFnbWVudChj
b21wdXRlZFZhbHVlcyk7CiAgICAgICAgIExheW91dFVuaXQgbmV3TGVmdCA9IGNvbXB1dGVkVmFs
dWVzLm1fcG9zaXRpb247CiAgICAgICAgIGlmIChuZXdMZWZ0ICE9IHBvc2l0aW9uZWRDaGlsZC5s
b2dpY2FsTGVmdCgpKQogICAgICAgICAgICAgcG9zaXRpb25lZENoaWxkLnNldENoaWxkTmVlZHNM
YXlvdXQoTWFya09ubHlUaGlzKTsKQEAgLTE0MzUsNyArMTQzNSw3IEBAIExheW91dFVuaXQgUmVu
ZGVyQmxvY2s6Om1hcmdpbkludHJpbnNpY0wKIAogdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9z
aXRpb25lZE9iamVjdChSZW5kZXJCb3gmIHIsIGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgYm9vbCBm
aXhlZFBvc2l0aW9uT2JqZWN0c09ubHkpCiB7Ci0gICAgZXN0aW1hdGVSZWdpb25SYW5nZUZvckJv
eENoaWxkKHIpOworICAgIGVzdGltYXRlRnJhZ21lbnRSYW5nZUZvckJveENoaWxkKHIpOwogCiAg
ICAgLy8gQSBmaXhlZCBwb3NpdGlvbiBlbGVtZW50IHdpdGggYW4gYWJzb2x1dGUgcG9zaXRpb25l
ZCBhbmNlc3RvciBoYXMgbm8gd2F5IG9mIGtub3dpbmcgaWYgdGhlIGxhdHRlciBoYXMgY2hhbmdl
ZCBwb3NpdGlvbi4gU28KICAgICAvLyBpZiB0aGlzIGlzIGEgZml4ZWQgcG9zaXRpb24gZWxlbWVu
dCwgbWFyayBpdCBmb3IgbGF5b3V0IGlmIGl0IGhhcyBhbiBhYnNwb3MgYW5jZXN0b3IgYW5kIG5l
ZWRzIHRvIG1vdmUgd2l0aCB0aGF0IGFuY2VzdG9yLCBpLmUuIApAQCAtMTQ5NCw3ICsxNDk0LDcg
QEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRpb25lZE9iamVjdAogICAgICAgICByLmxh
eW91dElmTmVlZGVkKCk7CiAgICAgfQogCi0gICAgaWYgKHVwZGF0ZVJlZ2lvblJhbmdlRm9yQm94
Q2hpbGQocikpIHsKKyAgICBpZiAodXBkYXRlRnJhZ21lbnRSYW5nZUZvckJveENoaWxkKHIpKSB7
CiAgICAgICAgIHIuc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKICAgICAgICAgci5sYXlv
dXRJZk5lZWRlZCgpOwogICAgIH0KQEAgLTE5NzQsNyArMTk3NCw3IEBAIEdhcFJlY3RzIFJlbmRl
ckJsb2NrOjpzZWxlY3Rpb25HYXBzKFJlbmQKICAgICAgICAgY2xpcE91dEZsb2F0aW5nT2JqZWN0
cyhyb290QmxvY2ssIHBhaW50SW5mbywgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgb2Zmc2V0
RnJvbVJvb3RCbG9jayk7CiAgICAgfQogCi0gICAgLy8gRklYTUU6IG92ZXJmbG93OiBhdXRvL3Nj
cm9sbCByZWdpb25zIG5lZWQgbW9yZSBtYXRoIGhlcmUsIHNpbmNlIHBhaW50aW5nIGluIHRoZSBi
b3JkZXIgYm94IGlzIGRpZmZlcmVudCBmcm9tIHBhaW50aW5nIGluIHRoZSBwYWRkaW5nIGJveCAo
b25lIGlzIHNjcm9sbGVkLCB0aGUgb3RoZXIgaXMKKyAgICAvLyBGSVhNRTogb3ZlcmZsb3c6IGF1
dG8vc2Nyb2xsIGZyYWdtZW50cyBuZWVkIG1vcmUgbWF0aCBoZXJlLCBzaW5jZSBwYWludGluZyBp
biB0aGUgYm9yZGVyIGJveCBpcyBkaWZmZXJlbnQgZnJvbSBwYWludGluZyBpbiB0aGUgcGFkZGlu
ZyBib3ggKG9uZSBpcyBzY3JvbGxlZCwgdGhlIG90aGVyIGlzCiAgICAgLy8gZml4ZWQpLgogICAg
IEdhcFJlY3RzIHJlc3VsdDsKICAgICBpZiAoIWlzUmVuZGVyQmxvY2tGbG93KCkpIC8vIEZJWE1F
OiBNYWtlIG11bHRpLWNvbHVtbiBzZWxlY3Rpb24gZ2FwIGZpbGxpbmcgd29yayBzb21lZGF5LgpA
QCAtMjMwNywyNiArMjMwNywyNiBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjp0ZXh0SW5kZW50
T2Zmc2V0CiAgICAgcmV0dXJuIG1pbmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZSgpLnRleHRJbmRl
bnQoKSwgY3cpOwogfQogCi1MYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdE9mZnNl
dEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiByZWdpb24pIGNvbnN0CitMYXlvdXRVbml0IFJlbmRl
ckJsb2NrOjpsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoUmVuZGVyRnJhZ21lbnRDb250YWlu
ZXIqIGZyYWdtZW50KSBjb25zdAogewogICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXQg
PSBzdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBib3JkZXJMZWZ0KCkgKyBwYWRk
aW5nTGVmdCgpIDogYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCk7CiAgICAgaWYgKHNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKICAgICAgICAgbG9naWNhbExlZnRP
ZmZzZXQgKz0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOwotICAgIGlmICghcmVnaW9uKQorICAg
IGlmICghZnJhZ21lbnQpCiAgICAgICAgIHJldHVybiBsb2dpY2FsTGVmdE9mZnNldDsKLSAgICBM
YXlvdXRSZWN0IGJveFJlY3QgPSBib3JkZXJCb3hSZWN0SW5SZWdpb24ocmVnaW9uKTsKKyAgICBM
YXlvdXRSZWN0IGJveFJlY3QgPSBib3JkZXJCb3hSZWN0SW5GcmFnbWVudChmcmFnbWVudCk7CiAg
ICAgcmV0dXJuIGxvZ2ljYWxMZWZ0T2Zmc2V0ICsgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBib3hSZWN0LngoKSA6IGJveFJlY3QueSgpKTsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJCbG9j
azo6bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChSZW5kZXJSZWdpb24qIHJlZ2lvbikgY29u
c3QKK0xheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQo
UmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50KSBjb25zdAogewogICAgIExheW91dFVu
aXQgbG9naWNhbFJpZ2h0T2Zmc2V0ID0gc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
ID8gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSA6IGJvcmRlclRvcCgpICsgcGFkZGluZ1Rv
cCgpOwogICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkp
CiAgICAgICAgIGxvZ2ljYWxSaWdodE9mZnNldCArPSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7
CiAgICAgbG9naWNhbFJpZ2h0T2Zmc2V0ICs9IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpOwotICAg
IGlmICghcmVnaW9uKQorICAgIGlmICghZnJhZ21lbnQpCiAgICAgICAgIHJldHVybiBsb2dpY2Fs
UmlnaHRPZmZzZXQ7Ci0gICAgTGF5b3V0UmVjdCBib3hSZWN0ID0gYm9yZGVyQm94UmVjdEluUmVn
aW9uKHJlZ2lvbik7CisgICAgTGF5b3V0UmVjdCBib3hSZWN0ID0gYm9yZGVyQm94UmVjdEluRnJh
Z21lbnQoZnJhZ21lbnQpOwogICAgIHJldHVybiBsb2dpY2FsUmlnaHRPZmZzZXQgLSAobG9naWNh
bFdpZHRoKCkgLSAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGJveFJlY3QubWF4WCgpIDog
Ym94UmVjdC5tYXhZKCkpKTsKIH0KIApAQCAtMjM2MSw3ICsyMzYxLDcgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCbG9jazo6YWRqdXN0TG9naWNhbExlZgogICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgcGF0
Y2hlZCB3aGVuIHN1YnBpeGVsIGxheW91dCBsYW5kcywgc2luY2UgdGhpcyBjYWxjdWxhdGlvbiBk
b2Vzbid0IGhhdmUgdG8gcGl4ZWwgc25hcAogICAgIC8vIGFueSBtb3JlIChodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk5NDYpLgogICAgIC8vIEZJWE1FOiBUaGlzIGlz
IHdyb25nIGZvciBSVEwgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
OTk0NSkuCi0gICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIHdpdGggY29sdW1ucyBvciBy
ZWdpb25zIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk5NDIpLgor
ICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayB3aXRoIGNvbHVtbnMgb3IgZnJhZ21lbnRz
IChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk5NDIpLgogICAgIC8v
IEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayB3aGVuIHRoZSBpbmxpbmUgcG9zaXRpb24gb2YgdGhl
IG9iamVjdCBpc24ndCBzZXQgYWhlYWQgb2YgdGltZS4KICAgICAvLyBGSVhNRTogRHluYW1pYyBj
aGFuZ2VzIHRvIHRoZSBmb250IG9yIHRvIHRoZSBpbmxpbmUgcG9zaXRpb24gbmVlZCB0byByZXN1
bHQgaW4gYSBkZWVwIHJlbGF5b3V0LgogICAgIC8vIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Nzk5NDQpCkBAIC0yNDAxLDcgKzI0MDEsNyBAQCBMYXlvdXRVbml0IFJl
bmRlckJsb2NrOjphZGp1c3RMb2dpY2FsUmlnCiAgICAgLy8gRklYTUU6IFNob3VsZCBiZSBwYXRj
aGVkIHdoZW4gc3VicGl4ZWwgbGF5b3V0IGxhbmRzLCBzaW5jZSB0aGlzIGNhbGN1bGF0aW9uIGRv
ZXNuJ3QgaGF2ZSB0byBwaXhlbCBzbmFwCiAgICAgLy8gYW55IG1vcmUgKGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTk0NikuCiAgICAgLy8gRklYTUU6IFRoaXMgaXMg
d3JvbmcgZm9yIFJUTCAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5
OTQ1KS4KLSAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgd2l0aCBjb2x1bW5zIG9yIHJl
Z2lvbnMgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTk0MikuCisg
ICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIHdpdGggY29sdW1ucyBvciBmcmFnbWVudHMg
KGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTk0MikuCiAgICAgLy8g
RklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIHdoZW4gdGhlIGlubGluZSBwb3NpdGlvbiBvZiB0aGUg
b2JqZWN0IGlzbid0IHNldCBhaGVhZCBvZiB0aW1lLgogICAgIC8vIEZJWE1FOiBEeW5hbWljIGNo
YW5nZXMgdG8gdGhlIGZvbnQgb3IgdG8gdGhlIGlubGluZSBwb3NpdGlvbiBuZWVkIHRvIHJlc3Vs
dCBpbiBhIGRlZXAgcmVsYXlvdXQuCiAgICAgLy8gKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03OTk0NCkKQEAgLTI1OTQsNyArMjU5NCw3IEBAIFZpc2libGVQb3NpdGlv
biBwb3NpdGlvbkZvclBvaW50UmVzcGVjdGkKICAgICByZXR1cm4gYW5jZXN0b3ItPmNyZWF0ZVZp
c2libGVQb3NpdGlvbihjaGlsZEVsZW1lbnQtPmNvbXB1dGVOb2RlSW5kZXgoKSArIDEsIFVQU1RS
RUFNKTsKIH0KIAotVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJsb2NrOjpwb3NpdGlvbkZvclBvaW50
V2l0aElubGluZUNoaWxkcmVuKGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyUmVnaW9u
KikKK1Zpc2libGVQb3NpdGlvbiBSZW5kZXJCbG9jazo6cG9zaXRpb25Gb3JQb2ludFdpdGhJbmxp
bmVDaGlsZHJlbihjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFp
bmVyKikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKCk7CkBAIC0yNjA1LDIxICsyNjA1LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0No
aWxkSGl0VGVzdENhbmRpZGEKICAgICByZXR1cm4gYm94LmhlaWdodCgpICYmIGJveC5zdHlsZSgp
LnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFICYmICFib3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkg
JiYgIWJveC5pc0luRmxvd1JlbmRlckZsb3dUaHJlYWQoKTsKIH0KIAotLy8gVmFsaWQgY2FuZGlk
YXRlcyBpbiBhIEZsb3dUaHJlYWQgbXVzdCBiZSByZW5kZXJlZCBieSB0aGUgcmVnaW9uLgotc3Rh
dGljIGlubGluZSBib29sIGlzQ2hpbGRIaXRUZXN0Q2FuZGlkYXRlKGNvbnN0IFJlbmRlckJveCYg
Ym94LCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50
KQorLy8gVmFsaWQgY2FuZGlkYXRlcyBpbiBhIEZsb3dUaHJlYWQgbXVzdCBiZSByZW5kZXJlZCBi
eSB0aGUgZnJhZ21lbnQuCitzdGF0aWMgaW5saW5lIGJvb2wgaXNDaGlsZEhpdFRlc3RDYW5kaWRh
dGUoY29uc3QgUmVuZGVyQm94JiBib3gsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBm
cmFnbWVudCwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQogewogICAgIGlmICghaXNDaGlsZEhp
dFRlc3RDYW5kaWRhdGUoYm94KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghcmVn
aW9uKQorICAgIGlmICghZnJhZ21lbnQpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNvbnN0
IFJlbmRlckJsb2NrJiBibG9jayA9IGlzPFJlbmRlckJsb2NrPihib3gpID8gZG93bmNhc3Q8UmVu
ZGVyQmxvY2s+KGJveCkgOiAqYm94LmNvbnRhaW5pbmdCbG9jaygpOwotICAgIHJldHVybiBibG9j
ay5yZWdpb25BdEJsb2NrT2Zmc2V0KHBvaW50LnkoKSkgPT0gcmVnaW9uOworICAgIHJldHVybiBi
bG9jay5mcmFnbWVudEF0QmxvY2tPZmZzZXQocG9pbnQueSgpKSA9PSBmcmFnbWVudDsKIH0KIAot
VmlzaWJsZVBvc2l0aW9uIFJlbmRlckJsb2NrOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91
dFBvaW50JiBwb2ludCwgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb24pCitWaXNpYmxlUG9zaXRp
b24gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50
LCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQpCiB7CiAgICAgaWYgKGlz
VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQb2ludChwb2lu
dCwgcmVnaW9uKTsKKyAgICAgICAgcmV0dXJuIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQb2ludChw
b2ludCwgZnJhZ21lbnQpOwogCiAgICAgaWYgKGlzUmVwbGFjZWQoKSkgewogICAgICAgICAvLyBG
SVhNRTogVGhpcyBzZWVtcyB3cm9uZyB3aGVuIHRoZSBvYmplY3QncyB3cml0aW5nLW1vZGUgZG9l
c24ndCBtYXRjaCB0aGUgbGluZSdzIHdyaXRpbmctbW9kZS4KQEAgLTI2MzksMTQgKzI2MzksMTQg
QEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJsb2NrOjpwb3NpdGlvbkZvcgogICAgICAgICBwb2lu
dEluTG9naWNhbENvbnRlbnRzID0gcG9pbnRJbkxvZ2ljYWxDb250ZW50cy50cmFuc3Bvc2VkUG9p
bnQoKTsKIAogICAgIGlmIChjaGlsZHJlbklubGluZSgpKQotICAgICAgICByZXR1cm4gcG9zaXRp
b25Gb3JQb2ludFdpdGhJbmxpbmVDaGlsZHJlbihwb2ludEluTG9naWNhbENvbnRlbnRzLCByZWdp
b24pOworICAgICAgICByZXR1cm4gcG9zaXRpb25Gb3JQb2ludFdpdGhJbmxpbmVDaGlsZHJlbihw
b2ludEluTG9naWNhbENvbnRlbnRzLCBmcmFnbWVudCk7CiAKICAgICBSZW5kZXJCb3gqIGxhc3RD
YW5kaWRhdGVCb3ggPSBsYXN0Q2hpbGRCb3goKTsKIAotICAgIGlmICghcmVnaW9uKQotICAgICAg
ICByZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KHBvaW50SW5Mb2dpY2FsQ29udGVudHMueSgp
KTsKKyAgICBpZiAoIWZyYWdtZW50KQorICAgICAgICBmcmFnbWVudCA9IGZyYWdtZW50QXRCbG9j
a09mZnNldChwb2ludEluTG9naWNhbENvbnRlbnRzLnkoKSk7CiAKLSAgICB3aGlsZSAobGFzdENh
bmRpZGF0ZUJveCAmJiAhaXNDaGlsZEhpdFRlc3RDYW5kaWRhdGUoKmxhc3RDYW5kaWRhdGVCb3gs
IHJlZ2lvbiwgcG9pbnRJbkxvZ2ljYWxDb250ZW50cykpCisgICAgd2hpbGUgKGxhc3RDYW5kaWRh
dGVCb3ggJiYgIWlzQ2hpbGRIaXRUZXN0Q2FuZGlkYXRlKCpsYXN0Q2FuZGlkYXRlQm94LCBmcmFn
bWVudCwgcG9pbnRJbkxvZ2ljYWxDb250ZW50cykpCiAgICAgICAgIGxhc3RDYW5kaWRhdGVCb3gg
PSBsYXN0Q2FuZGlkYXRlQm94LT5wcmV2aW91c1NpYmxpbmdCb3goKTsKIAogICAgIGJvb2wgYmxv
Y2tzQXJlRmxpcHBlZCA9IHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKTsKQEAg
LTI2NTYsMjAgKzI2NTYsMjAgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJsb2NrOjpwb3NpdGlv
bkZvcgogICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uRm9yUG9pbnRSZXNwZWN0aW5nRWRpdGlu
Z0JvdW5kYXJpZXMoKnRoaXMsICpsYXN0Q2FuZGlkYXRlQm94LCBwb2ludEluQ29udGVudHMpOwog
CiAgICAgICAgIGZvciAoYXV0byogY2hpbGRCb3ggPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkQm94
OyBjaGlsZEJveCA9IGNoaWxkQm94LT5uZXh0U2libGluZ0JveCgpKSB7Ci0gICAgICAgICAgICBp
ZiAoIWlzQ2hpbGRIaXRUZXN0Q2FuZGlkYXRlKCpjaGlsZEJveCwgcmVnaW9uLCBwb2ludEluTG9n
aWNhbENvbnRlbnRzKSkKKyAgICAgICAgICAgIGlmICghaXNDaGlsZEhpdFRlc3RDYW5kaWRhdGUo
KmNoaWxkQm94LCBmcmFnbWVudCwgcG9pbnRJbkxvZ2ljYWxDb250ZW50cykpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICBMYXlvdXRVbml0IGNoaWxkTG9naWNhbEJvdHRv
bSA9IGxvZ2ljYWxUb3BGb3JDaGlsZCgqY2hpbGRCb3gpICsgbG9naWNhbEhlaWdodEZvckNoaWxk
KCpjaGlsZEJveCk7CiAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2tGbG93PihjaGlsZEJv
eCkpCiAgICAgICAgICAgICAgICAgY2hpbGRMb2dpY2FsQm90dG9tICs9IGRvd25jYXN0PFJlbmRl
ckJsb2NrRmxvdz4oY2hpbGRCb3gpLT5sb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oKTsKICAgICAg
ICAgICAgIC8vIFdlIGhpdCBjaGlsZCBpZiBvdXIgY2xpY2sgaXMgYWJvdmUgdGhlIGJvdHRvbSBv
ZiBpdHMgcGFkZGluZyBib3ggKGxpa2UgSUU2LzcgYW5kIEZGMykuCi0gICAgICAgICAgICBpZiAo
aXNDaGlsZEhpdFRlc3RDYW5kaWRhdGUoKmNoaWxkQm94LCByZWdpb24sIHBvaW50SW5Mb2dpY2Fs
Q29udGVudHMpICYmIChwb2ludEluTG9naWNhbENvbnRlbnRzLnkoKSA8IGNoaWxkTG9naWNhbEJv
dHRvbQorICAgICAgICAgICAgaWYgKGlzQ2hpbGRIaXRUZXN0Q2FuZGlkYXRlKCpjaGlsZEJveCwg
ZnJhZ21lbnQsIHBvaW50SW5Mb2dpY2FsQ29udGVudHMpICYmIChwb2ludEluTG9naWNhbENvbnRl
bnRzLnkoKSA8IGNoaWxkTG9naWNhbEJvdHRvbQogICAgICAgICAgICAgICAgIHx8IChibG9ja3NB
cmVGbGlwcGVkICYmIHBvaW50SW5Mb2dpY2FsQ29udGVudHMueSgpID09IGNoaWxkTG9naWNhbEJv
dHRvbSkpKQogICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbkZvclBvaW50UmVzcGVjdGlu
Z0VkaXRpbmdCb3VuZGFyaWVzKCp0aGlzLCAqY2hpbGRCb3gsIHBvaW50SW5Db250ZW50cyk7CiAg
ICAgICAgIH0KICAgICB9CiAKICAgICAvLyBXZSBvbmx5IGdldCBoZXJlIGlmIHRoZXJlIGFyZSBu
byBoaXQgdGVzdCBjYW5kaWRhdGUgY2hpbGRyZW4gYmVsb3cgdGhlIGNsaWNrLgotICAgIHJldHVy
biBSZW5kZXJCb3g6OnBvc2l0aW9uRm9yUG9pbnQocG9pbnQsIHJlZ2lvbik7CisgICAgcmV0dXJu
IFJlbmRlckJveDo6cG9zaXRpb25Gb3JQb2ludChwb2ludCwgZnJhZ21lbnQpOwogfQogCiB2b2lk
IFJlbmRlckJsb2NrOjpvZmZzZXRGb3JDb250ZW50cyhMYXlvdXRQb2ludCYgb2Zmc2V0KSBjb25z
dApAQCAtMzM2MSw3ICszMzYxLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6b2Zmc2V0RnJv
bUxvZ2ljYQogCiAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRD
b250YWluaW5nQmxvY2soKTsKICAgICBpZiAoZmxvd1RocmVhZCkKLSAgICAgICAgcmV0dXJuIGZs
b3dUaHJlYWQtPm9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFJlZ2lvbih0aGlzKTsKKyAgICAg
ICAgcmV0dXJuIGZsb3dUaHJlYWQtPm9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdEZyYWdtZW50
KHRoaXMpOwogCiAgICAgaWYgKGxheW91dFN0YXRlKSB7CiAgICAgICAgIEFTU0VSVChsYXlvdXRT
dGF0ZS0+bV9yZW5kZXJlciA9PSB0aGlzKTsKQEAgLTMzNzQsMjcgKzMzNzQsMjcgQEAgTGF5b3V0
VW5pdCBSZW5kZXJCbG9jazo6b2Zmc2V0RnJvbUxvZ2ljYQogICAgIHJldHVybiAwOwogfQogCi1S
ZW5kZXJSZWdpb24qIFJlbmRlckJsb2NrOjpyZWdpb25BdEJsb2NrT2Zmc2V0KExheW91dFVuaXQg
YmxvY2tPZmZzZXQpIGNvbnN0CitSZW5kZXJGcmFnbWVudENvbnRhaW5lciogUmVuZGVyQmxvY2s6
OmZyYWdtZW50QXRCbG9ja09mZnNldChMYXlvdXRVbml0IGJsb2NrT2Zmc2V0KSBjb25zdAogewog
ICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Js
b2NrKCk7Ci0gICAgaWYgKCFmbG93VGhyZWFkIHx8ICFmbG93VGhyZWFkLT5oYXNWYWxpZFJlZ2lv
bkluZm8oKSkKKyAgICBpZiAoIWZsb3dUaHJlYWQgfHwgIWZsb3dUaHJlYWQtPmhhc1ZhbGlkRnJh
Z21lbnRJbmZvKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGZsb3dUaHJlYWQt
PnJlZ2lvbkF0QmxvY2tPZmZzZXQodGhpcywgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFn
ZSgpICsgYmxvY2tPZmZzZXQsIHRydWUpOworICAgIHJldHVybiBmbG93VGhyZWFkLT5mcmFnbWVu
dEF0QmxvY2tPZmZzZXQodGhpcywgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpICsg
YmxvY2tPZmZzZXQsIHRydWUpOwogfQogCi1zdGF0aWMgYm9vbCBjYW5Db21wdXRlUmVnaW9uUmFu
Z2VGb3JCb3goY29uc3QgUmVuZGVyQmxvY2smIHBhcmVudEJsb2NrLCBjb25zdCBSZW5kZXJCb3gm
IGNoaWxkQm94LCBjb25zdCBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkQ29udGFpbmluZ0Js
b2NrKQorc3RhdGljIGJvb2wgY2FuQ29tcHV0ZUZyYWdtZW50UmFuZ2VGb3JCb3goY29uc3QgUmVu
ZGVyQmxvY2smIHBhcmVudEJsb2NrLCBjb25zdCBSZW5kZXJCb3gmIGNoaWxkQm94LCBjb25zdCBS
ZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKQogewogICAgIGlmICgh
Zmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKCFmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrLT5oYXNSZWdpb25zKCkpCisgICAgaWYgKCFm
bG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrLT5oYXNGcmFnbWVudHMoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgaWYgKCFjaGlsZEJveC5jYW5IYXZlT3V0c2lkZVJlZ2lvblJhbmdlKCkp
CisgICAgaWYgKCFjaGlsZEJveC5jYW5IYXZlT3V0c2lkZUZyYWdtZW50UmFuZ2UoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2st
Pmhhc0NhY2hlZFJlZ2lvblJhbmdlRm9yQm94KHBhcmVudEJsb2NrKTsKKyAgICByZXR1cm4gZmxv
d1RocmVhZENvbnRhaW5pbmdCbG9jay0+aGFzQ2FjaGVkRnJhZ21lbnRSYW5nZUZvckJveChwYXJl
bnRCbG9jayk7CiB9CiAKIGJvb2wgUmVuZGVyQmxvY2s6OmNoaWxkQm94SXNVbnNwbGl0dGFibGVG
b3JGcmFnbWVudGF0aW9uKGNvbnN0IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0CkBAIC0zNDA3LDY3
ICszNDA3LDY3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmNoaWxkQm94SXNVbnNwbGl0dGFibGUKICAg
ICAgICAgfHwgKGNoZWNrUGFnZUJyZWFrcyAmJiBjaGlsZC5zdHlsZSgpLmJyZWFrSW5zaWRlKCkg
PT0gQXZvaWRQYWdlQnJlYWtJbnNpZGUpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpjb21wdXRl
UmVnaW9uUmFuZ2VGb3JCb3hDaGlsZChjb25zdCBSZW5kZXJCb3gmIGJveCkgY29uc3QKK3ZvaWQg
UmVuZGVyQmxvY2s6OmNvbXB1dGVGcmFnbWVudFJhbmdlRm9yQm94Q2hpbGQoY29uc3QgUmVuZGVy
Qm94JiBib3gpIGNvbnN0CiB7CiAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZs
b3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICBBU1NFUlQoY2FuQ29tcHV0ZVJlZ2lvblJh
bmdlRm9yQm94KCp0aGlzLCBib3gsIGZsb3dUaHJlYWQpKTsKKyAgICBBU1NFUlQoY2FuQ29tcHV0
ZUZyYWdtZW50UmFuZ2VGb3JCb3goKnRoaXMsIGJveCwgZmxvd1RocmVhZCkpOwogCi0gICAgUmVu
ZGVyUmVnaW9uKiBzdGFydFJlZ2lvbjsKLSAgICBSZW5kZXJSZWdpb24qIGVuZFJlZ2lvbjsKLSAg
ICBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFJlZ2lvbiA9IGJveC5vZmZz
ZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCk7CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWlu
ZXIqIHN0YXJ0RnJhZ21lbnQ7CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGVuZEZyYWdt
ZW50OworICAgIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0RnJhZ21lbnQg
PSBib3gub2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpOwogICAgIGlmIChjaGlsZEJv
eElzVW5zcGxpdHRhYmxlRm9yRnJhZ21lbnRhdGlvbihib3gpKQotICAgICAgICBzdGFydFJlZ2lv
biA9IGVuZFJlZ2lvbiA9IGZsb3dUaHJlYWQtPnJlZ2lvbkF0QmxvY2tPZmZzZXQodGhpcywgb2Zm
c2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uLCB0cnVlKTsKKyAgICAgICAgc3RhcnRGcmFn
bWVudCA9IGVuZEZyYWdtZW50ID0gZmxvd1RocmVhZC0+ZnJhZ21lbnRBdEJsb2NrT2Zmc2V0KHRo
aXMsIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdEZyYWdtZW50LCB0cnVlKTsKICAgICBlbHNl
IHsKLSAgICAgICAgc3RhcnRSZWdpb24gPSBmbG93VGhyZWFkLT5yZWdpb25BdEJsb2NrT2Zmc2V0
KHRoaXMsIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFJlZ2lvbiwgdHJ1ZSk7Ci0gICAgICAg
IGVuZFJlZ2lvbiA9IGZsb3dUaHJlYWQtPnJlZ2lvbkF0QmxvY2tPZmZzZXQodGhpcywgb2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uICsgbG9naWNhbEhlaWdodEZvckNoaWxkKGJveCks
IHRydWUpOworICAgICAgICBzdGFydEZyYWdtZW50ID0gZmxvd1RocmVhZC0+ZnJhZ21lbnRBdEJs
b2NrT2Zmc2V0KHRoaXMsIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdEZyYWdtZW50LCB0cnVl
KTsKKyAgICAgICAgZW5kRnJhZ21lbnQgPSBmbG93VGhyZWFkLT5mcmFnbWVudEF0QmxvY2tPZmZz
ZXQodGhpcywgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0RnJhZ21lbnQgKyBsb2dpY2FsSGVp
Z2h0Rm9yQ2hpbGQoYm94KSwgdHJ1ZSk7CiAgICAgfQogCi0gICAgZmxvd1RocmVhZC0+c2V0UmVn
aW9uUmFuZ2VGb3JCb3goYm94LCBzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKTsKKyAgICBmbG93VGhy
ZWFkLT5zZXRGcmFnbWVudFJhbmdlRm9yQm94KGJveCwgc3RhcnRGcmFnbWVudCwgZW5kRnJhZ21l
bnQpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjplc3RpbWF0ZVJlZ2lvblJhbmdlRm9yQm94Q2hp
bGQoY29uc3QgUmVuZGVyQm94JiBib3gpIGNvbnN0Cit2b2lkIFJlbmRlckJsb2NrOjplc3RpbWF0
ZUZyYWdtZW50UmFuZ2VGb3JCb3hDaGlsZChjb25zdCBSZW5kZXJCb3gmIGJveCkgY29uc3QKIHsK
ICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdC
bG9jaygpOwotICAgIGlmICghY2FuQ29tcHV0ZVJlZ2lvblJhbmdlRm9yQm94KCp0aGlzLCBib3gs
IGZsb3dUaHJlYWQpKQorICAgIGlmICghY2FuQ29tcHV0ZUZyYWdtZW50UmFuZ2VGb3JCb3goKnRo
aXMsIGJveCwgZmxvd1RocmVhZCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChjaGlsZEJv
eElzVW5zcGxpdHRhYmxlRm9yRnJhZ21lbnRhdGlvbihib3gpKSB7Ci0gICAgICAgIGNvbXB1dGVS
ZWdpb25SYW5nZUZvckJveENoaWxkKGJveCk7CisgICAgICAgIGNvbXB1dGVGcmFnbWVudFJhbmdl
Rm9yQm94Q2hpbGQoYm94KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGF1dG8gZXN0
aW1hdGVkVmFsdWVzID0gYm94LmNvbXB1dGVMb2dpY2FsSGVpZ2h0KFJlbmRlckZsb3dUaHJlYWQ6
Om1heExvZ2ljYWxIZWlnaHQoKSwgbG9naWNhbFRvcEZvckNoaWxkKGJveCkpOwotICAgIExheW91
dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uID0gYm94Lm9mZnNldEZyb21M
b2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKTsKLSAgICBSZW5kZXJSZWdpb24qIHN0YXJ0UmVnaW9uID0g
Zmxvd1RocmVhZC0+cmVnaW9uQXRCbG9ja09mZnNldCh0aGlzLCBvZmZzZXRGcm9tTG9naWNhbFRv
cE9mRmlyc3RSZWdpb24sIHRydWUpOwotICAgIFJlbmRlclJlZ2lvbiogZW5kUmVnaW9uID0gZmxv
d1RocmVhZC0+cmVnaW9uQXRCbG9ja09mZnNldCh0aGlzLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9m
Rmlyc3RSZWdpb24gKyBlc3RpbWF0ZWRWYWx1ZXMubV9leHRlbnQsIHRydWUpOworICAgIExheW91
dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0RnJhZ21lbnQgPSBib3gub2Zmc2V0RnJv
bUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpOworICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBz
dGFydEZyYWdtZW50ID0gZmxvd1RocmVhZC0+ZnJhZ21lbnRBdEJsb2NrT2Zmc2V0KHRoaXMsIG9m
ZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdEZyYWdtZW50LCB0cnVlKTsKKyAgICBSZW5kZXJGcmFn
bWVudENvbnRhaW5lciogZW5kRnJhZ21lbnQgPSBmbG93VGhyZWFkLT5mcmFnbWVudEF0QmxvY2tP
ZmZzZXQodGhpcywgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0RnJhZ21lbnQgKyBlc3RpbWF0
ZWRWYWx1ZXMubV9leHRlbnQsIHRydWUpOwogCi0gICAgZmxvd1RocmVhZC0+c2V0UmVnaW9uUmFu
Z2VGb3JCb3goYm94LCBzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKTsKKyAgICBmbG93VGhyZWFkLT5z
ZXRGcmFnbWVudFJhbmdlRm9yQm94KGJveCwgc3RhcnRGcmFnbWVudCwgZW5kRnJhZ21lbnQpOwog
fQogCi1ib29sIFJlbmRlckJsb2NrOjp1cGRhdGVSZWdpb25SYW5nZUZvckJveENoaWxkKGNvbnN0
IFJlbmRlckJveCYgYm94KSBjb25zdAorYm9vbCBSZW5kZXJCbG9jazo6dXBkYXRlRnJhZ21lbnRS
YW5nZUZvckJveENoaWxkKGNvbnN0IFJlbmRlckJveCYgYm94KSBjb25zdAogewogICAgIFJlbmRl
ckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7Ci0g
ICAgaWYgKCFjYW5Db21wdXRlUmVnaW9uUmFuZ2VGb3JCb3goKnRoaXMsIGJveCwgZmxvd1RocmVh
ZCkpCisgICAgaWYgKCFjYW5Db21wdXRlRnJhZ21lbnRSYW5nZUZvckJveCgqdGhpcywgYm94LCBm
bG93VGhyZWFkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVuZGVyUmVnaW9uKiBz
dGFydFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgUmVuZGVyUmVnaW9uKiBlbmRSZWdpb24gPSBudWxs
cHRyOwotICAgIGZsb3dUaHJlYWQtPmdldFJlZ2lvblJhbmdlRm9yQm94KCZib3gsIHN0YXJ0UmVn
aW9uLCBlbmRSZWdpb24pOworICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBzdGFydEZyYWdt
ZW50ID0gbnVsbHB0cjsKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZW5kRnJhZ21lbnQg
PSBudWxscHRyOworICAgIGZsb3dUaHJlYWQtPmdldEZyYWdtZW50UmFuZ2VGb3JCb3goJmJveCwg
c3RhcnRGcmFnbWVudCwgZW5kRnJhZ21lbnQpOwogCi0gICAgY29tcHV0ZVJlZ2lvblJhbmdlRm9y
Qm94Q2hpbGQoYm94KTsKKyAgICBjb21wdXRlRnJhZ21lbnRSYW5nZUZvckJveENoaWxkKGJveCk7
CiAKLSAgICBSZW5kZXJSZWdpb24qIG5ld1N0YXJ0UmVnaW9uID0gbnVsbHB0cjsKLSAgICBSZW5k
ZXJSZWdpb24qIG5ld0VuZFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgZmxvd1RocmVhZC0+Z2V0UmVn
aW9uUmFuZ2VGb3JCb3goJmJveCwgbmV3U3RhcnRSZWdpb24sIG5ld0VuZFJlZ2lvbik7CisgICAg
UmVuZGVyRnJhZ21lbnRDb250YWluZXIqIG5ld1N0YXJ0RnJhZ21lbnQgPSBudWxscHRyOworICAg
IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBuZXdFbmRGcmFnbWVudCA9IG51bGxwdHI7CisgICAg
Zmxvd1RocmVhZC0+Z2V0RnJhZ21lbnRSYW5nZUZvckJveCgmYm94LCBuZXdTdGFydEZyYWdtZW50
LCBuZXdFbmRGcmFnbWVudCk7CiAKIAotICAgIC8vIENoYW5naW5nIHRoZSBzdGFydCByZWdpb24g
bWVhbnMgd2Ugc2hpZnQgZXZlcnl0aGluZyBhbmQgYSByZWxheW91dCBpcyBuZWVkZWQuCi0gICAg
aWYgKG5ld1N0YXJ0UmVnaW9uICE9IHN0YXJ0UmVnaW9uKQorICAgIC8vIENoYW5naW5nIHRoZSBz
dGFydCBmcmFnbWVudCBtZWFucyB3ZSBzaGlmdCBldmVyeXRoaW5nIGFuZCBhIHJlbGF5b3V0IGlz
IG5lZWRlZC4KKyAgICBpZiAobmV3U3RhcnRGcmFnbWVudCAhPSBzdGFydEZyYWdtZW50KQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIC8vIFRoZSByZWdpb24gcmFuZ2Ugb2YgdGhlIGJveCBo
YXMgY2hhbmdlZC4gU29tZSBib3hlcyAoZS5nIGZsb2F0cykgbWF5IGhhdmUgYmVlbiBwb3NpdGlv
bmVkIGFzc3VtaW5nCisgICAgLy8gVGhlIGZyYWdtZW50IHJhbmdlIG9mIHRoZSBib3ggaGFzIGNo
YW5nZWQuIFNvbWUgYm94ZXMgKGUuZyBmbG9hdHMpIG1heSBoYXZlIGJlZW4gcG9zaXRpb25lZCBh
c3N1bWluZwogICAgIC8vIGEgZGlmZmVyZW50IHJhbmdlLgotICAgIGlmIChib3gubmVlZHNMYXlv
dXRBZnRlclJlZ2lvblJhbmdlQ2hhbmdlKCkgJiYgbmV3RW5kUmVnaW9uICE9IGVuZFJlZ2lvbikK
KyAgICBpZiAoYm94Lm5lZWRzTGF5b3V0QWZ0ZXJGcmFnbWVudFJhbmdlQ2hhbmdlKCkgJiYgbmV3
RW5kRnJhZ21lbnQgIT0gZW5kRnJhZ21lbnQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAg
cmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJ
KHJldmlzaW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsMzUgKzEyMiwzNSBAQCBwdWJsaWM6CiAgICAgLy8g
RklYTUUtQkxPQ0tGTE9XOiBSZW1vdmUgdmlydHVhbGl6YWlvbiB3aGVuIGFsbCBvZiB0aGUgbGlu
ZSBsYXlvdXQgY29kZSBoYXMgYmVlbiBtb3ZlZCBvdXQgb2YgUmVuZGVyQmxvY2sKICAgICB2aXJ0
dWFsIGJvb2wgY29udGFpbnNGbG9hdHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAg
Ly8gVmVyc2lvbnMgdGhhdCBjYW4gY29tcHV0ZSBsaW5lIG9mZnNldHMgd2l0aCB0aGUgcmVnaW9u
IGFuZCBwYWdlIG9mZnNldCBwYXNzZWQgaW4uIFVzZWQgZm9yIHNwZWVkIHRvIGF2b2lkIGhhdmlu
ZyB0bwotICAgIC8vIGNvbXB1dGUgdGhlIHJlZ2lvbiBhbGwgb3ZlciBhZ2FpbiB3aGVuIHlvdSBh
bHJlYWR5IGtub3cgaXQuCi0gICAgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JM
aW5lSW5SZWdpb24oTGF5b3V0VW5pdCBwb3NpdGlvbiwgSW5kZW50VGV4dE9yTm90IHNob3VsZElu
ZGVudFRleHQsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQg
PSAwKSBjb25zdAorICAgIC8vIFZlcnNpb25zIHRoYXQgY2FuIGNvbXB1dGUgbGluZSBvZmZzZXRz
IHdpdGggdGhlIGZyYWdtZW50IGFuZCBwYWdlIG9mZnNldCBwYXNzZWQgaW4uIFVzZWQgZm9yIHNw
ZWVkIHRvIGF2b2lkIGhhdmluZyB0bworICAgIC8vIGNvbXB1dGUgdGhlIGZyYWdtZW50IGFsbCBv
dmVyIGFnYWluIHdoZW4geW91IGFscmVhZHkga25vdyBpdC4KKyAgICBMYXlvdXRVbml0IGF2YWls
YWJsZUxvZ2ljYWxXaWR0aEZvckxpbmVJbkZyYWdtZW50KExheW91dFVuaXQgcG9zaXRpb24sIElu
ZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0LCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciog
ZnJhZ21lbnQsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDApIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gc3RkOjptYXg8TGF5b3V0VW5pdD4oMCwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9y
TGluZUluUmVnaW9uKHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCByZWdpb24sIGxvZ2ljYWxI
ZWlnaHQpCi0gICAgICAgICAgICAtIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZUluUmVnaW9uKHBv
c2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCByZWdpb24sIGxvZ2ljYWxIZWlnaHQpKTsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIGxvZ2ljYWxSaWdodE9mZnNldEZvckxp
bmVJbkZyYWdtZW50KHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCBmcmFnbWVudCwgbG9naWNh
bEhlaWdodCkKKyAgICAgICAgICAgIC0gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lSW5GcmFnbWVu
dChwb3NpdGlvbiwgc2hvdWxkSW5kZW50VGV4dCwgZnJhZ21lbnQsIGxvZ2ljYWxIZWlnaHQpKTsK
ICAgICB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lSW5SZWdpb24o
TGF5b3V0VW5pdCBwb3NpdGlvbiwgSW5kZW50VGV4dE9yTm90IHNob3VsZEluZGVudFRleHQsIFJl
bmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwKSBjb25zdAor
ICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZUluRnJhZ21lbnQoTGF5b3V0
VW5pdCBwb3NpdGlvbiwgSW5kZW50VGV4dE9yTm90IHNob3VsZEluZGVudFRleHQsIFJlbmRlckZy
YWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKHBv
c2l0aW9uLCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbiksIHNob3VsZEluZGVu
dFRleHQsIGxvZ2ljYWxIZWlnaHQpOworICAgICAgICByZXR1cm4gbG9naWNhbFJpZ2h0T2Zmc2V0
Rm9yTGluZShwb3NpdGlvbiwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChmcmFnbWVudCks
IHNob3VsZEluZGVudFRleHQsIGxvZ2ljYWxIZWlnaHQpOwogICAgIH0KLSAgICBMYXlvdXRVbml0
IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZUluUmVnaW9uKExheW91dFVuaXQgcG9zaXRpb24sIElu
ZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0LCBSZW5kZXJSZWdpb24qIHJlZ2lvbiwgTGF5
b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCkgY29uc3QKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yTGluZUluRnJhZ21lbnQoTGF5b3V0VW5pdCBwb3NpdGlvbiwgSW5kZW50VGV4
dE9yTm90IHNob3VsZEluZGVudFRleHQsIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVu
dCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUocG9zaXRpb24sIGxvZ2ljYWxMZWZ0T2Zmc2V0
Rm9yQ29udGVudChyZWdpb24pLCBzaG91bGRJbmRlbnRUZXh0LCBsb2dpY2FsSGVpZ2h0KTsKKyAg
ICAgICAgcmV0dXJuIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgbG9naWNhbExl
ZnRPZmZzZXRGb3JDb250ZW50KGZyYWdtZW50KSwgc2hvdWxkSW5kZW50VGV4dCwgbG9naWNhbEhl
aWdodCk7CiAgICAgfQotICAgIExheW91dFVuaXQgc3RhcnRPZmZzZXRGb3JMaW5lSW5SZWdpb24o
TGF5b3V0VW5pdCBwb3NpdGlvbiwgSW5kZW50VGV4dE9yTm90IHNob3VsZEluZGVudFRleHQsIFJl
bmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwKSBjb25zdAor
ICAgIExheW91dFVuaXQgc3RhcnRPZmZzZXRGb3JMaW5lSW5GcmFnbWVudChMYXlvdXRVbml0IHBv
c2l0aW9uLCBJbmRlbnRUZXh0T3JOb3Qgc2hvdWxkSW5kZW50VGV4dCwgUmVuZGVyRnJhZ21lbnRD
b250YWluZXIqIGZyYWdtZW50LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
bG9naWNhbExlZnRPZmZzZXRGb3JMaW5lSW5SZWdpb24ocG9zaXRpb24sIHNob3VsZEluZGVudFRl
eHQsIHJlZ2lvbiwgbG9naWNhbEhlaWdodCkKLSAgICAgICAgICAgIDogbG9naWNhbFdpZHRoKCkg
LSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lSW5SZWdpb24ocG9zaXRpb24sIHNob3VsZEluZGVu
dFRleHQsIHJlZ2lvbiwgbG9naWNhbEhlaWdodCk7CisgICAgICAgIHJldHVybiBzdHlsZSgpLmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZUluRnJhZ21l
bnQocG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIGZyYWdtZW50LCBsb2dpY2FsSGVpZ2h0KQor
ICAgICAgICAgICAgOiBsb2dpY2FsV2lkdGgoKSAtIGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmVJ
bkZyYWdtZW50KHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCBmcmFnbWVudCwgbG9naWNhbEhl
aWdodCk7CiAgICAgfQotICAgIExheW91dFVuaXQgZW5kT2Zmc2V0Rm9yTGluZUluUmVnaW9uKExh
eW91dFVuaXQgcG9zaXRpb24sIEluZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0LCBSZW5k
ZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCkgY29uc3QKKyAg
ICBMYXlvdXRVbml0IGVuZE9mZnNldEZvckxpbmVJbkZyYWdtZW50KExheW91dFVuaXQgcG9zaXRp
b24sIEluZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0LCBSZW5kZXJGcmFnbWVudENvbnRh
aW5lciogZnJhZ21lbnQsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDApIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbG9n
aWNhbExlZnRPZmZzZXRGb3JMaW5lSW5SZWdpb24ocG9zaXRpb24sIHNob3VsZEluZGVudFRleHQs
IHJlZ2lvbiwgbG9naWNhbEhlaWdodCkKLSAgICAgICAgICAgIDogbG9naWNhbFdpZHRoKCkgLSBs
b2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lSW5SZWdpb24ocG9zaXRpb24sIHNob3VsZEluZGVudFRl
eHQsIHJlZ2lvbiwgbG9naWNhbEhlaWdodCk7CisgICAgICAgIHJldHVybiAhc3R5bGUoKS5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmVJbkZyYWdtZW50
KHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCBmcmFnbWVudCwgbG9naWNhbEhlaWdodCkKKyAg
ICAgICAgICAgIDogbG9naWNhbFdpZHRoKCkgLSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lSW5G
cmFnbWVudChwb3NpdGlvbiwgc2hvdWxkSW5kZW50VGV4dCwgZnJhZ21lbnQsIGxvZ2ljYWxIZWln
aHQpOwogICAgIH0KIAogICAgIExheW91dFVuaXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yTGlu
ZShMYXlvdXRVbml0IHBvc2l0aW9uLCBJbmRlbnRUZXh0T3JOb3Qgc2hvdWxkSW5kZW50VGV4dCwg
TGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lSW5SZWdpb24ocG9zaXRpb24sIHNob3VsZElu
ZGVudFRleHQsIHJlZ2lvbkF0QmxvY2tPZmZzZXQocG9zaXRpb24pLCBsb2dpY2FsSGVpZ2h0KTsK
KyAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmVJbkZyYWdtZW50KHBv
c2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCBmcmFnbWVudEF0QmxvY2tPZmZzZXQocG9zaXRpb24p
LCBsb2dpY2FsSGVpZ2h0KTsKICAgICB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZz
ZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIEluZGVudFRleHRPck5vdCBzaG91bGRJbmRl
bnRUZXh0LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwKSBjb25zdAogICAgIHsKQEAgLTE3
Myw3ICsxNzMsNyBAQCBwdWJsaWM6CiAKICAgICBMYXlvdXRVbml0IHRleHRJbmRlbnRPZmZzZXQo
KSBjb25zdDsKIAotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExh
eW91dFBvaW50JiwgY29uc3QgUmVuZGVyUmVnaW9uKikgb3ZlcnJpZGU7CisgICAgVmlzaWJsZVBv
c2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJG
cmFnbWVudENvbnRhaW5lciopIG92ZXJyaWRlOwogCiAgICAgR2FwUmVjdHMgc2VsZWN0aW9uR2Fw
UmVjdHNGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250
YWluZXIpOwogICAgIExheW91dFJlY3QgbG9naWNhbExlZnRTZWxlY3Rpb25HYXAoUmVuZGVyQmxv
Y2smIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRp
b24sIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCkBAIC0yNjcsMzkgKzI2
NywzOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYmFyc0NoYW5nZWQoYm9v
bCAvKmhvcml6b250YWxTY3JvbGxiYXJDaGFuZ2VkKi8sIGJvb2wgLyp2ZXJ0aWNhbFNjcm9sbGJh
ckNoYW5nZWQqLykgeyB9CiAKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29u
dGVudChSZW5kZXJSZWdpb24qKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodE9m
ZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKikgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBhdmFp
bGFibGVMb2dpY2FsV2lkdGhGb3JDb250ZW50KFJlbmRlclJlZ2lvbiogcmVnaW9uKSBjb25zdAor
ICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KFJlbmRlckZyYWdtZW50
Q29udGFpbmVyKikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JD
b250ZW50KFJlbmRlckZyYWdtZW50Q29udGFpbmVyKikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBh
dmFpbGFibGVMb2dpY2FsV2lkdGhGb3JDb250ZW50KFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBm
cmFnbWVudCkgY29uc3QKICAgICB7IAotICAgICAgICByZXR1cm4gc3RkOjptYXg8TGF5b3V0VW5p
dD4oMCwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24pIC0gbG9naWNhbExlZnRP
ZmZzZXRGb3JDb250ZW50KHJlZ2lvbikpOworICAgICAgICByZXR1cm4gc3RkOjptYXg8TGF5b3V0
VW5pdD4oMCwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChmcmFnbWVudCkgLSBsb2dpY2Fs
TGVmdE9mZnNldEZvckNvbnRlbnQoZnJhZ21lbnQpKTsKICAgICB9Ci0gICAgTGF5b3V0VW5pdCBz
dGFydE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiByZWdpb24pIGNvbnN0CisgICAgTGF5
b3V0VW5pdCBzdGFydE9mZnNldEZvckNvbnRlbnQoUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZy
YWdtZW50KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0eWxlKCkuaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpID8gbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbikgOiBsb2dp
Y2FsV2lkdGgoKSAtIGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQocmVnaW9uKTsKKyAgICAg
ICAgcmV0dXJuIHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbG9naWNhbExlZnRP
ZmZzZXRGb3JDb250ZW50KGZyYWdtZW50KSA6IGxvZ2ljYWxXaWR0aCgpIC0gbG9naWNhbFJpZ2h0
T2Zmc2V0Rm9yQ29udGVudChmcmFnbWVudCk7CiAgICAgfQotICAgIExheW91dFVuaXQgZW5kT2Zm
c2V0Rm9yQ29udGVudChSZW5kZXJSZWdpb24qIHJlZ2lvbikgY29uc3QKKyAgICBMYXlvdXRVbml0
IGVuZE9mZnNldEZvckNvbnRlbnQoUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50KSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSA/IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24pIDogbG9naWNhbFdpZHRo
KCkgLSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbik7CisgICAgICAgIHJldHVy
biAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBsb2dpY2FsTGVmdE9mZnNldEZv
ckNvbnRlbnQoZnJhZ21lbnQpIDogbG9naWNhbFdpZHRoKCkgLSBsb2dpY2FsUmlnaHRPZmZzZXRG
b3JDb250ZW50KGZyYWdtZW50KTsKICAgICB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9m
ZnNldEZvckNvbnRlbnQoTGF5b3V0VW5pdCBibG9ja09mZnNldCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQocmVnaW9uQXRCbG9ja09mZnNl
dChibG9ja09mZnNldCkpOworICAgICAgICByZXR1cm4gbG9naWNhbExlZnRPZmZzZXRGb3JDb250
ZW50KGZyYWdtZW50QXRCbG9ja09mZnNldChibG9ja09mZnNldCkpOwogICAgIH0KICAgICBMYXlv
dXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQoTGF5b3V0VW5pdCBibG9ja09mZnNl
dCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250
ZW50KHJlZ2lvbkF0QmxvY2tPZmZzZXQoYmxvY2tPZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIGxv
Z2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQoZnJhZ21lbnRBdEJsb2NrT2Zmc2V0KGJsb2NrT2Zm
c2V0KSk7CiAgICAgfQogICAgIExheW91dFVuaXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yQ29u
dGVudChMYXlvdXRVbml0IGJsb2NrT2Zmc2V0KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckNvbnRlbnQocmVnaW9uQXRCbG9ja09mZnNldChibG9j
a09mZnNldCkpOworICAgICAgICByZXR1cm4gYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yQ29udGVu
dChmcmFnbWVudEF0QmxvY2tPZmZzZXQoYmxvY2tPZmZzZXQpKTsKICAgICB9CiAgICAgTGF5b3V0
VW5pdCBzdGFydE9mZnNldEZvckNvbnRlbnQoTGF5b3V0VW5pdCBibG9ja09mZnNldCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBzdGFydE9mZnNldEZvckNvbnRlbnQocmVnaW9uQXRCbG9j
a09mZnNldChibG9ja09mZnNldCkpOworICAgICAgICByZXR1cm4gc3RhcnRPZmZzZXRGb3JDb250
ZW50KGZyYWdtZW50QXRCbG9ja09mZnNldChibG9ja09mZnNldCkpOwogICAgIH0KICAgICBMYXlv
dXRVbml0IGVuZE9mZnNldEZvckNvbnRlbnQoTGF5b3V0VW5pdCBibG9ja09mZnNldCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBlbmRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbkF0QmxvY2tP
ZmZzZXQoYmxvY2tPZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIGVuZE9mZnNldEZvckNvbnRlbnQo
ZnJhZ21lbnRBdEJsb2NrT2Zmc2V0KGJsb2NrT2Zmc2V0KSk7CiAgICAgfQogICAgIExheW91dFVu
aXQgbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkgOiBib3JkZXJU
b3AoKSArIHBhZGRpbmdUb3AoKTsgfQogICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0T2Zmc2V0
Rm9yQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgp
ICsgYXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7IH0KQEAgLTMwOSw3ICszMDksNyBAQCBwdWJsaWM6
CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldChSZW5kZXJCbG9jayYg
cm9vdEJsb2NrLCBMYXlvdXRVbml0IHBvc2l0aW9uLCBjb25zdCBMb2dpY2FsU2VsZWN0aW9uT2Zm
c2V0Q2FjaGVzJik7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQo
UmVuZGVyQmxvY2smIHJvb3RCbG9jaywgTGF5b3V0VW5pdCBwb3NpdGlvbiwgY29uc3QgTG9naWNh
bFNlbGVjdGlvbk9mZnNldENhY2hlcyYpOwogCi0gICAgTGF5b3V0VW5pdCBjb21wdXRlU3RhcnRQ
b3NpdGlvbkRlbHRhRm9yQ2hpbGRBdm9pZGluZ0Zsb2F0cyhjb25zdCBSZW5kZXJCb3gmIGNoaWxk
LCBMYXlvdXRVbml0IGNoaWxkTWFyZ2luU3RhcnQsIFJlbmRlclJlZ2lvbiogPSAwKTsKKyAgICBM
YXlvdXRVbml0IGNvbXB1dGVTdGFydFBvc2l0aW9uRGVsdGFGb3JDaGlsZEF2b2lkaW5nRmxvYXRz
KGNvbnN0IFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgY2hpbGRNYXJnaW5TdGFydCwgUmVu
ZGVyRnJhZ21lbnRDb250YWluZXIqID0gMCk7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCBj
aGVja1Bvc2l0aW9uZWRPYmplY3RzTmVlZExheW91dCgpOwpAQCAtNDE0LDEwICs0MTQsMTAgQEAg
cHJvdGVjdGVkOgogICAgIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+
JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFkZGl0aW9uYWxPZmZzZXQsIGNvbnN0IFJlbmRlckxheWVy
TW9kZWxPYmplY3QqIHBhaW50Q29udGFpbmVyID0gMCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2
b2lkIGFkZEZvY3VzUmluZ1JlY3RzRm9ySW5saW5lQ2hpbGRyZW4oVmVjdG9yPExheW91dFJlY3Q+
JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFkZGl0aW9uYWxPZmZzZXQsIGNvbnN0IFJlbmRlckxheWVy
TW9kZWxPYmplY3QqIHBhaW50Q29udGFpbmVyKTsKIAotICAgIHZvaWQgY29tcHV0ZVJlZ2lvblJh
bmdlRm9yQm94Q2hpbGQoY29uc3QgUmVuZGVyQm94JikgY29uc3Q7CisgICAgdm9pZCBjb21wdXRl
RnJhZ21lbnRSYW5nZUZvckJveENoaWxkKGNvbnN0IFJlbmRlckJveCYpIGNvbnN0OwogCi0gICAg
dm9pZCBlc3RpbWF0ZVJlZ2lvblJhbmdlRm9yQm94Q2hpbGQoY29uc3QgUmVuZGVyQm94JikgY29u
c3Q7Ci0gICAgYm9vbCB1cGRhdGVSZWdpb25SYW5nZUZvckJveENoaWxkKGNvbnN0IFJlbmRlckJv
eCYpIGNvbnN0OworICAgIHZvaWQgZXN0aW1hdGVGcmFnbWVudFJhbmdlRm9yQm94Q2hpbGQoY29u
c3QgUmVuZGVyQm94JikgY29uc3Q7CisgICAgYm9vbCB1cGRhdGVGcmFnbWVudFJhbmdlRm9yQm94
Q2hpbGQoY29uc3QgUmVuZGVyQm94JikgY29uc3Q7CiAKICAgICB2b2lkIHVwZGF0ZUJsb2NrQ2hp
bGREaXJ0eUJpdHNCZWZvcmVMYXlvdXQoYm9vbCByZWxheW91dENoaWxkcmVuLCBSZW5kZXJCb3gm
KTsKIApAQCAtNTA2LDcgKzUwNiw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0UmVjdCBsb2NhbENh
cmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0
cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCkgZmluYWw7CiAgICAgCiAgICAgLy8gRklYTUUtQkxPQ0tG
TE9XOiBSZW1vdmUgdmlydHVhbGl6YWlvbiB3aGVuIGFsbCBjYWxsZXJzIGhhdmUgbW92ZWQgdG8g
UmVuZGVyQmxvY2tGbG93Ci0gICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQ
b2ludFdpdGhJbmxpbmVDaGlsZHJlbihjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlclJl
Z2lvbiopOworICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnRXaXRo
SW5saW5lQ2hpbGRyZW4oY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJGcmFnbWVudENv
bnRhaW5lciopOwogCiAgICAgUmVuZGVyUHRyPFJlbmRlckJsb2NrPiBjbG9uZSgpIGNvbnN0Owog
ICAgIFJlbmRlckJsb2NrKiBjb250aW51YXRpb25CZWZvcmUoUmVuZGVyT2JqZWN0KiBiZWZvcmVD
aGlsZCk7CkBAIC01MjYsNyArNTI2LDcgQEAgcHJvdGVjdGVkOgogICAgIAogcHVibGljOgogICAg
IExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIGNvbnN0IG92ZXJy
aWRlOwotICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uQXRCbG9ja09mZnNldChMYXlvdXRVbml0KSBj
b25zdDsKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnRBdEJsb2NrT2Zmc2V0
KExheW91dFVuaXQpIGNvbnN0OwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5IHRv
IGFsbG93IHVzIHRvIG1vdmUgY29kZSBmcm9tIFJlbmRlckJsb2NrIGludG8gUmVuZGVyQmxvY2tG
bG93IHRoYXQgYWNjZXNzZXMgbWVtYmVyIHZhcmlhYmxlcyB0aGF0IHdlIGhhdmVuJ3QgbW92ZWQg
b3V0IG9mCiAgICAgLy8gUmVuZGVyQmxvY2sgeWV0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAJKHJldmlzaW9uIDIyMjQ2MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MzYsNyArNTM2LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dEJsb2NrKGJvb2wg
cgogICAgIExheW91dFVuaXQgb2xkQ2xpZW50QWZ0ZXJFZGdlID0gY2xpZW50TG9naWNhbEJvdHRv
bSgpOwogCiAgICAgLy8gQmVmb3JlIHVwZGF0aW5nIHRoZSBmaW5hbCBzaXplIG9mIHRoZSBmbG93
IHRocmVhZCBtYWtlIHN1cmUgYSBmb3JjZWQgYnJlYWsgaXMgYXBwbGllZCBhZnRlciB0aGUgY29u
dGVudC4KLSAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIHNpemUgaW5mb3JtYXRpb24gaXMgY29ycmVj
dGx5IGNvbXB1dGVkIGZvciB0aGUgbGFzdCBhdXRvLWhlaWdodCByZWdpb24gcmVjZWl2aW5nIGNv
bnRlbnQuCisgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBzaXplIGluZm9ybWF0aW9uIGlzIGNvcnJl
Y3RseSBjb21wdXRlZCBmb3IgdGhlIGxhc3QgYXV0by1oZWlnaHQgZnJhZ21lbnQgcmVjZWl2aW5n
IGNvbnRlbnQuCiAgICAgaWYgKGlzPFJlbmRlckZsb3dUaHJlYWQ+KCp0aGlzKSkKICAgICAgICAg
ZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4oKnRoaXMpLmFwcGx5QnJlYWtBZnRlckNvbnRlbnQo
b2xkQ2xpZW50QWZ0ZXJFZGdlKTsKIApAQCAtNzA5LDcgKzcwOSw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2tGbG93OjpsYXlvdXRCbG9ja0NoaWxkKFIKICNlbmRpZgogICAgIC8vIFBvc2l0aW9uIHRoZSBj
aGlsZCBhcyB0aG91Z2ggaXQgZGlkbid0IGNvbGxhcHNlIHdpdGggdGhlIHRvcC4KICAgICBzZXRM
b2dpY2FsVG9wRm9yQ2hpbGQoY2hpbGQsIGxvZ2ljYWxUb3BFc3RpbWF0ZSwgQXBwbHlMYXlvdXRE
ZWx0YSk7Ci0gICAgZXN0aW1hdGVSZWdpb25SYW5nZUZvckJveENoaWxkKGNoaWxkKTsKKyAgICBl
c3RpbWF0ZUZyYWdtZW50UmFuZ2VGb3JCb3hDaGlsZChjaGlsZCk7CiAKICAgICBSZW5kZXJCbG9j
a0Zsb3cqIGNoaWxkQmxvY2tGbG93ID0gaXM8UmVuZGVyQmxvY2tGbG93PihjaGlsZCkgPyAmZG93
bmNhc3Q8UmVuZGVyQmxvY2tGbG93PihjaGlsZCkgOiBudWxscHRyOwogICAgIGJvb2wgbWFya0Rl
c2NlbmRhbnRzV2l0aEZsb2F0cyA9IGZhbHNlOwpAQCAtNzc2LDcgKzc3Niw3IEBAIHZvaWQgUmVu
ZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxkKFIKICAgICAgICAgfQogICAgIH0KIAotICAg
IGlmICh1cGRhdGVSZWdpb25SYW5nZUZvckJveENoaWxkKGNoaWxkKSkKKyAgICBpZiAodXBkYXRl
RnJhZ21lbnRSYW5nZUZvckJveENoaWxkKGNoaWxkKSkKICAgICAgICAgY2hpbGQuc2V0TmVlZHNM
YXlvdXQoTWFya09ubHlUaGlzKTsKIAogICAgIC8vIEluIGNhc2Ugb3VyIGd1ZXNzIHdhcyB3cm9u
ZywgcmVsYXlvdXQgdGhlIGNoaWxkLgpAQCAtOTEzLDcgKzkxMyw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2tGbG93Ojp1cGRhdGVTdGF0aWNJbmxpbmUKIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpzZXRTdGF0
aWNJbmxpbmVQb3NpdGlvbkZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgYmxv
Y2tPZmZzZXQsIExheW91dFVuaXQgaW5saW5lUG9zaXRpb24pCiB7CiAgICAgaWYgKGZsb3dUaHJl
YWRDb250YWluaW5nQmxvY2soKSkgewotICAgICAgICAvLyBTaGlmdCB0aGUgaW5saW5lIHBvc2l0
aW9uIHRvIGV4Y2x1ZGUgdGhlIHJlZ2lvbiBvZmZzZXQuCisgICAgICAgIC8vIFNoaWZ0IHRoZSBp
bmxpbmUgcG9zaXRpb24gdG8gZXhjbHVkZSB0aGUgZnJhZ21lbnQgb2Zmc2V0LgogICAgICAgICBp
bmxpbmVQb3NpdGlvbiArPSBzdGFydE9mZnNldEZvckNvbnRlbnQoKSAtIHN0YXJ0T2Zmc2V0Rm9y
Q29udGVudChibG9ja09mZnNldCk7CiAgICAgfQogICAgIGNoaWxkLmxheWVyKCktPnNldFN0YXRp
Y0lubGluZVBvc2l0aW9uKGlubGluZVBvc2l0aW9uKTsKQEAgLTE1MTEsMTcgKzE1MTEsMTcgQEAg
TGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmFwcGx5QmVmb3JlQgogICAgIGJvb2wgaXNJbnNp
ZGVNdWx0aWNvbEZsb3dUaHJlYWQgPSBmbG93VGhyZWFkOwogICAgIGJvb2wgY2hlY2tDb2x1bW5C
cmVha3MgPSBmbG93VGhyZWFkICYmIGZsb3dUaHJlYWQtPnNob3VsZENoZWNrQ29sdW1uQnJlYWtz
KCk7CiAgICAgYm9vbCBjaGVja1BhZ2VCcmVha3MgPSAhY2hlY2tDb2x1bW5CcmVha3MgJiYgdmll
dygpLmxheW91dFN0YXRlKCktPm1fcGFnZUxvZ2ljYWxIZWlnaHQ7IC8vIEZJWE1FOiBPbmNlIGNv
bHVtbnMgY2FuIHByaW50IHdlIGhhdmUgdG8gY2hlY2sgdGhpcy4KLSAgICBib29sIGNoZWNrUmVn
aW9uQnJlYWtzID0gZmFsc2U7CisgICAgYm9vbCBjaGVja0ZyYWdtZW50QnJlYWtzID0gZmFsc2U7
CiAgICAgYm9vbCBjaGVja0JlZm9yZUFsd2F5cyA9IChjaGVja0NvbHVtbkJyZWFrcyAmJiBjaGls
ZC5zdHlsZSgpLmJyZWFrQmVmb3JlKCkgPT0gQ29sdW1uQnJlYWtCZXR3ZWVuKQogICAgICAgICB8
fCAoY2hlY2tQYWdlQnJlYWtzICYmIGFsd2F5c1BhZ2VCcmVhayhjaGlsZC5zdHlsZSgpLmJyZWFr
QmVmb3JlKCkpKTsKICAgICBpZiAoY2hlY2tCZWZvcmVBbHdheXMgJiYgaW5Ob3JtYWxGbG93KGNo
aWxkKSAmJiBoYXNOZXh0UGFnZShsb2dpY2FsT2Zmc2V0LCBJbmNsdWRlUGFnZUJvdW5kYXJ5KSkg
ewogICAgICAgICBpZiAoY2hlY2tDb2x1bW5CcmVha3MpIHsKICAgICAgICAgICAgIGlmIChpc0lu
c2lkZU11bHRpY29sRmxvd1RocmVhZCkKLSAgICAgICAgICAgICAgICBjaGVja1JlZ2lvbkJyZWFr
cyA9IHRydWU7CisgICAgICAgICAgICAgICAgY2hlY2tGcmFnbWVudEJyZWFrcyA9IHRydWU7CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKGNoZWNrUmVnaW9uQnJlYWtzKSB7CisgICAgICAgIGlmIChj
aGVja0ZyYWdtZW50QnJlYWtzKSB7CiAgICAgICAgICAgICBMYXlvdXRVbml0IG9mZnNldEJyZWFr
QWRqdXN0bWVudCA9IDA7Ci0gICAgICAgICAgICBpZiAoZmxvd1RocmVhZC0+YWRkRm9yY2VkUmVn
aW9uQnJlYWsodGhpcywgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpICsgbG9naWNh
bE9mZnNldCwgJmNoaWxkLCB0cnVlLCAmb2Zmc2V0QnJlYWtBZGp1c3RtZW50KSkKKyAgICAgICAg
ICAgIGlmIChmbG93VGhyZWFkLT5hZGRGb3JjZWRGcmFnbWVudEJyZWFrKHRoaXMsIG9mZnNldEZy
b21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSArIGxvZ2ljYWxPZmZzZXQsICZjaGlsZCwgdHJ1ZSwg
Jm9mZnNldEJyZWFrQWRqdXN0bWVudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGxvZ2ljYWxP
ZmZzZXQgKyBvZmZzZXRCcmVha0FkanVzdG1lbnQ7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IG5leHRQYWdlTG9naWNhbFRvcChsb2dpY2FsT2Zmc2V0LCBJbmNsdWRlUGFnZUJvdW5kYXJ5KTsK
QEAgLTE1MzYsNyArMTUzNiw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93OjphcHBseUFm
dGVyQnIKICAgICBib29sIGlzSW5zaWRlTXVsdGljb2xGbG93VGhyZWFkID0gZmxvd1RocmVhZDsK
ICAgICBib29sIGNoZWNrQ29sdW1uQnJlYWtzID0gZmxvd1RocmVhZCAmJiBmbG93VGhyZWFkLT5z
aG91bGRDaGVja0NvbHVtbkJyZWFrcygpOwogICAgIGJvb2wgY2hlY2tQYWdlQnJlYWtzID0gIWNo
ZWNrQ29sdW1uQnJlYWtzICYmIHZpZXcoKS5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VMb2dpY2FsSGVp
Z2h0OyAvLyBGSVhNRTogT25jZSBjb2x1bW5zIGNhbiBwcmludCB3ZSBoYXZlIHRvIGNoZWNrIHRo
aXMuCi0gICAgYm9vbCBjaGVja1JlZ2lvbkJyZWFrcyA9IGZhbHNlOworICAgIGJvb2wgY2hlY2tG
cmFnbWVudEJyZWFrcyA9IGZhbHNlOwogICAgIGJvb2wgY2hlY2tBZnRlckFsd2F5cyA9IChjaGVj
a0NvbHVtbkJyZWFrcyAmJiBjaGlsZC5zdHlsZSgpLmJyZWFrQWZ0ZXIoKSA9PSBDb2x1bW5CcmVh
a0JldHdlZW4pCiAgICAgICAgIHx8IChjaGVja1BhZ2VCcmVha3MgJiYgYWx3YXlzUGFnZUJyZWFr
KGNoaWxkLnN0eWxlKCkuYnJlYWtBZnRlcigpKSk7CiAgICAgaWYgKGNoZWNrQWZ0ZXJBbHdheXMg
JiYgaW5Ob3JtYWxGbG93KGNoaWxkKSAmJiBoYXNOZXh0UGFnZShsb2dpY2FsT2Zmc2V0LCBJbmNs
dWRlUGFnZUJvdW5kYXJ5KSkgewpAQCAtMTU0NywxMSArMTU0NywxMSBAQCBMYXlvdXRVbml0IFJl
bmRlckJsb2NrRmxvdzo6YXBwbHlBZnRlckJyCiAKICAgICAgICAgaWYgKGNoZWNrQ29sdW1uQnJl
YWtzKSB7CiAgICAgICAgICAgICBpZiAoaXNJbnNpZGVNdWx0aWNvbEZsb3dUaHJlYWQpCi0gICAg
ICAgICAgICAgICAgY2hlY2tSZWdpb25CcmVha3MgPSB0cnVlOworICAgICAgICAgICAgICAgIGNo
ZWNrRnJhZ21lbnRCcmVha3MgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjaGVja1Jl
Z2lvbkJyZWFrcykgeworICAgICAgICBpZiAoY2hlY2tGcmFnbWVudEJyZWFrcykgewogICAgICAg
ICAgICAgTGF5b3V0VW5pdCBvZmZzZXRCcmVha0FkanVzdG1lbnQgPSAwOwotICAgICAgICAgICAg
aWYgKGZsb3dUaHJlYWQtPmFkZEZvcmNlZFJlZ2lvbkJyZWFrKHRoaXMsIG9mZnNldEZyb21Mb2dp
Y2FsVG9wT2ZGaXJzdFBhZ2UoKSArIGxvZ2ljYWxPZmZzZXQgKyBtYXJnaW5PZmZzZXQsICZjaGls
ZCwgZmFsc2UsICZvZmZzZXRCcmVha0FkanVzdG1lbnQpKQorICAgICAgICAgICAgaWYgKGZsb3dU
aHJlYWQtPmFkZEZvcmNlZEZyYWdtZW50QnJlYWsodGhpcywgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BP
ZkZpcnN0UGFnZSgpICsgbG9naWNhbE9mZnNldCArIG1hcmdpbk9mZnNldCwgJmNoaWxkLCBmYWxz
ZSwgJm9mZnNldEJyZWFrQWRqdXN0bWVudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGxvZ2lj
YWxPZmZzZXQgKyBtYXJnaW5PZmZzZXQgKyBvZmZzZXRCcmVha0FkanVzdG1lbnQ7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIG5leHRQYWdlTG9naWNhbFRvcChsb2dpY2FsT2Zmc2V0LCBJbmNs
dWRlUGFnZUJvdW5kYXJ5KTsKQEAgLTE2NzYsNyArMTY3Niw3IEBAIHN0YXRpYyB2b2lkIGNsZWFy
U2hvdWxkQnJlYWtBdExpbmVUb0F2b2kKICAgICBibG9ja0Zsb3cuc2V0RGlkQnJlYWtBdExpbmVU
b0F2b2lkV2lkb3coKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFkanVzdExpbmVQb3Np
dGlvbkZvclBhZ2luYXRpb24oUm9vdElubGluZUJveCogbGluZUJveCwgTGF5b3V0VW5pdCYgZGVs
dGEsIGJvb2wmIG92ZXJmbG93c1JlZ2lvbiwgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCkK
K3ZvaWQgUmVuZGVyQmxvY2tGbG93OjphZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKFJv
b3RJbmxpbmVCb3gqIGxpbmVCb3gsIExheW91dFVuaXQmIGRlbHRhLCBib29sJiBvdmVyZmxvd3NG
cmFnbWVudCwgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCkKIHsKICAgICAvLyBGSVhNRTog
Rm9yIG5vdyB3ZSBwYWdpbmF0ZSB1c2luZyBsaW5lIG92ZXJmbG93LiBUaGlzIGVuc3VyZXMgdGhh
dCBsaW5lcyBkb24ndCBvdmVybGFwIGF0IGFsbCB3aGVuIHdlCiAgICAgLy8gcHV0IGEgc3RydXQg
YmV0d2VlbiB0aGVtIGZvciBwYWdpbmF0aW9uIHB1cnBvc2VzLiBIb3dldmVyLCB0aGlzIHJlYWxs
eSBpc24ndCB0aGUgZGVzaXJlZCByZW5kZXJpbmcsIHNpbmNlCkBAIC0xNjk3LDcgKzE2OTcsNyBA
QCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6YWRqdXN0TGluZVBvc2l0aW9uCiAgICAgLy8gRklYTUU6
IEFub3RoZXIgcHJvYmxlbSB3aXRoIHNpbXBseSBtb3ZpbmcgbGluZXMgaXMgdGhhdCB0aGUgYXZh
aWxhYmxlIGxpbmUgd2lkdGggbWF5IGNoYW5nZSAoYmVjYXVzZSBvZiBmbG9hdHMpLgogICAgIC8v
IFRlY2huaWNhbGx5IGlmIHRoZSBsb2NhdGlvbiB3ZSBtb3ZlIHRoZSBsaW5lIHRvIGhhcyBhIGRp
ZmZlcmVudCBsaW5lIHdpZHRoIHRoYW4gb3VyIG9sZCBwb3NpdGlvbiwgdGhlbiB3ZSBuZWVkIHRv
IGRpcnR5IHRoZQogICAgIC8vIGxpbmUgYW5kIGFsbCBmb2xsb3dpbmcgbGluZXMuCi0gICAgb3Zl
cmZsb3dzUmVnaW9uID0gZmFsc2U7CisgICAgb3ZlcmZsb3dzRnJhZ21lbnQgPSBmYWxzZTsKICAg
ICBMYXlvdXRSZWN0IGxvZ2ljYWxWaXN1YWxPdmVyZmxvdyA9IGxpbmVCb3gtPmxvZ2ljYWxWaXN1
YWxPdmVyZmxvd1JlY3QobGluZUJveC0+bGluZVRvcCgpLCBsaW5lQm94LT5saW5lQm90dG9tKCkp
OwogICAgIExheW91dFVuaXQgbG9naWNhbE9mZnNldCA9IHN0ZDo6bWluKGxpbmVCb3gtPmxpbmVU
b3BXaXRoTGVhZGluZygpLCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cueSgpKTsKICAgICBMYXlvdXRV
bml0IGxvZ2ljYWxCb3R0b20gPSBzdGQ6Om1heChsaW5lQm94LT5saW5lQm90dG9tV2l0aExlYWRp
bmcoKSwgbG9naWNhbFZpc3VhbE92ZXJmbG93Lm1heFkoKSk7CkBAIC0xNzA3LDcgKzE3MDcsNyBA
QCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6YWRqdXN0TGluZVBvc2l0aW9uCiAgICAgbGluZUJveC0+
c2V0UGFnaW5hdGlvblN0cnV0KDApOwogICAgIGxpbmVCb3gtPnNldElzRmlyc3RBZnRlclBhZ2VC
cmVhayhmYWxzZSk7CiAgICAgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IHBhZ2VMb2dp
Y2FsSGVpZ2h0Rm9yT2Zmc2V0KGxvZ2ljYWxPZmZzZXQpOwotICAgIGJvb2wgaGFzVW5pZm9ybVBh
Z2VMb2dpY2FsSGVpZ2h0ID0gIWZsb3dUaHJlYWQgfHwgZmxvd1RocmVhZC0+cmVnaW9uc0hhdmVV
bmlmb3JtTG9naWNhbEhlaWdodCgpOworICAgIGJvb2wgaGFzVW5pZm9ybVBhZ2VMb2dpY2FsSGVp
Z2h0ID0gIWZsb3dUaHJlYWQgfHwgZmxvd1RocmVhZC0+ZnJhZ21lbnRzSGF2ZVVuaWZvcm1Mb2dp
Y2FsSGVpZ2h0KCk7CiAgICAgLy8gSWYgbGluZUhlaWdodCBpcyBncmVhdGVyIHRoYW4gcGFnZUxv
Z2ljYWxIZWlnaHQsIGJ1dCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cuaGVpZ2h0KCkgc3RpbGwgZml0
cywgd2UgYXJlCiAgICAgLy8gc3RpbGwgZ29pbmcgdG8gYWRkIGEgc3RydXQsIHNvIHRoYXQgdGhl
IHZpc2libGUgb3ZlcmZsb3cgZml0cyBvbiBhIHNpbmdsZSBwYWdlLgogICAgIGlmICghcGFnZUxv
Z2ljYWxIZWlnaHQgfHwgIWhhc05leHRQYWdlKGxvZ2ljYWxPZmZzZXQpKSB7CkBAIC0xNzM2LDcg
KzE3MzYsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6YWRqdXN0TGluZVBvc2l0aW9uCiAgICAg
fQogICAgIAogICAgIExheW91dFVuaXQgcmVtYWluaW5nTG9naWNhbEhlaWdodCA9IHBhZ2VSZW1h
aW5pbmdMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KGxvZ2ljYWxPZmZzZXQsIEV4Y2x1ZGVQYWdlQm91
bmRhcnkpOwotICAgIG92ZXJmbG93c1JlZ2lvbiA9IChsaW5lSGVpZ2h0ID4gcmVtYWluaW5nTG9n
aWNhbEhlaWdodCk7CisgICAgb3ZlcmZsb3dzRnJhZ21lbnQgPSAobGluZUhlaWdodCA+IHJlbWFp
bmluZ0xvZ2ljYWxIZWlnaHQpOwogCiAgICAgaW50IGxpbmVJbmRleCA9IGxpbmVDb3VudChsaW5l
Qm94KTsKICAgICBpZiAocmVtYWluaW5nTG9naWNhbEhlaWdodCA8IGxpbmVIZWlnaHQgfHwgKHNo
b3VsZEJyZWFrQXRMaW5lVG9Bdm9pZFdpZG93KCkgJiYgbGluZUJyZWFrVG9Bdm9pZFdpZG93KCkg
PT0gbGluZUluZGV4KSkgewpAQCAtMTc1MCw3ICsxNzUwLDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zs
b3c6OmFkanVzdExpbmVQb3NpdGlvbgogICAgICAgICAgICAgcmVtYWluaW5nTG9naWNhbEhlaWdo
dCAtPSBzdGQ6Om1pbihsaW5lSGVpZ2h0IC0gcGFnZUxvZ2ljYWxIZWlnaHQsIHN0ZDo6bWF4PExh
eW91dFVuaXQ+KDAsIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy55KCkgLSBsaW5lQm94LT5saW5lVG9w
V2l0aExlYWRpbmcoKSkpOwogICAgICAgICB9CiAgICAgICAgIExheW91dFVuaXQgcmVtYWluaW5n
TG9naWNhbEhlaWdodEF0TmV3T2Zmc2V0ID0gcGFnZVJlbWFpbmluZ0xvZ2ljYWxIZWlnaHRGb3JP
ZmZzZXQobG9naWNhbE9mZnNldCArIHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQsIEV4Y2x1ZGVQYWdl
Qm91bmRhcnkpOwotICAgICAgICBvdmVyZmxvd3NSZWdpb24gPSAobGluZUhlaWdodCA+IHJlbWFp
bmluZ0xvZ2ljYWxIZWlnaHRBdE5ld09mZnNldCk7CisgICAgICAgIG92ZXJmbG93c0ZyYWdtZW50
ID0gKGxpbmVIZWlnaHQgPiByZW1haW5pbmdMb2dpY2FsSGVpZ2h0QXROZXdPZmZzZXQpOwogICAg
ICAgICBMYXlvdXRVbml0IHRvdGFsTG9naWNhbEhlaWdodCA9IGxpbmVIZWlnaHQgKyBzdGQ6Om1h
eDxMYXlvdXRVbml0PigwLCBsb2dpY2FsT2Zmc2V0KTsKICAgICAgICAgTGF5b3V0VW5pdCBwYWdl
TG9naWNhbEhlaWdodEF0TmV3T2Zmc2V0ID0gaGFzVW5pZm9ybVBhZ2VMb2dpY2FsSGVpZ2h0ID8g
cGFnZUxvZ2ljYWxIZWlnaHQgOiBwYWdlTG9naWNhbEhlaWdodEZvck9mZnNldChsb2dpY2FsT2Zm
c2V0ICsgcmVtYWluaW5nTG9naWNhbEhlaWdodCk7CiAgICAgICAgIHNldFBhZ2VCcmVhayhsb2dp
Y2FsT2Zmc2V0LCBsaW5lSGVpZ2h0IC0gcmVtYWluaW5nTG9naWNhbEhlaWdodCk7CkBAIC0xODI4
LDIwICsxODI4LDIwIEBAIGJvb2wgUmVuZGVyQmxvY2tGbG93OjpoYXNOZXh0UGFnZShMYXlvdXQK
ICAgICBpZiAoIWZsb3dUaHJlYWQpCiAgICAgICAgIHJldHVybiB0cnVlOyAvLyBQcmludGluZyBh
bmQgbXVsdGktY29sdW1uIGJvdGggbWFrZSBuZXcgcGFnZXMgdG8gYWNjb21tb2RhdGUgY29udGVu
dC4KIAotICAgIC8vIFNlZSBpZiB3ZSdyZSBpbiB0aGUgbGFzdCByZWdpb24uCisgICAgLy8gU2Vl
IGlmIHdlJ3JlIGluIHRoZSBsYXN0IGZyYWdtZW50LgogICAgIExheW91dFVuaXQgcGFnZU9mZnNl
dCA9IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSArIGxvZ2ljYWxPZmZzZXQ7Ci0g
ICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSBmbG93VGhyZWFkLT5yZWdpb25BdEJsb2NrT2Zmc2V0
KHRoaXMsIHBhZ2VPZmZzZXQsIHRydWUpOwotICAgIGlmICghcmVnaW9uKQorICAgIFJlbmRlckZy
YWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCA9IGZsb3dUaHJlYWQtPmZyYWdtZW50QXRCbG9ja09m
ZnNldCh0aGlzLCBwYWdlT2Zmc2V0LCB0cnVlKTsKKyAgICBpZiAoIWZyYWdtZW50KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAocmVnaW9uLT5pc0xhc3RSZWdpb24oKSkKLSAgICAg
ICAgcmV0dXJuIHJlZ2lvbi0+aXNSZW5kZXJSZWdpb25TZXQoKQotICAgICAgICAgICAgfHwgKHBh
Z2VCb3VuZGFyeVJ1bGUgPT0gSW5jbHVkZVBhZ2VCb3VuZGFyeSAmJiBwYWdlT2Zmc2V0ID09IHJl
Z2lvbi0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkpOwotCi0gICAgUmVuZGVyUmVn
aW9uKiBzdGFydFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgUmVuZGVyUmVnaW9uKiBlbmRSZWdpb24g
PSBudWxscHRyOwotICAgIGZsb3dUaHJlYWQtPmdldFJlZ2lvblJhbmdlRm9yQm94KHRoaXMsIHN0
YXJ0UmVnaW9uLCBlbmRSZWdpb24pOwotICAgIHJldHVybiAoZW5kUmVnaW9uICYmIHJlZ2lvbiAh
PSBlbmRSZWdpb24pOworICAgIGlmIChmcmFnbWVudC0+aXNMYXN0RnJhZ21lbnQoKSkKKyAgICAg
ICAgcmV0dXJuIGZyYWdtZW50LT5pc1JlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0KCkKKyAgICAg
ICAgICAgIHx8IChwYWdlQm91bmRhcnlSdWxlID09IEluY2x1ZGVQYWdlQm91bmRhcnkgJiYgcGFn
ZU9mZnNldCA9PSBmcmFnbWVudC0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkpOwor
CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIHN0YXJ0RnJhZ21lbnQgPSBudWxscHRyOwor
ICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBlbmRGcmFnbWVudCA9IG51bGxwdHI7CisgICAg
Zmxvd1RocmVhZC0+Z2V0RnJhZ21lbnRSYW5nZUZvckJveCh0aGlzLCBzdGFydEZyYWdtZW50LCBl
bmRGcmFnbWVudCk7CisgICAgcmV0dXJuIChlbmRGcmFnbWVudCAmJiBmcmFnbWVudCAhPSBlbmRG
cmFnbWVudCk7CiB9CiAKIExheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93OjphZGp1c3RGb3JVbnNw
bGl0dGFibGVDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXQs
IExheW91dFVuaXQgY2hpbGRCZWZvcmVNYXJnaW4sIExheW91dFVuaXQgY2hpbGRBZnRlck1hcmdp
bikKQEAgLTE4NTYsNyArMTg1Niw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93OjphZGp1
c3RGb3JVbnMKICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENv
bnRhaW5pbmdCbG9jaygpOwogICAgIExheW91dFVuaXQgY2hpbGRMb2dpY2FsSGVpZ2h0ID0gbG9n
aWNhbEhlaWdodEZvckNoaWxkKGNoaWxkKSArIGNoaWxkQmVmb3JlTWFyZ2luICsgY2hpbGRBZnRl
ck1hcmdpbjsKICAgICBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gcGFnZUxvZ2ljYWxI
ZWlnaHRGb3JPZmZzZXQobG9naWNhbE9mZnNldCk7Ci0gICAgYm9vbCBoYXNVbmlmb3JtUGFnZUxv
Z2ljYWxIZWlnaHQgPSAhZmxvd1RocmVhZCB8fCBmbG93VGhyZWFkLT5yZWdpb25zSGF2ZVVuaWZv
cm1Mb2dpY2FsSGVpZ2h0KCk7CisgICAgYm9vbCBoYXNVbmlmb3JtUGFnZUxvZ2ljYWxIZWlnaHQg
PSAhZmxvd1RocmVhZCB8fCBmbG93VGhyZWFkLT5mcmFnbWVudHNIYXZlVW5pZm9ybUxvZ2ljYWxI
ZWlnaHQoKTsKICAgICBpZiAoaXNVbnNwbGl0dGFibGUpCiAgICAgICAgIHVwZGF0ZU1pbmltdW1Q
YWdlSGVpZ2h0KGxvZ2ljYWxPZmZzZXQsIGNoaWxkTG9naWNhbEhlaWdodCk7CiAgICAgaWYgKCFw
YWdlTG9naWNhbEhlaWdodCB8fCAoaGFzVW5pZm9ybVBhZ2VMb2dpY2FsSGVpZ2h0ICYmIGNoaWxk
TG9naWNhbEhlaWdodCA+IHBhZ2VMb2dpY2FsSGVpZ2h0KQpAQCAtMTg4MCw3ICsxODgwLDcgQEAg
TGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmFkanVzdEZvclVucwogCiBib29sIFJlbmRlckJs
b2NrRmxvdzo6cHVzaFRvTmV4dFBhZ2VXaXRoTWluaW11bUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5p
dCYgYWRqdXN0bWVudCwgTGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0LCBMYXlvdXRVbml0IG1pbmlt
dW1Mb2dpY2FsSGVpZ2h0KSBjb25zdAogewotICAgIGJvb2wgY2hlY2tSZWdpb24gPSBmYWxzZTsK
KyAgICBib29sIGNoZWNrRnJhZ21lbnQgPSBmYWxzZTsKICAgICBmb3IgKExheW91dFVuaXQgcGFn
ZUxvZ2ljYWxIZWlnaHQgPSBwYWdlTG9naWNhbEhlaWdodEZvck9mZnNldChsb2dpY2FsT2Zmc2V0
ICsgYWRqdXN0bWVudCk7IHBhZ2VMb2dpY2FsSGVpZ2h0OwogICAgICAgICBwYWdlTG9naWNhbEhl
aWdodCA9IHBhZ2VMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KGxvZ2ljYWxPZmZzZXQgKyBhZGp1c3Rt
ZW50KSkgewogICAgICAgICBpZiAobWluaW11bUxvZ2ljYWxIZWlnaHQgPD0gcGFnZUxvZ2ljYWxI
ZWlnaHQpCkBAIC0xODg4LDkgKzE4ODgsOSBAQCBib29sIFJlbmRlckJsb2NrRmxvdzo6cHVzaFRv
TmV4dFBhZ2VXaXRoCiAgICAgICAgIGlmICghaGFzTmV4dFBhZ2UobG9naWNhbE9mZnNldCArIGFk
anVzdG1lbnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBhZGp1c3RtZW50
ICs9IHBhZ2VMb2dpY2FsSGVpZ2h0OwotICAgICAgICBjaGVja1JlZ2lvbiA9IHRydWU7CisgICAg
ICAgIGNoZWNrRnJhZ21lbnQgPSB0cnVlOwogICAgIH0KLSAgICByZXR1cm4gIWNoZWNrUmVnaW9u
OworICAgIHJldHVybiAhY2hlY2tGcmFnbWVudDsKIH0KIAogdm9pZCBSZW5kZXJCbG9ja0Zsb3c6
OnNldFBhZ2VCcmVhayhMYXlvdXRVbml0IG9mZnNldCwgTGF5b3V0VW5pdCBzcGFjZVNob3J0YWdl
KQpAQCAtMjUxMSw3ICsyNTExLDcgQEAgYm9vbCBSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9uTmV3
RmxvYXRzKAogICAgICAgICBjb21wdXRlTG9naWNhbExvY2F0aW9uRm9yRmxvYXQoZmxvYXRpbmdP
YmplY3QsIGxvZ2ljYWxUb3ApOwogICAgICAgICBMYXlvdXRVbml0IGNoaWxkTG9naWNhbFRvcCA9
IGxvZ2ljYWxUb3BGb3JDaGlsZChjaGlsZEJveCk7CiAKLSAgICAgICAgZXN0aW1hdGVSZWdpb25S
YW5nZUZvckJveENoaWxkKGNoaWxkQm94KTsKKyAgICAgICAgZXN0aW1hdGVGcmFnbWVudFJhbmdl
Rm9yQm94Q2hpbGQoY2hpbGRCb3gpOwogCiAgICAgICAgIGNoaWxkQm94Lm1hcmtGb3JQYWdpbmF0
aW9uUmVsYXlvdXRJZk5lZWRlZCgpOwogICAgICAgICBjaGlsZEJveC5sYXlvdXRJZk5lZWRlZCgp
OwpAQCAtMjU0MSw3ICsyNTQxLDcgQEAgYm9vbCBSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9uTmV3
RmxvYXRzKAogICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBuZXdMb2dpY2FsVG9wOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAodXBkYXRlUmVnaW9uUmFuZ2VGb3JCb3hDaGls
ZChjaGlsZEJveCkpIHsKKyAgICAgICAgICAgIGlmICh1cGRhdGVGcmFnbWVudFJhbmdlRm9yQm94
Q2hpbGQoY2hpbGRCb3gpKSB7CiAgICAgICAgICAgICAgICAgY2hpbGRCb3guc2V0TmVlZHNMYXlv
dXQoTWFya09ubHlUaGlzKTsKICAgICAgICAgICAgICAgICBjaGlsZEJveC5sYXlvdXRJZk5lZWRl
ZCgpOwogICAgICAgICAgICAgfQpAQCAtMjg1MSw4ICsyODUxLDggQEAgTGF5b3V0VW5pdCBSZW5k
ZXJCbG9ja0Zsb3c6OmdldENsZWFyRGVsdAogICAgICAgICAgICAgaWYgKGF2YWlsYWJsZUxvZ2lj
YWxXaWR0aEF0TmV3TG9naWNhbFRvcE9mZnNldCA9PSBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JD
b250ZW50KG5ld0xvZ2ljYWxUb3ApKQogICAgICAgICAgICAgICAgIHJldHVybiBuZXdMb2dpY2Fs
VG9wIC0gbG9naWNhbFRvcDsKIAotICAgICAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSBy
ZWdpb25BdEJsb2NrT2Zmc2V0KGxvZ2ljYWxUb3BGb3JDaGlsZChjaGlsZCkpOwotICAgICAgICAg
ICAgTGF5b3V0UmVjdCBib3JkZXJCb3ggPSBjaGlsZC5ib3JkZXJCb3hSZWN0SW5SZWdpb24ocmVn
aW9uLCBEb05vdENhY2hlUmVuZGVyQm94UmVnaW9uSW5mbyk7CisgICAgICAgICAgICBSZW5kZXJG
cmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQgPSBmcmFnbWVudEF0QmxvY2tPZmZzZXQobG9naWNh
bFRvcEZvckNoaWxkKGNoaWxkKSk7CisgICAgICAgICAgICBMYXlvdXRSZWN0IGJvcmRlckJveCA9
IGNoaWxkLmJvcmRlckJveFJlY3RJbkZyYWdtZW50KGZyYWdtZW50LCBEb05vdENhY2hlUmVuZGVy
Qm94RnJhZ21lbnRJbmZvKTsKICAgICAgICAgICAgIExheW91dFVuaXQgY2hpbGRMb2dpY2FsV2lk
dGhBdE9sZExvZ2ljYWxUb3BPZmZzZXQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gYm9y
ZGVyQm94LndpZHRoKCkgOiBib3JkZXJCb3guaGVpZ2h0KCk7CiAKICAgICAgICAgICAgIC8vIEZJ
WE1FOiBOb25lIG9mIHRoaXMgaXMgcmlnaHQgZm9yIHBlcnBlbmRpY3VsYXIgd3JpdGluZy1tb2Rl
IGNoaWxkcmVuLgpAQCAtMjg2Myw4ICsyODYzLDggQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zs
b3c6OmdldENsZWFyRGVsdAogCiAgICAgICAgICAgICBjaGlsZC5zZXRMb2dpY2FsVG9wKG5ld0xv
Z2ljYWxUb3ApOwogICAgICAgICAgICAgY2hpbGQudXBkYXRlTG9naWNhbFdpZHRoKCk7Ci0gICAg
ICAgICAgICByZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KGxvZ2ljYWxUb3BGb3JDaGlsZChj
aGlsZCkpOwotICAgICAgICAgICAgYm9yZGVyQm94ID0gY2hpbGQuYm9yZGVyQm94UmVjdEluUmVn
aW9uKHJlZ2lvbiwgRG9Ob3RDYWNoZVJlbmRlckJveFJlZ2lvbkluZm8pOworICAgICAgICAgICAg
ZnJhZ21lbnQgPSBmcmFnbWVudEF0QmxvY2tPZmZzZXQobG9naWNhbFRvcEZvckNoaWxkKGNoaWxk
KSk7CisgICAgICAgICAgICBib3JkZXJCb3ggPSBjaGlsZC5ib3JkZXJCb3hSZWN0SW5GcmFnbWVu
dChmcmFnbWVudCwgRG9Ob3RDYWNoZVJlbmRlckJveEZyYWdtZW50SW5mbyk7CiAgICAgICAgICAg
ICBMYXlvdXRVbml0IGNoaWxkTG9naWNhbFdpZHRoQXROZXdMb2dpY2FsVG9wT2Zmc2V0ID0gaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGJvcmRlckJveC53aWR0aCgpIDogYm9yZGVyQm94Lmhl
aWdodCgpOwogCiAgICAgICAgICAgICBjaGlsZC5zZXRMb2dpY2FsVG9wKGNoaWxkT2xkTG9naWNh
bFRvcCk7CkBAIC0zMTQxLDExICszMTQxLDExIEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrRmxvdzo6
aW5saW5lU2VsZWN0aW8KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIFJlbmRlckJsb2Nr
Rmxvdzo6bmVlZHNMYXlvdXRBZnRlclJlZ2lvblJhbmdlQ2hhbmdlKCkgY29uc3QKK2Jvb2wgUmVu
ZGVyQmxvY2tGbG93OjpuZWVkc0xheW91dEFmdGVyRnJhZ21lbnRSYW5nZUNoYW5nZSgpIGNvbnN0
CiB7CiAgICAgLy8gQSBibG9jayB3aXRob3V0IGZsb2F0cyBvciB0aGF0IGV4cGFuZHMgdG8gZW5j
bG9zZSB0aGVtIHdvbid0IG5lZWQgYSByZWxheW91dAotICAgIC8vIGFmdGVyIGEgcmVnaW9uIHJh
bmdlIGNoYW5nZS4gVGhlcmUgaXMgbm8gb3ZlcmZsb3cgY29udGVudCBuZWVkaW5nIHJlbGF5b3V0
Ci0gICAgLy8gaW4gdGhlIHJlZ2lvbiBjaGFpbiBiZWNhdXNlIHRoZSByZWdpb24gcmFuZ2UgY2Fu
IG9ubHkgc2hyaW5rIGFmdGVyIHRoZSBlc3RpbWF0aW9uLgorICAgIC8vIGFmdGVyIGEgZnJhZ21l
bnQgcmFuZ2UgY2hhbmdlLiBUaGVyZSBpcyBubyBvdmVyZmxvdyBjb250ZW50IG5lZWRpbmcgcmVs
YXlvdXQKKyAgICAvLyBpbiB0aGUgZnJhZ21lbnQgY2hhaW4gYmVjYXVzZSB0aGUgZnJhZ21lbnQg
cmFuZ2UgY2FuIG9ubHkgc2hyaW5rIGFmdGVyIHRoZSBlc3RpbWF0aW9uLgogICAgIGlmICghY29u
dGFpbnNGbG9hdHMoKSB8fCBjcmVhdGVzTmV3Rm9ybWF0dGluZ0NvbnRleHQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkBAIC0zMzYwLDcgKzMzNjAsNyBAQCBSZW5kZXJUZXh0KiBSZW5kZXJC
bG9ja0Zsb3c6OmZpbmRDbG9zZXN0CiAgICAgCiAgICAgLy8gT25seSBjaGVjayB0aGUgZ2FwcyBi
ZXR3ZWVuIHRoZSByb290IGxpbmUgYm94ZXMuIFdlIGRlbGliZXJhdGVseSBpZ25vcmUgb3ZlcmZs
b3cgYmVjYXVzZQogICAgIC8vIGV4cGVyaWVuY2UgaGFzIHNob3duIHRoYXQgaGl0IHRlc3RzIG9u
IGFuIGV4cGxvZGVkIHRleHQgbm9kZSBjYW4gZmFpbCB3aGVuIHdpdGhpbiB0aGUKLSAgICAvLyBv
dmVyZmxvdyByZWdpb24uCisgICAgLy8gb3ZlcmZsb3cgZnJhZ21lbnQuCiAgICAgZm9yIChSb290
SW5saW5lQm94KiBjdXJyZW50ID0gYmxvY2tGbG93LmZpcnN0Um9vdEJveCgpOyBjdXJyZW50ICYm
IGN1cnJlbnQgIT0gYmxvY2tGbG93Lmxhc3RSb290Qm94KCk7IGN1cnJlbnQgPSBjdXJyZW50LT5u
ZXh0Um9vdEJveCgpKSB7CiAgICAgICAgIGZsb2F0IGN1cnJlbnRCb3R0b20gPSBjdXJyZW50LT55
KCkgKyBjdXJyZW50LT5sb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgIGlmIChsb2NhbFBvaW50Lnko
KSA8IGN1cnJlbnRCb3R0b20pCkBAIC0zMzc3LDcgKzMzNzcsNyBAQCBSZW5kZXJUZXh0KiBSZW5k
ZXJCbG9ja0Zsb3c6OmZpbmRDbG9zZXN0CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZpc2li
bGVQb3NpdGlvbiBSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9uRm9yUG9pbnRXaXRoSW5saW5lQ2hp
bGRyZW4oY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Mb2dpY2FsQ29udGVudHMsIGNvbnN0IFJl
bmRlclJlZ2lvbiogcmVnaW9uKQorVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJsb2NrRmxvdzo6cG9z
aXRpb25Gb3JQb2ludFdpdGhJbmxpbmVDaGlsZHJlbihjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJ
bkxvZ2ljYWxDb250ZW50cywgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50
KQogewogICAgIEFTU0VSVChjaGlsZHJlbklubGluZSgpKTsKIApAQCAtMzM5NCw3ICszMzk0LDcg
QEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJsb2NrRmxvdzo6cG9zaXRpbwogICAgIFJvb3RJbmxp
bmVCb3gqIGZpcnN0Um9vdEJveFdpdGhDaGlsZHJlbiA9IDA7CiAgICAgUm9vdElubGluZUJveCog
bGFzdFJvb3RCb3hXaXRoQ2hpbGRyZW4gPSAwOwogICAgIGZvciAoUm9vdElubGluZUJveCogcm9v
dCA9IGZpcnN0Um9vdEJveCgpOyByb290OyByb290ID0gcm9vdC0+bmV4dFJvb3RCb3goKSkgewot
ICAgICAgICBpZiAocmVnaW9uICYmIHJvb3QtPmNvbnRhaW5pbmdSZWdpb24oKSAhPSByZWdpb24p
CisgICAgICAgIGlmIChmcmFnbWVudCAmJiByb290LT5jb250YWluaW5nRnJhZ21lbnQoKSAhPSBm
cmFnbWVudCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmICghcm9vdC0+Zmly
c3RMZWFmQ2hpbGQoKSkKQEAgLTM0NzgsNyArMzQ3OCw3IEBAIFBvc2l0aW9uIFJlbmRlckJsb2Nr
Rmxvdzo6cG9zaXRpb25Gb3JQb2kKICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmZp
cnN0Q2hpbGQoKSkucG9zaXRpb25Gb3JQb2ludChwb2ludCk7CiB9CiAKLVZpc2libGVQb3NpdGlv
biBSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBv
aW50LCBjb25zdCBSZW5kZXJSZWdpb24qKQorVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJsb2NrRmxv
dzo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsIGNvbnN0IFJlbmRl
ckZyYWdtZW50Q29udGFpbmVyKikKIHsKICAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnBvc2l0aW9u
Rm9yUG9pbnQocG9pbnQsIG51bGxwdHIpOwogfQpAQCAtMzgxOSw3ICszODE5LDcgQEAgdm9pZCBS
ZW5kZXJCbG9ja0Zsb3c6OmxheW91dEV4Y2x1ZGVkQ2hpbAogICAgICAgICBmb3IgKFJlbmRlck11
bHRpQ29sdW1uU2V0KiBjb2x1bW5TZXQgPSBmbG93VGhyZWFkLT5maXJzdE11bHRpQ29sdW1uU2V0
KCk7IGNvbHVtblNldDsgY29sdW1uU2V0ID0gY29sdW1uU2V0LT5uZXh0U2libGluZ011bHRpQ29s
dW1uU2V0KCkpCiAgICAgICAgICAgICBjb2x1bW5TZXQtPnByZXBhcmVGb3JMYXlvdXQoIWZsb3dU
aHJlYWQtPmluQmFsYW5jaW5nUGFzcygpKTsKIAotICAgICAgICBmbG93VGhyZWFkLT5pbnZhbGlk
YXRlUmVnaW9ucyhNYXJrT25seVRoaXMpOworICAgICAgICBmbG93VGhyZWFkLT5pbnZhbGlkYXRl
RnJhZ21lbnRzKE1hcmtPbmx5VGhpcyk7CiAgICAgICAgIGZsb3dUaHJlYWQtPnNldE5lZWRzSGVp
Z2h0c1JlY2FsY3VsYXRpb24odHJ1ZSk7CiAgICAgICAgIGZsb3dUaHJlYWQtPmxheW91dCgpOwog
ICAgIH0gZWxzZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
Rmxvdy5oCShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tGbG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Miw3ICsyODIsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBkZWxldGVMaW5lcygpIG92ZXJyaWRlOwogICAgIHZvaWQgY29tcHV0ZU92ZXJm
bG93KExheW91dFVuaXQgb2xkQ2xpZW50QWZ0ZXJFZGdlLCBib29sIHJlY29tcHV0ZUZsb2F0cyA9
IGZhbHNlKSBvdmVycmlkZTsKICAgICBQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExh
eW91dFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9p
bnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJSZWdpb24qKSBvdmVycmlkZTsKKyAg
ICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNv
bnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKikgb3ZlcnJpZGU7CiAKICAgICBMYXlvdXRVbml0
IGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbShGbG9hdGluZ09iamVjdDo6VHlwZSA9IEZsb2F0aW5n
T2JqZWN0OjpGbG9hdExlZnRSaWdodCkgY29uc3Q7CiAKQEAgLTM4OCw3ICszODgsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCB1cGRhdGVDb2x1bW5Qcm9ncmVzc2lvbkZyb21TdHlsZShSZW5kZXJTdHls
ZSYpOwogICAgIHZvaWQgdXBkYXRlU3R5bGVzRm9yQ29sdW1uQ2hpbGRyZW4oKTsKIAotICAgIGJv
b2wgbmVlZHNMYXlvdXRBZnRlclJlZ2lvblJhbmdlQ2hhbmdlKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBuZWVkc0xheW91dEFmdGVyRnJhZ21lbnRSYW5nZUNoYW5nZSgpIGNvbnN0IG92ZXJy
aWRlOwogICAgIFdFQkNPUkVfRVhQT1JUIFJlbmRlclRleHQqIGZpbmRDbG9zZXN0VGV4dEF0QWJz
b2x1dGVQb2ludChjb25zdCBGbG9hdFBvaW50Jik7CiAKICAgICAvLyBBIHBhZ2UgYnJlYWsgaXMg
cmVxdWlyZWQgYXQgc29tZSBvZmZzZXQgZHVlIHRvIHNwYWNlIHNob3J0YWdlIGluIHRoZSBjdXJy
ZW50IGZyYWdtZW50YWluZXIuCkBAIC01MjgsNyArNTI4LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
TGF5b3V0VW5pdCYgbGFzdExvZ2ljYWxUb3AsIExheW91dFVuaXQmIGxhc3RMb2dpY2FsTGVmdCwg
TGF5b3V0VW5pdCYgbGFzdExvZ2ljYWxSaWdodCwgY29uc3QgTG9naWNhbFNlbGVjdGlvbk9mZnNl
dENhY2hlcyYsIGNvbnN0IFBhaW50SW5mbyopIG92ZXJyaWRlOwogICAgIAogICAgIFBvc2l0aW9u
IHBvc2l0aW9uRm9yQm94KElubGluZUJveCosIGJvb2wgc3RhcnQgPSB0cnVlKSBjb25zdDsKLSAg
ICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludFdpdGhJbmxpbmVDaGlsZHJlbihjb25z
dCBMYXlvdXRQb2ludCYgcG9pbnRJbkxvZ2ljYWxDb250ZW50cywgY29uc3QgUmVuZGVyUmVnaW9u
Kikgb3ZlcnJpZGU7CisgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnRXaXRoSW5s
aW5lQ2hpbGRyZW4oY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Mb2dpY2FsQ29udGVudHMsIGNv
bnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKikgb3ZlcnJpZGU7CiAgICAgdm9pZCBhZGRGb2N1
c1JpbmdSZWN0c0ZvcklubGluZUNoaWxkcmVuKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNv
bnN0IExheW91dFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0LCBjb25zdCBSZW5kZXJMYXllck1vZGVs
T2JqZWN0Kikgb3ZlcnJpZGU7CiAKIC8vIEZJWE1FLUJMT0NLRkxPVzogVGhlc2UgbWV0aG9kcyBo
YXZlIGltcGxlbWVudGF0aW9ucyBpbgpAQCAtNTgwLDcgKzU4MCw3IEBAIHByaXZhdGU6ICAgICAg
ICAKICAgICAvLyBoYXZlIHRvIG1vdmUgdG8gdGhlIG5leHQgcGFnZS9jb2x1bW4uCiAgICAgYm9v
bCBwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKGNvbnN0IEZsb2F0aW5nT2JqZWN0JiBuZXdGbG9hdCwg
RmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIExpbmVJbmZvJiwgTGlu
ZVdpZHRoJik7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gdGVzdCBhIGxpbmUg
Ym94IHRoYXQgaGFzIG1vdmVkIGluIHRoZSBibG9jayBkaXJlY3Rpb24gdG8gc2VlIGlmIGl0IGhh
cyBlbmRlZCB1cCBpbiBhIG5ldwotICAgIC8vIHJlZ2lvbi9wYWdlL2NvbHVtbiB0aGF0IGhhcyBh
IGRpZmZlcmVudCBhdmFpbGFibGUgbGluZSB3aWR0aCB0aGFuIHRoZSBvbGQgb25lLiBVc2VkIHRv
IGtub3cgd2hlbiB5b3UgaGF2ZSB0byBkaXJ0eSBhCisgICAgLy8gcGFnZS9jb2x1bW4gdGhhdCBo
YXMgYSBkaWZmZXJlbnQgYXZhaWxhYmxlIGxpbmUgd2lkdGggdGhhbiB0aGUgb2xkIG9uZS4gVXNl
ZCB0byBrbm93IHdoZW4geW91IGhhdmUgdG8gZGlydHkgYQogICAgIC8vIGxpbmUsIGkuZS4sIHRo
YXQgaXQgY2FuJ3QgYmUgcmUtdXNlZC4KICAgICBib29sIGxpbmVXaWR0aEZvclBhZ2luYXRlZExp
bmVDaGFuZ2VkKFJvb3RJbmxpbmVCb3gqLCBMYXlvdXRVbml0IGxpbmVEZWx0YSwgUmVuZGVyRmxv
d1RocmVhZCopIGNvbnN0OwogICAgIHZvaWQgdXBkYXRlTG9naWNhbFdpZHRoRm9yQWxpZ25tZW50
KGNvbnN0IEVUZXh0QWxpZ24mLCBjb25zdCBSb290SW5saW5lQm94KiwgQmlkaVJ1biogdHJhaWxp
bmdTcGFjZVJ1biwgZmxvYXQmIGxvZ2ljYWxMZWZ0LCBmbG9hdCYgdG90YWxMb2dpY2FsV2lkdGgs
IGZsb2F0JiBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIGludCBleHBhbnNpb25PcHBvcnR1bml0eUNv
dW50KTsKQEAgLTYwMCw4ICs2MDAsOCBAQCBwcml2YXRlOiAgICAgICAgCiAKIHB1YmxpYzoKICAg
ICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFRoZXNlIGNhbiBiZSBtYWRlIHByb3RlY3RlZCBhZ2FpbiBv
bmNlIGFsbCBjYWxsZXJzIGhhdmUgYmVlbiBtb3ZlZCBoZXJlLgotICAgIHZvaWQgYWRqdXN0TGlu
ZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihSb290SW5saW5lQm94KiwgTGF5b3V0VW5pdCYgZGVsdGFP
ZmZzZXQsIGJvb2wmIG92ZXJmbG93c1JlZ2lvbiwgUmVuZGVyRmxvd1RocmVhZCopOyAvLyBDb21w
dXRlcyBhIGRlbHRhT2Zmc2V0IHZhbHVlIHRoYXQgcHV0IGEgbGluZSBhdCB0aGUgdG9wIG9mIHRo
ZSBuZXh0IHBhZ2UgaWYgaXQgZG9lc24ndCBmaXQgb24gdGhlIGN1cnJlbnQgcGFnZS4KLSAgICB2
b2lkIHVwZGF0ZVJlZ2lvbkZvckxpbmUoUm9vdElubGluZUJveCopIGNvbnN0OworICAgIHZvaWQg
YWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihSb290SW5saW5lQm94KiwgTGF5b3V0VW5p
dCYgZGVsdGFPZmZzZXQsIGJvb2wmIG92ZXJmbG93c0ZyYWdtZW50LCBSZW5kZXJGbG93VGhyZWFk
Kik7IC8vIENvbXB1dGVzIGEgZGVsdGFPZmZzZXQgdmFsdWUgdGhhdCBwdXQgYSBsaW5lIGF0IHRo
ZSB0b3Agb2YgdGhlIG5leHQgcGFnZSBpZiBpdCBkb2Vzbid0IGZpdCBvbiB0aGUgY3VycmVudCBw
YWdlLgorICAgIHZvaWQgdXBkYXRlRnJhZ21lbnRGb3JMaW5lKFJvb3RJbmxpbmVCb3gqKSBjb25z
dDsKIAogICAgIC8vIFBhZ2luYXRpb24gcm91dGluZXMuCiAgICAgYm9vbCByZWxheW91dEZvclBh
Z2luYXRpb24oTGF5b3V0U3RhdGVNYWludGFpbmVyJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2aXNpb24gMjIy
NDYyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJSZW5kZXJCbG9j
a0Zsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJGbG93VGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGluZUJyZWFrLmgiCi0jaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCisjaW5jbHVkZSAiUmVuZGVy
RnJhZ21lbnRDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJSdWJ5QmFzZS5oIgogI2luY2x1
ZGUgIlJlbmRlclJ1YnlUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMTQxOCwx
MiArMTQxOCwxMiBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0UnVuc0FuZEZsb2F0CiAg
ICAgICAgICAgICAgICAgICAgIGxheW91dFN0YXRlLnVwZGF0ZVJlcGFpbnRSYW5nZUZyb21Cb3go
bGluZUJveCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBh
ZGp1c3RtZW50ID0gMDsKLSAgICAgICAgICAgICAgICBib29sIG92ZXJmbG93c1JlZ2lvbiA9IGZh
bHNlOworICAgICAgICAgICAgICAgIGJvb2wgb3ZlcmZsb3dzRnJhZ21lbnQgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBsYXlvdXRTdGF0ZS5tYXJnaW5JbmZvKCku
c2V0QXRCZWZvcmVTaWRlT2ZCbG9jayhmYWxzZSk7CiAKICAgICAgICAgICAgICAgICBpZiAocGFn
aW5hdGVkKQotICAgICAgICAgICAgICAgICAgICBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0
aW9uKGxpbmVCb3gsIGFkanVzdG1lbnQsIG92ZXJmbG93c1JlZ2lvbiwgbGF5b3V0U3RhdGUuZmxv
d1RocmVhZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFn
aW5hdGlvbihsaW5lQm94LCBhZGp1c3RtZW50LCBvdmVyZmxvd3NGcmFnbWVudCwgbGF5b3V0U3Rh
dGUuZmxvd1RocmVhZCgpKTsKICAgICAgICAgICAgICAgICBpZiAoYWRqdXN0bWVudCkgewogICAg
ICAgICAgICAgICAgICAgICBJbmRlbnRUZXh0T3JOb3Qgc2hvdWxkSW5kZW50VGV4dCA9IGxheW91
dFN0YXRlLmxpbmVJbmZvKCkuaXNGaXJzdExpbmUoKSA/IEluZGVudFRleHQgOiBEb05vdEluZGVu
dFRleHQ7CiAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgb2xkTGluZVdpZHRoID0gYXZh
aWxhYmxlTG9naWNhbFdpZHRoRm9yTGluZShvbGRMb2dpY2FsSGVpZ2h0LCBzaG91bGRJbmRlbnRU
ZXh0KTsKQEAgLTE0NDMsNyArMTQ0Myw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRS
dW5zQW5kRmxvYXQKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHBh
Z2luYXRlZCkgewogICAgICAgICAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUuZmxvd1RocmVh
ZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmVnaW9uRm9yTGluZShsaW5lQm94
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUZyYWdtZW50Rm9yTGluZShsaW5lQm94
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE1NzYs
MTUgKzE1NzYsMTUgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxpbmtUb0VuZExpbmVJZk5lZQog
ICAgICAgICAgICAgICAgIGxpbmUtPmF0dGFjaExpbmUoKTsKICAgICAgICAgICAgICAgICBpZiAo
cGFnaW5hdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgIGRlbHRhIC09IGxpbmUtPnBhZ2luYXRp
b25TdHJ1dCgpOwotICAgICAgICAgICAgICAgICAgICBib29sIG92ZXJmbG93c1JlZ2lvbjsKLSAg
ICAgICAgICAgICAgICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihsaW5lLCBk
ZWx0YSwgb3ZlcmZsb3dzUmVnaW9uLCBsYXlvdXRTdGF0ZS5mbG93VGhyZWFkKCkpOworICAgICAg
ICAgICAgICAgICAgICBib29sIG92ZXJmbG93c0ZyYWdtZW50OworICAgICAgICAgICAgICAgICAg
ICBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKGxpbmUsIGRlbHRhLCBvdmVyZmxvd3NG
cmFnbWVudCwgbGF5b3V0U3RhdGUuZmxvd1RocmVhZCgpKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgaWYgKGRlbHRhKSB7CiAgICAgICAgICAgICAgICAgICAgIGxheW91dFN0
YXRlLnVwZGF0ZVJlcGFpbnRSYW5nZUZyb21Cb3gobGluZSwgZGVsdGEpOwogICAgICAgICAgICAg
ICAgICAgICBsaW5lLT5hZGp1c3RCbG9ja0RpcmVjdGlvblBvc2l0aW9uKGRlbHRhKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGxheW91dFN0YXRlLmZsb3dUaHJlYWQo
KSkKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmVnaW9uRm9yTGluZShsaW5lKTsKKyAgICAg
ICAgICAgICAgICAgICAgdXBkYXRlRnJhZ21lbnRGb3JMaW5lKGxpbmUpOwogICAgICAgICAgICAg
ICAgIHJlYXR0YWNoQ2xlYW5MaW5lRmxvYXRzKCpsaW5lLCBkZWx0YSwgbGluZSA9PSBmaXJzdENs
ZWFuTGluZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxh
c3RSb290Qm94KCktPmxpbmVCb3R0b21XaXRoTGVhZGluZygpKTsKQEAgLTE2MTUsNyArMTYxNSw3
IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsaW5rVG9FbmRMaW5lSWZOZWUKICAgICAgICAgICAg
IExheW91dFJlY3QgbG9naWNhbFZpc3VhbE92ZXJmbG93KDAsIGJsb2NrTG9naWNhbEhlaWdodCwg
MSwgYm90dG9tVmlzdWFsT3ZlcmZsb3cgLSBibG9ja0xvZ2ljYWxIZWlnaHQpOwogICAgICAgICAg
ICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT5zZXRPdmVyZmxvd0Zyb21Mb2dpY2FsUmVjdHMobG9n
aWNhbExheW91dE92ZXJmbG93LCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3csIHRyYWlsaW5nRmxvYXRz
TGluZUJveC0+bGluZVRvcCgpLCB0cmFpbGluZ0Zsb2F0c0xpbmVCb3gtPmxpbmVCb3R0b20oKSk7
CiAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUuZmxvd1RocmVhZCgpKQotICAgICAgICAgICAg
ICAgIHVwZGF0ZVJlZ2lvbkZvckxpbmUodHJhaWxpbmdGbG9hdHNMaW5lQm94KTsKKyAgICAgICAg
ICAgICAgICB1cGRhdGVGcmFnbWVudEZvckxpbmUodHJhaWxpbmdGbG9hdHNMaW5lQm94KTsKICAg
ICAgICAgfQogCiAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVj
dFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKQEAgLTE2NDQsNyArMTY0NCw3IEBAIHZv
aWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRMaW5lQm94ZXMoYm8KICAgICAgICAgbGF5b3V0TGlu
ZUdyaWRCb3goKTsKIAogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhy
ZWFkQ29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgYm9vbCBjbGVhckxpbmVzRm9yUGFnaW5hdGlvbiA9
IGZpcnN0Um9vdEJveCgpICYmIGZsb3dUaHJlYWQgJiYgIWZsb3dUaHJlYWQtPmhhc1JlZ2lvbnMo
KTsKKyAgICBib29sIGNsZWFyTGluZXNGb3JQYWdpbmF0aW9uID0gZmlyc3RSb290Qm94KCkgJiYg
Zmxvd1RocmVhZCAmJiAhZmxvd1RocmVhZC0+aGFzRnJhZ21lbnRzKCk7CiAKICAgICAvLyBGaWd1
cmUgb3V0IGlmIHdlIHNob3VsZCBjbGVhciBvdXQgb3VyIGxpbmUgYm94ZXMuCiAgICAgLy8gRklY
TUU6IEhhbmRsZSByZXNpemUgZXZlbnR1YWxseSEKQEAgLTE4MDEsOCArMTgwMSw4IEBAIFJvb3RJ
bmxpbmVCb3gqIFJlbmRlckJsb2NrRmxvdzo6ZGV0ZXJtaW4KICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHBhZ2luYXRpb25EZWx0
YSAtPSBjdXJyZW50TGluZS0+cGFnaW5hdGlvblN0cnV0KCk7Ci0gICAgICAgICAgICAgICAgYm9v
bCBvdmVyZmxvd3NSZWdpb247Ci0gICAgICAgICAgICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9y
UGFnaW5hdGlvbihjdXJyZW50TGluZSwgcGFnaW5hdGlvbkRlbHRhLCBvdmVyZmxvd3NSZWdpb24s
IGxheW91dFN0YXRlLmZsb3dUaHJlYWQoKSk7CisgICAgICAgICAgICAgICAgYm9vbCBvdmVyZmxv
d3NGcmFnbWVudDsKKyAgICAgICAgICAgICAgICBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0
aW9uKGN1cnJlbnRMaW5lLCBwYWdpbmF0aW9uRGVsdGEsIG92ZXJmbG93c0ZyYWdtZW50LCBsYXlv
dXRTdGF0ZS5mbG93VGhyZWFkKCkpOwogICAgICAgICAgICAgICAgIGlmIChwYWdpbmF0aW9uRGVs
dGEpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5zRmxvYXRzKCkgfHwgIWZsb2F0
cy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBEbyBiZXR0
ZXIgZXZlbnR1YWxseS4gIEZvciBub3cgaWYgd2UgZXZlciBzaGlmdCBiZWNhdXNlIG9mIHBhZ2lu
YXRpb24gYW5kIGZsb2F0cyBhcmUgcHJlc2VudCBqdXN0IGdvIHRvIGEgZnVsbCBsYXlvdXQuCkBA
IC0xODE0LDcgKzE4MTQsNyBAQCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9ja0Zsb3c6OmRldGVy
bWluCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMaW5lLT5hZGp1c3RCbG9ja0RpcmVjdGlv
blBvc2l0aW9uKHBhZ2luYXRpb25EZWx0YSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGlmIChsYXlvdXRTdGF0ZS5mbG93VGhyZWFkKCkpCi0gICAgICAgICAgICAgICAgICAg
IHVwZGF0ZVJlZ2lvbkZvckxpbmUoY3VycmVudExpbmUpOworICAgICAgICAgICAgICAgICAgICB1
cGRhdGVGcmFnbWVudEZvckxpbmUoY3VycmVudExpbmUpOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBpZiAoYXV0byogY2xlYW5MaW5lRmxvYXRzID0gY3VycmVudExpbmUtPmZsb2F0c1B0
cigpKSB7CkBAIC0xOTY2LDkgKzE5NjYsOSBAQCBib29sIFJlbmRlckJsb2NrRmxvdzo6Y2hlY2tQ
YWdpbmF0aW9uQW5kCiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpc24ndCB0aGUgcmVhbCBtb3Zl
IHdlJ3JlIGdvaW5nIHRvIGRvLCBzbyBkb24ndCB1cGRhdGUgdGhlIGxpbmUgYm94J3MgcGFnaW5h
dGlvbgogICAgICAgICAgICAgICAgIC8vIHN0cnV0IHlldC4KICAgICAgICAgICAgICAgICBMYXlv
dXRVbml0IG9sZFBhZ2luYXRpb25TdHJ1dCA9IGxpbmVCb3gtPnBhZ2luYXRpb25TdHJ1dCgpOwot
ICAgICAgICAgICAgICAgIGJvb2wgb3ZlcmZsb3dzUmVnaW9uOworICAgICAgICAgICAgICAgIGJv
b2wgb3ZlcmZsb3dzRnJhZ21lbnQ7CiAgICAgICAgICAgICAgICAgbGluZURlbHRhIC09IG9sZFBh
Z2luYXRpb25TdHJ1dDsKLSAgICAgICAgICAgICAgICBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdp
bmF0aW9uKGxpbmVCb3gsIGxpbmVEZWx0YSwgb3ZlcmZsb3dzUmVnaW9uLCBsYXlvdXRTdGF0ZS5m
bG93VGhyZWFkKCkpOworICAgICAgICAgICAgICAgIGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2lu
YXRpb24obGluZUJveCwgbGluZURlbHRhLCBvdmVyZmxvd3NGcmFnbWVudCwgbGF5b3V0U3RhdGUu
Zmxvd1RocmVhZCgpKTsKICAgICAgICAgICAgICAgICBsaW5lQm94LT5zZXRQYWdpbmF0aW9uU3Ry
dXQob2xkUGFnaW5hdGlvblN0cnV0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChs
aW5lV2lkdGhGb3JQYWdpbmF0ZWRMaW5lQ2hhbmdlZChsaW5lQm94LCBsaW5lRGVsdGEsIGxheW91
dFN0YXRlLmZsb3dUaHJlYWQoKSkpCkBAIC0yMDA0LDExICsyMDA0LDExIEBAIGJvb2wgUmVuZGVy
QmxvY2tGbG93OjpsaW5lV2lkdGhGb3JQYWdpbmEKICAgICBpZiAoIWZsb3dUaHJlYWQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJlbmRlclJlZ2lvbiogY3VycmVudFJlZ2lvbiA9IHJl
Z2lvbkF0QmxvY2tPZmZzZXQocm9vdEJveC0+bGluZVRvcFdpdGhMZWFkaW5nKCkgKyBsaW5lRGVs
dGEpOwotICAgIC8vIEp1c3QgYmFpbCBpZiB0aGUgcmVnaW9uIGRpZG4ndCBjaGFuZ2UuCi0gICAg
aWYgKHJvb3RCb3gtPmNvbnRhaW5pbmdSZWdpb24oKSA9PSBjdXJyZW50UmVnaW9uKQorICAgIFJl
bmRlckZyYWdtZW50Q29udGFpbmVyKiBjdXJyZW50RnJhZ21lbnQgPSBmcmFnbWVudEF0QmxvY2tP
ZmZzZXQocm9vdEJveC0+bGluZVRvcFdpdGhMZWFkaW5nKCkgKyBsaW5lRGVsdGEpOworICAgIC8v
IEp1c3QgYmFpbCBpZiB0aGUgZnJhZ21lbnQgZGlkbid0IGNoYW5nZS4KKyAgICBpZiAocm9vdEJv
eC0+Y29udGFpbmluZ0ZyYWdtZW50KCkgPT0gY3VycmVudEZyYWdtZW50KQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHJvb3RCb3gtPnBhZ2luYXRlZExpbmVXaWR0aCgpICE9IGF2
YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckNvbnRlbnQoY3VycmVudFJlZ2lvbik7CisgICAgcmV0dXJu
IHJvb3RCb3gtPnBhZ2luYXRlZExpbmVXaWR0aCgpICE9IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZv
ckNvbnRlbnQoY3VycmVudEZyYWdtZW50KTsKIH0KIAogYm9vbCBSZW5kZXJCbG9ja0Zsb3c6Om1h
dGNoZWRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJp
ZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBlbmRMaW5lU3RhcnQs
IGNvbnN0IEJpZGlTdGF0dXMmIGVuZExpbmVTdGF0dXMpCkBAIC0yMDcyLDE0ICsyMDcyLDE0IEBA
IHZvaWQgUmVuZGVyQmxvY2tGbG93OjphZGRPdmVyZmxvd0Zyb21JbmwKICAgICAgICAgZW5kUGFk
ZGluZyA9IDE7CiAgICAgZm9yIChSb290SW5saW5lQm94KiBjdXJyID0gZmlyc3RSb290Qm94KCk7
IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0Um9vdEJveCgpKSB7CiAgICAgICAgIGFkZExheW91dE92
ZXJmbG93KGN1cnItPnBhZGRlZExheW91dE92ZXJmbG93UmVjdChlbmRQYWRkaW5nKSk7Ci0gICAg
ICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpID8g
Y3Vyci0+Y29udGFpbmluZ1JlZ2lvbigpIDogbnVsbHB0cjsKLSAgICAgICAgaWYgKHJlZ2lvbikK
LSAgICAgICAgICAgIHJlZ2lvbi0+YWRkTGF5b3V0T3ZlcmZsb3dGb3JCb3godGhpcywgY3Vyci0+
cGFkZGVkTGF5b3V0T3ZlcmZsb3dSZWN0KGVuZFBhZGRpbmcpKTsKKyAgICAgICAgUmVuZGVyRnJh
Z21lbnRDb250YWluZXIqIGZyYWdtZW50ID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpID8g
Y3Vyci0+Y29udGFpbmluZ0ZyYWdtZW50KCkgOiBudWxscHRyOworICAgICAgICBpZiAoZnJhZ21l
bnQpCisgICAgICAgICAgICBmcmFnbWVudC0+YWRkTGF5b3V0T3ZlcmZsb3dGb3JCb3godGhpcywg
Y3Vyci0+cGFkZGVkTGF5b3V0T3ZlcmZsb3dSZWN0KGVuZFBhZGRpbmcpKTsKICAgICAgICAgaWYg
KCFoYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICAgICAgTGF5b3V0UmVjdCBjaGlsZFZpc3Vh
bE92ZXJmbG93UmVjdCA9IGN1cnItPnZpc3VhbE92ZXJmbG93UmVjdChjdXJyLT5saW5lVG9wKCks
IGN1cnItPmxpbmVCb3R0b20oKSk7CiAgICAgICAgICAgICBhZGRWaXN1YWxPdmVyZmxvdyhjaGls
ZFZpc3VhbE92ZXJmbG93UmVjdCk7Ci0gICAgICAgICAgICBpZiAocmVnaW9uKQotICAgICAgICAg
ICAgICAgIHJlZ2lvbi0+YWRkVmlzdWFsT3ZlcmZsb3dGb3JCb3godGhpcywgY2hpbGRWaXN1YWxP
dmVyZmxvd1JlY3QpOworICAgICAgICAgICAgaWYgKGZyYWdtZW50KQorICAgICAgICAgICAgICAg
IGZyYWdtZW50LT5hZGRWaXN1YWxPdmVyZmxvd0ZvckJveCh0aGlzLCBjaGlsZFZpc3VhbE92ZXJm
bG93UmVjdCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0yMTg4LDcgKzIxODgsNyBAQCBib29s
IFJlbmRlckJsb2NrRmxvdzo6cG9zaXRpb25OZXdGbG9hdE9uCiAgICAgICAgICAgICBSZW5kZXJC
b3gmIGZsb2F0Qm94ID0gZmxvYXRpbmdPYmplY3QucmVuZGVyZXIoKTsKICAgICAgICAgICAgIHNl
dExvZ2ljYWxUb3BGb3JDaGlsZChmbG9hdEJveCwgbG9naWNhbFRvcEZvckNoaWxkKGZsb2F0Qm94
KSArIG1hcmdpbkJlZm9yZUZvckNoaWxkKGZsb2F0Qm94KSArIHBhZ2luYXRpb25TdHJ1dCk7CiAK
LSAgICAgICAgICAgIGlmICh1cGRhdGVSZWdpb25SYW5nZUZvckJveENoaWxkKGZsb2F0Qm94KSkK
KyAgICAgICAgICAgIGlmICh1cGRhdGVGcmFnbWVudFJhbmdlRm9yQm94Q2hpbGQoZmxvYXRCb3gp
KQogICAgICAgICAgICAgICAgIGZsb2F0Qm94LnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7
CiAgICAgICAgICAgICBlbHNlIGlmIChpczxSZW5kZXJCbG9jaz4oZmxvYXRCb3gpKQogICAgICAg
ICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPihmbG9hdEJveCkuc2V0Q2hpbGROZWVkc0xh
eW91dChNYXJrT25seVRoaXMpOwpAQCAtMjI0OCwxNyArMjI0OCwxNyBAQCBMYXlvdXRVbml0IFJl
bmRlckJsb2NrRmxvdzo6c3RhcnRBbGlnbmVkCiAgICAgcmV0dXJuIGxvZ2ljYWxMZWZ0OwogfQog
Ci12b2lkIFJlbmRlckJsb2NrRmxvdzo6dXBkYXRlUmVnaW9uRm9yTGluZShSb290SW5saW5lQm94
KiBsaW5lQm94KSBjb25zdAordm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnVwZGF0ZUZyYWdtZW50Rm9y
TGluZShSb290SW5saW5lQm94KiBsaW5lQm94KSBjb25zdAogewogICAgIEFTU0VSVChsaW5lQm94
KTsKIAotICAgIGlmICghaGFzUmVnaW9uUmFuZ2VJbkZsb3dUaHJlYWQoKSkKLSAgICAgICAgbGlu
ZUJveC0+Y2xlYXJDb250YWluaW5nUmVnaW9uKCk7CisgICAgaWYgKCFoYXNGcmFnbWVudFJhbmdl
SW5GbG93VGhyZWFkKCkpCisgICAgICAgIGxpbmVCb3gtPmNsZWFyQ29udGFpbmluZ0ZyYWdtZW50
KCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChhdXRvIGNvbnRhaW5pbmdSZWdpb24gPSByZWdp
b25BdEJsb2NrT2Zmc2V0KGxpbmVCb3gtPmxpbmVUb3BXaXRoTGVhZGluZygpKSkKLSAgICAgICAg
ICAgIGxpbmVCb3gtPnNldENvbnRhaW5pbmdSZWdpb24oKmNvbnRhaW5pbmdSZWdpb24pOworICAg
ICAgICBpZiAoYXV0byBjb250YWluaW5nRnJhZ21lbnQgPSBmcmFnbWVudEF0QmxvY2tPZmZzZXQo
bGluZUJveC0+bGluZVRvcFdpdGhMZWFkaW5nKCkpKQorICAgICAgICAgICAgbGluZUJveC0+c2V0
Q29udGFpbmluZ0ZyYWdtZW50KCpjb250YWluaW5nRnJhZ21lbnQpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBsaW5lQm94LT5jbGVhckNvbnRhaW5pbmdSZWdpb24oKTsKKyAgICAgICAgICAg
IGxpbmVCb3gtPmNsZWFyQ29udGFpbmluZ0ZyYWdtZW50KCk7CiAgICAgfQogCiAgICAgUm9vdElu
bGluZUJveCogcHJldkxpbmVCb3ggPSBsaW5lQm94LT5wcmV2Um9vdEJveCgpOwpAQCAtMjI2OCw3
ICsyMjY4LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnVwZGF0ZVJlZ2lvbkZvckxpbgogICAg
IC8vIFRoaXMgY2hlY2sgaXMgbW9yZSBhY2N1cmF0ZSB0aGFuIHRoZSBvbmUgaW4gfGFkanVzdExp
bmVQb3NpdGlvbkZvclBhZ2luYXRpb258IGJlY2F1c2UgaXQgdGFrZXMgaW50bwogICAgIC8vIGFj
Y291bnQganVzdCB0aGUgY29udGFpbmVyIGNoYW5nZXMgYmV0d2VlbiBsaW5lcy4gVGhlIGJlZm9y
ZSBtZW50aW9uZWQgZnVuY3Rpb24gZG9lc24ndCBzZXQgdGhlIGZsYWcKICAgICAvLyBjb3JyZWN0
bHkgaWYgdGhlIGxpbmUgaXMgcG9zaXRpb25lZCBhdCB0aGUgdG9wIG9mIHRoZSBsYXN0IGZyYWdt
ZW50IGNvbnRhaW5lci4KLSAgICBpZiAobGluZUJveC0+Y29udGFpbmluZ1JlZ2lvbigpICE9IHBy
ZXZMaW5lQm94LT5jb250YWluaW5nUmVnaW9uKCkpCisgICAgaWYgKGxpbmVCb3gtPmNvbnRhaW5p
bmdGcmFnbWVudCgpICE9IHByZXZMaW5lQm94LT5jb250YWluaW5nRnJhZ21lbnQoKSkKICAgICAg
ICAgbGluZUJveC0+c2V0SXNGaXJzdEFmdGVyUGFnZUJyZWFrKHRydWUpOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMjIyNDYyKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDcgKzUwLDcgQEAKICNpbmNsdWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgi
CiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCi0jaW5jbHVkZSAiUmVuZGVyQm94UmVnaW9uSW5mby5o
IgorI2luY2x1ZGUgIlJlbmRlckJveEZyYWdtZW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlckNo
aWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guaCIK
ICNpbmNsdWRlICJSZW5kZXJGbGV4aWJsZUJveC5oIgpAQCAtNjAsNyArNjAsNyBAQAogI2luY2x1
ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgiCi0jaW5jbHVkZSAiUmVuZGVy
UmVnaW9uLmgiCisjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRDb250YWluZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUg
IlJlbmRlclZpZXcuaCIKQEAgLTE2NCw1MyArMTY0LDUzIEBAIHZvaWQgUmVuZGVyQm94Ojp3aWxs
QmVEZXN0cm95ZWQoKQogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0Ojp3aWxsQmVEZXN0cm95ZWQo
KTsKIH0KIAotUmVuZGVyUmVnaW9uKiBSZW5kZXJCb3g6OmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lv
bnMoUmVuZGVyUmVnaW9uKiByZWdpb24pIGNvbnN0CitSZW5kZXJGcmFnbWVudENvbnRhaW5lciog
UmVuZGVyQm94OjpjbGFtcFRvU3RhcnRBbmRFbmRGcmFnbWVudHMoUmVuZGVyRnJhZ21lbnRDb250
YWluZXIqIGZyYWdtZW50KSBjb25zdAogewogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJl
YWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CiAKLSAgICBBU1NFUlQoaXNSZW5kZXJW
aWV3KCkgfHwgKHJlZ2lvbiAmJiBmbG93VGhyZWFkKSk7CisgICAgQVNTRVJUKGlzUmVuZGVyVmll
dygpIHx8IChmcmFnbWVudCAmJiBmbG93VGhyZWFkKSk7CiAgICAgaWYgKGlzUmVuZGVyVmlldygp
KQotICAgICAgICByZXR1cm4gcmVnaW9uOworICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CiAKICAg
ICAvLyBXZSBuZWVkIHRvIGNsYW1wIHRvIHRoZSBibG9jaywgc2luY2Ugd2Ugd2FudCBhbnkgbGlu
ZXMgb3IgYmxvY2tzIHRoYXQgb3ZlcmZsb3cgb3V0IG9mIHRoZQogICAgIC8vIGxvZ2ljYWwgdG9w
IG9yIGxvZ2ljYWwgYm90dG9tIG9mIHRoZSBibG9jayB0byBzaXplIGFzIHRob3VnaCB0aGUgYm9y
ZGVyIGJveCBpbiB0aGUgZmlyc3QgYW5kCi0gICAgLy8gbGFzdCByZWdpb25zIGV4dGVuZGVkIGlu
ZmluaXRlbHkuIE90aGVyd2lzZSB0aGUgbGluZXMgYXJlIGdvaW5nIHRvIHNpemUgYWNjb3JkaW5n
IHRvIHRoZSByZWdpb25zCi0gICAgLy8gdGhleSBvdmVyZmxvdyBpbnRvLCB3aGljaCBtYWtlcyBu
byBzZW5zZSB3aGVuIHRoaXMgYmxvY2sgZG9lc24ndCBleGlzdCBpbiB8cmVnaW9ufCBhdCBhbGwu
Ci0gICAgUmVuZGVyUmVnaW9uKiBzdGFydFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgUmVuZGVyUmVn
aW9uKiBlbmRSZWdpb24gPSBudWxscHRyOwotICAgIGlmICghZmxvd1RocmVhZC0+Z2V0UmVnaW9u
UmFuZ2VGb3JCb3godGhpcywgc3RhcnRSZWdpb24sIGVuZFJlZ2lvbikpCi0gICAgICAgIHJldHVy
biByZWdpb247Ci0KLSAgICBpZiAocmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRl
bnQoKSA8IHN0YXJ0UmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRlbnQoKSkKLSAg
ICAgICAgcmV0dXJuIHN0YXJ0UmVnaW9uOwotICAgIGlmIChyZWdpb24tPmxvZ2ljYWxUb3BGb3JG
bG93VGhyZWFkQ29udGVudCgpID4gZW5kUmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1RocmVhZENv
bnRlbnQoKSkKLSAgICAgICAgcmV0dXJuIGVuZFJlZ2lvbjsKKyAgICAvLyBsYXN0IGZyYWdtZW50
cyBleHRlbmRlZCBpbmZpbml0ZWx5LiBPdGhlcndpc2UgdGhlIGxpbmVzIGFyZSBnb2luZyB0byBz
aXplIGFjY29yZGluZyB0byB0aGUgZnJhZ21lbnRzCisgICAgLy8gdGhleSBvdmVyZmxvdyBpbnRv
LCB3aGljaCBtYWtlcyBubyBzZW5zZSB3aGVuIHRoaXMgYmxvY2sgZG9lc24ndCBleGlzdCBpbiB8
ZnJhZ21lbnR8IGF0IGFsbC4KKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogc3RhcnRGcmFn
bWVudCA9IG51bGxwdHI7CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGVuZEZyYWdtZW50
ID0gbnVsbHB0cjsKKyAgICBpZiAoIWZsb3dUaHJlYWQtPmdldEZyYWdtZW50UmFuZ2VGb3JCb3go
dGhpcywgc3RhcnRGcmFnbWVudCwgZW5kRnJhZ21lbnQpKQorICAgICAgICByZXR1cm4gZnJhZ21l
bnQ7CisKKyAgICBpZiAoZnJhZ21lbnQtPmxvZ2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgp
IDwgc3RhcnRGcmFnbWVudC0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkpCisgICAg
ICAgIHJldHVybiBzdGFydEZyYWdtZW50OworICAgIGlmIChmcmFnbWVudC0+bG9naWNhbFRvcEZv
ckZsb3dUaHJlYWRDb250ZW50KCkgPiBlbmRGcmFnbWVudC0+bG9naWNhbFRvcEZvckZsb3dUaHJl
YWRDb250ZW50KCkpCisgICAgICAgIHJldHVybiBlbmRGcmFnbWVudDsKIAotICAgIHJldHVybiBy
ZWdpb247CisgICAgcmV0dXJuIGZyYWdtZW50OwogfQogCi1ib29sIFJlbmRlckJveDo6aGFzUmVn
aW9uUmFuZ2VJbkZsb3dUaHJlYWQoKSBjb25zdAorYm9vbCBSZW5kZXJCb3g6Omhhc0ZyYWdtZW50
UmFuZ2VJbkZsb3dUaHJlYWQoKSBjb25zdAogewogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dU
aHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaWYgKCFmbG93VGhyZWFk
IHx8ICFmbG93VGhyZWFkLT5oYXNWYWxpZFJlZ2lvbkluZm8oKSkKKyAgICBpZiAoIWZsb3dUaHJl
YWQgfHwgIWZsb3dUaHJlYWQtPmhhc1ZhbGlkRnJhZ21lbnRJbmZvKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHJldHVybiBmbG93VGhyZWFkLT5oYXNDYWNoZWRSZWdpb25SYW5nZUZv
ckJveCgqdGhpcyk7CisgICAgcmV0dXJuIGZsb3dUaHJlYWQtPmhhc0NhY2hlZEZyYWdtZW50UmFu
Z2VGb3JCb3goKnRoaXMpOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckJveDo6Y2xpZW50Qm94UmVj
dEluUmVnaW9uKFJlbmRlclJlZ2lvbiogcmVnaW9uKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJC
b3g6OmNsaWVudEJveFJlY3RJbkZyYWdtZW50KFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFn
bWVudCkgY29uc3QKIHsKLSAgICBpZiAoIXJlZ2lvbikKKyAgICBpZiAoIWZyYWdtZW50KQogICAg
ICAgICByZXR1cm4gY2xpZW50Qm94UmVjdCgpOwogCi0gICAgTGF5b3V0UmVjdCBjbGllbnRCb3gg
PSBib3JkZXJCb3hSZWN0SW5SZWdpb24ocmVnaW9uKTsKKyAgICBMYXlvdXRSZWN0IGNsaWVudEJv
eCA9IGJvcmRlckJveFJlY3RJbkZyYWdtZW50KGZyYWdtZW50KTsKICAgICBjbGllbnRCb3guc2V0
TG9jYXRpb24oY2xpZW50Qm94LmxvY2F0aW9uKCkgKyBMYXlvdXRTaXplKGJvcmRlckxlZnQoKSwg
Ym9yZGVyVG9wKCkpKTsKICAgICBjbGllbnRCb3guc2V0U2l6ZShjbGllbnRCb3guc2l6ZSgpIC0g
TGF5b3V0U2l6ZShib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpICsgdmVydGljYWxTY3JvbGxi
YXJXaWR0aCgpLCBib3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpICsgaG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCgpKSk7CiAKICAgICByZXR1cm4gY2xpZW50Qm94OwogfQogCi1MYXlvdXRSZWN0
IFJlbmRlckJveDo6Ym9yZGVyQm94UmVjdEluUmVnaW9uKFJlbmRlclJlZ2lvbiosIFJlbmRlckJv
eFJlZ2lvbkluZm9GbGFncykgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyQm94Ojpib3JkZXJCb3hS
ZWN0SW5GcmFnbWVudChSZW5kZXJGcmFnbWVudENvbnRhaW5lciosIFJlbmRlckJveEZyYWdtZW50
SW5mb0ZsYWdzKSBjb25zdAogewogICAgIHJldHVybiBib3JkZXJCb3hSZWN0KCk7CiB9CkBAIC02
MjEsMTIgKzYyMSwxMiBAQCB2b2lkIFJlbmRlckJveDo6dXBkYXRlTGF5ZXJUcmFuc2Zvcm0oKQog
ICAgICAgICBsYXllcigpLT51cGRhdGVUcmFuc2Zvcm0oKTsKIH0KIAotTGF5b3V0VW5pdCBSZW5k
ZXJCb3g6OmNvbnN0cmFpbkxvZ2ljYWxXaWR0aEluUmVnaW9uQnlNaW5NYXgoTGF5b3V0VW5pdCBs
b2dpY2FsV2lkdGgsIExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgsIFJlbmRlckJsb2NrJiBjYiwg
UmVuZGVyUmVnaW9uKiByZWdpb24pIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJveDo6Y29uc3Ry
YWluTG9naWNhbFdpZHRoSW5GcmFnbWVudEJ5TWluTWF4KExheW91dFVuaXQgbG9naWNhbFdpZHRo
LCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoLCBSZW5kZXJCbG9jayYgY2IsIFJlbmRlckZyYWdt
ZW50Q29udGFpbmVyKiBmcmFnbWVudCkgY29uc3QKIHsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGVUb1VzZSA9IHN0eWxlKCk7CiAgICAgaWYgKCFzdHlsZVRvVXNlLmxvZ2ljYWxNYXhXaWR0
aCgpLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIGxvZ2ljYWxXaWR0aCA9IHN0ZDo6bWluKGxvZ2lj
YWxXaWR0aCwgY29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uVXNpbmcoTWF4U2l6ZSwgc3R5bGVU
b1VzZS5sb2dpY2FsTWF4V2lkdGgoKSwgYXZhaWxhYmxlV2lkdGgsIGNiLCByZWdpb24pKTsKLSAg
ICByZXR1cm4gc3RkOjptYXgobG9naWNhbFdpZHRoLCBjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdp
b25Vc2luZyhNaW5TaXplLCBzdHlsZVRvVXNlLmxvZ2ljYWxNaW5XaWR0aCgpLCBhdmFpbGFibGVX
aWR0aCwgY2IsIHJlZ2lvbikpOworICAgICAgICBsb2dpY2FsV2lkdGggPSBzdGQ6Om1pbihsb2dp
Y2FsV2lkdGgsIGNvbXB1dGVMb2dpY2FsV2lkdGhJbkZyYWdtZW50VXNpbmcoTWF4U2l6ZSwgc3R5
bGVUb1VzZS5sb2dpY2FsTWF4V2lkdGgoKSwgYXZhaWxhYmxlV2lkdGgsIGNiLCBmcmFnbWVudCkp
OworICAgIHJldHVybiBzdGQ6Om1heChsb2dpY2FsV2lkdGgsIGNvbXB1dGVMb2dpY2FsV2lkdGhJ
bkZyYWdtZW50VXNpbmcoTWluU2l6ZSwgc3R5bGVUb1VzZS5sb2dpY2FsTWluV2lkdGgoKSwgYXZh
aWxhYmxlV2lkdGgsIGNiLCBmcmFnbWVudCkpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckJveDo6
Y29uc3RyYWluTG9naWNhbEhlaWdodEJ5TWluTWF4KExheW91dFVuaXQgbG9naWNhbEhlaWdodCwg
c3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBpbnRyaW5zaWNDb250ZW50SGVpZ2h0KSBjb25zdApA
QCAtMTE3Nyw3ICsxMTc3LDcgQEAgYm9vbCBSZW5kZXJCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlcwogCiAgICAgLy8gQ2hlY2sgb3VyIGJvdW5kcyBuZXh0LiBGb3IgdGhpcyBwdXJwb3NlIGFs
d2F5cyBhc3N1bWUgdGhhdCB3ZSBjYW4gb25seSBiZSBoaXQgaW4gdGhlCiAgICAgLy8gZm9yZWdy
b3VuZCBwaGFzZSAod2hpY2ggaXMgdHJ1ZSBmb3IgcmVwbGFjZWQgZWxlbWVudHMgbGlrZSBpbWFn
ZXMpLgotICAgIExheW91dFJlY3QgYm91bmRzUmVjdCA9IGJvcmRlckJveFJlY3RJblJlZ2lvbihu
dWxscHRyKTsKKyAgICBMYXlvdXRSZWN0IGJvdW5kc1JlY3QgPSBib3JkZXJCb3hSZWN0SW5GcmFn
bWVudChudWxscHRyKTsKICAgICBib3VuZHNSZWN0Lm1vdmVCeShhZGp1c3RlZExvY2F0aW9uKTsK
ICAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdy
b3VuZCAmJiBsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMoYm91bmRzUmVjdCkpIHsKICAg
ICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIucG9p
bnQoKSAtIHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0aW9uKSk7CkBAIC0xMjQ1LDcgKzEyNDUs
NyBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWluCiAgICAgaWYgKCFw
YWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KCp0aGlzKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgTGF5b3V0UmVjdCBwYWludFJlY3QgPSBib3JkZXJCb3hSZWN0SW5SZWdpb24obnVsbHB0
cik7CisgICAgTGF5b3V0UmVjdCBwYWludFJlY3QgPSBib3JkZXJCb3hSZWN0SW5GcmFnbWVudChu
dWxscHRyKTsKICAgICBwYWludFJlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKICAgICBhZGp1c3RC
b3JkZXJCb3hSZWN0Rm9yUGFpbnRpbmcocGFpbnRSZWN0KTsKIApAQCAtMTc1MywxMSArMTc1Mywx
MSBAQCB2b2lkIFJlbmRlckJveDo6cG9wQ29udGVudHNDbGlwKFBhaW50SW5mCiAgICAgICAgIHBh
aW50SW5mby5waGFzZSA9IG9yaWdpbmFsUGhhc2U7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyQm94
OjpvdmVyZmxvd0NsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyUmVn
aW9uKiByZWdpb24sIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSwgUGFp
bnRQaGFzZSkKK0xheW91dFJlY3QgUmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0KGNvbnN0IExh
eW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50LCBP
dmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3ksIFBhaW50UGhhc2UpCiB7CiAg
ICAgLy8gRklYTUU6IFdoZW4gb3ZlcmZsb3ctY2xpcCAoQ1NTMykgaXMgaW1wbGVtZW50ZWQsIHdl
J2xsIG9idGFpbiB0aGUgcHJvcGVydHkKICAgICAvLyBoZXJlLgotICAgIExheW91dFJlY3QgY2xp
cFJlY3QgPSBib3JkZXJCb3hSZWN0SW5SZWdpb24ocmVnaW9uKTsKKyAgICBMYXlvdXRSZWN0IGNs
aXBSZWN0ID0gYm9yZGVyQm94UmVjdEluRnJhZ21lbnQoZnJhZ21lbnQpOwogICAgIGNsaXBSZWN0
LnNldExvY2F0aW9uKGxvY2F0aW9uICsgY2xpcFJlY3QubG9jYXRpb24oKSArIExheW91dFNpemUo
Ym9yZGVyTGVmdCgpLCBib3JkZXJUb3AoKSkpOwogICAgIGNsaXBSZWN0LnNldFNpemUoY2xpcFJl
Y3Quc2l6ZSgpIC0gTGF5b3V0U2l6ZShib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpLCBib3Jk
ZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpKSk7CiAKQEAgLTE3NzEsOSArMTc3MSw5IEBAIExheW91
dFJlY3QgUmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0KGMKICAgICByZXR1cm4gY2xpcFJlY3Q7
CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyQm94OjpjbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYg
bG9jYXRpb24sIFJlbmRlclJlZ2lvbiogcmVnaW9uKQorTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmNs
aXBSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyRnJhZ21lbnRDb250YWlu
ZXIqIGZyYWdtZW50KQogewotICAgIExheW91dFJlY3QgYm9yZGVyQm94UmVjdCA9IGJvcmRlckJv
eFJlY3RJblJlZ2lvbihyZWdpb24pOworICAgIExheW91dFJlY3QgYm9yZGVyQm94UmVjdCA9IGJv
cmRlckJveFJlY3RJbkZyYWdtZW50KGZyYWdtZW50KTsKICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0
ID0gTGF5b3V0UmVjdChib3JkZXJCb3hSZWN0LmxvY2F0aW9uKCkgKyBsb2NhdGlvbiwgYm9yZGVy
Qm94UmVjdC5zaXplKCkpOwogCiAgICAgaWYgKCFzdHlsZSgpLmNsaXBMZWZ0KCkuaXNBdXRvKCkp
IHsKQEAgLTE3ODIsNyArMTc4Miw3IEBAIExheW91dFJlY3QgUmVuZGVyQm94OjpjbGlwUmVjdChj
b25zdCBMYXkKICAgICAgICAgY2xpcFJlY3QuY29udHJhY3QoYywgMCk7CiAgICAgfQogCi0gICAg
Ly8gV2UgZG9uJ3QgdXNlIHRoZSByZWdpb24tc3BlY2lmaWMgYm9yZGVyIGJveCdzIHdpZHRoIGFu
ZCBoZWlnaHQgc2luY2UgY2xpcCBvZmZzZXRzIGFyZSAoc3R1cGlkbHkpIHNwZWNpZmllZAorICAg
IC8vIFdlIGRvbid0IHVzZSB0aGUgZnJhZ21lbnQtc3BlY2lmaWMgYm9yZGVyIGJveCdzIHdpZHRo
IGFuZCBoZWlnaHQgc2luY2UgY2xpcCBvZmZzZXRzIGFyZSAoc3R1cGlkbHkpIHNwZWNpZmllZAog
ICAgIC8vIGZyb20gdGhlIGxlZnQgYW5kIHRvcCBlZGdlcy4gVGhlcmVmb3JlIGl0J3MgYmV0dGVy
IHRvIGF2b2lkIGNvbnN0cmFpbmluZyB0byBzbWFsbGVyIHdpZHRocyBhbmQgaGVpZ2h0cy4KIAog
ICAgIGlmICghc3R5bGUoKS5jbGlwUmlnaHQoKS5pc0F1dG8oKSkKQEAgLTE4MDAsMTggKzE4MDAs
MTggQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmNsaXBSZWN0KGNvbnN0IExheQogICAgIHJldHVy
biBjbGlwUmVjdDsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJCb3g6OnNocmlua0xvZ2ljYWxXaWR0
aFRvQXZvaWRGbG9hdHMoTGF5b3V0VW5pdCBjaGlsZE1hcmdpblN0YXJ0LCBMYXlvdXRVbml0IGNo
aWxkTWFyZ2luRW5kLCBjb25zdCBSZW5kZXJCbG9jayYgY2IsIFJlbmRlclJlZ2lvbiogcmVnaW9u
KSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCb3g6OnNocmlua0xvZ2ljYWxXaWR0aFRvQXZvaWRG
bG9hdHMoTGF5b3V0VW5pdCBjaGlsZE1hcmdpblN0YXJ0LCBMYXlvdXRVbml0IGNoaWxkTWFyZ2lu
RW5kLCBjb25zdCBSZW5kZXJCbG9jayYgY2IsIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFn
bWVudCkgY29uc3QKIHsgICAgCi0gICAgUmVuZGVyUmVnaW9uKiBjb250YWluaW5nQmxvY2tSZWdp
b24gPSBudWxscHRyOworICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBjb250YWluaW5nQmxv
Y2tGcmFnbWVudCA9IG51bGxwdHI7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wUG9zaXRpb24g
PSBsb2dpY2FsVG9wKCk7Ci0gICAgaWYgKHJlZ2lvbikgewotICAgICAgICBMYXlvdXRVbml0IG9m
ZnNldEZyb21Mb2dpY2FsVG9wT2ZSZWdpb24gPSByZWdpb24gPyByZWdpb24tPmxvZ2ljYWxUb3BG
b3JGbG93VGhyZWFkQ29udGVudCgpIC0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgp
IDogTGF5b3V0VW5pdCgpOwotICAgICAgICBsb2dpY2FsVG9wUG9zaXRpb24gPSBzdGQ6Om1heChs
b2dpY2FsVG9wUG9zaXRpb24sIGxvZ2ljYWxUb3BQb3NpdGlvbiArIG9mZnNldEZyb21Mb2dpY2Fs
VG9wT2ZSZWdpb24pOwotICAgICAgICBjb250YWluaW5nQmxvY2tSZWdpb24gPSBjYi5jbGFtcFRv
U3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7CisgICAgaWYgKGZyYWdtZW50KSB7CisgICAgICAg
IExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZyYWdtZW50ID0gZnJhZ21lbnQgPyBm
cmFnbWVudC0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkgLSBvZmZzZXRGcm9tTG9n
aWNhbFRvcE9mRmlyc3RQYWdlKCkgOiBMYXlvdXRVbml0KCk7CisgICAgICAgIGxvZ2ljYWxUb3BQ
b3NpdGlvbiA9IHN0ZDo6bWF4KGxvZ2ljYWxUb3BQb3NpdGlvbiwgbG9naWNhbFRvcFBvc2l0aW9u
ICsgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZyYWdtZW50KTsKKyAgICAgICAgY29udGFpbmluZ0Js
b2NrRnJhZ21lbnQgPSBjYi5jbGFtcFRvU3RhcnRBbmRFbmRGcmFnbWVudHMoZnJhZ21lbnQpOwog
ICAgIH0KIAogICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IGNiLmxvZ2ljYWxIZWlnaHRG
b3JDaGlsZCgqdGhpcyk7Ci0gICAgTGF5b3V0VW5pdCByZXN1bHQgPSBjYi5hdmFpbGFibGVMb2dp
Y2FsV2lkdGhGb3JMaW5lSW5SZWdpb24obG9naWNhbFRvcFBvc2l0aW9uLCBEb05vdEluZGVudFRl
eHQsIGNvbnRhaW5pbmdCbG9ja1JlZ2lvbiwgbG9naWNhbEhlaWdodCkgLSBjaGlsZE1hcmdpblN0
YXJ0IC0gY2hpbGRNYXJnaW5FbmQ7CisgICAgTGF5b3V0VW5pdCByZXN1bHQgPSBjYi5hdmFpbGFi
bGVMb2dpY2FsV2lkdGhGb3JMaW5lSW5GcmFnbWVudChsb2dpY2FsVG9wUG9zaXRpb24sIERvTm90
SW5kZW50VGV4dCwgY29udGFpbmluZ0Jsb2NrRnJhZ21lbnQsIGxvZ2ljYWxIZWlnaHQpIC0gY2hp
bGRNYXJnaW5TdGFydCAtIGNoaWxkTWFyZ2luRW5kOwogCiAgICAgLy8gV2UgbmVlZCB0byBzZWUg
aWYgbWFyZ2lucyBvbiBlaXRoZXIgdGhlIHN0YXJ0IHNpZGUgb3IgdGhlIGVuZCBzaWRlIGNhbiBj
b250YWluIHRoZSBmbG9hdHMgaW4gcXVlc3Rpb24uIElmIHRoZXkgY2FuLAogICAgIC8vIHRoZW4g
anVzdCB1c2luZyB0aGUgbGluZSB3aWR0aCBpcyBpbmFjY3VyYXRlLiBJbiB0aGUgY2FzZSB3aGVy
ZSBhIGZsb2F0IGNvbXBsZXRlbHkgZml0cywgd2UgZG9uJ3QgbmVlZCB0byB1c2UgdGhlIGxpbmUK
QEAgLTE4MTksOSArMTgxOSw5IEBAIExheW91dFVuaXQgUmVuZGVyQm94OjpzaHJpbmtMb2dpY2Fs
V2lkdGgKICAgICAvLyBkb2Vzbid0IGZpdCwgd2UgY2FuIHVzZSB0aGUgbGluZSBvZmZzZXQsIGJ1
dCB3ZSBuZWVkIHRvIGdyb3cgaXQgYnkgdGhlIG1hcmdpbiB0byByZWZsZWN0IHRoZSBmYWN0IHRo
YXQgdGhlIG1hcmdpbiB3YXMKICAgICAvLyAiY29uc3VtZWQiIGJ5IHRoZSBmbG9hdC4gTmVnYXRp
dmUgbWFyZ2lucyBhcmVuJ3QgY29uc3VtZWQgYnkgdGhlIGZsb2F0LCBhbmQgc28gd2UgaWdub3Jl
IHRoZW0uCiAgICAgaWYgKGNoaWxkTWFyZ2luU3RhcnQgPiAwKSB7Ci0gICAgICAgIExheW91dFVu
aXQgc3RhcnRDb250ZW50U2lkZSA9IGNiLnN0YXJ0T2Zmc2V0Rm9yQ29udGVudChjb250YWluaW5n
QmxvY2tSZWdpb24pOworICAgICAgICBMYXlvdXRVbml0IHN0YXJ0Q29udGVudFNpZGUgPSBjYi5z
dGFydE9mZnNldEZvckNvbnRlbnQoY29udGFpbmluZ0Jsb2NrRnJhZ21lbnQpOwogICAgICAgICBM
YXlvdXRVbml0IHN0YXJ0Q29udGVudFNpZGVXaXRoTWFyZ2luID0gc3RhcnRDb250ZW50U2lkZSAr
IGNoaWxkTWFyZ2luU3RhcnQ7Ci0gICAgICAgIExheW91dFVuaXQgc3RhcnRPZmZzZXQgPSBjYi5z
dGFydE9mZnNldEZvckxpbmVJblJlZ2lvbihsb2dpY2FsVG9wUG9zaXRpb24sIERvTm90SW5kZW50
VGV4dCwgY29udGFpbmluZ0Jsb2NrUmVnaW9uLCBsb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgTGF5
b3V0VW5pdCBzdGFydE9mZnNldCA9IGNiLnN0YXJ0T2Zmc2V0Rm9yTGluZUluRnJhZ21lbnQobG9n
aWNhbFRvcFBvc2l0aW9uLCBEb05vdEluZGVudFRleHQsIGNvbnRhaW5pbmdCbG9ja0ZyYWdtZW50
LCBsb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID4gc3RhcnRDb250ZW50
U2lkZVdpdGhNYXJnaW4pCiAgICAgICAgICAgICByZXN1bHQgKz0gY2hpbGRNYXJnaW5TdGFydDsK
ICAgICAgICAgZWxzZQpAQCAtMTgyOSw5ICsxODI5LDkgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6
OnNocmlua0xvZ2ljYWxXaWR0aAogICAgIH0KICAgICAKICAgICBpZiAoY2hpbGRNYXJnaW5FbmQg
PiAwKSB7Ci0gICAgICAgIExheW91dFVuaXQgZW5kQ29udGVudFNpZGUgPSBjYi5lbmRPZmZzZXRG
b3JDb250ZW50KGNvbnRhaW5pbmdCbG9ja1JlZ2lvbik7CisgICAgICAgIExheW91dFVuaXQgZW5k
Q29udGVudFNpZGUgPSBjYi5lbmRPZmZzZXRGb3JDb250ZW50KGNvbnRhaW5pbmdCbG9ja0ZyYWdt
ZW50KTsKICAgICAgICAgTGF5b3V0VW5pdCBlbmRDb250ZW50U2lkZVdpdGhNYXJnaW4gPSBlbmRD
b250ZW50U2lkZSArIGNoaWxkTWFyZ2luRW5kOwotICAgICAgICBMYXlvdXRVbml0IGVuZE9mZnNl
dCA9IGNiLmVuZE9mZnNldEZvckxpbmVJblJlZ2lvbihsb2dpY2FsVG9wUG9zaXRpb24sIERvTm90
SW5kZW50VGV4dCwgY29udGFpbmluZ0Jsb2NrUmVnaW9uLCBsb2dpY2FsSGVpZ2h0KTsKKyAgICAg
ICAgTGF5b3V0VW5pdCBlbmRPZmZzZXQgPSBjYi5lbmRPZmZzZXRGb3JMaW5lSW5GcmFnbWVudChs
b2dpY2FsVG9wUG9zaXRpb24sIERvTm90SW5kZW50VGV4dCwgY29udGFpbmluZ0Jsb2NrRnJhZ21l
bnQsIGxvZ2ljYWxIZWlnaHQpOwogICAgICAgICBpZiAoZW5kT2Zmc2V0ID4gZW5kQ29udGVudFNp
ZGVXaXRoTWFyZ2luKQogICAgICAgICAgICAgcmVzdWx0ICs9IGNoaWxkTWFyZ2luRW5kOwogICAg
ICAgICBlbHNlCkBAIC0xODY1LDMzICsxODY1LDMzIEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpj
b250YWluaW5nQmxvY2tMb2cKICAgICByZXR1cm4gTGF5b3V0VW5pdCgpOwogfQogCi1MYXlvdXRV
bml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudEluUmVn
aW9uKFJlbmRlclJlZ2lvbiogcmVnaW9uKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNv
bnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnRJbkZyYWdtZW50KFJlbmRlckZyYWdt
ZW50Q29udGFpbmVyKiBmcmFnbWVudCkgY29uc3QKIHsKLSAgICBpZiAoIXJlZ2lvbikKKyAgICBp
ZiAoIWZyYWdtZW50KQogICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRo
Rm9yQ29udGVudCgpOwogCiAgICAgUmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7
Ci0gICAgUmVuZGVyUmVnaW9uKiBjb250YWluaW5nQmxvY2tSZWdpb24gPSBjYi0+Y2xhbXBUb1N0
YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pOwotICAgIC8vIEZJWE1FOiBJdCdzIHVuY2xlYXIgaWYg
YSByZWdpb24ncyBjb250ZW50IHNob3VsZCB1c2UgdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBvdmVy
cmlkZSBsb2dpY2FsIHdpZHRoLgorICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBjb250YWlu
aW5nQmxvY2tGcmFnbWVudCA9IGNiLT5jbGFtcFRvU3RhcnRBbmRFbmRGcmFnbWVudHMoZnJhZ21l
bnQpOworICAgIC8vIEZJWE1FOiBJdCdzIHVuY2xlYXIgaWYgYSBmcmFnbWVudCdzIGNvbnRlbnQg
c2hvdWxkIHVzZSB0aGUgY29udGFpbmluZyBibG9jaydzIG92ZXJyaWRlIGxvZ2ljYWwgd2lkdGgu
CiAgICAgLy8gSWYgaXQgc2hvdWxkLCB0aGUgZm9sbG93aW5nIGxpbmUgc2hvdWxkIGNhbGwgY29u
dGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudC4KICAgICBMYXlvdXRVbml0IHJlc3Vs
dCA9IGNiLT5hdmFpbGFibGVMb2dpY2FsV2lkdGgoKTsKLSAgICBSZW5kZXJCb3hSZWdpb25JbmZv
KiBib3hJbmZvID0gY2ItPnJlbmRlckJveFJlZ2lvbkluZm8oY29udGFpbmluZ0Jsb2NrUmVnaW9u
KTsKKyAgICBSZW5kZXJCb3hGcmFnbWVudEluZm8qIGJveEluZm8gPSBjYi0+cmVuZGVyQm94RnJh
Z21lbnRJbmZvKGNvbnRhaW5pbmdCbG9ja0ZyYWdtZW50KTsKICAgICBpZiAoIWJveEluZm8pCiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgcmV0dXJuIHN0ZDo6bWF4PExheW91dFVuaXQ+KDAs
IHJlc3VsdCAtIChjYi0+bG9naWNhbFdpZHRoKCkgLSBib3hJbmZvLT5sb2dpY2FsV2lkdGgoKSkp
OwogfQogCi1MYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrQXZhaWxhYmxlTGlu
ZVdpZHRoSW5SZWdpb24oUmVuZGVyUmVnaW9uKiByZWdpb24pIGNvbnN0CitMYXlvdXRVbml0IFJl
bmRlckJveDo6Y29udGFpbmluZ0Jsb2NrQXZhaWxhYmxlTGluZVdpZHRoSW5GcmFnbWVudChSZW5k
ZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQpIGNvbnN0CiB7CiAgICAgUmVuZGVyQmxvY2sq
IGNiID0gY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgUmVuZGVyUmVnaW9uKiBjb250YWluaW5nQmxv
Y2tSZWdpb24gPSBudWxscHRyOworICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBjb250YWlu
aW5nQmxvY2tGcmFnbWVudCA9IG51bGxwdHI7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wUG9z
aXRpb24gPSBsb2dpY2FsVG9wKCk7Ci0gICAgaWYgKHJlZ2lvbikgewotICAgICAgICBMYXlvdXRV
bml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZSZWdpb24gPSByZWdpb24gPyByZWdpb24tPmxvZ2lj
YWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgpIC0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0
UGFnZSgpIDogTGF5b3V0VW5pdCgpOwotICAgICAgICBsb2dpY2FsVG9wUG9zaXRpb24gPSBzdGQ6
Om1heChsb2dpY2FsVG9wUG9zaXRpb24sIGxvZ2ljYWxUb3BQb3NpdGlvbiArIG9mZnNldEZyb21M
b2dpY2FsVG9wT2ZSZWdpb24pOwotICAgICAgICBjb250YWluaW5nQmxvY2tSZWdpb24gPSBjYi0+
Y2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pOworICAgIGlmIChmcmFnbWVudCkgewor
ICAgICAgICBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGcmFnbWVudCA9IGZyYWdt
ZW50ID8gZnJhZ21lbnQtPmxvZ2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgpIC0gb2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIDogTGF5b3V0VW5pdCgpOworICAgICAgICBsb2dp
Y2FsVG9wUG9zaXRpb24gPSBzdGQ6Om1heChsb2dpY2FsVG9wUG9zaXRpb24sIGxvZ2ljYWxUb3BQ
b3NpdGlvbiArIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGcmFnbWVudCk7CisgICAgICAgIGNvbnRh
aW5pbmdCbG9ja0ZyYWdtZW50ID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZEZyYWdtZW50cyhmcmFn
bWVudCk7CiAgICAgfQotICAgIHJldHVybiBjYi0+YXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yTGlu
ZUluUmVnaW9uKGxvZ2ljYWxUb3BQb3NpdGlvbiwgRG9Ob3RJbmRlbnRUZXh0LCBjb250YWluaW5n
QmxvY2tSZWdpb24sIGF2YWlsYWJsZUxvZ2ljYWxIZWlnaHQoSW5jbHVkZU1hcmdpbkJvcmRlclBh
ZGRpbmcpKTsKKyAgICByZXR1cm4gY2ItPmF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmVJbkZy
YWdtZW50KGxvZ2ljYWxUb3BQb3NpdGlvbiwgRG9Ob3RJbmRlbnRUZXh0LCBjb250YWluaW5nQmxv
Y2tGcmFnbWVudCwgYXZhaWxhYmxlTG9naWNhbEhlaWdodChJbmNsdWRlTWFyZ2luQm9yZGVyUGFk
ZGluZykpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckJveDo6cGVycGVuZGljdWxhckNvbnRhaW5p
bmdCbG9ja0xvZ2ljYWxIZWlnaHQoKSBjb25zdApAQCAtMjAyNCw4ICsyMDI0LDggQEAgdm9pZCBS
ZW5kZXJCb3g6Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50KAogCiBMYXlvdXRTaXplIFJlbmRlckJv
eDo6b2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgTGF5
b3V0UG9pbnQmLCBib29sKiBvZmZzZXREZXBlbmRzT25Qb2ludCkgY29uc3QKIHsKLSAgICAvLyBB
IHJlZ2lvbiAiaGFzIiBib3hlcyBpbnNpZGUgaXQgd2l0aG91dCBiZWluZyB0aGVpciBjb250YWlu
ZXIuIAotICAgIEFTU0VSVCgmcmVuZGVyZXIgPT0gY29udGFpbmVyKCkgfHwgaXM8UmVuZGVyUmVn
aW9uPihyZW5kZXJlcikpOworICAgIC8vIEEgZnJhZ21lbnQgImhhcyIgYm94ZXMgaW5zaWRlIGl0
IHdpdGhvdXQgYmVpbmcgdGhlaXIgY29udGFpbmVyLiAKKyAgICBBU1NFUlQoJnJlbmRlcmVyID09
IGNvbnRhaW5lcigpIHx8IGlzPFJlbmRlckZyYWdtZW50Q29udGFpbmVyPihyZW5kZXJlcikpOwog
CiAgICAgTGF5b3V0U2l6ZSBvZmZzZXQ7ICAgIAogICAgIGlmIChpc0luRmxvd1Bvc2l0aW9uZWQo
KSkKQEAgLTIxNzQsMTggKzIxNzQsMTggQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmNvbXB1dGVS
ZWN0Rm9yUmVwYQogICAgICAgICByZXR1cm4gYWRqdXN0ZWRSZWN0OwogICAgIAogICAgIC8vIFRo
aXMgY29kZSBpc24ndCBuZWNlc3NhcnkgZm9yIGluLWZsb3cgUmVuZGVyRmxvd1RocmVhZHMuCi0g
ICAgLy8gRG9uJ3QgYWRkIHRoZSBsb2NhdGlvbiBvZiB0aGUgcmVnaW9uIGluIHRoZSBmbG93IHRo
cmVhZCBmb3IgYWJzb2x1dGUgcG9zaXRpb25lZAorICAgIC8vIERvbid0IGFkZCB0aGUgbG9jYXRp
b24gb2YgdGhlIGZyYWdtZW50IGluIHRoZSBmbG93IHRocmVhZCBmb3IgYWJzb2x1dGUgcG9zaXRp
b25lZAogICAgIC8vIGVsZW1lbnRzIGJlY2F1c2UgdGhlaXIgYWJzb2x1dGUgcG9zaXRpb24gYWxy
ZWFkeSBwdXNoZXMgdGhlbSBkb3duIHRocm91Z2gKLSAgICAvLyB0aGUgcmVnaW9ucyBzbyBhZGRp
bmcgdGhpcyBoZXJlIGFuZCB0aGVuIGFkZGluZyB0aGUgdG9wTGVmdCBhZ2FpbiB3b3VsZCBjYXVz
ZQorICAgIC8vIHRoZSBmcmFnbWVudHMgc28gYWRkaW5nIHRoaXMgaGVyZSBhbmQgdGhlbiBhZGRp
bmcgdGhlIHRvcExlZnQgYWdhaW4gd291bGQgY2F1c2UKICAgICAvLyB1cyB0byBhZGQgdGhlIGhl
aWdodCB0d2ljZS4KICAgICAvLyBUaGUgc2FtZSBsb2dpYyBhcHBsaWVzIGZvciBlbGVtZW50cyBm
bG93ZWQgZGlyZWN0bHkgaW50byB0aGUgZmxvdyB0aHJlYWQuIFRoZWlyIHRvcExlZnQgbWVtYmVy
Ci0gICAgLy8gd2lsbCBhbHJlYWR5IGNvbnRhaW4gdGhlIHBvcnRpb24gcmVjdCBvZiB0aGUgcmVn
aW9uLgorICAgIC8vIHdpbGwgYWxyZWFkeSBjb250YWluIHRoZSBwb3J0aW9uIHJlY3Qgb2YgdGhl
IGZyYWdtZW50LgogICAgIEVQb3NpdGlvbiBwb3NpdGlvbiA9IHN0eWxlVG9Vc2UucG9zaXRpb24o
KTsKICAgICBpZiAoY29udGFpbmVyLT5pc091dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQoKSAmJiBw
b3NpdGlvbiAhPSBBYnNvbHV0ZVBvc2l0aW9uICYmIGNvbnRhaW5pbmdCbG9jaygpICE9IGZsb3dU
aHJlYWRDb250YWluaW5nQmxvY2soKSkgewotICAgICAgICBSZW5kZXJSZWdpb24qIGZpcnN0UmVn
aW9uID0gbnVsbHB0cjsKLSAgICAgICAgUmVuZGVyUmVnaW9uKiBsYXN0UmVnaW9uID0gbnVsbHB0
cjsKLSAgICAgICAgaWYgKGRvd25jYXN0PFJlbmRlckZsb3dUaHJlYWQ+KCpjb250YWluZXIpLmdl
dFJlZ2lvblJhbmdlRm9yQm94KHRoaXMsIGZpcnN0UmVnaW9uLCBsYXN0UmVnaW9uKSkKLSAgICAg
ICAgICAgIGFkanVzdGVkUmVjdC5tb3ZlQnkoZmlyc3RSZWdpb24tPmZsb3dUaHJlYWRQb3J0aW9u
UmVjdCgpLmxvY2F0aW9uKCkpOworICAgICAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZmly
c3RGcmFnbWVudCA9IG51bGxwdHI7CisgICAgICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBs
YXN0RnJhZ21lbnQgPSBudWxscHRyOworICAgICAgICBpZiAoZG93bmNhc3Q8UmVuZGVyRmxvd1Ro
cmVhZD4oKmNvbnRhaW5lcikuZ2V0RnJhZ21lbnRSYW5nZUZvckJveCh0aGlzLCBmaXJzdEZyYWdt
ZW50LCBsYXN0RnJhZ21lbnQpKQorICAgICAgICAgICAgYWRqdXN0ZWRSZWN0Lm1vdmVCeShmaXJz
dEZyYWdtZW50LT5mbG93VGhyZWFkUG9ydGlvblJlY3QoKS5sb2NhdGlvbigpKTsKICAgICB9CiAK
ICAgICBpZiAoaXNXcml0aW5nTW9kZVJvb3QoKSkgewpAQCAtMjIxMSw5ICsyMjExLDkgQEAgTGF5
b3V0UmVjdCBSZW5kZXJCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwYQogICAgICAgICAvLyBGSVhNRTog
SnVzdCBhcyB3aXRoIG9mZnNldEZyb21Db250YWluZXIsIHdlIGFyZW4ndCByZWFsbHkgaGFuZGxp
bmcgb2JqZWN0cyB0aGF0IHNwYW4KICAgICAgICAgLy8gbXVsdGlwbGUgY29sdW1ucyBwcm9wZXJs
eS4KICAgICAgICAgTGF5b3V0UG9pbnQgcGh5c2ljYWxQb2ludChmbGlwRm9yV3JpdGluZ01vZGUo
YWRqdXN0ZWRSZWN0LmxvY2F0aW9uKCkpKTsKLSAgICAgICAgaWYgKGF1dG8qIHJlZ2lvbiA9IGRv
d25jYXN0PFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZD4oKnRoaXMpLnBoeXNpY2FsVHJhbnNs
YXRpb25Gcm9tRmxvd1RvUmVnaW9uKChwaHlzaWNhbFBvaW50KSkpIHsKLSAgICAgICAgICAgIGFk
anVzdGVkUmVjdC5zZXRMb2NhdGlvbihyZWdpb24tPmZsaXBGb3JXcml0aW5nTW9kZShwaHlzaWNh
bFBvaW50KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVnaW9uLT5jb21wdXRlUmVjdEZvclJlcGFp
bnQoYWRqdXN0ZWRSZWN0LCByZXBhaW50Q29udGFpbmVyLCBjb250ZXh0KTsKKyAgICAgICAgaWYg
KGF1dG8qIGZyYWdtZW50ID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkPigq
dGhpcykucGh5c2ljYWxUcmFuc2xhdGlvbkZyb21GbG93VG9GcmFnbWVudCgocGh5c2ljYWxQb2lu
dCkpKSB7CisgICAgICAgICAgICBhZGp1c3RlZFJlY3Quc2V0TG9jYXRpb24oZnJhZ21lbnQtPmZs
aXBGb3JXcml0aW5nTW9kZShwaHlzaWNhbFBvaW50KSk7CisgICAgICAgICAgICByZXR1cm4gZnJh
Z21lbnQtPmNvbXB1dGVSZWN0Rm9yUmVwYWludChhZGp1c3RlZFJlY3QsIHJlcGFpbnRDb250YWlu
ZXIsIGNvbnRleHQpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMjgzLDcgKzIyODMsNyBAQCB2
b2lkIFJlbmRlckJveDo6cmVwYWludE92ZXJoYW5naW5nRmxvYXRzCiB2b2lkIFJlbmRlckJveDo6
dXBkYXRlTG9naWNhbFdpZHRoKCkKIHsKICAgICBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMg
Y29tcHV0ZWRWYWx1ZXM7Ci0gICAgY29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uKGNvbXB1dGVk
VmFsdWVzKTsKKyAgICBjb21wdXRlTG9naWNhbFdpZHRoSW5GcmFnbWVudChjb21wdXRlZFZhbHVl
cyk7CiAKICAgICBzZXRMb2dpY2FsV2lkdGgoY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQpOwogICAg
IHNldExvZ2ljYWxMZWZ0KGNvbXB1dGVkVmFsdWVzLm1fcG9zaXRpb24pOwpAQCAtMjI5MSw3ICsy
MjkxLDcgQEAgdm9pZCBSZW5kZXJCb3g6OnVwZGF0ZUxvZ2ljYWxXaWR0aCgpCiAgICAgc2V0TWFy
Z2luRW5kKGNvbXB1dGVkVmFsdWVzLm1fbWFyZ2lucy5tX2VuZCk7CiB9CiAKLXZvaWQgUmVuZGVy
Qm94Ojpjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb24oTG9naWNhbEV4dGVudENvbXB1dGVkVmFs
dWVzJiBjb21wdXRlZFZhbHVlcywgUmVuZGVyUmVnaW9uKiByZWdpb24pIGNvbnN0Cit2b2lkIFJl
bmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aEluRnJhZ21lbnQoTG9naWNhbEV4dGVudENvbXB1
dGVkVmFsdWVzJiBjb21wdXRlZFZhbHVlcywgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdt
ZW50KSBjb25zdAogewogICAgIGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50ID0gbG9naWNhbFdpZHRo
KCk7CiAgICAgY29tcHV0ZWRWYWx1ZXMubV9wb3NpdGlvbiA9IGxvZ2ljYWxMZWZ0KCk7CkBAIC0y
MzAxLDcgKzIzMDEsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVn
CiAgICAgaWYgKGlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBU
aGlzIGNhbGN1bGF0aW9uIGlzIG5vdCBwYXRjaGVkIGZvciBibG9jay1mbG93IHlldC4KICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2NTAwCi0gICAg
ICAgIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoKGNvbXB1dGVkVmFsdWVzLCByZWdpb24p
OworICAgICAgICBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aChjb21wdXRlZFZhbHVlcywg
ZnJhZ21lbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yMzMxLDcgKzIzMzEsNyBA
QCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnCiAgICAgTGVuZ3RoIGxv
Z2ljYWxXaWR0aExlbmd0aCA9IHRyZWF0QXNSZXBsYWNlZCA/IExlbmd0aChjb21wdXRlUmVwbGFj
ZWRMb2dpY2FsV2lkdGgoKSwgRml4ZWQpIDogc3R5bGVUb1VzZS5sb2dpY2FsV2lkdGgoKTsKIAog
ICAgIFJlbmRlckJsb2NrJiBjYiA9ICpjb250YWluaW5nQmxvY2soKTsKLSAgICBMYXlvdXRVbml0
IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIGNvbnRhaW5p
bmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnRJblJlZ2lvbihyZWdpb24pKTsKKyAgICBMYXlv
dXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIGNv
bnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnRJbkZyYWdtZW50KGZyYWdtZW50KSk7
CiAgICAgYm9vbCBoYXNQZXJwZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2NrID0gY2IuaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSAhPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwogCiAgICAgaWYg
KGlzSW5saW5lKCkgJiYgIWlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCkpIHsKQEAgLTIzNTEs
OCArMjM1MSw4IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbFdpZHRoSW5SZWcKICAg
ICBpZiAodHJlYXRBc1JlcGxhY2VkKSB7CiAgICAgICAgIGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50
ID0gbG9naWNhbFdpZHRoTGVuZ3RoLnZhbHVlKCkgKyBib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdp
ZHRoKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgTGF5b3V0VW5pdCBwcmVmZXJyZWRXaWR0aCA9
IGNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvblVzaW5nKE1haW5PclByZWZlcnJlZFNpemUsIHN0
eWxlVG9Vc2UubG9naWNhbFdpZHRoKCksIGNvbnRhaW5lcldpZHRoSW5JbmxpbmVEaXJlY3Rpb24s
IGNiLCByZWdpb24pOwotICAgICAgICBjb21wdXRlZFZhbHVlcy5tX2V4dGVudCA9IGNvbnN0cmFp
bkxvZ2ljYWxXaWR0aEluUmVnaW9uQnlNaW5NYXgocHJlZmVycmVkV2lkdGgsIGNvbnRhaW5lcldp
ZHRoSW5JbmxpbmVEaXJlY3Rpb24sIGNiLCByZWdpb24pOworICAgICAgICBMYXlvdXRVbml0IHBy
ZWZlcnJlZFdpZHRoID0gY29tcHV0ZUxvZ2ljYWxXaWR0aEluRnJhZ21lbnRVc2luZyhNYWluT3JQ
cmVmZXJyZWRTaXplLCBzdHlsZVRvVXNlLmxvZ2ljYWxXaWR0aCgpLCBjb250YWluZXJXaWR0aElu
SW5saW5lRGlyZWN0aW9uLCBjYiwgZnJhZ21lbnQpOworICAgICAgICBjb21wdXRlZFZhbHVlcy5t
X2V4dGVudCA9IGNvbnN0cmFpbkxvZ2ljYWxXaWR0aEluRnJhZ21lbnRCeU1pbk1heChwcmVmZXJy
ZWRXaWR0aCwgY29udGFpbmVyV2lkdGhJbklubGluZURpcmVjdGlvbiwgY2IsIGZyYWdtZW50KTsK
ICAgICB9CiAKICAgICAvLyBNYXJnaW4gY2FsY3VsYXRpb25zLgpAQCAtMjM2Miw3ICsyMzYyLDcg
QEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZwogICAgIH0gZWxzZSB7
CiAgICAgICAgIExheW91dFVuaXQgY29udGFpbmVyTG9naWNhbFdpZHRoRm9yQXV0b01hcmdpbnMg
PSBjb250YWluZXJMb2dpY2FsV2lkdGg7CiAgICAgICAgIGlmIChhdm9pZHNGbG9hdHMoKSAmJiBj
Yi5jb250YWluc0Zsb2F0cygpKQotICAgICAgICAgICAgY29udGFpbmVyTG9naWNhbFdpZHRoRm9y
QXV0b01hcmdpbnMgPSBjb250YWluaW5nQmxvY2tBdmFpbGFibGVMaW5lV2lkdGhJblJlZ2lvbihy
ZWdpb24pOworICAgICAgICAgICAgY29udGFpbmVyTG9naWNhbFdpZHRoRm9yQXV0b01hcmdpbnMg
PSBjb250YWluaW5nQmxvY2tBdmFpbGFibGVMaW5lV2lkdGhJbkZyYWdtZW50KGZyYWdtZW50KTsK
ICAgICAgICAgYm9vbCBoYXNJbnZlcnRlZERpcmVjdGlvbiA9IGNiLnN0eWxlKCkuaXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpICE9IHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwogICAg
ICAgICBjb21wdXRlSW5saW5lRGlyZWN0aW9uTWFyZ2lucyhjYiwgY29udGFpbmVyTG9naWNhbFdp
ZHRoRm9yQXV0b01hcmdpbnMsIGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50LAogICAgICAgICAgICAg
aGFzSW52ZXJ0ZWREaXJlY3Rpb24gPyBjb21wdXRlZFZhbHVlcy5tX21hcmdpbnMubV9lbmQgOiBj
b21wdXRlZFZhbHVlcy5tX21hcmdpbnMubV9zdGFydCwKQEAgLTI0MjUsOCArMjQyNSw4IEBAIExh
eW91dFVuaXQgUmVuZGVyQm94Ojpjb21wdXRlSW50cmluc2ljTG8KICAgICByZXR1cm4gMDsKIH0K
IAotTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvblVzaW5n
KFNpemVUeXBlIHdpZHRoVHlwZSwgTGVuZ3RoIGxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCBhdmFp
bGFibGVMb2dpY2FsV2lkdGgsCi0gICAgY29uc3QgUmVuZGVyQmxvY2smIGNiLCBSZW5kZXJSZWdp
b24qIHJlZ2lvbikgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbFdp
ZHRoSW5GcmFnbWVudFVzaW5nKFNpemVUeXBlIHdpZHRoVHlwZSwgTGVuZ3RoIGxvZ2ljYWxXaWR0
aCwgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGgsCisgICAgY29uc3QgUmVuZGVyQmxv
Y2smIGNiLCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKHdpZHRoVHlwZSA9PSBNaW5TaXplIHx8IHdpZHRoVHlwZSA9PSBNYWluT3JQcmVmZXJy
ZWRTaXplIHx8ICFsb2dpY2FsV2lkdGguaXNBdXRvKCkpOwogICAgIGlmICh3aWR0aFR5cGUgPT0g
TWluU2l6ZSAmJiBsb2dpY2FsV2lkdGguaXNBdXRvKCkpCkBAIC0yNDQ1LDcgKzI0NDUsNyBAQCBM
YXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0CiAgICAgTGF5b3V0VW5pdCBs
b2dpY2FsV2lkdGhSZXN1bHQgPSBmaWxsQXZhaWxhYmxlTWVhc3VyZShhdmFpbGFibGVMb2dpY2Fs
V2lkdGgsIG1hcmdpblN0YXJ0LCBtYXJnaW5FbmQpOwogCiAgICAgaWYgKHNocmlua1RvQXZvaWRG
bG9hdHMoKSAmJiBjYi5jb250YWluc0Zsb2F0cygpKQotICAgICAgICBsb2dpY2FsV2lkdGhSZXN1
bHQgPSBzdGQ6Om1pbihsb2dpY2FsV2lkdGhSZXN1bHQsIHNocmlua0xvZ2ljYWxXaWR0aFRvQXZv
aWRGbG9hdHMobWFyZ2luU3RhcnQsIG1hcmdpbkVuZCwgY2IsIHJlZ2lvbikpOworICAgICAgICBs
b2dpY2FsV2lkdGhSZXN1bHQgPSBzdGQ6Om1pbihsb2dpY2FsV2lkdGhSZXN1bHQsIHNocmlua0xv
Z2ljYWxXaWR0aFRvQXZvaWRGbG9hdHMobWFyZ2luU3RhcnQsIG1hcmdpbkVuZCwgY2IsIGZyYWdt
ZW50KSk7CiAKICAgICBpZiAod2lkdGhUeXBlID09IE1haW5PclByZWZlcnJlZFNpemUgJiYgc2l6
ZXNMb2dpY2FsV2lkdGhUb0ZpdENvbnRlbnQod2lkdGhUeXBlKSkKICAgICAgICAgcmV0dXJuIHN0
ZDo6bWF4KG1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpLCBzdGQ6Om1pbihtYXhQcmVmZXJyZWRM
b2dpY2FsV2lkdGgoKSwgbG9naWNhbFdpZHRoUmVzdWx0KSk7CkBAIC0yNjEzLDE2ICsyNjEzLDE2
IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uTWEKICAgICBtYXJnaW5F
bmQgPSBtaW5pbXVtVmFsdWVGb3JMZW5ndGgobWFyZ2luRW5kTGVuZ3RoLCBjb250YWluZXJXaWR0
aCk7CiB9CiAKLVJlbmRlckJveFJlZ2lvbkluZm8qIFJlbmRlckJveDo6cmVuZGVyQm94UmVnaW9u
SW5mbyhSZW5kZXJSZWdpb24qIHJlZ2lvbiwgUmVuZGVyQm94UmVnaW9uSW5mb0ZsYWdzIGNhY2hl
RmxhZykgY29uc3QKK1JlbmRlckJveEZyYWdtZW50SW5mbyogUmVuZGVyQm94OjpyZW5kZXJCb3hG
cmFnbWVudEluZm8oUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50LCBSZW5kZXJCb3hG
cmFnbWVudEluZm9GbGFncyBjYWNoZUZsYWcpIGNvbnN0CiB7Ci0gICAgLy8gTWFrZSBzdXJlIG5v
Ym9keSBpcyB0cnlpbmcgdG8gY2FsbCB0aGlzIHdpdGggYSBudWxsIHJlZ2lvbi4KLSAgICBpZiAo
IXJlZ2lvbikKKyAgICAvLyBNYWtlIHN1cmUgbm9ib2R5IGlzIHRyeWluZyB0byBjYWxsIHRoaXMg
d2l0aCBhIG51bGwgZnJhZ21lbnQuCisgICAgaWYgKCFmcmFnbWVudCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICAvLyBJZiB3ZSBoYXZlIGNvbXB1dGVkIG91ciB3aWR0aCBpbiB0aGlz
IHJlZ2lvbiBhbHJlYWR5LCBpdCB3aWxsIGJlIGNhY2hlZCwgYW5kIHdlIGNhbgorICAgIC8vIElm
IHdlIGhhdmUgY29tcHV0ZWQgb3VyIHdpZHRoIGluIHRoaXMgZnJhZ21lbnQgYWxyZWFkeSwgaXQg
d2lsbCBiZSBjYWNoZWQsIGFuZCB3ZSBjYW4KICAgICAvLyBqdXN0IHJldHVybiBpdC4KLSAgICBS
ZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gcmVnaW9uLT5yZW5kZXJCb3hSZWdpb25JbmZv
KHRoaXMpOwotICAgIGlmIChib3hJbmZvICYmIGNhY2hlRmxhZyA9PSBDYWNoZVJlbmRlckJveFJl
Z2lvbkluZm8pCisgICAgUmVuZGVyQm94RnJhZ21lbnRJbmZvKiBib3hJbmZvID0gZnJhZ21lbnQt
PnJlbmRlckJveEZyYWdtZW50SW5mbyh0aGlzKTsKKyAgICBpZiAoYm94SW5mbyAmJiBjYWNoZUZs
YWcgPT0gQ2FjaGVSZW5kZXJCb3hGcmFnbWVudEluZm8pCiAgICAgICAgIHJldHVybiBib3hJbmZv
OwogCiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yODc1LDcgKzI4NzUsNyBAQCBib29sIFJlbmRl
ckJveDo6c2hvdWxkVHJlYXRDaGlsZEFzUmVwbGFjCiBzdGF0aWMgYm9vbCB0YWJsZUNlbGxTaG91
bGRIYXZlWmVyb0luaXRpYWxTaXplKGNvbnN0IFJlbmRlckJsb2NrJiBibG9jaywgY29uc3QgUmVu
ZGVyQm94JiBjaGlsZCwgYm9vbCBzY3JvbGxzT3ZlcmZsb3dZKQogewogICAgIC8vIE5vcm1hbGx5
IHdlIHdvdWxkIGxldCB0aGUgY2VsbCBzaXplIGludHJpbnNpY2FsbHksIGJ1dCBzY3JvbGxpbmcg
b3ZlcmZsb3cgaGFzIHRvIGJlCi0gICAgLy8gdHJlYXRlZCBkaWZmZXJlbnRseSwgc2luY2UgV2lu
SUUgbGV0cyBzY3JvbGxlZCBvdmVyZmxvdyByZWdpb25zIHNocmluayBhcyBuZWVkZWQuCisgICAg
Ly8gdHJlYXRlZCBkaWZmZXJlbnRseSwgc2luY2UgV2luSUUgbGV0cyBzY3JvbGxlZCBvdmVyZmxv
dyBmcmFnbWVudHMgc2hyaW5rIGFzIG5lZWRlZC4KICAgICAvLyBXaGlsZSB3ZSBjYW4ndCBnZXQg
YWxsIGNhc2VzIHJpZ2h0LCB3ZSBjYW4gYXQgbGVhc3QgZGV0ZWN0IHdoZW4gdGhlIGNlbGwgaGFz
IGEgc3BlY2lmaWVkCiAgICAgLy8gaGVpZ2h0IG9yIHdoZW4gdGhlIHRhYmxlIGhhcyBhIHNwZWNp
ZmllZCBoZWlnaHQuIEluIHRoZXNlIGNhc2VzIHdlIHdhbnQgdG8gaW5pdGlhbGx5IGhhdmUKICAg
ICAvLyBubyBzaXplIGFuZCBhbGxvdyB0aGUgZmxleGluZyBvZiB0aGUgdGFibGUgb3IgdGhlIGNl
bGwgdG8gaXRzIHNwZWNpZmllZCBoZWlnaHQgdG8gY2F1c2UgdXMKQEAgLTMyMDMsNyArMzIwMyw3
IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlQW5kU2V0QmxvY2tEaXJlY3QKICAgICBjb250YWlu
aW5nQmxvY2suc2V0TWFyZ2luQWZ0ZXJGb3JDaGlsZCgqdGhpcywgbWFyZ2luQWZ0ZXIpOwogfQog
Ci1MYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9z
aXRpb25lZChjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgY29udGFpbmluZ0Jsb2NrLCBSZW5k
ZXJSZWdpb24qIHJlZ2lvbiwgYm9vbCBjaGVja0ZvclBlcnBlbmRpY3VsYXJXcml0aW5nTW9kZSkg
Y29uc3QKK0xheW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhG
b3JQb3NpdGlvbmVkKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiBjb250YWluaW5nQmxvY2ss
IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCwgYm9vbCBjaGVja0ZvclBlcnBlbmRp
Y3VsYXJXcml0aW5nTW9kZSkgY29uc3QKIHsKICAgICBpZiAoY2hlY2tGb3JQZXJwZW5kaWN1bGFy
V3JpdGluZ01vZGUgJiYgY29udGFpbmluZ0Jsb2NrLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
IT0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIGNvbnRhaW5pbmdC
bG9ja0xvZ2ljYWxIZWlnaHRGb3JQb3NpdGlvbmVkKGNvbnRhaW5pbmdCbG9jaywgZmFsc2UpOwpA
QCAtMzIyOCwxOSArMzIyOCwxOSBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Js
b2NrTG9nCiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94Pihjb250YWluaW5n
QmxvY2spLmNsaWVudExvZ2ljYWxXaWR0aCgpOwogCiAgICAgICAgIGNvbnN0IFJlbmRlckJsb2Nr
JiBjYiA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihjb250YWluaW5nQmxvY2spOwotICAgICAgICBS
ZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKCFyZWdp
b24pIHsKKyAgICAgICAgUmVuZGVyQm94RnJhZ21lbnRJbmZvKiBib3hJbmZvID0gbnVsbHB0cjsK
KyAgICAgICAgaWYgKCFmcmFnbWVudCkgewogICAgICAgICAgICAgaWYgKGlzPFJlbmRlckZsb3dU
aHJlYWQ+KGNvbnRhaW5pbmdCbG9jaykgJiYgIWNoZWNrRm9yUGVycGVuZGljdWxhcldyaXRpbmdN
b2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFkPihj
b250YWluaW5nQmxvY2spLmNvbnRlbnRMb2dpY2FsV2lkdGhPZkZpcnN0UmVnaW9uKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckZsb3dUaHJlYWQ+KGNvbnRhaW5pbmdC
bG9jaykuY29udGVudExvZ2ljYWxXaWR0aE9mRmlyc3RGcmFnbWVudCgpOwogICAgICAgICAgICAg
aWYgKGlzV3JpdGluZ01vZGVSb290KCkpIHsKICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGNi
UGFnZU9mZnNldCA9IGNiLm9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKTsKLSAgICAg
ICAgICAgICAgICBSZW5kZXJSZWdpb24qIGNiUmVnaW9uID0gY2IucmVnaW9uQXRCbG9ja09mZnNl
dChjYlBhZ2VPZmZzZXQpOwotICAgICAgICAgICAgICAgIGlmIChjYlJlZ2lvbikKLSAgICAgICAg
ICAgICAgICAgICAgYm94SW5mbyA9IGNiLnJlbmRlckJveFJlZ2lvbkluZm8oY2JSZWdpb24pOwor
ICAgICAgICAgICAgICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBjYkZyYWdtZW50ID0gY2Iu
ZnJhZ21lbnRBdEJsb2NrT2Zmc2V0KGNiUGFnZU9mZnNldCk7CisgICAgICAgICAgICAgICAgaWYg
KGNiRnJhZ21lbnQpCisgICAgICAgICAgICAgICAgICAgIGJveEluZm8gPSBjYi5yZW5kZXJCb3hG
cmFnbWVudEluZm8oY2JGcmFnbWVudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBp
ZiAoZmxvd1RocmVhZC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBjb250YWluaW5nQmxv
Y2suaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewotICAgICAgICAgICAgUmVuZGVyUmVnaW9u
KiBjb250YWluaW5nQmxvY2tSZWdpb24gPSBjYi5jbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKHJl
Z2lvbik7Ci0gICAgICAgICAgICBib3hJbmZvID0gY2IucmVuZGVyQm94UmVnaW9uSW5mbyhjb250
YWluaW5nQmxvY2tSZWdpb24pOworICAgICAgICAgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIq
IGNvbnRhaW5pbmdCbG9ja0ZyYWdtZW50ID0gY2IuY2xhbXBUb1N0YXJ0QW5kRW5kRnJhZ21lbnRz
KGZyYWdtZW50KTsKKyAgICAgICAgICAgIGJveEluZm8gPSBjYi5yZW5kZXJCb3hGcmFnbWVudElu
Zm8oY29udGFpbmluZ0Jsb2NrRnJhZ21lbnQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAo
Ym94SW5mbykgPyBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBjYi5jbGllbnRMb2dpY2FsV2lkdGgo
KSAtIChjYi5sb2dpY2FsV2lkdGgoKSAtIGJveEluZm8tPmxvZ2ljYWxXaWR0aCgpKSkgOiBjYi5j
bGllbnRMb2dpY2FsV2lkdGgoKTsKICAgICB9CkBAIC0zMjg4LDcgKzMyODgsNyBAQCBMYXlvdXRV
bml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9nCiAgICAgICAgIExheW91dFVuaXQgcmVz
dWx0ID0gY2IuY2xpZW50TG9naWNhbEhlaWdodCgpOwogICAgICAgICBSZW5kZXJGbG93VGhyZWFk
KiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICBpZiAo
Zmxvd1RocmVhZCAmJiBpczxSZW5kZXJGbG93VGhyZWFkPihjb250YWluaW5nQmxvY2spICYmIGZs
b3dUaHJlYWQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmluZ0Jsb2NrLmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVu
ZGVyRmxvd1RocmVhZD4oY29udGFpbmluZ0Jsb2NrKS5jb250ZW50TG9naWNhbEhlaWdodE9mRmly
c3RSZWdpb24oKTsKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFk
Pihjb250YWluaW5nQmxvY2spLmNvbnRlbnRMb2dpY2FsSGVpZ2h0T2ZGaXJzdEZyYWdtZW50KCk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgICAgICAKQEAgLTMzMTIsNyArMzMx
Miw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2cKICAgICByZXR1
cm4gaGVpZ2h0UmVzdWx0OwogfQogCi1zdGF0aWMgdm9pZCBjb21wdXRlSW5saW5lU3RhdGljRGlz
dGFuY2UoTGVuZ3RoJiBsb2dpY2FsTGVmdCwgTGVuZ3RoJiBsb2dpY2FsUmlnaHQsIGNvbnN0IFJl
bmRlckJveCogY2hpbGQsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiBjb250YWluZXJCbG9j
aywgTGF5b3V0VW5pdCBjb250YWluZXJMb2dpY2FsV2lkdGgsIFJlbmRlclJlZ2lvbiogcmVnaW9u
KQorc3RhdGljIHZvaWQgY29tcHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNlKExlbmd0aCYgbG9naWNh
bExlZnQsIExlbmd0aCYgbG9naWNhbFJpZ2h0LCBjb25zdCBSZW5kZXJCb3gqIGNoaWxkLCBjb25z
dCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgY29udGFpbmVyQmxvY2ssIExheW91dFVuaXQgY29udGFp
bmVyTG9naWNhbFdpZHRoLCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQpCiB7CiAg
ICAgaWYgKCFsb2dpY2FsTGVmdC5pc0F1dG8oKSB8fCAhbG9naWNhbFJpZ2h0LmlzQXV0bygpKQog
ICAgICAgICByZXR1cm47CkBAIC0zMzQyLDEwICszMzQyLDEwIEBAIHN0YXRpYyB2b2lkIGNvbXB1
dGVJbmxpbmVTdGF0aWNEaXN0YW5jZSgKICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uICs9IHJl
bmRlckJveC5sb2dpY2FsTGVmdCgpOwogICAgICAgICAgICAgaWYgKHJlbmRlckJveC5pc0luRmxv
d1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgICAgICBzdGF0aWNQb3NpdGlvbiArPSByZW5kZXJC
b3guaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJlbmRlckJveC5vZmZzZXRGb3JJbkZsb3dQ
b3NpdGlvbigpLndpZHRoKCkgOiByZW5kZXJCb3gub2Zmc2V0Rm9ySW5GbG93UG9zaXRpb24oKS5o
ZWlnaHQoKTsKLSAgICAgICAgICAgIGlmIChyZWdpb24gJiYgaXM8UmVuZGVyQmxvY2s+KCpjdXJy
ZW50KSkgeworICAgICAgICAgICAgaWYgKGZyYWdtZW50ICYmIGlzPFJlbmRlckJsb2NrPigqY3Vy
cmVudCkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJCbG9jayYgY3VycmVudEJsb2Nr
ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjdXJyZW50KTsKLSAgICAgICAgICAgICAgICByZWdp
b24gPSBjdXJyZW50QmxvY2suY2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pOwotICAg
ICAgICAgICAgICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGJveEluZm8gPSBjdXJyZW50QmxvY2su
cmVuZGVyQm94UmVnaW9uSW5mbyhyZWdpb24pOworICAgICAgICAgICAgICAgIGZyYWdtZW50ID0g
Y3VycmVudEJsb2NrLmNsYW1wVG9TdGFydEFuZEVuZEZyYWdtZW50cyhmcmFnbWVudCk7CisgICAg
ICAgICAgICAgICAgUmVuZGVyQm94RnJhZ21lbnRJbmZvKiBib3hJbmZvID0gY3VycmVudEJsb2Nr
LnJlbmRlckJveEZyYWdtZW50SW5mbyhmcmFnbWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKGJv
eEluZm8pCiAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1Bvc2l0aW9uICs9IGJveEluZm8tPmxv
Z2ljYWxMZWZ0KCk7CiAgICAgICAgICAgICB9CkBAIC0zMzcwLDEwICszMzcwLDEwIEBAIHN0YXRp
YyB2b2lkIGNvbXB1dGVJbmxpbmVTdGF0aWNEaXN0YW5jZSgKICAgICAgICAgICAgICAgICBpZiAo
cmVuZGVyQm94LmlzSW5GbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgICAgICAgICBzdGF0
aWNQb3NpdGlvbiAtPSByZW5kZXJCb3guaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJlbmRl
ckJveC5vZmZzZXRGb3JJbkZsb3dQb3NpdGlvbigpLndpZHRoKCkgOiByZW5kZXJCb3gub2Zmc2V0
Rm9ySW5GbG93UG9zaXRpb24oKS5oZWlnaHQoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChyZWdpb24gJiYgaXM8UmVuZGVyQmxvY2s+KCpjdXJyZW50KSkgeworICAgICAgICAgICAg
aWYgKGZyYWdtZW50ICYmIGlzPFJlbmRlckJsb2NrPigqY3VycmVudCkpIHsKICAgICAgICAgICAg
ICAgICBhdXRvJiBjdXJyZW50QmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmN1cnJlbnQp
OwotICAgICAgICAgICAgICAgIHJlZ2lvbiA9IGN1cnJlbnRCbG9jay5jbGFtcFRvU3RhcnRBbmRF
bmRSZWdpb25zKHJlZ2lvbik7Ci0gICAgICAgICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyog
Ym94SW5mbyA9IGN1cnJlbnRCbG9jay5yZW5kZXJCb3hSZWdpb25JbmZvKHJlZ2lvbik7CisgICAg
ICAgICAgICAgICAgZnJhZ21lbnQgPSBjdXJyZW50QmxvY2suY2xhbXBUb1N0YXJ0QW5kRW5kRnJh
Z21lbnRzKGZyYWdtZW50KTsKKyAgICAgICAgICAgICAgICBSZW5kZXJCb3hGcmFnbWVudEluZm8q
IGJveEluZm8gPSBjdXJyZW50QmxvY2sucmVuZGVyQm94RnJhZ21lbnRJbmZvKGZyYWdtZW50KTsK
ICAgICAgICAgICAgICAgICBpZiAoYm94SW5mbykgewogICAgICAgICAgICAgICAgICAgICBpZiAo
Y3VycmVudCAhPSAmY29udGFpbmVyQmxvY2spCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
aWNQb3NpdGlvbiAtPSBjdXJyZW50QmxvY2subG9naWNhbFdpZHRoKCkgLSAoYm94SW5mby0+bG9n
aWNhbExlZnQoKSArIGJveEluZm8tPmxvZ2ljYWxXaWR0aCgpKTsKQEAgLTMzODgsMTEgKzMzODgs
MTEgQEAgc3RhdGljIHZvaWQgY29tcHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNlKAogICAgIH0KIH0K
IAotdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoKExvZ2ljYWxF
eHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHV0ZWRWYWx1ZXMsIFJlbmRlclJlZ2lvbiogcmVnaW9u
KSBjb25zdAordm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoKExv
Z2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHV0ZWRWYWx1ZXMsIFJlbmRlckZyYWdtZW50
Q29udGFpbmVyKiBmcmFnbWVudCkgY29uc3QKIHsKICAgICBpZiAoaXNSZXBsYWNlZCgpKSB7CiAg
ICAgICAgIC8vIEZJWE1FOiBQb3NpdGlvbmVkIHJlcGxhY2VkIGVsZW1lbnRzIGluc2lkZSBhIGZs
b3cgdGhyZWFkIGFyZSBub3Qgd29ya2luZyBwcm9wZXJseQotICAgICAgICAvLyB3aXRoIHZhcmlh
YmxlIHdpZHRoIHJlZ2lvbnMgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Njk4OTYgKS4KKyAgICAgICAgLy8gd2l0aCB2YXJpYWJsZSB3aWR0aCBmcmFnbWVudHMg
KHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk4OTYgKS4KICAg
ICAgICAgY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhSZXBsYWNlZChjb21wdXRlZFZhbHVl
cyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNDE3LDcgKzM0MTcsNyBAQCB2b2lkIFJl
bmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgLy8gcmVsYXRpdmUgcG9zaXRp
b25lZCBpbmxpbmUuCiAgICAgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QmIGNvbnRhaW5lckJs
b2NrID0gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KCpjb250YWluZXIoKSk7CiAgICAg
Ci0gICAgY29uc3QgTGF5b3V0VW5pdCBjb250YWluZXJMb2dpY2FsV2lkdGggPSBjb250YWluaW5n
QmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnRhaW5lckJsb2NrLCByZWdpb24pOwor
ICAgIGNvbnN0IExheW91dFVuaXQgY29udGFpbmVyTG9naWNhbFdpZHRoID0gY29udGFpbmluZ0Js
b2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb250YWluZXJCbG9jaywgZnJhZ21lbnQpOwog
CiAgICAgLy8gVXNlIHRoZSBjb250YWluZXIgYmxvY2sncyBkaXJlY3Rpb24gZXhjZXB0IHdoZW4g
Y2FsY3VsYXRpbmcgdGhlIHN0YXRpYyBkaXN0YW5jZQogICAgIC8vIFRoaXMgY29uZm9ybXMgd2l0
aCB0aGUgcmVmZXJlbmNlIHJlc3VsdHMgZm9yIGFic3Bvcy1yZXBsYWNlZC13aWR0aC1tYXJnaW4t
MDAwLmh0bQpAQCAtMzQ1OCw3ICszNDU4LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3Np
dGlvbmVkTG9naWNhbAogCiAgICAgLy8gc2VlIEZJWE1FIDEKICAgICAvLyBDYWxjdWxhdGUgdGhl
IHN0YXRpYyBkaXN0YW5jZSBpZiBuZWVkZWQuCi0gICAgY29tcHV0ZUlubGluZVN0YXRpY0Rpc3Rh
bmNlKGxvZ2ljYWxMZWZ0TGVuZ3RoLCBsb2dpY2FsUmlnaHRMZW5ndGgsIHRoaXMsIGNvbnRhaW5l
ckJsb2NrLCBjb250YWluZXJMb2dpY2FsV2lkdGgsIHJlZ2lvbik7CisgICAgY29tcHV0ZUlubGlu
ZVN0YXRpY0Rpc3RhbmNlKGxvZ2ljYWxMZWZ0TGVuZ3RoLCBsb2dpY2FsUmlnaHRMZW5ndGgsIHRo
aXMsIGNvbnRhaW5lckJsb2NrLCBjb250YWluZXJMb2dpY2FsV2lkdGgsIGZyYWdtZW50KTsKICAg
ICAKICAgICAvLyBDYWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlvbiB2YWx1ZXMgZm9yICd3aWR0
aCcgY2FzZS4KICAgICBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFVzaW5nKE1haW5PclBy
ZWZlcnJlZFNpemUsIHN0eWxlKCkubG9naWNhbFdpZHRoKCksIGNvbnRhaW5lckJsb2NrLCBjb250
YWluZXJEaXJlY3Rpb24sCkBAIC0zNTA3LDE3ICszNTA3LDE3IEBAIHZvaWQgUmVuZGVyQm94Ojpj
b21wdXRlUG9zaXRpb25lZExvZ2ljYWwKICAgICAgICAgICAgIGNvbXB1dGVkVmFsdWVzLm1fcG9z
aXRpb24gKz0gY29udGFpbmluZ0JveC52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7CiAgICAgfQog
ICAgIAotICAgIC8vIEFkanVzdCBsb2dpY2FsTGVmdCBpZiB3ZSBuZWVkIHRvIGZvciB0aGUgZmxp
cHBlZCB2ZXJzaW9uIG9mIG91ciB3cml0aW5nIG1vZGUgaW4gcmVnaW9ucy4KKyAgICAvLyBBZGp1
c3QgbG9naWNhbExlZnQgaWYgd2UgbmVlZCB0byBmb3IgdGhlIGZsaXBwZWQgdmVyc2lvbiBvZiBv
dXIgd3JpdGluZyBtb2RlIGluIGZyYWdtZW50cy4KICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQg
Zm9yIG90aGVyIHR5cGVzIG9mIG9iamVjdHMgYXMgY29udGFpbmVyQmxvY2ssIG5vdCBvbmx5IFJl
bmRlckJsb2NrLgogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFk
Q29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaWYgKGZsb3dUaHJlYWQgJiYgIXJlZ2lvbiAmJiBpc1dy
aXRpbmdNb2RlUm9vdCgpICYmIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmVy
QmxvY2suaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiBpczxSZW5kZXJCbG9jaz4oY29udGFp
bmVyQmxvY2spKSB7Ci0gICAgICAgIEFTU0VSVChjb250YWluZXJCbG9jay5jYW5IYXZlQm94SW5m
b0luUmVnaW9uKCkpOworICAgIGlmIChmbG93VGhyZWFkICYmICFmcmFnbWVudCAmJiBpc1dyaXRp
bmdNb2RlUm9vdCgpICYmIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmVyQmxv
Y2suaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiBpczxSZW5kZXJCbG9jaz4oY29udGFpbmVy
QmxvY2spKSB7CisgICAgICAgIEFTU0VSVChjb250YWluZXJCbG9jay5jYW5IYXZlQm94SW5mb0lu
RnJhZ21lbnQoKSk7CiAgICAgICAgIExheW91dFVuaXQgbG9naWNhbExlZnRQb3MgPSBjb21wdXRl
ZFZhbHVlcy5tX3Bvc2l0aW9uOwogICAgICAgICBjb25zdCBSZW5kZXJCbG9jayYgcmVuZGVyQmxv
Y2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oY29udGFpbmVyQmxvY2spOwogICAgICAgICBMYXlv
dXRVbml0IGNiUGFnZU9mZnNldCA9IHJlbmRlckJsb2NrLm9mZnNldEZyb21Mb2dpY2FsVG9wT2ZG
aXJzdFBhZ2UoKTsKLSAgICAgICAgUmVuZGVyUmVnaW9uKiBjYlJlZ2lvbiA9IHJlbmRlckJsb2Nr
LnJlZ2lvbkF0QmxvY2tPZmZzZXQoY2JQYWdlT2Zmc2V0KTsKLSAgICAgICAgaWYgKGNiUmVnaW9u
KSB7Ci0gICAgICAgICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gcmVuZGVyQmxv
Y2sucmVuZGVyQm94UmVnaW9uSW5mbyhjYlJlZ2lvbik7CisgICAgICAgIFJlbmRlckZyYWdtZW50
Q29udGFpbmVyKiBjYkZyYWdtZW50ID0gcmVuZGVyQmxvY2suZnJhZ21lbnRBdEJsb2NrT2Zmc2V0
KGNiUGFnZU9mZnNldCk7CisgICAgICAgIGlmIChjYkZyYWdtZW50KSB7CisgICAgICAgICAgICBS
ZW5kZXJCb3hGcmFnbWVudEluZm8qIGJveEluZm8gPSByZW5kZXJCbG9jay5yZW5kZXJCb3hGcmFn
bWVudEluZm8oY2JGcmFnbWVudCk7CiAgICAgICAgICAgICBpZiAoYm94SW5mbykgewogICAgICAg
ICAgICAgICAgIGxvZ2ljYWxMZWZ0UG9zICs9IGJveEluZm8tPmxvZ2ljYWxMZWZ0KCk7CiAgICAg
ICAgICAgICAgICAgY29tcHV0ZWRWYWx1ZXMubV9wb3NpdGlvbiA9IGxvZ2ljYWxMZWZ0UG9zOwpA
QCAtMzgzMiwxNyArMzgzMiwxNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRM
b2dpY2FsCiAgICAgLy8gU2V0IGZpbmFsIGhlaWdodCB2YWx1ZS4KICAgICBjb21wdXRlZFZhbHVl
cy5tX2V4dGVudCArPSBib3JkZXJzUGx1c1BhZGRpbmc7CiAgICAgCi0gICAgLy8gQWRqdXN0IGxv
Z2ljYWxUb3AgaWYgd2UgbmVlZCB0byBmb3IgcGVycGVuZGljdWxhciB3cml0aW5nIG1vZGVzIGlu
IHJlZ2lvbnMuCisgICAgLy8gQWRqdXN0IGxvZ2ljYWxUb3AgaWYgd2UgbmVlZCB0byBmb3IgcGVy
cGVuZGljdWxhciB3cml0aW5nIG1vZGVzIGluIGZyYWdtZW50cy4KICAgICAvLyBGSVhNRTogQWRk
IHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIG9mIG9iamVjdHMgYXMgY29udGFpbmVyQmxvY2ssIG5v
dCBvbmx5IFJlbmRlckJsb2NrLgogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBm
bG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CiAgICAgaWYgKGZsb3dUaHJlYWQgJiYgaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSAhPSBjb250YWluZXJCbG9jay5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpICYmIGlzPFJlbmRlckJsb2NrPihjb250YWluZXJCbG9jaykpIHsKLSAgICAgICAgQVNT
RVJUKGNvbnRhaW5lckJsb2NrLmNhbkhhdmVCb3hJbmZvSW5SZWdpb24oKSk7CisgICAgICAgIEFT
U0VSVChjb250YWluZXJCbG9jay5jYW5IYXZlQm94SW5mb0luRnJhZ21lbnQoKSk7CiAgICAgICAg
IExheW91dFVuaXQgbG9naWNhbFRvcFBvcyA9IGNvbXB1dGVkVmFsdWVzLm1fcG9zaXRpb247CiAg
ICAgICAgIGNvbnN0IFJlbmRlckJsb2NrJiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCbG9j
az4oY29udGFpbmVyQmxvY2spOwogICAgICAgICBMYXlvdXRVbml0IGNiUGFnZU9mZnNldCA9IHJl
bmRlckJveC5vZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgLSBsb2dpY2FsTGVmdCgp
OwotICAgICAgICBSZW5kZXJSZWdpb24qIGNiUmVnaW9uID0gcmVuZGVyQm94LnJlZ2lvbkF0Qmxv
Y2tPZmZzZXQoY2JQYWdlT2Zmc2V0KTsKLSAgICAgICAgaWYgKGNiUmVnaW9uKSB7Ci0gICAgICAg
ICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gcmVuZGVyQm94LnJlbmRlckJveFJl
Z2lvbkluZm8oY2JSZWdpb24pOworICAgICAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogY2JG
cmFnbWVudCA9IHJlbmRlckJveC5mcmFnbWVudEF0QmxvY2tPZmZzZXQoY2JQYWdlT2Zmc2V0KTsK
KyAgICAgICAgaWYgKGNiRnJhZ21lbnQpIHsKKyAgICAgICAgICAgIFJlbmRlckJveEZyYWdtZW50
SW5mbyogYm94SW5mbyA9IHJlbmRlckJveC5yZW5kZXJCb3hGcmFnbWVudEluZm8oY2JGcmFnbWVu
dCk7CiAgICAgICAgICAgICBpZiAoYm94SW5mbykgewogICAgICAgICAgICAgICAgIGxvZ2ljYWxU
b3BQb3MgKz0gYm94SW5mby0+bG9naWNhbExlZnQoKTsKICAgICAgICAgICAgICAgICBjb21wdXRl
ZFZhbHVlcy5tX3Bvc2l0aW9uID0gbG9naWNhbFRvcFBvczsKQEAgLTQwNTIsNyArNDA1Miw3IEBA
IHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwKICAgICAgKiAgICBlbHNl
IGlmICdkaXJlY3Rpb24nIGlzICdydGwnLCBzZXQgJ3JpZ2h0JyB0byB0aGUgc3RhdGljIHBvc2l0
aW9uLgogICAgIFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgIC8vIHNlZSBGSVhNRSAxCi0gICAgY29t
cHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNlKGxvZ2ljYWxMZWZ0LCBsb2dpY2FsUmlnaHQsIHRoaXMs
IGNvbnRhaW5lckJsb2NrLCBjb250YWluZXJMb2dpY2FsV2lkdGgsIG51bGxwdHIpOyAvLyBGSVhN
RTogUGFzcyB0aGUgcmVnaW9uLgorICAgIGNvbXB1dGVJbmxpbmVTdGF0aWNEaXN0YW5jZShsb2dp
Y2FsTGVmdCwgbG9naWNhbFJpZ2h0LCB0aGlzLCBjb250YWluZXJCbG9jaywgY29udGFpbmVyTG9n
aWNhbFdpZHRoLCBudWxscHRyKTsgLy8gRklYTUU6IFBhc3MgdGhlIGZyYWdtZW50LgogCiAgICAg
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSpcCiAgICAgICogMy4gSWYgJ2xlZnQnIG9yICdyaWdodCcgYXJlICdh
dXRvJywgcmVwbGFjZSBhbnkgJ2F1dG8nIG9uICdtYXJnaW4tbGVmdCcKQEAgLTQzNTcsNyArNDM1
Nyw3IEBAIExheW91dFJlY3QgUmVuZGVyQm94Ojpsb2NhbENhcmV0UmVjdChJbmwKICAgICByZXR1
cm4gcmVjdDsKIH0KIAotVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQb2lu
dChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uKQor
VmlzaWJsZVBvc2l0aW9uIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQ
b2ludCYgcG9pbnQsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCkKIHsK
ICAgICAvLyBubyBjaGlsZHJlbi4uLnJldHVybiB0aGlzIHJlbmRlciBvYmplY3QncyBlbGVtZW50
LCBpZiB0aGVyZSBpcyBvbmUsIGFuZCBvZmZzZXQgMAogICAgIGlmICghZmlyc3RDaGlsZCgpKQpA
QCAtNDM4Myw4ICs0MzgzLDggQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJveDo6cG9zaXRpb25G
b3JQbwogCiAgICAgZm9yIChhdXRvJiByZW5kZXJlciA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlckJv
eD4oKnRoaXMpKSB7CiAgICAgICAgIGlmIChpczxSZW5kZXJGbG93VGhyZWFkPigqdGhpcykpIHsK
LSAgICAgICAgICAgIEFTU0VSVChyZWdpb24pOwotICAgICAgICAgICAgaWYgKCFkb3duY2FzdDxS
ZW5kZXJGbG93VGhyZWFkPigqdGhpcykub2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24o
JnJlbmRlcmVyLCByZWdpb24pKQorICAgICAgICAgICAgQVNTRVJUKGZyYWdtZW50KTsKKyAgICAg
ICAgICAgIGlmICghZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4oKnRoaXMpLm9iamVjdFNob3Vs
ZEZyYWdtZW50SW5GbG93RnJhZ21lbnQoJnJlbmRlcmVyLCBmcmFnbWVudCkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtNDM5OSw4ICs0Mzk5LDggQEAgVmlzaWJs
ZVBvc2l0aW9uIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQbwogICAgICAgICAKICAgICAgICAgaWYg
KHBvaW50LngoKSA8PSByaWdodCAmJiBwb2ludC54KCkgPj0gbGVmdCAmJiBwb2ludC55KCkgPD0g
dG9wICYmIHBvaW50LnkoKSA+PSBib3R0b20pIHsKICAgICAgICAgICAgIGlmIChpczxSZW5kZXJU
YWJsZVJvdz4ocmVuZGVyZXIpKQotICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJlci5wb3Np
dGlvbkZvclBvaW50KHBvaW50ICsgYWRqdXN0ZWRQb2ludCAtIHJlbmRlcmVyLmxvY2F0aW9uT2Zm
c2V0KCksIHJlZ2lvbik7Ci0gICAgICAgICAgICByZXR1cm4gcmVuZGVyZXIucG9zaXRpb25Gb3JQ
b2ludChwb2ludCAtIHJlbmRlcmVyLmxvY2F0aW9uT2Zmc2V0KCksIHJlZ2lvbik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlbmRlcmVyLnBvc2l0aW9uRm9yUG9pbnQocG9pbnQgKyBhZGp1c3Rl
ZFBvaW50IC0gcmVuZGVyZXIubG9jYXRpb25PZmZzZXQoKSwgZnJhZ21lbnQpOworICAgICAgICAg
ICAgcmV0dXJuIHJlbmRlcmVyLnBvc2l0aW9uRm9yUG9pbnQocG9pbnQgLSByZW5kZXJlci5sb2Nh
dGlvbk9mZnNldCgpLCBmcmFnbWVudCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBGaW5kIHRo
ZSBkaXN0YW5jZSBmcm9tICh4LCB5KSB0byB0aGUgYm94LiAgU3BsaXQgdGhlIHNwYWNlIGFyb3Vu
ZCB0aGUgYm94IGludG8gOCBwaWVjZXMKQEAgLTQ0MzcsNyArNDQzNyw3IEBAIFZpc2libGVQb3Np
dGlvbiBSZW5kZXJCb3g6OnBvc2l0aW9uRm9yUG8KICAgICB9CiAgICAgCiAgICAgaWYgKGNsb3Nl
c3RSZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIGNsb3Nlc3RSZW5kZXJlci0+cG9zaXRpb25Gb3JQ
b2ludChhZGp1c3RlZFBvaW50IC0gY2xvc2VzdFJlbmRlcmVyLT5sb2NhdGlvbk9mZnNldCgpLCBy
ZWdpb24pOworICAgICAgICByZXR1cm4gY2xvc2VzdFJlbmRlcmVyLT5wb3NpdGlvbkZvclBvaW50
KGFkanVzdGVkUG9pbnQgLSBjbG9zZXN0UmVuZGVyZXItPmxvY2F0aW9uT2Zmc2V0KCksIGZyYWdt
ZW50KTsKICAgICAKICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRp
b25Jbk9yQmVmb3JlTm9kZShub25Qc2V1ZG9FbGVtZW50KCkpKTsKIH0KQEAgLTQ0NTUsNyArNDQ1
NSw3IEBAIGJvb2wgUmVuZGVyQm94OjpzaHJpbmtUb0F2b2lkRmxvYXRzKCkgY28KIGJvb2wgUmVu
ZGVyQm94OjpjcmVhdGVzTmV3Rm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdAogewogICAgIHJldHVy
biBpc0lubGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpIHx8IGlzRmxvYXRpbmdPck91dE9mRmxvd1Bv
c2l0aW9uZWQoKSB8fCBoYXNPdmVyZmxvd0NsaXAoKSB8fCBpc0ZsZXhJdGVtSW5jbHVkaW5nRGVw
cmVjYXRlZCgpCi0gICAgICAgIHx8IGlzVGFibGVDZWxsKCkgfHwgaXNUYWJsZUNhcHRpb24oKSB8
fCBpc0ZpZWxkc2V0KCkgfHwgaXNXcml0aW5nTW9kZVJvb3QoKSB8fCBpc0RvY3VtZW50RWxlbWVu
dFJlbmRlcmVyKCkgfHwgaXNSZW5kZXJGbG93VGhyZWFkKCkgfHwgaXNSZW5kZXJSZWdpb24oKQor
ICAgICAgICB8fCBpc1RhYmxlQ2VsbCgpIHx8IGlzVGFibGVDYXB0aW9uKCkgfHwgaXNGaWVsZHNl
dCgpIHx8IGlzV3JpdGluZ01vZGVSb290KCkgfHwgaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigp
IHx8IGlzUmVuZGVyRmxvd1RocmVhZCgpIHx8IGlzUmVuZGVyRnJhZ21lbnRDb250YWluZXIoKQog
ICAgICAgICB8fCBpc0dyaWRJdGVtKCkgfHwgc3R5bGUoKS5zcGVjaWZpZXNDb2x1bW5zKCkgfHwg
c3R5bGUoKS5jb2x1bW5TcGFuKCk7CiB9CiAKQEAgLTQ0NzMsNyArNDQ3Myw3IEBAIHZvaWQgUmVu
ZGVyQm94OjphZGRWaXN1YWxFZmZlY3RPdmVyZmxvdygKIAogICAgIFJlbmRlckZsb3dUaHJlYWQq
IGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CiAgICAgaWYgKGZsb3dU
aHJlYWQpCi0gICAgICAgIGZsb3dUaHJlYWQtPmFkZFJlZ2lvbnNWaXN1YWxFZmZlY3RPdmVyZmxv
dyh0aGlzKTsKKyAgICAgICAgZmxvd1RocmVhZC0+YWRkRnJhZ21lbnRzVmlzdWFsRWZmZWN0T3Zl
cmZsb3codGhpcyk7CiB9CiAKIExheW91dFJlY3QgUmVuZGVyQm94OjphcHBseVZpc3VhbEVmZmVj
dE92ZXJmbG93KGNvbnN0IExheW91dFJlY3QmIGJvcmRlckJveCkgY29uc3QKQEAgLTQ1MzIsNyAr
NDUzMiw3IEBAIHZvaWQgUmVuZGVyQm94OjphZGRPdmVyZmxvd0Zyb21DaGlsZChjb24KIAogICAg
IFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2Nr
KCk7CiAgICAgaWYgKGZsb3dUaHJlYWQpCi0gICAgICAgIGZsb3dUaHJlYWQtPmFkZFJlZ2lvbnNP
dmVyZmxvd0Zyb21DaGlsZCh0aGlzLCBjaGlsZCwgZGVsdGEpOworICAgICAgICBmbG93VGhyZWFk
LT5hZGRGcmFnbWVudHNPdmVyZmxvd0Zyb21DaGlsZCh0aGlzLCBjaGlsZCwgZGVsdGEpOwogCiAg
ICAgLy8gT25seSBwcm9wYWdhdGUgbGF5b3V0IG92ZXJmbG93IGZyb20gdGhlIGNoaWxkIGlmIHRo
ZSBjaGlsZCBpc24ndCBjbGlwcGluZyBpdHMgb3ZlcmZsb3cuICBJZiBpdCBpcywgdGhlbgogICAg
IC8vIGl0cyBvdmVyZmxvdyBpcyBpbnRlcm5hbCB0byBpdCwgYW5kIHdlIGRvbid0IGNhcmUgYWJv
dXQgaXQuICBsYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbiB0YWtlcyBjYXJlIG9mIHRo
aXMKQEAgLTQ2MDQsNyArNDYwNCw3IEBAIHZvaWQgUmVuZGVyQm94OjpjbGVhck92ZXJmbG93KCkK
ICAgICBtX292ZXJmbG93ID0gbnVsbHB0cjsKICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhy
ZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwogICAgIGlmIChmbG93VGhyZWFkKQot
ICAgICAgICBmbG93VGhyZWFkLT5jbGVhclJlZ2lvbnNPdmVyZmxvdyh0aGlzKTsKKyAgICAgICAg
Zmxvd1RocmVhZC0+Y2xlYXJGcmFnbWVudHNPdmVyZmxvdyh0aGlzKTsKIH0KICAgICAKIGJvb2wg
UmVuZGVyQm94OjpwZXJjZW50YWdlTG9naWNhbEhlaWdodElzUmVzb2x2YWJsZSgpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiAyMjI0NjIpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDggKzMyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbmxpbmVFbGVtZW50
Qm94OwogY2xhc3MgUmVuZGVyQmxvY2tGbG93OwotY2xhc3MgUmVuZGVyQm94UmVnaW9uSW5mbzsK
LWNsYXNzIFJlbmRlclJlZ2lvbjsKK2NsYXNzIFJlbmRlckJveEZyYWdtZW50SW5mbzsKK2NsYXNz
IFJlbmRlckZyYWdtZW50Q29udGFpbmVyOwogc3RydWN0IFBhaW50SW5mbzsKIAogZW51bSBTaXpl
VHlwZSB7IE1haW5PclByZWZlcnJlZFNpemUsIE1pblNpemUsIE1heFNpemUgfTsKQEAgLTg2LDcg
Kzg2LDcgQEAgcHVibGljOgogICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gd2lkdGgoKSA6IGhlaWdo
dCgpOyB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gc3R5
bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gaGVpZ2h0KCkgOiB3aWR0aCgpOyB9CiAK
LSAgICBMYXlvdXRVbml0IGNvbnN0cmFpbkxvZ2ljYWxXaWR0aEluUmVnaW9uQnlNaW5NYXgoTGF5
b3V0VW5pdCwgTGF5b3V0VW5pdCwgUmVuZGVyQmxvY2smLCBSZW5kZXJSZWdpb24qID0gbnVsbHB0
cikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBjb25zdHJhaW5Mb2dpY2FsV2lkdGhJbkZyYWdtZW50
QnlNaW5NYXgoTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCwgUmVuZGVyQmxvY2smLCBSZW5kZXJGcmFn
bWVudENvbnRhaW5lciogPSBudWxscHRyKSBjb25zdDsKICAgICBMYXlvdXRVbml0IGNvbnN0cmFp
bkxvZ2ljYWxIZWlnaHRCeU1pbk1heChMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIHN0ZDo6b3B0
aW9uYWw8TGF5b3V0VW5pdD4gaW50cmluc2ljQ29udGVudEhlaWdodCkgY29uc3Q7CiAgICAgTGF5
b3V0VW5pdCBjb25zdHJhaW5Db250ZW50Qm94TG9naWNhbEhlaWdodEJ5TWluTWF4KExheW91dFVu
aXQgbG9naWNhbEhlaWdodCwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBpbnRyaW5zaWNDb250
ZW50SGVpZ2h0KSBjb25zdDsKIApAQCAtMzQ4LDExICszNDgsMTEgQEAgcHVibGljOgogICAgIHZv
aWQgY29tcHV0ZUJsb2NrRGlyZWN0aW9uTWFyZ2lucyhjb25zdCBSZW5kZXJCbG9jayYgY29udGFp
bmluZ0Jsb2NrLCBMYXlvdXRVbml0JiBtYXJnaW5CZWZvcmUsIExheW91dFVuaXQmIG1hcmdpbkFm
dGVyKSBjb25zdDsKICAgICB2b2lkIGNvbXB1dGVBbmRTZXRCbG9ja0RpcmVjdGlvbk1hcmdpbnMo
Y29uc3QgUmVuZGVyQmxvY2smIGNvbnRhaW5pbmdCbG9jayk7CiAKLSAgICBlbnVtIFJlbmRlckJv
eFJlZ2lvbkluZm9GbGFncyB7IENhY2hlUmVuZGVyQm94UmVnaW9uSW5mbywgRG9Ob3RDYWNoZVJl
bmRlckJveFJlZ2lvbkluZm8gfTsKLSAgICBMYXlvdXRSZWN0IGJvcmRlckJveFJlY3RJblJlZ2lv
bihSZW5kZXJSZWdpb24qLCBSZW5kZXJCb3hSZWdpb25JbmZvRmxhZ3MgPSBDYWNoZVJlbmRlckJv
eFJlZ2lvbkluZm8pIGNvbnN0OwotICAgIExheW91dFJlY3QgY2xpZW50Qm94UmVjdEluUmVnaW9u
KFJlbmRlclJlZ2lvbiopIGNvbnN0OwotICAgIFJlbmRlclJlZ2lvbiogY2xhbXBUb1N0YXJ0QW5k
RW5kUmVnaW9ucyhSZW5kZXJSZWdpb24qKSBjb25zdDsKLSAgICBib29sIGhhc1JlZ2lvblJhbmdl
SW5GbG93VGhyZWFkKCkgY29uc3Q7CisgICAgZW51bSBSZW5kZXJCb3hGcmFnbWVudEluZm9GbGFn
cyB7IENhY2hlUmVuZGVyQm94RnJhZ21lbnRJbmZvLCBEb05vdENhY2hlUmVuZGVyQm94RnJhZ21l
bnRJbmZvIH07CisgICAgTGF5b3V0UmVjdCBib3JkZXJCb3hSZWN0SW5GcmFnbWVudChSZW5kZXJG
cmFnbWVudENvbnRhaW5lciosIFJlbmRlckJveEZyYWdtZW50SW5mb0ZsYWdzID0gQ2FjaGVSZW5k
ZXJCb3hGcmFnbWVudEluZm8pIGNvbnN0OworICAgIExheW91dFJlY3QgY2xpZW50Qm94UmVjdElu
RnJhZ21lbnQoUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKSBjb25zdDsKKyAgICBSZW5kZXJGcmFn
bWVudENvbnRhaW5lciogY2xhbXBUb1N0YXJ0QW5kRW5kRnJhZ21lbnRzKFJlbmRlckZyYWdtZW50
Q29udGFpbmVyKikgY29uc3Q7CisgICAgYm9vbCBoYXNGcmFnbWVudFJhbmdlSW5GbG93VGhyZWFk
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZG
aXJzdFBhZ2UoKSBjb25zdDsKICAgICAKICAgICB2b2lkIHBvc2l0aW9uTGluZUJveChJbmxpbmVF
bGVtZW50Qm94Jik7CkBAIC0zNzUsOCArMzc1LDggQEAgcHVibGljOgogICAgIExheW91dFVuaXQg
Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudCgpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZvckNvbnRlbnQoQXZh
aWxhYmxlTG9naWNhbEhlaWdodFR5cGUpIGNvbnN0OwogCi0gICAgTGF5b3V0VW5pdCBjb250YWlu
aW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5SZWdpb24oUmVuZGVyUmVnaW9uKikgY29u
c3Q7Ci0gICAgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tBdmFpbGFibGVMaW5lV2lkdGhJblJl
Z2lvbihSZW5kZXJSZWdpb24qKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9j
a0xvZ2ljYWxXaWR0aEZvckNvbnRlbnRJbkZyYWdtZW50KFJlbmRlckZyYWdtZW50Q29udGFpbmVy
KikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tBdmFpbGFibGVMaW5lV2lk
dGhJbkZyYWdtZW50KFJlbmRlckZyYWdtZW50Q29udGFpbmVyKikgY29uc3Q7CiAgICAgTGF5b3V0
VW5pdCBwZXJwZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodCgpIGNvbnN0Owog
CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxvZ2ljYWxXaWR0aCgpOwpAQCAtMzkzLDggKzM5Myw4
IEBAIHB1YmxpYzoKICAgICAvLyB6ZXJvIChhbmQgcmV0dXJucyBqdXN0IGJvcmRlciArIHBhZGRp
bmcpLgogICAgIExheW91dFVuaXQgY29tcHV0ZUxvZ2ljYWxIZWlnaHRXaXRob3V0TGF5b3V0KCkg
Y29uc3Q7CiAKLSAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiByZW5kZXJCb3hSZWdpb25JbmZvKFJl
bmRlclJlZ2lvbiosIFJlbmRlckJveFJlZ2lvbkluZm9GbGFncyA9IENhY2hlUmVuZGVyQm94UmVn
aW9uSW5mbykgY29uc3Q7Ci0gICAgdm9pZCBjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb24oTG9n
aWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJiwgUmVuZGVyUmVnaW9uKiA9IG51bGxwdHIpIGNvbnN0
OworICAgIFJlbmRlckJveEZyYWdtZW50SW5mbyogcmVuZGVyQm94RnJhZ21lbnRJbmZvKFJlbmRl
ckZyYWdtZW50Q29udGFpbmVyKiwgUmVuZGVyQm94RnJhZ21lbnRJbmZvRmxhZ3MgPSBDYWNoZVJl
bmRlckJveEZyYWdtZW50SW5mbykgY29uc3Q7CisgICAgdm9pZCBjb21wdXRlTG9naWNhbFdpZHRo
SW5GcmFnbWVudChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmLCBSZW5kZXJGcmFnbWVudENv
bnRhaW5lciogPSBudWxscHRyKSBjb25zdDsKIAogICAgIGJvb2wgc3RyZXRjaGVzVG9WaWV3cG9y
dCgpIGNvbnN0CiAgICAgewpAQCAtNDEzLDkgKzQxMyw5IEBAIHB1YmxpYzoKICAgICBib29sIGlz
U3RyZXRjaGluZ0NvbHVtbkZsZXhJdGVtKCkgY29uc3Q7CiAgICAgYm9vbCBjb2x1bW5GbGV4SXRl
bUhhc1N0cmV0Y2hBbGlnbm1lbnQoKSBjb25zdDsKICAgICAKLSAgICBMYXlvdXRVbml0IHNocmlu
a0xvZ2ljYWxXaWR0aFRvQXZvaWRGbG9hdHMoTGF5b3V0VW5pdCBjaGlsZE1hcmdpblN0YXJ0LCBM
YXlvdXRVbml0IGNoaWxkTWFyZ2luRW5kLCBjb25zdCBSZW5kZXJCbG9jayYgY2IsIFJlbmRlclJl
Z2lvbiopIGNvbnN0OworICAgIExheW91dFVuaXQgc2hyaW5rTG9naWNhbFdpZHRoVG9Bdm9pZEZs
b2F0cyhMYXlvdXRVbml0IGNoaWxkTWFyZ2luU3RhcnQsIExheW91dFVuaXQgY2hpbGRNYXJnaW5F
bmQsIGNvbnN0IFJlbmRlckJsb2NrJiBjYiwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKSBjb25z
dDsKIAotICAgIExheW91dFVuaXQgY29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uVXNpbmcoU2l6
ZVR5cGUsIExlbmd0aCBsb2dpY2FsV2lkdGgsIExheW91dFVuaXQgYXZhaWxhYmxlTG9naWNhbFdp
ZHRoLCBjb25zdCBSZW5kZXJCbG9jayYgY29udGFpbmluZ0Jsb2NrLCBSZW5kZXJSZWdpb24qKSBj
b25zdDsKKyAgICBMYXlvdXRVbml0IGNvbXB1dGVMb2dpY2FsV2lkdGhJbkZyYWdtZW50VXNpbmco
U2l6ZVR5cGUsIExlbmd0aCBsb2dpY2FsV2lkdGgsIExheW91dFVuaXQgYXZhaWxhYmxlTG9naWNh
bFdpZHRoLCBjb25zdCBSZW5kZXJCbG9jayYgY29udGFpbmluZ0Jsb2NrLCBSZW5kZXJGcmFnbWVu
dENvbnRhaW5lciopIGNvbnN0OwogICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0
ZUxvZ2ljYWxIZWlnaHRVc2luZyhTaXplVHlwZSwgY29uc3QgTGVuZ3RoJiBoZWlnaHQsIHN0ZDo6
b3B0aW9uYWw8TGF5b3V0VW5pdD4gaW50cmluc2ljQ29udGVudEhlaWdodCkgY29uc3Q7CiAgICAg
c3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlQ29udGVudExvZ2ljYWxIZWlnaHQoU2l6
ZVR5cGUsIGNvbnN0IExlbmd0aCYgaGVpZ2h0LCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGlu
dHJpbnNpY0NvbnRlbnRIZWlnaHQpIGNvbnN0OwogICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5p
dD4gY29tcHV0ZUNvbnRlbnRBbmRTY3JvbGxiYXJMb2dpY2FsSGVpZ2h0VXNpbmcoU2l6ZVR5cGUs
IGNvbnN0IExlbmd0aCYgaGVpZ2h0LCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGludHJpbnNp
Y0NvbnRlbnRIZWlnaHQpIGNvbnN0OwpAQCAtNDc3LDkgKzQ3Nyw5IEBAIHB1YmxpYzoKICAgICAK
ICAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIHVuc2lnbmVkIGNhcmV0
T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBudWxscHRyKSBvdmVy
cmlkZTsKIAotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdmVyZmxvd0NsaXBSZWN0KGNvbnN0IExh
eW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyUmVnaW9uKiA9IG51bGxwdHIsIE92ZXJsYXlTY3Jv
bGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIFBhaW50UGhh
c2UgPSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kKTsKLSAgICB2aXJ0dWFsIExheW91dFJlY3Qg
b3ZlcmZsb3dDbGlwUmVjdEZvckNoaWxkTGF5ZXJzKGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlv
biwgUmVuZGVyUmVnaW9uKiByZWdpb24sIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJl
bGV2YW5jeSkgeyByZXR1cm4gb3ZlcmZsb3dDbGlwUmVjdChsb2NhdGlvbiwgcmVnaW9uLCByZWxl
dmFuY3kpOyB9Ci0gICAgTGF5b3V0UmVjdCBjbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9j
YXRpb24sIFJlbmRlclJlZ2lvbiopOworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdmVyZmxvd0Ns
aXBSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyRnJhZ21lbnRDb250YWlu
ZXIqID0gbnVsbHB0ciwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVy
bGF5U2Nyb2xsYmFyU2l6ZSwgUGFpbnRQaGFzZSA9IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQp
OworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdmVyZmxvd0NsaXBSZWN0Rm9yQ2hpbGRMYXllcnMo
Y29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJh
Z21lbnQsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgeyByZXR1cm4g
b3ZlcmZsb3dDbGlwUmVjdChsb2NhdGlvbiwgZnJhZ21lbnQsIHJlbGV2YW5jeSk7IH0KKyAgICBM
YXlvdXRSZWN0IGNsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyRnJh
Z21lbnRDb250YWluZXIqKTsKICAgICB2aXJ0dWFsIGJvb2wgaGFzQ29udHJvbENsaXAoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb250cm9sQ2xpcFJl
Y3QoY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdCB7IHJldHVybiBMYXlvdXRSZWN0KCk7IH0KICAg
ICBib29sIHB1c2hDb250ZW50c0NsaXAoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0KTsKQEAgLTUwNiw3ICs1MDYsNyBAQCBwdWJsaWM6CiAKICAgICBMYXlv
dXRSZWN0IG1hc2tDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpOwogCi0g
ICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBj
b25zdCBSZW5kZXJSZWdpb24qKSBvdmVycmlkZTsKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRp
b25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFp
bmVyKikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHJlbW92ZUZsb2F0aW5nT3JQb3NpdGlvbmVkQ2hp
bGRGcm9tQmxvY2tMaXN0cygpOwogICAgIApAQCAtNjEwLDggKzYxMCw4IEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICAvLyBUcnVlIGlmIHRoaXMgYm94IGNhbiBoYXZlIGEgcmFuZ2UgaW4gYW4gb3V0
c2lkZSBmcmFnbWVudGF0aW9uIGNvbnRleHQuCi0gICAgYm9vbCBjYW5IYXZlT3V0c2lkZVJlZ2lv
blJhbmdlKCkgY29uc3QgeyByZXR1cm4gIWlzSW5GbG93UmVuZGVyRmxvd1RocmVhZCgpOyB9Ci0g
ICAgdmlydHVhbCBib29sIG5lZWRzTGF5b3V0QWZ0ZXJSZWdpb25SYW5nZUNoYW5nZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBjYW5IYXZlT3V0c2lkZUZyYWdtZW50UmFuZ2Uo
KSBjb25zdCB7IHJldHVybiAhaXNJbkZsb3dSZW5kZXJGbG93VGhyZWFkKCk7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgbmVlZHNMYXlvdXRBZnRlckZyYWdtZW50UmFuZ2VDaGFuZ2UoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogCiAgICAgY29uc3QgUmVuZGVyQm94KiBmaW5kRW5jbG9zaW5nU2Nyb2xs
YWJsZUNvbnRhaW5lcigpIGNvbnN0OwogICAgIApAQCAtNjUwLDcgKzY1MCw3IEBAIHByb3RlY3Rl
ZDoKICAgICBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UgZGV0ZXJtaW5lQmFja2dyb3VuZEJsZWVk
QXZvaWRhbmNlKEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogICAgIGJvb2wgYmFja2dyb3VuZEhh
c09wYXF1ZVRvcExheWVyKCkgY29uc3Q7CiAKLSAgICB2b2lkIGNvbXB1dGVQb3NpdGlvbmVkTG9n
aWNhbFdpZHRoKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYsIFJlbmRlclJlZ2lvbiogPSBu
dWxscHRyKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoKExv
Z2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYsIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiA9IG51
bGxwdHIpIGNvbnN0OwogCiAgICAgTGF5b3V0VW5pdCBjb21wdXRlSW50cmluc2ljTG9naWNhbFdp
ZHRoVXNpbmcoTGVuZ3RoIGxvZ2ljYWxXaWR0aExlbmd0aCwgTGF5b3V0VW5pdCBhdmFpbGFibGVM
b2dpY2FsV2lkdGgsIExheW91dFVuaXQgYm9yZGVyQW5kUGFkZGluZykgY29uc3Q7CiAgICAgdmly
dHVhbCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsQ29u
dGVudEhlaWdodFVzaW5nKExlbmd0aCBsb2dpY2FsSGVpZ2h0TGVuZ3RoLCBzdGQ6Om9wdGlvbmFs
PExheW91dFVuaXQ+IGludHJpbnNpY0NvbnRlbnRIZWlnaHQsIExheW91dFVuaXQgYm9yZGVyQW5k
UGFkZGluZykgY29uc3Q7CkBAIC02ODYsNyArNjg2LDcgQEAgcHJpdmF0ZToKICAgICAvLyBSZXR1
cm5zIHRydWUgaWYgd2UgZGlkIGEgZnVsbCByZXBhaW50LgogICAgIGJvb2wgcmVwYWludExheWVy
UmVjdHNGb3JJbWFnZShXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEZpbGxMYXllciYgbGF5ZXJzLCBi
b29sIGRyYXdpbmdCYWNrZ3JvdW5kKTsKIAotICAgIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2Nr
TG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgY29u
dGFpbmluZ0Jsb2NrLCBSZW5kZXJSZWdpb24qID0gbnVsbHB0ciwgYm9vbCBjaGVja0ZvclBlcnBl
bmRpY3VsYXJXcml0aW5nTW9kZSA9IHRydWUpIGNvbnN0OworICAgIExheW91dFVuaXQgY29udGFp
bmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25lZChjb25zdCBSZW5kZXJCb3hNb2RlbE9i
amVjdCYgY29udGFpbmluZ0Jsb2NrLCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogPSBudWxscHRy
LCBib29sIGNoZWNrRm9yUGVycGVuZGljdWxhcldyaXRpbmdNb2RlID0gdHJ1ZSkgY29uc3Q7CiAg
ICAgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yUG9zaXRpb25lZChj
b25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgY29udGFpbmluZ0Jsb2NrLCBib29sIGNoZWNrRm9y
UGVycGVuZGljdWxhcldyaXRpbmdNb2RlID0gdHJ1ZSkgY29uc3Q7CiAKICAgICB2b2lkIGNvbXB1
dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmKSBj
b25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hGcmFnbWVudElu
Zm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94RnJh
Z21lbnRJbmZvLmgJKHJldmlzaW9uIDIyMjQ2MikJKGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveFJlZ2lvbkluZm8uaDoyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94RnJhZ21lbnRJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRlck92ZXJmbG93LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgUmVuZGVyQm94UmVnaW9uSW5mbyB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVuZGVyQm94UmVnaW9uSW5mbyk7
CitwdWJsaWM6CisgICAgUmVuZGVyQm94UmVnaW9uSW5mbyhMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0
LCBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgYm9vbCBpc1NoaWZ0ZWQpCisgICAgICAgIDogbV9s
b2dpY2FsTGVmdChsb2dpY2FsTGVmdCkKKyAgICAgICAgLCBtX2xvZ2ljYWxXaWR0aChsb2dpY2Fs
V2lkdGgpCisgICAgICAgICwgbV9pc1NoaWZ0ZWQoaXNTaGlmdGVkKQorICAgIHsgfQorCisgICAg
TGF5b3V0VW5pdCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbExlZnQ7IH0K
KyAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFdp
ZHRoOyB9CisgICAgCisgICAgdm9pZCBzaGlmdExvZ2ljYWxMZWZ0KExheW91dFVuaXQgZGVsdGEp
IHsgbV9sb2dpY2FsTGVmdCArPSBkZWx0YTsgbV9pc1NoaWZ0ZWQgPSB0cnVlOyB9CisKKyAgICBi
b29sIGlzU2hpZnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTaGlmdGVkOyB9CisKKyAgICB2b2lk
IGNyZWF0ZU92ZXJmbG93KGNvbnN0IExheW91dFJlY3QmIGxheW91dE92ZXJmbG93LCBjb25zdCBM
YXlvdXRSZWN0JiB2aXN1YWxPdmVyZmxvdykgeyBtX292ZXJmbG93ID0gYWRvcHRSZWYobmV3IFJl
bmRlck92ZXJmbG93KGxheW91dE92ZXJmbG93LCB2aXN1YWxPdmVyZmxvdykpOyB9CisgICAgUmVu
ZGVyT3ZlcmZsb3cqIG92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdy5nZXQoKTsg
fQorICAgIHZvaWQgY2xlYXJPdmVyZmxvdygpCisgICAgeworICAgICAgICBpZiAobV9vdmVyZmxv
dykKKyAgICAgICAgICAgIG1fb3ZlcmZsb3cgPSBudWxscHRyOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBMYXlvdXRVbml0IG1fbG9naWNhbExlZnQ7CisgICAgTGF5b3V0VW5pdCBtX2xvZ2ljYWxX
aWR0aDsKKyAgICBib29sIG1faXNTaGlmdGVkOworICAgIFJlZlB0cjxSZW5kZXJPdmVyZmxvdz4g
bV9vdmVyZmxvdzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hGcmFnbWVudEluZm8uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94RnJhZ21lbnRJbmZvLmgJKHJldmlzaW9u
IDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hGcmFnbWVudElu
Zm8uaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDExIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgUmVuZGVyQm94UmVnaW9uSW5mbyB7CitjbGFzcyBSZW5kZXJCb3hGcmFn
bWVudEluZm8gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFJlbmRlckJveFJlZ2lvbkluZm8pOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFJlbmRlckJveEZyYWdtZW50SW5mbyk7CiBwdWJsaWM6Ci0gICAgUmVuZGVyQm94UmVnaW9uSW5m
byhMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgYm9vbCBp
c1NoaWZ0ZWQpCisgICAgUmVuZGVyQm94RnJhZ21lbnRJbmZvKExheW91dFVuaXQgbG9naWNhbExl
ZnQsIExheW91dFVuaXQgbG9naWNhbFdpZHRoLCBib29sIGlzU2hpZnRlZCkKICAgICAgICAgOiBt
X2xvZ2ljYWxMZWZ0KGxvZ2ljYWxMZWZ0KQogICAgICAgICAsIG1fbG9naWNhbFdpZHRoKGxvZ2lj
YWxXaWR0aCkKICAgICAgICAgLCBtX2lzU2hpZnRlZChpc1NoaWZ0ZWQpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHJldmlz
aW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlICJSZW5k
ZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKICNp
bmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaCIKLSNpbmNsdWRlICJSZW5kZXJS
ZWdpb24uaCIKKyNpbmNsdWRlICJSZW5kZXJGcmFnbWVudENvbnRhaW5lci5oIgogI2luY2x1ZGUg
IlJlbmRlclRhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVSb3cuaCIKICNpbmNsdWRlICJS
ZW5kZXJUZXh0LmgiCkBAIC00MTQsOSArNDE0LDkgQEAgTGF5b3V0UG9pbnQgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6OmFkanVzdAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChp
czxSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ+KCphbmNlc3RvcikpIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gV2UgbmVlZCB0byBhcHBseSBhIHRyYW5zbGF0aW9uIGJhc2VkIG9mZiB3aGF0
IHJlZ2lvbiB3ZSBhcmUgaW5zaWRlLgotICAgICAgICAgICAgICAgICAgICBSZW5kZXJSZWdpb24q
IHJlZ2lvbiA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZD4oKmFuY2VzdG9y
KS5waHlzaWNhbFRyYW5zbGF0aW9uRnJvbUZsb3dUb1JlZ2lvbihyZWZlcmVuY2VQb2ludCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChyZWdpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZWZlcmVuY2VQb2ludC5tb3ZlQnkocmVnaW9uLT50b3BMZWZ0TG9jYXRpb24oKSk7CisgICAgICAg
ICAgICAgICAgICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCA9IGRvd25jYXN0
PFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZD4oKmFuY2VzdG9yKS5waHlzaWNhbFRyYW5zbGF0
aW9uRnJvbUZsb3dUb0ZyYWdtZW50KHJlZmVyZW5jZVBvaW50KTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGZyYWdtZW50KQorICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlUG9pbnQu
bW92ZUJ5KGZyYWdtZW50LT50b3BMZWZ0TG9jYXRpb24oKSk7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmICghaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
aWYgKGlzPFJlbmRlckJveD4oKmFuY2VzdG9yKSAmJiAhaXM8UmVuZGVyVGFibGVSb3c+KCphbmNl
c3RvcikpCiAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VQb2ludC5tb3ZlQnkoZG93
bmNhc3Q8UmVuZGVyQm94PigqYW5jZXN0b3IpLnRvcExlZnRMb2NhdGlvbigpKTsKQEAgLTI1NjMs
MTAgKzI1NjMsMTAgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6bWFwQWJzb2x1dGVUbwog
ICAgIC8vIFRoZSBwb2ludCBpbnNpZGUgYSBib3ggdGhhdCdzIGluc2lkZSBhIHJlZ2lvbiBoYXMg
aXRzIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSByZWdpb24sCiAgICAgLy8gbm90IHRoZSBG
bG93VGhyZWFkIHRoYXQgaXMgaXRzIGNvbnRhaW5lciBpbiB0aGUgUmVuZGVyT2JqZWN0IHRyZWUu
CiAgICAgaWYgKGlzPFJlbmRlckJveD4oKnRoaXMpICYmIGNvbnRhaW5lci0+aXNPdXRPZkZsb3dS
ZW5kZXJGbG93VGhyZWFkKCkpIHsKLSAgICAgICAgUmVuZGVyUmVnaW9uKiBzdGFydFJlZ2lvbiA9
IG51bGxwdHI7Ci0gICAgICAgIFJlbmRlclJlZ2lvbiogZW5kUmVnaW9uID0gbnVsbHB0cjsKLSAg
ICAgICAgaWYgKGRvd25jYXN0PFJlbmRlckZsb3dUaHJlYWQ+KCpjb250YWluZXIpLmdldFJlZ2lv
blJhbmdlRm9yQm94KGRvd25jYXN0PFJlbmRlckJveD4odGhpcyksIHN0YXJ0UmVnaW9uLCBlbmRS
ZWdpb24pKQotICAgICAgICAgICAgY29udGFpbmVyID0gc3RhcnRSZWdpb247CisgICAgICAgIFJl
bmRlckZyYWdtZW50Q29udGFpbmVyKiBzdGFydEZyYWdtZW50ID0gbnVsbHB0cjsKKyAgICAgICAg
UmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGVuZEZyYWdtZW50ID0gbnVsbHB0cjsKKyAgICAgICAg
aWYgKGRvd25jYXN0PFJlbmRlckZsb3dUaHJlYWQ+KCpjb250YWluZXIpLmdldEZyYWdtZW50UmFu
Z2VGb3JCb3goZG93bmNhc3Q8UmVuZGVyQm94Pih0aGlzKSwgc3RhcnRGcmFnbWVudCwgZW5kRnJh
Z21lbnQpKQorICAgICAgICAgICAgY29udGFpbmVyID0gc3RhcnRGcmFnbWVudDsKICAgICB9CiAK
ICAgICBjb250YWluZXItPm1hcEFic29sdXRlVG9Mb2NhbFBvaW50KG1vZGUsIHRyYW5zZm9ybVN0
YXRlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5oCShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjE4LDcgKzIxOCw3IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUpIG92
ZXJyaWRlOwogCi0gICAgYm9vbCBjYW5IYXZlQm94SW5mb0luUmVnaW9uKCkgY29uc3QgeyByZXR1
cm4gIWlzRmxvYXRpbmcoKSAmJiAhaXNSZXBsYWNlZCgpICYmICFpc0lubGluZSgpICYmICFpc1Rh
YmxlQ2VsbCgpICYmIGlzUmVuZGVyQmxvY2soKSAmJiAhaXNSZW5kZXJTVkdCbG9jaygpOyB9Cisg
ICAgYm9vbCBjYW5IYXZlQm94SW5mb0luRnJhZ21lbnQoKSBjb25zdCB7IHJldHVybiAhaXNGbG9h
dGluZygpICYmICFpc1JlcGxhY2VkKCkgJiYgIWlzSW5saW5lKCkgJiYgIWlzVGFibGVDZWxsKCkg
JiYgaXNSZW5kZXJCbG9jaygpICYmICFpc1JlbmRlclNWR0Jsb2NrKCk7IH0KIAogICAgIHZvaWQg
Z2V0R2VvbWV0cnlGb3JCYWNrZ3JvdW5kSW1hZ2UoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCogcGFpbnRDb250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgRmxvYXRTaXplJiBwaGFzZSwgRmxvYXRTaXplJiB0aWxlU2l6ZSkgY29u
c3Q7CiAgICAgdm9pZCBjb250ZW50Q2hhbmdlZChDb250ZW50Q2hhbmdlVHlwZSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94UmVnaW9uSW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hSZWdpb25JbmZvLmgJKHJldmlz
aW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hSZWdpb25J
bmZvLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiUmVu
ZGVyT3ZlcmZsb3cuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJCb3hS
ZWdpb25JbmZvIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShSZW5kZXJCb3hSZWdpb25JbmZvKTsKLXB1YmxpYzoKLSAgICBSZW5kZXJCb3hS
ZWdpb25JbmZvKExheW91dFVuaXQgbG9naWNhbExlZnQsIExheW91dFVuaXQgbG9naWNhbFdpZHRo
LCBib29sIGlzU2hpZnRlZCkKLSAgICAgICAgOiBtX2xvZ2ljYWxMZWZ0KGxvZ2ljYWxMZWZ0KQot
ICAgICAgICAsIG1fbG9naWNhbFdpZHRoKGxvZ2ljYWxXaWR0aCkKLSAgICAgICAgLCBtX2lzU2hp
ZnRlZChpc1NoaWZ0ZWQpCi0gICAgeyB9Ci0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KCkg
Y29uc3QgeyByZXR1cm4gbV9sb2dpY2FsTGVmdDsgfQotICAgIExheW91dFVuaXQgbG9naWNhbFdp
ZHRoKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsV2lkdGg7IH0KLSAgICAKLSAgICB2b2lkIHNo
aWZ0TG9naWNhbExlZnQoTGF5b3V0VW5pdCBkZWx0YSkgeyBtX2xvZ2ljYWxMZWZ0ICs9IGRlbHRh
OyBtX2lzU2hpZnRlZCA9IHRydWU7IH0KLQotICAgIGJvb2wgaXNTaGlmdGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1NoaWZ0ZWQ7IH0KLQotICAgIHZvaWQgY3JlYXRlT3ZlcmZsb3coY29uc3QgTGF5
b3V0UmVjdCYgbGF5b3V0T3ZlcmZsb3csIGNvbnN0IExheW91dFJlY3QmIHZpc3VhbE92ZXJmbG93
KSB7IG1fb3ZlcmZsb3cgPSBhZG9wdFJlZihuZXcgUmVuZGVyT3ZlcmZsb3cobGF5b3V0T3ZlcmZs
b3csIHZpc3VhbE92ZXJmbG93KSk7IH0KLSAgICBSZW5kZXJPdmVyZmxvdyogb3ZlcmZsb3coKSBj
b25zdCB7IHJldHVybiBtX292ZXJmbG93LmdldCgpOyB9Ci0gICAgdm9pZCBjbGVhck92ZXJmbG93
KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX292ZXJmbG93KQotICAgICAgICAgICAgbV9vdmVyZmxv
dyA9IG51bGxwdHI7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIExheW91dFVuaXQgbV9sb2dpY2Fs
TGVmdDsKLSAgICBMYXlvdXRVbml0IG1fbG9naWNhbFdpZHRoOwotICAgIGJvb2wgbV9pc1NoaWZ0
ZWQ7Ci0gICAgUmVmUHRyPFJlbmRlck92ZXJmbG93PiBtX292ZXJmbG93OwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJF
bGVtZW50LmNwcAkocmV2aXNpb24gMjIyNDYyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBACiAjaWYg
IUFTU0VSVF9ESVNBQkxFRAogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNlbmRpZgot
I2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgorI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50Q29udGFp
bmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDYXB0aW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDb2wuaCIKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAko
cmV2aXNpb24gMjIyNDYyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVV
cGxvYWRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQxLDcgKzI0MSw3IEBAIHZvaWQg
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNvbXB1dGVQcmUKICAgICBzZXRQcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzRGlydHkoZmFsc2UpOwogfQogCi1WaXNpYmxlUG9zaXRpb24gUmVuZGVyRmlsZVVw
bG9hZENvbnRyb2w6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBS
ZW5kZXJSZWdpb24qKQorVmlzaWJsZVBvc2l0aW9uIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpw
b3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyRnJhZ21lbnRD
b250YWluZXIqKQogewogICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5o
CShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2wuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwcml2YXRl
OgogCiAgICAgaW50IG1heEZpbGVuYW1lV2lkdGgoKSBjb25zdDsKICAgICAKLSAgICBWaXNpYmxl
UG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRl
clJlZ2lvbiopIG92ZXJyaWRlOworICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50
KGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKSBvdmVy
cmlkZTsKIAogICAgIEhUTUxJbnB1dEVsZW1lbnQqIHVwbG9hZEJ1dHRvbigpIGNvbnN0OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJ
KHJldmlzaW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4
aWJsZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1Miw4ICs1NTIsOCBAQCBzdGQ6Om9wdGlv
bmFsPExheW91dFVuaXQ+IFJlbmRlckZsZXhpYmxlCiAgICAgfQogICAgIAogICAgIC8vIEZJWE1F
OiBGaWd1cmUgb3V0IGhvdyB0aGlzIHNob3VsZCB3b3JrIGZvciByZWdpb25zIGFuZCBwYXNzIGlu
IHRoZSBhcHByb3ByaWF0ZSB2YWx1ZXMuCi0gICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSBudWxs
cHRyOwotICAgIHJldHVybiBjaGlsZC5jb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb25Vc2luZyhz
aXplVHlwZSwgc2l6ZSwgY29udGVudExvZ2ljYWxXaWR0aCgpLCAqdGhpcywgcmVnaW9uKSAtIGJv
cmRlckFuZFBhZGRpbmc7CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50ID0g
bnVsbHB0cjsKKyAgICByZXR1cm4gY2hpbGQuY29tcHV0ZUxvZ2ljYWxXaWR0aEluRnJhZ21lbnRV
c2luZyhzaXplVHlwZSwgc2l6ZSwgY29udGVudExvZ2ljYWxXaWR0aCgpLCAqdGhpcywgZnJhZ21l
bnQpIC0gYm9yZGVyQW5kUGFkZGluZzsKIH0KIAogICAgIApAQCAtMTgyNiw3ICsxODI2LDcgQEAg
dm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6YXBwbHlTdHJldGNoQWxpZwogICAgICAgICB9CiAgICAg
fSBlbHNlIGlmIChoYXNPcnRob2dvbmFsRmxvdyhjaGlsZCkgJiYgY2hpbGQuc3R5bGUoKS5sb2dp
Y2FsV2lkdGgoKS5pc0F1dG8oKSkgewogICAgICAgICBMYXlvdXRVbml0IGNoaWxkV2lkdGggPSBz
dGQ6Om1heChMYXlvdXRVbml0KCksIGxpbmVDcm9zc0F4aXNFeHRlbnQgLSBjcm9zc0F4aXNNYXJn
aW5FeHRlbnRGb3JDaGlsZChjaGlsZCkpOwotICAgICAgICBjaGlsZFdpZHRoID0gY2hpbGQuY29u
c3RyYWluTG9naWNhbFdpZHRoSW5SZWdpb25CeU1pbk1heChjaGlsZFdpZHRoLCBjcm9zc0F4aXND
b250ZW50RXh0ZW50KCksICp0aGlzLCBudWxscHRyKTsKKyAgICAgICAgY2hpbGRXaWR0aCA9IGNo
aWxkLmNvbnN0cmFpbkxvZ2ljYWxXaWR0aEluRnJhZ21lbnRCeU1pbk1heChjaGlsZFdpZHRoLCBj
cm9zc0F4aXNDb250ZW50RXh0ZW50KCksICp0aGlzLCBudWxscHRyKTsKICAgICAgICAgCiAgICAg
ICAgIGlmIChjaGlsZFdpZHRoICE9IGNoaWxkLmxvZ2ljYWxXaWR0aCgpKSB7CiAgICAgICAgICAg
ICBjaGlsZC5zZXRPdmVycmlkZUxvZ2ljYWxDb250ZW50V2lkdGgoY2hpbGRXaWR0aCAtIGNoaWxk
LmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCShyZXZpc2lvbiAyMjI0NjIpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDExICszNSwxMSBAQAogI2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIKICNp
bmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUE9ESW50ZXJ2YWxUcmVlLmgiCi0jaW5jbHVkZSAi
UmVuZGVyQm94UmVnaW9uSW5mby5oIgorI2luY2x1ZGUgIlJlbmRlckJveEZyYWdtZW50SW5mby5o
IgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyUmVnaW9u
LmgiCisjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZVNlY3Rpb24uaCIKICNpbmNsdWRl
ICJSZW5kZXJUaGVtZS5oIgpAQCAtNTEsMTAgKzUxLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogUmVuZGVyRmxvd1RocmVhZDo6UmVuZGVyRmxvd1RocmVhZChEb2N1bWVudCYgZG9jdW1lbnQs
IFJlbmRlclN0eWxlJiYgc3R5bGUpCiAgICAgOiBSZW5kZXJCbG9ja0Zsb3coZG9jdW1lbnQsIFdU
Rk1vdmUoc3R5bGUpKQotICAgICwgbV9jdXJyZW50UmVnaW9uTWFpbnRhaW5lcihudWxscHRyKQot
ICAgICwgbV9yZWdpb25zSW52YWxpZGF0ZWQoZmFsc2UpCi0gICAgLCBtX3JlZ2lvbnNIYXZlVW5p
Zm9ybUxvZ2ljYWxXaWR0aCh0cnVlKQotICAgICwgbV9yZWdpb25zSGF2ZVVuaWZvcm1Mb2dpY2Fs
SGVpZ2h0KHRydWUpCisgICAgLCBtX2N1cnJlbnRGcmFnbWVudE1haW50YWluZXIobnVsbHB0cikK
KyAgICAsIG1fZnJhZ21lbnRzSW52YWxpZGF0ZWQoZmFsc2UpCisgICAgLCBtX2ZyYWdtZW50c0hh
dmVVbmlmb3JtTG9naWNhbFdpZHRoKHRydWUpCisgICAgLCBtX2ZyYWdtZW50c0hhdmVVbmlmb3Jt
TG9naWNhbEhlaWdodCh0cnVlKQogICAgICwgbV9wYWdlTG9naWNhbFNpemVDaGFuZ2VkKGZhbHNl
KQogewogICAgIHNldElzUmVuZGVyRmxvd1RocmVhZCh0cnVlKTsKQEAgLTgwLDg3ICs4MCw4NyBA
QCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnN0eWxlRGlkQ2hhbmdlKFN0CiAgICAgUmVuZGVyQmxv
Y2tGbG93OjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CiAKICAgICBpZiAob2xkU3R5
bGUgJiYgb2xkU3R5bGUtPndyaXRpbmdNb2RlKCkgIT0gc3R5bGUoKS53cml0aW5nTW9kZSgpKQot
ICAgICAgICBpbnZhbGlkYXRlUmVnaW9ucygpOworICAgICAgICBpbnZhbGlkYXRlRnJhZ21lbnRz
KCk7CiB9CiAKIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6cmVtb3ZlRmxvd0NoaWxkSW5mbyhSZW5k
ZXJFbGVtZW50JiBjaGlsZCkKIHsKICAgICBpZiAoaXM8UmVuZGVyQmxvY2tGbG93PihjaGlsZCkp
Ci0gICAgICAgIHJlbW92ZUxpbmVSZWdpb25JbmZvKGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4o
Y2hpbGQpKTsKKyAgICAgICAgcmVtb3ZlTGluZUZyYWdtZW50SW5mbyhkb3duY2FzdDxSZW5kZXJC
bG9ja0Zsb3c+KGNoaWxkKSk7CiAgICAgaWYgKGlzPFJlbmRlckJveD4oY2hpbGQpKQotICAgICAg
ICByZW1vdmVSZW5kZXJCb3hSZWdpb25JbmZvKGRvd25jYXN0PFJlbmRlckJveD4oY2hpbGQpKTsK
KyAgICAgICAgcmVtb3ZlUmVuZGVyQm94RnJhZ21lbnRJbmZvKGRvd25jYXN0PFJlbmRlckJveD4o
Y2hpbGQpKTsKIH0KIAotdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpyZW1vdmVSZWdpb25Gcm9tVGhy
ZWFkKFJlbmRlclJlZ2lvbiogcmVuZGVyUmVnaW9uKQordm9pZCBSZW5kZXJGbG93VGhyZWFkOjpy
ZW1vdmVGcmFnbWVudEZyb21UaHJlYWQoUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIFJlbmRlckZy
YWdtZW50Q29udGFpbmVyKQogewotICAgIEFTU0VSVChyZW5kZXJSZWdpb24pOwotICAgIG1fcmVn
aW9uTGlzdC5yZW1vdmUocmVuZGVyUmVnaW9uKTsKKyAgICBBU1NFUlQoUmVuZGVyRnJhZ21lbnRD
b250YWluZXIpOworICAgIG1fZnJhZ21lbnRMaXN0LnJlbW92ZShSZW5kZXJGcmFnbWVudENvbnRh
aW5lcik7CiB9CiAKLXZvaWQgUmVuZGVyRmxvd1RocmVhZDo6aW52YWxpZGF0ZVJlZ2lvbnMoTWFy
a2luZ0JlaGF2aW9yIG1hcmtpbmdQYXJlbnRzKQordm9pZCBSZW5kZXJGbG93VGhyZWFkOjppbnZh
bGlkYXRlRnJhZ21lbnRzKE1hcmtpbmdCZWhhdmlvciBtYXJraW5nUGFyZW50cykKIHsKLSAgICBp
ZiAobV9yZWdpb25zSW52YWxpZGF0ZWQpIHsKKyAgICBpZiAobV9mcmFnbWVudHNJbnZhbGlkYXRl
ZCkgewogICAgICAgICBBU1NFUlQoc2VsZk5lZWRzTGF5b3V0KCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgbV9yZWdpb25SYW5nZU1hcC5jbGVhcigpOwotICAgIG1fYnJlYWtCZWZv
cmVUb1JlZ2lvbk1hcC5jbGVhcigpOwotICAgIG1fYnJlYWtBZnRlclRvUmVnaW9uTWFwLmNsZWFy
KCk7Ci0gICAgaWYgKG1fbGluZVRvUmVnaW9uTWFwKQotICAgICAgICBtX2xpbmVUb1JlZ2lvbk1h
cC0+Y2xlYXIoKTsKKyAgICBtX2ZyYWdtZW50UmFuZ2VNYXAuY2xlYXIoKTsKKyAgICBtX2JyZWFr
QmVmb3JlVG9GcmFnbWVudE1hcC5jbGVhcigpOworICAgIG1fYnJlYWtBZnRlclRvRnJhZ21lbnRN
YXAuY2xlYXIoKTsKKyAgICBpZiAobV9saW5lVG9GcmFnbWVudE1hcCkKKyAgICAgICAgbV9saW5l
VG9GcmFnbWVudE1hcC0+Y2xlYXIoKTsKICAgICBzZXROZWVkc0xheW91dChtYXJraW5nUGFyZW50
cyk7CiAKLSAgICBtX3JlZ2lvbnNJbnZhbGlkYXRlZCA9IHRydWU7CisgICAgbV9mcmFnbWVudHNJ
bnZhbGlkYXRlZCA9IHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyRmxvd1RocmVhZDo6dmFsaWRhdGVS
ZWdpb25zKCkKK3ZvaWQgUmVuZGVyRmxvd1RocmVhZDo6dmFsaWRhdGVGcmFnbWVudHMoKQogewot
ICAgIGlmIChtX3JlZ2lvbnNJbnZhbGlkYXRlZCkgewotICAgICAgICBtX3JlZ2lvbnNJbnZhbGlk
YXRlZCA9IGZhbHNlOwotICAgICAgICBtX3JlZ2lvbnNIYXZlVW5pZm9ybUxvZ2ljYWxXaWR0aCA9
IHRydWU7Ci0gICAgICAgIG1fcmVnaW9uc0hhdmVVbmlmb3JtTG9naWNhbEhlaWdodCA9IHRydWU7
CisgICAgaWYgKG1fZnJhZ21lbnRzSW52YWxpZGF0ZWQpIHsKKyAgICAgICAgbV9mcmFnbWVudHNJ
bnZhbGlkYXRlZCA9IGZhbHNlOworICAgICAgICBtX2ZyYWdtZW50c0hhdmVVbmlmb3JtTG9naWNh
bFdpZHRoID0gdHJ1ZTsKKyAgICAgICAgbV9mcmFnbWVudHNIYXZlVW5pZm9ybUxvZ2ljYWxIZWln
aHQgPSB0cnVlOwogCi0gICAgICAgIGlmIChoYXNSZWdpb25zKCkpIHsKLSAgICAgICAgICAgIExh
eW91dFVuaXQgcHJldmlvdXNSZWdpb25Mb2dpY2FsV2lkdGggPSAwOwotICAgICAgICAgICAgTGF5
b3V0VW5pdCBwcmV2aW91c1JlZ2lvbkxvZ2ljYWxIZWlnaHQgPSAwOwotICAgICAgICAgICAgYm9v
bCBmaXJzdFJlZ2lvblZpc2l0ZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKGhhc0ZyYWdtZW50cygp
KSB7CisgICAgICAgICAgICBMYXlvdXRVbml0IHByZXZpb3VzRnJhZ21lbnRMb2dpY2FsV2lkdGgg
PSAwOworICAgICAgICAgICAgTGF5b3V0VW5pdCBwcmV2aW91c0ZyYWdtZW50TG9naWNhbEhlaWdo
dCA9IDA7CisgICAgICAgICAgICBib29sIGZpcnN0RnJhZ21lbnRWaXNpdGVkID0gZmFsc2U7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAoYXV0byYgcmVnaW9uIDogbV9yZWdpb25MaXN0
KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFyZWdpb24tPm5lZWRzTGF5b3V0KCkgfHwgcmVn
aW9uLT5pc1JlbmRlclJlZ2lvblNldCgpKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgZnJhZ21l
bnQgOiBtX2ZyYWdtZW50TGlzdCkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghZnJhZ21lbnQt
Pm5lZWRzTGF5b3V0KCkgfHwgZnJhZ21lbnQtPmlzUmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQo
KSk7CiAKLSAgICAgICAgICAgICAgICByZWdpb24tPmRlbGV0ZUFsbFJlbmRlckJveFJlZ2lvbklu
Zm8oKTsKKyAgICAgICAgICAgICAgICBmcmFnbWVudC0+ZGVsZXRlQWxsUmVuZGVyQm94RnJhZ21l
bnRJbmZvKCk7CiAKLSAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHJlZ2lvbkxvZ2ljYWxXaWR0
aCA9IHJlZ2lvbi0+cGFnZUxvZ2ljYWxXaWR0aCgpOwotICAgICAgICAgICAgICAgIExheW91dFVu
aXQgcmVnaW9uTG9naWNhbEhlaWdodCA9IHJlZ2lvbi0+cGFnZUxvZ2ljYWxIZWlnaHQoKTsKKyAg
ICAgICAgICAgICAgICBMYXlvdXRVbml0IGZyYWdtZW50TG9naWNhbFdpZHRoID0gZnJhZ21lbnQt
PnBhZ2VMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGZyYWdtZW50
TG9naWNhbEhlaWdodCA9IGZyYWdtZW50LT5wYWdlTG9naWNhbEhlaWdodCgpOwogCi0gICAgICAg
ICAgICAgICAgaWYgKCFmaXJzdFJlZ2lvblZpc2l0ZWQpCi0gICAgICAgICAgICAgICAgICAgIGZp
cnN0UmVnaW9uVmlzaXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKCFmaXJzdEZyYWdt
ZW50VmlzaXRlZCkKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RGcmFnbWVudFZpc2l0ZWQgPSB0
cnVlOwogICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAobV9y
ZWdpb25zSGF2ZVVuaWZvcm1Mb2dpY2FsV2lkdGggJiYgcHJldmlvdXNSZWdpb25Mb2dpY2FsV2lk
dGggIT0gcmVnaW9uTG9naWNhbFdpZHRoKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9yZWdp
b25zSGF2ZVVuaWZvcm1Mb2dpY2FsV2lkdGggPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKG1fcmVnaW9uc0hhdmVVbmlmb3JtTG9naWNhbEhlaWdodCAmJiBwcmV2aW91c1JlZ2lvbkxv
Z2ljYWxIZWlnaHQgIT0gcmVnaW9uTG9naWNhbEhlaWdodCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fcmVnaW9uc0hhdmVVbmlmb3JtTG9naWNhbEhlaWdodCA9IGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICBpZiAobV9mcmFnbWVudHNIYXZlVW5pZm9ybUxvZ2ljYWxXaWR0aCAmJiBwcmV2
aW91c0ZyYWdtZW50TG9naWNhbFdpZHRoICE9IGZyYWdtZW50TG9naWNhbFdpZHRoKQorICAgICAg
ICAgICAgICAgICAgICAgICAgbV9mcmFnbWVudHNIYXZlVW5pZm9ybUxvZ2ljYWxXaWR0aCA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICBpZiAobV9mcmFnbWVudHNIYXZlVW5pZm9ybUxvZ2lj
YWxIZWlnaHQgJiYgcHJldmlvdXNGcmFnbWVudExvZ2ljYWxIZWlnaHQgIT0gZnJhZ21lbnRMb2dp
Y2FsSGVpZ2h0KQorICAgICAgICAgICAgICAgICAgICAgICAgbV9mcmFnbWVudHNIYXZlVW5pZm9y
bUxvZ2ljYWxIZWlnaHQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICBwcmV2aW91c1JlZ2lvbkxvZ2ljYWxXaWR0aCA9IHJlZ2lvbkxvZ2ljYWxXaWR0aDsKKyAg
ICAgICAgICAgICAgICBwcmV2aW91c0ZyYWdtZW50TG9naWNhbFdpZHRoID0gZnJhZ21lbnRMb2dp
Y2FsV2lkdGg7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHNldFJlZ2lvblJhbmdlRm9y
Qm94KCp0aGlzLCBtX3JlZ2lvbkxpc3QuZmlyc3QoKSwgbV9yZWdpb25MaXN0Lmxhc3QoKSk7Cisg
ICAgICAgICAgICBzZXRGcmFnbWVudFJhbmdlRm9yQm94KCp0aGlzLCBtX2ZyYWdtZW50TGlzdC5m
aXJzdCgpLCBtX2ZyYWdtZW50TGlzdC5sYXN0KCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAg
dXBkYXRlTG9naWNhbFdpZHRoKCk7IC8vIENhbGxlZCB0byBnZXQgdGhlIG1heGltdW0gbG9naWNh
bCB3aWR0aCBmb3IgdGhlIHJlZ2lvbi4KLSAgICB1cGRhdGVSZWdpb25zRmxvd1RocmVhZFBvcnRp
b25SZWN0KCk7CisgICAgdXBkYXRlTG9naWNhbFdpZHRoKCk7IC8vIENhbGxlZCB0byBnZXQgdGhl
IG1heGltdW0gbG9naWNhbCB3aWR0aCBmb3IgdGhlIGZyYWdtZW50LgorICAgIHVwZGF0ZUZyYWdt
ZW50c0Zsb3dUaHJlYWRQb3J0aW9uUmVjdCgpOwogfQogCiB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6
OmxheW91dCgpCiB7CiAgICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCBsYXlvdXRDaGVj
a1BvaW50OwogCi0gICAgbV9wYWdlTG9naWNhbFNpemVDaGFuZ2VkID0gbV9yZWdpb25zSW52YWxp
ZGF0ZWQgJiYgZXZlckhhZExheW91dCgpOworICAgIG1fcGFnZUxvZ2ljYWxTaXplQ2hhbmdlZCA9
IG1fZnJhZ21lbnRzSW52YWxpZGF0ZWQgJiYgZXZlckhhZExheW91dCgpOwogCi0gICAgdmFsaWRh
dGVSZWdpb25zKCk7CisgICAgdmFsaWRhdGVGcmFnbWVudHMoKTsKIAogICAgIFJlbmRlckJsb2Nr
Rmxvdzo6bGF5b3V0KCk7CiAKQEAgLTE3MCwxNyArMTcwLDE3IEBAIHZvaWQgUmVuZGVyRmxvd1Ro
cmVhZDo6bGF5b3V0KCkKIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6dXBkYXRlTG9naWNhbFdpZHRo
KCkKIHsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCA9IGluaXRpYWxMb2dpY2FsV2lkdGgo
KTsKLSAgICBmb3IgKGF1dG8mIHJlZ2lvbiA6IG1fcmVnaW9uTGlzdCkgewotICAgICAgICBBU1NF
UlQoIXJlZ2lvbi0+bmVlZHNMYXlvdXQoKSB8fCByZWdpb24tPmlzUmVuZGVyUmVnaW9uU2V0KCkp
OwotICAgICAgICBsb2dpY2FsV2lkdGggPSBzdGQ6Om1heChyZWdpb24tPnBhZ2VMb2dpY2FsV2lk
dGgoKSwgbG9naWNhbFdpZHRoKTsKKyAgICBmb3IgKGF1dG8mIGZyYWdtZW50IDogbV9mcmFnbWVu
dExpc3QpIHsKKyAgICAgICAgQVNTRVJUKCFmcmFnbWVudC0+bmVlZHNMYXlvdXQoKSB8fCBmcmFn
bWVudC0+aXNSZW5kZXJGcmFnbWVudENvbnRhaW5lclNldCgpKTsKKyAgICAgICAgbG9naWNhbFdp
ZHRoID0gc3RkOjptYXgoZnJhZ21lbnQtPnBhZ2VMb2dpY2FsV2lkdGgoKSwgbG9naWNhbFdpZHRo
KTsKICAgICB9CiAgICAgc2V0TG9naWNhbFdpZHRoKGxvZ2ljYWxXaWR0aCk7CiAKLSAgICAvLyBJ
ZiB0aGUgcmVnaW9ucyBoYXZlIG5vbi11bmlmb3JtIGxvZ2ljYWwgd2lkdGhzLCB0aGVuIGluc2Vy
dCBpbnNldCBpbmZvcm1hdGlvbiBmb3IgdGhlIFJlbmRlckZsb3dUaHJlYWQuCi0gICAgZm9yIChh
dXRvJiByZWdpb24gOiBtX3JlZ2lvbkxpc3QpIHsKLSAgICAgICAgTGF5b3V0VW5pdCByZWdpb25M
b2dpY2FsV2lkdGggPSByZWdpb24tPnBhZ2VMb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgTGF5b3V0
VW5pdCBsb2dpY2FsTGVmdCA9IHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gTFRSID8gTGF5b3V0VW5p
dCgpIDogbG9naWNhbFdpZHRoIC0gcmVnaW9uTG9naWNhbFdpZHRoOwotICAgICAgICByZWdpb24t
PnNldFJlbmRlckJveFJlZ2lvbkluZm8odGhpcywgbG9naWNhbExlZnQsIHJlZ2lvbkxvZ2ljYWxX
aWR0aCwgZmFsc2UpOworICAgIC8vIElmIHRoZSBmcmFnbWVudHMgaGF2ZSBub24tdW5pZm9ybSBs
b2dpY2FsIHdpZHRocywgdGhlbiBpbnNlcnQgaW5zZXQgaW5mb3JtYXRpb24gZm9yIHRoZSBSZW5k
ZXJGbG93VGhyZWFkLgorICAgIGZvciAoYXV0byYgZnJhZ21lbnQgOiBtX2ZyYWdtZW50TGlzdCkg
eworICAgICAgICBMYXlvdXRVbml0IGZyYWdtZW50TG9naWNhbFdpZHRoID0gZnJhZ21lbnQtPnBh
Z2VMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCA9IHN0eWxl
KCkuZGlyZWN0aW9uKCkgPT0gTFRSID8gTGF5b3V0VW5pdCgpIDogbG9naWNhbFdpZHRoIC0gZnJh
Z21lbnRMb2dpY2FsV2lkdGg7CisgICAgICAgIGZyYWdtZW50LT5zZXRSZW5kZXJCb3hGcmFnbWVu
dEluZm8odGhpcywgbG9naWNhbExlZnQsIGZyYWdtZW50TG9naWNhbFdpZHRoLCBmYWxzZSk7CiAg
ICAgfQogfQogCkBAIC0xOTEsMTEgKzE5MSwxMSBAQCBSZW5kZXJCb3g6OkxvZ2ljYWxFeHRlbnRD
b21wdXRlZFZhbHVlcyBSCiAgICAgY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgPSAwOwogCiAgICAg
Y29uc3QgTGF5b3V0VW5pdCBtYXhGbG93U2l6ZSA9IFJlbmRlckZsb3dUaHJlYWQ6Om1heExvZ2lj
YWxIZWlnaHQoKTsKLSAgICBmb3IgKGF1dG8mIHJlZ2lvbiA6IG1fcmVnaW9uTGlzdCkgewotICAg
ICAgICBBU1NFUlQoIXJlZ2lvbi0+bmVlZHNMYXlvdXQoKSB8fCByZWdpb24tPmlzUmVuZGVyUmVn
aW9uU2V0KCkpOworICAgIGZvciAoYXV0byYgZnJhZ21lbnQgOiBtX2ZyYWdtZW50TGlzdCkgewor
ICAgICAgICBBU1NFUlQoIWZyYWdtZW50LT5uZWVkc0xheW91dCgpIHx8IGZyYWdtZW50LT5pc1Jl
bmRlckZyYWdtZW50Q29udGFpbmVyU2V0KCkpOwogCiAgICAgICAgIExheW91dFVuaXQgZGlzdGFu
Y2VUb01heFNpemUgPSBtYXhGbG93U2l6ZSAtIGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50OwotICAg
ICAgICBjb21wdXRlZFZhbHVlcy5tX2V4dGVudCArPSBzdGQ6Om1pbihkaXN0YW5jZVRvTWF4U2l6
ZSwgcmVnaW9uLT5sb2dpY2FsSGVpZ2h0T2ZBbGxGbG93VGhyZWFkQ29udGVudCgpKTsKKyAgICAg
ICAgY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgKz0gc3RkOjptaW4oZGlzdGFuY2VUb01heFNpemUs
IGZyYWdtZW50LT5sb2dpY2FsSGVpZ2h0T2ZBbGxGbG93VGhyZWFkQ29udGVudCgpKTsKIAogICAg
ICAgICAvLyBJZiB3ZSByZWFjaGVkIHRoZSBtYXhpbXVtIHNpemUgdGhlcmUncyBubyBwb2ludCBp
biBnb2luZyBmdXJ0aGVyLgogICAgICAgICBpZiAoY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgPT0g
bWF4Rmxvd1NpemUpCkBAIC0yMTksNDIgKzIxOSw0MiBAQCBib29sIFJlbmRlckZsb3dUaHJlYWQ6
OnNob3VsZFJlcGFpbnQoY29uCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyRmxv
d1RocmVhZDo6cmVwYWludFJlY3RhbmdsZUluUmVnaW9ucyhjb25zdCBMYXlvdXRSZWN0JiByZXBh
aW50UmVjdCkgY29uc3QKK3ZvaWQgUmVuZGVyRmxvd1RocmVhZDo6cmVwYWludFJlY3RhbmdsZUlu
RnJhZ21lbnRzKGNvbnN0IExheW91dFJlY3QmIHJlcGFpbnRSZWN0KSBjb25zdAogewotICAgIGlm
ICghc2hvdWxkUmVwYWludChyZXBhaW50UmVjdCkgfHwgIWhhc1ZhbGlkUmVnaW9uSW5mbygpKQor
ICAgIGlmICghc2hvdWxkUmVwYWludChyZXBhaW50UmVjdCkgfHwgIWhhc1ZhbGlkRnJhZ21lbnRJ
bmZvKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIExheW91dFN0YXRlRGlzYWJsZXIgbGF5b3V0
U3RhdGVEaXNhYmxlcih2aWV3KCkpOyAvLyBXZSBjYW4ndCB1c2UgbGF5b3V0IHN0YXRlIHRvIHJl
cGFpbnQsIHNpbmNlIHRoZSByZWdpb25zIGFyZSBzb21ld2hlcmUgZWxzZS4KKyAgICBMYXlvdXRT
dGF0ZURpc2FibGVyIGxheW91dFN0YXRlRGlzYWJsZXIodmlldygpKTsgLy8gV2UgY2FuJ3QgdXNl
IGxheW91dCBzdGF0ZSB0byByZXBhaW50LCBzaW5jZSB0aGUgZnJhZ21lbnRzIGFyZSBzb21ld2hl
cmUgZWxzZS4KIAotICAgIGZvciAoYXV0byYgcmVnaW9uIDogbV9yZWdpb25MaXN0KQotICAgICAg
ICByZWdpb24tPnJlcGFpbnRGbG93VGhyZWFkQ29udGVudChyZXBhaW50UmVjdCk7CisgICAgZm9y
IChhdXRvJiBmcmFnbWVudCA6IG1fZnJhZ21lbnRMaXN0KQorICAgICAgICBmcmFnbWVudC0+cmVw
YWludEZsb3dUaHJlYWRDb250ZW50KHJlcGFpbnRSZWN0KTsKIH0KIAotUmVuZGVyUmVnaW9uKiBS
ZW5kZXJGbG93VGhyZWFkOjpyZWdpb25BdEJsb2NrT2Zmc2V0KGNvbnN0IFJlbmRlckJveCogY2xh
bXBCb3gsIExheW91dFVuaXQgb2Zmc2V0LCBib29sIGV4dGVuZExhc3RSZWdpb24pIGNvbnN0CitS
ZW5kZXJGcmFnbWVudENvbnRhaW5lciogUmVuZGVyRmxvd1RocmVhZDo6ZnJhZ21lbnRBdEJsb2Nr
T2Zmc2V0KGNvbnN0IFJlbmRlckJveCogY2xhbXBCb3gsIExheW91dFVuaXQgb2Zmc2V0LCBib29s
IGV4dGVuZExhc3RGcmFnbWVudCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIW1fcmVnaW9uc0ludmFs
aWRhdGVkKTsKKyAgICBBU1NFUlQoIW1fZnJhZ21lbnRzSW52YWxpZGF0ZWQpOwogCi0gICAgaWYg
KG1fcmVnaW9uTGlzdC5pc0VtcHR5KCkpCisgICAgaWYgKG1fZnJhZ21lbnRMaXN0LmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAobV9yZWdpb25MaXN0LnNpemUo
KSA9PSAxICYmIGV4dGVuZExhc3RSZWdpb24pCi0gICAgICAgIHJldHVybiBtX3JlZ2lvbkxpc3Qu
Zmlyc3QoKTsKKyAgICBpZiAobV9mcmFnbWVudExpc3Quc2l6ZSgpID09IDEgJiYgZXh0ZW5kTGFz
dEZyYWdtZW50KQorICAgICAgICByZXR1cm4gbV9mcmFnbWVudExpc3QuZmlyc3QoKTsKIAogICAg
IGlmIChvZmZzZXQgPD0gMCkKLSAgICAgICAgcmV0dXJuIGNsYW1wQm94ID8gY2xhbXBCb3gtPmNs
YW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMobV9yZWdpb25MaXN0LmZpcnN0KCkpIDogbV9yZWdpb25M
aXN0LmZpcnN0KCk7CisgICAgICAgIHJldHVybiBjbGFtcEJveCA/IGNsYW1wQm94LT5jbGFtcFRv
U3RhcnRBbmRFbmRGcmFnbWVudHMobV9mcmFnbWVudExpc3QuZmlyc3QoKSkgOiBtX2ZyYWdtZW50
TGlzdC5maXJzdCgpOwogCi0gICAgUmVnaW9uU2VhcmNoQWRhcHRlciBhZGFwdGVyKG9mZnNldCk7
Ci0gICAgbV9yZWdpb25JbnRlcnZhbFRyZWUuYWxsT3ZlcmxhcHNXaXRoQWRhcHRlcjxSZWdpb25T
ZWFyY2hBZGFwdGVyPihhZGFwdGVyKTsKKyAgICBGcmFnbWVudFNlYXJjaEFkYXB0ZXIgYWRhcHRl
cihvZmZzZXQpOworICAgIG1fZnJhZ21lbnRJbnRlcnZhbFRyZWUuYWxsT3ZlcmxhcHNXaXRoQWRh
cHRlcjxGcmFnbWVudFNlYXJjaEFkYXB0ZXI+KGFkYXB0ZXIpOwogCi0gICAgLy8gSWYgbm8gcmVn
aW9uIHdhcyBmb3VuZCwgdGhlIG9mZnNldCBpcyBpbiB0aGUgZmxvdyB0aHJlYWQgb3ZlcmZsb3cu
Ci0gICAgLy8gVGhlIGxhc3QgcmVnaW9uIHdpbGwgY29udGFpbiB0aGUgb2Zmc2V0IGlmIGV4dGVu
ZExhc3RSZWdpb24gaXMgc2V0IG9yIGlmIHRoZSBsYXN0IHJlZ2lvbiBpcyBhIHNldC4KLSAgICBp
ZiAoIWFkYXB0ZXIucmVzdWx0KCkgJiYgKGV4dGVuZExhc3RSZWdpb24gfHwgbV9yZWdpb25MaXN0
Lmxhc3QoKS0+aXNSZW5kZXJSZWdpb25TZXQoKSkpCi0gICAgICAgIHJldHVybiBjbGFtcEJveCA/
IGNsYW1wQm94LT5jbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKG1fcmVnaW9uTGlzdC5sYXN0KCkp
IDogbV9yZWdpb25MaXN0Lmxhc3QoKTsKKyAgICAvLyBJZiBubyBmcmFnbWVudCB3YXMgZm91bmQs
IHRoZSBvZmZzZXQgaXMgaW4gdGhlIGZsb3cgdGhyZWFkIG92ZXJmbG93LgorICAgIC8vIFRoZSBs
YXN0IGZyYWdtZW50IHdpbGwgY29udGFpbiB0aGUgb2Zmc2V0IGlmIGV4dGVuZExhc3RGcmFnbWVu
dCBpcyBzZXQgb3IgaWYgdGhlIGxhc3QgZnJhZ21lbnQgaXMgYSBzZXQuCisgICAgaWYgKCFhZGFw
dGVyLnJlc3VsdCgpICYmIChleHRlbmRMYXN0RnJhZ21lbnQgfHwgbV9mcmFnbWVudExpc3QubGFz
dCgpLT5pc1JlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0KCkpKQorICAgICAgICByZXR1cm4gY2xh
bXBCb3ggPyBjbGFtcEJveC0+Y2xhbXBUb1N0YXJ0QW5kRW5kRnJhZ21lbnRzKG1fZnJhZ21lbnRM
aXN0Lmxhc3QoKSkgOiBtX2ZyYWdtZW50TGlzdC5sYXN0KCk7CiAKLSAgICBSZW5kZXJSZWdpb24q
IHJlZ2lvbiA9IGFkYXB0ZXIucmVzdWx0KCk7CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIq
IGZyYWdtZW50ID0gYWRhcHRlci5yZXN1bHQoKTsKICAgICBpZiAoIWNsYW1wQm94KQotICAgICAg
ICByZXR1cm4gcmVnaW9uOwotICAgIHJldHVybiByZWdpb24gPyBjbGFtcEJveC0+Y2xhbXBUb1N0
YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pIDogbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZyYWdt
ZW50OworICAgIHJldHVybiBmcmFnbWVudCA/IGNsYW1wQm94LT5jbGFtcFRvU3RhcnRBbmRFbmRG
cmFnbWVudHMoZnJhZ21lbnQpIDogbnVsbHB0cjsKIH0KIAogTGF5b3V0UG9pbnQgUmVuZGVyRmxv
d1RocmVhZDo6YWRqdXN0ZWRQb3NpdGlvblJlbGF0aXZlVG9PZmZzZXRQYXJlbnQoY29uc3QgUmVu
ZGVyQm94TW9kZWxPYmplY3QmIGJveE1vZGVsT2JqZWN0LCBjb25zdCBMYXlvdXRQb2ludCYgc3Rh
cnRQb2ludCkgY29uc3QKQEAgLTI2Myw0MiArMjYzLDQyIEBAIExheW91dFBvaW50IFJlbmRlckZs
b3dUaHJlYWQ6OmFkanVzdGVkUG8KICAgICAKICAgICBjb25zdCBSZW5kZXJCbG9jayogb2JqQ29u
dGFpbmluZ0Jsb2NrID0gYm94TW9kZWxPYmplY3QuY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgLy8g
RklYTUU6IFRoaXMgbmVlZHMgdG8gYmUgYWRhcHRlZCBmb3IgZGlmZmVyZW50IHdyaXRpbmcgbW9k
ZXMgaW5zaWRlIHRoZSBmbG93IHRocmVhZC4KLSAgICBSZW5kZXJSZWdpb24qIHN0YXJ0UmVnaW9u
ID0gcmVnaW9uQXRCbG9ja09mZnNldChvYmpDb250YWluaW5nQmxvY2ssIHJlZmVyZW5jZVBvaW50
LnkoKSk7Ci0gICAgaWYgKHN0YXJ0UmVnaW9uKSB7Ci0gICAgICAgIC8vIFRha2UgaW50byBhY2Nv
dW50IHRoZSBvZmZzZXQgY29vcmRpbmF0ZXMgb2YgdGhlIHJlZ2lvbi4KLSAgICAgICAgUmVuZGVy
Qm94TW9kZWxPYmplY3QqIHN0YXJ0UmVnaW9uQm94ID0gc3RhcnRSZWdpb247Ci0gICAgICAgIFJl
bmRlckJveE1vZGVsT2JqZWN0KiBjdXJyT2JqZWN0ID0gc3RhcnRSZWdpb25Cb3g7CisgICAgUmVu
ZGVyRnJhZ21lbnRDb250YWluZXIqIHN0YXJ0RnJhZ21lbnQgPSBmcmFnbWVudEF0QmxvY2tPZmZz
ZXQob2JqQ29udGFpbmluZ0Jsb2NrLCByZWZlcmVuY2VQb2ludC55KCkpOworICAgIGlmIChzdGFy
dEZyYWdtZW50KSB7CisgICAgICAgIC8vIFRha2UgaW50byBhY2NvdW50IHRoZSBvZmZzZXQgY29v
cmRpbmF0ZXMgb2YgdGhlIGZyYWdtZW50LgorICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCog
c3RhcnRGcmFnbWVudEJveCA9IHN0YXJ0RnJhZ21lbnQ7CisgICAgICAgIFJlbmRlckJveE1vZGVs
T2JqZWN0KiBjdXJyT2JqZWN0ID0gc3RhcnRGcmFnbWVudEJveDsKICAgICAgICAgUmVuZGVyQm94
TW9kZWxPYmplY3QqIGN1cnJPZmZzZXRQYXJlbnQ7CiAgICAgICAgIHdoaWxlICgoY3Vyck9mZnNl
dFBhcmVudCA9IGN1cnJPYmplY3QtPm9mZnNldFBhcmVudCgpKSkgewogICAgICAgICAgICAgcmVm
ZXJlbmNlUG9pbnQubW92ZShjdXJyT2JqZWN0LT5vZmZzZXRMZWZ0KCksIGN1cnJPYmplY3QtPm9m
ZnNldFRvcCgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gU2luY2Ugd2UncmUgbG9v
a2luZyBmb3IgdGhlIG9mZnNldCByZWxhdGl2ZSB0byB0aGUgYm9keSwgd2UgbXVzdCBhbHNvCi0g
ICAgICAgICAgICAvLyB0YWtlIGludG8gY29uc2lkZXJhdGlvbiB0aGUgYm9yZGVycyBvZiB0aGUg
cmVnaW9uJ3Mgb2Zmc2V0UGFyZW50LgorICAgICAgICAgICAgLy8gdGFrZSBpbnRvIGNvbnNpZGVy
YXRpb24gdGhlIGJvcmRlcnMgb2YgdGhlIGZyYWdtZW50J3Mgb2Zmc2V0UGFyZW50LgogICAgICAg
ICAgICAgaWYgKGlzPFJlbmRlckJveD4oKmN1cnJPZmZzZXRQYXJlbnQpICYmICFjdXJyT2Zmc2V0
UGFyZW50LT5pc0JvZHkoKSkKICAgICAgICAgICAgICAgICByZWZlcmVuY2VQb2ludC5tb3ZlKGRv
d25jYXN0PFJlbmRlckJveD4oKmN1cnJPZmZzZXRQYXJlbnQpLmJvcmRlckxlZnQoKSwgZG93bmNh
c3Q8UmVuZGVyQm94PigqY3Vyck9mZnNldFBhcmVudCkuYm9yZGVyVG9wKCkpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBjdXJyT2JqZWN0ID0gY3Vyck9mZnNldFBhcmVudDsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiBhbnkgb2YgdGhpcyBi
b3gncyBjb250YWluaW5nIGJsb2NrcyBzdGFydCBpbiBhIGRpZmZlcmVudCByZWdpb24KKyAgICAg
ICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiBhbnkgb2YgdGhpcyBib3gncyBjb250YWluaW5nIGJs
b2NrcyBzdGFydCBpbiBhIGRpZmZlcmVudCBmcmFnbWVudAogICAgICAgICAvLyBhbmQgaWYgc28s
IGRyb3AgdGhlIG9iamVjdCdzIHRvcCBwb3NpdGlvbiAod2hpY2ggd2FzIGNvbXB1dGVkIHJlbGF0
aXZlIHRvIGl0cyBjb250YWluaW5nIGJsb2NrCi0gICAgICAgIC8vIGFuZCBpcyBubyBsb25nZXIg
dmFsaWQpIGFuZCByZWNvbXB1dGUgaXQgdXNpbmcgdGhlIHJlZ2lvbiBpbiB3aGljaCBpdCBmbG93
cyBhcyByZWZlcmVuY2UuCi0gICAgICAgIGJvb2wgd2FzQ29tcHV0ZWRSZWxhdGl2ZVRvT3RoZXJS
ZWdpb24gPSBmYWxzZTsKKyAgICAgICAgLy8gYW5kIGlzIG5vIGxvbmdlciB2YWxpZCkgYW5kIHJl
Y29tcHV0ZSBpdCB1c2luZyB0aGUgZnJhZ21lbnQgaW4gd2hpY2ggaXQgZmxvd3MgYXMgcmVmZXJl
bmNlLgorICAgICAgICBib29sIHdhc0NvbXB1dGVkUmVsYXRpdmVUb090aGVyRnJhZ21lbnQgPSBm
YWxzZTsKICAgICAgICAgd2hpbGUgKG9iakNvbnRhaW5pbmdCbG9jayAmJiAhaXM8UmVuZGVyVmll
dz4oKm9iakNvbnRhaW5pbmdCbG9jaykpIHsKLSAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMg
b2JqZWN0IGlzIGluIGEgZGlmZmVyZW50IHJlZ2lvbi4KLSAgICAgICAgICAgIFJlbmRlclJlZ2lv
biogcGFyZW50U3RhcnRSZWdpb24gPSBudWxscHRyOwotICAgICAgICAgICAgUmVuZGVyUmVnaW9u
KiBwYXJlbnRFbmRSZWdpb24gPSBudWxscHRyOwotICAgICAgICAgICAgaWYgKGdldFJlZ2lvblJh
bmdlRm9yQm94KG9iakNvbnRhaW5pbmdCbG9jaywgcGFyZW50U3RhcnRSZWdpb24sIHBhcmVudEVu
ZFJlZ2lvbikgJiYgcGFyZW50U3RhcnRSZWdpb24gIT0gc3RhcnRSZWdpb24pIHsKLSAgICAgICAg
ICAgICAgICB3YXNDb21wdXRlZFJlbGF0aXZlVG9PdGhlclJlZ2lvbiA9IHRydWU7CisgICAgICAg
ICAgICAvLyBDaGVjayBpZiB0aGlzIG9iamVjdCBpcyBpbiBhIGRpZmZlcmVudCBmcmFnbWVudC4K
KyAgICAgICAgICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBwYXJlbnRTdGFydEZyYWdtZW50
ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBwYXJlbnRF
bmRGcmFnbWVudCA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiAoZ2V0RnJhZ21lbnRSYW5nZUZv
ckJveChvYmpDb250YWluaW5nQmxvY2ssIHBhcmVudFN0YXJ0RnJhZ21lbnQsIHBhcmVudEVuZEZy
YWdtZW50KSAmJiBwYXJlbnRTdGFydEZyYWdtZW50ICE9IHN0YXJ0RnJhZ21lbnQpIHsKKyAgICAg
ICAgICAgICAgICB3YXNDb21wdXRlZFJlbGF0aXZlVG9PdGhlckZyYWdtZW50ID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG9iakNvbnRh
aW5pbmdCbG9jayA9IG9iakNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICh3YXNDb21wdXRlZFJlbGF0aXZlVG9PdGhlclJl
Z2lvbikgeworICAgICAgICBpZiAod2FzQ29tcHV0ZWRSZWxhdGl2ZVRvT3RoZXJGcmFnbWVudCkg
ewogICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJveD4oYm94TW9kZWxPYmplY3QpKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gVXNlIGJvcmRlckJveFJlY3RJblJlZ2lvbiB0byBhY2NvdW50IGZvciB2
YXJpYXRpb25zIHN1Y2ggYXMgcGVyY2VudGFnZSBtYXJnaW5zLgotICAgICAgICAgICAgICAgIExh
eW91dFJlY3QgYm9yZGVyQm94UmVjdCA9IGRvd25jYXN0PFJlbmRlckJveD4oYm94TW9kZWxPYmpl
Y3QpLmJvcmRlckJveFJlY3RJblJlZ2lvbihzdGFydFJlZ2lvbiwgUmVuZGVyQm94OjpEb05vdENh
Y2hlUmVuZGVyQm94UmVnaW9uSW5mbyk7CisgICAgICAgICAgICAgICAgLy8gVXNlIGJvcmRlckJv
eFJlY3RJbkZyYWdtZW50IHRvIGFjY291bnQgZm9yIHZhcmlhdGlvbnMgc3VjaCBhcyBwZXJjZW50
YWdlIG1hcmdpbnMuCisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBib3JkZXJCb3hSZWN0ID0g
ZG93bmNhc3Q8UmVuZGVyQm94Pihib3hNb2RlbE9iamVjdCkuYm9yZGVyQm94UmVjdEluRnJhZ21l
bnQoc3RhcnRGcmFnbWVudCwgUmVuZGVyQm94OjpEb05vdENhY2hlUmVuZGVyQm94RnJhZ21lbnRJ
bmZvKTsKICAgICAgICAgICAgICAgICByZWZlcmVuY2VQb2ludC5tb3ZlKGJvcmRlckJveFJlY3Qu
bG9jYXRpb24oKS54KCksIDApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0zMTYs
MTEgKzMxNiwxMSBAQCBMYXlvdXRQb2ludCBSZW5kZXJGbG93VGhyZWFkOjphZGp1c3RlZFBvCiAg
ICAgICAgICAgICAgICAgICAgIHRvcCAtPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KGJveE1vZGVs
T2JqZWN0KS5ib3JkZXJUb3AoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICAgICAgLy8gR2V0IHRoZSBsb2dpY2FsIHRvcCBvZiB0aGUgcmVnaW9uIHRoaXMgb2JqZWN0IHN0
YXJ0cyBpbgotICAgICAgICAgICAgLy8gYW5kIGNvbXB1dGUgdGhlIG9iamVjdCdzIHRvcCwgcmVs
YXRpdmUgdG8gdGhlIHJlZ2lvbidzIHRvcC4KLSAgICAgICAgICAgIExheW91dFVuaXQgcmVnaW9u
TG9naWNhbFRvcCA9IHN0YXJ0UmVnaW9uLT5wYWdlTG9naWNhbFRvcEZvck9mZnNldCh0b3ApOwot
ICAgICAgICAgICAgTGF5b3V0VW5pdCB0b3BSZWxhdGl2ZVRvUmVnaW9uID0gdG9wIC0gcmVnaW9u
TG9naWNhbFRvcDsKLSAgICAgICAgICAgIHJlZmVyZW5jZVBvaW50LnNldFkoc3RhcnRSZWdpb25C
b3gtPm9mZnNldFRvcCgpICsgdG9wUmVsYXRpdmVUb1JlZ2lvbik7CisgICAgICAgICAgICAvLyBH
ZXQgdGhlIGxvZ2ljYWwgdG9wIG9mIHRoZSBmcmFnbWVudCB0aGlzIG9iamVjdCBzdGFydHMgaW4K
KyAgICAgICAgICAgIC8vIGFuZCBjb21wdXRlIHRoZSBvYmplY3QncyB0b3AsIHJlbGF0aXZlIHRv
IHRoZSBmcmFnbWVudCdzIHRvcC4KKyAgICAgICAgICAgIExheW91dFVuaXQgZnJhZ21lbnRMb2dp
Y2FsVG9wID0gc3RhcnRGcmFnbWVudC0+cGFnZUxvZ2ljYWxUb3BGb3JPZmZzZXQodG9wKTsKKyAg
ICAgICAgICAgIExheW91dFVuaXQgdG9wUmVsYXRpdmVUb0ZyYWdtZW50ID0gdG9wIC0gZnJhZ21l
bnRMb2dpY2FsVG9wOworICAgICAgICAgICAgcmVmZXJlbmNlUG9pbnQuc2V0WShzdGFydEZyYWdt
ZW50Qm94LT5vZmZzZXRUb3AoKSArIHRvcFJlbGF0aXZlVG9GcmFnbWVudCk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIC8vIFNpbmNlIHRoZSB0b3AgaGFzIGJlZW4gb3ZlcnJpZGVuLCBjaGVj
ayBpZiB0aGUKICAgICAgICAgICAgIC8vIHJlbGF0aXZlL3N0aWNreSBwb3NpdGlvbmluZyBtdXN0
IGJlIHJlY29uc2lkZXJlZC4KQEAgLTMzMSw4ICszMzEsOCBAQCBMYXlvdXRQb2ludCBSZW5kZXJG
bG93VGhyZWFkOjphZGp1c3RlZFBvCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFNp
bmNlIHdlJ3JlIGxvb2tpbmcgZm9yIHRoZSBvZmZzZXQgcmVsYXRpdmUgdG8gdGhlIGJvZHksIHdl
IG11c3QgYWxzbwotICAgICAgICAvLyB0YWtlIGludG8gY29uc2lkZXJhdGlvbiB0aGUgYm9yZGVy
cyBvZiB0aGUgcmVnaW9uLgotICAgICAgICByZWZlcmVuY2VQb2ludC5tb3ZlKHN0YXJ0UmVnaW9u
Qm94LT5ib3JkZXJMZWZ0KCksIHN0YXJ0UmVnaW9uQm94LT5ib3JkZXJUb3AoKSk7CisgICAgICAg
IC8vIHRha2UgaW50byBjb25zaWRlcmF0aW9uIHRoZSBib3JkZXJzIG9mIHRoZSBmcmFnbWVudC4K
KyAgICAgICAgcmVmZXJlbmNlUG9pbnQubW92ZShzdGFydEZyYWdtZW50Qm94LT5ib3JkZXJMZWZ0
KCksIHN0YXJ0RnJhZ21lbnRCb3gtPmJvcmRlclRvcCgpKTsKICAgICB9CiAgICAgCiAgICAgcmV0
dXJuIHJlZmVyZW5jZVBvaW50OwpAQCAtMzQwLDExOSArMzQwLDExOSBAQCBMYXlvdXRQb2ludCBS
ZW5kZXJGbG93VGhyZWFkOjphZGp1c3RlZFBvCiAKIExheW91dFVuaXQgUmVuZGVyRmxvd1RocmVh
ZDo6cGFnZUxvZ2ljYWxUb3BGb3JPZmZzZXQoTGF5b3V0VW5pdCBvZmZzZXQpIGNvbnN0CiB7Ci0g
ICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KDAsIG9mZnNldCwg
ZmFsc2UpOwotICAgIHJldHVybiByZWdpb24gPyByZWdpb24tPnBhZ2VMb2dpY2FsVG9wRm9yT2Zm
c2V0KG9mZnNldCkgOiBMYXlvdXRVbml0KCk7CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIq
IGZyYWdtZW50ID0gZnJhZ21lbnRBdEJsb2NrT2Zmc2V0KDAsIG9mZnNldCwgZmFsc2UpOworICAg
IHJldHVybiBmcmFnbWVudCA/IGZyYWdtZW50LT5wYWdlTG9naWNhbFRvcEZvck9mZnNldChvZmZz
ZXQpIDogTGF5b3V0VW5pdCgpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckZsb3dUaHJlYWQ6OnBh
Z2VMb2dpY2FsV2lkdGhGb3JPZmZzZXQoTGF5b3V0VW5pdCBvZmZzZXQpIGNvbnN0CiB7Ci0gICAg
UmVuZGVyUmVnaW9uKiByZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KDAsIG9mZnNldCwgdHJ1
ZSk7Ci0gICAgcmV0dXJuIHJlZ2lvbiA/IHJlZ2lvbi0+cGFnZUxvZ2ljYWxXaWR0aCgpIDogY29u
dGVudExvZ2ljYWxXaWR0aCgpOworICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVu
dCA9IGZyYWdtZW50QXRCbG9ja09mZnNldCgwLCBvZmZzZXQsIHRydWUpOworICAgIHJldHVybiBm
cmFnbWVudCA/IGZyYWdtZW50LT5wYWdlTG9naWNhbFdpZHRoKCkgOiBjb250ZW50TG9naWNhbFdp
ZHRoKCk7CiB9CiAKIExheW91dFVuaXQgUmVuZGVyRmxvd1RocmVhZDo6cGFnZUxvZ2ljYWxIZWln
aHRGb3JPZmZzZXQoTGF5b3V0VW5pdCBvZmZzZXQpIGNvbnN0CiB7Ci0gICAgUmVuZGVyUmVnaW9u
KiByZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KDAsIG9mZnNldCwgZmFsc2UpOwotICAgIGlm
ICghcmVnaW9uKQorICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCA9IGZyYWdt
ZW50QXRCbG9ja09mZnNldCgwLCBvZmZzZXQsIGZhbHNlKTsKKyAgICBpZiAoIWZyYWdtZW50KQog
ICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiByZWdpb24tPnBhZ2VMb2dpY2FsSGVpZ2h0
KCk7CisgICAgcmV0dXJuIGZyYWdtZW50LT5wYWdlTG9naWNhbEhlaWdodCgpOwogfQogCiBMYXlv
dXRVbml0IFJlbmRlckZsb3dUaHJlYWQ6OnBhZ2VSZW1haW5pbmdMb2dpY2FsSGVpZ2h0Rm9yT2Zm
c2V0KExheW91dFVuaXQgb2Zmc2V0LCBQYWdlQm91bmRhcnlSdWxlIHBhZ2VCb3VuZGFyeVJ1bGUp
IGNvbnN0CiB7Ci0gICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0
KDAsIG9mZnNldCwgZmFsc2UpOwotICAgIGlmICghcmVnaW9uKQorICAgIFJlbmRlckZyYWdtZW50
Q29udGFpbmVyKiBmcmFnbWVudCA9IGZyYWdtZW50QXRCbG9ja09mZnNldCgwLCBvZmZzZXQsIGZh
bHNlKTsKKyAgICBpZiAoIWZyYWdtZW50KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIExheW91
dFVuaXQgcGFnZUxvZ2ljYWxUb3AgPSByZWdpb24tPnBhZ2VMb2dpY2FsVG9wRm9yT2Zmc2V0KG9m
ZnNldCk7Ci0gICAgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IHJlZ2lvbi0+cGFnZUxv
Z2ljYWxIZWlnaHQoKTsKKyAgICBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsVG9wID0gZnJhZ21lbnQt
PnBhZ2VMb2dpY2FsVG9wRm9yT2Zmc2V0KG9mZnNldCk7CisgICAgTGF5b3V0VW5pdCBwYWdlTG9n
aWNhbEhlaWdodCA9IGZyYWdtZW50LT5wYWdlTG9naWNhbEhlaWdodCgpOwogICAgIExheW91dFVu
aXQgcGFnZUxvZ2ljYWxCb3R0b20gPSBwYWdlTG9naWNhbFRvcCArIHBhZ2VMb2dpY2FsSGVpZ2h0
OwogICAgIExheW91dFVuaXQgcmVtYWluaW5nSGVpZ2h0ID0gcGFnZUxvZ2ljYWxCb3R0b20gLSBv
ZmZzZXQ7CiAgICAgaWYgKHBhZ2VCb3VuZGFyeVJ1bGUgPT0gSW5jbHVkZVBhZ2VCb3VuZGFyeSkg
ewogICAgICAgICAvLyBJZiBJbmNsdWRlUGFnZUJvdW5kYXJ5IGlzIHNldCwgdGhlIGxpbmUgZXhh
Y3RseSBvbiB0aGUgdG9wIGVkZ2Ugb2YgYQotICAgICAgICAvLyByZWdpb24gd2lsbCBhY3QgYXMg
YmVpbmcgcGFydCBvZiB0aGUgcHJldmlvdXMgcmVnaW9uLgorICAgICAgICAvLyBmcmFnbWVudCB3
aWxsIGFjdCBhcyBiZWluZyBwYXJ0IG9mIHRoZSBwcmV2aW91cyBmcmFnbWVudC4KICAgICAgICAg
cmVtYWluaW5nSGVpZ2h0ID0gaW50TW9kKHJlbWFpbmluZ0hlaWdodCwgcGFnZUxvZ2ljYWxIZWln
aHQpOwogICAgIH0KICAgICByZXR1cm4gcmVtYWluaW5nSGVpZ2h0OwogfQogCi1SZW5kZXJSZWdp
b24qIFJlbmRlckZsb3dUaHJlYWQ6Om1hcEZyb21GbG93VG9SZWdpb24oVHJhbnNmb3JtU3RhdGUm
IHRyYW5zZm9ybVN0YXRlKSBjb25zdAorUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIFJlbmRlckZs
b3dUaHJlYWQ6Om1hcEZyb21GbG93VG9GcmFnbWVudChUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3Jt
U3RhdGUpIGNvbnN0CiB7Ci0gICAgaWYgKCFoYXNWYWxpZFJlZ2lvbkluZm8oKSkKKyAgICBpZiAo
IWhhc1ZhbGlkRnJhZ21lbnRJbmZvKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
UmVuZGVyUmVnaW9uKiByZW5kZXJSZWdpb24gPSBjdXJyZW50UmVnaW9uKCk7Ci0gICAgaWYgKCFy
ZW5kZXJSZWdpb24pIHsKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogUmVuZGVyRnJhZ21l
bnRDb250YWluZXIgPSBjdXJyZW50RnJhZ21lbnQoKTsKKyAgICBpZiAoIVJlbmRlckZyYWdtZW50
Q29udGFpbmVyKSB7CiAgICAgICAgIExheW91dFJlY3QgYm94UmVjdCA9IHRyYW5zZm9ybVN0YXRl
Lm1hcHBlZFF1YWQoKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogICAgICAgICBmbGlwRm9yV3Jp
dGluZ01vZGUoYm94UmVjdCk7CiAKICAgICAgICAgTGF5b3V0UG9pbnQgY2VudGVyID0gYm94UmVj
dC5jZW50ZXIoKTsKLSAgICAgICAgcmVuZGVyUmVnaW9uID0gcmVnaW9uQXRCbG9ja09mZnNldCh0
aGlzLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2VudGVyLnkoKSA6IGNlbnRlci54KCks
IHRydWUpOwotICAgICAgICBpZiAoIXJlbmRlclJlZ2lvbikKKyAgICAgICAgUmVuZGVyRnJhZ21l
bnRDb250YWluZXIgPSBmcmFnbWVudEF0QmxvY2tPZmZzZXQodGhpcywgaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IGNlbnRlci55KCkgOiBjZW50ZXIueCgpLCB0cnVlKTsKKyAgICAgICAgaWYg
KCFSZW5kZXJGcmFnbWVudENvbnRhaW5lcikKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KIAotICAgIExheW91dFJlY3QgZmxpcHBlZFJlZ2lvblJlY3QocmVuZGVyUmVnaW9uLT5m
bG93VGhyZWFkUG9ydGlvblJlY3QoKSk7Ci0gICAgZmxpcEZvcldyaXRpbmdNb2RlKGZsaXBwZWRS
ZWdpb25SZWN0KTsKKyAgICBMYXlvdXRSZWN0IGZsaXBwZWRGcmFnbWVudFJlY3QoUmVuZGVyRnJh
Z21lbnRDb250YWluZXItPmZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpKTsKKyAgICBmbGlwRm9yV3Jp
dGluZ01vZGUoZmxpcHBlZEZyYWdtZW50UmVjdCk7CiAKLSAgICB0cmFuc2Zvcm1TdGF0ZS5tb3Zl
KHJlbmRlclJlZ2lvbi0+Y29udGVudEJveFJlY3QoKS5sb2NhdGlvbigpIC0gZmxpcHBlZFJlZ2lv
blJlY3QubG9jYXRpb24oKSk7CisgICAgdHJhbnNmb3JtU3RhdGUubW92ZShSZW5kZXJGcmFnbWVu
dENvbnRhaW5lci0+Y29udGVudEJveFJlY3QoKS5sb2NhdGlvbigpIC0gZmxpcHBlZEZyYWdtZW50
UmVjdC5sb2NhdGlvbigpKTsKIAotICAgIHJldHVybiByZW5kZXJSZWdpb247CisgICAgcmV0dXJu
IFJlbmRlckZyYWdtZW50Q29udGFpbmVyOwogfQogCi12b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnJl
bW92ZVJlbmRlckJveFJlZ2lvbkluZm8oUmVuZGVyQm94JiBib3gpCit2b2lkIFJlbmRlckZsb3dU
aHJlYWQ6OnJlbW92ZVJlbmRlckJveEZyYWdtZW50SW5mbyhSZW5kZXJCb3gmIGJveCkKIHsKLSAg
ICBpZiAoIWhhc1JlZ2lvbnMoKSkKKyAgICBpZiAoIWhhc0ZyYWdtZW50cygpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICAvLyBJZiB0aGUgcmVnaW9uIGNoYWluIHdhcyBpbnZhbGlkYXRlZCB0aGUg
bmV4dCBsYXlvdXQgd2lsbCBjbGVhciB0aGUgYm94IGluZm9ybWF0aW9uIGZyb20gYWxsIHRoZSBy
ZWdpb25zLgotICAgIGlmIChtX3JlZ2lvbnNJbnZhbGlkYXRlZCkgeworICAgIC8vIElmIHRoZSBm
cmFnbWVudCBjaGFpbiB3YXMgaW52YWxpZGF0ZWQgdGhlIG5leHQgbGF5b3V0IHdpbGwgY2xlYXIg
dGhlIGJveCBpbmZvcm1hdGlvbiBmcm9tIGFsbCB0aGUgZnJhZ21lbnRzLgorICAgIGlmIChtX2Zy
YWdtZW50c0ludmFsaWRhdGVkKSB7CiAgICAgICAgIEFTU0VSVChzZWxmTmVlZHNMYXlvdXQoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZW5kZXJSZWdpb24qIHN0YXJ0UmVnaW9u
ID0gbnVsbHB0cjsKLSAgICBSZW5kZXJSZWdpb24qIGVuZFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAg
aWYgKGdldFJlZ2lvblJhbmdlRm9yQm94KCZib3gsIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pKSB7
Ci0gICAgICAgIGZvciAoYXV0byBpdCA9IG1fcmVnaW9uTGlzdC5maW5kKHN0YXJ0UmVnaW9uKSwg
ZW5kID0gbV9yZWdpb25MaXN0LmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
IFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKml0OwotICAgICAgICAgICAgcmVnaW9uLT5yZW1vdmVS
ZW5kZXJCb3hSZWdpb25JbmZvKGJveCk7Ci0gICAgICAgICAgICBpZiAocmVnaW9uID09IGVuZFJl
Z2lvbikKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogc3RhcnRGcmFnbWVudCA9IG51bGxw
dHI7CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGVuZEZyYWdtZW50ID0gbnVsbHB0cjsK
KyAgICBpZiAoZ2V0RnJhZ21lbnRSYW5nZUZvckJveCgmYm94LCBzdGFydEZyYWdtZW50LCBlbmRG
cmFnbWVudCkpIHsKKyAgICAgICAgZm9yIChhdXRvIGl0ID0gbV9mcmFnbWVudExpc3QuZmluZChz
dGFydEZyYWdtZW50KSwgZW5kID0gbV9mcmFnbWVudExpc3QuZW5kKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICAgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50ID0gKml0
OworICAgICAgICAgICAgZnJhZ21lbnQtPnJlbW92ZVJlbmRlckJveEZyYWdtZW50SW5mbyhib3gp
OworICAgICAgICAgICAgaWYgKGZyYWdtZW50ID09IGVuZEZyYWdtZW50KQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCiAjaWZuZGVmIE5ERUJVRwotICAgIC8vIFdl
IGhhdmUgdG8gbWFrZSBzdXJlIHdlIGRpZCBub3QgbGVhdmUgYW55IFJlbmRlckJveFJlZ2lvbklu
Zm8gYXR0YWNoZWQuCi0gICAgZm9yIChhdXRvJiByZWdpb24gOiBtX3JlZ2lvbkxpc3QpCi0gICAg
ICAgIEFTU0VSVCghcmVnaW9uLT5yZW5kZXJCb3hSZWdpb25JbmZvKCZib3gpKTsKKyAgICAvLyBX
ZSBoYXZlIHRvIG1ha2Ugc3VyZSB3ZSBkaWQgbm90IGxlYXZlIGFueSBSZW5kZXJCb3hGcmFnbWVu
dEluZm8gYXR0YWNoZWQuCisgICAgZm9yIChhdXRvJiBmcmFnbWVudCA6IG1fZnJhZ21lbnRMaXN0
KQorICAgICAgICBBU1NFUlQoIWZyYWdtZW50LT5yZW5kZXJCb3hGcmFnbWVudEluZm8oJmJveCkp
OwogI2VuZGlmCiAKLSAgICBtX3JlZ2lvblJhbmdlTWFwLnJlbW92ZSgmYm94KTsKKyAgICBtX2Zy
YWdtZW50UmFuZ2VNYXAucmVtb3ZlKCZib3gpOwogfQogCi12b2lkIFJlbmRlckZsb3dUaHJlYWQ6
OnJlbW92ZUxpbmVSZWdpb25JbmZvKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgYmxvY2tGbG93KQor
dm9pZCBSZW5kZXJGbG93VGhyZWFkOjpyZW1vdmVMaW5lRnJhZ21lbnRJbmZvKGNvbnN0IFJlbmRl
ckJsb2NrRmxvdyYgYmxvY2tGbG93KQogewotICAgIGlmICghbV9saW5lVG9SZWdpb25NYXAgfHwg
YmxvY2tGbG93LmxpbmVMYXlvdXRQYXRoKCkgPT0gU2ltcGxlTGluZXNQYXRoKQorICAgIGlmICgh
bV9saW5lVG9GcmFnbWVudE1hcCB8fCBibG9ja0Zsb3cubGluZUxheW91dFBhdGgoKSA9PSBTaW1w
bGVMaW5lc1BhdGgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoYXV0byogY3VyciA9IGJs
b2NrRmxvdy5maXJzdFJvb3RCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRSb290Qm94KCkp
Ci0gICAgICAgIG1fbGluZVRvUmVnaW9uTWFwLT5yZW1vdmUoY3Vycik7CisgICAgICAgIG1fbGlu
ZVRvRnJhZ21lbnRNYXAtPnJlbW92ZShjdXJyKTsKIAogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKGNoZWNrTGluZXNDb25zaXN0ZW5jeShibG9ja0Zsb3cpKTsKIH0KIAotdm9p
ZCBSZW5kZXJGbG93VGhyZWFkOjpsb2dpY2FsV2lkdGhDaGFuZ2VkSW5SZWdpb25zRm9yQmxvY2so
Y29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrLCBib29sJiByZWxheW91dENoaWxkcmVuKQordm9pZCBS
ZW5kZXJGbG93VGhyZWFkOjpsb2dpY2FsV2lkdGhDaGFuZ2VkSW5GcmFnbWVudHNGb3JCbG9jayhj
b25zdCBSZW5kZXJCbG9jayogYmxvY2ssIGJvb2wmIHJlbGF5b3V0Q2hpbGRyZW4pCiB7Ci0gICAg
aWYgKCFoYXNWYWxpZFJlZ2lvbkluZm8oKSkKKyAgICBpZiAoIWhhc1ZhbGlkRnJhZ21lbnRJbmZv
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gaXQgPSBtX3JlZ2lvblJhbmdlTWFwLmZp
bmQoYmxvY2spOwotICAgIGlmIChpdCA9PSBtX3JlZ2lvblJhbmdlTWFwLmVuZCgpKQorICAgIGF1
dG8gaXQgPSBtX2ZyYWdtZW50UmFuZ2VNYXAuZmluZChibG9jayk7CisgICAgaWYgKGl0ID09IG1f
ZnJhZ21lbnRSYW5nZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyUmVn
aW9uUmFuZ2UmIHJhbmdlID0gaXQtPnZhbHVlOworICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVy
UmFuZ2UmIHJhbmdlID0gaXQtPnZhbHVlOwogICAgIGJvb2wgcmFuZ2VJbnZhbGlkYXRlZCA9IHJh
bmdlLnJhbmdlSW52YWxpZGF0ZWQoKTsKICAgICByYW5nZS5jbGVhclJhbmdlSW52YWxpZGF0ZWQo
KTsKIApAQCAtNDYyLDE5OCArNDYyLDE5OCBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmxvZ2lj
YWxXaWR0aENoYW5nCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE5vdCBuZWNlc3NhcnkgZm9y
IHRoZSBmbG93IHRocmVhZCwgc2luY2Ugd2UgYWxyZWFkeSBjb21wdXRlZCB0aGUgY29ycmVjdCBp
bmZvIGZvciBpdC4KLSAgICAvLyBJZiB0aGUgcmVnaW9ucyBoYXZlIGNoYW5nZWQgaW52YWxpZGF0
ZSB0aGUgY2hpbGRyZW4uCisgICAgLy8gSWYgdGhlIGZyYWdtZW50cyBoYXZlIGNoYW5nZWQgaW52
YWxpZGF0ZSB0aGUgY2hpbGRyZW4uCiAgICAgaWYgKGJsb2NrID09IHRoaXMpIHsKICAgICAgICAg
cmVsYXlvdXRDaGlsZHJlbiA9IG1fcGFnZUxvZ2ljYWxTaXplQ2hhbmdlZDsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIFJlbmRlclJlZ2lvbiogc3RhcnRSZWdpb24gPSBudWxscHRyOwot
ICAgIFJlbmRlclJlZ2lvbiogZW5kUmVnaW9uID0gbnVsbHB0cjsKLSAgICBpZiAoIWdldFJlZ2lv
blJhbmdlRm9yQm94KGJsb2NrLCBzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKSkKKyAgICBSZW5kZXJG
cmFnbWVudENvbnRhaW5lciogc3RhcnRGcmFnbWVudCA9IG51bGxwdHI7CisgICAgUmVuZGVyRnJh
Z21lbnRDb250YWluZXIqIGVuZEZyYWdtZW50ID0gbnVsbHB0cjsKKyAgICBpZiAoIWdldEZyYWdt
ZW50UmFuZ2VGb3JCb3goYmxvY2ssIHN0YXJ0RnJhZ21lbnQsIGVuZEZyYWdtZW50KSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgZm9yIChhdXRvIGl0ID0gbV9yZWdpb25MaXN0LmZpbmQoc3RhcnRS
ZWdpb24pLCBlbmQgPSBtX3JlZ2lvbkxpc3QuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICppdDsKLSAgICAgICAgQVNTRVJUKCFyZWdpb24t
Pm5lZWRzTGF5b3V0KCkgfHwgcmVnaW9uLT5pc1JlbmRlclJlZ2lvblNldCgpKTsKKyAgICBmb3Ig
KGF1dG8gaXQgPSBtX2ZyYWdtZW50TGlzdC5maW5kKHN0YXJ0RnJhZ21lbnQpLCBlbmQgPSBtX2Zy
YWdtZW50TGlzdC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFJlbmRlckZyYWdt
ZW50Q29udGFpbmVyKiBmcmFnbWVudCA9ICppdDsKKyAgICAgICAgQVNTRVJUKCFmcmFnbWVudC0+
bmVlZHNMYXlvdXQoKSB8fCBmcmFnbWVudC0+aXNSZW5kZXJGcmFnbWVudENvbnRhaW5lclNldCgp
KTsKIAotICAgICAgICAvLyBXZSBoYXZlIG5vIGluZm9ybWF0aW9uIGNvbXB1dGVkIGZvciB0aGlz
IHJlZ2lvbiBzbyB3ZSBuZWVkIHRvIGRvIGl0LgotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyQm94UmVnaW9uSW5mbz4gb2xkSW5mbyA9IHJlZ2lvbi0+dGFrZVJlbmRlckJveFJlZ2lvbklu
Zm8oYmxvY2spOworICAgICAgICAvLyBXZSBoYXZlIG5vIGluZm9ybWF0aW9uIGNvbXB1dGVkIGZv
ciB0aGlzIGZyYWdtZW50IHNvIHdlIG5lZWQgdG8gZG8gaXQuCisgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJCb3hGcmFnbWVudEluZm8+IG9sZEluZm8gPSBmcmFnbWVudC0+dGFrZVJlbmRl
ckJveEZyYWdtZW50SW5mbyhibG9jayk7CiAgICAgICAgIGlmICghb2xkSW5mbykgewogICAgICAg
ICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHJhbmdlSW52YWxpZGF0ZWQ7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBMYXlvdXRVbml0IG9sZExvZ2ljYWxXaWR0aCA9
IG9sZEluZm8tPmxvZ2ljYWxXaWR0aCgpOwotICAgICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBu
ZXdJbmZvID0gYmxvY2stPnJlbmRlckJveFJlZ2lvbkluZm8ocmVnaW9uKTsKKyAgICAgICAgUmVu
ZGVyQm94RnJhZ21lbnRJbmZvKiBuZXdJbmZvID0gYmxvY2stPnJlbmRlckJveEZyYWdtZW50SW5m
byhmcmFnbWVudCk7CiAgICAgICAgIGlmICghbmV3SW5mbyB8fCBuZXdJbmZvLT5sb2dpY2FsV2lk
dGgoKSAhPSBvbGRMb2dpY2FsV2lkdGgpIHsKICAgICAgICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4g
PSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHJl
Z2lvbiA9PSBlbmRSZWdpb24pCisgICAgICAgIGlmIChmcmFnbWVudCA9PSBlbmRGcmFnbWVudCkK
ICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJGbG93VGhy
ZWFkOjpjb250ZW50TG9naWNhbFdpZHRoT2ZGaXJzdFJlZ2lvbigpIGNvbnN0CitMYXlvdXRVbml0
IFJlbmRlckZsb3dUaHJlYWQ6OmNvbnRlbnRMb2dpY2FsV2lkdGhPZkZpcnN0RnJhZ21lbnQoKSBj
b25zdAogewotICAgIFJlbmRlclJlZ2lvbiogZmlyc3RWYWxpZFJlZ2lvbkluRmxvdyA9IGZpcnN0
UmVnaW9uKCk7Ci0gICAgaWYgKCFmaXJzdFZhbGlkUmVnaW9uSW5GbG93KQorICAgIFJlbmRlckZy
YWdtZW50Q29udGFpbmVyKiBmaXJzdFZhbGlkRnJhZ21lbnRJbkZsb3cgPSBmaXJzdEZyYWdtZW50
KCk7CisgICAgaWYgKCFmaXJzdFZhbGlkRnJhZ21lbnRJbkZsb3cpCiAgICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZmlyc3RWYWxpZFJlZ2lv
bkluRmxvdy0+Y29udGVudFdpZHRoKCkgOiBmaXJzdFZhbGlkUmVnaW9uSW5GbG93LT5jb250ZW50
SGVpZ2h0KCk7CisgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmaXJzdFZh
bGlkRnJhZ21lbnRJbkZsb3ctPmNvbnRlbnRXaWR0aCgpIDogZmlyc3RWYWxpZEZyYWdtZW50SW5G
bG93LT5jb250ZW50SGVpZ2h0KCk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyRmxvd1RocmVhZDo6
Y29udGVudExvZ2ljYWxIZWlnaHRPZkZpcnN0UmVnaW9uKCkgY29uc3QKK0xheW91dFVuaXQgUmVu
ZGVyRmxvd1RocmVhZDo6Y29udGVudExvZ2ljYWxIZWlnaHRPZkZpcnN0RnJhZ21lbnQoKSBjb25z
dAogewotICAgIFJlbmRlclJlZ2lvbiogZmlyc3RWYWxpZFJlZ2lvbkluRmxvdyA9IGZpcnN0UmVn
aW9uKCk7Ci0gICAgaWYgKCFmaXJzdFZhbGlkUmVnaW9uSW5GbG93KQorICAgIFJlbmRlckZyYWdt
ZW50Q29udGFpbmVyKiBmaXJzdFZhbGlkRnJhZ21lbnRJbkZsb3cgPSBmaXJzdEZyYWdtZW50KCk7
CisgICAgaWYgKCFmaXJzdFZhbGlkRnJhZ21lbnRJbkZsb3cpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZmlyc3RWYWxpZFJlZ2lvbklu
Rmxvdy0+Y29udGVudEhlaWdodCgpIDogZmlyc3RWYWxpZFJlZ2lvbkluRmxvdy0+Y29udGVudFdp
ZHRoKCk7CisgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmaXJzdFZhbGlk
RnJhZ21lbnRJbkZsb3ctPmNvbnRlbnRIZWlnaHQoKSA6IGZpcnN0VmFsaWRGcmFnbWVudEluRmxv
dy0+Y29udGVudFdpZHRoKCk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyRmxvd1RocmVhZDo6Y29u
dGVudExvZ2ljYWxMZWZ0T2ZGaXJzdFJlZ2lvbigpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckZs
b3dUaHJlYWQ6OmNvbnRlbnRMb2dpY2FsTGVmdE9mRmlyc3RGcmFnbWVudCgpIGNvbnN0CiB7Ci0g
ICAgUmVuZGVyUmVnaW9uKiBmaXJzdFZhbGlkUmVnaW9uSW5GbG93ID0gZmlyc3RSZWdpb24oKTsK
LSAgICBpZiAoIWZpcnN0VmFsaWRSZWdpb25JbkZsb3cpCisgICAgUmVuZGVyRnJhZ21lbnRDb250
YWluZXIqIGZpcnN0VmFsaWRGcmFnbWVudEluRmxvdyA9IGZpcnN0RnJhZ21lbnQoKTsKKyAgICBp
ZiAoIWZpcnN0VmFsaWRGcmFnbWVudEluRmxvdykKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmaXJzdFZhbGlkUmVnaW9uSW5GbG93LT5m
bG93VGhyZWFkUG9ydGlvblJlY3QoKS54KCkgOiBmaXJzdFZhbGlkUmVnaW9uSW5GbG93LT5mbG93
VGhyZWFkUG9ydGlvblJlY3QoKS55KCk7CisgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkgPyBmaXJzdFZhbGlkRnJhZ21lbnRJbkZsb3ctPmZsb3dUaHJlYWRQb3J0aW9uUmVjdCgp
LngoKSA6IGZpcnN0VmFsaWRGcmFnbWVudEluRmxvdy0+Zmxvd1RocmVhZFBvcnRpb25SZWN0KCku
eSgpOwogfQogCi1SZW5kZXJSZWdpb24qIFJlbmRlckZsb3dUaHJlYWQ6OmZpcnN0UmVnaW9uKCkg
Y29uc3QKK1JlbmRlckZyYWdtZW50Q29udGFpbmVyKiBSZW5kZXJGbG93VGhyZWFkOjpmaXJzdEZy
YWdtZW50KCkgY29uc3QKIHsKLSAgICBpZiAoIWhhc1JlZ2lvbnMoKSkKKyAgICBpZiAoIWhhc0Zy
YWdtZW50cygpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gbV9yZWdpb25M
aXN0LmZpcnN0KCk7CisgICAgcmV0dXJuIG1fZnJhZ21lbnRMaXN0LmZpcnN0KCk7CiB9CiAKLVJl
bmRlclJlZ2lvbiogUmVuZGVyRmxvd1RocmVhZDo6bGFzdFJlZ2lvbigpIGNvbnN0CitSZW5kZXJG
cmFnbWVudENvbnRhaW5lciogUmVuZGVyRmxvd1RocmVhZDo6bGFzdEZyYWdtZW50KCkgY29uc3QK
IHsKLSAgICBpZiAoIWhhc1JlZ2lvbnMoKSkKKyAgICBpZiAoIWhhc0ZyYWdtZW50cygpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gbV9yZWdpb25MaXN0Lmxhc3QoKTsKKyAg
ICByZXR1cm4gbV9mcmFnbWVudExpc3QubGFzdCgpOwogfQogCi12b2lkIFJlbmRlckZsb3dUaHJl
YWQ6OmNsZWFyUmVuZGVyQm94UmVnaW9uSW5mb0FuZEN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlckJv
eCYgYm94LAotICAgIGNvbnN0IFJlbmRlclJlZ2lvbiogbmV3U3RhcnRSZWdpb24sIGNvbnN0IFJl
bmRlclJlZ2lvbiogbmV3RW5kUmVnaW9uLAotICAgIGNvbnN0IFJlbmRlclJlZ2lvbiogb2xkU3Rh
cnRSZWdpb24sIGNvbnN0IFJlbmRlclJlZ2lvbiogb2xkRW5kUmVnaW9uKQotewotICAgIEFTU0VS
VChuZXdTdGFydFJlZ2lvbiAmJiBuZXdFbmRSZWdpb24gJiYgb2xkU3RhcnRSZWdpb24gJiYgb2xk
RW5kUmVnaW9uKTsKLQotICAgIGJvb2wgaW5zaWRlT2xkUmVnaW9uUmFuZ2UgPSBmYWxzZTsKLSAg
ICBib29sIGluc2lkZU5ld1JlZ2lvblJhbmdlID0gZmFsc2U7Ci0gICAgZm9yIChhdXRvJiByZWdp
b24gOiBtX3JlZ2lvbkxpc3QpIHsKLSAgICAgICAgaWYgKG9sZFN0YXJ0UmVnaW9uID09IHJlZ2lv
bikKLSAgICAgICAgICAgIGluc2lkZU9sZFJlZ2lvblJhbmdlID0gdHJ1ZTsKLSAgICAgICAgaWYg
KG5ld1N0YXJ0UmVnaW9uID09IHJlZ2lvbikKLSAgICAgICAgICAgIGluc2lkZU5ld1JlZ2lvblJh
bmdlID0gdHJ1ZTsKLQotICAgICAgICBpZiAoIShpbnNpZGVPbGRSZWdpb25SYW5nZSAmJiBpbnNp
ZGVOZXdSZWdpb25SYW5nZSkpIHsKLSAgICAgICAgICAgIGlmIChyZWdpb24tPnJlbmRlckJveFJl
Z2lvbkluZm8oJmJveCkpCi0gICAgICAgICAgICAgICAgcmVnaW9uLT5yZW1vdmVSZW5kZXJCb3hS
ZWdpb25JbmZvKGJveCk7Cit2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmNsZWFyUmVuZGVyQm94RnJh
Z21lbnRJbmZvQW5kQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyQm94JiBib3gsCisgICAgY29uc3Qg
UmVuZGVyRnJhZ21lbnRDb250YWluZXIqIG5ld1N0YXJ0RnJhZ21lbnQsIGNvbnN0IFJlbmRlckZy
YWdtZW50Q29udGFpbmVyKiBuZXdFbmRGcmFnbWVudCwKKyAgICBjb25zdCBSZW5kZXJGcmFnbWVu
dENvbnRhaW5lciogb2xkU3RhcnRGcmFnbWVudCwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWlu
ZXIqIG9sZEVuZEZyYWdtZW50KQoreworICAgIEFTU0VSVChuZXdTdGFydEZyYWdtZW50ICYmIG5l
d0VuZEZyYWdtZW50ICYmIG9sZFN0YXJ0RnJhZ21lbnQgJiYgb2xkRW5kRnJhZ21lbnQpOworCisg
ICAgYm9vbCBpbnNpZGVPbGRGcmFnbWVudFJhbmdlID0gZmFsc2U7CisgICAgYm9vbCBpbnNpZGVO
ZXdGcmFnbWVudFJhbmdlID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBmcmFnbWVudCA6IG1fZnJh
Z21lbnRMaXN0KSB7CisgICAgICAgIGlmIChvbGRTdGFydEZyYWdtZW50ID09IGZyYWdtZW50KQor
ICAgICAgICAgICAgaW5zaWRlT2xkRnJhZ21lbnRSYW5nZSA9IHRydWU7CisgICAgICAgIGlmIChu
ZXdTdGFydEZyYWdtZW50ID09IGZyYWdtZW50KQorICAgICAgICAgICAgaW5zaWRlTmV3RnJhZ21l
bnRSYW5nZSA9IHRydWU7CisKKyAgICAgICAgaWYgKCEoaW5zaWRlT2xkRnJhZ21lbnRSYW5nZSAm
JiBpbnNpZGVOZXdGcmFnbWVudFJhbmdlKSkgeworICAgICAgICAgICAgaWYgKGZyYWdtZW50LT5y
ZW5kZXJCb3hGcmFnbWVudEluZm8oJmJveCkpCisgICAgICAgICAgICAgICAgZnJhZ21lbnQtPnJl
bW92ZVJlbmRlckJveEZyYWdtZW50SW5mbyhib3gpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KG9sZEVuZFJlZ2lvbiA9PSByZWdpb24pCi0gICAgICAgICAgICBpbnNpZGVPbGRSZWdpb25SYW5n
ZSA9IGZhbHNlOwotICAgICAgICBpZiAobmV3RW5kUmVnaW9uID09IHJlZ2lvbikKLSAgICAgICAg
ICAgIGluc2lkZU5ld1JlZ2lvblJhbmdlID0gZmFsc2U7CisgICAgICAgIGlmIChvbGRFbmRGcmFn
bWVudCA9PSBmcmFnbWVudCkKKyAgICAgICAgICAgIGluc2lkZU9sZEZyYWdtZW50UmFuZ2UgPSBm
YWxzZTsKKyAgICAgICAgaWYgKG5ld0VuZEZyYWdtZW50ID09IGZyYWdtZW50KQorICAgICAgICAg
ICAgaW5zaWRlTmV3RnJhZ21lbnRSYW5nZSA9IGZhbHNlOwogICAgIH0KIH0KIAotdm9pZCBSZW5k
ZXJGbG93VGhyZWFkOjpzZXRSZWdpb25SYW5nZUZvckJveChjb25zdCBSZW5kZXJCb3gmIGJveCwg
UmVuZGVyUmVnaW9uKiBzdGFydFJlZ2lvbiwgUmVuZGVyUmVnaW9uKiBlbmRSZWdpb24pCit2b2lk
IFJlbmRlckZsb3dUaHJlYWQ6OnNldEZyYWdtZW50UmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQm94
JiBib3gsIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBzdGFydEZyYWdtZW50LCBSZW5kZXJGcmFn
bWVudENvbnRhaW5lciogZW5kRnJhZ21lbnQpCiB7Ci0gICAgQVNTRVJUKGhhc1JlZ2lvbnMoKSk7
Ci0gICAgQVNTRVJUKHN0YXJ0UmVnaW9uICYmIGVuZFJlZ2lvbiAmJiBzdGFydFJlZ2lvbi0+Zmxv
d1RocmVhZCgpID09IHRoaXMgJiYgZW5kUmVnaW9uLT5mbG93VGhyZWFkKCkgPT0gdGhpcyk7Cisg
ICAgQVNTRVJUKGhhc0ZyYWdtZW50cygpKTsKKyAgICBBU1NFUlQoc3RhcnRGcmFnbWVudCAmJiBl
bmRGcmFnbWVudCAmJiBzdGFydEZyYWdtZW50LT5mbG93VGhyZWFkKCkgPT0gdGhpcyAmJiBlbmRG
cmFnbWVudC0+Zmxvd1RocmVhZCgpID09IHRoaXMpOwogCi0gICAgYXV0byBpdCA9IG1fcmVnaW9u
UmFuZ2VNYXAuZmluZCgmYm94KTsKLSAgICBpZiAoaXQgPT0gbV9yZWdpb25SYW5nZU1hcC5lbmQo
KSkgewotICAgICAgICBtX3JlZ2lvblJhbmdlTWFwLnNldCgmYm94LCBSZW5kZXJSZWdpb25SYW5n
ZShzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKSk7CisgICAgYXV0byBpdCA9IG1fZnJhZ21lbnRSYW5n
ZU1hcC5maW5kKCZib3gpOworICAgIGlmIChpdCA9PSBtX2ZyYWdtZW50UmFuZ2VNYXAuZW5kKCkp
IHsKKyAgICAgICAgbV9mcmFnbWVudFJhbmdlTWFwLnNldCgmYm94LCBSZW5kZXJGcmFnbWVudENv
bnRhaW5lclJhbmdlKHN0YXJ0RnJhZ21lbnQsIGVuZEZyYWdtZW50KSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICAvLyBJZiBub3RoaW5nIGNoYW5nZWQsIGp1c3QgYmFpbC4KLSAgICBS
ZW5kZXJSZWdpb25SYW5nZSYgcmFuZ2UgPSBpdC0+dmFsdWU7Ci0gICAgaWYgKHJhbmdlLnN0YXJ0
UmVnaW9uKCkgPT0gc3RhcnRSZWdpb24gJiYgcmFuZ2UuZW5kUmVnaW9uKCkgPT0gZW5kUmVnaW9u
KQorICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyUmFuZ2UmIHJhbmdlID0gaXQtPnZhbHVlOwor
ICAgIGlmIChyYW5nZS5zdGFydEZyYWdtZW50KCkgPT0gc3RhcnRGcmFnbWVudCAmJiByYW5nZS5l
bmRGcmFnbWVudCgpID09IGVuZEZyYWdtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBjbGVh
clJlbmRlckJveFJlZ2lvbkluZm9BbmRDdXN0b21TdHlsZShib3gsIHN0YXJ0UmVnaW9uLCBlbmRS
ZWdpb24sIHJhbmdlLnN0YXJ0UmVnaW9uKCksIHJhbmdlLmVuZFJlZ2lvbigpKTsKLSAgICByYW5n
ZS5zZXRSYW5nZShzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKTsKKyAgICBjbGVhclJlbmRlckJveEZy
YWdtZW50SW5mb0FuZEN1c3RvbVN0eWxlKGJveCwgc3RhcnRGcmFnbWVudCwgZW5kRnJhZ21lbnQs
IHJhbmdlLnN0YXJ0RnJhZ21lbnQoKSwgcmFuZ2UuZW5kRnJhZ21lbnQoKSk7CisgICAgcmFuZ2Uu
c2V0UmFuZ2Uoc3RhcnRGcmFnbWVudCwgZW5kRnJhZ21lbnQpOwogfQogCi1ib29sIFJlbmRlckZs
b3dUaHJlYWQ6Omhhc0NhY2hlZFJlZ2lvblJhbmdlRm9yQm94KGNvbnN0IFJlbmRlckJveCYgYm94
KSBjb25zdAorYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpoYXNDYWNoZWRGcmFnbWVudFJhbmdlRm9y
Qm94KGNvbnN0IFJlbmRlckJveCYgYm94KSBjb25zdAogewotICAgIHJldHVybiBtX3JlZ2lvblJh
bmdlTWFwLmNvbnRhaW5zKCZib3gpOworICAgIHJldHVybiBtX2ZyYWdtZW50UmFuZ2VNYXAuY29u
dGFpbnMoJmJveCk7CiB9CiAKLWJvb2wgUmVuZGVyRmxvd1RocmVhZDo6Z2V0UmVnaW9uUmFuZ2VG
b3JCb3hGcm9tQ2FjaGVkSW5mbyhjb25zdCBSZW5kZXJCb3gqIGJveCwgUmVuZGVyUmVnaW9uKiYg
c3RhcnRSZWdpb24sIFJlbmRlclJlZ2lvbiomIGVuZFJlZ2lvbikgY29uc3QKK2Jvb2wgUmVuZGVy
Rmxvd1RocmVhZDo6Z2V0RnJhZ21lbnRSYW5nZUZvckJveEZyb21DYWNoZWRJbmZvKGNvbnN0IFJl
bmRlckJveCogYm94LCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciomIHN0YXJ0RnJhZ21lbnQsIFJl
bmRlckZyYWdtZW50Q29udGFpbmVyKiYgZW5kRnJhZ21lbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KGJveCk7Ci0gICAgQVNTRVJUKGhhc1ZhbGlkUmVnaW9uSW5mbygpKTsKLSAgICBBU1NFUlQoKHN0
YXJ0UmVnaW9uID09IG51bGxwdHIpICYmIChlbmRSZWdpb24gPT0gbnVsbHB0cikpOworICAgIEFT
U0VSVChoYXNWYWxpZEZyYWdtZW50SW5mbygpKTsKKyAgICBBU1NFUlQoKHN0YXJ0RnJhZ21lbnQg
PT0gbnVsbHB0cikgJiYgKGVuZEZyYWdtZW50ID09IG51bGxwdHIpKTsKIAotICAgIGF1dG8gaXQg
PSBtX3JlZ2lvblJhbmdlTWFwLmZpbmQoYm94KTsKLSAgICBpZiAoaXQgIT0gbV9yZWdpb25SYW5n
ZU1hcC5lbmQoKSkgewotICAgICAgICBjb25zdCBSZW5kZXJSZWdpb25SYW5nZSYgcmFuZ2UgPSBp
dC0+dmFsdWU7Ci0gICAgICAgIHN0YXJ0UmVnaW9uID0gcmFuZ2Uuc3RhcnRSZWdpb24oKTsKLSAg
ICAgICAgZW5kUmVnaW9uID0gcmFuZ2UuZW5kUmVnaW9uKCk7Ci0gICAgICAgIEFTU0VSVChtX3Jl
Z2lvbkxpc3QuY29udGFpbnMoc3RhcnRSZWdpb24pICYmIG1fcmVnaW9uTGlzdC5jb250YWlucyhl
bmRSZWdpb24pKTsKKyAgICBhdXRvIGl0ID0gbV9mcmFnbWVudFJhbmdlTWFwLmZpbmQoYm94KTsK
KyAgICBpZiAoaXQgIT0gbV9mcmFnbWVudFJhbmdlTWFwLmVuZCgpKSB7CisgICAgICAgIGNvbnN0
IFJlbmRlckZyYWdtZW50Q29udGFpbmVyUmFuZ2UmIHJhbmdlID0gaXQtPnZhbHVlOworICAgICAg
ICBzdGFydEZyYWdtZW50ID0gcmFuZ2Uuc3RhcnRGcmFnbWVudCgpOworICAgICAgICBlbmRGcmFn
bWVudCA9IHJhbmdlLmVuZEZyYWdtZW50KCk7CisgICAgICAgIEFTU0VSVChtX2ZyYWdtZW50TGlz
dC5jb250YWlucyhzdGFydEZyYWdtZW50KSAmJiBtX2ZyYWdtZW50TGlzdC5jb250YWlucyhlbmRG
cmFnbWVudCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLWJvb2wgUmVuZGVyRmxvd1RocmVhZDo6Z2V0UmVnaW9uUmFuZ2VGb3JCb3goY29u
c3QgUmVuZGVyQm94KiBib3gsIFJlbmRlclJlZ2lvbiomIHN0YXJ0UmVnaW9uLCBSZW5kZXJSZWdp
b24qJiBlbmRSZWdpb24pIGNvbnN0Citib29sIFJlbmRlckZsb3dUaHJlYWQ6OmdldEZyYWdtZW50
UmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQm94KiBib3gsIFJlbmRlckZyYWdtZW50Q29udGFpbmVy
KiYgc3RhcnRGcmFnbWVudCwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqJiBlbmRGcmFnbWVudCkg
Y29uc3QKIHsKICAgICBBU1NFUlQoYm94KTsKIAotICAgIHN0YXJ0UmVnaW9uID0gZW5kUmVnaW9u
ID0gbnVsbHB0cjsKLSAgICBpZiAoIWhhc1ZhbGlkUmVnaW9uSW5mbygpKSAvLyBXZSBjbGVhciB0
aGUgcmFuZ2VzIHdoZW4gd2UgaW52YWxpZGF0ZSB0aGUgcmVnaW9ucy4KKyAgICBzdGFydEZyYWdt
ZW50ID0gZW5kRnJhZ21lbnQgPSBudWxscHRyOworICAgIGlmICghaGFzVmFsaWRGcmFnbWVudElu
Zm8oKSkgLy8gV2UgY2xlYXIgdGhlIHJhbmdlcyB3aGVuIHdlIGludmFsaWRhdGUgdGhlIGZyYWdt
ZW50cy4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fcmVnaW9uTGlzdC5zaXpl
KCkgPT0gMSkgewotICAgICAgICBzdGFydFJlZ2lvbiA9IGVuZFJlZ2lvbiA9IG1fcmVnaW9uTGlz
dC5maXJzdCgpOworICAgIGlmIChtX2ZyYWdtZW50TGlzdC5zaXplKCkgPT0gMSkgeworICAgICAg
ICBzdGFydEZyYWdtZW50ID0gZW5kRnJhZ21lbnQgPSBtX2ZyYWdtZW50TGlzdC5maXJzdCgpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoZ2V0UmVnaW9uUmFuZ2VGb3JC
b3hGcm9tQ2FjaGVkSW5mbyhib3gsIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pKQorICAgIGlmIChn
ZXRGcmFnbWVudFJhbmdlRm9yQm94RnJvbUNhY2hlZEluZm8oYm94LCBzdGFydEZyYWdtZW50LCBl
bmRGcmFnbWVudCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1ib29sIFJlbmRlckZsb3dUaHJlYWQ6OmNvbXB1dGVkUmVnaW9uUmFuZ2VGb3JCb3goY29u
c3QgUmVuZGVyQm94KiBib3gsIFJlbmRlclJlZ2lvbiomIHN0YXJ0UmVnaW9uLCBSZW5kZXJSZWdp
b24qJiBlbmRSZWdpb24pIGNvbnN0Citib29sIFJlbmRlckZsb3dUaHJlYWQ6OmNvbXB1dGVkRnJh
Z21lbnRSYW5nZUZvckJveChjb25zdCBSZW5kZXJCb3gqIGJveCwgUmVuZGVyRnJhZ21lbnRDb250
YWluZXIqJiBzdGFydEZyYWdtZW50LCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciomIGVuZEZyYWdt
ZW50KSBjb25zdAogewogICAgIEFTU0VSVChib3gpOwogCi0gICAgc3RhcnRSZWdpb24gPSBlbmRS
ZWdpb24gPSBudWxscHRyOwotICAgIGlmICghaGFzVmFsaWRSZWdpb25JbmZvKCkpIC8vIFdlIGNs
ZWFyIHRoZSByYW5nZXMgd2hlbiB3ZSBpbnZhbGlkYXRlIHRoZSByZWdpb25zLgorICAgIHN0YXJ0
RnJhZ21lbnQgPSBlbmRGcmFnbWVudCA9IG51bGxwdHI7CisgICAgaWYgKCFoYXNWYWxpZEZyYWdt
ZW50SW5mbygpKSAvLyBXZSBjbGVhciB0aGUgcmFuZ2VzIHdoZW4gd2UgaW52YWxpZGF0ZSB0aGUg
ZnJhZ21lbnRzLgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZ2V0UmVnaW9uUmFu
Z2VGb3JCb3goYm94LCBzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKSkKKyAgICBpZiAoZ2V0RnJhZ21l
bnRSYW5nZUZvckJveChib3gsIHN0YXJ0RnJhZ21lbnQsIGVuZEZyYWdtZW50KSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKLSAgICAvLyBTZWFyY2ggdGhlIHJlZ2lvbiByYW5nZSB1c2luZyB0aGUg
aW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgdGhlIGNvbnRhaW5pbmcgYmxvY2sgY2hhaW4uCisgICAg
Ly8gU2VhcmNoIHRoZSBmcmFnbWVudCByYW5nZSB1c2luZyB0aGUgaW5mb3JtYXRpb24gcHJvdmlk
ZWQgYnkgdGhlIGNvbnRhaW5pbmcgYmxvY2sgY2hhaW4uCiAgICAgYXV0byogY29udGFpbmluZ0Js
b2NrID0gY29uc3RfY2FzdDxSZW5kZXJCb3gqPihib3gpOwogICAgIHdoaWxlICghY29udGFpbmlu
Z0Jsb2NrLT5pc1JlbmRlckZsb3dUaHJlYWQoKSkgewogICAgICAgICBJbmxpbmVFbGVtZW50Qm94
KiBib3hXcmFwcGVyID0gY29udGFpbmluZ0Jsb2NrLT5pbmxpbmVCb3hXcmFwcGVyKCk7Ci0gICAg
ICAgIGlmIChib3hXcmFwcGVyICYmIGJveFdyYXBwZXItPnJvb3QoKS5jb250YWluaW5nUmVnaW9u
KCkpIHsKLSAgICAgICAgICAgIHN0YXJ0UmVnaW9uID0gZW5kUmVnaW9uID0gYm94V3JhcHBlci0+
cm9vdCgpLmNvbnRhaW5pbmdSZWdpb24oKTsKLSAgICAgICAgICAgIEFTU0VSVChtX3JlZ2lvbkxp
c3QuY29udGFpbnMoc3RhcnRSZWdpb24pKTsKKyAgICAgICAgaWYgKGJveFdyYXBwZXIgJiYgYm94
V3JhcHBlci0+cm9vdCgpLmNvbnRhaW5pbmdGcmFnbWVudCgpKSB7CisgICAgICAgICAgICBzdGFy
dEZyYWdtZW50ID0gZW5kRnJhZ21lbnQgPSBib3hXcmFwcGVyLT5yb290KCkuY29udGFpbmluZ0Zy
YWdtZW50KCk7CisgICAgICAgICAgICBBU1NFUlQobV9mcmFnbWVudExpc3QuY29udGFpbnMoc3Rh
cnRGcmFnbWVudCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAotICAg
ICAgICAvLyBGSVhNRTogVXNlIHRoZSBjb250YWluaW5nQmxvY2soKSB2YWx1ZSBvbmNlIHdlIHBh
dGNoIGFsbCB0aGUgbGF5b3V0IHN5c3RlbXMgdG8gYmUgcmVnaW9uIHJhbmdlIGF3YXJlCisgICAg
ICAgIC8vIEZJWE1FOiBVc2UgdGhlIGNvbnRhaW5pbmdCbG9jaygpIHZhbHVlIG9uY2Ugd2UgcGF0
Y2ggYWxsIHRoZSBsYXlvdXQgc3lzdGVtcyB0byBiZSBmcmFnbWVudCByYW5nZSBhd2FyZQogICAg
ICAgICAvLyAoZS5nLiBpZiB3ZSB1c2UgY29udGFpbmluZ0Jsb2NrKCkgdGhlIHNoYWRvdyBjb250
cm9scyBvZiBhIHZpZGVvIGVsZW1lbnQgd29uJ3QgZ2V0IHRoZSByYW5nZSBmcm9tIHRoZQogICAg
ICAgICAvLyB2aWRlbyBib3ggYmVjYXVzZSBpdCdzIG5vdCBhIGJsb2NrOyB0aGV5IG5lZWQgdG8g
YmUgcGF0Y2hlZCBzZXBhcmF0ZWx5KS4KICAgICAgICAgQVNTRVJUKGNvbnRhaW5pbmdCbG9jay0+
cGFyZW50KCkpOwogICAgICAgICBjb250YWluaW5nQmxvY2sgPSAmY29udGFpbmluZ0Jsb2NrLT5w
YXJlbnQoKS0+ZW5jbG9zaW5nQm94KCk7CiAgICAgICAgIEFTU0VSVChjb250YWluaW5nQmxvY2sp
OwogCi0gICAgICAgIC8vIElmIGEgYm94IGRvZXNuJ3QgaGF2ZSBhIGNhY2hlZCByZWdpb24gcmFu
Z2UgaXQgdXN1YWxseSBtZWFucyB0aGUgYm94IGJlbG9uZ3MgdG8gYSBsaW5lIHNvIHN0YXJ0UmVn
aW9uIHNob3VsZCBiZSBlcXVhbCB3aXRoIGVuZFJlZ2lvbi4KLSAgICAgICAgLy8gRklYTUU6IEZp
bmQgdGhlIGNhc2VzIHdoZW4gdGhpcyBzdGFydFJlZ2lvbiBzaG91bGQgbm90IGJlIGVxdWFsIHdp
dGggZW5kUmVnaW9uIGFuZCBtYWtlIHN1cmUgdGhlc2UgYm94ZXMgaGF2ZSBjYWNoZWQgcmVnaW9u
IHJhbmdlcy4KLSAgICAgICAgaWYgKGNvbnRhaW5pbmdCbG9jayAmJiBoYXNDYWNoZWRSZWdpb25S
YW5nZUZvckJveCgqY29udGFpbmluZ0Jsb2NrKSkgewotICAgICAgICAgICAgc3RhcnRSZWdpb24g
PSBlbmRSZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KGNvbnRhaW5pbmdCbG9jaywgY29udGFp
bmluZ0Jsb2NrLT5vZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCksIHRydWUpOworICAg
ICAgICAvLyBJZiBhIGJveCBkb2Vzbid0IGhhdmUgYSBjYWNoZWQgZnJhZ21lbnQgcmFuZ2UgaXQg
dXN1YWxseSBtZWFucyB0aGUgYm94IGJlbG9uZ3MgdG8gYSBsaW5lIHNvIHN0YXJ0RnJhZ21lbnQg
c2hvdWxkIGJlIGVxdWFsIHdpdGggZW5kRnJhZ21lbnQuCisgICAgICAgIC8vIEZJWE1FOiBGaW5k
IHRoZSBjYXNlcyB3aGVuIHRoaXMgc3RhcnRGcmFnbWVudCBzaG91bGQgbm90IGJlIGVxdWFsIHdp
dGggZW5kRnJhZ21lbnQgYW5kIG1ha2Ugc3VyZSB0aGVzZSBib3hlcyBoYXZlIGNhY2hlZCBmcmFn
bWVudCByYW5nZXMuCisgICAgICAgIGlmIChjb250YWluaW5nQmxvY2sgJiYgaGFzQ2FjaGVkRnJh
Z21lbnRSYW5nZUZvckJveCgqY29udGFpbmluZ0Jsb2NrKSkgeworICAgICAgICAgICAgc3RhcnRG
cmFnbWVudCA9IGVuZEZyYWdtZW50ID0gZnJhZ21lbnRBdEJsb2NrT2Zmc2V0KGNvbnRhaW5pbmdC
bG9jaywgY29udGFpbmluZ0Jsb2NrLT5vZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCks
IHRydWUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC02
NjEsNjIgKzY2MSw2MiBAQCBib29sIFJlbmRlckZsb3dUaHJlYWQ6OmNvbXB1dGVkUmVnaW9uUmFu
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlckZsb3dUaHJlYWQ6OnJlZ2lvbklu
UmFuZ2UoY29uc3QgUmVuZGVyUmVnaW9uKiB0YXJnZXRSZWdpb24sIGNvbnN0IFJlbmRlclJlZ2lv
biogc3RhcnRSZWdpb24sIGNvbnN0IFJlbmRlclJlZ2lvbiogZW5kUmVnaW9uKSBjb25zdAorYm9v
bCBSZW5kZXJGbG93VGhyZWFkOjpmcmFnbWVudEluUmFuZ2UoY29uc3QgUmVuZGVyRnJhZ21lbnRD
b250YWluZXIqIHRhcmdldEZyYWdtZW50LCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciog
c3RhcnRGcmFnbWVudCwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGVuZEZyYWdtZW50
KSBjb25zdAogewotICAgIEFTU0VSVCh0YXJnZXRSZWdpb24pOworICAgIEFTU0VSVCh0YXJnZXRG
cmFnbWVudCk7CiAKLSAgICBmb3IgKGF1dG8gaXQgPSBtX3JlZ2lvbkxpc3QuZmluZChjb25zdF9j
YXN0PFJlbmRlclJlZ2lvbio+KHN0YXJ0UmVnaW9uKSksIGVuZCA9IG1fcmVnaW9uTGlzdC5lbmQo
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFJlbmRlclJlZ2lvbiogY3VyclJl
Z2lvbiA9ICppdDsKLSAgICAgICAgaWYgKHRhcmdldFJlZ2lvbiA9PSBjdXJyUmVnaW9uKQorICAg
IGZvciAoYXV0byBpdCA9IG1fZnJhZ21lbnRMaXN0LmZpbmQoY29uc3RfY2FzdDxSZW5kZXJGcmFn
bWVudENvbnRhaW5lcio+KHN0YXJ0RnJhZ21lbnQpKSwgZW5kID0gbV9mcmFnbWVudExpc3QuZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRh
aW5lciogY3VyckZyYWdtZW50ID0gKml0OworICAgICAgICBpZiAodGFyZ2V0RnJhZ21lbnQgPT0g
Y3VyckZyYWdtZW50KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChjdXJy
UmVnaW9uID09IGVuZFJlZ2lvbikKKyAgICAgICAgaWYgKGN1cnJGcmFnbWVudCA9PSBlbmRGcmFn
bWVudCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpvYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lv
bihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb24p
IGNvbnN0Citib29sIFJlbmRlckZsb3dUaHJlYWQ6Om9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93
RnJhZ21lbnQoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlckZyYWdtZW50
Q29udGFpbmVyKiBmcmFnbWVudCkgY29uc3QKIHsKICAgICBBU1NFUlQob2JqZWN0KTsKLSAgICBB
U1NFUlQocmVnaW9uKTsKKyAgICBBU1NFUlQoZnJhZ21lbnQpOwogICAgIAogICAgIFJlbmRlckZs
b3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBvYmplY3QtPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2so
KTsKICAgICBpZiAoZmxvd1RocmVhZCAhPSB0aGlzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBpZiAoIW1fcmVnaW9uTGlzdC5jb250YWlucyhjb25zdF9jYXN0PFJlbmRlclJlZ2lvbio+
KHJlZ2lvbikpKQorICAgIGlmICghbV9mcmFnbWVudExpc3QuY29udGFpbnMoY29uc3RfY2FzdDxS
ZW5kZXJGcmFnbWVudENvbnRhaW5lcio+KGZyYWdtZW50KSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKLSAgICBSZW5kZXJSZWdpb24qIGVuY2xvc2luZ0JveFN0YXJ0UmVnaW9uID0gbnVs
bHB0cjsKLSAgICBSZW5kZXJSZWdpb24qIGVuY2xvc2luZ0JveEVuZFJlZ2lvbiA9IG51bGxwdHI7
Ci0gICAgLy8gSWYgdGhlIGJveCBoYXMgbm8gcmFuZ2UsIGRvIG5vdCBjaGVjayByZWdpb25JblJh
bmdlLiBCb3hlcyBpbnNpZGUgaW5saW5lcyBkbyBub3QgZ2V0IHJhbmdlcy4KLSAgICAvLyBJbnN0
ZWFkLCB0aGUgY29udGFpbmluZyBSb290SW5saW5lQm94IHdpbGwgYWJvcnQgd2hlbiB0cnlpbmcg
dG8gcGFpbnQgaW5zaWRlIHRoZSB3cm9uZyByZWdpb24uCi0gICAgaWYgKGNvbXB1dGVkUmVnaW9u
UmFuZ2VGb3JCb3goJm9iamVjdC0+ZW5jbG9zaW5nQm94KCksIGVuY2xvc2luZ0JveFN0YXJ0UmVn
aW9uLCBlbmNsb3NpbmdCb3hFbmRSZWdpb24pCi0gICAgICAgICYmICFyZWdpb25JblJhbmdlKHJl
Z2lvbiwgZW5jbG9zaW5nQm94U3RhcnRSZWdpb24sIGVuY2xvc2luZ0JveEVuZFJlZ2lvbikpCisg
ICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGVuY2xvc2luZ0JveFN0YXJ0RnJhZ21lbnQgPSBu
dWxscHRyOworICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBlbmNsb3NpbmdCb3hFbmRGcmFn
bWVudCA9IG51bGxwdHI7CisgICAgLy8gSWYgdGhlIGJveCBoYXMgbm8gcmFuZ2UsIGRvIG5vdCBj
aGVjayBmcmFnbWVudEluUmFuZ2UuIEJveGVzIGluc2lkZSBpbmxpbmVzIGRvIG5vdCBnZXQgcmFu
Z2VzLgorICAgIC8vIEluc3RlYWQsIHRoZSBjb250YWluaW5nIFJvb3RJbmxpbmVCb3ggd2lsbCBh
Ym9ydCB3aGVuIHRyeWluZyB0byBwYWludCBpbnNpZGUgdGhlIHdyb25nIGZyYWdtZW50LgorICAg
IGlmIChjb21wdXRlZEZyYWdtZW50UmFuZ2VGb3JCb3goJm9iamVjdC0+ZW5jbG9zaW5nQm94KCks
IGVuY2xvc2luZ0JveFN0YXJ0RnJhZ21lbnQsIGVuY2xvc2luZ0JveEVuZEZyYWdtZW50KQorICAg
ICAgICAmJiAhZnJhZ21lbnRJblJhbmdlKGZyYWdtZW50LCBlbmNsb3NpbmdCb3hTdGFydEZyYWdt
ZW50LCBlbmNsb3NpbmdCb3hFbmRGcmFnbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKICAgICByZXR1cm4gb2JqZWN0LT5pc0JveCgpIHx8IG9iamVjdC0+aXNSZW5kZXJJbmxpbmUo
KTsKIH0KIAotYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpvYmplY3RJbkZsb3dSZWdpb24oY29uc3Qg
UmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uKSBjb25zdAor
Ym9vbCBSZW5kZXJGbG93VGhyZWFkOjpvYmplY3RJbkZsb3dGcmFnbWVudChjb25zdCBSZW5kZXJP
YmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50KSBj
b25zdAogewogICAgIEFTU0VSVChvYmplY3QpOwotICAgIEFTU0VSVChyZWdpb24pOworICAgIEFT
U0VSVChmcmFnbWVudCk7CiAKICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gb2Jq
ZWN0LT5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CiAgICAgaWYgKGZsb3dUaHJlYWQgIT0g
dGhpcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFtX3JlZ2lvbkxpc3QuY29u
dGFpbnMoY29uc3RfY2FzdDxSZW5kZXJSZWdpb24qPihyZWdpb24pKSkKKyAgICBpZiAoIW1fZnJh
Z21lbnRMaXN0LmNvbnRhaW5zKGNvbnN0X2Nhc3Q8UmVuZGVyRnJhZ21lbnRDb250YWluZXIqPihm
cmFnbWVudCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZW5kZXJSZWdpb24qIGVu
Y2xvc2luZ0JveFN0YXJ0UmVnaW9uID0gbnVsbHB0cjsKLSAgICBSZW5kZXJSZWdpb24qIGVuY2xv
c2luZ0JveEVuZFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgaWYgKCFnZXRSZWdpb25SYW5nZUZvckJv
eCgmb2JqZWN0LT5lbmNsb3NpbmdCb3goKSwgZW5jbG9zaW5nQm94U3RhcnRSZWdpb24sIGVuY2xv
c2luZ0JveEVuZFJlZ2lvbikpCisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGVuY2xvc2lu
Z0JveFN0YXJ0RnJhZ21lbnQgPSBudWxscHRyOworICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVy
KiBlbmNsb3NpbmdCb3hFbmRGcmFnbWVudCA9IG51bGxwdHI7CisgICAgaWYgKCFnZXRGcmFnbWVu
dFJhbmdlRm9yQm94KCZvYmplY3QtPmVuY2xvc2luZ0JveCgpLCBlbmNsb3NpbmdCb3hTdGFydEZy
YWdtZW50LCBlbmNsb3NpbmdCb3hFbmRGcmFnbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGlmICghcmVnaW9uSW5SYW5nZShyZWdpb24sIGVuY2xvc2luZ0JveFN0YXJ0UmVnaW9u
LCBlbmNsb3NpbmdCb3hFbmRSZWdpb24pKQorICAgIGlmICghZnJhZ21lbnRJblJhbmdlKGZyYWdt
ZW50LCBlbmNsb3NpbmdCb3hTdGFydEZyYWdtZW50LCBlbmNsb3NpbmdCb3hFbmRGcmFnbWVudCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChvYmplY3QtPmlzQm94KCkpCkBAIC03
MjcsMTcgKzcyNywxNyBAQCBib29sIFJlbmRlckZsb3dUaHJlYWQ6Om9iamVjdEluRmxvd1JlZ2lv
CiAgICAgICAgIG9iamVjdEFCQlJlY3Quc2V0V2lkdGgoMSk7CiAgICAgaWYgKCFvYmplY3RBQkJS
ZWN0LmhlaWdodCgpKQogICAgICAgICBvYmplY3RBQkJSZWN0LnNldEhlaWdodCgxKTsgCi0gICAg
aWYgKG9iamVjdEFCQlJlY3QuaW50ZXJzZWN0cyhyZWdpb24tPmFic29sdXRlQm91bmRpbmdCb3hS
ZWN0KHRydWUpKSkKKyAgICBpZiAob2JqZWN0QUJCUmVjdC5pbnRlcnNlY3RzKGZyYWdtZW50LT5h
YnNvbHV0ZUJvdW5kaW5nQm94UmVjdCh0cnVlKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0g
ICAgaWYgKHJlZ2lvbiA9PSBsYXN0UmVnaW9uKCkpIHsKLSAgICAgICAgLy8gSWYgdGhlIG9iamVj
dCBkb2VzIG5vdCBpbnRlcnNlY3QgYW55IG9mIHRoZSBlbmNsb3NpbmcgYm94IHJlZ2lvbnMKLSAg
ICAgICAgLy8gdGhlbiB0aGUgb2JqZWN0IGlzIGluIGxhc3QgcmVnaW9uLgotICAgICAgICBmb3Ig
KGF1dG8gaXQgPSBtX3JlZ2lvbkxpc3QuZmluZChlbmNsb3NpbmdCb3hTdGFydFJlZ2lvbiksIGVu
ZCA9IG1fcmVnaW9uTGlzdC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBj
b25zdCBSZW5kZXJSZWdpb24qIGN1cnJSZWdpb24gPSAqaXQ7Ci0gICAgICAgICAgICBpZiAoY3Vy
clJlZ2lvbiA9PSByZWdpb24pCisgICAgaWYgKGZyYWdtZW50ID09IGxhc3RGcmFnbWVudCgpKSB7
CisgICAgICAgIC8vIElmIHRoZSBvYmplY3QgZG9lcyBub3QgaW50ZXJzZWN0IGFueSBvZiB0aGUg
ZW5jbG9zaW5nIGJveCBmcmFnbWVudHMKKyAgICAgICAgLy8gdGhlbiB0aGUgb2JqZWN0IGlzIGlu
IGxhc3QgZnJhZ21lbnQuCisgICAgICAgIGZvciAoYXV0byBpdCA9IG1fZnJhZ21lbnRMaXN0LmZp
bmQoZW5jbG9zaW5nQm94U3RhcnRGcmFnbWVudCksIGVuZCA9IG1fZnJhZ21lbnRMaXN0LmVuZCgp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIGNvbnN0IFJlbmRlckZyYWdtZW50Q29u
dGFpbmVyKiBjdXJyRnJhZ21lbnQgPSAqaXQ7CisgICAgICAgICAgICBpZiAoY3VyckZyYWdtZW50
ID09IGZyYWdtZW50KQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKG9i
amVjdEFCQlJlY3QuaW50ZXJzZWN0cyhjdXJyUmVnaW9uLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVj
dCh0cnVlKSkpCisgICAgICAgICAgICBpZiAob2JqZWN0QUJCUmVjdC5pbnRlcnNlY3RzKGN1cnJG
cmFnbWVudC0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QodHJ1ZSkpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc0OSwx
NyArNzQ5LDE3IEBAIGJvb2wgUmVuZGVyRmxvd1RocmVhZDo6b2JqZWN0SW5GbG93UmVnaW8KICNp
ZiAhQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT05fRElTQUJMRUQKIGJvb2wgUmVuZGVy
Rmxvd1RocmVhZDo6Y2hlY2tMaW5lc0NvbnNpc3RlbmN5KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYg
cmVtb3ZlZEJsb2NrKSBjb25zdAogewotICAgIGlmICghbV9saW5lVG9SZWdpb25NYXApCisgICAg
aWYgKCFtX2xpbmVUb0ZyYWdtZW50TWFwKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGZv
ciAoYXV0byYgbGluZVBhaXIgOiAqbV9saW5lVG9SZWdpb25NYXAuZ2V0KCkpIHsKKyAgICBmb3Ig
KGF1dG8mIGxpbmVQYWlyIDogKm1fbGluZVRvRnJhZ21lbnRNYXAuZ2V0KCkpIHsKICAgICAgICAg
Y29uc3QgUm9vdElubGluZUJveCogbGluZSA9IGxpbmVQYWlyLmtleTsKLSAgICAgICAgUmVuZGVy
UmVnaW9uKiByZWdpb24gPSBsaW5lUGFpci52YWx1ZTsKKyAgICAgICAgUmVuZGVyRnJhZ21lbnRD
b250YWluZXIqIGZyYWdtZW50ID0gbGluZVBhaXIudmFsdWU7CiAgICAgICAgIGlmICgmbGluZS0+
YmxvY2tGbG93KCkgPT0gJnJlbW92ZWRCbG9jaykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgaWYgKGxpbmUtPmJsb2NrRmxvdygpLmZsb3dUaHJlYWRTdGF0ZSgpID09IE5vdElu
c2lkZUZsb3dUaHJlYWQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICgh
bV9yZWdpb25MaXN0LmNvbnRhaW5zKHJlZ2lvbikpCisgICAgICAgIGlmICghbV9mcmFnbWVudExp
c3QuY29udGFpbnMoZnJhZ21lbnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IApAQCAtNzY3LDkzICs3NjcsOTMgQEAgYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpjaGVja0xpbmVz
Q29uc2lzdAogfQogI2VuZGlmCiAKLXZvaWQgUmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJMaW5lc1Rv
UmVnaW9uTWFwKCkKK3ZvaWQgUmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJMaW5lc1RvRnJhZ21lbnRN
YXAoKQogewotICAgIGlmIChtX2xpbmVUb1JlZ2lvbk1hcCkKLSAgICAgICAgbV9saW5lVG9SZWdp
b25NYXAtPmNsZWFyKCk7CisgICAgaWYgKG1fbGluZVRvRnJhZ21lbnRNYXApCisgICAgICAgIG1f
bGluZVRvRnJhZ21lbnRNYXAtPmNsZWFyKCk7CiB9CiAKIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6
ZGVsZXRlTGluZXMoKQogewotICAgIGNsZWFyTGluZXNUb1JlZ2lvbk1hcCgpOworICAgIGNsZWFy
TGluZXNUb0ZyYWdtZW50TWFwKCk7CiAgICAgUmVuZGVyQmxvY2tGbG93OjpkZWxldGVMaW5lcygp
OwogfQogCiB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OndpbGxCZURlc3Ryb3llZCgpCiB7Ci0gICAg
Y2xlYXJMaW5lc1RvUmVnaW9uTWFwKCk7CisgICAgY2xlYXJMaW5lc1RvRnJhZ21lbnRNYXAoKTsK
ICAgICBSZW5kZXJCbG9ja0Zsb3c6OndpbGxCZURlc3Ryb3llZCgpOwogfQogCi12b2lkIFJlbmRl
ckZsb3dUaHJlYWQ6Om1hcmtSZWdpb25zRm9yT3ZlcmZsb3dMYXlvdXRJZk5lZWRlZCgpCit2b2lk
IFJlbmRlckZsb3dUaHJlYWQ6Om1hcmtGcmFnbWVudHNGb3JPdmVyZmxvd0xheW91dElmTmVlZGVk
KCkKIHsKLSAgICBpZiAoIWhhc1JlZ2lvbnMoKSkKKyAgICBpZiAoIWhhc0ZyYWdtZW50cygpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8mIHJlZ2lvbiA6IG1fcmVnaW9uTGlzdCkK
LSAgICAgICAgcmVnaW9uLT5zZXROZWVkc1NpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0KCk7Cisg
ICAgZm9yIChhdXRvJiBmcmFnbWVudCA6IG1fZnJhZ21lbnRMaXN0KQorICAgICAgICBmcmFnbWVu
dC0+c2V0TmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCgpOwogfQogCi12b2lkIFJlbmRl
ckZsb3dUaHJlYWQ6OnVwZGF0ZVJlZ2lvbnNGbG93VGhyZWFkUG9ydGlvblJlY3QoKQordm9pZCBS
ZW5kZXJGbG93VGhyZWFkOjp1cGRhdGVGcmFnbWVudHNGbG93VGhyZWFkUG9ydGlvblJlY3QoKQog
ewogICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDA7CiAgICAgLy8gRklYTUU6IE9wdGlt
aXplIG5vdCB0byBjbGVhciB0aGUgaW50ZXJ2YWwgYWxsIHRoZSB0aW1lLiBUaGlzIGltcGxpZXMg
bWFudWFsbHkgbWFuYWdpbmcgdGhlIHRyZWUgbm9kZXMgbGlmZWN5Y2xlLgotICAgIG1fcmVnaW9u
SW50ZXJ2YWxUcmVlLmNsZWFyKCk7Ci0gICAgZm9yIChhdXRvJiByZWdpb24gOiBtX3JlZ2lvbkxp
c3QpIHsKLSAgICAgICAgTGF5b3V0VW5pdCByZWdpb25Mb2dpY2FsV2lkdGggPSByZWdpb24tPnBh
Z2VMb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgTGF5b3V0VW5pdCByZWdpb25Mb2dpY2FsSGVpZ2h0
ID0gc3RkOjptaW48TGF5b3V0VW5pdD4oUmVuZGVyRmxvd1RocmVhZDo6bWF4TG9naWNhbEhlaWdo
dCgpIC0gbG9naWNhbEhlaWdodCwgcmVnaW9uLT5sb2dpY2FsSGVpZ2h0T2ZBbGxGbG93VGhyZWFk
Q29udGVudCgpKTsKKyAgICBtX2ZyYWdtZW50SW50ZXJ2YWxUcmVlLmNsZWFyKCk7CisgICAgZm9y
IChhdXRvJiBmcmFnbWVudCA6IG1fZnJhZ21lbnRMaXN0KSB7CisgICAgICAgIExheW91dFVuaXQg
ZnJhZ21lbnRMb2dpY2FsV2lkdGggPSBmcmFnbWVudC0+cGFnZUxvZ2ljYWxXaWR0aCgpOworICAg
ICAgICBMYXlvdXRVbml0IGZyYWdtZW50TG9naWNhbEhlaWdodCA9IHN0ZDo6bWluPExheW91dFVu
aXQ+KFJlbmRlckZsb3dUaHJlYWQ6Om1heExvZ2ljYWxIZWlnaHQoKSAtIGxvZ2ljYWxIZWlnaHQs
IGZyYWdtZW50LT5sb2dpY2FsSGVpZ2h0T2ZBbGxGbG93VGhyZWFkQ29udGVudCgpKTsKIAotICAg
ICAgICBMYXlvdXRSZWN0IHJlZ2lvblJlY3Qoc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBMVFIgPyBM
YXlvdXRVbml0KCkgOiBsb2dpY2FsV2lkdGgoKSAtIHJlZ2lvbkxvZ2ljYWxXaWR0aCwgbG9naWNh
bEhlaWdodCwgcmVnaW9uTG9naWNhbFdpZHRoLCByZWdpb25Mb2dpY2FsSGVpZ2h0KTsKKyAgICAg
ICAgTGF5b3V0UmVjdCBmcmFnbWVudFJlY3Qoc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBMVFIgPyBM
YXlvdXRVbml0KCkgOiBsb2dpY2FsV2lkdGgoKSAtIGZyYWdtZW50TG9naWNhbFdpZHRoLCBsb2dp
Y2FsSGVpZ2h0LCBmcmFnbWVudExvZ2ljYWxXaWR0aCwgZnJhZ21lbnRMb2dpY2FsSGVpZ2h0KTsK
IAotICAgICAgICByZWdpb24tPnNldEZsb3dUaHJlYWRQb3J0aW9uUmVjdChpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8gcmVnaW9uUmVjdCA6IHJlZ2lvblJlY3QudHJhbnNwb3NlZFJlY3QoKSk7
CisgICAgICAgIGZyYWdtZW50LT5zZXRGbG93VGhyZWFkUG9ydGlvblJlY3QoaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IGZyYWdtZW50UmVjdCA6IGZyYWdtZW50UmVjdC50cmFuc3Bvc2VkUmVj
dCgpKTsKIAotICAgICAgICBtX3JlZ2lvbkludGVydmFsVHJlZS5hZGQoUmVnaW9uSW50ZXJ2YWxU
cmVlOjpjcmVhdGVJbnRlcnZhbChsb2dpY2FsSGVpZ2h0LCBsb2dpY2FsSGVpZ2h0ICsgcmVnaW9u
TG9naWNhbEhlaWdodCwgcmVnaW9uKSk7CisgICAgICAgIG1fZnJhZ21lbnRJbnRlcnZhbFRyZWUu
YWRkKEZyYWdtZW50SW50ZXJ2YWxUcmVlOjpjcmVhdGVJbnRlcnZhbChsb2dpY2FsSGVpZ2h0LCBs
b2dpY2FsSGVpZ2h0ICsgZnJhZ21lbnRMb2dpY2FsSGVpZ2h0LCBmcmFnbWVudCkpOwogCi0gICAg
ICAgIGxvZ2ljYWxIZWlnaHQgKz0gcmVnaW9uTG9naWNhbEhlaWdodDsKKyAgICAgICAgbG9naWNh
bEhlaWdodCArPSBmcmFnbWVudExvZ2ljYWxIZWlnaHQ7CiAgICAgfQogfQogCi0vLyBFdmVuIGlm
IHdlIHJlcXVpcmUgdGhlIGJyZWFrIHRvIG9jY3VyIGF0IG9mZnNldEJyZWFrSW5GbG93VGhyZWFk
LCBiZWNhdXNlIHJlZ2lvbnMgbWF5IGhhdmUgbWluL21heC1oZWlnaHQgdmFsdWVzLAorLy8gRXZl
biBpZiB3ZSByZXF1aXJlIHRoZSBicmVhayB0byBvY2N1ciBhdCBvZmZzZXRCcmVha0luRmxvd1Ro
cmVhZCwgYmVjYXVzZSBmcmFnbWVudHMgbWF5IGhhdmUgbWluL21heC1oZWlnaHQgdmFsdWVzLAog
Ly8gaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgYnJlYWsgd2lsbCBvY2N1ciBhdCBhIGRpZmZlcmVu
dCBvZmZzZXQgdGhhbiB0aGUgb3JpZ2luYWwgb25lIHJlcXVpcmVkLgogLy8gb2Zmc2V0QnJlYWtB
ZGp1c3RtZW50IG1lYXN1cmVzIHRoZSBkaWZmZXJlbnQgYmV0d2VlbiB0aGUgcmVxdWVzdGVkIGJy
ZWFrIG9mZnNldCBhbmQgdGhlIGN1cnJlbnQgYnJlYWsgb2Zmc2V0LgotYm9vbCBSZW5kZXJGbG93
VGhyZWFkOjphZGRGb3JjZWRSZWdpb25CcmVhayhjb25zdCBSZW5kZXJCbG9jayogYmxvY2ssIExh
eW91dFVuaXQgb2Zmc2V0QnJlYWtJbkZsb3dUaHJlYWQsIFJlbmRlckJveCosIGJvb2wsIExheW91
dFVuaXQqIG9mZnNldEJyZWFrQWRqdXN0bWVudCkKK2Jvb2wgUmVuZGVyRmxvd1RocmVhZDo6YWRk
Rm9yY2VkRnJhZ21lbnRCcmVhayhjb25zdCBSZW5kZXJCbG9jayogYmxvY2ssIExheW91dFVuaXQg
b2Zmc2V0QnJlYWtJbkZsb3dUaHJlYWQsIFJlbmRlckJveCosIGJvb2wsIExheW91dFVuaXQqIG9m
ZnNldEJyZWFrQWRqdXN0bWVudCkKIHsKLSAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgcmVn
aW9ucyBmbG93IHRocmVhZCBwb3J0aW9uIHJlY3QgYmVjYXVzZSB3ZSBhcmUgZ29pbmcgdG8gcHJv
Y2VzcwotICAgIC8vIGEgYnJlYWsgb24gdGhlc2UgcmVnaW9ucy4KLSAgICB1cGRhdGVSZWdpb25z
Rmxvd1RocmVhZFBvcnRpb25SZWN0KCk7Ci0KLSAgICAvLyBTaW11bGF0ZSBhIHJlZ2lvbiBicmVh
ayBhdCBvZmZzZXRCcmVha0luRmxvd1RocmVhZC4gSWYgaXQgcG9pbnRzIGluc2lkZSBhbiBhdXRv
IGxvZ2ljYWwgaGVpZ2h0IHJlZ2lvbiwKLSAgICAvLyB0aGVuIGl0IGRldGVybWluZXMgdGhlIHJl
Z2lvbiBjb21wdXRlZCBhdXRvIGhlaWdodC4KLSAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9IHJl
Z2lvbkF0QmxvY2tPZmZzZXQoYmxvY2ssIG9mZnNldEJyZWFrSW5GbG93VGhyZWFkKTsKLSAgICBp
ZiAoIXJlZ2lvbikKKyAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgZnJhZ21lbnRzIGZsb3cg
dGhyZWFkIHBvcnRpb24gcmVjdCBiZWNhdXNlIHdlIGFyZSBnb2luZyB0byBwcm9jZXNzCisgICAg
Ly8gYSBicmVhayBvbiB0aGVzZSBmcmFnbWVudHMuCisgICAgdXBkYXRlRnJhZ21lbnRzRmxvd1Ro
cmVhZFBvcnRpb25SZWN0KCk7CisKKyAgICAvLyBTaW11bGF0ZSBhIGZyYWdtZW50IGJyZWFrIGF0
IG9mZnNldEJyZWFrSW5GbG93VGhyZWFkLiBJZiBpdCBwb2ludHMgaW5zaWRlIGFuIGF1dG8gbG9n
aWNhbCBoZWlnaHQgZnJhZ21lbnQsCisgICAgLy8gdGhlbiBpdCBkZXRlcm1pbmVzIHRoZSBmcmFn
bWVudCBjb21wdXRlZCBhdXRvIGhlaWdodC4KKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciog
ZnJhZ21lbnQgPSBmcmFnbWVudEF0QmxvY2tPZmZzZXQoYmxvY2ssIG9mZnNldEJyZWFrSW5GbG93
VGhyZWFkKTsKKyAgICBpZiAoIWZyYWdtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBMYXlvdXRVbml0IGN1cnJlbnRSZWdpb25PZmZzZXRJbkZsb3dUaHJlYWQgPSBpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID8gcmVnaW9uLT5mbG93VGhyZWFkUG9ydGlvblJlY3QoKS55KCkgOiBy
ZWdpb24tPmZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpLngoKTsKKyAgICBMYXlvdXRVbml0IGN1cnJl
bnRGcmFnbWVudE9mZnNldEluRmxvd1RocmVhZCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBmcmFnbWVudC0+Zmxvd1RocmVhZFBvcnRpb25SZWN0KCkueSgpIDogZnJhZ21lbnQtPmZsb3dU
aHJlYWRQb3J0aW9uUmVjdCgpLngoKTsKIAotICAgIGN1cnJlbnRSZWdpb25PZmZzZXRJbkZsb3dU
aHJlYWQgKz0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJlZ2lvbi0+Zmxvd1RocmVhZFBv
cnRpb25SZWN0KCkuaGVpZ2h0KCkgOiByZWdpb24tPmZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpLndp
ZHRoKCk7CisgICAgY3VycmVudEZyYWdtZW50T2Zmc2V0SW5GbG93VGhyZWFkICs9IGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyBmcmFnbWVudC0+Zmxvd1RocmVhZFBvcnRpb25SZWN0KCkuaGVp
Z2h0KCkgOiBmcmFnbWVudC0+Zmxvd1RocmVhZFBvcnRpb25SZWN0KCkud2lkdGgoKTsKIAogICAg
IGlmIChvZmZzZXRCcmVha0FkanVzdG1lbnQpCi0gICAgICAgICpvZmZzZXRCcmVha0FkanVzdG1l
bnQgPSBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBjdXJyZW50UmVnaW9uT2Zmc2V0SW5GbG93VGhy
ZWFkIC0gb2Zmc2V0QnJlYWtJbkZsb3dUaHJlYWQpOworICAgICAgICAqb2Zmc2V0QnJlYWtBZGp1
c3RtZW50ID0gc3RkOjptYXg8TGF5b3V0VW5pdD4oMCwgY3VycmVudEZyYWdtZW50T2Zmc2V0SW5G
bG93VGhyZWFkIC0gb2Zmc2V0QnJlYWtJbkZsb3dUaHJlYWQpOwogCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCiB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmNvbGxlY3RMYXllckZyYWdtZW50cyhMYXll
ckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRp
bmdCb3gsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCkKIHsKLSAgICBBU1NFUlQoIW1fcmVn
aW9uc0ludmFsaWRhdGVkKTsKKyAgICBBU1NFUlQoIW1fZnJhZ21lbnRzSW52YWxpZGF0ZWQpOwog
ICAgIAotICAgIGZvciAoYXV0byYgcmVnaW9uIDogbV9yZWdpb25MaXN0KQotICAgICAgICByZWdp
b24tPmNvbGxlY3RMYXllckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgbGF5ZXJCb3VuZGluZ0Jv
eCwgZGlydHlSZWN0KTsKKyAgICBmb3IgKGF1dG8mIGZyYWdtZW50IDogbV9mcmFnbWVudExpc3Qp
CisgICAgICAgIGZyYWdtZW50LT5jb2xsZWN0TGF5ZXJGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMs
IGxheWVyQm91bmRpbmdCb3gsIGRpcnR5UmVjdCk7CiB9CiAKIExheW91dFJlY3QgUmVuZGVyRmxv
d1RocmVhZDo6ZnJhZ21lbnRzQm91bmRpbmdCb3goY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3Vu
ZGluZ0JveCkKIHsKLSAgICBBU1NFUlQoIW1fcmVnaW9uc0ludmFsaWRhdGVkKTsKKyAgICBBU1NF
UlQoIW1fZnJhZ21lbnRzSW52YWxpZGF0ZWQpOwogICAgIAogICAgIExheW91dFJlY3QgcmVzdWx0
OwotICAgIGZvciAoYXV0byYgcmVnaW9uIDogbV9yZWdpb25MaXN0KSB7CisgICAgZm9yIChhdXRv
JiBmcmFnbWVudCA6IG1fZnJhZ21lbnRMaXN0KSB7CiAgICAgICAgIExheWVyRnJhZ21lbnRzIGZy
YWdtZW50czsKLSAgICAgICAgcmVnaW9uLT5jb2xsZWN0TGF5ZXJGcmFnbWVudHMoZnJhZ21lbnRz
LCBsYXllckJvdW5kaW5nQm94LCBMYXlvdXRSZWN0OjppbmZpbml0ZVJlY3QoKSk7CisgICAgICAg
IGZyYWdtZW50LT5jb2xsZWN0TGF5ZXJGcmFnbWVudHMoZnJhZ21lbnRzLCBsYXllckJvdW5kaW5n
Qm94LCBMYXlvdXRSZWN0OjppbmZpbml0ZVJlY3QoKSk7CiAgICAgICAgIGZvciAoY29uc3QgYXV0
byYgZnJhZ21lbnQgOiBmcmFnbWVudHMpIHsKICAgICAgICAgICAgIExheW91dFJlY3QgZnJhZ21l
bnRSZWN0KGxheWVyQm91bmRpbmdCb3gpOwogICAgICAgICAgICAgZnJhZ21lbnRSZWN0LmludGVy
c2VjdChmcmFnbWVudC5wYWdpbmF0aW9uQ2xpcCk7CkBAIC04NjUsNyArODY1LDcgQEAgTGF5b3V0
UmVjdCBSZW5kZXJGbG93VGhyZWFkOjpmcmFnbWVudHNCbwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLUxheW91dFVuaXQgUmVuZGVyRmxvd1RocmVhZDo6b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0UmVnaW9uKGNvbnN0IFJlbmRlckJsb2NrKiBjdXJyZW50QmxvY2spIGNvbnN0CitMYXlvdXRV
bml0IFJlbmRlckZsb3dUaHJlYWQ6Om9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdEZyYWdtZW50
KGNvbnN0IFJlbmRlckJsb2NrKiBjdXJyZW50QmxvY2spIGNvbnN0CiB7CiAgICAgLy8gQXMgYSBs
YXN0IHJlc29ydCwgdGFrZSB0aGUgc2xvdyBwYXRoLgogICAgIExheW91dFJlY3QgYmxvY2tSZWN0
KDAsIDAsIGN1cnJlbnRCbG9jay0+d2lkdGgoKSwgY3VycmVudEJsb2NrLT5oZWlnaHQoKSk7CkBA
IC04OTgsNyArODk4LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJGbG93VGhyZWFkOjpvZmZzZXRGcm9t
TAogICAgIHJldHVybiBjdXJyZW50QmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBi
bG9ja1JlY3QueSgpIDogYmxvY2tSZWN0LngoKTsKIH0KIAotdm9pZCBSZW5kZXJGbG93VGhyZWFk
OjpSZWdpb25TZWFyY2hBZGFwdGVyOjpjb2xsZWN0SWZOZWVkZWQoY29uc3QgUmVnaW9uSW50ZXJ2
YWwmIGludGVydmFsKQordm9pZCBSZW5kZXJGbG93VGhyZWFkOjpGcmFnbWVudFNlYXJjaEFkYXB0
ZXI6OmNvbGxlY3RJZk5lZWRlZChjb25zdCBGcmFnbWVudEludGVydmFsJiBpbnRlcnZhbCkKIHsK
ICAgICBpZiAobV9yZXN1bHQpCiAgICAgICAgIHJldHVybjsKQEAgLTkxMSwyOSArOTExLDI5IEBA
IHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6bWFwTG9jYWxUb0NvbnRhaW4KICAgICBpZiAodGhpcyA9
PSByZXBhaW50Q29udGFpbmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoUmVuZGVyUmVn
aW9uKiByZWdpb24gPSBtYXBGcm9tRmxvd1RvUmVnaW9uKHRyYW5zZm9ybVN0YXRlKSkgeworICAg
IGlmIChSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQgPSBtYXBGcm9tRmxvd1RvRnJh
Z21lbnQodHJhbnNmb3JtU3RhdGUpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGUgY2FzdCBiZWxv
dyBpcyBwcm9iYWJseSBub3QgdGhlIGJlc3Qgc29sdXRpb24sIHdlIG1heSBuZWVkIHRvIGZpbmQg
YSBiZXR0ZXIgd2F5LgotICAgICAgICBjb25zdCBSZW5kZXJPYmplY3QqIHJlZ2lvbk9iamVjdCA9
IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlck9iamVjdCo+KHJlZ2lvbik7CisgICAgICAgIGNvbnN0
IFJlbmRlck9iamVjdCogZnJhZ21lbnRPYmplY3QgPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJP
YmplY3QqPihmcmFnbWVudCk7CiAKICAgICAgICAgLy8gSWYgdGhlIHJlcGFpbnQgY29udGFpbmVy
IGlzIG51bGxwdHIsIHdlIGhhdmUgdG8gY2xpbWIgdXAgdG8gdGhlIFJlbmRlclZpZXcsIG90aGVy
d2lzZSBzd2FwCi0gICAgICAgIC8vIGl0IHdpdGggdGhlIHJlZ2lvbidzIHJlcGFpbnQgY29udGFp
bmVyLgotICAgICAgICByZXBhaW50Q29udGFpbmVyID0gcmVwYWludENvbnRhaW5lciA/IHJlZ2lv
bi0+Y29udGFpbmVyRm9yUmVwYWludCgpIDogbnVsbHB0cjsKKyAgICAgICAgLy8gaXQgd2l0aCB0
aGUgZnJhZ21lbnQncyByZXBhaW50IGNvbnRhaW5lci4KKyAgICAgICAgcmVwYWludENvbnRhaW5l
ciA9IHJlcGFpbnRDb250YWluZXIgPyBmcmFnbWVudC0+Y29udGFpbmVyRm9yUmVwYWludCgpIDog
bnVsbHB0cjsKIAotICAgICAgICBpZiAoUmVuZGVyRmxvd1RocmVhZCogcmVnaW9uRmxvd1RocmVh
ZCA9IHJlZ2lvbi0+Zmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpKSB7Ci0gICAgICAgICAgICBS
ZW5kZXJSZWdpb24qIHN0YXJ0UmVnaW9uID0gbnVsbHB0cjsKLSAgICAgICAgICAgIFJlbmRlclJl
Z2lvbiogZW5kUmVnaW9uID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGlmIChyZWdpb25GbG93VGhy
ZWFkLT5nZXRSZWdpb25SYW5nZUZvckJveChyZWdpb24sIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24p
KSB7Ci0gICAgICAgICAgICAgICAgQ3VycmVudFJlbmRlclJlZ2lvbk1haW50YWluZXIgcmVnaW9u
TWFpbnRhaW5lcigqc3RhcnRSZWdpb24pOwotICAgICAgICAgICAgICAgIHJlZ2lvbk9iamVjdC0+
bWFwTG9jYWxUb0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCB0cmFuc2Zvcm1TdGF0ZSwgbW9k
ZSwgd2FzRml4ZWQpOworICAgICAgICBpZiAoUmVuZGVyRmxvd1RocmVhZCogZnJhZ21lbnRGbG93
VGhyZWFkID0gZnJhZ21lbnQtPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSkgeworICAgICAg
ICAgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIHN0YXJ0RnJhZ21lbnQgPSBudWxscHRyOwor
ICAgICAgICAgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGVuZEZyYWdtZW50ID0gbnVsbHB0
cjsKKyAgICAgICAgICAgIGlmIChmcmFnbWVudEZsb3dUaHJlYWQtPmdldEZyYWdtZW50UmFuZ2VG
b3JCb3goZnJhZ21lbnQsIHN0YXJ0RnJhZ21lbnQsIGVuZEZyYWdtZW50KSkgeworICAgICAgICAg
ICAgICAgIEN1cnJlbnRSZW5kZXJGcmFnbWVudENvbnRhaW5lck1haW50YWluZXIgZnJhZ21lbnRN
YWludGFpbmVyKCpzdGFydEZyYWdtZW50KTsKKyAgICAgICAgICAgICAgICBmcmFnbWVudE9iamVj
dC0+bWFwTG9jYWxUb0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCB0cmFuc2Zvcm1TdGF0ZSwg
bW9kZSwgd2FzRml4ZWQpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCi0gICAgICAgIHJlZ2lvbk9iamVjdC0+bWFwTG9jYWxUb0NvbnRhaW5lcihy
ZXBhaW50Q29udGFpbmVyLCB0cmFuc2Zvcm1TdGF0ZSwgbW9kZSwgd2FzRml4ZWQpOworICAgICAg
ICBmcmFnbWVudE9iamVjdC0+bWFwTG9jYWxUb0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCB0
cmFuc2Zvcm1TdGF0ZSwgbW9kZSwgd2FzRml4ZWQpOwogICAgIH0KIH0KIAotLy8gRklYTUU6IE1h
a2UgdGhpcyBmdW5jdGlvbiBmYXN0ZXIuIFdhbGtpbmcgdGhlIHJlbmRlciB0cmVlIGlzIHNsb3cs
IGJldHRlciB1c2UgYSBjYWNoaW5nIG1lY2hhbmlzbSAoZS5nLiB8Y2FjaGVkT2Zmc2V0RnJvbUxv
Z2ljYWxUb3BPZkZpcnN0UmVnaW9ufCkuCisvLyBGSVhNRTogTWFrZSB0aGlzIGZ1bmN0aW9uIGZh
c3Rlci4gV2Fsa2luZyB0aGUgcmVuZGVyIHRyZWUgaXMgc2xvdywgYmV0dGVyIHVzZSBhIGNhY2hp
bmcgbWVjaGFuaXNtIChlLmcuIHxjYWNoZWRPZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RGcmFn
bWVudHwpLgogTGF5b3V0UmVjdCBSZW5kZXJGbG93VGhyZWFkOjptYXBGcm9tTG9jYWxUb0Zsb3dU
aHJlYWQoY29uc3QgUmVuZGVyQm94KiBib3gsIGNvbnN0IExheW91dFJlY3QmIGxvY2FsUmVjdCkg
Y29uc3QKIHsKICAgICBMYXlvdXRSZWN0IGJveFJlY3QgPSBsb2NhbFJlY3Q7CkBAIC05NTUsNyAr
OTU1LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJGbG93VGhyZWFkOjptYXBGcm9tTG9jYQogICAgIHJl
dHVybiBib3hSZWN0OwogfQogCi0vLyBGSVhNRTogTWFrZSB0aGlzIGZ1bmN0aW9uIGZhc3Rlci4g
V2Fsa2luZyB0aGUgcmVuZGVyIHRyZWUgaXMgc2xvdywgYmV0dGVyIHVzZSBhIGNhY2hpbmcgbWVj
aGFuaXNtIChlLmcuIHxjYWNoZWRPZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RSZWdpb258KS4K
Ky8vIEZJWE1FOiBNYWtlIHRoaXMgZnVuY3Rpb24gZmFzdGVyLiBXYWxraW5nIHRoZSByZW5kZXIg
dHJlZSBpcyBzbG93LCBiZXR0ZXIgdXNlIGEgY2FjaGluZyBtZWNoYW5pc20gKGUuZy4gfGNhY2hl
ZE9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdEZyYWdtZW50fCkuCiBMYXlvdXRSZWN0IFJlbmRl
ckZsb3dUaHJlYWQ6Om1hcEZyb21GbG93VGhyZWFkVG9Mb2NhbChjb25zdCBSZW5kZXJCb3gqIGJv
eCwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBMYXlvdXRSZWN0IGxvY2Fs
UmVjdCA9IHJlY3Q7CkBAIC05ODgsMTUyICs5ODgsMTUyIEBAIHZvaWQgUmVuZGVyRmxvd1RocmVh
ZDo6ZmxpcEZvcldyaXRpbmdNb2QKICAgICAgICAgcmVjdC5zZXRYKDAgLSByZWN0Lm1heFgoKSk7
CiB9CiAKLXZvaWQgUmVuZGVyRmxvd1RocmVhZDo6YWRkUmVnaW9uc1Zpc3VhbEVmZmVjdE92ZXJm
bG93KGNvbnN0IFJlbmRlckJveCogYm94KQordm9pZCBSZW5kZXJGbG93VGhyZWFkOjphZGRGcmFn
bWVudHNWaXN1YWxFZmZlY3RPdmVyZmxvdyhjb25zdCBSZW5kZXJCb3gqIGJveCkKIHsKLSAgICBS
ZW5kZXJSZWdpb24qIHN0YXJ0UmVnaW9uID0gbnVsbHB0cjsKLSAgICBSZW5kZXJSZWdpb24qIGVu
ZFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgaWYgKCFnZXRSZWdpb25SYW5nZUZvckJveChib3gsIHN0
YXJ0UmVnaW9uLCBlbmRSZWdpb24pKQorICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBzdGFy
dEZyYWdtZW50ID0gbnVsbHB0cjsKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZW5kRnJh
Z21lbnQgPSBudWxscHRyOworICAgIGlmICghZ2V0RnJhZ21lbnRSYW5nZUZvckJveChib3gsIHN0
YXJ0RnJhZ21lbnQsIGVuZEZyYWdtZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChh
dXRvIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuZmluZChzdGFydFJlZ2lvbiksIGVuZCA9IG1fcmVnaW9u
TGlzdC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBSZW5kZXJSZWdpb24q
IHJlZ2lvbiA9ICppdGVyOworICAgIGZvciAoYXV0byBpdGVyID0gbV9mcmFnbWVudExpc3QuZmlu
ZChzdGFydEZyYWdtZW50KSwgZW5kID0gbV9mcmFnbWVudExpc3QuZW5kKCk7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpIHsKKyAgICAgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50ID0g
Kml0ZXI7CiAKLSAgICAgICAgTGF5b3V0UmVjdCBib3JkZXJCb3ggPSBib3gtPmJvcmRlckJveFJl
Y3RJblJlZ2lvbihyZWdpb24pOworICAgICAgICBMYXlvdXRSZWN0IGJvcmRlckJveCA9IGJveC0+
Ym9yZGVyQm94UmVjdEluRnJhZ21lbnQoZnJhZ21lbnQpOwogICAgICAgICBib3JkZXJCb3ggPSBi
b3gtPmFwcGx5VmlzdWFsRWZmZWN0T3ZlcmZsb3coYm9yZGVyQm94KTsKLSAgICAgICAgYm9yZGVy
Qm94ID0gcmVnaW9uLT5yZWN0Rmxvd1BvcnRpb25Gb3JCb3goYm94LCBib3JkZXJCb3gpOworICAg
ICAgICBib3JkZXJCb3ggPSBmcmFnbWVudC0+cmVjdEZsb3dQb3J0aW9uRm9yQm94KGJveCwgYm9y
ZGVyQm94KTsKIAotICAgICAgICByZWdpb24tPmFkZFZpc3VhbE92ZXJmbG93Rm9yQm94KGJveCwg
Ym9yZGVyQm94KTsKLSAgICAgICAgaWYgKHJlZ2lvbiA9PSBlbmRSZWdpb24pCisgICAgICAgIGZy
YWdtZW50LT5hZGRWaXN1YWxPdmVyZmxvd0ZvckJveChib3gsIGJvcmRlckJveCk7CisgICAgICAg
IGlmIChmcmFnbWVudCA9PSBlbmRGcmFnbWVudCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0K
IH0KIAotdm9pZCBSZW5kZXJGbG93VGhyZWFkOjphZGRSZWdpb25zVmlzdWFsT3ZlcmZsb3dGcm9t
VGhlbWUoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrKQordm9pZCBSZW5kZXJGbG93VGhyZWFkOjph
ZGRGcmFnbWVudHNWaXN1YWxPdmVyZmxvd0Zyb21UaGVtZShjb25zdCBSZW5kZXJCbG9jayogYmxv
Y2spCiB7Ci0gICAgUmVuZGVyUmVnaW9uKiBzdGFydFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgUmVu
ZGVyUmVnaW9uKiBlbmRSZWdpb24gPSBudWxscHRyOwotICAgIGlmICghZ2V0UmVnaW9uUmFuZ2VG
b3JCb3goYmxvY2ssIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pKQorICAgIFJlbmRlckZyYWdtZW50
Q29udGFpbmVyKiBzdGFydEZyYWdtZW50ID0gbnVsbHB0cjsKKyAgICBSZW5kZXJGcmFnbWVudENv
bnRhaW5lciogZW5kRnJhZ21lbnQgPSBudWxscHRyOworICAgIGlmICghZ2V0RnJhZ21lbnRSYW5n
ZUZvckJveChibG9jaywgc3RhcnRGcmFnbWVudCwgZW5kRnJhZ21lbnQpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBmb3IgKGF1dG8gaXRlciA9IG1fcmVnaW9uTGlzdC5maW5kKHN0YXJ0UmVnaW9u
KSwgZW5kID0gbV9yZWdpb25MaXN0LmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAg
ICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKml0ZXI7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBt
X2ZyYWdtZW50TGlzdC5maW5kKHN0YXJ0RnJhZ21lbnQpLCBlbmQgPSBtX2ZyYWdtZW50TGlzdC5l
bmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBSZW5kZXJGcmFnbWVudENvbnRh
aW5lciogZnJhZ21lbnQgPSAqaXRlcjsKIAotICAgICAgICBMYXlvdXRSZWN0IGJvcmRlckJveCA9
IGJsb2NrLT5ib3JkZXJCb3hSZWN0SW5SZWdpb24ocmVnaW9uKTsKLSAgICAgICAgYm9yZGVyQm94
ID0gcmVnaW9uLT5yZWN0Rmxvd1BvcnRpb25Gb3JCb3goYmxvY2ssIGJvcmRlckJveCk7CisgICAg
ICAgIExheW91dFJlY3QgYm9yZGVyQm94ID0gYmxvY2stPmJvcmRlckJveFJlY3RJbkZyYWdtZW50
KGZyYWdtZW50KTsKKyAgICAgICAgYm9yZGVyQm94ID0gZnJhZ21lbnQtPnJlY3RGbG93UG9ydGlv
bkZvckJveChibG9jaywgYm9yZGVyQm94KTsKIAogICAgICAgICBGbG9hdFJlY3QgaW5mbGF0ZWRS
ZWN0ID0gYm9yZGVyQm94OwogICAgICAgICBibG9jay0+dGhlbWUoKS5hZGp1c3RSZXBhaW50UmVj
dCgqYmxvY2ssIGluZmxhdGVkUmVjdCk7CiAKLSAgICAgICAgcmVnaW9uLT5hZGRWaXN1YWxPdmVy
Zmxvd0ZvckJveChibG9jaywgc25hcHBlZEludFJlY3QoTGF5b3V0UmVjdChpbmZsYXRlZFJlY3Qp
KSk7Ci0gICAgICAgIGlmIChyZWdpb24gPT0gZW5kUmVnaW9uKQorICAgICAgICBmcmFnbWVudC0+
YWRkVmlzdWFsT3ZlcmZsb3dGb3JCb3goYmxvY2ssIHNuYXBwZWRJbnRSZWN0KExheW91dFJlY3Qo
aW5mbGF0ZWRSZWN0KSkpOworICAgICAgICBpZiAoZnJhZ21lbnQgPT0gZW5kRnJhZ21lbnQpCiAg
ICAgICAgICAgICBicmVhazsKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyRmxvd1RocmVhZDo6YWRk
UmVnaW9uc092ZXJmbG93RnJvbUNoaWxkKGNvbnN0IFJlbmRlckJveCogYm94LCBjb25zdCBSZW5k
ZXJCb3gqIGNoaWxkLCBjb25zdCBMYXlvdXRTaXplJiBkZWx0YSkKK3ZvaWQgUmVuZGVyRmxvd1Ro
cmVhZDo6YWRkRnJhZ21lbnRzT3ZlcmZsb3dGcm9tQ2hpbGQoY29uc3QgUmVuZGVyQm94KiBib3gs
IGNvbnN0IFJlbmRlckJveCogY2hpbGQsIGNvbnN0IExheW91dFNpemUmIGRlbHRhKQogewotICAg
IFJlbmRlclJlZ2lvbiogc3RhcnRSZWdpb24gPSBudWxscHRyOwotICAgIFJlbmRlclJlZ2lvbiog
ZW5kUmVnaW9uID0gbnVsbHB0cjsKLSAgICBpZiAoIWdldFJlZ2lvblJhbmdlRm9yQm94KGNoaWxk
LCBzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKSkKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciog
c3RhcnRGcmFnbWVudCA9IG51bGxwdHI7CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGVu
ZEZyYWdtZW50ID0gbnVsbHB0cjsKKyAgICBpZiAoIWdldEZyYWdtZW50UmFuZ2VGb3JCb3goY2hp
bGQsIHN0YXJ0RnJhZ21lbnQsIGVuZEZyYWdtZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
UmVuZGVyUmVnaW9uKiBjb250YWluZXJTdGFydFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgUmVuZGVy
UmVnaW9uKiBjb250YWluZXJFbmRSZWdpb24gPSBudWxscHRyOwotICAgIGlmICghZ2V0UmVnaW9u
UmFuZ2VGb3JCb3goYm94LCBjb250YWluZXJTdGFydFJlZ2lvbiwgY29udGFpbmVyRW5kUmVnaW9u
KSkKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogY29udGFpbmVyU3RhcnRGcmFnbWVudCA9
IG51bGxwdHI7CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGNvbnRhaW5lckVuZEZyYWdt
ZW50ID0gbnVsbHB0cjsKKyAgICBpZiAoIWdldEZyYWdtZW50UmFuZ2VGb3JCb3goYm94LCBjb250
YWluZXJTdGFydEZyYWdtZW50LCBjb250YWluZXJFbmRGcmFnbWVudCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGZvciAoYXV0byBpdGVyID0gbV9yZWdpb25MaXN0LmZpbmQoc3RhcnRSZWdpb24p
LCBlbmQgPSBtX3JlZ2lvbkxpc3QuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAg
ICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSAqaXRlcjsKLSAgICAgICAgaWYgKCFyZWdpb25JblJh
bmdlKHJlZ2lvbiwgY29udGFpbmVyU3RhcnRSZWdpb24sIGNvbnRhaW5lckVuZFJlZ2lvbikpIHsK
LSAgICAgICAgICAgIGlmIChyZWdpb24gPT0gZW5kUmVnaW9uKQorICAgIGZvciAoYXV0byBpdGVy
ID0gbV9mcmFnbWVudExpc3QuZmluZChzdGFydEZyYWdtZW50KSwgZW5kID0gbV9mcmFnbWVudExp
c3QuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgUmVuZGVyRnJhZ21lbnRD
b250YWluZXIqIGZyYWdtZW50ID0gKml0ZXI7CisgICAgICAgIGlmICghZnJhZ21lbnRJblJhbmdl
KGZyYWdtZW50LCBjb250YWluZXJTdGFydEZyYWdtZW50LCBjb250YWluZXJFbmRGcmFnbWVudCkp
IHsKKyAgICAgICAgICAgIGlmIChmcmFnbWVudCA9PSBlbmRGcmFnbWVudCkKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAg
TGF5b3V0UmVjdCBjaGlsZExheW91dE92ZXJmbG93UmVjdCA9IHJlZ2lvbi0+bGF5b3V0T3ZlcmZs
b3dSZWN0Rm9yQm94Rm9yUHJvcGFnYXRpb24oY2hpbGQpOworICAgICAgICBMYXlvdXRSZWN0IGNo
aWxkTGF5b3V0T3ZlcmZsb3dSZWN0ID0gZnJhZ21lbnQtPmxheW91dE92ZXJmbG93UmVjdEZvckJv
eEZvclByb3BhZ2F0aW9uKGNoaWxkKTsKICAgICAgICAgY2hpbGRMYXlvdXRPdmVyZmxvd1JlY3Qu
bW92ZShkZWx0YSk7CiAgICAgICAgIAotICAgICAgICByZWdpb24tPmFkZExheW91dE92ZXJmbG93
Rm9yQm94KGJveCwgY2hpbGRMYXlvdXRPdmVyZmxvd1JlY3QpOworICAgICAgICBmcmFnbWVudC0+
YWRkTGF5b3V0T3ZlcmZsb3dGb3JCb3goYm94LCBjaGlsZExheW91dE92ZXJmbG93UmVjdCk7CiAK
ICAgICAgICAgaWYgKGNoaWxkLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpIHx8IGJveC0+aGFzT3Zl
cmZsb3dDbGlwKCkpIHsKLSAgICAgICAgICAgIGlmIChyZWdpb24gPT0gZW5kUmVnaW9uKQorICAg
ICAgICAgICAgaWYgKGZyYWdtZW50ID09IGVuZEZyYWdtZW50KQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgTGF5b3V0UmVj
dCBjaGlsZFZpc3VhbE92ZXJmbG93UmVjdCA9IHJlZ2lvbi0+dmlzdWFsT3ZlcmZsb3dSZWN0Rm9y
Qm94Rm9yUHJvcGFnYXRpb24oKmNoaWxkKTsKKyAgICAgICAgTGF5b3V0UmVjdCBjaGlsZFZpc3Vh
bE92ZXJmbG93UmVjdCA9IGZyYWdtZW50LT52aXN1YWxPdmVyZmxvd1JlY3RGb3JCb3hGb3JQcm9w
YWdhdGlvbigqY2hpbGQpOwogICAgICAgICBjaGlsZFZpc3VhbE92ZXJmbG93UmVjdC5tb3ZlKGRl
bHRhKTsKLSAgICAgICAgcmVnaW9uLT5hZGRWaXN1YWxPdmVyZmxvd0ZvckJveChib3gsIGNoaWxk
VmlzdWFsT3ZlcmZsb3dSZWN0KTsKKyAgICAgICAgZnJhZ21lbnQtPmFkZFZpc3VhbE92ZXJmbG93
Rm9yQm94KGJveCwgY2hpbGRWaXN1YWxPdmVyZmxvd1JlY3QpOwogCi0gICAgICAgIGlmIChyZWdp
b24gPT0gZW5kUmVnaW9uKQorICAgICAgICBpZiAoZnJhZ21lbnQgPT0gZW5kRnJhZ21lbnQpCiAg
ICAgICAgICAgICBicmVhazsKICAgICB9CiB9CiAgICAgCi12b2lkIFJlbmRlckZsb3dUaHJlYWQ6
OmFkZFJlZ2lvbnNMYXlvdXRPdmVyZmxvdyhjb25zdCBSZW5kZXJCb3gqIGJveCwgY29uc3QgTGF5
b3V0UmVjdCYgbGF5b3V0T3ZlcmZsb3cpCit2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmFkZEZyYWdt
ZW50c0xheW91dE92ZXJmbG93KGNvbnN0IFJlbmRlckJveCogYm94LCBjb25zdCBMYXlvdXRSZWN0
JiBsYXlvdXRPdmVyZmxvdykKIHsKLSAgICBSZW5kZXJSZWdpb24qIHN0YXJ0UmVnaW9uID0gbnVs
bHB0cjsKLSAgICBSZW5kZXJSZWdpb24qIGVuZFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgaWYgKCFn
ZXRSZWdpb25SYW5nZUZvckJveChib3gsIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pKQorICAgIFJl
bmRlckZyYWdtZW50Q29udGFpbmVyKiBzdGFydEZyYWdtZW50ID0gbnVsbHB0cjsKKyAgICBSZW5k
ZXJGcmFnbWVudENvbnRhaW5lciogZW5kRnJhZ21lbnQgPSBudWxscHRyOworICAgIGlmICghZ2V0
RnJhZ21lbnRSYW5nZUZvckJveChib3gsIHN0YXJ0RnJhZ21lbnQsIGVuZEZyYWdtZW50KSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChhdXRvIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuZmluZChz
dGFydFJlZ2lvbiksIGVuZCA9IG1fcmVnaW9uTGlzdC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRl
cikgewotICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICppdGVyOwotICAgICAgICBMYXlv
dXRSZWN0IGxheW91dE92ZXJmbG93SW5SZWdpb24gPSByZWdpb24tPnJlY3RGbG93UG9ydGlvbkZv
ckJveChib3gsIGxheW91dE92ZXJmbG93KTsKKyAgICBmb3IgKGF1dG8gaXRlciA9IG1fZnJhZ21l
bnRMaXN0LmZpbmQoc3RhcnRGcmFnbWVudCksIGVuZCA9IG1fZnJhZ21lbnRMaXN0LmVuZCgpOyBp
dGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBm
cmFnbWVudCA9ICppdGVyOworICAgICAgICBMYXlvdXRSZWN0IGxheW91dE92ZXJmbG93SW5GcmFn
bWVudCA9IGZyYWdtZW50LT5yZWN0Rmxvd1BvcnRpb25Gb3JCb3goYm94LCBsYXlvdXRPdmVyZmxv
dyk7CiAKLSAgICAgICAgcmVnaW9uLT5hZGRMYXlvdXRPdmVyZmxvd0ZvckJveChib3gsIGxheW91
dE92ZXJmbG93SW5SZWdpb24pOworICAgICAgICBmcmFnbWVudC0+YWRkTGF5b3V0T3ZlcmZsb3dG
b3JCb3goYm94LCBsYXlvdXRPdmVyZmxvd0luRnJhZ21lbnQpOwogCi0gICAgICAgIGlmIChyZWdp
b24gPT0gZW5kUmVnaW9uKQorICAgICAgICBpZiAoZnJhZ21lbnQgPT0gZW5kRnJhZ21lbnQpCiAg
ICAgICAgICAgICBicmVhazsKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyRmxvd1RocmVhZDo6YWRk
UmVnaW9uc1Zpc3VhbE92ZXJmbG93KGNvbnN0IFJlbmRlckJveCogYm94LCBjb25zdCBMYXlvdXRS
ZWN0JiB2aXN1YWxPdmVyZmxvdykKK3ZvaWQgUmVuZGVyRmxvd1RocmVhZDo6YWRkRnJhZ21lbnRz
VmlzdWFsT3ZlcmZsb3coY29uc3QgUmVuZGVyQm94KiBib3gsIGNvbnN0IExheW91dFJlY3QmIHZp
c3VhbE92ZXJmbG93KQogewotICAgIFJlbmRlclJlZ2lvbiogc3RhcnRSZWdpb24gPSBudWxscHRy
OwotICAgIFJlbmRlclJlZ2lvbiogZW5kUmVnaW9uID0gbnVsbHB0cjsKLSAgICBpZiAoIWdldFJl
Z2lvblJhbmdlRm9yQm94KGJveCwgc3RhcnRSZWdpb24sIGVuZFJlZ2lvbikpCisgICAgUmVuZGVy
RnJhZ21lbnRDb250YWluZXIqIHN0YXJ0RnJhZ21lbnQgPSBudWxscHRyOworICAgIFJlbmRlckZy
YWdtZW50Q29udGFpbmVyKiBlbmRGcmFnbWVudCA9IG51bGxwdHI7CisgICAgaWYgKCFnZXRGcmFn
bWVudFJhbmdlRm9yQm94KGJveCwgc3RhcnRGcmFnbWVudCwgZW5kRnJhZ21lbnQpKQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgZm9yIChSZW5kZXJSZWdpb25MaXN0OjppdGVyYXRvciBpdGVy
ID0gbV9yZWdpb25MaXN0LmZpbmQoc3RhcnRSZWdpb24pOyBpdGVyICE9IG1fcmVnaW9uTGlzdC5l
bmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKml0ZXI7Ci0g
ICAgICAgIExheW91dFJlY3QgdmlzdWFsT3ZlcmZsb3dJblJlZ2lvbiA9IHJlZ2lvbi0+cmVjdEZs
b3dQb3J0aW9uRm9yQm94KGJveCwgdmlzdWFsT3ZlcmZsb3cpOworICAgIGZvciAoUmVuZGVyRnJh
Z21lbnRDb250YWluZXJMaXN0OjppdGVyYXRvciBpdGVyID0gbV9mcmFnbWVudExpc3QuZmluZChz
dGFydEZyYWdtZW50KTsgaXRlciAhPSBtX2ZyYWdtZW50TGlzdC5lbmQoKTsgKytpdGVyKSB7Cisg
ICAgICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCA9ICppdGVyOworICAgICAg
ICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93SW5GcmFnbWVudCA9IGZyYWdtZW50LT5yZWN0Rmxv
d1BvcnRpb25Gb3JCb3goYm94LCB2aXN1YWxPdmVyZmxvdyk7CiAgICAgICAgIAotICAgICAgICBy
ZWdpb24tPmFkZFZpc3VhbE92ZXJmbG93Rm9yQm94KGJveCwgdmlzdWFsT3ZlcmZsb3dJblJlZ2lv
bik7CisgICAgICAgIGZyYWdtZW50LT5hZGRWaXN1YWxPdmVyZmxvd0ZvckJveChib3gsIHZpc3Vh
bE92ZXJmbG93SW5GcmFnbWVudCk7CiAgICAgICAgIAotICAgICAgICBpZiAocmVnaW9uID09IGVu
ZFJlZ2lvbikKKyAgICAgICAgaWYgKGZyYWdtZW50ID09IGVuZEZyYWdtZW50KQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgfQogfQogCi12b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmNsZWFyUmVnaW9u
c092ZXJmbG93KGNvbnN0IFJlbmRlckJveCogYm94KQordm9pZCBSZW5kZXJGbG93VGhyZWFkOjpj
bGVhckZyYWdtZW50c092ZXJmbG93KGNvbnN0IFJlbmRlckJveCogYm94KQogewotICAgIFJlbmRl
clJlZ2lvbiogc3RhcnRSZWdpb24gPSBudWxscHRyOwotICAgIFJlbmRlclJlZ2lvbiogZW5kUmVn
aW9uID0gbnVsbHB0cjsKLSAgICBpZiAoIWdldFJlZ2lvblJhbmdlRm9yQm94KGJveCwgc3RhcnRS
ZWdpb24sIGVuZFJlZ2lvbikpCisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIHN0YXJ0RnJh
Z21lbnQgPSBudWxscHRyOworICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBlbmRGcmFnbWVu
dCA9IG51bGxwdHI7CisgICAgaWYgKCFnZXRGcmFnbWVudFJhbmdlRm9yQm94KGJveCwgc3RhcnRG
cmFnbWVudCwgZW5kRnJhZ21lbnQpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8g
aXRlciA9IG1fcmVnaW9uTGlzdC5maW5kKHN0YXJ0UmVnaW9uKSwgZW5kID0gbV9yZWdpb25MaXN0
LmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIFJlbmRlclJlZ2lvbiogcmVn
aW9uID0gKml0ZXI7Ci0gICAgICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGJveEluZm8gPSByZWdp
b24tPnJlbmRlckJveFJlZ2lvbkluZm8oYm94KTsKKyAgICBmb3IgKGF1dG8gaXRlciA9IG1fZnJh
Z21lbnRMaXN0LmZpbmQoc3RhcnRGcmFnbWVudCksIGVuZCA9IG1fZnJhZ21lbnRMaXN0LmVuZCgp
OyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVy
KiBmcmFnbWVudCA9ICppdGVyOworICAgICAgICBSZW5kZXJCb3hGcmFnbWVudEluZm8qIGJveElu
Zm8gPSBmcmFnbWVudC0+cmVuZGVyQm94RnJhZ21lbnRJbmZvKGJveCk7CiAgICAgICAgIGlmIChi
b3hJbmZvICYmIGJveEluZm8tPm92ZXJmbG93KCkpCiAgICAgICAgICAgICBib3hJbmZvLT5jbGVh
ck92ZXJmbG93KCk7CiAKLSAgICAgICAgaWYgKHJlZ2lvbiA9PSBlbmRSZWdpb24pCisgICAgICAg
IGlmIChmcmFnbWVudCA9PSBlbmRGcmFnbWVudCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0K
IH0KIAotUmVuZGVyUmVnaW9uKiBSZW5kZXJGbG93VGhyZWFkOjpjdXJyZW50UmVnaW9uKCkgY29u
c3QKK1JlbmRlckZyYWdtZW50Q29udGFpbmVyKiBSZW5kZXJGbG93VGhyZWFkOjpjdXJyZW50RnJh
Z21lbnQoKSBjb25zdAogewotICAgIHJldHVybiBtX2N1cnJlbnRSZWdpb25NYWludGFpbmVyID8g
Jm1fY3VycmVudFJlZ2lvbk1haW50YWluZXItPnJlZ2lvbigpIDogbnVsbHB0cjsKKyAgICByZXR1
cm4gbV9jdXJyZW50RnJhZ21lbnRNYWludGFpbmVyID8gJm1fY3VycmVudEZyYWdtZW50TWFpbnRh
aW5lci0+ZnJhZ21lbnQoKSA6IG51bGxwdHI7CiB9CiAKLUNvbnRhaW5pbmdSZWdpb25NYXAmIFJl
bmRlckZsb3dUaHJlYWQ6OmNvbnRhaW5pbmdSZWdpb25NYXAoKQorQ29udGFpbmluZ0ZyYWdtZW50
TWFwJiBSZW5kZXJGbG93VGhyZWFkOjpjb250YWluaW5nRnJhZ21lbnRNYXAoKQogewotICAgIGlm
ICghbV9saW5lVG9SZWdpb25NYXApCi0gICAgICAgIG1fbGluZVRvUmVnaW9uTWFwID0gc3RkOjpt
YWtlX3VuaXF1ZTxDb250YWluaW5nUmVnaW9uTWFwPigpOworICAgIGlmICghbV9saW5lVG9GcmFn
bWVudE1hcCkKKyAgICAgICAgbV9saW5lVG9GcmFnbWVudE1hcCA9IHN0ZDo6bWFrZV91bmlxdWU8
Q29udGFpbmluZ0ZyYWdtZW50TWFwPigpOwogCi0gICAgcmV0dXJuICptX2xpbmVUb1JlZ2lvbk1h
cC5nZXQoKTsKKyAgICByZXR1cm4gKm1fbGluZVRvRnJhZ21lbnRNYXAuZ2V0KCk7CiB9CiAKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCShyZXZp
c2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVh
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwyMCArMzUsMjAgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBDdXJyZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lcjsKK2NsYXNzIEN1cnJl
bnRSZW5kZXJGcmFnbWVudENvbnRhaW5lck1haW50YWluZXI7CiBjbGFzcyBSZW5kZXJGbG93VGhy
ZWFkOwogY2xhc3MgUmVuZGVyU3R5bGU7Ci1jbGFzcyBSZW5kZXJSZWdpb247CitjbGFzcyBSZW5k
ZXJGcmFnbWVudENvbnRhaW5lcjsKIGNsYXNzIFJvb3RJbmxpbmVCb3g7CiAKLXR5cGVkZWYgTGlz
dEhhc2hTZXQ8UmVuZGVyUmVnaW9uKj4gUmVuZGVyUmVnaW9uTGlzdDsKK3R5cGVkZWYgTGlzdEhh
c2hTZXQ8UmVuZGVyRnJhZ21lbnRDb250YWluZXIqPiBSZW5kZXJGcmFnbWVudENvbnRhaW5lckxp
c3Q7CiB0eXBlZGVmIFZlY3RvcjxSZW5kZXJMYXllcio+IFJlbmRlckxheWVyTGlzdDsKLXR5cGVk
ZWYgSGFzaE1hcDxjb25zdCBSb290SW5saW5lQm94KiwgUmVuZGVyUmVnaW9uKj4gQ29udGFpbmlu
Z1JlZ2lvbk1hcDsKK3R5cGVkZWYgSGFzaE1hcDxjb25zdCBSb290SW5saW5lQm94KiwgUmVuZGVy
RnJhZ21lbnRDb250YWluZXIqPiBDb250YWluaW5nRnJhZ21lbnRNYXA7CiAKIC8vIFJlbmRlckZs
b3dUaHJlYWQgaXMgdXNlZCB0byBjb2xsZWN0IGFsbCB0aGUgcmVuZGVyIG9iamVjdHMgdGhhdCBw
YXJ0aWNpcGF0ZSBpbiBhCiAvLyBmbG93IHRocmVhZC4gSXQgd2lsbCBhbHNvIGhlbHAgaW4gZG9p
bmcgdGhlIGxheW91dC4gSG93ZXZlciwgaXQgd2lsbCBub3QgcmVuZGVyCi0vLyBkaXJlY3RseSB0
byBzY3JlZW4uIEluc3RlYWQsIFJlbmRlclJlZ2lvbiBvYmplY3RzIHdpbGwgcmVkaXJlY3QgdGhl
aXIgcGFpbnQgCi0vLyBhbmQgbm9kZUF0UG9pbnQgbWV0aG9kcyB0byB0aGlzIG9iamVjdC4gRWFj
aCBSZW5kZXJSZWdpb24gd2lsbCBhY3R1YWxseSBiZSBhIHZpZXdQb3J0CisvLyBkaXJlY3RseSB0
byBzY3JlZW4uIEluc3RlYWQsIFJlbmRlckZyYWdtZW50Q29udGFpbmVyIG9iamVjdHMgd2lsbCBy
ZWRpcmVjdCB0aGVpciBwYWludCAKKy8vIGFuZCBub2RlQXRQb2ludCBtZXRob2RzIHRvIHRoaXMg
b2JqZWN0LiBFYWNoIFJlbmRlckZyYWdtZW50Q29udGFpbmVyIHdpbGwgYWN0dWFsbHkgYmUgYSB2
aWV3UG9ydAogLy8gb2YgdGhlIFJlbmRlckZsb3dUaHJlYWQuCiAKIGNsYXNzIFJlbmRlckZsb3dU
aHJlYWQ6IHB1YmxpYyBSZW5kZXJCbG9ja0Zsb3cgewpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRmxvd0NoaWxkSW5mbyhSZW5kZXJFbGVtZW50Jik7
CiAjaWZuZGVmIE5ERUJVRwotICAgIGJvb2wgaGFzQ2hpbGRJbmZvKFJlbmRlck9iamVjdCogY2hp
bGQpIGNvbnN0IHsgcmV0dXJuIGlzPFJlbmRlckJveD4oY2hpbGQpICYmIG1fcmVnaW9uUmFuZ2VN
YXAuY29udGFpbnMoZG93bmNhc3Q8UmVuZGVyQm94PihjaGlsZCkpOyB9CisgICAgYm9vbCBoYXND
aGlsZEluZm8oUmVuZGVyT2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gaXM8UmVuZGVyQm94
PihjaGlsZCkgJiYgbV9mcmFnbWVudFJhbmdlTWFwLmNvbnRhaW5zKGRvd25jYXN0PFJlbmRlckJv
eD4oY2hpbGQpKTsgfQogI2VuZGlmCiAKICNpZiAhQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT05fRElTQUJMRUQKQEAgLTY2LDIxICs2NiwyMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9p
ZCBkZWxldGVMaW5lcygpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkZFJlZ2lvblRv
VGhyZWFkKFJlbmRlclJlZ2lvbiopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlUmVnaW9u
RnJvbVRocmVhZChSZW5kZXJSZWdpb24qKTsKLSAgICBjb25zdCBSZW5kZXJSZWdpb25MaXN0JiBy
ZW5kZXJSZWdpb25MaXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWdpb25MaXN0OyB9CisgICAgdmly
dHVhbCB2b2lkIGFkZEZyYWdtZW50VG9UaHJlYWQoUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyYWdtZW50RnJvbVRocmVhZChSZW5kZXJGcmFn
bWVudENvbnRhaW5lciopOworICAgIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyTGlzdCYg
cmVuZGVyRnJhZ21lbnRDb250YWluZXJMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFnbWVudExp
c3Q7IH0KIAogICAgIHZvaWQgdXBkYXRlTG9naWNhbFdpZHRoKCkgZmluYWw7CiAgICAgTG9naWNh
bEV4dGVudENvbXB1dGVkVmFsdWVzIGNvbXB1dGVMb2dpY2FsSGVpZ2h0KExheW91dFVuaXQgbG9n
aWNhbEhlaWdodCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlOwogCi0gICAg
Ym9vbCBoYXNSZWdpb25zKCkgY29uc3QgeyByZXR1cm4gbV9yZWdpb25MaXN0LnNpemUoKTsgfQot
ICAgIHZpcnR1YWwgdm9pZCByZWdpb25DaGFuZ2VkV3JpdGluZ01vZGUoUmVuZGVyUmVnaW9uKikg
eyB9CisgICAgYm9vbCBoYXNGcmFnbWVudHMoKSBjb25zdCB7IHJldHVybiBtX2ZyYWdtZW50TGlz
dC5zaXplKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZnJhZ21lbnRDaGFuZ2VkV3JpdGluZ01vZGUo
UmVuZGVyRnJhZ21lbnRDb250YWluZXIqKSB7IH0KIAotICAgIHZvaWQgdmFsaWRhdGVSZWdpb25z
KCk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlUmVnaW9ucyhNYXJraW5nQmVoYXZpb3IgPSBNYXJrQ29u
dGFpbmluZ0Jsb2NrQ2hhaW4pOwotICAgIGJvb2wgaGFzVmFsaWRSZWdpb25JbmZvKCkgY29uc3Qg
eyByZXR1cm4gIW1fcmVnaW9uc0ludmFsaWRhdGVkICYmICFtX3JlZ2lvbkxpc3QuaXNFbXB0eSgp
OyB9CisgICAgdm9pZCB2YWxpZGF0ZUZyYWdtZW50cygpOworICAgIHZvaWQgaW52YWxpZGF0ZUZy
YWdtZW50cyhNYXJraW5nQmVoYXZpb3IgPSBNYXJrQ29udGFpbmluZ0Jsb2NrQ2hhaW4pOworICAg
IGJvb2wgaGFzVmFsaWRGcmFnbWVudEluZm8oKSBjb25zdCB7IHJldHVybiAhbV9mcmFnbWVudHNJ
bnZhbGlkYXRlZCAmJiAhbV9mcmFnbWVudExpc3QuaXNFbXB0eSgpOyB9CiAKICAgICAvLyBTb21l
IHJlbmRlcmVycyAoY29sdW1uIHNwYW5uZXJzKSBhcmUgbW92ZWQgb3V0IG9mIHRoZSBmbG93IHRo
cmVhZCB0byBsaXZlIGFtb25nIGNvbHVtbgogICAgIC8vIHNldHMuIElmIHxjaGlsZHwgaXMgc3Vj
aCBhIHJlbmRlcmVyLCByZXNvbHZlIGl0IHRvIHRoZSBwbGFjZWhvbGRlciB0aGF0IGxpdmVzIGF0
IHRoZSBvcmlnaW5hbApAQCAtOTcsNyArOTcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0eWxl
RGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBv
dmVycmlkZTsKIAotICAgIHZvaWQgcmVwYWludFJlY3RhbmdsZUluUmVnaW9ucyhjb25zdCBMYXlv
dXRSZWN0JikgY29uc3Q7CisgICAgdm9pZCByZXBhaW50UmVjdGFuZ2xlSW5GcmFnbWVudHMoY29u
c3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogICAgIAogICAgIExheW91dFBvaW50IGFkanVzdGVkUG9z
aXRpb25SZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0Jiwg
Y29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKIApAQCAtMTA5LDM2ICsxMDksMzYgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlQnJlYWsoY29uc3QgUmVuZGVyQmxvY2sqLCBMYXlv
dXRVbml0IC8qb2Zmc2V0Ki8sIExheW91dFVuaXQgLypzcGFjZVNob3J0YWdlKi8pIHsgfQogICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVNaW5pbXVtUGFnZUhlaWdodChjb25zdCBSZW5kZXJCbG9jayos
IExheW91dFVuaXQgLypvZmZzZXQqLywgTGF5b3V0VW5pdCAvKm1pbkhlaWdodCovKSB7IH0KIAot
ICAgIHZpcnR1YWwgUmVuZGVyUmVnaW9uKiByZWdpb25BdEJsb2NrT2Zmc2V0KGNvbnN0IFJlbmRl
ckJveCosIExheW91dFVuaXQsIGJvb2wgZXh0ZW5kTGFzdFJlZ2lvbiA9IGZhbHNlKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudEF0QmxvY2tPZmZz
ZXQoY29uc3QgUmVuZGVyQm94KiwgTGF5b3V0VW5pdCwgYm9vbCBleHRlbmRMYXN0RnJhZ21lbnQg
PSBmYWxzZSkgY29uc3Q7CiAKLSAgICBib29sIHJlZ2lvbnNIYXZlVW5pZm9ybUxvZ2ljYWxXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaW9uc0hhdmVVbmlmb3JtTG9naWNhbFdpZHRoOyB9Ci0g
ICAgYm9vbCByZWdpb25zSGF2ZVVuaWZvcm1Mb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4g
bV9yZWdpb25zSGF2ZVVuaWZvcm1Mb2dpY2FsSGVpZ2h0OyB9CisgICAgYm9vbCBmcmFnbWVudHNI
YXZlVW5pZm9ybUxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhZ21lbnRzSGF2ZVVu
aWZvcm1Mb2dpY2FsV2lkdGg7IH0KKyAgICBib29sIGZyYWdtZW50c0hhdmVVbmlmb3JtTG9naWNh
bEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhZ21lbnRzSGF2ZVVuaWZvcm1Mb2dpY2FsSGVp
Z2h0OyB9CiAKLSAgICB2aXJ0dWFsIFJlbmRlclJlZ2lvbiogbWFwRnJvbUZsb3dUb1JlZ2lvbihU
cmFuc2Zvcm1TdGF0ZSYpIGNvbnN0OworICAgIHZpcnR1YWwgUmVuZGVyRnJhZ21lbnRDb250YWlu
ZXIqIG1hcEZyb21GbG93VG9GcmFnbWVudChUcmFuc2Zvcm1TdGF0ZSYpIGNvbnN0OwogCi0gICAg
dm9pZCBsb2dpY2FsV2lkdGhDaGFuZ2VkSW5SZWdpb25zRm9yQmxvY2soY29uc3QgUmVuZGVyQmxv
Y2sqLCBib29sJik7CisgICAgdm9pZCBsb2dpY2FsV2lkdGhDaGFuZ2VkSW5GcmFnbWVudHNGb3JC
bG9jayhjb25zdCBSZW5kZXJCbG9jayosIGJvb2wmKTsKIAotICAgIExheW91dFVuaXQgY29udGVu
dExvZ2ljYWxXaWR0aE9mRmlyc3RSZWdpb24oKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGNvbnRl
bnRMb2dpY2FsSGVpZ2h0T2ZGaXJzdFJlZ2lvbigpIGNvbnN0OwotICAgIExheW91dFVuaXQgY29u
dGVudExvZ2ljYWxMZWZ0T2ZGaXJzdFJlZ2lvbigpIGNvbnN0OworICAgIExheW91dFVuaXQgY29u
dGVudExvZ2ljYWxXaWR0aE9mRmlyc3RGcmFnbWVudCgpIGNvbnN0OworICAgIExheW91dFVuaXQg
Y29udGVudExvZ2ljYWxIZWlnaHRPZkZpcnN0RnJhZ21lbnQoKSBjb25zdDsKKyAgICBMYXlvdXRV
bml0IGNvbnRlbnRMb2dpY2FsTGVmdE9mRmlyc3RGcmFnbWVudCgpIGNvbnN0OwogICAgIAotICAg
IFJlbmRlclJlZ2lvbiogZmlyc3RSZWdpb24oKSBjb25zdDsKLSAgICBSZW5kZXJSZWdpb24qIGxh
c3RSZWdpb24oKSBjb25zdDsKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZmlyc3RGcmFn
bWVudCgpIGNvbnN0OworICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBsYXN0RnJhZ21lbnQo
KSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRSZWdpb25SYW5nZUZvckJveChjb25zdCBS
ZW5kZXJCb3gmLCBSZW5kZXJSZWdpb24qLCBSZW5kZXJSZWdpb24qKTsKLSAgICBib29sIGdldFJl
Z2lvblJhbmdlRm9yQm94KGNvbnN0IFJlbmRlckJveCosIFJlbmRlclJlZ2lvbiomIHN0YXJ0UmVn
aW9uLCBSZW5kZXJSZWdpb24qJiBlbmRSZWdpb24pIGNvbnN0OwotICAgIGJvb2wgY29tcHV0ZWRS
ZWdpb25SYW5nZUZvckJveChjb25zdCBSZW5kZXJCb3gqLCBSZW5kZXJSZWdpb24qJiBzdGFydFJl
Z2lvbiwgUmVuZGVyUmVnaW9uKiYgZW5kUmVnaW9uKSBjb25zdDsKLSAgICBib29sIGhhc0NhY2hl
ZFJlZ2lvblJhbmdlRm9yQm94KGNvbnN0IFJlbmRlckJveCYpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBzZXRGcmFnbWVudFJhbmdlRm9yQm94KGNvbnN0IFJlbmRlckJveCYsIFJlbmRlckZyYWdt
ZW50Q29udGFpbmVyKiwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKTsKKyAgICBib29sIGdldEZy
YWdtZW50UmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQm94KiwgUmVuZGVyRnJhZ21lbnRDb250YWlu
ZXIqJiBzdGFydEZyYWdtZW50LCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciomIGVuZEZyYWdtZW50
KSBjb25zdDsKKyAgICBib29sIGNvbXB1dGVkRnJhZ21lbnRSYW5nZUZvckJveChjb25zdCBSZW5k
ZXJCb3gqLCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciomIHN0YXJ0RnJhZ21lbnQsIFJlbmRlckZy
YWdtZW50Q29udGFpbmVyKiYgZW5kRnJhZ21lbnQpIGNvbnN0OworICAgIGJvb2wgaGFzQ2FjaGVk
RnJhZ21lbnRSYW5nZUZvckJveChjb25zdCBSZW5kZXJCb3gmKSBjb25zdDsKIAotICAgIC8vIENo
ZWNrIGlmIHRoZSBvYmplY3QgaXMgaW4gcmVnaW9uIGFuZCB0aGUgcmVnaW9uIGlzIHBhcnQgb2Yg
dGhpcyBmbG93IHRocmVhZC4KLSAgICBib29sIG9iamVjdEluRmxvd1JlZ2lvbihjb25zdCBSZW5k
ZXJPYmplY3QqLCBjb25zdCBSZW5kZXJSZWdpb24qKSBjb25zdDsKKyAgICAvLyBDaGVjayBpZiB0
aGUgb2JqZWN0IGlzIGluIGZyYWdtZW50IGFuZCB0aGUgZnJhZ21lbnQgaXMgcGFydCBvZiB0aGlz
IGZsb3cgdGhyZWFkLgorICAgIGJvb2wgb2JqZWN0SW5GbG93RnJhZ21lbnQoY29uc3QgUmVuZGVy
T2JqZWN0KiwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKSBjb25zdDsKICAgICAKLSAg
ICAvLyBDaGVjayBpZiB0aGUgb2JqZWN0IHNob3VsZCBiZSBwYWludGVkIGluIHRoaXMgcmVnaW9u
IGFuZCBpZiB0aGUgcmVnaW9uIGlzIHBhcnQgb2YgdGhpcyBmbG93IHRocmVhZC4KLSAgICBib29s
IG9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKGNvbnN0IFJlbmRlck9iamVjdCosIGNv
bnN0IFJlbmRlclJlZ2lvbiopIGNvbnN0OworICAgIC8vIENoZWNrIGlmIHRoZSBvYmplY3Qgc2hv
dWxkIGJlIHBhaW50ZWQgaW4gdGhpcyBmcmFnbWVudCBhbmQgaWYgdGhlIGZyYWdtZW50IGlzIHBh
cnQgb2YgdGhpcyBmbG93IHRocmVhZC4KKyAgICBib29sIG9iamVjdFNob3VsZEZyYWdtZW50SW5G
bG93RnJhZ21lbnQoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250
YWluZXIqKSBjb25zdDsKIAotICAgIHZvaWQgbWFya1JlZ2lvbnNGb3JPdmVyZmxvd0xheW91dElm
TmVlZGVkKCk7CisgICAgdm9pZCBtYXJrRnJhZ21lbnRzRm9yT3ZlcmZsb3dMYXlvdXRJZk5lZWRl
ZCgpOwogCi0gICAgdmlydHVhbCBib29sIGFkZEZvcmNlZFJlZ2lvbkJyZWFrKGNvbnN0IFJlbmRl
ckJsb2NrKiwgTGF5b3V0VW5pdCwgUmVuZGVyQm94KiBicmVha0NoaWxkLCBib29sIGlzQmVmb3Jl
LCBMYXlvdXRVbml0KiBvZmZzZXRCcmVha0FkanVzdG1lbnQgPSAwKTsKKyAgICB2aXJ0dWFsIGJv
b2wgYWRkRm9yY2VkRnJhZ21lbnRCcmVhayhjb25zdCBSZW5kZXJCbG9jayosIExheW91dFVuaXQs
IFJlbmRlckJveCogYnJlYWtDaGlsZCwgYm9vbCBpc0JlZm9yZSwgTGF5b3V0VW5pdCogb2Zmc2V0
QnJlYWtBZGp1c3RtZW50ID0gMCk7CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5QnJlYWtBZnRlckNv
bnRlbnQoTGF5b3V0VW5pdCkgeyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNQYWdlTG9naWNhbEhl
aWdodEtub3duKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMTQ3LDE1ICsxNDcsMTUgQEAg
cHVibGljOgogICAgIHZvaWQgY29sbGVjdExheWVyRnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiwg
Y29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZGluZ0JveCwgY29uc3QgTGF5b3V0UmVjdCYgZGly
dHlSZWN0KTsKICAgICBMYXlvdXRSZWN0IGZyYWdtZW50c0JvdW5kaW5nQm94KGNvbnN0IExheW91
dFJlY3QmIGxheWVyQm91bmRpbmdCb3gpOwogCi0gICAgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9n
aWNhbFRvcE9mRmlyc3RSZWdpb24oY29uc3QgUmVuZGVyQmxvY2sqKSBjb25zdDsKLSAgICB2b2lk
IGNsZWFyUmVuZGVyQm94UmVnaW9uSW5mb0FuZEN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlckJveCYs
IGNvbnN0IFJlbmRlclJlZ2lvbiosIGNvbnN0IFJlbmRlclJlZ2lvbiosIGNvbnN0IFJlbmRlclJl
Z2lvbiosIGNvbnN0IFJlbmRlclJlZ2lvbiopOworICAgIExheW91dFVuaXQgb2Zmc2V0RnJvbUxv
Z2ljYWxUb3BPZkZpcnN0RnJhZ21lbnQoY29uc3QgUmVuZGVyQmxvY2sqKSBjb25zdDsKKyAgICB2
b2lkIGNsZWFyUmVuZGVyQm94RnJhZ21lbnRJbmZvQW5kQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVy
Qm94JiwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqLCBjb25zdCBSZW5kZXJGcmFnbWVu
dENvbnRhaW5lciosIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiwgY29uc3QgUmVuZGVy
RnJhZ21lbnRDb250YWluZXIqKTsKIAotICAgIHZvaWQgYWRkUmVnaW9uc1Zpc3VhbEVmZmVjdE92
ZXJmbG93KGNvbnN0IFJlbmRlckJveCopOwotICAgIHZvaWQgYWRkUmVnaW9uc1Zpc3VhbE92ZXJm
bG93RnJvbVRoZW1lKGNvbnN0IFJlbmRlckJsb2NrKik7Ci0gICAgdm9pZCBhZGRSZWdpb25zT3Zl
cmZsb3dGcm9tQ2hpbGQoY29uc3QgUmVuZGVyQm94KiwgY29uc3QgUmVuZGVyQm94KiwgY29uc3Qg
TGF5b3V0U2l6ZSYpOwotICAgIHZvaWQgYWRkUmVnaW9uc0xheW91dE92ZXJmbG93KGNvbnN0IFJl
bmRlckJveCosIGNvbnN0IExheW91dFJlY3QmKTsKLSAgICB2b2lkIGFkZFJlZ2lvbnNWaXN1YWxP
dmVyZmxvdyhjb25zdCBSZW5kZXJCb3gqLCBjb25zdCBMYXlvdXRSZWN0Jik7Ci0gICAgdm9pZCBj
bGVhclJlZ2lvbnNPdmVyZmxvdyhjb25zdCBSZW5kZXJCb3gqKTsKKyAgICB2b2lkIGFkZEZyYWdt
ZW50c1Zpc3VhbEVmZmVjdE92ZXJmbG93KGNvbnN0IFJlbmRlckJveCopOworICAgIHZvaWQgYWRk
RnJhZ21lbnRzVmlzdWFsT3ZlcmZsb3dGcm9tVGhlbWUoY29uc3QgUmVuZGVyQmxvY2sqKTsKKyAg
ICB2b2lkIGFkZEZyYWdtZW50c092ZXJmbG93RnJvbUNoaWxkKGNvbnN0IFJlbmRlckJveCosIGNv
bnN0IFJlbmRlckJveCosIGNvbnN0IExheW91dFNpemUmKTsKKyAgICB2b2lkIGFkZEZyYWdtZW50
c0xheW91dE92ZXJmbG93KGNvbnN0IFJlbmRlckJveCosIGNvbnN0IExheW91dFJlY3QmKTsKKyAg
ICB2b2lkIGFkZEZyYWdtZW50c1Zpc3VhbE92ZXJmbG93KGNvbnN0IFJlbmRlckJveCosIGNvbnN0
IExheW91dFJlY3QmKTsKKyAgICB2b2lkIGNsZWFyRnJhZ21lbnRzT3ZlcmZsb3coY29uc3QgUmVu
ZGVyQm94Kik7CiAKICAgICBMYXlvdXRSZWN0IG1hcEZyb21GbG93VGhyZWFkVG9Mb2NhbChjb25z
dCBSZW5kZXJCb3gqLCBjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAgICAgTGF5b3V0UmVjdCBt
YXBGcm9tTG9jYWxUb0Zsb3dUaHJlYWQoY29uc3QgUmVuZGVyQm94KiwgY29uc3QgTGF5b3V0UmVj
dCYpIGNvbnN0OwpAQCAtMTY1LDIwICsxNjUsMjAgQEAgcHVibGljOgogICAgIC8vIFVzZWQgdG8g
ZXN0aW1hdGUgdGhlIG1heGltdW0gaGVpZ2h0IG9mIHRoZSBmbG93IHRocmVhZC4KICAgICBzdGF0
aWMgTGF5b3V0VW5pdCBtYXhMb2dpY2FsSGVpZ2h0KCkgeyByZXR1cm4gTGF5b3V0VW5pdDo6bWF4
KCkgLyAyOyB9CiAKLSAgICBib29sIHJlZ2lvbkluUmFuZ2UoY29uc3QgUmVuZGVyUmVnaW9uKiB0
YXJnZXRSZWdpb24sIGNvbnN0IFJlbmRlclJlZ2lvbiogc3RhcnRSZWdpb24sIGNvbnN0IFJlbmRl
clJlZ2lvbiogZW5kUmVnaW9uKSBjb25zdDsKKyAgICBib29sIGZyYWdtZW50SW5SYW5nZShjb25z
dCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogdGFyZ2V0RnJhZ21lbnQsIGNvbnN0IFJlbmRlckZy
YWdtZW50Q29udGFpbmVyKiBzdGFydEZyYWdtZW50LCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRh
aW5lciogZW5kRnJhZ21lbnQpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGFic29sdXRlUXVh
ZHNGb3JCb3goVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sKiwgY29uc3QgUmVuZGVyQm94KiwgZmxv
YXQsIGZsb2F0KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdm9pZCBsYXlvdXQoKSBv
dmVycmlkZTsKIAotICAgIHZvaWQgc2V0Q3VycmVudFJlZ2lvbk1haW50YWluZXIoQ3VycmVudFJl
bmRlclJlZ2lvbk1haW50YWluZXIqIGN1cnJlbnRSZWdpb25NYWludGFpbmVyKSB7IG1fY3VycmVu
dFJlZ2lvbk1haW50YWluZXIgPSBjdXJyZW50UmVnaW9uTWFpbnRhaW5lcjsgfQotICAgIFJlbmRl
clJlZ2lvbiogY3VycmVudFJlZ2lvbigpIGNvbnN0OworICAgIHZvaWQgc2V0Q3VycmVudEZyYWdt
ZW50TWFpbnRhaW5lcihDdXJyZW50UmVuZGVyRnJhZ21lbnRDb250YWluZXJNYWludGFpbmVyKiBj
dXJyZW50RnJhZ21lbnRNYWludGFpbmVyKSB7IG1fY3VycmVudEZyYWdtZW50TWFpbnRhaW5lciA9
IGN1cnJlbnRGcmFnbWVudE1haW50YWluZXI7IH0KKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5l
ciogY3VycmVudEZyYWdtZW50KCkgY29uc3Q7CiAKLSAgICBDb250YWluaW5nUmVnaW9uTWFwJiBj
b250YWluaW5nUmVnaW9uTWFwKCk7CisgICAgQ29udGFpbmluZ0ZyYWdtZW50TWFwJiBjb250YWlu
aW5nRnJhZ21lbnRNYXAoKTsKIAogICAgIGJvb2wgY2FjaGVkRmxvd1RocmVhZENvbnRhaW5pbmdC
bG9ja05lZWRzVXBkYXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAotICAg
IC8vIEZJWE1FOiBFdmVudHVhbGx5IGFzIGNvbHVtbiBhbmQgcmVnaW9uIGZsb3cgdGhyZWFkcyBz
dGFydCBuZXN0aW5nLCB0aGlzIG1heSBlbmQgdXAgY2hhbmdpbmcuCisgICAgLy8gRklYTUU6IEV2
ZW50dWFsbHkgYXMgY29sdW1uIGFuZCBmcmFnbWVudCBmbG93IHRocmVhZHMgc3RhcnQgbmVzdGlu
ZywgdGhpcyBtYXkgZW5kIHVwIGNoYW5naW5nLgogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDaGVj
a0NvbHVtbkJyZWFrcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKIHByaXZhdGU6CkBAIC0x
OTQsNjAgKzE5NCw2MCBAQCBwcm90ZWN0ZWQ6CiAgICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgp
IGNvbnN0IG92ZXJyaWRlID0gMDsKIAogICAgIC8vIE92ZXJyaWRkZW4gYnkgY29sdW1ucy9wYWdl
cyB0byBzZXQgdXAgYW4gaW5pdGlhbCBsb2dpY2FsIHdpZHRoIG9mIHRoZSBwYWdlIHdpZHRoIGV2
ZW4gd2hlbgotICAgIC8vIG5vIHJlZ2lvbnMgaGF2ZSBiZWVuIGdlbmVyYXRlZCB5ZXQuCisgICAg
Ly8gbm8gZnJhZ21lbnRzIGhhdmUgYmVlbiBnZW5lcmF0ZWQgeWV0LgogICAgIHZpcnR1YWwgTGF5
b3V0VW5pdCBpbml0aWFsTG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gMDsgfTsKICAgICAK
LSAgICB2b2lkIGNsZWFyTGluZXNUb1JlZ2lvbk1hcCgpOworICAgIHZvaWQgY2xlYXJMaW5lc1Rv
RnJhZ21lbnRNYXAoKTsKICAgICB2b2lkIHdpbGxCZURlc3Ryb3llZCgpIG92ZXJyaWRlOwogCiAg
ICAgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIFRyYW5zZm9ybVN0YXRlJiwgTWFwQ29vcmRpbmF0ZXNGbGFncywg
Ym9vbCogd2FzRml4ZWQpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCB1cGRhdGVSZWdpb25z
Rmxvd1RocmVhZFBvcnRpb25SZWN0KCk7CisgICAgdm9pZCB1cGRhdGVGcmFnbWVudHNGbG93VGhy
ZWFkUG9ydGlvblJlY3QoKTsKICAgICBib29sIHNob3VsZFJlcGFpbnQoY29uc3QgTGF5b3V0UmVj
dCYpIGNvbnN0OwogCi0gICAgYm9vbCBnZXRSZWdpb25SYW5nZUZvckJveEZyb21DYWNoZWRJbmZv
KGNvbnN0IFJlbmRlckJveCosIFJlbmRlclJlZ2lvbiomIHN0YXJ0UmVnaW9uLCBSZW5kZXJSZWdp
b24qJiBlbmRSZWdpb24pIGNvbnN0OworICAgIGJvb2wgZ2V0RnJhZ21lbnRSYW5nZUZvckJveEZy
b21DYWNoZWRJbmZvKGNvbnN0IFJlbmRlckJveCosIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiYg
c3RhcnRGcmFnbWVudCwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqJiBlbmRGcmFnbWVudCkgY29u
c3Q7CiAKLSAgICB2b2lkIHJlbW92ZVJlbmRlckJveFJlZ2lvbkluZm8oUmVuZGVyQm94Jik7Ci0g
ICAgdm9pZCByZW1vdmVMaW5lUmVnaW9uSW5mbyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmKTsKKyAg
ICB2b2lkIHJlbW92ZVJlbmRlckJveEZyYWdtZW50SW5mbyhSZW5kZXJCb3gmKTsKKyAgICB2b2lk
IHJlbW92ZUxpbmVGcmFnbWVudEluZm8oY29uc3QgUmVuZGVyQmxvY2tGbG93Jik7CiAKLSAgICBS
ZW5kZXJSZWdpb25MaXN0IG1fcmVnaW9uTGlzdDsKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5l
ckxpc3QgbV9mcmFnbWVudExpc3Q7CiAKLSAgICBjbGFzcyBSZW5kZXJSZWdpb25SYW5nZSB7Cisg
ICAgY2xhc3MgUmVuZGVyRnJhZ21lbnRDb250YWluZXJSYW5nZSB7CiAgICAgcHVibGljOgotICAg
ICAgICBSZW5kZXJSZWdpb25SYW5nZSgpCisgICAgICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVy
UmFuZ2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXRSYW5nZShudWxscHRyLCBudWxscHRy
KTsKICAgICAgICAgfQogCi0gICAgICAgIFJlbmRlclJlZ2lvblJhbmdlKFJlbmRlclJlZ2lvbiog
c3RhcnQsIFJlbmRlclJlZ2lvbiogZW5kKQorICAgICAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5l
clJhbmdlKFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBzdGFydCwgUmVuZGVyRnJhZ21lbnRDb250
YWluZXIqIGVuZCkKICAgICAgICAgewogICAgICAgICAgICAgc2V0UmFuZ2Uoc3RhcnQsIGVuZCk7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0UmFuZ2UoUmVuZGVyUmVnaW9u
KiBzdGFydCwgUmVuZGVyUmVnaW9uKiBlbmQpCisgICAgICAgIHZvaWQgc2V0UmFuZ2UoUmVuZGVy
RnJhZ21lbnRDb250YWluZXIqIHN0YXJ0LCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZW5kKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBtX3N0YXJ0UmVnaW9uID0gc3RhcnQ7Ci0gICAgICAgICAg
ICBtX2VuZFJlZ2lvbiA9IGVuZDsKKyAgICAgICAgICAgIG1fc3RhcnRGcmFnbWVudCA9IHN0YXJ0
OworICAgICAgICAgICAgbV9lbmRGcmFnbWVudCA9IGVuZDsKICAgICAgICAgICAgIG1fcmFuZ2VJ
bnZhbGlkYXRlZCA9IHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBSZW5kZXJSZWdpb24qIHN0
YXJ0UmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydFJlZ2lvbjsgfQotICAgICAgICBSZW5k
ZXJSZWdpb24qIGVuZFJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kUmVnaW9uOyB9CisgICAg
ICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBzdGFydEZyYWdtZW50KCkgY29uc3QgeyByZXR1
cm4gbV9zdGFydEZyYWdtZW50OyB9CisgICAgICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBl
bmRGcmFnbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kRnJhZ21lbnQ7IH0KICAgICAgICAgYm9v
bCByYW5nZUludmFsaWRhdGVkKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZUludmFsaWRhdGVkOyB9
CiAgICAgICAgIHZvaWQgY2xlYXJSYW5nZUludmFsaWRhdGVkKCkgeyBtX3JhbmdlSW52YWxpZGF0
ZWQgPSBmYWxzZTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVuZGVyUmVnaW9uKiBtX3N0
YXJ0UmVnaW9uOwotICAgICAgICBSZW5kZXJSZWdpb24qIG1fZW5kUmVnaW9uOworICAgICAgICBS
ZW5kZXJGcmFnbWVudENvbnRhaW5lciogbV9zdGFydEZyYWdtZW50OworICAgICAgICBSZW5kZXJG
cmFnbWVudENvbnRhaW5lciogbV9lbmRGcmFnbWVudDsKICAgICAgICAgYm9vbCBtX3JhbmdlSW52
YWxpZGF0ZWQ7CiAgICAgfTsKIAotICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWw8TGF5b3V0VW5pdCwg
UmVuZGVyUmVnaW9uKj4gUmVnaW9uSW50ZXJ2YWw7Ci0gICAgdHlwZWRlZiBQT0RJbnRlcnZhbFRy
ZWU8TGF5b3V0VW5pdCwgUmVuZGVyUmVnaW9uKj4gUmVnaW9uSW50ZXJ2YWxUcmVlOworICAgIHR5
cGVkZWYgUE9ESW50ZXJ2YWw8TGF5b3V0VW5pdCwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqPiBG
cmFnbWVudEludGVydmFsOworICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWxUcmVlPExheW91dFVuaXQs
IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKj4gRnJhZ21lbnRJbnRlcnZhbFRyZWU7CiAKLSAgICBj
bGFzcyBSZWdpb25TZWFyY2hBZGFwdGVyIHsKKyAgICBjbGFzcyBGcmFnbWVudFNlYXJjaEFkYXB0
ZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgUmVnaW9uU2VhcmNoQWRhcHRlcihMYXlvdXRVbml0
IG9mZnNldCkKKyAgICAgICAgRnJhZ21lbnRTZWFyY2hBZGFwdGVyKExheW91dFVuaXQgb2Zmc2V0
KQogICAgICAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCiAgICAgICAgICAgICAsIG1fcmVzdWx0
KG51bGxwdHIpCiAgICAgICAgIHsKQEAgLTI1NSwzNCArMjU1LDM0IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgCiAgICAgICAgIGNvbnN0IExheW91dFVuaXQmIGxvd1ZhbHVlKCkgY29uc3QgeyByZXR1
cm4gbV9vZmZzZXQ7IH0KICAgICAgICAgY29uc3QgTGF5b3V0VW5pdCYgaGlnaFZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICAgICAgdm9pZCBjb2xsZWN0SWZOZWVkZWQoY29u
c3QgUmVnaW9uSW50ZXJ2YWwmKTsKKyAgICAgICAgdm9pZCBjb2xsZWN0SWZOZWVkZWQoY29uc3Qg
RnJhZ21lbnRJbnRlcnZhbCYpOwogCi0gICAgICAgIFJlbmRlclJlZ2lvbiogcmVzdWx0KCkgY29u
c3QgeyByZXR1cm4gbV9yZXN1bHQ7IH0KKyAgICAgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIq
IHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0OyB9CiAKICAgICBwcml2YXRlOgogICAg
ICAgICBMYXlvdXRVbml0IG1fb2Zmc2V0OwotICAgICAgICBSZW5kZXJSZWdpb24qIG1fcmVzdWx0
OworICAgICAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogbV9yZXN1bHQ7CiAgICAgfTsKIAot
ICAgIC8vIE1hcCBhIGxpbmUgdG8gaXRzIGNvbnRhaW5pbmcgcmVnaW9uLgotICAgIHN0ZDo6dW5p
cXVlX3B0cjxDb250YWluaW5nUmVnaW9uTWFwPiBtX2xpbmVUb1JlZ2lvbk1hcDsKKyAgICAvLyBN
YXAgYSBsaW5lIHRvIGl0cyBjb250YWluaW5nIGZyYWdtZW50LgorICAgIHN0ZDo6dW5pcXVlX3B0
cjxDb250YWluaW5nRnJhZ21lbnRNYXA+IG1fbGluZVRvRnJhZ21lbnRNYXA7CiAKLSAgICAvLyBN
YXAgYSBib3ggdG8gdGhlIGxpc3Qgb2YgcmVnaW9ucyBpbiB3aGljaCB0aGUgYm94IGlzIHJlbmRl
cmVkLgotICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBSZW5kZXJCb3gqLCBSZW5kZXJSZWdpb25S
YW5nZT4gUmVuZGVyUmVnaW9uUmFuZ2VNYXA7Ci0gICAgUmVuZGVyUmVnaW9uUmFuZ2VNYXAgbV9y
ZWdpb25SYW5nZU1hcDsKKyAgICAvLyBNYXAgYSBib3ggdG8gdGhlIGxpc3Qgb2YgZnJhZ21lbnRz
IGluIHdoaWNoIHRoZSBib3ggaXMgcmVuZGVyZWQuCisgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0
IFJlbmRlckJveCosIFJlbmRlckZyYWdtZW50Q29udGFpbmVyUmFuZ2U+IFJlbmRlckZyYWdtZW50
Q29udGFpbmVyUmFuZ2VNYXA7CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXJSYW5nZU1hcCBt
X2ZyYWdtZW50UmFuZ2VNYXA7CiAKLSAgICAvLyBNYXAgYSBib3ggd2l0aCBhIHJlZ2lvbiBicmVh
ayB0byB0aGUgYXV0byBoZWlnaHQgcmVnaW9uIGFmZmVjdGVkIGJ5IHRoYXQgYnJlYWsuIAotICAg
IHR5cGVkZWYgSGFzaE1hcDxSZW5kZXJCb3gqLCBSZW5kZXJSZWdpb24qPiBSZW5kZXJCb3hUb1Jl
Z2lvbk1hcDsKLSAgICBSZW5kZXJCb3hUb1JlZ2lvbk1hcCBtX2JyZWFrQmVmb3JlVG9SZWdpb25N
YXA7Ci0gICAgUmVuZGVyQm94VG9SZWdpb25NYXAgbV9icmVha0FmdGVyVG9SZWdpb25NYXA7Cisg
ICAgLy8gTWFwIGEgYm94IHdpdGggYSBmcmFnbWVudCBicmVhayB0byB0aGUgYXV0byBoZWlnaHQg
ZnJhZ21lbnQgYWZmZWN0ZWQgYnkgdGhhdCBicmVhay4gCisgICAgdHlwZWRlZiBIYXNoTWFwPFJl
bmRlckJveCosIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKj4gUmVuZGVyQm94VG9GcmFnbWVudE1h
cDsKKyAgICBSZW5kZXJCb3hUb0ZyYWdtZW50TWFwIG1fYnJlYWtCZWZvcmVUb0ZyYWdtZW50TWFw
OworICAgIFJlbmRlckJveFRvRnJhZ21lbnRNYXAgbV9icmVha0FmdGVyVG9GcmFnbWVudE1hcDsK
IAotICAgIFJlZ2lvbkludGVydmFsVHJlZSBtX3JlZ2lvbkludGVydmFsVHJlZTsKKyAgICBGcmFn
bWVudEludGVydmFsVHJlZSBtX2ZyYWdtZW50SW50ZXJ2YWxUcmVlOwogCi0gICAgQ3VycmVudFJl
bmRlclJlZ2lvbk1haW50YWluZXIqIG1fY3VycmVudFJlZ2lvbk1haW50YWluZXI7CisgICAgQ3Vy
cmVudFJlbmRlckZyYWdtZW50Q29udGFpbmVyTWFpbnRhaW5lciogbV9jdXJyZW50RnJhZ21lbnRN
YWludGFpbmVyOwogCi0gICAgYm9vbCBtX3JlZ2lvbnNJbnZhbGlkYXRlZCA6IDE7Ci0gICAgYm9v
bCBtX3JlZ2lvbnNIYXZlVW5pZm9ybUxvZ2ljYWxXaWR0aCA6IDE7Ci0gICAgYm9vbCBtX3JlZ2lv
bnNIYXZlVW5pZm9ybUxvZ2ljYWxIZWlnaHQgOiAxOworICAgIGJvb2wgbV9mcmFnbWVudHNJbnZh
bGlkYXRlZCA6IDE7CisgICAgYm9vbCBtX2ZyYWdtZW50c0hhdmVVbmlmb3JtTG9naWNhbFdpZHRo
IDogMTsKKyAgICBib29sIG1fZnJhZ21lbnRzSGF2ZVVuaWZvcm1Mb2dpY2FsSGVpZ2h0IDogMTsK
ICAgICBib29sIG1fcGFnZUxvZ2ljYWxTaXplQ2hhbmdlZCA6IDE7CiB9OwogCkBAIC0yOTIsOCAr
MjkyLDggQEAgcHJvdGVjdGVkOgogI2lmbmRlZiBOREVCVUcKIG5hbWVzcGFjZSBXVEYgewogCi10
ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmFsdWVUb1N0cmluZzxXZWJDb3JlOjpSZW5kZXJSZWdpb24qPiB7
Ci0gICAgc3RhdGljIFN0cmluZyBzdHJpbmcoY29uc3QgV2ViQ29yZTo6UmVuZGVyUmVnaW9uKiB2
YWx1ZSkgeyByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiVwIiwgdmFsdWUpOyB9Cit0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgVmFsdWVUb1N0cmluZzxXZWJDb3JlOjpSZW5kZXJGcmFnbWVudENvbnRhaW5lcio+
IHsKKyAgICBzdGF0aWMgU3RyaW5nIHN0cmluZyhjb25zdCBXZWJDb3JlOjpSZW5kZXJGcmFnbWVu
dENvbnRhaW5lciogdmFsdWUpIHsgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlcCIsIHZhbHVlKTsg
fQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRnJhZ21lbnRDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudENvbnRhaW5lci5jcHAJKHJldmlzaW9uIDIyMjQ2
MikJKGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHA6MjIyNDYy
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50Q29udGFpbmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVCBIT0xERVIgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCisK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0Lmgi
CisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkxheW91dFJlcGFpbnRlci5oIgorI2lu
Y2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94UmVnaW9uSW5mby5oIgorI2luY2x1
ZGUgIlJlbmRlckZsb3dUaHJlYWQuaCIKKyNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKKyNpbmNs
dWRlICJSZW5kZXJJdGVyYXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitSZW5kZXJSZWdpb246OlJlbmRlclJlZ2lvbihFbGVtZW50JiBlbGVtZW50
LCBSZW5kZXJTdHlsZSYmIHN0eWxlLCBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkKQorICAg
IDogUmVuZGVyQmxvY2tGbG93KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQorICAgICwgbV9mbG93
VGhyZWFkKGZsb3dUaHJlYWQpCisgICAgLCBtX2lzVmFsaWQoZmFsc2UpCit7Cit9CisKK1JlbmRl
clJlZ2lvbjo6UmVuZGVyUmVnaW9uKERvY3VtZW50JiBkb2N1bWVudCwgUmVuZGVyU3R5bGUmJiBz
dHlsZSwgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCkKKyAgICA6IFJlbmRlckJsb2NrRmxv
dyhkb2N1bWVudCwgV1RGTW92ZShzdHlsZSkpCisgICAgLCBtX2Zsb3dUaHJlYWQoZmxvd1RocmVh
ZCkKKyAgICAsIG1faXNWYWxpZChmYWxzZSkKK3sKK30KKworTGF5b3V0UG9pbnQgUmVuZGVyUmVn
aW9uOjptYXBSZWdpb25Qb2ludEludG9GbG93VGhyZWFkQ29vcmRpbmF0ZXMoY29uc3QgTGF5b3V0
UG9pbnQmIHBvaW50KQoreworICAgIC8vIEFzc3VtaW5nIHRoZSBwb2ludCBpcyByZWxhdGl2ZSB0
byB0aGUgcmVnaW9uIGJsb2NrLCAzIGNhc2VzIHdpbGwgYmUgY29uc2lkZXJlZDoKKyAgICAvLyBh
KSB0b3AgbWFyZ2luLCBwYWRkaW5nIG9yIGJvcmRlci4KKyAgICAvLyBiKSBib3R0b20gbWFyZ2lu
LCBwYWRkaW5nIG9yIGJvcmRlci4KKyAgICAvLyBjKSBub24tY29udGVudCByZWdpb24gYXJlYS4K
KworICAgIExheW91dFVuaXQgcG9pbnRMb2dpY2FsVG9wKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBwb2ludC55KCkgOiBwb2ludC54KCkpOworICAgIExheW91dFVuaXQgcG9pbnRMb2dpY2Fs
TGVmdChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gcG9pbnQueCgpIDogcG9pbnQueSgpKTsK
KyAgICBMYXlvdXRVbml0IGZsb3dUaHJlYWRMb2dpY2FsVG9wKGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkgPyBtX2Zsb3dUaHJlYWRQb3J0aW9uUmVjdC55KCkgOiBtX2Zsb3dUaHJlYWRQb3J0aW9u
UmVjdC54KCkpOworICAgIExheW91dFVuaXQgZmxvd1RocmVhZExvZ2ljYWxMZWZ0KGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyBtX2Zsb3dUaHJlYWRQb3J0aW9uUmVjdC54KCkgOiBtX2Zsb3dU
aHJlYWRQb3J0aW9uUmVjdC55KCkpOworICAgIExheW91dFVuaXQgZmxvd1RocmVhZFBvcnRpb25U
b3BCb3VuZChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbV9mbG93VGhyZWFkUG9ydGlvblJl
Y3QuaGVpZ2h0KCkgOiBtX2Zsb3dUaHJlYWRQb3J0aW9uUmVjdC53aWR0aCgpKTsKKyAgICBMYXlv
dXRVbml0IGZsb3dUaHJlYWRQb3J0aW9uTGVmdEJvdW5kKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBtX2Zsb3dUaHJlYWRQb3J0aW9uUmVjdC53aWR0aCgpIDogbV9mbG93VGhyZWFkUG9ydGlv
blJlY3QuaGVpZ2h0KCkpOworICAgIExheW91dFVuaXQgZmxvd1RocmVhZFBvcnRpb25Ub3BNYXgo
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG1fZmxvd1RocmVhZFBvcnRpb25SZWN0Lm1heFko
KSA6IG1fZmxvd1RocmVhZFBvcnRpb25SZWN0Lm1heFgoKSk7CisgICAgTGF5b3V0VW5pdCBmbG93
VGhyZWFkUG9ydGlvbkxlZnRNYXgoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG1fZmxvd1Ro
cmVhZFBvcnRpb25SZWN0Lm1heFgoKSA6IG1fZmxvd1RocmVhZFBvcnRpb25SZWN0Lm1heFkoKSk7
CisgICAgTGF5b3V0VW5pdCBlZmZlY3RpdmVGaXhlZFBvaW50RGVub21pbmF0b3I7CisgICAgZWZm
ZWN0aXZlRml4ZWRQb2ludERlbm9taW5hdG9yLnNldFJhd1ZhbHVlKDEpOworCisgICAgaWYgKHBv
aW50TG9naWNhbFRvcCA8IDApIHsKKyAgICAgICAgTGF5b3V0UG9pbnQgcG9pbnRJblRocmVhZCgw
LCBmbG93VGhyZWFkTG9naWNhbFRvcCk7CisgICAgICAgIHJldHVybiBpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gcG9pbnRJblRocmVhZCA6IHBvaW50SW5UaHJlYWQudHJhbnNwb3NlZFBvaW50
KCk7CisgICAgfQorCisgICAgaWYgKHBvaW50TG9naWNhbFRvcCA+PSBmbG93VGhyZWFkUG9ydGlv
blRvcEJvdW5kKSB7CisgICAgICAgIExheW91dFBvaW50IHBvaW50SW5UaHJlYWQoZmxvd1RocmVh
ZFBvcnRpb25MZWZ0Qm91bmQsIGZsb3dUaHJlYWRQb3J0aW9uVG9wTWF4IC0gZWZmZWN0aXZlRml4
ZWRQb2ludERlbm9taW5hdG9yKTsKKyAgICAgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkgPyBwb2ludEluVGhyZWFkIDogcG9pbnRJblRocmVhZC50cmFuc3Bvc2VkUG9pbnQoKTsK
KyAgICB9CisKKyAgICBpZiAocG9pbnRMb2dpY2FsTGVmdCA8IDApIHsKKyAgICAgICAgTGF5b3V0
UG9pbnQgcG9pbnRJblRocmVhZChmbG93VGhyZWFkTG9naWNhbExlZnQsIHBvaW50TG9naWNhbFRv
cCArIGZsb3dUaHJlYWRMb2dpY2FsVG9wKTsKKyAgICAgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyBwb2ludEluVGhyZWFkIDogcG9pbnRJblRocmVhZC50cmFuc3Bvc2VkUG9p
bnQoKTsKKyAgICB9CisgICAgaWYgKHBvaW50TG9naWNhbExlZnQgPj0gZmxvd1RocmVhZFBvcnRp
b25MZWZ0Qm91bmQpIHsKKyAgICAgICAgTGF5b3V0UG9pbnQgcG9pbnRJblRocmVhZChmbG93VGhy
ZWFkUG9ydGlvbkxlZnRNYXggLSBlZmZlY3RpdmVGaXhlZFBvaW50RGVub21pbmF0b3IsIHBvaW50
TG9naWNhbFRvcCArIGZsb3dUaHJlYWRMb2dpY2FsVG9wKTsKKyAgICAgICAgcmV0dXJuIGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBwb2ludEluVGhyZWFkIDogcG9pbnRJblRocmVhZC50cmFu
c3Bvc2VkUG9pbnQoKTsKKyAgICB9CisgICAgTGF5b3V0UG9pbnQgcG9pbnRJblRocmVhZChwb2lu
dExvZ2ljYWxMZWZ0ICsgZmxvd1RocmVhZExvZ2ljYWxMZWZ0LCBwb2ludExvZ2ljYWxUb3AgKyBm
bG93VGhyZWFkTG9naWNhbFRvcCk7CisgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBwb2ludEluVGhyZWFkIDogcG9pbnRJblRocmVhZC50cmFuc3Bvc2VkUG9pbnQoKTsKK30K
KworVmlzaWJsZVBvc2l0aW9uIFJlbmRlclJlZ2lvbjo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBM
YXlvdXRQb2ludCYgcG9pbnQsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uKQoreworICAgIGlm
ICghaXNWYWxpZCgpIHx8ICFtX2Zsb3dUaHJlYWQtPmZpcnN0Q2hpbGQoKSkgLy8gY2hlY2tpbmcg
Zm9yIGVtcHR5IHJlZ2lvbiBibG9ja3MuCisgICAgICAgIHJldHVybiBSZW5kZXJCbG9jazo6cG9z
aXRpb25Gb3JQb2ludChwb2ludCwgcmVnaW9uKTsKKworICAgIHJldHVybiBtX2Zsb3dUaHJlYWQt
PnBvc2l0aW9uRm9yUG9pbnQobWFwUmVnaW9uUG9pbnRJbnRvRmxvd1RocmVhZENvb3JkaW5hdGVz
KHBvaW50KSwgdGhpcyk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyUmVnaW9uOjpwYWdlTG9naWNh
bFdpZHRoKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICByZXR1cm4gbV9m
bG93VGhyZWFkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY29udGVudFdpZHRoKCkgOiBj
b250ZW50SGVpZ2h0KCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyUmVnaW9uOjpwYWdlTG9naWNh
bEhlaWdodCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgcmV0dXJuIG1f
Zmxvd1RocmVhZC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNvbnRlbnRIZWlnaHQoKSA6
IGNvbnRlbnRXaWR0aCgpOworfQorCitMYXlvdXRVbml0IFJlbmRlclJlZ2lvbjo6bG9naWNhbEhl
aWdodE9mQWxsRmxvd1RocmVhZENvbnRlbnQoKSBjb25zdAoreworICAgIHJldHVybiBwYWdlTG9n
aWNhbEhlaWdodCgpOworfQorCitMYXlvdXRSZWN0IFJlbmRlclJlZ2lvbjo6Zmxvd1RocmVhZFBv
cnRpb25PdmVyZmxvd1JlY3QoKQoreworICAgIHJldHVybiBvdmVyZmxvd1JlY3RGb3JGbG93VGhy
ZWFkUG9ydGlvbihmbG93VGhyZWFkUG9ydGlvblJlY3QoKSwgaXNGaXJzdFJlZ2lvbigpLCBpc0xh
c3RSZWdpb24oKSwgVmlzdWFsT3ZlcmZsb3cpOworfQorCitMYXlvdXRQb2ludCBSZW5kZXJSZWdp
b246OmZsb3dUaHJlYWRQb3J0aW9uTG9jYXRpb24oKSBjb25zdAoreworICAgIExheW91dFBvaW50
IHBvcnRpb25Mb2NhdGlvbjsKKyAgICBMYXlvdXRSZWN0IHBvcnRpb25SZWN0ID0gZmxvd1RocmVh
ZFBvcnRpb25SZWN0KCk7CisKKyAgICBpZiAoZmxvd1RocmVhZCgpLT5zdHlsZSgpLmlzRmxpcHBl
ZEJsb2Nrc1dyaXRpbmdNb2RlKCkpIHsKKyAgICAgICAgTGF5b3V0UmVjdCBmbGlwcGVkRmxvd1Ro
cmVhZFBvcnRpb25SZWN0KHBvcnRpb25SZWN0KTsKKyAgICAgICAgZmxvd1RocmVhZCgpLT5mbGlw
Rm9yV3JpdGluZ01vZGUoZmxpcHBlZEZsb3dUaHJlYWRQb3J0aW9uUmVjdCk7CisgICAgICAgIHBv
cnRpb25Mb2NhdGlvbiA9IGZsaXBwZWRGbG93VGhyZWFkUG9ydGlvblJlY3QubG9jYXRpb24oKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgcG9ydGlvbkxvY2F0aW9uID0gcG9ydGlvblJlY3QubG9jYXRp
b24oKTsKKworICAgIHJldHVybiBwb3J0aW9uTG9jYXRpb247Cit9CisKK0xheW91dFJlY3QgUmVu
ZGVyUmVnaW9uOjpvdmVyZmxvd1JlY3RGb3JGbG93VGhyZWFkUG9ydGlvbihjb25zdCBMYXlvdXRS
ZWN0JiBmbG93VGhyZWFkUG9ydGlvblJlY3QsIGJvb2wgaXNGaXJzdFBvcnRpb24sIGJvb2wgaXNM
YXN0UG9ydGlvbiwgT3ZlcmZsb3dUeXBlIG92ZXJmbG93VHlwZSkKK3sKKyAgICBBU1NFUlQoaXNW
YWxpZCgpKTsKKyAgICBpZiAoc2hvdWxkQ2xpcEZsb3dUaHJlYWRDb250ZW50KCkpCisgICAgICAg
IHJldHVybiBmbG93VGhyZWFkUG9ydGlvblJlY3Q7CisKKyAgICBMYXlvdXRSZWN0IGZsb3dUaHJl
YWRPdmVyZmxvdyA9IG92ZXJmbG93VHlwZSA9PSBWaXN1YWxPdmVyZmxvdyA/IHZpc3VhbE92ZXJm
bG93UmVjdEZvckJveCgqbV9mbG93VGhyZWFkKSA6IGxheW91dE92ZXJmbG93UmVjdEZvckJveCht
X2Zsb3dUaHJlYWQpOworICAgIExheW91dFJlY3QgY2xpcFJlY3Q7CisgICAgaWYgKG1fZmxvd1Ro
cmVhZC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgeworICAgICAgICBMYXlvdXRVbml0IG1p
blkgPSBpc0ZpcnN0UG9ydGlvbiA/IGZsb3dUaHJlYWRPdmVyZmxvdy55KCkgOiBmbG93VGhyZWFk
UG9ydGlvblJlY3QueSgpOworICAgICAgICBMYXlvdXRVbml0IG1heFkgPSBpc0xhc3RQb3J0aW9u
ID8gc3RkOjptYXgoZmxvd1RocmVhZFBvcnRpb25SZWN0Lm1heFkoKSwgZmxvd1RocmVhZE92ZXJm
bG93Lm1heFkoKSkgOiBmbG93VGhyZWFkUG9ydGlvblJlY3QubWF4WSgpOworICAgICAgICBib29s
IGNsaXBYID0gc3R5bGUoKS5vdmVyZmxvd1goKSAhPSBPVklTSUJMRTsKKyAgICAgICAgTGF5b3V0
VW5pdCBtaW5YID0gY2xpcFggPyBmbG93VGhyZWFkUG9ydGlvblJlY3QueCgpIDogc3RkOjptaW4o
Zmxvd1RocmVhZFBvcnRpb25SZWN0LngoKSwgZmxvd1RocmVhZE92ZXJmbG93LngoKSk7CisgICAg
ICAgIExheW91dFVuaXQgbWF4WCA9IGNsaXBYID8gZmxvd1RocmVhZFBvcnRpb25SZWN0Lm1heFgo
KSA6IHN0ZDo6bWF4KGZsb3dUaHJlYWRQb3J0aW9uUmVjdC5tYXhYKCksIGZsb3dUaHJlYWRPdmVy
Zmxvdy5tYXhYKCkpOworICAgICAgICBjbGlwUmVjdCA9IExheW91dFJlY3QobWluWCwgbWluWSwg
bWF4WCAtIG1pblgsIG1heFkgLSBtaW5ZKTsKKyAgICB9IGVsc2UgeworICAgICAgICBMYXlvdXRV
bml0IG1pblggPSBpc0ZpcnN0UG9ydGlvbiA/IGZsb3dUaHJlYWRPdmVyZmxvdy54KCkgOiBmbG93
VGhyZWFkUG9ydGlvblJlY3QueCgpOworICAgICAgICBMYXlvdXRVbml0IG1heFggPSBpc0xhc3RQ
b3J0aW9uID8gc3RkOjptYXgoZmxvd1RocmVhZFBvcnRpb25SZWN0Lm1heFgoKSwgZmxvd1RocmVh
ZE92ZXJmbG93Lm1heFgoKSkgOiBmbG93VGhyZWFkUG9ydGlvblJlY3QubWF4WCgpOworICAgICAg
ICBib29sIGNsaXBZID0gc3R5bGUoKS5vdmVyZmxvd1koKSAhPSBPVklTSUJMRTsKKyAgICAgICAg
TGF5b3V0VW5pdCBtaW5ZID0gY2xpcFkgPyBmbG93VGhyZWFkUG9ydGlvblJlY3QueSgpIDogc3Rk
OjptaW4oZmxvd1RocmVhZFBvcnRpb25SZWN0LnkoKSwgZmxvd1RocmVhZE92ZXJmbG93LnkoKSk7
CisgICAgICAgIExheW91dFVuaXQgbWF4WSA9IGNsaXBZID8gZmxvd1RocmVhZFBvcnRpb25SZWN0
Lm1heFkoKSA6IHN0ZDo6bWF4KGZsb3dUaHJlYWRQb3J0aW9uUmVjdC55KCksIGZsb3dUaHJlYWRP
dmVyZmxvdy5tYXhZKCkpOworICAgICAgICBjbGlwUmVjdCA9IExheW91dFJlY3QobWluWCwgbWlu
WSwgbWF4WCAtIG1pblgsIG1heFkgLSBtaW5ZKTsKKyAgICB9CisgICAgcmV0dXJuIGNsaXBSZWN0
OworfQorCitMYXlvdXRVbml0IFJlbmRlclJlZ2lvbjo6cGFnZUxvZ2ljYWxUb3BGb3JPZmZzZXQo
TGF5b3V0VW5pdCAvKiBvZmZzZXQgKi8pIGNvbnN0Cit7CisgICAgcmV0dXJuIGZsb3dUaHJlYWQo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpLnko
KSA6IGZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpLngoKTsKK30KKworYm9vbCBSZW5kZXJSZWdpb246
OmlzRmlyc3RSZWdpb24oKSBjb25zdAoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOworCisgICAg
cmV0dXJuIG1fZmxvd1RocmVhZC0+Zmlyc3RSZWdpb24oKSA9PSB0aGlzOworfQorCitib29sIFJl
bmRlclJlZ2lvbjo6aXNMYXN0UmVnaW9uKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNWYWxpZCgp
KTsKKworICAgIHJldHVybiBtX2Zsb3dUaHJlYWQtPmxhc3RSZWdpb24oKSA9PSB0aGlzOworfQor
Citib29sIFJlbmRlclJlZ2lvbjo6c2hvdWxkQ2xpcEZsb3dUaHJlYWRDb250ZW50KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCk7Cit9CisKK3ZvaWQgUmVuZGVyUmVnaW9u
OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUq
IG9sZFN0eWxlKQoreworICAgIFJlbmRlckJsb2NrRmxvdzo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwg
b2xkU3R5bGUpOworCisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChvbGRTdHlsZSAmJiBvbGRTdHlsZS0+d3JpdGluZ01vZGUoKSAhPSBzdHlsZSgpLndyaXRp
bmdNb2RlKCkpCisgICAgICAgIG1fZmxvd1RocmVhZC0+cmVnaW9uQ2hhbmdlZFdyaXRpbmdNb2Rl
KHRoaXMpOworfQorCit2b2lkIFJlbmRlclJlZ2lvbjo6Y29tcHV0ZU92ZXJmbG93RnJvbUZsb3dU
aHJlYWQoKQoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOworCisgICAgTGF5b3V0UmVjdCBsYXlv
dXRSZWN0ID0gbGF5b3V0T3ZlcmZsb3dSZWN0Rm9yQm94KG1fZmxvd1RocmVhZCk7CisgICAgbGF5
b3V0UmVjdC5zZXRMb2NhdGlvbihjb250ZW50Qm94UmVjdCgpLmxvY2F0aW9uKCkgKyAobGF5b3V0
UmVjdC5sb2NhdGlvbigpIC0gbV9mbG93VGhyZWFkUG9ydGlvblJlY3QubG9jYXRpb24oKSkpOwor
CisgICAgLy8gRklYTUU6IENvcnJlY3RseSBhZGp1c3QgdGhlIGxheW91dCBvdmVyZmxvdyBmb3Ig
d3JpdGluZyBtb2Rlcy4KKyAgICBhZGRMYXlvdXRPdmVyZmxvdyhsYXlvdXRSZWN0KTsKKyAgICBS
ZW5kZXJGbG93VGhyZWFkKiBlbmNsb3NpbmdSZW5kZXJGbG93VGhyZWFkID0gZmxvd1RocmVhZENv
bnRhaW5pbmdCbG9jaygpOworICAgIGlmIChlbmNsb3NpbmdSZW5kZXJGbG93VGhyZWFkKQorICAg
ICAgICBlbmNsb3NpbmdSZW5kZXJGbG93VGhyZWFkLT5hZGRSZWdpb25zTGF5b3V0T3ZlcmZsb3co
dGhpcywgbGF5b3V0UmVjdCk7CisKKyAgICB1cGRhdGVMYXllclRyYW5zZm9ybSgpOworICAgIHVw
ZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOworfQorCit2b2lkIFJlbmRlclJlZ2lvbjo6cmVw
YWludEZsb3dUaHJlYWRDb250ZW50KGNvbnN0IExheW91dFJlY3QmIHJlcGFpbnRSZWN0KQorewor
ICAgIHJlcGFpbnRGbG93VGhyZWFkQ29udGVudFJlY3RhbmdsZShyZXBhaW50UmVjdCwgZmxvd1Ro
cmVhZFBvcnRpb25SZWN0KCksIGNvbnRlbnRCb3hSZWN0KCkubG9jYXRpb24oKSk7Cit9CisKK3Zv
aWQgUmVuZGVyUmVnaW9uOjpyZXBhaW50Rmxvd1RocmVhZENvbnRlbnRSZWN0YW5nbGUoY29uc3Qg
TGF5b3V0UmVjdCYgcmVwYWludFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGZsb3dUaHJlYWRQb3J0
aW9uUmVjdCwgY29uc3QgTGF5b3V0UG9pbnQmIHJlZ2lvbkxvY2F0aW9uLCBjb25zdCBMYXlvdXRS
ZWN0KiBmbG93VGhyZWFkUG9ydGlvbkNsaXBSZWN0KQoreworICAgIEFTU0VSVChpc1ZhbGlkKCkp
OworCisgICAgLy8gV2Ugb25seSBoYXZlIHRvIGlzc3VlIGEgcmVwYWludCBpbiB0aGlzIHJlZ2lv
biBpZiB0aGUgcmVnaW9uIHJlY3QgaW50ZXJzZWN0cyB0aGUgcmVwYWludCByZWN0LgorICAgIExh
eW91dFJlY3QgY2xpcHBlZFJlY3QocmVwYWludFJlY3QpOworCisgICAgaWYgKGZsb3dUaHJlYWRQ
b3J0aW9uQ2xpcFJlY3QpIHsKKyAgICAgICAgTGF5b3V0UmVjdCBmbGlwcGVkRmxvd1RocmVhZFBv
cnRpb25DbGlwUmVjdCgqZmxvd1RocmVhZFBvcnRpb25DbGlwUmVjdCk7CisgICAgICAgIGZsb3dU
aHJlYWQoKS0+ZmxpcEZvcldyaXRpbmdNb2RlKGZsaXBwZWRGbG93VGhyZWFkUG9ydGlvbkNsaXBS
ZWN0KTsKKyAgICAgICAgY2xpcHBlZFJlY3QuaW50ZXJzZWN0KGZsaXBwZWRGbG93VGhyZWFkUG9y
dGlvbkNsaXBSZWN0KTsKKyAgICB9CisKKyAgICBpZiAoY2xpcHBlZFJlY3QuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBMYXlvdXRSZWN0IGZsaXBwZWRGbG93VGhyZWFkUG9ydGlv
blJlY3QoZmxvd1RocmVhZFBvcnRpb25SZWN0KTsKKyAgICBmbG93VGhyZWFkKCktPmZsaXBGb3JX
cml0aW5nTW9kZShmbGlwcGVkRmxvd1RocmVhZFBvcnRpb25SZWN0KTsgLy8gUHV0IHRoZSByZWdp
b24gcmVjdHMgaW50byBwaHlzaWNhbCBjb29yZGluYXRlcy4KKworICAgIC8vIFB1dCB0aGUgcmVn
aW9uIHJlY3QgaW50byB0aGUgcmVnaW9uJ3MgcGh5c2ljYWwgY29vcmRpbmF0ZSBzcGFjZS4KKyAg
ICBjbGlwcGVkUmVjdC5zZXRMb2NhdGlvbihyZWdpb25Mb2NhdGlvbiArIChjbGlwcGVkUmVjdC5s
b2NhdGlvbigpIC0gZmxpcHBlZEZsb3dUaHJlYWRQb3J0aW9uUmVjdC5sb2NhdGlvbigpKSk7CisK
KyAgICAvLyBOb3cgc3dpdGNoIHRvIHRoZSByZWdpb24ncyB3cml0aW5nIG1vZGUgY29vcmRpbmF0
ZSBzcGFjZSBhbmQgbGV0IGl0IHJlcGFpbnQgaXRzZWxmLgorICAgIGZsaXBGb3JXcml0aW5nTW9k
ZShjbGlwcGVkUmVjdCk7CisgICAgCisgICAgLy8gSXNzdWUgdGhlIHJlcGFpbnQuCisgICAgcmVw
YWludFJlY3RhbmdsZShjbGlwcGVkUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyUmVnaW9uOjppbnN0
YWxsRmxvd1RocmVhZCgpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQg
UmVuZGVyUmVnaW9uOjphdHRhY2hSZWdpb24oKQoreworICAgIGlmIChyZW5kZXJUcmVlQmVpbmdE
ZXN0cm95ZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIEEgcmVnaW9uIHN0YXJ0
cyBvZmYgaW52YWxpZC4KKyAgICBzZXRJc1ZhbGlkKGZhbHNlKTsKKworICAgIC8vIEluaXRpYWxp
emUgdGhlIGZsb3cgdGhyZWFkIHJlZmVyZW5jZSBhbmQgY3JlYXRlIHRoZSBmbG93IHRocmVhZCBv
YmplY3QgaWYgbmVlZGVkLgorICAgIC8vIFRoZSBmbG93IHRocmVhZCBsaWZldGltZSBpcyBpbmZs
dWVuY2VkIGJ5IHRoZSBudW1iZXIgb2YgcmVnaW9ucyBhdHRhY2hlZCB0byBpdCwKKyAgICAvLyBh
bmQgd2UgYXJlIGF0dGFjaGluZyB0aGUgcmVnaW9uIHRvIHRoZSBmbG93IHRocmVhZC4KKyAgICBp
bnN0YWxsRmxvd1RocmVhZCgpOworICAgIAorICAgIGlmICghbV9mbG93VGhyZWFkKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBPbmx5IGFmdGVyIGFkZGluZyB0aGUgcmVnaW9uIHRvIHRoZSB0
aHJlYWQsIHRoZSByZWdpb24gaXMgbWFya2VkIHRvIGJlIHZhbGlkLgorICAgIG1fZmxvd1RocmVh
ZC0+YWRkUmVnaW9uVG9UaHJlYWQodGhpcyk7Cit9CisKK3ZvaWQgUmVuZGVyUmVnaW9uOjpkZXRh
Y2hSZWdpb24oKQoreworICAgIGlmIChtX2Zsb3dUaHJlYWQpCisgICAgICAgIG1fZmxvd1RocmVh
ZC0+cmVtb3ZlUmVnaW9uRnJvbVRocmVhZCh0aGlzKTsKKyAgICBtX2Zsb3dUaHJlYWQgPSBudWxs
cHRyOworfQorCitSZW5kZXJCb3hSZWdpb25JbmZvKiBSZW5kZXJSZWdpb246OnJlbmRlckJveFJl
Z2lvbkluZm8oY29uc3QgUmVuZGVyQm94KiBib3gpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzVmFs
aWQoKSk7CisgICAgcmV0dXJuIG1fcmVuZGVyQm94UmVnaW9uSW5mby5nZXQoYm94KTsKK30KKwor
UmVuZGVyQm94UmVnaW9uSW5mbyogUmVuZGVyUmVnaW9uOjpzZXRSZW5kZXJCb3hSZWdpb25JbmZv
KGNvbnN0IFJlbmRlckJveCogYm94LCBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0SW5zZXQsIExheW91
dFVuaXQgbG9naWNhbFJpZ2h0SW5zZXQsCisgICAgYm9vbCBjb250YWluaW5nQmxvY2tDaGFpbklz
SW5zZXQpCit7CisgICAgQVNTRVJUKGlzVmFsaWQoKSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyQm94UmVnaW9uSW5mbz4mIGJveEluZm8gPSBtX3JlbmRlckJveFJlZ2lvbkluZm8uYWRk
KGJveCwgc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJCb3hSZWdpb25JbmZvPihsb2dpY2FsTGVmdElu
c2V0LCBsb2dpY2FsUmlnaHRJbnNldCwgY29udGFpbmluZ0Jsb2NrQ2hhaW5Jc0luc2V0KSkuaXRl
cmF0b3ItPnZhbHVlOworICAgIHJldHVybiBib3hJbmZvLmdldCgpOworfQorCitzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyQm94UmVnaW9uSW5mbz4gUmVuZGVyUmVnaW9uOjp0YWtlUmVuZGVyQm94UmVn
aW9uSW5mbyhjb25zdCBSZW5kZXJCb3gqIGJveCkKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJCb3hS
ZWdpb25JbmZvLnRha2UoYm94KTsKK30KKwordm9pZCBSZW5kZXJSZWdpb246OnJlbW92ZVJlbmRl
ckJveFJlZ2lvbkluZm8oY29uc3QgUmVuZGVyQm94JiBib3gpCit7CisgICAgbV9yZW5kZXJCb3hS
ZWdpb25JbmZvLnJlbW92ZSgmYm94KTsKK30KKwordm9pZCBSZW5kZXJSZWdpb246OmRlbGV0ZUFs
bFJlbmRlckJveFJlZ2lvbkluZm8oKQoreworICAgIG1fcmVuZGVyQm94UmVnaW9uSW5mby5jbGVh
cigpOworfQorCitMYXlvdXRVbml0IFJlbmRlclJlZ2lvbjo6bG9naWNhbFRvcE9mRmxvd1RocmVh
ZENvbnRlbnRSZWN0KGNvbnN0IExheW91dFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgQVNTRVJU
KGlzVmFsaWQoKSk7CisgICAgcmV0dXJuIGZsb3dUaHJlYWQoKS0+aXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IHJlY3QueSgpIDogcmVjdC54KCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyUmVn
aW9uOjpsb2dpY2FsQm90dG9tT2ZGbG93VGhyZWFkQ29udGVudFJlY3QoY29uc3QgTGF5b3V0UmVj
dCYgcmVjdCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICByZXR1cm4gZmxv
d1RocmVhZCgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gcmVjdC5tYXhZKCkgOiByZWN0
Lm1heFgoKTsKK30KKwordm9pZCBSZW5kZXJSZWdpb246Omluc2VydGVkSW50b1RyZWUoKQorewor
ICAgIGF0dGFjaFJlZ2lvbigpOworICAgIGlmIChpc1ZhbGlkKCkpCisgICAgICAgIFJlbmRlckJs
b2NrRmxvdzo6aW5zZXJ0ZWRJbnRvVHJlZSgpOworfQorCit2b2lkIFJlbmRlclJlZ2lvbjo6d2ls
bEJlUmVtb3ZlZEZyb21UcmVlKCkKK3sKKyAgICBSZW5kZXJCbG9ja0Zsb3c6OndpbGxCZVJlbW92
ZWRGcm9tVHJlZSgpOworCisgICAgZGV0YWNoUmVnaW9uKCk7Cit9CisKK3ZvaWQgUmVuZGVyUmVn
aW9uOjpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2Fs
V2lkdGgsIExheW91dFVuaXQmIG1heExvZ2ljYWxXaWR0aCkgY29uc3QKK3sKKyAgICBpZiAoIWlz
VmFsaWQoKSkgeworICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbnRyaW5zaWNMb2dp
Y2FsV2lkdGhzKG1pbkxvZ2ljYWxXaWR0aCwgbWF4TG9naWNhbFdpZHRoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIG1pbkxvZ2ljYWxXaWR0aCA9IG1fZmxvd1RocmVhZC0+bWluUHJl
ZmVycmVkTG9naWNhbFdpZHRoKCk7CisgICAgbWF4TG9naWNhbFdpZHRoID0gbV9mbG93VGhyZWFk
LT5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKTsKK30KKwordm9pZCBSZW5kZXJSZWdpb246OmNv
bXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKK3sKKyAgICBBU1NFUlQocHJlZmVycmVkTG9n
aWNhbFdpZHRoc0RpcnR5KCkpOworCisgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgUmVu
ZGVyQmxvY2tGbG93Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IEN1cnJlbnRseSwgdGhlIGNvZGUgaGFuZGxl
cyBvbmx5IHRoZSA8bGVuZ3RoPiBjYXNlIGZvciBtaW4td2lkdGgvbWF4LXdpZHRoLgorICAgIC8v
IEl0IHNob3VsZCBhbHNvIHN1cHBvcnQgb3RoZXIgdmFsdWVzLCBsaWtlIHBlcmNlbnRhZ2UsIGNh
bGMgb3Igdmlld3BvcnQgcmVsYXRpdmUuCisgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgg
PSBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IDA7CisKKyAgICBjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGVUb1VzZSA9IHN0eWxlKCk7CisgICAgaWYgKHN0eWxlVG9Vc2UubG9naWNhbFdpZHRo
KCkuaXNGaXhlZCgpICYmIHN0eWxlVG9Vc2UubG9naWNhbFdpZHRoKCkudmFsdWUoKSA+IDApCisg
ICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2Fs
V2lkdGggPSBhZGp1c3RDb250ZW50Qm94TG9naWNhbFdpZHRoRm9yQm94U2l6aW5nKHN0eWxlVG9V
c2UubG9naWNhbFdpZHRoKCkudmFsdWUoKSk7CisgICAgZWxzZQorICAgICAgICBjb21wdXRlSW50
cmluc2ljTG9naWNhbFdpZHRocyhtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCwgbV9tYXhQcmVm
ZXJyZWRMb2dpY2FsV2lkdGgpOworCisgICAgaWYgKHN0eWxlVG9Vc2UubG9naWNhbE1pbldpZHRo
KCkuaXNGaXhlZCgpICYmIHN0eWxlVG9Vc2UubG9naWNhbE1pbldpZHRoKCkudmFsdWUoKSA+IDAp
IHsKKyAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBzdGQ6Om1heChtX21heFBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCwgYWRqdXN0Q29udGVudEJveExvZ2ljYWxXaWR0aEZvckJveFNp
emluZyhzdHlsZVRvVXNlLmxvZ2ljYWxNaW5XaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9t
aW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBzdGQ6Om1heChtX21pblByZWZlcnJlZExvZ2ljYWxX
aWR0aCwgYWRqdXN0Q29udGVudEJveExvZ2ljYWxXaWR0aEZvckJveFNpemluZyhzdHlsZVRvVXNl
LmxvZ2ljYWxNaW5XaWR0aCgpLnZhbHVlKCkpKTsKKyAgICB9CisKKyAgICBpZiAoc3R5bGVUb1Vz
ZS5sb2dpY2FsTWF4V2lkdGgoKS5pc0ZpeGVkKCkpIHsKKyAgICAgICAgbV9tYXhQcmVmZXJyZWRM
b2dpY2FsV2lkdGggPSBzdGQ6Om1pbihtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgYWRqdXN0
Q29udGVudEJveExvZ2ljYWxXaWR0aEZvckJveFNpemluZyhzdHlsZVRvVXNlLmxvZ2ljYWxNYXhX
aWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBz
dGQ6Om1pbihtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCwgYWRqdXN0Q29udGVudEJveExvZ2lj
YWxXaWR0aEZvckJveFNpemluZyhzdHlsZVRvVXNlLmxvZ2ljYWxNYXhXaWR0aCgpLnZhbHVlKCkp
KTsKKyAgICB9CisKKyAgICBMYXlvdXRVbml0IGJvcmRlckFuZFBhZGRpbmcgPSBib3JkZXJBbmRQ
YWRkaW5nTG9naWNhbFdpZHRoKCk7CisgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggKz0g
Ym9yZGVyQW5kUGFkZGluZzsKKyAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSBib3Jk
ZXJBbmRQYWRkaW5nOworICAgIHNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7
Cit9CisKK3ZvaWQgUmVuZGVyUmVnaW9uOjphZGp1c3RSZWdpb25Cb3VuZHNGcm9tRmxvd1RocmVh
ZFBvcnRpb25SZWN0KExheW91dFJlY3QmIHJlZ2lvbkJvdW5kcykgY29uc3QKK3sKKyAgICBMYXlv
dXRSZWN0IGZsaXBwZWRGbG93VGhyZWFkUG9ydGlvblJlY3QgPSBmbG93VGhyZWFkUG9ydGlvblJl
Y3QoKTsKKyAgICBmbG93VGhyZWFkKCktPmZsaXBGb3JXcml0aW5nTW9kZShmbGlwcGVkRmxvd1Ro
cmVhZFBvcnRpb25SZWN0KTsKKyAgICByZWdpb25Cb3VuZHMubW92ZUJ5KGZsaXBwZWRGbG93VGhy
ZWFkUG9ydGlvblJlY3QubG9jYXRpb24oKSk7Cit9CisKK3ZvaWQgUmVuZGVyUmVnaW9uOjplbnN1
cmVPdmVyZmxvd0ZvckJveChjb25zdCBSZW5kZXJCb3gqIGJveCwgUmVmUHRyPFJlbmRlck92ZXJm
bG93PiYgb3ZlcmZsb3csIGJvb2wgZm9yY2VDcmVhdGlvbikKK3sKKyAgICBBU1NFUlQobV9mbG93
VGhyZWFkLT5yZW5kZXJSZWdpb25MaXN0KCkuY29udGFpbnModGhpcykpOworICAgIEFTU0VSVChp
c1ZhbGlkKCkpOworCisgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IHJlbmRlckJv
eFJlZ2lvbkluZm8oYm94KTsKKyAgICBpZiAoIWJveEluZm8gJiYgIWZvcmNlQ3JlYXRpb24pCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChib3hJbmZvICYmIGJveEluZm8tPm92ZXJmbG93KCkp
IHsKKyAgICAgICAgb3ZlcmZsb3cgPSBib3hJbmZvLT5vdmVyZmxvdygpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIExheW91dFJlY3QgYm9yZGVyQm94ID0gYm94LT5ib3JkZXJC
b3hSZWN0SW5SZWdpb24odGhpcyk7CisgICAgTGF5b3V0UmVjdCBjbGllbnRCb3g7CisgICAgQVNT
RVJUKG1fZmxvd1RocmVhZC0+b2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZsb3dSZWdpb24oYm94LCB0
aGlzKSk7CisKKyAgICBpZiAoIWJvcmRlckJveC5pc0VtcHR5KCkpIHsKKyAgICAgICAgYm9yZGVy
Qm94ID0gcmVjdEZsb3dQb3J0aW9uRm9yQm94KGJveCwgYm9yZGVyQm94KTsKKyAgICAgICAgCisg
ICAgICAgIGNsaWVudEJveCA9IGJveC0+Y2xpZW50Qm94UmVjdEluUmVnaW9uKHRoaXMpOworICAg
ICAgICBjbGllbnRCb3ggPSByZWN0Rmxvd1BvcnRpb25Gb3JCb3goYm94LCBjbGllbnRCb3gpOwor
ICAgICAgICAKKyAgICAgICAgbV9mbG93VGhyZWFkLT5mbGlwRm9yV3JpdGluZ01vZGVMb2NhbENv
b3JkaW5hdGVzKGJvcmRlckJveCk7CisgICAgICAgIG1fZmxvd1RocmVhZC0+ZmxpcEZvcldyaXRp
bmdNb2RlTG9jYWxDb29yZGluYXRlcyhjbGllbnRCb3gpOworICAgIH0KKworICAgIGlmIChib3hJ
bmZvKSB7CisgICAgICAgIGJveEluZm8tPmNyZWF0ZU92ZXJmbG93KGNsaWVudEJveCwgYm9yZGVy
Qm94KTsKKyAgICAgICAgb3ZlcmZsb3cgPSBib3hJbmZvLT5vdmVyZmxvdygpOworICAgIH0gZWxz
ZQorICAgICAgICBvdmVyZmxvdyA9IGFkb3B0UmVmKG5ldyBSZW5kZXJPdmVyZmxvdyhjbGllbnRC
b3gsIGJvcmRlckJveCkpOworfQorCitMYXlvdXRSZWN0IFJlbmRlclJlZ2lvbjo6cmVjdEZsb3dQ
b3J0aW9uRm9yQm94KGNvbnN0IFJlbmRlckJveCogYm94LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0
KSBjb25zdAoreworICAgIExheW91dFJlY3QgbWFwcGVkUmVjdCA9IG1fZmxvd1RocmVhZC0+bWFw
RnJvbUxvY2FsVG9GbG93VGhyZWFkKGJveCwgcmVjdCk7CisKKyAgICBSZW5kZXJSZWdpb24qIHN0
YXJ0UmVnaW9uID0gbnVsbHB0cjsKKyAgICBSZW5kZXJSZWdpb24qIGVuZFJlZ2lvbiA9IG51bGxw
dHI7CisgICAgaWYgKG1fZmxvd1RocmVhZC0+Z2V0UmVnaW9uUmFuZ2VGb3JCb3goYm94LCBzdGFy
dFJlZ2lvbiwgZW5kUmVnaW9uKSkgeworICAgICAgICBpZiAoZmxvd1RocmVhZCgpLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpKSB7CisgICAgICAgICAgICBpZiAodGhpcyAhPSBzdGFydFJlZ2lv
bikKKyAgICAgICAgICAgICAgICBtYXBwZWRSZWN0LnNoaWZ0WUVkZ2VUbyhzdGQ6Om1heDxMYXlv
dXRVbml0Pihsb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRlbnQoKSwgbWFwcGVkUmVjdC55KCkp
KTsKKyAgICAgICAgICAgIGlmICh0aGlzICE9IGVuZFJlZ2lvbikKKyAgICAgICAgICAgICAgICBt
YXBwZWRSZWN0LnNldEhlaWdodChzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBzdGQ6Om1pbjxMYXlv
dXRVbml0Pihsb2dpY2FsQm90dG9tRm9yRmxvd1RocmVhZENvbnRlbnQoKSAtIG1hcHBlZFJlY3Qu
eSgpLCBtYXBwZWRSZWN0LmhlaWdodCgpKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgaWYgKHRoaXMgIT0gc3RhcnRSZWdpb24pCisgICAgICAgICAgICAgICAgbWFwcGVkUmVjdC5z
aGlmdFhFZGdlVG8oc3RkOjptYXg8TGF5b3V0VW5pdD4obG9naWNhbFRvcEZvckZsb3dUaHJlYWRD
b250ZW50KCksIG1hcHBlZFJlY3QueCgpKSk7CisgICAgICAgICAgICBpZiAodGhpcyAhPSBlbmRS
ZWdpb24pCisgICAgICAgICAgICAgICAgbWFwcGVkUmVjdC5zZXRXaWR0aChzdGQ6Om1heDxMYXlv
dXRVbml0PigwLCBzdGQ6Om1pbjxMYXlvdXRVbml0Pihsb2dpY2FsQm90dG9tRm9yRmxvd1RocmVh
ZENvbnRlbnQoKSAtIG1hcHBlZFJlY3QueCgpLCBtYXBwZWRSZWN0LndpZHRoKCkpKSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbV9mbG93VGhyZWFkLT5tYXBGcm9tRmxvd1RocmVh
ZFRvTG9jYWwoYm94LCBtYXBwZWRSZWN0KTsKK30KKwordm9pZCBSZW5kZXJSZWdpb246OmFkZExh
eW91dE92ZXJmbG93Rm9yQm94KGNvbnN0IFJlbmRlckJveCogYm94LCBjb25zdCBMYXlvdXRSZWN0
JiByZWN0KQoreworICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgUmVmUHRyPFJlbmRlck92ZXJmbG93PiByZWdpb25PdmVyZmxvdzsKKyAgICBlbnN1cmVPdmVy
Zmxvd0ZvckJveChib3gsIHJlZ2lvbk92ZXJmbG93LCBmYWxzZSk7CisKKyAgICBpZiAoIXJlZ2lv
bk92ZXJmbG93KQorICAgICAgICByZXR1cm47CisKKyAgICByZWdpb25PdmVyZmxvdy0+YWRkTGF5
b3V0T3ZlcmZsb3cocmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyUmVnaW9uOjphZGRWaXN1YWxPdmVy
Zmxvd0ZvckJveChjb25zdCBSZW5kZXJCb3gqIGJveCwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkK
K3sKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0
cjxSZW5kZXJPdmVyZmxvdz4gcmVnaW9uT3ZlcmZsb3c7CisgICAgZW5zdXJlT3ZlcmZsb3dGb3JC
b3goYm94LCByZWdpb25PdmVyZmxvdywgZmFsc2UpOworCisgICAgaWYgKCFyZWdpb25PdmVyZmxv
dykKKyAgICAgICAgcmV0dXJuOworCisgICAgTGF5b3V0UmVjdCBmbGlwcGVkUmVjdCA9IHJlY3Q7
CisgICAgZmxvd1RocmVhZCgpLT5mbGlwRm9yV3JpdGluZ01vZGVMb2NhbENvb3JkaW5hdGVzKGZs
aXBwZWRSZWN0KTsKKyAgICByZWdpb25PdmVyZmxvdy0+YWRkVmlzdWFsT3ZlcmZsb3coZmxpcHBl
ZFJlY3QpOworfQorCitMYXlvdXRSZWN0IFJlbmRlclJlZ2lvbjo6bGF5b3V0T3ZlcmZsb3dSZWN0
Rm9yQm94KGNvbnN0IFJlbmRlckJveCogYm94KQoreworICAgIFJlZlB0cjxSZW5kZXJPdmVyZmxv
dz4gb3ZlcmZsb3c7CisgICAgZW5zdXJlT3ZlcmZsb3dGb3JCb3goYm94LCBvdmVyZmxvdywgdHJ1
ZSk7CisgICAgCisgICAgQVNTRVJUKG92ZXJmbG93KTsKKyAgICByZXR1cm4gb3ZlcmZsb3ctPmxh
eW91dE92ZXJmbG93UmVjdCgpOworfQorCitMYXlvdXRSZWN0IFJlbmRlclJlZ2lvbjo6dmlzdWFs
T3ZlcmZsb3dSZWN0Rm9yQm94KGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiBib3gpCit7Cisg
ICAgaWYgKGlzPFJlbmRlcklubGluZT4oYm94KSkgeworICAgICAgICBjb25zdCBSZW5kZXJJbmxp
bmUmIGlubGluZUJveCA9IGRvd25jYXN0PFJlbmRlcklubGluZT4oYm94KTsKKyAgICAgICAgcmV0
dXJuIGlubGluZUJveC5saW5lc1Zpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3hJblJlZ2lvbih0aGlz
KTsKKyAgICB9CisKKyAgICBpZiAoaXM8UmVuZGVyQm94Pihib3gpKSB7CisgICAgICAgIFJlZlB0
cjxSZW5kZXJPdmVyZmxvdz4gb3ZlcmZsb3c7CisgICAgICAgIGVuc3VyZU92ZXJmbG93Rm9yQm94
KCZkb3duY2FzdDxSZW5kZXJCb3g+KGJveCksIG92ZXJmbG93LCB0cnVlKTsKKworICAgICAgICBB
U1NFUlQob3ZlcmZsb3cpOworICAgICAgICByZXR1cm4gb3ZlcmZsb3ctPnZpc3VhbE92ZXJmbG93
UmVjdCgpOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBM
YXlvdXRSZWN0KCk7Cit9CisKKy8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBmb3Igd3JpdGlu
ZyBtb2Rlcy4KK0xheW91dFJlY3QgUmVuZGVyUmVnaW9uOjpsYXlvdXRPdmVyZmxvd1JlY3RGb3JC
b3hGb3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJCb3gqIGJveCkKK3sKKyAgICAvLyBPbmx5IHBy
b3BhZ2F0ZSBpbnRlcmlvciBsYXlvdXQgb3ZlcmZsb3cgaWYgd2UgZG9uJ3QgY2xpcCBpdC4KKyAg
ICBMYXlvdXRSZWN0IHJlY3QgPSBib3gtPmJvcmRlckJveFJlY3RJblJlZ2lvbih0aGlzKTsKKyAg
ICByZWN0ID0gcmVjdEZsb3dQb3J0aW9uRm9yQm94KGJveCwgcmVjdCk7CisgICAgaWYgKCFib3gt
Pmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICByZWN0LnVuaXRlKGxheW91dE92ZXJmbG93UmVj
dEZvckJveChib3gpKTsKKworICAgIGJvb2wgaGFzVHJhbnNmb3JtID0gYm94LT5oYXNUcmFuc2Zv
cm0oKTsKKyAgICBpZiAoYm94LT5pc0luRmxvd1Bvc2l0aW9uZWQoKSB8fCBoYXNUcmFuc2Zvcm0p
IHsKKyAgICAgICAgaWYgKGhhc1RyYW5zZm9ybSkKKyAgICAgICAgICAgIHJlY3QgPSBib3gtPmxh
eWVyKCktPmN1cnJlbnRUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlY3QpOworCisgICAgICAgIGlmIChi
b3gtPmlzSW5GbG93UG9zaXRpb25lZCgpKQorICAgICAgICAgICAgcmVjdC5tb3ZlKGJveC0+b2Zm
c2V0Rm9ySW5GbG93UG9zaXRpb24oKSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlY3Q7Cit9CisK
K0xheW91dFJlY3QgUmVuZGVyUmVnaW9uOjp2aXN1YWxPdmVyZmxvd1JlY3RGb3JCb3hGb3JQcm9w
YWdhdGlvbihjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgYm94KQoreworICAgIExheW91dFJl
Y3QgcmVjdCA9IHZpc3VhbE92ZXJmbG93UmVjdEZvckJveChib3gpOworICAgIGZsb3dUaHJlYWQo
KS0+ZmxpcEZvcldyaXRpbmdNb2RlTG9jYWxDb29yZGluYXRlcyhyZWN0KTsKKworICAgIHJldHVy
biByZWN0OworfQorCitDdXJyZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lcjo6Q3VycmVudFJlbmRl
clJlZ2lvbk1haW50YWluZXIoUmVuZGVyUmVnaW9uJiByZWdpb24pCisgICAgOiBtX3JlZ2lvbihy
ZWdpb24pCit7CisgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IHJlZ2lvbi5mbG93
VGhyZWFkKCk7CisgICAgLy8gQSBmbG93IHRocmVhZCBjYW4gaGF2ZSBvbmx5IG9uZSBjdXJyZW50
IHJlZ2lvbi4KKyAgICBBU1NFUlQoIWZsb3dUaHJlYWQtPmN1cnJlbnRSZWdpb24oKSk7CisgICAg
Zmxvd1RocmVhZC0+c2V0Q3VycmVudFJlZ2lvbk1haW50YWluZXIodGhpcyk7Cit9CisKK0N1cnJl
bnRSZW5kZXJSZWdpb25NYWludGFpbmVyOjp+Q3VycmVudFJlbmRlclJlZ2lvbk1haW50YWluZXIo
KQoreworICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBtX3JlZ2lvbi5mbG93VGhy
ZWFkKCk7CisgICAgZmxvd1RocmVhZC0+c2V0Q3VycmVudFJlZ2lvbk1haW50YWluZXIobnVsbHB0
cik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVu
dENvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZyYWdtZW50Q29udGFpbmVyLmNwcAkocmV2aXNpb24gMjIyNDYyKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50Q29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsMTQgKzI4LDE0IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlJlbmRlclJlZ2lvbi5oIgorI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50Q29udGFpbmVyLmgi
CiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0
LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxheW91dFJlcGFpbnRlci5oIgog
I2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyQm94UmVnaW9uSW5mby5oIgorI2lu
Y2x1ZGUgIlJlbmRlckJveEZyYWdtZW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlckZsb3dUaHJl
YWQuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRv
ci5oIgpAQCAtNDUsMjYgKzQ1LDI2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVuZGVy
UmVnaW9uOjpSZW5kZXJSZWdpb24oRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmJiBzdHls
ZSwgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCkKK1JlbmRlckZyYWdtZW50Q29udGFpbmVy
OjpSZW5kZXJGcmFnbWVudENvbnRhaW5lcihFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYm
IHN0eWxlLCBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkKQogICAgIDogUmVuZGVyQmxvY2tG
bG93KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQogICAgICwgbV9mbG93VGhyZWFkKGZsb3dUaHJl
YWQpCiAgICAgLCBtX2lzVmFsaWQoZmFsc2UpCiB7CiB9CiAKLVJlbmRlclJlZ2lvbjo6UmVuZGVy
UmVnaW9uKERvY3VtZW50JiBkb2N1bWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSwgUmVuZGVyRmxv
d1RocmVhZCogZmxvd1RocmVhZCkKK1JlbmRlckZyYWdtZW50Q29udGFpbmVyOjpSZW5kZXJGcmFn
bWVudENvbnRhaW5lcihEb2N1bWVudCYgZG9jdW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUsIFJl
bmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQpCiAgICAgOiBSZW5kZXJCbG9ja0Zsb3coZG9jdW1l
bnQsIFdURk1vdmUoc3R5bGUpKQogICAgICwgbV9mbG93VGhyZWFkKGZsb3dUaHJlYWQpCiAgICAg
LCBtX2lzVmFsaWQoZmFsc2UpCiB7CiB9CiAKLUxheW91dFBvaW50IFJlbmRlclJlZ2lvbjo6bWFw
UmVnaW9uUG9pbnRJbnRvRmxvd1RocmVhZENvb3JkaW5hdGVzKGNvbnN0IExheW91dFBvaW50JiBw
b2ludCkKK0xheW91dFBvaW50IFJlbmRlckZyYWdtZW50Q29udGFpbmVyOjptYXBGcmFnbWVudFBv
aW50SW50b0Zsb3dUaHJlYWRDb29yZGluYXRlcyhjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCiB7
Ci0gICAgLy8gQXNzdW1pbmcgdGhlIHBvaW50IGlzIHJlbGF0aXZlIHRvIHRoZSByZWdpb24gYmxv
Y2ssIDMgY2FzZXMgd2lsbCBiZSBjb25zaWRlcmVkOgorICAgIC8vIEFzc3VtaW5nIHRoZSBwb2lu
dCBpcyByZWxhdGl2ZSB0byB0aGUgZnJhZ21lbnQgYmxvY2ssIDMgY2FzZXMgd2lsbCBiZSBjb25z
aWRlcmVkOgogICAgIC8vIGEpIHRvcCBtYXJnaW4sIHBhZGRpbmcgb3IgYm9yZGVyLgogICAgIC8v
IGIpIGJvdHRvbSBtYXJnaW4sIHBhZGRpbmcgb3IgYm9yZGVyLgotICAgIC8vIGMpIG5vbi1jb250
ZW50IHJlZ2lvbiBhcmVhLgorICAgIC8vIGMpIG5vbi1jb250ZW50IGZyYWdtZW50IGFyZWEuCiAK
ICAgICBMYXlvdXRVbml0IHBvaW50TG9naWNhbFRvcChpc0hvcml6b250YWxXcml0aW5nTW9kZSgp
ID8gcG9pbnQueSgpIDogcG9pbnQueCgpKTsKICAgICBMYXlvdXRVbml0IHBvaW50TG9naWNhbExl
ZnQoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBvaW50LngoKSA6IHBvaW50LnkoKSk7CkBA
IC05OSwzNyArOTksMzcgQEAgTGF5b3V0UG9pbnQgUmVuZGVyUmVnaW9uOjptYXBSZWdpb25Qb2lu
dAogICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gcG9pbnRJblRocmVhZCA6
IHBvaW50SW5UaHJlYWQudHJhbnNwb3NlZFBvaW50KCk7CiB9CiAKLVZpc2libGVQb3NpdGlvbiBS
ZW5kZXJSZWdpb246OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50LCBj
b25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbikKK1Zpc2libGVQb3NpdGlvbiBSZW5kZXJGcmFnbWVu
dENvbnRhaW5lcjo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsIGNv
bnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCkKIHsKLSAgICBpZiAoIWlzVmFs
aWQoKSB8fCAhbV9mbG93VGhyZWFkLT5maXJzdENoaWxkKCkpIC8vIGNoZWNraW5nIGZvciBlbXB0
eSByZWdpb24gYmxvY2tzLgotICAgICAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9y
UG9pbnQocG9pbnQsIHJlZ2lvbik7CisgICAgaWYgKCFpc1ZhbGlkKCkgfHwgIW1fZmxvd1RocmVh
ZC0+Zmlyc3RDaGlsZCgpKSAvLyBjaGVja2luZyBmb3IgZW1wdHkgZnJhZ21lbnQgYmxvY2tzLgor
ICAgICAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnQocG9pbnQsIGZyYWdt
ZW50KTsKIAotICAgIHJldHVybiBtX2Zsb3dUaHJlYWQtPnBvc2l0aW9uRm9yUG9pbnQobWFwUmVn
aW9uUG9pbnRJbnRvRmxvd1RocmVhZENvb3JkaW5hdGVzKHBvaW50KSwgdGhpcyk7CisgICAgcmV0
dXJuIG1fZmxvd1RocmVhZC0+cG9zaXRpb25Gb3JQb2ludChtYXBGcmFnbWVudFBvaW50SW50b0Zs
b3dUaHJlYWRDb29yZGluYXRlcyhwb2ludCksIHRoaXMpOwogfQogCi1MYXlvdXRVbml0IFJlbmRl
clJlZ2lvbjo6cGFnZUxvZ2ljYWxXaWR0aCgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckZyYWdt
ZW50Q29udGFpbmVyOjpwYWdlTG9naWNhbFdpZHRoKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNW
YWxpZCgpKTsKICAgICByZXR1cm4gbV9mbG93VGhyZWFkLT5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpID8gY29udGVudFdpZHRoKCkgOiBjb250ZW50SGVpZ2h0KCk7CiB9CiAKLUxheW91dFVuaXQg
UmVuZGVyUmVnaW9uOjpwYWdlTG9naWNhbEhlaWdodCgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRl
ckZyYWdtZW50Q29udGFpbmVyOjpwYWdlTG9naWNhbEhlaWdodCgpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKGlzVmFsaWQoKSk7CiAgICAgcmV0dXJuIG1fZmxvd1RocmVhZC0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IGNvbnRlbnRIZWlnaHQoKSA6IGNvbnRlbnRXaWR0aCgpOwogfQogCi1MYXlv
dXRVbml0IFJlbmRlclJlZ2lvbjo6bG9naWNhbEhlaWdodE9mQWxsRmxvd1RocmVhZENvbnRlbnQo
KSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6bG9naWNhbEhlaWdo
dE9mQWxsRmxvd1RocmVhZENvbnRlbnQoKSBjb25zdAogewogICAgIHJldHVybiBwYWdlTG9naWNh
bEhlaWdodCgpOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlclJlZ2lvbjo6Zmxvd1RocmVhZFBvcnRp
b25PdmVyZmxvd1JlY3QoKQorTGF5b3V0UmVjdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6Zmxv
d1RocmVhZFBvcnRpb25PdmVyZmxvd1JlY3QoKQogewotICAgIHJldHVybiBvdmVyZmxvd1JlY3RG
b3JGbG93VGhyZWFkUG9ydGlvbihmbG93VGhyZWFkUG9ydGlvblJlY3QoKSwgaXNGaXJzdFJlZ2lv
bigpLCBpc0xhc3RSZWdpb24oKSwgVmlzdWFsT3ZlcmZsb3cpOworICAgIHJldHVybiBvdmVyZmxv
d1JlY3RGb3JGbG93VGhyZWFkUG9ydGlvbihmbG93VGhyZWFkUG9ydGlvblJlY3QoKSwgaXNGaXJz
dEZyYWdtZW50KCksIGlzTGFzdEZyYWdtZW50KCksIFZpc3VhbE92ZXJmbG93KTsKIH0KIAotTGF5
b3V0UG9pbnQgUmVuZGVyUmVnaW9uOjpmbG93VGhyZWFkUG9ydGlvbkxvY2F0aW9uKCkgY29uc3QK
K0xheW91dFBvaW50IFJlbmRlckZyYWdtZW50Q29udGFpbmVyOjpmbG93VGhyZWFkUG9ydGlvbkxv
Y2F0aW9uKCkgY29uc3QKIHsKICAgICBMYXlvdXRQb2ludCBwb3J0aW9uTG9jYXRpb247CiAgICAg
TGF5b3V0UmVjdCBwb3J0aW9uUmVjdCA9IGZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpOwpAQCAtMTQ0
LDcgKzE0NCw3IEBAIExheW91dFBvaW50IFJlbmRlclJlZ2lvbjo6Zmxvd1RocmVhZFBvcnQKICAg
ICByZXR1cm4gcG9ydGlvbkxvY2F0aW9uOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlclJlZ2lvbjo6
b3ZlcmZsb3dSZWN0Rm9yRmxvd1RocmVhZFBvcnRpb24oY29uc3QgTGF5b3V0UmVjdCYgZmxvd1Ro
cmVhZFBvcnRpb25SZWN0LCBib29sIGlzRmlyc3RQb3J0aW9uLCBib29sIGlzTGFzdFBvcnRpb24s
IE92ZXJmbG93VHlwZSBvdmVyZmxvd1R5cGUpCitMYXlvdXRSZWN0IFJlbmRlckZyYWdtZW50Q29u
dGFpbmVyOjpvdmVyZmxvd1JlY3RGb3JGbG93VGhyZWFkUG9ydGlvbihjb25zdCBMYXlvdXRSZWN0
JiBmbG93VGhyZWFkUG9ydGlvblJlY3QsIGJvb2wgaXNGaXJzdFBvcnRpb24sIGJvb2wgaXNMYXN0
UG9ydGlvbiwgT3ZlcmZsb3dUeXBlIG92ZXJmbG93VHlwZSkKIHsKICAgICBBU1NFUlQoaXNWYWxp
ZCgpKTsKICAgICBpZiAoc2hvdWxkQ2xpcEZsb3dUaHJlYWRDb250ZW50KCkpCkBAIC0xNzAsMzEg
KzE3MCwzMSBAQCBMYXlvdXRSZWN0IFJlbmRlclJlZ2lvbjo6b3ZlcmZsb3dSZWN0Rm9yCiAgICAg
cmV0dXJuIGNsaXBSZWN0OwogfQogCi1MYXlvdXRVbml0IFJlbmRlclJlZ2lvbjo6cGFnZUxvZ2lj
YWxUb3BGb3JPZmZzZXQoTGF5b3V0VW5pdCAvKiBvZmZzZXQgKi8pIGNvbnN0CitMYXlvdXRVbml0
IFJlbmRlckZyYWdtZW50Q29udGFpbmVyOjpwYWdlTG9naWNhbFRvcEZvck9mZnNldChMYXlvdXRV
bml0IC8qIG9mZnNldCAqLykgY29uc3QKIHsKICAgICByZXR1cm4gZmxvd1RocmVhZCgpLT5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpID8gZmxvd1RocmVhZFBvcnRpb25SZWN0KCkueSgpIDogZmxv
d1RocmVhZFBvcnRpb25SZWN0KCkueCgpOwogfQogCi1ib29sIFJlbmRlclJlZ2lvbjo6aXNGaXJz
dFJlZ2lvbigpIGNvbnN0Citib29sIFJlbmRlckZyYWdtZW50Q29udGFpbmVyOjppc0ZpcnN0RnJh
Z21lbnQoKSBjb25zdAogewogICAgIEFTU0VSVChpc1ZhbGlkKCkpOwogCi0gICAgcmV0dXJuIG1f
Zmxvd1RocmVhZC0+Zmlyc3RSZWdpb24oKSA9PSB0aGlzOworICAgIHJldHVybiBtX2Zsb3dUaHJl
YWQtPmZpcnN0RnJhZ21lbnQoKSA9PSB0aGlzOwogfQogCi1ib29sIFJlbmRlclJlZ2lvbjo6aXNM
YXN0UmVnaW9uKCkgY29uc3QKK2Jvb2wgUmVuZGVyRnJhZ21lbnRDb250YWluZXI6OmlzTGFzdEZy
YWdtZW50KCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKIAotICAgIHJldHVybiBt
X2Zsb3dUaHJlYWQtPmxhc3RSZWdpb24oKSA9PSB0aGlzOworICAgIHJldHVybiBtX2Zsb3dUaHJl
YWQtPmxhc3RGcmFnbWVudCgpID09IHRoaXM7CiB9CiAKLWJvb2wgUmVuZGVyUmVnaW9uOjpzaG91
bGRDbGlwRmxvd1RocmVhZENvbnRlbnQoKSBjb25zdAorYm9vbCBSZW5kZXJGcmFnbWVudENvbnRh
aW5lcjo6c2hvdWxkQ2xpcEZsb3dUaHJlYWRDb250ZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4g
aGFzT3ZlcmZsb3dDbGlwKCk7CiB9CiAKLXZvaWQgUmVuZGVyUmVnaW9uOjpzdHlsZURpZENoYW5n
ZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQordm9p
ZCBSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNl
IGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKICAgICBSZW5kZXJCbG9ja0Zs
b3c6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKIApAQCAtMjAyLDEwICsyMDIsMTAg
QEAgdm9pZCBSZW5kZXJSZWdpb246OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRAogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAob2xkU3R5bGUgJiYgb2xkU3R5bGUtPndyaXRpbmdNb2RlKCkgIT0gc3R5
bGUoKS53cml0aW5nTW9kZSgpKQotICAgICAgICBtX2Zsb3dUaHJlYWQtPnJlZ2lvbkNoYW5nZWRX
cml0aW5nTW9kZSh0aGlzKTsKKyAgICAgICAgbV9mbG93VGhyZWFkLT5mcmFnbWVudENoYW5nZWRX
cml0aW5nTW9kZSh0aGlzKTsKIH0KIAotdm9pZCBSZW5kZXJSZWdpb246OmNvbXB1dGVPdmVyZmxv
d0Zyb21GbG93VGhyZWFkKCkKK3ZvaWQgUmVuZGVyRnJhZ21lbnRDb250YWluZXI6OmNvbXB1dGVP
dmVyZmxvd0Zyb21GbG93VGhyZWFkKCkKIHsKICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKIApAQCAt
MjE2LDIyICsyMTYsMjIgQEAgdm9pZCBSZW5kZXJSZWdpb246OmNvbXB1dGVPdmVyZmxvd0Zyb21G
bAogICAgIGFkZExheW91dE92ZXJmbG93KGxheW91dFJlY3QpOwogICAgIFJlbmRlckZsb3dUaHJl
YWQqIGVuY2xvc2luZ1JlbmRlckZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2Nr
KCk7CiAgICAgaWYgKGVuY2xvc2luZ1JlbmRlckZsb3dUaHJlYWQpCi0gICAgICAgIGVuY2xvc2lu
Z1JlbmRlckZsb3dUaHJlYWQtPmFkZFJlZ2lvbnNMYXlvdXRPdmVyZmxvdyh0aGlzLCBsYXlvdXRS
ZWN0KTsKKyAgICAgICAgZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZC0+YWRkRnJhZ21lbnRzTGF5
b3V0T3ZlcmZsb3codGhpcywgbGF5b3V0UmVjdCk7CiAKICAgICB1cGRhdGVMYXllclRyYW5zZm9y
bSgpOwogICAgIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwogfQogCi12b2lkIFJlbmRl
clJlZ2lvbjo6cmVwYWludEZsb3dUaHJlYWRDb250ZW50KGNvbnN0IExheW91dFJlY3QmIHJlcGFp
bnRSZWN0KQordm9pZCBSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6cmVwYWludEZsb3dUaHJlYWRD
b250ZW50KGNvbnN0IExheW91dFJlY3QmIHJlcGFpbnRSZWN0KQogewogICAgIHJlcGFpbnRGbG93
VGhyZWFkQ29udGVudFJlY3RhbmdsZShyZXBhaW50UmVjdCwgZmxvd1RocmVhZFBvcnRpb25SZWN0
KCksIGNvbnRlbnRCb3hSZWN0KCkubG9jYXRpb24oKSk7CiB9CiAKLXZvaWQgUmVuZGVyUmVnaW9u
OjpyZXBhaW50Rmxvd1RocmVhZENvbnRlbnRSZWN0YW5nbGUoY29uc3QgTGF5b3V0UmVjdCYgcmVw
YWludFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGZsb3dUaHJlYWRQb3J0aW9uUmVjdCwgY29uc3Qg
TGF5b3V0UG9pbnQmIHJlZ2lvbkxvY2F0aW9uLCBjb25zdCBMYXlvdXRSZWN0KiBmbG93VGhyZWFk
UG9ydGlvbkNsaXBSZWN0KQordm9pZCBSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6cmVwYWludEZs
b3dUaHJlYWRDb250ZW50UmVjdGFuZ2xlKGNvbnN0IExheW91dFJlY3QmIHJlcGFpbnRSZWN0LCBj
b25zdCBMYXlvdXRSZWN0JiBmbG93VGhyZWFkUG9ydGlvblJlY3QsIGNvbnN0IExheW91dFBvaW50
JiBmcmFnbWVudExvY2F0aW9uLCBjb25zdCBMYXlvdXRSZWN0KiBmbG93VGhyZWFkUG9ydGlvbkNs
aXBSZWN0KQogewogICAgIEFTU0VSVChpc1ZhbGlkKCkpOwogCi0gICAgLy8gV2Ugb25seSBoYXZl
IHRvIGlzc3VlIGEgcmVwYWludCBpbiB0aGlzIHJlZ2lvbiBpZiB0aGUgcmVnaW9uIHJlY3QgaW50
ZXJzZWN0cyB0aGUgcmVwYWludCByZWN0LgorICAgIC8vIFdlIG9ubHkgaGF2ZSB0byBpc3N1ZSBh
IHJlcGFpbnQgaW4gdGhpcyBmcmFnbWVudCBpZiB0aGUgZnJhZ21lbnQgcmVjdCBpbnRlcnNlY3Rz
IHRoZSByZXBhaW50IHJlY3QuCiAgICAgTGF5b3V0UmVjdCBjbGlwcGVkUmVjdChyZXBhaW50UmVj
dCk7CiAKICAgICBpZiAoZmxvd1RocmVhZFBvcnRpb25DbGlwUmVjdCkgewpAQCAtMjQ0LDEwNyAr
MjQ0LDEwNyBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6cmVwYWludEZsb3dUaHJlYWRDb250CiAgICAg
ICAgIHJldHVybjsKIAogICAgIExheW91dFJlY3QgZmxpcHBlZEZsb3dUaHJlYWRQb3J0aW9uUmVj
dChmbG93VGhyZWFkUG9ydGlvblJlY3QpOwotICAgIGZsb3dUaHJlYWQoKS0+ZmxpcEZvcldyaXRp
bmdNb2RlKGZsaXBwZWRGbG93VGhyZWFkUG9ydGlvblJlY3QpOyAvLyBQdXQgdGhlIHJlZ2lvbiBy
ZWN0cyBpbnRvIHBoeXNpY2FsIGNvb3JkaW5hdGVzLgorICAgIGZsb3dUaHJlYWQoKS0+ZmxpcEZv
cldyaXRpbmdNb2RlKGZsaXBwZWRGbG93VGhyZWFkUG9ydGlvblJlY3QpOyAvLyBQdXQgdGhlIGZy
YWdtZW50IHJlY3RzIGludG8gcGh5c2ljYWwgY29vcmRpbmF0ZXMuCiAKLSAgICAvLyBQdXQgdGhl
IHJlZ2lvbiByZWN0IGludG8gdGhlIHJlZ2lvbidzIHBoeXNpY2FsIGNvb3JkaW5hdGUgc3BhY2Uu
Ci0gICAgY2xpcHBlZFJlY3Quc2V0TG9jYXRpb24ocmVnaW9uTG9jYXRpb24gKyAoY2xpcHBlZFJl
Y3QubG9jYXRpb24oKSAtIGZsaXBwZWRGbG93VGhyZWFkUG9ydGlvblJlY3QubG9jYXRpb24oKSkp
OworICAgIC8vIFB1dCB0aGUgZnJhZ21lbnQgcmVjdCBpbnRvIHRoZSBmcmFnbWVudCdzIHBoeXNp
Y2FsIGNvb3JkaW5hdGUgc3BhY2UuCisgICAgY2xpcHBlZFJlY3Quc2V0TG9jYXRpb24oZnJhZ21l
bnRMb2NhdGlvbiArIChjbGlwcGVkUmVjdC5sb2NhdGlvbigpIC0gZmxpcHBlZEZsb3dUaHJlYWRQ
b3J0aW9uUmVjdC5sb2NhdGlvbigpKSk7CiAKLSAgICAvLyBOb3cgc3dpdGNoIHRvIHRoZSByZWdp
b24ncyB3cml0aW5nIG1vZGUgY29vcmRpbmF0ZSBzcGFjZSBhbmQgbGV0IGl0IHJlcGFpbnQgaXRz
ZWxmLgorICAgIC8vIE5vdyBzd2l0Y2ggdG8gdGhlIGZyYWdtZW50J3Mgd3JpdGluZyBtb2RlIGNv
b3JkaW5hdGUgc3BhY2UgYW5kIGxldCBpdCByZXBhaW50IGl0c2VsZi4KICAgICBmbGlwRm9yV3Jp
dGluZ01vZGUoY2xpcHBlZFJlY3QpOwogICAgIAogICAgIC8vIElzc3VlIHRoZSByZXBhaW50Lgog
ICAgIHJlcGFpbnRSZWN0YW5nbGUoY2xpcHBlZFJlY3QpOwogfQogCi12b2lkIFJlbmRlclJlZ2lv
bjo6aW5zdGFsbEZsb3dUaHJlYWQoKQordm9pZCBSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6aW5z
dGFsbEZsb3dUaHJlYWQoKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lk
IFJlbmRlclJlZ2lvbjo6YXR0YWNoUmVnaW9uKCkKK3ZvaWQgUmVuZGVyRnJhZ21lbnRDb250YWlu
ZXI6OmF0dGFjaEZyYWdtZW50KCkKIHsKICAgICBpZiAocmVuZGVyVHJlZUJlaW5nRGVzdHJveWVk
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICAvLyBBIHJlZ2lvbiBzdGFydHMgb2ZmIGlu
dmFsaWQuCisgICAgLy8gQSBmcmFnbWVudCBzdGFydHMgb2ZmIGludmFsaWQuCiAgICAgc2V0SXNW
YWxpZChmYWxzZSk7CiAKICAgICAvLyBJbml0aWFsaXplIHRoZSBmbG93IHRocmVhZCByZWZlcmVu
Y2UgYW5kIGNyZWF0ZSB0aGUgZmxvdyB0aHJlYWQgb2JqZWN0IGlmIG5lZWRlZC4KLSAgICAvLyBU
aGUgZmxvdyB0aHJlYWQgbGlmZXRpbWUgaXMgaW5mbHVlbmNlZCBieSB0aGUgbnVtYmVyIG9mIHJl
Z2lvbnMgYXR0YWNoZWQgdG8gaXQsCi0gICAgLy8gYW5kIHdlIGFyZSBhdHRhY2hpbmcgdGhlIHJl
Z2lvbiB0byB0aGUgZmxvdyB0aHJlYWQuCisgICAgLy8gVGhlIGZsb3cgdGhyZWFkIGxpZmV0aW1l
IGlzIGluZmx1ZW5jZWQgYnkgdGhlIG51bWJlciBvZiBmcmFnbWVudHMgYXR0YWNoZWQgdG8gaXQs
CisgICAgLy8gYW5kIHdlIGFyZSBhdHRhY2hpbmcgdGhlIGZyYWdtZW50IHRvIHRoZSBmbG93IHRo
cmVhZC4KICAgICBpbnN0YWxsRmxvd1RocmVhZCgpOwogICAgIAogICAgIGlmICghbV9mbG93VGhy
ZWFkKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBPbmx5IGFmdGVyIGFkZGluZyB0aGUgcmVn
aW9uIHRvIHRoZSB0aHJlYWQsIHRoZSByZWdpb24gaXMgbWFya2VkIHRvIGJlIHZhbGlkLgotICAg
IG1fZmxvd1RocmVhZC0+YWRkUmVnaW9uVG9UaHJlYWQodGhpcyk7CisgICAgLy8gT25seSBhZnRl
ciBhZGRpbmcgdGhlIGZyYWdtZW50IHRvIHRoZSB0aHJlYWQsIHRoZSBmcmFnbWVudCBpcyBtYXJr
ZWQgdG8gYmUgdmFsaWQuCisgICAgbV9mbG93VGhyZWFkLT5hZGRGcmFnbWVudFRvVGhyZWFkKHRo
aXMpOwogfQogCi12b2lkIFJlbmRlclJlZ2lvbjo6ZGV0YWNoUmVnaW9uKCkKK3ZvaWQgUmVuZGVy
RnJhZ21lbnRDb250YWluZXI6OmRldGFjaEZyYWdtZW50KCkKIHsKICAgICBpZiAobV9mbG93VGhy
ZWFkKQotICAgICAgICBtX2Zsb3dUaHJlYWQtPnJlbW92ZVJlZ2lvbkZyb21UaHJlYWQodGhpcyk7
CisgICAgICAgIG1fZmxvd1RocmVhZC0+cmVtb3ZlRnJhZ21lbnRGcm9tVGhyZWFkKHRoaXMpOwog
ICAgIG1fZmxvd1RocmVhZCA9IG51bGxwdHI7CiB9CiAKLVJlbmRlckJveFJlZ2lvbkluZm8qIFJl
bmRlclJlZ2lvbjo6cmVuZGVyQm94UmVnaW9uSW5mbyhjb25zdCBSZW5kZXJCb3gqIGJveCkgY29u
c3QKK1JlbmRlckJveEZyYWdtZW50SW5mbyogUmVuZGVyRnJhZ21lbnRDb250YWluZXI6OnJlbmRl
ckJveEZyYWdtZW50SW5mbyhjb25zdCBSZW5kZXJCb3gqIGJveCkgY29uc3QKIHsKICAgICBBU1NF
UlQoaXNWYWxpZCgpKTsKLSAgICByZXR1cm4gbV9yZW5kZXJCb3hSZWdpb25JbmZvLmdldChib3gp
OworICAgIHJldHVybiBtX3JlbmRlckJveEZyYWdtZW50SW5mby5nZXQoYm94KTsKIH0KIAotUmVu
ZGVyQm94UmVnaW9uSW5mbyogUmVuZGVyUmVnaW9uOjpzZXRSZW5kZXJCb3hSZWdpb25JbmZvKGNv
bnN0IFJlbmRlckJveCogYm94LCBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0SW5zZXQsIExheW91dFVu
aXQgbG9naWNhbFJpZ2h0SW5zZXQsCitSZW5kZXJCb3hGcmFnbWVudEluZm8qIFJlbmRlckZyYWdt
ZW50Q29udGFpbmVyOjpzZXRSZW5kZXJCb3hGcmFnbWVudEluZm8oY29uc3QgUmVuZGVyQm94KiBi
b3gsIExheW91dFVuaXQgbG9naWNhbExlZnRJbnNldCwgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRJ
bnNldCwKICAgICBib29sIGNvbnRhaW5pbmdCbG9ja0NoYWluSXNJbnNldCkKIHsKICAgICBBU1NF
UlQoaXNWYWxpZCgpKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCb3hSZWdpb25JbmZv
PiYgYm94SW5mbyA9IG1fcmVuZGVyQm94UmVnaW9uSW5mby5hZGQoYm94LCBzdGQ6Om1ha2VfdW5p
cXVlPFJlbmRlckJveFJlZ2lvbkluZm8+KGxvZ2ljYWxMZWZ0SW5zZXQsIGxvZ2ljYWxSaWdodElu
c2V0LCBjb250YWluaW5nQmxvY2tDaGFpbklzSW5zZXQpKS5pdGVyYXRvci0+dmFsdWU7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlckJveEZyYWdtZW50SW5mbz4mIGJveEluZm8gPSBtX3JlbmRl
ckJveEZyYWdtZW50SW5mby5hZGQoYm94LCBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlckJveEZyYWdt
ZW50SW5mbz4obG9naWNhbExlZnRJbnNldCwgbG9naWNhbFJpZ2h0SW5zZXQsIGNvbnRhaW5pbmdC
bG9ja0NoYWluSXNJbnNldCkpLml0ZXJhdG9yLT52YWx1ZTsKICAgICByZXR1cm4gYm94SW5mby5n
ZXQoKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJveFJlZ2lvbkluZm8+IFJlbmRlclJl
Z2lvbjo6dGFrZVJlbmRlckJveFJlZ2lvbkluZm8oY29uc3QgUmVuZGVyQm94KiBib3gpCitzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyQm94RnJhZ21lbnRJbmZvPiBSZW5kZXJGcmFnbWVudENvbnRhaW5l
cjo6dGFrZVJlbmRlckJveEZyYWdtZW50SW5mbyhjb25zdCBSZW5kZXJCb3gqIGJveCkKIHsKLSAg
ICByZXR1cm4gbV9yZW5kZXJCb3hSZWdpb25JbmZvLnRha2UoYm94KTsKKyAgICByZXR1cm4gbV9y
ZW5kZXJCb3hGcmFnbWVudEluZm8udGFrZShib3gpOwogfQogCi12b2lkIFJlbmRlclJlZ2lvbjo6
cmVtb3ZlUmVuZGVyQm94UmVnaW9uSW5mbyhjb25zdCBSZW5kZXJCb3gmIGJveCkKK3ZvaWQgUmVu
ZGVyRnJhZ21lbnRDb250YWluZXI6OnJlbW92ZVJlbmRlckJveEZyYWdtZW50SW5mbyhjb25zdCBS
ZW5kZXJCb3gmIGJveCkKIHsKLSAgICBtX3JlbmRlckJveFJlZ2lvbkluZm8ucmVtb3ZlKCZib3gp
OworICAgIG1fcmVuZGVyQm94RnJhZ21lbnRJbmZvLnJlbW92ZSgmYm94KTsKIH0KIAotdm9pZCBS
ZW5kZXJSZWdpb246OmRlbGV0ZUFsbFJlbmRlckJveFJlZ2lvbkluZm8oKQordm9pZCBSZW5kZXJG
cmFnbWVudENvbnRhaW5lcjo6ZGVsZXRlQWxsUmVuZGVyQm94RnJhZ21lbnRJbmZvKCkKIHsKLSAg
ICBtX3JlbmRlckJveFJlZ2lvbkluZm8uY2xlYXIoKTsKKyAgICBtX3JlbmRlckJveEZyYWdtZW50
SW5mby5jbGVhcigpOwogfQogCi1MYXlvdXRVbml0IFJlbmRlclJlZ2lvbjo6bG9naWNhbFRvcE9m
Rmxvd1RocmVhZENvbnRlbnRSZWN0KGNvbnN0IExheW91dFJlY3QmIHJlY3QpIGNvbnN0CitMYXlv
dXRVbml0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyOjpsb2dpY2FsVG9wT2ZGbG93VGhyZWFkQ29u
dGVudFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNW
YWxpZCgpKTsKICAgICByZXR1cm4gZmxvd1RocmVhZCgpLT5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpID8gcmVjdC55KCkgOiByZWN0LngoKTsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJSZWdpb246
OmxvZ2ljYWxCb3R0b21PZkZsb3dUaHJlYWRDb250ZW50UmVjdChjb25zdCBMYXlvdXRSZWN0JiBy
ZWN0KSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6bG9naWNhbEJv
dHRvbU9mRmxvd1RocmVhZENvbnRlbnRSZWN0KGNvbnN0IExheW91dFJlY3QmIHJlY3QpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CiAgICAgcmV0dXJuIGZsb3dUaHJlYWQoKS0+aXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJlY3QubWF4WSgpIDogcmVjdC5tYXhYKCk7CiB9CiAK
LXZvaWQgUmVuZGVyUmVnaW9uOjppbnNlcnRlZEludG9UcmVlKCkKK3ZvaWQgUmVuZGVyRnJhZ21l
bnRDb250YWluZXI6Omluc2VydGVkSW50b1RyZWUoKQogewotICAgIGF0dGFjaFJlZ2lvbigpOwor
ICAgIGF0dGFjaEZyYWdtZW50KCk7CiAgICAgaWYgKGlzVmFsaWQoKSkKICAgICAgICAgUmVuZGVy
QmxvY2tGbG93OjppbnNlcnRlZEludG9UcmVlKCk7CiB9CiAKLXZvaWQgUmVuZGVyUmVnaW9uOjp3
aWxsQmVSZW1vdmVkRnJvbVRyZWUoKQordm9pZCBSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6d2ls
bEJlUmVtb3ZlZEZyb21UcmVlKCkKIHsKICAgICBSZW5kZXJCbG9ja0Zsb3c6OndpbGxCZVJlbW92
ZWRGcm9tVHJlZSgpOwogCi0gICAgZGV0YWNoUmVnaW9uKCk7CisgICAgZGV0YWNoRnJhZ21lbnQo
KTsKIH0KIAotdm9pZCBSZW5kZXJSZWdpb246OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhz
KExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCYgbWF4TG9naWNhbFdpZHRo
KSBjb25zdAordm9pZCBSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6Y29tcHV0ZUludHJpbnNpY0xv
Z2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0JiBtYXhM
b2dpY2FsV2lkdGgpIGNvbnN0CiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKICAgICAgICAgUmVu
ZGVyQmxvY2tGbG93Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhtaW5Mb2dpY2FsV2lk
dGgsIG1heExvZ2ljYWxXaWR0aCk7CkBAIC0zNTUsNyArMzU1LDcgQEAgdm9pZCBSZW5kZXJSZWdp
b246OmNvbXB1dGVJbnRyaW5zaWNMb2dpYwogICAgIG1heExvZ2ljYWxXaWR0aCA9IG1fZmxvd1Ro
cmVhZC0+bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCk7CiB9CiAKLXZvaWQgUmVuZGVyUmVnaW9u
Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCit2b2lkIFJlbmRlckZyYWdtZW50Q29u
dGFpbmVyOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiB7CiAgICAgQVNTRVJUKHBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgpKTsKIApAQCAtMzkwLDE5ICszOTAsMTkgQEAgdm9p
ZCBSZW5kZXJSZWdpb246OmNvbXB1dGVQcmVmZXJyZWRMb2dpYwogICAgIHNldFByZWZlcnJlZExv
Z2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7CiB9CiAKLXZvaWQgUmVuZGVyUmVnaW9uOjphZGp1c3RS
ZWdpb25Cb3VuZHNGcm9tRmxvd1RocmVhZFBvcnRpb25SZWN0KExheW91dFJlY3QmIHJlZ2lvbkJv
dW5kcykgY29uc3QKK3ZvaWQgUmVuZGVyRnJhZ21lbnRDb250YWluZXI6OmFkanVzdEZyYWdtZW50
Qm91bmRzRnJvbUZsb3dUaHJlYWRQb3J0aW9uUmVjdChMYXlvdXRSZWN0JiBmcmFnbWVudEJvdW5k
cykgY29uc3QKIHsKICAgICBMYXlvdXRSZWN0IGZsaXBwZWRGbG93VGhyZWFkUG9ydGlvblJlY3Qg
PSBmbG93VGhyZWFkUG9ydGlvblJlY3QoKTsKICAgICBmbG93VGhyZWFkKCktPmZsaXBGb3JXcml0
aW5nTW9kZShmbGlwcGVkRmxvd1RocmVhZFBvcnRpb25SZWN0KTsKLSAgICByZWdpb25Cb3VuZHMu
bW92ZUJ5KGZsaXBwZWRGbG93VGhyZWFkUG9ydGlvblJlY3QubG9jYXRpb24oKSk7CisgICAgZnJh
Z21lbnRCb3VuZHMubW92ZUJ5KGZsaXBwZWRGbG93VGhyZWFkUG9ydGlvblJlY3QubG9jYXRpb24o
KSk7CiB9CiAKLXZvaWQgUmVuZGVyUmVnaW9uOjplbnN1cmVPdmVyZmxvd0ZvckJveChjb25zdCBS
ZW5kZXJCb3gqIGJveCwgUmVmUHRyPFJlbmRlck92ZXJmbG93PiYgb3ZlcmZsb3csIGJvb2wgZm9y
Y2VDcmVhdGlvbikKK3ZvaWQgUmVuZGVyRnJhZ21lbnRDb250YWluZXI6OmVuc3VyZU92ZXJmbG93
Rm9yQm94KGNvbnN0IFJlbmRlckJveCogYm94LCBSZWZQdHI8UmVuZGVyT3ZlcmZsb3c+JiBvdmVy
ZmxvdywgYm9vbCBmb3JjZUNyZWF0aW9uKQogewotICAgIEFTU0VSVChtX2Zsb3dUaHJlYWQtPnJl
bmRlclJlZ2lvbkxpc3QoKS5jb250YWlucyh0aGlzKSk7CisgICAgQVNTRVJUKG1fZmxvd1RocmVh
ZC0+cmVuZGVyRnJhZ21lbnRDb250YWluZXJMaXN0KCkuY29udGFpbnModGhpcykpOwogICAgIEFT
U0VSVChpc1ZhbGlkKCkpOwogCi0gICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IHJl
bmRlckJveFJlZ2lvbkluZm8oYm94KTsKKyAgICBSZW5kZXJCb3hGcmFnbWVudEluZm8qIGJveElu
Zm8gPSByZW5kZXJCb3hGcmFnbWVudEluZm8oYm94KTsKICAgICBpZiAoIWJveEluZm8gJiYgIWZv
cmNlQ3JlYXRpb24pCiAgICAgICAgIHJldHVybjsKIApAQCAtNDExLDE0ICs0MTEsMTQgQEAgdm9p
ZCBSZW5kZXJSZWdpb246OmVuc3VyZU92ZXJmbG93Rm9yQm94KAogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAotICAgIExheW91dFJlY3QgYm9yZGVyQm94ID0gYm94LT5ib3JkZXJCb3hSZWN0
SW5SZWdpb24odGhpcyk7CisgICAgTGF5b3V0UmVjdCBib3JkZXJCb3ggPSBib3gtPmJvcmRlckJv
eFJlY3RJbkZyYWdtZW50KHRoaXMpOwogICAgIExheW91dFJlY3QgY2xpZW50Qm94OwotICAgIEFT
U0VSVChtX2Zsb3dUaHJlYWQtPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKGJveCwg
dGhpcykpOworICAgIEFTU0VSVChtX2Zsb3dUaHJlYWQtPm9iamVjdFNob3VsZEZyYWdtZW50SW5G
bG93RnJhZ21lbnQoYm94LCB0aGlzKSk7CiAKICAgICBpZiAoIWJvcmRlckJveC5pc0VtcHR5KCkp
IHsKICAgICAgICAgYm9yZGVyQm94ID0gcmVjdEZsb3dQb3J0aW9uRm9yQm94KGJveCwgYm9yZGVy
Qm94KTsKICAgICAgICAgCi0gICAgICAgIGNsaWVudEJveCA9IGJveC0+Y2xpZW50Qm94UmVjdElu
UmVnaW9uKHRoaXMpOworICAgICAgICBjbGllbnRCb3ggPSBib3gtPmNsaWVudEJveFJlY3RJbkZy
YWdtZW50KHRoaXMpOwogICAgICAgICBjbGllbnRCb3ggPSByZWN0Rmxvd1BvcnRpb25Gb3JCb3go
Ym94LCBjbGllbnRCb3gpOwogICAgICAgICAKICAgICAgICAgbV9mbG93VGhyZWFkLT5mbGlwRm9y
V3JpdGluZ01vZGVMb2NhbENvb3JkaW5hdGVzKGJvcmRlckJveCk7CkBAIC00MzIsMjIgKzQzMiwy
MiBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6ZW5zdXJlT3ZlcmZsb3dGb3JCb3goCiAgICAgICAgIG92
ZXJmbG93ID0gYWRvcHRSZWYobmV3IFJlbmRlck92ZXJmbG93KGNsaWVudEJveCwgYm9yZGVyQm94
KSk7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyUmVnaW9uOjpyZWN0Rmxvd1BvcnRpb25Gb3JCb3go
Y29uc3QgUmVuZGVyQm94KiBib3gsIGNvbnN0IExheW91dFJlY3QmIHJlY3QpIGNvbnN0CitMYXlv
dXRSZWN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyOjpyZWN0Rmxvd1BvcnRpb25Gb3JCb3goY29u
c3QgUmVuZGVyQm94KiBib3gsIGNvbnN0IExheW91dFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAg
TGF5b3V0UmVjdCBtYXBwZWRSZWN0ID0gbV9mbG93VGhyZWFkLT5tYXBGcm9tTG9jYWxUb0Zsb3dU
aHJlYWQoYm94LCByZWN0KTsKIAotICAgIFJlbmRlclJlZ2lvbiogc3RhcnRSZWdpb24gPSBudWxs
cHRyOwotICAgIFJlbmRlclJlZ2lvbiogZW5kUmVnaW9uID0gbnVsbHB0cjsKLSAgICBpZiAobV9m
bG93VGhyZWFkLT5nZXRSZWdpb25SYW5nZUZvckJveChib3gsIHN0YXJ0UmVnaW9uLCBlbmRSZWdp
b24pKSB7CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIHN0YXJ0RnJhZ21lbnQgPSBudWxs
cHRyOworICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBlbmRGcmFnbWVudCA9IG51bGxwdHI7
CisgICAgaWYgKG1fZmxvd1RocmVhZC0+Z2V0RnJhZ21lbnRSYW5nZUZvckJveChib3gsIHN0YXJ0
RnJhZ21lbnQsIGVuZEZyYWdtZW50KSkgewogICAgICAgICBpZiAoZmxvd1RocmVhZCgpLT5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAodGhpcyAhPSBzdGFydFJl
Z2lvbikKKyAgICAgICAgICAgIGlmICh0aGlzICE9IHN0YXJ0RnJhZ21lbnQpCiAgICAgICAgICAg
ICAgICAgbWFwcGVkUmVjdC5zaGlmdFlFZGdlVG8oc3RkOjptYXg8TGF5b3V0VW5pdD4obG9naWNh
bFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCksIG1hcHBlZFJlY3QueSgpKSk7Ci0gICAgICAgICAg
ICBpZiAodGhpcyAhPSBlbmRSZWdpb24pCisgICAgICAgICAgICBpZiAodGhpcyAhPSBlbmRGcmFn
bWVudCkKICAgICAgICAgICAgICAgICBtYXBwZWRSZWN0LnNldEhlaWdodChzdGQ6Om1heDxMYXlv
dXRVbml0PigwLCBzdGQ6Om1pbjxMYXlvdXRVbml0Pihsb2dpY2FsQm90dG9tRm9yRmxvd1RocmVh
ZENvbnRlbnQoKSAtIG1hcHBlZFJlY3QueSgpLCBtYXBwZWRSZWN0LmhlaWdodCgpKSkpOwogICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHRoaXMgIT0gc3RhcnRSZWdpb24pCisgICAg
ICAgICAgICBpZiAodGhpcyAhPSBzdGFydEZyYWdtZW50KQogICAgICAgICAgICAgICAgIG1hcHBl
ZFJlY3Quc2hpZnRYRWRnZVRvKHN0ZDo6bWF4PExheW91dFVuaXQ+KGxvZ2ljYWxUb3BGb3JGbG93
VGhyZWFkQ29udGVudCgpLCBtYXBwZWRSZWN0LngoKSkpOwotICAgICAgICAgICAgaWYgKHRoaXMg
IT0gZW5kUmVnaW9uKQorICAgICAgICAgICAgaWYgKHRoaXMgIT0gZW5kRnJhZ21lbnQpCiAgICAg
ICAgICAgICAgICAgbWFwcGVkUmVjdC5zZXRXaWR0aChzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBz
dGQ6Om1pbjxMYXlvdXRVbml0Pihsb2dpY2FsQm90dG9tRm9yRmxvd1RocmVhZENvbnRlbnQoKSAt
IG1hcHBlZFJlY3QueCgpLCBtYXBwZWRSZWN0LndpZHRoKCkpKSk7CiAgICAgICAgIH0KICAgICB9
CkBAIC00NTUsMzcgKzQ1NSwzNyBAQCBMYXlvdXRSZWN0IFJlbmRlclJlZ2lvbjo6cmVjdEZsb3dQ
b3J0aW9uCiAgICAgcmV0dXJuIG1fZmxvd1RocmVhZC0+bWFwRnJvbUZsb3dUaHJlYWRUb0xvY2Fs
KGJveCwgbWFwcGVkUmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyUmVnaW9uOjphZGRMYXlvdXRPdmVy
Zmxvd0ZvckJveChjb25zdCBSZW5kZXJCb3gqIGJveCwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkK
K3ZvaWQgUmVuZGVyRnJhZ21lbnRDb250YWluZXI6OmFkZExheW91dE92ZXJmbG93Rm9yQm94KGNv
bnN0IFJlbmRlckJveCogYm94LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0KQogewogICAgIGlmIChy
ZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFJlbmRlck92ZXJm
bG93PiByZWdpb25PdmVyZmxvdzsKLSAgICBlbnN1cmVPdmVyZmxvd0ZvckJveChib3gsIHJlZ2lv
bk92ZXJmbG93LCBmYWxzZSk7CisgICAgUmVmUHRyPFJlbmRlck92ZXJmbG93PiBmcmFnbWVudE92
ZXJmbG93OworICAgIGVuc3VyZU92ZXJmbG93Rm9yQm94KGJveCwgZnJhZ21lbnRPdmVyZmxvdywg
ZmFsc2UpOwogCi0gICAgaWYgKCFyZWdpb25PdmVyZmxvdykKKyAgICBpZiAoIWZyYWdtZW50T3Zl
cmZsb3cpCiAgICAgICAgIHJldHVybjsKIAotICAgIHJlZ2lvbk92ZXJmbG93LT5hZGRMYXlvdXRP
dmVyZmxvdyhyZWN0KTsKKyAgICBmcmFnbWVudE92ZXJmbG93LT5hZGRMYXlvdXRPdmVyZmxvdyhy
ZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJSZWdpb246OmFkZFZpc3VhbE92ZXJmbG93Rm9yQm94KGNv
bnN0IFJlbmRlckJveCogYm94LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0KQordm9pZCBSZW5kZXJG
cmFnbWVudENvbnRhaW5lcjo6YWRkVmlzdWFsT3ZlcmZsb3dGb3JCb3goY29uc3QgUmVuZGVyQm94
KiBib3gsIGNvbnN0IExheW91dFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHJlY3QuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8UmVuZGVyT3ZlcmZsb3c+IHJlZ2lvbk92
ZXJmbG93OwotICAgIGVuc3VyZU92ZXJmbG93Rm9yQm94KGJveCwgcmVnaW9uT3ZlcmZsb3csIGZh
bHNlKTsKKyAgICBSZWZQdHI8UmVuZGVyT3ZlcmZsb3c+IGZyYWdtZW50T3ZlcmZsb3c7CisgICAg
ZW5zdXJlT3ZlcmZsb3dGb3JCb3goYm94LCBmcmFnbWVudE92ZXJmbG93LCBmYWxzZSk7CiAKLSAg
ICBpZiAoIXJlZ2lvbk92ZXJmbG93KQorICAgIGlmICghZnJhZ21lbnRPdmVyZmxvdykKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgTGF5b3V0UmVjdCBmbGlwcGVkUmVjdCA9IHJlY3Q7CiAgICAgZmxv
d1RocmVhZCgpLT5mbGlwRm9yV3JpdGluZ01vZGVMb2NhbENvb3JkaW5hdGVzKGZsaXBwZWRSZWN0
KTsKLSAgICByZWdpb25PdmVyZmxvdy0+YWRkVmlzdWFsT3ZlcmZsb3coZmxpcHBlZFJlY3QpOwor
ICAgIGZyYWdtZW50T3ZlcmZsb3ctPmFkZFZpc3VhbE92ZXJmbG93KGZsaXBwZWRSZWN0KTsKIH0K
IAotTGF5b3V0UmVjdCBSZW5kZXJSZWdpb246OmxheW91dE92ZXJmbG93UmVjdEZvckJveChjb25z
dCBSZW5kZXJCb3gqIGJveCkKK0xheW91dFJlY3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXI6Omxh
eW91dE92ZXJmbG93UmVjdEZvckJveChjb25zdCBSZW5kZXJCb3gqIGJveCkKIHsKICAgICBSZWZQ
dHI8UmVuZGVyT3ZlcmZsb3c+IG92ZXJmbG93OwogICAgIGVuc3VyZU92ZXJmbG93Rm9yQm94KGJv
eCwgb3ZlcmZsb3csIHRydWUpOwpAQCAtNDk0LDExICs0OTQsMTEgQEAgTGF5b3V0UmVjdCBSZW5k
ZXJSZWdpb246OmxheW91dE92ZXJmbG93UgogICAgIHJldHVybiBvdmVyZmxvdy0+bGF5b3V0T3Zl
cmZsb3dSZWN0KCk7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyUmVnaW9uOjp2aXN1YWxPdmVyZmxv
d1JlY3RGb3JCb3goY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QmIGJveCkKK0xheW91dFJlY3Qg
UmVuZGVyRnJhZ21lbnRDb250YWluZXI6OnZpc3VhbE92ZXJmbG93UmVjdEZvckJveChjb25zdCBS
ZW5kZXJCb3hNb2RlbE9iamVjdCYgYm94KQogewogICAgIGlmIChpczxSZW5kZXJJbmxpbmU+KGJv
eCkpIHsKICAgICAgICAgY29uc3QgUmVuZGVySW5saW5lJiBpbmxpbmVCb3ggPSBkb3duY2FzdDxS
ZW5kZXJJbmxpbmU+KGJveCk7Ci0gICAgICAgIHJldHVybiBpbmxpbmVCb3gubGluZXNWaXN1YWxP
dmVyZmxvd0JvdW5kaW5nQm94SW5SZWdpb24odGhpcyk7CisgICAgICAgIHJldHVybiBpbmxpbmVC
b3gubGluZXNWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94SW5GcmFnbWVudCh0aGlzKTsKICAgICB9
CiAKICAgICBpZiAoaXM8UmVuZGVyQm94Pihib3gpKSB7CkBAIC01MTQsMTAgKzUxNCwxMCBAQCBM
YXlvdXRSZWN0IFJlbmRlclJlZ2lvbjo6dmlzdWFsT3ZlcmZsb3dSCiB9CiAKIC8vIEZJWE1FOiBU
aGlzIGRvZXNuJ3Qgd29yayBmb3Igd3JpdGluZyBtb2Rlcy4KLUxheW91dFJlY3QgUmVuZGVyUmVn
aW9uOjpsYXlvdXRPdmVyZmxvd1JlY3RGb3JCb3hGb3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJC
b3gqIGJveCkKK0xheW91dFJlY3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXI6OmxheW91dE92ZXJm
bG93UmVjdEZvckJveEZvclByb3BhZ2F0aW9uKGNvbnN0IFJlbmRlckJveCogYm94KQogewogICAg
IC8vIE9ubHkgcHJvcGFnYXRlIGludGVyaW9yIGxheW91dCBvdmVyZmxvdyBpZiB3ZSBkb24ndCBj
bGlwIGl0LgotICAgIExheW91dFJlY3QgcmVjdCA9IGJveC0+Ym9yZGVyQm94UmVjdEluUmVnaW9u
KHRoaXMpOworICAgIExheW91dFJlY3QgcmVjdCA9IGJveC0+Ym9yZGVyQm94UmVjdEluRnJhZ21l
bnQodGhpcyk7CiAgICAgcmVjdCA9IHJlY3RGbG93UG9ydGlvbkZvckJveChib3gsIHJlY3QpOwog
ICAgIGlmICghYm94LT5oYXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgcmVjdC51bml0ZShsYXlv
dXRPdmVyZmxvd1JlY3RGb3JCb3goYm94KSk7CkBAIC01MzQsNyArNTM0LDcgQEAgTGF5b3V0UmVj
dCBSZW5kZXJSZWdpb246OmxheW91dE92ZXJmbG93UgogICAgIHJldHVybiByZWN0OwogfQogCi1M
YXlvdXRSZWN0IFJlbmRlclJlZ2lvbjo6dmlzdWFsT3ZlcmZsb3dSZWN0Rm9yQm94Rm9yUHJvcGFn
YXRpb24oY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QmIGJveCkKK0xheW91dFJlY3QgUmVuZGVy
RnJhZ21lbnRDb250YWluZXI6OnZpc3VhbE92ZXJmbG93UmVjdEZvckJveEZvclByb3BhZ2F0aW9u
KGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiBib3gpCiB7CiAgICAgTGF5b3V0UmVjdCByZWN0
ID0gdmlzdWFsT3ZlcmZsb3dSZWN0Rm9yQm94KGJveCk7CiAgICAgZmxvd1RocmVhZCgpLT5mbGlw
Rm9yV3JpdGluZ01vZGVMb2NhbENvb3JkaW5hdGVzKHJlY3QpOwpAQCAtNTQyLDE5ICs1NDIsMTkg
QEAgTGF5b3V0UmVjdCBSZW5kZXJSZWdpb246OnZpc3VhbE92ZXJmbG93UgogICAgIHJldHVybiBy
ZWN0OwogfQogCi1DdXJyZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lcjo6Q3VycmVudFJlbmRlclJl
Z2lvbk1haW50YWluZXIoUmVuZGVyUmVnaW9uJiByZWdpb24pCi0gICAgOiBtX3JlZ2lvbihyZWdp
b24pCitDdXJyZW50UmVuZGVyRnJhZ21lbnRDb250YWluZXJNYWludGFpbmVyOjpDdXJyZW50UmVu
ZGVyRnJhZ21lbnRDb250YWluZXJNYWludGFpbmVyKFJlbmRlckZyYWdtZW50Q29udGFpbmVyJiBm
cmFnbWVudCkKKyAgICA6IG1fZnJhZ21lbnQoZnJhZ21lbnQpCiB7Ci0gICAgUmVuZGVyRmxvd1Ro
cmVhZCogZmxvd1RocmVhZCA9IHJlZ2lvbi5mbG93VGhyZWFkKCk7Ci0gICAgLy8gQSBmbG93IHRo
cmVhZCBjYW4gaGF2ZSBvbmx5IG9uZSBjdXJyZW50IHJlZ2lvbi4KLSAgICBBU1NFUlQoIWZsb3dU
aHJlYWQtPmN1cnJlbnRSZWdpb24oKSk7Ci0gICAgZmxvd1RocmVhZC0+c2V0Q3VycmVudFJlZ2lv
bk1haW50YWluZXIodGhpcyk7CisgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZy
YWdtZW50LmZsb3dUaHJlYWQoKTsKKyAgICAvLyBBIGZsb3cgdGhyZWFkIGNhbiBoYXZlIG9ubHkg
b25lIGN1cnJlbnQgZnJhZ21lbnQuCisgICAgQVNTRVJUKCFmbG93VGhyZWFkLT5jdXJyZW50RnJh
Z21lbnQoKSk7CisgICAgZmxvd1RocmVhZC0+c2V0Q3VycmVudEZyYWdtZW50TWFpbnRhaW5lcih0
aGlzKTsKIH0KIAotQ3VycmVudFJlbmRlclJlZ2lvbk1haW50YWluZXI6On5DdXJyZW50UmVuZGVy
UmVnaW9uTWFpbnRhaW5lcigpCitDdXJyZW50UmVuZGVyRnJhZ21lbnRDb250YWluZXJNYWludGFp
bmVyOjp+Q3VycmVudFJlbmRlckZyYWdtZW50Q29udGFpbmVyTWFpbnRhaW5lcigpCiB7Ci0gICAg
UmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IG1fcmVnaW9uLmZsb3dUaHJlYWQoKTsKLSAg
ICBmbG93VGhyZWFkLT5zZXRDdXJyZW50UmVnaW9uTWFpbnRhaW5lcihudWxscHRyKTsKKyAgICBS
ZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gbV9mcmFnbWVudC5mbG93VGhyZWFkKCk7Cisg
ICAgZmxvd1RocmVhZC0+c2V0Q3VycmVudEZyYWdtZW50TWFpbnRhaW5lcihudWxscHRyKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZyYWdtZW50Q29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZyYWdtZW50Q29udGFpbmVyLmgJKHJldmlzaW9uIDIyMjQ2MikJKGZy
b20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oOjIyMjQ2MikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudENvbnRhaW5lci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFkb2Jl
IFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVCBIT0xERVIgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkxheWVyRnJhZ21lbnQuaCIKKyNpbmNsdWRlICJS
ZW5kZXJCbG9ja0Zsb3cuaCIKKyNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKKyNpbmNsdWRl
IDxtZW1vcnk+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRWxlbWVudDsKK2NsYXNz
IFJlbmRlckJveDsKK2NsYXNzIFJlbmRlckJveFJlZ2lvbkluZm87CitjbGFzcyBSZW5kZXJGbG93
VGhyZWFkOworCitjbGFzcyBSZW5kZXJSZWdpb24gOiBwdWJsaWMgUmVuZGVyQmxvY2tGbG93IHsK
K3B1YmxpYzoKKyAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0Rmxvd1RocmVh
ZFBvcnRpb25SZWN0KGNvbnN0IExheW91dFJlY3QmIHJlY3QpIHsgbV9mbG93VGhyZWFkUG9ydGlv
blJlY3QgPSByZWN0OyB9CisgICAgTGF5b3V0UmVjdCBmbG93VGhyZWFkUG9ydGlvblJlY3QoKSBj
b25zdCB7IHJldHVybiBtX2Zsb3dUaHJlYWRQb3J0aW9uUmVjdDsgfQorICAgIExheW91dFJlY3Qg
Zmxvd1RocmVhZFBvcnRpb25PdmVyZmxvd1JlY3QoKTsKKworICAgIExheW91dFBvaW50IGZsb3dU
aHJlYWRQb3J0aW9uTG9jYXRpb24oKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hS
ZWdpb24oKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoUmVnaW9uKCk7CisKKyAgICBSZW5kZXJG
bG93VGhyZWFkKiBmbG93VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV9mbG93VGhyZWFkOyB9CisK
KyAgICAvLyBWYWxpZCByZWdpb25zIGRvIG5vdCBjcmVhdGUgY2lyY3VsYXIgZGVwZW5kZW5jaWVz
IHdpdGggb3RoZXIgZmxvd3MuCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9p
c1ZhbGlkOyB9CisgICAgdm9pZCBzZXRJc1ZhbGlkKGJvb2wgdmFsaWQpIHsgbV9pc1ZhbGlkID0g
dmFsaWQ7IH0KKworICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIHJlbmRlckJveFJlZ2lvbkluZm8o
Y29uc3QgUmVuZGVyQm94KikgY29uc3Q7CisgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogc2V0UmVu
ZGVyQm94UmVnaW9uSW5mbyhjb25zdCBSZW5kZXJCb3gqLCBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0
SW5zZXQsIExheW91dFVuaXQgbG9naWNhbFJpZ2h0SW5zZXQsCisgICAgICAgIGJvb2wgY29udGFp
bmluZ0Jsb2NrQ2hhaW5Jc0luc2V0KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQm94UmVn
aW9uSW5mbz4gdGFrZVJlbmRlckJveFJlZ2lvbkluZm8oY29uc3QgUmVuZGVyQm94Kik7CisgICAg
dm9pZCByZW1vdmVSZW5kZXJCb3hSZWdpb25JbmZvKGNvbnN0IFJlbmRlckJveCYpOworCisgICAg
dm9pZCBkZWxldGVBbGxSZW5kZXJCb3hSZWdpb25JbmZvKCk7CisKKyAgICBib29sIGlzRmlyc3RS
ZWdpb24oKSBjb25zdDsKKyAgICBib29sIGlzTGFzdFJlZ2lvbigpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRDbGlwRmxvd1RocmVhZENvbnRlbnQoKSBjb25zdDsKKworICAgIC8vIFRo
ZXNlIG1ldGhvZHMgcmVwcmVzZW50IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIGEgInBhZ2UiIGFu
ZCBmb3IgYSBSZW5kZXJSZWdpb24gdGhleSBhcmUganVzdCB0aGUKKyAgICAvLyBjb250ZW50IHdp
ZHRoIGFuZCBjb250ZW50IGhlaWdodCBvZiBhIHJlZ2lvbi4gRm9yIFJlbmRlclJlZ2lvblNldHMs
IGhvd2V2ZXIsIHRoZXkgd2lsbCBiZSB0aGUgd2lkdGggYW5kCisgICAgLy8gaGVpZ2h0IG9mIGEg
c2luZ2xlIGNvbHVtbiBvciBwYWdlIGluIHRoZSBzZXQuCisgICAgdmlydHVhbCBMYXlvdXRVbml0
IHBhZ2VMb2dpY2FsV2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgcGFnZUxv
Z2ljYWxIZWlnaHQoKSBjb25zdDsKKworICAgIExheW91dFVuaXQgbG9naWNhbFRvcE9mRmxvd1Ro
cmVhZENvbnRlbnRSZWN0KGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKKyAgICBMYXlvdXRVbml0
IGxvZ2ljYWxCb3R0b21PZkZsb3dUaHJlYWRDb250ZW50UmVjdChjb25zdCBMYXlvdXRSZWN0Jikg
Y29uc3Q7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRlbnQoKSBj
b25zdCB7IHJldHVybiBsb2dpY2FsVG9wT2ZGbG93VGhyZWFkQ29udGVudFJlY3QoZmxvd1RocmVh
ZFBvcnRpb25SZWN0KCkpOyB9OworICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbUZvckZsb3dU
aHJlYWRDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbEJvdHRvbU9mRmxvd1RocmVhZENv
bnRlbnRSZWN0KGZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpKTsgfTsKKworICAgIC8vIFRoaXMgbWV0
aG9kIHJlcHJlc2VudHMgdGhlIGxvZ2ljYWwgaGVpZ2h0IG9mIHRoZSBlbnRpcmUgZmxvdyB0aHJl
YWQgcG9ydGlvbiB1c2VkIGJ5IHRoZSByZWdpb24gb3Igc2V0LgorICAgIC8vIEZvciBSZW5kZXJS
ZWdpb25zIGl0IG1hdGNoZXMgbG9naWNhbFBhZ2luYXRpb25IZWlnaHQoKSwgYnV0IGZvciBzZXRz
IGl0IGlzIHRoZSBoZWlnaHQgb2YgYWxsIHRoZSBwYWdlcworICAgIC8vIG9yIGNvbHVtbnMgYWRk
ZWQgdG9nZXRoZXIuCisgICAgdmlydHVhbCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHRPZkFsbEZs
b3dUaHJlYWRDb250ZW50KCkgY29uc3Q7CisKKyAgICAvLyBUaGUgdG9wIG9mIHRoZSBuZWFyZXN0
IHBhZ2UgaW5zaWRlIHRoZSByZWdpb24uIEZvciBSZW5kZXJSZWdpb25zLCB0aGlzIGlzIGp1c3Qg
dGhlIGxvZ2ljYWwgdG9wIG9mIHRoZQorICAgIC8vIGZsb3cgdGhyZWFkIHBvcnRpb24gd2UgY29u
dGFpbi4gRm9yIHNldHMsIHdlIGhhdmUgdG8gZmlndXJlIG91dCB0aGUgdG9wIG9mIHRoZSBuZWFy
ZXN0IGNvbHVtbiBvcgorICAgIC8vIHBhZ2UuCisgICAgdmlydHVhbCBMYXlvdXRVbml0IHBhZ2VM
b2dpY2FsVG9wRm9yT2Zmc2V0KExheW91dFVuaXQgb2Zmc2V0KSBjb25zdDsKKworICAgIC8vIFdo
ZXRoZXIgb3Igbm90IHRoaXMgcmVnaW9uIGlzIGEgc2V0LgorICAgIHZpcnR1YWwgYm9vbCBpc1Jl
bmRlclJlZ2lvblNldCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgCisgICAgdmlydHVh
bCB2b2lkIHJlcGFpbnRGbG93VGhyZWFkQ29udGVudChjb25zdCBMYXlvdXRSZWN0JiByZXBhaW50
UmVjdCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdExheWVyRnJhZ21lbnRzKExheWVyRnJh
Z21lbnRzJiwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IExheW91dFJlY3QmKSB7IH0KKworICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RSZWdpb25Cb3VuZHNGcm9tRmxvd1RocmVhZFBvcnRpb25SZWN0
KExheW91dFJlY3QmIHJlZ2lvbkJvdW5kcykgY29uc3Q7CisKKyAgICB2b2lkIGFkZExheW91dE92
ZXJmbG93Rm9yQm94KGNvbnN0IFJlbmRlckJveCosIGNvbnN0IExheW91dFJlY3QmKTsKKyAgICB2
b2lkIGFkZFZpc3VhbE92ZXJmbG93Rm9yQm94KGNvbnN0IFJlbmRlckJveCosIGNvbnN0IExheW91
dFJlY3QmKTsKKyAgICBMYXlvdXRSZWN0IGxheW91dE92ZXJmbG93UmVjdEZvckJveChjb25zdCBS
ZW5kZXJCb3gqKTsKKyAgICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93UmVjdEZvckJveChjb25z
dCBSZW5kZXJCb3hNb2RlbE9iamVjdCYpOworICAgIExheW91dFJlY3QgbGF5b3V0T3ZlcmZsb3dS
ZWN0Rm9yQm94Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVyQm94Kik7CisgICAgTGF5b3V0UmVj
dCB2aXN1YWxPdmVyZmxvd1JlY3RGb3JCb3hGb3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJCb3hN
b2RlbE9iamVjdCYpOworCisgICAgTGF5b3V0UmVjdCByZWN0Rmxvd1BvcnRpb25Gb3JCb3goY29u
c3QgUmVuZGVyQm94KiwgY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OworICAgIAorICAgIHZvaWQg
c2V0UmVnaW9uT2JqZWN0c1JlZ2lvblN0eWxlKCk7CisgICAgdm9pZCByZXN0b3JlUmVnaW9uT2Jq
ZWN0c09yaWdpbmFsU3R5bGUoKTsKKworICAgIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGNhbkhhdmVHZW5lcmF0ZWRDaGls
ZHJlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICBWaXNpYmxlUG9zaXRp
b24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlclJlZ2lv
biopIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHNGb3JCb3hJblJl
Z2lvbihWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wqLCBjb25zdCBSZW5kZXJCb3gqLCBmbG9hdCwg
ZmxvYXQpIHsgfQorCitwcm90ZWN0ZWQ6CisgICAgUmVuZGVyUmVnaW9uKEVsZW1lbnQmLCBSZW5k
ZXJTdHlsZSYmLCBSZW5kZXJGbG93VGhyZWFkKik7CisgICAgUmVuZGVyUmVnaW9uKERvY3VtZW50
JiwgUmVuZGVyU3R5bGUmJiwgUmVuZGVyRmxvd1RocmVhZCopOworCisgICAgdm9pZCBlbnN1cmVP
dmVyZmxvd0ZvckJveChjb25zdCBSZW5kZXJCb3gqLCBSZWZQdHI8UmVuZGVyT3ZlcmZsb3c+Jiwg
Ym9vbCk7CisKKyAgICB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBt
aW5Mb2dpY2FsV2lkdGgsIExheW91dFVuaXQmIG1heExvZ2ljYWxXaWR0aCkgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICBlbnVtIE92ZXJmbG93VHlwZSB7CisgICAgICAgIExheW91dE92ZXJmbG93ID0g
MCwKKyAgICAgICAgVmlzdWFsT3ZlcmZsb3cKKyAgICB9OworCisgICAgTGF5b3V0UmVjdCBvdmVy
Zmxvd1JlY3RGb3JGbG93VGhyZWFkUG9ydGlvbihjb25zdCBMYXlvdXRSZWN0JiBmbG93VGhyZWFk
UG9ydGlvblJlY3QsIGJvb2wgaXNGaXJzdFBvcnRpb24sIGJvb2wgaXNMYXN0UG9ydGlvbiwgT3Zl
cmZsb3dUeXBlKTsKKyAgICB2b2lkIHJlcGFpbnRGbG93VGhyZWFkQ29udGVudFJlY3RhbmdsZShj
b25zdCBMYXlvdXRSZWN0JiByZXBhaW50UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZmxvd1RocmVh
ZFBvcnRpb25SZWN0LCBjb25zdCBMYXlvdXRQb2ludCYgcmVnaW9uTG9jYXRpb24sIGNvbnN0IExh
eW91dFJlY3QqIGZsb3dUaHJlYWRQb3J0aW9uQ2xpcFJlY3QgPSAwKTsKKworICAgIHZvaWQgY29t
cHV0ZU92ZXJmbG93RnJvbUZsb3dUaHJlYWQoKTsKKworcHJpdmF0ZToKKyAgICBib29sIGlzUmVu
ZGVyUmVnaW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGNvbnN0IGNoYXIq
IHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiUmVuZGVyUmVnaW9uIjsgfQor
CisgICAgdm9pZCBpbnNlcnRlZEludG9UcmVlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCB3aWxsQmVS
ZW1vdmVkRnJvbVRyZWUoKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBpbnN0YWxsRmxv
d1RocmVhZCgpOworCisgICAgTGF5b3V0UG9pbnQgbWFwUmVnaW9uUG9pbnRJbnRvRmxvd1RocmVh
ZENvb3JkaW5hdGVzKGNvbnN0IExheW91dFBvaW50Jik7CisKK3Byb3RlY3RlZDoKKyAgICBSZW5k
ZXJGbG93VGhyZWFkKiBtX2Zsb3dUaHJlYWQ7CisKK3ByaXZhdGU6CisgICAgTGF5b3V0UmVjdCBt
X2Zsb3dUaHJlYWRQb3J0aW9uUmVjdDsKKworICAgIC8vIFRoaXMgbWFwIGhvbGRzIHVuaXF1ZSBp
bmZvcm1hdGlvbiBhYm91dCBhIGJsb2NrIHRoYXQgaXMgc3BsaXQgYWNyb3NzIHJlZ2lvbnMuCisg
ICAgLy8gQSBSZW5kZXJCb3hSZWdpb25JbmZvKiB0ZWxscyB1cyBhYm91dCBhbnkgbGF5b3V0IGlu
Zm9ybWF0aW9uIGZvciBhIFJlbmRlckJveCB0aGF0CisgICAgLy8gaXMgdW5pcXVlIHRvIHRoZSBy
ZWdpb24uIEZvciBub3cgaXQganVzdCBob2xkcyBsb2dpY2FsIHdpZHRoIGluZm9ybWF0aW9uIGZv
ciBSZW5kZXJCbG9ja3MsIGJ1dCBldmVudHVhbGx5CisgICAgLy8gaXQgd2lsbCBhbHNvIGhvbGQg
YSBjdXN0b20gc3R5bGUgZm9yIGFueSBib3ggKGZvciByZWdpb24gc3R5bGluZykuCisgICAgdHlw
ZWRlZiBIYXNoTWFwPGNvbnN0IFJlbmRlckJveCosIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCb3hS
ZWdpb25JbmZvPj4gUmVuZGVyQm94UmVnaW9uSW5mb01hcDsKKyAgICBSZW5kZXJCb3hSZWdpb25J
bmZvTWFwIG1fcmVuZGVyQm94UmVnaW9uSW5mbzsKKworICAgIGJvb2wgbV9pc1ZhbGlkIDogMTsK
K307CisKK2NsYXNzIEN1cnJlbnRSZW5kZXJSZWdpb25NYWludGFpbmVyIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShDdXJyZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lcik7CitwdWJsaWM6Cisg
ICAgQ3VycmVudFJlbmRlclJlZ2lvbk1haW50YWluZXIoUmVuZGVyUmVnaW9uJik7CisgICAgfkN1
cnJlbnRSZW5kZXJSZWdpb25NYWludGFpbmVyKCk7CisKKyAgICBSZW5kZXJSZWdpb24mIHJlZ2lv
bigpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaW9uOyB9Citwcml2YXRlOgorICAgIFJlbmRlclJlZ2lv
biYgbV9yZWdpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfUkVOREVSX09CSkVDVChSZW5kZXJSZWdpb24sIGlzUmVuZGVyUmVnaW9uKCkp
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVn
aW9uLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRp
dmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZyYWdtZW50Q29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50Q29udGFpbmVyLmgJKHJldmlzaW9uIDIy
MjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudENvbnRhaW5l
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCArMzgsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBFbGVtZW50OwogY2xhc3MgUmVuZGVyQm94OwotY2xhc3MgUmVuZGVyQm94UmVn
aW9uSW5mbzsKK2NsYXNzIFJlbmRlckJveEZyYWdtZW50SW5mbzsKIGNsYXNzIFJlbmRlckZsb3dU
aHJlYWQ7CiAKLWNsYXNzIFJlbmRlclJlZ2lvbiA6IHB1YmxpYyBSZW5kZXJCbG9ja0Zsb3cgewor
Y2xhc3MgUmVuZGVyRnJhZ21lbnRDb250YWluZXIgOiBwdWJsaWMgUmVuZGVyQmxvY2tGbG93IHsK
IHB1YmxpYzoKICAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKIApAQCAtNTEsMjkgKzUxLDI5IEBAIHB1
YmxpYzoKIAogICAgIExheW91dFBvaW50IGZsb3dUaHJlYWRQb3J0aW9uTG9jYXRpb24oKSBjb25z
dDsKIAotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSZWdpb24oKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGV0YWNoUmVnaW9uKCk7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaEZyYWdtZW50KCk7CisgICAg
dmlydHVhbCB2b2lkIGRldGFjaEZyYWdtZW50KCk7CiAKICAgICBSZW5kZXJGbG93VGhyZWFkKiBm
bG93VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV9mbG93VGhyZWFkOyB9CiAKLSAgICAvLyBWYWxp
ZCByZWdpb25zIGRvIG5vdCBjcmVhdGUgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIHdpdGggb3RoZXIg
Zmxvd3MuCisgICAgLy8gVmFsaWQgZnJhZ21lbnRzIGRvIG5vdCBjcmVhdGUgY2lyY3VsYXIgZGVw
ZW5kZW5jaWVzIHdpdGggb3RoZXIgZmxvd3MuCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1ZhbGlkOyB9CiAgICAgdm9pZCBzZXRJc1ZhbGlkKGJvb2wgdmFsaWQpIHsgbV9p
c1ZhbGlkID0gdmFsaWQ7IH0KIAotICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIHJlbmRlckJveFJl
Z2lvbkluZm8oY29uc3QgUmVuZGVyQm94KikgY29uc3Q7Ci0gICAgUmVuZGVyQm94UmVnaW9uSW5m
byogc2V0UmVuZGVyQm94UmVnaW9uSW5mbyhjb25zdCBSZW5kZXJCb3gqLCBMYXlvdXRVbml0IGxv
Z2ljYWxMZWZ0SW5zZXQsIExheW91dFVuaXQgbG9naWNhbFJpZ2h0SW5zZXQsCisgICAgUmVuZGVy
Qm94RnJhZ21lbnRJbmZvKiByZW5kZXJCb3hGcmFnbWVudEluZm8oY29uc3QgUmVuZGVyQm94Kikg
Y29uc3Q7CisgICAgUmVuZGVyQm94RnJhZ21lbnRJbmZvKiBzZXRSZW5kZXJCb3hGcmFnbWVudElu
Zm8oY29uc3QgUmVuZGVyQm94KiwgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdEluc2V0LCBMYXlvdXRV
bml0IGxvZ2ljYWxSaWdodEluc2V0LAogICAgICAgICBib29sIGNvbnRhaW5pbmdCbG9ja0NoYWlu
SXNJbnNldCk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJveFJlZ2lvbkluZm8+IHRha2VS
ZW5kZXJCb3hSZWdpb25JbmZvKGNvbnN0IFJlbmRlckJveCopOwotICAgIHZvaWQgcmVtb3ZlUmVu
ZGVyQm94UmVnaW9uSW5mbyhjb25zdCBSZW5kZXJCb3gmKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyQm94RnJhZ21lbnRJbmZvPiB0YWtlUmVuZGVyQm94RnJhZ21lbnRJbmZvKGNvbnN0IFJl
bmRlckJveCopOworICAgIHZvaWQgcmVtb3ZlUmVuZGVyQm94RnJhZ21lbnRJbmZvKGNvbnN0IFJl
bmRlckJveCYpOwogCi0gICAgdm9pZCBkZWxldGVBbGxSZW5kZXJCb3hSZWdpb25JbmZvKCk7Cisg
ICAgdm9pZCBkZWxldGVBbGxSZW5kZXJCb3hGcmFnbWVudEluZm8oKTsKIAotICAgIGJvb2wgaXNG
aXJzdFJlZ2lvbigpIGNvbnN0OwotICAgIGJvb2wgaXNMYXN0UmVnaW9uKCkgY29uc3Q7CisgICAg
Ym9vbCBpc0ZpcnN0RnJhZ21lbnQoKSBjb25zdDsKKyAgICBib29sIGlzTGFzdEZyYWdtZW50KCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNob3VsZENsaXBGbG93VGhyZWFkQ29udGVudCgpIGNv
bnN0OwogCi0gICAgLy8gVGhlc2UgbWV0aG9kcyByZXByZXNlbnQgdGhlIHdpZHRoIGFuZCBoZWln
aHQgb2YgYSAicGFnZSIgYW5kIGZvciBhIFJlbmRlclJlZ2lvbiB0aGV5IGFyZSBqdXN0IHRoZQot
ICAgIC8vIGNvbnRlbnQgd2lkdGggYW5kIGNvbnRlbnQgaGVpZ2h0IG9mIGEgcmVnaW9uLiBGb3Ig
UmVuZGVyUmVnaW9uU2V0cywgaG93ZXZlciwgdGhleSB3aWxsIGJlIHRoZSB3aWR0aCBhbmQKKyAg
ICAvLyBUaGVzZSBtZXRob2RzIHJlcHJlc2VudCB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiBhICJw
YWdlIiBhbmQgZm9yIGEgUmVuZGVyRnJhZ21lbnRDb250YWluZXIgdGhleSBhcmUganVzdCB0aGUK
KyAgICAvLyBjb250ZW50IHdpZHRoIGFuZCBjb250ZW50IGhlaWdodCBvZiBhIGZyYWdtZW50LiBG
b3IgUmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXRzLCBob3dldmVyLCB0aGV5IHdpbGwgYmUgdGhl
IHdpZHRoIGFuZAogICAgIC8vIGhlaWdodCBvZiBhIHNpbmdsZSBjb2x1bW4gb3IgcGFnZSBpbiB0
aGUgc2V0LgogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbFdpZHRoKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0KCkgY29uc3Q7CkBAIC04
MywyNCArODMsMjQgQEAgcHVibGljOgogICAgIExheW91dFVuaXQgbG9naWNhbFRvcEZvckZsb3dU
aHJlYWRDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbFRvcE9mRmxvd1RocmVhZENvbnRl
bnRSZWN0KGZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpKTsgfTsKICAgICBMYXlvdXRVbml0IGxvZ2lj
YWxCb3R0b21Gb3JGbG93VGhyZWFkQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxCb3R0
b21PZkZsb3dUaHJlYWRDb250ZW50UmVjdChmbG93VGhyZWFkUG9ydGlvblJlY3QoKSk7IH07CiAK
LSAgICAvLyBUaGlzIG1ldGhvZCByZXByZXNlbnRzIHRoZSBsb2dpY2FsIGhlaWdodCBvZiB0aGUg
ZW50aXJlIGZsb3cgdGhyZWFkIHBvcnRpb24gdXNlZCBieSB0aGUgcmVnaW9uIG9yIHNldC4KLSAg
ICAvLyBGb3IgUmVuZGVyUmVnaW9ucyBpdCBtYXRjaGVzIGxvZ2ljYWxQYWdpbmF0aW9uSGVpZ2h0
KCksIGJ1dCBmb3Igc2V0cyBpdCBpcyB0aGUgaGVpZ2h0IG9mIGFsbCB0aGUgcGFnZXMKKyAgICAv
LyBUaGlzIG1ldGhvZCByZXByZXNlbnRzIHRoZSBsb2dpY2FsIGhlaWdodCBvZiB0aGUgZW50aXJl
IGZsb3cgdGhyZWFkIHBvcnRpb24gdXNlZCBieSB0aGUgZnJhZ21lbnQgb3Igc2V0LgorICAgIC8v
IEZvciBSZW5kZXJGcmFnbWVudENvbnRhaW5lcnMgaXQgbWF0Y2hlcyBsb2dpY2FsUGFnaW5hdGlv
bkhlaWdodCgpLCBidXQgZm9yIHNldHMgaXQgaXMgdGhlIGhlaWdodCBvZiBhbGwgdGhlIHBhZ2Vz
CiAgICAgLy8gb3IgY29sdW1ucyBhZGRlZCB0b2dldGhlci4KICAgICB2aXJ0dWFsIExheW91dFVu
aXQgbG9naWNhbEhlaWdodE9mQWxsRmxvd1RocmVhZENvbnRlbnQoKSBjb25zdDsKIAotICAgIC8v
IFRoZSB0b3Agb2YgdGhlIG5lYXJlc3QgcGFnZSBpbnNpZGUgdGhlIHJlZ2lvbi4gRm9yIFJlbmRl
clJlZ2lvbnMsIHRoaXMgaXMganVzdCB0aGUgbG9naWNhbCB0b3Agb2YgdGhlCisgICAgLy8gVGhl
IHRvcCBvZiB0aGUgbmVhcmVzdCBwYWdlIGluc2lkZSB0aGUgZnJhZ21lbnQuIEZvciBSZW5kZXJG
cmFnbWVudENvbnRhaW5lcnMsIHRoaXMgaXMganVzdCB0aGUgbG9naWNhbCB0b3Agb2YgdGhlCiAg
ICAgLy8gZmxvdyB0aHJlYWQgcG9ydGlvbiB3ZSBjb250YWluLiBGb3Igc2V0cywgd2UgaGF2ZSB0
byBmaWd1cmUgb3V0IHRoZSB0b3Agb2YgdGhlIG5lYXJlc3QgY29sdW1uIG9yCiAgICAgLy8gcGFn
ZS4KICAgICB2aXJ0dWFsIExheW91dFVuaXQgcGFnZUxvZ2ljYWxUb3BGb3JPZmZzZXQoTGF5b3V0
VW5pdCBvZmZzZXQpIGNvbnN0OwogCi0gICAgLy8gV2hldGhlciBvciBub3QgdGhpcyByZWdpb24g
aXMgYSBzZXQuCi0gICAgdmlydHVhbCBib29sIGlzUmVuZGVyUmVnaW9uU2V0KCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGlzIGZyYWdtZW50IGlzIGEg
c2V0LgorICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAKICAgICB2aXJ0dWFsIHZvaWQgcmVwYWludEZsb3dU
aHJlYWRDb250ZW50KGNvbnN0IExheW91dFJlY3QmIHJlcGFpbnRSZWN0KTsKIAogICAgIHZpcnR1
YWwgdm9pZCBjb2xsZWN0TGF5ZXJGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBMYXlv
dXRSZWN0JiwgY29uc3QgTGF5b3V0UmVjdCYpIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVz
dFJlZ2lvbkJvdW5kc0Zyb21GbG93VGhyZWFkUG9ydGlvblJlY3QoTGF5b3V0UmVjdCYgcmVnaW9u
Qm91bmRzKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0RnJhZ21lbnRCb3VuZHNGcm9t
Rmxvd1RocmVhZFBvcnRpb25SZWN0KExheW91dFJlY3QmIGZyYWdtZW50Qm91bmRzKSBjb25zdDsK
IAogICAgIHZvaWQgYWRkTGF5b3V0T3ZlcmZsb3dGb3JCb3goY29uc3QgUmVuZGVyQm94KiwgY29u
c3QgTGF5b3V0UmVjdCYpOwogICAgIHZvaWQgYWRkVmlzdWFsT3ZlcmZsb3dGb3JCb3goY29uc3Qg
UmVuZGVyQm94KiwgY29uc3QgTGF5b3V0UmVjdCYpOwpAQCAtMTExLDE4ICsxMTEsMTggQEAgcHVi
bGljOgogCiAgICAgTGF5b3V0UmVjdCByZWN0Rmxvd1BvcnRpb25Gb3JCb3goY29uc3QgUmVuZGVy
Qm94KiwgY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogICAgIAotICAgIHZvaWQgc2V0UmVnaW9u
T2JqZWN0c1JlZ2lvblN0eWxlKCk7Ci0gICAgdm9pZCByZXN0b3JlUmVnaW9uT2JqZWN0c09yaWdp
bmFsU3R5bGUoKTsKKyAgICB2b2lkIHNldEZyYWdtZW50T2JqZWN0c0ZyYWdtZW50U3R5bGUoKTsK
KyAgICB2b2lkIHJlc3RvcmVGcmFnbWVudE9iamVjdHNPcmlnaW5hbFN0eWxlKCk7CiAKICAgICBi
b29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgYm9vbCBjYW5IYXZlR2VuZXJhdGVkQ2hpbGRyZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5
b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJSZWdpb24qKSBvdmVycmlkZTsKKyAgICBWaXNpYmxlUG9z
aXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlckZy
YWdtZW50Q29udGFpbmVyKikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVR
dWFkc0ZvckJveEluUmVnaW9uKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCosIGNvbnN0IFJlbmRl
ckJveCosIGZsb2F0LCBmbG9hdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHNG
b3JCb3hJbkZyYWdtZW50KFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCosIGNvbnN0IFJlbmRlckJv
eCosIGZsb2F0LCBmbG9hdCkgeyB9CiAKIHByb3RlY3RlZDoKLSAgICBSZW5kZXJSZWdpb24oRWxl
bWVudCYsIFJlbmRlclN0eWxlJiYsIFJlbmRlckZsb3dUaHJlYWQqKTsKLSAgICBSZW5kZXJSZWdp
b24oRG9jdW1lbnQmLCBSZW5kZXJTdHlsZSYmLCBSZW5kZXJGbG93VGhyZWFkKik7CisgICAgUmVu
ZGVyRnJhZ21lbnRDb250YWluZXIoRWxlbWVudCYsIFJlbmRlclN0eWxlJiYsIFJlbmRlckZsb3dU
aHJlYWQqKTsKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lcihEb2N1bWVudCYsIFJlbmRlclN0
eWxlJiYsIFJlbmRlckZsb3dUaHJlYWQqKTsKIAogICAgIHZvaWQgZW5zdXJlT3ZlcmZsb3dGb3JC
b3goY29uc3QgUmVuZGVyQm94KiwgUmVmUHRyPFJlbmRlck92ZXJmbG93PiYsIGJvb2wpOwogCkBA
IC0xMzUsMjAgKzEzNSwyMCBAQCBwcm90ZWN0ZWQ6CiAgICAgfTsKIAogICAgIExheW91dFJlY3Qg
b3ZlcmZsb3dSZWN0Rm9yRmxvd1RocmVhZFBvcnRpb24oY29uc3QgTGF5b3V0UmVjdCYgZmxvd1Ro
cmVhZFBvcnRpb25SZWN0LCBib29sIGlzRmlyc3RQb3J0aW9uLCBib29sIGlzTGFzdFBvcnRpb24s
IE92ZXJmbG93VHlwZSk7Ci0gICAgdm9pZCByZXBhaW50Rmxvd1RocmVhZENvbnRlbnRSZWN0YW5n
bGUoY29uc3QgTGF5b3V0UmVjdCYgcmVwYWludFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGZsb3dU
aHJlYWRQb3J0aW9uUmVjdCwgY29uc3QgTGF5b3V0UG9pbnQmIHJlZ2lvbkxvY2F0aW9uLCBjb25z
dCBMYXlvdXRSZWN0KiBmbG93VGhyZWFkUG9ydGlvbkNsaXBSZWN0ID0gMCk7CisgICAgdm9pZCBy
ZXBhaW50Rmxvd1RocmVhZENvbnRlbnRSZWN0YW5nbGUoY29uc3QgTGF5b3V0UmVjdCYgcmVwYWlu
dFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGZsb3dUaHJlYWRQb3J0aW9uUmVjdCwgY29uc3QgTGF5
b3V0UG9pbnQmIGZyYWdtZW50TG9jYXRpb24sIGNvbnN0IExheW91dFJlY3QqIGZsb3dUaHJlYWRQ
b3J0aW9uQ2xpcFJlY3QgPSAwKTsKIAogICAgIHZvaWQgY29tcHV0ZU92ZXJmbG93RnJvbUZsb3dU
aHJlYWQoKTsKIAogcHJpdmF0ZToKLSAgICBib29sIGlzUmVuZGVyUmVnaW9uKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gdHJ1ZTsgfQotICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiAiUmVuZGVyUmVnaW9uIjsgfQorICAgIGJvb2wgaXNSZW5kZXJGcmFn
bWVudENvbnRhaW5lcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICBjb25zdCBj
aGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIlJlbmRlckZyYWdtZW50
Q29udGFpbmVyIjsgfQogCiAgICAgdm9pZCBpbnNlcnRlZEludG9UcmVlKCkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCB3aWxsQmVSZW1vdmVkRnJvbVRyZWUoKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwg
dm9pZCBpbnN0YWxsRmxvd1RocmVhZCgpOwogCi0gICAgTGF5b3V0UG9pbnQgbWFwUmVnaW9uUG9p
bnRJbnRvRmxvd1RocmVhZENvb3JkaW5hdGVzKGNvbnN0IExheW91dFBvaW50Jik7CisgICAgTGF5
b3V0UG9pbnQgbWFwRnJhZ21lbnRQb2ludEludG9GbG93VGhyZWFkQ29vcmRpbmF0ZXMoY29uc3Qg
TGF5b3V0UG9pbnQmKTsKIAogcHJvdGVjdGVkOgogICAgIFJlbmRlckZsb3dUaHJlYWQqIG1fZmxv
d1RocmVhZDsKQEAgLTE1NiwyNyArMTU2LDI3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAg
TGF5b3V0UmVjdCBtX2Zsb3dUaHJlYWRQb3J0aW9uUmVjdDsKIAotICAgIC8vIFRoaXMgbWFwIGhv
bGRzIHVuaXF1ZSBpbmZvcm1hdGlvbiBhYm91dCBhIGJsb2NrIHRoYXQgaXMgc3BsaXQgYWNyb3Nz
IHJlZ2lvbnMuCi0gICAgLy8gQSBSZW5kZXJCb3hSZWdpb25JbmZvKiB0ZWxscyB1cyBhYm91dCBh
bnkgbGF5b3V0IGluZm9ybWF0aW9uIGZvciBhIFJlbmRlckJveCB0aGF0Ci0gICAgLy8gaXMgdW5p
cXVlIHRvIHRoZSByZWdpb24uIEZvciBub3cgaXQganVzdCBob2xkcyBsb2dpY2FsIHdpZHRoIGlu
Zm9ybWF0aW9uIGZvciBSZW5kZXJCbG9ja3MsIGJ1dCBldmVudHVhbGx5Ci0gICAgLy8gaXQgd2ls
bCBhbHNvIGhvbGQgYSBjdXN0b20gc3R5bGUgZm9yIGFueSBib3ggKGZvciByZWdpb24gc3R5bGlu
ZykuCi0gICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IFJlbmRlckJveCosIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJCb3hSZWdpb25JbmZvPj4gUmVuZGVyQm94UmVnaW9uSW5mb01hcDsKLSAgICBSZW5k
ZXJCb3hSZWdpb25JbmZvTWFwIG1fcmVuZGVyQm94UmVnaW9uSW5mbzsKKyAgICAvLyBUaGlzIG1h
cCBob2xkcyB1bmlxdWUgaW5mb3JtYXRpb24gYWJvdXQgYSBibG9jayB0aGF0IGlzIHNwbGl0IGFj
cm9zcyBmcmFnbWVudHMuCisgICAgLy8gQSBSZW5kZXJCb3hGcmFnbWVudEluZm8qIHRlbGxzIHVz
IGFib3V0IGFueSBsYXlvdXQgaW5mb3JtYXRpb24gZm9yIGEgUmVuZGVyQm94IHRoYXQKKyAgICAv
LyBpcyB1bmlxdWUgdG8gdGhlIGZyYWdtZW50LiBGb3Igbm93IGl0IGp1c3QgaG9sZHMgbG9naWNh
bCB3aWR0aCBpbmZvcm1hdGlvbiBmb3IgUmVuZGVyQmxvY2tzLCBidXQgZXZlbnR1YWxseQorICAg
IC8vIGl0IHdpbGwgYWxzbyBob2xkIGEgY3VzdG9tIHN0eWxlIGZvciBhbnkgYm94IChmb3IgZnJh
Z21lbnQgc3R5bGluZykuCisgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IFJlbmRlckJveCosIHN0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJCb3hGcmFnbWVudEluZm8+PiBSZW5kZXJCb3hGcmFnbWVudElu
Zm9NYXA7CisgICAgUmVuZGVyQm94RnJhZ21lbnRJbmZvTWFwIG1fcmVuZGVyQm94RnJhZ21lbnRJ
bmZvOwogCiAgICAgYm9vbCBtX2lzVmFsaWQgOiAxOwogfTsKIAotY2xhc3MgQ3VycmVudFJlbmRl
clJlZ2lvbk1haW50YWluZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEN1cnJlbnRSZW5k
ZXJSZWdpb25NYWludGFpbmVyKTsKK2NsYXNzIEN1cnJlbnRSZW5kZXJGcmFnbWVudENvbnRhaW5l
ck1haW50YWluZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEN1cnJlbnRSZW5kZXJGcmFn
bWVudENvbnRhaW5lck1haW50YWluZXIpOwogcHVibGljOgotICAgIEN1cnJlbnRSZW5kZXJSZWdp
b25NYWludGFpbmVyKFJlbmRlclJlZ2lvbiYpOwotICAgIH5DdXJyZW50UmVuZGVyUmVnaW9uTWFp
bnRhaW5lcigpOworICAgIEN1cnJlbnRSZW5kZXJGcmFnbWVudENvbnRhaW5lck1haW50YWluZXIo
UmVuZGVyRnJhZ21lbnRDb250YWluZXImKTsKKyAgICB+Q3VycmVudFJlbmRlckZyYWdtZW50Q29u
dGFpbmVyTWFpbnRhaW5lcigpOwogCi0gICAgUmVuZGVyUmVnaW9uJiByZWdpb24oKSBjb25zdCB7
IHJldHVybiBtX3JlZ2lvbjsgfQorICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyJiBmcmFnbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhZ21lbnQ7IH0KIHByaXZhdGU6Ci0gICAgUmVuZGVyUmVn
aW9uJiBtX3JlZ2lvbjsKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciYgbV9mcmFnbWVudDsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19S
RU5ERVJfT0JKRUNUKFJlbmRlclJlZ2lvbiwgaXNSZW5kZXJSZWdpb24oKSkKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfUkVOREVSX09CSkVDVChSZW5kZXJGcmFnbWVudENvbnRhaW5lciwgaXNSZW5k
ZXJGcmFnbWVudENvbnRhaW5lcigpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZyYWdtZW50Q29udGFpbmVyU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQuY3BwCShyZXZpc2lvbiAyMjI0
NjIpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb25TZXQuY3BwOjIy
MjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudENvbnRhaW5l
clNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUmVuZGVyUmVnaW9uU2V0LmgiCisKKyNpbmNsdWRlICJSZW5kZXJCb3hSZWdpb25JbmZv
LmgiCisjaW5jbHVkZSAiUmVuZGVyRmxvd1RocmVhZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1JlbmRlclJlZ2lvblNldDo6UmVuZGVyUmVnaW9uU2V0KERvY3VtZW50JiBkb2N1bWVudCwg
UmVuZGVyU3R5bGUmJiBzdHlsZSwgUmVuZGVyRmxvd1RocmVhZCYgZmxvd1RocmVhZCkKKyAgICA6
IFJlbmRlclJlZ2lvbihkb2N1bWVudCwgV1RGTW92ZShzdHlsZSksICZmbG93VGhyZWFkKQorewor
fQorCit2b2lkIFJlbmRlclJlZ2lvblNldDo6aW5zdGFsbEZsb3dUaHJlYWQoKQoreworICAgIC8v
IFdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcsIHNpbmNlIHdlIHdlcmUgYWJsZSB0byBjb25u
ZWN0IHRoZSBmbG93IHRocmVhZAorICAgIC8vIGluIHRoZSBjb25zdHJ1Y3Rvci4KK30KKwordm9p
ZCBSZW5kZXJSZWdpb25TZXQ6OmV4cGFuZFRvRW5jb21wYXNzRmxvd1RocmVhZENvbnRlbnRzSWZO
ZWVkZWQoKQoreworICAgIC8vIFdoZW5ldmVyIHRoZSBsYXN0IHJlZ2lvbiBpcyBhIHNldCwgaXQg
YWx3YXlzIGV4cGFuZHMgaXRzIHJlZ2lvbiByZWN0IHRvIGNvbnN1bWUgYWxsCisgICAgLy8gb2Yg
dGhlIGZsb3cgdGhyZWFkIGNvbnRlbnQuIFRoaXMgaXMgYmVjYXVzZSBpdCBpcyBhbHdheXMgY2Fw
YWJsZSBvZiBnZW5lcmF0aW5nIGFuCisgICAgLy8gaW5maW5pdGUgbnVtYmVyIG9mIGJveGVzIGlu
IG9yZGVyIHRvIGhvbGQgYWxsIG9mIHRoZSByZW1haW5pbmcgY29udGVudC4KKyAgICBMYXlvdXRS
ZWN0IHJlY3QoZmxvd1RocmVhZFBvcnRpb25SZWN0KCkpOworICAgIAorICAgIC8vIEdldCB0aGUg
b2Zmc2V0IHdpdGhpbiB0aGUgZmxvdyB0aHJlYWQgaW4gaXRzIGJsb2NrIHByb2dyZXNzaW9uIGRp
cmVjdGlvbi4gVGhlbiBnZXQgdGhlCisgICAgLy8gZmxvdyB0aHJlYWQncyByZW1haW5pbmcgbG9n
aWNhbCBoZWlnaHQgaW5jbHVkaW5nIGl0cyBvdmVyZmxvdyBhbmQgZXhwYW5kIG91ciByZWN0Cisg
ICAgLy8gdG8gZW5jb21wYXNzIHRoYXQgcmVtYWluaW5nIGhlaWdodCBhbmQgb3ZlcmZsb3cuIFRo
ZSBpZGVhIGlzIHRoYXQgd2Ugd2lsbCBnZW5lcmF0ZQorICAgIC8vIGFkZGl0aW9uYWwgY29sdW1u
cyBhbmQgcGFnZXMgdG8gaG9sZCB0aGF0IG92ZXJmbG93LCBzaW5jZSBwZW9wbGUgZG8gd3JpdGUg
YmFkCisgICAgLy8gY29udGVudCBsaWtlIDxib2R5IHN0eWxlPSJoZWlnaHQ6MHB4Ij4gaW4gbXVs
dGktY29sdW1uIGxheW91dHMuCisgICAgYm9vbCBpc0hvcml6b250YWwgPSBmbG93VGhyZWFkKCkt
PmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wT2Zm
c2V0ID0gaXNIb3Jpem9udGFsID8gcmVjdC55KCkgOiByZWN0LngoKTsKKyAgICBMYXlvdXRSZWN0
IGxheW91dFJlY3QgPSBmbG93VGhyZWFkKCktPmxheW91dE92ZXJmbG93UmVjdCgpOworICAgIExh
eW91dFVuaXQgbG9naWNhbEhlaWdodFdpdGhPdmVyZmxvdyA9IChpc0hvcml6b250YWwgPyBsYXlv
dXRSZWN0Lm1heFkoKSA6IGxheW91dFJlY3QubWF4WCgpKSAtIGxvZ2ljYWxUb3BPZmZzZXQ7Cisg
ICAgc2V0Rmxvd1RocmVhZFBvcnRpb25SZWN0KExheW91dFJlY3QocmVjdC54KCksIHJlY3QueSgp
LCBpc0hvcml6b250YWwgPyByZWN0LndpZHRoKCkgOiBsb2dpY2FsSGVpZ2h0V2l0aE92ZXJmbG93
LCBpc0hvcml6b250YWwgPyBsb2dpY2FsSGVpZ2h0V2l0aE92ZXJmbG93IDogcmVjdC5oZWlnaHQo
KSkpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21l
bnRDb250YWluZXJTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGcmFnbWVudENvbnRhaW5lclNldC5jcHAJKHJldmlzaW9uIDIyMjQ2MikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudENvbnRhaW5lclNldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0LDI1ICsyNCwyNSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJSZW5kZXJSZWdpb25TZXQuaCIKKyNpbmNsdWRlICJSZW5kZXJGcmFnbWVu
dENvbnRhaW5lclNldC5oIgogCi0jaW5jbHVkZSAiUmVuZGVyQm94UmVnaW9uSW5mby5oIgorI2lu
Y2x1ZGUgIlJlbmRlckJveEZyYWdtZW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlckZsb3dUaHJl
YWQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZW5kZXJSZWdpb25TZXQ6OlJlbmRlclJl
Z2lvblNldChEb2N1bWVudCYgZG9jdW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUsIFJlbmRlckZs
b3dUaHJlYWQmIGZsb3dUaHJlYWQpCi0gICAgOiBSZW5kZXJSZWdpb24oZG9jdW1lbnQsIFdURk1v
dmUoc3R5bGUpLCAmZmxvd1RocmVhZCkKK1JlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0OjpSZW5k
ZXJGcmFnbWVudENvbnRhaW5lclNldChEb2N1bWVudCYgZG9jdW1lbnQsIFJlbmRlclN0eWxlJiYg
c3R5bGUsIFJlbmRlckZsb3dUaHJlYWQmIGZsb3dUaHJlYWQpCisgICAgOiBSZW5kZXJGcmFnbWVu
dENvbnRhaW5lcihkb2N1bWVudCwgV1RGTW92ZShzdHlsZSksICZmbG93VGhyZWFkKQogewogfQog
Ci12b2lkIFJlbmRlclJlZ2lvblNldDo6aW5zdGFsbEZsb3dUaHJlYWQoKQordm9pZCBSZW5kZXJG
cmFnbWVudENvbnRhaW5lclNldDo6aW5zdGFsbEZsb3dUaHJlYWQoKQogewogICAgIC8vIFdlIGRv
bid0IGhhdmUgdG8gZG8gYW55dGhpbmcsIHNpbmNlIHdlIHdlcmUgYWJsZSB0byBjb25uZWN0IHRo
ZSBmbG93IHRocmVhZAogICAgIC8vIGluIHRoZSBjb25zdHJ1Y3Rvci4KIH0KIAotdm9pZCBSZW5k
ZXJSZWdpb25TZXQ6OmV4cGFuZFRvRW5jb21wYXNzRmxvd1RocmVhZENvbnRlbnRzSWZOZWVkZWQo
KQordm9pZCBSZW5kZXJGcmFnbWVudENvbnRhaW5lclNldDo6ZXhwYW5kVG9FbmNvbXBhc3NGbG93
VGhyZWFkQ29udGVudHNJZk5lZWRlZCgpCiB7CiAgICAgLy8gV2hlbmV2ZXIgdGhlIGxhc3QgcmVn
aW9uIGlzIGEgc2V0LCBpdCBhbHdheXMgZXhwYW5kcyBpdHMgcmVnaW9uIHJlY3QgdG8gY29uc3Vt
ZSBhbGwKICAgICAvLyBvZiB0aGUgZmxvdyB0aHJlYWQgY29udGVudC4gVGhpcyBpcyBiZWNhdXNl
IGl0IGlzIGFsd2F5cyBjYXBhYmxlIG9mIGdlbmVyYXRpbmcgYW4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudENvbnRhaW5lclNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudENvbnRhaW5lclNldC5oCShy
ZXZpc2lvbiAyMjI0NjIpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdp
b25TZXQuaDoyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21l
bnRDb250YWluZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
UmVuZGVyRmxvd1RocmVhZDsKKworLy8gUmVuZGVyUmVnaW9uU2V0IHJlcHJlc2VudHMgYSBzZXQg
b2YgcmVnaW9ucyB0aGF0IGFsbCBoYXZlIHRoZSBzYW1lIHdpZHRoIGFuZCBoZWlnaHQuIEl0IGlz
IGEgImNvbXBvc2l0ZSByZWdpb24gYm94IiB0aGF0CisvLyBjYW4gYmUgdXNlZCB0byByZXByZXNl
bnQgYSBzaW5nbGUgcnVuIG9mIGNvbnRpZ3VvdXMgcmVnaW9ucy4KKy8vCisvLyBCeSBjb21iaW5p
bmcgcnVucyBvZiBzYW1lLXNpemUgY29sdW1ucyBvciBwYWdlcyBpbnRvIGEgc2luZ2xlIG9iamVj
dCwgd2Ugc2lnbmlmaWNhbnRseSByZWR1Y2UgdGhlIG51bWJlciBvZiB1bmlxdWUgUmVuZGVyT2Jq
ZWN0cworLy8gcmVxdWlyZWQgdG8gcmVwcmVzZW50IHRob3NlIG9iamVjdHMuCisvLworLy8gVGhp
cyBjbGFzcyBpcyBhYnN0cmFjdCBhbmQgaXMgb25seSBpbnRlbmRlZCBmb3IgdXNlIGJ5IHJlbmRl
cmVycyB0aGF0IGdlbmVyYXRlIGFub255bW91cyBydW5zIG9mIGlkZW50aWNhbCByZWdpb25zLCBp
LmUuLAorLy8gY29sdW1ucyBhbmQgcHJpbnRpbmcuIFJlbmRlck11bHRpQ29sdW1uU2V0IGFuZCBS
ZW5kZXJQYWdlU2V0IHJlcHJlc2VudCBydW5zIG9mIGNvbHVtbnMgYW5kIHBhZ2VzIHJlc3BlY3Rp
dmVseS4KKy8vCisvLyBGSVhNRTogRm9yIG5vdyB3ZSBkZXJpdmUgZnJvbSBSZW5kZXJSZWdpb24s
IGJ1dCB0aGlzIG1heSBjaGFuZ2UgYXQgc29tZSBwb2ludC4KKworY2xhc3MgUmVuZGVyUmVnaW9u
U2V0IDogcHVibGljIFJlbmRlclJlZ2lvbiB7CitwdWJsaWM6CisgICAgdm9pZCBleHBhbmRUb0Vu
Y29tcGFzc0Zsb3dUaHJlYWRDb250ZW50c0lmTmVlZGVkKCk7CisKK3Byb3RlY3RlZDoKKyAgICBS
ZW5kZXJSZWdpb25TZXQoRG9jdW1lbnQmLCBSZW5kZXJTdHlsZSYmLCBSZW5kZXJGbG93VGhyZWFk
Jik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbnN0YWxsRmxvd1RocmVhZCgpIGZpbmFsOworCisg
ICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlID0gMDsKKyAgICAKKyAg
ICBib29sIGlzUmVuZGVyUmVnaW9uU2V0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0LmgJKHJldmlzaW9uIDIy
MjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudENvbnRhaW5l
clNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMyArMjUsMTMgQEAKIAogI3ByYWdtYSBvbmNl
CiAKLSNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKKyNpbmNsdWRlICJSZW5kZXJGcmFnbWVudENv
bnRhaW5lci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlbmRlckZsb3dUaHJl
YWQ7CiAKLS8vIFJlbmRlclJlZ2lvblNldCByZXByZXNlbnRzIGEgc2V0IG9mIHJlZ2lvbnMgdGhh
dCBhbGwgaGF2ZSB0aGUgc2FtZSB3aWR0aCBhbmQgaGVpZ2h0LiBJdCBpcyBhICJjb21wb3NpdGUg
cmVnaW9uIGJveCIgdGhhdAorLy8gUmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQgcmVwcmVzZW50
cyBhIHNldCBvZiByZWdpb25zIHRoYXQgYWxsIGhhdmUgdGhlIHNhbWUgd2lkdGggYW5kIGhlaWdo
dC4gSXQgaXMgYSAiY29tcG9zaXRlIHJlZ2lvbiBib3giIHRoYXQKIC8vIGNhbiBiZSB1c2VkIHRv
IHJlcHJlc2VudCBhIHNpbmdsZSBydW4gb2YgY29udGlndW91cyByZWdpb25zLgogLy8KIC8vIEJ5
IGNvbWJpbmluZyBydW5zIG9mIHNhbWUtc2l6ZSBjb2x1bW5zIG9yIHBhZ2VzIGludG8gYSBzaW5n
bGUgb2JqZWN0LCB3ZSBzaWduaWZpY2FudGx5IHJlZHVjZSB0aGUgbnVtYmVyIG9mIHVuaXF1ZSBS
ZW5kZXJPYmplY3RzCkBAIC00MCwyMSArNDAsMjEgQEAgY2xhc3MgUmVuZGVyRmxvd1RocmVhZDsK
IC8vIFRoaXMgY2xhc3MgaXMgYWJzdHJhY3QgYW5kIGlzIG9ubHkgaW50ZW5kZWQgZm9yIHVzZSBi
eSByZW5kZXJlcnMgdGhhdCBnZW5lcmF0ZSBhbm9ueW1vdXMgcnVucyBvZiBpZGVudGljYWwgcmVn
aW9ucywgaS5lLiwKIC8vIGNvbHVtbnMgYW5kIHByaW50aW5nLiBSZW5kZXJNdWx0aUNvbHVtblNl
dCBhbmQgUmVuZGVyUGFnZVNldCByZXByZXNlbnQgcnVucyBvZiBjb2x1bW5zIGFuZCBwYWdlcyBy
ZXNwZWN0aXZlbHkuCiAvLwotLy8gRklYTUU6IEZvciBub3cgd2UgZGVyaXZlIGZyb20gUmVuZGVy
UmVnaW9uLCBidXQgdGhpcyBtYXkgY2hhbmdlIGF0IHNvbWUgcG9pbnQuCisvLyBGSVhNRTogRm9y
IG5vdyB3ZSBkZXJpdmUgZnJvbSBSZW5kZXJGcmFnbWVudENvbnRhaW5lciwgYnV0IHRoaXMgbWF5
IGNoYW5nZSBhdCBzb21lIHBvaW50LgogCi1jbGFzcyBSZW5kZXJSZWdpb25TZXQgOiBwdWJsaWMg
UmVuZGVyUmVnaW9uIHsKK2NsYXNzIFJlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0IDogcHVibGlj
IFJlbmRlckZyYWdtZW50Q29udGFpbmVyIHsKIHB1YmxpYzoKICAgICB2b2lkIGV4cGFuZFRvRW5j
b21wYXNzRmxvd1RocmVhZENvbnRlbnRzSWZOZWVkZWQoKTsKIAogcHJvdGVjdGVkOgotICAgIFJl
bmRlclJlZ2lvblNldChEb2N1bWVudCYsIFJlbmRlclN0eWxlJiYsIFJlbmRlckZsb3dUaHJlYWQm
KTsKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lclNldChEb2N1bWVudCYsIFJlbmRlclN0eWxl
JiYsIFJlbmRlckZsb3dUaHJlYWQmKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGluc3RhbGxGbG93
VGhyZWFkKCkgZmluYWw7CiAKICAgICBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3Zl
cnJpZGUgPSAwOwogICAgIAotICAgIGJvb2wgaXNSZW5kZXJSZWdpb25TZXQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBpc1JlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcAkocmV2aXNp
b24gMjIyNDYyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTU0LDcgKzExNTQsNyBAQCBMYXlvdXRVbml0IFJlbmRlckdyaWQ6
OmNvbXB1dGVNYXJnaW5Mb2dpCiAgICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydDsKICAgICBMYXlv
dXRVbml0IG1hcmdpbkVuZDsKICAgICBpZiAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpCi0gICAg
ICAgIGNoaWxkLmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25NYXJnaW5zKCp0aGlzLCBjaGlsZC5jb250
YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5SZWdpb24obnVsbHB0ciksIGNoaWxk
LmxvZ2ljYWxXaWR0aCgpLCBtYXJnaW5TdGFydCwgbWFyZ2luRW5kKTsKKyAgICAgICAgY2hpbGQu
Y29tcHV0ZUlubGluZURpcmVjdGlvbk1hcmdpbnMoKnRoaXMsIGNoaWxkLmNvbnRhaW5pbmdCbG9j
a0xvZ2ljYWxXaWR0aEZvckNvbnRlbnRJbkZyYWdtZW50KG51bGxwdHIpLCBjaGlsZC5sb2dpY2Fs
V2lkdGgoKSwgbWFyZ2luU3RhcnQsIG1hcmdpbkVuZCk7CiAgICAgZWxzZQogICAgICAgICBjaGls
ZC5jb21wdXRlQmxvY2tEaXJlY3Rpb25NYXJnaW5zKCp0aGlzLCBtYXJnaW5TdGFydCwgbWFyZ2lu
RW5kKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJ
KHJldmlzaW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MDQsMTQgKzkwNCwxNCBAQCBib29sIFJlbmRlcklu
bGluZTo6aGl0VGVzdEN1bGxlZElubGluZShjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WaXNp
YmxlUG9zaXRpb24gUmVuZGVySW5saW5lOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBv
aW50JiBwb2ludCwgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb24pCitWaXNpYmxlUG9zaXRpb24g
UmVuZGVySW5saW5lOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwg
Y29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50KQogewogICAgIC8vIEZJWE1F
OiBEb2VzIG5vdCBkZWFsIHdpdGggcmVsYXRpdmUgb3Igc3RpY2t5IHBvc2l0aW9uZWQgaW5saW5l
cyAoc2hvdWxkIGl0PykKICAgICBSZW5kZXJCbG9jayYgY29udGFpbmluZ0Jsb2NrID0gKnRoaXMt
PmNvbnRhaW5pbmdCbG9jaygpOwogICAgIGlmIChmaXJzdExpbmVCb3goKSkgewogICAgICAgICAv
LyBUaGlzIGlubGluZSBhY3R1YWxseSBoYXMgYSBsaW5lIGJveC4gIFdlIG11c3QgaGF2ZSBjbGlj
a2VkIGluIHRoZSBib3JkZXIvcGFkZGluZyBvZiBvbmUgb2YgdGhlc2UgYm94ZXMuICBXZQogICAg
ICAgICAvLyBzaG91bGQgdHJ5IHRvIGZpbmQgYSByZXN1bHQgYnkgYXNraW5nIG91ciBjb250YWlu
aW5nIGJsb2NrLgotICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrLnBvc2l0aW9uRm9yUG9p
bnQocG9pbnQsIHJlZ2lvbik7CisgICAgICAgIHJldHVybiBjb250YWluaW5nQmxvY2sucG9zaXRp
b25Gb3JQb2ludChwb2ludCwgZnJhZ21lbnQpOwogICAgIH0KIAogICAgIC8vIFRyYW5zbGF0ZSB0
aGUgY29vcmRzIGZyb20gdGhlIHByZS1hbm9ueW1vdXMgYmxvY2sgdG8gdGhlIHBvc3QtYW5vbnlt
b3VzIGJsb2NrLgpAQCAtOTIwLDExICs5MjAsMTEgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlcklu
bGluZTo6cG9zaXRpb25GbwogICAgIHdoaWxlIChjb250aW51YXRpb24pIHsKICAgICAgICAgUmVu
ZGVyQmxvY2sqIGN1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbi0+aXNJbmxpbmUoKSA/IGNvbnRp
bnVhdGlvbi0+Y29udGFpbmluZ0Jsb2NrKCkgOiBkb3duY2FzdDxSZW5kZXJCbG9jaz4oY29udGlu
dWF0aW9uKTsKICAgICAgICAgaWYgKGNvbnRpbnVhdGlvbi0+aXNJbmxpbmUoKSB8fCBjb250aW51
YXRpb24tPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24tPnBv
c2l0aW9uRm9yUG9pbnQocGFyZW50QmxvY2tQb2ludCAtIGN1cnJlbnRCbG9jay0+bG9jYXRpb25P
ZmZzZXQoKSwgcmVnaW9uKTsKKyAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24tPnBvc2l0
aW9uRm9yUG9pbnQocGFyZW50QmxvY2tQb2ludCAtIGN1cnJlbnRCbG9jay0+bG9jYXRpb25PZmZz
ZXQoKSwgZnJhZ21lbnQpOwogICAgICAgICBjb250aW51YXRpb24gPSBkb3duY2FzdDxSZW5kZXJC
bG9jaz4oKmNvbnRpbnVhdGlvbikuaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpOwogICAgIH0K
ICAgICAKLSAgICByZXR1cm4gUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBvc2l0aW9uRm9yUG9pbnQo
cG9pbnQsIHJlZ2lvbik7CisgICAgcmV0dXJuIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpwb3NpdGlv
bkZvclBvaW50KHBvaW50LCBmcmFnbWVudCk7CiB9CiAKIG5hbWVzcGFjZSB7CkBAIC0xMTEwLDEw
ICsxMTEwLDEwIEBAIExheW91dFJlY3QgUmVuZGVySW5saW5lOjpsaW5lc1Zpc3VhbE92ZXIKICAg
ICByZXR1cm4gcmVjdDsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJJbmxpbmU6OmxpbmVzVmlzdWFs
T3ZlcmZsb3dCb3VuZGluZ0JveEluUmVnaW9uKGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uKSBj
b25zdAorTGF5b3V0UmVjdCBSZW5kZXJJbmxpbmU6OmxpbmVzVmlzdWFsT3ZlcmZsb3dCb3VuZGlu
Z0JveEluRnJhZ21lbnQoY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50KSBj
b25zdAogewogICAgIEFTU0VSVChhbHdheXNDcmVhdGVMaW5lQm94ZXMoKSk7Ci0gICAgQVNTRVJU
KHJlZ2lvbik7CisgICAgQVNTRVJUKGZyYWdtZW50KTsKIAogICAgIGlmICghZmlyc3RMaW5lQm94
KCkgfHwgIWxhc3RMaW5lQm94KCkpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CkBAIC0x
MTIzLDI4ICsxMTIzLDI4IEBAIExheW91dFJlY3QgUmVuZGVySW5saW5lOjpsaW5lc1Zpc3VhbE92
ZXIKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodFNpZGUgPSBMYXlvdXRVbml0OjptaW4oKTsK
ICAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3A7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0
OwotICAgIElubGluZUZsb3dCb3gqIGxhc3RJbmxpbmVJblJlZ2lvbiA9IDA7CisgICAgSW5saW5l
Rmxvd0JveCogbGFzdElubGluZUluRnJhZ21lbnQgPSAwOwogICAgIGZvciAoSW5saW5lRmxvd0Jv
eCogY3VyciA9IGZpcnN0TGluZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3go
KSkgewogICAgICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290ID0gY3Vyci0+cm9vdCgpOwot
ICAgICAgICBpZiAocm9vdC5jb250YWluaW5nUmVnaW9uKCkgIT0gcmVnaW9uKSB7Ci0gICAgICAg
ICAgICBpZiAobGFzdElubGluZUluUmVnaW9uKQorICAgICAgICBpZiAocm9vdC5jb250YWluaW5n
RnJhZ21lbnQoKSAhPSBmcmFnbWVudCkgeworICAgICAgICAgICAgaWYgKGxhc3RJbmxpbmVJbkZy
YWdtZW50KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAoIWxhc3RJbmxpbmVJblJlZ2lvbikKKyAgICAgICAgaWYg
KCFsYXN0SW5saW5lSW5GcmFnbWVudCkKICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBjdXJyLT5s
b2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3cocm9vdC5saW5lVG9wKCkpOwogCi0gICAgICAgIGxhc3RJ
bmxpbmVJblJlZ2lvbiA9IGN1cnI7CisgICAgICAgIGxhc3RJbmxpbmVJbkZyYWdtZW50ID0gY3Vy
cjsKIAogICAgICAgICBsb2dpY2FsTGVmdFNpZGUgPSBzdGQ6Om1pbihsb2dpY2FsTGVmdFNpZGUs
IGN1cnItPmxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3coKSk7CiAgICAgICAgIGxvZ2ljYWxSaWdo
dFNpZGUgPSBzdGQ6Om1heChsb2dpY2FsUmlnaHRTaWRlLCBjdXJyLT5sb2dpY2FsUmlnaHRWaXN1
YWxPdmVyZmxvdygpKTsKICAgICB9CiAKLSAgICBpZiAoIWxhc3RJbmxpbmVJblJlZ2lvbikKKyAg
ICBpZiAoIWxhc3RJbmxpbmVJbkZyYWdtZW50KQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgp
OwogCi0gICAgbG9naWNhbEhlaWdodCA9IGxhc3RJbmxpbmVJblJlZ2lvbi0+bG9naWNhbEJvdHRv
bVZpc3VhbE92ZXJmbG93KGxhc3RJbmxpbmVJblJlZ2lvbi0+cm9vdCgpLmxpbmVCb3R0b20oKSkg
LSBsb2dpY2FsVG9wOworICAgIGxvZ2ljYWxIZWlnaHQgPSBsYXN0SW5saW5lSW5GcmFnbWVudC0+
bG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93KGxhc3RJbmxpbmVJbkZyYWdtZW50LT5yb290KCku
bGluZUJvdHRvbSgpKSAtIGxvZ2ljYWxUb3A7CiAgICAgCiAgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
V2lkdGggPSBsb2dpY2FsUmlnaHRTaWRlIC0gbG9naWNhbExlZnRTaWRlOwogICAgIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkocmV2aXNpb24gMjIyNDYyKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw3ICsyOSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBvc2l0aW9u
OwotY2xhc3MgUmVuZGVyUmVnaW9uOworY2xhc3MgUmVuZGVyRnJhZ21lbnRDb250YWluZXI7CiAK
IGNsYXNzIFJlbmRlcklubGluZSA6IHB1YmxpYyBSZW5kZXJCb3hNb2RlbE9iamVjdCB7CiBwdWJs
aWM6CkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIEludFJl
Y3QgbGluZXNCb3VuZGluZ0JveCgpIGNvbnN0OwogICAgIExheW91dFJlY3QgbGluZXNWaXN1YWxP
dmVyZmxvd0JvdW5kaW5nQm94KCkgY29uc3Q7Ci0gICAgTGF5b3V0UmVjdCBsaW5lc1Zpc3VhbE92
ZXJmbG93Qm91bmRpbmdCb3hJblJlZ2lvbihjb25zdCBSZW5kZXJSZWdpb24qKSBjb25zdDsKKyAg
ICBMYXlvdXRSZWN0IGxpbmVzVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveEluRnJhZ21lbnQoY29u
c3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKSBjb25zdDsKIAogICAgIElubGluZUZsb3dCb3gq
IGNyZWF0ZUFuZEFwcGVuZElubGluZUZsb3dCb3goKTsKIApAQCAtMTQ5LDcgKzE0OSw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9k
ZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIFRyYW5zZm9ybVN0YXRlJiwgTWFwQ29vcmRpbmF0
ZXNGbGFncywgYm9vbCogd2FzRml4ZWQpIGNvbnN0IG92ZXJyaWRlOwogICAgIGNvbnN0IFJlbmRl
ck9iamVjdCogcHVzaE1hcHBpbmdUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KiBhbmNlc3RvclRvU3RvcEF0LCBSZW5kZXJHZW9tZXRyeU1hcCYpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9p
bnQmLCBjb25zdCBSZW5kZXJSZWdpb24qKSBmaW5hbDsKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9z
aXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29u
dGFpbmVyKikgZmluYWw7CiAKICAgICBMYXlvdXRSZWN0IGZyYW1lUmVjdEZvclN0aWNreVBvc2l0
aW9uaW5nKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbGluZXNCb3VuZGluZ0JveCgpOyB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMjIy
NDYyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyRmlsdGVySW5m
by5oIgogI2luY2x1ZGUgIlJlbmRlck1hcnF1ZWUuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNv
bHVtbkZsb3dUaHJlYWQuaCIKLSNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKKyNpbmNsdWRlICJS
ZW5kZXJGcmFnbWVudENvbnRhaW5lci5oIgogI2luY2x1ZGUgIlJlbmRlclJlcGxpY2EuaCIKICNp
bmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTY3Jv
bGxiYXIuaCIKQEAgLTIwOTIsOSArMjA5Miw5IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgUmVuZGVy
TGF5ZXIqIGFjY3VtdWwKICAgICBpZiAoYWRqdXN0Rm9yQ29sdW1ucyA9PSBSZW5kZXJMYXllcjo6
QWRqdXN0Rm9yQ29sdW1ucykgewogICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIHBhcmVudExheWVy
ID0gbGF5ZXItPnBhcmVudCgpKSB7CiAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyTXVsdGlDb2x1
bW5GbG93VGhyZWFkPihwYXJlbnRMYXllci0+cmVuZGVyZXIoKSkpIHsKLSAgICAgICAgICAgICAg
ICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uRmxvd1Ro
cmVhZD4ocGFyZW50TGF5ZXItPnJlbmRlcmVyKCkpLnBoeXNpY2FsVHJhbnNsYXRpb25Gcm9tRmxv
d1RvUmVnaW9uKGxvY2F0aW9uKTsKLSAgICAgICAgICAgICAgICBpZiAocmVnaW9uKQotICAgICAg
ICAgICAgICAgICAgICBsb2NhdGlvbi5tb3ZlQnkocmVnaW9uLT50b3BMZWZ0TG9jYXRpb24oKSAr
IC1wYXJlbnRMYXllci0+cmVuZGVyQm94KCktPnRvcExlZnRMb2NhdGlvbigpKTsKKyAgICAgICAg
ICAgICAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQgPSBkb3duY2FzdDxSZW5k
ZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ+KHBhcmVudExheWVyLT5yZW5kZXJlcigpKS5waHlzaWNh
bFRyYW5zbGF0aW9uRnJvbUZsb3dUb0ZyYWdtZW50KGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAg
ICBpZiAoZnJhZ21lbnQpCisgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLm1vdmVCeShmcmFn
bWVudC0+dG9wTGVmdExvY2F0aW9uKCkgKyAtcGFyZW50TGF5ZXItPnJlbmRlckJveCgpLT50b3BM
ZWZ0TG9jYXRpb24oKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC01NTI5
LDcgKzU1MjksNyBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxjdWxhdGVSZWN0cyhjb25zdCBDCiAg
ICAgICAgICAgICAgICAgYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0KGxheWVyQm91bmRzV2l0aFZp
c3VhbE92ZXJmbG93KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFNoaWZ0IHRo
ZSBib3VuZHMgdG8gYmUgZm9yIG91ciByZWdpb24gb25seS4KLSAgICAgICAgICAgIExheW91dFJl
Y3QgYm91bmRzID0gcmVuZGVyQm94KCktPmJvcmRlckJveFJlY3RJblJlZ2lvbihudWxscHRyKTsK
KyAgICAgICAgICAgIExheW91dFJlY3QgYm91bmRzID0gcmVuZGVyQm94KCktPmJvcmRlckJveFJl
Y3RJbkZyYWdtZW50KG51bGxwdHIpOwogCiAgICAgICAgICAgICBib3VuZHMubW92ZShvZmZzZXRG
cm9tUm9vdExvY2FsKTsKICAgICAgICAgICAgIGlmICh0aGlzICE9IGNsaXBSZWN0c0NvbnRleHQu
cm9vdExheWVyIHx8IGNsaXBSZWN0c0NvbnRleHQucmVzcGVjdE92ZXJmbG93Q2xpcCA9PSBSZXNw
ZWN0T3ZlcmZsb3dDbGlwKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3
ICs1Nyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAjaW5jbHVkZSAi
UmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJNZWRpYS5oIgotI2luY2x1
ZGUgIlJlbmRlclJlZ2lvbi5oIgorI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50Q29udGFpbmVyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5j
bHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKQEAgLTI1MDYsNyArMjUwNiw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcigKICAgICBpZiAobV9vd25pbmdMYXll
ci5pc1JlbmRlclZpZXdMYXllcigpKQogICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZp
ZXcoKS53aWxsUGFpbnRDb250ZW50cyhjb250ZXh0LCBwYWludERpcnR5UmVjdCwgcGFpbnRpbmdT
dGF0ZSk7CiAKLSAgICAvLyBGSVhNRTogR3JhcGhpY3NMYXllcnMgbmVlZCBhIHdheSB0byBzcGxp
dCBmb3IgUmVuZGVyUmVnaW9ucy4KKyAgICAvLyBGSVhNRTogR3JhcGhpY3NMYXllcnMgbmVlZCBh
IHdheSB0byBzcGxpdCBmb3IgUmVuZGVyRnJhZ21lbnRDb250YWluZXJzLgogICAgIFJlbmRlckxh
eWVyOjpMYXllclBhaW50aW5nSW5mbyBwYWludGluZ0luZm8oJm1fb3duaW5nTGF5ZXIsIHBhaW50
RGlydHlSZWN0LCBwYWludEJlaGF2aW9yLCAtbV9zdWJwaXhlbE9mZnNldEZyb21SZW5kZXJlcik7
CiAgICAgbV9vd25pbmdMYXllci5wYWludExheWVyQ29udGVudHMoY29udGV4dCwgcGFpbnRpbmdJ
bmZvLCBwYWludEZsYWdzKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDIyMjQ2MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDc2LDcgKzIwNzYsNyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2Fu
QmVDb21wb3NpCiAgICAgICAgIGlmICghbGF5ZXIuaXNJbnNpZGVGbG93VGhyZWFkKCkpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICAvLyBDU1MgUmVnaW9ucyBmbG93IHRocmVh
ZHMgZG8gbm90IG5lZWQgdG8gYmUgY29tcG9zaXRlZCBhcyB3ZSB1c2UgY29tcG9zaXRlZCBSZW5k
ZXJSZWdpb25zCisgICAgICAgIC8vIENTUyBSZWdpb25zIGZsb3cgdGhyZWFkcyBkbyBub3QgbmVl
ZCB0byBiZSBjb21wb3NpdGVkIGFzIHdlIHVzZSBjb21wb3NpdGVkIFJlbmRlckZyYWdtZW50Q29u
dGFpbmVycwogICAgICAgICAvLyB0byByZW5kZXIgdGhlIGJhY2tncm91bmQgb2YgdGhlIFJlbmRl
ckZsb3dUaHJlYWQuCiAgICAgICAgIGlmIChsYXllci5pc1JlbmRlckZsb3dUaHJlYWQoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaW5lQnJlYWsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaW5lQnJlYWsuY3BwCShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDcg
KzE1MSw3IEBAIGJvb2wgUmVuZGVyTGluZUJyZWFrOjpjYW5CZVNlbGVjdGlvbkxlYWYKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotVmlzaWJsZVBvc2l0aW9uIFJlbmRlckxpbmVCcmVhazo6cG9zaXRp
b25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlclJlZ2lvbiopCitWaXNp
YmxlUG9zaXRpb24gUmVuZGVyTGluZUJyZWFrOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91
dFBvaW50JiwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKQogewogICAgIGVuc3VyZUxp
bmVCb3hlcygpOwogICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24oMCwgRE9XTlNUUkVB
TSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oCShy
ZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJy
ZWFrLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgcHJpdmF0ZToKICAgICBib29s
IGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIG92ZXJyaWRlIHsgfQog
Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQm
LCBjb25zdCBSZW5kZXJSZWdpb24qKSBvdmVycmlkZTsKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9z
aXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29u
dGFpbmVyKikgb3ZlcnJpZGU7CiAgICAgaW50IGNhcmV0TWluT2Zmc2V0KCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgaW50IGNhcmV0TWF4T2Zmc2V0KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBj
YW5CZVNlbGVjdGlvbkxlYWYoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuY3Bw
CShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVs
dGlDb2x1bW5GbG93VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDE2ICsyMDEsMTYg
QEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmV2YWN1YQogICAgIGRlc3Ryb3ko
KTsKIH0KIAotdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmFkZFJlZ2lvblRvVGhy
ZWFkKFJlbmRlclJlZ2lvbiogcmVuZGVyUmVnaW9uKQordm9pZCBSZW5kZXJNdWx0aUNvbHVtbkZs
b3dUaHJlYWQ6OmFkZEZyYWdtZW50VG9UaHJlYWQoUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIFJl
bmRlckZyYWdtZW50Q29udGFpbmVyKQogewotICAgIGF1dG8qIGNvbHVtblNldCA9IGRvd25jYXN0
PFJlbmRlck11bHRpQ29sdW1uU2V0PihyZW5kZXJSZWdpb24pOworICAgIGF1dG8qIGNvbHVtblNl
dCA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU2V0PihSZW5kZXJGcmFnbWVudENvbnRhaW5l
cik7CiAgICAgaWYgKFJlbmRlck11bHRpQ29sdW1uU2V0KiBuZXh0U2V0ID0gY29sdW1uU2V0LT5u
ZXh0U2libGluZ011bHRpQ29sdW1uU2V0KCkpIHsKLSAgICAgICAgUmVuZGVyUmVnaW9uTGlzdDo6
aXRlcmF0b3IgaXQgPSBtX3JlZ2lvbkxpc3QuZmluZChuZXh0U2V0KTsKLSAgICAgICAgQVNTRVJU
KGl0ICE9IG1fcmVnaW9uTGlzdC5lbmQoKSk7Ci0gICAgICAgIG1fcmVnaW9uTGlzdC5pbnNlcnRC
ZWZvcmUoaXQsIGNvbHVtblNldCk7CisgICAgICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyTGlz
dDo6aXRlcmF0b3IgaXQgPSBtX2ZyYWdtZW50TGlzdC5maW5kKG5leHRTZXQpOworICAgICAgICBB
U1NFUlQoaXQgIT0gbV9mcmFnbWVudExpc3QuZW5kKCkpOworICAgICAgICBtX2ZyYWdtZW50TGlz
dC5pbnNlcnRCZWZvcmUoaXQsIGNvbHVtblNldCk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fcmVn
aW9uTGlzdC5hZGQoY29sdW1uU2V0KTsKLSAgICByZW5kZXJSZWdpb24tPnNldElzVmFsaWQodHJ1
ZSk7CisgICAgICAgIG1fZnJhZ21lbnRMaXN0LmFkZChjb2x1bW5TZXQpOworICAgIFJlbmRlckZy
YWdtZW50Q29udGFpbmVyLT5zZXRJc1ZhbGlkKHRydWUpOwogfQogCiB2b2lkIFJlbmRlck11bHRp
Q29sdW1uRmxvd1RocmVhZDo6d2lsbEJlUmVtb3ZlZEZyb21UcmVlKCkKQEAgLTIxOSw3ICsyMTks
NyBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6d2lsbEJlCiAgICAgLy8gYXJl
IHNpYmxpbmdzIG9mIHRoaXMgb2JqZWN0LCBhbmQgdGhlcmUgbWF5IGJlIHBvaW50ZXJzIHRvIHRo
aXMgb2JqZWN0J3Mgc2libGluZyBzb21ld2hlcmUKICAgICAvLyBmdXJ0aGVyIHVwIG9uIHRoZSBj
YWxsIHN0YWNrLgogICAgIGZvciAoUmVuZGVyTXVsdGlDb2x1bW5TZXQqIGNvbHVtblNldCA9IGZp
cnN0TXVsdGlDb2x1bW5TZXQoKTsgY29sdW1uU2V0OyBjb2x1bW5TZXQgPSBjb2x1bW5TZXQtPm5l
eHRTaWJsaW5nTXVsdGlDb2x1bW5TZXQoKSkKLSAgICAgICAgY29sdW1uU2V0LT5kZXRhY2hSZWdp
b24oKTsKKyAgICAgICAgY29sdW1uU2V0LT5kZXRhY2hGcmFnbWVudCgpOwogICAgIG11bHRpQ29s
dW1uQmxvY2tGbG93KCktPnNldE11bHRpQ29sdW1uRmxvd1RocmVhZChudWxscHRyKTsKICAgICBS
ZW5kZXJGbG93VGhyZWFkOjp3aWxsQmVSZW1vdmVkRnJvbVRyZWUoKTsKIH0KQEAgLTM5Miw3ICsz
OTIsNyBAQCBSZW5kZXJPYmplY3QqIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhCiAgICAgUmVu
ZGVyTXVsdGlDb2x1bW5TZXQqIG5ld1NldCA9IG5ldyBSZW5kZXJNdWx0aUNvbHVtblNldCgqdGhp
cywgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkobXVsdGljb2xD
b250YWluZXItPnN0eWxlKCksIEJMT0NLKSk7CiAgICAgbmV3U2V0LT5pbml0aWFsaXplU3R5bGUo
KTsKICAgICBtdWx0aWNvbENvbnRhaW5lci0+UmVuZGVyQmxvY2s6OmFkZENoaWxkKG5ld1NldCwg
aW5zZXJ0QmVmb3JlTXVsdGljb2xDaGlsZCk7Ci0gICAgaW52YWxpZGF0ZVJlZ2lvbnMoKTsKKyAg
ICBpbnZhbGlkYXRlRnJhZ21lbnRzKCk7CiAKICAgICAvLyBXZSBjYW5ub3QgaGFuZGxlIGltbWVk
aWF0ZSBjb2x1bW4gc2V0IHNpYmxpbmdzIGF0IHRoZSBtb21lbnQgKGFuZCB0aGVyZSdzIG5vIG5l
ZWQgZm9yCiAgICAgLy8gaXQsIGVpdGhlcikuIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBvbmUg
c3Bhbm5lciBzZXBhcmF0aW5nIHRoZW0uCkBAIC00NjksNyArNDY5LDcgQEAgdm9pZCBSZW5kZXJN
dWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmZsb3dUaAogewogICAgIGlmIChtX2JlaW5nRXZhY3VhdGVk
KQogICAgICAgICByZXR1cm47Ci0gICAgaW52YWxpZGF0ZVJlZ2lvbnMoKTsKKyAgICBpbnZhbGlk
YXRlRnJhZ21lbnRzKCk7CiAgICAgaWYgKGlzPFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNl
aG9sZGVyPihyZWxhdGl2ZSkpIHsKICAgICAgICAgLy8gUmVtb3ZlIHRoZSBtYXAgZW50cnkgZm9y
IHRoaXMgc3Bhbm5lciwgYnV0IGxlYXZlIHRoZSBhY3R1YWwgc3Bhbm5lciByZW5kZXJlciBhbG9u
ZS4gQWxzbwogICAgICAgICAvLyBrZWVwIHRoZSByZWZlcmVuY2UgdG8gdGhlIHNwYW5uZXIsIHNp
bmNlIHRoZSBwbGFjZWhvbGRlciBtYXkgYmUgYWJvdXQgdG8gYmUgcmUtaW5zZXJ0ZWQKQEAgLTUy
NSwyOCArNTI1LDI4IEBAIExheW91dFVuaXQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjoK
IAogdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OnNldFBhZ2VCcmVhayhjb25zdCBS
ZW5kZXJCbG9jayogYmxvY2ssIExheW91dFVuaXQgb2Zmc2V0LCBMYXlvdXRVbml0IHNwYWNlU2hv
cnRhZ2UpCiB7Ci0gICAgaWYgKGF1dG8qIG11bHRpY29sU2V0ID0gZG93bmNhc3Q8UmVuZGVyTXVs
dGlDb2x1bW5TZXQ+KHJlZ2lvbkF0QmxvY2tPZmZzZXQoYmxvY2ssIG9mZnNldCkpKQorICAgIGlm
IChhdXRvKiBtdWx0aWNvbFNldCA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU2V0PihmcmFn
bWVudEF0QmxvY2tPZmZzZXQoYmxvY2ssIG9mZnNldCkpKQogICAgICAgICBtdWx0aWNvbFNldC0+
cmVjb3JkU3BhY2VTaG9ydGFnZShzcGFjZVNob3J0YWdlKTsKIH0KIAogdm9pZCBSZW5kZXJNdWx0
aUNvbHVtbkZsb3dUaHJlYWQ6OnVwZGF0ZU1pbmltdW1QYWdlSGVpZ2h0KGNvbnN0IFJlbmRlckJs
b2NrKiBibG9jaywgTGF5b3V0VW5pdCBvZmZzZXQsIExheW91dFVuaXQgbWluSGVpZ2h0KQogewot
ICAgIGlmIChhdXRvKiBtdWx0aWNvbFNldCA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU2V0
PihyZWdpb25BdEJsb2NrT2Zmc2V0KGJsb2NrLCBvZmZzZXQpKSkKKyAgICBpZiAoYXV0byogbXVs
dGljb2xTZXQgPSBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtblNldD4oZnJhZ21lbnRBdEJsb2Nr
T2Zmc2V0KGJsb2NrLCBvZmZzZXQpKSkKICAgICAgICAgbXVsdGljb2xTZXQtPnVwZGF0ZU1pbmlt
dW1Db2x1bW5IZWlnaHQobWluSGVpZ2h0KTsKIH0KIAotUmVuZGVyUmVnaW9uKiBSZW5kZXJNdWx0
aUNvbHVtbkZsb3dUaHJlYWQ6OnJlZ2lvbkF0QmxvY2tPZmZzZXQoY29uc3QgUmVuZGVyQm94KiBi
b3gsIExheW91dFVuaXQgb2Zmc2V0LCBib29sIGV4dGVuZExhc3RSZWdpb24pIGNvbnN0CitSZW5k
ZXJGcmFnbWVudENvbnRhaW5lciogUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpmcmFnbWVu
dEF0QmxvY2tPZmZzZXQoY29uc3QgUmVuZGVyQm94KiBib3gsIExheW91dFVuaXQgb2Zmc2V0LCBi
b29sIGV4dGVuZExhc3RGcmFnbWVudCkgY29uc3QKIHsKICAgICBpZiAoIW1faW5MYXlvdXQpCi0g
ICAgICAgIHJldHVybiBSZW5kZXJGbG93VGhyZWFkOjpyZWdpb25BdEJsb2NrT2Zmc2V0KGJveCwg
b2Zmc2V0LCBleHRlbmRMYXN0UmVnaW9uKTsKKyAgICAgICAgcmV0dXJuIFJlbmRlckZsb3dUaHJl
YWQ6OmZyYWdtZW50QXRCbG9ja09mZnNldChib3gsIG9mZnNldCwgZXh0ZW5kTGFzdEZyYWdtZW50
KTsKIAotICAgIC8vIExheW91dCBpbiBwcm9ncmVzcy4gV2UgYXJlIGNhbGN1bGF0aW5nIHRoZSBz
ZXQgaGVpZ2h0cyBhcyB3ZSBzcGVhaywgc28gdGhlIHJlZ2lvbiByYW5nZQorICAgIC8vIExheW91
dCBpbiBwcm9ncmVzcy4gV2UgYXJlIGNhbGN1bGF0aW5nIHRoZSBzZXQgaGVpZ2h0cyBhcyB3ZSBz
cGVhaywgc28gdGhlIGZyYWdtZW50IHJhbmdlCiAgICAgLy8gaW5mb3JtYXRpb24gaXMgbm90IHVw
LXRvLWRhdGUuCiAKICAgICBSZW5kZXJNdWx0aUNvbHVtblNldCogY29sdW1uU2V0ID0gbV9sYXN0
U2V0V29ya2VkT24gPyBtX2xhc3RTZXRXb3JrZWRPbiA6IGZpcnN0TXVsdGlDb2x1bW5TZXQoKTsK
ICAgICBpZiAoIWNvbHVtblNldCkgewogICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIHNldCwgYmFp
bC4gVGhpcyBtdWx0aWNvbCBpcyBlbXB0eSBvciBvbmx5IGNvbnNpc3RzIG9mIHNwYW5uZXJzLiBU
aGVyZQotICAgICAgICAvLyBhcmUgbm8gcmVnaW9ucy4KKyAgICAgICAgLy8gYXJlIG5vIGZyYWdt
ZW50cy4KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIC8vIFRoZSBsYXN0IHNl
dCB3b3JrZWQgb24gaXMgYSBnb29kIGd1ZXNzLiBCdXQgaWYgd2UncmUgbm90IHdpdGhpbiB0aGUg
Ym91bmRzLCBzZWFyY2ggZm9yIHRoZQpAQCAtNTY5LDI5ICs1NjksMjkgQEAgUmVuZGVyUmVnaW9u
KiBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYQogICAgIHJldHVybiBjb2x1bW5TZXQ7CiB9CiAK
LXZvaWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpzZXRSZWdpb25SYW5nZUZvckJveChj
b25zdCBSZW5kZXJCb3gmIGJveCwgUmVuZGVyUmVnaW9uKiBzdGFydFJlZ2lvbiwgUmVuZGVyUmVn
aW9uKiBlbmRSZWdpb24pCit2b2lkIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6c2V0RnJh
Z21lbnRSYW5nZUZvckJveChjb25zdCBSZW5kZXJCb3gmIGJveCwgUmVuZGVyRnJhZ21lbnRDb250
YWluZXIqIHN0YXJ0RnJhZ21lbnQsIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBlbmRGcmFnbWVu
dCkKIHsKICAgICAvLyBTb21lIGNvbHVtbiBzZXRzIG1heSBoYXZlIHplcm8gaGVpZ2h0LCB3aGlj
aCBtZWFucyB0aGF0IHR3byBvciBtb3JlIHNldHMgbWF5IHN0YXJ0IGF0IHRoZQogICAgIC8vIGV4
YWN0IHNhbWUgZmxvdyB0aHJlYWQgcG9zaXRpb24sIHdoaWNoIG1lYW5zIHRoYXQgc29tZSBwYXJ0
cyBvZiB0aGUgY29kZSBtYXkgYmVsaWV2ZSB0aGF0IGEKICAgICAvLyBnaXZlbiBib3ggbGl2ZXMg
aW4gc2V0cyB0aGF0IGl0IGRvZXNuJ3QgcmVhbGx5IGxpdmUgaW4uIE1ha2Ugc29tZSBhZGp1c3Rt
ZW50cyBoZXJlIGFuZAotICAgIC8vIGluY2x1ZGUgc3VjaCBzZXRzIGlmIHRoZXkgYXJlIGFkamFj
ZW50IHRvIHRoZSBzdGFydCBhbmQvb3IgZW5kIHJlZ2lvbnMuCi0gICAgZm9yIChSZW5kZXJNdWx0
aUNvbHVtblNldCogY29sdW1uU2V0ID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TZXQ+KCpz
dGFydFJlZ2lvbikucHJldmlvdXNTaWJsaW5nTXVsdGlDb2x1bW5TZXQoKTsgY29sdW1uU2V0OyBj
b2x1bW5TZXQgPSBjb2x1bW5TZXQtPnByZXZpb3VzU2libGluZ011bHRpQ29sdW1uU2V0KCkpIHsK
KyAgICAvLyBpbmNsdWRlIHN1Y2ggc2V0cyBpZiB0aGV5IGFyZSBhZGphY2VudCB0byB0aGUgc3Rh
cnQgYW5kL29yIGVuZCBmcmFnbWVudHMuCisgICAgZm9yIChSZW5kZXJNdWx0aUNvbHVtblNldCog
Y29sdW1uU2V0ID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TZXQ+KCpzdGFydEZyYWdtZW50
KS5wcmV2aW91c1NpYmxpbmdNdWx0aUNvbHVtblNldCgpOyBjb2x1bW5TZXQ7IGNvbHVtblNldCA9
IGNvbHVtblNldC0+cHJldmlvdXNTaWJsaW5nTXVsdGlDb2x1bW5TZXQoKSkgewogICAgICAgICBp
ZiAoY29sdW1uU2V0LT5sb2dpY2FsSGVpZ2h0SW5GbG93VGhyZWFkKCkpCiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgc3RhcnRSZWdpb24gPSBjb2x1bW5TZXQ7CisgICAgICAgIHN0YXJ0RnJh
Z21lbnQgPSBjb2x1bW5TZXQ7CiAgICAgfQotICAgIGZvciAoUmVuZGVyTXVsdGlDb2x1bW5TZXQq
IGNvbHVtblNldCA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU2V0Pigqc3RhcnRSZWdpb24p
Lm5leHRTaWJsaW5nTXVsdGlDb2x1bW5TZXQoKTsgY29sdW1uU2V0OyBjb2x1bW5TZXQgPSBjb2x1
bW5TZXQtPm5leHRTaWJsaW5nTXVsdGlDb2x1bW5TZXQoKSkgeworICAgIGZvciAoUmVuZGVyTXVs
dGlDb2x1bW5TZXQqIGNvbHVtblNldCA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU2V0Pigq
c3RhcnRGcmFnbWVudCkubmV4dFNpYmxpbmdNdWx0aUNvbHVtblNldCgpOyBjb2x1bW5TZXQ7IGNv
bHVtblNldCA9IGNvbHVtblNldC0+bmV4dFNpYmxpbmdNdWx0aUNvbHVtblNldCgpKSB7CiAgICAg
ICAgIGlmIChjb2x1bW5TZXQtPmxvZ2ljYWxIZWlnaHRJbkZsb3dUaHJlYWQoKSkKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBlbmRSZWdpb24gPSBjb2x1bW5TZXQ7CisgICAgICAgIGVuZEZy
YWdtZW50ID0gY29sdW1uU2V0OwogICAgIH0KIAotICAgIFJlbmRlckZsb3dUaHJlYWQ6OnNldFJl
Z2lvblJhbmdlRm9yQm94KGJveCwgc3RhcnRSZWdpb24sIGVuZFJlZ2lvbik7CisgICAgUmVuZGVy
Rmxvd1RocmVhZDo6c2V0RnJhZ21lbnRSYW5nZUZvckJveChib3gsIHN0YXJ0RnJhZ21lbnQsIGVu
ZEZyYWdtZW50KTsKIH0KIAotYm9vbCBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmFkZEZv
cmNlZFJlZ2lvbkJyZWFrKGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaywgTGF5b3V0VW5pdCBvZmZz
ZXQsIFJlbmRlckJveCogLypicmVha0NoaWxkKi8sIGJvb2wgLyppc0JlZm9yZSovLCBMYXlvdXRV
bml0KiBvZmZzZXRCcmVha0FkanVzdG1lbnQpCitib29sIFJlbmRlck11bHRpQ29sdW1uRmxvd1Ro
cmVhZDo6YWRkRm9yY2VkRnJhZ21lbnRCcmVhayhjb25zdCBSZW5kZXJCbG9jayogYmxvY2ssIExh
eW91dFVuaXQgb2Zmc2V0LCBSZW5kZXJCb3gqIC8qYnJlYWtDaGlsZCovLCBib29sIC8qaXNCZWZv
cmUqLywgTGF5b3V0VW5pdCogb2Zmc2V0QnJlYWtBZGp1c3RtZW50KQogewotICAgIGlmIChhdXRv
KiBtdWx0aWNvbFNldCA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU2V0PihyZWdpb25BdEJs
b2NrT2Zmc2V0KGJsb2NrLCBvZmZzZXQpKSkgeworICAgIGlmIChhdXRvKiBtdWx0aWNvbFNldCA9
IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU2V0PihmcmFnbWVudEF0QmxvY2tPZmZzZXQoYmxv
Y2ssIG9mZnNldCkpKSB7CiAgICAgICAgIG11bHRpY29sU2V0LT5hZGRGb3JjZWRCcmVhayhvZmZz
ZXQpOwogICAgICAgICBpZiAob2Zmc2V0QnJlYWtBZGp1c3RtZW50KQogICAgICAgICAgICAgKm9m
ZnNldEJyZWFrQWRqdXN0bWVudCA9IHBhZ2VMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KG9mZnNldCkg
PyBwYWdlUmVtYWluaW5nTG9naWNhbEhlaWdodEZvck9mZnNldChvZmZzZXQsIEluY2x1ZGVQYWdl
Qm91bmRhcnkpIDogTGF5b3V0VW5pdDo6ZnJvbVBpeGVsKDApOwpAQCAtNjU0LDggKzY1NCw4IEBA
IExheW91dFNpemUgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjoKICAgICAgICAgKm9mZnNl
dERlcGVuZHNPblBvaW50ID0gdHJ1ZTsKICAgICAKICAgICBMYXlvdXRQb2ludCB0cmFuc2xhdGVk
UGh5c2ljYWxQb2ludChwaHlzaWNhbFBvaW50KTsKLSAgICBpZiAoUmVuZGVyUmVnaW9uKiByZWdp
b24gPSBwaHlzaWNhbFRyYW5zbGF0aW9uRnJvbUZsb3dUb1JlZ2lvbih0cmFuc2xhdGVkUGh5c2lj
YWxQb2ludCkpCi0gICAgICAgIHRyYW5zbGF0ZWRQaHlzaWNhbFBvaW50Lm1vdmVCeShyZWdpb24t
PnRvcExlZnRMb2NhdGlvbigpKTsKKyAgICBpZiAoUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZy
YWdtZW50ID0gcGh5c2ljYWxUcmFuc2xhdGlvbkZyb21GbG93VG9GcmFnbWVudCh0cmFuc2xhdGVk
UGh5c2ljYWxQb2ludCkpCisgICAgICAgIHRyYW5zbGF0ZWRQaHlzaWNhbFBvaW50Lm1vdmVCeShm
cmFnbWVudC0+dG9wTGVmdExvY2F0aW9uKCkpOwogICAgIAogICAgIExheW91dFNpemUgb2Zmc2V0
KHRyYW5zbGF0ZWRQaHlzaWNhbFBvaW50LngoKSwgdHJhbnNsYXRlZFBoeXNpY2FsUG9pbnQueSgp
KTsKICAgICBpZiAoaXM8UmVuZGVyQm94PihlbmNsb3NpbmdDb250YWluZXIpKQpAQCAtNjY5LDcg
KzY2OSw3IEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjptYXBBYnMKICAgICBw
YXJlbnQoKS0+bWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQobW9kZSwgdHJhbnNmb3JtU3RhdGUpOwog
ICAgIExheW91dFBvaW50IHRyYW5zZm9ybVBvaW50KHRyYW5zZm9ybVN0YXRlLm1hcHBlZFBvaW50
KCkpOwogICAgIAotICAgIC8vIE5vdyB3YWxrIHRocm91Z2ggZWFjaCByZWdpb24uCisgICAgLy8g
Tm93IHdhbGsgdGhyb3VnaCBlYWNoIGZyYWdtZW50LgogICAgIGNvbnN0IFJlbmRlck11bHRpQ29s
dW1uU2V0KiBjYW5kaWRhdGVDb2x1bW5TZXQgPSBudWxscHRyOwogICAgIExheW91dFBvaW50IGNh
bmRpZGF0ZVBvaW50OwogICAgIExheW91dFNpemUgY2FuZGlkYXRlQ29udGFpbmVyT2Zmc2V0OwpA
QCAtNjgwLDE2ICs2ODAsMTYgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6Om1h
cEFicwogICAgICAgICBjYW5kaWRhdGVQb2ludCA9IHRyYW5zZm9ybVBvaW50IC0gY2FuZGlkYXRl
Q29udGFpbmVyT2Zmc2V0OwogICAgICAgICBjYW5kaWRhdGVDb2x1bW5TZXQgPSAmY29sdW1uU2V0
OwogICAgICAgICAKLSAgICAgICAgLy8gV2UgcmVhbGx5IGhhdmUgbm8gY2x1ZSB3aGF0IHRvIGRv
IHdpdGggb3ZlcmZsb3cuIFdlJ2xsIGp1c3QgdXNlIHRoZSBjbG9zZXN0IHJlZ2lvbiB0byB0aGUg
cG9pbnQgaW4gdGhhdCBjYXNlLgorICAgICAgICAvLyBXZSByZWFsbHkgaGF2ZSBubyBjbHVlIHdo
YXQgdG8gZG8gd2l0aCBvdmVyZmxvdy4gV2UnbGwganVzdCB1c2UgdGhlIGNsb3Nlc3QgZnJhZ21l
bnQgdG8gdGhlIHBvaW50IGluIHRoYXQgY2FzZS4KICAgICAgICAgTGF5b3V0VW5pdCBwb2ludE9m
ZnNldCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjYW5kaWRhdGVQb2ludC55KCkgOiBj
YW5kaWRhdGVQb2ludC54KCk7Ci0gICAgICAgIExheW91dFVuaXQgcmVnaW9uT2Zmc2V0ID0gaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNvbHVtblNldC50b3BMZWZ0TG9jYXRpb24oKS55KCkg
OiBjb2x1bW5TZXQudG9wTGVmdExvY2F0aW9uKCkueCgpOwotICAgICAgICBpZiAocG9pbnRPZmZz
ZXQgPCByZWdpb25PZmZzZXQgKyBjb2x1bW5TZXQubG9naWNhbEhlaWdodCgpKQorICAgICAgICBM
YXlvdXRVbml0IGZyYWdtZW50T2Zmc2V0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNv
bHVtblNldC50b3BMZWZ0TG9jYXRpb24oKS55KCkgOiBjb2x1bW5TZXQudG9wTGVmdExvY2F0aW9u
KCkueCgpOworICAgICAgICBpZiAocG9pbnRPZmZzZXQgPCBmcmFnbWVudE9mZnNldCArIGNvbHVt
blNldC5sb2dpY2FsSGVpZ2h0KCkpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgCi0g
ICAgLy8gT25jZSB3ZSBoYXZlIGEgZ29vZCBndWVzcyBhcyB0byB3aGljaCByZWdpb24gd2UgaGl0
IHRlc3RlZCB0aHJvdWdoIChhbmQgeWVzLCB0aGlzIHdhcyBqdXN0IGEgaGV1cmlzdGljLCBidXQg
aXQncwotICAgIC8vIHRoZSBiZXN0IHdlIGNvdWxkIGRvKSwgdGhlbiB3ZSBjYW4gbWFwIGZyb20g
dGhlIHJlZ2lvbiBpbnRvIHRoZSBmbG93IHRocmVhZC4KLSAgICBMYXlvdXRTaXplIHRyYW5zbGF0
aW9uT2Zmc2V0ID0gcGh5c2ljYWxUcmFuc2xhdGlvbkZyb21SZWdpb25Ub0Zsb3coY2FuZGlkYXRl
Q29sdW1uU2V0LCBjYW5kaWRhdGVQb2ludCkgKyBjYW5kaWRhdGVDb250YWluZXJPZmZzZXQ7Cisg
ICAgLy8gT25jZSB3ZSBoYXZlIGEgZ29vZCBndWVzcyBhcyB0byB3aGljaCBmcmFnbWVudCB3ZSBo
aXQgdGVzdGVkIHRocm91Z2ggKGFuZCB5ZXMsIHRoaXMgd2FzIGp1c3QgYSBoZXVyaXN0aWMsIGJ1
dCBpdCdzCisgICAgLy8gdGhlIGJlc3Qgd2UgY291bGQgZG8pLCB0aGVuIHdlIGNhbiBtYXAgZnJv
bSB0aGUgZnJhZ21lbnQgaW50byB0aGUgZmxvdyB0aHJlYWQuCisgICAgTGF5b3V0U2l6ZSB0cmFu
c2xhdGlvbk9mZnNldCA9IHBoeXNpY2FsVHJhbnNsYXRpb25Gcm9tRnJhZ21lbnRUb0Zsb3coY2Fu
ZGlkYXRlQ29sdW1uU2V0LCBjYW5kaWRhdGVQb2ludCkgKyBjYW5kaWRhdGVDb250YWluZXJPZmZz
ZXQ7CiAgICAgYm9vbCBwcmVzZXJ2ZTNEID0gbW9kZSAmIFVzZVRyYW5zZm9ybXMgJiYgKHBhcmVu
dCgpLT5zdHlsZSgpLnByZXNlcnZlczNEKCkgfHwgc3R5bGUoKS5wcmVzZXJ2ZXMzRCgpKTsKICAg
ICBpZiAobW9kZSAmIFVzZVRyYW5zZm9ybXMgJiYgc2hvdWxkVXNlVHJhbnNmb3JtRnJvbUNvbnRh
aW5lcihwYXJlbnQoKSkpIHsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdDsKQEAgLTY5
OSw0MSArNjk5LDQxIEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjptYXBBYnMK
ICAgICAgICAgdHJhbnNmb3JtU3RhdGUubW92ZSh0cmFuc2xhdGlvbk9mZnNldC53aWR0aCgpLCB0
cmFuc2xhdGlvbk9mZnNldC5oZWlnaHQoKSwgcHJlc2VydmUzRCA/IFRyYW5zZm9ybVN0YXRlOjpB
Y2N1bXVsYXRlVHJhbnNmb3JtIDogVHJhbnNmb3JtU3RhdGU6OkZsYXR0ZW5UcmFuc2Zvcm0pOwog
fQogCi1MYXlvdXRTaXplIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6cGh5c2ljYWxUcmFu
c2xhdGlvbkZyb21SZWdpb25Ub0Zsb3coY29uc3QgUmVuZGVyTXVsdGlDb2x1bW5TZXQqIGNvbHVt
blNldCwgY29uc3QgTGF5b3V0UG9pbnQmIHBoeXNpY2FsUG9pbnQpIGNvbnN0CitMYXlvdXRTaXpl
IFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6cGh5c2ljYWxUcmFuc2xhdGlvbkZyb21GcmFn
bWVudFRvRmxvdyhjb25zdCBSZW5kZXJNdWx0aUNvbHVtblNldCogY29sdW1uU2V0LCBjb25zdCBM
YXlvdXRQb2ludCYgcGh5c2ljYWxQb2ludCkgY29uc3QKIHsKICAgICBMYXlvdXRQb2ludCBsb2dp
Y2FsUG9pbnQgPSBjb2x1bW5TZXQtPmZsaXBGb3JXcml0aW5nTW9kZShwaHlzaWNhbFBvaW50KTsK
LSAgICBMYXlvdXRQb2ludCB0cmFuc2xhdGVkUG9pbnQgPSBjb2x1bW5TZXQtPnRyYW5zbGF0ZVJl
Z2lvblBvaW50VG9GbG93VGhyZWFkKGxvZ2ljYWxQb2ludCk7CisgICAgTGF5b3V0UG9pbnQgdHJh
bnNsYXRlZFBvaW50ID0gY29sdW1uU2V0LT50cmFuc2xhdGVGcmFnbWVudFBvaW50VG9GbG93VGhy
ZWFkKGxvZ2ljYWxQb2ludCk7CiAgICAgTGF5b3V0UG9pbnQgcGh5c2ljYWxUcmFuc2xhdGVkUG9p
bnQgPSBjb2x1bW5TZXQtPmZsaXBGb3JXcml0aW5nTW9kZSh0cmFuc2xhdGVkUG9pbnQpOwogICAg
IHJldHVybiBwaHlzaWNhbFBvaW50IC0gcGh5c2ljYWxUcmFuc2xhdGVkUG9pbnQ7CiB9CiAKLVJl
bmRlclJlZ2lvbiogUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjptYXBGcm9tRmxvd1RvUmVn
aW9uKFRyYW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSkgY29uc3QKK1JlbmRlckZyYWdtZW50
Q29udGFpbmVyKiBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6Om1hcEZyb21GbG93VG9GcmFn
bWVudChUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUpIGNvbnN0CiB7Ci0gICAgaWYgKCFo
YXNWYWxpZFJlZ2lvbkluZm8oKSkKKyAgICBpZiAoIWhhc1ZhbGlkRnJhZ21lbnRJbmZvKCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgLy8gR2V0IGJhY2sgaW50byBvdXIgbG9jYWwg
ZmxvdyB0aHJlYWQgc3BhY2UuCiAgICAgTGF5b3V0UmVjdCBib3hSZWN0ID0gdHJhbnNmb3JtU3Rh
dGUubWFwcGVkUXVhZCgpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiAgICAgZmxpcEZvcldyaXRp
bmdNb2RlKGJveFJlY3QpOwogCi0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gcmVmYWN0b3IgUmVu
ZGVyT2JqZWN0OjphYnNvbHV0ZVF1YWRzIHRvIGJlIGFibGUgdG8gc3BsaXQgdGhlIHF1YWRzIGFj
cm9zcyByZWdpb25zLAorICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIHJlZmFjdG9yIFJlbmRlck9i
amVjdDo6YWJzb2x1dGVRdWFkcyB0byBiZSBhYmxlIHRvIHNwbGl0IHRoZSBxdWFkcyBhY3Jvc3Mg
ZnJhZ21lbnRzLAogICAgIC8vIGZvciBub3cgd2UganVzdCB0YWtlIHRoZSBjZW50ZXIgb2YgdGhl
IG1hcHBlZCBlbmNsb3NpbmcgYm94IGFuZCBtYXAgaXQgdG8gYSBjb2x1bW4uCiAgICAgTGF5b3V0
UG9pbnQgY2VudGVyUG9pbnQgPSBib3hSZWN0LmNlbnRlcigpOwogICAgIExheW91dFVuaXQgY2Vu
dGVyTG9naWNhbE9mZnNldCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjZW50ZXJQb2lu
dC55KCkgOiBjZW50ZXJQb2ludC54KCk7Ci0gICAgUmVuZGVyUmVnaW9uKiByZW5kZXJSZWdpb24g
PSByZWdpb25BdEJsb2NrT2Zmc2V0KHRoaXMsIGNlbnRlckxvZ2ljYWxPZmZzZXQsIHRydWUpOwot
ICAgIGlmICghcmVuZGVyUmVnaW9uKQorICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBSZW5k
ZXJGcmFnbWVudENvbnRhaW5lciA9IGZyYWdtZW50QXRCbG9ja09mZnNldCh0aGlzLCBjZW50ZXJM
b2dpY2FsT2Zmc2V0LCB0cnVlKTsKKyAgICBpZiAoIVJlbmRlckZyYWdtZW50Q29udGFpbmVyKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB0cmFuc2Zvcm1TdGF0ZS5tb3ZlKHBoeXNpY2Fs
VHJhbnNsYXRpb25PZmZzZXRGcm9tRmxvd1RvUmVnaW9uKHJlbmRlclJlZ2lvbiwgY2VudGVyTG9n
aWNhbE9mZnNldCkpOwotICAgIHJldHVybiByZW5kZXJSZWdpb247CisgICAgdHJhbnNmb3JtU3Rh
dGUubW92ZShwaHlzaWNhbFRyYW5zbGF0aW9uT2Zmc2V0RnJvbUZsb3dUb0ZyYWdtZW50KFJlbmRl
ckZyYWdtZW50Q29udGFpbmVyLCBjZW50ZXJMb2dpY2FsT2Zmc2V0KSk7CisgICAgcmV0dXJuIFJl
bmRlckZyYWdtZW50Q29udGFpbmVyOwogfQogCi1MYXlvdXRTaXplIFJlbmRlck11bHRpQ29sdW1u
Rmxvd1RocmVhZDo6cGh5c2ljYWxUcmFuc2xhdGlvbk9mZnNldEZyb21GbG93VG9SZWdpb24oY29u
c3QgUmVuZGVyUmVnaW9uKiByZW5kZXJSZWdpb24sIGNvbnN0IExheW91dFVuaXQgbG9naWNhbE9m
ZnNldCkgY29uc3QKK0xheW91dFNpemUgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpwaHlz
aWNhbFRyYW5zbGF0aW9uT2Zmc2V0RnJvbUZsb3dUb0ZyYWdtZW50KGNvbnN0IFJlbmRlckZyYWdt
ZW50Q29udGFpbmVyKiBSZW5kZXJGcmFnbWVudENvbnRhaW5lciwgY29uc3QgTGF5b3V0VW5pdCBs
b2dpY2FsT2Zmc2V0KSBjb25zdAogewogICAgIC8vIE5vdyB0aGF0IHdlIGtub3cgd2hpY2ggbXVs
dGljb2x1bW4gc2V0IHdlIGhpdCwgd2UgbmVlZCB0byBnZXQgdGhlIGFwcHJvcHJpYXRlIHRyYW5z
bGF0aW9uIG9mZnNldCBmb3IgdGhlIGNvbHVtbi4KLSAgICBjb25zdCBhdXRvKiBjb2x1bW5TZXQg
PSBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtblNldD4ocmVuZGVyUmVnaW9uKTsKKyAgICBjb25z
dCBhdXRvKiBjb2x1bW5TZXQgPSBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtblNldD4oUmVuZGVy
RnJhZ21lbnRDb250YWluZXIpOwogICAgIExheW91dFBvaW50IHRyYW5zbGF0aW9uT2Zmc2V0ID0g
Y29sdW1uU2V0LT5jb2x1bW5UcmFuc2xhdGlvbkZvck9mZnNldChsb2dpY2FsT2Zmc2V0KTsKICAg
ICAKLSAgICAvLyBOb3cgd2Uga25vdyBob3cgd2Ugd2FudCB0aGUgcmVjdCB0byBiZSB0cmFuc2xh
dGVkIGludG8gdGhlIHJlZ2lvbi4gQXQgdGhpcyBwb2ludCB3ZSdyZSBjb252ZXJ0aW5nCisgICAg
Ly8gTm93IHdlIGtub3cgaG93IHdlIHdhbnQgdGhlIHJlY3QgdG8gYmUgdHJhbnNsYXRlZCBpbnRv
IHRoZSBmcmFnbWVudC4gQXQgdGhpcyBwb2ludCB3ZSdyZSBjb252ZXJ0aW5nCiAgICAgLy8gYmFj
ayB0byBwaHlzaWNhbCBjb29yZGluYXRlcy4KICAgICBpZiAoc3R5bGUoKS5pc0ZsaXBwZWRCbG9j
a3NXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgIExheW91dFJlY3QgcG9ydGlvblJlY3QoY29sdW1u
U2V0LT5mbG93VGhyZWFkUG9ydGlvblJlY3QoKSk7CkBAIC03NTMsMjcgKzc1MywyNyBAQCBMYXlv
dXRTaXplIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6CiAgICAgcmV0dXJuIExheW91dFNp
emUodHJhbnNsYXRpb25PZmZzZXQueCgpLCB0cmFuc2xhdGlvbk9mZnNldC55KCkpOwogfQogCi1S
ZW5kZXJSZWdpb24qIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6cGh5c2ljYWxUcmFuc2xh
dGlvbkZyb21GbG93VG9SZWdpb24oTGF5b3V0UG9pbnQmIHBoeXNpY2FsUG9pbnQpIGNvbnN0CitS
ZW5kZXJGcmFnbWVudENvbnRhaW5lciogUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpwaHlz
aWNhbFRyYW5zbGF0aW9uRnJvbUZsb3dUb0ZyYWdtZW50KExheW91dFBvaW50JiBwaHlzaWNhbFBv
aW50KSBjb25zdAogewotICAgIGlmICghaGFzVmFsaWRSZWdpb25JbmZvKCkpCisgICAgaWYgKCFo
YXNWYWxpZEZyYWdtZW50SW5mbygpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAg
ICAvLyBQdXQgdGhlIHBoeXNpY2FsIHBvaW50IGludG8gdGhlIGZsb3cgdGhyZWFkJ3MgY29vcmRp
bmF0ZSBzcGFjZS4KICAgICBMYXlvdXRQb2ludCBsb2dpY2FsUG9pbnQgPSBmbGlwRm9yV3JpdGlu
Z01vZGUocGh5c2ljYWxQb2ludCk7CiAgICAgCi0gICAgLy8gTm93IGdldCB0aGUgcmVnaW9uIHRo
YXQgd2UgYXJlIGluLgorICAgIC8vIE5vdyBnZXQgdGhlIGZyYWdtZW50IHRoYXQgd2UgYXJlIGlu
LgogICAgIExheW91dFVuaXQgbG9naWNhbE9mZnNldCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBsb2dpY2FsUG9pbnQueSgpIDogbG9naWNhbFBvaW50LngoKTsKLSAgICBSZW5kZXJSZWdp
b24qIHJlbmRlclJlZ2lvbiA9IHJlZ2lvbkF0QmxvY2tPZmZzZXQodGhpcywgbG9naWNhbE9mZnNl
dCwgdHJ1ZSk7Ci0gICAgaWYgKCFyZW5kZXJSZWdpb24pCisgICAgUmVuZGVyRnJhZ21lbnRDb250
YWluZXIqIFJlbmRlckZyYWdtZW50Q29udGFpbmVyID0gZnJhZ21lbnRBdEJsb2NrT2Zmc2V0KHRo
aXMsIGxvZ2ljYWxPZmZzZXQsIHRydWUpOworICAgIGlmICghUmVuZGVyRnJhZ21lbnRDb250YWlu
ZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAgIC8vIFRyYW5zbGF0ZSB0byB0
aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiB0aGUgcmVnaW9uLgotICAgIExheW91dFNpemUgdHJhbnNs
YXRpb25PZmZzZXQgPSBwaHlzaWNhbFRyYW5zbGF0aW9uT2Zmc2V0RnJvbUZsb3dUb1JlZ2lvbihy
ZW5kZXJSZWdpb24sIGxvZ2ljYWxPZmZzZXQpOworICAgIC8vIFRyYW5zbGF0ZSB0byB0aGUgY29v
cmRpbmF0ZSBzcGFjZSBvZiB0aGUgZnJhZ21lbnQuCisgICAgTGF5b3V0U2l6ZSB0cmFuc2xhdGlv
bk9mZnNldCA9IHBoeXNpY2FsVHJhbnNsYXRpb25PZmZzZXRGcm9tRmxvd1RvRnJhZ21lbnQoUmVu
ZGVyRnJhZ21lbnRDb250YWluZXIsIGxvZ2ljYWxPZmZzZXQpOwogICAgIAotICAgIC8vIE5vdyBz
aGlmdCB0aGUgcGh5c2ljYWwgcG9pbnQgaW50byB0aGUgcmVnaW9uJ3MgY29vcmRpbmF0ZSBzcGFj
ZS4KKyAgICAvLyBOb3cgc2hpZnQgdGhlIHBoeXNpY2FsIHBvaW50IGludG8gdGhlIGZyYWdtZW50
J3MgY29vcmRpbmF0ZSBzcGFjZS4KICAgICBwaHlzaWNhbFBvaW50ICs9IHRyYW5zbGF0aW9uT2Zm
c2V0OwogICAgIAotICAgIHJldHVybiByZW5kZXJSZWdpb247CisgICAgcmV0dXJuIFJlbmRlckZy
YWdtZW50Q29udGFpbmVyOwogfQogCiBib29sIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6
aXNQYWdlTG9naWNhbEhlaWdodEtub3duKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgJKHJldmlz
aW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVt
bkZsb3dUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtODUsMzAgKzg1LDMwIEBAIHB1YmxpYzoK
ICAgICAKICAgICB2b2lkIGNvbXB1dGVMaW5lR3JpZFBhZ2luYXRpb25PcmlnaW4oTGF5b3V0U3Rh
dGUmKSBjb25zdDsKICAgICAKLSAgICBSZW5kZXJSZWdpb24qIG1hcEZyb21GbG93VG9SZWdpb24o
VHJhbnNmb3JtU3RhdGUmKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZW5kZXJGcmFnbWVudENvbnRh
aW5lciogbWFwRnJvbUZsb3dUb0ZyYWdtZW50KFRyYW5zZm9ybVN0YXRlJikgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgCiAgICAgLy8gVGhpcyBtZXRob2QgdGFrZXMgYSBsb2dpY2FsIG9mZnNldCBhbmQg
cmV0dXJucyBhIHBoeXNpY2FsIHRyYW5zbGF0aW9uIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gbWFw
Ci0gICAgLy8gYSBwaHlzaWNhbCBwb2ludCAoY29ycmVzcG9uZGluZyB0byB0aGUgbG9naWNhbCBv
ZmZzZXQpIGludG8gdGhlIHJlZ2lvbidzIHBoeXNpY2FsIGNvb3JkaW5hdGUgc3BhY2UuCi0gICAg
TGF5b3V0U2l6ZSBwaHlzaWNhbFRyYW5zbGF0aW9uT2Zmc2V0RnJvbUZsb3dUb1JlZ2lvbihjb25z
dCBSZW5kZXJSZWdpb24qLCBjb25zdCBMYXlvdXRVbml0KSBjb25zdDsKKyAgICAvLyBhIHBoeXNp
Y2FsIHBvaW50IChjb3JyZXNwb25kaW5nIHRvIHRoZSBsb2dpY2FsIG9mZnNldCkgaW50byB0aGUg
ZnJhZ21lbnQncyBwaHlzaWNhbCBjb29yZGluYXRlIHNwYWNlLgorICAgIExheW91dFNpemUgcGh5
c2ljYWxUcmFuc2xhdGlvbk9mZnNldEZyb21GbG93VG9GcmFnbWVudChjb25zdCBSZW5kZXJGcmFn
bWVudENvbnRhaW5lciosIGNvbnN0IExheW91dFVuaXQpIGNvbnN0OwogICAgIAotICAgIC8vIFRo
ZSBwb2ludCBpcyBwaHlzaWNhbCwgYW5kIHRoZSByZXN1bHQgaXMgYSBwaHlzaWNhbCBsb2NhdGlv
biB3aXRoaW4gdGhlIHJlZ2lvbi4KLSAgICBSZW5kZXJSZWdpb24qIHBoeXNpY2FsVHJhbnNsYXRp
b25Gcm9tRmxvd1RvUmVnaW9uKExheW91dFBvaW50JikgY29uc3Q7CisgICAgLy8gVGhlIHBvaW50
IGlzIHBoeXNpY2FsLCBhbmQgdGhlIHJlc3VsdCBpcyBhIHBoeXNpY2FsIGxvY2F0aW9uIHdpdGhp
biB0aGUgZnJhZ21lbnQuCisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIHBoeXNpY2FsVHJh
bnNsYXRpb25Gcm9tRmxvd1RvRnJhZ21lbnQoTGF5b3V0UG9pbnQmKSBjb25zdDsKICAgICAKLSAg
ICAvLyBUaGlzIG1ldGhvZCBpcyB0aGUgaW52ZXJzZSBvZiB0aGUgcHJldmlvdXMgbWV0aG9kIGFu
ZCBnb2VzIGZyb20gcmVnaW9uIHRvIGZsb3cuCi0gICAgTGF5b3V0U2l6ZSBwaHlzaWNhbFRyYW5z
bGF0aW9uRnJvbVJlZ2lvblRvRmxvdyhjb25zdCBSZW5kZXJNdWx0aUNvbHVtblNldCosIGNvbnN0
IExheW91dFBvaW50JikgY29uc3Q7CisgICAgLy8gVGhpcyBtZXRob2QgaXMgdGhlIGludmVyc2Ug
b2YgdGhlIHByZXZpb3VzIG1ldGhvZCBhbmQgZ29lcyBmcm9tIGZyYWdtZW50IHRvIGZsb3cuCisg
ICAgTGF5b3V0U2l6ZSBwaHlzaWNhbFRyYW5zbGF0aW9uRnJvbUZyYWdtZW50VG9GbG93KGNvbnN0
IFJlbmRlck11bHRpQ29sdW1uU2V0KiwgY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKICAgICAK
ICAgICBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5
b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBvdmVycmlkZTsKICAg
ICAKICAgICB2b2lkIG1hcEFic29sdXRlVG9Mb2NhbFBvaW50KE1hcENvb3JkaW5hdGVzRmxhZ3Ms
IFRyYW5zZm9ybVN0YXRlJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgTGF5b3V0U2l6ZSBvZmZzZXRG
cm9tQ29udGFpbmVyKFJlbmRlckVsZW1lbnQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGJvb2wqIG9m
ZnNldERlcGVuZHNPblBvaW50ID0gbnVsbHB0cikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgCi0gICAg
Ly8gRklYTUU6IEV2ZW50dWFsbHkgYXMgY29sdW1uIGFuZCByZWdpb24gZmxvdyB0aHJlYWRzIHN0
YXJ0IG5lc3RpbmcsIHRoaXMgd2lsbCBlbmQgdXAgY2hhbmdpbmcuCisgICAgLy8gRklYTUU6IEV2
ZW50dWFsbHkgYXMgY29sdW1uIGFuZCBmcmFnbWVudCBmbG93IHRocmVhZHMgc3RhcnQgbmVzdGlu
ZywgdGhpcyB3aWxsIGVuZCB1cCBjaGFuZ2luZy4KICAgICBib29sIHNob3VsZENoZWNrQ29sdW1u
QnJlYWtzKCkgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpc1JlbmRlck11
bHRpQ29sdW1uRmxvd1RocmVhZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICAg
ICBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGRS
ZWdpb25Ub1RocmVhZChSZW5kZXJSZWdpb24qKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZEZyYWdt
ZW50VG9UaHJlYWQoUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKSBvdmVycmlkZTsKICAgICB2b2lk
IHdpbGxCZVJlbW92ZWRGcm9tVHJlZSgpIG92ZXJyaWRlOwogICAgIFJlbmRlck9iamVjdCogcmVz
b2x2ZU1vdmVkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
dm9pZCBmbG93VGhyZWFkRGVzY2VuZGFudEluc2VydGVkKFJlbmRlck9iamVjdCYpIG92ZXJyaWRl
OwpAQCAtMTE4LDkgKzExOCw5IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBpbml0aWFsTG9n
aWNhbFdpZHRoKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRQYWdlQnJlYWsoY29uc3Qg
UmVuZGVyQmxvY2sqLCBMYXlvdXRVbml0IG9mZnNldCwgTGF5b3V0VW5pdCBzcGFjZVNob3J0YWdl
KSBvdmVycmlkZTsKICAgICB2b2lkIHVwZGF0ZU1pbmltdW1QYWdlSGVpZ2h0KGNvbnN0IFJlbmRl
ckJsb2NrKiwgTGF5b3V0VW5pdCBvZmZzZXQsIExheW91dFVuaXQgbWluSGVpZ2h0KSBvdmVycmlk
ZTsKLSAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbkF0QmxvY2tPZmZzZXQoY29uc3QgUmVuZGVyQm94
KiwgTGF5b3V0VW5pdCwgYm9vbCBleHRlbmRMYXN0UmVnaW9uID0gZmFsc2UpIGNvbnN0IG92ZXJy
aWRlOwotICAgIHZvaWQgc2V0UmVnaW9uUmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQm94JiwgUmVu
ZGVyUmVnaW9uKiwgUmVuZGVyUmVnaW9uKikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBhZGRGb3JjZWRS
ZWdpb25CcmVhayhjb25zdCBSZW5kZXJCbG9jayosIExheW91dFVuaXQsIFJlbmRlckJveCogYnJl
YWtDaGlsZCwgYm9vbCBpc0JlZm9yZSwgTGF5b3V0VW5pdCogb2Zmc2V0QnJlYWtBZGp1c3RtZW50
ID0gMCkgb3ZlcnJpZGU7CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50QXRC
bG9ja09mZnNldChjb25zdCBSZW5kZXJCb3gqLCBMYXlvdXRVbml0LCBib29sIGV4dGVuZExhc3RG
cmFnbWVudCA9IGZhbHNlKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldEZyYWdtZW50UmFu
Z2VGb3JCb3goY29uc3QgUmVuZGVyQm94JiwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqLCBSZW5k
ZXJGcmFnbWVudENvbnRhaW5lciopIG92ZXJyaWRlOworICAgIGJvb2wgYWRkRm9yY2VkRnJhZ21l
bnRCcmVhayhjb25zdCBSZW5kZXJCbG9jayosIExheW91dFVuaXQsIFJlbmRlckJveCogYnJlYWtD
aGlsZCwgYm9vbCBpc0JlZm9yZSwgTGF5b3V0VW5pdCogb2Zmc2V0QnJlYWtBZGp1c3RtZW50ID0g
MCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBpc1BhZ2VMb2dpY2FsSGVpZ2h0S25vd24oKSBjb25zdCBv
dmVycmlkZTsKIAogICAgIHZvaWQgaGFuZGxlU3Bhbm5lclJlbW92YWwoUmVuZGVyT2JqZWN0JiBz
cGFubmVyKTsKQEAgLTEzNiw3ICsxMzYsNyBAQCBwcml2YXRlOgogICAgIFJlbmRlck11bHRpQ29s
dW1uU2V0KiBtX2xhc3RTZXRXb3JrZWRPbjsKIAogICAgIHVuc2lnbmVkIG1fY29sdW1uQ291bnQ7
ICAgLy8gVGhlIGRlZmF1bHQgY29sdW1uIGNvdW50L3dpZHRoIHRoYXQgYXJlIGJhc2VkIG9mZiBv
dXIgY29udGFpbmluZyBibG9jayB3aWR0aC4gVGhlc2UgdmFsdWVzIHJlcHJlc2VudCBvbmx5IHRo
ZSBkZWZhdWx0LAotICAgIExheW91dFVuaXQgbV9jb2x1bW5XaWR0aDsgLy8gQSBtdWx0aS1jb2x1
bW4gYmxvY2sgdGhhdCBpcyBzcGxpdCBhY3Jvc3MgdmFyaWFibGUgd2lkdGggcGFnZXMgb3IgcmVn
aW9ucyB3aWxsIGhhdmUgZGlmZmVyZW50IGNvbHVtbiBjb3VudHMgYW5kIHdpZHRocyBpbiBlYWNo
LgorICAgIExheW91dFVuaXQgbV9jb2x1bW5XaWR0aDsgLy8gQSBtdWx0aS1jb2x1bW4gYmxvY2sg
dGhhdCBpcyBzcGxpdCBhY3Jvc3MgdmFyaWFibGUgd2lkdGggcGFnZXMgb3IgZnJhZ21lbnRzIHdp
bGwgaGF2ZSBkaWZmZXJlbnQgY29sdW1uIGNvdW50cyBhbmQgd2lkdGhzIGluIGVhY2guCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGVzZSB2YWx1ZXMgd2lsbCBiZSBjYWNoZWQg
KGV2ZW50dWFsbHkpIGZvciBtdWx0aS1jb2x1bW4gYmxvY2tzLgogICAgIExheW91dFVuaXQgbV9j
b2x1bW5IZWlnaHRBdmFpbGFibGU7IC8vIFRvdGFsIGhlaWdodCBhdmFpbGFibGUgdG8gY29sdW1u
cywgb3IgMCBpZiBhdXRvLgogICAgIGJvb2wgbV9pbkxheW91dDsgLy8gU2V0IHdoaWxlIHdlJ3Jl
IGxheWluZyBvdXQgdGhlIGZsb3cgdGhyZWFkLCBkdXJpbmcgd2hpY2ggY29sdW0gc2V0IGhlaWdo
dHMgYXJlIHVua25vd24uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVs
dGlDb2x1bW5TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNdWx0aUNvbHVtblNldC5jcHAJKHJldmlzaW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCi0jaW5jbHVkZSAiUmVuZGVyQm94UmVn
aW9uSW5mby5oIgorI2luY2x1ZGUgIlJlbmRlckJveEZyYWdtZW50SW5mby5oIgogI2luY2x1ZGUg
IlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaCIKQEAgLTM4
LDcgKzM4LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVuZGVyTXVsdGlDb2x1bW5TZXQ6
OlJlbmRlck11bHRpQ29sdW1uU2V0KFJlbmRlckZsb3dUaHJlYWQmIGZsb3dUaHJlYWQsIFJlbmRl
clN0eWxlJiYgc3R5bGUpCi0gICAgOiBSZW5kZXJSZWdpb25TZXQoZmxvd1RocmVhZC5kb2N1bWVu
dCgpLCBXVEZNb3ZlKHN0eWxlKSwgZmxvd1RocmVhZCkKKyAgICA6IFJlbmRlckZyYWdtZW50Q29u
dGFpbmVyU2V0KGZsb3dUaHJlYWQuZG9jdW1lbnQoKSwgV1RGTW92ZShzdHlsZSksIGZsb3dUaHJl
YWQpCiAgICAgLCBtX2NvbXB1dGVkQ29sdW1uQ291bnQoMSkKICAgICAsIG1fY29tcHV0ZWRDb2x1
bW5XaWR0aCgwKQogICAgICwgbV9jb21wdXRlZENvbHVtbkhlaWdodCgwKQpAQCAtMzA5LDEwICsz
MDksMTAgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtblNldDo6cmVjb3JkU3BhY2VTaAogCiB2b2lk
IFJlbmRlck11bHRpQ29sdW1uU2V0Ojp1cGRhdGVMb2dpY2FsV2lkdGgoKQogewotICAgIHNldENv
bXB1dGVkQ29sdW1uV2lkdGhBbmRDb3VudChtdWx0aUNvbHVtbkZsb3dUaHJlYWQoKS0+Y29sdW1u
V2lkdGgoKSwgbXVsdGlDb2x1bW5GbG93VGhyZWFkKCktPmNvbHVtbkNvdW50KCkpOyAvLyBGSVhN
RTogVGhpcyB3aWxsIGV2ZW50dWFsbHkgdmFyeSBpZiB3ZSBhcmUgY29udGFpbmVkIGluc2lkZSBy
ZWdpb25zLgorICAgIHNldENvbXB1dGVkQ29sdW1uV2lkdGhBbmRDb3VudChtdWx0aUNvbHVtbkZs
b3dUaHJlYWQoKS0+Y29sdW1uV2lkdGgoKSwgbXVsdGlDb2x1bW5GbG93VGhyZWFkKCktPmNvbHVt
bkNvdW50KCkpOyAvLyBGSVhNRTogVGhpcyB3aWxsIGV2ZW50dWFsbHkgdmFyeSBpZiB3ZSBhcmUg
Y29udGFpbmVkIGluc2lkZSBmcmFnbWVudHMuCiAgICAgCi0gICAgLy8gRklYTUU6IFdoZW4gd2Ug
YWRkIHJlZ2lvbnMgc3VwcG9ydCwgd2UnbGwgc3RhcnQgaXQgb2ZmIGF0IHRoZSB3aWR0aCBvZiB0
aGUgbXVsdGktY29sdW1uCi0gICAgLy8gYmxvY2sgaW4gdGhhdCBwYXJ0aWN1bGFyIHJlZ2lvbi4K
KyAgICAvLyBGSVhNRTogV2hlbiB3ZSBhZGQgZnJhZ21lbnRzIHN1cHBvcnQsIHdlJ2xsIHN0YXJ0
IGl0IG9mZiBhdCB0aGUgd2lkdGggb2YgdGhlIG11bHRpLWNvbHVtbgorICAgIC8vIGJsb2NrIGlu
IHRoYXQgcGFydGljdWxhciBmcmFnbWVudC4KICAgICBzZXRMb2dpY2FsV2lkdGgocGFyZW50Qm94
KCktPmNvbnRlbnRMb2dpY2FsV2lkdGgoKSk7CiB9CiAKQEAgLTM3NCw3ICszNzQsNyBAQCB2b2lk
IFJlbmRlck11bHRpQ29sdW1uU2V0OjpiZWdpbkZsb3coUmVuCiAKICAgICAvLyBBdCB0aGlzIHBv
aW50IGxheW91dCBpcyBleGFjdGx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBzZXQuIFN0b3Jl
IGJsb2NrIG9mZnNldCBmcm9tIGZsb3cKICAgICAvLyB0aHJlYWQgc3RhcnQuCi0gICAgTGF5b3V0
VW5pdCBsb2dpY2FsVG9wSW5GbG93VGhyZWFkID0gZmxvd1RocmVhZC0+b2Zmc2V0RnJvbUxvZ2lj
YWxUb3BPZkZpcnN0UmVnaW9uKGNvbnRhaW5lcikgKyBjb250YWluZXItPmxvZ2ljYWxIZWlnaHQo
KTsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3BJbkZsb3dUaHJlYWQgPSBmbG93VGhyZWFkLT5v
ZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RGcmFnbWVudChjb250YWluZXIpICsgY29udGFpbmVy
LT5sb2dpY2FsSGVpZ2h0KCk7CiAgICAgc2V0TG9naWNhbFRvcEluRmxvd1RocmVhZChsb2dpY2Fs
VG9wSW5GbG93VGhyZWFkKTsKIH0KIApAQCAtMzg2LDcgKzM4Niw3IEBAIHZvaWQgUmVuZGVyTXVs
dGlDb2x1bW5TZXQ6OmVuZEZsb3coUmVuZGUKICAgICAvLyBzdGFydC4gQWxzbyBub3RlIHRoYXQg
YSBuZXcgY29sdW1uIGhlaWdodCBtYXkgaGF2ZSBhZmZlY3RlZCB0aGUgaGVpZ2h0IHVzZWQgaW4g
dGhlIGZsb3cKICAgICAvLyB0aHJlYWQgKGJlY2F1c2Ugb2Ygc3RydXRzKSwgd2hpY2ggbWF5IGFm
ZmVjdCB0aGUgbnVtYmVyIG9mIGNvbHVtbnMuIFNvIHdlIGFsc28gbmVlZCB0byB1cGRhdGUKICAg
ICAvLyB0aGUgZmxvdyB0aHJlYWQgcG9ydGlvbiBoZWlnaHQgaW4gb3JkZXIgdG8gYmUgYWJsZSB0
byBjYWxjdWxhdGUgYWN0dWFsIGNvbHVtbi1jb3VudC4KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxC
b3R0b21JbkZsb3dUaHJlYWQgPSBmbG93VGhyZWFkLT5vZmZzZXRGcm9tTG9naWNhbFRvcE9mRmly
c3RSZWdpb24oY29udGFpbmVyKSArIGJvdHRvbUluQ29udGFpbmVyOworICAgIExheW91dFVuaXQg
bG9naWNhbEJvdHRvbUluRmxvd1RocmVhZCA9IGZsb3dUaHJlYWQtPm9mZnNldEZyb21Mb2dpY2Fs
VG9wT2ZGaXJzdEZyYWdtZW50KGNvbnRhaW5lcikgKyBib3R0b21JbkNvbnRhaW5lcjsKICAgICBz
ZXRMb2dpY2FsQm90dG9tSW5GbG93VGhyZWFkKGxvZ2ljYWxCb3R0b21JbkZsb3dUaHJlYWQpOwog
ICAgIGNvbnRhaW5lci0+c2V0TG9naWNhbEhlaWdodChib3R0b21JbkNvbnRhaW5lcik7CiB9CkBA
IC00MDAsOCArNDAwLDggQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtblNldDo6bGF5b3V0KCkKICAg
ICBtX21heENvbHVtbkhlaWdodCA9IGNhbGN1bGF0ZU1heENvbHVtbkhlaWdodCgpOwogCiAgICAg
aWYgKCFuZXh0U2libGluZ011bHRpQ29sdW1uU2V0KCkpIHsKLSAgICAgICAgLy8gVGhpcyBpcyB0
aGUgbGFzdCBzZXQsIGkuZS4gdGhlIGxhc3QgcmVnaW9uLiBTZWl6ZSB0aGUgb3Bwb3J0dW5pdHkg
dG8gdmFsaWRhdGUgdGhlbS4KLSAgICAgICAgbXVsdGlDb2x1bW5GbG93VGhyZWFkKCktPnZhbGlk
YXRlUmVnaW9ucygpOworICAgICAgICAvLyBUaGlzIGlzIHRoZSBsYXN0IHNldCwgaS5lLiB0aGUg
bGFzdCBmcmFnbWVudC4gU2VpemUgdGhlIG9wcG9ydHVuaXR5IHRvIHZhbGlkYXRlIHRoZW0uCisg
ICAgICAgIG11bHRpQ29sdW1uRmxvd1RocmVhZCgpLT52YWxpZGF0ZUZyYWdtZW50cygpOwogICAg
IH0KIH0KIApAQCAtNTQxLDcgKzU0MSw3IEBAIExheW91dFJlY3QgUmVuZGVyTXVsdGlDb2x1bW5T
ZXQ6OmZsb3dUaHIKICAgICAvLwogICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHdlIHdpbGwga25v
dyBvdmVyZmxvdyBvbiBhIHBlci1jb2x1bW4gYmFzaXMsIGJ1dCB3ZSBjYW4ndCBkbyB0aGlzIHVu
dGlsIHdlIGhhdmUgYSBwYWludGluZwogICAgIC8vIG1vZGUgdGhhdCB1bmRlcnN0YW5kcyBub3Qg
dG8gcGFpbnQgY29udGVudHMgZnJvbSBhIHByZXZpb3VzIGNvbHVtbiBpbiB0aGUgb3ZlcmZsb3cg
YXJlYSBvZiBhIGZvbGxvd2luZyBjb2x1bW4uCi0gICAgLy8gVGhpcyBwcm9ibGVtIGFwcGxpZXMg
dG8gcmVnaW9ucyBhbmQgcGFnZXMgYXMgd2VsbCBhbmQgaXMgbm90IHVuaXF1ZSB0byBjb2x1bW5z
LgorICAgIC8vIFRoaXMgcHJvYmxlbSBhcHBsaWVzIHRvIGZyYWdtZW50cyBhbmQgcGFnZXMgYXMg
d2VsbCBhbmQgaXMgbm90IHVuaXF1ZSB0byBjb2x1bW5zLgogCiAgICAgYm9vbCBwcm9ncmVzc2lv
blJldmVyc2VkID0gbXVsdGlDb2x1bW5GbG93VGhyZWFkKCktPnByb2dyZXNzaW9uSXNSZXZlcnNl
ZCgpOwogCkBAIC01NTIsNyArNTUyLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJNdWx0aUNvbHVtblNl
dDo6Zmxvd1RocgogCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBvdmVyZmxvdyByZWN0YW5nbGUsIGJh
c2VkIG9uIHRoZSBmbG93IHRocmVhZCdzLCBjbGlwcGVkIGF0IGNvbHVtbiBsb2dpY2FsCiAgICAg
Ly8gdG9wL2JvdHRvbSB1bmxlc3MgaXQncyB0aGUgZmlyc3QvbGFzdCBjb2x1bW4uCi0gICAgTGF5
b3V0UmVjdCBvdmVyZmxvd1JlY3QgPSBvdmVyZmxvd1JlY3RGb3JGbG93VGhyZWFkUG9ydGlvbihw
b3J0aW9uUmVjdCwgaXNGaXJzdENvbHVtbiAmJiBpc0ZpcnN0UmVnaW9uKCksIGlzTGFzdENvbHVt
biAmJiBpc0xhc3RSZWdpb24oKSwgVmlzdWFsT3ZlcmZsb3cpOworICAgIExheW91dFJlY3Qgb3Zl
cmZsb3dSZWN0ID0gb3ZlcmZsb3dSZWN0Rm9yRmxvd1RocmVhZFBvcnRpb24ocG9ydGlvblJlY3Qs
IGlzRmlyc3RDb2x1bW4gJiYgaXNGaXJzdEZyYWdtZW50KCksIGlzTGFzdENvbHVtbiAmJiBpc0xh
c3RGcmFnbWVudCgpLCBWaXN1YWxPdmVyZmxvdyk7CiAKICAgICAvLyBGb3IgUmVuZGVyVmlld3Mg
b25seSAoaS5lLiwgaUJvb2tzKSwgYXZvaWQgb3ZlcmZsb3dpbmcgaW50byBuZWlnaGJvcmluZyBj
b2x1bW5zLCBieSBjbGlwcGluZyBpbiB0aGUgbWlkZGxlIG9mIGFkamFjZW50IGNvbHVtbiBnYXBz
LiBBbHNvIG1ha2Ugc3VyZSB0aGF0IHdlIGF2b2lkIHJvdW5kaW5nIGVycm9ycy4KICAgICBpZiAo
JnZpZXcoKSA9PSBwYXJlbnQoKSkgewpAQCAtNjY2LDcgKzY2Niw3IEBAIHZvaWQgUmVuZGVyTXVs
dGlDb2x1bW5TZXQ6OnJlcGFpbnRGbG93VGgKICAgICAvLyBOb3cgd2UgY2FuIGNvbXBhcmUgdGhp
cyByZWN0IHdpdGggdGhlIGZsb3cgdGhyZWFkIHBvcnRpb25zIG93bmVkIGJ5IGVhY2ggY29sdW1u
LiBGaXJzdCBsZXQncwogICAgIC8vIGp1c3Qgc2VlIGlmIHRoZSByZXBhaW50IHJlY3QgaW50ZXJz
ZWN0cyBvdXIgZmxvdyB0aHJlYWQgcG9ydGlvbiBhdCBhbGwuCiAgICAgTGF5b3V0UmVjdCBjbGlw
cGVkUmVjdChmbG93VGhyZWFkUmVwYWludFJlY3QpOwotICAgIGNsaXBwZWRSZWN0LmludGVyc2Vj
dChSZW5kZXJSZWdpb246OmZsb3dUaHJlYWRQb3J0aW9uT3ZlcmZsb3dSZWN0KCkpOworICAgIGNs
aXBwZWRSZWN0LmludGVyc2VjdChSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6Zmxvd1RocmVhZFBv
cnRpb25PdmVyZmxvd1JlY3QoKSk7CiAgICAgaWYgKGNsaXBwZWRSZWN0LmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIApAQCAtNzQzLDcgKzc0Myw3IEBAIHZvaWQgUmVuZGVyTXVsdGlD
b2x1bW5TZXQ6OmNvbGxlY3RMYXllckYKICAgICAvLyBOb3cgd2UgY2FuIGNvbXBhcmUgd2l0aCB0
aGUgZmxvdyB0aHJlYWQgcG9ydGlvbnMgb3duZWQgYnkgZWFjaCBjb2x1bW4uIEZpcnN0IGxldCdz
CiAgICAgLy8gc2VlIGlmIHRoZSByZWN0IGludGVyc2VjdHMgb3VyIGZsb3cgdGhyZWFkIHBvcnRp
b24gYXQgYWxsLgogICAgIExheW91dFJlY3QgY2xpcHBlZFJlY3QobGF5ZXJCb3VuZHNJbkZsb3dU
aHJlYWQpOwotICAgIGNsaXBwZWRSZWN0LmludGVyc2VjdChSZW5kZXJSZWdpb246OmZsb3dUaHJl
YWRQb3J0aW9uT3ZlcmZsb3dSZWN0KCkpOworICAgIGNsaXBwZWRSZWN0LmludGVyc2VjdChSZW5k
ZXJGcmFnbWVudENvbnRhaW5lcjo6Zmxvd1RocmVhZFBvcnRpb25PdmVyZmxvd1JlY3QoKSk7CiAg
ICAgaWYgKGNsaXBwZWRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIApAQCAt
ODYxLDcgKzg2MSw3IEBAIExheW91dFBvaW50IFJlbmRlck11bHRpQ29sdW1uU2V0Ojpjb2x1bW4K
ICAgICByZXR1cm4gdHJhbnNsYXRpb25PZmZzZXQ7CiB9CiAKLXZvaWQgUmVuZGVyTXVsdGlDb2x1
bW5TZXQ6OmFkanVzdFJlZ2lvbkJvdW5kc0Zyb21GbG93VGhyZWFkUG9ydGlvblJlY3QoTGF5b3V0
UmVjdCYpIGNvbnN0Cit2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0OjphZGp1c3RGcmFnbWVudEJv
dW5kc0Zyb21GbG93VGhyZWFkUG9ydGlvblJlY3QoTGF5b3V0UmVjdCYpIGNvbnN0CiB7CiAgICAg
Ly8gVGhpcyBvbmx5IGZpcmVzIGZvciBuYW1lZCBmbG93IHRocmVhZCBjb21wb3NpdGluZyBjb2Rl
LCBzbyBsZXQncyBtYWtlIHN1cmUgdG8gQVNTRVJUIGlmIHRoaXMgZXZlciBnZXRzIGludm9rZWQu
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC04ODAsMTIgKzg4MCwxMiBAQCB2b2lkIFJl
bmRlck11bHRpQ29sdW1uU2V0OjphZGRPdmVyZmxvd0ZyCiAgICAgICAgIGFkZFZpc3VhbE92ZXJm
bG93KGxhc3RSZWN0KTsKIH0KIAotVmlzaWJsZVBvc2l0aW9uIFJlbmRlck11bHRpQ29sdW1uU2V0
Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBsb2dpY2FsUG9pbnQsIGNvbnN0
IFJlbmRlclJlZ2lvbiopCitWaXNpYmxlUG9zaXRpb24gUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnBv
c2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIGxvZ2ljYWxQb2ludCwgY29uc3QgUmVu
ZGVyRnJhZ21lbnRDb250YWluZXIqKQogewotICAgIHJldHVybiBtdWx0aUNvbHVtbkZsb3dUaHJl
YWQoKS0+cG9zaXRpb25Gb3JQb2ludCh0cmFuc2xhdGVSZWdpb25Qb2ludFRvRmxvd1RocmVhZChs
b2dpY2FsUG9pbnQsIENsYW1wSGl0VGVzdFRyYW5zbGF0aW9uVG9Db2x1bW5zKSwgdGhpcyk7Cisg
ICAgcmV0dXJuIG11bHRpQ29sdW1uRmxvd1RocmVhZCgpLT5wb3NpdGlvbkZvclBvaW50KHRyYW5z
bGF0ZUZyYWdtZW50UG9pbnRUb0Zsb3dUaHJlYWQobG9naWNhbFBvaW50LCBDbGFtcEhpdFRlc3RU
cmFuc2xhdGlvblRvQ29sdW1ucyksIHRoaXMpOwogfQogCi1MYXlvdXRQb2ludCBSZW5kZXJNdWx0
aUNvbHVtblNldDo6dHJhbnNsYXRlUmVnaW9uUG9pbnRUb0Zsb3dUaHJlYWQoY29uc3QgTGF5b3V0
UG9pbnQgJiBsb2dpY2FsUG9pbnQsIENvbHVtbkhpdFRlc3RUcmFuc2xhdGlvbk1vZGUgY2xhbXBN
b2RlKSBjb25zdAorTGF5b3V0UG9pbnQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnRyYW5zbGF0ZUZy
YWdtZW50UG9pbnRUb0Zsb3dUaHJlYWQoY29uc3QgTGF5b3V0UG9pbnQgJiBsb2dpY2FsUG9pbnQs
IENvbHVtbkhpdFRlc3RUcmFuc2xhdGlvbk1vZGUgY2xhbXBNb2RlKSBjb25zdAogewogICAgIC8v
IERldGVybWluZSB3aGljaCBjb2x1bW5zIHdlIGludGVyc2VjdC4KICAgICBMYXlvdXRVbml0IGNv
bEdhcCA9IGNvbHVtbkdhcCgpOwpAQCAtOTczLDcgKzk3Myw3IEBAIHZvaWQgUmVuZGVyTXVsdGlD
b2x1bW5TZXQ6OnVwZGF0ZUhpdFRlc3QKICAgICAgICAgcmVzdWx0LnNldElubmVyTm9kZShub2Rl
KTsKICAgICAgICAgaWYgKCFyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpCiAgICAgICAgICAg
ICByZXN1bHQuc2V0SW5uZXJOb25TaGFyZWROb2RlKG5vZGUpOwotICAgICAgICBMYXlvdXRQb2lu
dCBhZGp1c3RlZFBvaW50ID0gdHJhbnNsYXRlUmVnaW9uUG9pbnRUb0Zsb3dUaHJlYWQocG9pbnQp
OworICAgICAgICBMYXlvdXRQb2ludCBhZGp1c3RlZFBvaW50ID0gdHJhbnNsYXRlRnJhZ21lbnRQ
b2ludFRvRmxvd1RocmVhZChwb2ludCk7CiAgICAgICAgIHZpZXcoKS5vZmZzZXRGb3JDb250ZW50
cyhhZGp1c3RlZFBvaW50KTsKICAgICAgICAgcmVzdWx0LnNldExvY2FsUG9pbnQoYWRqdXN0ZWRQ
b2ludCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRp
Q29sdW1uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck11bHRpQ29sdW1uU2V0LmgJKHJldmlzaW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsy
Nyw3IEBACiAKICNpbmNsdWRlICJMYXllckZyYWdtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVs
dGlDb2x1bW5GbG93VGhyZWFkLmgiCi0jaW5jbHVkZSAiUmVuZGVyUmVnaW9uU2V0LmgiCisjaW5j
bHVkZSAiUmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQwLDkgKzQwLDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogLy8gZm9yIHRoZSAybmQgdG8gbi0xIHBhZ2VzLCBhbmQgdGhlbiBvbmUgbGFzdCBj
b2x1bW4gc2V0IHRoYXQgd2lsbCBob2xkIHRoZSBzaG9ydGVyIGNvbHVtbnMgb24gdGhlIGZpbmFs
IHBhZ2UgKHRoYXQgbWF5IGhhdmUgdG8gYmUgYmFsYW5jZWQKIC8vIGFzIHdlbGwpLgogLy8KLS8v
IENvbHVtbiBzcGFucyByZXN1bHQgaW4gdGhlIGNyZWF0aW9uIG9mIG5ldyBjb2x1bW4gc2V0cyBh
cyB3ZWxsLCBzaW5jZSBhIHNwYW5uaW5nIHJlZ2lvbiBoYXMgdG8gYmUgcGxhY2VkIGluIGJldHdl
ZW4gdGhlIGNvbHVtbiBzZXRzIHRoYXQKKy8vIENvbHVtbiBzcGFucyByZXN1bHQgaW4gdGhlIGNy
ZWF0aW9uIG9mIG5ldyBjb2x1bW4gc2V0cyBhcyB3ZWxsLCBzaW5jZSBhIHNwYW5uaW5nIGZyYWdt
ZW50IGhhcyB0byBiZSBwbGFjZWQgaW4gYmV0d2VlbiB0aGUgY29sdW1uIHNldHMgdGhhdAogLy8g
Y29tZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBzcGFuLgotY2xhc3MgUmVuZGVyTXVsdGlDb2x1bW5T
ZXQgZmluYWwgOiBwdWJsaWMgUmVuZGVyUmVnaW9uU2V0IHsKK2NsYXNzIFJlbmRlck11bHRpQ29s
dW1uU2V0IGZpbmFsIDogcHVibGljIFJlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0IHsKIHB1Ymxp
YzoKICAgICBSZW5kZXJNdWx0aUNvbHVtblNldChSZW5kZXJGbG93VGhyZWFkJiwgUmVuZGVyU3R5
bGUmJik7CiAKQEAgLTEyMSw3ICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgICAgIENsYW1wSGl0VGVz
dFRyYW5zbGF0aW9uVG9Db2x1bW5zLAogICAgICAgICBEb05vdENsYW1wSGl0VGVzdFRyYW5zbGF0
aW9uVG9Db2x1bW5zCiAgICAgfTsKLSAgICBMYXlvdXRQb2ludCB0cmFuc2xhdGVSZWdpb25Qb2lu
dFRvRmxvd1RocmVhZChjb25zdCBMYXlvdXRQb2ludCAmIGxvZ2ljYWxQb2ludCwgQ29sdW1uSGl0
VGVzdFRyYW5zbGF0aW9uTW9kZSA9IERvTm90Q2xhbXBIaXRUZXN0VHJhbnNsYXRpb25Ub0NvbHVt
bnMpIGNvbnN0OworICAgIExheW91dFBvaW50IHRyYW5zbGF0ZUZyYWdtZW50UG9pbnRUb0Zsb3dU
aHJlYWQoY29uc3QgTGF5b3V0UG9pbnQgJiBsb2dpY2FsUG9pbnQsIENvbHVtbkhpdFRlc3RUcmFu
c2xhdGlvbk1vZGUgPSBEb05vdENsYW1wSGl0VGVzdFRyYW5zbGF0aW9uVG9Db2x1bW5zKSBjb25z
dDsKIAogICAgIHZvaWQgdXBkYXRlSGl0VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
TGF5b3V0UG9pbnQmKSBvdmVycmlkZTsKICAgICAKQEAgLTE1MCw5ICsxNTAsOSBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBjb2xsZWN0TGF5ZXJGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmLCBjb25z
dCBMYXlvdXRSZWN0JiBsYXllckJvdW5kaW5nQm94LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJl
Y3QpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBhZGp1c3RSZWdpb25Cb3VuZHNGcm9tRmxvd1RocmVh
ZFBvcnRpb25SZWN0KExheW91dFJlY3QmIHJlZ2lvbkJvdW5kcykgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBhZGp1c3RGcmFnbWVudEJvdW5kc0Zyb21GbG93VGhyZWFkUG9ydGlvblJlY3QoTGF5
b3V0UmVjdCYgZnJhZ21lbnRCb3VuZHMpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgVmlzaWJsZVBv
c2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJS
ZWdpb24qKSBvdmVycmlkZTsKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChj
b25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKikgb3ZlcnJp
ZGU7CiAKICAgICBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAy
MjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzkzLDcgKzc5Myw3IEBAIFJlbmRlckxheWVyTW9kZWxPYmplY3QqIFJl
bmRlck9iamVjdDo6Y28KICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIElmIHdlIGhhdmUgYSBm
bG93IHRocmVhZCwgdGhlbiB3ZSBuZWVkIHRvIGRvIGluZGl2aWR1YWwgcmVwYWludHMgd2l0aGlu
IHRoZSBSZW5kZXJSZWdpb25zIGluc3RlYWQuCisgICAgLy8gSWYgd2UgaGF2ZSBhIGZsb3cgdGhy
ZWFkLCB0aGVuIHdlIG5lZWQgdG8gZG8gaW5kaXZpZHVhbCByZXBhaW50cyB3aXRoaW4gdGhlIFJl
bmRlckZyYWdtZW50Q29udGFpbmVycyBpbnN0ZWFkLgogICAgIC8vIFJldHVybiB0aGUgZmxvdyB0
aHJlYWQgYXMgYSByZXBhaW50IGNvbnRhaW5lciBpbiBvcmRlciB0byBjcmVhdGUgYSBjaG9rZXBv
aW50IHRoYXQgYWxsb3dzIHVzIHRvIGNoYW5nZQogICAgIC8vIHJlcGFpbnRpbmcgdG8gZG8gaW5k
aXZpZHVhbCByZWdpb24gcmVwYWludHMuCiAgICAgUmVuZGVyRmxvd1RocmVhZCogcGFyZW50UmVu
ZGVyRmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKQEAgLTg0OCw3ICs4
NDgsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6cmVwYWludFVzaW5nQ29udGFpbmVyCiAgICAgICAg
IHJlcGFpbnRDb250YWluZXIgPSAmdmlldygpOwogCiAgICAgaWYgKGlzPFJlbmRlckZsb3dUaHJl
YWQ+KCpyZXBhaW50Q29udGFpbmVyKSkgewotICAgICAgICBkb3duY2FzdDxSZW5kZXJGbG93VGhy
ZWFkPigqcmVwYWludENvbnRhaW5lcikucmVwYWludFJlY3RhbmdsZUluUmVnaW9ucyhyKTsKKyAg
ICAgICAgZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4oKnJlcGFpbnRDb250YWluZXIpLnJlcGFp
bnRSZWN0YW5nbGVJbkZyYWdtZW50cyhyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
MTA0OCw5ICsxMDQ4LDkgQEAgdm9pZCBSZW5kZXJPYmplY3Q6Om91dHB1dFJlZ2lvbnNJbmZvcm1h
dAogICAgIGlmICghZnRjYikKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyUmVnaW9uKiBz
dGFydFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgUmVuZGVyUmVnaW9uKiBlbmRSZWdpb24gPSBudWxs
cHRyOwotICAgIGZ0Y2ItPmdldFJlZ2lvblJhbmdlRm9yQm94KGRvd25jYXN0PFJlbmRlckJveD4o
dGhpcyksIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pOworICAgIFJlbmRlckZyYWdtZW50Q29udGFp
bmVyKiBzdGFydFJlZ2lvbiA9IG51bGxwdHI7CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIq
IGVuZFJlZ2lvbiA9IG51bGxwdHI7CisgICAgZnRjYi0+Z2V0RnJhZ21lbnRSYW5nZUZvckJveChk
b3duY2FzdDxSZW5kZXJCb3g+KHRoaXMpLCBzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKTsKICAgICBz
dHJlYW0gPDwgIiBbUnM6IiA8PCBzdGFydFJlZ2lvbiA8PCAiIFJlOiIgPDwgZW5kUmVnaW9uIDw8
ICJdIjsKIH0KIApAQCAtMTUzOSw3ICsxNTM5LDcgQEAgUG9zaXRpb24gUmVuZGVyT2JqZWN0Ojpw
b3NpdGlvbkZvclBvaW50KAogICAgIHJldHVybiBwb3NpdGlvbkZvclBvaW50KHBvaW50LCBudWxs
cHRyKS5kZWVwRXF1aXZhbGVudCgpOwogfQogCi1WaXNpYmxlUG9zaXRpb24gUmVuZGVyT2JqZWN0
Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyUmVnaW9u
KikKK1Zpc2libGVQb3NpdGlvbiBSZW5kZXJPYmplY3Q6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3Qg
TGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciopCiB7CiAgICAgcmV0
dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbihjYXJldE1pbk9mZnNldCgpLCBET1dOU1RSRUFNKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9u
IDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBjbGFzcyBSZW5kZXJGbG93VGhyZWFkOwogY2xh
c3MgUmVuZGVyR2VvbWV0cnlNYXA7CiBjbGFzcyBSZW5kZXJMYXllcjsKIGNsYXNzIFJlbmRlckxh
eWVyTW9kZWxPYmplY3Q7Ci1jbGFzcyBSZW5kZXJSZWdpb247CitjbGFzcyBSZW5kZXJGcmFnbWVu
dENvbnRhaW5lcjsKIGNsYXNzIFJlbmRlclRoZW1lOwogY2xhc3MgU2VsZWN0aW9uU3VidHJlZVJv
b3Q7CiBjbGFzcyBUcmFuc2Zvcm1TdGF0ZTsKQEAgLTIzOCw3ICsyMzgsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIGlzUmVuZGVyQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJJRnJhbWUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlckltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJSZWdpb24oKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlckZyYWdtZW50Q29udGFpbmVyKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNSZXBsaWNhKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc1J1YnlJbmxpbmUoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQpAQCAtNTcwLDcgKzU3MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgdmlydHVhbCBQ
b3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAgdmlydHVh
bCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNv
bnN0IFJlbmRlclJlZ2lvbiopOworICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9u
Rm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5l
ciopOwogICAgIFZpc2libGVQb3NpdGlvbiBjcmVhdGVWaXNpYmxlUG9zaXRpb24oaW50IG9mZnNl
dCwgRUFmZmluaXR5KSBjb25zdDsKICAgICBWaXNpYmxlUG9zaXRpb24gY3JlYXRlVmlzaWJsZVBv
c2l0aW9uKGNvbnN0IFBvc2l0aW9uJikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDU2MCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3Jh
dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICog
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
Ci0gKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5j
bHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKLSNpbmNsdWRlICJS
ZW5kZXJCb3hSZWdpb25JbmZvLmgiCi0jaW5jbHVkZSAiUmVuZGVyRmxvd1RocmVhZC5oIgotI2lu
Y2x1ZGUgIlJlbmRlcklubGluZS5oIgotI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCi0jaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAi
U3R5bGVSZXNvbHZlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlbmRlclJlZ2lvbjo6
UmVuZGVyUmVnaW9uKEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUsIFJlbmRl
ckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQpCi0gICAgOiBSZW5kZXJCbG9ja0Zsb3coZWxlbWVudCwg
V1RGTW92ZShzdHlsZSkpCi0gICAgLCBtX2Zsb3dUaHJlYWQoZmxvd1RocmVhZCkKLSAgICAsIG1f
aXNWYWxpZChmYWxzZSkKLXsKLX0KLQotUmVuZGVyUmVnaW9uOjpSZW5kZXJSZWdpb24oRG9jdW1l
bnQmIGRvY3VtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlLCBSZW5kZXJGbG93VGhyZWFkKiBmbG93
VGhyZWFkKQotICAgIDogUmVuZGVyQmxvY2tGbG93KGRvY3VtZW50LCBXVEZNb3ZlKHN0eWxlKSkK
LSAgICAsIG1fZmxvd1RocmVhZChmbG93VGhyZWFkKQotICAgICwgbV9pc1ZhbGlkKGZhbHNlKQot
ewotfQotCi1MYXlvdXRQb2ludCBSZW5kZXJSZWdpb246Om1hcFJlZ2lvblBvaW50SW50b0Zsb3dU
aHJlYWRDb29yZGluYXRlcyhjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCi17Ci0gICAgLy8gQXNz
dW1pbmcgdGhlIHBvaW50IGlzIHJlbGF0aXZlIHRvIHRoZSByZWdpb24gYmxvY2ssIDMgY2FzZXMg
d2lsbCBiZSBjb25zaWRlcmVkOgotICAgIC8vIGEpIHRvcCBtYXJnaW4sIHBhZGRpbmcgb3IgYm9y
ZGVyLgotICAgIC8vIGIpIGJvdHRvbSBtYXJnaW4sIHBhZGRpbmcgb3IgYm9yZGVyLgotICAgIC8v
IGMpIG5vbi1jb250ZW50IHJlZ2lvbiBhcmVhLgotCi0gICAgTGF5b3V0VW5pdCBwb2ludExvZ2lj
YWxUb3AoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBvaW50LnkoKSA6IHBvaW50LngoKSk7
Ci0gICAgTGF5b3V0VW5pdCBwb2ludExvZ2ljYWxMZWZ0KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBwb2ludC54KCkgOiBwb2ludC55KCkpOwotICAgIExheW91dFVuaXQgZmxvd1RocmVhZExv
Z2ljYWxUb3AoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG1fZmxvd1RocmVhZFBvcnRpb25S
ZWN0LnkoKSA6IG1fZmxvd1RocmVhZFBvcnRpb25SZWN0LngoKSk7Ci0gICAgTGF5b3V0VW5pdCBm
bG93VGhyZWFkTG9naWNhbExlZnQoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG1fZmxvd1Ro
cmVhZFBvcnRpb25SZWN0LngoKSA6IG1fZmxvd1RocmVhZFBvcnRpb25SZWN0LnkoKSk7Ci0gICAg
TGF5b3V0VW5pdCBmbG93VGhyZWFkUG9ydGlvblRvcEJvdW5kKGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkgPyBtX2Zsb3dUaHJlYWRQb3J0aW9uUmVjdC5oZWlnaHQoKSA6IG1fZmxvd1RocmVhZFBv
cnRpb25SZWN0LndpZHRoKCkpOwotICAgIExheW91dFVuaXQgZmxvd1RocmVhZFBvcnRpb25MZWZ0
Qm91bmQoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG1fZmxvd1RocmVhZFBvcnRpb25SZWN0
LndpZHRoKCkgOiBtX2Zsb3dUaHJlYWRQb3J0aW9uUmVjdC5oZWlnaHQoKSk7Ci0gICAgTGF5b3V0
VW5pdCBmbG93VGhyZWFkUG9ydGlvblRvcE1heChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8g
bV9mbG93VGhyZWFkUG9ydGlvblJlY3QubWF4WSgpIDogbV9mbG93VGhyZWFkUG9ydGlvblJlY3Qu
bWF4WCgpKTsKLSAgICBMYXlvdXRVbml0IGZsb3dUaHJlYWRQb3J0aW9uTGVmdE1heChpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpID8gbV9mbG93VGhyZWFkUG9ydGlvblJlY3QubWF4WCgpIDogbV9m
bG93VGhyZWFkUG9ydGlvblJlY3QubWF4WSgpKTsKLSAgICBMYXlvdXRVbml0IGVmZmVjdGl2ZUZp
eGVkUG9pbnREZW5vbWluYXRvcjsKLSAgICBlZmZlY3RpdmVGaXhlZFBvaW50RGVub21pbmF0b3Iu
c2V0UmF3VmFsdWUoMSk7Ci0KLSAgICBpZiAocG9pbnRMb2dpY2FsVG9wIDwgMCkgewotICAgICAg
ICBMYXlvdXRQb2ludCBwb2ludEluVGhyZWFkKDAsIGZsb3dUaHJlYWRMb2dpY2FsVG9wKTsKLSAg
ICAgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBwb2ludEluVGhyZWFkIDog
cG9pbnRJblRocmVhZC50cmFuc3Bvc2VkUG9pbnQoKTsKLSAgICB9Ci0KLSAgICBpZiAocG9pbnRM
b2dpY2FsVG9wID49IGZsb3dUaHJlYWRQb3J0aW9uVG9wQm91bmQpIHsKLSAgICAgICAgTGF5b3V0
UG9pbnQgcG9pbnRJblRocmVhZChmbG93VGhyZWFkUG9ydGlvbkxlZnRCb3VuZCwgZmxvd1RocmVh
ZFBvcnRpb25Ub3BNYXggLSBlZmZlY3RpdmVGaXhlZFBvaW50RGVub21pbmF0b3IpOwotICAgICAg
ICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBvaW50SW5UaHJlYWQgOiBwb2lu
dEluVGhyZWFkLnRyYW5zcG9zZWRQb2ludCgpOwotICAgIH0KLQotICAgIGlmIChwb2ludExvZ2lj
YWxMZWZ0IDwgMCkgewotICAgICAgICBMYXlvdXRQb2ludCBwb2ludEluVGhyZWFkKGZsb3dUaHJl
YWRMb2dpY2FsTGVmdCwgcG9pbnRMb2dpY2FsVG9wICsgZmxvd1RocmVhZExvZ2ljYWxUb3ApOwot
ICAgICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBvaW50SW5UaHJlYWQg
OiBwb2ludEluVGhyZWFkLnRyYW5zcG9zZWRQb2ludCgpOwotICAgIH0KLSAgICBpZiAocG9pbnRM
b2dpY2FsTGVmdCA+PSBmbG93VGhyZWFkUG9ydGlvbkxlZnRCb3VuZCkgewotICAgICAgICBMYXlv
dXRQb2ludCBwb2ludEluVGhyZWFkKGZsb3dUaHJlYWRQb3J0aW9uTGVmdE1heCAtIGVmZmVjdGl2
ZUZpeGVkUG9pbnREZW5vbWluYXRvciwgcG9pbnRMb2dpY2FsVG9wICsgZmxvd1RocmVhZExvZ2lj
YWxUb3ApOwotICAgICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBvaW50
SW5UaHJlYWQgOiBwb2ludEluVGhyZWFkLnRyYW5zcG9zZWRQb2ludCgpOwotICAgIH0KLSAgICBM
YXlvdXRQb2ludCBwb2ludEluVGhyZWFkKHBvaW50TG9naWNhbExlZnQgKyBmbG93VGhyZWFkTG9n
aWNhbExlZnQsIHBvaW50TG9naWNhbFRvcCArIGZsb3dUaHJlYWRMb2dpY2FsVG9wKTsKLSAgICBy
ZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBvaW50SW5UaHJlYWQgOiBwb2ludElu
VGhyZWFkLnRyYW5zcG9zZWRQb2ludCgpOwotfQotCi1WaXNpYmxlUG9zaXRpb24gUmVuZGVyUmVn
aW9uOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVu
ZGVyUmVnaW9uKiByZWdpb24pCi17Ci0gICAgaWYgKCFpc1ZhbGlkKCkgfHwgIW1fZmxvd1RocmVh
ZC0+Zmlyc3RDaGlsZCgpKSAvLyBjaGVja2luZyBmb3IgZW1wdHkgcmVnaW9uIGJsb2Nrcy4KLSAg
ICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpwb3NpdGlvbkZvclBvaW50KHBvaW50LCByZWdpb24p
OwotCi0gICAgcmV0dXJuIG1fZmxvd1RocmVhZC0+cG9zaXRpb25Gb3JQb2ludChtYXBSZWdpb25Q
b2ludEludG9GbG93VGhyZWFkQ29vcmRpbmF0ZXMocG9pbnQpLCB0aGlzKTsKLX0KLQotTGF5b3V0
VW5pdCBSZW5kZXJSZWdpb246OnBhZ2VMb2dpY2FsV2lkdGgoKSBjb25zdAotewotICAgIEFTU0VS
VChpc1ZhbGlkKCkpOwotICAgIHJldHVybiBtX2Zsb3dUaHJlYWQtPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBjb250ZW50V2lkdGgoKSA6IGNvbnRlbnRIZWlnaHQoKTsKLX0KLQotTGF5b3V0
VW5pdCBSZW5kZXJSZWdpb246OnBhZ2VMb2dpY2FsSGVpZ2h0KCkgY29uc3QKLXsKLSAgICBBU1NF
UlQoaXNWYWxpZCgpKTsKLSAgICByZXR1cm4gbV9mbG93VGhyZWFkLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gY29udGVudEhlaWdodCgpIDogY29udGVudFdpZHRoKCk7Ci19Ci0KLUxheW91
dFVuaXQgUmVuZGVyUmVnaW9uOjpsb2dpY2FsSGVpZ2h0T2ZBbGxGbG93VGhyZWFkQ29udGVudCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBhZ2VMb2dpY2FsSGVpZ2h0KCk7Ci19Ci0KLUxheW91dFJl
Y3QgUmVuZGVyUmVnaW9uOjpmbG93VGhyZWFkUG9ydGlvbk92ZXJmbG93UmVjdCgpCi17Ci0gICAg
cmV0dXJuIG92ZXJmbG93UmVjdEZvckZsb3dUaHJlYWRQb3J0aW9uKGZsb3dUaHJlYWRQb3J0aW9u
UmVjdCgpLCBpc0ZpcnN0UmVnaW9uKCksIGlzTGFzdFJlZ2lvbigpLCBWaXN1YWxPdmVyZmxvdyk7
Ci19Ci0KLUxheW91dFBvaW50IFJlbmRlclJlZ2lvbjo6Zmxvd1RocmVhZFBvcnRpb25Mb2NhdGlv
bigpIGNvbnN0Ci17Ci0gICAgTGF5b3V0UG9pbnQgcG9ydGlvbkxvY2F0aW9uOwotICAgIExheW91
dFJlY3QgcG9ydGlvblJlY3QgPSBmbG93VGhyZWFkUG9ydGlvblJlY3QoKTsKLQotICAgIGlmIChm
bG93VGhyZWFkKCktPnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkgewotICAg
ICAgICBMYXlvdXRSZWN0IGZsaXBwZWRGbG93VGhyZWFkUG9ydGlvblJlY3QocG9ydGlvblJlY3Qp
OwotICAgICAgICBmbG93VGhyZWFkKCktPmZsaXBGb3JXcml0aW5nTW9kZShmbGlwcGVkRmxvd1Ro
cmVhZFBvcnRpb25SZWN0KTsKLSAgICAgICAgcG9ydGlvbkxvY2F0aW9uID0gZmxpcHBlZEZsb3dU
aHJlYWRQb3J0aW9uUmVjdC5sb2NhdGlvbigpOwotICAgIH0gZWxzZQotICAgICAgICBwb3J0aW9u
TG9jYXRpb24gPSBwb3J0aW9uUmVjdC5sb2NhdGlvbigpOwotCi0gICAgcmV0dXJuIHBvcnRpb25M
b2NhdGlvbjsKLX0KLQotTGF5b3V0UmVjdCBSZW5kZXJSZWdpb246Om92ZXJmbG93UmVjdEZvckZs
b3dUaHJlYWRQb3J0aW9uKGNvbnN0IExheW91dFJlY3QmIGZsb3dUaHJlYWRQb3J0aW9uUmVjdCwg
Ym9vbCBpc0ZpcnN0UG9ydGlvbiwgYm9vbCBpc0xhc3RQb3J0aW9uLCBPdmVyZmxvd1R5cGUgb3Zl
cmZsb3dUeXBlKQotewotICAgIEFTU0VSVChpc1ZhbGlkKCkpOwotICAgIGlmIChzaG91bGRDbGlw
Rmxvd1RocmVhZENvbnRlbnQoKSkKLSAgICAgICAgcmV0dXJuIGZsb3dUaHJlYWRQb3J0aW9uUmVj
dDsKLQotICAgIExheW91dFJlY3QgZmxvd1RocmVhZE92ZXJmbG93ID0gb3ZlcmZsb3dUeXBlID09
IFZpc3VhbE92ZXJmbG93ID8gdmlzdWFsT3ZlcmZsb3dSZWN0Rm9yQm94KCptX2Zsb3dUaHJlYWQp
IDogbGF5b3V0T3ZlcmZsb3dSZWN0Rm9yQm94KG1fZmxvd1RocmVhZCk7Ci0gICAgTGF5b3V0UmVj
dCBjbGlwUmVjdDsKLSAgICBpZiAobV9mbG93VGhyZWFkLT5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKSB7Ci0gICAgICAgIExheW91dFVuaXQgbWluWSA9IGlzRmlyc3RQb3J0aW9uID8gZmxvd1Ro
cmVhZE92ZXJmbG93LnkoKSA6IGZsb3dUaHJlYWRQb3J0aW9uUmVjdC55KCk7Ci0gICAgICAgIExh
eW91dFVuaXQgbWF4WSA9IGlzTGFzdFBvcnRpb24gPyBzdGQ6Om1heChmbG93VGhyZWFkUG9ydGlv
blJlY3QubWF4WSgpLCBmbG93VGhyZWFkT3ZlcmZsb3cubWF4WSgpKSA6IGZsb3dUaHJlYWRQb3J0
aW9uUmVjdC5tYXhZKCk7Ci0gICAgICAgIGJvb2wgY2xpcFggPSBzdHlsZSgpLm92ZXJmbG93WCgp
ICE9IE9WSVNJQkxFOwotICAgICAgICBMYXlvdXRVbml0IG1pblggPSBjbGlwWCA/IGZsb3dUaHJl
YWRQb3J0aW9uUmVjdC54KCkgOiBzdGQ6Om1pbihmbG93VGhyZWFkUG9ydGlvblJlY3QueCgpLCBm
bG93VGhyZWFkT3ZlcmZsb3cueCgpKTsKLSAgICAgICAgTGF5b3V0VW5pdCBtYXhYID0gY2xpcFgg
PyBmbG93VGhyZWFkUG9ydGlvblJlY3QubWF4WCgpIDogc3RkOjptYXgoZmxvd1RocmVhZFBvcnRp
b25SZWN0Lm1heFgoKSwgZmxvd1RocmVhZE92ZXJmbG93Lm1heFgoKSk7Ci0gICAgICAgIGNsaXBS
ZWN0ID0gTGF5b3V0UmVjdChtaW5YLCBtaW5ZLCBtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIExheW91dFVuaXQgbWluWCA9IGlzRmlyc3RQb3J0aW9uID8g
Zmxvd1RocmVhZE92ZXJmbG93LngoKSA6IGZsb3dUaHJlYWRQb3J0aW9uUmVjdC54KCk7Ci0gICAg
ICAgIExheW91dFVuaXQgbWF4WCA9IGlzTGFzdFBvcnRpb24gPyBzdGQ6Om1heChmbG93VGhyZWFk
UG9ydGlvblJlY3QubWF4WCgpLCBmbG93VGhyZWFkT3ZlcmZsb3cubWF4WCgpKSA6IGZsb3dUaHJl
YWRQb3J0aW9uUmVjdC5tYXhYKCk7Ci0gICAgICAgIGJvb2wgY2xpcFkgPSBzdHlsZSgpLm92ZXJm
bG93WSgpICE9IE9WSVNJQkxFOwotICAgICAgICBMYXlvdXRVbml0IG1pblkgPSBjbGlwWSA/IGZs
b3dUaHJlYWRQb3J0aW9uUmVjdC55KCkgOiBzdGQ6Om1pbihmbG93VGhyZWFkUG9ydGlvblJlY3Qu
eSgpLCBmbG93VGhyZWFkT3ZlcmZsb3cueSgpKTsKLSAgICAgICAgTGF5b3V0VW5pdCBtYXhZID0g
Y2xpcFkgPyBmbG93VGhyZWFkUG9ydGlvblJlY3QubWF4WSgpIDogc3RkOjptYXgoZmxvd1RocmVh
ZFBvcnRpb25SZWN0LnkoKSwgZmxvd1RocmVhZE92ZXJmbG93Lm1heFkoKSk7Ci0gICAgICAgIGNs
aXBSZWN0ID0gTGF5b3V0UmVjdChtaW5YLCBtaW5ZLCBtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkp
OwotICAgIH0KLSAgICByZXR1cm4gY2xpcFJlY3Q7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyUmVn
aW9uOjpwYWdlTG9naWNhbFRvcEZvck9mZnNldChMYXlvdXRVbml0IC8qIG9mZnNldCAqLykgY29u
c3QKLXsKLSAgICByZXR1cm4gZmxvd1RocmVhZCgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
ID8gZmxvd1RocmVhZFBvcnRpb25SZWN0KCkueSgpIDogZmxvd1RocmVhZFBvcnRpb25SZWN0KCku
eCgpOwotfQotCi1ib29sIFJlbmRlclJlZ2lvbjo6aXNGaXJzdFJlZ2lvbigpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKGlzVmFsaWQoKSk7Ci0KLSAgICByZXR1cm4gbV9mbG93VGhyZWFkLT5maXJzdFJl
Z2lvbigpID09IHRoaXM7Ci19Ci0KLWJvb2wgUmVuZGVyUmVnaW9uOjppc0xhc3RSZWdpb24oKSBj
b25zdAotewotICAgIEFTU0VSVChpc1ZhbGlkKCkpOwotCi0gICAgcmV0dXJuIG1fZmxvd1RocmVh
ZC0+bGFzdFJlZ2lvbigpID09IHRoaXM7Ci19Ci0KLWJvb2wgUmVuZGVyUmVnaW9uOjpzaG91bGRD
bGlwRmxvd1RocmVhZENvbnRlbnQoKSBjb25zdAotewotICAgIHJldHVybiBoYXNPdmVyZmxvd0Ns
aXAoKTsKLX0KLQotdm9pZCBSZW5kZXJSZWdpb246OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVy
ZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCi17Ci0gICAgUmVuZGVyQmxv
Y2tGbG93OjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7Ci0KLSAgICBpZiAoIWlzVmFs
aWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG9sZFN0eWxlICYmIG9sZFN0eWxlLT53
cml0aW5nTW9kZSgpICE9IHN0eWxlKCkud3JpdGluZ01vZGUoKSkKLSAgICAgICAgbV9mbG93VGhy
ZWFkLT5yZWdpb25DaGFuZ2VkV3JpdGluZ01vZGUodGhpcyk7Ci19Ci0KLXZvaWQgUmVuZGVyUmVn
aW9uOjpjb21wdXRlT3ZlcmZsb3dGcm9tRmxvd1RocmVhZCgpCi17Ci0gICAgQVNTRVJUKGlzVmFs
aWQoKSk7Ci0KLSAgICBMYXlvdXRSZWN0IGxheW91dFJlY3QgPSBsYXlvdXRPdmVyZmxvd1JlY3RG
b3JCb3gobV9mbG93VGhyZWFkKTsKLSAgICBsYXlvdXRSZWN0LnNldExvY2F0aW9uKGNvbnRlbnRC
b3hSZWN0KCkubG9jYXRpb24oKSArIChsYXlvdXRSZWN0LmxvY2F0aW9uKCkgLSBtX2Zsb3dUaHJl
YWRQb3J0aW9uUmVjdC5sb2NhdGlvbigpKSk7Ci0KLSAgICAvLyBGSVhNRTogQ29ycmVjdGx5IGFk
anVzdCB0aGUgbGF5b3V0IG92ZXJmbG93IGZvciB3cml0aW5nIG1vZGVzLgotICAgIGFkZExheW91
dE92ZXJmbG93KGxheW91dFJlY3QpOwotICAgIFJlbmRlckZsb3dUaHJlYWQqIGVuY2xvc2luZ1Jl
bmRlckZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaWYgKGVu
Y2xvc2luZ1JlbmRlckZsb3dUaHJlYWQpCi0gICAgICAgIGVuY2xvc2luZ1JlbmRlckZsb3dUaHJl
YWQtPmFkZFJlZ2lvbnNMYXlvdXRPdmVyZmxvdyh0aGlzLCBsYXlvdXRSZWN0KTsKLQotICAgIHVw
ZGF0ZUxheWVyVHJhbnNmb3JtKCk7Ci0gICAgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7
Ci19Ci0KLXZvaWQgUmVuZGVyUmVnaW9uOjpyZXBhaW50Rmxvd1RocmVhZENvbnRlbnQoY29uc3Qg
TGF5b3V0UmVjdCYgcmVwYWludFJlY3QpCi17Ci0gICAgcmVwYWludEZsb3dUaHJlYWRDb250ZW50
UmVjdGFuZ2xlKHJlcGFpbnRSZWN0LCBmbG93VGhyZWFkUG9ydGlvblJlY3QoKSwgY29udGVudEJv
eFJlY3QoKS5sb2NhdGlvbigpKTsKLX0KLQotdm9pZCBSZW5kZXJSZWdpb246OnJlcGFpbnRGbG93
VGhyZWFkQ29udGVudFJlY3RhbmdsZShjb25zdCBMYXlvdXRSZWN0JiByZXBhaW50UmVjdCwgY29u
c3QgTGF5b3V0UmVjdCYgZmxvd1RocmVhZFBvcnRpb25SZWN0LCBjb25zdCBMYXlvdXRQb2ludCYg
cmVnaW9uTG9jYXRpb24sIGNvbnN0IExheW91dFJlY3QqIGZsb3dUaHJlYWRQb3J0aW9uQ2xpcFJl
Y3QpCi17Ci0gICAgQVNTRVJUKGlzVmFsaWQoKSk7Ci0KLSAgICAvLyBXZSBvbmx5IGhhdmUgdG8g
aXNzdWUgYSByZXBhaW50IGluIHRoaXMgcmVnaW9uIGlmIHRoZSByZWdpb24gcmVjdCBpbnRlcnNl
Y3RzIHRoZSByZXBhaW50IHJlY3QuCi0gICAgTGF5b3V0UmVjdCBjbGlwcGVkUmVjdChyZXBhaW50
UmVjdCk7Ci0KLSAgICBpZiAoZmxvd1RocmVhZFBvcnRpb25DbGlwUmVjdCkgewotICAgICAgICBM
YXlvdXRSZWN0IGZsaXBwZWRGbG93VGhyZWFkUG9ydGlvbkNsaXBSZWN0KCpmbG93VGhyZWFkUG9y
dGlvbkNsaXBSZWN0KTsKLSAgICAgICAgZmxvd1RocmVhZCgpLT5mbGlwRm9yV3JpdGluZ01vZGUo
ZmxpcHBlZEZsb3dUaHJlYWRQb3J0aW9uQ2xpcFJlY3QpOwotICAgICAgICBjbGlwcGVkUmVjdC5p
bnRlcnNlY3QoZmxpcHBlZEZsb3dUaHJlYWRQb3J0aW9uQ2xpcFJlY3QpOwotICAgIH0KLQotICAg
IGlmIChjbGlwcGVkUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIExheW91
dFJlY3QgZmxpcHBlZEZsb3dUaHJlYWRQb3J0aW9uUmVjdChmbG93VGhyZWFkUG9ydGlvblJlY3Qp
OwotICAgIGZsb3dUaHJlYWQoKS0+ZmxpcEZvcldyaXRpbmdNb2RlKGZsaXBwZWRGbG93VGhyZWFk
UG9ydGlvblJlY3QpOyAvLyBQdXQgdGhlIHJlZ2lvbiByZWN0cyBpbnRvIHBoeXNpY2FsIGNvb3Jk
aW5hdGVzLgotCi0gICAgLy8gUHV0IHRoZSByZWdpb24gcmVjdCBpbnRvIHRoZSByZWdpb24ncyBw
aHlzaWNhbCBjb29yZGluYXRlIHNwYWNlLgotICAgIGNsaXBwZWRSZWN0LnNldExvY2F0aW9uKHJl
Z2lvbkxvY2F0aW9uICsgKGNsaXBwZWRSZWN0LmxvY2F0aW9uKCkgLSBmbGlwcGVkRmxvd1RocmVh
ZFBvcnRpb25SZWN0LmxvY2F0aW9uKCkpKTsKLQotICAgIC8vIE5vdyBzd2l0Y2ggdG8gdGhlIHJl
Z2lvbidzIHdyaXRpbmcgbW9kZSBjb29yZGluYXRlIHNwYWNlIGFuZCBsZXQgaXQgcmVwYWludCBp
dHNlbGYuCi0gICAgZmxpcEZvcldyaXRpbmdNb2RlKGNsaXBwZWRSZWN0KTsKLSAgICAKLSAgICAv
LyBJc3N1ZSB0aGUgcmVwYWludC4KLSAgICByZXBhaW50UmVjdGFuZ2xlKGNsaXBwZWRSZWN0KTsK
LX0KLQotdm9pZCBSZW5kZXJSZWdpb246Omluc3RhbGxGbG93VGhyZWFkKCkKLXsKLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBSZW5kZXJSZWdpb246OmF0dGFjaFJlZ2lvbigp
Ci17Ci0gICAgaWYgKHJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgLy8gQSByZWdpb24gc3RhcnRzIG9mZiBpbnZhbGlkLgotICAgIHNldElzVmFs
aWQoZmFsc2UpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZmxvdyB0aHJlYWQgcmVmZXJlbmNl
IGFuZCBjcmVhdGUgdGhlIGZsb3cgdGhyZWFkIG9iamVjdCBpZiBuZWVkZWQuCi0gICAgLy8gVGhl
IGZsb3cgdGhyZWFkIGxpZmV0aW1lIGlzIGluZmx1ZW5jZWQgYnkgdGhlIG51bWJlciBvZiByZWdp
b25zIGF0dGFjaGVkIHRvIGl0LAotICAgIC8vIGFuZCB3ZSBhcmUgYXR0YWNoaW5nIHRoZSByZWdp
b24gdG8gdGhlIGZsb3cgdGhyZWFkLgotICAgIGluc3RhbGxGbG93VGhyZWFkKCk7Ci0gICAgCi0g
ICAgaWYgKCFtX2Zsb3dUaHJlYWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE9ubHkgYWZ0
ZXIgYWRkaW5nIHRoZSByZWdpb24gdG8gdGhlIHRocmVhZCwgdGhlIHJlZ2lvbiBpcyBtYXJrZWQg
dG8gYmUgdmFsaWQuCi0gICAgbV9mbG93VGhyZWFkLT5hZGRSZWdpb25Ub1RocmVhZCh0aGlzKTsK
LX0KLQotdm9pZCBSZW5kZXJSZWdpb246OmRldGFjaFJlZ2lvbigpCi17Ci0gICAgaWYgKG1fZmxv
d1RocmVhZCkKLSAgICAgICAgbV9mbG93VGhyZWFkLT5yZW1vdmVSZWdpb25Gcm9tVGhyZWFkKHRo
aXMpOwotICAgIG1fZmxvd1RocmVhZCA9IG51bGxwdHI7Ci19Ci0KLVJlbmRlckJveFJlZ2lvbklu
Zm8qIFJlbmRlclJlZ2lvbjo6cmVuZGVyQm94UmVnaW9uSW5mbyhjb25zdCBSZW5kZXJCb3gqIGJv
eCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaXNWYWxpZCgpKTsKLSAgICByZXR1cm4gbV9yZW5kZXJC
b3hSZWdpb25JbmZvLmdldChib3gpOwotfQotCi1SZW5kZXJCb3hSZWdpb25JbmZvKiBSZW5kZXJS
ZWdpb246OnNldFJlbmRlckJveFJlZ2lvbkluZm8oY29uc3QgUmVuZGVyQm94KiBib3gsIExheW91
dFVuaXQgbG9naWNhbExlZnRJbnNldCwgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRJbnNldCwKLSAg
ICBib29sIGNvbnRhaW5pbmdCbG9ja0NoYWluSXNJbnNldCkKLXsKLSAgICBBU1NFUlQoaXNWYWxp
ZCgpKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCb3hSZWdpb25JbmZvPiYgYm94SW5m
byA9IG1fcmVuZGVyQm94UmVnaW9uSW5mby5hZGQoYm94LCBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRl
ckJveFJlZ2lvbkluZm8+KGxvZ2ljYWxMZWZ0SW5zZXQsIGxvZ2ljYWxSaWdodEluc2V0LCBjb250
YWluaW5nQmxvY2tDaGFpbklzSW5zZXQpKS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgcmV0dXJuIGJv
eEluZm8uZ2V0KCk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCb3hSZWdpb25JbmZvPiBS
ZW5kZXJSZWdpb246OnRha2VSZW5kZXJCb3hSZWdpb25JbmZvKGNvbnN0IFJlbmRlckJveCogYm94
KQotewotICAgIHJldHVybiBtX3JlbmRlckJveFJlZ2lvbkluZm8udGFrZShib3gpOwotfQotCi12
b2lkIFJlbmRlclJlZ2lvbjo6cmVtb3ZlUmVuZGVyQm94UmVnaW9uSW5mbyhjb25zdCBSZW5kZXJC
b3gmIGJveCkKLXsKLSAgICBtX3JlbmRlckJveFJlZ2lvbkluZm8ucmVtb3ZlKCZib3gpOwotfQot
Ci12b2lkIFJlbmRlclJlZ2lvbjo6ZGVsZXRlQWxsUmVuZGVyQm94UmVnaW9uSW5mbygpCi17Ci0g
ICAgbV9yZW5kZXJCb3hSZWdpb25JbmZvLmNsZWFyKCk7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVy
UmVnaW9uOjpsb2dpY2FsVG9wT2ZGbG93VGhyZWFkQ29udGVudFJlY3QoY29uc3QgTGF5b3V0UmVj
dCYgcmVjdCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaXNWYWxpZCgpKTsKLSAgICByZXR1cm4gZmxv
d1RocmVhZCgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gcmVjdC55KCkgOiByZWN0Lngo
KTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJSZWdpb246OmxvZ2ljYWxCb3R0b21PZkZsb3dUaHJl
YWRDb250ZW50UmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0KSBjb25zdAotewotICAgIEFTU0VS
VChpc1ZhbGlkKCkpOwotICAgIHJldHVybiBmbG93VGhyZWFkKCktPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyByZWN0Lm1heFkoKSA6IHJlY3QubWF4WCgpOwotfQotCi12b2lkIFJlbmRlclJl
Z2lvbjo6aW5zZXJ0ZWRJbnRvVHJlZSgpCi17Ci0gICAgYXR0YWNoUmVnaW9uKCk7Ci0gICAgaWYg
KGlzVmFsaWQoKSkKLSAgICAgICAgUmVuZGVyQmxvY2tGbG93OjppbnNlcnRlZEludG9UcmVlKCk7
Ci19Ci0KLXZvaWQgUmVuZGVyUmVnaW9uOjp3aWxsQmVSZW1vdmVkRnJvbVRyZWUoKQotewotICAg
IFJlbmRlckJsb2NrRmxvdzo6d2lsbEJlUmVtb3ZlZEZyb21UcmVlKCk7Ci0KLSAgICBkZXRhY2hS
ZWdpb24oKTsKLX0KLQotdm9pZCBSZW5kZXJSZWdpb246OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2Fs
V2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCYgbWF4TG9naWNh
bFdpZHRoKSBjb25zdAotewotICAgIGlmICghaXNWYWxpZCgpKSB7Ci0gICAgICAgIFJlbmRlckJs
b2NrRmxvdzo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMobWluTG9naWNhbFdpZHRoLCBt
YXhMb2dpY2FsV2lkdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbWluTG9naWNh
bFdpZHRoID0gbV9mbG93VGhyZWFkLT5taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKTsKLSAgICBt
YXhMb2dpY2FsV2lkdGggPSBtX2Zsb3dUaHJlYWQtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgp
OwotfQotCi12b2lkIFJlbmRlclJlZ2lvbjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMo
KQotewotICAgIEFTU0VSVChwcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSk7Ci0KLSAgICBp
ZiAoIWlzVmFsaWQoKSkgewotICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVQcmVmZXJy
ZWRMb2dpY2FsV2lkdGhzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGSVhN
RTogQ3VycmVudGx5LCB0aGUgY29kZSBoYW5kbGVzIG9ubHkgdGhlIDxsZW5ndGg+IGNhc2UgZm9y
IG1pbi13aWR0aC9tYXgtd2lkdGguCi0gICAgLy8gSXQgc2hvdWxkIGFsc28gc3VwcG9ydCBvdGhl
ciB2YWx1ZXMsIGxpa2UgcGVyY2VudGFnZSwgY2FsYyBvciB2aWV3cG9ydCByZWxhdGl2ZS4KLSAg
ICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRo
ID0gMDsKLQotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKLSAg
ICBpZiAoc3R5bGVUb1VzZS5sb2dpY2FsV2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGVUb1VzZS5s
b2dpY2FsV2lkdGgoKS52YWx1ZSgpID4gMCkKLSAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2Fs
V2lkdGggPSBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IGFkanVzdENvbnRlbnRCb3hMb2dp
Y2FsV2lkdGhGb3JCb3hTaXppbmcoc3R5bGVUb1VzZS5sb2dpY2FsV2lkdGgoKS52YWx1ZSgpKTsK
LSAgICBlbHNlCi0gICAgICAgIGNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKG1fbWluUHJl
ZmVycmVkTG9naWNhbFdpZHRoLCBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCk7Ci0KLSAgICBp
ZiAoc3R5bGVUb1VzZS5sb2dpY2FsTWluV2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGVUb1VzZS5s
b2dpY2FsTWluV2lkdGgoKS52YWx1ZSgpID4gMCkgewotICAgICAgICBtX21heFByZWZlcnJlZExv
Z2ljYWxXaWR0aCA9IHN0ZDo6bWF4KG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBhZGp1c3RD
b250ZW50Qm94TG9naWNhbFdpZHRoRm9yQm94U2l6aW5nKHN0eWxlVG9Vc2UubG9naWNhbE1pbldp
ZHRoKCkudmFsdWUoKSkpOwotICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IHN0
ZDo6bWF4KG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoLCBhZGp1c3RDb250ZW50Qm94TG9naWNh
bFdpZHRoRm9yQm94U2l6aW5nKHN0eWxlVG9Vc2UubG9naWNhbE1pbldpZHRoKCkudmFsdWUoKSkp
OwotICAgIH0KLQotICAgIGlmIChzdHlsZVRvVXNlLmxvZ2ljYWxNYXhXaWR0aCgpLmlzRml4ZWQo
KSkgewotICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IHN0ZDo6bWluKG1fbWF4
UHJlZmVycmVkTG9naWNhbFdpZHRoLCBhZGp1c3RDb250ZW50Qm94TG9naWNhbFdpZHRoRm9yQm94
U2l6aW5nKHN0eWxlVG9Vc2UubG9naWNhbE1heFdpZHRoKCkudmFsdWUoKSkpOwotICAgICAgICBt
X21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IHN0ZDo6bWluKG1fbWluUHJlZmVycmVkTG9naWNh
bFdpZHRoLCBhZGp1c3RDb250ZW50Qm94TG9naWNhbFdpZHRoRm9yQm94U2l6aW5nKHN0eWxlVG9V
c2UubG9naWNhbE1heFdpZHRoKCkudmFsdWUoKSkpOwotICAgIH0KLQotICAgIExheW91dFVuaXQg
Ym9yZGVyQW5kUGFkZGluZyA9IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKTsKLSAgICBt
X21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSBib3JkZXJBbmRQYWRkaW5nOwotICAgIG1fbWF4
UHJlZmVycmVkTG9naWNhbFdpZHRoICs9IGJvcmRlckFuZFBhZGRpbmc7Ci0gICAgc2V0UHJlZmVy
cmVkTG9naWNhbFdpZHRoc0RpcnR5KGZhbHNlKTsKLX0KLQotdm9pZCBSZW5kZXJSZWdpb246OmFk
anVzdFJlZ2lvbkJvdW5kc0Zyb21GbG93VGhyZWFkUG9ydGlvblJlY3QoTGF5b3V0UmVjdCYgcmVn
aW9uQm91bmRzKSBjb25zdAotewotICAgIExheW91dFJlY3QgZmxpcHBlZEZsb3dUaHJlYWRQb3J0
aW9uUmVjdCA9IGZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpOwotICAgIGZsb3dUaHJlYWQoKS0+Zmxp
cEZvcldyaXRpbmdNb2RlKGZsaXBwZWRGbG93VGhyZWFkUG9ydGlvblJlY3QpOwotICAgIHJlZ2lv
bkJvdW5kcy5tb3ZlQnkoZmxpcHBlZEZsb3dUaHJlYWRQb3J0aW9uUmVjdC5sb2NhdGlvbigpKTsK
LX0KLQotdm9pZCBSZW5kZXJSZWdpb246OmVuc3VyZU92ZXJmbG93Rm9yQm94KGNvbnN0IFJlbmRl
ckJveCogYm94LCBSZWZQdHI8UmVuZGVyT3ZlcmZsb3c+JiBvdmVyZmxvdywgYm9vbCBmb3JjZUNy
ZWF0aW9uKQotewotICAgIEFTU0VSVChtX2Zsb3dUaHJlYWQtPnJlbmRlclJlZ2lvbkxpc3QoKS5j
b250YWlucyh0aGlzKSk7Ci0gICAgQVNTRVJUKGlzVmFsaWQoKSk7Ci0KLSAgICBSZW5kZXJCb3hS
ZWdpb25JbmZvKiBib3hJbmZvID0gcmVuZGVyQm94UmVnaW9uSW5mbyhib3gpOwotICAgIGlmICgh
Ym94SW5mbyAmJiAhZm9yY2VDcmVhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGJv
eEluZm8gJiYgYm94SW5mby0+b3ZlcmZsb3coKSkgewotICAgICAgICBvdmVyZmxvdyA9IGJveElu
Zm8tPm92ZXJmbG93KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgTGF5b3V0
UmVjdCBib3JkZXJCb3ggPSBib3gtPmJvcmRlckJveFJlY3RJblJlZ2lvbih0aGlzKTsKLSAgICBM
YXlvdXRSZWN0IGNsaWVudEJveDsKLSAgICBBU1NFUlQobV9mbG93VGhyZWFkLT5vYmplY3RTaG91
bGRGcmFnbWVudEluRmxvd1JlZ2lvbihib3gsIHRoaXMpKTsKLQotICAgIGlmICghYm9yZGVyQm94
LmlzRW1wdHkoKSkgewotICAgICAgICBib3JkZXJCb3ggPSByZWN0Rmxvd1BvcnRpb25Gb3JCb3go
Ym94LCBib3JkZXJCb3gpOwotICAgICAgICAKLSAgICAgICAgY2xpZW50Qm94ID0gYm94LT5jbGll
bnRCb3hSZWN0SW5SZWdpb24odGhpcyk7Ci0gICAgICAgIGNsaWVudEJveCA9IHJlY3RGbG93UG9y
dGlvbkZvckJveChib3gsIGNsaWVudEJveCk7Ci0gICAgICAgIAotICAgICAgICBtX2Zsb3dUaHJl
YWQtPmZsaXBGb3JXcml0aW5nTW9kZUxvY2FsQ29vcmRpbmF0ZXMoYm9yZGVyQm94KTsKLSAgICAg
ICAgbV9mbG93VGhyZWFkLT5mbGlwRm9yV3JpdGluZ01vZGVMb2NhbENvb3JkaW5hdGVzKGNsaWVu
dEJveCk7Ci0gICAgfQotCi0gICAgaWYgKGJveEluZm8pIHsKLSAgICAgICAgYm94SW5mby0+Y3Jl
YXRlT3ZlcmZsb3coY2xpZW50Qm94LCBib3JkZXJCb3gpOwotICAgICAgICBvdmVyZmxvdyA9IGJv
eEluZm8tPm92ZXJmbG93KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG92ZXJmbG93ID0gYWRvcHRS
ZWYobmV3IFJlbmRlck92ZXJmbG93KGNsaWVudEJveCwgYm9yZGVyQm94KSk7Ci19Ci0KLUxheW91
dFJlY3QgUmVuZGVyUmVnaW9uOjpyZWN0Rmxvd1BvcnRpb25Gb3JCb3goY29uc3QgUmVuZGVyQm94
KiBib3gsIGNvbnN0IExheW91dFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgTGF5b3V0UmVjdCBt
YXBwZWRSZWN0ID0gbV9mbG93VGhyZWFkLT5tYXBGcm9tTG9jYWxUb0Zsb3dUaHJlYWQoYm94LCBy
ZWN0KTsKLQotICAgIFJlbmRlclJlZ2lvbiogc3RhcnRSZWdpb24gPSBudWxscHRyOwotICAgIFJl
bmRlclJlZ2lvbiogZW5kUmVnaW9uID0gbnVsbHB0cjsKLSAgICBpZiAobV9mbG93VGhyZWFkLT5n
ZXRSZWdpb25SYW5nZUZvckJveChib3gsIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pKSB7Ci0gICAg
ICAgIGlmIChmbG93VGhyZWFkKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKLSAgICAg
ICAgICAgIGlmICh0aGlzICE9IHN0YXJ0UmVnaW9uKQotICAgICAgICAgICAgICAgIG1hcHBlZFJl
Y3Quc2hpZnRZRWRnZVRvKHN0ZDo6bWF4PExheW91dFVuaXQ+KGxvZ2ljYWxUb3BGb3JGbG93VGhy
ZWFkQ29udGVudCgpLCBtYXBwZWRSZWN0LnkoKSkpOwotICAgICAgICAgICAgaWYgKHRoaXMgIT0g
ZW5kUmVnaW9uKQotICAgICAgICAgICAgICAgIG1hcHBlZFJlY3Quc2V0SGVpZ2h0KHN0ZDo6bWF4
PExheW91dFVuaXQ+KDAsIHN0ZDo6bWluPExheW91dFVuaXQ+KGxvZ2ljYWxCb3R0b21Gb3JGbG93
VGhyZWFkQ29udGVudCgpIC0gbWFwcGVkUmVjdC55KCksIG1hcHBlZFJlY3QuaGVpZ2h0KCkpKSk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodGhpcyAhPSBzdGFydFJlZ2lvbikK
LSAgICAgICAgICAgICAgICBtYXBwZWRSZWN0LnNoaWZ0WEVkZ2VUbyhzdGQ6Om1heDxMYXlvdXRV
bml0Pihsb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRlbnQoKSwgbWFwcGVkUmVjdC54KCkpKTsK
LSAgICAgICAgICAgIGlmICh0aGlzICE9IGVuZFJlZ2lvbikKLSAgICAgICAgICAgICAgICBtYXBw
ZWRSZWN0LnNldFdpZHRoKHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIHN0ZDo6bWluPExheW91dFVu
aXQ+KGxvZ2ljYWxCb3R0b21Gb3JGbG93VGhyZWFkQ29udGVudCgpIC0gbWFwcGVkUmVjdC54KCks
IG1hcHBlZFJlY3Qud2lkdGgoKSkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBt
X2Zsb3dUaHJlYWQtPm1hcEZyb21GbG93VGhyZWFkVG9Mb2NhbChib3gsIG1hcHBlZFJlY3QpOwot
fQotCi12b2lkIFJlbmRlclJlZ2lvbjo6YWRkTGF5b3V0T3ZlcmZsb3dGb3JCb3goY29uc3QgUmVu
ZGVyQm94KiBib3gsIGNvbnN0IExheW91dFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHJlY3QuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8UmVuZGVyT3ZlcmZsb3c+IHJl
Z2lvbk92ZXJmbG93OwotICAgIGVuc3VyZU92ZXJmbG93Rm9yQm94KGJveCwgcmVnaW9uT3ZlcmZs
b3csIGZhbHNlKTsKLQotICAgIGlmICghcmVnaW9uT3ZlcmZsb3cpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHJlZ2lvbk92ZXJmbG93LT5hZGRMYXlvdXRPdmVyZmxvdyhyZWN0KTsKLX0KLQotdm9p
ZCBSZW5kZXJSZWdpb246OmFkZFZpc3VhbE92ZXJmbG93Rm9yQm94KGNvbnN0IFJlbmRlckJveCog
Ym94LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0KQotewotICAgIGlmIChyZWN0LmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPFJlbmRlck92ZXJmbG93PiByZWdpb25PdmVy
ZmxvdzsKLSAgICBlbnN1cmVPdmVyZmxvd0ZvckJveChib3gsIHJlZ2lvbk92ZXJmbG93LCBmYWxz
ZSk7Ci0KLSAgICBpZiAoIXJlZ2lvbk92ZXJmbG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBM
YXlvdXRSZWN0IGZsaXBwZWRSZWN0ID0gcmVjdDsKLSAgICBmbG93VGhyZWFkKCktPmZsaXBGb3JX
cml0aW5nTW9kZUxvY2FsQ29vcmRpbmF0ZXMoZmxpcHBlZFJlY3QpOwotICAgIHJlZ2lvbk92ZXJm
bG93LT5hZGRWaXN1YWxPdmVyZmxvdyhmbGlwcGVkUmVjdCk7Ci19Ci0KLUxheW91dFJlY3QgUmVu
ZGVyUmVnaW9uOjpsYXlvdXRPdmVyZmxvd1JlY3RGb3JCb3goY29uc3QgUmVuZGVyQm94KiBib3gp
Ci17Ci0gICAgUmVmUHRyPFJlbmRlck92ZXJmbG93PiBvdmVyZmxvdzsKLSAgICBlbnN1cmVPdmVy
Zmxvd0ZvckJveChib3gsIG92ZXJmbG93LCB0cnVlKTsKLSAgICAKLSAgICBBU1NFUlQob3ZlcmZs
b3cpOwotICAgIHJldHVybiBvdmVyZmxvdy0+bGF5b3V0T3ZlcmZsb3dSZWN0KCk7Ci19Ci0KLUxh
eW91dFJlY3QgUmVuZGVyUmVnaW9uOjp2aXN1YWxPdmVyZmxvd1JlY3RGb3JCb3goY29uc3QgUmVu
ZGVyQm94TW9kZWxPYmplY3QmIGJveCkKLXsKLSAgICBpZiAoaXM8UmVuZGVySW5saW5lPihib3gp
KSB7Ci0gICAgICAgIGNvbnN0IFJlbmRlcklubGluZSYgaW5saW5lQm94ID0gZG93bmNhc3Q8UmVu
ZGVySW5saW5lPihib3gpOwotICAgICAgICByZXR1cm4gaW5saW5lQm94LmxpbmVzVmlzdWFsT3Zl
cmZsb3dCb3VuZGluZ0JveEluUmVnaW9uKHRoaXMpOwotICAgIH0KLQotICAgIGlmIChpczxSZW5k
ZXJCb3g+KGJveCkpIHsKLSAgICAgICAgUmVmUHRyPFJlbmRlck92ZXJmbG93PiBvdmVyZmxvdzsK
LSAgICAgICAgZW5zdXJlT3ZlcmZsb3dGb3JCb3goJmRvd25jYXN0PFJlbmRlckJveD4oYm94KSwg
b3ZlcmZsb3csIHRydWUpOwotCi0gICAgICAgIEFTU0VSVChvdmVyZmxvdyk7Ci0gICAgICAgIHJl
dHVybiBvdmVyZmxvdy0+dmlzdWFsT3ZlcmZsb3dSZWN0KCk7Ci0gICAgfQotCi0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIExheW91dFJlY3QoKTsKLX0KLQotLy8gRklYTUU6
IFRoaXMgZG9lc24ndCB3b3JrIGZvciB3cml0aW5nIG1vZGVzLgotTGF5b3V0UmVjdCBSZW5kZXJS
ZWdpb246OmxheW91dE92ZXJmbG93UmVjdEZvckJveEZvclByb3BhZ2F0aW9uKGNvbnN0IFJlbmRl
ckJveCogYm94KQotewotICAgIC8vIE9ubHkgcHJvcGFnYXRlIGludGVyaW9yIGxheW91dCBvdmVy
ZmxvdyBpZiB3ZSBkb24ndCBjbGlwIGl0LgotICAgIExheW91dFJlY3QgcmVjdCA9IGJveC0+Ym9y
ZGVyQm94UmVjdEluUmVnaW9uKHRoaXMpOwotICAgIHJlY3QgPSByZWN0Rmxvd1BvcnRpb25Gb3JC
b3goYm94LCByZWN0KTsKLSAgICBpZiAoIWJveC0+aGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAg
IHJlY3QudW5pdGUobGF5b3V0T3ZlcmZsb3dSZWN0Rm9yQm94KGJveCkpOwotCi0gICAgYm9vbCBo
YXNUcmFuc2Zvcm0gPSBib3gtPmhhc1RyYW5zZm9ybSgpOwotICAgIGlmIChib3gtPmlzSW5GbG93
UG9zaXRpb25lZCgpIHx8IGhhc1RyYW5zZm9ybSkgewotICAgICAgICBpZiAoaGFzVHJhbnNmb3Jt
KQotICAgICAgICAgICAgcmVjdCA9IGJveC0+bGF5ZXIoKS0+Y3VycmVudFRyYW5zZm9ybSgpLm1h
cFJlY3QocmVjdCk7Ci0KLSAgICAgICAgaWYgKGJveC0+aXNJbkZsb3dQb3NpdGlvbmVkKCkpCi0g
ICAgICAgICAgICByZWN0Lm1vdmUoYm94LT5vZmZzZXRGb3JJbkZsb3dQb3NpdGlvbigpKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gcmVjdDsKLX0KLQotTGF5b3V0UmVjdCBSZW5kZXJSZWdpb246OnZp
c3VhbE92ZXJmbG93UmVjdEZvckJveEZvclByb3BhZ2F0aW9uKGNvbnN0IFJlbmRlckJveE1vZGVs
T2JqZWN0JiBib3gpCi17Ci0gICAgTGF5b3V0UmVjdCByZWN0ID0gdmlzdWFsT3ZlcmZsb3dSZWN0
Rm9yQm94KGJveCk7Ci0gICAgZmxvd1RocmVhZCgpLT5mbGlwRm9yV3JpdGluZ01vZGVMb2NhbENv
b3JkaW5hdGVzKHJlY3QpOwotCi0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLUN1cnJlbnRSZW5kZXJS
ZWdpb25NYWludGFpbmVyOjpDdXJyZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lcihSZW5kZXJSZWdp
b24mIHJlZ2lvbikKLSAgICA6IG1fcmVnaW9uKHJlZ2lvbikKLXsKLSAgICBSZW5kZXJGbG93VGhy
ZWFkKiBmbG93VGhyZWFkID0gcmVnaW9uLmZsb3dUaHJlYWQoKTsKLSAgICAvLyBBIGZsb3cgdGhy
ZWFkIGNhbiBoYXZlIG9ubHkgb25lIGN1cnJlbnQgcmVnaW9uLgotICAgIEFTU0VSVCghZmxvd1Ro
cmVhZC0+Y3VycmVudFJlZ2lvbigpKTsKLSAgICBmbG93VGhyZWFkLT5zZXRDdXJyZW50UmVnaW9u
TWFpbnRhaW5lcih0aGlzKTsKLX0KLQotQ3VycmVudFJlbmRlclJlZ2lvbk1haW50YWluZXI6On5D
dXJyZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lcigpCi17Ci0gICAgUmVuZGVyRmxvd1RocmVhZCog
Zmxvd1RocmVhZCA9IG1fcmVnaW9uLmZsb3dUaHJlYWQoKTsKLSAgICBmbG93VGhyZWFkLT5zZXRD
dXJyZW50UmVnaW9uTWFpbnRhaW5lcihudWxscHRyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJlZ2lvbi5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAg
IyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oCShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwx
ODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBZG9iZSBTeXN0ZW1zIEluY29y
cG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
IOKAnEFTIElT4oCdIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVS
IEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksCi0gKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YKLSAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJMYXllckZyYWdtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93
LmgiCi0jaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCi0jaW5jbHVkZSA8bWVtb3J5PgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBSZW5kZXJCb3g7Ci1j
bGFzcyBSZW5kZXJCb3hSZWdpb25JbmZvOwotY2xhc3MgUmVuZGVyRmxvd1RocmVhZDsKLQotY2xh
c3MgUmVuZGVyUmVnaW9uIDogcHVibGljIFJlbmRlckJsb2NrRmxvdyB7Ci1wdWJsaWM6Ci0gICAg
dm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBv
bGRTdHlsZSkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldEZsb3dUaHJlYWRQb3J0aW9uUmVjdChj
b25zdCBMYXlvdXRSZWN0JiByZWN0KSB7IG1fZmxvd1RocmVhZFBvcnRpb25SZWN0ID0gcmVjdDsg
fQotICAgIExheW91dFJlY3QgZmxvd1RocmVhZFBvcnRpb25SZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9mbG93VGhyZWFkUG9ydGlvblJlY3Q7IH0KLSAgICBMYXlvdXRSZWN0IGZsb3dUaHJlYWRQb3J0
aW9uT3ZlcmZsb3dSZWN0KCk7Ci0KLSAgICBMYXlvdXRQb2ludCBmbG93VGhyZWFkUG9ydGlvbkxv
Y2F0aW9uKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUmVnaW9uKCk7Ci0gICAg
dmlydHVhbCB2b2lkIGRldGFjaFJlZ2lvbigpOwotCi0gICAgUmVuZGVyRmxvd1RocmVhZCogZmxv
d1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmxvd1RocmVhZDsgfQotCi0gICAgLy8gVmFsaWQg
cmVnaW9ucyBkbyBub3QgY3JlYXRlIGNpcmN1bGFyIGRlcGVuZGVuY2llcyB3aXRoIG90aGVyIGZs
b3dzLgotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZDsgfQotICAg
IHZvaWQgc2V0SXNWYWxpZChib29sIHZhbGlkKSB7IG1faXNWYWxpZCA9IHZhbGlkOyB9Ci0KLSAg
ICBSZW5kZXJCb3hSZWdpb25JbmZvKiByZW5kZXJCb3hSZWdpb25JbmZvKGNvbnN0IFJlbmRlckJv
eCopIGNvbnN0OwotICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIHNldFJlbmRlckJveFJlZ2lvbklu
Zm8oY29uc3QgUmVuZGVyQm94KiwgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdEluc2V0LCBMYXlvdXRV
bml0IGxvZ2ljYWxSaWdodEluc2V0LAotICAgICAgICBib29sIGNvbnRhaW5pbmdCbG9ja0NoYWlu
SXNJbnNldCk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJveFJlZ2lvbkluZm8+IHRha2VS
ZW5kZXJCb3hSZWdpb25JbmZvKGNvbnN0IFJlbmRlckJveCopOwotICAgIHZvaWQgcmVtb3ZlUmVu
ZGVyQm94UmVnaW9uSW5mbyhjb25zdCBSZW5kZXJCb3gmKTsKLQotICAgIHZvaWQgZGVsZXRlQWxs
UmVuZGVyQm94UmVnaW9uSW5mbygpOwotCi0gICAgYm9vbCBpc0ZpcnN0UmVnaW9uKCkgY29uc3Q7
Ci0gICAgYm9vbCBpc0xhc3RSZWdpb24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
Q2xpcEZsb3dUaHJlYWRDb250ZW50KCkgY29uc3Q7Ci0KLSAgICAvLyBUaGVzZSBtZXRob2RzIHJl
cHJlc2VudCB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiBhICJwYWdlIiBhbmQgZm9yIGEgUmVuZGVy
UmVnaW9uIHRoZXkgYXJlIGp1c3QgdGhlCi0gICAgLy8gY29udGVudCB3aWR0aCBhbmQgY29udGVu
dCBoZWlnaHQgb2YgYSByZWdpb24uIEZvciBSZW5kZXJSZWdpb25TZXRzLCBob3dldmVyLCB0aGV5
IHdpbGwgYmUgdGhlIHdpZHRoIGFuZAotICAgIC8vIGhlaWdodCBvZiBhIHNpbmdsZSBjb2x1bW4g
b3IgcGFnZSBpbiB0aGUgc2V0LgotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbFdp
ZHRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0KCkg
Y29uc3Q7Ci0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3BPZkZsb3dUaHJlYWRDb250ZW50UmVj
dChjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9t
T2ZGbG93VGhyZWFkQ29udGVudFJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwotICAgIExh
eW91dFVuaXQgbG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkgY29uc3QgeyByZXR1cm4g
bG9naWNhbFRvcE9mRmxvd1RocmVhZENvbnRlbnRSZWN0KGZsb3dUaHJlYWRQb3J0aW9uUmVjdCgp
KTsgfTsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b21Gb3JGbG93VGhyZWFkQ29udGVudCgp
IGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxCb3R0b21PZkZsb3dUaHJlYWRDb250ZW50UmVjdChmbG93
VGhyZWFkUG9ydGlvblJlY3QoKSk7IH07Ci0KLSAgICAvLyBUaGlzIG1ldGhvZCByZXByZXNlbnRz
IHRoZSBsb2dpY2FsIGhlaWdodCBvZiB0aGUgZW50aXJlIGZsb3cgdGhyZWFkIHBvcnRpb24gdXNl
ZCBieSB0aGUgcmVnaW9uIG9yIHNldC4KLSAgICAvLyBGb3IgUmVuZGVyUmVnaW9ucyBpdCBtYXRj
aGVzIGxvZ2ljYWxQYWdpbmF0aW9uSGVpZ2h0KCksIGJ1dCBmb3Igc2V0cyBpdCBpcyB0aGUgaGVp
Z2h0IG9mIGFsbCB0aGUgcGFnZXMKLSAgICAvLyBvciBjb2x1bW5zIGFkZGVkIHRvZ2V0aGVyLgot
ICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0T2ZBbGxGbG93VGhyZWFkQ29udGVu
dCgpIGNvbnN0OwotCi0gICAgLy8gVGhlIHRvcCBvZiB0aGUgbmVhcmVzdCBwYWdlIGluc2lkZSB0
aGUgcmVnaW9uLiBGb3IgUmVuZGVyUmVnaW9ucywgdGhpcyBpcyBqdXN0IHRoZSBsb2dpY2FsIHRv
cCBvZiB0aGUKLSAgICAvLyBmbG93IHRocmVhZCBwb3J0aW9uIHdlIGNvbnRhaW4uIEZvciBzZXRz
LCB3ZSBoYXZlIHRvIGZpZ3VyZSBvdXQgdGhlIHRvcCBvZiB0aGUgbmVhcmVzdCBjb2x1bW4gb3IK
LSAgICAvLyBwYWdlLgotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbFRvcEZvck9m
ZnNldChMYXlvdXRVbml0IG9mZnNldCkgY29uc3Q7Ci0KLSAgICAvLyBXaGV0aGVyIG9yIG5vdCB0
aGlzIHJlZ2lvbiBpcyBhIHNldC4KLSAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJSZWdpb25TZXQo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCByZXBhaW50
Rmxvd1RocmVhZENvbnRlbnQoY29uc3QgTGF5b3V0UmVjdCYgcmVwYWludFJlY3QpOwotCi0gICAg
dmlydHVhbCB2b2lkIGNvbGxlY3RMYXllckZyYWdtZW50cyhMYXllckZyYWdtZW50cyYsIGNvbnN0
IExheW91dFJlY3QmLCBjb25zdCBMYXlvdXRSZWN0JikgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0UmVnaW9uQm91bmRzRnJvbUZsb3dUaHJlYWRQb3J0aW9uUmVjdChMYXlvdXRSZWN0JiBy
ZWdpb25Cb3VuZHMpIGNvbnN0OwotCi0gICAgdm9pZCBhZGRMYXlvdXRPdmVyZmxvd0ZvckJveChj
b25zdCBSZW5kZXJCb3gqLCBjb25zdCBMYXlvdXRSZWN0Jik7Ci0gICAgdm9pZCBhZGRWaXN1YWxP
dmVyZmxvd0ZvckJveChjb25zdCBSZW5kZXJCb3gqLCBjb25zdCBMYXlvdXRSZWN0Jik7Ci0gICAg
TGF5b3V0UmVjdCBsYXlvdXRPdmVyZmxvd1JlY3RGb3JCb3goY29uc3QgUmVuZGVyQm94Kik7Ci0g
ICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RGb3JCb3goY29uc3QgUmVuZGVyQm94TW9k
ZWxPYmplY3QmKTsKLSAgICBMYXlvdXRSZWN0IGxheW91dE92ZXJmbG93UmVjdEZvckJveEZvclBy
b3BhZ2F0aW9uKGNvbnN0IFJlbmRlckJveCopOwotICAgIExheW91dFJlY3QgdmlzdWFsT3ZlcmZs
b3dSZWN0Rm9yQm94Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QmKTsK
LQotICAgIExheW91dFJlY3QgcmVjdEZsb3dQb3J0aW9uRm9yQm94KGNvbnN0IFJlbmRlckJveCos
IGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHNldFJlZ2lvbk9iamVj
dHNSZWdpb25TdHlsZSgpOwotICAgIHZvaWQgcmVzdG9yZVJlZ2lvbk9iamVjdHNPcmlnaW5hbFN0
eWxlKCk7Ci0KLSAgICBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBjYW5IYXZlR2VuZXJhdGVkQ2hpbGRyZW4oKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9y
UG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJSZWdpb24qKSBvdmVycmlkZTsK
LQotICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzRm9yQm94SW5SZWdpb24oVmVjdG9yPEZs
b2F0UXVhZD4mLCBib29sKiwgY29uc3QgUmVuZGVyQm94KiwgZmxvYXQsIGZsb2F0KSB7IH0KLQot
cHJvdGVjdGVkOgotICAgIFJlbmRlclJlZ2lvbihFbGVtZW50JiwgUmVuZGVyU3R5bGUmJiwgUmVu
ZGVyRmxvd1RocmVhZCopOwotICAgIFJlbmRlclJlZ2lvbihEb2N1bWVudCYsIFJlbmRlclN0eWxl
JiYsIFJlbmRlckZsb3dUaHJlYWQqKTsKLQotICAgIHZvaWQgZW5zdXJlT3ZlcmZsb3dGb3JCb3go
Y29uc3QgUmVuZGVyQm94KiwgUmVmUHRyPFJlbmRlck92ZXJmbG93PiYsIGJvb2wpOwotCi0gICAg
dm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpIG92ZXJyaWRlOwotICAgIHZvaWQg
Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9naWNhbFdpZHRo
LCBMYXlvdXRVbml0JiBtYXhMb2dpY2FsV2lkdGgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgZW51
bSBPdmVyZmxvd1R5cGUgewotICAgICAgICBMYXlvdXRPdmVyZmxvdyA9IDAsCi0gICAgICAgIFZp
c3VhbE92ZXJmbG93Ci0gICAgfTsKLQotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0Rm9yRmxv
d1RocmVhZFBvcnRpb24oY29uc3QgTGF5b3V0UmVjdCYgZmxvd1RocmVhZFBvcnRpb25SZWN0LCBi
b29sIGlzRmlyc3RQb3J0aW9uLCBib29sIGlzTGFzdFBvcnRpb24sIE92ZXJmbG93VHlwZSk7Ci0g
ICAgdm9pZCByZXBhaW50Rmxvd1RocmVhZENvbnRlbnRSZWN0YW5nbGUoY29uc3QgTGF5b3V0UmVj
dCYgcmVwYWludFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGZsb3dUaHJlYWRQb3J0aW9uUmVjdCwg
Y29uc3QgTGF5b3V0UG9pbnQmIHJlZ2lvbkxvY2F0aW9uLCBjb25zdCBMYXlvdXRSZWN0KiBmbG93
VGhyZWFkUG9ydGlvbkNsaXBSZWN0ID0gMCk7Ci0KLSAgICB2b2lkIGNvbXB1dGVPdmVyZmxvd0Zy
b21GbG93VGhyZWFkKCk7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBpc1JlbmRlclJlZ2lvbigpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIlJlbmRlclJlZ2lvbiI7IH0KLQotICAgIHZvaWQgaW5z
ZXJ0ZWRJbnRvVHJlZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbEJlUmVtb3ZlZEZyb21UcmVl
KCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaW5zdGFsbEZsb3dUaHJlYWQoKTsKLQot
ICAgIExheW91dFBvaW50IG1hcFJlZ2lvblBvaW50SW50b0Zsb3dUaHJlYWRDb29yZGluYXRlcyhj
b25zdCBMYXlvdXRQb2ludCYpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgUmVuZGVyRmxvd1RocmVhZCog
bV9mbG93VGhyZWFkOwotCi1wcml2YXRlOgotICAgIExheW91dFJlY3QgbV9mbG93VGhyZWFkUG9y
dGlvblJlY3Q7Ci0KLSAgICAvLyBUaGlzIG1hcCBob2xkcyB1bmlxdWUgaW5mb3JtYXRpb24gYWJv
dXQgYSBibG9jayB0aGF0IGlzIHNwbGl0IGFjcm9zcyByZWdpb25zLgotICAgIC8vIEEgUmVuZGVy
Qm94UmVnaW9uSW5mbyogdGVsbHMgdXMgYWJvdXQgYW55IGxheW91dCBpbmZvcm1hdGlvbiBmb3Ig
YSBSZW5kZXJCb3ggdGhhdAotICAgIC8vIGlzIHVuaXF1ZSB0byB0aGUgcmVnaW9uLiBGb3Igbm93
IGl0IGp1c3QgaG9sZHMgbG9naWNhbCB3aWR0aCBpbmZvcm1hdGlvbiBmb3IgUmVuZGVyQmxvY2tz
LCBidXQgZXZlbnR1YWxseQotICAgIC8vIGl0IHdpbGwgYWxzbyBob2xkIGEgY3VzdG9tIHN0eWxl
IGZvciBhbnkgYm94IChmb3IgcmVnaW9uIHN0eWxpbmcpLgotICAgIHR5cGVkZWYgSGFzaE1hcDxj
b25zdCBSZW5kZXJCb3gqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQm94UmVnaW9uSW5mbz4+IFJl
bmRlckJveFJlZ2lvbkluZm9NYXA7Ci0gICAgUmVuZGVyQm94UmVnaW9uSW5mb01hcCBtX3JlbmRl
ckJveFJlZ2lvbkluZm87Ci0KLSAgICBib29sIG1faXNWYWxpZCA6IDE7Ci19OwotCi1jbGFzcyBD
dXJyZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
Q3VycmVudFJlbmRlclJlZ2lvbk1haW50YWluZXIpOwotcHVibGljOgotICAgIEN1cnJlbnRSZW5k
ZXJSZWdpb25NYWludGFpbmVyKFJlbmRlclJlZ2lvbiYpOwotICAgIH5DdXJyZW50UmVuZGVyUmVn
aW9uTWFpbnRhaW5lcigpOwotCi0gICAgUmVuZGVyUmVnaW9uJiByZWdpb24oKSBjb25zdCB7IHJl
dHVybiBtX3JlZ2lvbjsgfQotcHJpdmF0ZToKLSAgICBSZW5kZXJSZWdpb24mIG1fcmVnaW9uOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1JF
TkRFUl9PQkpFQ1QoUmVuZGVyUmVnaW9uLCBpc1JlbmRlclJlZ2lvbigpKQoKUHJvcGVydHkgY2hh
bmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclJlZ2lvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclJlZ2lvblNldC5jcHAJKHJldmlzaW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJSZWdpb25TZXQuY3BwCShub25leGlzdGVudCkKQEAgLTEsNjQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyUmVnaW9uU2V0LmgiCi0KLSNpbmNsdWRl
ICJSZW5kZXJCb3hSZWdpb25JbmZvLmgiCi0jaW5jbHVkZSAiUmVuZGVyRmxvd1RocmVhZC5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlbmRlclJlZ2lvblNldDo6UmVuZGVyUmVnaW9uU2V0
KERvY3VtZW50JiBkb2N1bWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSwgUmVuZGVyRmxvd1RocmVh
ZCYgZmxvd1RocmVhZCkKLSAgICA6IFJlbmRlclJlZ2lvbihkb2N1bWVudCwgV1RGTW92ZShzdHls
ZSksICZmbG93VGhyZWFkKQotewotfQotCi12b2lkIFJlbmRlclJlZ2lvblNldDo6aW5zdGFsbEZs
b3dUaHJlYWQoKQotewotICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcsIHNpbmNl
IHdlIHdlcmUgYWJsZSB0byBjb25uZWN0IHRoZSBmbG93IHRocmVhZAotICAgIC8vIGluIHRoZSBj
b25zdHJ1Y3Rvci4KLX0KLQotdm9pZCBSZW5kZXJSZWdpb25TZXQ6OmV4cGFuZFRvRW5jb21wYXNz
Rmxvd1RocmVhZENvbnRlbnRzSWZOZWVkZWQoKQotewotICAgIC8vIFdoZW5ldmVyIHRoZSBsYXN0
IHJlZ2lvbiBpcyBhIHNldCwgaXQgYWx3YXlzIGV4cGFuZHMgaXRzIHJlZ2lvbiByZWN0IHRvIGNv
bnN1bWUgYWxsCi0gICAgLy8gb2YgdGhlIGZsb3cgdGhyZWFkIGNvbnRlbnQuIFRoaXMgaXMgYmVj
YXVzZSBpdCBpcyBhbHdheXMgY2FwYWJsZSBvZiBnZW5lcmF0aW5nIGFuCi0gICAgLy8gaW5maW5p
dGUgbnVtYmVyIG9mIGJveGVzIGluIG9yZGVyIHRvIGhvbGQgYWxsIG9mIHRoZSByZW1haW5pbmcg
Y29udGVudC4KLSAgICBMYXlvdXRSZWN0IHJlY3QoZmxvd1RocmVhZFBvcnRpb25SZWN0KCkpOwot
ICAgIAotICAgIC8vIEdldCB0aGUgb2Zmc2V0IHdpdGhpbiB0aGUgZmxvdyB0aHJlYWQgaW4gaXRz
IGJsb2NrIHByb2dyZXNzaW9uIGRpcmVjdGlvbi4gVGhlbiBnZXQgdGhlCi0gICAgLy8gZmxvdyB0
aHJlYWQncyByZW1haW5pbmcgbG9naWNhbCBoZWlnaHQgaW5jbHVkaW5nIGl0cyBvdmVyZmxvdyBh
bmQgZXhwYW5kIG91ciByZWN0Ci0gICAgLy8gdG8gZW5jb21wYXNzIHRoYXQgcmVtYWluaW5nIGhl
aWdodCBhbmQgb3ZlcmZsb3cuIFRoZSBpZGVhIGlzIHRoYXQgd2Ugd2lsbCBnZW5lcmF0ZQotICAg
IC8vIGFkZGl0aW9uYWwgY29sdW1ucyBhbmQgcGFnZXMgdG8gaG9sZCB0aGF0IG92ZXJmbG93LCBz
aW5jZSBwZW9wbGUgZG8gd3JpdGUgYmFkCi0gICAgLy8gY29udGVudCBsaWtlIDxib2R5IHN0eWxl
PSJoZWlnaHQ6MHB4Ij4gaW4gbXVsdGktY29sdW1uIGxheW91dHMuCi0gICAgYm9vbCBpc0hvcml6
b250YWwgPSBmbG93VGhyZWFkKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7Ci0gICAgTGF5
b3V0VW5pdCBsb2dpY2FsVG9wT2Zmc2V0ID0gaXNIb3Jpem9udGFsID8gcmVjdC55KCkgOiByZWN0
LngoKTsKLSAgICBMYXlvdXRSZWN0IGxheW91dFJlY3QgPSBmbG93VGhyZWFkKCktPmxheW91dE92
ZXJmbG93UmVjdCgpOwotICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodFdpdGhPdmVyZmxvdyA9
IChpc0hvcml6b250YWwgPyBsYXlvdXRSZWN0Lm1heFkoKSA6IGxheW91dFJlY3QubWF4WCgpKSAt
IGxvZ2ljYWxUb3BPZmZzZXQ7Ci0gICAgc2V0Rmxvd1RocmVhZFBvcnRpb25SZWN0KExheW91dFJl
Y3QocmVjdC54KCksIHJlY3QueSgpLCBpc0hvcml6b250YWwgPyByZWN0LndpZHRoKCkgOiBsb2dp
Y2FsSGVpZ2h0V2l0aE92ZXJmbG93LCBpc0hvcml6b250YWwgPyBsb2dpY2FsSGVpZ2h0V2l0aE92
ZXJmbG93IDogcmVjdC5oZWlnaHQoKSkpOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUmVnaW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJlZ2lvblNldC5oCShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uU2V0LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVyRmxvd1RocmVhZDsKLQotLy8gUmVuZGVyUmVnaW9uU2V0
IHJlcHJlc2VudHMgYSBzZXQgb2YgcmVnaW9ucyB0aGF0IGFsbCBoYXZlIHRoZSBzYW1lIHdpZHRo
IGFuZCBoZWlnaHQuIEl0IGlzIGEgImNvbXBvc2l0ZSByZWdpb24gYm94IiB0aGF0Ci0vLyBjYW4g
YmUgdXNlZCB0byByZXByZXNlbnQgYSBzaW5nbGUgcnVuIG9mIGNvbnRpZ3VvdXMgcmVnaW9ucy4K
LS8vCi0vLyBCeSBjb21iaW5pbmcgcnVucyBvZiBzYW1lLXNpemUgY29sdW1ucyBvciBwYWdlcyBp
bnRvIGEgc2luZ2xlIG9iamVjdCwgd2Ugc2lnbmlmaWNhbnRseSByZWR1Y2UgdGhlIG51bWJlciBv
ZiB1bmlxdWUgUmVuZGVyT2JqZWN0cwotLy8gcmVxdWlyZWQgdG8gcmVwcmVzZW50IHRob3NlIG9i
amVjdHMuCi0vLwotLy8gVGhpcyBjbGFzcyBpcyBhYnN0cmFjdCBhbmQgaXMgb25seSBpbnRlbmRl
ZCBmb3IgdXNlIGJ5IHJlbmRlcmVycyB0aGF0IGdlbmVyYXRlIGFub255bW91cyBydW5zIG9mIGlk
ZW50aWNhbCByZWdpb25zLCBpLmUuLAotLy8gY29sdW1ucyBhbmQgcHJpbnRpbmcuIFJlbmRlck11
bHRpQ29sdW1uU2V0IGFuZCBSZW5kZXJQYWdlU2V0IHJlcHJlc2VudCBydW5zIG9mIGNvbHVtbnMg
YW5kIHBhZ2VzIHJlc3BlY3RpdmVseS4KLS8vCi0vLyBGSVhNRTogRm9yIG5vdyB3ZSBkZXJpdmUg
ZnJvbSBSZW5kZXJSZWdpb24sIGJ1dCB0aGlzIG1heSBjaGFuZ2UgYXQgc29tZSBwb2ludC4KLQot
Y2xhc3MgUmVuZGVyUmVnaW9uU2V0IDogcHVibGljIFJlbmRlclJlZ2lvbiB7Ci1wdWJsaWM6Ci0g
ICAgdm9pZCBleHBhbmRUb0VuY29tcGFzc0Zsb3dUaHJlYWRDb250ZW50c0lmTmVlZGVkKCk7Ci0K
LXByb3RlY3RlZDoKLSAgICBSZW5kZXJSZWdpb25TZXQoRG9jdW1lbnQmLCBSZW5kZXJTdHlsZSYm
LCBSZW5kZXJGbG93VGhyZWFkJik7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBpbnN0YWxsRmxvd1Ro
cmVhZCgpIGZpbmFsOwotCi0gICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJy
aWRlID0gMDsKLSAgICAKLSAgICBib29sIGlzUmVuZGVyUmVnaW9uU2V0KCkgY29uc3QgZmluYWwg
eyByZXR1cm4gdHJ1ZTsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lvbiAyMjI0
NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NzcsNyArNTc3LDcgQEAgdm9pZCBSZW5kZXJSZXBsYWNlZDo6Y29tcHV0
ZVByZWZlcnJlZExvZwogICAgIHNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7
CiB9CiAKLVZpc2libGVQb3NpdGlvbiBSZW5kZXJSZXBsYWNlZDo6cG9zaXRpb25Gb3JQb2ludChj
b25zdCBMYXlvdXRQb2ludCYgcG9pbnQsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uKQorVmlz
aWJsZVBvc2l0aW9uIFJlbmRlclJlcGxhY2VkOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91
dFBvaW50JiBwb2ludCwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50KQog
ewogICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgaXMgYnVnZ3kgaWYgdGhlIHJlcGxhY2VkIGVsZW1l
bnQgaXMgcmVsYXRpdmUgcG9zaXRpb25lZC4KICAgICBJbmxpbmVCb3gqIGJveCA9IGlubGluZUJv
eFdyYXBwZXIoKTsKQEAgLTYwMSw3ICs2MDEsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyUmVw
bGFjZWQ6OnBvc2l0aW9uCiAgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24oMSwg
RE9XTlNUUkVBTSk7CiAgICAgfQogCi0gICAgcmV0dXJuIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQ
b2ludChwb2ludCwgcmVnaW9uKTsKKyAgICByZXR1cm4gUmVuZGVyQm94Ojpwb3NpdGlvbkZvclBv
aW50KHBvaW50LCBmcmFnbWVudCk7CiB9CiAKIExheW91dFJlY3QgUmVuZGVyUmVwbGFjZWQ6OnNl
bGVjdGlvblJlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFp
bnRDb250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAkocmV2aXNpb24gMjIyNDYyKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgJKHdvcmtpbmcgY29weSkKQEAg
LTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKIAogICAgIExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93
UmVjdEZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRh
aW5lcikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQ
b2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlclJlZ2lvbiopIGZpbmFsOworICAg
IFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiwgY29u
c3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKSBmaW5hbDsKICAgICAKICAgICBib29sIGNhbkJl
U2VsZWN0aW9uTGVhZigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZpc2lvbiAyMjI0NjIp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMzIsNyArMzMyLDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6dXBkYXRlTG9naWNhbFdp
ZHRoKCkKICAgICBpZiAoIWhhc1BlcnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2spIHsKICAgICAg
ICAgTGF5b3V0VW5pdCBjb250YWluZXJMb2dpY2FsV2lkdGhGb3JBdXRvTWFyZ2lucyA9IGF2YWls
YWJsZUxvZ2ljYWxXaWR0aDsKICAgICAgICAgaWYgKGF2b2lkc0Zsb2F0cygpICYmIGNiLmNvbnRh
aW5zRmxvYXRzKCkpCi0gICAgICAgICAgICBjb250YWluZXJMb2dpY2FsV2lkdGhGb3JBdXRvTWFy
Z2lucyA9IGNvbnRhaW5pbmdCbG9ja0F2YWlsYWJsZUxpbmVXaWR0aEluUmVnaW9uKDApOyAvLyBG
SVhNRTogV29yayB3aXRoIHJlZ2lvbnMgc29tZWRheS4KKyAgICAgICAgICAgIGNvbnRhaW5lckxv
Z2ljYWxXaWR0aEZvckF1dG9NYXJnaW5zID0gY29udGFpbmluZ0Jsb2NrQXZhaWxhYmxlTGluZVdp
ZHRoSW5GcmFnbWVudCgwKTsgLy8gRklYTUU6IFdvcmsgd2l0aCByZWdpb25zIHNvbWVkYXkuCiAg
ICAgICAgIENvbXB1dGVkTWFyZ2luVmFsdWVzIG1hcmdpblZhbHVlczsKICAgICAgICAgYm9vbCBo
YXNJbnZlcnRlZERpcmVjdGlvbiA9ICBjYi5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSA9PSBzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKICAgICAgICAgY29tcHV0ZUlu
bGluZURpcmVjdGlvbk1hcmdpbnMoY2IsIGNvbnRhaW5lckxvZ2ljYWxXaWR0aEZvckF1dG9NYXJn
aW5zLCBsb2dpY2FsV2lkdGgoKSwKQEAgLTE1MTksMTYgKzE1MTksMTYgQEAgc3RkOjpvcHRpb25h
bDxpbnQ+IFJlbmRlclRhYmxlOjpmaXJzdExpbgogICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPGlu
dD4oKTsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJUYWJsZTo6b3ZlcmZsb3dDbGlwUmVjdChjb25z
dCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBPdmVybGF5U2Ny
b2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3ksIFBhaW50UGhhc2UgcGhhc2UpCitMYXlvdXRS
ZWN0IFJlbmRlclRhYmxlOjpvdmVyZmxvd0NsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2Nh
dGlvbiwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50LCBPdmVybGF5U2Nyb2xsYmFy
U2l6ZVJlbGV2YW5jeSByZWxldmFuY3ksIFBhaW50UGhhc2UgcGhhc2UpCiB7CiAgICAgTGF5b3V0
UmVjdCByZWN0OwogICAgIC8vIERvbid0IGNsaXAgb3V0IHRoZSB0YWJsZSdzIHNpZGUgb2YgdGhl
IGNvbGxhcHNlZCBib3JkZXJzIGlmIHdlJ3JlIGluIHRoZSBwYWludCBwaGFzZSB0aGF0IHdpbGwg
YXNrIHRoZSBzZWN0aW9ucyB0byBwYWludCB0aGVtLgogICAgIC8vIExpa2V3aXNlLCBpZiB3ZSdy
ZSBzZWxmLXBhaW50aW5nIHdlIGF2b2lkIGNsaXBwaW5nIHRoZW0gb3V0IGFzIHRoZSBjbGlwIHJl
Y3QgdGhhdCB3aWxsIGJlIHBhc3NlZCBkb3duIHRvIGNoaWxkIGxheWVycyBmcm9tIFJlbmRlckxh
eWVyIHdpbGwgZG8gdGhhdCBpbnN0ZWFkLgogICAgIGlmIChwaGFzZSA9PSBQYWludFBoYXNlQ2hp
bGRCbG9ja0JhY2tncm91bmRzIHx8IGxheWVyKCktPmlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewot
ICAgICAgICByZWN0ID0gYm9yZGVyQm94UmVjdEluUmVnaW9uKHJlZ2lvbik7CisgICAgICAgIHJl
Y3QgPSBib3JkZXJCb3hSZWN0SW5GcmFnbWVudChmcmFnbWVudCk7CiAgICAgICAgIHJlY3Quc2V0
TG9jYXRpb24obG9jYXRpb24gKyByZWN0LmxvY2F0aW9uKCkpOwogICAgIH0gZWxzZQotICAgICAg
ICByZWN0ID0gUmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0KGxvY2F0aW9uLCByZWdpb24sIHJl
bGV2YW5jeSk7CisgICAgICAgIHJlY3QgPSBSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3QobG9j
YXRpb24sIGZyYWdtZW50LCByZWxldmFuY3kpOwogCiAgICAgLy8gSWYgd2UgaGF2ZSBhIGNhcHRp
b24sIGV4cGFuZCB0aGUgY2xpcCB0byBpbmNsdWRlIHRoZSBjYXB0aW9uLgogICAgIC8vIEZJWE1F
OiBUZWNobmljYWxseSB0aGlzIGlzIHdyb25nLCBidXQgaXQncyB2aXJ0dWFsbHkgaW1wb3NzaWJs
ZSB0byBmaXggdGhpcwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJ
KHJldmlzaW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsOCArMzA4LDggQEAgcHJpdmF0ZToKICAgICBMYXlv
dXRVbml0IGNvbnZlcnRTdHlsZUxvZ2ljYWxXaWR0aFRvQ29tcHV0ZWRXaWR0aChjb25zdCBMZW5n
dGgmIHN0eWxlTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKTsKICAgICBM
YXlvdXRVbml0IGNvbnZlcnRTdHlsZUxvZ2ljYWxIZWlnaHRUb0NvbXB1dGVkSGVpZ2h0KGNvbnN0
IExlbmd0aCYgc3R5bGVMb2dpY2FsSGVpZ2h0KTsKIAotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dD
bGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlclJlZ2lvbiosIE92ZXJs
YXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIFBh
aW50UGhhc2UgPSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kKSBmaW5hbDsKLSAgICBMYXlvdXRS
ZWN0IG92ZXJmbG93Q2xpcFJlY3RGb3JDaGlsZExheWVycyhjb25zdCBMYXlvdXRQb2ludCYgbG9j
YXRpb24sIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5j
eSByZWxldmFuY3kpIG92ZXJyaWRlIHsgcmV0dXJuIFJlbmRlckJveDo6b3ZlcmZsb3dDbGlwUmVj
dChsb2NhdGlvbiwgcmVnaW9uLCByZWxldmFuY3kpOyB9CisgICAgTGF5b3V0UmVjdCBvdmVyZmxv
d0NsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyRnJhZ21lbnRDb250
YWluZXIqLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3Jv
bGxiYXJTaXplLCBQYWludFBoYXNlID0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCkgZmluYWw7
CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd0NsaXBSZWN0Rm9yQ2hpbGRMYXllcnMoY29uc3QgTGF5
b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQsIE92
ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgb3ZlcnJpZGUgeyByZXR1cm4g
UmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0KGxvY2F0aW9uLCBmcmFnbWVudCwgcmVsZXZhbmN5
KTsgfQogCiAgICAgdm9pZCBhZGRPdmVyZmxvd0Zyb21DaGlsZHJlbigpIGZpbmFsOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAyMjI0NjIp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1Myw3ICs0NTMsNyBAQCBQb3NpdGlvbiBSZW5kZXJUZXh0Ojpwb3NpdGlvbkZvclBv
aW50KGNvCiAgICAgcmV0dXJuIHBvc2l0aW9uRm9yUG9pbnQocG9pbnQsIG51bGxwdHIpLmRlZXBF
cXVpdmFsZW50KCk7CiB9CiAKLVZpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0Ojpwb3NpdGlvbkZv
clBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVuZGVyUmVnaW9uKikKK1Zp
c2libGVQb3NpdGlvbiBSZW5kZXJUZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBv
aW50JiBwb2ludCwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKQogewogICAgIGVuc3Vy
ZUxpbmVCb3hlcygpOwogICAgIHJldHVybiBtX2xpbmVCb3hlcy5wb3NpdGlvbkZvclBvaW50KCp0
aGlzLCBwb2ludCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJl
dmlzaW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxGbG9h
dFF1YWQ+IGFic29sdXRlUXVhZHNDbGlwcGVkVG9FbGxpcHNpcygpIGNvbnN0OwogCiAgICAgUG9z
aXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYpIG92ZXJyaWRlOwotICAg
IFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiwgY29u
c3QgUmVuZGVyUmVnaW9uKikgb3ZlcnJpZGU7CisgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9u
Rm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5l
ciopIG92ZXJyaWRlOwogCiAgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBtX3RleHQu
aW1wbCgpLT5pczhCaXQoKTsgfQogICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOCgpIGNvbnN0
IHsgcmV0dXJuIG1fdGV4dC5pbXBsKCktPmNoYXJhY3RlcnM4KCk7IH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDIyMjQ2
MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQAogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5o
IgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtl
ci5oIgotI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgorI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50
Q29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHR3JhZGllbnRTdG9wLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW1hZ2UuaCIKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0FsbEluT25lLmNwcAko
cmV2aXNpb24gMjIyNDYyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0Fs
bEluT25lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsOCArOTgsOCBAQAogI2luY2x1ZGUgIlJl
bmRlck9iamVjdC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuY3BwIgogI2luY2x1ZGUg
IlJlbmRlclF1b3RlLmNwcCIKLSNpbmNsdWRlICJSZW5kZXJSZWdpb24uY3BwIgotI2luY2x1ZGUg
IlJlbmRlclJlZ2lvblNldC5jcHAiCisjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnQuY3BwIgorI2lu
Y2x1ZGUgIlJlbmRlckZyYWdtZW50U2V0LmNwcCIKICNpbmNsdWRlICJSZW5kZXJSZXBsYWNlZC5j
cHAiCiAjaW5jbHVkZSAiUmVuZGVyUmVwbGljYS5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyUnVieS5j
cHAiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShy
ZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDEwICs1MSwxMCBAQCBDT01QSUxFX0FTU0VSVChz
aXplb2YoUm9vdElubGluZUJveCkgPT0gCiB0eXBlZGVmIFdURjo6SGFzaE1hcDxjb25zdCBSb290
SW5saW5lQm94Kiwgc3RkOjp1bmlxdWVfcHRyPEVsbGlwc2lzQm94Pj4gRWxsaXBzaXNCb3hNYXA7
CiBzdGF0aWMgRWxsaXBzaXNCb3hNYXAqIGdFbGxpcHNpc0JveE1hcDsKIAotc3RhdGljIENvbnRh
aW5pbmdSZWdpb25NYXAmIGNvbnRhaW5pbmdSZWdpb25NYXAoUmVuZGVyQmxvY2tGbG93JiBibG9j
aykKK3N0YXRpYyBDb250YWluaW5nRnJhZ21lbnRNYXAmIGNvbnRhaW5pbmdGcmFnbWVudE1hcChS
ZW5kZXJCbG9ja0Zsb3cmIGJsb2NrKQogewogICAgIEFTU0VSVChibG9jay5mbG93VGhyZWFkQ29u
dGFpbmluZ0Jsb2NrKCkpOwotICAgIHJldHVybiBibG9jay5mbG93VGhyZWFkQ29udGFpbmluZ0Js
b2NrKCktPmNvbnRhaW5pbmdSZWdpb25NYXAoKTsKKyAgICByZXR1cm4gYmxvY2suZmxvd1RocmVh
ZENvbnRhaW5pbmdCbG9jaygpLT5jb250YWluaW5nRnJhZ21lbnRNYXAoKTsKIH0KIAogUm9vdElu
bGluZUJveDo6Um9vdElubGluZUJveChSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrKQpAQCAtNzAsNyAr
NzAsNyBAQCBSb290SW5saW5lQm94Ojp+Um9vdElubGluZUJveCgpCiAgICAgZGV0YWNoRWxsaXBz
aXNCb3goKTsKIAogICAgIGlmIChibG9ja0Zsb3coKS5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2Nr
KCkpCi0gICAgICAgIGNvbnRhaW5pbmdSZWdpb25NYXAoYmxvY2tGbG93KCkpLnJlbW92ZSh0aGlz
KTsKKyAgICAgICAgY29udGFpbmluZ0ZyYWdtZW50TWFwKGJsb2NrRmxvdygpKS5yZW1vdmUodGhp
cyk7CiB9CiAKIHZvaWQgUm9vdElubGluZUJveDo6ZGV0YWNoRWxsaXBzaXNCb3goKQpAQCAtMjAy
LDM4ICsyMDIsMzggQEAgdm9pZCBSb290SW5saW5lQm94OjpjaGlsZFJlbW92ZWQoSW5saW5lQgog
ICAgIH0KIH0KIAotUmVuZGVyUmVnaW9uKiBSb290SW5saW5lQm94Ojpjb250YWluaW5nUmVnaW9u
KCkgY29uc3QKK1JlbmRlckZyYWdtZW50Q29udGFpbmVyKiBSb290SW5saW5lQm94Ojpjb250YWlu
aW5nRnJhZ21lbnQoKSBjb25zdAogewotICAgIENvbnRhaW5pbmdSZWdpb25NYXAmIHJlZ2lvbk1h
cCA9IGNvbnRhaW5pbmdSZWdpb25NYXAoYmxvY2tGbG93KCkpOwotICAgIGJvb2wgaGFzQ29udGFp
bmluZ1JlZ2lvbiA9IHJlZ2lvbk1hcC5jb250YWlucyh0aGlzKTsKLSAgICBSZW5kZXJSZWdpb24q
IHJlZ2lvbiA9IGhhc0NvbnRhaW5pbmdSZWdpb24gPyByZWdpb25NYXAuZ2V0KHRoaXMpIDogbnVs
bHB0cjsKKyAgICBDb250YWluaW5nRnJhZ21lbnRNYXAmIGZyYWdtZW50TWFwID0gY29udGFpbmlu
Z0ZyYWdtZW50TWFwKGJsb2NrRmxvdygpKTsKKyAgICBib29sIGhhc0NvbnRhaW5pbmdGcmFnbWVu
dCA9IGZyYWdtZW50TWFwLmNvbnRhaW5zKHRoaXMpOworICAgIFJlbmRlckZyYWdtZW50Q29udGFp
bmVyKiBmcmFnbWVudCA9IGhhc0NvbnRhaW5pbmdGcmFnbWVudCA/IGZyYWdtZW50TWFwLmdldCh0
aGlzKSA6IG51bGxwdHI7CiAKICNpZm5kZWYgTkRFQlVHCi0gICAgaWYgKGhhc0NvbnRhaW5pbmdS
ZWdpb24pIHsKKyAgICBpZiAoaGFzQ29udGFpbmluZ0ZyYWdtZW50KSB7CiAgICAgICAgIFJlbmRl
ckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBibG9ja0Zsb3coKS5mbG93VGhyZWFkQ29udGFpbmlu
Z0Jsb2NrKCk7Ci0gICAgICAgIGNvbnN0IFJlbmRlclJlZ2lvbkxpc3QmIHJlZ2lvbkxpc3QgPSBm
bG93VGhyZWFkLT5yZW5kZXJSZWdpb25MaXN0KCk7Ci0gICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKHJlZ2lvbkxpc3QuY29udGFpbnMocmVnaW9uKSk7CisgICAgICAgIGNv
bnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyTGlzdCYgZnJhZ21lbnRMaXN0ID0gZmxvd1RocmVh
ZC0+cmVuZGVyRnJhZ21lbnRDb250YWluZXJMaXN0KCk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKGZyYWdtZW50TGlzdC5jb250YWlucyhmcmFnbWVudCkpOwogICAg
IH0KICNlbmRpZgogCi0gICAgcmV0dXJuIHJlZ2lvbjsKKyAgICByZXR1cm4gZnJhZ21lbnQ7CiB9
CiAKLXZvaWQgUm9vdElubGluZUJveDo6Y2xlYXJDb250YWluaW5nUmVnaW9uKCkKK3ZvaWQgUm9v
dElubGluZUJveDo6Y2xlYXJDb250YWluaW5nRnJhZ21lbnQoKQogewogICAgIEFTU0VSVCghaXNE
aXJ0eSgpKTsKIAotICAgIGlmICghY29udGFpbmluZ1JlZ2lvbk1hcChibG9ja0Zsb3coKSkuY29u
dGFpbnModGhpcykpCisgICAgaWYgKCFjb250YWluaW5nRnJhZ21lbnRNYXAoYmxvY2tGbG93KCkp
LmNvbnRhaW5zKHRoaXMpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb250YWluaW5nUmVnaW9u
TWFwKGJsb2NrRmxvdygpKS5yZW1vdmUodGhpcyk7CisgICAgY29udGFpbmluZ0ZyYWdtZW50TWFw
KGJsb2NrRmxvdygpKS5yZW1vdmUodGhpcyk7CiB9CiAKLXZvaWQgUm9vdElubGluZUJveDo6c2V0
Q29udGFpbmluZ1JlZ2lvbihSZW5kZXJSZWdpb24mIHJlZ2lvbikKK3ZvaWQgUm9vdElubGluZUJv
eDo6c2V0Q29udGFpbmluZ0ZyYWdtZW50KFJlbmRlckZyYWdtZW50Q29udGFpbmVyJiBmcmFnbWVu
dCkKIHsKICAgICBBU1NFUlQoIWlzRGlydHkoKSk7CiAKLSAgICBjb250YWluaW5nUmVnaW9uTWFw
KGJsb2NrRmxvdygpKS5zZXQodGhpcywgJnJlZ2lvbik7CisgICAgY29udGFpbmluZ0ZyYWdtZW50
TWFwKGJsb2NrRmxvdygpKS5zZXQodGhpcywgJmZyYWdtZW50KTsKIH0KIAogTGF5b3V0VW5pdCBS
b290SW5saW5lQm94OjphbGlnbkJveGVzSW5CbG9ja0RpcmVjdGlvbihMYXlvdXRVbml0IGhlaWdo
dE9mQmxvY2ssIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwJiB0ZXh0Qm94RGF0YU1h
cCwgVmVydGljYWxQb3NpdGlvbkNhY2hlJiB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgJKHJldmlzaW9uIDIyMjQ2MikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDcgQEAgY2xhc3MgRWxsaXBzaXNCb3g7CiBjbGFzcyBIaXRUZXN0UmVz
dWx0OwogY2xhc3MgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlczsKIGNsYXNzIFJlbmRlckJs
b2NrRmxvdzsKLWNsYXNzIFJlbmRlclJlZ2lvbjsKK2NsYXNzIFJlbmRlckZyYWdtZW50Q29udGFp
bmVyOwogCiBzdHJ1Y3QgQmlkaVN0YXR1czsKIHN0cnVjdCBHYXBSZWN0czsKQEAgLTY1LDExICs2
NSwxMSBAQCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBwYWdpbmF0ZWRMaW5lV2lkdGgoKSBjb25z
dCB7IHJldHVybiBtX3BhZ2luYXRlZExpbmVXaWR0aDsgfQogICAgIHZvaWQgc2V0UGFnaW5hdGVk
TGluZVdpZHRoKExheW91dFVuaXQgd2lkdGgpIHsgbV9wYWdpbmF0ZWRMaW5lV2lkdGggPSB3aWR0
aDsgfQogCi0gICAgLy8gSXQgc2hvdWxkIG5vdCBiZSBhc3N1bWVkIHRoZSBjb250YWluaW5nUmVn
aW9uKCkgaXMgYWx3YXlzIHZhbGlkLgotICAgIC8vIEl0IGNhbiBhbHNvIGJlIG51bGxwdHIgaWYg
dGhlIGZsb3cgaGFzIG5vIHJlZ2lvbiBjaGFpbi4KLSAgICBSZW5kZXJSZWdpb24qIGNvbnRhaW5p
bmdSZWdpb24oKSBjb25zdDsKLSAgICB2b2lkIHNldENvbnRhaW5pbmdSZWdpb24oUmVuZGVyUmVn
aW9uJik7Ci0gICAgdm9pZCBjbGVhckNvbnRhaW5pbmdSZWdpb24oKTsKKyAgICAvLyBJdCBzaG91
bGQgbm90IGJlIGFzc3VtZWQgdGhlIGNvbnRhaW5pbmdGcmFnbWVudCgpIGlzIGFsd2F5cyB2YWxp
ZC4KKyAgICAvLyBJdCBjYW4gYWxzbyBiZSBudWxscHRyIGlmIHRoZSBmbG93IGhhcyBubyBmcmFn
bWVudCBjaGFpbi4KKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogY29udGFpbmluZ0ZyYWdt
ZW50KCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb250YWluaW5nRnJhZ21lbnQoUmVuZGVyRnJhZ21l
bnRDb250YWluZXImKTsKKyAgICB2b2lkIGNsZWFyQ29udGFpbmluZ0ZyYWdtZW50KCk7CiAKICAg
ICBMYXlvdXRVbml0IHNlbGVjdGlvblRvcCgpIGNvbnN0OwogICAgIExheW91dFVuaXQgc2VsZWN0
aW9uQm90dG9tKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1NoYXBlT3V0c2lkZUluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAJKHJldmlzaW9uIDIyMjQ2MikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIK
ICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgotI2luY2x1
ZGUgIlJlbmRlclJlZ2lvbi5oIgorI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50Q29udGFpbmVyLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMjY4LDcgKzI2OCw3IEBAIHN0YXRpYyBpbmxp
bmUgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW4KIAogTGF5b3V0VW5pdCBTaGFwZU91dHNpZGVJ
bmZvOjpsb2dpY2FsTGVmdE9mZnNldCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fcmVuZGVyZXIuaXNS
ZW5kZXJSZWdpb24oKSkKKyAgICBpZiAobV9yZW5kZXJlci5pc1JlbmRlckZyYWdtZW50Q29udGFp
bmVyKCkpCiAgICAgICAgIHJldHVybiBMYXlvdXRVbml0KCk7CiAgICAgCiAgICAgc3dpdGNoIChy
ZWZlcmVuY2VCb3goKm1fcmVuZGVyZXIuc3R5bGUoKS5zaGFwZU91dHNpZGUoKSkpIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZUNvbnN0YW50cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZUNv
bnN0YW50cy5oCShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGVDb25zdGFudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDgyLDcgKzQ4
Miw3IEBAIGVudW0gQnJlYWtCZXR3ZWVuIHsKIGJvb2wgYWx3YXlzUGFnZUJyZWFrKEJyZWFrQmV0
d2Vlbik7CiAgICAgCiBlbnVtIEJyZWFrSW5zaWRlIHsKLSAgICBBdXRvQnJlYWtJbnNpZGUsIEF2
b2lkQnJlYWtJbnNpZGUsIEF2b2lkQ29sdW1uQnJlYWtJbnNpZGUsIEF2b2lkUGFnZUJyZWFrSW5z
aWRlLCBBdm9pZFJlZ2lvbkJyZWFrSW5zaWRlCisgICAgQXV0b0JyZWFrSW5zaWRlLCBBdm9pZEJy
ZWFrSW5zaWRlLCBBdm9pZENvbHVtbkJyZWFrSW5zaWRlLCBBdm9pZFBhZ2VCcmVha0luc2lkZQog
fTsKIAogZW51bSBIYW5naW5nUHVuY3R1YXRpb24gewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCShyZXZpc2lvbiAy
MjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDcgQEAgYm9vbCBSZW5kZXJTVkdJ
bmxpbmVUZXh0OjpjaGFyYWN0ZXJTdGFydAogICAgIHJldHVybiBpdC0+dmFsdWUueCAhPSBTVkdU
ZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpIHx8IGl0LT52YWx1ZS55ICE9IFNWR1Rl
eHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCk7CiB9CiAKLVZpc2libGVQb3NpdGlvbiBS
ZW5kZXJTVkdJbmxpbmVUZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBw
b2ludCwgY29uc3QgUmVuZGVyUmVnaW9uKikKK1Zpc2libGVQb3NpdGlvbiBSZW5kZXJTVkdJbmxp
bmVUZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3Qg
UmVuZGVyRnJhZ21lbnRDb250YWluZXIqKQogewogICAgIGlmICghZmlyc3RUZXh0Qm94KCkgfHwg
IXRleHRMZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbigwLCBE
T1dOU1RSRUFNKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
SW5saW5lVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSW5saW5lVGV4dC5oCShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaAkod29ya2luZyBjb3B5KQpAQCAt
NTgsNyArNTgsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBpc1NWR0lubGluZVRleHQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRp
b25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlclJlZ2lvbiopIG92ZXJy
aWRlOworICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBv
aW50JiwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKSBvdmVycmlkZTsKICAgICBMYXlv
dXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBM
YXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKSBvdmVycmlkZTsKICAgICBJbnRS
ZWN0IGxpbmVzQm91bmRpbmdCb3goKSBjb25zdCBvdmVycmlkZTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW5saW5lVGV4dEJveD4gY3JlYXRlVGV4dEJveCgpIG92ZXJyaWRlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCShyZXZpc2lvbiAy
MjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NTIsNyArNDUyLDcgQEAgYm9vbCBSZW5kZXJTVkdUZXh0Ojpu
b2RlQXRQb2ludChjb25zdCBIaQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmlzaWJsZVBvc2l0
aW9uIFJlbmRlclNWR1RleHQ6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBv
aW50SW5Db250ZW50cywgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb24pCitWaXNpYmxlUG9zaXRp
b24gUmVuZGVyU1ZHVGV4dDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9p
bnRJbkNvbnRlbnRzLCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQpCiB7
CiAgICAgUm9vdElubGluZUJveCogcm9vdEJveCA9IGZpcnN0Um9vdEJveCgpOwogICAgIGlmICgh
cm9vdEJveCkKQEAgLTQ2NSw3ICs0NjUsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyU1ZHVGV4
dDo6cG9zaXRpb25GCiAgICAgaWYgKCFjbG9zZXN0Qm94KQogICAgICAgICByZXR1cm4gY3JlYXRl
VmlzaWJsZVBvc2l0aW9uKDAsIERPV05TVFJFQU0pOwogCi0gICAgcmV0dXJuIGNsb3Nlc3RCb3gt
PnJlbmRlcmVyKCkucG9zaXRpb25Gb3JQb2ludChMYXlvdXRQb2ludChwb2ludEluQ29udGVudHMu
eCgpLCBjbG9zZXN0Qm94LT55KCkpLCByZWdpb24pOworICAgIHJldHVybiBjbG9zZXN0Qm94LT5y
ZW5kZXJlcigpLnBvc2l0aW9uRm9yUG9pbnQoTGF5b3V0UG9pbnQocG9pbnRJbkNvbnRlbnRzLngo
KSwgY2xvc2VzdEJveC0+eSgpKSwgZnJhZ21lbnQpOwogfQogCiB2b2lkIFJlbmRlclNWR1RleHQ6
OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4
dC5oCShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBvdmVycmlkZTsK
ICAgICBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5
b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBvdmVycmlkZTsKICAg
ICBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbikgb3Zl
cnJpZGU7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0
UG9pbnQmLCBjb25zdCBSZW5kZXJSZWdpb24qKSBvdmVycmlkZTsKKyAgICBWaXNpYmxlUG9zaXRp
b24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlckZyYWdt
ZW50Q29udGFpbmVyKikgb3ZlcnJpZGU7CiAKICAgICBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZvaWQgbGF5b3V0KCkgb3ZlcnJpZGU7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321873</attachid>
            <date>2017-09-26 14:34:37 -0700</date>
            <delta_ts>2017-09-26 15:21:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>432694</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjUyMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3NSBAQAorMjAxNy0wOS0yNiAgRGF2aWQg
SHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lICJSZWdpb24iIHRvICJG
cmFnbWVudCIgZm9yIFJlbmRlclJlZ2lvbiBhbmQgYXNzb2NpYXRlZCBjbGFzc2VzL21ldGhvZHMu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc1MDYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZl
VmFsdWVNYXBwaW5ncy5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6OkNT
U1ByaW1pdGl2ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpv
cGVyYXRvciBCcmVha0luc2lkZSBjb25zdCk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlS2V5d29y
ZHMuaW46CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvRml4
ZWRUYWJsZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaXhlZFRhYmxlTGF5b3V0Ojpj
YWxjV2lkdGhBcnJheSk6CisgICAgICAgICogcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29y
aXRobS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlTWFyZ2luTG9naWNhbFNpemVGb3JD
aGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbmRlZmluaXRlU2l6ZVN0cmF0ZWd5OjptaW5Mb2dp
Y2FsV2lkdGhGb3JDaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEZWZpbml0ZVNpemVT
dHJhdGVneTo6bWluTG9naWNhbFdpZHRoRm9yQ2hpbGQgY29uc3QpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cHJl
cGFyZVBhZ2luYXRpb25CZWZvcmVCbG9ja0xheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6YWRkT3ZlcmZsb3dGcm9tQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmNsZWFyTGF5b3V0T3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OmFkZFZpc3VhbE92ZXJmbG93RnJvbVRoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpjb21wdXRlU3RhcnRQb3NpdGlvbkRlbHRhRm9yQ2hpbGRBdm9pZGluZ0Zsb2F0
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2ltcGxpZmllZExheW91dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bWFya0ZpeGVkUG9zaXRpb25PYmplY3RGb3JM
YXlvdXRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0UG9z
aXRpb25lZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2VsZWN0aW9u
R2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbExlZnRPZmZzZXRG
b3JDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dpY2Fs
UmlnaHRPZmZzZXRGb3JDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjphZGp1c3RMb2dpY2FsTGVmdE9mZnNldEZvckxpbmUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OmFkanVzdExvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnRXaXRoSW5s
aW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6aXNDaGlsZEhpdFRlc3RDYW5kaWRhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBh
Z2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmZyYWdtZW50QXRCbG9j
a09mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjYW5Db21wdXRlRnJhZ21lbnRSYW5n
ZUZvckJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29tcHV0ZUZyYWdtZW50
UmFuZ2VGb3JCb3hDaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
ZXN0aW1hdGVGcmFnbWVudFJhbmdlRm9yQm94Q2hpbGQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OnVwZGF0ZUZyYWdtZW50UmFuZ2VGb3JCb3hDaGlsZCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVnaW9uQXRCbG9ja09mZnNldCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjYW5Db21wdXRlUmVnaW9uUmFuZ2VGb3JCb3gp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVSZWdpb25S
YW5nZUZvckJveENoaWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjplc3RpbWF0ZVJlZ2lvblJhbmdlRm9yQm94Q2hpbGQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnVwZGF0ZVJlZ2lvblJhbmdlRm9yQm94Q2hp
bGQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxp
bmVJbkZyYWdtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dp
Y2FsUmlnaHRPZmZzZXRGb3JMaW5lSW5GcmFnbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6bG9naWNhbExlZnRPZmZzZXRGb3JMaW5lSW5GcmFnbWVudCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c3RhcnRPZmZzZXRGb3JMaW5lSW5GcmFn
bWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZW5kT2Zmc2V0Rm9y
TGluZUluRnJhZ21lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmF2
YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckNvbnRlbnQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnN0YXJ0T2Zmc2V0Rm9yQ29udGVudCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZW5kT2Zmc2V0Rm9yQ29udGVudCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbExlZnRPZmZzZXRGb3JDb250
ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRP
ZmZzZXRGb3JDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjph
dmFpbGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lSW5SZWdpb24gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmVJblJl
Z2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9n
aWNhbExlZnRPZmZzZXRGb3JMaW5lSW5SZWdpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OnN0YXJ0T2Zmc2V0Rm9yTGluZUluUmVnaW9uIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjplbmRPZmZzZXRGb3JMaW5l
SW5SZWdpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
a0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9j
ayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxheW91dEJsb2NrQ2hpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpzZXRTdGF0aWNJbmxpbmVQb3Np
dGlvbkZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6YXBwbHlC
ZWZvcmVCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmFwcGx5QWZ0
ZXJCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmFkanVzdExpbmVQ
b3NpdGlvbkZvclBhZ2luYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93
OjpoYXNOZXh0UGFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6
OmFkanVzdEZvclVuc3BsaXR0YWJsZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrRmxvdzo6cHVzaFRvTmV4dFBhZ2VXaXRoTWluaW11bUxvZ2ljYWxIZWlnaHQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlvbk5ld0Zsb2F0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmdldENsZWFyRGVsdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpuZWVkc0xheW91dEFmdGVyRnJhZ21lbnRSYW5n
ZUNoYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmZpbmRD
bG9zZXN0VGV4dEF0QWJzb2x1dGVQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
a0Zsb3c6OnBvc2l0aW9uRm9yUG9pbnRXaXRoSW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlvbkZvclBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrRmxvdzo6bGF5b3V0RXhjbHVkZWRDaGlsZHJlbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6Om5lZWRzTGF5b3V0QWZ0ZXJSZWdpb25SYW5nZUNoYW5n
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxpbmtUb0VuZExpbmVJZk5lZWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxheW91dExpbmVCb3hlcyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmRldGVybWluZVN0YXJ0UG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpjaGVja1BhZ2luYXRpb25B
bmRGbG9hdHNBdEVuZExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93Ojps
aW5lV2lkdGhGb3JQYWdpbmF0ZWRMaW5lQ2hhbmdlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9ja0Zsb3c6OmFkZE92ZXJmbG93RnJvbUlubGluZUNoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6cG9zaXRpb25OZXdGbG9hdE9uTGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnVwZGF0ZUZyYWdtZW50Rm9yTGluZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnVwZGF0ZVJlZ2lvbkZv
ckxpbmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjbGFtcFRvU3RhcnRBbmRFbmRGcmFnbWVu
dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpoYXNGcmFnbWVudFJhbmdl
SW5GbG93VGhyZWFkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2xpZW50
Qm94UmVjdEluRnJhZ21lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpi
b3JkZXJCb3hSZWN0SW5GcmFnbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OmNvbnN0cmFpbkxvZ2ljYWxXaWR0aEluRnJhZ21lbnRCeU1pbk1heCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpj
bGlwUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNocmlua0xvZ2ljYWxXaWR0
aFRvQXZvaWRGbG9hdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb250
YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5GcmFnbWVudCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0F2YWlsYWJsZUxpbmVXaWR0
aEluRnJhZ21lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvZmZzZXRG
cm9tQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0
ZVJlY3RGb3JSZXBhaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6dXBk
YXRlTG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUxv
Z2ljYWxXaWR0aEluRnJhZ21lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
Ojpjb21wdXRlTG9naWNhbFdpZHRoSW5GcmFnbWVudFVzaW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6cmVuZGVyQm94RnJhZ21lbnRJbmZvIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OnRhYmxlQ2VsbFNob3VsZEhhdmVaZXJvSW5pdGlhbFNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JQb3NpdGlv
bmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2Nr
TG9naWNhbEhlaWdodEZvclBvc2l0aW9uZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y29t
cHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aFJlcGxh
Y2VkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cG9zaXRpb25Gb3JQb2lu
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNyZWF0ZXNOZXdGb3JtYXR0aW5nQ29u
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmFkZFZpc3VhbEVmZmVj
dE92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6YWRkT3ZlcmZsb3dGcm9t
Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjbGVhck92ZXJmbG93KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Omhhc1JlZ2lvblJhbmdl
SW5GbG93VGhyZWFkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6Y2xpZW50Qm94UmVjdEluUmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6Ym9yZGVyQm94UmVjdEluUmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29uc3RyYWluTG9naWNhbFdpZHRoSW5SZWdpb25C
eU1pbk1heCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNv
bnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnRJblJlZ2lvbiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0F2YWlsYWJs
ZUxpbmVXaWR0aEluUmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uVXNp
bmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpyZW5kZXJC
b3hSZWdpb25JbmZvIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3RGb3JD
aGlsZExheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNhbkhhdmVPdXRzaWRl
RnJhZ21lbnRSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om5lZWRz
TGF5b3V0QWZ0ZXJGcmFnbWVudFJhbmdlQ2hhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6Y2FuSGF2ZU91dHNpZGVSZWdpb25SYW5nZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om5lZWRzTGF5b3V0QWZ0ZXJSZWdpb25SYW5nZUNo
YW5nZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveEZyYWdt
ZW50SW5mby5oOiBDb3BpZWQgZnJvbSByZW5kZXJpbmcvUmVuZGVyQm94UmVnaW9uSW5mby5oLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94RnJhZ21lbnRJbmZvOjpSZW5kZXJCb3hGcmFnbWVu
dEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94UmVnaW9uSW5mbzo6UmVuZGVyQm94
UmVnaW9uSW5mbyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hSZWdpb25J
bmZvOjpsb2dpY2FsTGVmdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3hSZWdpb25JbmZvOjpsb2dpY2FsV2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94UmVnaW9uSW5mbzo6c2hpZnRMb2dpY2FsTGVmdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hSZWdpb25JbmZvOjppc1NoaWZ0ZWQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94UmVnaW9uSW5mbzo6Y3JlYXRl
T3ZlcmZsb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94UmVnaW9uSW5m
bzo6b3ZlcmZsb3cgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
UmVnaW9uSW5mbzo6Y2xlYXJPdmVyZmxvdyk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1v
ZGVsT2JqZWN0OjphZGp1c3RlZFBvc2l0aW9uUmVsYXRpdmVUb09mZnNldFBhcmVudCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6bWFwQWJzb2x1dGVUb0xv
Y2FsUG9pbnQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNhbkhhdmVCb3hJ
bmZvSW5GcmFnbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9i
amVjdDo6Y2FuSGF2ZUJveEluZm9JblJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJveFJlZ2lvbkluZm8uaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyRWxlbWVudC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVV
cGxvYWRDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250
cm9sOjpwb3NpdGlvbkZvclBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmlsZVVw
bG9hZENvbnRyb2wuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmNvbXB1dGVNYWluQXhpc0V4
dGVudEZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94OjphcHBs
eVN0cmV0Y2hBbGlnbm1lbnRUb0NoaWxkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxv
d1RocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpSZW5kZXJG
bG93VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnN0eWxlRGlk
Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnJlbW92ZUZsb3dD
aGlsZEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6cmVtb3ZlRnJh
Z21lbnRGcm9tVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6Omlu
dmFsaWRhdGVGcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6
dmFsaWRhdGVGcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6
bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0ZUxvZ2lj
YWxXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpjb21wdXRlTG9n
aWNhbEhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpy
ZXBhaW50UmVjdGFuZ2xlSW5GcmFnbWVudHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRmxvd1RocmVhZDo6ZnJhZ21lbnRBdEJsb2NrT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmFkanVzdGVkUG9zaXRpb25SZWxhdGl2ZVRvT2Zmc2V0
UGFyZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnBhZ2VM
b2dpY2FsVG9wRm9yT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dU
aHJlYWQ6OnBhZ2VMb2dpY2FsV2lkdGhGb3JPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRmxvd1RocmVhZDo6cGFnZUxvZ2ljYWxIZWlnaHRGb3JPZmZzZXQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6cGFnZVJlbWFpbmluZ0xvZ2ljYWxI
ZWlnaHRGb3JPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVh
ZDo6bWFwRnJvbUZsb3dUb0ZyYWdtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckZsb3dUaHJlYWQ6OnJlbW92ZVJlbmRlckJveEZyYWdtZW50SW5mbyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGbG93VGhyZWFkOjpyZW1vdmVMaW5lRnJhZ21lbnRJbmZvKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmxvZ2ljYWxXaWR0aENoYW5nZWRJbkZyYWdtZW50
c0ZvckJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmNvbnRlbnRM
b2dpY2FsV2lkdGhPZkZpcnN0RnJhZ21lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRmxvd1RocmVhZDo6Y29udGVudExvZ2ljYWxIZWlnaHRPZkZpcnN0RnJhZ21lbnQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Y29udGVudExvZ2ljYWxMZWZ0
T2ZGaXJzdEZyYWdtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJl
YWQ6OmZpcnN0RnJhZ21lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1Ro
cmVhZDo6bGFzdEZyYWdtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dU
aHJlYWQ6OmNsZWFyUmVuZGVyQm94RnJhZ21lbnRJbmZvQW5kQ3VzdG9tU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6c2V0RnJhZ21lbnRSYW5nZUZvckJveCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpoYXNDYWNoZWRGcmFnbWVudFJhbmdl
Rm9yQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmdldEZy
YWdtZW50UmFuZ2VGb3JCb3hGcm9tQ2FjaGVkSW5mbyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJGbG93VGhyZWFkOjpnZXRGcmFnbWVudFJhbmdlRm9yQm94IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmNvbXB1dGVkRnJhZ21lbnRSYW5nZUZvckJv
eCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpmcmFnbWVudElu
UmFuZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6b2JqZWN0
U2hvdWxkRnJhZ21lbnRJbkZsb3dGcmFnbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGbG93VGhyZWFkOjpvYmplY3RJbkZsb3dGcmFnbWVudCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpjaGVja0xpbmVzQ29uc2lzdGVuY3kgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJMaW5lc1RvRnJhZ21lbnRN
YXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6ZGVsZXRlTGluZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6d2lsbEJlRGVzdHJveWVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6Om1hcmtGcmFnbWVudHNGb3JPdmVyZmxv
d0xheW91dElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnVw
ZGF0ZUZyYWdtZW50c0Zsb3dUaHJlYWRQb3J0aW9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGbG93VGhyZWFkOjphZGRGb3JjZWRGcmFnbWVudEJyZWFrKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckZsb3dUaHJlYWQ6OmNvbGxlY3RMYXllckZyYWdtZW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpmcmFnbWVudHNCb3VuZGluZ0JveCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RG
cmFnbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpGcmFn
bWVudFNlYXJjaEFkYXB0ZXI6OmNvbGxlY3RJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGbG93VGhyZWFkOjptYXBMb2NhbFRvQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmFkZEZyYWdtZW50c1Zpc3VhbEVmZmVjdE92ZXJmbG93
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmFkZEZyYWdtZW50c1Zpc3Vh
bE92ZXJmbG93RnJvbVRoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6
OmFkZEZyYWdtZW50c092ZXJmbG93RnJvbUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckZsb3dUaHJlYWQ6OmFkZEZyYWdtZW50c0xheW91dE92ZXJmbG93KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckZsb3dUaHJlYWQ6OmFkZEZyYWdtZW50c1Zpc3VhbE92ZXJmbG93KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmNsZWFyRnJhZ21lbnRzT3ZlcmZsb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Y3VycmVudEZyYWdtZW50IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmNvbnRhaW5pbmdGcmFnbWVu
dE1hcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpyZW1vdmVSZWdpb25G
cm9tVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6
OmludmFsaWRhdGVSZWdpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZs
b3dUaHJlYWQ6OnZhbGlkYXRlUmVnaW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGbG93VGhyZWFkOjpyZXBhaW50UmVjdGFuZ2xlSW5SZWdpb25zIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnJlZ2lvbkF0QmxvY2tPZmZz
ZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6
bWFwRnJvbUZsb3dUb1JlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGbG93VGhyZWFkOjpyZW1vdmVSZW5kZXJCb3hSZWdpb25JbmZvKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnJlbW92ZUxpbmVSZWdpb25JbmZvKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmxvZ2ljYWxXaWR0
aENoYW5nZWRJblJlZ2lvbnNGb3JCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGbG93VGhyZWFkOjpjb250ZW50TG9naWNhbFdpZHRoT2ZGaXJzdFJlZ2lvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpjb250ZW50TG9n
aWNhbEhlaWdodE9mRmlyc3RSZWdpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRmxvd1RocmVhZDo6Y29udGVudExvZ2ljYWxMZWZ0T2ZGaXJzdFJlZ2lvbiBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpmaXJzdFJl
Z2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFk
OjpsYXN0UmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZs
b3dUaHJlYWQ6OmNsZWFyUmVuZGVyQm94UmVnaW9uSW5mb0FuZEN1c3RvbVN0eWxlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnNldFJlZ2lvblJhbmdlRm9y
Qm94KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6Omhhc0Nh
Y2hlZFJlZ2lvblJhbmdlRm9yQm94IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckZsb3dUaHJlYWQ6OmdldFJlZ2lvblJhbmdlRm9yQm94RnJvbUNhY2hlZEluZm8gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Z2V0UmVn
aW9uUmFuZ2VGb3JCb3ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Rmxvd1RocmVhZDo6Y29tcHV0ZWRSZWdpb25SYW5nZUZvckJveCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpyZWdpb25JblJhbmdlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6Om9iamVjdFNob3Vs
ZEZyYWdtZW50SW5GbG93UmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckZsb3dUaHJlYWQ6Om9iamVjdEluRmxvd1JlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpjbGVhckxpbmVzVG9SZWdpb25NYXAp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6bWFya1JlZ2lv
bnNGb3JPdmVyZmxvd0xheW91dElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0ZVJlZ2lvbnNGbG93VGhyZWFkUG9ydGlvblJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6YWRkRm9yY2VkUmVn
aW9uQnJlYWspOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6
b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OlJlZ2lvblNlYXJjaEFkYXB0ZXI6OmNvbGxl
Y3RJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFk
OjphZGRSZWdpb25zVmlzdWFsRWZmZWN0T3ZlcmZsb3cpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRmxvd1RocmVhZDo6YWRkUmVnaW9uc1Zpc3VhbE92ZXJmbG93RnJvbVRoZW1l
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmFkZFJlZ2lv
bnNPdmVyZmxvd0Zyb21DaGlsZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
bG93VGhyZWFkOjphZGRSZWdpb25zTGF5b3V0T3ZlcmZsb3cpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6YWRkUmVnaW9uc1Zpc3VhbE92ZXJmbG93KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmNsZWFyUmVnaW9uc092
ZXJmbG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmN1
cnJlbnRSZWdpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxv
d1RocmVhZDo6Y29udGFpbmluZ1JlZ2lvbk1hcCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckZsb3dUaHJlYWQuaDoKKyAgICAgICAgKFdURjo6VmFsdWVUb1N0cmluZzxXZWJD
b3JlOjpSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6c3RyaW5nKToKKyAgICAgICAgKFdURjo6VmFs
dWVUb1N0cmluZzxXZWJDb3JlOjpSZW5kZXJSZWdpb246OnN0cmluZyk6IERlbGV0ZWQuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50Q29udGFpbmVyLmNwcDogQ29waWVkIGZyb20g
cmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFn
bWVudENvbnRhaW5lcjo6UmVuZGVyRnJhZ21lbnRDb250YWluZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRnJhZ21lbnRDb250YWluZXI6Om1hcEZyYWdtZW50UG9pbnRJbnRvRmxvd1RocmVh
ZENvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYWdtZW50Q29udGFpbmVy
Ojpwb3NpdGlvbkZvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYWdtZW50Q29u
dGFpbmVyOjpwYWdlTG9naWNhbFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckZyYWdtZW50Q29udGFpbmVyOjpwYWdlTG9naWNhbEhlaWdodCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6bG9naWNhbEhlaWdodE9mQWxsRmxvd1Ro
cmVhZENvbnRlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRDb250
YWluZXI6OmZsb3dUaHJlYWRQb3J0aW9uT3ZlcmZsb3dSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckZyYWdtZW50Q29udGFpbmVyOjpmbG93VGhyZWFkUG9ydGlvbkxvY2F0aW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYWdtZW50Q29udGFpbmVyOjpvdmVyZmxvd1Jl
Y3RGb3JGbG93VGhyZWFkUG9ydGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFnbWVu
dENvbnRhaW5lcjo6cGFnZUxvZ2ljYWxUb3BGb3JPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRnJhZ21lbnRDb250YWluZXI6OmlzRmlyc3RGcmFnbWVudCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6aXNMYXN0RnJhZ21lbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRDb250YWluZXI6OnNob3Vs
ZENsaXBGbG93VGhyZWFkQ29udGVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
cmFnbWVudENvbnRhaW5lcjo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRnJhZ21lbnRDb250YWluZXI6OmNvbXB1dGVPdmVyZmxvd0Zyb21GbG93VGhyZWFkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYWdtZW50Q29udGFpbmVyOjpyZXBhaW50Rmxvd1RocmVh
ZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRDb250YWluZXI6OnJl
cGFpbnRGbG93VGhyZWFkQ29udGVudFJlY3RhbmdsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJGcmFnbWVudENvbnRhaW5lcjo6aW5zdGFsbEZsb3dUaHJlYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRnJhZ21lbnRDb250YWluZXI6OmF0dGFjaEZyYWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZyYWdtZW50Q29udGFpbmVyOjpkZXRhY2hGcmFnbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6cmVuZGVyQm94RnJhZ21lbnRJbmZv
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYWdtZW50Q29udGFpbmVyOjpzZXRS
ZW5kZXJCb3hGcmFnbWVudEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRD
b250YWluZXI6OnRha2VSZW5kZXJCb3hGcmFnbWVudEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRnJhZ21lbnRDb250YWluZXI6OnJlbW92ZVJlbmRlckJveEZyYWdtZW50SW5mbyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6ZGVsZXRlQWxsUmVuZGVy
Qm94RnJhZ21lbnRJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYWdtZW50Q29udGFp
bmVyOjpsb2dpY2FsVG9wT2ZGbG93VGhyZWFkQ29udGVudFJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRDb250YWluZXI6OmxvZ2ljYWxCb3R0b21PZkZsb3dUaHJl
YWRDb250ZW50UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFnbWVudENv
bnRhaW5lcjo6aW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFn
bWVudENvbnRhaW5lcjo6d2lsbEJlUmVtb3ZlZEZyb21UcmVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckZyYWdtZW50Q29udGFpbmVyOjpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6Y29tcHV0
ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21l
bnRDb250YWluZXI6OmFkanVzdEZyYWdtZW50Qm91bmRzRnJvbUZsb3dUaHJlYWRQb3J0aW9uUmVj
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6ZW5z
dXJlT3ZlcmZsb3dGb3JCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRDb250
YWluZXI6OnJlY3RGbG93UG9ydGlvbkZvckJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6YWRkTGF5b3V0T3ZlcmZsb3dGb3JCb3gpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRDb250YWluZXI6OmFkZFZpc3VhbE92ZXJmbG93Rm9y
Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYWdtZW50Q29udGFpbmVyOjpsYXlvdXRP
dmVyZmxvd1JlY3RGb3JCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRDb250
YWluZXI6OnZpc3VhbE92ZXJmbG93UmVjdEZvckJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJGcmFnbWVudENvbnRhaW5lcjo6bGF5b3V0T3ZlcmZsb3dSZWN0Rm9yQm94Rm9yUHJvcGFnYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRDb250YWluZXI6OnZpc3VhbE92
ZXJmbG93UmVjdEZvckJveEZvclByb3BhZ2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cnJl
bnRSZW5kZXJGcmFnbWVudENvbnRhaW5lck1haW50YWluZXI6OkN1cnJlbnRSZW5kZXJGcmFnbWVu
dENvbnRhaW5lck1haW50YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3VycmVudFJlbmRlckZy
YWdtZW50Q29udGFpbmVyTWFpbnRhaW5lcjo6fkN1cnJlbnRSZW5kZXJGcmFnbWVudENvbnRhaW5l
ck1haW50YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpSZW5kZXJSZWdp
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjptYXBSZWdpb25Q
b2ludEludG9GbG93VGhyZWFkQ29vcmRpbmF0ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyUmVnaW9uOjpwb3NpdGlvbkZvclBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclJlZ2lvbjo6cGFnZUxvZ2ljYWxXaWR0aCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OnBhZ2VMb2dpY2FsSGVpZ2h0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6bG9naWNhbEhlaWdodE9m
QWxsRmxvd1RocmVhZENvbnRlbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyUmVnaW9uOjpmbG93VGhyZWFkUG9ydGlvbk92ZXJmbG93UmVjdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmZsb3dUaHJlYWRQb3J0aW9uTG9jYXRpb24g
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpvdmVyZmxv
d1JlY3RGb3JGbG93VGhyZWFkUG9ydGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJSZWdpb246OnBhZ2VMb2dpY2FsVG9wRm9yT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6aXNGaXJzdFJlZ2lvbiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmlzTGFzdFJlZ2lvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OnNob3VsZENsaXBGbG93
VGhyZWFkQ29udGVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJS
ZWdpb246OnN0eWxlRGlkQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clJlZ2lvbjo6Y29tcHV0ZU92ZXJmbG93RnJvbUZsb3dUaHJlYWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpyZXBhaW50Rmxvd1RocmVhZENvbnRlbnQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpyZXBhaW50Rmxvd1RocmVhZENv
bnRlbnRSZWN0YW5nbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9u
OjppbnN0YWxsRmxvd1RocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJS
ZWdpb246OmF0dGFjaFJlZ2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJS
ZWdpb246OmRldGFjaFJlZ2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJS
ZWdpb246OnJlbmRlckJveFJlZ2lvbkluZm8gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUmVnaW9uOjpzZXRSZW5kZXJCb3hSZWdpb25JbmZvKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6dGFrZVJlbmRlckJveFJlZ2lvbkluZm8pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpyZW1vdmVSZW5kZXJCb3hS
ZWdpb25JbmZvKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6ZGVs
ZXRlQWxsUmVuZGVyQm94UmVnaW9uSW5mbyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJSZWdpb246OmxvZ2ljYWxUb3BPZkZsb3dUaHJlYWRDb250ZW50UmVjdCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmxvZ2ljYWxCb3R0b21PZkZs
b3dUaHJlYWRDb250ZW50UmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJSZWdpb246Omluc2VydGVkSW50b1RyZWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyUmVnaW9uOjp3aWxsQmVSZW1vdmVkRnJvbVRyZWUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmNvbXB1dGVQ
cmVmZXJyZWRMb2dpY2FsV2lkdGhzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clJlZ2lvbjo6YWRqdXN0UmVnaW9uQm91bmRzRnJvbUZsb3dUaHJlYWRQb3J0aW9uUmVjdCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmVuc3VyZU92ZXJm
bG93Rm9yQm94KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6cmVj
dEZsb3dQb3J0aW9uRm9yQm94IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclJlZ2lvbjo6YWRkTGF5b3V0T3ZlcmZsb3dGb3JCb3gpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyUmVnaW9uOjphZGRWaXN1YWxPdmVyZmxvd0ZvckJveCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmxheW91dE92ZXJmbG93UmVjdEZvckJv
eCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OnZpc3VhbE92ZXJm
bG93UmVjdEZvckJveCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246
OmxheW91dE92ZXJmbG93UmVjdEZvckJveEZvclByb3BhZ2F0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6dmlzdWFsT3ZlcmZsb3dSZWN0Rm9yQm94Rm9yUHJv
cGFnYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VycmVudFJlbmRlclJlZ2lv
bk1haW50YWluZXI6OkN1cnJlbnRSZW5kZXJSZWdpb25NYWludGFpbmVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkN1cnJlbnRSZW5kZXJSZWdpb25NYWludGFpbmVyOjp+Q3VycmVudFJl
bmRlclJlZ2lvbk1haW50YWluZXIpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJGcmFnbWVudENvbnRhaW5lci5oOiBDb3BpZWQgZnJvbSByZW5kZXJpbmcvUmVuZGVyUmVnaW9u
LmguCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6aXNSZW5kZXJG
cmFnbWVudENvbnRhaW5lclNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFn
bWVudENvbnRhaW5lcjo6YWJzb2x1dGVRdWFkc0ZvckJveEluRnJhZ21lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Q3VycmVudFJlbmRlckZyYWdtZW50Q29udGFpbmVyTWFpbnRhaW5lcjo6ZnJhZ21l
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpzZXRGbG93VGhyZWFk
UG9ydGlvblJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpm
bG93VGhyZWFkUG9ydGlvblJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyUmVnaW9uOjpmbG93VGhyZWFkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclJlZ2lvbjo6aXNWYWxpZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJSZWdpb246OnNldElzVmFsaWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyUmVnaW9uOjpsb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRlbnQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpsb2dpY2FsQm90dG9tRm9y
Rmxvd1RocmVhZENvbnRlbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyUmVnaW9uOjppc1JlbmRlclJlZ2lvblNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJSZWdpb246OmNvbGxlY3RMYXllckZyYWdtZW50cyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmFic29sdXRlUXVhZHNGb3JCb3hJblJlZ2lv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJyZW50UmVuZGVyUmVnaW9uTWFpbnRh
aW5lcjo6cmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
RnJhZ21lbnRDb250YWluZXJTZXQuY3BwOiBDb3BpZWQgZnJvbSByZW5kZXJpbmcvUmVuZGVyUmVn
aW9uU2V0LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0
OjpSZW5kZXJGcmFnbWVudENvbnRhaW5lclNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
cmFnbWVudENvbnRhaW5lclNldDo6aW5zdGFsbEZsb3dUaHJlYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQ6OmV4cGFuZFRvRW5jb21wYXNzRmxvd1RocmVh
ZENvbnRlbnRzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uU2V0OjpS
ZW5kZXJSZWdpb25TZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9u
U2V0OjppbnN0YWxsRmxvd1RocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJSZWdpb25TZXQ6OmV4cGFuZFRvRW5jb21wYXNzRmxvd1RocmVhZENvbnRlbnRzSWZOZWVkZWQp
OiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGcmFnbWVudENvbnRhaW5lclNl
dC5oOiBDb3BpZWQgZnJvbSByZW5kZXJpbmcvUmVuZGVyUmVnaW9uU2V0LmguCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6
Y29tcHV0ZU1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQgY29uc3QpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpw
b3NpdGlvbkZvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6bGluZXNW
aXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94SW5GcmFnbWVudCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJJbmxpbmU6OmxpbmVzVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveEluUmVnaW9u
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFj
Y3VtdWxhdGVPZmZzZXRUb3dhcmRzQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tp
bmc6OnBhaW50SW50b0xheWVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2Fu
QmVDb21wb3NpdGVkIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFr
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVCcmVhazo6cG9zaXRpb25Gb3JQb2lu
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjphZGRGcmFnbWVudFRvVGhyZWFkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6d2lsbEJlUmVtb3Zl
ZEZyb21UcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVh
ZDo6cHJvY2Vzc1Bvc3NpYmxlU3Bhbm5lckRlc2NlbmRhbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpmbG93VGhyZWFkUmVsYXRpdmVXaWxsQmVSZW1v
dmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6c2V0
UGFnZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVh
ZDo6dXBkYXRlTWluaW11bVBhZ2VIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVs
dGlDb2x1bW5GbG93VGhyZWFkOjpmcmFnbWVudEF0QmxvY2tPZmZzZXQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpzZXRGcmFnbWVudFJhbmdl
Rm9yQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6
YWRkRm9yY2VkRnJhZ21lbnRCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNv
bHVtbkZsb3dUaHJlYWQ6Om9mZnNldEZyb21Db250YWluZXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjptYXBBYnNvbHV0ZVRvTG9jYWxQb2lu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6
OnBoeXNpY2FsVHJhbnNsYXRpb25Gcm9tRnJhZ21lbnRUb0Zsb3cgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjptYXBGcm9tRmxvd1RvRnJhZ21l
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFk
OjpwaHlzaWNhbFRyYW5zbGF0aW9uT2Zmc2V0RnJvbUZsb3dUb0ZyYWdtZW50IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6cGh5c2ljYWxUcmFu
c2xhdGlvbkZyb21GbG93VG9GcmFnbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmFkZFJlZ2lvblRvVGhyZWFkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6cmVnaW9uQXRCbG9j
a09mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNv
bHVtbkZsb3dUaHJlYWQ6OnNldFJlZ2lvblJhbmdlRm9yQm94KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6YWRkRm9yY2VkUmVnaW9uQnJl
YWspOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhy
ZWFkOjpwaHlzaWNhbFRyYW5zbGF0aW9uRnJvbVJlZ2lvblRvRmxvdyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6Om1hcEZyb21G
bG93VG9SZWdpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVs
dGlDb2x1bW5GbG93VGhyZWFkOjpwaHlzaWNhbFRyYW5zbGF0aW9uT2Zmc2V0RnJvbUZsb3dUb1Jl
Z2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVt
bkZsb3dUaHJlYWQ6OnBoeXNpY2FsVHJhbnNsYXRpb25Gcm9tRmxvd1RvUmVnaW9uIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFk
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uU2V0OjpSZW5kZXJNdWx0aUNvbHVtblNldCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtblNldDo6dXBkYXRlTG9naWNhbFdp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uU2V0OjpiZWdpbkZsb3cp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5TZXQ6OmVuZEZsb3cpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5TZXQ6OmxheW91dCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtblNldDo6Zmxvd1RocmVhZFBvcnRpb25PdmVyZmxvd1Jl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnJlcGFpbnRGbG93
VGhyZWFkQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtblNldDo6
Y29sbGVjdExheWVyRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29s
dW1uU2V0OjphZGp1c3RGcmFnbWVudEJvdW5kc0Zyb21GbG93VGhyZWFkUG9ydGlvblJlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnBvc2l0aW9uRm9y
UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnRyYW5zbGF0
ZUZyYWdtZW50UG9pbnRUb0Zsb3dUaHJlYWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTXVsdGlDb2x1bW5TZXQ6OnVwZGF0ZUhpdFRlc3RSZXN1bHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTXVsdGlDb2x1bW5TZXQ6OmFkanVzdFJlZ2lvbkJvdW5kc0Zyb21GbG93VGhyZWFk
UG9ydGlvblJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVs
dGlDb2x1bW5TZXQ6OnRyYW5zbGF0ZVJlZ2lvblBvaW50VG9GbG93VGhyZWFkIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6Y29udGFpbmVyRm9yUmVwYWludCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6OnJlcGFpbnRVc2luZ0NvbnRhaW5lciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJPYmplY3Q6Om91dHB1dFJlZ2lvbnNJbmZvcm1hdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVj
dDo6aXNSZW5kZXJGcmFnbWVudENvbnRhaW5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6OmlzUmVuZGVyUmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyUmVnaW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlZ2lv
blNldC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlZ2lvblNldC5o
OiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6cG9zaXRpb25Gb3JQb2ludCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjp1cGRhdGVMb2dpY2Fs
V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6Om92ZXJmbG93Q2xpcFJlY3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnBvc2l0aW9u
Rm9yUG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Lmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJpbmdBbGxJbk9uZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y29udGFpbmluZ0ZyYWdtZW50TWFwKToKKyAgICAgICAgKFdl
YkNvcmU6OlJvb3RJbmxpbmVCb3g6On5Sb290SW5saW5lQm94KToKKyAgICAgICAgKFdlYkNvcmU6
OlJvb3RJbmxpbmVCb3g6OmNvbnRhaW5pbmdGcmFnbWVudCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSb290SW5saW5lQm94OjpjbGVhckNvbnRhaW5pbmdGcmFnbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpSb290SW5saW5lQm94OjpzZXRDb250YWluaW5nRnJhZ21lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Y29udGFpbmluZ1JlZ2lvbk1hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSb290SW5saW5lQm94Ojpjb250YWluaW5nUmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OmNsZWFyQ29udGFpbmluZ1JlZ2lvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpzZXRDb250YWluaW5nUmVnaW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTaGFwZU91dHNpZGVJbmZvOjpsb2dpY2FsTGVmdE9mZnNldCBjb25zdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR0lubGluZVRleHQ6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0Ojpwb3NpdGlv
bkZvclBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaDoKKwog
MjAxNy0wOS0yNiAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29ueS5jb20+CiAKICAg
ICAgICAgW0N1cmxdIEludHJvZHVjZSBDdXJsUmVzcG9uc2UgdG8gaG9sZCByZXNwb25zZSBpbmZv
cm1hdGlvbiBhbW9uZyB0aHJlYWRzLgpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0yNjc3LDYgKzI2NzcsOCBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcmVuZGVyaW5n
L1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJs
ZUJveC5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKKyAgICByZW5kZXJp
bmcvUmVuZGVyRnJhZ21lbnRDb250YWluZXIuY3BwCisgICAgcmVuZGVyaW5nL1JlbmRlckZyYWdt
ZW50Q29udGFpbmVyU2V0LmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJGcmFtZS5jcHAKICAgICBy
ZW5kZXJpbmcvUmVuZGVyRnJhbWVCYXNlLmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJGcmFtZVNl
dC5jcHAKQEAgLTI3MTEsOCArMjcxMyw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAK
ICAgICByZW5kZXJpbmcvUmVuZGVyUXVvdGUuY3BwCi0gICAgcmVuZGVyaW5nL1JlbmRlclJlZ2lv
bi5jcHAKLSAgICByZW5kZXJpbmcvUmVuZGVyUmVnaW9uU2V0LmNwcAogICAgIHJlbmRlcmluZy9S
ZW5kZXJSZXBsYWNlZC5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVyUmVwbGljYS5jcHAKICAgICBy
ZW5kZXJpbmcvUmVuZGVyUnVieS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyMjQ2MikKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtNjAzMCw4ICs2MDMwLDggQEAKIAkJQkNFNzg5ODYxMTIwRTdBNjAwNjBFQ0U1IC8qIEJp
ZGlSdW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
RTc4OTg1MTEyMEU3QTYwMDYwRUNFNSAvKiBCaWRpUnVuLmggKi87IH07CiAJCUJDRTc4OThCMTEy
MEU4MDIwMDYwRUNFNSAvKiBCaWRpUnVuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTc4OThBMTEyMEU4MDIwMDYwRUNFNSAvKiBCaWRpUnVuLmNw
cCAqLzsgfTsKIAkJQkNFN0IxOTMwRDRFODY5NjAwNzVBNTM5IC8qIEpTSGlzdG9yeUN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0U3QjE5
MjBENEU4Njk2MDA3NUE1MzkgLyogSlNIaXN0b3J5Q3VzdG9tLmNwcCAqLzsgfTsKLQkJQkNFOTNG
NDUxNTE3QzU2NzAwOENDRjc0IC8qIFJlbmRlclJlZ2lvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFOTNGNDQxNTE3QzU2NzAwOENDRjc0IC8q
IFJlbmRlclJlZ2lvblNldC5oICovOyB9OwotCQlCQ0U5M0Y0NzE1MTdDNkQ1MDA4Q0NGNzQgLyog
UmVuZGVyUmVnaW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDRTkzRjQ2MTUxN0M2RDUwMDhDQ0Y3NCAvKiBSZW5kZXJSZWdpb25TZXQuY3Bw
ICovOyB9OworCQlCQ0U5M0Y0NTE1MTdDNTY3MDA4Q0NGNzQgLyogUmVuZGVyRnJhZ21lbnRDb250
YWluZXJTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDRTkzRjQ0MTUxN0M1NjcwMDhDQ0Y3NCAvKiBSZW5kZXJGcmFnbWVudENvbnRhaW5lclNldC5o
ICovOyB9OworCQlCQ0U5M0Y0NzE1MTdDNkQ1MDA4Q0NGNzQgLyogUmVuZGVyRnJhZ21lbnRDb250
YWluZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNFOTNGNDYxNTE3QzZENTAwOENDRjc0IC8qIFJlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0
LmNwcCAqLzsgfTsKIAkJQkNFQTQ3OEYwOTdDQUFDODAwOTRDOUU0IC8qIENTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0VBNDc3QzA5N0NBQUM4MDA5NEM5RTQgLyogQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uLmNwcCAqLzsgfTsKIAkJQkNFQTQ3OTAwOTdDQUFDODAwOTRDOUU0IC8qIENTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkNFQTQ3N0QwOTdDQUFDODAwOTRDOUU0IC8qIENTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUJDRUE0ODUyMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJCbG9ja0xpbmVMYXlvdXQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQTQ4
MTMwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckJsb2NrTGluZUxheW91dC5jcHAgKi87IH07CkBA
IC02MDY4LDcgKzYwNjgsNyBAQAogCQlCQ0VBNDg4QzA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVy
VGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNF
QTQ4NEQwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0VBNDg4RDA5N0Q5MzAyMDA5NEM5RTQg
LyogUmVuZGVyVGV4dEZyYWdtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDRUE0ODRFMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUZXh0RnJh
Z21lbnQuY3BwICovOyB9OwogCQlCQ0VBNDg4RTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGV4
dEZyYWdtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0VBNDg0RjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGV4dEZyYWdtZW50LmggKi87IH07
Ci0JCUJDRUIxNzlDMTQzMzc5RjUwMDUyRUFFOSAvKiBSZW5kZXJCb3hSZWdpb25JbmZvLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VCMTc5QjE0MzM3
OUY1MDA1MkVBRTkgLyogUmVuZGVyQm94UmVnaW9uSW5mby5oICovOyB9OworCQlCQ0VCMTc5QzE0
MzM3OUY1MDA1MkVBRTkgLyogUmVuZGVyQm94RnJhZ21lbnRJbmZvLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VCMTc5QjE0MzM3OUY1MDA1MkVBRTkg
LyogUmVuZGVyQm94RnJhZ21lbnRJbmZvLmggKi87IH07CiAJCUJDRUMwMUJEMEMyNzREQUMwMDlG
NEVDOSAvKiBTY3JlZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkNFQzAxQkEwQzI3NERBQzAwOUY0RUM5IC8qIFNjcmVlbi5jcHAgKi87IH07CiAJ
CUJDRUMwMUJFMEMyNzREQUMwMDlGNEVDOSAvKiBTY3JlZW4uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUMwMUJCMEMyNzREQUMwMDlGNEVDOSAvKiBT
Y3JlZW4uaCAqLzsgfTsKIAkJQkNFQzAxQzIwQzI3NERERDAwOUY0RUM5IC8qIEpTU2NyZWVuLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUMwMUMw
MEMyNzREREQwMDlGNEVDOSAvKiBKU1NjcmVlbi5jcHAgKi87IH07CkBAIC02NTgxLDggKzY1ODEs
OCBAQAogCQlENkU1MjhBMzE0OUE5MjZEMDBFRkUxRjMgLyogTXV0YXRpb25PYnNlcnZlckludGVy
ZXN0R3JvdXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRDZFNTI4QTExNDlBOTI2RDAwRUZFMUYzIC8qIE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdy
b3VwLmNwcCAqLzsgfTsKIAkJRDZFNTI4QTQxNDlBOTI2RDAwRUZFMUYzIC8qIE11dGF0aW9uT2Jz
ZXJ2ZXJJbnRlcmVzdEdyb3VwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBENkU1MjhBMjE0OUE5MjZEMDBFRkUxRjMgLyogTXV0YXRpb25PYnNlcnZlcklu
dGVyZXN0R3JvdXAuaCAqLzsgfTsKIAkJRDZGNzk2MEQxNjZGRkVDRTAwNzZERDE4IC8qIEpTSFRN
TFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBENkY3OTYwQzE2NkZGRUNFMDA3NkREMTggLyogSlNIVE1MVGVtcGxh
dGVFbGVtZW50Q3VzdG9tLmNwcCAqLzsgfTsKLQkJRDcwQUQ2NTcxM0UxMzQyQjAwNUI1MEI0IC8q
IFJlbmRlclJlZ2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBENzBBRDY1NTEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmNwcCAqLzsg
fTsKLQkJRDcwQUQ2NTgxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRlclJlZ2lvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDcwQUQ2NTYxM0UxMzQyQjAw
NUI1MEI0IC8qIFJlbmRlclJlZ2lvbi5oICovOyB9OworCQlENzBBRDY1NzEzRTEzNDJCMDA1QjUw
QjQgLyogUmVuZGVyRnJhZ21lbnRDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDcwQUQ2NTUxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRl
ckZyYWdtZW50Q29udGFpbmVyLmNwcCAqLzsgfTsKKwkJRDcwQUQ2NTgxM0UxMzQyQjAwNUI1MEI0
IC8qIFJlbmRlckZyYWdtZW50Q29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBENzBBRDY1NjEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyRnJh
Z21lbnRDb250YWluZXIuaCAqLzsgfTsKIAkJRDhCNjE1MkYxMDMyNDk1MTAwQzg1NTRBIC8qIENv
b2tpZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDhC
NjE1MkUxMDMyNDk1MTAwQzg1NTRBIC8qIENvb2tpZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCURBRUQyMDMwMTZGMjQ0MkIwMDcwRUMwRiAvKiBQ
YWdlQ29uc29sZUNsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBEQUFDQjNEOTE2RjI0MTY0MDA2NjYxMzUgLyogUGFnZUNvbnNvbGVDbGllbnQu
Y3BwICovOyB9OwogCQlEQUVEMjAzMTE2RjI0NDQ4MDA3MEVDMEYgLyogUGFnZUNvbnNvbGVDbGll
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERBQUNC
M0RBMTZGMjQxNjQwMDY2NjEzNSAvKiBQYWdlQ29uc29sZUNsaWVudC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNDczMSw4ICsxNDczMSw4IEBA
CiAJCUJDRTc4OTg1MTEyMEU3QTYwMDYwRUNFNSAvKiBCaWRpUnVuLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEJpZGlSdW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQkNFNzg5OEExMTIwRTgwMjAwNjBFQ0U1IC8qIEJpZGlSdW4uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmlkaVJ1bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDRTdCMTkyMEQ0RTg2OTYwMDc1QTUzOSAvKiBKU0hpc3RvcnlDdXN0b20uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIaXN0b3J5Q3VzdG9tLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkNFOTNGNDQxNTE3QzU2NzAwOENDRjc0
IC8qIFJlbmRlclJlZ2lvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJSZWdpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkNFOTNGNDYx
NTE3QzZENTAwOENDRjc0IC8qIFJlbmRlclJlZ2lvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJSZWdpb25TZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCQ0U5M0Y0NDE1MTdDNTY3MDA4Q0NGNzQgLyogUmVuZGVyRnJhZ21lbnRD
b250YWluZXJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyRnJh
Z21lbnRDb250YWluZXJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNFOTNG
NDYxNTE3QzZENTAwOENDRjc0IC8qIFJlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckZyYWdtZW50Q29udGFpbmVy
U2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNFQTQ3N0MwOTdDQUFDODAw
OTRDOUU0IC8qIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNFQTQ3N0QwOTdDQUFDODAwOTRDOUU0IC8q
IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDRUE0NzhDMDk3Q0FBQzgwMDk0QzlFNCAvKiBDU1NWYWx1ZUtleXdvcmRz
LmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBDU1NWYWx1ZUtleXdvcmRzLmluOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ3NzEsNyArMTQ3NzEsNyBAQAogCQlCQ0VBNDg0RDA5
N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0VB
NDg0RTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGV4dEZyYWdtZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUZXh0RnJhZ21lbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0VBNDg0RjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVu
ZGVyVGV4dEZyYWdtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJUZXh0RnJhZ21lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkNFQjE3OUIx
NDMzNzlGNTAwNTJFQUU5IC8qIFJlbmRlckJveFJlZ2lvbkluZm8uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyQm94UmVnaW9uSW5mby5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCQ0VCMTc5QjE0MzM3OUY1MDA1MkVBRTkgLyogUmVuZGVyQm94RnJhZ21l
bnRJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckJveEZyYWdt
ZW50SW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0VDMDFCQTBDMjc0REFD
MDA5RjRFQzkgLyogU2NyZWVuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTY3JlZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0VDMDFCQjBD
Mjc0REFDMDA5RjRFQzkgLyogU2NyZWVuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTY3JlZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNFQzAxQkMwQzI3
NERBQzAwOUY0RUM5IC8qIFNjcmVlbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNjcmVl
bi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTM2Miw4ICsxNTM2Miw4IEBA
CiAJCUQ2RUZDMEJDMTY2NkRGN0EwMDNEMjkxRSAvKiBIVE1MVGVtcGxhdGVFbGVtZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxUZW1wbGF0ZUVsZW1lbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDZFRkMwQkQxNjY2REY3QTAwM0QyOTFFIC8qIEhU
TUxUZW1wbGF0ZUVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEhUTUxUZW1wbGF0
ZUVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlENkY3OTYwQzE2NkZG
RUNFMDA3NkREMTggLyogSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUQ3MEFENjU1MTNFMTM0MkIwMDVCNTBC
NCAvKiBSZW5kZXJSZWdpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVuZGVyUmVnaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRDcwQUQ2
NTYxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRlclJlZ2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJSZWdpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRDcwQUQ2NTUxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRlckZyYWdtZW50Q29udGFpbmVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckZyYWdtZW50Q29u
dGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDcwQUQ2NTYxM0UxMzQy
QjAwNUI1MEI0IC8qIFJlbmRlckZyYWdtZW50Q29udGFpbmVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbmRlckZyYWdtZW50Q29udGFpbmVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUQ4QjYxNTJFMTAzMjQ5NTEwMEM4NTU0QSAvKiBDb29raWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29va2llLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCURBQUNCM0Q5MTZGMjQxNjQwMDY2NjEzNSAvKiBQYWdlQ29uc29sZUNsaWVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlQ29uc29sZUNs
aWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURBQUNCM0RBMTZGMjQxNjQw
MDY2NjEzNSAvKiBQYWdlQ29uc29sZUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQYWdlQ29uc29sZUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjU5MDksNyArMjU5MDksNyBAQAogCQkJCUJDRUE0ODIzMDk3RDkzMDIwMDk0QzlFNCAvKiBS
ZW5kZXJCb3guaCAqLywKIAkJCQlCQzk2REI0NTBGM0E4ODIyMDA1NzNDQjMgLyogUmVuZGVyQm94
TW9kZWxPYmplY3QuY3BwICovLAogCQkJCUJDOTZEQjQyMEYzQTg4MEUwMDU3M0NCMyAvKiBSZW5k
ZXJCb3hNb2RlbE9iamVjdC5oICovLAotCQkJCUJDRUIxNzlCMTQzMzc5RjUwMDUyRUFFOSAvKiBS
ZW5kZXJCb3hSZWdpb25JbmZvLmggKi8sCisJCQkJQkNFQjE3OUIxNDMzNzlGNTAwNTJFQUU5IC8q
IFJlbmRlckJveEZyYWdtZW50SW5mby5oICovLAogCQkJCUJDRUE0ODI2MDk3RDkzMDIwMDk0QzlF
NCAvKiBSZW5kZXJCdXR0b24uY3BwICovLAogCQkJCUJDRUE0ODI3MDk3RDkzMDIwMDk0QzlFNCAv
KiBSZW5kZXJCdXR0b24uaCAqLywKIAkJCQlCNTY1NzlCNDE4MjREMTJBMDBFNzlGMjMgLyogUmVu
ZGVyQ2hpbGRJdGVyYXRvci5oICovLApAQCAtMjYwMDQsMTAgKzI2MDA0LDEwIEBACiAJCQkJQURF
MTY3MzYxODEwNTBDMzAwNDYzQTJFIC8qIFJlbmRlclB0ci5oICovLAogCQkJCTVBNTc0RjIyMTMx
REI5MzkwMDQ3MUI4OCAvKiBSZW5kZXJRdW90ZS5jcHAgKi8sCiAJCQkJNUE1NzRGMjMxMzFEQjkz
OTAwNDcxQjg4IC8qIFJlbmRlclF1b3RlLmggKi8sCi0JCQkJRDcwQUQ2NTUxM0UxMzQyQjAwNUI1
MEI0IC8qIFJlbmRlclJlZ2lvbi5jcHAgKi8sCi0JCQkJRDcwQUQ2NTYxM0UxMzQyQjAwNUI1MEI0
IC8qIFJlbmRlclJlZ2lvbi5oICovLAotCQkJCUJDRTkzRjQ2MTUxN0M2RDUwMDhDQ0Y3NCAvKiBS
ZW5kZXJSZWdpb25TZXQuY3BwICovLAotCQkJCUJDRTkzRjQ0MTUxN0M1NjcwMDhDQ0Y3NCAvKiBS
ZW5kZXJSZWdpb25TZXQuaCAqLywKKwkJCQlENzBBRDY1NTEzRTEzNDJCMDA1QjUwQjQgLyogUmVu
ZGVyRnJhZ21lbnRDb250YWluZXIuY3BwICovLAorCQkJCUQ3MEFENjU2MTNFMTM0MkIwMDVCNTBC
NCAvKiBSZW5kZXJGcmFnbWVudENvbnRhaW5lci5oICovLAorCQkJCUJDRTkzRjQ2MTUxN0M2RDUw
MDhDQ0Y3NCAvKiBSZW5kZXJGcmFnbWVudENvbnRhaW5lclNldC5jcHAgKi8sCisJCQkJQkNFOTNG
NDQxNTE3QzU2NzAwOENDRjc0IC8qIFJlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0LmggKi8sCiAJ
CQkJQTg3MURGREUwQTE1Mzc2QjAwQjEyQTY4IC8qIFJlbmRlclJlcGxhY2VkLmNwcCAqLywKIAkJ
CQlBODcxREZERjBBMTUzNzZCMDBCMTJBNjggLyogUmVuZGVyUmVwbGFjZWQuaCAqLywKIAkJCQlC
Q0E4NDZENDBEQzY3QTM1MDAyNkMzMDkgLyogUmVuZGVyUmVwbGljYS5jcHAgKi8sCkBAIC0yOTY3
Myw3ICsyOTY3Myw3IEBACiAJCQkJQkMxMEQ3NjgxN0Q4RUU3MTAwNUUyNjI2IC8qIFJlbmRlckJs
b2NrRmxvdy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NjIwOTdEOTMwMjAwOTRDOUU0IC8q
IFJlbmRlckJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5NkRCNDMwRjNBODgwRTAwNTczQ0Iz
IC8qIFJlbmRlckJveE1vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKLQkJCQlCQ0VCMTc5QzE0
MzM3OUY1MDA1MkVBRTkgLyogUmVuZGVyQm94UmVnaW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQkNFQjE3OUMxNDMzNzlGNTAwNTJFQUU5IC8qIFJlbmRlckJveEZyYWdtZW50SW5mby5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NjYwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckJ1dHRv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjU2NTc5QjUxODI0RDEyQTAwRTc5RjIzIC8qIFJlbmRl
ckNoaWxkSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTQ0MTM0MTJGNzQ4RTIwMDlC
ODRCOCAvKiBSZW5kZXJDb21iaW5lVGV4dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTczNyw4ICsy
OTczNyw4IEBACiAJCQkJQTQzQkY1OUQxMTQ5MjkyODAwQzY0M0NBIC8qIFJlbmRlclByb2dyZXNz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCNUI2NTg3NDE4NkZERTRDMDA5QzI2RTggLyogUmVuZGVy
UHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QTU3NEYyNTEzMURCOTM5MDA0NzFCODggLyogUmVu
ZGVyUXVvdGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUQ3MEFENjU4MTNFMTM0MkIwMDVCNTBCNCAv
KiBSZW5kZXJSZWdpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCUJDRTkzRjQ1MTUxN0M1NjcwMDhD
Q0Y3NCAvKiBSZW5kZXJSZWdpb25TZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUQ3MEFENjU4MTNF
MTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJGcmFnbWVudENvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQkNFOTNGNDUxNTE3QzU2NzAwOENDRjc0IC8qIFJlbmRlckZyYWdtZW50Q29udGFpbmVy
U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODcxREZFMzBBMTUzNzZCMDBCMTJBNjggLyogUmVu
ZGVyUmVwbGFjZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQTg0NkQ3MERDNjdBMzUwMDI2QzMw
OSAvKiBSZW5kZXJSZXBsaWNhLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDc5RkFFRTEwOUFFMzc1
MDBERUQ2NTUgLyogUmVuZGVyUnVieS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzcwMSw4ICszMzcw
MSw4IEBACiAJCQkJQkNFQTQ4N0YwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlck9iamVjdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNDNCRjU5QzExNDkyOTI4MDBDNjQzQ0EgLyogUmVuZGVyUHJv
Z3Jlc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUE1NzRGMjQxMzFEQjkzOTAwNDcxQjg4IC8q
IFJlbmRlclF1b3RlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUQ3MEFENjU3MTNFMTM0MkIwMDVC
NTBCNCAvKiBSZW5kZXJSZWdpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkNFOTNGNDcxNTE3
QzZENTAwOENDRjc0IC8qIFJlbmRlclJlZ2lvblNldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlE
NzBBRDY1NzEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyRnJhZ21lbnRDb250YWluZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQkNFOTNGNDcxNTE3QzZENTAwOENDRjc0IC8qIFJlbmRlckZyYWdt
ZW50Q29udGFpbmVyU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4NzFERkUyMEExNTM3NkIw
MEIxMkE2OCAvKiBSZW5kZXJSZXBsYWNlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0E4NDZE
NjBEQzY3QTM1MDAyNkMzMDkgLyogUmVuZGVyUmVwbGljYS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDc5RkFFRDEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieS5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGlu
Z3MuaAkocmV2aXNpb24gMjIyNDYyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2
ZVZhbHVlTWFwcGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjI4NSw5ICsyMjg1LDYgQEAgdGVt
cGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTUwogICAgIGNhc2UgQXZvaWRQYWdl
QnJlYWtJbnNpZGU6CiAgICAgICAgIG1fdmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlQXZvaWRQYWdl
OwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEF2b2lkUmVnaW9uQnJlYWtJbnNpZGU6Ci0gICAg
ICAgIG1fdmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlQXZvaWRSZWdpb247Ci0gICAgICAgIGJyZWFr
OwogICAgIH0KIH0KIApAQCAtMjMwNCw4ICsyMzAxLDYgQEAgdGVtcGxhdGU8PiBpbmxpbmUgQ1NT
UHJpbWl0aXZlVmFsdWU6Om9wZQogICAgICAgICByZXR1cm4gQXZvaWRDb2x1bW5CcmVha0luc2lk
ZTsKICAgICBjYXNlIENTU1ZhbHVlQXZvaWRQYWdlOgogICAgICAgICByZXR1cm4gQXZvaWRQYWdl
QnJlYWtJbnNpZGU7Ci0gICAgY2FzZSBDU1NWYWx1ZUF2b2lkUmVnaW9uOgotICAgICAgICByZXR1
cm4gQXZvaWRSZWdpb25CcmVha0luc2lkZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsK
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVLZXl3b3Jkcy5pbgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVLZXl3b3Jkcy5pbgkocmV2aXNp
b24gMjIyNDYyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlS2V5d29yZHMuaW4JKHdv
cmtpbmcgY29weSkKQEAgLTg1Nyw3ICs4NTcsNiBAQCBlbnYKIC8vCiBhdm9pZC1jb2x1bW4KIGF2
b2lkLXBhZ2UKLWF2b2lkLXJlZ2lvbgogcGFnZQogcmVjdG8KIHJlZ2lvbgpAQCAtMTA5OCw4ICsx
MDk3LDYgQEAgeAogeQogI2VuZGlmCiAKLS8vIC13ZWJraXQtcmVnaW9uLWZyYWdtZW50Ci0vLyBh
dXRvCiBicmVhawogCiB3cmFwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAy
MjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc4LDkgKzc4LDkgQEAKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJQb2ludGVyTG9ja0NvbnRyb2xsZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJGcmFnbWVudENvbnRhaW5lci5oIgogI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgotI2luY2x1ZGUgIlJlbmRlclJl
Z2lvbi5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZVVw
ZGF0ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCShyZXZpc2lvbiAyMjI0NjIpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0MCw3ICsxNDAsNyBAQCBmbG9hdCBGaXhlZFRhYmxlTGF5b3V0OjpjYWxjV2lkdGhB
cnJheSgpCiAgICAgICAgIHVuc2lnbmVkIHNwYW4gPSBjZWxsLT5jb2xTcGFuKCk7CiAgICAgICAg
IGZsb2F0IGZpeGVkQm9yZGVyQm94TG9naWNhbFdpZHRoID0gMDsKICAgICAgICAgLy8gRklYTUU6
IFN1cHBvcnQgb3RoZXIgbGVuZ3RoIHR5cGVzLiBJZiB0aGUgd2lkdGggaXMgbm9uLWF1dG8sIGl0
IHNob3VsZCBwcm9iYWJseSBqdXN0IHVzZQotICAgICAgICAvLyBSZW5kZXJCb3g6OmNvbXB1dGVM
b2dpY2FsV2lkdGhJblJlZ2lvblVzaW5nIHRvIGNvbXB1dGUgdGhlIHdpZHRoLgorICAgICAgICAv
LyBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJbkZyYWdtZW50VXNpbmcgdG8gY29tcHV0
ZSB0aGUgd2lkdGguCiAgICAgICAgIGlmIChsb2dpY2FsV2lkdGguaXNGaXhlZCgpICYmIGxvZ2lj
YWxXaWR0aC5pc1Bvc2l0aXZlKCkpIHsKICAgICAgICAgICAgIGZpeGVkQm9yZGVyQm94TG9naWNh
bFdpZHRoID0gY2VsbC0+YWRqdXN0Qm9yZGVyQm94TG9naWNhbFdpZHRoRm9yQm94U2l6aW5nKGxv
Z2ljYWxXaWR0aC52YWx1ZSgpKTsKICAgICAgICAgICAgIGxvZ2ljYWxXaWR0aC5zZXRWYWx1ZShG
aXhlZCwgZml4ZWRCb3JkZXJCb3hMb2dpY2FsV2lkdGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5jcHAJKHJldmlz
aW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdB
bGdvcml0aG0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAgc3RhdGljIExh
eW91dFVuaXQgY29tcHV0ZU1hcmdpbkxvZ2ljYWxTaQogICAgIExheW91dFVuaXQgbWFyZ2luU3Rh
cnQ7CiAgICAgTGF5b3V0VW5pdCBtYXJnaW5FbmQ7CiAgICAgaWYgKGRpcmVjdGlvbiA9PSBGb3JD
b2x1bW5zKQotICAgICAgICBjaGlsZC5jb21wdXRlSW5saW5lRGlyZWN0aW9uTWFyZ2lucyhyZW5k
ZXJHcmlkLCBjaGlsZC5jb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5SZWdp
b24obnVsbHB0ciksIGNoaWxkLmxvZ2ljYWxXaWR0aCgpLCBtYXJnaW5TdGFydCwgbWFyZ2luRW5k
KTsKKyAgICAgICAgY2hpbGQuY29tcHV0ZUlubGluZURpcmVjdGlvbk1hcmdpbnMocmVuZGVyR3Jp
ZCwgY2hpbGQuY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudEluRnJhZ21lbnQo
bnVsbHB0ciksIGNoaWxkLmxvZ2ljYWxXaWR0aCgpLCBtYXJnaW5TdGFydCwgbWFyZ2luRW5kKTsK
ICAgICBlbHNlCiAgICAgICAgIGNoaWxkLmNvbXB1dGVCbG9ja0RpcmVjdGlvbk1hcmdpbnMocmVu
ZGVyR3JpZCwgbWFyZ2luU3RhcnQsIG1hcmdpbkVuZCk7CiAKQEAgLTgyNCw3ICs4MjQsNyBAQCBw
cml2YXRlOgogCiBMYXlvdXRVbml0IEluZGVmaW5pdGVTaXplU3RyYXRlZ3k6Om1pbkxvZ2ljYWxX
aWR0aEZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQsIExlbmd0aCBjaGlsZE1pblNpemUsIEdyaWRU
cmFja1NpemluZ0RpcmVjdGlvbiBjaGlsZElubGluZURpcmVjdGlvbikgY29uc3QKIHsKLSAgICBy
ZXR1cm4gY2hpbGQuY29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uVXNpbmcoTWluU2l6ZSwgY2hp
bGRNaW5TaXplLCBvdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hp
bGQsIGNoaWxkSW5saW5lRGlyZWN0aW9uKS52YWx1ZV9vcigwKSwgKnJlbmRlckdyaWQoKSwgbnVs
bHB0cikgKyBtYXJnaW5JbnRyaW5zaWNMb2dpY2FsV2lkdGhGb3JDaGlsZChyZW5kZXJHcmlkKCks
IGNoaWxkKTsKKyAgICByZXR1cm4gY2hpbGQuY29tcHV0ZUxvZ2ljYWxXaWR0aEluRnJhZ21lbnRV
c2luZyhNaW5TaXplLCBjaGlsZE1pblNpemUsIG92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVu
dFNpemVGb3JDaGlsZChjaGlsZCwgY2hpbGRJbmxpbmVEaXJlY3Rpb24pLnZhbHVlX29yKDApLCAq
cmVuZGVyR3JpZCgpLCBudWxscHRyKSArIG1hcmdpbkludHJpbnNpY0xvZ2ljYWxXaWR0aEZvckNo
aWxkKHJlbmRlckdyaWQoKSwgY2hpbGQpOwogfQogCiB2b2lkIEluZGVmaW5pdGVTaXplU3RyYXRl
Z3k6OmxheW91dEdyaWRJdGVtRm9yTWluU2l6ZUNvbXB1dGF0aW9uKFJlbmRlckJveCYgY2hpbGQs
IGJvb2wgb3ZlcnJpZGVTaXplSGFzQ2hhbmdlZCkgY29uc3QKQEAgLTkyMyw3ICs5MjMsNyBAQCBM
YXlvdXRVbml0IERlZmluaXRlU2l6ZVN0cmF0ZWd5OjptaW5Mb2dpCiB7CiAgICAgTGF5b3V0VW5p
dCBtYXJnaW5Mb2dpY2FsV2lkdGggPQogICAgICAgICBjb21wdXRlTWFyZ2luTG9naWNhbFNpemVG
b3JDaGlsZChjaGlsZElubGluZURpcmVjdGlvbiwgKnJlbmRlckdyaWQoKSwgY2hpbGQpOwotICAg
IHJldHVybiBjaGlsZC5jb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb25Vc2luZyhNaW5TaXplLCBj
aGlsZE1pblNpemUsIG92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChj
aGlsZCwgY2hpbGRJbmxpbmVEaXJlY3Rpb24pLnZhbHVlX29yKDApLCAqcmVuZGVyR3JpZCgpLCBu
dWxscHRyKSArIG1hcmdpbkxvZ2ljYWxXaWR0aDsKKyAgICByZXR1cm4gY2hpbGQuY29tcHV0ZUxv
Z2ljYWxXaWR0aEluRnJhZ21lbnRVc2luZyhNaW5TaXplLCBjaGlsZE1pblNpemUsIG92ZXJyaWRl
Q29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjaGlsZCwgY2hpbGRJbmxpbmVEaXJl
Y3Rpb24pLnZhbHVlX29yKDApLCAqcmVuZGVyR3JpZCgpLCBudWxscHRyKSArIG1hcmdpbkxvZ2lj
YWxXaWR0aDsKIH0KIAogdm9pZCBEZWZpbml0ZVNpemVTdHJhdGVneTo6bWF4aW1pemVUcmFja3Mo
VmVjdG9yPEdyaWRUcmFjaz4mIHRyYWNrcywgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiYgZnJl
ZVNwYWNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShy
ZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxOCArNDUsMTggQEAKICNpbmNsdWRlICJQYWdlLmgi
CiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCi0j
aW5jbHVkZSAiUmVuZGVyQm94UmVnaW9uSW5mby5oIgorI2luY2x1ZGUgIlJlbmRlckJveEZyYWdt
ZW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlckJ1dHRvbi5oIgogI2luY2x1ZGUgIlJlbmRlckNo
aWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJDb21iaW5lVGV4dC5oIgogI2luY2x1ZGUg
IlJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5oIgogI2luY2x1ZGUgIlJlbmRlckZsZXhpYmxl
Qm94LmgiCisjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRDb250YWluZXIuaCIKICNpbmNsdWRlICJS
ZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJl
bmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJl
bmRlck1lbnVMaXN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGV4dEZyYWdtZW50LmgiCkBAIC0xMDkwLDEwICsxMDkwLDEwIEBAIHN0
YXRpYyBSZW5kZXJCbG9ja1JhcmVEYXRhJiBlbnN1cmVCbG9ja1IKIAogdm9pZCBSZW5kZXJCbG9j
azo6cHJlcGFyZVBhZ2luYXRpb25CZWZvcmVCbG9ja0xheW91dChib29sJiByZWxheW91dENoaWxk
cmVuKQogewotICAgIC8vIFJlZ2lvbnMgY2hhbmdpbmcgd2lkdGhzIGNhbiBmb3JjZSB1cyB0byBy
ZWxheW91dCBvdXIgY2hpbGRyZW4uCisgICAgLy8gRnJhZ21lbnRzIGNoYW5naW5nIHdpZHRocyBj
YW4gZm9yY2UgdXMgdG8gcmVsYXlvdXQgb3VyIGNoaWxkcmVuLgogICAgIFJlbmRlckZsb3dUaHJl
YWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CiAgICAgaWYgKGZs
b3dUaHJlYWQpCi0gICAgICAgIGZsb3dUaHJlYWQtPmxvZ2ljYWxXaWR0aENoYW5nZWRJblJlZ2lv
bnNGb3JCbG9jayh0aGlzLCByZWxheW91dENoaWxkcmVuKTsKKyAgICAgICAgZmxvd1RocmVhZC0+
bG9naWNhbFdpZHRoQ2hhbmdlZEluRnJhZ21lbnRzRm9yQmxvY2sodGhpcywgcmVsYXlvdXRDaGls
ZHJlbik7CiB9CiAKIGJvb2wgUmVuZGVyQmxvY2s6OnJlY29tcHV0ZUxvZ2ljYWxXaWR0aCgpCkBA
IC0xMTIxLDEwICsxMTIxLDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJvbUNo
aWxkcmUKICAgICBlbHNlCiAgICAgICAgIGFkZE92ZXJmbG93RnJvbUJsb2NrQ2hpbGRyZW4oKTsK
ICAgICAKLSAgICAvLyBJZiB0aGlzIGJsb2NrIGlzIGZsb3dlZCBpbnNpZGUgYSBmbG93IHRocmVh
ZCwgbWFrZSBzdXJlIGl0cyBvdmVyZmxvdyBpcyBwcm9wYWdhdGVkIHRvIHRoZSBjb250YWluaW5n
IHJlZ2lvbnMuCisgICAgLy8gSWYgdGhpcyBibG9jayBpcyBmbG93ZWQgaW5zaWRlIGEgZmxvdyB0
aHJlYWQsIG1ha2Ugc3VyZSBpdHMgb3ZlcmZsb3cgaXMgcHJvcGFnYXRlZCB0byB0aGUgY29udGFp
bmluZyBmcmFnbWVudHMuCiAgICAgaWYgKG1fb3ZlcmZsb3cpIHsKICAgICAgICAgaWYgKFJlbmRl
ckZsb3dUaHJlYWQqIGNvbnRhaW5pbmdGbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdC
bG9jaygpKQotICAgICAgICAgICAgY29udGFpbmluZ0Zsb3dUaHJlYWQtPmFkZFJlZ2lvbnNWaXN1
YWxPdmVyZmxvdyh0aGlzLCBtX292ZXJmbG93LT52aXN1YWxPdmVyZmxvd1JlY3QoKSk7CisgICAg
ICAgICAgICBjb250YWluaW5nRmxvd1RocmVhZC0+YWRkRnJhZ21lbnRzVmlzdWFsT3ZlcmZsb3co
dGhpcywgbV9vdmVyZmxvdy0+dmlzdWFsT3ZlcmZsb3dSZWN0KCkpOwogICAgIH0KIH0KIApAQCAt
MTE2NSw3ICsxMTY1LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJMYXlvdXRPdmVyZmxvdygp
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAodmlzdWFsT3ZlcmZsb3dSZWN0KCkgPT0g
Ym9yZGVyQm94UmVjdCgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgY29tcGxldGUg
c29sdXRpb24gZm9yIHJlZ2lvbnMgb3ZlcmZsb3cuCisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgY29tcGxldGUgc29sdXRpb24gZm9yIGZyYWdtZW50cyBvdmVyZmxvdy4KICAgICAgICAgY2xl
YXJPdmVyZmxvdygpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTIwNiwyMiArMTIwNiwy
MiBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRWaXN1YWxPdmVyZmxvd0Zyb21UCiAgICAgYWRkVmlz
dWFsT3ZlcmZsb3coc25hcHBlZEludFJlY3QoTGF5b3V0UmVjdChpbmZsYXRlZFJlY3QpKSk7CiAK
ICAgICBpZiAoUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWlu
aW5nQmxvY2soKSkKLSAgICAgICAgZmxvd1RocmVhZC0+YWRkUmVnaW9uc1Zpc3VhbE92ZXJmbG93
RnJvbVRoZW1lKHRoaXMpOworICAgICAgICBmbG93VGhyZWFkLT5hZGRGcmFnbWVudHNWaXN1YWxP
dmVyZmxvd0Zyb21UaGVtZSh0aGlzKTsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6Y29t
cHV0ZVN0YXJ0UG9zaXRpb25EZWx0YUZvckNoaWxkQXZvaWRpbmdGbG9hdHMoY29uc3QgUmVuZGVy
Qm94JiBjaGlsZCwgTGF5b3V0VW5pdCBjaGlsZE1hcmdpblN0YXJ0LCBSZW5kZXJSZWdpb24qIHJl
Z2lvbikKK0xheW91dFVuaXQgUmVuZGVyQmxvY2s6OmNvbXB1dGVTdGFydFBvc2l0aW9uRGVsdGFG
b3JDaGlsZEF2b2lkaW5nRmxvYXRzKGNvbnN0IFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQg
Y2hpbGRNYXJnaW5TdGFydCwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50KQogewot
ICAgIExheW91dFVuaXQgc3RhcnRQb3NpdGlvbiA9IHN0YXJ0T2Zmc2V0Rm9yQ29udGVudChyZWdp
b24pOworICAgIExheW91dFVuaXQgc3RhcnRQb3NpdGlvbiA9IHN0YXJ0T2Zmc2V0Rm9yQ29udGVu
dChmcmFnbWVudCk7CiAKICAgICAvLyBBZGQgaW4gb3VyIHN0YXJ0IG1hcmdpbi4KICAgICBMYXlv
dXRVbml0IG9sZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIGNoaWxkTWFyZ2luU3RhcnQ7CiAg
ICAgTGF5b3V0VW5pdCBuZXdQb3NpdGlvbiA9IG9sZFBvc2l0aW9uOwogCiAgICAgTGF5b3V0VW5p
dCBibG9ja09mZnNldCA9IGxvZ2ljYWxUb3BGb3JDaGlsZChjaGlsZCk7Ci0gICAgaWYgKHJlZ2lv
bikKLSAgICAgICAgYmxvY2tPZmZzZXQgPSBzdGQ6Om1heChibG9ja09mZnNldCwgYmxvY2tPZmZz
ZXQgKyAocmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRlbnQoKSAtIG9mZnNldEZy
b21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSkpOworICAgIGlmIChmcmFnbWVudCkKKyAgICAgICAg
YmxvY2tPZmZzZXQgPSBzdGQ6Om1heChibG9ja09mZnNldCwgYmxvY2tPZmZzZXQgKyAoZnJhZ21l
bnQtPmxvZ2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgpIC0gb2Zmc2V0RnJvbUxvZ2ljYWxU
b3BPZkZpcnN0UGFnZSgpKSk7CiAKLSAgICBMYXlvdXRVbml0IHN0YXJ0T2ZmID0gc3RhcnRPZmZz
ZXRGb3JMaW5lSW5SZWdpb24oYmxvY2tPZmZzZXQsIERvTm90SW5kZW50VGV4dCwgcmVnaW9uLCBs
b2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoY2hpbGQpKTsKKyAgICBMYXlvdXRVbml0IHN0YXJ0T2ZmID0g
c3RhcnRPZmZzZXRGb3JMaW5lSW5GcmFnbWVudChibG9ja09mZnNldCwgRG9Ob3RJbmRlbnRUZXh0
LCBmcmFnbWVudCwgbG9naWNhbEhlaWdodEZvckNoaWxkKGNoaWxkKSk7CiAKICAgICBpZiAoc3R5
bGUoKS50ZXh0QWxpZ24oKSAhPSBXRUJLSVRfQ0VOVEVSICYmICFjaGlsZC5zdHlsZSgpLm1hcmdp
blN0YXJ0VXNpbmcoJnN0eWxlKCkpLmlzQXV0bygpKSB7CiAgICAgICAgIGlmIChjaGlsZE1hcmdp
blN0YXJ0IDwgMCkKQEAgLTEzNTUsNyArMTM1NSw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnNpbXBs
aWZpZWRMYXlvdXQoKQogICAgICAgICBzaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCgpOwogCiAg
ICAgLy8gTWFrZSBzdXJlIGEgZm9yY2VkIGJyZWFrIGlzIGFwcGxpZWQgYWZ0ZXIgdGhlIGNvbnRl
bnQgaWYgd2UgYXJlIGEgZmxvdyB0aHJlYWQgaW4gYSBzaW1wbGlmaWVkIGxheW91dC4KLSAgICAv
LyBUaGlzIGVuc3VyZXMgdGhlIHNpemUgaW5mb3JtYXRpb24gaXMgY29ycmVjdGx5IGNvbXB1dGVk
IGZvciB0aGUgbGFzdCBhdXRvLWhlaWdodCByZWdpb24gcmVjZWl2aW5nIGNvbnRlbnQuCisgICAg
Ly8gVGhpcyBlbnN1cmVzIHRoZSBzaXplIGluZm9ybWF0aW9uIGlzIGNvcnJlY3RseSBjb21wdXRl
ZCBmb3IgdGhlIGxhc3QgYXV0by1oZWlnaHQgZnJhZ21lbnQgcmVjZWl2aW5nIGNvbnRlbnQuCiAg
ICAgaWYgKGlzPFJlbmRlckZsb3dUaHJlYWQ+KCp0aGlzKSkKICAgICAgICAgZG93bmNhc3Q8UmVu
ZGVyRmxvd1RocmVhZD4oKnRoaXMpLmFwcGx5QnJlYWtBZnRlckNvbnRlbnQoY2xpZW50TG9naWNh
bEJvdHRvbSgpKTsKIApAQCAtMTQwNiw3ICsxNDA2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFy
a0ZpeGVkUG9zaXRpb25PYmplYwogCiAgICAgaWYgKGhhc1N0YXRpY0lubGluZVBvc2l0aW9uKSB7
CiAgICAgICAgIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyBjb21wdXRlZFZhbHVlczsKLSAg
ICAgICAgcG9zaXRpb25lZENoaWxkLmNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvbihjb21wdXRl
ZFZhbHVlcyk7CisgICAgICAgIHBvc2l0aW9uZWRDaGlsZC5jb21wdXRlTG9naWNhbFdpZHRoSW5G
cmFnbWVudChjb21wdXRlZFZhbHVlcyk7CiAgICAgICAgIExheW91dFVuaXQgbmV3TGVmdCA9IGNv
bXB1dGVkVmFsdWVzLm1fcG9zaXRpb247CiAgICAgICAgIGlmIChuZXdMZWZ0ICE9IHBvc2l0aW9u
ZWRDaGlsZC5sb2dpY2FsTGVmdCgpKQogICAgICAgICAgICAgcG9zaXRpb25lZENoaWxkLnNldENo
aWxkTmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKQEAgLTE0MzUsNyArMTQzNSw3IEBAIExheW91
dFVuaXQgUmVuZGVyQmxvY2s6Om1hcmdpbkludHJpbnNpY0wKIAogdm9pZCBSZW5kZXJCbG9jazo6
bGF5b3V0UG9zaXRpb25lZE9iamVjdChSZW5kZXJCb3gmIHIsIGJvb2wgcmVsYXlvdXRDaGlsZHJl
biwgYm9vbCBmaXhlZFBvc2l0aW9uT2JqZWN0c09ubHkpCiB7Ci0gICAgZXN0aW1hdGVSZWdpb25S
YW5nZUZvckJveENoaWxkKHIpOworICAgIGVzdGltYXRlRnJhZ21lbnRSYW5nZUZvckJveENoaWxk
KHIpOwogCiAgICAgLy8gQSBmaXhlZCBwb3NpdGlvbiBlbGVtZW50IHdpdGggYW4gYWJzb2x1dGUg
cG9zaXRpb25lZCBhbmNlc3RvciBoYXMgbm8gd2F5IG9mIGtub3dpbmcgaWYgdGhlIGxhdHRlciBo
YXMgY2hhbmdlZCBwb3NpdGlvbi4gU28KICAgICAvLyBpZiB0aGlzIGlzIGEgZml4ZWQgcG9zaXRp
b24gZWxlbWVudCwgbWFyayBpdCBmb3IgbGF5b3V0IGlmIGl0IGhhcyBhbiBhYnNwb3MgYW5jZXN0
b3IgYW5kIG5lZWRzIHRvIG1vdmUgd2l0aCB0aGF0IGFuY2VzdG9yLCBpLmUuIApAQCAtMTQ5NCw3
ICsxNDk0LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRpb25lZE9iamVjdAogICAg
ICAgICByLmxheW91dElmTmVlZGVkKCk7CiAgICAgfQogCi0gICAgaWYgKHVwZGF0ZVJlZ2lvblJh
bmdlRm9yQm94Q2hpbGQocikpIHsKKyAgICBpZiAodXBkYXRlRnJhZ21lbnRSYW5nZUZvckJveENo
aWxkKHIpKSB7CiAgICAgICAgIHIuc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKICAgICAg
ICAgci5sYXlvdXRJZk5lZWRlZCgpOwogICAgIH0KQEAgLTE5NzQsNyArMTk3NCw3IEBAIEdhcFJl
Y3RzIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBzKFJlbmQKICAgICAgICAgY2xpcE91dEZsb2F0
aW5nT2JqZWN0cyhyb290QmxvY2ssIHBhaW50SW5mbywgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlv
biwgb2Zmc2V0RnJvbVJvb3RCbG9jayk7CiAgICAgfQogCi0gICAgLy8gRklYTUU6IG92ZXJmbG93
OiBhdXRvL3Njcm9sbCByZWdpb25zIG5lZWQgbW9yZSBtYXRoIGhlcmUsIHNpbmNlIHBhaW50aW5n
IGluIHRoZSBib3JkZXIgYm94IGlzIGRpZmZlcmVudCBmcm9tIHBhaW50aW5nIGluIHRoZSBwYWRk
aW5nIGJveCAob25lIGlzIHNjcm9sbGVkLCB0aGUgb3RoZXIgaXMKKyAgICAvLyBGSVhNRTogb3Zl
cmZsb3c6IGF1dG8vc2Nyb2xsIGZyYWdtZW50cyBuZWVkIG1vcmUgbWF0aCBoZXJlLCBzaW5jZSBw
YWludGluZyBpbiB0aGUgYm9yZGVyIGJveCBpcyBkaWZmZXJlbnQgZnJvbSBwYWludGluZyBpbiB0
aGUgcGFkZGluZyBib3ggKG9uZSBpcyBzY3JvbGxlZCwgdGhlIG90aGVyIGlzCiAgICAgLy8gZml4
ZWQpLgogICAgIEdhcFJlY3RzIHJlc3VsdDsKICAgICBpZiAoIWlzUmVuZGVyQmxvY2tGbG93KCkp
IC8vIEZJWE1FOiBNYWtlIG11bHRpLWNvbHVtbiBzZWxlY3Rpb24gZ2FwIGZpbGxpbmcgd29yayBz
b21lZGF5LgpAQCAtMjMwNywyNiArMjMwNywyNiBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjp0
ZXh0SW5kZW50T2Zmc2V0CiAgICAgcmV0dXJuIG1pbmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZSgp
LnRleHRJbmRlbnQoKSwgY3cpOwogfQogCi1MYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsb2dpY2Fs
TGVmdE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiByZWdpb24pIGNvbnN0CitMYXlvdXRV
bml0IFJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoUmVuZGVyRnJhZ21l
bnRDb250YWluZXIqIGZyYWdtZW50KSBjb25zdAogewogICAgIExheW91dFVuaXQgbG9naWNhbExl
ZnRPZmZzZXQgPSBzdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBib3JkZXJMZWZ0
KCkgKyBwYWRkaW5nTGVmdCgpIDogYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCk7CiAgICAgaWYg
KHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKICAgICAgICAgbG9n
aWNhbExlZnRPZmZzZXQgKz0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOwotICAgIGlmICghcmVn
aW9uKQorICAgIGlmICghZnJhZ21lbnQpCiAgICAgICAgIHJldHVybiBsb2dpY2FsTGVmdE9mZnNl
dDsKLSAgICBMYXlvdXRSZWN0IGJveFJlY3QgPSBib3JkZXJCb3hSZWN0SW5SZWdpb24ocmVnaW9u
KTsKKyAgICBMYXlvdXRSZWN0IGJveFJlY3QgPSBib3JkZXJCb3hSZWN0SW5GcmFnbWVudChmcmFn
bWVudCk7CiAgICAgcmV0dXJuIGxvZ2ljYWxMZWZ0T2Zmc2V0ICsgKGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBib3hSZWN0LngoKSA6IGJveFJlY3QueSgpKTsKIH0KIAotTGF5b3V0VW5pdCBS
ZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChSZW5kZXJSZWdpb24qIHJl
Z2lvbikgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdodE9mZnNldEZv
ckNvbnRlbnQoUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50KSBjb25zdAogewogICAg
IExheW91dFVuaXQgbG9naWNhbFJpZ2h0T2Zmc2V0ID0gc3R5bGUoKS5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSA6IGJvcmRlclRvcCgpICsg
cGFkZGluZ1RvcCgpOwogICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFy
T25MZWZ0KCkpCiAgICAgICAgIGxvZ2ljYWxSaWdodE9mZnNldCArPSB2ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoKCk7CiAgICAgbG9naWNhbFJpZ2h0T2Zmc2V0ICs9IGF2YWlsYWJsZUxvZ2ljYWxXaWR0
aCgpOwotICAgIGlmICghcmVnaW9uKQorICAgIGlmICghZnJhZ21lbnQpCiAgICAgICAgIHJldHVy
biBsb2dpY2FsUmlnaHRPZmZzZXQ7Ci0gICAgTGF5b3V0UmVjdCBib3hSZWN0ID0gYm9yZGVyQm94
UmVjdEluUmVnaW9uKHJlZ2lvbik7CisgICAgTGF5b3V0UmVjdCBib3hSZWN0ID0gYm9yZGVyQm94
UmVjdEluRnJhZ21lbnQoZnJhZ21lbnQpOwogICAgIHJldHVybiBsb2dpY2FsUmlnaHRPZmZzZXQg
LSAobG9naWNhbFdpZHRoKCkgLSAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGJveFJlY3Qu
bWF4WCgpIDogYm94UmVjdC5tYXhZKCkpKTsKIH0KIApAQCAtMjM2MSw3ICsyMzYxLDcgQEAgTGF5
b3V0VW5pdCBSZW5kZXJCbG9jazo6YWRqdXN0TG9naWNhbExlZgogICAgIC8vIEZJWE1FOiBTaG91
bGQgYmUgcGF0Y2hlZCB3aGVuIHN1YnBpeGVsIGxheW91dCBsYW5kcywgc2luY2UgdGhpcyBjYWxj
dWxhdGlvbiBkb2Vzbid0IGhhdmUgdG8gcGl4ZWwgc25hcAogICAgIC8vIGFueSBtb3JlIChodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk5NDYpLgogICAgIC8vIEZJWE1F
OiBUaGlzIGlzIHdyb25nIGZvciBSVEwgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03OTk0NSkuCi0gICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIHdpdGggY29s
dW1ucyBvciByZWdpb25zIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Nzk5NDIpLgorICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayB3aXRoIGNvbHVtbnMgb3Ig
ZnJhZ21lbnRzIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk5NDIp
LgogICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayB3aGVuIHRoZSBpbmxpbmUgcG9zaXRp
b24gb2YgdGhlIG9iamVjdCBpc24ndCBzZXQgYWhlYWQgb2YgdGltZS4KICAgICAvLyBGSVhNRTog
RHluYW1pYyBjaGFuZ2VzIHRvIHRoZSBmb250IG9yIHRvIHRoZSBpbmxpbmUgcG9zaXRpb24gbmVl
ZCB0byByZXN1bHQgaW4gYSBkZWVwIHJlbGF5b3V0LgogICAgIC8vIChodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk5NDQpCkBAIC0yNDAxLDcgKzI0MDEsNyBAQCBMYXlv
dXRVbml0IFJlbmRlckJsb2NrOjphZGp1c3RMb2dpY2FsUmlnCiAgICAgLy8gRklYTUU6IFNob3Vs
ZCBiZSBwYXRjaGVkIHdoZW4gc3VicGl4ZWwgbGF5b3V0IGxhbmRzLCBzaW5jZSB0aGlzIGNhbGN1
bGF0aW9uIGRvZXNuJ3QgaGF2ZSB0byBwaXhlbCBzbmFwCiAgICAgLy8gYW55IG1vcmUgKGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTk0NikuCiAgICAgLy8gRklYTUU6
IFRoaXMgaXMgd3JvbmcgZm9yIFJUTCAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc5OTQ1KS4KLSAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgd2l0aCBjb2x1
bW5zIG9yIHJlZ2lvbnMgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
OTk0MikuCisgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIHdpdGggY29sdW1ucyBvciBm
cmFnbWVudHMgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTk0Miku
CiAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIHdoZW4gdGhlIGlubGluZSBwb3NpdGlv
biBvZiB0aGUgb2JqZWN0IGlzbid0IHNldCBhaGVhZCBvZiB0aW1lLgogICAgIC8vIEZJWE1FOiBE
eW5hbWljIGNoYW5nZXMgdG8gdGhlIGZvbnQgb3IgdG8gdGhlIGlubGluZSBwb3NpdGlvbiBuZWVk
IHRvIHJlc3VsdCBpbiBhIGRlZXAgcmVsYXlvdXQuCiAgICAgLy8gKGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTk0NCkKQEAgLTI1OTQsNyArMjU5NCw3IEBAIFZpc2li
bGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50UmVzcGVjdGkKICAgICByZXR1cm4gYW5jZXN0b3It
PmNyZWF0ZVZpc2libGVQb3NpdGlvbihjaGlsZEVsZW1lbnQtPmNvbXB1dGVOb2RlSW5kZXgoKSAr
IDEsIFVQU1RSRUFNKTsKIH0KIAotVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJsb2NrOjpwb3NpdGlv
bkZvclBvaW50V2l0aElubGluZUNoaWxkcmVuKGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVu
ZGVyUmVnaW9uKikKK1Zpc2libGVQb3NpdGlvbiBSZW5kZXJCbG9jazo6cG9zaXRpb25Gb3JQb2lu
dFdpdGhJbmxpbmVDaGlsZHJlbihjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlckZyYWdt
ZW50Q29udGFpbmVyKikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKCk7CkBAIC0yNjA1LDIxICsyNjA1LDIxIEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBpc0NoaWxkSGl0VGVzdENhbmRpZGEKICAgICByZXR1cm4gYm94LmhlaWdodCgpICYmIGJv
eC5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFICYmICFib3guaXNPdXRPZkZsb3dQb3Np
dGlvbmVkKCkgJiYgIWJveC5pc0luRmxvd1JlbmRlckZsb3dUaHJlYWQoKTsKIH0KIAotLy8gVmFs
aWQgY2FuZGlkYXRlcyBpbiBhIEZsb3dUaHJlYWQgbXVzdCBiZSByZW5kZXJlZCBieSB0aGUgcmVn
aW9uLgotc3RhdGljIGlubGluZSBib29sIGlzQ2hpbGRIaXRUZXN0Q2FuZGlkYXRlKGNvbnN0IFJl
bmRlckJveCYgYm94LCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbiwgY29uc3QgTGF5b3V0UG9p
bnQmIHBvaW50KQorLy8gVmFsaWQgY2FuZGlkYXRlcyBpbiBhIEZsb3dUaHJlYWQgbXVzdCBiZSBy
ZW5kZXJlZCBieSB0aGUgZnJhZ21lbnQuCitzdGF0aWMgaW5saW5lIGJvb2wgaXNDaGlsZEhpdFRl
c3RDYW5kaWRhdGUoY29uc3QgUmVuZGVyQm94JiBib3gsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29u
dGFpbmVyKiBmcmFnbWVudCwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQogewogICAgIGlmICgh
aXNDaGlsZEhpdFRlc3RDYW5kaWRhdGUoYm94KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmICghcmVnaW9uKQorICAgIGlmICghZnJhZ21lbnQpCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIGNvbnN0IFJlbmRlckJsb2NrJiBibG9jayA9IGlzPFJlbmRlckJsb2NrPihib3gpID8gZG93
bmNhc3Q8UmVuZGVyQmxvY2s+KGJveCkgOiAqYm94LmNvbnRhaW5pbmdCbG9jaygpOwotICAgIHJl
dHVybiBibG9jay5yZWdpb25BdEJsb2NrT2Zmc2V0KHBvaW50LnkoKSkgPT0gcmVnaW9uOworICAg
IHJldHVybiBibG9jay5mcmFnbWVudEF0QmxvY2tPZmZzZXQocG9pbnQueSgpKSA9PSBmcmFnbWVu
dDsKIH0KIAotVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJsb2NrOjpwb3NpdGlvbkZvclBvaW50KGNv
bnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb24pCitWaXNp
YmxlUG9zaXRpb24gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9p
bnQmIHBvaW50LCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQpCiB7CiAg
ICAgaWYgKGlzVGFibGUoKSkKLSAgICAgICAgcmV0dXJuIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQ
b2ludChwb2ludCwgcmVnaW9uKTsKKyAgICAgICAgcmV0dXJuIFJlbmRlckJveDo6cG9zaXRpb25G
b3JQb2ludChwb2ludCwgZnJhZ21lbnQpOwogCiAgICAgaWYgKGlzUmVwbGFjZWQoKSkgewogICAg
ICAgICAvLyBGSVhNRTogVGhpcyBzZWVtcyB3cm9uZyB3aGVuIHRoZSBvYmplY3QncyB3cml0aW5n
LW1vZGUgZG9lc24ndCBtYXRjaCB0aGUgbGluZSdzIHdyaXRpbmctbW9kZS4KQEAgLTI2MzksMTQg
KzI2MzksMTQgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJsb2NrOjpwb3NpdGlvbkZvcgogICAg
ICAgICBwb2ludEluTG9naWNhbENvbnRlbnRzID0gcG9pbnRJbkxvZ2ljYWxDb250ZW50cy50cmFu
c3Bvc2VkUG9pbnQoKTsKIAogICAgIGlmIChjaGlsZHJlbklubGluZSgpKQotICAgICAgICByZXR1
cm4gcG9zaXRpb25Gb3JQb2ludFdpdGhJbmxpbmVDaGlsZHJlbihwb2ludEluTG9naWNhbENvbnRl
bnRzLCByZWdpb24pOworICAgICAgICByZXR1cm4gcG9zaXRpb25Gb3JQb2ludFdpdGhJbmxpbmVD
aGlsZHJlbihwb2ludEluTG9naWNhbENvbnRlbnRzLCBmcmFnbWVudCk7CiAKICAgICBSZW5kZXJC
b3gqIGxhc3RDYW5kaWRhdGVCb3ggPSBsYXN0Q2hpbGRCb3goKTsKIAotICAgIGlmICghcmVnaW9u
KQotICAgICAgICByZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KHBvaW50SW5Mb2dpY2FsQ29u
dGVudHMueSgpKTsKKyAgICBpZiAoIWZyYWdtZW50KQorICAgICAgICBmcmFnbWVudCA9IGZyYWdt
ZW50QXRCbG9ja09mZnNldChwb2ludEluTG9naWNhbENvbnRlbnRzLnkoKSk7CiAKLSAgICB3aGls
ZSAobGFzdENhbmRpZGF0ZUJveCAmJiAhaXNDaGlsZEhpdFRlc3RDYW5kaWRhdGUoKmxhc3RDYW5k
aWRhdGVCb3gsIHJlZ2lvbiwgcG9pbnRJbkxvZ2ljYWxDb250ZW50cykpCisgICAgd2hpbGUgKGxh
c3RDYW5kaWRhdGVCb3ggJiYgIWlzQ2hpbGRIaXRUZXN0Q2FuZGlkYXRlKCpsYXN0Q2FuZGlkYXRl
Qm94LCBmcmFnbWVudCwgcG9pbnRJbkxvZ2ljYWxDb250ZW50cykpCiAgICAgICAgIGxhc3RDYW5k
aWRhdGVCb3ggPSBsYXN0Q2FuZGlkYXRlQm94LT5wcmV2aW91c1NpYmxpbmdCb3goKTsKIAogICAg
IGJvb2wgYmxvY2tzQXJlRmxpcHBlZCA9IHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01v
ZGUoKTsKQEAgLTI2NTYsMjAgKzI2NTYsMjAgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJsb2Nr
Ojpwb3NpdGlvbkZvcgogICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uRm9yUG9pbnRSZXNwZWN0
aW5nRWRpdGluZ0JvdW5kYXJpZXMoKnRoaXMsICpsYXN0Q2FuZGlkYXRlQm94LCBwb2ludEluQ29u
dGVudHMpOwogCiAgICAgICAgIGZvciAoYXV0byogY2hpbGRCb3ggPSBmaXJzdENoaWxkQm94KCk7
IGNoaWxkQm94OyBjaGlsZEJveCA9IGNoaWxkQm94LT5uZXh0U2libGluZ0JveCgpKSB7Ci0gICAg
ICAgICAgICBpZiAoIWlzQ2hpbGRIaXRUZXN0Q2FuZGlkYXRlKCpjaGlsZEJveCwgcmVnaW9uLCBw
b2ludEluTG9naWNhbENvbnRlbnRzKSkKKyAgICAgICAgICAgIGlmICghaXNDaGlsZEhpdFRlc3RD
YW5kaWRhdGUoKmNoaWxkQm94LCBmcmFnbWVudCwgcG9pbnRJbkxvZ2ljYWxDb250ZW50cykpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBMYXlvdXRVbml0IGNoaWxkTG9n
aWNhbEJvdHRvbSA9IGxvZ2ljYWxUb3BGb3JDaGlsZCgqY2hpbGRCb3gpICsgbG9naWNhbEhlaWdo
dEZvckNoaWxkKCpjaGlsZEJveCk7CiAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2tGbG93
PihjaGlsZEJveCkpCiAgICAgICAgICAgICAgICAgY2hpbGRMb2dpY2FsQm90dG9tICs9IGRvd25j
YXN0PFJlbmRlckJsb2NrRmxvdz4oY2hpbGRCb3gpLT5sb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20o
KTsKICAgICAgICAgICAgIC8vIFdlIGhpdCBjaGlsZCBpZiBvdXIgY2xpY2sgaXMgYWJvdmUgdGhl
IGJvdHRvbSBvZiBpdHMgcGFkZGluZyBib3ggKGxpa2UgSUU2LzcgYW5kIEZGMykuCi0gICAgICAg
ICAgICBpZiAoaXNDaGlsZEhpdFRlc3RDYW5kaWRhdGUoKmNoaWxkQm94LCByZWdpb24sIHBvaW50
SW5Mb2dpY2FsQ29udGVudHMpICYmIChwb2ludEluTG9naWNhbENvbnRlbnRzLnkoKSA8IGNoaWxk
TG9naWNhbEJvdHRvbQorICAgICAgICAgICAgaWYgKGlzQ2hpbGRIaXRUZXN0Q2FuZGlkYXRlKCpj
aGlsZEJveCwgZnJhZ21lbnQsIHBvaW50SW5Mb2dpY2FsQ29udGVudHMpICYmIChwb2ludEluTG9n
aWNhbENvbnRlbnRzLnkoKSA8IGNoaWxkTG9naWNhbEJvdHRvbQogICAgICAgICAgICAgICAgIHx8
IChibG9ja3NBcmVGbGlwcGVkICYmIHBvaW50SW5Mb2dpY2FsQ29udGVudHMueSgpID09IGNoaWxk
TG9naWNhbEJvdHRvbSkpKQogICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbkZvclBvaW50
UmVzcGVjdGluZ0VkaXRpbmdCb3VuZGFyaWVzKCp0aGlzLCAqY2hpbGRCb3gsIHBvaW50SW5Db250
ZW50cyk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBXZSBvbmx5IGdldCBoZXJlIGlmIHRo
ZXJlIGFyZSBubyBoaXQgdGVzdCBjYW5kaWRhdGUgY2hpbGRyZW4gYmVsb3cgdGhlIGNsaWNrLgot
ICAgIHJldHVybiBSZW5kZXJCb3g6OnBvc2l0aW9uRm9yUG9pbnQocG9pbnQsIHJlZ2lvbik7Cisg
ICAgcmV0dXJuIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQb2ludChwb2ludCwgZnJhZ21lbnQpOwog
fQogCiB2b2lkIFJlbmRlckJsb2NrOjpvZmZzZXRGb3JDb250ZW50cyhMYXlvdXRQb2ludCYgb2Zm
c2V0KSBjb25zdApAQCAtMzM2MSw3ICszMzYxLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6
b2Zmc2V0RnJvbUxvZ2ljYQogCiAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZs
b3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKICAgICBpZiAoZmxvd1RocmVhZCkKLSAgICAgICAg
cmV0dXJuIGZsb3dUaHJlYWQtPm9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFJlZ2lvbih0aGlz
KTsKKyAgICAgICAgcmV0dXJuIGZsb3dUaHJlYWQtPm9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJz
dEZyYWdtZW50KHRoaXMpOwogCiAgICAgaWYgKGxheW91dFN0YXRlKSB7CiAgICAgICAgIEFTU0VS
VChsYXlvdXRTdGF0ZS0+bV9yZW5kZXJlciA9PSB0aGlzKTsKQEAgLTMzNzQsMjcgKzMzNzQsMjcg
QEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6b2Zmc2V0RnJvbUxvZ2ljYQogICAgIHJldHVybiAw
OwogfQogCi1SZW5kZXJSZWdpb24qIFJlbmRlckJsb2NrOjpyZWdpb25BdEJsb2NrT2Zmc2V0KExh
eW91dFVuaXQgYmxvY2tPZmZzZXQpIGNvbnN0CitSZW5kZXJGcmFnbWVudENvbnRhaW5lciogUmVu
ZGVyQmxvY2s6OmZyYWdtZW50QXRCbG9ja09mZnNldChMYXlvdXRVbml0IGJsb2NrT2Zmc2V0KSBj
b25zdAogewogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29u
dGFpbmluZ0Jsb2NrKCk7Ci0gICAgaWYgKCFmbG93VGhyZWFkIHx8ICFmbG93VGhyZWFkLT5oYXNW
YWxpZFJlZ2lvbkluZm8oKSkKKyAgICBpZiAoIWZsb3dUaHJlYWQgfHwgIWZsb3dUaHJlYWQtPmhh
c1ZhbGlkRnJhZ21lbnRJbmZvKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGZs
b3dUaHJlYWQtPnJlZ2lvbkF0QmxvY2tPZmZzZXQodGhpcywgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BP
ZkZpcnN0UGFnZSgpICsgYmxvY2tPZmZzZXQsIHRydWUpOworICAgIHJldHVybiBmbG93VGhyZWFk
LT5mcmFnbWVudEF0QmxvY2tPZmZzZXQodGhpcywgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0
UGFnZSgpICsgYmxvY2tPZmZzZXQsIHRydWUpOwogfQogCi1zdGF0aWMgYm9vbCBjYW5Db21wdXRl
UmVnaW9uUmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQmxvY2smIHBhcmVudEJsb2NrLCBjb25zdCBS
ZW5kZXJCb3gmIGNoaWxkQm94LCBjb25zdCBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkQ29u
dGFpbmluZ0Jsb2NrKQorc3RhdGljIGJvb2wgY2FuQ29tcHV0ZUZyYWdtZW50UmFuZ2VGb3JCb3go
Y29uc3QgUmVuZGVyQmxvY2smIHBhcmVudEJsb2NrLCBjb25zdCBSZW5kZXJCb3gmIGNoaWxkQm94
LCBjb25zdCBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKQogewog
ICAgIGlmICghZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKCFmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrLT5oYXNSZWdpb25zKCkpCisg
ICAgaWYgKCFmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrLT5oYXNGcmFnbWVudHMoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFjaGlsZEJveC5jYW5IYXZlT3V0c2lkZVJlZ2lv
blJhbmdlKCkpCisgICAgaWYgKCFjaGlsZEJveC5jYW5IYXZlT3V0c2lkZUZyYWdtZW50UmFuZ2Uo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGZsb3dUaHJlYWRDb250YWlu
aW5nQmxvY2stPmhhc0NhY2hlZFJlZ2lvblJhbmdlRm9yQm94KHBhcmVudEJsb2NrKTsKKyAgICBy
ZXR1cm4gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jay0+aGFzQ2FjaGVkRnJhZ21lbnRSYW5nZUZv
ckJveChwYXJlbnRCbG9jayk7CiB9CiAKIGJvb2wgUmVuZGVyQmxvY2s6OmNoaWxkQm94SXNVbnNw
bGl0dGFibGVGb3JGcmFnbWVudGF0aW9uKGNvbnN0IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0CkBA
IC0zNDA3LDY3ICszNDA3LDY3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmNoaWxkQm94SXNVbnNwbGl0
dGFibGUKICAgICAgICAgfHwgKGNoZWNrUGFnZUJyZWFrcyAmJiBjaGlsZC5zdHlsZSgpLmJyZWFr
SW5zaWRlKCkgPT0gQXZvaWRQYWdlQnJlYWtJbnNpZGUpOwogfQogCi12b2lkIFJlbmRlckJsb2Nr
Ojpjb21wdXRlUmVnaW9uUmFuZ2VGb3JCb3hDaGlsZChjb25zdCBSZW5kZXJCb3gmIGJveCkgY29u
c3QKK3ZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVGcmFnbWVudFJhbmdlRm9yQm94Q2hpbGQoY29u
c3QgUmVuZGVyQm94JiBib3gpIGNvbnN0CiB7CiAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1Ro
cmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICBBU1NFUlQoY2FuQ29tcHV0
ZVJlZ2lvblJhbmdlRm9yQm94KCp0aGlzLCBib3gsIGZsb3dUaHJlYWQpKTsKKyAgICBBU1NFUlQo
Y2FuQ29tcHV0ZUZyYWdtZW50UmFuZ2VGb3JCb3goKnRoaXMsIGJveCwgZmxvd1RocmVhZCkpOwog
Ci0gICAgUmVuZGVyUmVnaW9uKiBzdGFydFJlZ2lvbjsKLSAgICBSZW5kZXJSZWdpb24qIGVuZFJl
Z2lvbjsKLSAgICBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFJlZ2lvbiA9
IGJveC5vZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCk7CisgICAgUmVuZGVyRnJhZ21l
bnRDb250YWluZXIqIHN0YXJ0RnJhZ21lbnQ7CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIq
IGVuZEZyYWdtZW50OworICAgIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0
RnJhZ21lbnQgPSBib3gub2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpOwogICAgIGlm
IChjaGlsZEJveElzVW5zcGxpdHRhYmxlRm9yRnJhZ21lbnRhdGlvbihib3gpKQotICAgICAgICBz
dGFydFJlZ2lvbiA9IGVuZFJlZ2lvbiA9IGZsb3dUaHJlYWQtPnJlZ2lvbkF0QmxvY2tPZmZzZXQo
dGhpcywgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uLCB0cnVlKTsKKyAgICAgICAg
c3RhcnRGcmFnbWVudCA9IGVuZEZyYWdtZW50ID0gZmxvd1RocmVhZC0+ZnJhZ21lbnRBdEJsb2Nr
T2Zmc2V0KHRoaXMsIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdEZyYWdtZW50LCB0cnVlKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgc3RhcnRSZWdpb24gPSBmbG93VGhyZWFkLT5yZWdpb25BdEJs
b2NrT2Zmc2V0KHRoaXMsIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFJlZ2lvbiwgdHJ1ZSk7
Ci0gICAgICAgIGVuZFJlZ2lvbiA9IGZsb3dUaHJlYWQtPnJlZ2lvbkF0QmxvY2tPZmZzZXQodGhp
cywgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uICsgbG9naWNhbEhlaWdodEZvckNo
aWxkKGJveCksIHRydWUpOworICAgICAgICBzdGFydEZyYWdtZW50ID0gZmxvd1RocmVhZC0+ZnJh
Z21lbnRBdEJsb2NrT2Zmc2V0KHRoaXMsIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdEZyYWdt
ZW50LCB0cnVlKTsKKyAgICAgICAgZW5kRnJhZ21lbnQgPSBmbG93VGhyZWFkLT5mcmFnbWVudEF0
QmxvY2tPZmZzZXQodGhpcywgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0RnJhZ21lbnQgKyBs
b2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoYm94KSwgdHJ1ZSk7CiAgICAgfQogCi0gICAgZmxvd1RocmVh
ZC0+c2V0UmVnaW9uUmFuZ2VGb3JCb3goYm94LCBzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKTsKKyAg
ICBmbG93VGhyZWFkLT5zZXRGcmFnbWVudFJhbmdlRm9yQm94KGJveCwgc3RhcnRGcmFnbWVudCwg
ZW5kRnJhZ21lbnQpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjplc3RpbWF0ZVJlZ2lvblJhbmdl
Rm9yQm94Q2hpbGQoY29uc3QgUmVuZGVyQm94JiBib3gpIGNvbnN0Cit2b2lkIFJlbmRlckJsb2Nr
Ojplc3RpbWF0ZUZyYWdtZW50UmFuZ2VGb3JCb3hDaGlsZChjb25zdCBSZW5kZXJCb3gmIGJveCkg
Y29uc3QKIHsKICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENv
bnRhaW5pbmdCbG9jaygpOwotICAgIGlmICghY2FuQ29tcHV0ZVJlZ2lvblJhbmdlRm9yQm94KCp0
aGlzLCBib3gsIGZsb3dUaHJlYWQpKQorICAgIGlmICghY2FuQ29tcHV0ZUZyYWdtZW50UmFuZ2VG
b3JCb3goKnRoaXMsIGJveCwgZmxvd1RocmVhZCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChjaGlsZEJveElzVW5zcGxpdHRhYmxlRm9yRnJhZ21lbnRhdGlvbihib3gpKSB7Ci0gICAgICAg
IGNvbXB1dGVSZWdpb25SYW5nZUZvckJveENoaWxkKGJveCk7CisgICAgICAgIGNvbXB1dGVGcmFn
bWVudFJhbmdlRm9yQm94Q2hpbGQoYm94KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGF1dG8gZXN0aW1hdGVkVmFsdWVzID0gYm94LmNvbXB1dGVMb2dpY2FsSGVpZ2h0KFJlbmRlckZs
b3dUaHJlYWQ6Om1heExvZ2ljYWxIZWlnaHQoKSwgbG9naWNhbFRvcEZvckNoaWxkKGJveCkpOwot
ICAgIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uID0gYm94Lm9m
ZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKTsKLSAgICBSZW5kZXJSZWdpb24qIHN0YXJ0
UmVnaW9uID0gZmxvd1RocmVhZC0+cmVnaW9uQXRCbG9ja09mZnNldCh0aGlzLCBvZmZzZXRGcm9t
TG9naWNhbFRvcE9mRmlyc3RSZWdpb24sIHRydWUpOwotICAgIFJlbmRlclJlZ2lvbiogZW5kUmVn
aW9uID0gZmxvd1RocmVhZC0+cmVnaW9uQXRCbG9ja09mZnNldCh0aGlzLCBvZmZzZXRGcm9tTG9n
aWNhbFRvcE9mRmlyc3RSZWdpb24gKyBlc3RpbWF0ZWRWYWx1ZXMubV9leHRlbnQsIHRydWUpOwor
ICAgIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0RnJhZ21lbnQgPSBib3gu
b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpOworICAgIFJlbmRlckZyYWdtZW50Q29u
dGFpbmVyKiBzdGFydEZyYWdtZW50ID0gZmxvd1RocmVhZC0+ZnJhZ21lbnRBdEJsb2NrT2Zmc2V0
KHRoaXMsIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdEZyYWdtZW50LCB0cnVlKTsKKyAgICBS
ZW5kZXJGcmFnbWVudENvbnRhaW5lciogZW5kRnJhZ21lbnQgPSBmbG93VGhyZWFkLT5mcmFnbWVu
dEF0QmxvY2tPZmZzZXQodGhpcywgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0RnJhZ21lbnQg
KyBlc3RpbWF0ZWRWYWx1ZXMubV9leHRlbnQsIHRydWUpOwogCi0gICAgZmxvd1RocmVhZC0+c2V0
UmVnaW9uUmFuZ2VGb3JCb3goYm94LCBzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKTsKKyAgICBmbG93
VGhyZWFkLT5zZXRGcmFnbWVudFJhbmdlRm9yQm94KGJveCwgc3RhcnRGcmFnbWVudCwgZW5kRnJh
Z21lbnQpOwogfQogCi1ib29sIFJlbmRlckJsb2NrOjp1cGRhdGVSZWdpb25SYW5nZUZvckJveENo
aWxkKGNvbnN0IFJlbmRlckJveCYgYm94KSBjb25zdAorYm9vbCBSZW5kZXJCbG9jazo6dXBkYXRl
RnJhZ21lbnRSYW5nZUZvckJveENoaWxkKGNvbnN0IFJlbmRlckJveCYgYm94KSBjb25zdAogewog
ICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Js
b2NrKCk7Ci0gICAgaWYgKCFjYW5Db21wdXRlUmVnaW9uUmFuZ2VGb3JCb3goKnRoaXMsIGJveCwg
Zmxvd1RocmVhZCkpCisgICAgaWYgKCFjYW5Db21wdXRlRnJhZ21lbnRSYW5nZUZvckJveCgqdGhp
cywgYm94LCBmbG93VGhyZWFkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVuZGVy
UmVnaW9uKiBzdGFydFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgUmVuZGVyUmVnaW9uKiBlbmRSZWdp
b24gPSBudWxscHRyOwotICAgIGZsb3dUaHJlYWQtPmdldFJlZ2lvblJhbmdlRm9yQm94KCZib3gs
IHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pOworICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBz
dGFydEZyYWdtZW50ID0gbnVsbHB0cjsKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZW5k
RnJhZ21lbnQgPSBudWxscHRyOworICAgIGZsb3dUaHJlYWQtPmdldEZyYWdtZW50UmFuZ2VGb3JC
b3goJmJveCwgc3RhcnRGcmFnbWVudCwgZW5kRnJhZ21lbnQpOwogCi0gICAgY29tcHV0ZVJlZ2lv
blJhbmdlRm9yQm94Q2hpbGQoYm94KTsKKyAgICBjb21wdXRlRnJhZ21lbnRSYW5nZUZvckJveENo
aWxkKGJveCk7CiAKLSAgICBSZW5kZXJSZWdpb24qIG5ld1N0YXJ0UmVnaW9uID0gbnVsbHB0cjsK
LSAgICBSZW5kZXJSZWdpb24qIG5ld0VuZFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgZmxvd1RocmVh
ZC0+Z2V0UmVnaW9uUmFuZ2VGb3JCb3goJmJveCwgbmV3U3RhcnRSZWdpb24sIG5ld0VuZFJlZ2lv
bik7CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIG5ld1N0YXJ0RnJhZ21lbnQgPSBudWxs
cHRyOworICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBuZXdFbmRGcmFnbWVudCA9IG51bGxw
dHI7CisgICAgZmxvd1RocmVhZC0+Z2V0RnJhZ21lbnRSYW5nZUZvckJveCgmYm94LCBuZXdTdGFy
dEZyYWdtZW50LCBuZXdFbmRGcmFnbWVudCk7CiAKIAotICAgIC8vIENoYW5naW5nIHRoZSBzdGFy
dCByZWdpb24gbWVhbnMgd2Ugc2hpZnQgZXZlcnl0aGluZyBhbmQgYSByZWxheW91dCBpcyBuZWVk
ZWQuCi0gICAgaWYgKG5ld1N0YXJ0UmVnaW9uICE9IHN0YXJ0UmVnaW9uKQorICAgIC8vIENoYW5n
aW5nIHRoZSBzdGFydCBmcmFnbWVudCBtZWFucyB3ZSBzaGlmdCBldmVyeXRoaW5nIGFuZCBhIHJl
bGF5b3V0IGlzIG5lZWRlZC4KKyAgICBpZiAobmV3U3RhcnRGcmFnbWVudCAhPSBzdGFydEZyYWdt
ZW50KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIC8vIFRoZSByZWdpb24gcmFuZ2Ugb2Yg
dGhlIGJveCBoYXMgY2hhbmdlZC4gU29tZSBib3hlcyAoZS5nIGZsb2F0cykgbWF5IGhhdmUgYmVl
biBwb3NpdGlvbmVkIGFzc3VtaW5nCisgICAgLy8gVGhlIGZyYWdtZW50IHJhbmdlIG9mIHRoZSBi
b3ggaGFzIGNoYW5nZWQuIFNvbWUgYm94ZXMgKGUuZyBmbG9hdHMpIG1heSBoYXZlIGJlZW4gcG9z
aXRpb25lZCBhc3N1bWluZwogICAgIC8vIGEgZGlmZmVyZW50IHJhbmdlLgotICAgIGlmIChib3gu
bmVlZHNMYXlvdXRBZnRlclJlZ2lvblJhbmdlQ2hhbmdlKCkgJiYgbmV3RW5kUmVnaW9uICE9IGVu
ZFJlZ2lvbikKKyAgICBpZiAoYm94Lm5lZWRzTGF5b3V0QWZ0ZXJGcmFnbWVudFJhbmdlQ2hhbmdl
KCkgJiYgbmV3RW5kRnJhZ21lbnQgIT0gZW5kRnJhZ21lbnQpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgJKHJldmlzaW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsMzUgKzEyMiwzNSBAQCBwdWJsaWM6
CiAgICAgLy8gRklYTUUtQkxPQ0tGTE9XOiBSZW1vdmUgdmlydHVhbGl6YWlvbiB3aGVuIGFsbCBv
ZiB0aGUgbGluZSBsYXlvdXQgY29kZSBoYXMgYmVlbiBtb3ZlZCBvdXQgb2YgUmVuZGVyQmxvY2sK
ICAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnNGbG9hdHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogCi0gICAgLy8gVmVyc2lvbnMgdGhhdCBjYW4gY29tcHV0ZSBsaW5lIG9mZnNldHMgd2l0aCB0
aGUgcmVnaW9uIGFuZCBwYWdlIG9mZnNldCBwYXNzZWQgaW4uIFVzZWQgZm9yIHNwZWVkIHRvIGF2
b2lkIGhhdmluZyB0bwotICAgIC8vIGNvbXB1dGUgdGhlIHJlZ2lvbiBhbGwgb3ZlciBhZ2FpbiB3
aGVuIHlvdSBhbHJlYWR5IGtub3cgaXQuCi0gICAgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2Fs
V2lkdGhGb3JMaW5lSW5SZWdpb24oTGF5b3V0VW5pdCBwb3NpdGlvbiwgSW5kZW50VGV4dE9yTm90
IHNob3VsZEluZGVudFRleHQsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IGxvZ2lj
YWxIZWlnaHQgPSAwKSBjb25zdAorICAgIC8vIFZlcnNpb25zIHRoYXQgY2FuIGNvbXB1dGUgbGlu
ZSBvZmZzZXRzIHdpdGggdGhlIGZyYWdtZW50IGFuZCBwYWdlIG9mZnNldCBwYXNzZWQgaW4uIFVz
ZWQgZm9yIHNwZWVkIHRvIGF2b2lkIGhhdmluZyB0bworICAgIC8vIGNvbXB1dGUgdGhlIGZyYWdt
ZW50IGFsbCBvdmVyIGFnYWluIHdoZW4geW91IGFscmVhZHkga25vdyBpdC4KKyAgICBMYXlvdXRV
bml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmVJbkZyYWdtZW50KExheW91dFVuaXQgcG9z
aXRpb24sIEluZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0LCBSZW5kZXJGcmFnbWVudENv
bnRhaW5lciogZnJhZ21lbnQsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDApIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gc3RkOjptYXg8TGF5b3V0VW5pdD4oMCwgbG9naWNhbFJpZ2h0
T2Zmc2V0Rm9yTGluZUluUmVnaW9uKHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCByZWdpb24s
IGxvZ2ljYWxIZWlnaHQpCi0gICAgICAgICAgICAtIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZUlu
UmVnaW9uKHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCByZWdpb24sIGxvZ2ljYWxIZWlnaHQp
KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIGxvZ2ljYWxSaWdodE9m
ZnNldEZvckxpbmVJbkZyYWdtZW50KHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCBmcmFnbWVu
dCwgbG9naWNhbEhlaWdodCkKKyAgICAgICAgICAgIC0gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5l
SW5GcmFnbWVudChwb3NpdGlvbiwgc2hvdWxkSW5kZW50VGV4dCwgZnJhZ21lbnQsIGxvZ2ljYWxI
ZWlnaHQpKTsKICAgICB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5l
SW5SZWdpb24oTGF5b3V0VW5pdCBwb3NpdGlvbiwgSW5kZW50VGV4dE9yTm90IHNob3VsZEluZGVu
dFRleHQsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAw
KSBjb25zdAorICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZUluRnJhZ21l
bnQoTGF5b3V0VW5pdCBwb3NpdGlvbiwgSW5kZW50VGV4dE9yTm90IHNob3VsZEluZGVudFRleHQs
IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVp
Z2h0ID0gMCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBsb2dpY2FsUmlnaHRPZmZzZXRG
b3JMaW5lKHBvc2l0aW9uLCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbiksIHNo
b3VsZEluZGVudFRleHQsIGxvZ2ljYWxIZWlnaHQpOworICAgICAgICByZXR1cm4gbG9naWNhbFJp
Z2h0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChm
cmFnbWVudCksIHNob3VsZEluZGVudFRleHQsIGxvZ2ljYWxIZWlnaHQpOwogICAgIH0KLSAgICBM
YXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZUluUmVnaW9uKExheW91dFVuaXQgcG9z
aXRpb24sIEluZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0LCBSZW5kZXJSZWdpb24qIHJl
Z2lvbiwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCkgY29uc3QKKyAgICBMYXlvdXRVbml0
IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZUluRnJhZ21lbnQoTGF5b3V0VW5pdCBwb3NpdGlvbiwg
SW5kZW50VGV4dE9yTm90IHNob3VsZEluZGVudFRleHQsIFJlbmRlckZyYWdtZW50Q29udGFpbmVy
KiBmcmFnbWVudCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIHJldHVybiBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUocG9zaXRpb24sIGxvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24pLCBzaG91bGRJbmRlbnRUZXh0LCBsb2dpY2FsSGVp
Z2h0KTsKKyAgICAgICAgcmV0dXJuIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwg
bG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KGZyYWdtZW50KSwgc2hvdWxkSW5kZW50VGV4dCwg
bG9naWNhbEhlaWdodCk7CiAgICAgfQotICAgIExheW91dFVuaXQgc3RhcnRPZmZzZXRGb3JMaW5l
SW5SZWdpb24oTGF5b3V0VW5pdCBwb3NpdGlvbiwgSW5kZW50VGV4dE9yTm90IHNob3VsZEluZGVu
dFRleHQsIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAw
KSBjb25zdAorICAgIExheW91dFVuaXQgc3RhcnRPZmZzZXRGb3JMaW5lSW5GcmFnbWVudChMYXlv
dXRVbml0IHBvc2l0aW9uLCBJbmRlbnRUZXh0T3JOb3Qgc2hvdWxkSW5kZW50VGV4dCwgUmVuZGVy
RnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAw
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpID8gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lSW5SZWdpb24ocG9zaXRpb24sIHNob3Vs
ZEluZGVudFRleHQsIHJlZ2lvbiwgbG9naWNhbEhlaWdodCkKLSAgICAgICAgICAgIDogbG9naWNh
bFdpZHRoKCkgLSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lSW5SZWdpb24ocG9zaXRpb24sIHNo
b3VsZEluZGVudFRleHQsIHJlZ2lvbiwgbG9naWNhbEhlaWdodCk7CisgICAgICAgIHJldHVybiBz
dHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGlu
ZUluRnJhZ21lbnQocG9zaXRpb24sIHNob3VsZEluZGVudFRleHQsIGZyYWdtZW50LCBsb2dpY2Fs
SGVpZ2h0KQorICAgICAgICAgICAgOiBsb2dpY2FsV2lkdGgoKSAtIGxvZ2ljYWxSaWdodE9mZnNl
dEZvckxpbmVJbkZyYWdtZW50KHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCBmcmFnbWVudCwg
bG9naWNhbEhlaWdodCk7CiAgICAgfQotICAgIExheW91dFVuaXQgZW5kT2Zmc2V0Rm9yTGluZUlu
UmVnaW9uKExheW91dFVuaXQgcG9zaXRpb24sIEluZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRU
ZXh0LCBSZW5kZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCkg
Y29uc3QKKyAgICBMYXlvdXRVbml0IGVuZE9mZnNldEZvckxpbmVJbkZyYWdtZW50KExheW91dFVu
aXQgcG9zaXRpb24sIEluZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0LCBSZW5kZXJGcmFn
bWVudENvbnRhaW5lciogZnJhZ21lbnQsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IDApIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpID8gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lSW5SZWdpb24ocG9zaXRpb24sIHNob3VsZElu
ZGVudFRleHQsIHJlZ2lvbiwgbG9naWNhbEhlaWdodCkKLSAgICAgICAgICAgIDogbG9naWNhbFdp
ZHRoKCkgLSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lSW5SZWdpb24ocG9zaXRpb24sIHNob3Vs
ZEluZGVudFRleHQsIHJlZ2lvbiwgbG9naWNhbEhlaWdodCk7CisgICAgICAgIHJldHVybiAhc3R5
bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmVJ
bkZyYWdtZW50KHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCBmcmFnbWVudCwgbG9naWNhbEhl
aWdodCkKKyAgICAgICAgICAgIDogbG9naWNhbFdpZHRoKCkgLSBsb2dpY2FsUmlnaHRPZmZzZXRG
b3JMaW5lSW5GcmFnbWVudChwb3NpdGlvbiwgc2hvdWxkSW5kZW50VGV4dCwgZnJhZ21lbnQsIGxv
Z2ljYWxIZWlnaHQpOwogICAgIH0KIAogICAgIExheW91dFVuaXQgYXZhaWxhYmxlTG9naWNhbFdp
ZHRoRm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9uLCBJbmRlbnRUZXh0T3JOb3Qgc2hvdWxkSW5k
ZW50VGV4dCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gMCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lSW5SZWdpb24ocG9zaXRpb24s
IHNob3VsZEluZGVudFRleHQsIHJlZ2lvbkF0QmxvY2tPZmZzZXQocG9zaXRpb24pLCBsb2dpY2Fs
SGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmVJbkZy
YWdtZW50KHBvc2l0aW9uLCBzaG91bGRJbmRlbnRUZXh0LCBmcmFnbWVudEF0QmxvY2tPZmZzZXQo
cG9zaXRpb24pLCBsb2dpY2FsSGVpZ2h0KTsKICAgICB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
UmlnaHRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIEluZGVudFRleHRPck5vdCBz
aG91bGRJbmRlbnRUZXh0LCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwKSBjb25zdAogICAg
IHsKQEAgLTE3Myw3ICsxNzMsNyBAQCBwdWJsaWM6CiAKICAgICBMYXlvdXRVbml0IHRleHRJbmRl
bnRPZmZzZXQoKSBjb25zdDsKIAotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50
KGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyUmVnaW9uKikgb3ZlcnJpZGU7CisgICAg
VmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25z
dCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciopIG92ZXJyaWRlOwogCiAgICAgR2FwUmVjdHMgc2Vs
ZWN0aW9uR2FwUmVjdHNGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJl
cGFpbnRDb250YWluZXIpOwogICAgIExheW91dFJlY3QgbG9naWNhbExlZnRTZWxlY3Rpb25HYXAo
UmVuZGVyQmxvY2smIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0UG9pbnQmIHJvb3RCbG9ja1BoeXNp
Y2FsUG9zaXRpb24sIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCkBAIC0y
NjcsMzkgKzI2NywzOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYmFyc0No
YW5nZWQoYm9vbCAvKmhvcml6b250YWxTY3JvbGxiYXJDaGFuZ2VkKi8sIGJvb2wgLyp2ZXJ0aWNh
bFNjcm9sbGJhckNoYW5nZWQqLykgeyB9CiAKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zm
c2V0Rm9yQ29udGVudChSZW5kZXJSZWdpb24qKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGxvZ2lj
YWxSaWdodE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKikgY29uc3Q7Ci0gICAgTGF5b3V0
VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JDb250ZW50KFJlbmRlclJlZ2lvbiogcmVnaW9u
KSBjb25zdAorICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KFJlbmRl
ckZyYWdtZW50Q29udGFpbmVyKikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRP
ZmZzZXRGb3JDb250ZW50KFJlbmRlckZyYWdtZW50Q29udGFpbmVyKikgY29uc3Q7CisgICAgTGF5
b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JDb250ZW50KFJlbmRlckZyYWdtZW50Q29u
dGFpbmVyKiBmcmFnbWVudCkgY29uc3QKICAgICB7IAotICAgICAgICByZXR1cm4gc3RkOjptYXg8
TGF5b3V0VW5pdD4oMCwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24pIC0gbG9n
aWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbikpOworICAgICAgICByZXR1cm4gc3RkOjpt
YXg8TGF5b3V0VW5pdD4oMCwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChmcmFnbWVudCkg
LSBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoZnJhZ21lbnQpKTsKICAgICB9Ci0gICAgTGF5
b3V0VW5pdCBzdGFydE9mZnNldEZvckNvbnRlbnQoUmVuZGVyUmVnaW9uKiByZWdpb24pIGNvbnN0
CisgICAgTGF5b3V0VW5pdCBzdGFydE9mZnNldEZvckNvbnRlbnQoUmVuZGVyRnJhZ21lbnRDb250
YWluZXIqIGZyYWdtZW50KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHJlZ2lv
bikgOiBsb2dpY2FsV2lkdGgoKSAtIGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQocmVnaW9u
KTsKKyAgICAgICAgcmV0dXJuIHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbG9n
aWNhbExlZnRPZmZzZXRGb3JDb250ZW50KGZyYWdtZW50KSA6IGxvZ2ljYWxXaWR0aCgpIC0gbG9n
aWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChmcmFnbWVudCk7CiAgICAgfQotICAgIExheW91dFVu
aXQgZW5kT2Zmc2V0Rm9yQ29udGVudChSZW5kZXJSZWdpb24qIHJlZ2lvbikgY29uc3QKKyAgICBM
YXlvdXRVbml0IGVuZE9mZnNldEZvckNvbnRlbnQoUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZy
YWdtZW50KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuICFzdHlsZSgpLmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSA/IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudChyZWdpb24pIDogbG9n
aWNhbFdpZHRoKCkgLSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KHJlZ2lvbik7CisgICAg
ICAgIHJldHVybiAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBsb2dpY2FsTGVm
dE9mZnNldEZvckNvbnRlbnQoZnJhZ21lbnQpIDogbG9naWNhbFdpZHRoKCkgLSBsb2dpY2FsUmln
aHRPZmZzZXRGb3JDb250ZW50KGZyYWdtZW50KTsKICAgICB9CiAgICAgTGF5b3V0VW5pdCBsb2dp
Y2FsTGVmdE9mZnNldEZvckNvbnRlbnQoTGF5b3V0VW5pdCBibG9ja09mZnNldCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQocmVnaW9uQXRC
bG9ja09mZnNldChibG9ja09mZnNldCkpOworICAgICAgICByZXR1cm4gbG9naWNhbExlZnRPZmZz
ZXRGb3JDb250ZW50KGZyYWdtZW50QXRCbG9ja09mZnNldChibG9ja09mZnNldCkpOwogICAgIH0K
ICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQoTGF5b3V0VW5pdCBi
bG9ja09mZnNldCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBsb2dpY2FsUmlnaHRPZmZz
ZXRGb3JDb250ZW50KHJlZ2lvbkF0QmxvY2tPZmZzZXQoYmxvY2tPZmZzZXQpKTsKKyAgICAgICAg
cmV0dXJuIGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQoZnJhZ21lbnRBdEJsb2NrT2Zmc2V0
KGJsb2NrT2Zmc2V0KSk7CiAgICAgfQogICAgIExheW91dFVuaXQgYXZhaWxhYmxlTG9naWNhbFdp
ZHRoRm9yQ29udGVudChMYXlvdXRVbml0IGJsb2NrT2Zmc2V0KSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckNvbnRlbnQocmVnaW9uQXRCbG9ja09m
ZnNldChibG9ja09mZnNldCkpOworICAgICAgICByZXR1cm4gYXZhaWxhYmxlTG9naWNhbFdpZHRo
Rm9yQ29udGVudChmcmFnbWVudEF0QmxvY2tPZmZzZXQoYmxvY2tPZmZzZXQpKTsKICAgICB9CiAg
ICAgTGF5b3V0VW5pdCBzdGFydE9mZnNldEZvckNvbnRlbnQoTGF5b3V0VW5pdCBibG9ja09mZnNl
dCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGFydE9mZnNldEZvckNvbnRlbnQocmVn
aW9uQXRCbG9ja09mZnNldChibG9ja09mZnNldCkpOworICAgICAgICByZXR1cm4gc3RhcnRPZmZz
ZXRGb3JDb250ZW50KGZyYWdtZW50QXRCbG9ja09mZnNldChibG9ja09mZnNldCkpOwogICAgIH0K
ICAgICBMYXlvdXRVbml0IGVuZE9mZnNldEZvckNvbnRlbnQoTGF5b3V0VW5pdCBibG9ja09mZnNl
dCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBlbmRPZmZzZXRGb3JDb250ZW50KHJlZ2lv
bkF0QmxvY2tPZmZzZXQoYmxvY2tPZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIGVuZE9mZnNldEZv
ckNvbnRlbnQoZnJhZ21lbnRBdEJsb2NrT2Zmc2V0KGJsb2NrT2Zmc2V0KSk7CiAgICAgfQogICAg
IExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KCkgY29uc3QgeyByZXR1cm4g
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkg
OiBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsgfQogICAgIExheW91dFVuaXQgbG9naWNhbFJp
Z2h0T2Zmc2V0Rm9yQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9y
Q29udGVudCgpICsgYXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7IH0KQEAgLTMwOSw3ICszMDksNyBA
QCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldChSZW5k
ZXJCbG9jayYgcm9vdEJsb2NrLCBMYXlvdXRVbml0IHBvc2l0aW9uLCBjb25zdCBMb2dpY2FsU2Vs
ZWN0aW9uT2Zmc2V0Q2FjaGVzJik7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRTZWxlY3Rp
b25PZmZzZXQoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgTGF5b3V0VW5pdCBwb3NpdGlvbiwgY29u
c3QgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcyYpOwogCi0gICAgTGF5b3V0VW5pdCBjb21w
dXRlU3RhcnRQb3NpdGlvbkRlbHRhRm9yQ2hpbGRBdm9pZGluZ0Zsb2F0cyhjb25zdCBSZW5kZXJC
b3gmIGNoaWxkLCBMYXlvdXRVbml0IGNoaWxkTWFyZ2luU3RhcnQsIFJlbmRlclJlZ2lvbiogPSAw
KTsKKyAgICBMYXlvdXRVbml0IGNvbXB1dGVTdGFydFBvc2l0aW9uRGVsdGFGb3JDaGlsZEF2b2lk
aW5nRmxvYXRzKGNvbnN0IFJlbmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgY2hpbGRNYXJnaW5T
dGFydCwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqID0gMCk7CiAKICNpZm5kZWYgTkRFQlVHCiAg
ICAgdm9pZCBjaGVja1Bvc2l0aW9uZWRPYmplY3RzTmVlZExheW91dCgpOwpAQCAtNDE0LDEwICs0
MTQsMTAgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPExh
eW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFkZGl0aW9uYWxPZmZzZXQsIGNvbnN0IFJl
bmRlckxheWVyTW9kZWxPYmplY3QqIHBhaW50Q29udGFpbmVyID0gMCkgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzRm9ySW5saW5lQ2hpbGRyZW4oVmVjdG9yPExh
eW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFkZGl0aW9uYWxPZmZzZXQsIGNvbnN0IFJl
bmRlckxheWVyTW9kZWxPYmplY3QqIHBhaW50Q29udGFpbmVyKTsKIAotICAgIHZvaWQgY29tcHV0
ZVJlZ2lvblJhbmdlRm9yQm94Q2hpbGQoY29uc3QgUmVuZGVyQm94JikgY29uc3Q7CisgICAgdm9p
ZCBjb21wdXRlRnJhZ21lbnRSYW5nZUZvckJveENoaWxkKGNvbnN0IFJlbmRlckJveCYpIGNvbnN0
OwogCi0gICAgdm9pZCBlc3RpbWF0ZVJlZ2lvblJhbmdlRm9yQm94Q2hpbGQoY29uc3QgUmVuZGVy
Qm94JikgY29uc3Q7Ci0gICAgYm9vbCB1cGRhdGVSZWdpb25SYW5nZUZvckJveENoaWxkKGNvbnN0
IFJlbmRlckJveCYpIGNvbnN0OworICAgIHZvaWQgZXN0aW1hdGVGcmFnbWVudFJhbmdlRm9yQm94
Q2hpbGQoY29uc3QgUmVuZGVyQm94JikgY29uc3Q7CisgICAgYm9vbCB1cGRhdGVGcmFnbWVudFJh
bmdlRm9yQm94Q2hpbGQoY29uc3QgUmVuZGVyQm94JikgY29uc3Q7CiAKICAgICB2b2lkIHVwZGF0
ZUJsb2NrQ2hpbGREaXJ0eUJpdHNCZWZvcmVMYXlvdXQoYm9vbCByZWxheW91dENoaWxkcmVuLCBS
ZW5kZXJCb3gmKTsKIApAQCAtNTA2LDcgKzUwNiw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0UmVj
dCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0
VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCkgZmluYWw7CiAgICAgCiAgICAgLy8gRklY
TUUtQkxPQ0tGTE9XOiBSZW1vdmUgdmlydHVhbGl6YWlvbiB3aGVuIGFsbCBjYWxsZXJzIGhhdmUg
bW92ZWQgdG8gUmVuZGVyQmxvY2tGbG93Ci0gICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9z
aXRpb25Gb3JQb2ludFdpdGhJbmxpbmVDaGlsZHJlbihjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0
IFJlbmRlclJlZ2lvbiopOworICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9y
UG9pbnRXaXRoSW5saW5lQ2hpbGRyZW4oY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJG
cmFnbWVudENvbnRhaW5lciopOwogCiAgICAgUmVuZGVyUHRyPFJlbmRlckJsb2NrPiBjbG9uZSgp
IGNvbnN0OwogICAgIFJlbmRlckJsb2NrKiBjb250aW51YXRpb25CZWZvcmUoUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCk7CkBAIC01MjYsNyArNTI2LDcgQEAgcHJvdGVjdGVkOgogICAgIAogcHVi
bGljOgogICAgIExheW91dFVuaXQgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIGNv
bnN0IG92ZXJyaWRlOwotICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uQXRCbG9ja09mZnNldChMYXlv
dXRVbml0KSBjb25zdDsKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnRBdEJs
b2NrT2Zmc2V0KExheW91dFVuaXQpIGNvbnN0OwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgdGVt
cG9yYXJ5IHRvIGFsbG93IHVzIHRvIG1vdmUgY29kZSBmcm9tIFJlbmRlckJsb2NrIGludG8gUmVu
ZGVyQmxvY2tGbG93IHRoYXQgYWNjZXNzZXMgbWVtYmVyIHZhcmlhYmxlcyB0aGF0IHdlIGhhdmVu
J3QgbW92ZWQgb3V0IG9mCiAgICAgLy8gUmVuZGVyQmxvY2sgeWV0LgpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAJKHJldmlzaW9uIDIyMjQ2MikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MzYsNyArNTM2LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dEJs
b2NrKGJvb2wgcgogICAgIExheW91dFVuaXQgb2xkQ2xpZW50QWZ0ZXJFZGdlID0gY2xpZW50TG9n
aWNhbEJvdHRvbSgpOwogCiAgICAgLy8gQmVmb3JlIHVwZGF0aW5nIHRoZSBmaW5hbCBzaXplIG9m
IHRoZSBmbG93IHRocmVhZCBtYWtlIHN1cmUgYSBmb3JjZWQgYnJlYWsgaXMgYXBwbGllZCBhZnRl
ciB0aGUgY29udGVudC4KLSAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIHNpemUgaW5mb3JtYXRpb24g
aXMgY29ycmVjdGx5IGNvbXB1dGVkIGZvciB0aGUgbGFzdCBhdXRvLWhlaWdodCByZWdpb24gcmVj
ZWl2aW5nIGNvbnRlbnQuCisgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBzaXplIGluZm9ybWF0aW9u
IGlzIGNvcnJlY3RseSBjb21wdXRlZCBmb3IgdGhlIGxhc3QgYXV0by1oZWlnaHQgZnJhZ21lbnQg
cmVjZWl2aW5nIGNvbnRlbnQuCiAgICAgaWYgKGlzPFJlbmRlckZsb3dUaHJlYWQ+KCp0aGlzKSkK
ICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4oKnRoaXMpLmFwcGx5QnJlYWtBZnRl
ckNvbnRlbnQob2xkQ2xpZW50QWZ0ZXJFZGdlKTsKIApAQCAtNzA5LDcgKzcwOSw3IEBAIHZvaWQg
UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxkKFIKICNlbmRpZgogICAgIC8vIFBvc2l0
aW9uIHRoZSBjaGlsZCBhcyB0aG91Z2ggaXQgZGlkbid0IGNvbGxhcHNlIHdpdGggdGhlIHRvcC4K
ICAgICBzZXRMb2dpY2FsVG9wRm9yQ2hpbGQoY2hpbGQsIGxvZ2ljYWxUb3BFc3RpbWF0ZSwgQXBw
bHlMYXlvdXREZWx0YSk7Ci0gICAgZXN0aW1hdGVSZWdpb25SYW5nZUZvckJveENoaWxkKGNoaWxk
KTsKKyAgICBlc3RpbWF0ZUZyYWdtZW50UmFuZ2VGb3JCb3hDaGlsZChjaGlsZCk7CiAKICAgICBS
ZW5kZXJCbG9ja0Zsb3cqIGNoaWxkQmxvY2tGbG93ID0gaXM8UmVuZGVyQmxvY2tGbG93PihjaGls
ZCkgPyAmZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PihjaGlsZCkgOiBudWxscHRyOwogICAgIGJv
b2wgbWFya0Rlc2NlbmRhbnRzV2l0aEZsb2F0cyA9IGZhbHNlOwpAQCAtNzc2LDcgKzc3Niw3IEBA
IHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxkKFIKICAgICAgICAgfQogICAg
IH0KIAotICAgIGlmICh1cGRhdGVSZWdpb25SYW5nZUZvckJveENoaWxkKGNoaWxkKSkKKyAgICBp
ZiAodXBkYXRlRnJhZ21lbnRSYW5nZUZvckJveENoaWxkKGNoaWxkKSkKICAgICAgICAgY2hpbGQu
c2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKIAogICAgIC8vIEluIGNhc2Ugb3VyIGd1ZXNz
IHdhcyB3cm9uZywgcmVsYXlvdXQgdGhlIGNoaWxkLgpAQCAtOTEzLDcgKzkxMyw3IEBAIHZvaWQg
UmVuZGVyQmxvY2tGbG93Ojp1cGRhdGVTdGF0aWNJbmxpbmUKIHZvaWQgUmVuZGVyQmxvY2tGbG93
OjpzZXRTdGF0aWNJbmxpbmVQb3NpdGlvbkZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQsIExheW91
dFVuaXQgYmxvY2tPZmZzZXQsIExheW91dFVuaXQgaW5saW5lUG9zaXRpb24pCiB7CiAgICAgaWYg
KGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSkgewotICAgICAgICAvLyBTaGlmdCB0aGUgaW5s
aW5lIHBvc2l0aW9uIHRvIGV4Y2x1ZGUgdGhlIHJlZ2lvbiBvZmZzZXQuCisgICAgICAgIC8vIFNo
aWZ0IHRoZSBpbmxpbmUgcG9zaXRpb24gdG8gZXhjbHVkZSB0aGUgZnJhZ21lbnQgb2Zmc2V0Lgog
ICAgICAgICBpbmxpbmVQb3NpdGlvbiArPSBzdGFydE9mZnNldEZvckNvbnRlbnQoKSAtIHN0YXJ0
T2Zmc2V0Rm9yQ29udGVudChibG9ja09mZnNldCk7CiAgICAgfQogICAgIGNoaWxkLmxheWVyKCkt
PnNldFN0YXRpY0lubGluZVBvc2l0aW9uKGlubGluZVBvc2l0aW9uKTsKQEAgLTE1MTEsMTcgKzE1
MTEsMTcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmFwcGx5QmVmb3JlQgogICAgIGJv
b2wgaXNJbnNpZGVNdWx0aWNvbEZsb3dUaHJlYWQgPSBmbG93VGhyZWFkOwogICAgIGJvb2wgY2hl
Y2tDb2x1bW5CcmVha3MgPSBmbG93VGhyZWFkICYmIGZsb3dUaHJlYWQtPnNob3VsZENoZWNrQ29s
dW1uQnJlYWtzKCk7CiAgICAgYm9vbCBjaGVja1BhZ2VCcmVha3MgPSAhY2hlY2tDb2x1bW5CcmVh
a3MgJiYgdmlldygpLmxheW91dFN0YXRlKCktPm1fcGFnZUxvZ2ljYWxIZWlnaHQ7IC8vIEZJWE1F
OiBPbmNlIGNvbHVtbnMgY2FuIHByaW50IHdlIGhhdmUgdG8gY2hlY2sgdGhpcy4KLSAgICBib29s
IGNoZWNrUmVnaW9uQnJlYWtzID0gZmFsc2U7CisgICAgYm9vbCBjaGVja0ZyYWdtZW50QnJlYWtz
ID0gZmFsc2U7CiAgICAgYm9vbCBjaGVja0JlZm9yZUFsd2F5cyA9IChjaGVja0NvbHVtbkJyZWFr
cyAmJiBjaGlsZC5zdHlsZSgpLmJyZWFrQmVmb3JlKCkgPT0gQ29sdW1uQnJlYWtCZXR3ZWVuKQog
ICAgICAgICB8fCAoY2hlY2tQYWdlQnJlYWtzICYmIGFsd2F5c1BhZ2VCcmVhayhjaGlsZC5zdHls
ZSgpLmJyZWFrQmVmb3JlKCkpKTsKICAgICBpZiAoY2hlY2tCZWZvcmVBbHdheXMgJiYgaW5Ob3Jt
YWxGbG93KGNoaWxkKSAmJiBoYXNOZXh0UGFnZShsb2dpY2FsT2Zmc2V0LCBJbmNsdWRlUGFnZUJv
dW5kYXJ5KSkgewogICAgICAgICBpZiAoY2hlY2tDb2x1bW5CcmVha3MpIHsKICAgICAgICAgICAg
IGlmIChpc0luc2lkZU11bHRpY29sRmxvd1RocmVhZCkKLSAgICAgICAgICAgICAgICBjaGVja1Jl
Z2lvbkJyZWFrcyA9IHRydWU7CisgICAgICAgICAgICAgICAgY2hlY2tGcmFnbWVudEJyZWFrcyA9
IHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNoZWNrUmVnaW9uQnJlYWtzKSB7CisgICAg
ICAgIGlmIChjaGVja0ZyYWdtZW50QnJlYWtzKSB7CiAgICAgICAgICAgICBMYXlvdXRVbml0IG9m
ZnNldEJyZWFrQWRqdXN0bWVudCA9IDA7Ci0gICAgICAgICAgICBpZiAoZmxvd1RocmVhZC0+YWRk
Rm9yY2VkUmVnaW9uQnJlYWsodGhpcywgb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgp
ICsgbG9naWNhbE9mZnNldCwgJmNoaWxkLCB0cnVlLCAmb2Zmc2V0QnJlYWtBZGp1c3RtZW50KSkK
KyAgICAgICAgICAgIGlmIChmbG93VGhyZWFkLT5hZGRGb3JjZWRGcmFnbWVudEJyZWFrKHRoaXMs
IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSArIGxvZ2ljYWxPZmZzZXQsICZjaGls
ZCwgdHJ1ZSwgJm9mZnNldEJyZWFrQWRqdXN0bWVudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGxvZ2ljYWxPZmZzZXQgKyBvZmZzZXRCcmVha0FkanVzdG1lbnQ7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIG5leHRQYWdlTG9naWNhbFRvcChsb2dpY2FsT2Zmc2V0LCBJbmNsdWRlUGFnZUJv
dW5kYXJ5KTsKQEAgLTE1MzYsNyArMTUzNiw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93
OjphcHBseUFmdGVyQnIKICAgICBib29sIGlzSW5zaWRlTXVsdGljb2xGbG93VGhyZWFkID0gZmxv
d1RocmVhZDsKICAgICBib29sIGNoZWNrQ29sdW1uQnJlYWtzID0gZmxvd1RocmVhZCAmJiBmbG93
VGhyZWFkLT5zaG91bGRDaGVja0NvbHVtbkJyZWFrcygpOwogICAgIGJvb2wgY2hlY2tQYWdlQnJl
YWtzID0gIWNoZWNrQ29sdW1uQnJlYWtzICYmIHZpZXcoKS5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VM
b2dpY2FsSGVpZ2h0OyAvLyBGSVhNRTogT25jZSBjb2x1bW5zIGNhbiBwcmludCB3ZSBoYXZlIHRv
IGNoZWNrIHRoaXMuCi0gICAgYm9vbCBjaGVja1JlZ2lvbkJyZWFrcyA9IGZhbHNlOworICAgIGJv
b2wgY2hlY2tGcmFnbWVudEJyZWFrcyA9IGZhbHNlOwogICAgIGJvb2wgY2hlY2tBZnRlckFsd2F5
cyA9IChjaGVja0NvbHVtbkJyZWFrcyAmJiBjaGlsZC5zdHlsZSgpLmJyZWFrQWZ0ZXIoKSA9PSBD
b2x1bW5CcmVha0JldHdlZW4pCiAgICAgICAgIHx8IChjaGVja1BhZ2VCcmVha3MgJiYgYWx3YXlz
UGFnZUJyZWFrKGNoaWxkLnN0eWxlKCkuYnJlYWtBZnRlcigpKSk7CiAgICAgaWYgKGNoZWNrQWZ0
ZXJBbHdheXMgJiYgaW5Ob3JtYWxGbG93KGNoaWxkKSAmJiBoYXNOZXh0UGFnZShsb2dpY2FsT2Zm
c2V0LCBJbmNsdWRlUGFnZUJvdW5kYXJ5KSkgewpAQCAtMTU0NywxMSArMTU0NywxMSBAQCBMYXlv
dXRVbml0IFJlbmRlckJsb2NrRmxvdzo6YXBwbHlBZnRlckJyCiAKICAgICAgICAgaWYgKGNoZWNr
Q29sdW1uQnJlYWtzKSB7CiAgICAgICAgICAgICBpZiAoaXNJbnNpZGVNdWx0aWNvbEZsb3dUaHJl
YWQpCi0gICAgICAgICAgICAgICAgY2hlY2tSZWdpb25CcmVha3MgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGNoZWNrRnJhZ21lbnRCcmVha3MgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlm
IChjaGVja1JlZ2lvbkJyZWFrcykgeworICAgICAgICBpZiAoY2hlY2tGcmFnbWVudEJyZWFrcykg
ewogICAgICAgICAgICAgTGF5b3V0VW5pdCBvZmZzZXRCcmVha0FkanVzdG1lbnQgPSAwOwotICAg
ICAgICAgICAgaWYgKGZsb3dUaHJlYWQtPmFkZEZvcmNlZFJlZ2lvbkJyZWFrKHRoaXMsIG9mZnNl
dEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSArIGxvZ2ljYWxPZmZzZXQgKyBtYXJnaW5PZmZz
ZXQsICZjaGlsZCwgZmFsc2UsICZvZmZzZXRCcmVha0FkanVzdG1lbnQpKQorICAgICAgICAgICAg
aWYgKGZsb3dUaHJlYWQtPmFkZEZvcmNlZEZyYWdtZW50QnJlYWsodGhpcywgb2Zmc2V0RnJvbUxv
Z2ljYWxUb3BPZkZpcnN0UGFnZSgpICsgbG9naWNhbE9mZnNldCArIG1hcmdpbk9mZnNldCwgJmNo
aWxkLCBmYWxzZSwgJm9mZnNldEJyZWFrQWRqdXN0bWVudCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGxvZ2ljYWxPZmZzZXQgKyBtYXJnaW5PZmZzZXQgKyBvZmZzZXRCcmVha0FkanVzdG1lbnQ7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG5leHRQYWdlTG9naWNhbFRvcChsb2dpY2FsT2Zm
c2V0LCBJbmNsdWRlUGFnZUJvdW5kYXJ5KTsKQEAgLTE2NzYsNyArMTY3Niw3IEBAIHN0YXRpYyB2
b2lkIGNsZWFyU2hvdWxkQnJlYWtBdExpbmVUb0F2b2kKICAgICBibG9ja0Zsb3cuc2V0RGlkQnJl
YWtBdExpbmVUb0F2b2lkV2lkb3coKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFkanVz
dExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24oUm9vdElubGluZUJveCogbGluZUJveCwgTGF5b3V0
VW5pdCYgZGVsdGEsIGJvb2wmIG92ZXJmbG93c1JlZ2lvbiwgUmVuZGVyRmxvd1RocmVhZCogZmxv
d1RocmVhZCkKK3ZvaWQgUmVuZGVyQmxvY2tGbG93OjphZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdp
bmF0aW9uKFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gsIExheW91dFVuaXQmIGRlbHRhLCBib29sJiBv
dmVyZmxvd3NGcmFnbWVudCwgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCkKIHsKICAgICAv
LyBGSVhNRTogRm9yIG5vdyB3ZSBwYWdpbmF0ZSB1c2luZyBsaW5lIG92ZXJmbG93LiBUaGlzIGVu
c3VyZXMgdGhhdCBsaW5lcyBkb24ndCBvdmVybGFwIGF0IGFsbCB3aGVuIHdlCiAgICAgLy8gcHV0
IGEgc3RydXQgYmV0d2VlbiB0aGVtIGZvciBwYWdpbmF0aW9uIHB1cnBvc2VzLiBIb3dldmVyLCB0
aGlzIHJlYWxseSBpc24ndCB0aGUgZGVzaXJlZCByZW5kZXJpbmcsIHNpbmNlCkBAIC0xNjk3LDcg
KzE2OTcsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6YWRqdXN0TGluZVBvc2l0aW9uCiAgICAg
Ly8gRklYTUU6IEFub3RoZXIgcHJvYmxlbSB3aXRoIHNpbXBseSBtb3ZpbmcgbGluZXMgaXMgdGhh
dCB0aGUgYXZhaWxhYmxlIGxpbmUgd2lkdGggbWF5IGNoYW5nZSAoYmVjYXVzZSBvZiBmbG9hdHMp
LgogICAgIC8vIFRlY2huaWNhbGx5IGlmIHRoZSBsb2NhdGlvbiB3ZSBtb3ZlIHRoZSBsaW5lIHRv
IGhhcyBhIGRpZmZlcmVudCBsaW5lIHdpZHRoIHRoYW4gb3VyIG9sZCBwb3NpdGlvbiwgdGhlbiB3
ZSBuZWVkIHRvIGRpcnR5IHRoZQogICAgIC8vIGxpbmUgYW5kIGFsbCBmb2xsb3dpbmcgbGluZXMu
Ci0gICAgb3ZlcmZsb3dzUmVnaW9uID0gZmFsc2U7CisgICAgb3ZlcmZsb3dzRnJhZ21lbnQgPSBm
YWxzZTsKICAgICBMYXlvdXRSZWN0IGxvZ2ljYWxWaXN1YWxPdmVyZmxvdyA9IGxpbmVCb3gtPmxv
Z2ljYWxWaXN1YWxPdmVyZmxvd1JlY3QobGluZUJveC0+bGluZVRvcCgpLCBsaW5lQm94LT5saW5l
Qm90dG9tKCkpOwogICAgIExheW91dFVuaXQgbG9naWNhbE9mZnNldCA9IHN0ZDo6bWluKGxpbmVC
b3gtPmxpbmVUb3BXaXRoTGVhZGluZygpLCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cueSgpKTsKICAg
ICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20gPSBzdGQ6Om1heChsaW5lQm94LT5saW5lQm90dG9t
V2l0aExlYWRpbmcoKSwgbG9naWNhbFZpc3VhbE92ZXJmbG93Lm1heFkoKSk7CkBAIC0xNzA3LDcg
KzE3MDcsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6YWRqdXN0TGluZVBvc2l0aW9uCiAgICAg
bGluZUJveC0+c2V0UGFnaW5hdGlvblN0cnV0KDApOwogICAgIGxpbmVCb3gtPnNldElzRmlyc3RB
ZnRlclBhZ2VCcmVhayhmYWxzZSk7CiAgICAgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9
IHBhZ2VMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KGxvZ2ljYWxPZmZzZXQpOwotICAgIGJvb2wgaGFz
VW5pZm9ybVBhZ2VMb2dpY2FsSGVpZ2h0ID0gIWZsb3dUaHJlYWQgfHwgZmxvd1RocmVhZC0+cmVn
aW9uc0hhdmVVbmlmb3JtTG9naWNhbEhlaWdodCgpOworICAgIGJvb2wgaGFzVW5pZm9ybVBhZ2VM
b2dpY2FsSGVpZ2h0ID0gIWZsb3dUaHJlYWQgfHwgZmxvd1RocmVhZC0+ZnJhZ21lbnRzSGF2ZVVu
aWZvcm1Mb2dpY2FsSGVpZ2h0KCk7CiAgICAgLy8gSWYgbGluZUhlaWdodCBpcyBncmVhdGVyIHRo
YW4gcGFnZUxvZ2ljYWxIZWlnaHQsIGJ1dCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cuaGVpZ2h0KCkg
c3RpbGwgZml0cywgd2UgYXJlCiAgICAgLy8gc3RpbGwgZ29pbmcgdG8gYWRkIGEgc3RydXQsIHNv
IHRoYXQgdGhlIHZpc2libGUgb3ZlcmZsb3cgZml0cyBvbiBhIHNpbmdsZSBwYWdlLgogICAgIGlm
ICghcGFnZUxvZ2ljYWxIZWlnaHQgfHwgIWhhc05leHRQYWdlKGxvZ2ljYWxPZmZzZXQpKSB7CkBA
IC0xNzM2LDcgKzE3MzYsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6YWRqdXN0TGluZVBvc2l0
aW9uCiAgICAgfQogICAgIAogICAgIExheW91dFVuaXQgcmVtYWluaW5nTG9naWNhbEhlaWdodCA9
IHBhZ2VSZW1haW5pbmdMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KGxvZ2ljYWxPZmZzZXQsIEV4Y2x1
ZGVQYWdlQm91bmRhcnkpOwotICAgIG92ZXJmbG93c1JlZ2lvbiA9IChsaW5lSGVpZ2h0ID4gcmVt
YWluaW5nTG9naWNhbEhlaWdodCk7CisgICAgb3ZlcmZsb3dzRnJhZ21lbnQgPSAobGluZUhlaWdo
dCA+IHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQpOwogCiAgICAgaW50IGxpbmVJbmRleCA9IGxpbmVD
b3VudChsaW5lQm94KTsKICAgICBpZiAocmVtYWluaW5nTG9naWNhbEhlaWdodCA8IGxpbmVIZWln
aHQgfHwgKHNob3VsZEJyZWFrQXRMaW5lVG9Bdm9pZFdpZG93KCkgJiYgbGluZUJyZWFrVG9Bdm9p
ZFdpZG93KCkgPT0gbGluZUluZGV4KSkgewpAQCAtMTc1MCw3ICsxNzUwLDcgQEAgdm9pZCBSZW5k
ZXJCbG9ja0Zsb3c6OmFkanVzdExpbmVQb3NpdGlvbgogICAgICAgICAgICAgcmVtYWluaW5nTG9n
aWNhbEhlaWdodCAtPSBzdGQ6Om1pbihsaW5lSGVpZ2h0IC0gcGFnZUxvZ2ljYWxIZWlnaHQsIHN0
ZDo6bWF4PExheW91dFVuaXQ+KDAsIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy55KCkgLSBsaW5lQm94
LT5saW5lVG9wV2l0aExlYWRpbmcoKSkpOwogICAgICAgICB9CiAgICAgICAgIExheW91dFVuaXQg
cmVtYWluaW5nTG9naWNhbEhlaWdodEF0TmV3T2Zmc2V0ID0gcGFnZVJlbWFpbmluZ0xvZ2ljYWxI
ZWlnaHRGb3JPZmZzZXQobG9naWNhbE9mZnNldCArIHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQsIEV4
Y2x1ZGVQYWdlQm91bmRhcnkpOwotICAgICAgICBvdmVyZmxvd3NSZWdpb24gPSAobGluZUhlaWdo
dCA+IHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHRBdE5ld09mZnNldCk7CisgICAgICAgIG92ZXJmbG93
c0ZyYWdtZW50ID0gKGxpbmVIZWlnaHQgPiByZW1haW5pbmdMb2dpY2FsSGVpZ2h0QXROZXdPZmZz
ZXQpOwogICAgICAgICBMYXlvdXRVbml0IHRvdGFsTG9naWNhbEhlaWdodCA9IGxpbmVIZWlnaHQg
KyBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBsb2dpY2FsT2Zmc2V0KTsKICAgICAgICAgTGF5b3V0
VW5pdCBwYWdlTG9naWNhbEhlaWdodEF0TmV3T2Zmc2V0ID0gaGFzVW5pZm9ybVBhZ2VMb2dpY2Fs
SGVpZ2h0ID8gcGFnZUxvZ2ljYWxIZWlnaHQgOiBwYWdlTG9naWNhbEhlaWdodEZvck9mZnNldChs
b2dpY2FsT2Zmc2V0ICsgcmVtYWluaW5nTG9naWNhbEhlaWdodCk7CiAgICAgICAgIHNldFBhZ2VC
cmVhayhsb2dpY2FsT2Zmc2V0LCBsaW5lSGVpZ2h0IC0gcmVtYWluaW5nTG9naWNhbEhlaWdodCk7
CkBAIC0xODI4LDIwICsxODI4LDIwIEBAIGJvb2wgUmVuZGVyQmxvY2tGbG93OjpoYXNOZXh0UGFn
ZShMYXlvdXQKICAgICBpZiAoIWZsb3dUaHJlYWQpCiAgICAgICAgIHJldHVybiB0cnVlOyAvLyBQ
cmludGluZyBhbmQgbXVsdGktY29sdW1uIGJvdGggbWFrZSBuZXcgcGFnZXMgdG8gYWNjb21tb2Rh
dGUgY29udGVudC4KIAotICAgIC8vIFNlZSBpZiB3ZSdyZSBpbiB0aGUgbGFzdCByZWdpb24uCisg
ICAgLy8gU2VlIGlmIHdlJ3JlIGluIHRoZSBsYXN0IGZyYWdtZW50LgogICAgIExheW91dFVuaXQg
cGFnZU9mZnNldCA9IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSArIGxvZ2ljYWxP
ZmZzZXQ7Ci0gICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSBmbG93VGhyZWFkLT5yZWdpb25BdEJs
b2NrT2Zmc2V0KHRoaXMsIHBhZ2VPZmZzZXQsIHRydWUpOwotICAgIGlmICghcmVnaW9uKQorICAg
IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCA9IGZsb3dUaHJlYWQtPmZyYWdtZW50
QXRCbG9ja09mZnNldCh0aGlzLCBwYWdlT2Zmc2V0LCB0cnVlKTsKKyAgICBpZiAoIWZyYWdtZW50
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAocmVnaW9uLT5pc0xhc3RSZWdpb24o
KSkKLSAgICAgICAgcmV0dXJuIHJlZ2lvbi0+aXNSZW5kZXJSZWdpb25TZXQoKQotICAgICAgICAg
ICAgfHwgKHBhZ2VCb3VuZGFyeVJ1bGUgPT0gSW5jbHVkZVBhZ2VCb3VuZGFyeSAmJiBwYWdlT2Zm
c2V0ID09IHJlZ2lvbi0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkpOwotCi0gICAg
UmVuZGVyUmVnaW9uKiBzdGFydFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgUmVuZGVyUmVnaW9uKiBl
bmRSZWdpb24gPSBudWxscHRyOwotICAgIGZsb3dUaHJlYWQtPmdldFJlZ2lvblJhbmdlRm9yQm94
KHRoaXMsIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pOwotICAgIHJldHVybiAoZW5kUmVnaW9uICYm
IHJlZ2lvbiAhPSBlbmRSZWdpb24pOworICAgIGlmIChmcmFnbWVudC0+aXNMYXN0RnJhZ21lbnQo
KSkKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50LT5pc1JlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0
KCkKKyAgICAgICAgICAgIHx8IChwYWdlQm91bmRhcnlSdWxlID09IEluY2x1ZGVQYWdlQm91bmRh
cnkgJiYgcGFnZU9mZnNldCA9PSBmcmFnbWVudC0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250
ZW50KCkpOworCisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIHN0YXJ0RnJhZ21lbnQgPSBu
dWxscHRyOworICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBlbmRGcmFnbWVudCA9IG51bGxw
dHI7CisgICAgZmxvd1RocmVhZC0+Z2V0RnJhZ21lbnRSYW5nZUZvckJveCh0aGlzLCBzdGFydEZy
YWdtZW50LCBlbmRGcmFnbWVudCk7CisgICAgcmV0dXJuIChlbmRGcmFnbWVudCAmJiBmcmFnbWVu
dCAhPSBlbmRGcmFnbWVudCk7CiB9CiAKIExheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93OjphZGp1
c3RGb3JVbnNwbGl0dGFibGVDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2lj
YWxPZmZzZXQsIExheW91dFVuaXQgY2hpbGRCZWZvcmVNYXJnaW4sIExheW91dFVuaXQgY2hpbGRB
ZnRlck1hcmdpbikKQEAgLTE4NTYsNyArMTg1Niw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2tG
bG93OjphZGp1c3RGb3JVbnMKICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxv
d1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwogICAgIExheW91dFVuaXQgY2hpbGRMb2dpY2FsSGVp
Z2h0ID0gbG9naWNhbEhlaWdodEZvckNoaWxkKGNoaWxkKSArIGNoaWxkQmVmb3JlTWFyZ2luICsg
Y2hpbGRBZnRlck1hcmdpbjsKICAgICBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gcGFn
ZUxvZ2ljYWxIZWlnaHRGb3JPZmZzZXQobG9naWNhbE9mZnNldCk7Ci0gICAgYm9vbCBoYXNVbmlm
b3JtUGFnZUxvZ2ljYWxIZWlnaHQgPSAhZmxvd1RocmVhZCB8fCBmbG93VGhyZWFkLT5yZWdpb25z
SGF2ZVVuaWZvcm1Mb2dpY2FsSGVpZ2h0KCk7CisgICAgYm9vbCBoYXNVbmlmb3JtUGFnZUxvZ2lj
YWxIZWlnaHQgPSAhZmxvd1RocmVhZCB8fCBmbG93VGhyZWFkLT5mcmFnbWVudHNIYXZlVW5pZm9y
bUxvZ2ljYWxIZWlnaHQoKTsKICAgICBpZiAoaXNVbnNwbGl0dGFibGUpCiAgICAgICAgIHVwZGF0
ZU1pbmltdW1QYWdlSGVpZ2h0KGxvZ2ljYWxPZmZzZXQsIGNoaWxkTG9naWNhbEhlaWdodCk7CiAg
ICAgaWYgKCFwYWdlTG9naWNhbEhlaWdodCB8fCAoaGFzVW5pZm9ybVBhZ2VMb2dpY2FsSGVpZ2h0
ICYmIGNoaWxkTG9naWNhbEhlaWdodCA+IHBhZ2VMb2dpY2FsSGVpZ2h0KQpAQCAtMTg4MCw3ICsx
ODgwLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmFkanVzdEZvclVucwogCiBib29s
IFJlbmRlckJsb2NrRmxvdzo6cHVzaFRvTmV4dFBhZ2VXaXRoTWluaW11bUxvZ2ljYWxIZWlnaHQo
TGF5b3V0VW5pdCYgYWRqdXN0bWVudCwgTGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0LCBMYXlvdXRV
bml0IG1pbmltdW1Mb2dpY2FsSGVpZ2h0KSBjb25zdAogewotICAgIGJvb2wgY2hlY2tSZWdpb24g
PSBmYWxzZTsKKyAgICBib29sIGNoZWNrRnJhZ21lbnQgPSBmYWxzZTsKICAgICBmb3IgKExheW91
dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSBwYWdlTG9naWNhbEhlaWdodEZvck9mZnNldChsb2dp
Y2FsT2Zmc2V0ICsgYWRqdXN0bWVudCk7IHBhZ2VMb2dpY2FsSGVpZ2h0OwogICAgICAgICBwYWdl
TG9naWNhbEhlaWdodCA9IHBhZ2VMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KGxvZ2ljYWxPZmZzZXQg
KyBhZGp1c3RtZW50KSkgewogICAgICAgICBpZiAobWluaW11bUxvZ2ljYWxIZWlnaHQgPD0gcGFn
ZUxvZ2ljYWxIZWlnaHQpCkBAIC0xODg4LDkgKzE4ODgsOSBAQCBib29sIFJlbmRlckJsb2NrRmxv
dzo6cHVzaFRvTmV4dFBhZ2VXaXRoCiAgICAgICAgIGlmICghaGFzTmV4dFBhZ2UobG9naWNhbE9m
ZnNldCArIGFkanVzdG1lbnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBh
ZGp1c3RtZW50ICs9IHBhZ2VMb2dpY2FsSGVpZ2h0OwotICAgICAgICBjaGVja1JlZ2lvbiA9IHRy
dWU7CisgICAgICAgIGNoZWNrRnJhZ21lbnQgPSB0cnVlOwogICAgIH0KLSAgICByZXR1cm4gIWNo
ZWNrUmVnaW9uOworICAgIHJldHVybiAhY2hlY2tGcmFnbWVudDsKIH0KIAogdm9pZCBSZW5kZXJC
bG9ja0Zsb3c6OnNldFBhZ2VCcmVhayhMYXlvdXRVbml0IG9mZnNldCwgTGF5b3V0VW5pdCBzcGFj
ZVNob3J0YWdlKQpAQCAtMjUxMSw3ICsyNTExLDcgQEAgYm9vbCBSZW5kZXJCbG9ja0Zsb3c6OnBv
c2l0aW9uTmV3RmxvYXRzKAogICAgICAgICBjb21wdXRlTG9naWNhbExvY2F0aW9uRm9yRmxvYXQo
ZmxvYXRpbmdPYmplY3QsIGxvZ2ljYWxUb3ApOwogICAgICAgICBMYXlvdXRVbml0IGNoaWxkTG9n
aWNhbFRvcCA9IGxvZ2ljYWxUb3BGb3JDaGlsZChjaGlsZEJveCk7CiAKLSAgICAgICAgZXN0aW1h
dGVSZWdpb25SYW5nZUZvckJveENoaWxkKGNoaWxkQm94KTsKKyAgICAgICAgZXN0aW1hdGVGcmFn
bWVudFJhbmdlRm9yQm94Q2hpbGQoY2hpbGRCb3gpOwogCiAgICAgICAgIGNoaWxkQm94Lm1hcmtG
b3JQYWdpbmF0aW9uUmVsYXlvdXRJZk5lZWRlZCgpOwogICAgICAgICBjaGlsZEJveC5sYXlvdXRJ
Zk5lZWRlZCgpOwpAQCAtMjU0MSw3ICsyNTQxLDcgQEAgYm9vbCBSZW5kZXJCbG9ja0Zsb3c6OnBv
c2l0aW9uTmV3RmxvYXRzKAogICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBuZXdMb2dpY2Fs
VG9wOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAodXBkYXRlUmVnaW9uUmFuZ2VG
b3JCb3hDaGlsZChjaGlsZEJveCkpIHsKKyAgICAgICAgICAgIGlmICh1cGRhdGVGcmFnbWVudFJh
bmdlRm9yQm94Q2hpbGQoY2hpbGRCb3gpKSB7CiAgICAgICAgICAgICAgICAgY2hpbGRCb3guc2V0
TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKICAgICAgICAgICAgICAgICBjaGlsZEJveC5sYXlv
dXRJZk5lZWRlZCgpOwogICAgICAgICAgICAgfQpAQCAtMjg1MSw4ICsyODUxLDggQEAgTGF5b3V0
VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmdldENsZWFyRGVsdAogICAgICAgICAgICAgaWYgKGF2YWls
YWJsZUxvZ2ljYWxXaWR0aEF0TmV3TG9naWNhbFRvcE9mZnNldCA9PSBhdmFpbGFibGVMb2dpY2Fs
V2lkdGhGb3JDb250ZW50KG5ld0xvZ2ljYWxUb3ApKQogICAgICAgICAgICAgICAgIHJldHVybiBu
ZXdMb2dpY2FsVG9wIC0gbG9naWNhbFRvcDsKIAotICAgICAgICAgICAgUmVuZGVyUmVnaW9uKiBy
ZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KGxvZ2ljYWxUb3BGb3JDaGlsZChjaGlsZCkpOwot
ICAgICAgICAgICAgTGF5b3V0UmVjdCBib3JkZXJCb3ggPSBjaGlsZC5ib3JkZXJCb3hSZWN0SW5S
ZWdpb24ocmVnaW9uLCBEb05vdENhY2hlUmVuZGVyQm94UmVnaW9uSW5mbyk7CisgICAgICAgICAg
ICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQgPSBmcmFnbWVudEF0QmxvY2tPZmZz
ZXQobG9naWNhbFRvcEZvckNoaWxkKGNoaWxkKSk7CisgICAgICAgICAgICBMYXlvdXRSZWN0IGJv
cmRlckJveCA9IGNoaWxkLmJvcmRlckJveFJlY3RJbkZyYWdtZW50KGZyYWdtZW50LCBEb05vdENh
Y2hlUmVuZGVyQm94RnJhZ21lbnRJbmZvKTsKICAgICAgICAgICAgIExheW91dFVuaXQgY2hpbGRM
b2dpY2FsV2lkdGhBdE9sZExvZ2ljYWxUb3BPZmZzZXQgPSBpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpID8gYm9yZGVyQm94LndpZHRoKCkgOiBib3JkZXJCb3guaGVpZ2h0KCk7CiAKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBOb25lIG9mIHRoaXMgaXMgcmlnaHQgZm9yIHBlcnBlbmRpY3VsYXIgd3Jp
dGluZy1tb2RlIGNoaWxkcmVuLgpAQCAtMjg2Myw4ICsyODYzLDggQEAgTGF5b3V0VW5pdCBSZW5k
ZXJCbG9ja0Zsb3c6OmdldENsZWFyRGVsdAogCiAgICAgICAgICAgICBjaGlsZC5zZXRMb2dpY2Fs
VG9wKG5ld0xvZ2ljYWxUb3ApOwogICAgICAgICAgICAgY2hpbGQudXBkYXRlTG9naWNhbFdpZHRo
KCk7Ci0gICAgICAgICAgICByZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KGxvZ2ljYWxUb3BG
b3JDaGlsZChjaGlsZCkpOwotICAgICAgICAgICAgYm9yZGVyQm94ID0gY2hpbGQuYm9yZGVyQm94
UmVjdEluUmVnaW9uKHJlZ2lvbiwgRG9Ob3RDYWNoZVJlbmRlckJveFJlZ2lvbkluZm8pOworICAg
ICAgICAgICAgZnJhZ21lbnQgPSBmcmFnbWVudEF0QmxvY2tPZmZzZXQobG9naWNhbFRvcEZvckNo
aWxkKGNoaWxkKSk7CisgICAgICAgICAgICBib3JkZXJCb3ggPSBjaGlsZC5ib3JkZXJCb3hSZWN0
SW5GcmFnbWVudChmcmFnbWVudCwgRG9Ob3RDYWNoZVJlbmRlckJveEZyYWdtZW50SW5mbyk7CiAg
ICAgICAgICAgICBMYXlvdXRVbml0IGNoaWxkTG9naWNhbFdpZHRoQXROZXdMb2dpY2FsVG9wT2Zm
c2V0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGJvcmRlckJveC53aWR0aCgpIDogYm9y
ZGVyQm94LmhlaWdodCgpOwogCiAgICAgICAgICAgICBjaGlsZC5zZXRMb2dpY2FsVG9wKGNoaWxk
T2xkTG9naWNhbFRvcCk7CkBAIC0zMTQxLDExICszMTQxLDExIEBAIEdhcFJlY3RzIFJlbmRlckJs
b2NrRmxvdzo6aW5saW5lU2VsZWN0aW8KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIFJl
bmRlckJsb2NrRmxvdzo6bmVlZHNMYXlvdXRBZnRlclJlZ2lvblJhbmdlQ2hhbmdlKCkgY29uc3QK
K2Jvb2wgUmVuZGVyQmxvY2tGbG93OjpuZWVkc0xheW91dEFmdGVyRnJhZ21lbnRSYW5nZUNoYW5n
ZSgpIGNvbnN0CiB7CiAgICAgLy8gQSBibG9jayB3aXRob3V0IGZsb2F0cyBvciB0aGF0IGV4cGFu
ZHMgdG8gZW5jbG9zZSB0aGVtIHdvbid0IG5lZWQgYSByZWxheW91dAotICAgIC8vIGFmdGVyIGEg
cmVnaW9uIHJhbmdlIGNoYW5nZS4gVGhlcmUgaXMgbm8gb3ZlcmZsb3cgY29udGVudCBuZWVkaW5n
IHJlbGF5b3V0Ci0gICAgLy8gaW4gdGhlIHJlZ2lvbiBjaGFpbiBiZWNhdXNlIHRoZSByZWdpb24g
cmFuZ2UgY2FuIG9ubHkgc2hyaW5rIGFmdGVyIHRoZSBlc3RpbWF0aW9uLgorICAgIC8vIGFmdGVy
IGEgZnJhZ21lbnQgcmFuZ2UgY2hhbmdlLiBUaGVyZSBpcyBubyBvdmVyZmxvdyBjb250ZW50IG5l
ZWRpbmcgcmVsYXlvdXQKKyAgICAvLyBpbiB0aGUgZnJhZ21lbnQgY2hhaW4gYmVjYXVzZSB0aGUg
ZnJhZ21lbnQgcmFuZ2UgY2FuIG9ubHkgc2hyaW5rIGFmdGVyIHRoZSBlc3RpbWF0aW9uLgogICAg
IGlmICghY29udGFpbnNGbG9hdHMoKSB8fCBjcmVhdGVzTmV3Rm9ybWF0dGluZ0NvbnRleHQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zMzYwLDcgKzMzNjAsNyBAQCBSZW5kZXJUZXh0
KiBSZW5kZXJCbG9ja0Zsb3c6OmZpbmRDbG9zZXN0CiAgICAgCiAgICAgLy8gT25seSBjaGVjayB0
aGUgZ2FwcyBiZXR3ZWVuIHRoZSByb290IGxpbmUgYm94ZXMuIFdlIGRlbGliZXJhdGVseSBpZ25v
cmUgb3ZlcmZsb3cgYmVjYXVzZQogICAgIC8vIGV4cGVyaWVuY2UgaGFzIHNob3duIHRoYXQgaGl0
IHRlc3RzIG9uIGFuIGV4cGxvZGVkIHRleHQgbm9kZSBjYW4gZmFpbCB3aGVuIHdpdGhpbiB0aGUK
LSAgICAvLyBvdmVyZmxvdyByZWdpb24uCisgICAgLy8gb3ZlcmZsb3cgZnJhZ21lbnQuCiAgICAg
Zm9yIChSb290SW5saW5lQm94KiBjdXJyZW50ID0gYmxvY2tGbG93LmZpcnN0Um9vdEJveCgpOyBj
dXJyZW50ICYmIGN1cnJlbnQgIT0gYmxvY2tGbG93Lmxhc3RSb290Qm94KCk7IGN1cnJlbnQgPSBj
dXJyZW50LT5uZXh0Um9vdEJveCgpKSB7CiAgICAgICAgIGZsb2F0IGN1cnJlbnRCb3R0b20gPSBj
dXJyZW50LT55KCkgKyBjdXJyZW50LT5sb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgIGlmIChsb2Nh
bFBvaW50LnkoKSA8IGN1cnJlbnRCb3R0b20pCkBAIC0zMzc3LDcgKzMzNzcsNyBAQCBSZW5kZXJU
ZXh0KiBSZW5kZXJCbG9ja0Zsb3c6OmZpbmRDbG9zZXN0CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKLVZpc2libGVQb3NpdGlvbiBSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9uRm9yUG9pbnRXaXRo
SW5saW5lQ2hpbGRyZW4oY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Mb2dpY2FsQ29udGVudHMs
IGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uKQorVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJsb2Nr
Rmxvdzo6cG9zaXRpb25Gb3JQb2ludFdpdGhJbmxpbmVDaGlsZHJlbihjb25zdCBMYXlvdXRQb2lu
dCYgcG9pbnRJbkxvZ2ljYWxDb250ZW50cywgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIq
IGZyYWdtZW50KQogewogICAgIEFTU0VSVChjaGlsZHJlbklubGluZSgpKTsKIApAQCAtMzM5NCw3
ICszMzk0LDcgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJsb2NrRmxvdzo6cG9zaXRpbwogICAg
IFJvb3RJbmxpbmVCb3gqIGZpcnN0Um9vdEJveFdpdGhDaGlsZHJlbiA9IDA7CiAgICAgUm9vdElu
bGluZUJveCogbGFzdFJvb3RCb3hXaXRoQ2hpbGRyZW4gPSAwOwogICAgIGZvciAoUm9vdElubGlu
ZUJveCogcm9vdCA9IGZpcnN0Um9vdEJveCgpOyByb290OyByb290ID0gcm9vdC0+bmV4dFJvb3RC
b3goKSkgewotICAgICAgICBpZiAocmVnaW9uICYmIHJvb3QtPmNvbnRhaW5pbmdSZWdpb24oKSAh
PSByZWdpb24pCisgICAgICAgIGlmIChmcmFnbWVudCAmJiByb290LT5jb250YWluaW5nRnJhZ21l
bnQoKSAhPSBmcmFnbWVudCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmICgh
cm9vdC0+Zmlyc3RMZWFmQ2hpbGQoKSkKQEAgLTM0NzgsNyArMzQ3OCw3IEBAIFBvc2l0aW9uIFJl
bmRlckJsb2NrRmxvdzo6cG9zaXRpb25Gb3JQb2kKICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVy
VGV4dD4oKmZpcnN0Q2hpbGQoKSkucG9zaXRpb25Gb3JQb2ludChwb2ludCk7CiB9CiAKLVZpc2li
bGVQb3NpdGlvbiBSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0
UG9pbnQmIHBvaW50LCBjb25zdCBSZW5kZXJSZWdpb24qKQorVmlzaWJsZVBvc2l0aW9uIFJlbmRl
ckJsb2NrRmxvdzo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsIGNv
bnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKikKIHsKICAgICByZXR1cm4gUmVuZGVyQmxvY2s6
OnBvc2l0aW9uRm9yUG9pbnQocG9pbnQsIG51bGxwdHIpOwogfQpAQCAtMzgxOSw3ICszODE5LDcg
QEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dEV4Y2x1ZGVkQ2hpbAogICAgICAgICBmb3Ig
KFJlbmRlck11bHRpQ29sdW1uU2V0KiBjb2x1bW5TZXQgPSBmbG93VGhyZWFkLT5maXJzdE11bHRp
Q29sdW1uU2V0KCk7IGNvbHVtblNldDsgY29sdW1uU2V0ID0gY29sdW1uU2V0LT5uZXh0U2libGlu
Z011bHRpQ29sdW1uU2V0KCkpCiAgICAgICAgICAgICBjb2x1bW5TZXQtPnByZXBhcmVGb3JMYXlv
dXQoIWZsb3dUaHJlYWQtPmluQmFsYW5jaW5nUGFzcygpKTsKIAotICAgICAgICBmbG93VGhyZWFk
LT5pbnZhbGlkYXRlUmVnaW9ucyhNYXJrT25seVRoaXMpOworICAgICAgICBmbG93VGhyZWFkLT5p
bnZhbGlkYXRlRnJhZ21lbnRzKE1hcmtPbmx5VGhpcyk7CiAgICAgICAgIGZsb3dUaHJlYWQtPnNl
dE5lZWRzSGVpZ2h0c1JlY2FsY3VsYXRpb24odHJ1ZSk7CiAgICAgICAgIGZsb3dUaHJlYWQtPmxh
eW91dCgpOwogICAgIH0gZWxzZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tGbG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrRmxvdy5oCShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Miw3ICsyODIsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkZWxldGVMaW5lcygpIG92ZXJyaWRlOwogICAgIHZvaWQgY29t
cHV0ZU92ZXJmbG93KExheW91dFVuaXQgb2xkQ2xpZW50QWZ0ZXJFZGdlLCBib29sIHJlY29tcHV0
ZUZsb2F0cyA9IGZhbHNlKSBvdmVycmlkZTsKICAgICBQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50
KGNvbnN0IExheW91dFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0
aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJSZWdpb24qKSBvdmVy
cmlkZTsKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQ
b2ludCYsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKikgb3ZlcnJpZGU7CiAKICAgICBM
YXlvdXRVbml0IGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbShGbG9hdGluZ09iamVjdDo6VHlwZSA9
IEZsb2F0aW5nT2JqZWN0OjpGbG9hdExlZnRSaWdodCkgY29uc3Q7CiAKQEAgLTM4OCw3ICszODgs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVDb2x1bW5Qcm9ncmVzc2lvbkZyb21TdHlsZShS
ZW5kZXJTdHlsZSYpOwogICAgIHZvaWQgdXBkYXRlU3R5bGVzRm9yQ29sdW1uQ2hpbGRyZW4oKTsK
IAotICAgIGJvb2wgbmVlZHNMYXlvdXRBZnRlclJlZ2lvblJhbmdlQ2hhbmdlKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgYm9vbCBuZWVkc0xheW91dEFmdGVyRnJhZ21lbnRSYW5nZUNoYW5nZSgpIGNv
bnN0IG92ZXJyaWRlOwogICAgIFdFQkNPUkVfRVhQT1JUIFJlbmRlclRleHQqIGZpbmRDbG9zZXN0
VGV4dEF0QWJzb2x1dGVQb2ludChjb25zdCBGbG9hdFBvaW50Jik7CiAKICAgICAvLyBBIHBhZ2Ug
YnJlYWsgaXMgcmVxdWlyZWQgYXQgc29tZSBvZmZzZXQgZHVlIHRvIHNwYWNlIHNob3J0YWdlIGlu
IHRoZSBjdXJyZW50IGZyYWdtZW50YWluZXIuCkBAIC01MjgsNyArNTI4LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgTGF5b3V0VW5pdCYgbGFzdExvZ2ljYWxUb3AsIExheW91dFVuaXQmIGxhc3RMb2dp
Y2FsTGVmdCwgTGF5b3V0VW5pdCYgbGFzdExvZ2ljYWxSaWdodCwgY29uc3QgTG9naWNhbFNlbGVj
dGlvbk9mZnNldENhY2hlcyYsIGNvbnN0IFBhaW50SW5mbyopIG92ZXJyaWRlOwogICAgIAogICAg
IFBvc2l0aW9uIHBvc2l0aW9uRm9yQm94KElubGluZUJveCosIGJvb2wgc3RhcnQgPSB0cnVlKSBj
b25zdDsKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludFdpdGhJbmxpbmVDaGls
ZHJlbihjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkxvZ2ljYWxDb250ZW50cywgY29uc3QgUmVu
ZGVyUmVnaW9uKikgb3ZlcnJpZGU7CisgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9p
bnRXaXRoSW5saW5lQ2hpbGRyZW4oY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Mb2dpY2FsQ29u
dGVudHMsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBhZGRGb2N1c1JpbmdSZWN0c0ZvcklubGluZUNoaWxkcmVuKFZlY3RvcjxMYXlvdXRSZWN0PiYg
cmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0LCBjb25zdCBSZW5kZXJM
YXllck1vZGVsT2JqZWN0Kikgb3ZlcnJpZGU7CiAKIC8vIEZJWE1FLUJMT0NLRkxPVzogVGhlc2Ug
bWV0aG9kcyBoYXZlIGltcGxlbWVudGF0aW9ucyBpbgpAQCAtNTgwLDcgKzU4MCw3IEBAIHByaXZh
dGU6ICAgICAgICAKICAgICAvLyBoYXZlIHRvIG1vdmUgdG8gdGhlIG5leHQgcGFnZS9jb2x1bW4u
CiAgICAgYm9vbCBwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKGNvbnN0IEZsb2F0aW5nT2JqZWN0JiBu
ZXdGbG9hdCwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIExpbmVJ
bmZvJiwgTGluZVdpZHRoJik7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gdGVz
dCBhIGxpbmUgYm94IHRoYXQgaGFzIG1vdmVkIGluIHRoZSBibG9jayBkaXJlY3Rpb24gdG8gc2Vl
IGlmIGl0IGhhcyBlbmRlZCB1cCBpbiBhIG5ldwotICAgIC8vIHJlZ2lvbi9wYWdlL2NvbHVtbiB0
aGF0IGhhcyBhIGRpZmZlcmVudCBhdmFpbGFibGUgbGluZSB3aWR0aCB0aGFuIHRoZSBvbGQgb25l
LiBVc2VkIHRvIGtub3cgd2hlbiB5b3UgaGF2ZSB0byBkaXJ0eSBhCisgICAgLy8gcGFnZS9jb2x1
bW4gdGhhdCBoYXMgYSBkaWZmZXJlbnQgYXZhaWxhYmxlIGxpbmUgd2lkdGggdGhhbiB0aGUgb2xk
IG9uZS4gVXNlZCB0byBrbm93IHdoZW4geW91IGhhdmUgdG8gZGlydHkgYQogICAgIC8vIGxpbmUs
IGkuZS4sIHRoYXQgaXQgY2FuJ3QgYmUgcmUtdXNlZC4KICAgICBib29sIGxpbmVXaWR0aEZvclBh
Z2luYXRlZExpbmVDaGFuZ2VkKFJvb3RJbmxpbmVCb3gqLCBMYXlvdXRVbml0IGxpbmVEZWx0YSwg
UmVuZGVyRmxvd1RocmVhZCopIGNvbnN0OwogICAgIHZvaWQgdXBkYXRlTG9naWNhbFdpZHRoRm9y
QWxpZ25tZW50KGNvbnN0IEVUZXh0QWxpZ24mLCBjb25zdCBSb290SW5saW5lQm94KiwgQmlkaVJ1
biogdHJhaWxpbmdTcGFjZVJ1biwgZmxvYXQmIGxvZ2ljYWxMZWZ0LCBmbG9hdCYgdG90YWxMb2dp
Y2FsV2lkdGgsIGZsb2F0JiBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIGludCBleHBhbnNpb25PcHBv
cnR1bml0eUNvdW50KTsKQEAgLTYwMCw4ICs2MDAsOCBAQCBwcml2YXRlOiAgICAgICAgCiAKIHB1
YmxpYzoKICAgICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFRoZXNlIGNhbiBiZSBtYWRlIHByb3RlY3Rl
ZCBhZ2FpbiBvbmNlIGFsbCBjYWxsZXJzIGhhdmUgYmVlbiBtb3ZlZCBoZXJlLgotICAgIHZvaWQg
YWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihSb290SW5saW5lQm94KiwgTGF5b3V0VW5p
dCYgZGVsdGFPZmZzZXQsIGJvb2wmIG92ZXJmbG93c1JlZ2lvbiwgUmVuZGVyRmxvd1RocmVhZCop
OyAvLyBDb21wdXRlcyBhIGRlbHRhT2Zmc2V0IHZhbHVlIHRoYXQgcHV0IGEgbGluZSBhdCB0aGUg
dG9wIG9mIHRoZSBuZXh0IHBhZ2UgaWYgaXQgZG9lc24ndCBmaXQgb24gdGhlIGN1cnJlbnQgcGFn
ZS4KLSAgICB2b2lkIHVwZGF0ZVJlZ2lvbkZvckxpbmUoUm9vdElubGluZUJveCopIGNvbnN0Owor
ICAgIHZvaWQgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihSb290SW5saW5lQm94Kiwg
TGF5b3V0VW5pdCYgZGVsdGFPZmZzZXQsIGJvb2wmIG92ZXJmbG93c0ZyYWdtZW50LCBSZW5kZXJG
bG93VGhyZWFkKik7IC8vIENvbXB1dGVzIGEgZGVsdGFPZmZzZXQgdmFsdWUgdGhhdCBwdXQgYSBs
aW5lIGF0IHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZSBpZiBpdCBkb2Vzbid0IGZpdCBvbiB0aGUg
Y3VycmVudCBwYWdlLgorICAgIHZvaWQgdXBkYXRlRnJhZ21lbnRGb3JMaW5lKFJvb3RJbmxpbmVC
b3gqKSBjb25zdDsKIAogICAgIC8vIFBhZ2luYXRpb24gcm91dGluZXMuCiAgICAgYm9vbCByZWxh
eW91dEZvclBhZ2luYXRpb24oTGF5b3V0U3RhdGVNYWludGFpbmVyJik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2
aXNpb24gMjIyNDYyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGlu
ZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDggQEAKICNpbmNsdWRlICJM
b2dnaW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVy
Rmxvd1RocmVhZC5oIgorI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50Q29udGFpbmVyLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCi0jaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCiAjaW5j
bHVkZSAiUmVuZGVyUnVieUJhc2UuaCIKICNpbmNsdWRlICJSZW5kZXJSdWJ5VGV4dC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTE0MTgsMTIgKzE0MTgsMTIgQEAgdm9pZCBSZW5kZXJC
bG9ja0Zsb3c6OmxheW91dFJ1bnNBbmRGbG9hdAogICAgICAgICAgICAgICAgICAgICBsYXlvdXRT
dGF0ZS51cGRhdGVSZXBhaW50UmFuZ2VGcm9tQm94KGxpbmVCb3gpOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIExheW91dFVuaXQgYWRqdXN0bWVudCA9IDA7Ci0gICAgICAgICAg
ICAgICAgYm9vbCBvdmVyZmxvd3NSZWdpb24gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBib29s
IG92ZXJmbG93c0ZyYWdtZW50ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgbGF5b3V0U3RhdGUubWFyZ2luSW5mbygpLnNldEF0QmVmb3JlU2lkZU9mQmxvY2soZmFs
c2UpOwogCiAgICAgICAgICAgICAgICAgaWYgKHBhZ2luYXRlZCkKLSAgICAgICAgICAgICAgICAg
ICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihsaW5lQm94LCBhZGp1c3RtZW50LCBv
dmVyZmxvd3NSZWdpb24sIGxheW91dFN0YXRlLmZsb3dUaHJlYWQoKSk7CisgICAgICAgICAgICAg
ICAgICAgIGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24obGluZUJveCwgYWRqdXN0bWVu
dCwgb3ZlcmZsb3dzRnJhZ21lbnQsIGxheW91dFN0YXRlLmZsb3dUaHJlYWQoKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKGFkanVzdG1lbnQpIHsKICAgICAgICAgICAgICAgICAgICAgSW5kZW50VGV4
dE9yTm90IHNob3VsZEluZGVudFRleHQgPSBsYXlvdXRTdGF0ZS5saW5lSW5mbygpLmlzRmlyc3RM
aW5lKCkgPyBJbmRlbnRUZXh0IDogRG9Ob3RJbmRlbnRUZXh0OwogICAgICAgICAgICAgICAgICAg
ICBMYXlvdXRVbml0IG9sZExpbmVXaWR0aCA9IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUo
b2xkTG9naWNhbEhlaWdodCwgc2hvdWxkSW5kZW50VGV4dCk7CkBAIC0xNDQzLDcgKzE0NDMsNyBA
QCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0UnVuc0FuZEZsb2F0CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChwYWdpbmF0ZWQpIHsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGxheW91dFN0YXRlLmZsb3dUaHJlYWQoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHVwZGF0ZVJlZ2lvbkZvckxpbmUobGluZUJveCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB1cGRhdGVGcmFnbWVudEZvckxpbmUobGluZUJveCk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNTc2LDE1ICsxNTc2LDE1IEBAIHZvaWQgUmVuZGVy
QmxvY2tGbG93OjpsaW5rVG9FbmRMaW5lSWZOZWUKICAgICAgICAgICAgICAgICBsaW5lLT5hdHRh
Y2hMaW5lKCk7CiAgICAgICAgICAgICAgICAgaWYgKHBhZ2luYXRlZCkgewogICAgICAgICAgICAg
ICAgICAgICBkZWx0YSAtPSBsaW5lLT5wYWdpbmF0aW9uU3RydXQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgYm9vbCBvdmVyZmxvd3NSZWdpb247Ci0gICAgICAgICAgICAgICAgICAgIGFkanVzdExp
bmVQb3NpdGlvbkZvclBhZ2luYXRpb24obGluZSwgZGVsdGEsIG92ZXJmbG93c1JlZ2lvbiwgbGF5
b3V0U3RhdGUuZmxvd1RocmVhZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBvdmVyZmxv
d3NGcmFnbWVudDsKKyAgICAgICAgICAgICAgICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFn
aW5hdGlvbihsaW5lLCBkZWx0YSwgb3ZlcmZsb3dzRnJhZ21lbnQsIGxheW91dFN0YXRlLmZsb3dU
aHJlYWQoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChkZWx0YSkg
ewogICAgICAgICAgICAgICAgICAgICBsYXlvdXRTdGF0ZS51cGRhdGVSZXBhaW50UmFuZ2VGcm9t
Qm94KGxpbmUsIGRlbHRhKTsKICAgICAgICAgICAgICAgICAgICAgbGluZS0+YWRqdXN0QmxvY2tE
aXJlY3Rpb25Qb3NpdGlvbihkZWx0YSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGlmIChsYXlvdXRTdGF0ZS5mbG93VGhyZWFkKCkpCi0gICAgICAgICAgICAgICAgICAgIHVw
ZGF0ZVJlZ2lvbkZvckxpbmUobGluZSk7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUZyYWdt
ZW50Rm9yTGluZShsaW5lKTsKICAgICAgICAgICAgICAgICByZWF0dGFjaENsZWFuTGluZUZsb2F0
cygqbGluZSwgZGVsdGEsIGxpbmUgPT0gZmlyc3RDbGVhbkxpbmUpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodChsYXN0Um9vdEJveCgpLT5saW5lQm90dG9tV2l0
aExlYWRpbmcoKSk7CkBAIC0xNjE1LDcgKzE2MTUsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6
bGlua1RvRW5kTGluZUlmTmVlCiAgICAgICAgICAgICBMYXlvdXRSZWN0IGxvZ2ljYWxWaXN1YWxP
dmVyZmxvdygwLCBibG9ja0xvZ2ljYWxIZWlnaHQsIDEsIGJvdHRvbVZpc3VhbE92ZXJmbG93IC0g
YmxvY2tMb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgICAgIHRyYWlsaW5nRmxvYXRzTGluZUJveC0+
c2V0T3ZlcmZsb3dGcm9tTG9naWNhbFJlY3RzKGxvZ2ljYWxMYXlvdXRPdmVyZmxvdywgbG9naWNh
bFZpc3VhbE92ZXJmbG93LCB0cmFpbGluZ0Zsb2F0c0xpbmVCb3gtPmxpbmVUb3AoKSwgdHJhaWxp
bmdGbG9hdHNMaW5lQm94LT5saW5lQm90dG9tKCkpOwogICAgICAgICAgICAgaWYgKGxheW91dFN0
YXRlLmZsb3dUaHJlYWQoKSkKLSAgICAgICAgICAgICAgICB1cGRhdGVSZWdpb25Gb3JMaW5lKHRy
YWlsaW5nRmxvYXRzTGluZUJveCk7CisgICAgICAgICAgICAgICAgdXBkYXRlRnJhZ21lbnRGb3JM
aW5lKHRyYWlsaW5nRmxvYXRzTGluZUJveCk7CiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBG
bG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
c2V0KCk7CkBAIC0xNjQ0LDcgKzE2NDQsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0
TGluZUJveGVzKGJvCiAgICAgICAgIGxheW91dExpbmVHcmlkQm94KCk7CiAKICAgICBSZW5kZXJG
bG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwotICAg
IGJvb2wgY2xlYXJMaW5lc0ZvclBhZ2luYXRpb24gPSBmaXJzdFJvb3RCb3goKSAmJiBmbG93VGhy
ZWFkICYmICFmbG93VGhyZWFkLT5oYXNSZWdpb25zKCk7CisgICAgYm9vbCBjbGVhckxpbmVzRm9y
UGFnaW5hdGlvbiA9IGZpcnN0Um9vdEJveCgpICYmIGZsb3dUaHJlYWQgJiYgIWZsb3dUaHJlYWQt
Pmhhc0ZyYWdtZW50cygpOwogCiAgICAgLy8gRmlndXJlIG91dCBpZiB3ZSBzaG91bGQgY2xlYXIg
b3V0IG91ciBsaW5lIGJveGVzLgogICAgIC8vIEZJWE1FOiBIYW5kbGUgcmVzaXplIGV2ZW50dWFs
bHkhCkBAIC0xODAxLDggKzE4MDEsOCBAQCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9ja0Zsb3c6
OmRldGVybWluCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBwYWdpbmF0aW9uRGVsdGEgLT0gY3VycmVudExpbmUtPnBhZ2luYXRp
b25TdHJ1dCgpOwotICAgICAgICAgICAgICAgIGJvb2wgb3ZlcmZsb3dzUmVnaW9uOwotICAgICAg
ICAgICAgICAgIGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24oY3VycmVudExpbmUsIHBh
Z2luYXRpb25EZWx0YSwgb3ZlcmZsb3dzUmVnaW9uLCBsYXlvdXRTdGF0ZS5mbG93VGhyZWFkKCkp
OworICAgICAgICAgICAgICAgIGJvb2wgb3ZlcmZsb3dzRnJhZ21lbnQ7CisgICAgICAgICAgICAg
ICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihjdXJyZW50TGluZSwgcGFnaW5hdGlv
bkRlbHRhLCBvdmVyZmxvd3NGcmFnbWVudCwgbGF5b3V0U3RhdGUuZmxvd1RocmVhZCgpKTsKICAg
ICAgICAgICAgICAgICBpZiAocGFnaW5hdGlvbkRlbHRhKSB7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChjb250YWluc0Zsb2F0cygpIHx8ICFmbG9hdHMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogRG8gYmV0dGVyIGV2ZW50dWFsbHkuICBGb3Igbm93IGlm
IHdlIGV2ZXIgc2hpZnQgYmVjYXVzZSBvZiBwYWdpbmF0aW9uIGFuZCBmbG9hdHMgYXJlIHByZXNl
bnQganVzdCBnbyB0byBhIGZ1bGwgbGF5b3V0LgpAQCAtMTgxNCw3ICsxODE0LDcgQEAgUm9vdElu
bGluZUJveCogUmVuZGVyQmxvY2tGbG93OjpkZXRlcm1pbgogICAgICAgICAgICAgICAgICAgICBj
dXJyZW50TGluZS0+YWRqdXN0QmxvY2tEaXJlY3Rpb25Qb3NpdGlvbihwYWdpbmF0aW9uRGVsdGEp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUuZmxv
d1RocmVhZCgpKQotICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZWdpb25Gb3JMaW5lKGN1cnJl
bnRMaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlRnJhZ21lbnRGb3JMaW5lKGN1cnJl
bnRMaW5lKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGF1dG8qIGNsZWFuTGlu
ZUZsb2F0cyA9IGN1cnJlbnRMaW5lLT5mbG9hdHNQdHIoKSkgewpAQCAtMTk2Niw5ICsxOTY2LDkg
QEAgYm9vbCBSZW5kZXJCbG9ja0Zsb3c6OmNoZWNrUGFnaW5hdGlvbkFuZAogICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXNuJ3QgdGhlIHJlYWwgbW92ZSB3ZSdyZSBnb2luZyB0byBkbywgc28gZG9u
J3QgdXBkYXRlIHRoZSBsaW5lIGJveCdzIHBhZ2luYXRpb24KICAgICAgICAgICAgICAgICAvLyBz
dHJ1dCB5ZXQuCiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBvbGRQYWdpbmF0aW9uU3RydXQg
PSBsaW5lQm94LT5wYWdpbmF0aW9uU3RydXQoKTsKLSAgICAgICAgICAgICAgICBib29sIG92ZXJm
bG93c1JlZ2lvbjsKKyAgICAgICAgICAgICAgICBib29sIG92ZXJmbG93c0ZyYWdtZW50OwogICAg
ICAgICAgICAgICAgIGxpbmVEZWx0YSAtPSBvbGRQYWdpbmF0aW9uU3RydXQ7Ci0gICAgICAgICAg
ICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihsaW5lQm94LCBsaW5lRGVsdGEs
IG92ZXJmbG93c1JlZ2lvbiwgbGF5b3V0U3RhdGUuZmxvd1RocmVhZCgpKTsKKyAgICAgICAgICAg
ICAgICBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKGxpbmVCb3gsIGxpbmVEZWx0YSwg
b3ZlcmZsb3dzRnJhZ21lbnQsIGxheW91dFN0YXRlLmZsb3dUaHJlYWQoKSk7CiAgICAgICAgICAg
ICAgICAgbGluZUJveC0+c2V0UGFnaW5hdGlvblN0cnV0KG9sZFBhZ2luYXRpb25TdHJ1dCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobGluZVdpZHRoRm9yUGFnaW5hdGVkTGluZUNo
YW5nZWQobGluZUJveCwgbGluZURlbHRhLCBsYXlvdXRTdGF0ZS5mbG93VGhyZWFkKCkpKQpAQCAt
MjAwNCwxMSArMjAwNCwxMSBAQCBib29sIFJlbmRlckJsb2NrRmxvdzo6bGluZVdpZHRoRm9yUGFn
aW5hCiAgICAgaWYgKCFmbG93VGhyZWFkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBS
ZW5kZXJSZWdpb24qIGN1cnJlbnRSZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KHJvb3RCb3gt
PmxpbmVUb3BXaXRoTGVhZGluZygpICsgbGluZURlbHRhKTsKLSAgICAvLyBKdXN0IGJhaWwgaWYg
dGhlIHJlZ2lvbiBkaWRuJ3QgY2hhbmdlLgotICAgIGlmIChyb290Qm94LT5jb250YWluaW5nUmVn
aW9uKCkgPT0gY3VycmVudFJlZ2lvbikKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogY3Vy
cmVudEZyYWdtZW50ID0gZnJhZ21lbnRBdEJsb2NrT2Zmc2V0KHJvb3RCb3gtPmxpbmVUb3BXaXRo
TGVhZGluZygpICsgbGluZURlbHRhKTsKKyAgICAvLyBKdXN0IGJhaWwgaWYgdGhlIGZyYWdtZW50
IGRpZG4ndCBjaGFuZ2UuCisgICAgaWYgKHJvb3RCb3gtPmNvbnRhaW5pbmdGcmFnbWVudCgpID09
IGN1cnJlbnRGcmFnbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiByb290
Qm94LT5wYWdpbmF0ZWRMaW5lV2lkdGgoKSAhPSBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JDb250
ZW50KGN1cnJlbnRSZWdpb24pOworICAgIHJldHVybiByb290Qm94LT5wYWdpbmF0ZWRMaW5lV2lk
dGgoKSAhPSBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JDb250ZW50KGN1cnJlbnRGcmFnbWVudCk7
CiB9CiAKIGJvb2wgUmVuZGVyQmxvY2tGbG93OjptYXRjaGVkRW5kTGluZShMaW5lTGF5b3V0U3Rh
dGUmIGxheW91dFN0YXRlLCBjb25zdCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBjb25z
dCBJbmxpbmVJdGVyYXRvciYgZW5kTGluZVN0YXJ0LCBjb25zdCBCaWRpU3RhdHVzJiBlbmRMaW5l
U3RhdHVzKQpAQCAtMjA3MiwxNCArMjA3MiwxNCBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6YWRk
T3ZlcmZsb3dGcm9tSW5sCiAgICAgICAgIGVuZFBhZGRpbmcgPSAxOwogICAgIGZvciAoUm9vdElu
bGluZUJveCogY3VyciA9IGZpcnN0Um9vdEJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFJv
b3RCb3goKSkgewogICAgICAgICBhZGRMYXlvdXRPdmVyZmxvdyhjdXJyLT5wYWRkZWRMYXlvdXRP
dmVyZmxvd1JlY3QoZW5kUGFkZGluZykpOwotICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9
IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSA/IGN1cnItPmNvbnRhaW5pbmdSZWdpb24oKSA6
IG51bGxwdHI7Ci0gICAgICAgIGlmIChyZWdpb24pCi0gICAgICAgICAgICByZWdpb24tPmFkZExh
eW91dE92ZXJmbG93Rm9yQm94KHRoaXMsIGN1cnItPnBhZGRlZExheW91dE92ZXJmbG93UmVjdChl
bmRQYWRkaW5nKSk7CisgICAgICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCA9
IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSA/IGN1cnItPmNvbnRhaW5pbmdGcmFnbWVudCgp
IDogbnVsbHB0cjsKKyAgICAgICAgaWYgKGZyYWdtZW50KQorICAgICAgICAgICAgZnJhZ21lbnQt
PmFkZExheW91dE92ZXJmbG93Rm9yQm94KHRoaXMsIGN1cnItPnBhZGRlZExheW91dE92ZXJmbG93
UmVjdChlbmRQYWRkaW5nKSk7CiAgICAgICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkpIHsKICAg
ICAgICAgICAgIExheW91dFJlY3QgY2hpbGRWaXN1YWxPdmVyZmxvd1JlY3QgPSBjdXJyLT52aXN1
YWxPdmVyZmxvd1JlY3QoY3Vyci0+bGluZVRvcCgpLCBjdXJyLT5saW5lQm90dG9tKCkpOwogICAg
ICAgICAgICAgYWRkVmlzdWFsT3ZlcmZsb3coY2hpbGRWaXN1YWxPdmVyZmxvd1JlY3QpOwotICAg
ICAgICAgICAgaWYgKHJlZ2lvbikKLSAgICAgICAgICAgICAgICByZWdpb24tPmFkZFZpc3VhbE92
ZXJmbG93Rm9yQm94KHRoaXMsIGNoaWxkVmlzdWFsT3ZlcmZsb3dSZWN0KTsKKyAgICAgICAgICAg
IGlmIChmcmFnbWVudCkKKyAgICAgICAgICAgICAgICBmcmFnbWVudC0+YWRkVmlzdWFsT3ZlcmZs
b3dGb3JCb3godGhpcywgY2hpbGRWaXN1YWxPdmVyZmxvd1JlY3QpOwogICAgICAgICB9CiAgICAg
fQogfQpAQCAtMjE4OCw3ICsyMTg4LDcgQEAgYm9vbCBSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9u
TmV3RmxvYXRPbgogICAgICAgICAgICAgUmVuZGVyQm94JiBmbG9hdEJveCA9IGZsb2F0aW5nT2Jq
ZWN0LnJlbmRlcmVyKCk7CiAgICAgICAgICAgICBzZXRMb2dpY2FsVG9wRm9yQ2hpbGQoZmxvYXRC
b3gsIGxvZ2ljYWxUb3BGb3JDaGlsZChmbG9hdEJveCkgKyBtYXJnaW5CZWZvcmVGb3JDaGlsZChm
bG9hdEJveCkgKyBwYWdpbmF0aW9uU3RydXQpOwogCi0gICAgICAgICAgICBpZiAodXBkYXRlUmVn
aW9uUmFuZ2VGb3JCb3hDaGlsZChmbG9hdEJveCkpCisgICAgICAgICAgICBpZiAodXBkYXRlRnJh
Z21lbnRSYW5nZUZvckJveENoaWxkKGZsb2F0Qm94KSkKICAgICAgICAgICAgICAgICBmbG9hdEJv
eC5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwogICAgICAgICAgICAgZWxzZSBpZiAoaXM8
UmVuZGVyQmxvY2s+KGZsb2F0Qm94KSkKICAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJC
bG9jaz4oZmxvYXRCb3gpLnNldENoaWxkTmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKQEAgLTIy
NDgsMTcgKzIyNDgsMTcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OnN0YXJ0QWxpZ25l
ZAogICAgIHJldHVybiBsb2dpY2FsTGVmdDsKIH0KIAotdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnVw
ZGF0ZVJlZ2lvbkZvckxpbmUoUm9vdElubGluZUJveCogbGluZUJveCkgY29uc3QKK3ZvaWQgUmVu
ZGVyQmxvY2tGbG93Ojp1cGRhdGVGcmFnbWVudEZvckxpbmUoUm9vdElubGluZUJveCogbGluZUJv
eCkgY29uc3QKIHsKICAgICBBU1NFUlQobGluZUJveCk7CiAKLSAgICBpZiAoIWhhc1JlZ2lvblJh
bmdlSW5GbG93VGhyZWFkKCkpCi0gICAgICAgIGxpbmVCb3gtPmNsZWFyQ29udGFpbmluZ1JlZ2lv
bigpOworICAgIGlmICghaGFzRnJhZ21lbnRSYW5nZUluRmxvd1RocmVhZCgpKQorICAgICAgICBs
aW5lQm94LT5jbGVhckNvbnRhaW5pbmdGcmFnbWVudCgpOwogICAgIGVsc2UgewotICAgICAgICBp
ZiAoYXV0byBjb250YWluaW5nUmVnaW9uID0gcmVnaW9uQXRCbG9ja09mZnNldChsaW5lQm94LT5s
aW5lVG9wV2l0aExlYWRpbmcoKSkpCi0gICAgICAgICAgICBsaW5lQm94LT5zZXRDb250YWluaW5n
UmVnaW9uKCpjb250YWluaW5nUmVnaW9uKTsKKyAgICAgICAgaWYgKGF1dG8gY29udGFpbmluZ0Zy
YWdtZW50ID0gZnJhZ21lbnRBdEJsb2NrT2Zmc2V0KGxpbmVCb3gtPmxpbmVUb3BXaXRoTGVhZGlu
ZygpKSkKKyAgICAgICAgICAgIGxpbmVCb3gtPnNldENvbnRhaW5pbmdGcmFnbWVudCgqY29udGFp
bmluZ0ZyYWdtZW50KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbGluZUJveC0+Y2xlYXJD
b250YWluaW5nUmVnaW9uKCk7CisgICAgICAgICAgICBsaW5lQm94LT5jbGVhckNvbnRhaW5pbmdG
cmFnbWVudCgpOwogICAgIH0KIAogICAgIFJvb3RJbmxpbmVCb3gqIHByZXZMaW5lQm94ID0gbGlu
ZUJveC0+cHJldlJvb3RCb3goKTsKQEAgLTIyNjgsNyArMjI2OCw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2tGbG93Ojp1cGRhdGVSZWdpb25Gb3JMaW4KICAgICAvLyBUaGlzIGNoZWNrIGlzIG1vcmUgYWNj
dXJhdGUgdGhhbiB0aGUgb25lIGluIHxhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9ufCBi
ZWNhdXNlIGl0IHRha2VzIGludG8KICAgICAvLyBhY2NvdW50IGp1c3QgdGhlIGNvbnRhaW5lciBj
aGFuZ2VzIGJldHdlZW4gbGluZXMuIFRoZSBiZWZvcmUgbWVudGlvbmVkIGZ1bmN0aW9uIGRvZXNu
J3Qgc2V0IHRoZSBmbGFnCiAgICAgLy8gY29ycmVjdGx5IGlmIHRoZSBsaW5lIGlzIHBvc2l0aW9u
ZWQgYXQgdGhlIHRvcCBvZiB0aGUgbGFzdCBmcmFnbWVudCBjb250YWluZXIuCi0gICAgaWYgKGxp
bmVCb3gtPmNvbnRhaW5pbmdSZWdpb24oKSAhPSBwcmV2TGluZUJveC0+Y29udGFpbmluZ1JlZ2lv
bigpKQorICAgIGlmIChsaW5lQm94LT5jb250YWluaW5nRnJhZ21lbnQoKSAhPSBwcmV2TGluZUJv
eC0+Y29udGFpbmluZ0ZyYWdtZW50KCkpCiAgICAgICAgIGxpbmVCb3gtPnNldElzRmlyc3RBZnRl
clBhZ2VCcmVhayh0cnVlKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAJKHJldmlzaW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxNyArNTAsMTcgQEAKICNpbmNsdWRl
ICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyQm94UmVnaW9uSW5mby5oIgorI2luY2x1ZGUgIlJlbmRlckJveEZy
YWdtZW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRl
ICJSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guaCIKICNpbmNsdWRlICJSZW5kZXJGbGV4aWJs
ZUJveC5oIgorI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50Q29udGFpbmVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyR2VvbWV0cnlNYXAuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRl
ICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93
VGhyZWFkLmgiCi0jaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFi
bGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCkBAIC0xNjQsNTMgKzE2NCw1MyBAQCB2b2lkIFJlbmRlckJveDo6d2lsbEJlRGVzdHJveWVk
KCkKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdDo6d2lsbEJlRGVzdHJveWVkKCk7CiB9CiAKLVJl
bmRlclJlZ2lvbiogUmVuZGVyQm94OjpjbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKFJlbmRlclJl
Z2lvbiogcmVnaW9uKSBjb25zdAorUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIFJlbmRlckJveDo6
Y2xhbXBUb1N0YXJ0QW5kRW5kRnJhZ21lbnRzKFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFn
bWVudCkgY29uc3QKIHsKICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1Ro
cmVhZENvbnRhaW5pbmdCbG9jaygpOwogCi0gICAgQVNTRVJUKGlzUmVuZGVyVmlldygpIHx8IChy
ZWdpb24gJiYgZmxvd1RocmVhZCkpOworICAgIEFTU0VSVChpc1JlbmRlclZpZXcoKSB8fCAoZnJh
Z21lbnQgJiYgZmxvd1RocmVhZCkpOwogICAgIGlmIChpc1JlbmRlclZpZXcoKSkKLSAgICAgICAg
cmV0dXJuIHJlZ2lvbjsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50OwogCiAgICAgLy8gV2UgbmVl
ZCB0byBjbGFtcCB0byB0aGUgYmxvY2ssIHNpbmNlIHdlIHdhbnQgYW55IGxpbmVzIG9yIGJsb2Nr
cyB0aGF0IG92ZXJmbG93IG91dCBvZiB0aGUKICAgICAvLyBsb2dpY2FsIHRvcCBvciBsb2dpY2Fs
IGJvdHRvbSBvZiB0aGUgYmxvY2sgdG8gc2l6ZSBhcyB0aG91Z2ggdGhlIGJvcmRlciBib3ggaW4g
dGhlIGZpcnN0IGFuZAotICAgIC8vIGxhc3QgcmVnaW9ucyBleHRlbmRlZCBpbmZpbml0ZWx5LiBP
dGhlcndpc2UgdGhlIGxpbmVzIGFyZSBnb2luZyB0byBzaXplIGFjY29yZGluZyB0byB0aGUgcmVn
aW9ucwotICAgIC8vIHRoZXkgb3ZlcmZsb3cgaW50bywgd2hpY2ggbWFrZXMgbm8gc2Vuc2Ugd2hl
biB0aGlzIGJsb2NrIGRvZXNuJ3QgZXhpc3QgaW4gfHJlZ2lvbnwgYXQgYWxsLgotICAgIFJlbmRl
clJlZ2lvbiogc3RhcnRSZWdpb24gPSBudWxscHRyOwotICAgIFJlbmRlclJlZ2lvbiogZW5kUmVn
aW9uID0gbnVsbHB0cjsKLSAgICBpZiAoIWZsb3dUaHJlYWQtPmdldFJlZ2lvblJhbmdlRm9yQm94
KHRoaXMsIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pKQotICAgICAgICByZXR1cm4gcmVnaW9uOwot
Ci0gICAgaWYgKHJlZ2lvbi0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkgPCBzdGFy
dFJlZ2lvbi0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkpCi0gICAgICAgIHJldHVy
biBzdGFydFJlZ2lvbjsKLSAgICBpZiAocmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1RocmVhZENv
bnRlbnQoKSA+IGVuZFJlZ2lvbi0+bG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkpCi0g
ICAgICAgIHJldHVybiBlbmRSZWdpb247CisgICAgLy8gbGFzdCBmcmFnbWVudHMgZXh0ZW5kZWQg
aW5maW5pdGVseS4gT3RoZXJ3aXNlIHRoZSBsaW5lcyBhcmUgZ29pbmcgdG8gc2l6ZSBhY2NvcmRp
bmcgdG8gdGhlIGZyYWdtZW50cworICAgIC8vIHRoZXkgb3ZlcmZsb3cgaW50bywgd2hpY2ggbWFr
ZXMgbm8gc2Vuc2Ugd2hlbiB0aGlzIGJsb2NrIGRvZXNuJ3QgZXhpc3QgaW4gfGZyYWdtZW50fCBh
dCBhbGwuCisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIHN0YXJ0RnJhZ21lbnQgPSBudWxs
cHRyOworICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBlbmRGcmFnbWVudCA9IG51bGxwdHI7
CisgICAgaWYgKCFmbG93VGhyZWFkLT5nZXRGcmFnbWVudFJhbmdlRm9yQm94KHRoaXMsIHN0YXJ0
RnJhZ21lbnQsIGVuZEZyYWdtZW50KSkKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50OworCisgICAg
aWYgKGZyYWdtZW50LT5sb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRlbnQoKSA8IHN0YXJ0RnJh
Z21lbnQtPmxvZ2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgpKQorICAgICAgICByZXR1cm4g
c3RhcnRGcmFnbWVudDsKKyAgICBpZiAoZnJhZ21lbnQtPmxvZ2ljYWxUb3BGb3JGbG93VGhyZWFk
Q29udGVudCgpID4gZW5kRnJhZ21lbnQtPmxvZ2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgp
KQorICAgICAgICByZXR1cm4gZW5kRnJhZ21lbnQ7CiAKLSAgICByZXR1cm4gcmVnaW9uOworICAg
IHJldHVybiBmcmFnbWVudDsKIH0KIAotYm9vbCBSZW5kZXJCb3g6Omhhc1JlZ2lvblJhbmdlSW5G
bG93VGhyZWFkKCkgY29uc3QKK2Jvb2wgUmVuZGVyQm94OjpoYXNGcmFnbWVudFJhbmdlSW5GbG93
VGhyZWFkKCkgY29uc3QKIHsKICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxv
d1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwotICAgIGlmICghZmxvd1RocmVhZCB8fCAhZmxvd1Ro
cmVhZC0+aGFzVmFsaWRSZWdpb25JbmZvKCkpCisgICAgaWYgKCFmbG93VGhyZWFkIHx8ICFmbG93
VGhyZWFkLT5oYXNWYWxpZEZyYWdtZW50SW5mbygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICByZXR1cm4gZmxvd1RocmVhZC0+aGFzQ2FjaGVkUmVnaW9uUmFuZ2VGb3JCb3goKnRoaXMp
OworICAgIHJldHVybiBmbG93VGhyZWFkLT5oYXNDYWNoZWRGcmFnbWVudFJhbmdlRm9yQm94KCp0
aGlzKTsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmNsaWVudEJveFJlY3RJblJlZ2lvbihS
ZW5kZXJSZWdpb24qIHJlZ2lvbikgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyQm94OjpjbGllbnRC
b3hSZWN0SW5GcmFnbWVudChSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQpIGNvbnN0
CiB7Ci0gICAgaWYgKCFyZWdpb24pCisgICAgaWYgKCFmcmFnbWVudCkKICAgICAgICAgcmV0dXJu
IGNsaWVudEJveFJlY3QoKTsKIAotICAgIExheW91dFJlY3QgY2xpZW50Qm94ID0gYm9yZGVyQm94
UmVjdEluUmVnaW9uKHJlZ2lvbik7CisgICAgTGF5b3V0UmVjdCBjbGllbnRCb3ggPSBib3JkZXJC
b3hSZWN0SW5GcmFnbWVudChmcmFnbWVudCk7CiAgICAgY2xpZW50Qm94LnNldExvY2F0aW9uKGNs
aWVudEJveC5sb2NhdGlvbigpICsgTGF5b3V0U2l6ZShib3JkZXJMZWZ0KCksIGJvcmRlclRvcCgp
KSk7CiAgICAgY2xpZW50Qm94LnNldFNpemUoY2xpZW50Qm94LnNpemUoKSAtIExheW91dFNpemUo
Ym9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSArIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSwg
Ym9yZGVyVG9wKCkgKyBib3JkZXJCb3R0b20oKSArIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQo
KSkpOwogCiAgICAgcmV0dXJuIGNsaWVudEJveDsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCb3g6
OmJvcmRlckJveFJlY3RJblJlZ2lvbihSZW5kZXJSZWdpb24qLCBSZW5kZXJCb3hSZWdpb25JbmZv
RmxhZ3MpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckJveDo6Ym9yZGVyQm94UmVjdEluRnJhZ21l
bnQoUmVuZGVyRnJhZ21lbnRDb250YWluZXIqLCBSZW5kZXJCb3hGcmFnbWVudEluZm9GbGFncykg
Y29uc3QKIHsKICAgICByZXR1cm4gYm9yZGVyQm94UmVjdCgpOwogfQpAQCAtNjIxLDEyICs2MjEs
MTIgQEAgdm9pZCBSZW5kZXJCb3g6OnVwZGF0ZUxheWVyVHJhbnNmb3JtKCkKICAgICAgICAgbGF5
ZXIoKS0+dXBkYXRlVHJhbnNmb3JtKCk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyQm94Ojpjb25z
dHJhaW5Mb2dpY2FsV2lkdGhJblJlZ2lvbkJ5TWluTWF4KExheW91dFVuaXQgbG9naWNhbFdpZHRo
LCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoLCBSZW5kZXJCbG9jayYgY2IsIFJlbmRlclJlZ2lv
biogcmVnaW9uKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnN0cmFpbkxvZ2ljYWxX
aWR0aEluRnJhZ21lbnRCeU1pbk1heChMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5p
dCBhdmFpbGFibGVXaWR0aCwgUmVuZGVyQmxvY2smIGNiLCBSZW5kZXJGcmFnbWVudENvbnRhaW5l
ciogZnJhZ21lbnQpIGNvbnN0CiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlVG9Vc2Ug
PSBzdHlsZSgpOwogICAgIGlmICghc3R5bGVUb1VzZS5sb2dpY2FsTWF4V2lkdGgoKS5pc1VuZGVm
aW5lZCgpKQotICAgICAgICBsb2dpY2FsV2lkdGggPSBzdGQ6Om1pbihsb2dpY2FsV2lkdGgsIGNv
bXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvblVzaW5nKE1heFNpemUsIHN0eWxlVG9Vc2UubG9naWNh
bE1heFdpZHRoKCksIGF2YWlsYWJsZVdpZHRoLCBjYiwgcmVnaW9uKSk7Ci0gICAgcmV0dXJuIHN0
ZDo6bWF4KGxvZ2ljYWxXaWR0aCwgY29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uVXNpbmcoTWlu
U2l6ZSwgc3R5bGVUb1VzZS5sb2dpY2FsTWluV2lkdGgoKSwgYXZhaWxhYmxlV2lkdGgsIGNiLCBy
ZWdpb24pKTsKKyAgICAgICAgbG9naWNhbFdpZHRoID0gc3RkOjptaW4obG9naWNhbFdpZHRoLCBj
b21wdXRlTG9naWNhbFdpZHRoSW5GcmFnbWVudFVzaW5nKE1heFNpemUsIHN0eWxlVG9Vc2UubG9n
aWNhbE1heFdpZHRoKCksIGF2YWlsYWJsZVdpZHRoLCBjYiwgZnJhZ21lbnQpKTsKKyAgICByZXR1
cm4gc3RkOjptYXgobG9naWNhbFdpZHRoLCBjb21wdXRlTG9naWNhbFdpZHRoSW5GcmFnbWVudFVz
aW5nKE1pblNpemUsIHN0eWxlVG9Vc2UubG9naWNhbE1pbldpZHRoKCksIGF2YWlsYWJsZVdpZHRo
LCBjYiwgZnJhZ21lbnQpKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnN0cmFpbkxv
Z2ljYWxIZWlnaHRCeU1pbk1heChMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIHN0ZDo6b3B0aW9u
YWw8TGF5b3V0VW5pdD4gaW50cmluc2ljQ29udGVudEhlaWdodCkgY29uc3QKQEAgLTExNzcsNyAr
MTE3Nyw3IEBAIGJvb2wgUmVuZGVyQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXMKIAogICAg
IC8vIENoZWNrIG91ciBib3VuZHMgbmV4dC4gRm9yIHRoaXMgcHVycG9zZSBhbHdheXMgYXNzdW1l
IHRoYXQgd2UgY2FuIG9ubHkgYmUgaGl0IGluIHRoZQogICAgIC8vIGZvcmVncm91bmQgcGhhc2Ug
KHdoaWNoIGlzIHRydWUgZm9yIHJlcGxhY2VkIGVsZW1lbnRzIGxpa2UgaW1hZ2VzKS4KLSAgICBM
YXlvdXRSZWN0IGJvdW5kc1JlY3QgPSBib3JkZXJCb3hSZWN0SW5SZWdpb24obnVsbHB0cik7Cisg
ICAgTGF5b3V0UmVjdCBib3VuZHNSZWN0ID0gYm9yZGVyQm94UmVjdEluRnJhZ21lbnQobnVsbHB0
cik7CiAgICAgYm91bmRzUmVjdC5tb3ZlQnkoYWRqdXN0ZWRMb2NhdGlvbik7CiAgICAgaWYgKHZp
c2libGVUb0hpdFRlc3RpbmcoKSAmJiBhY3Rpb24gPT0gSGl0VGVzdEZvcmVncm91bmQgJiYgbG9j
YXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKGJvdW5kc1JlY3QpKSB7CiAgICAgICAgIHVwZGF0
ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xh
eW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOwpAQCAtMTI0NSw3ICsxMjQ1LDcgQEAgdm9pZCBS
ZW5kZXJCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbgogICAgIGlmICghcGFpbnRJbmZvLnNo
b3VsZFBhaW50V2l0aGluUm9vdCgqdGhpcykpCiAgICAgICAgIHJldHVybjsKIAotICAgIExheW91
dFJlY3QgcGFpbnRSZWN0ID0gYm9yZGVyQm94UmVjdEluUmVnaW9uKG51bGxwdHIpOworICAgIExh
eW91dFJlY3QgcGFpbnRSZWN0ID0gYm9yZGVyQm94UmVjdEluRnJhZ21lbnQobnVsbHB0cik7CiAg
ICAgcGFpbnRSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CiAgICAgYWRqdXN0Qm9yZGVyQm94UmVj
dEZvclBhaW50aW5nKHBhaW50UmVjdCk7CiAKQEAgLTE3NTMsMTEgKzE3NTMsMTEgQEAgdm9pZCBS
ZW5kZXJCb3g6OnBvcENvbnRlbnRzQ2xpcChQYWludEluZgogICAgICAgICBwYWludEluZm8ucGhh
c2UgPSBvcmlnaW5hbFBoYXNlOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckJveDo6b3ZlcmZsb3dD
bGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlclJlZ2lvbiogcmVnaW9u
LCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3ksIFBhaW50UGhhc2UpCitM
YXlvdXRSZWN0IFJlbmRlckJveDo6b3ZlcmZsb3dDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYg
bG9jYXRpb24sIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCwgT3ZlcmxheVNjcm9s
bGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5LCBQYWludFBoYXNlKQogewogICAgIC8vIEZJWE1F
OiBXaGVuIG92ZXJmbG93LWNsaXAgKENTUzMpIGlzIGltcGxlbWVudGVkLCB3ZSdsbCBvYnRhaW4g
dGhlIHByb3BlcnR5CiAgICAgLy8gaGVyZS4KLSAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gYm9y
ZGVyQm94UmVjdEluUmVnaW9uKHJlZ2lvbik7CisgICAgTGF5b3V0UmVjdCBjbGlwUmVjdCA9IGJv
cmRlckJveFJlY3RJbkZyYWdtZW50KGZyYWdtZW50KTsKICAgICBjbGlwUmVjdC5zZXRMb2NhdGlv
bihsb2NhdGlvbiArIGNsaXBSZWN0LmxvY2F0aW9uKCkgKyBMYXlvdXRTaXplKGJvcmRlckxlZnQo
KSwgYm9yZGVyVG9wKCkpKTsKICAgICBjbGlwUmVjdC5zZXRTaXplKGNsaXBSZWN0LnNpemUoKSAt
IExheW91dFNpemUoYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSwgYm9yZGVyVG9wKCkgKyBi
b3JkZXJCb3R0b20oKSkpOwogCkBAIC0xNzcxLDkgKzE3NzEsOSBAQCBMYXlvdXRSZWN0IFJlbmRl
ckJveDo6b3ZlcmZsb3dDbGlwUmVjdChjCiAgICAgcmV0dXJuIGNsaXBSZWN0OwogfQogCi1MYXlv
dXRSZWN0IFJlbmRlckJveDo6Y2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBS
ZW5kZXJSZWdpb24qIHJlZ2lvbikKK0xheW91dFJlY3QgUmVuZGVyQm94OjpjbGlwUmVjdChjb25z
dCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVu
dCkKIHsKLSAgICBMYXlvdXRSZWN0IGJvcmRlckJveFJlY3QgPSBib3JkZXJCb3hSZWN0SW5SZWdp
b24ocmVnaW9uKTsKKyAgICBMYXlvdXRSZWN0IGJvcmRlckJveFJlY3QgPSBib3JkZXJCb3hSZWN0
SW5GcmFnbWVudChmcmFnbWVudCk7CiAgICAgTGF5b3V0UmVjdCBjbGlwUmVjdCA9IExheW91dFJl
Y3QoYm9yZGVyQm94UmVjdC5sb2NhdGlvbigpICsgbG9jYXRpb24sIGJvcmRlckJveFJlY3Quc2l6
ZSgpKTsKIAogICAgIGlmICghc3R5bGUoKS5jbGlwTGVmdCgpLmlzQXV0bygpKSB7CkBAIC0xNzgy
LDcgKzE3ODIsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckJveDo6Y2xpcFJlY3QoY29uc3QgTGF5CiAg
ICAgICAgIGNsaXBSZWN0LmNvbnRyYWN0KGMsIDApOwogICAgIH0KIAotICAgIC8vIFdlIGRvbid0
IHVzZSB0aGUgcmVnaW9uLXNwZWNpZmljIGJvcmRlciBib3gncyB3aWR0aCBhbmQgaGVpZ2h0IHNp
bmNlIGNsaXAgb2Zmc2V0cyBhcmUgKHN0dXBpZGx5KSBzcGVjaWZpZWQKKyAgICAvLyBXZSBkb24n
dCB1c2UgdGhlIGZyYWdtZW50LXNwZWNpZmljIGJvcmRlciBib3gncyB3aWR0aCBhbmQgaGVpZ2h0
IHNpbmNlIGNsaXAgb2Zmc2V0cyBhcmUgKHN0dXBpZGx5KSBzcGVjaWZpZWQKICAgICAvLyBmcm9t
IHRoZSBsZWZ0IGFuZCB0b3AgZWRnZXMuIFRoZXJlZm9yZSBpdCdzIGJldHRlciB0byBhdm9pZCBj
b25zdHJhaW5pbmcgdG8gc21hbGxlciB3aWR0aHMgYW5kIGhlaWdodHMuCiAKICAgICBpZiAoIXN0
eWxlKCkuY2xpcFJpZ2h0KCkuaXNBdXRvKCkpCkBAIC0xODAwLDE4ICsxODAwLDE4IEBAIExheW91
dFJlY3QgUmVuZGVyQm94OjpjbGlwUmVjdChjb25zdCBMYXkKICAgICByZXR1cm4gY2xpcFJlY3Q7
CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyQm94OjpzaHJpbmtMb2dpY2FsV2lkdGhUb0F2b2lkRmxv
YXRzKExheW91dFVuaXQgY2hpbGRNYXJnaW5TdGFydCwgTGF5b3V0VW5pdCBjaGlsZE1hcmdpbkVu
ZCwgY29uc3QgUmVuZGVyQmxvY2smIGNiLCBSZW5kZXJSZWdpb24qIHJlZ2lvbikgY29uc3QKK0xh
eW91dFVuaXQgUmVuZGVyQm94OjpzaHJpbmtMb2dpY2FsV2lkdGhUb0F2b2lkRmxvYXRzKExheW91
dFVuaXQgY2hpbGRNYXJnaW5TdGFydCwgTGF5b3V0VW5pdCBjaGlsZE1hcmdpbkVuZCwgY29uc3Qg
UmVuZGVyQmxvY2smIGNiLCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQpIGNvbnN0
CiB7ICAgIAotICAgIFJlbmRlclJlZ2lvbiogY29udGFpbmluZ0Jsb2NrUmVnaW9uID0gbnVsbHB0
cjsKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogY29udGFpbmluZ0Jsb2NrRnJhZ21lbnQg
PSBudWxscHRyOwogICAgIExheW91dFVuaXQgbG9naWNhbFRvcFBvc2l0aW9uID0gbG9naWNhbFRv
cCgpOwotICAgIGlmIChyZWdpb24pIHsKLSAgICAgICAgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9n
aWNhbFRvcE9mUmVnaW9uID0gcmVnaW9uID8gcmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxvd1RocmVh
ZENvbnRlbnQoKSAtIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSA6IExheW91dFVu
aXQoKTsKLSAgICAgICAgbG9naWNhbFRvcFBvc2l0aW9uID0gc3RkOjptYXgobG9naWNhbFRvcFBv
c2l0aW9uLCBsb2dpY2FsVG9wUG9zaXRpb24gKyBvZmZzZXRGcm9tTG9naWNhbFRvcE9mUmVnaW9u
KTsKLSAgICAgICAgY29udGFpbmluZ0Jsb2NrUmVnaW9uID0gY2IuY2xhbXBUb1N0YXJ0QW5kRW5k
UmVnaW9ucyhyZWdpb24pOworICAgIGlmIChmcmFnbWVudCkgeworICAgICAgICBMYXlvdXRVbml0
IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGcmFnbWVudCA9IGZyYWdtZW50ID8gZnJhZ21lbnQtPmxv
Z2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgpIC0gb2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0UGFnZSgpIDogTGF5b3V0VW5pdCgpOworICAgICAgICBsb2dpY2FsVG9wUG9zaXRpb24gPSBz
dGQ6Om1heChsb2dpY2FsVG9wUG9zaXRpb24sIGxvZ2ljYWxUb3BQb3NpdGlvbiArIG9mZnNldEZy
b21Mb2dpY2FsVG9wT2ZGcmFnbWVudCk7CisgICAgICAgIGNvbnRhaW5pbmdCbG9ja0ZyYWdtZW50
ID0gY2IuY2xhbXBUb1N0YXJ0QW5kRW5kRnJhZ21lbnRzKGZyYWdtZW50KTsKICAgICB9CiAKICAg
ICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSBjYi5sb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoKnRo
aXMpOwotICAgIExheW91dFVuaXQgcmVzdWx0ID0gY2IuYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9y
TGluZUluUmVnaW9uKGxvZ2ljYWxUb3BQb3NpdGlvbiwgRG9Ob3RJbmRlbnRUZXh0LCBjb250YWlu
aW5nQmxvY2tSZWdpb24sIGxvZ2ljYWxIZWlnaHQpIC0gY2hpbGRNYXJnaW5TdGFydCAtIGNoaWxk
TWFyZ2luRW5kOworICAgIExheW91dFVuaXQgcmVzdWx0ID0gY2IuYXZhaWxhYmxlTG9naWNhbFdp
ZHRoRm9yTGluZUluRnJhZ21lbnQobG9naWNhbFRvcFBvc2l0aW9uLCBEb05vdEluZGVudFRleHQs
IGNvbnRhaW5pbmdCbG9ja0ZyYWdtZW50LCBsb2dpY2FsSGVpZ2h0KSAtIGNoaWxkTWFyZ2luU3Rh
cnQgLSBjaGlsZE1hcmdpbkVuZDsKIAogICAgIC8vIFdlIG5lZWQgdG8gc2VlIGlmIG1hcmdpbnMg
b24gZWl0aGVyIHRoZSBzdGFydCBzaWRlIG9yIHRoZSBlbmQgc2lkZSBjYW4gY29udGFpbiB0aGUg
ZmxvYXRzIGluIHF1ZXN0aW9uLiBJZiB0aGV5IGNhbiwKICAgICAvLyB0aGVuIGp1c3QgdXNpbmcg
dGhlIGxpbmUgd2lkdGggaXMgaW5hY2N1cmF0ZS4gSW4gdGhlIGNhc2Ugd2hlcmUgYSBmbG9hdCBj
b21wbGV0ZWx5IGZpdHMsIHdlIGRvbid0IG5lZWQgdG8gdXNlIHRoZSBsaW5lCkBAIC0xODE5LDkg
KzE4MTksOSBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6c2hyaW5rTG9naWNhbFdpZHRoCiAgICAg
Ly8gZG9lc24ndCBmaXQsIHdlIGNhbiB1c2UgdGhlIGxpbmUgb2Zmc2V0LCBidXQgd2UgbmVlZCB0
byBncm93IGl0IGJ5IHRoZSBtYXJnaW4gdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHRoZSBtYXJn
aW4gd2FzCiAgICAgLy8gImNvbnN1bWVkIiBieSB0aGUgZmxvYXQuIE5lZ2F0aXZlIG1hcmdpbnMg
YXJlbid0IGNvbnN1bWVkIGJ5IHRoZSBmbG9hdCwgYW5kIHNvIHdlIGlnbm9yZSB0aGVtLgogICAg
IGlmIChjaGlsZE1hcmdpblN0YXJ0ID4gMCkgewotICAgICAgICBMYXlvdXRVbml0IHN0YXJ0Q29u
dGVudFNpZGUgPSBjYi5zdGFydE9mZnNldEZvckNvbnRlbnQoY29udGFpbmluZ0Jsb2NrUmVnaW9u
KTsKKyAgICAgICAgTGF5b3V0VW5pdCBzdGFydENvbnRlbnRTaWRlID0gY2Iuc3RhcnRPZmZzZXRG
b3JDb250ZW50KGNvbnRhaW5pbmdCbG9ja0ZyYWdtZW50KTsKICAgICAgICAgTGF5b3V0VW5pdCBz
dGFydENvbnRlbnRTaWRlV2l0aE1hcmdpbiA9IHN0YXJ0Q29udGVudFNpZGUgKyBjaGlsZE1hcmdp
blN0YXJ0OwotICAgICAgICBMYXlvdXRVbml0IHN0YXJ0T2Zmc2V0ID0gY2Iuc3RhcnRPZmZzZXRG
b3JMaW5lSW5SZWdpb24obG9naWNhbFRvcFBvc2l0aW9uLCBEb05vdEluZGVudFRleHQsIGNvbnRh
aW5pbmdCbG9ja1JlZ2lvbiwgbG9naWNhbEhlaWdodCk7CisgICAgICAgIExheW91dFVuaXQgc3Rh
cnRPZmZzZXQgPSBjYi5zdGFydE9mZnNldEZvckxpbmVJbkZyYWdtZW50KGxvZ2ljYWxUb3BQb3Np
dGlvbiwgRG9Ob3RJbmRlbnRUZXh0LCBjb250YWluaW5nQmxvY2tGcmFnbWVudCwgbG9naWNhbEhl
aWdodCk7CiAgICAgICAgIGlmIChzdGFydE9mZnNldCA+IHN0YXJ0Q29udGVudFNpZGVXaXRoTWFy
Z2luKQogICAgICAgICAgICAgcmVzdWx0ICs9IGNoaWxkTWFyZ2luU3RhcnQ7CiAgICAgICAgIGVs
c2UKQEAgLTE4MjksOSArMTgyOSw5IEBAIExheW91dFVuaXQgUmVuZGVyQm94OjpzaHJpbmtMb2dp
Y2FsV2lkdGgKICAgICB9CiAgICAgCiAgICAgaWYgKGNoaWxkTWFyZ2luRW5kID4gMCkgewotICAg
ICAgICBMYXlvdXRVbml0IGVuZENvbnRlbnRTaWRlID0gY2IuZW5kT2Zmc2V0Rm9yQ29udGVudChj
b250YWluaW5nQmxvY2tSZWdpb24pOworICAgICAgICBMYXlvdXRVbml0IGVuZENvbnRlbnRTaWRl
ID0gY2IuZW5kT2Zmc2V0Rm9yQ29udGVudChjb250YWluaW5nQmxvY2tGcmFnbWVudCk7CiAgICAg
ICAgIExheW91dFVuaXQgZW5kQ29udGVudFNpZGVXaXRoTWFyZ2luID0gZW5kQ29udGVudFNpZGUg
KyBjaGlsZE1hcmdpbkVuZDsKLSAgICAgICAgTGF5b3V0VW5pdCBlbmRPZmZzZXQgPSBjYi5lbmRP
ZmZzZXRGb3JMaW5lSW5SZWdpb24obG9naWNhbFRvcFBvc2l0aW9uLCBEb05vdEluZGVudFRleHQs
IGNvbnRhaW5pbmdCbG9ja1JlZ2lvbiwgbG9naWNhbEhlaWdodCk7CisgICAgICAgIExheW91dFVu
aXQgZW5kT2Zmc2V0ID0gY2IuZW5kT2Zmc2V0Rm9yTGluZUluRnJhZ21lbnQobG9naWNhbFRvcFBv
c2l0aW9uLCBEb05vdEluZGVudFRleHQsIGNvbnRhaW5pbmdCbG9ja0ZyYWdtZW50LCBsb2dpY2Fs
SGVpZ2h0KTsKICAgICAgICAgaWYgKGVuZE9mZnNldCA+IGVuZENvbnRlbnRTaWRlV2l0aE1hcmdp
bikKICAgICAgICAgICAgIHJlc3VsdCArPSBjaGlsZE1hcmdpbkVuZDsKICAgICAgICAgZWxzZQpA
QCAtMTg2NSwzMyArMTg2NSwzMyBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Js
b2NrTG9nCiAgICAgcmV0dXJuIExheW91dFVuaXQoKTsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJC
b3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnRJblJlZ2lvbihSZW5kZXJS
ZWdpb24qIHJlZ2lvbikgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxv
Y2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5GcmFnbWVudChSZW5kZXJGcmFnbWVudENvbnRhaW5l
ciogZnJhZ21lbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFyZWdpb24pCisgICAgaWYgKCFmcmFnbWVu
dCkKICAgICAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQo
KTsKIAogICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwotICAgIFJlbmRl
clJlZ2lvbiogY29udGFpbmluZ0Jsb2NrUmVnaW9uID0gY2ItPmNsYW1wVG9TdGFydEFuZEVuZFJl
Z2lvbnMocmVnaW9uKTsKLSAgICAvLyBGSVhNRTogSXQncyB1bmNsZWFyIGlmIGEgcmVnaW9uJ3Mg
Y29udGVudCBzaG91bGQgdXNlIHRoZSBjb250YWluaW5nIGJsb2NrJ3Mgb3ZlcnJpZGUgbG9naWNh
bCB3aWR0aC4KKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogY29udGFpbmluZ0Jsb2NrRnJh
Z21lbnQgPSBjYi0+Y2xhbXBUb1N0YXJ0QW5kRW5kRnJhZ21lbnRzKGZyYWdtZW50KTsKKyAgICAv
LyBGSVhNRTogSXQncyB1bmNsZWFyIGlmIGEgZnJhZ21lbnQncyBjb250ZW50IHNob3VsZCB1c2Ug
dGhlIGNvbnRhaW5pbmcgYmxvY2sncyBvdmVycmlkZSBsb2dpY2FsIHdpZHRoLgogICAgIC8vIElm
IGl0IHNob3VsZCwgdGhlIGZvbGxvd2luZyBsaW5lIHNob3VsZCBjYWxsIGNvbnRhaW5pbmdCbG9j
a0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQuCiAgICAgTGF5b3V0VW5pdCByZXN1bHQgPSBjYi0+YXZh
aWxhYmxlTG9naWNhbFdpZHRoKCk7Ci0gICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9
IGNiLT5yZW5kZXJCb3hSZWdpb25JbmZvKGNvbnRhaW5pbmdCbG9ja1JlZ2lvbik7CisgICAgUmVu
ZGVyQm94RnJhZ21lbnRJbmZvKiBib3hJbmZvID0gY2ItPnJlbmRlckJveEZyYWdtZW50SW5mbyhj
b250YWluaW5nQmxvY2tGcmFnbWVudCk7CiAgICAgaWYgKCFib3hJbmZvKQogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIHJldHVybiBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCByZXN1bHQgLSAo
Y2ItPmxvZ2ljYWxXaWR0aCgpIC0gYm94SW5mby0+bG9naWNhbFdpZHRoKCkpKTsKIH0KIAotTGF5
b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0F2YWlsYWJsZUxpbmVXaWR0aEluUmVn
aW9uKFJlbmRlclJlZ2lvbiogcmVnaW9uKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNv
bnRhaW5pbmdCbG9ja0F2YWlsYWJsZUxpbmVXaWR0aEluRnJhZ21lbnQoUmVuZGVyRnJhZ21lbnRD
b250YWluZXIqIGZyYWdtZW50KSBjb25zdAogewogICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRh
aW5pbmdCbG9jaygpOwotICAgIFJlbmRlclJlZ2lvbiogY29udGFpbmluZ0Jsb2NrUmVnaW9uID0g
bnVsbHB0cjsKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogY29udGFpbmluZ0Jsb2NrRnJh
Z21lbnQgPSBudWxscHRyOwogICAgIExheW91dFVuaXQgbG9naWNhbFRvcFBvc2l0aW9uID0gbG9n
aWNhbFRvcCgpOwotICAgIGlmIChyZWdpb24pIHsKLSAgICAgICAgTGF5b3V0VW5pdCBvZmZzZXRG
cm9tTG9naWNhbFRvcE9mUmVnaW9uID0gcmVnaW9uID8gcmVnaW9uLT5sb2dpY2FsVG9wRm9yRmxv
d1RocmVhZENvbnRlbnQoKSAtIG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSA6IExh
eW91dFVuaXQoKTsKLSAgICAgICAgbG9naWNhbFRvcFBvc2l0aW9uID0gc3RkOjptYXgobG9naWNh
bFRvcFBvc2l0aW9uLCBsb2dpY2FsVG9wUG9zaXRpb24gKyBvZmZzZXRGcm9tTG9naWNhbFRvcE9m
UmVnaW9uKTsKLSAgICAgICAgY29udGFpbmluZ0Jsb2NrUmVnaW9uID0gY2ItPmNsYW1wVG9TdGFy
dEFuZEVuZFJlZ2lvbnMocmVnaW9uKTsKKyAgICBpZiAoZnJhZ21lbnQpIHsKKyAgICAgICAgTGF5
b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRnJhZ21lbnQgPSBmcmFnbWVudCA/IGZyYWdt
ZW50LT5sb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRlbnQoKSAtIG9mZnNldEZyb21Mb2dpY2Fs
VG9wT2ZGaXJzdFBhZ2UoKSA6IExheW91dFVuaXQoKTsKKyAgICAgICAgbG9naWNhbFRvcFBvc2l0
aW9uID0gc3RkOjptYXgobG9naWNhbFRvcFBvc2l0aW9uLCBsb2dpY2FsVG9wUG9zaXRpb24gKyBv
ZmZzZXRGcm9tTG9naWNhbFRvcE9mRnJhZ21lbnQpOworICAgICAgICBjb250YWluaW5nQmxvY2tG
cmFnbWVudCA9IGNiLT5jbGFtcFRvU3RhcnRBbmRFbmRGcmFnbWVudHMoZnJhZ21lbnQpOwogICAg
IH0KLSAgICByZXR1cm4gY2ItPmF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmVJblJlZ2lvbihs
b2dpY2FsVG9wUG9zaXRpb24sIERvTm90SW5kZW50VGV4dCwgY29udGFpbmluZ0Jsb2NrUmVnaW9u
LCBhdmFpbGFibGVMb2dpY2FsSGVpZ2h0KEluY2x1ZGVNYXJnaW5Cb3JkZXJQYWRkaW5nKSk7Cisg
ICAgcmV0dXJuIGNiLT5hdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lSW5GcmFnbWVudChsb2dp
Y2FsVG9wUG9zaXRpb24sIERvTm90SW5kZW50VGV4dCwgY29udGFpbmluZ0Jsb2NrRnJhZ21lbnQs
IGF2YWlsYWJsZUxvZ2ljYWxIZWlnaHQoSW5jbHVkZU1hcmdpbkJvcmRlclBhZGRpbmcpKTsKIH0K
IAogTGF5b3V0VW5pdCBSZW5kZXJCb3g6OnBlcnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2tMb2dp
Y2FsSGVpZ2h0KCkgY29uc3QKQEAgLTIwMjQsOCArMjAyNCw4IEBAIHZvaWQgUmVuZGVyQm94Ojpt
YXBBYnNvbHV0ZVRvTG9jYWxQb2ludCgKIAogTGF5b3V0U2l6ZSBSZW5kZXJCb3g6Om9mZnNldEZy
b21Db250YWluZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IExheW91dFBvaW50Jiwg
Ym9vbCogb2Zmc2V0RGVwZW5kc09uUG9pbnQpIGNvbnN0CiB7Ci0gICAgLy8gQSByZWdpb24gImhh
cyIgYm94ZXMgaW5zaWRlIGl0IHdpdGhvdXQgYmVpbmcgdGhlaXIgY29udGFpbmVyLiAKLSAgICBB
U1NFUlQoJnJlbmRlcmVyID09IGNvbnRhaW5lcigpIHx8IGlzPFJlbmRlclJlZ2lvbj4ocmVuZGVy
ZXIpKTsKKyAgICAvLyBBIGZyYWdtZW50ICJoYXMiIGJveGVzIGluc2lkZSBpdCB3aXRob3V0IGJl
aW5nIHRoZWlyIGNvbnRhaW5lci4gCisgICAgQVNTRVJUKCZyZW5kZXJlciA9PSBjb250YWluZXIo
KSB8fCBpczxSZW5kZXJGcmFnbWVudENvbnRhaW5lcj4ocmVuZGVyZXIpKTsKIAogICAgIExheW91
dFNpemUgb2Zmc2V0OyAgICAKICAgICBpZiAoaXNJbkZsb3dQb3NpdGlvbmVkKCkpCkBAIC0yMTc0
LDE4ICsyMTc0LDE4IEBAIExheW91dFJlY3QgUmVuZGVyQm94Ojpjb21wdXRlUmVjdEZvclJlcGEK
ICAgICAgICAgcmV0dXJuIGFkanVzdGVkUmVjdDsKICAgICAKICAgICAvLyBUaGlzIGNvZGUgaXNu
J3QgbmVjZXNzYXJ5IGZvciBpbi1mbG93IFJlbmRlckZsb3dUaHJlYWRzLgotICAgIC8vIERvbid0
IGFkZCB0aGUgbG9jYXRpb24gb2YgdGhlIHJlZ2lvbiBpbiB0aGUgZmxvdyB0aHJlYWQgZm9yIGFi
c29sdXRlIHBvc2l0aW9uZWQKKyAgICAvLyBEb24ndCBhZGQgdGhlIGxvY2F0aW9uIG9mIHRoZSBm
cmFnbWVudCBpbiB0aGUgZmxvdyB0aHJlYWQgZm9yIGFic29sdXRlIHBvc2l0aW9uZWQKICAgICAv
LyBlbGVtZW50cyBiZWNhdXNlIHRoZWlyIGFic29sdXRlIHBvc2l0aW9uIGFscmVhZHkgcHVzaGVz
IHRoZW0gZG93biB0aHJvdWdoCi0gICAgLy8gdGhlIHJlZ2lvbnMgc28gYWRkaW5nIHRoaXMgaGVy
ZSBhbmQgdGhlbiBhZGRpbmcgdGhlIHRvcExlZnQgYWdhaW4gd291bGQgY2F1c2UKKyAgICAvLyB0
aGUgZnJhZ21lbnRzIHNvIGFkZGluZyB0aGlzIGhlcmUgYW5kIHRoZW4gYWRkaW5nIHRoZSB0b3BM
ZWZ0IGFnYWluIHdvdWxkIGNhdXNlCiAgICAgLy8gdXMgdG8gYWRkIHRoZSBoZWlnaHQgdHdpY2Uu
CiAgICAgLy8gVGhlIHNhbWUgbG9naWMgYXBwbGllcyBmb3IgZWxlbWVudHMgZmxvd2VkIGRpcmVj
dGx5IGludG8gdGhlIGZsb3cgdGhyZWFkLiBUaGVpciB0b3BMZWZ0IG1lbWJlcgotICAgIC8vIHdp
bGwgYWxyZWFkeSBjb250YWluIHRoZSBwb3J0aW9uIHJlY3Qgb2YgdGhlIHJlZ2lvbi4KKyAgICAv
LyB3aWxsIGFscmVhZHkgY29udGFpbiB0aGUgcG9ydGlvbiByZWN0IG9mIHRoZSBmcmFnbWVudC4K
ICAgICBFUG9zaXRpb24gcG9zaXRpb24gPSBzdHlsZVRvVXNlLnBvc2l0aW9uKCk7CiAgICAgaWYg
KGNvbnRhaW5lci0+aXNPdXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkgJiYgcG9zaXRpb24gIT0g
QWJzb2x1dGVQb3NpdGlvbiAmJiBjb250YWluaW5nQmxvY2soKSAhPSBmbG93VGhyZWFkQ29udGFp
bmluZ0Jsb2NrKCkpIHsKLSAgICAgICAgUmVuZGVyUmVnaW9uKiBmaXJzdFJlZ2lvbiA9IG51bGxw
dHI7Ci0gICAgICAgIFJlbmRlclJlZ2lvbiogbGFzdFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgICAg
IGlmIChkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFkPigqY29udGFpbmVyKS5nZXRSZWdpb25SYW5n
ZUZvckJveCh0aGlzLCBmaXJzdFJlZ2lvbiwgbGFzdFJlZ2lvbikpCi0gICAgICAgICAgICBhZGp1
c3RlZFJlY3QubW92ZUJ5KGZpcnN0UmVnaW9uLT5mbG93VGhyZWFkUG9ydGlvblJlY3QoKS5sb2Nh
dGlvbigpKTsKKyAgICAgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZpcnN0RnJhZ21lbnQg
PSBudWxscHRyOworICAgICAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogbGFzdEZyYWdtZW50
ID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKGRvd25jYXN0PFJlbmRlckZsb3dUaHJlYWQ+KCpjb250
YWluZXIpLmdldEZyYWdtZW50UmFuZ2VGb3JCb3godGhpcywgZmlyc3RGcmFnbWVudCwgbGFzdEZy
YWdtZW50KSkKKyAgICAgICAgICAgIGFkanVzdGVkUmVjdC5tb3ZlQnkoZmlyc3RGcmFnbWVudC0+
Zmxvd1RocmVhZFBvcnRpb25SZWN0KCkubG9jYXRpb24oKSk7CiAgICAgfQogCiAgICAgaWYgKGlz
V3JpdGluZ01vZGVSb290KCkpIHsKQEAgLTIyMTEsOSArMjIxMSw5IEBAIExheW91dFJlY3QgUmVu
ZGVyQm94Ojpjb21wdXRlUmVjdEZvclJlcGEKICAgICAgICAgLy8gRklYTUU6IEp1c3QgYXMgd2l0
aCBvZmZzZXRGcm9tQ29udGFpbmVyLCB3ZSBhcmVuJ3QgcmVhbGx5IGhhbmRsaW5nIG9iamVjdHMg
dGhhdCBzcGFuCiAgICAgICAgIC8vIG11bHRpcGxlIGNvbHVtbnMgcHJvcGVybHkuCiAgICAgICAg
IExheW91dFBvaW50IHBoeXNpY2FsUG9pbnQoZmxpcEZvcldyaXRpbmdNb2RlKGFkanVzdGVkUmVj
dC5sb2NhdGlvbigpKSk7Ci0gICAgICAgIGlmIChhdXRvKiByZWdpb24gPSBkb3duY2FzdDxSZW5k
ZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ+KCp0aGlzKS5waHlzaWNhbFRyYW5zbGF0aW9uRnJvbUZs
b3dUb1JlZ2lvbigocGh5c2ljYWxQb2ludCkpKSB7Ci0gICAgICAgICAgICBhZGp1c3RlZFJlY3Qu
c2V0TG9jYXRpb24ocmVnaW9uLT5mbGlwRm9yV3JpdGluZ01vZGUocGh5c2ljYWxQb2ludCkpOwot
ICAgICAgICAgICAgcmV0dXJuIHJlZ2lvbi0+Y29tcHV0ZVJlY3RGb3JSZXBhaW50KGFkanVzdGVk
UmVjdCwgcmVwYWludENvbnRhaW5lciwgY29udGV4dCk7CisgICAgICAgIGlmIChhdXRvKiBmcmFn
bWVudCA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZD4oKnRoaXMpLnBoeXNp
Y2FsVHJhbnNsYXRpb25Gcm9tRmxvd1RvRnJhZ21lbnQoKHBoeXNpY2FsUG9pbnQpKSkgeworICAg
ICAgICAgICAgYWRqdXN0ZWRSZWN0LnNldExvY2F0aW9uKGZyYWdtZW50LT5mbGlwRm9yV3JpdGlu
Z01vZGUocGh5c2ljYWxQb2ludCkpOworICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LT5jb21w
dXRlUmVjdEZvclJlcGFpbnQoYWRqdXN0ZWRSZWN0LCByZXBhaW50Q29udGFpbmVyLCBjb250ZXh0
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjI4Myw3ICsyMjgzLDcgQEAgdm9pZCBSZW5kZXJC
b3g6OnJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cwogdm9pZCBSZW5kZXJCb3g6OnVwZGF0ZUxvZ2lj
YWxXaWR0aCgpCiB7CiAgICAgTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzIGNvbXB1dGVkVmFs
dWVzOwotICAgIGNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvbihjb21wdXRlZFZhbHVlcyk7Cisg
ICAgY29tcHV0ZUxvZ2ljYWxXaWR0aEluRnJhZ21lbnQoY29tcHV0ZWRWYWx1ZXMpOwogCiAgICAg
c2V0TG9naWNhbFdpZHRoKGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50KTsKICAgICBzZXRMb2dpY2Fs
TGVmdChjb21wdXRlZFZhbHVlcy5tX3Bvc2l0aW9uKTsKQEAgLTIyOTEsNyArMjI5MSw3IEBAIHZv
aWQgUmVuZGVyQm94Ojp1cGRhdGVMb2dpY2FsV2lkdGgoKQogICAgIHNldE1hcmdpbkVuZChjb21w
dXRlZFZhbHVlcy5tX21hcmdpbnMubV9lbmQpOwogfQogCi12b2lkIFJlbmRlckJveDo6Y29tcHV0
ZUxvZ2ljYWxXaWR0aEluUmVnaW9uKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHV0
ZWRWYWx1ZXMsIFJlbmRlclJlZ2lvbiogcmVnaW9uKSBjb25zdAordm9pZCBSZW5kZXJCb3g6OmNv
bXB1dGVMb2dpY2FsV2lkdGhJbkZyYWdtZW50KExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYg
Y29tcHV0ZWRWYWx1ZXMsIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCkgY29uc3QK
IHsKICAgICBjb21wdXRlZFZhbHVlcy5tX2V4dGVudCA9IGxvZ2ljYWxXaWR0aCgpOwogICAgIGNv
bXB1dGVkVmFsdWVzLm1fcG9zaXRpb24gPSBsb2dpY2FsTGVmdCgpOwpAQCAtMjMwMSw3ICsyMzAx
LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZwogICAgIGlmIChp
c091dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBjYWxjdWxh
dGlvbiBpcyBub3QgcGF0Y2hlZCBmb3IgYmxvY2stZmxvdyB5ZXQuCiAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjUwMAotICAgICAgICBjb21wdXRl
UG9zaXRpb25lZExvZ2ljYWxXaWR0aChjb21wdXRlZFZhbHVlcywgcmVnaW9uKTsKKyAgICAgICAg
Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGgoY29tcHV0ZWRWYWx1ZXMsIGZyYWdtZW50KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjMzMSw3ICsyMzMxLDcgQEAgdm9pZCBSZW5k
ZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZwogICAgIExlbmd0aCBsb2dpY2FsV2lkdGhM
ZW5ndGggPSB0cmVhdEFzUmVwbGFjZWQgPyBMZW5ndGgoY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdp
ZHRoKCksIEZpeGVkKSA6IHN0eWxlVG9Vc2UubG9naWNhbFdpZHRoKCk7CiAKICAgICBSZW5kZXJC
bG9jayYgY2IgPSAqY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgTGF5b3V0VW5pdCBjb250YWluZXJM
b2dpY2FsV2lkdGggPSBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBjb250YWluaW5nQmxvY2tMb2dp
Y2FsV2lkdGhGb3JDb250ZW50SW5SZWdpb24ocmVnaW9uKSk7CisgICAgTGF5b3V0VW5pdCBjb250
YWluZXJMb2dpY2FsV2lkdGggPSBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCBjb250YWluaW5nQmxv
Y2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5GcmFnbWVudChmcmFnbWVudCkpOwogICAgIGJvb2wg
aGFzUGVycGVuZGljdWxhckNvbnRhaW5pbmdCbG9jayA9IGNiLmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkgIT0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKIAogICAgIGlmIChpc0lubGluZSgp
ICYmICFpc0lubGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpKSB7CkBAIC0yMzUxLDggKzIzNTEsOCBA
QCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnCiAgICAgaWYgKHRyZWF0
QXNSZXBsYWNlZCkgewogICAgICAgICBjb21wdXRlZFZhbHVlcy5tX2V4dGVudCA9IGxvZ2ljYWxX
aWR0aExlbmd0aC52YWx1ZSgpICsgYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIExheW91dFVuaXQgcHJlZmVycmVkV2lkdGggPSBjb21wdXRlTG9n
aWNhbFdpZHRoSW5SZWdpb25Vc2luZyhNYWluT3JQcmVmZXJyZWRTaXplLCBzdHlsZVRvVXNlLmxv
Z2ljYWxXaWR0aCgpLCBjb250YWluZXJXaWR0aEluSW5saW5lRGlyZWN0aW9uLCBjYiwgcmVnaW9u
KTsKLSAgICAgICAgY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgPSBjb25zdHJhaW5Mb2dpY2FsV2lk
dGhJblJlZ2lvbkJ5TWluTWF4KHByZWZlcnJlZFdpZHRoLCBjb250YWluZXJXaWR0aEluSW5saW5l
RGlyZWN0aW9uLCBjYiwgcmVnaW9uKTsKKyAgICAgICAgTGF5b3V0VW5pdCBwcmVmZXJyZWRXaWR0
aCA9IGNvbXB1dGVMb2dpY2FsV2lkdGhJbkZyYWdtZW50VXNpbmcoTWFpbk9yUHJlZmVycmVkU2l6
ZSwgc3R5bGVUb1VzZS5sb2dpY2FsV2lkdGgoKSwgY29udGFpbmVyV2lkdGhJbklubGluZURpcmVj
dGlvbiwgY2IsIGZyYWdtZW50KTsKKyAgICAgICAgY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgPSBj
b25zdHJhaW5Mb2dpY2FsV2lkdGhJbkZyYWdtZW50QnlNaW5NYXgocHJlZmVycmVkV2lkdGgsIGNv
bnRhaW5lcldpZHRoSW5JbmxpbmVEaXJlY3Rpb24sIGNiLCBmcmFnbWVudCk7CiAgICAgfQogCiAg
ICAgLy8gTWFyZ2luIGNhbGN1bGF0aW9ucy4KQEAgLTIzNjIsNyArMjM2Miw3IEBAIHZvaWQgUmVu
ZGVyQm94Ojpjb21wdXRlTG9naWNhbFdpZHRoSW5SZWcKICAgICB9IGVsc2UgewogICAgICAgICBM
YXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aEZvckF1dG9NYXJnaW5zID0gY29udGFpbmVy
TG9naWNhbFdpZHRoOwogICAgICAgICBpZiAoYXZvaWRzRmxvYXRzKCkgJiYgY2IuY29udGFpbnNG
bG9hdHMoKSkKLSAgICAgICAgICAgIGNvbnRhaW5lckxvZ2ljYWxXaWR0aEZvckF1dG9NYXJnaW5z
ID0gY29udGFpbmluZ0Jsb2NrQXZhaWxhYmxlTGluZVdpZHRoSW5SZWdpb24ocmVnaW9uKTsKKyAg
ICAgICAgICAgIGNvbnRhaW5lckxvZ2ljYWxXaWR0aEZvckF1dG9NYXJnaW5zID0gY29udGFpbmlu
Z0Jsb2NrQXZhaWxhYmxlTGluZVdpZHRoSW5GcmFnbWVudChmcmFnbWVudCk7CiAgICAgICAgIGJv
b2wgaGFzSW52ZXJ0ZWREaXJlY3Rpb24gPSBjYi5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSAhPSBzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKICAgICAgICAgY29tcHV0
ZUlubGluZURpcmVjdGlvbk1hcmdpbnMoY2IsIGNvbnRhaW5lckxvZ2ljYWxXaWR0aEZvckF1dG9N
YXJnaW5zLCBjb21wdXRlZFZhbHVlcy5tX2V4dGVudCwKICAgICAgICAgICAgIGhhc0ludmVydGVk
RGlyZWN0aW9uID8gY29tcHV0ZWRWYWx1ZXMubV9tYXJnaW5zLm1fZW5kIDogY29tcHV0ZWRWYWx1
ZXMubV9tYXJnaW5zLm1fc3RhcnQsCkBAIC0yNDI1LDggKzI0MjUsOCBAQCBMYXlvdXRVbml0IFJl
bmRlckJveDo6Y29tcHV0ZUludHJpbnNpY0xvCiAgICAgcmV0dXJuIDA7CiB9CiAKLUxheW91dFVu
aXQgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb25Vc2luZyhTaXplVHlwZSB3
aWR0aFR5cGUsIExlbmd0aCBsb2dpY2FsV2lkdGgsIExheW91dFVuaXQgYXZhaWxhYmxlTG9naWNh
bFdpZHRoLAotICAgIGNvbnN0IFJlbmRlckJsb2NrJiBjYiwgUmVuZGVyUmVnaW9uKiByZWdpb24p
IGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aEluRnJhZ21l
bnRVc2luZyhTaXplVHlwZSB3aWR0aFR5cGUsIExlbmd0aCBsb2dpY2FsV2lkdGgsIExheW91dFVu
aXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoLAorICAgIGNvbnN0IFJlbmRlckJsb2NrJiBjYiwgUmVu
ZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50KSBjb25zdAogewogICAgIEFTU0VSVCh3aWR0
aFR5cGUgPT0gTWluU2l6ZSB8fCB3aWR0aFR5cGUgPT0gTWFpbk9yUHJlZmVycmVkU2l6ZSB8fCAh
bG9naWNhbFdpZHRoLmlzQXV0bygpKTsKICAgICBpZiAod2lkdGhUeXBlID09IE1pblNpemUgJiYg
bG9naWNhbFdpZHRoLmlzQXV0bygpKQpAQCAtMjQ0NSw3ICsyNDQ1LDcgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdAogICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRo
UmVzdWx0ID0gZmlsbEF2YWlsYWJsZU1lYXN1cmUoYXZhaWxhYmxlTG9naWNhbFdpZHRoLCBtYXJn
aW5TdGFydCwgbWFyZ2luRW5kKTsKIAogICAgIGlmIChzaHJpbmtUb0F2b2lkRmxvYXRzKCkgJiYg
Y2IuY29udGFpbnNGbG9hdHMoKSkKLSAgICAgICAgbG9naWNhbFdpZHRoUmVzdWx0ID0gc3RkOjpt
aW4obG9naWNhbFdpZHRoUmVzdWx0LCBzaHJpbmtMb2dpY2FsV2lkdGhUb0F2b2lkRmxvYXRzKG1h
cmdpblN0YXJ0LCBtYXJnaW5FbmQsIGNiLCByZWdpb24pKTsKKyAgICAgICAgbG9naWNhbFdpZHRo
UmVzdWx0ID0gc3RkOjptaW4obG9naWNhbFdpZHRoUmVzdWx0LCBzaHJpbmtMb2dpY2FsV2lkdGhU
b0F2b2lkRmxvYXRzKG1hcmdpblN0YXJ0LCBtYXJnaW5FbmQsIGNiLCBmcmFnbWVudCkpOwogCiAg
ICAgaWYgKHdpZHRoVHlwZSA9PSBNYWluT3JQcmVmZXJyZWRTaXplICYmIHNpemVzTG9naWNhbFdp
ZHRoVG9GaXRDb250ZW50KHdpZHRoVHlwZSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om1heChtaW5Q
cmVmZXJyZWRMb2dpY2FsV2lkdGgoKSwgc3RkOjptaW4obWF4UHJlZmVycmVkTG9naWNhbFdpZHRo
KCksIGxvZ2ljYWxXaWR0aFJlc3VsdCkpOwpAQCAtMjYxMywxNiArMjYxMywxNiBAQCB2b2lkIFJl
bmRlckJveDo6Y29tcHV0ZUlubGluZURpcmVjdGlvbk1hCiAgICAgbWFyZ2luRW5kID0gbWluaW11
bVZhbHVlRm9yTGVuZ3RoKG1hcmdpbkVuZExlbmd0aCwgY29udGFpbmVyV2lkdGgpOwogfQogCi1S
ZW5kZXJCb3hSZWdpb25JbmZvKiBSZW5kZXJCb3g6OnJlbmRlckJveFJlZ2lvbkluZm8oUmVuZGVy
UmVnaW9uKiByZWdpb24sIFJlbmRlckJveFJlZ2lvbkluZm9GbGFncyBjYWNoZUZsYWcpIGNvbnN0
CitSZW5kZXJCb3hGcmFnbWVudEluZm8qIFJlbmRlckJveDo6cmVuZGVyQm94RnJhZ21lbnRJbmZv
KFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCwgUmVuZGVyQm94RnJhZ21lbnRJbmZv
RmxhZ3MgY2FjaGVGbGFnKSBjb25zdAogewotICAgIC8vIE1ha2Ugc3VyZSBub2JvZHkgaXMgdHJ5
aW5nIHRvIGNhbGwgdGhpcyB3aXRoIGEgbnVsbCByZWdpb24uCi0gICAgaWYgKCFyZWdpb24pCisg
ICAgLy8gTWFrZSBzdXJlIG5vYm9keSBpcyB0cnlpbmcgdG8gY2FsbCB0aGlzIHdpdGggYSBudWxs
IGZyYWdtZW50LgorICAgIGlmICghZnJhZ21lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgLy8gSWYgd2UgaGF2ZSBjb21wdXRlZCBvdXIgd2lkdGggaW4gdGhpcyByZWdpb24gYWxy
ZWFkeSwgaXQgd2lsbCBiZSBjYWNoZWQsIGFuZCB3ZSBjYW4KKyAgICAvLyBJZiB3ZSBoYXZlIGNv
bXB1dGVkIG91ciB3aWR0aCBpbiB0aGlzIGZyYWdtZW50IGFscmVhZHksIGl0IHdpbGwgYmUgY2Fj
aGVkLCBhbmQgd2UgY2FuCiAgICAgLy8ganVzdCByZXR1cm4gaXQuCi0gICAgUmVuZGVyQm94UmVn
aW9uSW5mbyogYm94SW5mbyA9IHJlZ2lvbi0+cmVuZGVyQm94UmVnaW9uSW5mbyh0aGlzKTsKLSAg
ICBpZiAoYm94SW5mbyAmJiBjYWNoZUZsYWcgPT0gQ2FjaGVSZW5kZXJCb3hSZWdpb25JbmZvKQor
ICAgIFJlbmRlckJveEZyYWdtZW50SW5mbyogYm94SW5mbyA9IGZyYWdtZW50LT5yZW5kZXJCb3hG
cmFnbWVudEluZm8odGhpcyk7CisgICAgaWYgKGJveEluZm8gJiYgY2FjaGVGbGFnID09IENhY2hl
UmVuZGVyQm94RnJhZ21lbnRJbmZvKQogICAgICAgICByZXR1cm4gYm94SW5mbzsKIAogICAgIHJl
dHVybiBudWxscHRyOwpAQCAtMjg3NSw3ICsyODc1LDcgQEAgYm9vbCBSZW5kZXJCb3g6OnNob3Vs
ZFRyZWF0Q2hpbGRBc1JlcGxhYwogc3RhdGljIGJvb2wgdGFibGVDZWxsU2hvdWxkSGF2ZVplcm9J
bml0aWFsU2l6ZShjb25zdCBSZW5kZXJCbG9jayYgYmxvY2ssIGNvbnN0IFJlbmRlckJveCYgY2hp
bGQsIGJvb2wgc2Nyb2xsc092ZXJmbG93WSkKIHsKICAgICAvLyBOb3JtYWxseSB3ZSB3b3VsZCBs
ZXQgdGhlIGNlbGwgc2l6ZSBpbnRyaW5zaWNhbGx5LCBidXQgc2Nyb2xsaW5nIG92ZXJmbG93IGhh
cyB0byBiZQotICAgIC8vIHRyZWF0ZWQgZGlmZmVyZW50bHksIHNpbmNlIFdpbklFIGxldHMgc2Ny
b2xsZWQgb3ZlcmZsb3cgcmVnaW9ucyBzaHJpbmsgYXMgbmVlZGVkLgorICAgIC8vIHRyZWF0ZWQg
ZGlmZmVyZW50bHksIHNpbmNlIFdpbklFIGxldHMgc2Nyb2xsZWQgb3ZlcmZsb3cgZnJhZ21lbnRz
IHNocmluayBhcyBuZWVkZWQuCiAgICAgLy8gV2hpbGUgd2UgY2FuJ3QgZ2V0IGFsbCBjYXNlcyBy
aWdodCwgd2UgY2FuIGF0IGxlYXN0IGRldGVjdCB3aGVuIHRoZSBjZWxsIGhhcyBhIHNwZWNpZmll
ZAogICAgIC8vIGhlaWdodCBvciB3aGVuIHRoZSB0YWJsZSBoYXMgYSBzcGVjaWZpZWQgaGVpZ2h0
LiBJbiB0aGVzZSBjYXNlcyB3ZSB3YW50IHRvIGluaXRpYWxseSBoYXZlCiAgICAgLy8gbm8gc2l6
ZSBhbmQgYWxsb3cgdGhlIGZsZXhpbmcgb2YgdGhlIHRhYmxlIG9yIHRoZSBjZWxsIHRvIGl0cyBz
cGVjaWZpZWQgaGVpZ2h0IHRvIGNhdXNlIHVzCkBAIC0zMjAzLDcgKzMyMDMsNyBAQCB2b2lkIFJl
bmRlckJveDo6Y29tcHV0ZUFuZFNldEJsb2NrRGlyZWN0CiAgICAgY29udGFpbmluZ0Jsb2NrLnNl
dE1hcmdpbkFmdGVyRm9yQ2hpbGQoKnRoaXMsIG1hcmdpbkFmdGVyKTsKIH0KIAotTGF5b3V0VW5p
dCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29u
c3QgUmVuZGVyQm94TW9kZWxPYmplY3QmIGNvbnRhaW5pbmdCbG9jaywgUmVuZGVyUmVnaW9uKiBy
ZWdpb24sIGJvb2wgY2hlY2tGb3JQZXJwZW5kaWN1bGFyV3JpdGluZ01vZGUpIGNvbnN0CitMYXlv
dXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yUG9zaXRpb25l
ZChjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgY29udGFpbmluZ0Jsb2NrLCBSZW5kZXJGcmFn
bWVudENvbnRhaW5lciogZnJhZ21lbnQsIGJvb2wgY2hlY2tGb3JQZXJwZW5kaWN1bGFyV3JpdGlu
Z01vZGUpIGNvbnN0CiB7CiAgICAgaWYgKGNoZWNrRm9yUGVycGVuZGljdWxhcldyaXRpbmdNb2Rl
ICYmIGNvbnRhaW5pbmdCbG9jay5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9IGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBjb250YWluaW5nQmxvY2tMb2dpY2Fs
SGVpZ2h0Rm9yUG9zaXRpb25lZChjb250YWluaW5nQmxvY2ssIGZhbHNlKTsKQEAgLTMyMjgsMTkg
KzMyMjgsMTkgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZwogICAg
ICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4oY29udGFpbmluZ0Jsb2NrKS5jbGll
bnRMb2dpY2FsV2lkdGgoKTsKIAogICAgICAgICBjb25zdCBSZW5kZXJCbG9jayYgY2IgPSBkb3du
Y2FzdDxSZW5kZXJCbG9jaz4oY29udGFpbmluZ0Jsb2NrKTsKLSAgICAgICAgUmVuZGVyQm94UmVn
aW9uSW5mbyogYm94SW5mbyA9IG51bGxwdHI7Ci0gICAgICAgIGlmICghcmVnaW9uKSB7CisgICAg
ICAgIFJlbmRlckJveEZyYWdtZW50SW5mbyogYm94SW5mbyA9IG51bGxwdHI7CisgICAgICAgIGlm
ICghZnJhZ21lbnQpIHsKICAgICAgICAgICAgIGlmIChpczxSZW5kZXJGbG93VGhyZWFkPihjb250
YWluaW5nQmxvY2spICYmICFjaGVja0ZvclBlcnBlbmRpY3VsYXJXcml0aW5nTW9kZSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4oY29udGFpbmluZ0Js
b2NrKS5jb250ZW50TG9naWNhbFdpZHRoT2ZGaXJzdFJlZ2lvbigpOworICAgICAgICAgICAgICAg
IHJldHVybiBkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFkPihjb250YWluaW5nQmxvY2spLmNvbnRl
bnRMb2dpY2FsV2lkdGhPZkZpcnN0RnJhZ21lbnQoKTsKICAgICAgICAgICAgIGlmIChpc1dyaXRp
bmdNb2RlUm9vdCgpKSB7CiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBjYlBhZ2VPZmZzZXQg
PSBjYi5vZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCk7Ci0gICAgICAgICAgICAgICAg
UmVuZGVyUmVnaW9uKiBjYlJlZ2lvbiA9IGNiLnJlZ2lvbkF0QmxvY2tPZmZzZXQoY2JQYWdlT2Zm
c2V0KTsKLSAgICAgICAgICAgICAgICBpZiAoY2JSZWdpb24pCi0gICAgICAgICAgICAgICAgICAg
IGJveEluZm8gPSBjYi5yZW5kZXJCb3hSZWdpb25JbmZvKGNiUmVnaW9uKTsKKyAgICAgICAgICAg
ICAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogY2JGcmFnbWVudCA9IGNiLmZyYWdtZW50QXRC
bG9ja09mZnNldChjYlBhZ2VPZmZzZXQpOworICAgICAgICAgICAgICAgIGlmIChjYkZyYWdtZW50
KQorICAgICAgICAgICAgICAgICAgICBib3hJbmZvID0gY2IucmVuZGVyQm94RnJhZ21lbnRJbmZv
KGNiRnJhZ21lbnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGZsb3dUaHJl
YWQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gY29udGFpbmluZ0Jsb2NrLmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgIFJlbmRlclJlZ2lvbiogY29udGFpbmlu
Z0Jsb2NrUmVnaW9uID0gY2IuY2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhyZWdpb24pOwotICAg
ICAgICAgICAgYm94SW5mbyA9IGNiLnJlbmRlckJveFJlZ2lvbkluZm8oY29udGFpbmluZ0Jsb2Nr
UmVnaW9uKTsKKyAgICAgICAgICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBjb250YWluaW5n
QmxvY2tGcmFnbWVudCA9IGNiLmNsYW1wVG9TdGFydEFuZEVuZEZyYWdtZW50cyhmcmFnbWVudCk7
CisgICAgICAgICAgICBib3hJbmZvID0gY2IucmVuZGVyQm94RnJhZ21lbnRJbmZvKGNvbnRhaW5p
bmdCbG9ja0ZyYWdtZW50KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gKGJveEluZm8pID8g
c3RkOjptYXg8TGF5b3V0VW5pdD4oMCwgY2IuY2xpZW50TG9naWNhbFdpZHRoKCkgLSAoY2IubG9n
aWNhbFdpZHRoKCkgLSBib3hJbmZvLT5sb2dpY2FsV2lkdGgoKSkpIDogY2IuY2xpZW50TG9naWNh
bFdpZHRoKCk7CiAgICAgfQpAQCAtMzI4OCw3ICszMjg4LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJC
b3g6OmNvbnRhaW5pbmdCbG9ja0xvZwogICAgICAgICBMYXlvdXRVbml0IHJlc3VsdCA9IGNiLmNs
aWVudExvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVh
ZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKICAgICAgICAgaWYgKGZsb3dUaHJlYWQg
JiYgaXM8UmVuZGVyRmxvd1RocmVhZD4oY29udGFpbmluZ0Jsb2NrKSAmJiBmbG93VGhyZWFkLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGNvbnRhaW5pbmdCbG9jay5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckZsb3dUaHJl
YWQ+KGNvbnRhaW5pbmdCbG9jaykuY29udGVudExvZ2ljYWxIZWlnaHRPZkZpcnN0UmVnaW9uKCk7
CisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4oY29udGFpbmlu
Z0Jsb2NrKS5jb250ZW50TG9naWNhbEhlaWdodE9mRmlyc3RGcmFnbWVudCgpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAgICAgCkBAIC0zMzEyLDcgKzMzMTIsNyBAQCBMYXlv
dXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9nCiAgICAgcmV0dXJuIGhlaWdodFJl
c3VsdDsKIH0KIAotc3RhdGljIHZvaWQgY29tcHV0ZUlubGluZVN0YXRpY0Rpc3RhbmNlKExlbmd0
aCYgbG9naWNhbExlZnQsIExlbmd0aCYgbG9naWNhbFJpZ2h0LCBjb25zdCBSZW5kZXJCb3gqIGNo
aWxkLCBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgY29udGFpbmVyQmxvY2ssIExheW91dFVu
aXQgY29udGFpbmVyTG9naWNhbFdpZHRoLCBSZW5kZXJSZWdpb24qIHJlZ2lvbikKK3N0YXRpYyB2
b2lkIGNvbXB1dGVJbmxpbmVTdGF0aWNEaXN0YW5jZShMZW5ndGgmIGxvZ2ljYWxMZWZ0LCBMZW5n
dGgmIGxvZ2ljYWxSaWdodCwgY29uc3QgUmVuZGVyQm94KiBjaGlsZCwgY29uc3QgUmVuZGVyQm94
TW9kZWxPYmplY3QmIGNvbnRhaW5lckJsb2NrLCBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxX
aWR0aCwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50KQogewogICAgIGlmICghbG9n
aWNhbExlZnQuaXNBdXRvKCkgfHwgIWxvZ2ljYWxSaWdodC5pc0F1dG8oKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMzM0MiwxMCArMzM0MiwxMCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlSW5saW5lU3Rh
dGljRGlzdGFuY2UoCiAgICAgICAgICAgICBzdGF0aWNQb3NpdGlvbiArPSByZW5kZXJCb3gubG9n
aWNhbExlZnQoKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJCb3guaXNJbkZsb3dQb3NpdGlvbmVk
KCkpCiAgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24gKz0gcmVuZGVyQm94LmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyByZW5kZXJCb3gub2Zmc2V0Rm9ySW5GbG93UG9zaXRpb24oKS53
aWR0aCgpIDogcmVuZGVyQm94Lm9mZnNldEZvckluRmxvd1Bvc2l0aW9uKCkuaGVpZ2h0KCk7Ci0g
ICAgICAgICAgICBpZiAocmVnaW9uICYmIGlzPFJlbmRlckJsb2NrPigqY3VycmVudCkpIHsKKyAg
ICAgICAgICAgIGlmIChmcmFnbWVudCAmJiBpczxSZW5kZXJCbG9jaz4oKmN1cnJlbnQpKSB7CiAg
ICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyQmxvY2smIGN1cnJlbnRCbG9jayA9IGRvd25jYXN0
PFJlbmRlckJsb2NrPigqY3VycmVudCk7Ci0gICAgICAgICAgICAgICAgcmVnaW9uID0gY3VycmVu
dEJsb2NrLmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9uKTsKLSAgICAgICAgICAgICAg
ICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZvID0gY3VycmVudEJsb2NrLnJlbmRlckJveFJl
Z2lvbkluZm8ocmVnaW9uKTsKKyAgICAgICAgICAgICAgICBmcmFnbWVudCA9IGN1cnJlbnRCbG9j
ay5jbGFtcFRvU3RhcnRBbmRFbmRGcmFnbWVudHMoZnJhZ21lbnQpOworICAgICAgICAgICAgICAg
IFJlbmRlckJveEZyYWdtZW50SW5mbyogYm94SW5mbyA9IGN1cnJlbnRCbG9jay5yZW5kZXJCb3hG
cmFnbWVudEluZm8oZnJhZ21lbnQpOwogICAgICAgICAgICAgICAgIGlmIChib3hJbmZvKQogICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNQb3NpdGlvbiArPSBib3hJbmZvLT5sb2dpY2FsTGVmdCgp
OwogICAgICAgICAgICAgfQpAQCAtMzM3MCwxMCArMzM3MCwxMCBAQCBzdGF0aWMgdm9pZCBjb21w
dXRlSW5saW5lU3RhdGljRGlzdGFuY2UoCiAgICAgICAgICAgICAgICAgaWYgKHJlbmRlckJveC5p
c0luRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24g
LT0gcmVuZGVyQm94LmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyByZW5kZXJCb3gub2Zmc2V0
Rm9ySW5GbG93UG9zaXRpb24oKS53aWR0aCgpIDogcmVuZGVyQm94Lm9mZnNldEZvckluRmxvd1Bv
c2l0aW9uKCkuaGVpZ2h0KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocmVnaW9u
ICYmIGlzPFJlbmRlckJsb2NrPigqY3VycmVudCkpIHsKKyAgICAgICAgICAgIGlmIChmcmFnbWVu
dCAmJiBpczxSZW5kZXJCbG9jaz4oKmN1cnJlbnQpKSB7CiAgICAgICAgICAgICAgICAgYXV0byYg
Y3VycmVudEJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjdXJyZW50KTsKLSAgICAgICAg
ICAgICAgICByZWdpb24gPSBjdXJyZW50QmxvY2suY2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhy
ZWdpb24pOwotICAgICAgICAgICAgICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGJveEluZm8gPSBj
dXJyZW50QmxvY2sucmVuZGVyQm94UmVnaW9uSW5mbyhyZWdpb24pOworICAgICAgICAgICAgICAg
IGZyYWdtZW50ID0gY3VycmVudEJsb2NrLmNsYW1wVG9TdGFydEFuZEVuZEZyYWdtZW50cyhmcmFn
bWVudCk7CisgICAgICAgICAgICAgICAgUmVuZGVyQm94RnJhZ21lbnRJbmZvKiBib3hJbmZvID0g
Y3VycmVudEJsb2NrLnJlbmRlckJveEZyYWdtZW50SW5mbyhmcmFnbWVudCk7CiAgICAgICAgICAg
ICAgICAgaWYgKGJveEluZm8pIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgIT0g
JmNvbnRhaW5lckJsb2NrKQogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljUG9zaXRpb24g
LT0gY3VycmVudEJsb2NrLmxvZ2ljYWxXaWR0aCgpIC0gKGJveEluZm8tPmxvZ2ljYWxMZWZ0KCkg
KyBib3hJbmZvLT5sb2dpY2FsV2lkdGgoKSk7CkBAIC0zMzg4LDExICszMzg4LDExIEBAIHN0YXRp
YyB2b2lkIGNvbXB1dGVJbmxpbmVTdGF0aWNEaXN0YW5jZSgKICAgICB9CiB9CiAKLXZvaWQgUmVu
ZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aChMb2dpY2FsRXh0ZW50Q29tcHV0
ZWRWYWx1ZXMmIGNvbXB1dGVkVmFsdWVzLCBSZW5kZXJSZWdpb24qIHJlZ2lvbikgY29uc3QKK3Zv
aWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aChMb2dpY2FsRXh0ZW50
Q29tcHV0ZWRWYWx1ZXMmIGNvbXB1dGVkVmFsdWVzLCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciog
ZnJhZ21lbnQpIGNvbnN0CiB7CiAgICAgaWYgKGlzUmVwbGFjZWQoKSkgewogICAgICAgICAvLyBG
SVhNRTogUG9zaXRpb25lZCByZXBsYWNlZCBlbGVtZW50cyBpbnNpZGUgYSBmbG93IHRocmVhZCBh
cmUgbm90IHdvcmtpbmcgcHJvcGVybHkKLSAgICAgICAgLy8gd2l0aCB2YXJpYWJsZSB3aWR0aCBy
ZWdpb25zIChzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5ODk2
ICkuCisgICAgICAgIC8vIHdpdGggdmFyaWFibGUgd2lkdGggZnJhZ21lbnRzIChzZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5ODk2ICkuCiAgICAgICAgIGNvbXB1
dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoUmVwbGFjZWQoY29tcHV0ZWRWYWx1ZXMpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMzQxNyw3ICszNDE3LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNv
bXB1dGVQb3NpdGlvbmVkTG9naWNhbAogICAgIC8vIHJlbGF0aXZlIHBvc2l0aW9uZWQgaW5saW5l
LgogICAgIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiBjb250YWluZXJCbG9jayA9IGRvd25j
YXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqY29udGFpbmVyKCkpOwogICAgIAotICAgIGNvbnN0
IExheW91dFVuaXQgY29udGFpbmVyTG9naWNhbFdpZHRoID0gY29udGFpbmluZ0Jsb2NrTG9naWNh
bFdpZHRoRm9yUG9zaXRpb25lZChjb250YWluZXJCbG9jaywgcmVnaW9uKTsKKyAgICBjb25zdCBM
YXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxX
aWR0aEZvclBvc2l0aW9uZWQoY29udGFpbmVyQmxvY2ssIGZyYWdtZW50KTsKIAogICAgIC8vIFVz
ZSB0aGUgY29udGFpbmVyIGJsb2NrJ3MgZGlyZWN0aW9uIGV4Y2VwdCB3aGVuIGNhbGN1bGF0aW5n
IHRoZSBzdGF0aWMgZGlzdGFuY2UKICAgICAvLyBUaGlzIGNvbmZvcm1zIHdpdGggdGhlIHJlZmVy
ZW5jZSByZXN1bHRzIGZvciBhYnNwb3MtcmVwbGFjZWQtd2lkdGgtbWFyZ2luLTAwMC5odG0KQEAg
LTM0NTgsNyArMzQ1OCw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2lj
YWwKIAogICAgIC8vIHNlZSBGSVhNRSAxCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBzdGF0aWMgZGlz
dGFuY2UgaWYgbmVlZGVkLgotICAgIGNvbXB1dGVJbmxpbmVTdGF0aWNEaXN0YW5jZShsb2dpY2Fs
TGVmdExlbmd0aCwgbG9naWNhbFJpZ2h0TGVuZ3RoLCB0aGlzLCBjb250YWluZXJCbG9jaywgY29u
dGFpbmVyTG9naWNhbFdpZHRoLCByZWdpb24pOworICAgIGNvbXB1dGVJbmxpbmVTdGF0aWNEaXN0
YW5jZShsb2dpY2FsTGVmdExlbmd0aCwgbG9naWNhbFJpZ2h0TGVuZ3RoLCB0aGlzLCBjb250YWlu
ZXJCbG9jaywgY29udGFpbmVyTG9naWNhbFdpZHRoLCBmcmFnbWVudCk7CiAgICAgCiAgICAgLy8g
Q2FsY3VsYXRlIGNvbnN0cmFpbnQgZXF1YXRpb24gdmFsdWVzIGZvciAnd2lkdGgnIGNhc2UuCiAg
ICAgY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhVc2luZyhNYWluT3JQcmVmZXJyZWRTaXpl
LCBzdHlsZSgpLmxvZ2ljYWxXaWR0aCgpLCBjb250YWluZXJCbG9jaywgY29udGFpbmVyRGlyZWN0
aW9uLApAQCAtMzUwNywxNyArMzUwNywxNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0
aW9uZWRMb2dpY2FsCiAgICAgICAgICAgICBjb21wdXRlZFZhbHVlcy5tX3Bvc2l0aW9uICs9IGNv
bnRhaW5pbmdCb3gudmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOwogICAgIH0KICAgICAKLSAgICAv
LyBBZGp1c3QgbG9naWNhbExlZnQgaWYgd2UgbmVlZCB0byBmb3IgdGhlIGZsaXBwZWQgdmVyc2lv
biBvZiBvdXIgd3JpdGluZyBtb2RlIGluIHJlZ2lvbnMuCisgICAgLy8gQWRqdXN0IGxvZ2ljYWxM
ZWZ0IGlmIHdlIG5lZWQgdG8gZm9yIHRoZSBmbGlwcGVkIHZlcnNpb24gb2Ygb3VyIHdyaXRpbmcg
bW9kZSBpbiBmcmFnbWVudHMuCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0
eXBlcyBvZiBvYmplY3RzIGFzIGNvbnRhaW5lckJsb2NrLCBub3Qgb25seSBSZW5kZXJCbG9jay4K
ICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdC
bG9jaygpOwotICAgIGlmIChmbG93VGhyZWFkICYmICFyZWdpb24gJiYgaXNXcml0aW5nTW9kZVJv
b3QoKSAmJiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGNvbnRhaW5lckJsb2NrLmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgaXM8UmVuZGVyQmxvY2s+KGNvbnRhaW5lckJsb2NrKSkg
ewotICAgICAgICBBU1NFUlQoY29udGFpbmVyQmxvY2suY2FuSGF2ZUJveEluZm9JblJlZ2lvbigp
KTsKKyAgICBpZiAoZmxvd1RocmVhZCAmJiAhZnJhZ21lbnQgJiYgaXNXcml0aW5nTW9kZVJvb3Qo
KSAmJiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGNvbnRhaW5lckJsb2NrLmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgJiYgaXM8UmVuZGVyQmxvY2s+KGNvbnRhaW5lckJsb2NrKSkgewor
ICAgICAgICBBU1NFUlQoY29udGFpbmVyQmxvY2suY2FuSGF2ZUJveEluZm9JbkZyYWdtZW50KCkp
OwogICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0UG9zID0gY29tcHV0ZWRWYWx1ZXMubV9w
b3NpdGlvbjsKICAgICAgICAgY29uc3QgUmVuZGVyQmxvY2smIHJlbmRlckJsb2NrID0gZG93bmNh
c3Q8UmVuZGVyQmxvY2s+KGNvbnRhaW5lckJsb2NrKTsKICAgICAgICAgTGF5b3V0VW5pdCBjYlBh
Z2VPZmZzZXQgPSByZW5kZXJCbG9jay5vZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCk7
Ci0gICAgICAgIFJlbmRlclJlZ2lvbiogY2JSZWdpb24gPSByZW5kZXJCbG9jay5yZWdpb25BdEJs
b2NrT2Zmc2V0KGNiUGFnZU9mZnNldCk7Ci0gICAgICAgIGlmIChjYlJlZ2lvbikgewotICAgICAg
ICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IHJlbmRlckJsb2NrLnJlbmRlckJv
eFJlZ2lvbkluZm8oY2JSZWdpb24pOworICAgICAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciog
Y2JGcmFnbWVudCA9IHJlbmRlckJsb2NrLmZyYWdtZW50QXRCbG9ja09mZnNldChjYlBhZ2VPZmZz
ZXQpOworICAgICAgICBpZiAoY2JGcmFnbWVudCkgeworICAgICAgICAgICAgUmVuZGVyQm94RnJh
Z21lbnRJbmZvKiBib3hJbmZvID0gcmVuZGVyQmxvY2sucmVuZGVyQm94RnJhZ21lbnRJbmZvKGNi
RnJhZ21lbnQpOwogICAgICAgICAgICAgaWYgKGJveEluZm8pIHsKICAgICAgICAgICAgICAgICBs
b2dpY2FsTGVmdFBvcyArPSBib3hJbmZvLT5sb2dpY2FsTGVmdCgpOwogICAgICAgICAgICAgICAg
IGNvbXB1dGVkVmFsdWVzLm1fcG9zaXRpb24gPSBsb2dpY2FsTGVmdFBvczsKQEAgLTM4MzIsMTcg
KzM4MzIsMTcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbAogICAg
IC8vIFNldCBmaW5hbCBoZWlnaHQgdmFsdWUuCiAgICAgY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQg
Kz0gYm9yZGVyc1BsdXNQYWRkaW5nOwogICAgIAotICAgIC8vIEFkanVzdCBsb2dpY2FsVG9wIGlm
IHdlIG5lZWQgdG8gZm9yIHBlcnBlbmRpY3VsYXIgd3JpdGluZyBtb2RlcyBpbiByZWdpb25zLgor
ICAgIC8vIEFkanVzdCBsb2dpY2FsVG9wIGlmIHdlIG5lZWQgdG8gZm9yIHBlcnBlbmRpY3VsYXIg
d3JpdGluZyBtb2RlcyBpbiBmcmFnbWVudHMuCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZv
ciBvdGhlciB0eXBlcyBvZiBvYmplY3RzIGFzIGNvbnRhaW5lckJsb2NrLCBub3Qgb25seSBSZW5k
ZXJCbG9jay4KICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENv
bnRhaW5pbmdCbG9jaygpOwogICAgIGlmIChmbG93VGhyZWFkICYmIGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgIT0gY29udGFpbmVyQmxvY2suaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiBp
czxSZW5kZXJCbG9jaz4oY29udGFpbmVyQmxvY2spKSB7Ci0gICAgICAgIEFTU0VSVChjb250YWlu
ZXJCbG9jay5jYW5IYXZlQm94SW5mb0luUmVnaW9uKCkpOworICAgICAgICBBU1NFUlQoY29udGFp
bmVyQmxvY2suY2FuSGF2ZUJveEluZm9JbkZyYWdtZW50KCkpOwogICAgICAgICBMYXlvdXRVbml0
IGxvZ2ljYWxUb3BQb3MgPSBjb21wdXRlZFZhbHVlcy5tX3Bvc2l0aW9uOwogICAgICAgICBjb25z
dCBSZW5kZXJCbG9jayYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGNvbnRhaW5l
ckJsb2NrKTsKICAgICAgICAgTGF5b3V0VW5pdCBjYlBhZ2VPZmZzZXQgPSByZW5kZXJCb3gub2Zm
c2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIC0gbG9naWNhbExlZnQoKTsKLSAgICAgICAg
UmVuZGVyUmVnaW9uKiBjYlJlZ2lvbiA9IHJlbmRlckJveC5yZWdpb25BdEJsb2NrT2Zmc2V0KGNi
UGFnZU9mZnNldCk7Ci0gICAgICAgIGlmIChjYlJlZ2lvbikgewotICAgICAgICAgICAgUmVuZGVy
Qm94UmVnaW9uSW5mbyogYm94SW5mbyA9IHJlbmRlckJveC5yZW5kZXJCb3hSZWdpb25JbmZvKGNi
UmVnaW9uKTsKKyAgICAgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGNiRnJhZ21lbnQgPSBy
ZW5kZXJCb3guZnJhZ21lbnRBdEJsb2NrT2Zmc2V0KGNiUGFnZU9mZnNldCk7CisgICAgICAgIGlm
IChjYkZyYWdtZW50KSB7CisgICAgICAgICAgICBSZW5kZXJCb3hGcmFnbWVudEluZm8qIGJveElu
Zm8gPSByZW5kZXJCb3gucmVuZGVyQm94RnJhZ21lbnRJbmZvKGNiRnJhZ21lbnQpOwogICAgICAg
ICAgICAgaWYgKGJveEluZm8pIHsKICAgICAgICAgICAgICAgICBsb2dpY2FsVG9wUG9zICs9IGJv
eEluZm8tPmxvZ2ljYWxMZWZ0KCk7CiAgICAgICAgICAgICAgICAgY29tcHV0ZWRWYWx1ZXMubV9w
b3NpdGlvbiA9IGxvZ2ljYWxUb3BQb3M7CkBAIC00MDUyLDcgKzQwNTIsNyBAQCB2b2lkIFJlbmRl
ckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsCiAgICAgICogICAgZWxzZSBpZiAnZGlyZWN0
aW9uJyBpcyAncnRsJywgc2V0ICdyaWdodCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbi4KICAgICBc
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KICAgICAvLyBzZWUgRklYTUUgMQotICAgIGNvbXB1dGVJbmxpbmVT
dGF0aWNEaXN0YW5jZShsb2dpY2FsTGVmdCwgbG9naWNhbFJpZ2h0LCB0aGlzLCBjb250YWluZXJC
bG9jaywgY29udGFpbmVyTG9naWNhbFdpZHRoLCBudWxscHRyKTsgLy8gRklYTUU6IFBhc3MgdGhl
IHJlZ2lvbi4KKyAgICBjb21wdXRlSW5saW5lU3RhdGljRGlzdGFuY2UobG9naWNhbExlZnQsIGxv
Z2ljYWxSaWdodCwgdGhpcywgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lckxvZ2ljYWxXaWR0aCwg
bnVsbHB0cik7IC8vIEZJWE1FOiBQYXNzIHRoZSBmcmFnbWVudC4KIAogICAgIC8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qXAogICAgICAqIDMuIElmICdsZWZ0JyBvciAncmlnaHQnIGFyZSAnYXV0bycsIHJlcGxh
Y2UgYW55ICdhdXRvJyBvbiAnbWFyZ2luLWxlZnQnCkBAIC00MzU3LDcgKzQzNTcsNyBAQCBMYXlv
dXRSZWN0IFJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QoSW5sCiAgICAgcmV0dXJuIHJlY3Q7CiB9
CiAKLVZpc2libGVQb3NpdGlvbiBSZW5kZXJCb3g6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5
b3V0UG9pbnQmIHBvaW50LCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbikKK1Zpc2libGVQb3Np
dGlvbiBSZW5kZXJCb3g6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50
LCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQpCiB7CiAgICAgLy8gbm8g
Y2hpbGRyZW4uLi5yZXR1cm4gdGhpcyByZW5kZXIgb2JqZWN0J3MgZWxlbWVudCwgaWYgdGhlcmUg
aXMgb25lLCBhbmQgb2Zmc2V0IDAKICAgICBpZiAoIWZpcnN0Q2hpbGQoKSkKQEAgLTQzODMsOCAr
NDM4Myw4IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJCb3g6OnBvc2l0aW9uRm9yUG8KIAogICAg
IGZvciAoYXV0byYgcmVuZGVyZXIgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJCb3g+KCp0aGlzKSkg
ewogICAgICAgICBpZiAoaXM8UmVuZGVyRmxvd1RocmVhZD4oKnRoaXMpKSB7Ci0gICAgICAgICAg
ICBBU1NFUlQocmVnaW9uKTsKLSAgICAgICAgICAgIGlmICghZG93bmNhc3Q8UmVuZGVyRmxvd1Ro
cmVhZD4oKnRoaXMpLm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9uKCZyZW5kZXJlciwg
cmVnaW9uKSkKKyAgICAgICAgICAgIEFTU0VSVChmcmFnbWVudCk7CisgICAgICAgICAgICBpZiAo
IWRvd25jYXN0PFJlbmRlckZsb3dUaHJlYWQ+KCp0aGlzKS5vYmplY3RTaG91bGRGcmFnbWVudElu
Rmxvd0ZyYWdtZW50KCZyZW5kZXJlciwgZnJhZ21lbnQpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CiAKQEAgLTQzOTksOCArNDM5OSw4IEBAIFZpc2libGVQb3NpdGlvbiBS
ZW5kZXJCb3g6OnBvc2l0aW9uRm9yUG8KICAgICAgICAgCiAgICAgICAgIGlmIChwb2ludC54KCkg
PD0gcmlnaHQgJiYgcG9pbnQueCgpID49IGxlZnQgJiYgcG9pbnQueSgpIDw9IHRvcCAmJiBwb2lu
dC55KCkgPj0gYm90dG9tKSB7CiAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyVGFibGVSb3c+KHJl
bmRlcmVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyZXIucG9zaXRpb25Gb3JQb2lu
dChwb2ludCArIGFkanVzdGVkUG9pbnQgLSByZW5kZXJlci5sb2NhdGlvbk9mZnNldCgpLCByZWdp
b24pOwotICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyLnBvc2l0aW9uRm9yUG9pbnQocG9pbnQg
LSByZW5kZXJlci5sb2NhdGlvbk9mZnNldCgpLCByZWdpb24pOworICAgICAgICAgICAgICAgIHJl
dHVybiByZW5kZXJlci5wb3NpdGlvbkZvclBvaW50KHBvaW50ICsgYWRqdXN0ZWRQb2ludCAtIHJl
bmRlcmVyLmxvY2F0aW9uT2Zmc2V0KCksIGZyYWdtZW50KTsKKyAgICAgICAgICAgIHJldHVybiBy
ZW5kZXJlci5wb3NpdGlvbkZvclBvaW50KHBvaW50IC0gcmVuZGVyZXIubG9jYXRpb25PZmZzZXQo
KSwgZnJhZ21lbnQpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRmluZCB0aGUgZGlzdGFuY2Ug
ZnJvbSAoeCwgeSkgdG8gdGhlIGJveC4gIFNwbGl0IHRoZSBzcGFjZSBhcm91bmQgdGhlIGJveCBp
bnRvIDggcGllY2VzCkBAIC00NDM3LDcgKzQ0MzcsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVy
Qm94Ojpwb3NpdGlvbkZvclBvCiAgICAgfQogICAgIAogICAgIGlmIChjbG9zZXN0UmVuZGVyZXIp
Ci0gICAgICAgIHJldHVybiBjbG9zZXN0UmVuZGVyZXItPnBvc2l0aW9uRm9yUG9pbnQoYWRqdXN0
ZWRQb2ludCAtIGNsb3Nlc3RSZW5kZXJlci0+bG9jYXRpb25PZmZzZXQoKSwgcmVnaW9uKTsKKyAg
ICAgICAgcmV0dXJuIGNsb3Nlc3RSZW5kZXJlci0+cG9zaXRpb25Gb3JQb2ludChhZGp1c3RlZFBv
aW50IC0gY2xvc2VzdFJlbmRlcmVyLT5sb2NhdGlvbk9mZnNldCgpLCBmcmFnbWVudCk7CiAgICAg
CiAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9y
ZU5vZGUobm9uUHNldWRvRWxlbWVudCgpKSk7CiB9CkBAIC00NDU1LDcgKzQ0NTUsNyBAQCBib29s
IFJlbmRlckJveDo6c2hyaW5rVG9Bdm9pZEZsb2F0cygpIGNvCiBib29sIFJlbmRlckJveDo6Y3Jl
YXRlc05ld0Zvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gaXNJbmxpbmVC
bG9ja09ySW5saW5lVGFibGUoKSB8fCBpc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkg
fHwgaGFzT3ZlcmZsb3dDbGlwKCkgfHwgaXNGbGV4SXRlbUluY2x1ZGluZ0RlcHJlY2F0ZWQoKQot
ICAgICAgICB8fCBpc1RhYmxlQ2VsbCgpIHx8IGlzVGFibGVDYXB0aW9uKCkgfHwgaXNGaWVsZHNl
dCgpIHx8IGlzV3JpdGluZ01vZGVSb290KCkgfHwgaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigp
IHx8IGlzUmVuZGVyRmxvd1RocmVhZCgpIHx8IGlzUmVuZGVyUmVnaW9uKCkKKyAgICAgICAgfHwg
aXNUYWJsZUNlbGwoKSB8fCBpc1RhYmxlQ2FwdGlvbigpIHx8IGlzRmllbGRzZXQoKSB8fCBpc1dy
aXRpbmdNb2RlUm9vdCgpIHx8IGlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIoKSB8fCBpc1JlbmRl
ckZsb3dUaHJlYWQoKSB8fCBpc1JlbmRlckZyYWdtZW50Q29udGFpbmVyKCkKICAgICAgICAgfHwg
aXNHcmlkSXRlbSgpIHx8IHN0eWxlKCkuc3BlY2lmaWVzQ29sdW1ucygpIHx8IHN0eWxlKCkuY29s
dW1uU3BhbigpOwogfQogCkBAIC00NDczLDcgKzQ0NzMsNyBAQCB2b2lkIFJlbmRlckJveDo6YWRk
VmlzdWFsRWZmZWN0T3ZlcmZsb3coCiAKICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFk
ID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwogICAgIGlmIChmbG93VGhyZWFkKQotICAg
ICAgICBmbG93VGhyZWFkLT5hZGRSZWdpb25zVmlzdWFsRWZmZWN0T3ZlcmZsb3codGhpcyk7Cisg
ICAgICAgIGZsb3dUaHJlYWQtPmFkZEZyYWdtZW50c1Zpc3VhbEVmZmVjdE92ZXJmbG93KHRoaXMp
OwogfQogCiBMYXlvdXRSZWN0IFJlbmRlckJveDo6YXBwbHlWaXN1YWxFZmZlY3RPdmVyZmxvdyhj
b25zdCBMYXlvdXRSZWN0JiBib3JkZXJCb3gpIGNvbnN0CkBAIC00NTMyLDcgKzQ1MzIsNyBAQCB2
b2lkIFJlbmRlckJveDo6YWRkT3ZlcmZsb3dGcm9tQ2hpbGQoY29uCiAKICAgICBSZW5kZXJGbG93
VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwogICAgIGlm
IChmbG93VGhyZWFkKQotICAgICAgICBmbG93VGhyZWFkLT5hZGRSZWdpb25zT3ZlcmZsb3dGcm9t
Q2hpbGQodGhpcywgY2hpbGQsIGRlbHRhKTsKKyAgICAgICAgZmxvd1RocmVhZC0+YWRkRnJhZ21l
bnRzT3ZlcmZsb3dGcm9tQ2hpbGQodGhpcywgY2hpbGQsIGRlbHRhKTsKIAogICAgIC8vIE9ubHkg
cHJvcGFnYXRlIGxheW91dCBvdmVyZmxvdyBmcm9tIHRoZSBjaGlsZCBpZiB0aGUgY2hpbGQgaXNu
J3QgY2xpcHBpbmcgaXRzIG92ZXJmbG93LiAgSWYgaXQgaXMsIHRoZW4KICAgICAvLyBpdHMgb3Zl
cmZsb3cgaXMgaW50ZXJuYWwgdG8gaXQsIGFuZCB3ZSBkb24ndCBjYXJlIGFib3V0IGl0LiAgbGF5
b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24gdGFrZXMgY2FyZSBvZiB0aGlzCkBAIC00NjA0
LDcgKzQ2MDQsNyBAQCB2b2lkIFJlbmRlckJveDo6Y2xlYXJPdmVyZmxvdygpCiAgICAgbV9vdmVy
ZmxvdyA9IG51bGxwdHI7CiAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dU
aHJlYWRDb250YWluaW5nQmxvY2soKTsKICAgICBpZiAoZmxvd1RocmVhZCkKLSAgICAgICAgZmxv
d1RocmVhZC0+Y2xlYXJSZWdpb25zT3ZlcmZsb3codGhpcyk7CisgICAgICAgIGZsb3dUaHJlYWQt
PmNsZWFyRnJhZ21lbnRzT3ZlcmZsb3codGhpcyk7CiB9CiAgICAgCiBib29sIFJlbmRlckJveDo6
cGVyY2VudGFnZUxvZ2ljYWxIZWlnaHRJc1Jlc29sdmFibGUoKSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24gMjIyNDYyKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiw4
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW5saW5lRWxlbWVudEJveDsKIGNsYXNz
IFJlbmRlckJsb2NrRmxvdzsKLWNsYXNzIFJlbmRlckJveFJlZ2lvbkluZm87Ci1jbGFzcyBSZW5k
ZXJSZWdpb247CitjbGFzcyBSZW5kZXJCb3hGcmFnbWVudEluZm87CitjbGFzcyBSZW5kZXJGcmFn
bWVudENvbnRhaW5lcjsKIHN0cnVjdCBQYWludEluZm87CiAKIGVudW0gU2l6ZVR5cGUgeyBNYWlu
T3JQcmVmZXJyZWRTaXplLCBNaW5TaXplLCBNYXhTaXplIH07CkBAIC04Niw3ICs4Niw3IEBAIHB1
YmxpYzoKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxl
KCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHdpZHRoKCkgOiBoZWlnaHQoKTsgfQogICAg
IExheW91dFVuaXQgbG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCkuaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSA/IGhlaWdodCgpIDogd2lkdGgoKTsgfQogCi0gICAgTGF5b3V0
VW5pdCBjb25zdHJhaW5Mb2dpY2FsV2lkdGhJblJlZ2lvbkJ5TWluTWF4KExheW91dFVuaXQsIExh
eW91dFVuaXQsIFJlbmRlckJsb2NrJiwgUmVuZGVyUmVnaW9uKiA9IG51bGxwdHIpIGNvbnN0Owor
ICAgIExheW91dFVuaXQgY29uc3RyYWluTG9naWNhbFdpZHRoSW5GcmFnbWVudEJ5TWluTWF4KExh
eW91dFVuaXQsIExheW91dFVuaXQsIFJlbmRlckJsb2NrJiwgUmVuZGVyRnJhZ21lbnRDb250YWlu
ZXIqID0gbnVsbHB0cikgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBjb25zdHJhaW5Mb2dpY2FsSGVp
Z2h0QnlNaW5NYXgoTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBzdGQ6Om9wdGlvbmFsPExheW91
dFVuaXQ+IGludHJpbnNpY0NvbnRlbnRIZWlnaHQpIGNvbnN0OwogICAgIExheW91dFVuaXQgY29u
c3RyYWluQ29udGVudEJveExvZ2ljYWxIZWlnaHRCeU1pbk1heChMYXlvdXRVbml0IGxvZ2ljYWxI
ZWlnaHQsIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gaW50cmluc2ljQ29udGVudEhlaWdodCkg
Y29uc3Q7CiAKQEAgLTM0OCwxMSArMzQ4LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXB1dGVC
bG9ja0RpcmVjdGlvbk1hcmdpbnMoY29uc3QgUmVuZGVyQmxvY2smIGNvbnRhaW5pbmdCbG9jaywg
TGF5b3V0VW5pdCYgbWFyZ2luQmVmb3JlLCBMYXlvdXRVbml0JiBtYXJnaW5BZnRlcikgY29uc3Q7
CiAgICAgdm9pZCBjb21wdXRlQW5kU2V0QmxvY2tEaXJlY3Rpb25NYXJnaW5zKGNvbnN0IFJlbmRl
ckJsb2NrJiBjb250YWluaW5nQmxvY2spOwogCi0gICAgZW51bSBSZW5kZXJCb3hSZWdpb25JbmZv
RmxhZ3MgeyBDYWNoZVJlbmRlckJveFJlZ2lvbkluZm8sIERvTm90Q2FjaGVSZW5kZXJCb3hSZWdp
b25JbmZvIH07Ci0gICAgTGF5b3V0UmVjdCBib3JkZXJCb3hSZWN0SW5SZWdpb24oUmVuZGVyUmVn
aW9uKiwgUmVuZGVyQm94UmVnaW9uSW5mb0ZsYWdzID0gQ2FjaGVSZW5kZXJCb3hSZWdpb25JbmZv
KSBjb25zdDsKLSAgICBMYXlvdXRSZWN0IGNsaWVudEJveFJlY3RJblJlZ2lvbihSZW5kZXJSZWdp
b24qKSBjb25zdDsKLSAgICBSZW5kZXJSZWdpb24qIGNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMo
UmVuZGVyUmVnaW9uKikgY29uc3Q7Ci0gICAgYm9vbCBoYXNSZWdpb25SYW5nZUluRmxvd1RocmVh
ZCgpIGNvbnN0OworICAgIGVudW0gUmVuZGVyQm94RnJhZ21lbnRJbmZvRmxhZ3MgeyBDYWNoZVJl
bmRlckJveEZyYWdtZW50SW5mbywgRG9Ob3RDYWNoZVJlbmRlckJveEZyYWdtZW50SW5mbyB9Owor
ICAgIExheW91dFJlY3QgYm9yZGVyQm94UmVjdEluRnJhZ21lbnQoUmVuZGVyRnJhZ21lbnRDb250
YWluZXIqLCBSZW5kZXJCb3hGcmFnbWVudEluZm9GbGFncyA9IENhY2hlUmVuZGVyQm94RnJhZ21l
bnRJbmZvKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IGNsaWVudEJveFJlY3RJbkZyYWdtZW50KFJl
bmRlckZyYWdtZW50Q29udGFpbmVyKikgY29uc3Q7CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWlu
ZXIqIGNsYW1wVG9TdGFydEFuZEVuZEZyYWdtZW50cyhSZW5kZXJGcmFnbWVudENvbnRhaW5lciop
IGNvbnN0OworICAgIGJvb2wgaGFzRnJhZ21lbnRSYW5nZUluRmxvd1RocmVhZCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkg
Y29uc3Q7CiAgICAgCiAgICAgdm9pZCBwb3NpdGlvbkxpbmVCb3goSW5saW5lRWxlbWVudEJveCYp
OwpAQCAtMzc1LDggKzM3NSw4IEBAIHB1YmxpYzoKICAgICBMYXlvdXRVbml0IGNvbnRhaW5pbmdC
bG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQoKSBjb25zdCBvdmVycmlkZTsKICAgICBMYXlvdXRV
bml0IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JDb250ZW50KEF2YWlsYWJsZUxvZ2lj
YWxIZWlnaHRUeXBlKSBjb25zdDsKIAotICAgIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrTG9n
aWNhbFdpZHRoRm9yQ29udGVudEluUmVnaW9uKFJlbmRlclJlZ2lvbiopIGNvbnN0OwotICAgIExh
eW91dFVuaXQgY29udGFpbmluZ0Jsb2NrQXZhaWxhYmxlTGluZVdpZHRoSW5SZWdpb24oUmVuZGVy
UmVnaW9uKikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lk
dGhGb3JDb250ZW50SW5GcmFnbWVudChSZW5kZXJGcmFnbWVudENvbnRhaW5lciopIGNvbnN0Owor
ICAgIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrQXZhaWxhYmxlTGluZVdpZHRoSW5GcmFnbWVu
dChSZW5kZXJGcmFnbWVudENvbnRhaW5lciopIGNvbnN0OwogICAgIExheW91dFVuaXQgcGVycGVu
ZGljdWxhckNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHQoKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVMb2dpY2FsV2lkdGgoKTsKQEAgLTM5Myw4ICszOTMsOCBAQCBwdWJsaWM6
CiAgICAgLy8gemVybyAoYW5kIHJldHVybnMganVzdCBib3JkZXIgKyBwYWRkaW5nKS4KICAgICBM
YXlvdXRVbml0IGNvbXB1dGVMb2dpY2FsSGVpZ2h0V2l0aG91dExheW91dCgpIGNvbnN0OwogCi0g
ICAgUmVuZGVyQm94UmVnaW9uSW5mbyogcmVuZGVyQm94UmVnaW9uSW5mbyhSZW5kZXJSZWdpb24q
LCBSZW5kZXJCb3hSZWdpb25JbmZvRmxhZ3MgPSBDYWNoZVJlbmRlckJveFJlZ2lvbkluZm8pIGNv
bnN0OwotICAgIHZvaWQgY29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uKExvZ2ljYWxFeHRlbnRD
b21wdXRlZFZhbHVlcyYsIFJlbmRlclJlZ2lvbiogPSBudWxscHRyKSBjb25zdDsKKyAgICBSZW5k
ZXJCb3hGcmFnbWVudEluZm8qIHJlbmRlckJveEZyYWdtZW50SW5mbyhSZW5kZXJGcmFnbWVudENv
bnRhaW5lciosIFJlbmRlckJveEZyYWdtZW50SW5mb0ZsYWdzID0gQ2FjaGVSZW5kZXJCb3hGcmFn
bWVudEluZm8pIGNvbnN0OworICAgIHZvaWQgY29tcHV0ZUxvZ2ljYWxXaWR0aEluRnJhZ21lbnQo
TG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJiwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqID0g
bnVsbHB0cikgY29uc3Q7CiAKICAgICBib29sIHN0cmV0Y2hlc1RvVmlld3BvcnQoKSBjb25zdAog
ICAgIHsKQEAgLTQxMyw5ICs0MTMsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1N0cmV0Y2hpbmdD
b2x1bW5GbGV4SXRlbSgpIGNvbnN0OwogICAgIGJvb2wgY29sdW1uRmxleEl0ZW1IYXNTdHJldGNo
QWxpZ25tZW50KCkgY29uc3Q7CiAgICAgCi0gICAgTGF5b3V0VW5pdCBzaHJpbmtMb2dpY2FsV2lk
dGhUb0F2b2lkRmxvYXRzKExheW91dFVuaXQgY2hpbGRNYXJnaW5TdGFydCwgTGF5b3V0VW5pdCBj
aGlsZE1hcmdpbkVuZCwgY29uc3QgUmVuZGVyQmxvY2smIGNiLCBSZW5kZXJSZWdpb24qKSBjb25z
dDsKKyAgICBMYXlvdXRVbml0IHNocmlua0xvZ2ljYWxXaWR0aFRvQXZvaWRGbG9hdHMoTGF5b3V0
VW5pdCBjaGlsZE1hcmdpblN0YXJ0LCBMYXlvdXRVbml0IGNoaWxkTWFyZ2luRW5kLCBjb25zdCBS
ZW5kZXJCbG9jayYgY2IsIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKikgY29uc3Q7CiAKLSAgICBM
YXlvdXRVbml0IGNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvblVzaW5nKFNpemVUeXBlLCBMZW5n
dGggbG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgY29uc3Qg
UmVuZGVyQmxvY2smIGNvbnRhaW5pbmdCbG9jaywgUmVuZGVyUmVnaW9uKikgY29uc3Q7CisgICAg
TGF5b3V0VW5pdCBjb21wdXRlTG9naWNhbFdpZHRoSW5GcmFnbWVudFVzaW5nKFNpemVUeXBlLCBM
ZW5ndGggbG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgY29u
c3QgUmVuZGVyQmxvY2smIGNvbnRhaW5pbmdCbG9jaywgUmVuZGVyRnJhZ21lbnRDb250YWluZXIq
KSBjb25zdDsKICAgICBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1dGVMb2dpY2FsSGVp
Z2h0VXNpbmcoU2l6ZVR5cGUsIGNvbnN0IExlbmd0aCYgaGVpZ2h0LCBzdGQ6Om9wdGlvbmFsPExh
eW91dFVuaXQ+IGludHJpbnNpY0NvbnRlbnRIZWlnaHQpIGNvbnN0OwogICAgIHN0ZDo6b3B0aW9u
YWw8TGF5b3V0VW5pdD4gY29tcHV0ZUNvbnRlbnRMb2dpY2FsSGVpZ2h0KFNpemVUeXBlLCBjb25z
dCBMZW5ndGgmIGhlaWdodCwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBpbnRyaW5zaWNDb250
ZW50SGVpZ2h0KSBjb25zdDsKICAgICBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1dGVD
b250ZW50QW5kU2Nyb2xsYmFyTG9naWNhbEhlaWdodFVzaW5nKFNpemVUeXBlLCBjb25zdCBMZW5n
dGgmIGhlaWdodCwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBpbnRyaW5zaWNDb250ZW50SGVp
Z2h0KSBjb25zdDsKQEAgLTQ3Nyw5ICs0NzcsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgTGF5b3V0
UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5
b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gbnVsbHB0cikgb3ZlcnJpZGU7CiAKLSAg
ICB2aXJ0dWFsIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYg
bG9jYXRpb24sIFJlbmRlclJlZ2lvbiogPSBudWxscHRyLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJl
bGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBQYWludFBoYXNlID0gUGFpbnRQ
aGFzZUJsb2NrQmFja2dyb3VuZCk7Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IG92ZXJmbG93Q2xp
cFJlY3RGb3JDaGlsZExheWVycyhjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlclJl
Z2lvbiogcmVnaW9uLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIHsg
cmV0dXJuIG92ZXJmbG93Q2xpcFJlY3QobG9jYXRpb24sIHJlZ2lvbiwgcmVsZXZhbmN5KTsgfQot
ICAgIExheW91dFJlY3QgY2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5k
ZXJSZWdpb24qKTsKKyAgICB2aXJ0dWFsIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlwUmVjdChjb25z
dCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiA9IG51bGxw
dHIsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJh
clNpemUsIFBhaW50UGhhc2UgPSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kKTsKKyAgICB2aXJ0
dWFsIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlwUmVjdEZvckNoaWxkTGF5ZXJzKGNvbnN0IExheW91
dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50LCBPdmVy
bGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIHsgcmV0dXJuIG92ZXJmbG93Q2xp
cFJlY3QobG9jYXRpb24sIGZyYWdtZW50LCByZWxldmFuY3kpOyB9CisgICAgTGF5b3V0UmVjdCBj
bGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZW50Q29udGFp
bmVyKik7CiAgICAgdmlydHVhbCBib29sIGhhc0NvbnRyb2xDbGlwKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIExheW91dFJlY3QgY29udHJvbENsaXBSZWN0KGNvbnN0IExh
eW91dFBvaW50JikgY29uc3QgeyByZXR1cm4gTGF5b3V0UmVjdCgpOyB9CiAgICAgYm9vbCBwdXNo
Q29udGVudHNDbGlwKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCk7CkBAIC01MDYsNyArNTA2LDcgQEAgcHVibGljOgogCiAgICAgTGF5b3V0UmVjdCBtYXNr
Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKIAotICAgIFZpc2libGVQ
b3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVy
UmVnaW9uKikgb3ZlcnJpZGU7CisgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQo
Y29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciopIG92ZXJy
aWRlOwogCiAgICAgdm9pZCByZW1vdmVGbG9hdGluZ09yUG9zaXRpb25lZENoaWxkRnJvbUJsb2Nr
TGlzdHMoKTsKICAgICAKQEAgLTYxMCw4ICs2MTAsOCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
Ly8gVHJ1ZSBpZiB0aGlzIGJveCBjYW4gaGF2ZSBhIHJhbmdlIGluIGFuIG91dHNpZGUgZnJhZ21l
bnRhdGlvbiBjb250ZXh0LgotICAgIGJvb2wgY2FuSGF2ZU91dHNpZGVSZWdpb25SYW5nZSgpIGNv
bnN0IHsgcmV0dXJuICFpc0luRmxvd1JlbmRlckZsb3dUaHJlYWQoKTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBuZWVkc0xheW91dEFmdGVyUmVnaW9uUmFuZ2VDaGFuZ2UoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorICAgIGJvb2wgY2FuSGF2ZU91dHNpZGVGcmFnbWVudFJhbmdlKCkgY29uc3QgeyBy
ZXR1cm4gIWlzSW5GbG93UmVuZGVyRmxvd1RocmVhZCgpOyB9CisgICAgdmlydHVhbCBib29sIG5l
ZWRzTGF5b3V0QWZ0ZXJGcmFnbWVudFJhbmdlQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KIAogICAgIGNvbnN0IFJlbmRlckJveCogZmluZEVuY2xvc2luZ1Njcm9sbGFibGVDb250YWlu
ZXIoKSBjb25zdDsKICAgICAKQEAgLTY1MCw3ICs2NTAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgQmFj
a2dyb3VuZEJsZWVkQXZvaWRhbmNlIGRldGVybWluZUJhY2tncm91bmRCbGVlZEF2b2lkYW5jZShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKICAgICBib29sIGJhY2tncm91bmRIYXNPcGFxdWVUb3BM
YXllcigpIGNvbnN0OwogCi0gICAgdm9pZCBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aChM
b2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmLCBSZW5kZXJSZWdpb24qID0gbnVsbHB0cikgY29u
c3Q7CisgICAgdm9pZCBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aChMb2dpY2FsRXh0ZW50
Q29tcHV0ZWRWYWx1ZXMmLCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogPSBudWxscHRyKSBjb25z
dDsKIAogICAgIExheW91dFVuaXQgY29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aFVzaW5nKExl
bmd0aCBsb2dpY2FsV2lkdGhMZW5ndGgsIExheW91dFVuaXQgYXZhaWxhYmxlTG9naWNhbFdpZHRo
LCBMYXlvdXRVbml0IGJvcmRlckFuZFBhZGRpbmcpIGNvbnN0OwogICAgIHZpcnR1YWwgc3RkOjpv
cHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlSW50cmluc2ljTG9naWNhbENvbnRlbnRIZWlnaHRV
c2luZyhMZW5ndGggbG9naWNhbEhlaWdodExlbmd0aCwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0
PiBpbnRyaW5zaWNDb250ZW50SGVpZ2h0LCBMYXlvdXRVbml0IGJvcmRlckFuZFBhZGRpbmcpIGNv
bnN0OwpAQCAtNjg2LDcgKzY4Niw3IEBAIHByaXZhdGU6CiAgICAgLy8gUmV0dXJucyB0cnVlIGlm
IHdlIGRpZCBhIGZ1bGwgcmVwYWludC4KICAgICBib29sIHJlcGFpbnRMYXllclJlY3RzRm9ySW1h
Z2UoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBGaWxsTGF5ZXImIGxheWVycywgYm9vbCBkcmF3aW5n
QmFja2dyb3VuZCk7CiAKLSAgICBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0
aEZvclBvc2l0aW9uZWQoY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QmIGNvbnRhaW5pbmdCbG9j
aywgUmVuZGVyUmVnaW9uKiA9IG51bGxwdHIsIGJvb2wgY2hlY2tGb3JQZXJwZW5kaWN1bGFyV3Jp
dGluZ01vZGUgPSB0cnVlKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja0xv
Z2ljYWxXaWR0aEZvclBvc2l0aW9uZWQoY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QmIGNvbnRh
aW5pbmdCbG9jaywgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqID0gbnVsbHB0ciwgYm9vbCBjaGVj
a0ZvclBlcnBlbmRpY3VsYXJXcml0aW5nTW9kZSA9IHRydWUpIGNvbnN0OwogICAgIExheW91dFVu
aXQgY29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodEZvclBvc2l0aW9uZWQoY29uc3QgUmVuZGVy
Qm94TW9kZWxPYmplY3QmIGNvbnRhaW5pbmdCbG9jaywgYm9vbCBjaGVja0ZvclBlcnBlbmRpY3Vs
YXJXcml0aW5nTW9kZSA9IHRydWUpIGNvbnN0OwogCiAgICAgdm9pZCBjb21wdXRlUG9zaXRpb25l
ZExvZ2ljYWxIZWlnaHQoTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJikgY29uc3Q7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94RnJhZ21lbnRJbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveEZyYWdtZW50SW5mby5o
CShyZXZpc2lvbiAyMjI0NjIpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3hSZWdpb25JbmZvLmg6MjIyNDYyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveEZyYWdtZW50SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJSZW5kZXJPdmVyZmxvdy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFJlbmRlckJveFJlZ2lvbkluZm8geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlbmRlckJveFJlZ2lvbkluZm8pOworcHVibGljOgor
ICAgIFJlbmRlckJveFJlZ2lvbkluZm8oTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCwgTGF5b3V0VW5p
dCBsb2dpY2FsV2lkdGgsIGJvb2wgaXNTaGlmdGVkKQorICAgICAgICA6IG1fbG9naWNhbExlZnQo
bG9naWNhbExlZnQpCisgICAgICAgICwgbV9sb2dpY2FsV2lkdGgobG9naWNhbFdpZHRoKQorICAg
ICAgICAsIG1faXNTaGlmdGVkKGlzU2hpZnRlZCkKKyAgICB7IH0KKworICAgIExheW91dFVuaXQg
bG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxMZWZ0OyB9CisgICAgTGF5b3V0
VW5pdCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxXaWR0aDsgfQorICAg
IAorICAgIHZvaWQgc2hpZnRMb2dpY2FsTGVmdChMYXlvdXRVbml0IGRlbHRhKSB7IG1fbG9naWNh
bExlZnQgKz0gZGVsdGE7IG1faXNTaGlmdGVkID0gdHJ1ZTsgfQorCisgICAgYm9vbCBpc1NoaWZ0
ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2hpZnRlZDsgfQorCisgICAgdm9pZCBjcmVhdGVPdmVy
Zmxvdyhjb25zdCBMYXlvdXRSZWN0JiBsYXlvdXRPdmVyZmxvdywgY29uc3QgTGF5b3V0UmVjdCYg
dmlzdWFsT3ZlcmZsb3cpIHsgbV9vdmVyZmxvdyA9IGFkb3B0UmVmKG5ldyBSZW5kZXJPdmVyZmxv
dyhsYXlvdXRPdmVyZmxvdywgdmlzdWFsT3ZlcmZsb3cpKTsgfQorICAgIFJlbmRlck92ZXJmbG93
KiBvdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cuZ2V0KCk7IH0KKyAgICB2b2lk
IGNsZWFyT3ZlcmZsb3coKQorICAgIHsKKyAgICAgICAgaWYgKG1fb3ZlcmZsb3cpCisgICAgICAg
ICAgICBtX292ZXJmbG93ID0gbnVsbHB0cjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTGF5b3V0
VW5pdCBtX2xvZ2ljYWxMZWZ0OworICAgIExheW91dFVuaXQgbV9sb2dpY2FsV2lkdGg7CisgICAg
Ym9vbCBtX2lzU2hpZnRlZDsKKyAgICBSZWZQdHI8UmVuZGVyT3ZlcmZsb3c+IG1fb3ZlcmZsb3c7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94RnJhZ21lbnRJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveEZyYWdtZW50SW5mby5oCShyZXZpc2lvbiAyMjI0NjIpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94RnJhZ21lbnRJbmZvLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDExICsyOSwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIFJlbmRlckJveFJlZ2lvbkluZm8geworY2xhc3MgUmVuZGVyQm94RnJhZ21lbnRJbmZvIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShS
ZW5kZXJCb3hSZWdpb25JbmZvKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZW5kZXJCb3hG
cmFnbWVudEluZm8pOwogcHVibGljOgotICAgIFJlbmRlckJveFJlZ2lvbkluZm8oTGF5b3V0VW5p
dCBsb2dpY2FsTGVmdCwgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIGJvb2wgaXNTaGlmdGVkKQor
ICAgIFJlbmRlckJveEZyYWdtZW50SW5mbyhMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBMYXlvdXRV
bml0IGxvZ2ljYWxXaWR0aCwgYm9vbCBpc1NoaWZ0ZWQpCiAgICAgICAgIDogbV9sb2dpY2FsTGVm
dChsb2dpY2FsTGVmdCkKICAgICAgICAgLCBtX2xvZ2ljYWxXaWR0aChsb2dpY2FsV2lkdGgpCiAg
ICAgICAgICwgbV9pc1NoaWZ0ZWQoaXNTaGlmdGVkKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMjI0NjIp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MywxMiArNDMsMTIgQEAKICNpbmNsdWRlICJQYXRoLmgiCiAjaW5j
bHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJGbGV4aWJsZUJveC5oIgorI2lu
Y2x1ZGUgIlJlbmRlckZyYWdtZW50Q29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5l
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tp
bmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJSZW5k
ZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaCIKLSNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKICNp
bmNsdWRlICJSZW5kZXJUYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCiAjaW5j
bHVkZSAiUmVuZGVyVGV4dC5oIgpAQCAtNDE0LDkgKzQxNCw5IEBAIExheW91dFBvaW50IFJlbmRl
ckJveE1vZGVsT2JqZWN0OjphZGp1c3QKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoaXM8UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkPigqYW5jZXN0b3IpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gYXBwbHkgYSB0cmFuc2xhdGlvbiBiYXNlZCBv
ZmYgd2hhdCByZWdpb24gd2UgYXJlIGluc2lkZS4KLSAgICAgICAgICAgICAgICAgICAgUmVuZGVy
UmVnaW9uKiByZWdpb24gPSBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ+KCph
bmNlc3RvcikucGh5c2ljYWxUcmFuc2xhdGlvbkZyb21GbG93VG9SZWdpb24ocmVmZXJlbmNlUG9p
bnQpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmVnaW9uKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmVmZXJlbmNlUG9pbnQubW92ZUJ5KHJlZ2lvbi0+dG9wTGVmdExvY2F0aW9uKCkpOwor
ICAgICAgICAgICAgICAgICAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQgPSBk
b3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ+KCphbmNlc3RvcikucGh5c2ljYWxU
cmFuc2xhdGlvbkZyb21GbG93VG9GcmFnbWVudChyZWZlcmVuY2VQb2ludCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChmcmFnbWVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5j
ZVBvaW50Lm1vdmVCeShmcmFnbWVudC0+dG9wTGVmdExvY2F0aW9uKCkpOwogICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIWlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChpczxSZW5kZXJCb3g+KCphbmNlc3RvcikgJiYgIWlzPFJlbmRlclRhYmxlUm93
PigqYW5jZXN0b3IpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlUG9pbnQubW92
ZUJ5KGRvd25jYXN0PFJlbmRlckJveD4oKmFuY2VzdG9yKS50b3BMZWZ0TG9jYXRpb24oKSk7CkBA
IC0yNTYzLDEwICsyNTYzLDEwIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6Om1hcEFic29s
dXRlVG8KICAgICAvLyBUaGUgcG9pbnQgaW5zaWRlIGEgYm94IHRoYXQncyBpbnNpZGUgYSByZWdp
b24gaGFzIGl0cyBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgcmVnaW9uLAogICAgIC8vIG5v
dCB0aGUgRmxvd1RocmVhZCB0aGF0IGlzIGl0cyBjb250YWluZXIgaW4gdGhlIFJlbmRlck9iamVj
dCB0cmVlLgogICAgIGlmIChpczxSZW5kZXJCb3g+KCp0aGlzKSAmJiBjb250YWluZXItPmlzT3V0
T2ZGbG93UmVuZGVyRmxvd1RocmVhZCgpKSB7Ci0gICAgICAgIFJlbmRlclJlZ2lvbiogc3RhcnRS
ZWdpb24gPSBudWxscHRyOwotICAgICAgICBSZW5kZXJSZWdpb24qIGVuZFJlZ2lvbiA9IG51bGxw
dHI7Ci0gICAgICAgIGlmIChkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFkPigqY29udGFpbmVyKS5n
ZXRSZWdpb25SYW5nZUZvckJveChkb3duY2FzdDxSZW5kZXJCb3g+KHRoaXMpLCBzdGFydFJlZ2lv
biwgZW5kUmVnaW9uKSkKLSAgICAgICAgICAgIGNvbnRhaW5lciA9IHN0YXJ0UmVnaW9uOworICAg
ICAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogc3RhcnRGcmFnbWVudCA9IG51bGxwdHI7Cisg
ICAgICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBlbmRGcmFnbWVudCA9IG51bGxwdHI7Cisg
ICAgICAgIGlmIChkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFkPigqY29udGFpbmVyKS5nZXRGcmFn
bWVudFJhbmdlRm9yQm94KGRvd25jYXN0PFJlbmRlckJveD4odGhpcyksIHN0YXJ0RnJhZ21lbnQs
IGVuZEZyYWdtZW50KSkKKyAgICAgICAgICAgIGNvbnRhaW5lciA9IHN0YXJ0RnJhZ21lbnQ7CiAg
ICAgfQogCiAgICAgY29udGFpbmVyLT5tYXBBYnNvbHV0ZVRvTG9jYWxQb2ludChtb2RlLCB0cmFu
c2Zvcm1TdGF0ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuaAkocmV2aXNpb24gMjIyNDYyKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxOCw3ICsy
MTgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0
YXRlKSBvdmVycmlkZTsKIAotICAgIGJvb2wgY2FuSGF2ZUJveEluZm9JblJlZ2lvbigpIGNvbnN0
IHsgcmV0dXJuICFpc0Zsb2F0aW5nKCkgJiYgIWlzUmVwbGFjZWQoKSAmJiAhaXNJbmxpbmUoKSAm
JiAhaXNUYWJsZUNlbGwoKSAmJiBpc1JlbmRlckJsb2NrKCkgJiYgIWlzUmVuZGVyU1ZHQmxvY2so
KTsgfQorICAgIGJvb2wgY2FuSGF2ZUJveEluZm9JbkZyYWdtZW50KCkgY29uc3QgeyByZXR1cm4g
IWlzRmxvYXRpbmcoKSAmJiAhaXNSZXBsYWNlZCgpICYmICFpc0lubGluZSgpICYmICFpc1RhYmxl
Q2VsbCgpICYmIGlzUmVuZGVyQmxvY2soKSAmJiAhaXNSZW5kZXJTVkdCbG9jaygpOyB9CiAKICAg
ICB2b2lkIGdldEdlb21ldHJ5Rm9yQmFja2dyb3VuZEltYWdlKGNvbnN0IFJlbmRlckxheWVyTW9k
ZWxPYmplY3QqIHBhaW50Q29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQs
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIEZsb2F0U2l6ZSYgcGhhc2UsIEZsb2F0U2l6ZSYgdGlsZVNp
emUpIGNvbnN0OwogICAgIHZvaWQgY29udGVudENoYW5nZWQoQ29udGVudENoYW5nZVR5cGUpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveFJlZ2lvbkluZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94UmVnaW9uSW5mby5o
CShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
UmVnaW9uSW5mby5oCShub25leGlzdGVudCkKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIlJlbmRlck92ZXJmbG93LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVu
ZGVyQm94UmVnaW9uSW5mbyB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoUmVuZGVyQm94UmVnaW9uSW5mbyk7Ci1wdWJsaWM6Ci0gICAgUmVu
ZGVyQm94UmVnaW9uSW5mbyhMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBMYXlvdXRVbml0IGxvZ2lj
YWxXaWR0aCwgYm9vbCBpc1NoaWZ0ZWQpCi0gICAgICAgIDogbV9sb2dpY2FsTGVmdChsb2dpY2Fs
TGVmdCkKLSAgICAgICAgLCBtX2xvZ2ljYWxXaWR0aChsb2dpY2FsV2lkdGgpCi0gICAgICAgICwg
bV9pc1NoaWZ0ZWQoaXNTaGlmdGVkKQotICAgIHsgfQotCi0gICAgTGF5b3V0VW5pdCBsb2dpY2Fs
TGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbExlZnQ7IH0KLSAgICBMYXlvdXRVbml0IGxv
Z2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFdpZHRoOyB9Ci0gICAgCi0gICAg
dm9pZCBzaGlmdExvZ2ljYWxMZWZ0KExheW91dFVuaXQgZGVsdGEpIHsgbV9sb2dpY2FsTGVmdCAr
PSBkZWx0YTsgbV9pc1NoaWZ0ZWQgPSB0cnVlOyB9Ci0KLSAgICBib29sIGlzU2hpZnRlZCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNTaGlmdGVkOyB9Ci0KLSAgICB2b2lkIGNyZWF0ZU92ZXJmbG93KGNv
bnN0IExheW91dFJlY3QmIGxheW91dE92ZXJmbG93LCBjb25zdCBMYXlvdXRSZWN0JiB2aXN1YWxP
dmVyZmxvdykgeyBtX292ZXJmbG93ID0gYWRvcHRSZWYobmV3IFJlbmRlck92ZXJmbG93KGxheW91
dE92ZXJmbG93LCB2aXN1YWxPdmVyZmxvdykpOyB9Ci0gICAgUmVuZGVyT3ZlcmZsb3cqIG92ZXJm
bG93KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdy5nZXQoKTsgfQotICAgIHZvaWQgY2xlYXJP
dmVyZmxvdygpCi0gICAgewotICAgICAgICBpZiAobV9vdmVyZmxvdykKLSAgICAgICAgICAgIG1f
b3ZlcmZsb3cgPSBudWxscHRyOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBMYXlvdXRVbml0IG1f
bG9naWNhbExlZnQ7Ci0gICAgTGF5b3V0VW5pdCBtX2xvZ2ljYWxXaWR0aDsKLSAgICBib29sIG1f
aXNTaGlmdGVkOwotICAgIFJlZlB0cjxSZW5kZXJPdmVyZmxvdz4gbV9vdmVyZmxvdzsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBA
QAogI2lmICFBU1NFUlRfRElTQUJMRUQKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAj
ZW5kaWYKLSNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKKyNpbmNsdWRlICJSZW5kZXJGcmFnbWVu
dENvbnRhaW5lci5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2FwdGlvbi5oIgogI2luY2x1ZGUg
IlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ29sLmgiCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJv
bC5jcHAJKHJldmlzaW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw3ICsyNDEsNyBA
QCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpjb21wdXRlUHJlCiAgICAgc2V0UHJlZmVy
cmVkTG9naWNhbFdpZHRoc0RpcnR5KGZhbHNlKTsKIH0KIAotVmlzaWJsZVBvc2l0aW9uIFJlbmRl
ckZpbGVVcGxvYWRDb250cm9sOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50Jiwg
Y29uc3QgUmVuZGVyUmVnaW9uKikKK1Zpc2libGVQb3NpdGlvbiBSZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlckZy
YWdtZW50Q29udGFpbmVyKikKIHsKICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENv
bnRyb2wuaAkocmV2aXNpb24gMjIyNDYyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZpbGVVcGxvYWRDb250cm9sLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAg
cHJpdmF0ZToKIAogICAgIGludCBtYXhGaWxlbmFtZVdpZHRoKCkgY29uc3Q7CiAgICAgCi0gICAg
VmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25z
dCBSZW5kZXJSZWdpb24qKSBvdmVycmlkZTsKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25G
b3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVy
Kikgb3ZlcnJpZGU7CiAKICAgICBIVE1MSW5wdXRFbGVtZW50KiB1cGxvYWRCdXR0b24oKSBjb25z
dDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVC
b3guY3BwCShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmxleGlibGVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTIsOCArNTUyLDggQEAgc3Rk
OjpvcHRpb25hbDxMYXlvdXRVbml0PiBSZW5kZXJGbGV4aWJsZQogICAgIH0KICAgICAKICAgICAv
LyBGSVhNRTogRmlndXJlIG91dCBob3cgdGhpcyBzaG91bGQgd29yayBmb3IgcmVnaW9ucyBhbmQg
cGFzcyBpbiB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzLgotICAgIFJlbmRlclJlZ2lvbiogcmVnaW9u
ID0gbnVsbHB0cjsKLSAgICByZXR1cm4gY2hpbGQuY29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9u
VXNpbmcoc2l6ZVR5cGUsIHNpemUsIGNvbnRlbnRMb2dpY2FsV2lkdGgoKSwgKnRoaXMsIHJlZ2lv
bikgLSBib3JkZXJBbmRQYWRkaW5nOworICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFn
bWVudCA9IG51bGxwdHI7CisgICAgcmV0dXJuIGNoaWxkLmNvbXB1dGVMb2dpY2FsV2lkdGhJbkZy
YWdtZW50VXNpbmcoc2l6ZVR5cGUsIHNpemUsIGNvbnRlbnRMb2dpY2FsV2lkdGgoKSwgKnRoaXMs
IGZyYWdtZW50KSAtIGJvcmRlckFuZFBhZGRpbmc7CiB9CiAKICAgICAKQEAgLTE4MjYsNyArMTgy
Niw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmFwcGx5U3RyZXRjaEFsaWcKICAgICAgICAg
fQogICAgIH0gZWxzZSBpZiAoaGFzT3J0aG9nb25hbEZsb3coY2hpbGQpICYmIGNoaWxkLnN0eWxl
KCkubG9naWNhbFdpZHRoKCkuaXNBdXRvKCkpIHsKICAgICAgICAgTGF5b3V0VW5pdCBjaGlsZFdp
ZHRoID0gc3RkOjptYXgoTGF5b3V0VW5pdCgpLCBsaW5lQ3Jvc3NBeGlzRXh0ZW50IC0gY3Jvc3NB
eGlzTWFyZ2luRXh0ZW50Rm9yQ2hpbGQoY2hpbGQpKTsKLSAgICAgICAgY2hpbGRXaWR0aCA9IGNo
aWxkLmNvbnN0cmFpbkxvZ2ljYWxXaWR0aEluUmVnaW9uQnlNaW5NYXgoY2hpbGRXaWR0aCwgY3Jv
c3NBeGlzQ29udGVudEV4dGVudCgpLCAqdGhpcywgbnVsbHB0cik7CisgICAgICAgIGNoaWxkV2lk
dGggPSBjaGlsZC5jb25zdHJhaW5Mb2dpY2FsV2lkdGhJbkZyYWdtZW50QnlNaW5NYXgoY2hpbGRX
aWR0aCwgY3Jvc3NBeGlzQ29udGVudEV4dGVudCgpLCAqdGhpcywgbnVsbHB0cik7CiAgICAgICAg
IAogICAgICAgICBpZiAoY2hpbGRXaWR0aCAhPSBjaGlsZC5sb2dpY2FsV2lkdGgoKSkgewogICAg
ICAgICAgICAgY2hpbGQuc2V0T3ZlcnJpZGVMb2dpY2FsQ29udGVudFdpZHRoKGNoaWxkV2lkdGgg
LSBjaGlsZC5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAkocmV2aXNpb24gMjIyNDYy
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSwxMSArMzUsMTEgQEAKICNpbmNsdWRlICJJbmxpbmVFbGVtZW50Qm94
LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBPREludGVydmFsVHJlZS5oIgotI2lu
Y2x1ZGUgIlJlbmRlckJveFJlZ2lvbkluZm8uaCIKKyNpbmNsdWRlICJSZW5kZXJCb3hGcmFnbWVu
dEluZm8uaCIKKyNpbmNsdWRlICJSZW5kZXJGcmFnbWVudENvbnRhaW5lci5oIgogI2luY2x1ZGUg
IlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVTZWN0aW9uLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTUxLDEwICs1MSwxMCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIFJlbmRlckZsb3dUaHJlYWQ6OlJlbmRlckZsb3dUaHJlYWQoRG9jdW1lbnQmIGRv
Y3VtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlKQogICAgIDogUmVuZGVyQmxvY2tGbG93KGRvY3Vt
ZW50LCBXVEZNb3ZlKHN0eWxlKSkKLSAgICAsIG1fY3VycmVudFJlZ2lvbk1haW50YWluZXIobnVs
bHB0cikKLSAgICAsIG1fcmVnaW9uc0ludmFsaWRhdGVkKGZhbHNlKQotICAgICwgbV9yZWdpb25z
SGF2ZVVuaWZvcm1Mb2dpY2FsV2lkdGgodHJ1ZSkKLSAgICAsIG1fcmVnaW9uc0hhdmVVbmlmb3Jt
TG9naWNhbEhlaWdodCh0cnVlKQorICAgICwgbV9jdXJyZW50RnJhZ21lbnRNYWludGFpbmVyKG51
bGxwdHIpCisgICAgLCBtX2ZyYWdtZW50c0ludmFsaWRhdGVkKGZhbHNlKQorICAgICwgbV9mcmFn
bWVudHNIYXZlVW5pZm9ybUxvZ2ljYWxXaWR0aCh0cnVlKQorICAgICwgbV9mcmFnbWVudHNIYXZl
VW5pZm9ybUxvZ2ljYWxIZWlnaHQodHJ1ZSkKICAgICAsIG1fcGFnZUxvZ2ljYWxTaXplQ2hhbmdl
ZChmYWxzZSkKIHsKICAgICBzZXRJc1JlbmRlckZsb3dUaHJlYWQodHJ1ZSk7CkBAIC04MCw4NyAr
ODAsODcgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpzdHlsZURpZENoYW5nZShTdAogICAgIFJl
bmRlckJsb2NrRmxvdzo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwogCiAgICAgaWYg
KG9sZFN0eWxlICYmIG9sZFN0eWxlLT53cml0aW5nTW9kZSgpICE9IHN0eWxlKCkud3JpdGluZ01v
ZGUoKSkKLSAgICAgICAgaW52YWxpZGF0ZVJlZ2lvbnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUZy
YWdtZW50cygpOwogfQogCiB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnJlbW92ZUZsb3dDaGlsZElu
Zm8oUmVuZGVyRWxlbWVudCYgY2hpbGQpCiB7CiAgICAgaWYgKGlzPFJlbmRlckJsb2NrRmxvdz4o
Y2hpbGQpKQotICAgICAgICByZW1vdmVMaW5lUmVnaW9uSW5mbyhkb3duY2FzdDxSZW5kZXJCbG9j
a0Zsb3c+KGNoaWxkKSk7CisgICAgICAgIHJlbW92ZUxpbmVGcmFnbWVudEluZm8oZG93bmNhc3Q8
UmVuZGVyQmxvY2tGbG93PihjaGlsZCkpOwogICAgIGlmIChpczxSZW5kZXJCb3g+KGNoaWxkKSkK
LSAgICAgICAgcmVtb3ZlUmVuZGVyQm94UmVnaW9uSW5mbyhkb3duY2FzdDxSZW5kZXJCb3g+KGNo
aWxkKSk7CisgICAgICAgIHJlbW92ZVJlbmRlckJveEZyYWdtZW50SW5mbyhkb3duY2FzdDxSZW5k
ZXJCb3g+KGNoaWxkKSk7CiB9CiAKLXZvaWQgUmVuZGVyRmxvd1RocmVhZDo6cmVtb3ZlUmVnaW9u
RnJvbVRocmVhZChSZW5kZXJSZWdpb24qIHJlbmRlclJlZ2lvbikKK3ZvaWQgUmVuZGVyRmxvd1Ro
cmVhZDo6cmVtb3ZlRnJhZ21lbnRGcm9tVGhyZWFkKFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBS
ZW5kZXJGcmFnbWVudENvbnRhaW5lcikKIHsKLSAgICBBU1NFUlQocmVuZGVyUmVnaW9uKTsKLSAg
ICBtX3JlZ2lvbkxpc3QucmVtb3ZlKHJlbmRlclJlZ2lvbik7CisgICAgQVNTRVJUKFJlbmRlckZy
YWdtZW50Q29udGFpbmVyKTsKKyAgICBtX2ZyYWdtZW50TGlzdC5yZW1vdmUoUmVuZGVyRnJhZ21l
bnRDb250YWluZXIpOwogfQogCi12b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmludmFsaWRhdGVSZWdp
b25zKE1hcmtpbmdCZWhhdmlvciBtYXJraW5nUGFyZW50cykKK3ZvaWQgUmVuZGVyRmxvd1RocmVh
ZDo6aW52YWxpZGF0ZUZyYWdtZW50cyhNYXJraW5nQmVoYXZpb3IgbWFya2luZ1BhcmVudHMpCiB7
Ci0gICAgaWYgKG1fcmVnaW9uc0ludmFsaWRhdGVkKSB7CisgICAgaWYgKG1fZnJhZ21lbnRzSW52
YWxpZGF0ZWQpIHsKICAgICAgICAgQVNTRVJUKHNlbGZOZWVkc0xheW91dCgpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIG1fcmVnaW9uUmFuZ2VNYXAuY2xlYXIoKTsKLSAgICBtX2Jy
ZWFrQmVmb3JlVG9SZWdpb25NYXAuY2xlYXIoKTsKLSAgICBtX2JyZWFrQWZ0ZXJUb1JlZ2lvbk1h
cC5jbGVhcigpOwotICAgIGlmIChtX2xpbmVUb1JlZ2lvbk1hcCkKLSAgICAgICAgbV9saW5lVG9S
ZWdpb25NYXAtPmNsZWFyKCk7CisgICAgbV9mcmFnbWVudFJhbmdlTWFwLmNsZWFyKCk7CisgICAg
bV9icmVha0JlZm9yZVRvRnJhZ21lbnRNYXAuY2xlYXIoKTsKKyAgICBtX2JyZWFrQWZ0ZXJUb0Zy
YWdtZW50TWFwLmNsZWFyKCk7CisgICAgaWYgKG1fbGluZVRvRnJhZ21lbnRNYXApCisgICAgICAg
IG1fbGluZVRvRnJhZ21lbnRNYXAtPmNsZWFyKCk7CiAgICAgc2V0TmVlZHNMYXlvdXQobWFya2lu
Z1BhcmVudHMpOwogCi0gICAgbV9yZWdpb25zSW52YWxpZGF0ZWQgPSB0cnVlOworICAgIG1fZnJh
Z21lbnRzSW52YWxpZGF0ZWQgPSB0cnVlOwogfQogCi12b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnZh
bGlkYXRlUmVnaW9ucygpCit2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnZhbGlkYXRlRnJhZ21lbnRz
KCkKIHsKLSAgICBpZiAobV9yZWdpb25zSW52YWxpZGF0ZWQpIHsKLSAgICAgICAgbV9yZWdpb25z
SW52YWxpZGF0ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9yZWdpb25zSGF2ZVVuaWZvcm1Mb2dpY2Fs
V2lkdGggPSB0cnVlOwotICAgICAgICBtX3JlZ2lvbnNIYXZlVW5pZm9ybUxvZ2ljYWxIZWlnaHQg
PSB0cnVlOworICAgIGlmIChtX2ZyYWdtZW50c0ludmFsaWRhdGVkKSB7CisgICAgICAgIG1fZnJh
Z21lbnRzSW52YWxpZGF0ZWQgPSBmYWxzZTsKKyAgICAgICAgbV9mcmFnbWVudHNIYXZlVW5pZm9y
bUxvZ2ljYWxXaWR0aCA9IHRydWU7CisgICAgICAgIG1fZnJhZ21lbnRzSGF2ZVVuaWZvcm1Mb2dp
Y2FsSGVpZ2h0ID0gdHJ1ZTsKIAotICAgICAgICBpZiAoaGFzUmVnaW9ucygpKSB7Ci0gICAgICAg
ICAgICBMYXlvdXRVbml0IHByZXZpb3VzUmVnaW9uTG9naWNhbFdpZHRoID0gMDsKLSAgICAgICAg
ICAgIExheW91dFVuaXQgcHJldmlvdXNSZWdpb25Mb2dpY2FsSGVpZ2h0ID0gMDsKLSAgICAgICAg
ICAgIGJvb2wgZmlyc3RSZWdpb25WaXNpdGVkID0gZmFsc2U7CisgICAgICAgIGlmIChoYXNGcmFn
bWVudHMoKSkgeworICAgICAgICAgICAgTGF5b3V0VW5pdCBwcmV2aW91c0ZyYWdtZW50TG9naWNh
bFdpZHRoID0gMDsKKyAgICAgICAgICAgIExheW91dFVuaXQgcHJldmlvdXNGcmFnbWVudExvZ2lj
YWxIZWlnaHQgPSAwOworICAgICAgICAgICAgYm9vbCBmaXJzdEZyYWdtZW50VmlzaXRlZCA9IGZh
bHNlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKGF1dG8mIHJlZ2lvbiA6IG1fcmVn
aW9uTGlzdCkgewotICAgICAgICAgICAgICAgIEFTU0VSVCghcmVnaW9uLT5uZWVkc0xheW91dCgp
IHx8IHJlZ2lvbi0+aXNSZW5kZXJSZWdpb25TZXQoKSk7CisgICAgICAgICAgICBmb3IgKGF1dG8m
IGZyYWdtZW50IDogbV9mcmFnbWVudExpc3QpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIWZy
YWdtZW50LT5uZWVkc0xheW91dCgpIHx8IGZyYWdtZW50LT5pc1JlbmRlckZyYWdtZW50Q29udGFp
bmVyU2V0KCkpOwogCi0gICAgICAgICAgICAgICAgcmVnaW9uLT5kZWxldGVBbGxSZW5kZXJCb3hS
ZWdpb25JbmZvKCk7CisgICAgICAgICAgICAgICAgZnJhZ21lbnQtPmRlbGV0ZUFsbFJlbmRlckJv
eEZyYWdtZW50SW5mbygpOwogCi0gICAgICAgICAgICAgICAgTGF5b3V0VW5pdCByZWdpb25Mb2dp
Y2FsV2lkdGggPSByZWdpb24tPnBhZ2VMb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgICAgICAgICBM
YXlvdXRVbml0IHJlZ2lvbkxvZ2ljYWxIZWlnaHQgPSByZWdpb24tPnBhZ2VMb2dpY2FsSGVpZ2h0
KCk7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBmcmFnbWVudExvZ2ljYWxXaWR0aCA9IGZy
YWdtZW50LT5wYWdlTG9naWNhbFdpZHRoKCk7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBm
cmFnbWVudExvZ2ljYWxIZWlnaHQgPSBmcmFnbWVudC0+cGFnZUxvZ2ljYWxIZWlnaHQoKTsKIAot
ICAgICAgICAgICAgICAgIGlmICghZmlyc3RSZWdpb25WaXNpdGVkKQotICAgICAgICAgICAgICAg
ICAgICBmaXJzdFJlZ2lvblZpc2l0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmICghZmly
c3RGcmFnbWVudFZpc2l0ZWQpCisgICAgICAgICAgICAgICAgICAgIGZpcnN0RnJhZ21lbnRWaXNp
dGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKG1fcmVnaW9uc0hhdmVVbmlmb3JtTG9naWNhbFdpZHRoICYmIHByZXZpb3VzUmVnaW9uTG9n
aWNhbFdpZHRoICE9IHJlZ2lvbkxvZ2ljYWxXaWR0aCkKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1fcmVnaW9uc0hhdmVVbmlmb3JtTG9naWNhbFdpZHRoID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChtX3JlZ2lvbnNIYXZlVW5pZm9ybUxvZ2ljYWxIZWlnaHQgJiYgcHJldmlvdXNS
ZWdpb25Mb2dpY2FsSGVpZ2h0ICE9IHJlZ2lvbkxvZ2ljYWxIZWlnaHQpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtX3JlZ2lvbnNIYXZlVW5pZm9ybUxvZ2ljYWxIZWlnaHQgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fZnJhZ21lbnRzSGF2ZVVuaWZvcm1Mb2dpY2FsV2lkdGgg
JiYgcHJldmlvdXNGcmFnbWVudExvZ2ljYWxXaWR0aCAhPSBmcmFnbWVudExvZ2ljYWxXaWR0aCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fZnJhZ21lbnRzSGF2ZVVuaWZvcm1Mb2dpY2FsV2lk
dGggPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZnJhZ21lbnRzSGF2ZVVuaWZv
cm1Mb2dpY2FsSGVpZ2h0ICYmIHByZXZpb3VzRnJhZ21lbnRMb2dpY2FsSGVpZ2h0ICE9IGZyYWdt
ZW50TG9naWNhbEhlaWdodCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZnJhZ21lbnRzSGF2
ZVVuaWZvcm1Mb2dpY2FsSGVpZ2h0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgcHJldmlvdXNSZWdpb25Mb2dpY2FsV2lkdGggPSByZWdpb25Mb2dpY2FsV2lk
dGg7CisgICAgICAgICAgICAgICAgcHJldmlvdXNGcmFnbWVudExvZ2ljYWxXaWR0aCA9IGZyYWdt
ZW50TG9naWNhbFdpZHRoOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBzZXRSZWdpb25S
YW5nZUZvckJveCgqdGhpcywgbV9yZWdpb25MaXN0LmZpcnN0KCksIG1fcmVnaW9uTGlzdC5sYXN0
KCkpOworICAgICAgICAgICAgc2V0RnJhZ21lbnRSYW5nZUZvckJveCgqdGhpcywgbV9mcmFnbWVu
dExpc3QuZmlyc3QoKSwgbV9mcmFnbWVudExpc3QubGFzdCgpKTsKICAgICAgICAgfQogICAgIH0K
IAotICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aCgpOyAvLyBDYWxsZWQgdG8gZ2V0IHRoZSBtYXhpbXVt
IGxvZ2ljYWwgd2lkdGggZm9yIHRoZSByZWdpb24uCi0gICAgdXBkYXRlUmVnaW9uc0Zsb3dUaHJl
YWRQb3J0aW9uUmVjdCgpOworICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aCgpOyAvLyBDYWxsZWQgdG8g
Z2V0IHRoZSBtYXhpbXVtIGxvZ2ljYWwgd2lkdGggZm9yIHRoZSBmcmFnbWVudC4KKyAgICB1cGRh
dGVGcmFnbWVudHNGbG93VGhyZWFkUG9ydGlvblJlY3QoKTsKIH0KIAogdm9pZCBSZW5kZXJGbG93
VGhyZWFkOjpsYXlvdXQoKQogewogICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5
b3V0Q2hlY2tQb2ludDsKIAotICAgIG1fcGFnZUxvZ2ljYWxTaXplQ2hhbmdlZCA9IG1fcmVnaW9u
c0ludmFsaWRhdGVkICYmIGV2ZXJIYWRMYXlvdXQoKTsKKyAgICBtX3BhZ2VMb2dpY2FsU2l6ZUNo
YW5nZWQgPSBtX2ZyYWdtZW50c0ludmFsaWRhdGVkICYmIGV2ZXJIYWRMYXlvdXQoKTsKIAotICAg
IHZhbGlkYXRlUmVnaW9ucygpOworICAgIHZhbGlkYXRlRnJhZ21lbnRzKCk7CiAKICAgICBSZW5k
ZXJCbG9ja0Zsb3c6OmxheW91dCgpOwogCkBAIC0xNzAsMTcgKzE3MCwxNyBAQCB2b2lkIFJlbmRl
ckZsb3dUaHJlYWQ6OmxheW91dCgpCiB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0ZUxvZ2lj
YWxXaWR0aCgpCiB7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGggPSBpbml0aWFsTG9naWNh
bFdpZHRoKCk7Ci0gICAgZm9yIChhdXRvJiByZWdpb24gOiBtX3JlZ2lvbkxpc3QpIHsKLSAgICAg
ICAgQVNTRVJUKCFyZWdpb24tPm5lZWRzTGF5b3V0KCkgfHwgcmVnaW9uLT5pc1JlbmRlclJlZ2lv
blNldCgpKTsKLSAgICAgICAgbG9naWNhbFdpZHRoID0gc3RkOjptYXgocmVnaW9uLT5wYWdlTG9n
aWNhbFdpZHRoKCksIGxvZ2ljYWxXaWR0aCk7CisgICAgZm9yIChhdXRvJiBmcmFnbWVudCA6IG1f
ZnJhZ21lbnRMaXN0KSB7CisgICAgICAgIEFTU0VSVCghZnJhZ21lbnQtPm5lZWRzTGF5b3V0KCkg
fHwgZnJhZ21lbnQtPmlzUmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQoKSk7CisgICAgICAgIGxv
Z2ljYWxXaWR0aCA9IHN0ZDo6bWF4KGZyYWdtZW50LT5wYWdlTG9naWNhbFdpZHRoKCksIGxvZ2lj
YWxXaWR0aCk7CiAgICAgfQogICAgIHNldExvZ2ljYWxXaWR0aChsb2dpY2FsV2lkdGgpOwogCi0g
ICAgLy8gSWYgdGhlIHJlZ2lvbnMgaGF2ZSBub24tdW5pZm9ybSBsb2dpY2FsIHdpZHRocywgdGhl
biBpbnNlcnQgaW5zZXQgaW5mb3JtYXRpb24gZm9yIHRoZSBSZW5kZXJGbG93VGhyZWFkLgotICAg
IGZvciAoYXV0byYgcmVnaW9uIDogbV9yZWdpb25MaXN0KSB7Ci0gICAgICAgIExheW91dFVuaXQg
cmVnaW9uTG9naWNhbFdpZHRoID0gcmVnaW9uLT5wYWdlTG9naWNhbFdpZHRoKCk7Ci0gICAgICAg
IExheW91dFVuaXQgbG9naWNhbExlZnQgPSBzdHlsZSgpLmRpcmVjdGlvbigpID09IExUUiA/IExh
eW91dFVuaXQoKSA6IGxvZ2ljYWxXaWR0aCAtIHJlZ2lvbkxvZ2ljYWxXaWR0aDsKLSAgICAgICAg
cmVnaW9uLT5zZXRSZW5kZXJCb3hSZWdpb25JbmZvKHRoaXMsIGxvZ2ljYWxMZWZ0LCByZWdpb25M
b2dpY2FsV2lkdGgsIGZhbHNlKTsKKyAgICAvLyBJZiB0aGUgZnJhZ21lbnRzIGhhdmUgbm9uLXVu
aWZvcm0gbG9naWNhbCB3aWR0aHMsIHRoZW4gaW5zZXJ0IGluc2V0IGluZm9ybWF0aW9uIGZvciB0
aGUgUmVuZGVyRmxvd1RocmVhZC4KKyAgICBmb3IgKGF1dG8mIGZyYWdtZW50IDogbV9mcmFnbWVu
dExpc3QpIHsKKyAgICAgICAgTGF5b3V0VW5pdCBmcmFnbWVudExvZ2ljYWxXaWR0aCA9IGZyYWdt
ZW50LT5wYWdlTG9naWNhbFdpZHRoKCk7CisgICAgICAgIExheW91dFVuaXQgbG9naWNhbExlZnQg
PSBzdHlsZSgpLmRpcmVjdGlvbigpID09IExUUiA/IExheW91dFVuaXQoKSA6IGxvZ2ljYWxXaWR0
aCAtIGZyYWdtZW50TG9naWNhbFdpZHRoOworICAgICAgICBmcmFnbWVudC0+c2V0UmVuZGVyQm94
RnJhZ21lbnRJbmZvKHRoaXMsIGxvZ2ljYWxMZWZ0LCBmcmFnbWVudExvZ2ljYWxXaWR0aCwgZmFs
c2UpOwogICAgIH0KIH0KIApAQCAtMTkxLDExICsxOTEsMTEgQEAgUmVuZGVyQm94OjpMb2dpY2Fs
RXh0ZW50Q29tcHV0ZWRWYWx1ZXMgUgogICAgIGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50ID0gMDsK
IAogICAgIGNvbnN0IExheW91dFVuaXQgbWF4Rmxvd1NpemUgPSBSZW5kZXJGbG93VGhyZWFkOjpt
YXhMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgZm9yIChhdXRvJiByZWdpb24gOiBtX3JlZ2lvbkxpc3Qp
IHsKLSAgICAgICAgQVNTRVJUKCFyZWdpb24tPm5lZWRzTGF5b3V0KCkgfHwgcmVnaW9uLT5pc1Jl
bmRlclJlZ2lvblNldCgpKTsKKyAgICBmb3IgKGF1dG8mIGZyYWdtZW50IDogbV9mcmFnbWVudExp
c3QpIHsKKyAgICAgICAgQVNTRVJUKCFmcmFnbWVudC0+bmVlZHNMYXlvdXQoKSB8fCBmcmFnbWVu
dC0+aXNSZW5kZXJGcmFnbWVudENvbnRhaW5lclNldCgpKTsKIAogICAgICAgICBMYXlvdXRVbml0
IGRpc3RhbmNlVG9NYXhTaXplID0gbWF4Rmxvd1NpemUgLSBjb21wdXRlZFZhbHVlcy5tX2V4dGVu
dDsKLSAgICAgICAgY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgKz0gc3RkOjptaW4oZGlzdGFuY2VU
b01heFNpemUsIHJlZ2lvbi0+bG9naWNhbEhlaWdodE9mQWxsRmxvd1RocmVhZENvbnRlbnQoKSk7
CisgICAgICAgIGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50ICs9IHN0ZDo6bWluKGRpc3RhbmNlVG9N
YXhTaXplLCBmcmFnbWVudC0+bG9naWNhbEhlaWdodE9mQWxsRmxvd1RocmVhZENvbnRlbnQoKSk7
CiAKICAgICAgICAgLy8gSWYgd2UgcmVhY2hlZCB0aGUgbWF4aW11bSBzaXplIHRoZXJlJ3Mgbm8g
cG9pbnQgaW4gZ29pbmcgZnVydGhlci4KICAgICAgICAgaWYgKGNvbXB1dGVkVmFsdWVzLm1fZXh0
ZW50ID09IG1heEZsb3dTaXplKQpAQCAtMjE5LDQyICsyMTksNDIgQEAgYm9vbCBSZW5kZXJGbG93
VGhyZWFkOjpzaG91bGRSZXBhaW50KGNvbgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJl
bmRlckZsb3dUaHJlYWQ6OnJlcGFpbnRSZWN0YW5nbGVJblJlZ2lvbnMoY29uc3QgTGF5b3V0UmVj
dCYgcmVwYWludFJlY3QpIGNvbnN0Cit2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnJlcGFpbnRSZWN0
YW5nbGVJbkZyYWdtZW50cyhjb25zdCBMYXlvdXRSZWN0JiByZXBhaW50UmVjdCkgY29uc3QKIHsK
LSAgICBpZiAoIXNob3VsZFJlcGFpbnQocmVwYWludFJlY3QpIHx8ICFoYXNWYWxpZFJlZ2lvbklu
Zm8oKSkKKyAgICBpZiAoIXNob3VsZFJlcGFpbnQocmVwYWludFJlY3QpIHx8ICFoYXNWYWxpZEZy
YWdtZW50SW5mbygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMYXlvdXRTdGF0ZURpc2FibGVy
IGxheW91dFN0YXRlRGlzYWJsZXIodmlldygpKTsgLy8gV2UgY2FuJ3QgdXNlIGxheW91dCBzdGF0
ZSB0byByZXBhaW50LCBzaW5jZSB0aGUgcmVnaW9ucyBhcmUgc29tZXdoZXJlIGVsc2UuCisgICAg
TGF5b3V0U3RhdGVEaXNhYmxlciBsYXlvdXRTdGF0ZURpc2FibGVyKHZpZXcoKSk7IC8vIFdlIGNh
bid0IHVzZSBsYXlvdXQgc3RhdGUgdG8gcmVwYWludCwgc2luY2UgdGhlIGZyYWdtZW50cyBhcmUg
c29tZXdoZXJlIGVsc2UuCiAKLSAgICBmb3IgKGF1dG8mIHJlZ2lvbiA6IG1fcmVnaW9uTGlzdCkK
LSAgICAgICAgcmVnaW9uLT5yZXBhaW50Rmxvd1RocmVhZENvbnRlbnQocmVwYWludFJlY3QpOwor
ICAgIGZvciAoYXV0byYgZnJhZ21lbnQgOiBtX2ZyYWdtZW50TGlzdCkKKyAgICAgICAgZnJhZ21l
bnQtPnJlcGFpbnRGbG93VGhyZWFkQ29udGVudChyZXBhaW50UmVjdCk7CiB9CiAKLVJlbmRlclJl
Z2lvbiogUmVuZGVyRmxvd1RocmVhZDo6cmVnaW9uQXRCbG9ja09mZnNldChjb25zdCBSZW5kZXJC
b3gqIGNsYW1wQm94LCBMYXlvdXRVbml0IG9mZnNldCwgYm9vbCBleHRlbmRMYXN0UmVnaW9uKSBj
b25zdAorUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIFJlbmRlckZsb3dUaHJlYWQ6OmZyYWdtZW50
QXRCbG9ja09mZnNldChjb25zdCBSZW5kZXJCb3gqIGNsYW1wQm94LCBMYXlvdXRVbml0IG9mZnNl
dCwgYm9vbCBleHRlbmRMYXN0RnJhZ21lbnQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFtX3JlZ2lv
bnNJbnZhbGlkYXRlZCk7CisgICAgQVNTRVJUKCFtX2ZyYWdtZW50c0ludmFsaWRhdGVkKTsKIAot
ICAgIGlmIChtX3JlZ2lvbkxpc3QuaXNFbXB0eSgpKQorICAgIGlmIChtX2ZyYWdtZW50TGlzdC5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKG1fcmVnaW9uTGlz
dC5zaXplKCkgPT0gMSAmJiBleHRlbmRMYXN0UmVnaW9uKQotICAgICAgICByZXR1cm4gbV9yZWdp
b25MaXN0LmZpcnN0KCk7CisgICAgaWYgKG1fZnJhZ21lbnRMaXN0LnNpemUoKSA9PSAxICYmIGV4
dGVuZExhc3RGcmFnbWVudCkKKyAgICAgICAgcmV0dXJuIG1fZnJhZ21lbnRMaXN0LmZpcnN0KCk7
CiAKICAgICBpZiAob2Zmc2V0IDw9IDApCi0gICAgICAgIHJldHVybiBjbGFtcEJveCA/IGNsYW1w
Qm94LT5jbGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKG1fcmVnaW9uTGlzdC5maXJzdCgpKSA6IG1f
cmVnaW9uTGlzdC5maXJzdCgpOworICAgICAgICByZXR1cm4gY2xhbXBCb3ggPyBjbGFtcEJveC0+
Y2xhbXBUb1N0YXJ0QW5kRW5kRnJhZ21lbnRzKG1fZnJhZ21lbnRMaXN0LmZpcnN0KCkpIDogbV9m
cmFnbWVudExpc3QuZmlyc3QoKTsKIAotICAgIFJlZ2lvblNlYXJjaEFkYXB0ZXIgYWRhcHRlcihv
ZmZzZXQpOwotICAgIG1fcmVnaW9uSW50ZXJ2YWxUcmVlLmFsbE92ZXJsYXBzV2l0aEFkYXB0ZXI8
UmVnaW9uU2VhcmNoQWRhcHRlcj4oYWRhcHRlcik7CisgICAgRnJhZ21lbnRTZWFyY2hBZGFwdGVy
IGFkYXB0ZXIob2Zmc2V0KTsKKyAgICBtX2ZyYWdtZW50SW50ZXJ2YWxUcmVlLmFsbE92ZXJsYXBz
V2l0aEFkYXB0ZXI8RnJhZ21lbnRTZWFyY2hBZGFwdGVyPihhZGFwdGVyKTsKIAotICAgIC8vIElm
IG5vIHJlZ2lvbiB3YXMgZm91bmQsIHRoZSBvZmZzZXQgaXMgaW4gdGhlIGZsb3cgdGhyZWFkIG92
ZXJmbG93LgotICAgIC8vIFRoZSBsYXN0IHJlZ2lvbiB3aWxsIGNvbnRhaW4gdGhlIG9mZnNldCBp
ZiBleHRlbmRMYXN0UmVnaW9uIGlzIHNldCBvciBpZiB0aGUgbGFzdCByZWdpb24gaXMgYSBzZXQu
Ci0gICAgaWYgKCFhZGFwdGVyLnJlc3VsdCgpICYmIChleHRlbmRMYXN0UmVnaW9uIHx8IG1fcmVn
aW9uTGlzdC5sYXN0KCktPmlzUmVuZGVyUmVnaW9uU2V0KCkpKQotICAgICAgICByZXR1cm4gY2xh
bXBCb3ggPyBjbGFtcEJveC0+Y2xhbXBUb1N0YXJ0QW5kRW5kUmVnaW9ucyhtX3JlZ2lvbkxpc3Qu
bGFzdCgpKSA6IG1fcmVnaW9uTGlzdC5sYXN0KCk7CisgICAgLy8gSWYgbm8gZnJhZ21lbnQgd2Fz
IGZvdW5kLCB0aGUgb2Zmc2V0IGlzIGluIHRoZSBmbG93IHRocmVhZCBvdmVyZmxvdy4KKyAgICAv
LyBUaGUgbGFzdCBmcmFnbWVudCB3aWxsIGNvbnRhaW4gdGhlIG9mZnNldCBpZiBleHRlbmRMYXN0
RnJhZ21lbnQgaXMgc2V0IG9yIGlmIHRoZSBsYXN0IGZyYWdtZW50IGlzIGEgc2V0LgorICAgIGlm
ICghYWRhcHRlci5yZXN1bHQoKSAmJiAoZXh0ZW5kTGFzdEZyYWdtZW50IHx8IG1fZnJhZ21lbnRM
aXN0Lmxhc3QoKS0+aXNSZW5kZXJGcmFnbWVudENvbnRhaW5lclNldCgpKSkKKyAgICAgICAgcmV0
dXJuIGNsYW1wQm94ID8gY2xhbXBCb3gtPmNsYW1wVG9TdGFydEFuZEVuZEZyYWdtZW50cyhtX2Zy
YWdtZW50TGlzdC5sYXN0KCkpIDogbV9mcmFnbWVudExpc3QubGFzdCgpOwogCi0gICAgUmVuZGVy
UmVnaW9uKiByZWdpb24gPSBhZGFwdGVyLnJlc3VsdCgpOworICAgIFJlbmRlckZyYWdtZW50Q29u
dGFpbmVyKiBmcmFnbWVudCA9IGFkYXB0ZXIucmVzdWx0KCk7CiAgICAgaWYgKCFjbGFtcEJveCkK
LSAgICAgICAgcmV0dXJuIHJlZ2lvbjsKLSAgICByZXR1cm4gcmVnaW9uID8gY2xhbXBCb3gtPmNs
YW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9uKSA6IG51bGxwdHI7CisgICAgICAgIHJldHVy
biBmcmFnbWVudDsKKyAgICByZXR1cm4gZnJhZ21lbnQgPyBjbGFtcEJveC0+Y2xhbXBUb1N0YXJ0
QW5kRW5kRnJhZ21lbnRzKGZyYWdtZW50KSA6IG51bGxwdHI7CiB9CiAKIExheW91dFBvaW50IFJl
bmRlckZsb3dUaHJlYWQ6OmFkanVzdGVkUG9zaXRpb25SZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGNv
bnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiBib3hNb2RlbE9iamVjdCwgY29uc3QgTGF5b3V0UG9p
bnQmIHN0YXJ0UG9pbnQpIGNvbnN0CkBAIC0yNjMsNDIgKzI2Myw0MiBAQCBMYXlvdXRQb2ludCBS
ZW5kZXJGbG93VGhyZWFkOjphZGp1c3RlZFBvCiAgICAgCiAgICAgY29uc3QgUmVuZGVyQmxvY2sq
IG9iakNvbnRhaW5pbmdCbG9jayA9IGJveE1vZGVsT2JqZWN0LmNvbnRhaW5pbmdCbG9jaygpOwog
ICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIGFkYXB0ZWQgZm9yIGRpZmZlcmVudCB3cml0
aW5nIG1vZGVzIGluc2lkZSB0aGUgZmxvdyB0aHJlYWQuCi0gICAgUmVuZGVyUmVnaW9uKiBzdGFy
dFJlZ2lvbiA9IHJlZ2lvbkF0QmxvY2tPZmZzZXQob2JqQ29udGFpbmluZ0Jsb2NrLCByZWZlcmVu
Y2VQb2ludC55KCkpOwotICAgIGlmIChzdGFydFJlZ2lvbikgewotICAgICAgICAvLyBUYWtlIGlu
dG8gYWNjb3VudCB0aGUgb2Zmc2V0IGNvb3JkaW5hdGVzIG9mIHRoZSByZWdpb24uCi0gICAgICAg
IFJlbmRlckJveE1vZGVsT2JqZWN0KiBzdGFydFJlZ2lvbkJveCA9IHN0YXJ0UmVnaW9uOwotICAg
ICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogY3Vyck9iamVjdCA9IHN0YXJ0UmVnaW9uQm94Owor
ICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBzdGFydEZyYWdtZW50ID0gZnJhZ21lbnRBdEJs
b2NrT2Zmc2V0KG9iakNvbnRhaW5pbmdCbG9jaywgcmVmZXJlbmNlUG9pbnQueSgpKTsKKyAgICBp
ZiAoc3RhcnRGcmFnbWVudCkgeworICAgICAgICAvLyBUYWtlIGludG8gYWNjb3VudCB0aGUgb2Zm
c2V0IGNvb3JkaW5hdGVzIG9mIHRoZSBmcmFnbWVudC4KKyAgICAgICAgUmVuZGVyQm94TW9kZWxP
YmplY3QqIHN0YXJ0RnJhZ21lbnRCb3ggPSBzdGFydEZyYWdtZW50OworICAgICAgICBSZW5kZXJC
b3hNb2RlbE9iamVjdCogY3Vyck9iamVjdCA9IHN0YXJ0RnJhZ21lbnRCb3g7CiAgICAgICAgIFJl
bmRlckJveE1vZGVsT2JqZWN0KiBjdXJyT2Zmc2V0UGFyZW50OwogICAgICAgICB3aGlsZSAoKGN1
cnJPZmZzZXRQYXJlbnQgPSBjdXJyT2JqZWN0LT5vZmZzZXRQYXJlbnQoKSkpIHsKICAgICAgICAg
ICAgIHJlZmVyZW5jZVBvaW50Lm1vdmUoY3Vyck9iamVjdC0+b2Zmc2V0TGVmdCgpLCBjdXJyT2Jq
ZWN0LT5vZmZzZXRUb3AoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFNpbmNlIHdl
J3JlIGxvb2tpbmcgZm9yIHRoZSBvZmZzZXQgcmVsYXRpdmUgdG8gdGhlIGJvZHksIHdlIG11c3Qg
YWxzbwotICAgICAgICAgICAgLy8gdGFrZSBpbnRvIGNvbnNpZGVyYXRpb24gdGhlIGJvcmRlcnMg
b2YgdGhlIHJlZ2lvbidzIG9mZnNldFBhcmVudC4KKyAgICAgICAgICAgIC8vIHRha2UgaW50byBj
b25zaWRlcmF0aW9uIHRoZSBib3JkZXJzIG9mIHRoZSBmcmFnbWVudCdzIG9mZnNldFBhcmVudC4K
ICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KCpjdXJyT2Zmc2V0UGFyZW50KSAmJiAhY3Vy
ck9mZnNldFBhcmVudC0+aXNCb2R5KCkpCiAgICAgICAgICAgICAgICAgcmVmZXJlbmNlUG9pbnQu
bW92ZShkb3duY2FzdDxSZW5kZXJCb3g+KCpjdXJyT2Zmc2V0UGFyZW50KS5ib3JkZXJMZWZ0KCks
IGRvd25jYXN0PFJlbmRlckJveD4oKmN1cnJPZmZzZXRQYXJlbnQpLmJvcmRlclRvcCgpKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgY3Vyck9iamVjdCA9IGN1cnJPZmZzZXRQYXJlbnQ7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgYW55IG9m
IHRoaXMgYm94J3MgY29udGFpbmluZyBibG9ja3Mgc3RhcnQgaW4gYSBkaWZmZXJlbnQgcmVnaW9u
CisgICAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgYW55IG9mIHRoaXMgYm94J3MgY29udGFp
bmluZyBibG9ja3Mgc3RhcnQgaW4gYSBkaWZmZXJlbnQgZnJhZ21lbnQKICAgICAgICAgLy8gYW5k
IGlmIHNvLCBkcm9wIHRoZSBvYmplY3QncyB0b3AgcG9zaXRpb24gKHdoaWNoIHdhcyBjb21wdXRl
ZCByZWxhdGl2ZSB0byBpdHMgY29udGFpbmluZyBibG9jawotICAgICAgICAvLyBhbmQgaXMgbm8g
bG9uZ2VyIHZhbGlkKSBhbmQgcmVjb21wdXRlIGl0IHVzaW5nIHRoZSByZWdpb24gaW4gd2hpY2gg
aXQgZmxvd3MgYXMgcmVmZXJlbmNlLgotICAgICAgICBib29sIHdhc0NvbXB1dGVkUmVsYXRpdmVU
b090aGVyUmVnaW9uID0gZmFsc2U7CisgICAgICAgIC8vIGFuZCBpcyBubyBsb25nZXIgdmFsaWQp
IGFuZCByZWNvbXB1dGUgaXQgdXNpbmcgdGhlIGZyYWdtZW50IGluIHdoaWNoIGl0IGZsb3dzIGFz
IHJlZmVyZW5jZS4KKyAgICAgICAgYm9vbCB3YXNDb21wdXRlZFJlbGF0aXZlVG9PdGhlckZyYWdt
ZW50ID0gZmFsc2U7CiAgICAgICAgIHdoaWxlIChvYmpDb250YWluaW5nQmxvY2sgJiYgIWlzPFJl
bmRlclZpZXc+KCpvYmpDb250YWluaW5nQmxvY2spKSB7Ci0gICAgICAgICAgICAvLyBDaGVjayBp
ZiB0aGlzIG9iamVjdCBpcyBpbiBhIGRpZmZlcmVudCByZWdpb24uCi0gICAgICAgICAgICBSZW5k
ZXJSZWdpb24qIHBhcmVudFN0YXJ0UmVnaW9uID0gbnVsbHB0cjsKLSAgICAgICAgICAgIFJlbmRl
clJlZ2lvbiogcGFyZW50RW5kUmVnaW9uID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGlmIChnZXRS
ZWdpb25SYW5nZUZvckJveChvYmpDb250YWluaW5nQmxvY2ssIHBhcmVudFN0YXJ0UmVnaW9uLCBw
YXJlbnRFbmRSZWdpb24pICYmIHBhcmVudFN0YXJ0UmVnaW9uICE9IHN0YXJ0UmVnaW9uKSB7Ci0g
ICAgICAgICAgICAgICAgd2FzQ29tcHV0ZWRSZWxhdGl2ZVRvT3RoZXJSZWdpb24gPSB0cnVlOwor
ICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBvYmplY3QgaXMgaW4gYSBkaWZmZXJlbnQgZnJh
Z21lbnQuCisgICAgICAgICAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogcGFyZW50U3RhcnRG
cmFnbWVudCA9IG51bGxwdHI7CisgICAgICAgICAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciog
cGFyZW50RW5kRnJhZ21lbnQgPSBudWxscHRyOworICAgICAgICAgICAgaWYgKGdldEZyYWdtZW50
UmFuZ2VGb3JCb3gob2JqQ29udGFpbmluZ0Jsb2NrLCBwYXJlbnRTdGFydEZyYWdtZW50LCBwYXJl
bnRFbmRGcmFnbWVudCkgJiYgcGFyZW50U3RhcnRGcmFnbWVudCAhPSBzdGFydEZyYWdtZW50KSB7
CisgICAgICAgICAgICAgICAgd2FzQ29tcHV0ZWRSZWxhdGl2ZVRvT3RoZXJGcmFnbWVudCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBv
YmpDb250YWluaW5nQmxvY2sgPSBvYmpDb250YWluaW5nQmxvY2stPmNvbnRhaW5pbmdCbG9jaygp
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAod2FzQ29tcHV0ZWRSZWxhdGl2ZVRv
T3RoZXJSZWdpb24pIHsKKyAgICAgICAgaWYgKHdhc0NvbXB1dGVkUmVsYXRpdmVUb090aGVyRnJh
Z21lbnQpIHsKICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KGJveE1vZGVsT2JqZWN0KSkg
ewotICAgICAgICAgICAgICAgIC8vIFVzZSBib3JkZXJCb3hSZWN0SW5SZWdpb24gdG8gYWNjb3Vu
dCBmb3IgdmFyaWF0aW9ucyBzdWNoIGFzIHBlcmNlbnRhZ2UgbWFyZ2lucy4KLSAgICAgICAgICAg
ICAgICBMYXlvdXRSZWN0IGJvcmRlckJveFJlY3QgPSBkb3duY2FzdDxSZW5kZXJCb3g+KGJveE1v
ZGVsT2JqZWN0KS5ib3JkZXJCb3hSZWN0SW5SZWdpb24oc3RhcnRSZWdpb24sIFJlbmRlckJveDo6
RG9Ob3RDYWNoZVJlbmRlckJveFJlZ2lvbkluZm8pOworICAgICAgICAgICAgICAgIC8vIFVzZSBi
b3JkZXJCb3hSZWN0SW5GcmFnbWVudCB0byBhY2NvdW50IGZvciB2YXJpYXRpb25zIHN1Y2ggYXMg
cGVyY2VudGFnZSBtYXJnaW5zLgorICAgICAgICAgICAgICAgIExheW91dFJlY3QgYm9yZGVyQm94
UmVjdCA9IGRvd25jYXN0PFJlbmRlckJveD4oYm94TW9kZWxPYmplY3QpLmJvcmRlckJveFJlY3RJ
bkZyYWdtZW50KHN0YXJ0RnJhZ21lbnQsIFJlbmRlckJveDo6RG9Ob3RDYWNoZVJlbmRlckJveEZy
YWdtZW50SW5mbyk7CiAgICAgICAgICAgICAgICAgcmVmZXJlbmNlUG9pbnQubW92ZShib3JkZXJC
b3hSZWN0LmxvY2F0aW9uKCkueCgpLCAwKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApA
QCAtMzE2LDExICszMTYsMTEgQEAgTGF5b3V0UG9pbnQgUmVuZGVyRmxvd1RocmVhZDo6YWRqdXN0
ZWRQbwogICAgICAgICAgICAgICAgICAgICB0b3AgLT0gZG93bmNhc3Q8UmVuZGVySW5saW5lPihi
b3hNb2RlbE9iamVjdCkuYm9yZGVyVG9wKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIC8vIEdldCB0aGUgbG9naWNhbCB0b3Agb2YgdGhlIHJlZ2lvbiB0aGlzIG9i
amVjdCBzdGFydHMgaW4KLSAgICAgICAgICAgIC8vIGFuZCBjb21wdXRlIHRoZSBvYmplY3QncyB0
b3AsIHJlbGF0aXZlIHRvIHRoZSByZWdpb24ncyB0b3AuCi0gICAgICAgICAgICBMYXlvdXRVbml0
IHJlZ2lvbkxvZ2ljYWxUb3AgPSBzdGFydFJlZ2lvbi0+cGFnZUxvZ2ljYWxUb3BGb3JPZmZzZXQo
dG9wKTsKLSAgICAgICAgICAgIExheW91dFVuaXQgdG9wUmVsYXRpdmVUb1JlZ2lvbiA9IHRvcCAt
IHJlZ2lvbkxvZ2ljYWxUb3A7Ci0gICAgICAgICAgICByZWZlcmVuY2VQb2ludC5zZXRZKHN0YXJ0
UmVnaW9uQm94LT5vZmZzZXRUb3AoKSArIHRvcFJlbGF0aXZlVG9SZWdpb24pOworICAgICAgICAg
ICAgLy8gR2V0IHRoZSBsb2dpY2FsIHRvcCBvZiB0aGUgZnJhZ21lbnQgdGhpcyBvYmplY3Qgc3Rh
cnRzIGluCisgICAgICAgICAgICAvLyBhbmQgY29tcHV0ZSB0aGUgb2JqZWN0J3MgdG9wLCByZWxh
dGl2ZSB0byB0aGUgZnJhZ21lbnQncyB0b3AuCisgICAgICAgICAgICBMYXlvdXRVbml0IGZyYWdt
ZW50TG9naWNhbFRvcCA9IHN0YXJ0RnJhZ21lbnQtPnBhZ2VMb2dpY2FsVG9wRm9yT2Zmc2V0KHRv
cCk7CisgICAgICAgICAgICBMYXlvdXRVbml0IHRvcFJlbGF0aXZlVG9GcmFnbWVudCA9IHRvcCAt
IGZyYWdtZW50TG9naWNhbFRvcDsKKyAgICAgICAgICAgIHJlZmVyZW5jZVBvaW50LnNldFkoc3Rh
cnRGcmFnbWVudEJveC0+b2Zmc2V0VG9wKCkgKyB0b3BSZWxhdGl2ZVRvRnJhZ21lbnQpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICAvLyBTaW5jZSB0aGUgdG9wIGhhcyBiZWVuIG92ZXJyaWRl
biwgY2hlY2sgaWYgdGhlCiAgICAgICAgICAgICAvLyByZWxhdGl2ZS9zdGlja3kgcG9zaXRpb25p
bmcgbXVzdCBiZSByZWNvbnNpZGVyZWQuCkBAIC0zMzEsOCArMzMxLDggQEAgTGF5b3V0UG9pbnQg
UmVuZGVyRmxvd1RocmVhZDo6YWRqdXN0ZWRQbwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICAvLyBTaW5jZSB3ZSdyZSBsb29raW5nIGZvciB0aGUgb2Zmc2V0IHJlbGF0aXZlIHRvIHRoZSBi
b2R5LCB3ZSBtdXN0IGFsc28KLSAgICAgICAgLy8gdGFrZSBpbnRvIGNvbnNpZGVyYXRpb24gdGhl
IGJvcmRlcnMgb2YgdGhlIHJlZ2lvbi4KLSAgICAgICAgcmVmZXJlbmNlUG9pbnQubW92ZShzdGFy
dFJlZ2lvbkJveC0+Ym9yZGVyTGVmdCgpLCBzdGFydFJlZ2lvbkJveC0+Ym9yZGVyVG9wKCkpOwor
ICAgICAgICAvLyB0YWtlIGludG8gY29uc2lkZXJhdGlvbiB0aGUgYm9yZGVycyBvZiB0aGUgZnJh
Z21lbnQuCisgICAgICAgIHJlZmVyZW5jZVBvaW50Lm1vdmUoc3RhcnRGcmFnbWVudEJveC0+Ym9y
ZGVyTGVmdCgpLCBzdGFydEZyYWdtZW50Qm94LT5ib3JkZXJUb3AoKSk7CiAgICAgfQogICAgIAog
ICAgIHJldHVybiByZWZlcmVuY2VQb2ludDsKQEAgLTM0MCwxMTkgKzM0MCwxMTkgQEAgTGF5b3V0
UG9pbnQgUmVuZGVyRmxvd1RocmVhZDo6YWRqdXN0ZWRQbwogCiBMYXlvdXRVbml0IFJlbmRlckZs
b3dUaHJlYWQ6OnBhZ2VMb2dpY2FsVG9wRm9yT2Zmc2V0KExheW91dFVuaXQgb2Zmc2V0KSBjb25z
dAogewotICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gcmVnaW9uQXRCbG9ja09mZnNldCgwLCBv
ZmZzZXQsIGZhbHNlKTsKLSAgICByZXR1cm4gcmVnaW9uID8gcmVnaW9uLT5wYWdlTG9naWNhbFRv
cEZvck9mZnNldChvZmZzZXQpIDogTGF5b3V0VW5pdCgpOworICAgIFJlbmRlckZyYWdtZW50Q29u
dGFpbmVyKiBmcmFnbWVudCA9IGZyYWdtZW50QXRCbG9ja09mZnNldCgwLCBvZmZzZXQsIGZhbHNl
KTsKKyAgICByZXR1cm4gZnJhZ21lbnQgPyBmcmFnbWVudC0+cGFnZUxvZ2ljYWxUb3BGb3JPZmZz
ZXQob2Zmc2V0KSA6IExheW91dFVuaXQoKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJGbG93VGhy
ZWFkOjpwYWdlTG9naWNhbFdpZHRoRm9yT2Zmc2V0KExheW91dFVuaXQgb2Zmc2V0KSBjb25zdAog
ewotICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gcmVnaW9uQXRCbG9ja09mZnNldCgwLCBvZmZz
ZXQsIHRydWUpOwotICAgIHJldHVybiByZWdpb24gPyByZWdpb24tPnBhZ2VMb2dpY2FsV2lkdGgo
KSA6IGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciog
ZnJhZ21lbnQgPSBmcmFnbWVudEF0QmxvY2tPZmZzZXQoMCwgb2Zmc2V0LCB0cnVlKTsKKyAgICBy
ZXR1cm4gZnJhZ21lbnQgPyBmcmFnbWVudC0+cGFnZUxvZ2ljYWxXaWR0aCgpIDogY29udGVudExv
Z2ljYWxXaWR0aCgpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckZsb3dUaHJlYWQ6OnBhZ2VMb2dp
Y2FsSGVpZ2h0Rm9yT2Zmc2V0KExheW91dFVuaXQgb2Zmc2V0KSBjb25zdAogewotICAgIFJlbmRl
clJlZ2lvbiogcmVnaW9uID0gcmVnaW9uQXRCbG9ja09mZnNldCgwLCBvZmZzZXQsIGZhbHNlKTsK
LSAgICBpZiAoIXJlZ2lvbikKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQg
PSBmcmFnbWVudEF0QmxvY2tPZmZzZXQoMCwgb2Zmc2V0LCBmYWxzZSk7CisgICAgaWYgKCFmcmFn
bWVudCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gcmVnaW9uLT5wYWdlTG9naWNh
bEhlaWdodCgpOworICAgIHJldHVybiBmcmFnbWVudC0+cGFnZUxvZ2ljYWxIZWlnaHQoKTsKIH0K
IAogTGF5b3V0VW5pdCBSZW5kZXJGbG93VGhyZWFkOjpwYWdlUmVtYWluaW5nTG9naWNhbEhlaWdo
dEZvck9mZnNldChMYXlvdXRVbml0IG9mZnNldCwgUGFnZUJvdW5kYXJ5UnVsZSBwYWdlQm91bmRh
cnlSdWxlKSBjb25zdAogewotICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gcmVnaW9uQXRCbG9j
a09mZnNldCgwLCBvZmZzZXQsIGZhbHNlKTsKLSAgICBpZiAoIXJlZ2lvbikKKyAgICBSZW5kZXJG
cmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQgPSBmcmFnbWVudEF0QmxvY2tPZmZzZXQoMCwgb2Zm
c2V0LCBmYWxzZSk7CisgICAgaWYgKCFmcmFnbWVudCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAg
ICBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsVG9wID0gcmVnaW9uLT5wYWdlTG9naWNhbFRvcEZvck9m
ZnNldChvZmZzZXQpOwotICAgIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSByZWdpb24t
PnBhZ2VMb2dpY2FsSGVpZ2h0KCk7CisgICAgTGF5b3V0VW5pdCBwYWdlTG9naWNhbFRvcCA9IGZy
YWdtZW50LT5wYWdlTG9naWNhbFRvcEZvck9mZnNldChvZmZzZXQpOworICAgIExheW91dFVuaXQg
cGFnZUxvZ2ljYWxIZWlnaHQgPSBmcmFnbWVudC0+cGFnZUxvZ2ljYWxIZWlnaHQoKTsKICAgICBM
YXlvdXRVbml0IHBhZ2VMb2dpY2FsQm90dG9tID0gcGFnZUxvZ2ljYWxUb3AgKyBwYWdlTG9naWNh
bEhlaWdodDsKICAgICBMYXlvdXRVbml0IHJlbWFpbmluZ0hlaWdodCA9IHBhZ2VMb2dpY2FsQm90
dG9tIC0gb2Zmc2V0OwogICAgIGlmIChwYWdlQm91bmRhcnlSdWxlID09IEluY2x1ZGVQYWdlQm91
bmRhcnkpIHsKICAgICAgICAgLy8gSWYgSW5jbHVkZVBhZ2VCb3VuZGFyeSBpcyBzZXQsIHRoZSBs
aW5lIGV4YWN0bHkgb24gdGhlIHRvcCBlZGdlIG9mIGEKLSAgICAgICAgLy8gcmVnaW9uIHdpbGwg
YWN0IGFzIGJlaW5nIHBhcnQgb2YgdGhlIHByZXZpb3VzIHJlZ2lvbi4KKyAgICAgICAgLy8gZnJh
Z21lbnQgd2lsbCBhY3QgYXMgYmVpbmcgcGFydCBvZiB0aGUgcHJldmlvdXMgZnJhZ21lbnQuCiAg
ICAgICAgIHJlbWFpbmluZ0hlaWdodCA9IGludE1vZChyZW1haW5pbmdIZWlnaHQsIHBhZ2VMb2dp
Y2FsSGVpZ2h0KTsKICAgICB9CiAgICAgcmV0dXJuIHJlbWFpbmluZ0hlaWdodDsKIH0KIAotUmVu
ZGVyUmVnaW9uKiBSZW5kZXJGbG93VGhyZWFkOjptYXBGcm9tRmxvd1RvUmVnaW9uKFRyYW5zZm9y
bVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSkgY29uc3QKK1JlbmRlckZyYWdtZW50Q29udGFpbmVyKiBS
ZW5kZXJGbG93VGhyZWFkOjptYXBGcm9tRmxvd1RvRnJhZ21lbnQoVHJhbnNmb3JtU3RhdGUmIHRy
YW5zZm9ybVN0YXRlKSBjb25zdAogewotICAgIGlmICghaGFzVmFsaWRSZWdpb25JbmZvKCkpCisg
ICAgaWYgKCFoYXNWYWxpZEZyYWdtZW50SW5mbygpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIFJlbmRlclJlZ2lvbiogcmVuZGVyUmVnaW9uID0gY3VycmVudFJlZ2lvbigpOwotICAg
IGlmICghcmVuZGVyUmVnaW9uKSB7CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIFJlbmRl
ckZyYWdtZW50Q29udGFpbmVyID0gY3VycmVudEZyYWdtZW50KCk7CisgICAgaWYgKCFSZW5kZXJG
cmFnbWVudENvbnRhaW5lcikgewogICAgICAgICBMYXlvdXRSZWN0IGJveFJlY3QgPSB0cmFuc2Zv
cm1TdGF0ZS5tYXBwZWRRdWFkKCkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKICAgICAgICAgZmxp
cEZvcldyaXRpbmdNb2RlKGJveFJlY3QpOwogCiAgICAgICAgIExheW91dFBvaW50IGNlbnRlciA9
IGJveFJlY3QuY2VudGVyKCk7Ci0gICAgICAgIHJlbmRlclJlZ2lvbiA9IHJlZ2lvbkF0QmxvY2tP
ZmZzZXQodGhpcywgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNlbnRlci55KCkgOiBjZW50
ZXIueCgpLCB0cnVlKTsKLSAgICAgICAgaWYgKCFyZW5kZXJSZWdpb24pCisgICAgICAgIFJlbmRl
ckZyYWdtZW50Q29udGFpbmVyID0gZnJhZ21lbnRBdEJsb2NrT2Zmc2V0KHRoaXMsIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyBjZW50ZXIueSgpIDogY2VudGVyLngoKSwgdHJ1ZSk7CisgICAg
ICAgIGlmICghUmVuZGVyRnJhZ21lbnRDb250YWluZXIpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBMYXlvdXRSZWN0IGZsaXBwZWRSZWdpb25SZWN0KHJlbmRlclJl
Z2lvbi0+Zmxvd1RocmVhZFBvcnRpb25SZWN0KCkpOwotICAgIGZsaXBGb3JXcml0aW5nTW9kZShm
bGlwcGVkUmVnaW9uUmVjdCk7CisgICAgTGF5b3V0UmVjdCBmbGlwcGVkRnJhZ21lbnRSZWN0KFJl
bmRlckZyYWdtZW50Q29udGFpbmVyLT5mbG93VGhyZWFkUG9ydGlvblJlY3QoKSk7CisgICAgZmxp
cEZvcldyaXRpbmdNb2RlKGZsaXBwZWRGcmFnbWVudFJlY3QpOwogCi0gICAgdHJhbnNmb3JtU3Rh
dGUubW92ZShyZW5kZXJSZWdpb24tPmNvbnRlbnRCb3hSZWN0KCkubG9jYXRpb24oKSAtIGZsaXBw
ZWRSZWdpb25SZWN0LmxvY2F0aW9uKCkpOworICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUoUmVuZGVy
RnJhZ21lbnRDb250YWluZXItPmNvbnRlbnRCb3hSZWN0KCkubG9jYXRpb24oKSAtIGZsaXBwZWRG
cmFnbWVudFJlY3QubG9jYXRpb24oKSk7CiAKLSAgICByZXR1cm4gcmVuZGVyUmVnaW9uOworICAg
IHJldHVybiBSZW5kZXJGcmFnbWVudENvbnRhaW5lcjsKIH0KIAotdm9pZCBSZW5kZXJGbG93VGhy
ZWFkOjpyZW1vdmVSZW5kZXJCb3hSZWdpb25JbmZvKFJlbmRlckJveCYgYm94KQordm9pZCBSZW5k
ZXJGbG93VGhyZWFkOjpyZW1vdmVSZW5kZXJCb3hGcmFnbWVudEluZm8oUmVuZGVyQm94JiBib3gp
CiB7Ci0gICAgaWYgKCFoYXNSZWdpb25zKCkpCisgICAgaWYgKCFoYXNGcmFnbWVudHMoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgLy8gSWYgdGhlIHJlZ2lvbiBjaGFpbiB3YXMgaW52YWxpZGF0
ZWQgdGhlIG5leHQgbGF5b3V0IHdpbGwgY2xlYXIgdGhlIGJveCBpbmZvcm1hdGlvbiBmcm9tIGFs
bCB0aGUgcmVnaW9ucy4KLSAgICBpZiAobV9yZWdpb25zSW52YWxpZGF0ZWQpIHsKKyAgICAvLyBJ
ZiB0aGUgZnJhZ21lbnQgY2hhaW4gd2FzIGludmFsaWRhdGVkIHRoZSBuZXh0IGxheW91dCB3aWxs
IGNsZWFyIHRoZSBib3ggaW5mb3JtYXRpb24gZnJvbSBhbGwgdGhlIGZyYWdtZW50cy4KKyAgICBp
ZiAobV9mcmFnbWVudHNJbnZhbGlkYXRlZCkgewogICAgICAgICBBU1NFUlQoc2VsZk5lZWRzTGF5
b3V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVuZGVyUmVnaW9uKiBzdGFy
dFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgUmVuZGVyUmVnaW9uKiBlbmRSZWdpb24gPSBudWxscHRy
OwotICAgIGlmIChnZXRSZWdpb25SYW5nZUZvckJveCgmYm94LCBzdGFydFJlZ2lvbiwgZW5kUmVn
aW9uKSkgewotICAgICAgICBmb3IgKGF1dG8gaXQgPSBtX3JlZ2lvbkxpc3QuZmluZChzdGFydFJl
Z2lvbiksIGVuZCA9IG1fcmVnaW9uTGlzdC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICppdDsKLSAgICAgICAgICAgIHJlZ2lvbi0+
cmVtb3ZlUmVuZGVyQm94UmVnaW9uSW5mbyhib3gpOwotICAgICAgICAgICAgaWYgKHJlZ2lvbiA9
PSBlbmRSZWdpb24pCisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIHN0YXJ0RnJhZ21lbnQg
PSBudWxscHRyOworICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBlbmRGcmFnbWVudCA9IG51
bGxwdHI7CisgICAgaWYgKGdldEZyYWdtZW50UmFuZ2VGb3JCb3goJmJveCwgc3RhcnRGcmFnbWVu
dCwgZW5kRnJhZ21lbnQpKSB7CisgICAgICAgIGZvciAoYXV0byBpdCA9IG1fZnJhZ21lbnRMaXN0
LmZpbmQoc3RhcnRGcmFnbWVudCksIGVuZCA9IG1fZnJhZ21lbnRMaXN0LmVuZCgpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVu
dCA9ICppdDsKKyAgICAgICAgICAgIGZyYWdtZW50LT5yZW1vdmVSZW5kZXJCb3hGcmFnbWVudElu
Zm8oYm94KTsKKyAgICAgICAgICAgIGlmIChmcmFnbWVudCA9PSBlbmRGcmFnbWVudCkKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAogI2lmbmRlZiBOREVCVUcKLSAg
ICAvLyBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB3ZSBkaWQgbm90IGxlYXZlIGFueSBSZW5kZXJCb3hS
ZWdpb25JbmZvIGF0dGFjaGVkLgotICAgIGZvciAoYXV0byYgcmVnaW9uIDogbV9yZWdpb25MaXN0
KQotICAgICAgICBBU1NFUlQoIXJlZ2lvbi0+cmVuZGVyQm94UmVnaW9uSW5mbygmYm94KSk7Cisg
ICAgLy8gV2UgaGF2ZSB0byBtYWtlIHN1cmUgd2UgZGlkIG5vdCBsZWF2ZSBhbnkgUmVuZGVyQm94
RnJhZ21lbnRJbmZvIGF0dGFjaGVkLgorICAgIGZvciAoYXV0byYgZnJhZ21lbnQgOiBtX2ZyYWdt
ZW50TGlzdCkKKyAgICAgICAgQVNTRVJUKCFmcmFnbWVudC0+cmVuZGVyQm94RnJhZ21lbnRJbmZv
KCZib3gpKTsKICNlbmRpZgogCi0gICAgbV9yZWdpb25SYW5nZU1hcC5yZW1vdmUoJmJveCk7Cisg
ICAgbV9mcmFnbWVudFJhbmdlTWFwLnJlbW92ZSgmYm94KTsKIH0KIAotdm9pZCBSZW5kZXJGbG93
VGhyZWFkOjpyZW1vdmVMaW5lUmVnaW9uSW5mbyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGJsb2Nr
RmxvdykKK3ZvaWQgUmVuZGVyRmxvd1RocmVhZDo6cmVtb3ZlTGluZUZyYWdtZW50SW5mbyhjb25z
dCBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrRmxvdykKIHsKLSAgICBpZiAoIW1fbGluZVRvUmVnaW9u
TWFwIHx8IGJsb2NrRmxvdy5saW5lTGF5b3V0UGF0aCgpID09IFNpbXBsZUxpbmVzUGF0aCkKKyAg
ICBpZiAoIW1fbGluZVRvRnJhZ21lbnRNYXAgfHwgYmxvY2tGbG93LmxpbmVMYXlvdXRQYXRoKCkg
PT0gU2ltcGxlTGluZXNQYXRoKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKGF1dG8qIGN1
cnIgPSBibG9ja0Zsb3cuZmlyc3RSb290Qm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0Um9v
dEJveCgpKQotICAgICAgICBtX2xpbmVUb1JlZ2lvbk1hcC0+cmVtb3ZlKGN1cnIpOworICAgICAg
ICBtX2xpbmVUb0ZyYWdtZW50TWFwLT5yZW1vdmUoY3Vycik7CiAKICAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihjaGVja0xpbmVzQ29uc2lzdGVuY3koYmxvY2tGbG93KSk7CiB9
CiAKLXZvaWQgUmVuZGVyRmxvd1RocmVhZDo6bG9naWNhbFdpZHRoQ2hhbmdlZEluUmVnaW9uc0Zv
ckJsb2NrKGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaywgYm9vbCYgcmVsYXlvdXRDaGlsZHJlbikK
K3ZvaWQgUmVuZGVyRmxvd1RocmVhZDo6bG9naWNhbFdpZHRoQ2hhbmdlZEluRnJhZ21lbnRzRm9y
QmxvY2soY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrLCBib29sJiByZWxheW91dENoaWxkcmVuKQog
ewotICAgIGlmICghaGFzVmFsaWRSZWdpb25JbmZvKCkpCisgICAgaWYgKCFoYXNWYWxpZEZyYWdt
ZW50SW5mbygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGl0ID0gbV9yZWdpb25SYW5n
ZU1hcC5maW5kKGJsb2NrKTsKLSAgICBpZiAoaXQgPT0gbV9yZWdpb25SYW5nZU1hcC5lbmQoKSkK
KyAgICBhdXRvIGl0ID0gbV9mcmFnbWVudFJhbmdlTWFwLmZpbmQoYmxvY2spOworICAgIGlmIChp
dCA9PSBtX2ZyYWdtZW50UmFuZ2VNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJl
bmRlclJlZ2lvblJhbmdlJiByYW5nZSA9IGl0LT52YWx1ZTsKKyAgICBSZW5kZXJGcmFnbWVudENv
bnRhaW5lclJhbmdlJiByYW5nZSA9IGl0LT52YWx1ZTsKICAgICBib29sIHJhbmdlSW52YWxpZGF0
ZWQgPSByYW5nZS5yYW5nZUludmFsaWRhdGVkKCk7CiAgICAgcmFuZ2UuY2xlYXJSYW5nZUludmFs
aWRhdGVkKCk7CiAKQEAgLTQ2MiwxOTggKzQ2MiwxOTggQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFk
Ojpsb2dpY2FsV2lkdGhDaGFuZwogICAgICAgICByZXR1cm47CiAKICAgICAvLyBOb3QgbmVjZXNz
YXJ5IGZvciB0aGUgZmxvdyB0aHJlYWQsIHNpbmNlIHdlIGFscmVhZHkgY29tcHV0ZWQgdGhlIGNv
cnJlY3QgaW5mbyBmb3IgaXQuCi0gICAgLy8gSWYgdGhlIHJlZ2lvbnMgaGF2ZSBjaGFuZ2VkIGlu
dmFsaWRhdGUgdGhlIGNoaWxkcmVuLgorICAgIC8vIElmIHRoZSBmcmFnbWVudHMgaGF2ZSBjaGFu
Z2VkIGludmFsaWRhdGUgdGhlIGNoaWxkcmVuLgogICAgIGlmIChibG9jayA9PSB0aGlzKSB7CiAg
ICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSBtX3BhZ2VMb2dpY2FsU2l6ZUNoYW5nZWQ7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZW5kZXJSZWdpb24qIHN0YXJ0UmVnaW9uID0gbnVs
bHB0cjsKLSAgICBSZW5kZXJSZWdpb24qIGVuZFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgaWYgKCFn
ZXRSZWdpb25SYW5nZUZvckJveChibG9jaywgc3RhcnRSZWdpb24sIGVuZFJlZ2lvbikpCisgICAg
UmVuZGVyRnJhZ21lbnRDb250YWluZXIqIHN0YXJ0RnJhZ21lbnQgPSBudWxscHRyOworICAgIFJl
bmRlckZyYWdtZW50Q29udGFpbmVyKiBlbmRGcmFnbWVudCA9IG51bGxwdHI7CisgICAgaWYgKCFn
ZXRGcmFnbWVudFJhbmdlRm9yQm94KGJsb2NrLCBzdGFydEZyYWdtZW50LCBlbmRGcmFnbWVudCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoYXV0byBpdCA9IG1fcmVnaW9uTGlzdC5maW5k
KHN0YXJ0UmVnaW9uKSwgZW5kID0gbV9yZWdpb25MaXN0LmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSAqaXQ7Ci0gICAgICAgIEFTU0VSVCgh
cmVnaW9uLT5uZWVkc0xheW91dCgpIHx8IHJlZ2lvbi0+aXNSZW5kZXJSZWdpb25TZXQoKSk7Cisg
ICAgZm9yIChhdXRvIGl0ID0gbV9mcmFnbWVudExpc3QuZmluZChzdGFydEZyYWdtZW50KSwgZW5k
ID0gbV9mcmFnbWVudExpc3QuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSZW5k
ZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQgPSAqaXQ7CisgICAgICAgIEFTU0VSVCghZnJh
Z21lbnQtPm5lZWRzTGF5b3V0KCkgfHwgZnJhZ21lbnQtPmlzUmVuZGVyRnJhZ21lbnRDb250YWlu
ZXJTZXQoKSk7CiAKLSAgICAgICAgLy8gV2UgaGF2ZSBubyBpbmZvcm1hdGlvbiBjb21wdXRlZCBm
b3IgdGhpcyByZWdpb24gc28gd2UgbmVlZCB0byBkbyBpdC4KLSAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlckJveFJlZ2lvbkluZm8+IG9sZEluZm8gPSByZWdpb24tPnRha2VSZW5kZXJCb3hS
ZWdpb25JbmZvKGJsb2NrKTsKKyAgICAgICAgLy8gV2UgaGF2ZSBubyBpbmZvcm1hdGlvbiBjb21w
dXRlZCBmb3IgdGhpcyBmcmFnbWVudCBzbyB3ZSBuZWVkIHRvIGRvIGl0LgorICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyQm94RnJhZ21lbnRJbmZvPiBvbGRJbmZvID0gZnJhZ21lbnQtPnRh
a2VSZW5kZXJCb3hGcmFnbWVudEluZm8oYmxvY2spOwogICAgICAgICBpZiAoIW9sZEluZm8pIHsK
ICAgICAgICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSByYW5nZUludmFsaWRhdGVkOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgTGF5b3V0VW5pdCBvbGRMb2dpY2Fs
V2lkdGggPSBvbGRJbmZvLT5sb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgUmVuZGVyQm94UmVnaW9u
SW5mbyogbmV3SW5mbyA9IGJsb2NrLT5yZW5kZXJCb3hSZWdpb25JbmZvKHJlZ2lvbik7CisgICAg
ICAgIFJlbmRlckJveEZyYWdtZW50SW5mbyogbmV3SW5mbyA9IGJsb2NrLT5yZW5kZXJCb3hGcmFn
bWVudEluZm8oZnJhZ21lbnQpOwogICAgICAgICBpZiAoIW5ld0luZm8gfHwgbmV3SW5mby0+bG9n
aWNhbFdpZHRoKCkgIT0gb2xkTG9naWNhbFdpZHRoKSB7CiAgICAgICAgICAgICByZWxheW91dENo
aWxkcmVuID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAg
IGlmIChyZWdpb24gPT0gZW5kUmVnaW9uKQorICAgICAgICBpZiAoZnJhZ21lbnQgPT0gZW5kRnJh
Z21lbnQpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiB9CiAKLUxheW91dFVuaXQgUmVuZGVy
Rmxvd1RocmVhZDo6Y29udGVudExvZ2ljYWxXaWR0aE9mRmlyc3RSZWdpb24oKSBjb25zdAorTGF5
b3V0VW5pdCBSZW5kZXJGbG93VGhyZWFkOjpjb250ZW50TG9naWNhbFdpZHRoT2ZGaXJzdEZyYWdt
ZW50KCkgY29uc3QKIHsKLSAgICBSZW5kZXJSZWdpb24qIGZpcnN0VmFsaWRSZWdpb25JbkZsb3cg
PSBmaXJzdFJlZ2lvbigpOwotICAgIGlmICghZmlyc3RWYWxpZFJlZ2lvbkluRmxvdykKKyAgICBS
ZW5kZXJGcmFnbWVudENvbnRhaW5lciogZmlyc3RWYWxpZEZyYWdtZW50SW5GbG93ID0gZmlyc3RG
cmFnbWVudCgpOworICAgIGlmICghZmlyc3RWYWxpZEZyYWdtZW50SW5GbG93KQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGZpcnN0VmFs
aWRSZWdpb25JbkZsb3ctPmNvbnRlbnRXaWR0aCgpIDogZmlyc3RWYWxpZFJlZ2lvbkluRmxvdy0+
Y29udGVudEhlaWdodCgpOworICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8g
Zmlyc3RWYWxpZEZyYWdtZW50SW5GbG93LT5jb250ZW50V2lkdGgoKSA6IGZpcnN0VmFsaWRGcmFn
bWVudEluRmxvdy0+Y29udGVudEhlaWdodCgpOwogfQogCi1MYXlvdXRVbml0IFJlbmRlckZsb3dU
aHJlYWQ6OmNvbnRlbnRMb2dpY2FsSGVpZ2h0T2ZGaXJzdFJlZ2lvbigpIGNvbnN0CitMYXlvdXRV
bml0IFJlbmRlckZsb3dUaHJlYWQ6OmNvbnRlbnRMb2dpY2FsSGVpZ2h0T2ZGaXJzdEZyYWdtZW50
KCkgY29uc3QKIHsKLSAgICBSZW5kZXJSZWdpb24qIGZpcnN0VmFsaWRSZWdpb25JbkZsb3cgPSBm
aXJzdFJlZ2lvbigpOwotICAgIGlmICghZmlyc3RWYWxpZFJlZ2lvbkluRmxvdykKKyAgICBSZW5k
ZXJGcmFnbWVudENvbnRhaW5lciogZmlyc3RWYWxpZEZyYWdtZW50SW5GbG93ID0gZmlyc3RGcmFn
bWVudCgpOworICAgIGlmICghZmlyc3RWYWxpZEZyYWdtZW50SW5GbG93KQogICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGZpcnN0VmFsaWRS
ZWdpb25JbkZsb3ctPmNvbnRlbnRIZWlnaHQoKSA6IGZpcnN0VmFsaWRSZWdpb25JbkZsb3ctPmNv
bnRlbnRXaWR0aCgpOworICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZmly
c3RWYWxpZEZyYWdtZW50SW5GbG93LT5jb250ZW50SGVpZ2h0KCkgOiBmaXJzdFZhbGlkRnJhZ21l
bnRJbkZsb3ctPmNvbnRlbnRXaWR0aCgpOwogfQogCi1MYXlvdXRVbml0IFJlbmRlckZsb3dUaHJl
YWQ6OmNvbnRlbnRMb2dpY2FsTGVmdE9mRmlyc3RSZWdpb24oKSBjb25zdAorTGF5b3V0VW5pdCBS
ZW5kZXJGbG93VGhyZWFkOjpjb250ZW50TG9naWNhbExlZnRPZkZpcnN0RnJhZ21lbnQoKSBjb25z
dAogewotICAgIFJlbmRlclJlZ2lvbiogZmlyc3RWYWxpZFJlZ2lvbkluRmxvdyA9IGZpcnN0UmVn
aW9uKCk7Ci0gICAgaWYgKCFmaXJzdFZhbGlkUmVnaW9uSW5GbG93KQorICAgIFJlbmRlckZyYWdt
ZW50Q29udGFpbmVyKiBmaXJzdFZhbGlkRnJhZ21lbnRJbkZsb3cgPSBmaXJzdEZyYWdtZW50KCk7
CisgICAgaWYgKCFmaXJzdFZhbGlkRnJhZ21lbnRJbkZsb3cpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZmlyc3RWYWxpZFJlZ2lvbklu
Rmxvdy0+Zmxvd1RocmVhZFBvcnRpb25SZWN0KCkueCgpIDogZmlyc3RWYWxpZFJlZ2lvbkluRmxv
dy0+Zmxvd1RocmVhZFBvcnRpb25SZWN0KCkueSgpOworICAgIHJldHVybiBpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8gZmlyc3RWYWxpZEZyYWdtZW50SW5GbG93LT5mbG93VGhyZWFkUG9ydGlv
blJlY3QoKS54KCkgOiBmaXJzdFZhbGlkRnJhZ21lbnRJbkZsb3ctPmZsb3dUaHJlYWRQb3J0aW9u
UmVjdCgpLnkoKTsKIH0KIAotUmVuZGVyUmVnaW9uKiBSZW5kZXJGbG93VGhyZWFkOjpmaXJzdFJl
Z2lvbigpIGNvbnN0CitSZW5kZXJGcmFnbWVudENvbnRhaW5lciogUmVuZGVyRmxvd1RocmVhZDo6
Zmlyc3RGcmFnbWVudCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFoYXNSZWdpb25zKCkpCisgICAgaWYg
KCFoYXNGcmFnbWVudHMoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIG1f
cmVnaW9uTGlzdC5maXJzdCgpOworICAgIHJldHVybiBtX2ZyYWdtZW50TGlzdC5maXJzdCgpOwog
fQogCi1SZW5kZXJSZWdpb24qIFJlbmRlckZsb3dUaHJlYWQ6Omxhc3RSZWdpb24oKSBjb25zdAor
UmVuZGVyRnJhZ21lbnRDb250YWluZXIqIFJlbmRlckZsb3dUaHJlYWQ6Omxhc3RGcmFnbWVudCgp
IGNvbnN0CiB7Ci0gICAgaWYgKCFoYXNSZWdpb25zKCkpCisgICAgaWYgKCFoYXNGcmFnbWVudHMo
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIG1fcmVnaW9uTGlzdC5sYXN0
KCk7CisgICAgcmV0dXJuIG1fZnJhZ21lbnRMaXN0Lmxhc3QoKTsKIH0KIAotdm9pZCBSZW5kZXJG
bG93VGhyZWFkOjpjbGVhclJlbmRlckJveFJlZ2lvbkluZm9BbmRDdXN0b21TdHlsZShjb25zdCBS
ZW5kZXJCb3gmIGJveCwKLSAgICBjb25zdCBSZW5kZXJSZWdpb24qIG5ld1N0YXJ0UmVnaW9uLCBj
b25zdCBSZW5kZXJSZWdpb24qIG5ld0VuZFJlZ2lvbiwKLSAgICBjb25zdCBSZW5kZXJSZWdpb24q
IG9sZFN0YXJ0UmVnaW9uLCBjb25zdCBSZW5kZXJSZWdpb24qIG9sZEVuZFJlZ2lvbikKLXsKLSAg
ICBBU1NFUlQobmV3U3RhcnRSZWdpb24gJiYgbmV3RW5kUmVnaW9uICYmIG9sZFN0YXJ0UmVnaW9u
ICYmIG9sZEVuZFJlZ2lvbik7Ci0KLSAgICBib29sIGluc2lkZU9sZFJlZ2lvblJhbmdlID0gZmFs
c2U7Ci0gICAgYm9vbCBpbnNpZGVOZXdSZWdpb25SYW5nZSA9IGZhbHNlOwotICAgIGZvciAoYXV0
byYgcmVnaW9uIDogbV9yZWdpb25MaXN0KSB7Ci0gICAgICAgIGlmIChvbGRTdGFydFJlZ2lvbiA9
PSByZWdpb24pCi0gICAgICAgICAgICBpbnNpZGVPbGRSZWdpb25SYW5nZSA9IHRydWU7Ci0gICAg
ICAgIGlmIChuZXdTdGFydFJlZ2lvbiA9PSByZWdpb24pCi0gICAgICAgICAgICBpbnNpZGVOZXdS
ZWdpb25SYW5nZSA9IHRydWU7Ci0KLSAgICAgICAgaWYgKCEoaW5zaWRlT2xkUmVnaW9uUmFuZ2Ug
JiYgaW5zaWRlTmV3UmVnaW9uUmFuZ2UpKSB7Ci0gICAgICAgICAgICBpZiAocmVnaW9uLT5yZW5k
ZXJCb3hSZWdpb25JbmZvKCZib3gpKQotICAgICAgICAgICAgICAgIHJlZ2lvbi0+cmVtb3ZlUmVu
ZGVyQm94UmVnaW9uSW5mbyhib3gpOwordm9pZCBSZW5kZXJGbG93VGhyZWFkOjpjbGVhclJlbmRl
ckJveEZyYWdtZW50SW5mb0FuZEN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlckJveCYgYm94LAorICAg
IGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBuZXdTdGFydEZyYWdtZW50LCBjb25zdCBS
ZW5kZXJGcmFnbWVudENvbnRhaW5lciogbmV3RW5kRnJhZ21lbnQsCisgICAgY29uc3QgUmVuZGVy
RnJhZ21lbnRDb250YWluZXIqIG9sZFN0YXJ0RnJhZ21lbnQsIGNvbnN0IFJlbmRlckZyYWdtZW50
Q29udGFpbmVyKiBvbGRFbmRGcmFnbWVudCkKK3sKKyAgICBBU1NFUlQobmV3U3RhcnRGcmFnbWVu
dCAmJiBuZXdFbmRGcmFnbWVudCAmJiBvbGRTdGFydEZyYWdtZW50ICYmIG9sZEVuZEZyYWdtZW50
KTsKKworICAgIGJvb2wgaW5zaWRlT2xkRnJhZ21lbnRSYW5nZSA9IGZhbHNlOworICAgIGJvb2wg
aW5zaWRlTmV3RnJhZ21lbnRSYW5nZSA9IGZhbHNlOworICAgIGZvciAoYXV0byYgZnJhZ21lbnQg
OiBtX2ZyYWdtZW50TGlzdCkgeworICAgICAgICBpZiAob2xkU3RhcnRGcmFnbWVudCA9PSBmcmFn
bWVudCkKKyAgICAgICAgICAgIGluc2lkZU9sZEZyYWdtZW50UmFuZ2UgPSB0cnVlOworICAgICAg
ICBpZiAobmV3U3RhcnRGcmFnbWVudCA9PSBmcmFnbWVudCkKKyAgICAgICAgICAgIGluc2lkZU5l
d0ZyYWdtZW50UmFuZ2UgPSB0cnVlOworCisgICAgICAgIGlmICghKGluc2lkZU9sZEZyYWdtZW50
UmFuZ2UgJiYgaW5zaWRlTmV3RnJhZ21lbnRSYW5nZSkpIHsKKyAgICAgICAgICAgIGlmIChmcmFn
bWVudC0+cmVuZGVyQm94RnJhZ21lbnRJbmZvKCZib3gpKQorICAgICAgICAgICAgICAgIGZyYWdt
ZW50LT5yZW1vdmVSZW5kZXJCb3hGcmFnbWVudEluZm8oYm94KTsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmIChvbGRFbmRSZWdpb24gPT0gcmVnaW9uKQotICAgICAgICAgICAgaW5zaWRlT2xkUmVn
aW9uUmFuZ2UgPSBmYWxzZTsKLSAgICAgICAgaWYgKG5ld0VuZFJlZ2lvbiA9PSByZWdpb24pCi0g
ICAgICAgICAgICBpbnNpZGVOZXdSZWdpb25SYW5nZSA9IGZhbHNlOworICAgICAgICBpZiAob2xk
RW5kRnJhZ21lbnQgPT0gZnJhZ21lbnQpCisgICAgICAgICAgICBpbnNpZGVPbGRGcmFnbWVudFJh
bmdlID0gZmFsc2U7CisgICAgICAgIGlmIChuZXdFbmRGcmFnbWVudCA9PSBmcmFnbWVudCkKKyAg
ICAgICAgICAgIGluc2lkZU5ld0ZyYWdtZW50UmFuZ2UgPSBmYWxzZTsKICAgICB9CiB9CiAKLXZv
aWQgUmVuZGVyRmxvd1RocmVhZDo6c2V0UmVnaW9uUmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQm94
JiBib3gsIFJlbmRlclJlZ2lvbiogc3RhcnRSZWdpb24sIFJlbmRlclJlZ2lvbiogZW5kUmVnaW9u
KQordm9pZCBSZW5kZXJGbG93VGhyZWFkOjpzZXRGcmFnbWVudFJhbmdlRm9yQm94KGNvbnN0IFJl
bmRlckJveCYgYm94LCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogc3RhcnRGcmFnbWVudCwgUmVu
ZGVyRnJhZ21lbnRDb250YWluZXIqIGVuZEZyYWdtZW50KQogewotICAgIEFTU0VSVChoYXNSZWdp
b25zKCkpOwotICAgIEFTU0VSVChzdGFydFJlZ2lvbiAmJiBlbmRSZWdpb24gJiYgc3RhcnRSZWdp
b24tPmZsb3dUaHJlYWQoKSA9PSB0aGlzICYmIGVuZFJlZ2lvbi0+Zmxvd1RocmVhZCgpID09IHRo
aXMpOworICAgIEFTU0VSVChoYXNGcmFnbWVudHMoKSk7CisgICAgQVNTRVJUKHN0YXJ0RnJhZ21l
bnQgJiYgZW5kRnJhZ21lbnQgJiYgc3RhcnRGcmFnbWVudC0+Zmxvd1RocmVhZCgpID09IHRoaXMg
JiYgZW5kRnJhZ21lbnQtPmZsb3dUaHJlYWQoKSA9PSB0aGlzKTsKIAotICAgIGF1dG8gaXQgPSBt
X3JlZ2lvblJhbmdlTWFwLmZpbmQoJmJveCk7Ci0gICAgaWYgKGl0ID09IG1fcmVnaW9uUmFuZ2VN
YXAuZW5kKCkpIHsKLSAgICAgICAgbV9yZWdpb25SYW5nZU1hcC5zZXQoJmJveCwgUmVuZGVyUmVn
aW9uUmFuZ2Uoc3RhcnRSZWdpb24sIGVuZFJlZ2lvbikpOworICAgIGF1dG8gaXQgPSBtX2ZyYWdt
ZW50UmFuZ2VNYXAuZmluZCgmYm94KTsKKyAgICBpZiAoaXQgPT0gbV9mcmFnbWVudFJhbmdlTWFw
LmVuZCgpKSB7CisgICAgICAgIG1fZnJhZ21lbnRSYW5nZU1hcC5zZXQoJmJveCwgUmVuZGVyRnJh
Z21lbnRDb250YWluZXJSYW5nZShzdGFydEZyYWdtZW50LCBlbmRGcmFnbWVudCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gSWYgbm90aGluZyBjaGFuZ2VkLCBqdXN0IGJhaWwu
Ci0gICAgUmVuZGVyUmVnaW9uUmFuZ2UmIHJhbmdlID0gaXQtPnZhbHVlOwotICAgIGlmIChyYW5n
ZS5zdGFydFJlZ2lvbigpID09IHN0YXJ0UmVnaW9uICYmIHJhbmdlLmVuZFJlZ2lvbigpID09IGVu
ZFJlZ2lvbikKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lclJhbmdlJiByYW5nZSA9IGl0LT52
YWx1ZTsKKyAgICBpZiAocmFuZ2Uuc3RhcnRGcmFnbWVudCgpID09IHN0YXJ0RnJhZ21lbnQgJiYg
cmFuZ2UuZW5kRnJhZ21lbnQoKSA9PSBlbmRGcmFnbWVudCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY2xlYXJSZW5kZXJCb3hSZWdpb25JbmZvQW5kQ3VzdG9tU3R5bGUoYm94LCBzdGFydFJlZ2lv
biwgZW5kUmVnaW9uLCByYW5nZS5zdGFydFJlZ2lvbigpLCByYW5nZS5lbmRSZWdpb24oKSk7Ci0g
ICAgcmFuZ2Uuc2V0UmFuZ2Uoc3RhcnRSZWdpb24sIGVuZFJlZ2lvbik7CisgICAgY2xlYXJSZW5k
ZXJCb3hGcmFnbWVudEluZm9BbmRDdXN0b21TdHlsZShib3gsIHN0YXJ0RnJhZ21lbnQsIGVuZEZy
YWdtZW50LCByYW5nZS5zdGFydEZyYWdtZW50KCksIHJhbmdlLmVuZEZyYWdtZW50KCkpOworICAg
IHJhbmdlLnNldFJhbmdlKHN0YXJ0RnJhZ21lbnQsIGVuZEZyYWdtZW50KTsKIH0KIAotYm9vbCBS
ZW5kZXJGbG93VGhyZWFkOjpoYXNDYWNoZWRSZWdpb25SYW5nZUZvckJveChjb25zdCBSZW5kZXJC
b3gmIGJveCkgY29uc3QKK2Jvb2wgUmVuZGVyRmxvd1RocmVhZDo6aGFzQ2FjaGVkRnJhZ21lbnRS
YW5nZUZvckJveChjb25zdCBSZW5kZXJCb3gmIGJveCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9y
ZWdpb25SYW5nZU1hcC5jb250YWlucygmYm94KTsKKyAgICByZXR1cm4gbV9mcmFnbWVudFJhbmdl
TWFwLmNvbnRhaW5zKCZib3gpOwogfQogCi1ib29sIFJlbmRlckZsb3dUaHJlYWQ6OmdldFJlZ2lv
blJhbmdlRm9yQm94RnJvbUNhY2hlZEluZm8oY29uc3QgUmVuZGVyQm94KiBib3gsIFJlbmRlclJl
Z2lvbiomIHN0YXJ0UmVnaW9uLCBSZW5kZXJSZWdpb24qJiBlbmRSZWdpb24pIGNvbnN0Citib29s
IFJlbmRlckZsb3dUaHJlYWQ6OmdldEZyYWdtZW50UmFuZ2VGb3JCb3hGcm9tQ2FjaGVkSW5mbyhj
b25zdCBSZW5kZXJCb3gqIGJveCwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqJiBzdGFydEZyYWdt
ZW50LCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciomIGVuZEZyYWdtZW50KSBjb25zdAogewogICAg
IEFTU0VSVChib3gpOwotICAgIEFTU0VSVChoYXNWYWxpZFJlZ2lvbkluZm8oKSk7Ci0gICAgQVNT
RVJUKChzdGFydFJlZ2lvbiA9PSBudWxscHRyKSAmJiAoZW5kUmVnaW9uID09IG51bGxwdHIpKTsK
KyAgICBBU1NFUlQoaGFzVmFsaWRGcmFnbWVudEluZm8oKSk7CisgICAgQVNTRVJUKChzdGFydEZy
YWdtZW50ID09IG51bGxwdHIpICYmIChlbmRGcmFnbWVudCA9PSBudWxscHRyKSk7CiAKLSAgICBh
dXRvIGl0ID0gbV9yZWdpb25SYW5nZU1hcC5maW5kKGJveCk7Ci0gICAgaWYgKGl0ICE9IG1fcmVn
aW9uUmFuZ2VNYXAuZW5kKCkpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyUmVnaW9uUmFuZ2UmIHJh
bmdlID0gaXQtPnZhbHVlOwotICAgICAgICBzdGFydFJlZ2lvbiA9IHJhbmdlLnN0YXJ0UmVnaW9u
KCk7Ci0gICAgICAgIGVuZFJlZ2lvbiA9IHJhbmdlLmVuZFJlZ2lvbigpOwotICAgICAgICBBU1NF
UlQobV9yZWdpb25MaXN0LmNvbnRhaW5zKHN0YXJ0UmVnaW9uKSAmJiBtX3JlZ2lvbkxpc3QuY29u
dGFpbnMoZW5kUmVnaW9uKSk7CisgICAgYXV0byBpdCA9IG1fZnJhZ21lbnRSYW5nZU1hcC5maW5k
KGJveCk7CisgICAgaWYgKGl0ICE9IG1fZnJhZ21lbnRSYW5nZU1hcC5lbmQoKSkgeworICAgICAg
ICBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lclJhbmdlJiByYW5nZSA9IGl0LT52YWx1ZTsK
KyAgICAgICAgc3RhcnRGcmFnbWVudCA9IHJhbmdlLnN0YXJ0RnJhZ21lbnQoKTsKKyAgICAgICAg
ZW5kRnJhZ21lbnQgPSByYW5nZS5lbmRGcmFnbWVudCgpOworICAgICAgICBBU1NFUlQobV9mcmFn
bWVudExpc3QuY29udGFpbnMoc3RhcnRGcmFnbWVudCkgJiYgbV9mcmFnbWVudExpc3QuY29udGFp
bnMoZW5kRnJhZ21lbnQpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlckZsb3dUaHJlYWQ6OmdldFJlZ2lvblJhbmdlRm9y
Qm94KGNvbnN0IFJlbmRlckJveCogYm94LCBSZW5kZXJSZWdpb24qJiBzdGFydFJlZ2lvbiwgUmVu
ZGVyUmVnaW9uKiYgZW5kUmVnaW9uKSBjb25zdAorYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpnZXRG
cmFnbWVudFJhbmdlRm9yQm94KGNvbnN0IFJlbmRlckJveCogYm94LCBSZW5kZXJGcmFnbWVudENv
bnRhaW5lciomIHN0YXJ0RnJhZ21lbnQsIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiYgZW5kRnJh
Z21lbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGJveCk7CiAKLSAgICBzdGFydFJlZ2lvbiA9IGVu
ZFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgaWYgKCFoYXNWYWxpZFJlZ2lvbkluZm8oKSkgLy8gV2Ug
Y2xlYXIgdGhlIHJhbmdlcyB3aGVuIHdlIGludmFsaWRhdGUgdGhlIHJlZ2lvbnMuCisgICAgc3Rh
cnRGcmFnbWVudCA9IGVuZEZyYWdtZW50ID0gbnVsbHB0cjsKKyAgICBpZiAoIWhhc1ZhbGlkRnJh
Z21lbnRJbmZvKCkpIC8vIFdlIGNsZWFyIHRoZSByYW5nZXMgd2hlbiB3ZSBpbnZhbGlkYXRlIHRo
ZSBmcmFnbWVudHMuCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX3JlZ2lvbkxp
c3Quc2l6ZSgpID09IDEpIHsKLSAgICAgICAgc3RhcnRSZWdpb24gPSBlbmRSZWdpb24gPSBtX3Jl
Z2lvbkxpc3QuZmlyc3QoKTsKKyAgICBpZiAobV9mcmFnbWVudExpc3Quc2l6ZSgpID09IDEpIHsK
KyAgICAgICAgc3RhcnRGcmFnbWVudCA9IGVuZEZyYWdtZW50ID0gbV9mcmFnbWVudExpc3QuZmly
c3QoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKGdldFJlZ2lvblJh
bmdlRm9yQm94RnJvbUNhY2hlZEluZm8oYm94LCBzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKSkKKyAg
ICBpZiAoZ2V0RnJhZ21lbnRSYW5nZUZvckJveEZyb21DYWNoZWRJbmZvKGJveCwgc3RhcnRGcmFn
bWVudCwgZW5kRnJhZ21lbnQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpjb21wdXRlZFJlZ2lvblJhbmdlRm9y
Qm94KGNvbnN0IFJlbmRlckJveCogYm94LCBSZW5kZXJSZWdpb24qJiBzdGFydFJlZ2lvbiwgUmVu
ZGVyUmVnaW9uKiYgZW5kUmVnaW9uKSBjb25zdAorYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpjb21w
dXRlZEZyYWdtZW50UmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQm94KiBib3gsIFJlbmRlckZyYWdt
ZW50Q29udGFpbmVyKiYgc3RhcnRGcmFnbWVudCwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqJiBl
bmRGcmFnbWVudCkgY29uc3QKIHsKICAgICBBU1NFUlQoYm94KTsKIAotICAgIHN0YXJ0UmVnaW9u
ID0gZW5kUmVnaW9uID0gbnVsbHB0cjsKLSAgICBpZiAoIWhhc1ZhbGlkUmVnaW9uSW5mbygpKSAv
LyBXZSBjbGVhciB0aGUgcmFuZ2VzIHdoZW4gd2UgaW52YWxpZGF0ZSB0aGUgcmVnaW9ucy4KKyAg
ICBzdGFydEZyYWdtZW50ID0gZW5kRnJhZ21lbnQgPSBudWxscHRyOworICAgIGlmICghaGFzVmFs
aWRGcmFnbWVudEluZm8oKSkgLy8gV2UgY2xlYXIgdGhlIHJhbmdlcyB3aGVuIHdlIGludmFsaWRh
dGUgdGhlIGZyYWdtZW50cy4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGdldFJl
Z2lvblJhbmdlRm9yQm94KGJveCwgc3RhcnRSZWdpb24sIGVuZFJlZ2lvbikpCisgICAgaWYgKGdl
dEZyYWdtZW50UmFuZ2VGb3JCb3goYm94LCBzdGFydEZyYWdtZW50LCBlbmRGcmFnbWVudCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgLy8gU2VhcmNoIHRoZSByZWdpb24gcmFuZ2UgdXNp
bmcgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBjb250YWluaW5nIGJsb2NrIGNoYWlu
LgorICAgIC8vIFNlYXJjaCB0aGUgZnJhZ21lbnQgcmFuZ2UgdXNpbmcgdGhlIGluZm9ybWF0aW9u
IHByb3ZpZGVkIGJ5IHRoZSBjb250YWluaW5nIGJsb2NrIGNoYWluLgogICAgIGF1dG8qIGNvbnRh
aW5pbmdCbG9jayA9IGNvbnN0X2Nhc3Q8UmVuZGVyQm94Kj4oYm94KTsKICAgICB3aGlsZSAoIWNv
bnRhaW5pbmdCbG9jay0+aXNSZW5kZXJGbG93VGhyZWFkKCkpIHsKICAgICAgICAgSW5saW5lRWxl
bWVudEJveCogYm94V3JhcHBlciA9IGNvbnRhaW5pbmdCbG9jay0+aW5saW5lQm94V3JhcHBlcigp
OwotICAgICAgICBpZiAoYm94V3JhcHBlciAmJiBib3hXcmFwcGVyLT5yb290KCkuY29udGFpbmlu
Z1JlZ2lvbigpKSB7Ci0gICAgICAgICAgICBzdGFydFJlZ2lvbiA9IGVuZFJlZ2lvbiA9IGJveFdy
YXBwZXItPnJvb3QoKS5jb250YWluaW5nUmVnaW9uKCk7Ci0gICAgICAgICAgICBBU1NFUlQobV9y
ZWdpb25MaXN0LmNvbnRhaW5zKHN0YXJ0UmVnaW9uKSk7CisgICAgICAgIGlmIChib3hXcmFwcGVy
ICYmIGJveFdyYXBwZXItPnJvb3QoKS5jb250YWluaW5nRnJhZ21lbnQoKSkgeworICAgICAgICAg
ICAgc3RhcnRGcmFnbWVudCA9IGVuZEZyYWdtZW50ID0gYm94V3JhcHBlci0+cm9vdCgpLmNvbnRh
aW5pbmdGcmFnbWVudCgpOworICAgICAgICAgICAgQVNTRVJUKG1fZnJhZ21lbnRMaXN0LmNvbnRh
aW5zKHN0YXJ0RnJhZ21lbnQpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAKLSAgICAgICAgLy8gRklYTUU6IFVzZSB0aGUgY29udGFpbmluZ0Jsb2NrKCkgdmFsdWUgb25j
ZSB3ZSBwYXRjaCBhbGwgdGhlIGxheW91dCBzeXN0ZW1zIHRvIGJlIHJlZ2lvbiByYW5nZSBhd2Fy
ZQorICAgICAgICAvLyBGSVhNRTogVXNlIHRoZSBjb250YWluaW5nQmxvY2soKSB2YWx1ZSBvbmNl
IHdlIHBhdGNoIGFsbCB0aGUgbGF5b3V0IHN5c3RlbXMgdG8gYmUgZnJhZ21lbnQgcmFuZ2UgYXdh
cmUKICAgICAgICAgLy8gKGUuZy4gaWYgd2UgdXNlIGNvbnRhaW5pbmdCbG9jaygpIHRoZSBzaGFk
b3cgY29udHJvbHMgb2YgYSB2aWRlbyBlbGVtZW50IHdvbid0IGdldCB0aGUgcmFuZ2UgZnJvbSB0
aGUKICAgICAgICAgLy8gdmlkZW8gYm94IGJlY2F1c2UgaXQncyBub3QgYSBibG9jazsgdGhleSBu
ZWVkIHRvIGJlIHBhdGNoZWQgc2VwYXJhdGVseSkuCiAgICAgICAgIEFTU0VSVChjb250YWluaW5n
QmxvY2stPnBhcmVudCgpKTsKICAgICAgICAgY29udGFpbmluZ0Jsb2NrID0gJmNvbnRhaW5pbmdC
bG9jay0+cGFyZW50KCktPmVuY2xvc2luZ0JveCgpOwogICAgICAgICBBU1NFUlQoY29udGFpbmlu
Z0Jsb2NrKTsKIAotICAgICAgICAvLyBJZiBhIGJveCBkb2Vzbid0IGhhdmUgYSBjYWNoZWQgcmVn
aW9uIHJhbmdlIGl0IHVzdWFsbHkgbWVhbnMgdGhlIGJveCBiZWxvbmdzIHRvIGEgbGluZSBzbyBz
dGFydFJlZ2lvbiBzaG91bGQgYmUgZXF1YWwgd2l0aCBlbmRSZWdpb24uCi0gICAgICAgIC8vIEZJ
WE1FOiBGaW5kIHRoZSBjYXNlcyB3aGVuIHRoaXMgc3RhcnRSZWdpb24gc2hvdWxkIG5vdCBiZSBl
cXVhbCB3aXRoIGVuZFJlZ2lvbiBhbmQgbWFrZSBzdXJlIHRoZXNlIGJveGVzIGhhdmUgY2FjaGVk
IHJlZ2lvbiByYW5nZXMuCi0gICAgICAgIGlmIChjb250YWluaW5nQmxvY2sgJiYgaGFzQ2FjaGVk
UmVnaW9uUmFuZ2VGb3JCb3goKmNvbnRhaW5pbmdCbG9jaykpIHsKLSAgICAgICAgICAgIHN0YXJ0
UmVnaW9uID0gZW5kUmVnaW9uID0gcmVnaW9uQXRCbG9ja09mZnNldChjb250YWluaW5nQmxvY2ss
IGNvbnRhaW5pbmdCbG9jay0+b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpLCB0cnVl
KTsKKyAgICAgICAgLy8gSWYgYSBib3ggZG9lc24ndCBoYXZlIGEgY2FjaGVkIGZyYWdtZW50IHJh
bmdlIGl0IHVzdWFsbHkgbWVhbnMgdGhlIGJveCBiZWxvbmdzIHRvIGEgbGluZSBzbyBzdGFydEZy
YWdtZW50IHNob3VsZCBiZSBlcXVhbCB3aXRoIGVuZEZyYWdtZW50LgorICAgICAgICAvLyBGSVhN
RTogRmluZCB0aGUgY2FzZXMgd2hlbiB0aGlzIHN0YXJ0RnJhZ21lbnQgc2hvdWxkIG5vdCBiZSBl
cXVhbCB3aXRoIGVuZEZyYWdtZW50IGFuZCBtYWtlIHN1cmUgdGhlc2UgYm94ZXMgaGF2ZSBjYWNo
ZWQgZnJhZ21lbnQgcmFuZ2VzLgorICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrICYmIGhhc0Nh
Y2hlZEZyYWdtZW50UmFuZ2VGb3JCb3goKmNvbnRhaW5pbmdCbG9jaykpIHsKKyAgICAgICAgICAg
IHN0YXJ0RnJhZ21lbnQgPSBlbmRGcmFnbWVudCA9IGZyYWdtZW50QXRCbG9ja09mZnNldChjb250
YWluaW5nQmxvY2ssIGNvbnRhaW5pbmdCbG9jay0+b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0
UGFnZSgpLCB0cnVlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAg
fQpAQCAtNjYxLDYyICs2NjEsNjIgQEAgYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpjb21wdXRlZFJl
Z2lvblJhbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpy
ZWdpb25JblJhbmdlKGNvbnN0IFJlbmRlclJlZ2lvbiogdGFyZ2V0UmVnaW9uLCBjb25zdCBSZW5k
ZXJSZWdpb24qIHN0YXJ0UmVnaW9uLCBjb25zdCBSZW5kZXJSZWdpb24qIGVuZFJlZ2lvbikgY29u
c3QKK2Jvb2wgUmVuZGVyRmxvd1RocmVhZDo6ZnJhZ21lbnRJblJhbmdlKGNvbnN0IFJlbmRlckZy
YWdtZW50Q29udGFpbmVyKiB0YXJnZXRGcmFnbWVudCwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250
YWluZXIqIHN0YXJ0RnJhZ21lbnQsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBlbmRG
cmFnbWVudCkgY29uc3QKIHsKLSAgICBBU1NFUlQodGFyZ2V0UmVnaW9uKTsKKyAgICBBU1NFUlQo
dGFyZ2V0RnJhZ21lbnQpOwogCi0gICAgZm9yIChhdXRvIGl0ID0gbV9yZWdpb25MaXN0LmZpbmQo
Y29uc3RfY2FzdDxSZW5kZXJSZWdpb24qPihzdGFydFJlZ2lvbikpLCBlbmQgPSBtX3JlZ2lvbkxp
c3QuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBSZW5kZXJSZWdpb24q
IGN1cnJSZWdpb24gPSAqaXQ7Ci0gICAgICAgIGlmICh0YXJnZXRSZWdpb24gPT0gY3VyclJlZ2lv
bikKKyAgICBmb3IgKGF1dG8gaXQgPSBtX2ZyYWdtZW50TGlzdC5maW5kKGNvbnN0X2Nhc3Q8UmVu
ZGVyRnJhZ21lbnRDb250YWluZXIqPihzdGFydEZyYWdtZW50KSksIGVuZCA9IG1fZnJhZ21lbnRM
aXN0LmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgY29uc3QgUmVuZGVyRnJhZ21l
bnRDb250YWluZXIqIGN1cnJGcmFnbWVudCA9ICppdDsKKyAgICAgICAgaWYgKHRhcmdldEZyYWdt
ZW50ID09IGN1cnJGcmFnbWVudCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBp
ZiAoY3VyclJlZ2lvbiA9PSBlbmRSZWdpb24pCisgICAgICAgIGlmIChjdXJyRnJhZ21lbnQgPT0g
ZW5kRnJhZ21lbnQpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLWJvb2wgUmVuZGVyRmxvd1RocmVhZDo6b2JqZWN0U2hvdWxkRnJhZ21lbnRJbkZs
b3dSZWdpb24oY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlclJlZ2lvbiog
cmVnaW9uKSBjb25zdAorYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpvYmplY3RTaG91bGRGcmFnbWVu
dEluRmxvd0ZyYWdtZW50KGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJG
cmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG9iamVjdCk7
Ci0gICAgQVNTRVJUKHJlZ2lvbik7CisgICAgQVNTRVJUKGZyYWdtZW50KTsKICAgICAKICAgICBS
ZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gb2JqZWN0LT5mbG93VGhyZWFkQ29udGFpbmlu
Z0Jsb2NrKCk7CiAgICAgaWYgKGZsb3dUaHJlYWQgIT0gdGhpcykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaWYgKCFtX3JlZ2lvbkxpc3QuY29udGFpbnMoY29uc3RfY2FzdDxSZW5kZXJS
ZWdpb24qPihyZWdpb24pKSkKKyAgICBpZiAoIW1fZnJhZ21lbnRMaXN0LmNvbnRhaW5zKGNvbnN0
X2Nhc3Q8UmVuZGVyRnJhZ21lbnRDb250YWluZXIqPihmcmFnbWVudCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCi0gICAgUmVuZGVyUmVnaW9uKiBlbmNsb3NpbmdCb3hTdGFydFJlZ2lv
biA9IG51bGxwdHI7Ci0gICAgUmVuZGVyUmVnaW9uKiBlbmNsb3NpbmdCb3hFbmRSZWdpb24gPSBu
dWxscHRyOwotICAgIC8vIElmIHRoZSBib3ggaGFzIG5vIHJhbmdlLCBkbyBub3QgY2hlY2sgcmVn
aW9uSW5SYW5nZS4gQm94ZXMgaW5zaWRlIGlubGluZXMgZG8gbm90IGdldCByYW5nZXMuCi0gICAg
Ly8gSW5zdGVhZCwgdGhlIGNvbnRhaW5pbmcgUm9vdElubGluZUJveCB3aWxsIGFib3J0IHdoZW4g
dHJ5aW5nIHRvIHBhaW50IGluc2lkZSB0aGUgd3JvbmcgcmVnaW9uLgotICAgIGlmIChjb21wdXRl
ZFJlZ2lvblJhbmdlRm9yQm94KCZvYmplY3QtPmVuY2xvc2luZ0JveCgpLCBlbmNsb3NpbmdCb3hT
dGFydFJlZ2lvbiwgZW5jbG9zaW5nQm94RW5kUmVnaW9uKQotICAgICAgICAmJiAhcmVnaW9uSW5S
YW5nZShyZWdpb24sIGVuY2xvc2luZ0JveFN0YXJ0UmVnaW9uLCBlbmNsb3NpbmdCb3hFbmRSZWdp
b24pKQorICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBlbmNsb3NpbmdCb3hTdGFydEZyYWdt
ZW50ID0gbnVsbHB0cjsKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZW5jbG9zaW5nQm94
RW5kRnJhZ21lbnQgPSBudWxscHRyOworICAgIC8vIElmIHRoZSBib3ggaGFzIG5vIHJhbmdlLCBk
byBub3QgY2hlY2sgZnJhZ21lbnRJblJhbmdlLiBCb3hlcyBpbnNpZGUgaW5saW5lcyBkbyBub3Qg
Z2V0IHJhbmdlcy4KKyAgICAvLyBJbnN0ZWFkLCB0aGUgY29udGFpbmluZyBSb290SW5saW5lQm94
IHdpbGwgYWJvcnQgd2hlbiB0cnlpbmcgdG8gcGFpbnQgaW5zaWRlIHRoZSB3cm9uZyBmcmFnbWVu
dC4KKyAgICBpZiAoY29tcHV0ZWRGcmFnbWVudFJhbmdlRm9yQm94KCZvYmplY3QtPmVuY2xvc2lu
Z0JveCgpLCBlbmNsb3NpbmdCb3hTdGFydEZyYWdtZW50LCBlbmNsb3NpbmdCb3hFbmRGcmFnbWVu
dCkKKyAgICAgICAgJiYgIWZyYWdtZW50SW5SYW5nZShmcmFnbWVudCwgZW5jbG9zaW5nQm94U3Rh
cnRGcmFnbWVudCwgZW5jbG9zaW5nQm94RW5kRnJhZ21lbnQpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCiAgICAgcmV0dXJuIG9iamVjdC0+aXNCb3goKSB8fCBvYmplY3QtPmlzUmVuZGVy
SW5saW5lKCk7CiB9CiAKLWJvb2wgUmVuZGVyRmxvd1RocmVhZDo6b2JqZWN0SW5GbG93UmVnaW9u
KGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbikg
Y29uc3QKK2Jvb2wgUmVuZGVyRmxvd1RocmVhZDo6b2JqZWN0SW5GbG93RnJhZ21lbnQoY29uc3Qg
UmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFn
bWVudCkgY29uc3QKIHsKICAgICBBU1NFUlQob2JqZWN0KTsKLSAgICBBU1NFUlQocmVnaW9uKTsK
KyAgICBBU1NFUlQoZnJhZ21lbnQpOwogCiAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVh
ZCA9IG9iamVjdC0+Zmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwogICAgIGlmIChmbG93VGhy
ZWFkICE9IHRoaXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghbV9yZWdpb25M
aXN0LmNvbnRhaW5zKGNvbnN0X2Nhc3Q8UmVuZGVyUmVnaW9uKj4ocmVnaW9uKSkpCisgICAgaWYg
KCFtX2ZyYWdtZW50TGlzdC5jb250YWlucyhjb25zdF9jYXN0PFJlbmRlckZyYWdtZW50Q29udGFp
bmVyKj4oZnJhZ21lbnQpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVuZGVyUmVn
aW9uKiBlbmNsb3NpbmdCb3hTdGFydFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgUmVuZGVyUmVnaW9u
KiBlbmNsb3NpbmdCb3hFbmRSZWdpb24gPSBudWxscHRyOwotICAgIGlmICghZ2V0UmVnaW9uUmFu
Z2VGb3JCb3goJm9iamVjdC0+ZW5jbG9zaW5nQm94KCksIGVuY2xvc2luZ0JveFN0YXJ0UmVnaW9u
LCBlbmNsb3NpbmdCb3hFbmRSZWdpb24pKQorICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBl
bmNsb3NpbmdCb3hTdGFydEZyYWdtZW50ID0gbnVsbHB0cjsKKyAgICBSZW5kZXJGcmFnbWVudENv
bnRhaW5lciogZW5jbG9zaW5nQm94RW5kRnJhZ21lbnQgPSBudWxscHRyOworICAgIGlmICghZ2V0
RnJhZ21lbnRSYW5nZUZvckJveCgmb2JqZWN0LT5lbmNsb3NpbmdCb3goKSwgZW5jbG9zaW5nQm94
U3RhcnRGcmFnbWVudCwgZW5jbG9zaW5nQm94RW5kRnJhZ21lbnQpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBpZiAoIXJlZ2lvbkluUmFuZ2UocmVnaW9uLCBlbmNsb3NpbmdCb3hTdGFy
dFJlZ2lvbiwgZW5jbG9zaW5nQm94RW5kUmVnaW9uKSkKKyAgICBpZiAoIWZyYWdtZW50SW5SYW5n
ZShmcmFnbWVudCwgZW5jbG9zaW5nQm94U3RhcnRGcmFnbWVudCwgZW5jbG9zaW5nQm94RW5kRnJh
Z21lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAob2JqZWN0LT5pc0JveCgp
KQpAQCAtNzI3LDE3ICs3MjcsMTcgQEAgYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpvYmplY3RJbkZs
b3dSZWdpbwogICAgICAgICBvYmplY3RBQkJSZWN0LnNldFdpZHRoKDEpOwogICAgIGlmICghb2Jq
ZWN0QUJCUmVjdC5oZWlnaHQoKSkKICAgICAgICAgb2JqZWN0QUJCUmVjdC5zZXRIZWlnaHQoMSk7
IAotICAgIGlmIChvYmplY3RBQkJSZWN0LmludGVyc2VjdHMocmVnaW9uLT5hYnNvbHV0ZUJvdW5k
aW5nQm94UmVjdCh0cnVlKSkpCisgICAgaWYgKG9iamVjdEFCQlJlY3QuaW50ZXJzZWN0cyhmcmFn
bWVudC0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QodHJ1ZSkpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIGlmIChyZWdpb24gPT0gbGFzdFJlZ2lvbigpKSB7Ci0gICAgICAgIC8vIElmIHRo
ZSBvYmplY3QgZG9lcyBub3QgaW50ZXJzZWN0IGFueSBvZiB0aGUgZW5jbG9zaW5nIGJveCByZWdp
b25zCi0gICAgICAgIC8vIHRoZW4gdGhlIG9iamVjdCBpcyBpbiBsYXN0IHJlZ2lvbi4KLSAgICAg
ICAgZm9yIChhdXRvIGl0ID0gbV9yZWdpb25MaXN0LmZpbmQoZW5jbG9zaW5nQm94U3RhcnRSZWdp
b24pLCBlbmQgPSBtX3JlZ2lvbkxpc3QuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgY29uc3QgUmVuZGVyUmVnaW9uKiBjdXJyUmVnaW9uID0gKml0OwotICAgICAgICAgICAg
aWYgKGN1cnJSZWdpb24gPT0gcmVnaW9uKQorICAgIGlmIChmcmFnbWVudCA9PSBsYXN0RnJhZ21l
bnQoKSkgeworICAgICAgICAvLyBJZiB0aGUgb2JqZWN0IGRvZXMgbm90IGludGVyc2VjdCBhbnkg
b2YgdGhlIGVuY2xvc2luZyBib3ggZnJhZ21lbnRzCisgICAgICAgIC8vIHRoZW4gdGhlIG9iamVj
dCBpcyBpbiBsYXN0IGZyYWdtZW50LgorICAgICAgICBmb3IgKGF1dG8gaXQgPSBtX2ZyYWdtZW50
TGlzdC5maW5kKGVuY2xvc2luZ0JveFN0YXJ0RnJhZ21lbnQpLCBlbmQgPSBtX2ZyYWdtZW50TGlz
dC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBjb25zdCBSZW5kZXJGcmFn
bWVudENvbnRhaW5lciogY3VyckZyYWdtZW50ID0gKml0OworICAgICAgICAgICAgaWYgKGN1cnJG
cmFnbWVudCA9PSBmcmFnbWVudCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGlmIChvYmplY3RBQkJSZWN0LmludGVyc2VjdHMoY3VyclJlZ2lvbi0+YWJzb2x1dGVCb3VuZGlu
Z0JveFJlY3QodHJ1ZSkpKQorICAgICAgICAgICAgaWYgKG9iamVjdEFCQlJlY3QuaW50ZXJzZWN0
cyhjdXJyRnJhZ21lbnQtPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KHRydWUpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC03NDksMTcgKzc0OSwxNyBAQCBib29sIFJlbmRlckZsb3dUaHJlYWQ6Om9iamVjdEluRmxvd1Jl
Z2lvCiAjaWYgIUFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OX0RJU0FCTEVECiBib29s
IFJlbmRlckZsb3dUaHJlYWQ6OmNoZWNrTGluZXNDb25zaXN0ZW5jeShjb25zdCBSZW5kZXJCbG9j
a0Zsb3cmIHJlbW92ZWRCbG9jaykgY29uc3QKIHsKLSAgICBpZiAoIW1fbGluZVRvUmVnaW9uTWFw
KQorICAgIGlmICghbV9saW5lVG9GcmFnbWVudE1hcCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
LSAgICBmb3IgKGF1dG8mIGxpbmVQYWlyIDogKm1fbGluZVRvUmVnaW9uTWFwLmdldCgpKSB7Cisg
ICAgZm9yIChhdXRvJiBsaW5lUGFpciA6ICptX2xpbmVUb0ZyYWdtZW50TWFwLmdldCgpKSB7CiAg
ICAgICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gqIGxpbmUgPSBsaW5lUGFpci5rZXk7Ci0gICAgICAg
IFJlbmRlclJlZ2lvbiogcmVnaW9uID0gbGluZVBhaXIudmFsdWU7CisgICAgICAgIFJlbmRlckZy
YWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCA9IGxpbmVQYWlyLnZhbHVlOwogICAgICAgICBpZiAo
JmxpbmUtPmJsb2NrRmxvdygpID09ICZyZW1vdmVkQmxvY2spCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIGlmIChsaW5lLT5ibG9ja0Zsb3coKS5mbG93VGhyZWFkU3RhdGUoKSA9
PSBOb3RJbnNpZGVGbG93VGhyZWFkKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoIW1fcmVnaW9uTGlzdC5jb250YWlucyhyZWdpb24pKQorICAgICAgICBpZiAoIW1fZnJh
Z21lbnRMaXN0LmNvbnRhaW5zKGZyYWdtZW50KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKQEAgLTc2Nyw5MyArNzY3LDkzIEBAIGJvb2wgUmVuZGVyRmxvd1RocmVhZDo6Y2hl
Y2tMaW5lc0NvbnNpc3QKIH0KICNlbmRpZgogCi12b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmNsZWFy
TGluZXNUb1JlZ2lvbk1hcCgpCit2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmNsZWFyTGluZXNUb0Zy
YWdtZW50TWFwKCkKIHsKLSAgICBpZiAobV9saW5lVG9SZWdpb25NYXApCi0gICAgICAgIG1fbGlu
ZVRvUmVnaW9uTWFwLT5jbGVhcigpOworICAgIGlmIChtX2xpbmVUb0ZyYWdtZW50TWFwKQorICAg
ICAgICBtX2xpbmVUb0ZyYWdtZW50TWFwLT5jbGVhcigpOwogfQogCiB2b2lkIFJlbmRlckZsb3dU
aHJlYWQ6OmRlbGV0ZUxpbmVzKCkKIHsKLSAgICBjbGVhckxpbmVzVG9SZWdpb25NYXAoKTsKKyAg
ICBjbGVhckxpbmVzVG9GcmFnbWVudE1hcCgpOwogICAgIFJlbmRlckJsb2NrRmxvdzo6ZGVsZXRl
TGluZXMoKTsKIH0KIAogdm9pZCBSZW5kZXJGbG93VGhyZWFkOjp3aWxsQmVEZXN0cm95ZWQoKQog
ewotICAgIGNsZWFyTGluZXNUb1JlZ2lvbk1hcCgpOworICAgIGNsZWFyTGluZXNUb0ZyYWdtZW50
TWFwKCk7CiAgICAgUmVuZGVyQmxvY2tGbG93Ojp3aWxsQmVEZXN0cm95ZWQoKTsKIH0KIAotdm9p
ZCBSZW5kZXJGbG93VGhyZWFkOjptYXJrUmVnaW9uc0Zvck92ZXJmbG93TGF5b3V0SWZOZWVkZWQo
KQordm9pZCBSZW5kZXJGbG93VGhyZWFkOjptYXJrRnJhZ21lbnRzRm9yT3ZlcmZsb3dMYXlvdXRJ
Zk5lZWRlZCgpCiB7Ci0gICAgaWYgKCFoYXNSZWdpb25zKCkpCisgICAgaWYgKCFoYXNGcmFnbWVu
dHMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChhdXRvJiByZWdpb24gOiBtX3JlZ2lv
bkxpc3QpCi0gICAgICAgIHJlZ2lvbi0+c2V0TmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91
dCgpOworICAgIGZvciAoYXV0byYgZnJhZ21lbnQgOiBtX2ZyYWdtZW50TGlzdCkKKyAgICAgICAg
ZnJhZ21lbnQtPnNldE5lZWRzU2ltcGxpZmllZE5vcm1hbEZsb3dMYXlvdXQoKTsKIH0KIAotdm9p
ZCBSZW5kZXJGbG93VGhyZWFkOjp1cGRhdGVSZWdpb25zRmxvd1RocmVhZFBvcnRpb25SZWN0KCkK
K3ZvaWQgUmVuZGVyRmxvd1RocmVhZDo6dXBkYXRlRnJhZ21lbnRzRmxvd1RocmVhZFBvcnRpb25S
ZWN0KCkKIHsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSAwOwogICAgIC8vIEZJWE1F
OiBPcHRpbWl6ZSBub3QgdG8gY2xlYXIgdGhlIGludGVydmFsIGFsbCB0aGUgdGltZS4gVGhpcyBp
bXBsaWVzIG1hbnVhbGx5IG1hbmFnaW5nIHRoZSB0cmVlIG5vZGVzIGxpZmVjeWNsZS4KLSAgICBt
X3JlZ2lvbkludGVydmFsVHJlZS5jbGVhcigpOwotICAgIGZvciAoYXV0byYgcmVnaW9uIDogbV9y
ZWdpb25MaXN0KSB7Ci0gICAgICAgIExheW91dFVuaXQgcmVnaW9uTG9naWNhbFdpZHRoID0gcmVn
aW9uLT5wYWdlTG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIExheW91dFVuaXQgcmVnaW9uTG9naWNh
bEhlaWdodCA9IHN0ZDo6bWluPExheW91dFVuaXQ+KFJlbmRlckZsb3dUaHJlYWQ6Om1heExvZ2lj
YWxIZWlnaHQoKSAtIGxvZ2ljYWxIZWlnaHQsIHJlZ2lvbi0+bG9naWNhbEhlaWdodE9mQWxsRmxv
d1RocmVhZENvbnRlbnQoKSk7CisgICAgbV9mcmFnbWVudEludGVydmFsVHJlZS5jbGVhcigpOwor
ICAgIGZvciAoYXV0byYgZnJhZ21lbnQgOiBtX2ZyYWdtZW50TGlzdCkgeworICAgICAgICBMYXlv
dXRVbml0IGZyYWdtZW50TG9naWNhbFdpZHRoID0gZnJhZ21lbnQtPnBhZ2VMb2dpY2FsV2lkdGgo
KTsKKyAgICAgICAgTGF5b3V0VW5pdCBmcmFnbWVudExvZ2ljYWxIZWlnaHQgPSBzdGQ6Om1pbjxM
YXlvdXRVbml0PihSZW5kZXJGbG93VGhyZWFkOjptYXhMb2dpY2FsSGVpZ2h0KCkgLSBsb2dpY2Fs
SGVpZ2h0LCBmcmFnbWVudC0+bG9naWNhbEhlaWdodE9mQWxsRmxvd1RocmVhZENvbnRlbnQoKSk7
CiAKLSAgICAgICAgTGF5b3V0UmVjdCByZWdpb25SZWN0KHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0g
TFRSID8gTGF5b3V0VW5pdCgpIDogbG9naWNhbFdpZHRoKCkgLSByZWdpb25Mb2dpY2FsV2lkdGgs
IGxvZ2ljYWxIZWlnaHQsIHJlZ2lvbkxvZ2ljYWxXaWR0aCwgcmVnaW9uTG9naWNhbEhlaWdodCk7
CisgICAgICAgIExheW91dFJlY3QgZnJhZ21lbnRSZWN0KHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0g
TFRSID8gTGF5b3V0VW5pdCgpIDogbG9naWNhbFdpZHRoKCkgLSBmcmFnbWVudExvZ2ljYWxXaWR0
aCwgbG9naWNhbEhlaWdodCwgZnJhZ21lbnRMb2dpY2FsV2lkdGgsIGZyYWdtZW50TG9naWNhbEhl
aWdodCk7CiAKLSAgICAgICAgcmVnaW9uLT5zZXRGbG93VGhyZWFkUG9ydGlvblJlY3QoaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSA/IHJlZ2lvblJlY3QgOiByZWdpb25SZWN0LnRyYW5zcG9zZWRS
ZWN0KCkpOworICAgICAgICBmcmFnbWVudC0+c2V0Rmxvd1RocmVhZFBvcnRpb25SZWN0KGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmcmFnbWVudFJlY3QgOiBmcmFnbWVudFJlY3QudHJhbnNw
b3NlZFJlY3QoKSk7CiAKLSAgICAgICAgbV9yZWdpb25JbnRlcnZhbFRyZWUuYWRkKFJlZ2lvbklu
dGVydmFsVHJlZTo6Y3JlYXRlSW50ZXJ2YWwobG9naWNhbEhlaWdodCwgbG9naWNhbEhlaWdodCAr
IHJlZ2lvbkxvZ2ljYWxIZWlnaHQsIHJlZ2lvbikpOworICAgICAgICBtX2ZyYWdtZW50SW50ZXJ2
YWxUcmVlLmFkZChGcmFnbWVudEludGVydmFsVHJlZTo6Y3JlYXRlSW50ZXJ2YWwobG9naWNhbEhl
aWdodCwgbG9naWNhbEhlaWdodCArIGZyYWdtZW50TG9naWNhbEhlaWdodCwgZnJhZ21lbnQpKTsK
IAotICAgICAgICBsb2dpY2FsSGVpZ2h0ICs9IHJlZ2lvbkxvZ2ljYWxIZWlnaHQ7CisgICAgICAg
IGxvZ2ljYWxIZWlnaHQgKz0gZnJhZ21lbnRMb2dpY2FsSGVpZ2h0OwogICAgIH0KIH0KIAotLy8g
RXZlbiBpZiB3ZSByZXF1aXJlIHRoZSBicmVhayB0byBvY2N1ciBhdCBvZmZzZXRCcmVha0luRmxv
d1RocmVhZCwgYmVjYXVzZSByZWdpb25zIG1heSBoYXZlIG1pbi9tYXgtaGVpZ2h0IHZhbHVlcywK
Ky8vIEV2ZW4gaWYgd2UgcmVxdWlyZSB0aGUgYnJlYWsgdG8gb2NjdXIgYXQgb2Zmc2V0QnJlYWtJ
bkZsb3dUaHJlYWQsIGJlY2F1c2UgZnJhZ21lbnRzIG1heSBoYXZlIG1pbi9tYXgtaGVpZ2h0IHZh
bHVlcywKIC8vIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGJyZWFrIHdpbGwgb2NjdXIgYXQgYSBk
aWZmZXJlbnQgb2Zmc2V0IHRoYW4gdGhlIG9yaWdpbmFsIG9uZSByZXF1aXJlZC4KIC8vIG9mZnNl
dEJyZWFrQWRqdXN0bWVudCBtZWFzdXJlcyB0aGUgZGlmZmVyZW50IGJldHdlZW4gdGhlIHJlcXVl
c3RlZCBicmVhayBvZmZzZXQgYW5kIHRoZSBjdXJyZW50IGJyZWFrIG9mZnNldC4KLWJvb2wgUmVu
ZGVyRmxvd1RocmVhZDo6YWRkRm9yY2VkUmVnaW9uQnJlYWsoY29uc3QgUmVuZGVyQmxvY2sqIGJs
b2NrLCBMYXlvdXRVbml0IG9mZnNldEJyZWFrSW5GbG93VGhyZWFkLCBSZW5kZXJCb3gqLCBib29s
LCBMYXlvdXRVbml0KiBvZmZzZXRCcmVha0FkanVzdG1lbnQpCitib29sIFJlbmRlckZsb3dUaHJl
YWQ6OmFkZEZvcmNlZEZyYWdtZW50QnJlYWsoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrLCBMYXlv
dXRVbml0IG9mZnNldEJyZWFrSW5GbG93VGhyZWFkLCBSZW5kZXJCb3gqLCBib29sLCBMYXlvdXRV
bml0KiBvZmZzZXRCcmVha0FkanVzdG1lbnQpCiB7Ci0gICAgLy8gV2UgbmVlZCB0byB1cGRhdGUg
dGhlIHJlZ2lvbnMgZmxvdyB0aHJlYWQgcG9ydGlvbiByZWN0IGJlY2F1c2Ugd2UgYXJlIGdvaW5n
IHRvIHByb2Nlc3MKLSAgICAvLyBhIGJyZWFrIG9uIHRoZXNlIHJlZ2lvbnMuCi0gICAgdXBkYXRl
UmVnaW9uc0Zsb3dUaHJlYWRQb3J0aW9uUmVjdCgpOwotCi0gICAgLy8gU2ltdWxhdGUgYSByZWdp
b24gYnJlYWsgYXQgb2Zmc2V0QnJlYWtJbkZsb3dUaHJlYWQuIElmIGl0IHBvaW50cyBpbnNpZGUg
YW4gYXV0byBsb2dpY2FsIGhlaWdodCByZWdpb24sCi0gICAgLy8gdGhlbiBpdCBkZXRlcm1pbmVz
IHRoZSByZWdpb24gY29tcHV0ZWQgYXV0byBoZWlnaHQuCi0gICAgUmVuZGVyUmVnaW9uKiByZWdp
b24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KGJsb2NrLCBvZmZzZXRCcmVha0luRmxvd1RocmVhZCk7
Ci0gICAgaWYgKCFyZWdpb24pCisgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgdGhlIGZyYWdtZW50
cyBmbG93IHRocmVhZCBwb3J0aW9uIHJlY3QgYmVjYXVzZSB3ZSBhcmUgZ29pbmcgdG8gcHJvY2Vz
cworICAgIC8vIGEgYnJlYWsgb24gdGhlc2UgZnJhZ21lbnRzLgorICAgIHVwZGF0ZUZyYWdtZW50
c0Zsb3dUaHJlYWRQb3J0aW9uUmVjdCgpOworCisgICAgLy8gU2ltdWxhdGUgYSBmcmFnbWVudCBi
cmVhayBhdCBvZmZzZXRCcmVha0luRmxvd1RocmVhZC4gSWYgaXQgcG9pbnRzIGluc2lkZSBhbiBh
dXRvIGxvZ2ljYWwgaGVpZ2h0IGZyYWdtZW50LAorICAgIC8vIHRoZW4gaXQgZGV0ZXJtaW5lcyB0
aGUgZnJhZ21lbnQgY29tcHV0ZWQgYXV0byBoZWlnaHQuCisgICAgUmVuZGVyRnJhZ21lbnRDb250
YWluZXIqIGZyYWdtZW50ID0gZnJhZ21lbnRBdEJsb2NrT2Zmc2V0KGJsb2NrLCBvZmZzZXRCcmVh
a0luRmxvd1RocmVhZCk7CisgICAgaWYgKCFmcmFnbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgTGF5b3V0VW5pdCBjdXJyZW50UmVnaW9uT2Zmc2V0SW5GbG93VGhyZWFkID0gaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJlZ2lvbi0+Zmxvd1RocmVhZFBvcnRpb25SZWN0KCku
eSgpIDogcmVnaW9uLT5mbG93VGhyZWFkUG9ydGlvblJlY3QoKS54KCk7CisgICAgTGF5b3V0VW5p
dCBjdXJyZW50RnJhZ21lbnRPZmZzZXRJbkZsb3dUaHJlYWQgPSBpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpID8gZnJhZ21lbnQtPmZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpLnkoKSA6IGZyYWdtZW50
LT5mbG93VGhyZWFkUG9ydGlvblJlY3QoKS54KCk7CiAKLSAgICBjdXJyZW50UmVnaW9uT2Zmc2V0
SW5GbG93VGhyZWFkICs9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyByZWdpb24tPmZsb3dU
aHJlYWRQb3J0aW9uUmVjdCgpLmhlaWdodCgpIDogcmVnaW9uLT5mbG93VGhyZWFkUG9ydGlvblJl
Y3QoKS53aWR0aCgpOworICAgIGN1cnJlbnRGcmFnbWVudE9mZnNldEluRmxvd1RocmVhZCArPSBp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZnJhZ21lbnQtPmZsb3dUaHJlYWRQb3J0aW9uUmVj
dCgpLmhlaWdodCgpIDogZnJhZ21lbnQtPmZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpLndpZHRoKCk7
CiAKICAgICBpZiAob2Zmc2V0QnJlYWtBZGp1c3RtZW50KQotICAgICAgICAqb2Zmc2V0QnJlYWtB
ZGp1c3RtZW50ID0gc3RkOjptYXg8TGF5b3V0VW5pdD4oMCwgY3VycmVudFJlZ2lvbk9mZnNldElu
Rmxvd1RocmVhZCAtIG9mZnNldEJyZWFrSW5GbG93VGhyZWFkKTsKKyAgICAgICAgKm9mZnNldEJy
ZWFrQWRqdXN0bWVudCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIGN1cnJlbnRGcmFnbWVudE9m
ZnNldEluRmxvd1RocmVhZCAtIG9mZnNldEJyZWFrSW5GbG93VGhyZWFkKTsKIAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAogdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpjb2xsZWN0TGF5ZXJGcmFnbWVu
dHMoTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBMYXlvdXRSZWN0JiBsYXll
ckJvdW5kaW5nQm94LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpCiB7Ci0gICAgQVNTRVJU
KCFtX3JlZ2lvbnNJbnZhbGlkYXRlZCk7CisgICAgQVNTRVJUKCFtX2ZyYWdtZW50c0ludmFsaWRh
dGVkKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHJlZ2lvbiA6IG1fcmVnaW9uTGlzdCkKLSAgICAg
ICAgcmVnaW9uLT5jb2xsZWN0TGF5ZXJGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGxheWVyQm91
bmRpbmdCb3gsIGRpcnR5UmVjdCk7CisgICAgZm9yIChhdXRvJiBmcmFnbWVudCA6IG1fZnJhZ21l
bnRMaXN0KQorICAgICAgICBmcmFnbWVudC0+Y29sbGVjdExheWVyRnJhZ21lbnRzKGxheWVyRnJh
Z21lbnRzLCBsYXllckJvdW5kaW5nQm94LCBkaXJ0eVJlY3QpOwogfQogCiBMYXlvdXRSZWN0IFJl
bmRlckZsb3dUaHJlYWQ6OmZyYWdtZW50c0JvdW5kaW5nQm94KGNvbnN0IExheW91dFJlY3QmIGxh
eWVyQm91bmRpbmdCb3gpCiB7Ci0gICAgQVNTRVJUKCFtX3JlZ2lvbnNJbnZhbGlkYXRlZCk7Cisg
ICAgQVNTRVJUKCFtX2ZyYWdtZW50c0ludmFsaWRhdGVkKTsKICAgICAKICAgICBMYXlvdXRSZWN0
IHJlc3VsdDsKLSAgICBmb3IgKGF1dG8mIHJlZ2lvbiA6IG1fcmVnaW9uTGlzdCkgeworICAgIGZv
ciAoYXV0byYgZnJhZ21lbnQgOiBtX2ZyYWdtZW50TGlzdCkgewogICAgICAgICBMYXllckZyYWdt
ZW50cyBmcmFnbWVudHM7Ci0gICAgICAgIHJlZ2lvbi0+Y29sbGVjdExheWVyRnJhZ21lbnRzKGZy
YWdtZW50cywgbGF5ZXJCb3VuZGluZ0JveCwgTGF5b3V0UmVjdDo6aW5maW5pdGVSZWN0KCkpOwor
ICAgICAgICBmcmFnbWVudC0+Y29sbGVjdExheWVyRnJhZ21lbnRzKGZyYWdtZW50cywgbGF5ZXJC
b3VuZGluZ0JveCwgTGF5b3V0UmVjdDo6aW5maW5pdGVSZWN0KCkpOwogICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIGZyYWdtZW50IDogZnJhZ21lbnRzKSB7CiAgICAgICAgICAgICBMYXlvdXRSZWN0
IGZyYWdtZW50UmVjdChsYXllckJvdW5kaW5nQm94KTsKICAgICAgICAgICAgIGZyYWdtZW50UmVj
dC5pbnRlcnNlY3QoZnJhZ21lbnQucGFnaW5hdGlvbkNsaXApOwpAQCAtODY1LDcgKzg2NSw3IEBA
IExheW91dFJlY3QgUmVuZGVyRmxvd1RocmVhZDo6ZnJhZ21lbnRzQm8KICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1MYXlvdXRVbml0IFJlbmRlckZsb3dUaHJlYWQ6Om9mZnNldEZyb21Mb2dpY2Fs
VG9wT2ZGaXJzdFJlZ2lvbihjb25zdCBSZW5kZXJCbG9jayogY3VycmVudEJsb2NrKSBjb25zdAor
TGF5b3V0VW5pdCBSZW5kZXJGbG93VGhyZWFkOjpvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RG
cmFnbWVudChjb25zdCBSZW5kZXJCbG9jayogY3VycmVudEJsb2NrKSBjb25zdAogewogICAgIC8v
IEFzIGEgbGFzdCByZXNvcnQsIHRha2UgdGhlIHNsb3cgcGF0aC4KICAgICBMYXlvdXRSZWN0IGJs
b2NrUmVjdCgwLCAwLCBjdXJyZW50QmxvY2stPndpZHRoKCksIGN1cnJlbnRCbG9jay0+aGVpZ2h0
KCkpOwpAQCAtODk4LDcgKzg5OCw3IEBAIExheW91dFVuaXQgUmVuZGVyRmxvd1RocmVhZDo6b2Zm
c2V0RnJvbUwKICAgICByZXR1cm4gY3VycmVudEJsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpID8gYmxvY2tSZWN0LnkoKSA6IGJsb2NrUmVjdC54KCk7CiB9CiAKLXZvaWQgUmVuZGVyRmxv
d1RocmVhZDo6UmVnaW9uU2VhcmNoQWRhcHRlcjo6Y29sbGVjdElmTmVlZGVkKGNvbnN0IFJlZ2lv
bkludGVydmFsJiBpbnRlcnZhbCkKK3ZvaWQgUmVuZGVyRmxvd1RocmVhZDo6RnJhZ21lbnRTZWFy
Y2hBZGFwdGVyOjpjb2xsZWN0SWZOZWVkZWQoY29uc3QgRnJhZ21lbnRJbnRlcnZhbCYgaW50ZXJ2
YWwpCiB7CiAgICAgaWYgKG1fcmVzdWx0KQogICAgICAgICByZXR1cm47CkBAIC05MTEsMjkgKzkx
MSwyOSBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6Om1hcExvY2FsVG9Db250YWluCiAgICAgaWYg
KHRoaXMgPT0gcmVwYWludENvbnRhaW5lcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKFJl
bmRlclJlZ2lvbiogcmVnaW9uID0gbWFwRnJvbUZsb3dUb1JlZ2lvbih0cmFuc2Zvcm1TdGF0ZSkp
IHsKKyAgICBpZiAoUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50ID0gbWFwRnJvbUZs
b3dUb0ZyYWdtZW50KHRyYW5zZm9ybVN0YXRlKSkgewogICAgICAgICAvLyBGSVhNRTogVGhlIGNh
c3QgYmVsb3cgaXMgcHJvYmFibHkgbm90IHRoZSBiZXN0IHNvbHV0aW9uLCB3ZSBtYXkgbmVlZCB0
byBmaW5kIGEgYmV0dGVyIHdheS4KLSAgICAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiByZWdpb25P
YmplY3QgPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJPYmplY3QqPihyZWdpb24pOworICAgICAg
ICBjb25zdCBSZW5kZXJPYmplY3QqIGZyYWdtZW50T2JqZWN0ID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
UmVuZGVyT2JqZWN0Kj4oZnJhZ21lbnQpOwogCiAgICAgICAgIC8vIElmIHRoZSByZXBhaW50IGNv
bnRhaW5lciBpcyBudWxscHRyLCB3ZSBoYXZlIHRvIGNsaW1iIHVwIHRvIHRoZSBSZW5kZXJWaWV3
LCBvdGhlcndpc2Ugc3dhcAotICAgICAgICAvLyBpdCB3aXRoIHRoZSByZWdpb24ncyByZXBhaW50
IGNvbnRhaW5lci4KLSAgICAgICAgcmVwYWludENvbnRhaW5lciA9IHJlcGFpbnRDb250YWluZXIg
PyByZWdpb24tPmNvbnRhaW5lckZvclJlcGFpbnQoKSA6IG51bGxwdHI7CisgICAgICAgIC8vIGl0
IHdpdGggdGhlIGZyYWdtZW50J3MgcmVwYWludCBjb250YWluZXIuCisgICAgICAgIHJlcGFpbnRD
b250YWluZXIgPSByZXBhaW50Q29udGFpbmVyID8gZnJhZ21lbnQtPmNvbnRhaW5lckZvclJlcGFp
bnQoKSA6IG51bGxwdHI7CiAKLSAgICAgICAgaWYgKFJlbmRlckZsb3dUaHJlYWQqIHJlZ2lvbkZs
b3dUaHJlYWQgPSByZWdpb24tPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSkgewotICAgICAg
ICAgICAgUmVuZGVyUmVnaW9uKiBzdGFydFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICBS
ZW5kZXJSZWdpb24qIGVuZFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICBpZiAocmVnaW9u
Rmxvd1RocmVhZC0+Z2V0UmVnaW9uUmFuZ2VGb3JCb3gocmVnaW9uLCBzdGFydFJlZ2lvbiwgZW5k
UmVnaW9uKSkgewotICAgICAgICAgICAgICAgIEN1cnJlbnRSZW5kZXJSZWdpb25NYWludGFpbmVy
IHJlZ2lvbk1haW50YWluZXIoKnN0YXJ0UmVnaW9uKTsKLSAgICAgICAgICAgICAgICByZWdpb25P
YmplY3QtPm1hcExvY2FsVG9Db250YWluZXIocmVwYWludENvbnRhaW5lciwgdHJhbnNmb3JtU3Rh
dGUsIG1vZGUsIHdhc0ZpeGVkKTsKKyAgICAgICAgaWYgKFJlbmRlckZsb3dUaHJlYWQqIGZyYWdt
ZW50Rmxvd1RocmVhZCA9IGZyYWdtZW50LT5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkpIHsK
KyAgICAgICAgICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBzdGFydEZyYWdtZW50ID0gbnVs
bHB0cjsKKyAgICAgICAgICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBlbmRGcmFnbWVudCA9
IG51bGxwdHI7CisgICAgICAgICAgICBpZiAoZnJhZ21lbnRGbG93VGhyZWFkLT5nZXRGcmFnbWVu
dFJhbmdlRm9yQm94KGZyYWdtZW50LCBzdGFydEZyYWdtZW50LCBlbmRGcmFnbWVudCkpIHsKKyAg
ICAgICAgICAgICAgICBDdXJyZW50UmVuZGVyRnJhZ21lbnRDb250YWluZXJNYWludGFpbmVyIGZy
YWdtZW50TWFpbnRhaW5lcigqc3RhcnRGcmFnbWVudCk7CisgICAgICAgICAgICAgICAgZnJhZ21l
bnRPYmplY3QtPm1hcExvY2FsVG9Db250YWluZXIocmVwYWludENvbnRhaW5lciwgdHJhbnNmb3Jt
U3RhdGUsIG1vZGUsIHdhc0ZpeGVkKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICByZWdpb25PYmplY3QtPm1hcExvY2FsVG9Db250
YWluZXIocmVwYWludENvbnRhaW5lciwgdHJhbnNmb3JtU3RhdGUsIG1vZGUsIHdhc0ZpeGVkKTsK
KyAgICAgICAgZnJhZ21lbnRPYmplY3QtPm1hcExvY2FsVG9Db250YWluZXIocmVwYWludENvbnRh
aW5lciwgdHJhbnNmb3JtU3RhdGUsIG1vZGUsIHdhc0ZpeGVkKTsKICAgICB9CiB9CiAKLS8vIEZJ
WE1FOiBNYWtlIHRoaXMgZnVuY3Rpb24gZmFzdGVyLiBXYWxraW5nIHRoZSByZW5kZXIgdHJlZSBp
cyBzbG93LCBiZXR0ZXIgdXNlIGEgY2FjaGluZyBtZWNoYW5pc20gKGUuZy4gfGNhY2hlZE9mZnNl
dEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFJlZ2lvbnwpLgorLy8gRklYTUU6IE1ha2UgdGhpcyBmdW5j
dGlvbiBmYXN0ZXIuIFdhbGtpbmcgdGhlIHJlbmRlciB0cmVlIGlzIHNsb3csIGJldHRlciB1c2Ug
YSBjYWNoaW5nIG1lY2hhbmlzbSAoZS5nLiB8Y2FjaGVkT2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZp
cnN0RnJhZ21lbnR8KS4KIExheW91dFJlY3QgUmVuZGVyRmxvd1RocmVhZDo6bWFwRnJvbUxvY2Fs
VG9GbG93VGhyZWFkKGNvbnN0IFJlbmRlckJveCogYm94LCBjb25zdCBMYXlvdXRSZWN0JiBsb2Nh
bFJlY3QpIGNvbnN0CiB7CiAgICAgTGF5b3V0UmVjdCBib3hSZWN0ID0gbG9jYWxSZWN0OwpAQCAt
OTU1LDcgKzk1NSw3IEBAIExheW91dFJlY3QgUmVuZGVyRmxvd1RocmVhZDo6bWFwRnJvbUxvY2EK
ICAgICByZXR1cm4gYm94UmVjdDsKIH0KIAotLy8gRklYTUU6IE1ha2UgdGhpcyBmdW5jdGlvbiBm
YXN0ZXIuIFdhbGtpbmcgdGhlIHJlbmRlciB0cmVlIGlzIHNsb3csIGJldHRlciB1c2UgYSBjYWNo
aW5nIG1lY2hhbmlzbSAoZS5nLiB8Y2FjaGVkT2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVn
aW9ufCkuCisvLyBGSVhNRTogTWFrZSB0aGlzIGZ1bmN0aW9uIGZhc3Rlci4gV2Fsa2luZyB0aGUg
cmVuZGVyIHRyZWUgaXMgc2xvdywgYmV0dGVyIHVzZSBhIGNhY2hpbmcgbWVjaGFuaXNtIChlLmcu
IHxjYWNoZWRPZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RGcmFnbWVudHwpLgogTGF5b3V0UmVj
dCBSZW5kZXJGbG93VGhyZWFkOjptYXBGcm9tRmxvd1RocmVhZFRvTG9jYWwoY29uc3QgUmVuZGVy
Qm94KiBib3gsIGNvbnN0IExheW91dFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgTGF5b3V0UmVj
dCBsb2NhbFJlY3QgPSByZWN0OwpAQCAtOTg4LDE1MiArOTg4LDE1MiBAQCB2b2lkIFJlbmRlckZs
b3dUaHJlYWQ6OmZsaXBGb3JXcml0aW5nTW9kCiAgICAgICAgIHJlY3Quc2V0WCgwIC0gcmVjdC5t
YXhYKCkpOwogfQogCi12b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmFkZFJlZ2lvbnNWaXN1YWxFZmZl
Y3RPdmVyZmxvdyhjb25zdCBSZW5kZXJCb3gqIGJveCkKK3ZvaWQgUmVuZGVyRmxvd1RocmVhZDo6
YWRkRnJhZ21lbnRzVmlzdWFsRWZmZWN0T3ZlcmZsb3coY29uc3QgUmVuZGVyQm94KiBib3gpCiB7
Ci0gICAgUmVuZGVyUmVnaW9uKiBzdGFydFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgUmVuZGVyUmVn
aW9uKiBlbmRSZWdpb24gPSBudWxscHRyOwotICAgIGlmICghZ2V0UmVnaW9uUmFuZ2VGb3JCb3go
Ym94LCBzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKSkKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5l
ciogc3RhcnRGcmFnbWVudCA9IG51bGxwdHI7CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIq
IGVuZEZyYWdtZW50ID0gbnVsbHB0cjsKKyAgICBpZiAoIWdldEZyYWdtZW50UmFuZ2VGb3JCb3go
Ym94LCBzdGFydEZyYWdtZW50LCBlbmRGcmFnbWVudCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGZvciAoYXV0byBpdGVyID0gbV9yZWdpb25MaXN0LmZpbmQoc3RhcnRSZWdpb24pLCBlbmQgPSBt
X3JlZ2lvbkxpc3QuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgUmVuZGVy
UmVnaW9uKiByZWdpb24gPSAqaXRlcjsKKyAgICBmb3IgKGF1dG8gaXRlciA9IG1fZnJhZ21lbnRM
aXN0LmZpbmQoc3RhcnRGcmFnbWVudCksIGVuZCA9IG1fZnJhZ21lbnRMaXN0LmVuZCgpOyBpdGVy
ICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFn
bWVudCA9ICppdGVyOwogCi0gICAgICAgIExheW91dFJlY3QgYm9yZGVyQm94ID0gYm94LT5ib3Jk
ZXJCb3hSZWN0SW5SZWdpb24ocmVnaW9uKTsKKyAgICAgICAgTGF5b3V0UmVjdCBib3JkZXJCb3gg
PSBib3gtPmJvcmRlckJveFJlY3RJbkZyYWdtZW50KGZyYWdtZW50KTsKICAgICAgICAgYm9yZGVy
Qm94ID0gYm94LT5hcHBseVZpc3VhbEVmZmVjdE92ZXJmbG93KGJvcmRlckJveCk7Ci0gICAgICAg
IGJvcmRlckJveCA9IHJlZ2lvbi0+cmVjdEZsb3dQb3J0aW9uRm9yQm94KGJveCwgYm9yZGVyQm94
KTsKKyAgICAgICAgYm9yZGVyQm94ID0gZnJhZ21lbnQtPnJlY3RGbG93UG9ydGlvbkZvckJveChi
b3gsIGJvcmRlckJveCk7CiAKLSAgICAgICAgcmVnaW9uLT5hZGRWaXN1YWxPdmVyZmxvd0ZvckJv
eChib3gsIGJvcmRlckJveCk7Ci0gICAgICAgIGlmIChyZWdpb24gPT0gZW5kUmVnaW9uKQorICAg
ICAgICBmcmFnbWVudC0+YWRkVmlzdWFsT3ZlcmZsb3dGb3JCb3goYm94LCBib3JkZXJCb3gpOwor
ICAgICAgICBpZiAoZnJhZ21lbnQgPT0gZW5kRnJhZ21lbnQpCiAgICAgICAgICAgICBicmVhazsK
ICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyRmxvd1RocmVhZDo6YWRkUmVnaW9uc1Zpc3VhbE92ZXJm
bG93RnJvbVRoZW1lKGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaykKK3ZvaWQgUmVuZGVyRmxvd1Ro
cmVhZDo6YWRkRnJhZ21lbnRzVmlzdWFsT3ZlcmZsb3dGcm9tVGhlbWUoY29uc3QgUmVuZGVyQmxv
Y2sqIGJsb2NrKQogewotICAgIFJlbmRlclJlZ2lvbiogc3RhcnRSZWdpb24gPSBudWxscHRyOwot
ICAgIFJlbmRlclJlZ2lvbiogZW5kUmVnaW9uID0gbnVsbHB0cjsKLSAgICBpZiAoIWdldFJlZ2lv
blJhbmdlRm9yQm94KGJsb2NrLCBzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKSkKKyAgICBSZW5kZXJG
cmFnbWVudENvbnRhaW5lciogc3RhcnRGcmFnbWVudCA9IG51bGxwdHI7CisgICAgUmVuZGVyRnJh
Z21lbnRDb250YWluZXIqIGVuZEZyYWdtZW50ID0gbnVsbHB0cjsKKyAgICBpZiAoIWdldEZyYWdt
ZW50UmFuZ2VGb3JCb3goYmxvY2ssIHN0YXJ0RnJhZ21lbnQsIGVuZEZyYWdtZW50KSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgZm9yIChhdXRvIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuZmluZChzdGFy
dFJlZ2lvbiksIGVuZCA9IG1fcmVnaW9uTGlzdC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikg
ewotICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICppdGVyOworICAgIGZvciAoYXV0byBp
dGVyID0gbV9mcmFnbWVudExpc3QuZmluZChzdGFydEZyYWdtZW50KSwgZW5kID0gbV9mcmFnbWVu
dExpc3QuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgUmVuZGVyRnJhZ21l
bnRDb250YWluZXIqIGZyYWdtZW50ID0gKml0ZXI7CiAKLSAgICAgICAgTGF5b3V0UmVjdCBib3Jk
ZXJCb3ggPSBibG9jay0+Ym9yZGVyQm94UmVjdEluUmVnaW9uKHJlZ2lvbik7Ci0gICAgICAgIGJv
cmRlckJveCA9IHJlZ2lvbi0+cmVjdEZsb3dQb3J0aW9uRm9yQm94KGJsb2NrLCBib3JkZXJCb3gp
OworICAgICAgICBMYXlvdXRSZWN0IGJvcmRlckJveCA9IGJsb2NrLT5ib3JkZXJCb3hSZWN0SW5G
cmFnbWVudChmcmFnbWVudCk7CisgICAgICAgIGJvcmRlckJveCA9IGZyYWdtZW50LT5yZWN0Rmxv
d1BvcnRpb25Gb3JCb3goYmxvY2ssIGJvcmRlckJveCk7CiAKICAgICAgICAgRmxvYXRSZWN0IGlu
ZmxhdGVkUmVjdCA9IGJvcmRlckJveDsKICAgICAgICAgYmxvY2stPnRoZW1lKCkuYWRqdXN0UmVw
YWludFJlY3QoKmJsb2NrLCBpbmZsYXRlZFJlY3QpOwogCi0gICAgICAgIHJlZ2lvbi0+YWRkVmlz
dWFsT3ZlcmZsb3dGb3JCb3goYmxvY2ssIHNuYXBwZWRJbnRSZWN0KExheW91dFJlY3QoaW5mbGF0
ZWRSZWN0KSkpOwotICAgICAgICBpZiAocmVnaW9uID09IGVuZFJlZ2lvbikKKyAgICAgICAgZnJh
Z21lbnQtPmFkZFZpc3VhbE92ZXJmbG93Rm9yQm94KGJsb2NrLCBzbmFwcGVkSW50UmVjdChMYXlv
dXRSZWN0KGluZmxhdGVkUmVjdCkpKTsKKyAgICAgICAgaWYgKGZyYWdtZW50ID09IGVuZEZyYWdt
ZW50KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCi12b2lkIFJlbmRlckZsb3dUaHJl
YWQ6OmFkZFJlZ2lvbnNPdmVyZmxvd0Zyb21DaGlsZChjb25zdCBSZW5kZXJCb3gqIGJveCwgY29u
c3QgUmVuZGVyQm94KiBjaGlsZCwgY29uc3QgTGF5b3V0U2l6ZSYgZGVsdGEpCit2b2lkIFJlbmRl
ckZsb3dUaHJlYWQ6OmFkZEZyYWdtZW50c092ZXJmbG93RnJvbUNoaWxkKGNvbnN0IFJlbmRlckJv
eCogYm94LCBjb25zdCBSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBMYXlvdXRTaXplJiBkZWx0YSkK
IHsKLSAgICBSZW5kZXJSZWdpb24qIHN0YXJ0UmVnaW9uID0gbnVsbHB0cjsKLSAgICBSZW5kZXJS
ZWdpb24qIGVuZFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgaWYgKCFnZXRSZWdpb25SYW5nZUZvckJv
eChjaGlsZCwgc3RhcnRSZWdpb24sIGVuZFJlZ2lvbikpCisgICAgUmVuZGVyRnJhZ21lbnRDb250
YWluZXIqIHN0YXJ0RnJhZ21lbnQgPSBudWxscHRyOworICAgIFJlbmRlckZyYWdtZW50Q29udGFp
bmVyKiBlbmRGcmFnbWVudCA9IG51bGxwdHI7CisgICAgaWYgKCFnZXRGcmFnbWVudFJhbmdlRm9y
Qm94KGNoaWxkLCBzdGFydEZyYWdtZW50LCBlbmRGcmFnbWVudCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFJlbmRlclJlZ2lvbiogY29udGFpbmVyU3RhcnRSZWdpb24gPSBudWxscHRyOwotICAg
IFJlbmRlclJlZ2lvbiogY29udGFpbmVyRW5kUmVnaW9uID0gbnVsbHB0cjsKLSAgICBpZiAoIWdl
dFJlZ2lvblJhbmdlRm9yQm94KGJveCwgY29udGFpbmVyU3RhcnRSZWdpb24sIGNvbnRhaW5lckVu
ZFJlZ2lvbikpCisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGNvbnRhaW5lclN0YXJ0RnJh
Z21lbnQgPSBudWxscHRyOworICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBjb250YWluZXJF
bmRGcmFnbWVudCA9IG51bGxwdHI7CisgICAgaWYgKCFnZXRGcmFnbWVudFJhbmdlRm9yQm94KGJv
eCwgY29udGFpbmVyU3RhcnRGcmFnbWVudCwgY29udGFpbmVyRW5kRnJhZ21lbnQpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8gaXRlciA9IG1fcmVnaW9uTGlzdC5maW5kKHN0YXJ0
UmVnaW9uKSwgZW5kID0gbV9yZWdpb25MaXN0LmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7
Ci0gICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKml0ZXI7Ci0gICAgICAgIGlmICghcmVn
aW9uSW5SYW5nZShyZWdpb24sIGNvbnRhaW5lclN0YXJ0UmVnaW9uLCBjb250YWluZXJFbmRSZWdp
b24pKSB7Ci0gICAgICAgICAgICBpZiAocmVnaW9uID09IGVuZFJlZ2lvbikKKyAgICBmb3IgKGF1
dG8gaXRlciA9IG1fZnJhZ21lbnRMaXN0LmZpbmQoc3RhcnRGcmFnbWVudCksIGVuZCA9IG1fZnJh
Z21lbnRMaXN0LmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIFJlbmRlckZy
YWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCA9ICppdGVyOworICAgICAgICBpZiAoIWZyYWdtZW50
SW5SYW5nZShmcmFnbWVudCwgY29udGFpbmVyU3RhcnRGcmFnbWVudCwgY29udGFpbmVyRW5kRnJh
Z21lbnQpKSB7CisgICAgICAgICAgICBpZiAoZnJhZ21lbnQgPT0gZW5kRnJhZ21lbnQpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0g
ICAgICAgIExheW91dFJlY3QgY2hpbGRMYXlvdXRPdmVyZmxvd1JlY3QgPSByZWdpb24tPmxheW91
dE92ZXJmbG93UmVjdEZvckJveEZvclByb3BhZ2F0aW9uKGNoaWxkKTsKKyAgICAgICAgTGF5b3V0
UmVjdCBjaGlsZExheW91dE92ZXJmbG93UmVjdCA9IGZyYWdtZW50LT5sYXlvdXRPdmVyZmxvd1Jl
Y3RGb3JCb3hGb3JQcm9wYWdhdGlvbihjaGlsZCk7CiAgICAgICAgIGNoaWxkTGF5b3V0T3ZlcmZs
b3dSZWN0Lm1vdmUoZGVsdGEpOwogICAgICAgICAKLSAgICAgICAgcmVnaW9uLT5hZGRMYXlvdXRP
dmVyZmxvd0ZvckJveChib3gsIGNoaWxkTGF5b3V0T3ZlcmZsb3dSZWN0KTsKKyAgICAgICAgZnJh
Z21lbnQtPmFkZExheW91dE92ZXJmbG93Rm9yQm94KGJveCwgY2hpbGRMYXlvdXRPdmVyZmxvd1Jl
Y3QpOwogCiAgICAgICAgIGlmIChjaGlsZC0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSB8fCBib3gt
Pmhhc092ZXJmbG93Q2xpcCgpKSB7Ci0gICAgICAgICAgICBpZiAocmVnaW9uID09IGVuZFJlZ2lv
bikKKyAgICAgICAgICAgIGlmIChmcmFnbWVudCA9PSBlbmRGcmFnbWVudCkKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIExh
eW91dFJlY3QgY2hpbGRWaXN1YWxPdmVyZmxvd1JlY3QgPSByZWdpb24tPnZpc3VhbE92ZXJmbG93
UmVjdEZvckJveEZvclByb3BhZ2F0aW9uKCpjaGlsZCk7CisgICAgICAgIExheW91dFJlY3QgY2hp
bGRWaXN1YWxPdmVyZmxvd1JlY3QgPSBmcmFnbWVudC0+dmlzdWFsT3ZlcmZsb3dSZWN0Rm9yQm94
Rm9yUHJvcGFnYXRpb24oKmNoaWxkKTsKICAgICAgICAgY2hpbGRWaXN1YWxPdmVyZmxvd1JlY3Qu
bW92ZShkZWx0YSk7Ci0gICAgICAgIHJlZ2lvbi0+YWRkVmlzdWFsT3ZlcmZsb3dGb3JCb3goYm94
LCBjaGlsZFZpc3VhbE92ZXJmbG93UmVjdCk7CisgICAgICAgIGZyYWdtZW50LT5hZGRWaXN1YWxP
dmVyZmxvd0ZvckJveChib3gsIGNoaWxkVmlzdWFsT3ZlcmZsb3dSZWN0KTsKIAotICAgICAgICBp
ZiAocmVnaW9uID09IGVuZFJlZ2lvbikKKyAgICAgICAgaWYgKGZyYWdtZW50ID09IGVuZEZyYWdt
ZW50KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogfQogICAgIAotdm9pZCBSZW5kZXJGbG93
VGhyZWFkOjphZGRSZWdpb25zTGF5b3V0T3ZlcmZsb3coY29uc3QgUmVuZGVyQm94KiBib3gsIGNv
bnN0IExheW91dFJlY3QmIGxheW91dE92ZXJmbG93KQordm9pZCBSZW5kZXJGbG93VGhyZWFkOjph
ZGRGcmFnbWVudHNMYXlvdXRPdmVyZmxvdyhjb25zdCBSZW5kZXJCb3gqIGJveCwgY29uc3QgTGF5
b3V0UmVjdCYgbGF5b3V0T3ZlcmZsb3cpCiB7Ci0gICAgUmVuZGVyUmVnaW9uKiBzdGFydFJlZ2lv
biA9IG51bGxwdHI7Ci0gICAgUmVuZGVyUmVnaW9uKiBlbmRSZWdpb24gPSBudWxscHRyOwotICAg
IGlmICghZ2V0UmVnaW9uUmFuZ2VGb3JCb3goYm94LCBzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKSkK
KyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogc3RhcnRGcmFnbWVudCA9IG51bGxwdHI7Cisg
ICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGVuZEZyYWdtZW50ID0gbnVsbHB0cjsKKyAgICBp
ZiAoIWdldEZyYWdtZW50UmFuZ2VGb3JCb3goYm94LCBzdGFydEZyYWdtZW50LCBlbmRGcmFnbWVu
dCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoYXV0byBpdGVyID0gbV9yZWdpb25MaXN0
LmZpbmQoc3RhcnRSZWdpb24pLCBlbmQgPSBtX3JlZ2lvbkxpc3QuZW5kKCk7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpIHsKLSAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSAqaXRlcjsKLSAgICAg
ICAgTGF5b3V0UmVjdCBsYXlvdXRPdmVyZmxvd0luUmVnaW9uID0gcmVnaW9uLT5yZWN0Rmxvd1Bv
cnRpb25Gb3JCb3goYm94LCBsYXlvdXRPdmVyZmxvdyk7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBt
X2ZyYWdtZW50TGlzdC5maW5kKHN0YXJ0RnJhZ21lbnQpLCBlbmQgPSBtX2ZyYWdtZW50TGlzdC5l
bmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBSZW5kZXJGcmFnbWVudENvbnRh
aW5lciogZnJhZ21lbnQgPSAqaXRlcjsKKyAgICAgICAgTGF5b3V0UmVjdCBsYXlvdXRPdmVyZmxv
d0luRnJhZ21lbnQgPSBmcmFnbWVudC0+cmVjdEZsb3dQb3J0aW9uRm9yQm94KGJveCwgbGF5b3V0
T3ZlcmZsb3cpOwogCi0gICAgICAgIHJlZ2lvbi0+YWRkTGF5b3V0T3ZlcmZsb3dGb3JCb3goYm94
LCBsYXlvdXRPdmVyZmxvd0luUmVnaW9uKTsKKyAgICAgICAgZnJhZ21lbnQtPmFkZExheW91dE92
ZXJmbG93Rm9yQm94KGJveCwgbGF5b3V0T3ZlcmZsb3dJbkZyYWdtZW50KTsKIAotICAgICAgICBp
ZiAocmVnaW9uID09IGVuZFJlZ2lvbikKKyAgICAgICAgaWYgKGZyYWdtZW50ID09IGVuZEZyYWdt
ZW50KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCi12b2lkIFJlbmRlckZsb3dUaHJl
YWQ6OmFkZFJlZ2lvbnNWaXN1YWxPdmVyZmxvdyhjb25zdCBSZW5kZXJCb3gqIGJveCwgY29uc3Qg
TGF5b3V0UmVjdCYgdmlzdWFsT3ZlcmZsb3cpCit2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmFkZEZy
YWdtZW50c1Zpc3VhbE92ZXJmbG93KGNvbnN0IFJlbmRlckJveCogYm94LCBjb25zdCBMYXlvdXRS
ZWN0JiB2aXN1YWxPdmVyZmxvdykKIHsKLSAgICBSZW5kZXJSZWdpb24qIHN0YXJ0UmVnaW9uID0g
bnVsbHB0cjsKLSAgICBSZW5kZXJSZWdpb24qIGVuZFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgaWYg
KCFnZXRSZWdpb25SYW5nZUZvckJveChib3gsIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pKQorICAg
IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBzdGFydEZyYWdtZW50ID0gbnVsbHB0cjsKKyAgICBS
ZW5kZXJGcmFnbWVudENvbnRhaW5lciogZW5kRnJhZ21lbnQgPSBudWxscHRyOworICAgIGlmICgh
Z2V0RnJhZ21lbnRSYW5nZUZvckJveChib3gsIHN0YXJ0RnJhZ21lbnQsIGVuZEZyYWdtZW50KSkK
ICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGZvciAoUmVuZGVyUmVnaW9uTGlzdDo6aXRlcmF0
b3IgaXRlciA9IG1fcmVnaW9uTGlzdC5maW5kKHN0YXJ0UmVnaW9uKTsgaXRlciAhPSBtX3JlZ2lv
bkxpc3QuZW5kKCk7ICsraXRlcikgewotICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICpp
dGVyOwotICAgICAgICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93SW5SZWdpb24gPSByZWdpb24t
PnJlY3RGbG93UG9ydGlvbkZvckJveChib3gsIHZpc3VhbE92ZXJmbG93KTsKKyAgICBmb3IgKFJl
bmRlckZyYWdtZW50Q29udGFpbmVyTGlzdDo6aXRlcmF0b3IgaXRlciA9IG1fZnJhZ21lbnRMaXN0
LmZpbmQoc3RhcnRGcmFnbWVudCk7IGl0ZXIgIT0gbV9mcmFnbWVudExpc3QuZW5kKCk7ICsraXRl
cikgeworICAgICAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQgPSAqaXRlcjsK
KyAgICAgICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd0luRnJhZ21lbnQgPSBmcmFnbWVudC0+
cmVjdEZsb3dQb3J0aW9uRm9yQm94KGJveCwgdmlzdWFsT3ZlcmZsb3cpOwogICAgICAgICAKLSAg
ICAgICAgcmVnaW9uLT5hZGRWaXN1YWxPdmVyZmxvd0ZvckJveChib3gsIHZpc3VhbE92ZXJmbG93
SW5SZWdpb24pOworICAgICAgICBmcmFnbWVudC0+YWRkVmlzdWFsT3ZlcmZsb3dGb3JCb3goYm94
LCB2aXN1YWxPdmVyZmxvd0luRnJhZ21lbnQpOwogICAgICAgICAKLSAgICAgICAgaWYgKHJlZ2lv
biA9PSBlbmRSZWdpb24pCisgICAgICAgIGlmIChmcmFnbWVudCA9PSBlbmRGcmFnbWVudCkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpjbGVh
clJlZ2lvbnNPdmVyZmxvdyhjb25zdCBSZW5kZXJCb3gqIGJveCkKK3ZvaWQgUmVuZGVyRmxvd1Ro
cmVhZDo6Y2xlYXJGcmFnbWVudHNPdmVyZmxvdyhjb25zdCBSZW5kZXJCb3gqIGJveCkKIHsKLSAg
ICBSZW5kZXJSZWdpb24qIHN0YXJ0UmVnaW9uID0gbnVsbHB0cjsKLSAgICBSZW5kZXJSZWdpb24q
IGVuZFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgaWYgKCFnZXRSZWdpb25SYW5nZUZvckJveChib3gs
IHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pKQorICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBz
dGFydEZyYWdtZW50ID0gbnVsbHB0cjsKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZW5k
RnJhZ21lbnQgPSBudWxscHRyOworICAgIGlmICghZ2V0RnJhZ21lbnRSYW5nZUZvckJveChib3gs
IHN0YXJ0RnJhZ21lbnQsIGVuZEZyYWdtZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9y
IChhdXRvIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuZmluZChzdGFydFJlZ2lvbiksIGVuZCA9IG1fcmVn
aW9uTGlzdC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBSZW5kZXJSZWdp
b24qIHJlZ2lvbiA9ICppdGVyOwotICAgICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZv
ID0gcmVnaW9uLT5yZW5kZXJCb3hSZWdpb25JbmZvKGJveCk7CisgICAgZm9yIChhdXRvIGl0ZXIg
PSBtX2ZyYWdtZW50TGlzdC5maW5kKHN0YXJ0RnJhZ21lbnQpLCBlbmQgPSBtX2ZyYWdtZW50TGlz
dC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBSZW5kZXJGcmFnbWVudENv
bnRhaW5lciogZnJhZ21lbnQgPSAqaXRlcjsKKyAgICAgICAgUmVuZGVyQm94RnJhZ21lbnRJbmZv
KiBib3hJbmZvID0gZnJhZ21lbnQtPnJlbmRlckJveEZyYWdtZW50SW5mbyhib3gpOwogICAgICAg
ICBpZiAoYm94SW5mbyAmJiBib3hJbmZvLT5vdmVyZmxvdygpKQogICAgICAgICAgICAgYm94SW5m
by0+Y2xlYXJPdmVyZmxvdygpOwogCi0gICAgICAgIGlmIChyZWdpb24gPT0gZW5kUmVnaW9uKQor
ICAgICAgICBpZiAoZnJhZ21lbnQgPT0gZW5kRnJhZ21lbnQpCiAgICAgICAgICAgICBicmVhazsK
ICAgICB9CiB9CiAKLVJlbmRlclJlZ2lvbiogUmVuZGVyRmxvd1RocmVhZDo6Y3VycmVudFJlZ2lv
bigpIGNvbnN0CitSZW5kZXJGcmFnbWVudENvbnRhaW5lciogUmVuZGVyRmxvd1RocmVhZDo6Y3Vy
cmVudEZyYWdtZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jdXJyZW50UmVnaW9uTWFpbnRh
aW5lciA/ICZtX2N1cnJlbnRSZWdpb25NYWludGFpbmVyLT5yZWdpb24oKSA6IG51bGxwdHI7Cisg
ICAgcmV0dXJuIG1fY3VycmVudEZyYWdtZW50TWFpbnRhaW5lciA/ICZtX2N1cnJlbnRGcmFnbWVu
dE1haW50YWluZXItPmZyYWdtZW50KCkgOiBudWxscHRyOwogfQogCi1Db250YWluaW5nUmVnaW9u
TWFwJiBSZW5kZXJGbG93VGhyZWFkOjpjb250YWluaW5nUmVnaW9uTWFwKCkKK0NvbnRhaW5pbmdG
cmFnbWVudE1hcCYgUmVuZGVyRmxvd1RocmVhZDo6Y29udGFpbmluZ0ZyYWdtZW50TWFwKCkKIHsK
LSAgICBpZiAoIW1fbGluZVRvUmVnaW9uTWFwKQotICAgICAgICBtX2xpbmVUb1JlZ2lvbk1hcCA9
IHN0ZDo6bWFrZV91bmlxdWU8Q29udGFpbmluZ1JlZ2lvbk1hcD4oKTsKKyAgICBpZiAoIW1fbGlu
ZVRvRnJhZ21lbnRNYXApCisgICAgICAgIG1fbGluZVRvRnJhZ21lbnRNYXAgPSBzdGQ6Om1ha2Vf
dW5pcXVlPENvbnRhaW5pbmdGcmFnbWVudE1hcD4oKTsKIAotICAgIHJldHVybiAqbV9saW5lVG9S
ZWdpb25NYXAuZ2V0KCk7CisgICAgcmV0dXJuICptX2xpbmVUb0ZyYWdtZW50TWFwLmdldCgpOwog
fQogCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQu
aAkocmV2aXNpb24gMjIyNDYyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
b3dUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMjAgKzM1LDIwIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgQ3VycmVudFJlbmRlclJlZ2lvbk1haW50YWluZXI7CitjbGFz
cyBDdXJyZW50UmVuZGVyRnJhZ21lbnRDb250YWluZXJNYWludGFpbmVyOwogY2xhc3MgUmVuZGVy
Rmxvd1RocmVhZDsKIGNsYXNzIFJlbmRlclN0eWxlOwotY2xhc3MgUmVuZGVyUmVnaW9uOworY2xh
c3MgUmVuZGVyRnJhZ21lbnRDb250YWluZXI7CiBjbGFzcyBSb290SW5saW5lQm94OwogCi10eXBl
ZGVmIExpc3RIYXNoU2V0PFJlbmRlclJlZ2lvbio+IFJlbmRlclJlZ2lvbkxpc3Q7Cit0eXBlZGVm
IExpc3RIYXNoU2V0PFJlbmRlckZyYWdtZW50Q29udGFpbmVyKj4gUmVuZGVyRnJhZ21lbnRDb250
YWluZXJMaXN0OwogdHlwZWRlZiBWZWN0b3I8UmVuZGVyTGF5ZXIqPiBSZW5kZXJMYXllckxpc3Q7
Ci10eXBlZGVmIEhhc2hNYXA8Y29uc3QgUm9vdElubGluZUJveCosIFJlbmRlclJlZ2lvbio+IENv
bnRhaW5pbmdSZWdpb25NYXA7Cit0eXBlZGVmIEhhc2hNYXA8Y29uc3QgUm9vdElubGluZUJveCos
IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKj4gQ29udGFpbmluZ0ZyYWdtZW50TWFwOwogCiAvLyBS
ZW5kZXJGbG93VGhyZWFkIGlzIHVzZWQgdG8gY29sbGVjdCBhbGwgdGhlIHJlbmRlciBvYmplY3Rz
IHRoYXQgcGFydGljaXBhdGUgaW4gYQogLy8gZmxvdyB0aHJlYWQuIEl0IHdpbGwgYWxzbyBoZWxw
IGluIGRvaW5nIHRoZSBsYXlvdXQuIEhvd2V2ZXIsIGl0IHdpbGwgbm90IHJlbmRlcgotLy8gZGly
ZWN0bHkgdG8gc2NyZWVuLiBJbnN0ZWFkLCBSZW5kZXJSZWdpb24gb2JqZWN0cyB3aWxsIHJlZGly
ZWN0IHRoZWlyIHBhaW50IAotLy8gYW5kIG5vZGVBdFBvaW50IG1ldGhvZHMgdG8gdGhpcyBvYmpl
Y3QuIEVhY2ggUmVuZGVyUmVnaW9uIHdpbGwgYWN0dWFsbHkgYmUgYSB2aWV3UG9ydAorLy8gZGly
ZWN0bHkgdG8gc2NyZWVuLiBJbnN0ZWFkLCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciBvYmplY3Rz
IHdpbGwgcmVkaXJlY3QgdGhlaXIgcGFpbnQgCisvLyBhbmQgbm9kZUF0UG9pbnQgbWV0aG9kcyB0
byB0aGlzIG9iamVjdC4gRWFjaCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciB3aWxsIGFjdHVhbGx5
IGJlIGEgdmlld1BvcnQKIC8vIG9mIHRoZSBSZW5kZXJGbG93VGhyZWFkLgogCiBjbGFzcyBSZW5k
ZXJGbG93VGhyZWFkOiBwdWJsaWMgUmVuZGVyQmxvY2tGbG93IHsKQEAgLTU3LDcgKzU3LDcgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUZsb3dDaGlsZEluZm8oUmVuZGVyRWxl
bWVudCYpOwogI2lmbmRlZiBOREVCVUcKLSAgICBib29sIGhhc0NoaWxkSW5mbyhSZW5kZXJPYmpl
Y3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBpczxSZW5kZXJCb3g+KGNoaWxkKSAmJiBtX3JlZ2lv
blJhbmdlTWFwLmNvbnRhaW5zKGRvd25jYXN0PFJlbmRlckJveD4oY2hpbGQpKTsgfQorICAgIGJv
b2wgaGFzQ2hpbGRJbmZvKFJlbmRlck9iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlzPFJl
bmRlckJveD4oY2hpbGQpICYmIG1fZnJhZ21lbnRSYW5nZU1hcC5jb250YWlucyhkb3duY2FzdDxS
ZW5kZXJCb3g+KGNoaWxkKSk7IH0KICNlbmRpZgogCiAjaWYgIUFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OX0RJU0FCTEVECkBAIC02NiwyMSArNjYsMjEgQEAgcHVibGljOgogICAgIAog
ICAgIHZvaWQgZGVsZXRlTGluZXMoKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGRS
ZWdpb25Ub1RocmVhZChSZW5kZXJSZWdpb24qKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92
ZVJlZ2lvbkZyb21UaHJlYWQoUmVuZGVyUmVnaW9uKik7Ci0gICAgY29uc3QgUmVuZGVyUmVnaW9u
TGlzdCYgcmVuZGVyUmVnaW9uTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaW9uTGlzdDsgfQor
ICAgIHZpcnR1YWwgdm9pZCBhZGRGcmFnbWVudFRvVGhyZWFkKFJlbmRlckZyYWdtZW50Q29udGFp
bmVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVGcmFnbWVudEZyb21UaHJlYWQoUmVu
ZGVyRnJhZ21lbnRDb250YWluZXIqKTsKKyAgICBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5l
ckxpc3QmIHJlbmRlckZyYWdtZW50Q29udGFpbmVyTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJh
Z21lbnRMaXN0OyB9CiAKICAgICB2b2lkIHVwZGF0ZUxvZ2ljYWxXaWR0aCgpIGZpbmFsOwogICAg
IExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyBjb21wdXRlTG9naWNhbEhlaWdodChMYXlvdXRV
bml0IGxvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQgbG9naWNhbFRvcCkgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3Qg
TGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBvdmVycmlkZTsK
IAotICAgIGJvb2wgaGFzUmVnaW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaW9uTGlzdC5zaXpl
KCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVnaW9uQ2hhbmdlZFdyaXRpbmdNb2RlKFJlbmRlclJl
Z2lvbiopIHsgfQorICAgIGJvb2wgaGFzRnJhZ21lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9mcmFn
bWVudExpc3Quc2l6ZSgpOyB9CisgICAgdmlydHVhbCB2b2lkIGZyYWdtZW50Q2hhbmdlZFdyaXRp
bmdNb2RlKFJlbmRlckZyYWdtZW50Q29udGFpbmVyKikgeyB9CiAKLSAgICB2b2lkIHZhbGlkYXRl
UmVnaW9ucygpOwotICAgIHZvaWQgaW52YWxpZGF0ZVJlZ2lvbnMoTWFya2luZ0JlaGF2aW9yID0g
TWFya0NvbnRhaW5pbmdCbG9ja0NoYWluKTsKLSAgICBib29sIGhhc1ZhbGlkUmVnaW9uSW5mbygp
IGNvbnN0IHsgcmV0dXJuICFtX3JlZ2lvbnNJbnZhbGlkYXRlZCAmJiAhbV9yZWdpb25MaXN0Lmlz
RW1wdHkoKTsgfQorICAgIHZvaWQgdmFsaWRhdGVGcmFnbWVudHMoKTsKKyAgICB2b2lkIGludmFs
aWRhdGVGcmFnbWVudHMoTWFya2luZ0JlaGF2aW9yID0gTWFya0NvbnRhaW5pbmdCbG9ja0NoYWlu
KTsKKyAgICBib29sIGhhc1ZhbGlkRnJhZ21lbnRJbmZvKCkgY29uc3QgeyByZXR1cm4gIW1fZnJh
Z21lbnRzSW52YWxpZGF0ZWQgJiYgIW1fZnJhZ21lbnRMaXN0LmlzRW1wdHkoKTsgfQogCiAgICAg
Ly8gU29tZSByZW5kZXJlcnMgKGNvbHVtbiBzcGFubmVycykgYXJlIG1vdmVkIG91dCBvZiB0aGUg
ZmxvdyB0aHJlYWQgdG8gbGl2ZSBhbW9uZyBjb2x1bW4KICAgICAvLyBzZXRzLiBJZiB8Y2hpbGR8
IGlzIHN1Y2ggYSByZW5kZXJlciwgcmVzb2x2ZSBpdCB0byB0aGUgcGxhY2Vob2xkZXIgdGhhdCBs
aXZlcyBhdCB0aGUgb3JpZ2luYWwKQEAgLTk3LDcgKzk3LDcgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRT
dHlsZSkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHJlcGFpbnRSZWN0YW5nbGVJblJlZ2lvbnMoY29u
c3QgTGF5b3V0UmVjdCYpIGNvbnN0OworICAgIHZvaWQgcmVwYWludFJlY3RhbmdsZUluRnJhZ21l
bnRzKGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKICAgICAKICAgICBMYXlvdXRQb2ludCBhZGp1
c3RlZFBvc2l0aW9uUmVsYXRpdmVUb09mZnNldFBhcmVudChjb25zdCBSZW5kZXJCb3hNb2RlbE9i
amVjdCYsIGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7CiAKQEAgLTEwOSwzNiArMTA5LDM2IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZUJyZWFrKGNvbnN0IFJlbmRlckJsb2Nr
KiwgTGF5b3V0VW5pdCAvKm9mZnNldCovLCBMYXlvdXRVbml0IC8qc3BhY2VTaG9ydGFnZSovKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTWluaW11bVBhZ2VIZWlnaHQoY29uc3QgUmVuZGVy
QmxvY2sqLCBMYXlvdXRVbml0IC8qb2Zmc2V0Ki8sIExheW91dFVuaXQgLyptaW5IZWlnaHQqLykg
eyB9CiAKLSAgICB2aXJ0dWFsIFJlbmRlclJlZ2lvbiogcmVnaW9uQXRCbG9ja09mZnNldChjb25z
dCBSZW5kZXJCb3gqLCBMYXlvdXRVbml0LCBib29sIGV4dGVuZExhc3RSZWdpb24gPSBmYWxzZSkg
Y29uc3Q7CisgICAgdmlydHVhbCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnRBdEJs
b2NrT2Zmc2V0KGNvbnN0IFJlbmRlckJveCosIExheW91dFVuaXQsIGJvb2wgZXh0ZW5kTGFzdEZy
YWdtZW50ID0gZmFsc2UpIGNvbnN0OwogCi0gICAgYm9vbCByZWdpb25zSGF2ZVVuaWZvcm1Mb2dp
Y2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3JlZ2lvbnNIYXZlVW5pZm9ybUxvZ2ljYWxXaWR0
aDsgfQotICAgIGJvb2wgcmVnaW9uc0hhdmVVbmlmb3JtTG9naWNhbEhlaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVnaW9uc0hhdmVVbmlmb3JtTG9naWNhbEhlaWdodDsgfQorICAgIGJvb2wgZnJh
Z21lbnRzSGF2ZVVuaWZvcm1Mb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2ZyYWdtZW50
c0hhdmVVbmlmb3JtTG9naWNhbFdpZHRoOyB9CisgICAgYm9vbCBmcmFnbWVudHNIYXZlVW5pZm9y
bUxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZyYWdtZW50c0hhdmVVbmlmb3JtTG9n
aWNhbEhlaWdodDsgfQogCi0gICAgdmlydHVhbCBSZW5kZXJSZWdpb24qIG1hcEZyb21GbG93VG9S
ZWdpb24oVHJhbnNmb3JtU3RhdGUmKSBjb25zdDsKKyAgICB2aXJ0dWFsIFJlbmRlckZyYWdtZW50
Q29udGFpbmVyKiBtYXBGcm9tRmxvd1RvRnJhZ21lbnQoVHJhbnNmb3JtU3RhdGUmKSBjb25zdDsK
IAotICAgIHZvaWQgbG9naWNhbFdpZHRoQ2hhbmdlZEluUmVnaW9uc0ZvckJsb2NrKGNvbnN0IFJl
bmRlckJsb2NrKiwgYm9vbCYpOworICAgIHZvaWQgbG9naWNhbFdpZHRoQ2hhbmdlZEluRnJhZ21l
bnRzRm9yQmxvY2soY29uc3QgUmVuZGVyQmxvY2sqLCBib29sJik7CiAKLSAgICBMYXlvdXRVbml0
IGNvbnRlbnRMb2dpY2FsV2lkdGhPZkZpcnN0UmVnaW9uKCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5p
dCBjb250ZW50TG9naWNhbEhlaWdodE9mRmlyc3RSZWdpb24oKSBjb25zdDsKLSAgICBMYXlvdXRV
bml0IGNvbnRlbnRMb2dpY2FsTGVmdE9mRmlyc3RSZWdpb24oKSBjb25zdDsKKyAgICBMYXlvdXRV
bml0IGNvbnRlbnRMb2dpY2FsV2lkdGhPZkZpcnN0RnJhZ21lbnQoKSBjb25zdDsKKyAgICBMYXlv
dXRVbml0IGNvbnRlbnRMb2dpY2FsSGVpZ2h0T2ZGaXJzdEZyYWdtZW50KCkgY29uc3Q7CisgICAg
TGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnRPZkZpcnN0RnJhZ21lbnQoKSBjb25zdDsKICAg
ICAKLSAgICBSZW5kZXJSZWdpb24qIGZpcnN0UmVnaW9uKCkgY29uc3Q7Ci0gICAgUmVuZGVyUmVn
aW9uKiBsYXN0UmVnaW9uKCkgY29uc3Q7CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZp
cnN0RnJhZ21lbnQoKSBjb25zdDsKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogbGFzdEZy
YWdtZW50KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVnaW9uUmFuZ2VGb3JCb3go
Y29uc3QgUmVuZGVyQm94JiwgUmVuZGVyUmVnaW9uKiwgUmVuZGVyUmVnaW9uKik7Ci0gICAgYm9v
bCBnZXRSZWdpb25SYW5nZUZvckJveChjb25zdCBSZW5kZXJCb3gqLCBSZW5kZXJSZWdpb24qJiBz
dGFydFJlZ2lvbiwgUmVuZGVyUmVnaW9uKiYgZW5kUmVnaW9uKSBjb25zdDsKLSAgICBib29sIGNv
bXB1dGVkUmVnaW9uUmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQm94KiwgUmVuZGVyUmVnaW9uKiYg
c3RhcnRSZWdpb24sIFJlbmRlclJlZ2lvbiomIGVuZFJlZ2lvbikgY29uc3Q7Ci0gICAgYm9vbCBo
YXNDYWNoZWRSZWdpb25SYW5nZUZvckJveChjb25zdCBSZW5kZXJCb3gmKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0RnJhZ21lbnRSYW5nZUZvckJveChjb25zdCBSZW5kZXJCb3gmLCBSZW5k
ZXJGcmFnbWVudENvbnRhaW5lciosIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKik7CisgICAgYm9v
bCBnZXRGcmFnbWVudFJhbmdlRm9yQm94KGNvbnN0IFJlbmRlckJveCosIFJlbmRlckZyYWdtZW50
Q29udGFpbmVyKiYgc3RhcnRGcmFnbWVudCwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqJiBlbmRG
cmFnbWVudCkgY29uc3Q7CisgICAgYm9vbCBjb21wdXRlZEZyYWdtZW50UmFuZ2VGb3JCb3goY29u
c3QgUmVuZGVyQm94KiwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqJiBzdGFydEZyYWdtZW50LCBS
ZW5kZXJGcmFnbWVudENvbnRhaW5lciomIGVuZEZyYWdtZW50KSBjb25zdDsKKyAgICBib29sIGhh
c0NhY2hlZEZyYWdtZW50UmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQm94JikgY29uc3Q7CiAKLSAg
ICAvLyBDaGVjayBpZiB0aGUgb2JqZWN0IGlzIGluIHJlZ2lvbiBhbmQgdGhlIHJlZ2lvbiBpcyBw
YXJ0IG9mIHRoaXMgZmxvdyB0aHJlYWQuCi0gICAgYm9vbCBvYmplY3RJbkZsb3dSZWdpb24oY29u
c3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyUmVnaW9uKikgY29uc3Q7CisgICAgLy8gQ2hl
Y2sgaWYgdGhlIG9iamVjdCBpcyBpbiBmcmFnbWVudCBhbmQgdGhlIGZyYWdtZW50IGlzIHBhcnQg
b2YgdGhpcyBmbG93IHRocmVhZC4KKyAgICBib29sIG9iamVjdEluRmxvd0ZyYWdtZW50KGNvbnN0
IFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKikgY29uc3Q7CiAg
ICAgCi0gICAgLy8gQ2hlY2sgaWYgdGhlIG9iamVjdCBzaG91bGQgYmUgcGFpbnRlZCBpbiB0aGlz
IHJlZ2lvbiBhbmQgaWYgdGhlIHJlZ2lvbiBpcyBwYXJ0IG9mIHRoaXMgZmxvdyB0aHJlYWQuCi0g
ICAgYm9vbCBvYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lvbihjb25zdCBSZW5kZXJPYmpl
Y3QqLCBjb25zdCBSZW5kZXJSZWdpb24qKSBjb25zdDsKKyAgICAvLyBDaGVjayBpZiB0aGUgb2Jq
ZWN0IHNob3VsZCBiZSBwYWludGVkIGluIHRoaXMgZnJhZ21lbnQgYW5kIGlmIHRoZSBmcmFnbWVu
dCBpcyBwYXJ0IG9mIHRoaXMgZmxvdyB0aHJlYWQuCisgICAgYm9vbCBvYmplY3RTaG91bGRGcmFn
bWVudEluRmxvd0ZyYWdtZW50KGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlckZyYWdt
ZW50Q29udGFpbmVyKikgY29uc3Q7CiAKLSAgICB2b2lkIG1hcmtSZWdpb25zRm9yT3ZlcmZsb3dM
YXlvdXRJZk5lZWRlZCgpOworICAgIHZvaWQgbWFya0ZyYWdtZW50c0Zvck92ZXJmbG93TGF5b3V0
SWZOZWVkZWQoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBhZGRGb3JjZWRSZWdpb25CcmVhayhjb25z
dCBSZW5kZXJCbG9jayosIExheW91dFVuaXQsIFJlbmRlckJveCogYnJlYWtDaGlsZCwgYm9vbCBp
c0JlZm9yZSwgTGF5b3V0VW5pdCogb2Zmc2V0QnJlYWtBZGp1c3RtZW50ID0gMCk7CisgICAgdmly
dHVhbCBib29sIGFkZEZvcmNlZEZyYWdtZW50QnJlYWsoY29uc3QgUmVuZGVyQmxvY2sqLCBMYXlv
dXRVbml0LCBSZW5kZXJCb3gqIGJyZWFrQ2hpbGQsIGJvb2wgaXNCZWZvcmUsIExheW91dFVuaXQq
IG9mZnNldEJyZWFrQWRqdXN0bWVudCA9IDApOwogICAgIHZpcnR1YWwgdm9pZCBhcHBseUJyZWFr
QWZ0ZXJDb250ZW50KExheW91dFVuaXQpIHsgfQogCiAgICAgdmlydHVhbCBib29sIGlzUGFnZUxv
Z2ljYWxIZWlnaHRLbm93bigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTE0NywxNSArMTQ3
LDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbGxlY3RMYXllckZyYWdtZW50cyhMYXllckZyYWdt
ZW50cyYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRpbmdCb3gsIGNvbnN0IExheW91dFJl
Y3QmIGRpcnR5UmVjdCk7CiAgICAgTGF5b3V0UmVjdCBmcmFnbWVudHNCb3VuZGluZ0JveChjb25z
dCBMYXlvdXRSZWN0JiBsYXllckJvdW5kaW5nQm94KTsKIAotICAgIExheW91dFVuaXQgb2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uKGNvbnN0IFJlbmRlckJsb2NrKikgY29uc3Q7Ci0g
ICAgdm9pZCBjbGVhclJlbmRlckJveFJlZ2lvbkluZm9BbmRDdXN0b21TdHlsZShjb25zdCBSZW5k
ZXJCb3gmLCBjb25zdCBSZW5kZXJSZWdpb24qLCBjb25zdCBSZW5kZXJSZWdpb24qLCBjb25zdCBS
ZW5kZXJSZWdpb24qLCBjb25zdCBSZW5kZXJSZWdpb24qKTsKKyAgICBMYXlvdXRVbml0IG9mZnNl
dEZyb21Mb2dpY2FsVG9wT2ZGaXJzdEZyYWdtZW50KGNvbnN0IFJlbmRlckJsb2NrKikgY29uc3Q7
CisgICAgdm9pZCBjbGVhclJlbmRlckJveEZyYWdtZW50SW5mb0FuZEN1c3RvbVN0eWxlKGNvbnN0
IFJlbmRlckJveCYsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiwgY29uc3QgUmVuZGVy
RnJhZ21lbnRDb250YWluZXIqLCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciosIGNvbnN0
IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKik7CiAKLSAgICB2b2lkIGFkZFJlZ2lvbnNWaXN1YWxF
ZmZlY3RPdmVyZmxvdyhjb25zdCBSZW5kZXJCb3gqKTsKLSAgICB2b2lkIGFkZFJlZ2lvbnNWaXN1
YWxPdmVyZmxvd0Zyb21UaGVtZShjb25zdCBSZW5kZXJCbG9jayopOwotICAgIHZvaWQgYWRkUmVn
aW9uc092ZXJmbG93RnJvbUNoaWxkKGNvbnN0IFJlbmRlckJveCosIGNvbnN0IFJlbmRlckJveCos
IGNvbnN0IExheW91dFNpemUmKTsKLSAgICB2b2lkIGFkZFJlZ2lvbnNMYXlvdXRPdmVyZmxvdyhj
b25zdCBSZW5kZXJCb3gqLCBjb25zdCBMYXlvdXRSZWN0Jik7Ci0gICAgdm9pZCBhZGRSZWdpb25z
VmlzdWFsT3ZlcmZsb3coY29uc3QgUmVuZGVyQm94KiwgY29uc3QgTGF5b3V0UmVjdCYpOwotICAg
IHZvaWQgY2xlYXJSZWdpb25zT3ZlcmZsb3coY29uc3QgUmVuZGVyQm94Kik7CisgICAgdm9pZCBh
ZGRGcmFnbWVudHNWaXN1YWxFZmZlY3RPdmVyZmxvdyhjb25zdCBSZW5kZXJCb3gqKTsKKyAgICB2
b2lkIGFkZEZyYWdtZW50c1Zpc3VhbE92ZXJmbG93RnJvbVRoZW1lKGNvbnN0IFJlbmRlckJsb2Nr
Kik7CisgICAgdm9pZCBhZGRGcmFnbWVudHNPdmVyZmxvd0Zyb21DaGlsZChjb25zdCBSZW5kZXJC
b3gqLCBjb25zdCBSZW5kZXJCb3gqLCBjb25zdCBMYXlvdXRTaXplJik7CisgICAgdm9pZCBhZGRG
cmFnbWVudHNMYXlvdXRPdmVyZmxvdyhjb25zdCBSZW5kZXJCb3gqLCBjb25zdCBMYXlvdXRSZWN0
Jik7CisgICAgdm9pZCBhZGRGcmFnbWVudHNWaXN1YWxPdmVyZmxvdyhjb25zdCBSZW5kZXJCb3gq
LCBjb25zdCBMYXlvdXRSZWN0Jik7CisgICAgdm9pZCBjbGVhckZyYWdtZW50c092ZXJmbG93KGNv
bnN0IFJlbmRlckJveCopOwogCiAgICAgTGF5b3V0UmVjdCBtYXBGcm9tRmxvd1RocmVhZFRvTG9j
YWwoY29uc3QgUmVuZGVyQm94KiwgY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogICAgIExheW91
dFJlY3QgbWFwRnJvbUxvY2FsVG9GbG93VGhyZWFkKGNvbnN0IFJlbmRlckJveCosIGNvbnN0IExh
eW91dFJlY3QmKSBjb25zdDsKQEAgLTE2NSwyMCArMTY1LDIwIEBAIHB1YmxpYzoKICAgICAvLyBV
c2VkIHRvIGVzdGltYXRlIHRoZSBtYXhpbXVtIGhlaWdodCBvZiB0aGUgZmxvdyB0aHJlYWQuCiAg
ICAgc3RhdGljIExheW91dFVuaXQgbWF4TG9naWNhbEhlaWdodCgpIHsgcmV0dXJuIExheW91dFVu
aXQ6Om1heCgpIC8gMjsgfQogCi0gICAgYm9vbCByZWdpb25JblJhbmdlKGNvbnN0IFJlbmRlclJl
Z2lvbiogdGFyZ2V0UmVnaW9uLCBjb25zdCBSZW5kZXJSZWdpb24qIHN0YXJ0UmVnaW9uLCBjb25z
dCBSZW5kZXJSZWdpb24qIGVuZFJlZ2lvbikgY29uc3Q7CisgICAgYm9vbCBmcmFnbWVudEluUmFu
Z2UoY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIHRhcmdldEZyYWdtZW50LCBjb25zdCBS
ZW5kZXJGcmFnbWVudENvbnRhaW5lciogc3RhcnRGcmFnbWVudCwgY29uc3QgUmVuZGVyRnJhZ21l
bnRDb250YWluZXIqIGVuZEZyYWdtZW50KSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBhYnNv
bHV0ZVF1YWRzRm9yQm94KFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCosIGNvbnN0IFJlbmRlckJv
eCosIGZsb2F0LCBmbG9hdCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZvaWQgbGF5
b3V0KCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNldEN1cnJlbnRSZWdpb25NYWludGFpbmVyKEN1
cnJlbnRSZW5kZXJSZWdpb25NYWludGFpbmVyKiBjdXJyZW50UmVnaW9uTWFpbnRhaW5lcikgeyBt
X2N1cnJlbnRSZWdpb25NYWludGFpbmVyID0gY3VycmVudFJlZ2lvbk1haW50YWluZXI7IH0KLSAg
ICBSZW5kZXJSZWdpb24qIGN1cnJlbnRSZWdpb24oKSBjb25zdDsKKyAgICB2b2lkIHNldEN1cnJl
bnRGcmFnbWVudE1haW50YWluZXIoQ3VycmVudFJlbmRlckZyYWdtZW50Q29udGFpbmVyTWFpbnRh
aW5lciogY3VycmVudEZyYWdtZW50TWFpbnRhaW5lcikgeyBtX2N1cnJlbnRGcmFnbWVudE1haW50
YWluZXIgPSBjdXJyZW50RnJhZ21lbnRNYWludGFpbmVyOyB9CisgICAgUmVuZGVyRnJhZ21lbnRD
b250YWluZXIqIGN1cnJlbnRGcmFnbWVudCgpIGNvbnN0OwogCi0gICAgQ29udGFpbmluZ1JlZ2lv
bk1hcCYgY29udGFpbmluZ1JlZ2lvbk1hcCgpOworICAgIENvbnRhaW5pbmdGcmFnbWVudE1hcCYg
Y29udGFpbmluZ0ZyYWdtZW50TWFwKCk7CiAKICAgICBib29sIGNhY2hlZEZsb3dUaHJlYWRDb250
YWluaW5nQmxvY2tOZWVkc1VwZGF0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
CiAKLSAgICAvLyBGSVhNRTogRXZlbnR1YWxseSBhcyBjb2x1bW4gYW5kIHJlZ2lvbiBmbG93IHRo
cmVhZHMgc3RhcnQgbmVzdGluZywgdGhpcyBtYXkgZW5kIHVwIGNoYW5naW5nLgorICAgIC8vIEZJ
WE1FOiBFdmVudHVhbGx5IGFzIGNvbHVtbiBhbmQgZnJhZ21lbnQgZmxvdyB0aHJlYWRzIHN0YXJ0
IG5lc3RpbmcsIHRoaXMgbWF5IGVuZCB1cCBjaGFuZ2luZy4KICAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkQ2hlY2tDb2x1bW5CcmVha3MoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiBwcml2YXRl
OgpAQCAtMTk0LDYwICsxOTQsNjAgQEAgcHJvdGVjdGVkOgogICAgIGNvbnN0IGNoYXIqIHJlbmRl
ck5hbWUoKSBjb25zdCBvdmVycmlkZSA9IDA7CiAKICAgICAvLyBPdmVycmlkZGVuIGJ5IGNvbHVt
bnMvcGFnZXMgdG8gc2V0IHVwIGFuIGluaXRpYWwgbG9naWNhbCB3aWR0aCBvZiB0aGUgcGFnZSB3
aWR0aCBldmVuIHdoZW4KLSAgICAvLyBubyByZWdpb25zIGhhdmUgYmVlbiBnZW5lcmF0ZWQgeWV0
LgorICAgIC8vIG5vIGZyYWdtZW50cyBoYXZlIGJlZW4gZ2VuZXJhdGVkIHlldC4KICAgICB2aXJ0
dWFsIExheW91dFVuaXQgaW5pdGlhbExvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIDA7IH07
CiAgICAgCi0gICAgdm9pZCBjbGVhckxpbmVzVG9SZWdpb25NYXAoKTsKKyAgICB2b2lkIGNsZWFy
TGluZXNUb0ZyYWdtZW50TWFwKCk7CiAgICAgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKSBvdmVycmlk
ZTsKIAogICAgIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVs
T2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBUcmFuc2Zvcm1TdGF0ZSYsIE1hcENvb3JkaW5hdGVz
RmxhZ3MsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgdXBkYXRl
UmVnaW9uc0Zsb3dUaHJlYWRQb3J0aW9uUmVjdCgpOworICAgIHZvaWQgdXBkYXRlRnJhZ21lbnRz
Rmxvd1RocmVhZFBvcnRpb25SZWN0KCk7CiAgICAgYm9vbCBzaG91bGRSZXBhaW50KGNvbnN0IExh
eW91dFJlY3QmKSBjb25zdDsKIAotICAgIGJvb2wgZ2V0UmVnaW9uUmFuZ2VGb3JCb3hGcm9tQ2Fj
aGVkSW5mbyhjb25zdCBSZW5kZXJCb3gqLCBSZW5kZXJSZWdpb24qJiBzdGFydFJlZ2lvbiwgUmVu
ZGVyUmVnaW9uKiYgZW5kUmVnaW9uKSBjb25zdDsKKyAgICBib29sIGdldEZyYWdtZW50UmFuZ2VG
b3JCb3hGcm9tQ2FjaGVkSW5mbyhjb25zdCBSZW5kZXJCb3gqLCBSZW5kZXJGcmFnbWVudENvbnRh
aW5lciomIHN0YXJ0RnJhZ21lbnQsIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiYgZW5kRnJhZ21l
bnQpIGNvbnN0OwogCi0gICAgdm9pZCByZW1vdmVSZW5kZXJCb3hSZWdpb25JbmZvKFJlbmRlckJv
eCYpOwotICAgIHZvaWQgcmVtb3ZlTGluZVJlZ2lvbkluZm8oY29uc3QgUmVuZGVyQmxvY2tGbG93
Jik7CisgICAgdm9pZCByZW1vdmVSZW5kZXJCb3hGcmFnbWVudEluZm8oUmVuZGVyQm94Jik7Cisg
ICAgdm9pZCByZW1vdmVMaW5lRnJhZ21lbnRJbmZvKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYpOwog
Ci0gICAgUmVuZGVyUmVnaW9uTGlzdCBtX3JlZ2lvbkxpc3Q7CisgICAgUmVuZGVyRnJhZ21lbnRD
b250YWluZXJMaXN0IG1fZnJhZ21lbnRMaXN0OwogCi0gICAgY2xhc3MgUmVuZGVyUmVnaW9uUmFu
Z2UgeworICAgIGNsYXNzIFJlbmRlckZyYWdtZW50Q29udGFpbmVyUmFuZ2UgewogICAgIHB1Ymxp
YzoKLSAgICAgICAgUmVuZGVyUmVnaW9uUmFuZ2UoKQorICAgICAgICBSZW5kZXJGcmFnbWVudENv
bnRhaW5lclJhbmdlKCkKICAgICAgICAgewogICAgICAgICAgICAgc2V0UmFuZ2UobnVsbHB0ciwg
bnVsbHB0cik7CiAgICAgICAgIH0KIAotICAgICAgICBSZW5kZXJSZWdpb25SYW5nZShSZW5kZXJS
ZWdpb24qIHN0YXJ0LCBSZW5kZXJSZWdpb24qIGVuZCkKKyAgICAgICAgUmVuZGVyRnJhZ21lbnRD
b250YWluZXJSYW5nZShSZW5kZXJGcmFnbWVudENvbnRhaW5lciogc3RhcnQsIFJlbmRlckZyYWdt
ZW50Q29udGFpbmVyKiBlbmQpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldFJhbmdlKHN0YXJ0
LCBlbmQpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIHNldFJhbmdlKFJlbmRl
clJlZ2lvbiogc3RhcnQsIFJlbmRlclJlZ2lvbiogZW5kKQorICAgICAgICB2b2lkIHNldFJhbmdl
KFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBzdGFydCwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIq
IGVuZCkKICAgICAgICAgewotICAgICAgICAgICAgbV9zdGFydFJlZ2lvbiA9IHN0YXJ0OwotICAg
ICAgICAgICAgbV9lbmRSZWdpb24gPSBlbmQ7CisgICAgICAgICAgICBtX3N0YXJ0RnJhZ21lbnQg
PSBzdGFydDsKKyAgICAgICAgICAgIG1fZW5kRnJhZ21lbnQgPSBlbmQ7CiAgICAgICAgICAgICBt
X3JhbmdlSW52YWxpZGF0ZWQgPSB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUmVuZGVyUmVn
aW9uKiBzdGFydFJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRSZWdpb247IH0KLSAgICAg
ICAgUmVuZGVyUmVnaW9uKiBlbmRSZWdpb24oKSBjb25zdCB7IHJldHVybiBtX2VuZFJlZ2lvbjsg
fQorICAgICAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogc3RhcnRGcmFnbWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhcnRGcmFnbWVudDsgfQorICAgICAgICBSZW5kZXJGcmFnbWVudENvbnRh
aW5lciogZW5kRnJhZ21lbnQoKSBjb25zdCB7IHJldHVybiBtX2VuZEZyYWdtZW50OyB9CiAgICAg
ICAgIGJvb2wgcmFuZ2VJbnZhbGlkYXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2VJbnZhbGlk
YXRlZDsgfQogICAgICAgICB2b2lkIGNsZWFyUmFuZ2VJbnZhbGlkYXRlZCgpIHsgbV9yYW5nZUlu
dmFsaWRhdGVkID0gZmFsc2U7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlbmRlclJlZ2lv
biogbV9zdGFydFJlZ2lvbjsKLSAgICAgICAgUmVuZGVyUmVnaW9uKiBtX2VuZFJlZ2lvbjsKKyAg
ICAgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIG1fc3RhcnRGcmFnbWVudDsKKyAgICAgICAg
UmVuZGVyRnJhZ21lbnRDb250YWluZXIqIG1fZW5kRnJhZ21lbnQ7CiAgICAgICAgIGJvb2wgbV9y
YW5nZUludmFsaWRhdGVkOwogICAgIH07CiAKLSAgICB0eXBlZGVmIFBPREludGVydmFsPExheW91
dFVuaXQsIFJlbmRlclJlZ2lvbio+IFJlZ2lvbkludGVydmFsOwotICAgIHR5cGVkZWYgUE9ESW50
ZXJ2YWxUcmVlPExheW91dFVuaXQsIFJlbmRlclJlZ2lvbio+IFJlZ2lvbkludGVydmFsVHJlZTsK
KyAgICB0eXBlZGVmIFBPREludGVydmFsPExheW91dFVuaXQsIFJlbmRlckZyYWdtZW50Q29udGFp
bmVyKj4gRnJhZ21lbnRJbnRlcnZhbDsKKyAgICB0eXBlZGVmIFBPREludGVydmFsVHJlZTxMYXlv
dXRVbml0LCBSZW5kZXJGcmFnbWVudENvbnRhaW5lcio+IEZyYWdtZW50SW50ZXJ2YWxUcmVlOwog
Ci0gICAgY2xhc3MgUmVnaW9uU2VhcmNoQWRhcHRlciB7CisgICAgY2xhc3MgRnJhZ21lbnRTZWFy
Y2hBZGFwdGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFJlZ2lvblNlYXJjaEFkYXB0ZXIoTGF5
b3V0VW5pdCBvZmZzZXQpCisgICAgICAgIEZyYWdtZW50U2VhcmNoQWRhcHRlcihMYXlvdXRVbml0
IG9mZnNldCkKICAgICAgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0KQogICAgICAgICAgICAgLCBt
X3Jlc3VsdChudWxscHRyKQogICAgICAgICB7CkBAIC0yNTUsMzQgKzI1NSwzNCBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgIAogICAgICAgICBjb25zdCBMYXlvdXRVbml0JiBsb3dWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CiAgICAgICAgIGNvbnN0IExheW91dFVuaXQmIGhpZ2hWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgICAgIHZvaWQgY29sbGVjdElmTmVl
ZGVkKGNvbnN0IFJlZ2lvbkludGVydmFsJik7CisgICAgICAgIHZvaWQgY29sbGVjdElmTmVlZGVk
KGNvbnN0IEZyYWdtZW50SW50ZXJ2YWwmKTsKIAotICAgICAgICBSZW5kZXJSZWdpb24qIHJlc3Vs
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0OyB9CisgICAgICAgIFJlbmRlckZyYWdtZW50Q29u
dGFpbmVyKiByZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX3Jlc3VsdDsgfQogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgTGF5b3V0VW5pdCBtX29mZnNldDsKLSAgICAgICAgUmVuZGVyUmVnaW9uKiBt
X3Jlc3VsdDsKKyAgICAgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIG1fcmVzdWx0OwogICAg
IH07CiAKLSAgICAvLyBNYXAgYSBsaW5lIHRvIGl0cyBjb250YWluaW5nIHJlZ2lvbi4KLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q29udGFpbmluZ1JlZ2lvbk1hcD4gbV9saW5lVG9SZWdpb25NYXA7Cisg
ICAgLy8gTWFwIGEgbGluZSB0byBpdHMgY29udGFpbmluZyBmcmFnbWVudC4KKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q29udGFpbmluZ0ZyYWdtZW50TWFwPiBtX2xpbmVUb0ZyYWdtZW50TWFwOwogCi0g
ICAgLy8gTWFwIGEgYm94IHRvIHRoZSBsaXN0IG9mIHJlZ2lvbnMgaW4gd2hpY2ggdGhlIGJveCBp
cyByZW5kZXJlZC4KLSAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgUmVuZGVyQm94KiwgUmVuZGVy
UmVnaW9uUmFuZ2U+IFJlbmRlclJlZ2lvblJhbmdlTWFwOwotICAgIFJlbmRlclJlZ2lvblJhbmdl
TWFwIG1fcmVnaW9uUmFuZ2VNYXA7CisgICAgLy8gTWFwIGEgYm94IHRvIHRoZSBsaXN0IG9mIGZy
YWdtZW50cyBpbiB3aGljaCB0aGUgYm94IGlzIHJlbmRlcmVkLgorICAgIHR5cGVkZWYgSGFzaE1h
cDxjb25zdCBSZW5kZXJCb3gqLCBSZW5kZXJGcmFnbWVudENvbnRhaW5lclJhbmdlPiBSZW5kZXJG
cmFnbWVudENvbnRhaW5lclJhbmdlTWFwOworICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyUmFu
Z2VNYXAgbV9mcmFnbWVudFJhbmdlTWFwOwogCi0gICAgLy8gTWFwIGEgYm94IHdpdGggYSByZWdp
b24gYnJlYWsgdG8gdGhlIGF1dG8gaGVpZ2h0IHJlZ2lvbiBhZmZlY3RlZCBieSB0aGF0IGJyZWFr
LiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8UmVuZGVyQm94KiwgUmVuZGVyUmVnaW9uKj4gUmVuZGVy
Qm94VG9SZWdpb25NYXA7Ci0gICAgUmVuZGVyQm94VG9SZWdpb25NYXAgbV9icmVha0JlZm9yZVRv
UmVnaW9uTWFwOwotICAgIFJlbmRlckJveFRvUmVnaW9uTWFwIG1fYnJlYWtBZnRlclRvUmVnaW9u
TWFwOworICAgIC8vIE1hcCBhIGJveCB3aXRoIGEgZnJhZ21lbnQgYnJlYWsgdG8gdGhlIGF1dG8g
aGVpZ2h0IGZyYWdtZW50IGFmZmVjdGVkIGJ5IHRoYXQgYnJlYWsuIAorICAgIHR5cGVkZWYgSGFz
aE1hcDxSZW5kZXJCb3gqLCBSZW5kZXJGcmFnbWVudENvbnRhaW5lcio+IFJlbmRlckJveFRvRnJh
Z21lbnRNYXA7CisgICAgUmVuZGVyQm94VG9GcmFnbWVudE1hcCBtX2JyZWFrQmVmb3JlVG9GcmFn
bWVudE1hcDsKKyAgICBSZW5kZXJCb3hUb0ZyYWdtZW50TWFwIG1fYnJlYWtBZnRlclRvRnJhZ21l
bnRNYXA7CiAKLSAgICBSZWdpb25JbnRlcnZhbFRyZWUgbV9yZWdpb25JbnRlcnZhbFRyZWU7Cisg
ICAgRnJhZ21lbnRJbnRlcnZhbFRyZWUgbV9mcmFnbWVudEludGVydmFsVHJlZTsKIAotICAgIEN1
cnJlbnRSZW5kZXJSZWdpb25NYWludGFpbmVyKiBtX2N1cnJlbnRSZWdpb25NYWludGFpbmVyOwor
ICAgIEN1cnJlbnRSZW5kZXJGcmFnbWVudENvbnRhaW5lck1haW50YWluZXIqIG1fY3VycmVudEZy
YWdtZW50TWFpbnRhaW5lcjsKIAotICAgIGJvb2wgbV9yZWdpb25zSW52YWxpZGF0ZWQgOiAxOwot
ICAgIGJvb2wgbV9yZWdpb25zSGF2ZVVuaWZvcm1Mb2dpY2FsV2lkdGggOiAxOwotICAgIGJvb2wg
bV9yZWdpb25zSGF2ZVVuaWZvcm1Mb2dpY2FsSGVpZ2h0IDogMTsKKyAgICBib29sIG1fZnJhZ21l
bnRzSW52YWxpZGF0ZWQgOiAxOworICAgIGJvb2wgbV9mcmFnbWVudHNIYXZlVW5pZm9ybUxvZ2lj
YWxXaWR0aCA6IDE7CisgICAgYm9vbCBtX2ZyYWdtZW50c0hhdmVVbmlmb3JtTG9naWNhbEhlaWdo
dCA6IDE7CiAgICAgYm9vbCBtX3BhZ2VMb2dpY2FsU2l6ZUNoYW5nZWQgOiAxOwogfTsKIApAQCAt
MjkyLDggKzI5Miw4IEBAIHByb3RlY3RlZDoKICNpZm5kZWYgTkRFQlVHCiBuYW1lc3BhY2UgV1RG
IHsKIAotdGVtcGxhdGUgPD4gc3RydWN0IFZhbHVlVG9TdHJpbmc8V2ViQ29yZTo6UmVuZGVyUmVn
aW9uKj4gewotICAgIHN0YXRpYyBTdHJpbmcgc3RyaW5nKGNvbnN0IFdlYkNvcmU6OlJlbmRlclJl
Z2lvbiogdmFsdWUpIHsgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlcCIsIHZhbHVlKTsgfQordGVt
cGxhdGUgPD4gc3RydWN0IFZhbHVlVG9TdHJpbmc8V2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRDb250
YWluZXIqPiB7CisgICAgc3RhdGljIFN0cmluZyBzdHJpbmcoY29uc3QgV2ViQ29yZTo6UmVuZGVy
RnJhZ21lbnRDb250YWluZXIqIHZhbHVlKSB7IHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJXAiLCB2
YWx1ZSk7IH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZyYWdtZW50Q29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRDb250YWluZXIuY3BwCShyZXZpc2lv
biAyMjI0NjIpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3Bw
OjIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudENvbnRh
aW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NjAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQor
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyAqIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclJlZ2lv
bi5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJl
c3VsdC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIu
aCIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlJlbmRlckJveFJlZ2lvbkluZm8uaCIK
KyNpbmNsdWRlICJSZW5kZXJGbG93VGhyZWFkLmgiCisjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgi
CisjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgor
I2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVyUmVnaW9uOjpSZW5kZXJSZWdpb24oRWxlbWVudCYg
ZWxlbWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSwgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVh
ZCkKKyAgICA6IFJlbmRlckJsb2NrRmxvdyhlbGVtZW50LCBXVEZNb3ZlKHN0eWxlKSkKKyAgICAs
IG1fZmxvd1RocmVhZChmbG93VGhyZWFkKQorICAgICwgbV9pc1ZhbGlkKGZhbHNlKQoreworfQor
CitSZW5kZXJSZWdpb246OlJlbmRlclJlZ2lvbihEb2N1bWVudCYgZG9jdW1lbnQsIFJlbmRlclN0
eWxlJiYgc3R5bGUsIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQpCisgICAgOiBSZW5kZXJC
bG9ja0Zsb3coZG9jdW1lbnQsIFdURk1vdmUoc3R5bGUpKQorICAgICwgbV9mbG93VGhyZWFkKGZs
b3dUaHJlYWQpCisgICAgLCBtX2lzVmFsaWQoZmFsc2UpCit7Cit9CisKK0xheW91dFBvaW50IFJl
bmRlclJlZ2lvbjo6bWFwUmVnaW9uUG9pbnRJbnRvRmxvd1RocmVhZENvb3JkaW5hdGVzKGNvbnN0
IExheW91dFBvaW50JiBwb2ludCkKK3sKKyAgICAvLyBBc3N1bWluZyB0aGUgcG9pbnQgaXMgcmVs
YXRpdmUgdG8gdGhlIHJlZ2lvbiBibG9jaywgMyBjYXNlcyB3aWxsIGJlIGNvbnNpZGVyZWQ6Cisg
ICAgLy8gYSkgdG9wIG1hcmdpbiwgcGFkZGluZyBvciBib3JkZXIuCisgICAgLy8gYikgYm90dG9t
IG1hcmdpbiwgcGFkZGluZyBvciBib3JkZXIuCisgICAgLy8gYykgbm9uLWNvbnRlbnQgcmVnaW9u
IGFyZWEuCisKKyAgICBMYXlvdXRVbml0IHBvaW50TG9naWNhbFRvcChpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gcG9pbnQueSgpIDogcG9pbnQueCgpKTsKKyAgICBMYXlvdXRVbml0IHBvaW50
TG9naWNhbExlZnQoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBvaW50LngoKSA6IHBvaW50
LnkoKSk7CisgICAgTGF5b3V0VW5pdCBmbG93VGhyZWFkTG9naWNhbFRvcChpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8gbV9mbG93VGhyZWFkUG9ydGlvblJlY3QueSgpIDogbV9mbG93VGhyZWFk
UG9ydGlvblJlY3QueCgpKTsKKyAgICBMYXlvdXRVbml0IGZsb3dUaHJlYWRMb2dpY2FsTGVmdChp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbV9mbG93VGhyZWFkUG9ydGlvblJlY3QueCgpIDog
bV9mbG93VGhyZWFkUG9ydGlvblJlY3QueSgpKTsKKyAgICBMYXlvdXRVbml0IGZsb3dUaHJlYWRQ
b3J0aW9uVG9wQm91bmQoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG1fZmxvd1RocmVhZFBv
cnRpb25SZWN0LmhlaWdodCgpIDogbV9mbG93VGhyZWFkUG9ydGlvblJlY3Qud2lkdGgoKSk7Cisg
ICAgTGF5b3V0VW5pdCBmbG93VGhyZWFkUG9ydGlvbkxlZnRCb3VuZChpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gbV9mbG93VGhyZWFkUG9ydGlvblJlY3Qud2lkdGgoKSA6IG1fZmxvd1RocmVh
ZFBvcnRpb25SZWN0LmhlaWdodCgpKTsKKyAgICBMYXlvdXRVbml0IGZsb3dUaHJlYWRQb3J0aW9u
VG9wTWF4KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBtX2Zsb3dUaHJlYWRQb3J0aW9uUmVj
dC5tYXhZKCkgOiBtX2Zsb3dUaHJlYWRQb3J0aW9uUmVjdC5tYXhYKCkpOworICAgIExheW91dFVu
aXQgZmxvd1RocmVhZFBvcnRpb25MZWZ0TWF4KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBt
X2Zsb3dUaHJlYWRQb3J0aW9uUmVjdC5tYXhYKCkgOiBtX2Zsb3dUaHJlYWRQb3J0aW9uUmVjdC5t
YXhZKCkpOworICAgIExheW91dFVuaXQgZWZmZWN0aXZlRml4ZWRQb2ludERlbm9taW5hdG9yOwor
ICAgIGVmZmVjdGl2ZUZpeGVkUG9pbnREZW5vbWluYXRvci5zZXRSYXdWYWx1ZSgxKTsKKworICAg
IGlmIChwb2ludExvZ2ljYWxUb3AgPCAwKSB7CisgICAgICAgIExheW91dFBvaW50IHBvaW50SW5U
aHJlYWQoMCwgZmxvd1RocmVhZExvZ2ljYWxUb3ApOworICAgICAgICByZXR1cm4gaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IHBvaW50SW5UaHJlYWQgOiBwb2ludEluVGhyZWFkLnRyYW5zcG9z
ZWRQb2ludCgpOworICAgIH0KKworICAgIGlmIChwb2ludExvZ2ljYWxUb3AgPj0gZmxvd1RocmVh
ZFBvcnRpb25Ub3BCb3VuZCkgeworICAgICAgICBMYXlvdXRQb2ludCBwb2ludEluVGhyZWFkKGZs
b3dUaHJlYWRQb3J0aW9uTGVmdEJvdW5kLCBmbG93VGhyZWFkUG9ydGlvblRvcE1heCAtIGVmZmVj
dGl2ZUZpeGVkUG9pbnREZW5vbWluYXRvcik7CisgICAgICAgIHJldHVybiBpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8gcG9pbnRJblRocmVhZCA6IHBvaW50SW5UaHJlYWQudHJhbnNwb3NlZFBv
aW50KCk7CisgICAgfQorCisgICAgaWYgKHBvaW50TG9naWNhbExlZnQgPCAwKSB7CisgICAgICAg
IExheW91dFBvaW50IHBvaW50SW5UaHJlYWQoZmxvd1RocmVhZExvZ2ljYWxMZWZ0LCBwb2ludExv
Z2ljYWxUb3AgKyBmbG93VGhyZWFkTG9naWNhbFRvcCk7CisgICAgICAgIHJldHVybiBpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpID8gcG9pbnRJblRocmVhZCA6IHBvaW50SW5UaHJlYWQudHJhbnNw
b3NlZFBvaW50KCk7CisgICAgfQorICAgIGlmIChwb2ludExvZ2ljYWxMZWZ0ID49IGZsb3dUaHJl
YWRQb3J0aW9uTGVmdEJvdW5kKSB7CisgICAgICAgIExheW91dFBvaW50IHBvaW50SW5UaHJlYWQo
Zmxvd1RocmVhZFBvcnRpb25MZWZ0TWF4IC0gZWZmZWN0aXZlRml4ZWRQb2ludERlbm9taW5hdG9y
LCBwb2ludExvZ2ljYWxUb3AgKyBmbG93VGhyZWFkTG9naWNhbFRvcCk7CisgICAgICAgIHJldHVy
biBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gcG9pbnRJblRocmVhZCA6IHBvaW50SW5UaHJl
YWQudHJhbnNwb3NlZFBvaW50KCk7CisgICAgfQorICAgIExheW91dFBvaW50IHBvaW50SW5UaHJl
YWQocG9pbnRMb2dpY2FsTGVmdCArIGZsb3dUaHJlYWRMb2dpY2FsTGVmdCwgcG9pbnRMb2dpY2Fs
VG9wICsgZmxvd1RocmVhZExvZ2ljYWxUb3ApOworICAgIHJldHVybiBpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gcG9pbnRJblRocmVhZCA6IHBvaW50SW5UaHJlYWQudHJhbnNwb3NlZFBvaW50
KCk7Cit9CisKK1Zpc2libGVQb3NpdGlvbiBSZW5kZXJSZWdpb246OnBvc2l0aW9uRm9yUG9pbnQo
Y29uc3QgTGF5b3V0UG9pbnQmIHBvaW50LCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbikKK3sK
KyAgICBpZiAoIWlzVmFsaWQoKSB8fCAhbV9mbG93VGhyZWFkLT5maXJzdENoaWxkKCkpIC8vIGNo
ZWNraW5nIGZvciBlbXB0eSByZWdpb24gYmxvY2tzLgorICAgICAgICByZXR1cm4gUmVuZGVyQmxv
Y2s6OnBvc2l0aW9uRm9yUG9pbnQocG9pbnQsIHJlZ2lvbik7CisKKyAgICByZXR1cm4gbV9mbG93
VGhyZWFkLT5wb3NpdGlvbkZvclBvaW50KG1hcFJlZ2lvblBvaW50SW50b0Zsb3dUaHJlYWRDb29y
ZGluYXRlcyhwb2ludCksIHRoaXMpOworfQorCitMYXlvdXRVbml0IFJlbmRlclJlZ2lvbjo6cGFn
ZUxvZ2ljYWxXaWR0aCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgcmV0
dXJuIG1fZmxvd1RocmVhZC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNvbnRlbnRXaWR0
aCgpIDogY29udGVudEhlaWdodCgpOworfQorCitMYXlvdXRVbml0IFJlbmRlclJlZ2lvbjo6cGFn
ZUxvZ2ljYWxIZWlnaHQoKSBjb25zdAoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIHJl
dHVybiBtX2Zsb3dUaHJlYWQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjb250ZW50SGVp
Z2h0KCkgOiBjb250ZW50V2lkdGgoKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJSZWdpb246Omxv
Z2ljYWxIZWlnaHRPZkFsbEZsb3dUaHJlYWRDb250ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
cGFnZUxvZ2ljYWxIZWlnaHQoKTsKK30KKworTGF5b3V0UmVjdCBSZW5kZXJSZWdpb246OmZsb3dU
aHJlYWRQb3J0aW9uT3ZlcmZsb3dSZWN0KCkKK3sKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Rm9y
Rmxvd1RocmVhZFBvcnRpb24oZmxvd1RocmVhZFBvcnRpb25SZWN0KCksIGlzRmlyc3RSZWdpb24o
KSwgaXNMYXN0UmVnaW9uKCksIFZpc3VhbE92ZXJmbG93KTsKK30KKworTGF5b3V0UG9pbnQgUmVu
ZGVyUmVnaW9uOjpmbG93VGhyZWFkUG9ydGlvbkxvY2F0aW9uKCkgY29uc3QKK3sKKyAgICBMYXlv
dXRQb2ludCBwb3J0aW9uTG9jYXRpb247CisgICAgTGF5b3V0UmVjdCBwb3J0aW9uUmVjdCA9IGZs
b3dUaHJlYWRQb3J0aW9uUmVjdCgpOworCisgICAgaWYgKGZsb3dUaHJlYWQoKS0+c3R5bGUoKS5p
c0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSB7CisgICAgICAgIExheW91dFJlY3QgZmxpcHBl
ZEZsb3dUaHJlYWRQb3J0aW9uUmVjdChwb3J0aW9uUmVjdCk7CisgICAgICAgIGZsb3dUaHJlYWQo
KS0+ZmxpcEZvcldyaXRpbmdNb2RlKGZsaXBwZWRGbG93VGhyZWFkUG9ydGlvblJlY3QpOworICAg
ICAgICBwb3J0aW9uTG9jYXRpb24gPSBmbGlwcGVkRmxvd1RocmVhZFBvcnRpb25SZWN0LmxvY2F0
aW9uKCk7CisgICAgfSBlbHNlCisgICAgICAgIHBvcnRpb25Mb2NhdGlvbiA9IHBvcnRpb25SZWN0
LmxvY2F0aW9uKCk7CisKKyAgICByZXR1cm4gcG9ydGlvbkxvY2F0aW9uOworfQorCitMYXlvdXRS
ZWN0IFJlbmRlclJlZ2lvbjo6b3ZlcmZsb3dSZWN0Rm9yRmxvd1RocmVhZFBvcnRpb24oY29uc3Qg
TGF5b3V0UmVjdCYgZmxvd1RocmVhZFBvcnRpb25SZWN0LCBib29sIGlzRmlyc3RQb3J0aW9uLCBi
b29sIGlzTGFzdFBvcnRpb24sIE92ZXJmbG93VHlwZSBvdmVyZmxvd1R5cGUpCit7CisgICAgQVNT
RVJUKGlzVmFsaWQoKSk7CisgICAgaWYgKHNob3VsZENsaXBGbG93VGhyZWFkQ29udGVudCgpKQor
ICAgICAgICByZXR1cm4gZmxvd1RocmVhZFBvcnRpb25SZWN0OworCisgICAgTGF5b3V0UmVjdCBm
bG93VGhyZWFkT3ZlcmZsb3cgPSBvdmVyZmxvd1R5cGUgPT0gVmlzdWFsT3ZlcmZsb3cgPyB2aXN1
YWxPdmVyZmxvd1JlY3RGb3JCb3goKm1fZmxvd1RocmVhZCkgOiBsYXlvdXRPdmVyZmxvd1JlY3RG
b3JCb3gobV9mbG93VGhyZWFkKTsKKyAgICBMYXlvdXRSZWN0IGNsaXBSZWN0OworICAgIGlmICht
X2Zsb3dUaHJlYWQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKKyAgICAgICAgTGF5b3V0
VW5pdCBtaW5ZID0gaXNGaXJzdFBvcnRpb24gPyBmbG93VGhyZWFkT3ZlcmZsb3cueSgpIDogZmxv
d1RocmVhZFBvcnRpb25SZWN0LnkoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBtYXhZID0gaXNMYXN0
UG9ydGlvbiA/IHN0ZDo6bWF4KGZsb3dUaHJlYWRQb3J0aW9uUmVjdC5tYXhZKCksIGZsb3dUaHJl
YWRPdmVyZmxvdy5tYXhZKCkpIDogZmxvd1RocmVhZFBvcnRpb25SZWN0Lm1heFkoKTsKKyAgICAg
ICAgYm9vbCBjbGlwWCA9IHN0eWxlKCkub3ZlcmZsb3dYKCkgIT0gT1ZJU0lCTEU7CisgICAgICAg
IExheW91dFVuaXQgbWluWCA9IGNsaXBYID8gZmxvd1RocmVhZFBvcnRpb25SZWN0LngoKSA6IHN0
ZDo6bWluKGZsb3dUaHJlYWRQb3J0aW9uUmVjdC54KCksIGZsb3dUaHJlYWRPdmVyZmxvdy54KCkp
OworICAgICAgICBMYXlvdXRVbml0IG1heFggPSBjbGlwWCA/IGZsb3dUaHJlYWRQb3J0aW9uUmVj
dC5tYXhYKCkgOiBzdGQ6Om1heChmbG93VGhyZWFkUG9ydGlvblJlY3QubWF4WCgpLCBmbG93VGhy
ZWFkT3ZlcmZsb3cubWF4WCgpKTsKKyAgICAgICAgY2xpcFJlY3QgPSBMYXlvdXRSZWN0KG1pblgs
IG1pblksIG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
TGF5b3V0VW5pdCBtaW5YID0gaXNGaXJzdFBvcnRpb24gPyBmbG93VGhyZWFkT3ZlcmZsb3cueCgp
IDogZmxvd1RocmVhZFBvcnRpb25SZWN0LngoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBtYXhYID0g
aXNMYXN0UG9ydGlvbiA/IHN0ZDo6bWF4KGZsb3dUaHJlYWRQb3J0aW9uUmVjdC5tYXhYKCksIGZs
b3dUaHJlYWRPdmVyZmxvdy5tYXhYKCkpIDogZmxvd1RocmVhZFBvcnRpb25SZWN0Lm1heFgoKTsK
KyAgICAgICAgYm9vbCBjbGlwWSA9IHN0eWxlKCkub3ZlcmZsb3dZKCkgIT0gT1ZJU0lCTEU7Cisg
ICAgICAgIExheW91dFVuaXQgbWluWSA9IGNsaXBZID8gZmxvd1RocmVhZFBvcnRpb25SZWN0Lnko
KSA6IHN0ZDo6bWluKGZsb3dUaHJlYWRQb3J0aW9uUmVjdC55KCksIGZsb3dUaHJlYWRPdmVyZmxv
dy55KCkpOworICAgICAgICBMYXlvdXRVbml0IG1heFkgPSBjbGlwWSA/IGZsb3dUaHJlYWRQb3J0
aW9uUmVjdC5tYXhZKCkgOiBzdGQ6Om1heChmbG93VGhyZWFkUG9ydGlvblJlY3QueSgpLCBmbG93
VGhyZWFkT3ZlcmZsb3cubWF4WSgpKTsKKyAgICAgICAgY2xpcFJlY3QgPSBMYXlvdXRSZWN0KG1p
blgsIG1pblksIG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7CisgICAgfQorICAgIHJldHVybiBj
bGlwUmVjdDsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJSZWdpb246OnBhZ2VMb2dpY2FsVG9wRm9y
T2Zmc2V0KExheW91dFVuaXQgLyogb2Zmc2V0ICovKSBjb25zdAoreworICAgIHJldHVybiBmbG93
VGhyZWFkKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmbG93VGhyZWFkUG9ydGlvblJl
Y3QoKS55KCkgOiBmbG93VGhyZWFkUG9ydGlvblJlY3QoKS54KCk7Cit9CisKK2Jvb2wgUmVuZGVy
UmVnaW9uOjppc0ZpcnN0UmVnaW9uKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNWYWxpZCgpKTsK
KworICAgIHJldHVybiBtX2Zsb3dUaHJlYWQtPmZpcnN0UmVnaW9uKCkgPT0gdGhpczsKK30KKwor
Ym9vbCBSZW5kZXJSZWdpb246OmlzTGFzdFJlZ2lvbigpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlz
VmFsaWQoKSk7CisKKyAgICByZXR1cm4gbV9mbG93VGhyZWFkLT5sYXN0UmVnaW9uKCkgPT0gdGhp
czsKK30KKworYm9vbCBSZW5kZXJSZWdpb246OnNob3VsZENsaXBGbG93VGhyZWFkQ29udGVudCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpOworfQorCit2b2lkIFJlbmRl
clJlZ2lvbjo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRl
clN0eWxlKiBvbGRTdHlsZSkKK3sKKyAgICBSZW5kZXJCbG9ja0Zsb3c6OnN0eWxlRGlkQ2hhbmdl
KGRpZmYsIG9sZFN0eWxlKTsKKworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAob2xkU3R5bGUgJiYgb2xkU3R5bGUtPndyaXRpbmdNb2RlKCkgIT0gc3R5bGUo
KS53cml0aW5nTW9kZSgpKQorICAgICAgICBtX2Zsb3dUaHJlYWQtPnJlZ2lvbkNoYW5nZWRXcml0
aW5nTW9kZSh0aGlzKTsKK30KKwordm9pZCBSZW5kZXJSZWdpb246OmNvbXB1dGVPdmVyZmxvd0Zy
b21GbG93VGhyZWFkKCkKK3sKKyAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKworICAgIExheW91dFJl
Y3QgbGF5b3V0UmVjdCA9IGxheW91dE92ZXJmbG93UmVjdEZvckJveChtX2Zsb3dUaHJlYWQpOwor
ICAgIGxheW91dFJlY3Quc2V0TG9jYXRpb24oY29udGVudEJveFJlY3QoKS5sb2NhdGlvbigpICsg
KGxheW91dFJlY3QubG9jYXRpb24oKSAtIG1fZmxvd1RocmVhZFBvcnRpb25SZWN0LmxvY2F0aW9u
KCkpKTsKKworICAgIC8vIEZJWE1FOiBDb3JyZWN0bHkgYWRqdXN0IHRoZSBsYXlvdXQgb3ZlcmZs
b3cgZm9yIHdyaXRpbmcgbW9kZXMuCisgICAgYWRkTGF5b3V0T3ZlcmZsb3cobGF5b3V0UmVjdCk7
CisgICAgUmVuZGVyRmxvd1RocmVhZCogZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZCA9IGZsb3dU
aHJlYWRDb250YWluaW5nQmxvY2soKTsKKyAgICBpZiAoZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVh
ZCkKKyAgICAgICAgZW5jbG9zaW5nUmVuZGVyRmxvd1RocmVhZC0+YWRkUmVnaW9uc0xheW91dE92
ZXJmbG93KHRoaXMsIGxheW91dFJlY3QpOworCisgICAgdXBkYXRlTGF5ZXJUcmFuc2Zvcm0oKTsK
KyAgICB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKK30KKwordm9pZCBSZW5kZXJSZWdp
b246OnJlcGFpbnRGbG93VGhyZWFkQ29udGVudChjb25zdCBMYXlvdXRSZWN0JiByZXBhaW50UmVj
dCkKK3sKKyAgICByZXBhaW50Rmxvd1RocmVhZENvbnRlbnRSZWN0YW5nbGUocmVwYWludFJlY3Qs
IGZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpLCBjb250ZW50Qm94UmVjdCgpLmxvY2F0aW9uKCkpOwor
fQorCit2b2lkIFJlbmRlclJlZ2lvbjo6cmVwYWludEZsb3dUaHJlYWRDb250ZW50UmVjdGFuZ2xl
KGNvbnN0IExheW91dFJlY3QmIHJlcGFpbnRSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBmbG93VGhy
ZWFkUG9ydGlvblJlY3QsIGNvbnN0IExheW91dFBvaW50JiByZWdpb25Mb2NhdGlvbiwgY29uc3Qg
TGF5b3V0UmVjdCogZmxvd1RocmVhZFBvcnRpb25DbGlwUmVjdCkKK3sKKyAgICBBU1NFUlQoaXNW
YWxpZCgpKTsKKworICAgIC8vIFdlIG9ubHkgaGF2ZSB0byBpc3N1ZSBhIHJlcGFpbnQgaW4gdGhp
cyByZWdpb24gaWYgdGhlIHJlZ2lvbiByZWN0IGludGVyc2VjdHMgdGhlIHJlcGFpbnQgcmVjdC4K
KyAgICBMYXlvdXRSZWN0IGNsaXBwZWRSZWN0KHJlcGFpbnRSZWN0KTsKKworICAgIGlmIChmbG93
VGhyZWFkUG9ydGlvbkNsaXBSZWN0KSB7CisgICAgICAgIExheW91dFJlY3QgZmxpcHBlZEZsb3dU
aHJlYWRQb3J0aW9uQ2xpcFJlY3QoKmZsb3dUaHJlYWRQb3J0aW9uQ2xpcFJlY3QpOworICAgICAg
ICBmbG93VGhyZWFkKCktPmZsaXBGb3JXcml0aW5nTW9kZShmbGlwcGVkRmxvd1RocmVhZFBvcnRp
b25DbGlwUmVjdCk7CisgICAgICAgIGNsaXBwZWRSZWN0LmludGVyc2VjdChmbGlwcGVkRmxvd1Ro
cmVhZFBvcnRpb25DbGlwUmVjdCk7CisgICAgfQorCisgICAgaWYgKGNsaXBwZWRSZWN0LmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTGF5b3V0UmVjdCBmbGlwcGVkRmxvd1RocmVh
ZFBvcnRpb25SZWN0KGZsb3dUaHJlYWRQb3J0aW9uUmVjdCk7CisgICAgZmxvd1RocmVhZCgpLT5m
bGlwRm9yV3JpdGluZ01vZGUoZmxpcHBlZEZsb3dUaHJlYWRQb3J0aW9uUmVjdCk7IC8vIFB1dCB0
aGUgcmVnaW9uIHJlY3RzIGludG8gcGh5c2ljYWwgY29vcmRpbmF0ZXMuCisKKyAgICAvLyBQdXQg
dGhlIHJlZ2lvbiByZWN0IGludG8gdGhlIHJlZ2lvbidzIHBoeXNpY2FsIGNvb3JkaW5hdGUgc3Bh
Y2UuCisgICAgY2xpcHBlZFJlY3Quc2V0TG9jYXRpb24ocmVnaW9uTG9jYXRpb24gKyAoY2xpcHBl
ZFJlY3QubG9jYXRpb24oKSAtIGZsaXBwZWRGbG93VGhyZWFkUG9ydGlvblJlY3QubG9jYXRpb24o
KSkpOworCisgICAgLy8gTm93IHN3aXRjaCB0byB0aGUgcmVnaW9uJ3Mgd3JpdGluZyBtb2RlIGNv
b3JkaW5hdGUgc3BhY2UgYW5kIGxldCBpdCByZXBhaW50IGl0c2VsZi4KKyAgICBmbGlwRm9yV3Jp
dGluZ01vZGUoY2xpcHBlZFJlY3QpOworICAgIAorICAgIC8vIElzc3VlIHRoZSByZXBhaW50Lgor
ICAgIHJlcGFpbnRSZWN0YW5nbGUoY2xpcHBlZFJlY3QpOworfQorCit2b2lkIFJlbmRlclJlZ2lv
bjo6aW5zdGFsbEZsb3dUaHJlYWQoKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit2b2lkIFJlbmRlclJlZ2lvbjo6YXR0YWNoUmVnaW9uKCkKK3sKKyAgICBpZiAocmVuZGVyVHJl
ZUJlaW5nRGVzdHJveWVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBBIHJlZ2lv
biBzdGFydHMgb2ZmIGludmFsaWQuCisgICAgc2V0SXNWYWxpZChmYWxzZSk7CisKKyAgICAvLyBJ
bml0aWFsaXplIHRoZSBmbG93IHRocmVhZCByZWZlcmVuY2UgYW5kIGNyZWF0ZSB0aGUgZmxvdyB0
aHJlYWQgb2JqZWN0IGlmIG5lZWRlZC4KKyAgICAvLyBUaGUgZmxvdyB0aHJlYWQgbGlmZXRpbWUg
aXMgaW5mbHVlbmNlZCBieSB0aGUgbnVtYmVyIG9mIHJlZ2lvbnMgYXR0YWNoZWQgdG8gaXQsCisg
ICAgLy8gYW5kIHdlIGFyZSBhdHRhY2hpbmcgdGhlIHJlZ2lvbiB0byB0aGUgZmxvdyB0aHJlYWQu
CisgICAgaW5zdGFsbEZsb3dUaHJlYWQoKTsKKyAgICAKKyAgICBpZiAoIW1fZmxvd1RocmVhZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gT25seSBhZnRlciBhZGRpbmcgdGhlIHJlZ2lvbiB0
byB0aGUgdGhyZWFkLCB0aGUgcmVnaW9uIGlzIG1hcmtlZCB0byBiZSB2YWxpZC4KKyAgICBtX2Zs
b3dUaHJlYWQtPmFkZFJlZ2lvblRvVGhyZWFkKHRoaXMpOworfQorCit2b2lkIFJlbmRlclJlZ2lv
bjo6ZGV0YWNoUmVnaW9uKCkKK3sKKyAgICBpZiAobV9mbG93VGhyZWFkKQorICAgICAgICBtX2Zs
b3dUaHJlYWQtPnJlbW92ZVJlZ2lvbkZyb21UaHJlYWQodGhpcyk7CisgICAgbV9mbG93VGhyZWFk
ID0gbnVsbHB0cjsKK30KKworUmVuZGVyQm94UmVnaW9uSW5mbyogUmVuZGVyUmVnaW9uOjpyZW5k
ZXJCb3hSZWdpb25JbmZvKGNvbnN0IFJlbmRlckJveCogYm94KSBjb25zdAoreworICAgIEFTU0VS
VChpc1ZhbGlkKCkpOworICAgIHJldHVybiBtX3JlbmRlckJveFJlZ2lvbkluZm8uZ2V0KGJveCk7
Cit9CisKK1JlbmRlckJveFJlZ2lvbkluZm8qIFJlbmRlclJlZ2lvbjo6c2V0UmVuZGVyQm94UmVn
aW9uSW5mbyhjb25zdCBSZW5kZXJCb3gqIGJveCwgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdEluc2V0
LCBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodEluc2V0LAorICAgIGJvb2wgY29udGFpbmluZ0Jsb2Nr
Q2hhaW5Jc0luc2V0KQoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOworCisgICAgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlckJveFJlZ2lvbkluZm8+JiBib3hJbmZvID0gbV9yZW5kZXJCb3hSZWdpb25J
bmZvLmFkZChib3gsIHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyQm94UmVnaW9uSW5mbz4obG9naWNh
bExlZnRJbnNldCwgbG9naWNhbFJpZ2h0SW5zZXQsIGNvbnRhaW5pbmdCbG9ja0NoYWluSXNJbnNl
dCkpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICByZXR1cm4gYm94SW5mby5nZXQoKTsKK30KKworc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlckJveFJlZ2lvbkluZm8+IFJlbmRlclJlZ2lvbjo6dGFrZVJlbmRl
ckJveFJlZ2lvbkluZm8oY29uc3QgUmVuZGVyQm94KiBib3gpCit7CisgICAgcmV0dXJuIG1fcmVu
ZGVyQm94UmVnaW9uSW5mby50YWtlKGJveCk7Cit9CisKK3ZvaWQgUmVuZGVyUmVnaW9uOjpyZW1v
dmVSZW5kZXJCb3hSZWdpb25JbmZvKGNvbnN0IFJlbmRlckJveCYgYm94KQoreworICAgIG1fcmVu
ZGVyQm94UmVnaW9uSW5mby5yZW1vdmUoJmJveCk7Cit9CisKK3ZvaWQgUmVuZGVyUmVnaW9uOjpk
ZWxldGVBbGxSZW5kZXJCb3hSZWdpb25JbmZvKCkKK3sKKyAgICBtX3JlbmRlckJveFJlZ2lvbklu
Zm8uY2xlYXIoKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJSZWdpb246OmxvZ2ljYWxUb3BPZkZs
b3dUaHJlYWRDb250ZW50UmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0KSBjb25zdAoreworICAg
IEFTU0VSVChpc1ZhbGlkKCkpOworICAgIHJldHVybiBmbG93VGhyZWFkKCktPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkgPyByZWN0LnkoKSA6IHJlY3QueCgpOworfQorCitMYXlvdXRVbml0IFJl
bmRlclJlZ2lvbjo6bG9naWNhbEJvdHRvbU9mRmxvd1RocmVhZENvbnRlbnRSZWN0KGNvbnN0IExh
eW91dFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgcmV0
dXJuIGZsb3dUaHJlYWQoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJlY3QubWF4WSgp
IDogcmVjdC5tYXhYKCk7Cit9CisKK3ZvaWQgUmVuZGVyUmVnaW9uOjppbnNlcnRlZEludG9UcmVl
KCkKK3sKKyAgICBhdHRhY2hSZWdpb24oKTsKKyAgICBpZiAoaXNWYWxpZCgpKQorICAgICAgICBS
ZW5kZXJCbG9ja0Zsb3c6Omluc2VydGVkSW50b1RyZWUoKTsKK30KKwordm9pZCBSZW5kZXJSZWdp
b246OndpbGxCZVJlbW92ZWRGcm9tVHJlZSgpCit7CisgICAgUmVuZGVyQmxvY2tGbG93Ojp3aWxs
QmVSZW1vdmVkRnJvbVRyZWUoKTsKKworICAgIGRldGFjaFJlZ2lvbigpOworfQorCit2b2lkIFJl
bmRlclJlZ2lvbjo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWlu
TG9naWNhbFdpZHRoLCBMYXlvdXRVbml0JiBtYXhMb2dpY2FsV2lkdGgpIGNvbnN0Cit7CisgICAg
aWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW50cmlu
c2ljTG9naWNhbFdpZHRocyhtaW5Mb2dpY2FsV2lkdGgsIG1heExvZ2ljYWxXaWR0aCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtaW5Mb2dpY2FsV2lkdGggPSBtX2Zsb3dUaHJlYWQt
Pm1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpOworICAgIG1heExvZ2ljYWxXaWR0aCA9IG1fZmxv
d1RocmVhZC0+bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCk7Cit9CisKK3ZvaWQgUmVuZGVyUmVn
aW9uOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCit7CisgICAgQVNTRVJUKHByZWZl
cnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgpKTsKKworICAgIGlmICghaXNWYWxpZCgpKSB7CisgICAg
ICAgIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBDdXJyZW50bHksIHRoZSBjb2Rl
IGhhbmRsZXMgb25seSB0aGUgPGxlbmd0aD4gY2FzZSBmb3IgbWluLXdpZHRoL21heC13aWR0aC4K
KyAgICAvLyBJdCBzaG91bGQgYWxzbyBzdXBwb3J0IG90aGVyIHZhbHVlcywgbGlrZSBwZXJjZW50
YWdlLCBjYWxjIG9yIHZpZXdwb3J0IHJlbGF0aXZlLgorICAgIG1fbWluUHJlZmVycmVkTG9naWNh
bFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSAwOworCisgICAgY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOworICAgIGlmIChzdHlsZVRvVXNlLmxvZ2lj
YWxXaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZVRvVXNlLmxvZ2ljYWxXaWR0aCgpLnZhbHVlKCkg
PiAwKQorICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbWF4UHJlZmVycmVk
TG9naWNhbFdpZHRoID0gYWRqdXN0Q29udGVudEJveExvZ2ljYWxXaWR0aEZvckJveFNpemluZyhz
dHlsZVRvVXNlLmxvZ2ljYWxXaWR0aCgpLnZhbHVlKCkpOworICAgIGVsc2UKKyAgICAgICAgY29t
cHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMobV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgsIG1f
bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKTsKKworICAgIGlmIChzdHlsZVRvVXNlLmxvZ2ljYWxN
aW5XaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZVRvVXNlLmxvZ2ljYWxNaW5XaWR0aCgpLnZhbHVl
KCkgPiAwKSB7CisgICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gc3RkOjptYXgo
bV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgsIGFkanVzdENvbnRlbnRCb3hMb2dpY2FsV2lkdGhG
b3JCb3hTaXppbmcoc3R5bGVUb1VzZS5sb2dpY2FsTWluV2lkdGgoKS52YWx1ZSgpKSk7CisgICAg
ICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gc3RkOjptYXgobV9taW5QcmVmZXJyZWRM
b2dpY2FsV2lkdGgsIGFkanVzdENvbnRlbnRCb3hMb2dpY2FsV2lkdGhGb3JCb3hTaXppbmcoc3R5
bGVUb1VzZS5sb2dpY2FsTWluV2lkdGgoKS52YWx1ZSgpKSk7CisgICAgfQorCisgICAgaWYgKHN0
eWxlVG9Vc2UubG9naWNhbE1heFdpZHRoKCkuaXNGaXhlZCgpKSB7CisgICAgICAgIG1fbWF4UHJl
ZmVycmVkTG9naWNhbFdpZHRoID0gc3RkOjptaW4obV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgs
IGFkanVzdENvbnRlbnRCb3hMb2dpY2FsV2lkdGhGb3JCb3hTaXppbmcoc3R5bGVUb1VzZS5sb2dp
Y2FsTWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdp
ZHRoID0gc3RkOjptaW4obV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgsIGFkanVzdENvbnRlbnRC
b3hMb2dpY2FsV2lkdGhGb3JCb3hTaXppbmcoc3R5bGVUb1VzZS5sb2dpY2FsTWF4V2lkdGgoKS52
YWx1ZSgpKSk7CisgICAgfQorCisgICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nID0gYm9y
ZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpOworICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdp
ZHRoICs9IGJvcmRlckFuZFBhZGRpbmc7CisgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgg
Kz0gYm9yZGVyQW5kUGFkZGluZzsKKyAgICBzZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHko
ZmFsc2UpOworfQorCit2b2lkIFJlbmRlclJlZ2lvbjo6YWRqdXN0UmVnaW9uQm91bmRzRnJvbUZs
b3dUaHJlYWRQb3J0aW9uUmVjdChMYXlvdXRSZWN0JiByZWdpb25Cb3VuZHMpIGNvbnN0Cit7Cisg
ICAgTGF5b3V0UmVjdCBmbGlwcGVkRmxvd1RocmVhZFBvcnRpb25SZWN0ID0gZmxvd1RocmVhZFBv
cnRpb25SZWN0KCk7CisgICAgZmxvd1RocmVhZCgpLT5mbGlwRm9yV3JpdGluZ01vZGUoZmxpcHBl
ZEZsb3dUaHJlYWRQb3J0aW9uUmVjdCk7CisgICAgcmVnaW9uQm91bmRzLm1vdmVCeShmbGlwcGVk
Rmxvd1RocmVhZFBvcnRpb25SZWN0LmxvY2F0aW9uKCkpOworfQorCit2b2lkIFJlbmRlclJlZ2lv
bjo6ZW5zdXJlT3ZlcmZsb3dGb3JCb3goY29uc3QgUmVuZGVyQm94KiBib3gsIFJlZlB0cjxSZW5k
ZXJPdmVyZmxvdz4mIG92ZXJmbG93LCBib29sIGZvcmNlQ3JlYXRpb24pCit7CisgICAgQVNTRVJU
KG1fZmxvd1RocmVhZC0+cmVuZGVyUmVnaW9uTGlzdCgpLmNvbnRhaW5zKHRoaXMpKTsKKyAgICBB
U1NFUlQoaXNWYWxpZCgpKTsKKworICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGJveEluZm8gPSBy
ZW5kZXJCb3hSZWdpb25JbmZvKGJveCk7CisgICAgaWYgKCFib3hJbmZvICYmICFmb3JjZUNyZWF0
aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYm94SW5mbyAmJiBib3hJbmZvLT5vdmVy
ZmxvdygpKSB7CisgICAgICAgIG92ZXJmbG93ID0gYm94SW5mby0+b3ZlcmZsb3coKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBMYXlvdXRSZWN0IGJvcmRlckJveCA9IGJveC0+
Ym9yZGVyQm94UmVjdEluUmVnaW9uKHRoaXMpOworICAgIExheW91dFJlY3QgY2xpZW50Qm94Owor
ICAgIEFTU0VSVChtX2Zsb3dUaHJlYWQtPm9iamVjdFNob3VsZEZyYWdtZW50SW5GbG93UmVnaW9u
KGJveCwgdGhpcykpOworCisgICAgaWYgKCFib3JkZXJCb3guaXNFbXB0eSgpKSB7CisgICAgICAg
IGJvcmRlckJveCA9IHJlY3RGbG93UG9ydGlvbkZvckJveChib3gsIGJvcmRlckJveCk7CisgICAg
ICAgIAorICAgICAgICBjbGllbnRCb3ggPSBib3gtPmNsaWVudEJveFJlY3RJblJlZ2lvbih0aGlz
KTsKKyAgICAgICAgY2xpZW50Qm94ID0gcmVjdEZsb3dQb3J0aW9uRm9yQm94KGJveCwgY2xpZW50
Qm94KTsKKyAgICAgICAgCisgICAgICAgIG1fZmxvd1RocmVhZC0+ZmxpcEZvcldyaXRpbmdNb2Rl
TG9jYWxDb29yZGluYXRlcyhib3JkZXJCb3gpOworICAgICAgICBtX2Zsb3dUaHJlYWQtPmZsaXBG
b3JXcml0aW5nTW9kZUxvY2FsQ29vcmRpbmF0ZXMoY2xpZW50Qm94KTsKKyAgICB9CisKKyAgICBp
ZiAoYm94SW5mbykgeworICAgICAgICBib3hJbmZvLT5jcmVhdGVPdmVyZmxvdyhjbGllbnRCb3gs
IGJvcmRlckJveCk7CisgICAgICAgIG92ZXJmbG93ID0gYm94SW5mby0+b3ZlcmZsb3coKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgb3ZlcmZsb3cgPSBhZG9wdFJlZihuZXcgUmVuZGVyT3ZlcmZsb3co
Y2xpZW50Qm94LCBib3JkZXJCb3gpKTsKK30KKworTGF5b3V0UmVjdCBSZW5kZXJSZWdpb246OnJl
Y3RGbG93UG9ydGlvbkZvckJveChjb25zdCBSZW5kZXJCb3gqIGJveCwgY29uc3QgTGF5b3V0UmVj
dCYgcmVjdCkgY29uc3QKK3sKKyAgICBMYXlvdXRSZWN0IG1hcHBlZFJlY3QgPSBtX2Zsb3dUaHJl
YWQtPm1hcEZyb21Mb2NhbFRvRmxvd1RocmVhZChib3gsIHJlY3QpOworCisgICAgUmVuZGVyUmVn
aW9uKiBzdGFydFJlZ2lvbiA9IG51bGxwdHI7CisgICAgUmVuZGVyUmVnaW9uKiBlbmRSZWdpb24g
PSBudWxscHRyOworICAgIGlmIChtX2Zsb3dUaHJlYWQtPmdldFJlZ2lvblJhbmdlRm9yQm94KGJv
eCwgc3RhcnRSZWdpb24sIGVuZFJlZ2lvbikpIHsKKyAgICAgICAgaWYgKGZsb3dUaHJlYWQoKS0+
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgeworICAgICAgICAgICAgaWYgKHRoaXMgIT0gc3Rh
cnRSZWdpb24pCisgICAgICAgICAgICAgICAgbWFwcGVkUmVjdC5zaGlmdFlFZGdlVG8oc3RkOjpt
YXg8TGF5b3V0VW5pdD4obG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCksIG1hcHBlZFJl
Y3QueSgpKSk7CisgICAgICAgICAgICBpZiAodGhpcyAhPSBlbmRSZWdpb24pCisgICAgICAgICAg
ICAgICAgbWFwcGVkUmVjdC5zZXRIZWlnaHQoc3RkOjptYXg8TGF5b3V0VW5pdD4oMCwgc3RkOjpt
aW48TGF5b3V0VW5pdD4obG9naWNhbEJvdHRvbUZvckZsb3dUaHJlYWRDb250ZW50KCkgLSBtYXBw
ZWRSZWN0LnkoKSwgbWFwcGVkUmVjdC5oZWlnaHQoKSkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzICE9IHN0YXJ0UmVnaW9uKQorICAgICAgICAgICAgICAgIG1hcHBl
ZFJlY3Quc2hpZnRYRWRnZVRvKHN0ZDo6bWF4PExheW91dFVuaXQ+KGxvZ2ljYWxUb3BGb3JGbG93
VGhyZWFkQ29udGVudCgpLCBtYXBwZWRSZWN0LngoKSkpOworICAgICAgICAgICAgaWYgKHRoaXMg
IT0gZW5kUmVnaW9uKQorICAgICAgICAgICAgICAgIG1hcHBlZFJlY3Quc2V0V2lkdGgoc3RkOjpt
YXg8TGF5b3V0VW5pdD4oMCwgc3RkOjptaW48TGF5b3V0VW5pdD4obG9naWNhbEJvdHRvbUZvckZs
b3dUaHJlYWRDb250ZW50KCkgLSBtYXBwZWRSZWN0LngoKSwgbWFwcGVkUmVjdC53aWR0aCgpKSkp
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1fZmxvd1RocmVhZC0+bWFwRnJvbUZs
b3dUaHJlYWRUb0xvY2FsKGJveCwgbWFwcGVkUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyUmVnaW9u
OjphZGRMYXlvdXRPdmVyZmxvd0ZvckJveChjb25zdCBSZW5kZXJCb3gqIGJveCwgY29uc3QgTGF5
b3V0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIFJlZlB0cjxSZW5kZXJPdmVyZmxvdz4gcmVnaW9uT3ZlcmZsb3c7CisgICAgZW5z
dXJlT3ZlcmZsb3dGb3JCb3goYm94LCByZWdpb25PdmVyZmxvdywgZmFsc2UpOworCisgICAgaWYg
KCFyZWdpb25PdmVyZmxvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVnaW9uT3ZlcmZsb3ct
PmFkZExheW91dE92ZXJmbG93KHJlY3QpOworfQorCit2b2lkIFJlbmRlclJlZ2lvbjo6YWRkVmlz
dWFsT3ZlcmZsb3dGb3JCb3goY29uc3QgUmVuZGVyQm94KiBib3gsIGNvbnN0IExheW91dFJlY3Qm
IHJlY3QpCit7CisgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBSZWZQdHI8UmVuZGVyT3ZlcmZsb3c+IHJlZ2lvbk92ZXJmbG93OworICAgIGVuc3VyZU92ZXJm
bG93Rm9yQm94KGJveCwgcmVnaW9uT3ZlcmZsb3csIGZhbHNlKTsKKworICAgIGlmICghcmVnaW9u
T3ZlcmZsb3cpCisgICAgICAgIHJldHVybjsKKworICAgIExheW91dFJlY3QgZmxpcHBlZFJlY3Qg
PSByZWN0OworICAgIGZsb3dUaHJlYWQoKS0+ZmxpcEZvcldyaXRpbmdNb2RlTG9jYWxDb29yZGlu
YXRlcyhmbGlwcGVkUmVjdCk7CisgICAgcmVnaW9uT3ZlcmZsb3ctPmFkZFZpc3VhbE92ZXJmbG93
KGZsaXBwZWRSZWN0KTsKK30KKworTGF5b3V0UmVjdCBSZW5kZXJSZWdpb246OmxheW91dE92ZXJm
bG93UmVjdEZvckJveChjb25zdCBSZW5kZXJCb3gqIGJveCkKK3sKKyAgICBSZWZQdHI8UmVuZGVy
T3ZlcmZsb3c+IG92ZXJmbG93OworICAgIGVuc3VyZU92ZXJmbG93Rm9yQm94KGJveCwgb3ZlcmZs
b3csIHRydWUpOworICAgIAorICAgIEFTU0VSVChvdmVyZmxvdyk7CisgICAgcmV0dXJuIG92ZXJm
bG93LT5sYXlvdXRPdmVyZmxvd1JlY3QoKTsKK30KKworTGF5b3V0UmVjdCBSZW5kZXJSZWdpb246
OnZpc3VhbE92ZXJmbG93UmVjdEZvckJveChjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgYm94
KQoreworICAgIGlmIChpczxSZW5kZXJJbmxpbmU+KGJveCkpIHsKKyAgICAgICAgY29uc3QgUmVu
ZGVySW5saW5lJiBpbmxpbmVCb3ggPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KGJveCk7CisgICAg
ICAgIHJldHVybiBpbmxpbmVCb3gubGluZXNWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94SW5SZWdp
b24odGhpcyk7CisgICAgfQorCisgICAgaWYgKGlzPFJlbmRlckJveD4oYm94KSkgeworICAgICAg
ICBSZWZQdHI8UmVuZGVyT3ZlcmZsb3c+IG92ZXJmbG93OworICAgICAgICBlbnN1cmVPdmVyZmxv
d0ZvckJveCgmZG93bmNhc3Q8UmVuZGVyQm94Pihib3gpLCBvdmVyZmxvdywgdHJ1ZSk7CisKKyAg
ICAgICAgQVNTRVJUKG92ZXJmbG93KTsKKyAgICAgICAgcmV0dXJuIG92ZXJmbG93LT52aXN1YWxP
dmVyZmxvd1JlY3QoKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gTGF5b3V0UmVjdCgpOworfQorCisvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgZm9y
IHdyaXRpbmcgbW9kZXMuCitMYXlvdXRSZWN0IFJlbmRlclJlZ2lvbjo6bGF5b3V0T3ZlcmZsb3dS
ZWN0Rm9yQm94Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVyQm94KiBib3gpCit7CisgICAgLy8g
T25seSBwcm9wYWdhdGUgaW50ZXJpb3IgbGF5b3V0IG92ZXJmbG93IGlmIHdlIGRvbid0IGNsaXAg
aXQuCisgICAgTGF5b3V0UmVjdCByZWN0ID0gYm94LT5ib3JkZXJCb3hSZWN0SW5SZWdpb24odGhp
cyk7CisgICAgcmVjdCA9IHJlY3RGbG93UG9ydGlvbkZvckJveChib3gsIHJlY3QpOworICAgIGlm
ICghYm94LT5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICAgICAgcmVjdC51bml0ZShsYXlvdXRPdmVy
Zmxvd1JlY3RGb3JCb3goYm94KSk7CisKKyAgICBib29sIGhhc1RyYW5zZm9ybSA9IGJveC0+aGFz
VHJhbnNmb3JtKCk7CisgICAgaWYgKGJveC0+aXNJbkZsb3dQb3NpdGlvbmVkKCkgfHwgaGFzVHJh
bnNmb3JtKSB7CisgICAgICAgIGlmIChoYXNUcmFuc2Zvcm0pCisgICAgICAgICAgICByZWN0ID0g
Ym94LT5sYXllcigpLT5jdXJyZW50VHJhbnNmb3JtKCkubWFwUmVjdChyZWN0KTsKKworICAgICAg
ICBpZiAoYm94LT5pc0luRmxvd1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgIHJlY3QubW92ZShi
b3gtPm9mZnNldEZvckluRmxvd1Bvc2l0aW9uKCkpOworICAgIH0KKworICAgIHJldHVybiByZWN0
OworfQorCitMYXlvdXRSZWN0IFJlbmRlclJlZ2lvbjo6dmlzdWFsT3ZlcmZsb3dSZWN0Rm9yQm94
Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QmIGJveCkKK3sKKyAgICBM
YXlvdXRSZWN0IHJlY3QgPSB2aXN1YWxPdmVyZmxvd1JlY3RGb3JCb3goYm94KTsKKyAgICBmbG93
VGhyZWFkKCktPmZsaXBGb3JXcml0aW5nTW9kZUxvY2FsQ29vcmRpbmF0ZXMocmVjdCk7CisKKyAg
ICByZXR1cm4gcmVjdDsKK30KKworQ3VycmVudFJlbmRlclJlZ2lvbk1haW50YWluZXI6OkN1cnJl
bnRSZW5kZXJSZWdpb25NYWludGFpbmVyKFJlbmRlclJlZ2lvbiYgcmVnaW9uKQorICAgIDogbV9y
ZWdpb24ocmVnaW9uKQoreworICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSByZWdp
b24uZmxvd1RocmVhZCgpOworICAgIC8vIEEgZmxvdyB0aHJlYWQgY2FuIGhhdmUgb25seSBvbmUg
Y3VycmVudCByZWdpb24uCisgICAgQVNTRVJUKCFmbG93VGhyZWFkLT5jdXJyZW50UmVnaW9uKCkp
OworICAgIGZsb3dUaHJlYWQtPnNldEN1cnJlbnRSZWdpb25NYWludGFpbmVyKHRoaXMpOworfQor
CitDdXJyZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lcjo6fkN1cnJlbnRSZW5kZXJSZWdpb25NYWlu
dGFpbmVyKCkKK3sKKyAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gbV9yZWdpb24u
Zmxvd1RocmVhZCgpOworICAgIGZsb3dUaHJlYWQtPnNldEN1cnJlbnRSZWdpb25NYWludGFpbmVy
KG51bGxwdHIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RnJhZ21lbnRDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGcmFnbWVudENvbnRhaW5lci5jcHAJKHJldmlzaW9uIDIyMjQ2MikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudENvbnRhaW5lci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDE0ICsyOCwxNCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKKyNpbmNsdWRlICJSZW5kZXJGcmFnbWVudENvbnRh
aW5lci5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSGl0VGVz
dFJlc3VsdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJMYXlvdXRSZXBhaW50
ZXIuaCIKICNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUgIlJlbmRlckJveFJlZ2lvbkluZm8u
aCIKKyNpbmNsdWRlICJSZW5kZXJCb3hGcmFnbWVudEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJG
bG93VGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVy
SXRlcmF0b3IuaCIKQEAgLTQ1LDI2ICs0NSwyNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVJlbmRlclJlZ2lvbjo6UmVuZGVyUmVnaW9uKEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxl
JiYgc3R5bGUsIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQpCitSZW5kZXJGcmFnbWVudENv
bnRhaW5lcjo6UmVuZGVyRnJhZ21lbnRDb250YWluZXIoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVy
U3R5bGUmJiBzdHlsZSwgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCkKICAgICA6IFJlbmRl
ckJsb2NrRmxvdyhlbGVtZW50LCBXVEZNb3ZlKHN0eWxlKSkKICAgICAsIG1fZmxvd1RocmVhZChm
bG93VGhyZWFkKQogICAgICwgbV9pc1ZhbGlkKGZhbHNlKQogewogfQogCi1SZW5kZXJSZWdpb246
OlJlbmRlclJlZ2lvbihEb2N1bWVudCYgZG9jdW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUsIFJl
bmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQpCitSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6UmVu
ZGVyRnJhZ21lbnRDb250YWluZXIoRG9jdW1lbnQmIGRvY3VtZW50LCBSZW5kZXJTdHlsZSYmIHN0
eWxlLCBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkKQogICAgIDogUmVuZGVyQmxvY2tGbG93
KGRvY3VtZW50LCBXVEZNb3ZlKHN0eWxlKSkKICAgICAsIG1fZmxvd1RocmVhZChmbG93VGhyZWFk
KQogICAgICwgbV9pc1ZhbGlkKGZhbHNlKQogewogfQogCi1MYXlvdXRQb2ludCBSZW5kZXJSZWdp
b246Om1hcFJlZ2lvblBvaW50SW50b0Zsb3dUaHJlYWRDb29yZGluYXRlcyhjb25zdCBMYXlvdXRQ
b2ludCYgcG9pbnQpCitMYXlvdXRQb2ludCBSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6bWFwRnJh
Z21lbnRQb2ludEludG9GbG93VGhyZWFkQ29vcmRpbmF0ZXMoY29uc3QgTGF5b3V0UG9pbnQmIHBv
aW50KQogewotICAgIC8vIEFzc3VtaW5nIHRoZSBwb2ludCBpcyByZWxhdGl2ZSB0byB0aGUgcmVn
aW9uIGJsb2NrLCAzIGNhc2VzIHdpbGwgYmUgY29uc2lkZXJlZDoKKyAgICAvLyBBc3N1bWluZyB0
aGUgcG9pbnQgaXMgcmVsYXRpdmUgdG8gdGhlIGZyYWdtZW50IGJsb2NrLCAzIGNhc2VzIHdpbGwg
YmUgY29uc2lkZXJlZDoKICAgICAvLyBhKSB0b3AgbWFyZ2luLCBwYWRkaW5nIG9yIGJvcmRlci4K
ICAgICAvLyBiKSBib3R0b20gbWFyZ2luLCBwYWRkaW5nIG9yIGJvcmRlci4KLSAgICAvLyBjKSBu
b24tY29udGVudCByZWdpb24gYXJlYS4KKyAgICAvLyBjKSBub24tY29udGVudCBmcmFnbWVudCBh
cmVhLgogCiAgICAgTGF5b3V0VW5pdCBwb2ludExvZ2ljYWxUb3AoaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IHBvaW50LnkoKSA6IHBvaW50LngoKSk7CiAgICAgTGF5b3V0VW5pdCBwb2ludExv
Z2ljYWxMZWZ0KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBwb2ludC54KCkgOiBwb2ludC55
KCkpOwpAQCAtOTksMzcgKzk5LDM3IEBAIExheW91dFBvaW50IFJlbmRlclJlZ2lvbjo6bWFwUmVn
aW9uUG9pbnQKICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBvaW50SW5U
aHJlYWQgOiBwb2ludEluVGhyZWFkLnRyYW5zcG9zZWRQb2ludCgpOwogfQogCi1WaXNpYmxlUG9z
aXRpb24gUmVuZGVyUmVnaW9uOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBw
b2ludCwgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb24pCitWaXNpYmxlUG9zaXRpb24gUmVuZGVy
RnJhZ21lbnRDb250YWluZXI6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBv
aW50LCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQpCiB7Ci0gICAgaWYg
KCFpc1ZhbGlkKCkgfHwgIW1fZmxvd1RocmVhZC0+Zmlyc3RDaGlsZCgpKSAvLyBjaGVja2luZyBm
b3IgZW1wdHkgcmVnaW9uIGJsb2Nrcy4KLSAgICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpwb3Np
dGlvbkZvclBvaW50KHBvaW50LCByZWdpb24pOworICAgIGlmICghaXNWYWxpZCgpIHx8ICFtX2Zs
b3dUaHJlYWQtPmZpcnN0Q2hpbGQoKSkgLy8gY2hlY2tpbmcgZm9yIGVtcHR5IGZyYWdtZW50IGJs
b2Nrcy4KKyAgICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpwb3NpdGlvbkZvclBvaW50KHBvaW50
LCBmcmFnbWVudCk7CiAKLSAgICByZXR1cm4gbV9mbG93VGhyZWFkLT5wb3NpdGlvbkZvclBvaW50
KG1hcFJlZ2lvblBvaW50SW50b0Zsb3dUaHJlYWRDb29yZGluYXRlcyhwb2ludCksIHRoaXMpOwor
ICAgIHJldHVybiBtX2Zsb3dUaHJlYWQtPnBvc2l0aW9uRm9yUG9pbnQobWFwRnJhZ21lbnRQb2lu
dEludG9GbG93VGhyZWFkQ29vcmRpbmF0ZXMocG9pbnQpLCB0aGlzKTsKIH0KIAotTGF5b3V0VW5p
dCBSZW5kZXJSZWdpb246OnBhZ2VMb2dpY2FsV2lkdGgoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5k
ZXJGcmFnbWVudENvbnRhaW5lcjo6cGFnZUxvZ2ljYWxXaWR0aCgpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKGlzVmFsaWQoKSk7CiAgICAgcmV0dXJuIG1fZmxvd1RocmVhZC0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IGNvbnRlbnRXaWR0aCgpIDogY29udGVudEhlaWdodCgpOwogfQogCi1MYXlv
dXRVbml0IFJlbmRlclJlZ2lvbjo6cGFnZUxvZ2ljYWxIZWlnaHQoKSBjb25zdAorTGF5b3V0VW5p
dCBSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6cGFnZUxvZ2ljYWxIZWlnaHQoKSBjb25zdAogewog
ICAgIEFTU0VSVChpc1ZhbGlkKCkpOwogICAgIHJldHVybiBtX2Zsb3dUaHJlYWQtPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyBjb250ZW50SGVpZ2h0KCkgOiBjb250ZW50V2lkdGgoKTsKIH0K
IAotTGF5b3V0VW5pdCBSZW5kZXJSZWdpb246OmxvZ2ljYWxIZWlnaHRPZkFsbEZsb3dUaHJlYWRD
b250ZW50KCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyRnJhZ21lbnRDb250YWluZXI6OmxvZ2lj
YWxIZWlnaHRPZkFsbEZsb3dUaHJlYWRDb250ZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gcGFn
ZUxvZ2ljYWxIZWlnaHQoKTsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJSZWdpb246OmZsb3dUaHJl
YWRQb3J0aW9uT3ZlcmZsb3dSZWN0KCkKK0xheW91dFJlY3QgUmVuZGVyRnJhZ21lbnRDb250YWlu
ZXI6OmZsb3dUaHJlYWRQb3J0aW9uT3ZlcmZsb3dSZWN0KCkKIHsKLSAgICByZXR1cm4gb3ZlcmZs
b3dSZWN0Rm9yRmxvd1RocmVhZFBvcnRpb24oZmxvd1RocmVhZFBvcnRpb25SZWN0KCksIGlzRmly
c3RSZWdpb24oKSwgaXNMYXN0UmVnaW9uKCksIFZpc3VhbE92ZXJmbG93KTsKKyAgICByZXR1cm4g
b3ZlcmZsb3dSZWN0Rm9yRmxvd1RocmVhZFBvcnRpb24oZmxvd1RocmVhZFBvcnRpb25SZWN0KCks
IGlzRmlyc3RGcmFnbWVudCgpLCBpc0xhc3RGcmFnbWVudCgpLCBWaXN1YWxPdmVyZmxvdyk7CiB9
CiAKLUxheW91dFBvaW50IFJlbmRlclJlZ2lvbjo6Zmxvd1RocmVhZFBvcnRpb25Mb2NhdGlvbigp
IGNvbnN0CitMYXlvdXRQb2ludCBSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6Zmxvd1RocmVhZFBv
cnRpb25Mb2NhdGlvbigpIGNvbnN0CiB7CiAgICAgTGF5b3V0UG9pbnQgcG9ydGlvbkxvY2F0aW9u
OwogICAgIExheW91dFJlY3QgcG9ydGlvblJlY3QgPSBmbG93VGhyZWFkUG9ydGlvblJlY3QoKTsK
QEAgLTE0NCw3ICsxNDQsNyBAQCBMYXlvdXRQb2ludCBSZW5kZXJSZWdpb246OmZsb3dUaHJlYWRQ
b3J0CiAgICAgcmV0dXJuIHBvcnRpb25Mb2NhdGlvbjsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJS
ZWdpb246Om92ZXJmbG93UmVjdEZvckZsb3dUaHJlYWRQb3J0aW9uKGNvbnN0IExheW91dFJlY3Qm
IGZsb3dUaHJlYWRQb3J0aW9uUmVjdCwgYm9vbCBpc0ZpcnN0UG9ydGlvbiwgYm9vbCBpc0xhc3RQ
b3J0aW9uLCBPdmVyZmxvd1R5cGUgb3ZlcmZsb3dUeXBlKQorTGF5b3V0UmVjdCBSZW5kZXJGcmFn
bWVudENvbnRhaW5lcjo6b3ZlcmZsb3dSZWN0Rm9yRmxvd1RocmVhZFBvcnRpb24oY29uc3QgTGF5
b3V0UmVjdCYgZmxvd1RocmVhZFBvcnRpb25SZWN0LCBib29sIGlzRmlyc3RQb3J0aW9uLCBib29s
IGlzTGFzdFBvcnRpb24sIE92ZXJmbG93VHlwZSBvdmVyZmxvd1R5cGUpCiB7CiAgICAgQVNTRVJU
KGlzVmFsaWQoKSk7CiAgICAgaWYgKHNob3VsZENsaXBGbG93VGhyZWFkQ29udGVudCgpKQpAQCAt
MTcwLDMxICsxNzAsMzEgQEAgTGF5b3V0UmVjdCBSZW5kZXJSZWdpb246Om92ZXJmbG93UmVjdEZv
cgogICAgIHJldHVybiBjbGlwUmVjdDsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJSZWdpb246OnBh
Z2VMb2dpY2FsVG9wRm9yT2Zmc2V0KExheW91dFVuaXQgLyogb2Zmc2V0ICovKSBjb25zdAorTGF5
b3V0VW5pdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6cGFnZUxvZ2ljYWxUb3BGb3JPZmZzZXQo
TGF5b3V0VW5pdCAvKiBvZmZzZXQgKi8pIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZsb3dUaHJlYWQo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpLnko
KSA6IGZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpLngoKTsKIH0KIAotYm9vbCBSZW5kZXJSZWdpb246
OmlzRmlyc3RSZWdpb24oKSBjb25zdAorYm9vbCBSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6aXNG
aXJzdEZyYWdtZW50KCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKIAotICAgIHJl
dHVybiBtX2Zsb3dUaHJlYWQtPmZpcnN0UmVnaW9uKCkgPT0gdGhpczsKKyAgICByZXR1cm4gbV9m
bG93VGhyZWFkLT5maXJzdEZyYWdtZW50KCkgPT0gdGhpczsKIH0KIAotYm9vbCBSZW5kZXJSZWdp
b246OmlzTGFzdFJlZ2lvbigpIGNvbnN0Citib29sIFJlbmRlckZyYWdtZW50Q29udGFpbmVyOjpp
c0xhc3RGcmFnbWVudCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CiAKLSAgICBy
ZXR1cm4gbV9mbG93VGhyZWFkLT5sYXN0UmVnaW9uKCkgPT0gdGhpczsKKyAgICByZXR1cm4gbV9m
bG93VGhyZWFkLT5sYXN0RnJhZ21lbnQoKSA9PSB0aGlzOwogfQogCi1ib29sIFJlbmRlclJlZ2lv
bjo6c2hvdWxkQ2xpcEZsb3dUaHJlYWRDb250ZW50KCkgY29uc3QKK2Jvb2wgUmVuZGVyRnJhZ21l
bnRDb250YWluZXI6OnNob3VsZENsaXBGbG93VGhyZWFkQ29udGVudCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpOwogfQogCi12b2lkIFJlbmRlclJlZ2lvbjo6c3R5bGVE
aWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHls
ZSkKK3ZvaWQgUmVuZGVyRnJhZ21lbnRDb250YWluZXI6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlm
ZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CiAgICAgUmVuZGVy
QmxvY2tGbG93OjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CiAKQEAgLTIwMiwxMCAr
MjAyLDEwIEBAIHZvaWQgUmVuZGVyUmVnaW9uOjpzdHlsZURpZENoYW5nZShTdHlsZUQKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKG9sZFN0eWxlICYmIG9sZFN0eWxlLT53cml0aW5nTW9kZSgp
ICE9IHN0eWxlKCkud3JpdGluZ01vZGUoKSkKLSAgICAgICAgbV9mbG93VGhyZWFkLT5yZWdpb25D
aGFuZ2VkV3JpdGluZ01vZGUodGhpcyk7CisgICAgICAgIG1fZmxvd1RocmVhZC0+ZnJhZ21lbnRD
aGFuZ2VkV3JpdGluZ01vZGUodGhpcyk7CiB9CiAKLXZvaWQgUmVuZGVyUmVnaW9uOjpjb21wdXRl
T3ZlcmZsb3dGcm9tRmxvd1RocmVhZCgpCit2b2lkIFJlbmRlckZyYWdtZW50Q29udGFpbmVyOjpj
b21wdXRlT3ZlcmZsb3dGcm9tRmxvd1RocmVhZCgpCiB7CiAgICAgQVNTRVJUKGlzVmFsaWQoKSk7
CiAKQEAgLTIxNiwyMiArMjE2LDIyIEBAIHZvaWQgUmVuZGVyUmVnaW9uOjpjb21wdXRlT3ZlcmZs
b3dGcm9tRmwKICAgICBhZGRMYXlvdXRPdmVyZmxvdyhsYXlvdXRSZWN0KTsKICAgICBSZW5kZXJG
bG93VGhyZWFkKiBlbmNsb3NpbmdSZW5kZXJGbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5p
bmdCbG9jaygpOwogICAgIGlmIChlbmNsb3NpbmdSZW5kZXJGbG93VGhyZWFkKQotICAgICAgICBl
bmNsb3NpbmdSZW5kZXJGbG93VGhyZWFkLT5hZGRSZWdpb25zTGF5b3V0T3ZlcmZsb3codGhpcywg
bGF5b3V0UmVjdCk7CisgICAgICAgIGVuY2xvc2luZ1JlbmRlckZsb3dUaHJlYWQtPmFkZEZyYWdt
ZW50c0xheW91dE92ZXJmbG93KHRoaXMsIGxheW91dFJlY3QpOwogCiAgICAgdXBkYXRlTGF5ZXJU
cmFuc2Zvcm0oKTsKICAgICB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKIH0KIAotdm9p
ZCBSZW5kZXJSZWdpb246OnJlcGFpbnRGbG93VGhyZWFkQ29udGVudChjb25zdCBMYXlvdXRSZWN0
JiByZXBhaW50UmVjdCkKK3ZvaWQgUmVuZGVyRnJhZ21lbnRDb250YWluZXI6OnJlcGFpbnRGbG93
VGhyZWFkQ29udGVudChjb25zdCBMYXlvdXRSZWN0JiByZXBhaW50UmVjdCkKIHsKICAgICByZXBh
aW50Rmxvd1RocmVhZENvbnRlbnRSZWN0YW5nbGUocmVwYWludFJlY3QsIGZsb3dUaHJlYWRQb3J0
aW9uUmVjdCgpLCBjb250ZW50Qm94UmVjdCgpLmxvY2F0aW9uKCkpOwogfQogCi12b2lkIFJlbmRl
clJlZ2lvbjo6cmVwYWludEZsb3dUaHJlYWRDb250ZW50UmVjdGFuZ2xlKGNvbnN0IExheW91dFJl
Y3QmIHJlcGFpbnRSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBmbG93VGhyZWFkUG9ydGlvblJlY3Qs
IGNvbnN0IExheW91dFBvaW50JiByZWdpb25Mb2NhdGlvbiwgY29uc3QgTGF5b3V0UmVjdCogZmxv
d1RocmVhZFBvcnRpb25DbGlwUmVjdCkKK3ZvaWQgUmVuZGVyRnJhZ21lbnRDb250YWluZXI6OnJl
cGFpbnRGbG93VGhyZWFkQ29udGVudFJlY3RhbmdsZShjb25zdCBMYXlvdXRSZWN0JiByZXBhaW50
UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZmxvd1RocmVhZFBvcnRpb25SZWN0LCBjb25zdCBMYXlv
dXRQb2ludCYgZnJhZ21lbnRMb2NhdGlvbiwgY29uc3QgTGF5b3V0UmVjdCogZmxvd1RocmVhZFBv
cnRpb25DbGlwUmVjdCkKIHsKICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKIAotICAgIC8vIFdlIG9u
bHkgaGF2ZSB0byBpc3N1ZSBhIHJlcGFpbnQgaW4gdGhpcyByZWdpb24gaWYgdGhlIHJlZ2lvbiBy
ZWN0IGludGVyc2VjdHMgdGhlIHJlcGFpbnQgcmVjdC4KKyAgICAvLyBXZSBvbmx5IGhhdmUgdG8g
aXNzdWUgYSByZXBhaW50IGluIHRoaXMgZnJhZ21lbnQgaWYgdGhlIGZyYWdtZW50IHJlY3QgaW50
ZXJzZWN0cyB0aGUgcmVwYWludCByZWN0LgogICAgIExheW91dFJlY3QgY2xpcHBlZFJlY3QocmVw
YWludFJlY3QpOwogCiAgICAgaWYgKGZsb3dUaHJlYWRQb3J0aW9uQ2xpcFJlY3QpIHsKQEAgLTI0
NCwxMDcgKzI0NCwxMDcgQEAgdm9pZCBSZW5kZXJSZWdpb246OnJlcGFpbnRGbG93VGhyZWFkQ29u
dAogICAgICAgICByZXR1cm47CiAKICAgICBMYXlvdXRSZWN0IGZsaXBwZWRGbG93VGhyZWFkUG9y
dGlvblJlY3QoZmxvd1RocmVhZFBvcnRpb25SZWN0KTsKLSAgICBmbG93VGhyZWFkKCktPmZsaXBG
b3JXcml0aW5nTW9kZShmbGlwcGVkRmxvd1RocmVhZFBvcnRpb25SZWN0KTsgLy8gUHV0IHRoZSBy
ZWdpb24gcmVjdHMgaW50byBwaHlzaWNhbCBjb29yZGluYXRlcy4KKyAgICBmbG93VGhyZWFkKCkt
PmZsaXBGb3JXcml0aW5nTW9kZShmbGlwcGVkRmxvd1RocmVhZFBvcnRpb25SZWN0KTsgLy8gUHV0
IHRoZSBmcmFnbWVudCByZWN0cyBpbnRvIHBoeXNpY2FsIGNvb3JkaW5hdGVzLgogCi0gICAgLy8g
UHV0IHRoZSByZWdpb24gcmVjdCBpbnRvIHRoZSByZWdpb24ncyBwaHlzaWNhbCBjb29yZGluYXRl
IHNwYWNlLgotICAgIGNsaXBwZWRSZWN0LnNldExvY2F0aW9uKHJlZ2lvbkxvY2F0aW9uICsgKGNs
aXBwZWRSZWN0LmxvY2F0aW9uKCkgLSBmbGlwcGVkRmxvd1RocmVhZFBvcnRpb25SZWN0LmxvY2F0
aW9uKCkpKTsKKyAgICAvLyBQdXQgdGhlIGZyYWdtZW50IHJlY3QgaW50byB0aGUgZnJhZ21lbnQn
cyBwaHlzaWNhbCBjb29yZGluYXRlIHNwYWNlLgorICAgIGNsaXBwZWRSZWN0LnNldExvY2F0aW9u
KGZyYWdtZW50TG9jYXRpb24gKyAoY2xpcHBlZFJlY3QubG9jYXRpb24oKSAtIGZsaXBwZWRGbG93
VGhyZWFkUG9ydGlvblJlY3QubG9jYXRpb24oKSkpOwogCi0gICAgLy8gTm93IHN3aXRjaCB0byB0
aGUgcmVnaW9uJ3Mgd3JpdGluZyBtb2RlIGNvb3JkaW5hdGUgc3BhY2UgYW5kIGxldCBpdCByZXBh
aW50IGl0c2VsZi4KKyAgICAvLyBOb3cgc3dpdGNoIHRvIHRoZSBmcmFnbWVudCdzIHdyaXRpbmcg
bW9kZSBjb29yZGluYXRlIHNwYWNlIGFuZCBsZXQgaXQgcmVwYWludCBpdHNlbGYuCiAgICAgZmxp
cEZvcldyaXRpbmdNb2RlKGNsaXBwZWRSZWN0KTsKICAgICAKICAgICAvLyBJc3N1ZSB0aGUgcmVw
YWludC4KICAgICByZXBhaW50UmVjdGFuZ2xlKGNsaXBwZWRSZWN0KTsKIH0KIAotdm9pZCBSZW5k
ZXJSZWdpb246Omluc3RhbGxGbG93VGhyZWFkKCkKK3ZvaWQgUmVuZGVyRnJhZ21lbnRDb250YWlu
ZXI6Omluc3RhbGxGbG93VGhyZWFkKCkKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0K
IAotdm9pZCBSZW5kZXJSZWdpb246OmF0dGFjaFJlZ2lvbigpCit2b2lkIFJlbmRlckZyYWdtZW50
Q29udGFpbmVyOjphdHRhY2hGcmFnbWVudCgpCiB7CiAgICAgaWYgKHJlbmRlclRyZWVCZWluZ0Rl
c3Ryb3llZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgLy8gQSByZWdpb24gc3RhcnRz
IG9mZiBpbnZhbGlkLgorICAgIC8vIEEgZnJhZ21lbnQgc3RhcnRzIG9mZiBpbnZhbGlkLgogICAg
IHNldElzVmFsaWQoZmFsc2UpOwogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZmxvdyB0aHJlYWQg
cmVmZXJlbmNlIGFuZCBjcmVhdGUgdGhlIGZsb3cgdGhyZWFkIG9iamVjdCBpZiBuZWVkZWQuCi0g
ICAgLy8gVGhlIGZsb3cgdGhyZWFkIGxpZmV0aW1lIGlzIGluZmx1ZW5jZWQgYnkgdGhlIG51bWJl
ciBvZiByZWdpb25zIGF0dGFjaGVkIHRvIGl0LAotICAgIC8vIGFuZCB3ZSBhcmUgYXR0YWNoaW5n
IHRoZSByZWdpb24gdG8gdGhlIGZsb3cgdGhyZWFkLgorICAgIC8vIFRoZSBmbG93IHRocmVhZCBs
aWZldGltZSBpcyBpbmZsdWVuY2VkIGJ5IHRoZSBudW1iZXIgb2YgZnJhZ21lbnRzIGF0dGFjaGVk
IHRvIGl0LAorICAgIC8vIGFuZCB3ZSBhcmUgYXR0YWNoaW5nIHRoZSBmcmFnbWVudCB0byB0aGUg
ZmxvdyB0aHJlYWQuCiAgICAgaW5zdGFsbEZsb3dUaHJlYWQoKTsKICAgICAKICAgICBpZiAoIW1f
Zmxvd1RocmVhZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gT25seSBhZnRlciBhZGRpbmcg
dGhlIHJlZ2lvbiB0byB0aGUgdGhyZWFkLCB0aGUgcmVnaW9uIGlzIG1hcmtlZCB0byBiZSB2YWxp
ZC4KLSAgICBtX2Zsb3dUaHJlYWQtPmFkZFJlZ2lvblRvVGhyZWFkKHRoaXMpOworICAgIC8vIE9u
bHkgYWZ0ZXIgYWRkaW5nIHRoZSBmcmFnbWVudCB0byB0aGUgdGhyZWFkLCB0aGUgZnJhZ21lbnQg
aXMgbWFya2VkIHRvIGJlIHZhbGlkLgorICAgIG1fZmxvd1RocmVhZC0+YWRkRnJhZ21lbnRUb1Ro
cmVhZCh0aGlzKTsKIH0KIAotdm9pZCBSZW5kZXJSZWdpb246OmRldGFjaFJlZ2lvbigpCit2b2lk
IFJlbmRlckZyYWdtZW50Q29udGFpbmVyOjpkZXRhY2hGcmFnbWVudCgpCiB7CiAgICAgaWYgKG1f
Zmxvd1RocmVhZCkKLSAgICAgICAgbV9mbG93VGhyZWFkLT5yZW1vdmVSZWdpb25Gcm9tVGhyZWFk
KHRoaXMpOworICAgICAgICBtX2Zsb3dUaHJlYWQtPnJlbW92ZUZyYWdtZW50RnJvbVRocmVhZCh0
aGlzKTsKICAgICBtX2Zsb3dUaHJlYWQgPSBudWxscHRyOwogfQogCi1SZW5kZXJCb3hSZWdpb25J
bmZvKiBSZW5kZXJSZWdpb246OnJlbmRlckJveFJlZ2lvbkluZm8oY29uc3QgUmVuZGVyQm94KiBi
b3gpIGNvbnN0CitSZW5kZXJCb3hGcmFnbWVudEluZm8qIFJlbmRlckZyYWdtZW50Q29udGFpbmVy
OjpyZW5kZXJCb3hGcmFnbWVudEluZm8oY29uc3QgUmVuZGVyQm94KiBib3gpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKGlzVmFsaWQoKSk7Ci0gICAgcmV0dXJuIG1fcmVuZGVyQm94UmVnaW9uSW5mby5n
ZXQoYm94KTsKKyAgICByZXR1cm4gbV9yZW5kZXJCb3hGcmFnbWVudEluZm8uZ2V0KGJveCk7CiB9
CiAKLVJlbmRlckJveFJlZ2lvbkluZm8qIFJlbmRlclJlZ2lvbjo6c2V0UmVuZGVyQm94UmVnaW9u
SW5mbyhjb25zdCBSZW5kZXJCb3gqIGJveCwgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdEluc2V0LCBM
YXlvdXRVbml0IGxvZ2ljYWxSaWdodEluc2V0LAorUmVuZGVyQm94RnJhZ21lbnRJbmZvKiBSZW5k
ZXJGcmFnbWVudENvbnRhaW5lcjo6c2V0UmVuZGVyQm94RnJhZ21lbnRJbmZvKGNvbnN0IFJlbmRl
ckJveCogYm94LCBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0SW5zZXQsIExheW91dFVuaXQgbG9naWNh
bFJpZ2h0SW5zZXQsCiAgICAgYm9vbCBjb250YWluaW5nQmxvY2tDaGFpbklzSW5zZXQpCiB7CiAg
ICAgQVNTRVJUKGlzVmFsaWQoKSk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQm94UmVn
aW9uSW5mbz4mIGJveEluZm8gPSBtX3JlbmRlckJveFJlZ2lvbkluZm8uYWRkKGJveCwgc3RkOjpt
YWtlX3VuaXF1ZTxSZW5kZXJCb3hSZWdpb25JbmZvPihsb2dpY2FsTGVmdEluc2V0LCBsb2dpY2Fs
UmlnaHRJbnNldCwgY29udGFpbmluZ0Jsb2NrQ2hhaW5Jc0luc2V0KSkuaXRlcmF0b3ItPnZhbHVl
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCb3hGcmFnbWVudEluZm8+JiBib3hJbmZvID0g
bV9yZW5kZXJCb3hGcmFnbWVudEluZm8uYWRkKGJveCwgc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJC
b3hGcmFnbWVudEluZm8+KGxvZ2ljYWxMZWZ0SW5zZXQsIGxvZ2ljYWxSaWdodEluc2V0LCBjb250
YWluaW5nQmxvY2tDaGFpbklzSW5zZXQpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgcmV0dXJuIGJv
eEluZm8uZ2V0KCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCb3hSZWdpb25JbmZvPiBS
ZW5kZXJSZWdpb246OnRha2VSZW5kZXJCb3hSZWdpb25JbmZvKGNvbnN0IFJlbmRlckJveCogYm94
KQorc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJveEZyYWdtZW50SW5mbz4gUmVuZGVyRnJhZ21lbnRD
b250YWluZXI6OnRha2VSZW5kZXJCb3hGcmFnbWVudEluZm8oY29uc3QgUmVuZGVyQm94KiBib3gp
CiB7Ci0gICAgcmV0dXJuIG1fcmVuZGVyQm94UmVnaW9uSW5mby50YWtlKGJveCk7CisgICAgcmV0
dXJuIG1fcmVuZGVyQm94RnJhZ21lbnRJbmZvLnRha2UoYm94KTsKIH0KIAotdm9pZCBSZW5kZXJS
ZWdpb246OnJlbW92ZVJlbmRlckJveFJlZ2lvbkluZm8oY29uc3QgUmVuZGVyQm94JiBib3gpCit2
b2lkIFJlbmRlckZyYWdtZW50Q29udGFpbmVyOjpyZW1vdmVSZW5kZXJCb3hGcmFnbWVudEluZm8o
Y29uc3QgUmVuZGVyQm94JiBib3gpCiB7Ci0gICAgbV9yZW5kZXJCb3hSZWdpb25JbmZvLnJlbW92
ZSgmYm94KTsKKyAgICBtX3JlbmRlckJveEZyYWdtZW50SW5mby5yZW1vdmUoJmJveCk7CiB9CiAK
LXZvaWQgUmVuZGVyUmVnaW9uOjpkZWxldGVBbGxSZW5kZXJCb3hSZWdpb25JbmZvKCkKK3ZvaWQg
UmVuZGVyRnJhZ21lbnRDb250YWluZXI6OmRlbGV0ZUFsbFJlbmRlckJveEZyYWdtZW50SW5mbygp
CiB7Ci0gICAgbV9yZW5kZXJCb3hSZWdpb25JbmZvLmNsZWFyKCk7CisgICAgbV9yZW5kZXJCb3hG
cmFnbWVudEluZm8uY2xlYXIoKTsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJSZWdpb246OmxvZ2lj
YWxUb3BPZkZsb3dUaHJlYWRDb250ZW50UmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0KSBjb25z
dAorTGF5b3V0VW5pdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6bG9naWNhbFRvcE9mRmxvd1Ro
cmVhZENvbnRlbnRSZWN0KGNvbnN0IExheW91dFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKGlzVmFsaWQoKSk7CiAgICAgcmV0dXJuIGZsb3dUaHJlYWQoKS0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IHJlY3QueSgpIDogcmVjdC54KCk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVy
UmVnaW9uOjpsb2dpY2FsQm90dG9tT2ZGbG93VGhyZWFkQ29udGVudFJlY3QoY29uc3QgTGF5b3V0
UmVjdCYgcmVjdCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyRnJhZ21lbnRDb250YWluZXI6Omxv
Z2ljYWxCb3R0b21PZkZsb3dUaHJlYWRDb250ZW50UmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0
KSBjb25zdAogewogICAgIEFTU0VSVChpc1ZhbGlkKCkpOwogICAgIHJldHVybiBmbG93VGhyZWFk
KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyByZWN0Lm1heFkoKSA6IHJlY3QubWF4WCgp
OwogfQogCi12b2lkIFJlbmRlclJlZ2lvbjo6aW5zZXJ0ZWRJbnRvVHJlZSgpCit2b2lkIFJlbmRl
ckZyYWdtZW50Q29udGFpbmVyOjppbnNlcnRlZEludG9UcmVlKCkKIHsKLSAgICBhdHRhY2hSZWdp
b24oKTsKKyAgICBhdHRhY2hGcmFnbWVudCgpOwogICAgIGlmIChpc1ZhbGlkKCkpCiAgICAgICAg
IFJlbmRlckJsb2NrRmxvdzo6aW5zZXJ0ZWRJbnRvVHJlZSgpOwogfQogCi12b2lkIFJlbmRlclJl
Z2lvbjo6d2lsbEJlUmVtb3ZlZEZyb21UcmVlKCkKK3ZvaWQgUmVuZGVyRnJhZ21lbnRDb250YWlu
ZXI6OndpbGxCZVJlbW92ZWRGcm9tVHJlZSgpCiB7CiAgICAgUmVuZGVyQmxvY2tGbG93Ojp3aWxs
QmVSZW1vdmVkRnJvbVRyZWUoKTsKIAotICAgIGRldGFjaFJlZ2lvbigpOworICAgIGRldGFjaEZy
YWdtZW50KCk7CiB9CiAKLXZvaWQgUmVuZGVyUmVnaW9uOjpjb21wdXRlSW50cmluc2ljTG9naWNh
bFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsIExheW91dFVuaXQmIG1heExvZ2lj
YWxXaWR0aCkgY29uc3QKK3ZvaWQgUmVuZGVyRnJhZ21lbnRDb250YWluZXI6OmNvbXB1dGVJbnRy
aW5zaWNMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5p
dCYgbWF4TG9naWNhbFdpZHRoKSBjb25zdAogewogICAgIGlmICghaXNWYWxpZCgpKSB7CiAgICAg
ICAgIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMobWluTG9n
aWNhbFdpZHRoLCBtYXhMb2dpY2FsV2lkdGgpOwpAQCAtMzU1LDcgKzM1NSw3IEBAIHZvaWQgUmVu
ZGVyUmVnaW9uOjpjb21wdXRlSW50cmluc2ljTG9naWMKICAgICBtYXhMb2dpY2FsV2lkdGggPSBt
X2Zsb3dUaHJlYWQtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpOwogfQogCi12b2lkIFJlbmRl
clJlZ2lvbjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQordm9pZCBSZW5kZXJGcmFn
bWVudENvbnRhaW5lcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQogewogICAgIEFT
U0VSVChwcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSk7CiAKQEAgLTM5MCwxOSArMzkwLDE5
IEBAIHZvaWQgUmVuZGVyUmVnaW9uOjpjb21wdXRlUHJlZmVycmVkTG9naWMKICAgICBzZXRQcmVm
ZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoZmFsc2UpOwogfQogCi12b2lkIFJlbmRlclJlZ2lvbjo6
YWRqdXN0UmVnaW9uQm91bmRzRnJvbUZsb3dUaHJlYWRQb3J0aW9uUmVjdChMYXlvdXRSZWN0JiBy
ZWdpb25Cb3VuZHMpIGNvbnN0Cit2b2lkIFJlbmRlckZyYWdtZW50Q29udGFpbmVyOjphZGp1c3RG
cmFnbWVudEJvdW5kc0Zyb21GbG93VGhyZWFkUG9ydGlvblJlY3QoTGF5b3V0UmVjdCYgZnJhZ21l
bnRCb3VuZHMpIGNvbnN0CiB7CiAgICAgTGF5b3V0UmVjdCBmbGlwcGVkRmxvd1RocmVhZFBvcnRp
b25SZWN0ID0gZmxvd1RocmVhZFBvcnRpb25SZWN0KCk7CiAgICAgZmxvd1RocmVhZCgpLT5mbGlw
Rm9yV3JpdGluZ01vZGUoZmxpcHBlZEZsb3dUaHJlYWRQb3J0aW9uUmVjdCk7Ci0gICAgcmVnaW9u
Qm91bmRzLm1vdmVCeShmbGlwcGVkRmxvd1RocmVhZFBvcnRpb25SZWN0LmxvY2F0aW9uKCkpOwor
ICAgIGZyYWdtZW50Qm91bmRzLm1vdmVCeShmbGlwcGVkRmxvd1RocmVhZFBvcnRpb25SZWN0Lmxv
Y2F0aW9uKCkpOwogfQogCi12b2lkIFJlbmRlclJlZ2lvbjo6ZW5zdXJlT3ZlcmZsb3dGb3JCb3go
Y29uc3QgUmVuZGVyQm94KiBib3gsIFJlZlB0cjxSZW5kZXJPdmVyZmxvdz4mIG92ZXJmbG93LCBi
b29sIGZvcmNlQ3JlYXRpb24pCit2b2lkIFJlbmRlckZyYWdtZW50Q29udGFpbmVyOjplbnN1cmVP
dmVyZmxvd0ZvckJveChjb25zdCBSZW5kZXJCb3gqIGJveCwgUmVmUHRyPFJlbmRlck92ZXJmbG93
PiYgb3ZlcmZsb3csIGJvb2wgZm9yY2VDcmVhdGlvbikKIHsKLSAgICBBU1NFUlQobV9mbG93VGhy
ZWFkLT5yZW5kZXJSZWdpb25MaXN0KCkuY29udGFpbnModGhpcykpOworICAgIEFTU0VSVChtX2Zs
b3dUaHJlYWQtPnJlbmRlckZyYWdtZW50Q29udGFpbmVyTGlzdCgpLmNvbnRhaW5zKHRoaXMpKTsK
ICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKIAotICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGJveElu
Zm8gPSByZW5kZXJCb3hSZWdpb25JbmZvKGJveCk7CisgICAgUmVuZGVyQm94RnJhZ21lbnRJbmZv
KiBib3hJbmZvID0gcmVuZGVyQm94RnJhZ21lbnRJbmZvKGJveCk7CiAgICAgaWYgKCFib3hJbmZv
ICYmICFmb3JjZUNyZWF0aW9uKQogICAgICAgICByZXR1cm47CiAKQEAgLTQxMSwxNCArNDExLDE0
IEBAIHZvaWQgUmVuZGVyUmVnaW9uOjplbnN1cmVPdmVyZmxvd0ZvckJveCgKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKLSAgICBMYXlvdXRSZWN0IGJvcmRlckJveCA9IGJveC0+Ym9yZGVy
Qm94UmVjdEluUmVnaW9uKHRoaXMpOworICAgIExheW91dFJlY3QgYm9yZGVyQm94ID0gYm94LT5i
b3JkZXJCb3hSZWN0SW5GcmFnbWVudCh0aGlzKTsKICAgICBMYXlvdXRSZWN0IGNsaWVudEJveDsK
LSAgICBBU1NFUlQobV9mbG93VGhyZWFkLT5vYmplY3RTaG91bGRGcmFnbWVudEluRmxvd1JlZ2lv
bihib3gsIHRoaXMpKTsKKyAgICBBU1NFUlQobV9mbG93VGhyZWFkLT5vYmplY3RTaG91bGRGcmFn
bWVudEluRmxvd0ZyYWdtZW50KGJveCwgdGhpcykpOwogCiAgICAgaWYgKCFib3JkZXJCb3guaXNF
bXB0eSgpKSB7CiAgICAgICAgIGJvcmRlckJveCA9IHJlY3RGbG93UG9ydGlvbkZvckJveChib3gs
IGJvcmRlckJveCk7CiAgICAgICAgIAotICAgICAgICBjbGllbnRCb3ggPSBib3gtPmNsaWVudEJv
eFJlY3RJblJlZ2lvbih0aGlzKTsKKyAgICAgICAgY2xpZW50Qm94ID0gYm94LT5jbGllbnRCb3hS
ZWN0SW5GcmFnbWVudCh0aGlzKTsKICAgICAgICAgY2xpZW50Qm94ID0gcmVjdEZsb3dQb3J0aW9u
Rm9yQm94KGJveCwgY2xpZW50Qm94KTsKICAgICAgICAgCiAgICAgICAgIG1fZmxvd1RocmVhZC0+
ZmxpcEZvcldyaXRpbmdNb2RlTG9jYWxDb29yZGluYXRlcyhib3JkZXJCb3gpOwpAQCAtNDMyLDIy
ICs0MzIsMjIgQEAgdm9pZCBSZW5kZXJSZWdpb246OmVuc3VyZU92ZXJmbG93Rm9yQm94KAogICAg
ICAgICBvdmVyZmxvdyA9IGFkb3B0UmVmKG5ldyBSZW5kZXJPdmVyZmxvdyhjbGllbnRCb3gsIGJv
cmRlckJveCkpOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlclJlZ2lvbjo6cmVjdEZsb3dQb3J0aW9u
Rm9yQm94KGNvbnN0IFJlbmRlckJveCogYm94LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0KSBjb25z
dAorTGF5b3V0UmVjdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lcjo6cmVjdEZsb3dQb3J0aW9uRm9y
Qm94KGNvbnN0IFJlbmRlckJveCogYm94LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0KSBjb25zdAog
ewogICAgIExheW91dFJlY3QgbWFwcGVkUmVjdCA9IG1fZmxvd1RocmVhZC0+bWFwRnJvbUxvY2Fs
VG9GbG93VGhyZWFkKGJveCwgcmVjdCk7CiAKLSAgICBSZW5kZXJSZWdpb24qIHN0YXJ0UmVnaW9u
ID0gbnVsbHB0cjsKLSAgICBSZW5kZXJSZWdpb24qIGVuZFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAg
aWYgKG1fZmxvd1RocmVhZC0+Z2V0UmVnaW9uUmFuZ2VGb3JCb3goYm94LCBzdGFydFJlZ2lvbiwg
ZW5kUmVnaW9uKSkgeworICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBzdGFydEZyYWdtZW50
ID0gbnVsbHB0cjsKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZW5kRnJhZ21lbnQgPSBu
dWxscHRyOworICAgIGlmIChtX2Zsb3dUaHJlYWQtPmdldEZyYWdtZW50UmFuZ2VGb3JCb3goYm94
LCBzdGFydEZyYWdtZW50LCBlbmRGcmFnbWVudCkpIHsKICAgICAgICAgaWYgKGZsb3dUaHJlYWQo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewotICAgICAgICAgICAgaWYgKHRoaXMgIT0g
c3RhcnRSZWdpb24pCisgICAgICAgICAgICBpZiAodGhpcyAhPSBzdGFydEZyYWdtZW50KQogICAg
ICAgICAgICAgICAgIG1hcHBlZFJlY3Quc2hpZnRZRWRnZVRvKHN0ZDo6bWF4PExheW91dFVuaXQ+
KGxvZ2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgpLCBtYXBwZWRSZWN0LnkoKSkpOwotICAg
ICAgICAgICAgaWYgKHRoaXMgIT0gZW5kUmVnaW9uKQorICAgICAgICAgICAgaWYgKHRoaXMgIT0g
ZW5kRnJhZ21lbnQpCiAgICAgICAgICAgICAgICAgbWFwcGVkUmVjdC5zZXRIZWlnaHQoc3RkOjpt
YXg8TGF5b3V0VW5pdD4oMCwgc3RkOjptaW48TGF5b3V0VW5pdD4obG9naWNhbEJvdHRvbUZvckZs
b3dUaHJlYWRDb250ZW50KCkgLSBtYXBwZWRSZWN0LnkoKSwgbWFwcGVkUmVjdC5oZWlnaHQoKSkp
KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICh0aGlzICE9IHN0YXJ0UmVnaW9u
KQorICAgICAgICAgICAgaWYgKHRoaXMgIT0gc3RhcnRGcmFnbWVudCkKICAgICAgICAgICAgICAg
ICBtYXBwZWRSZWN0LnNoaWZ0WEVkZ2VUbyhzdGQ6Om1heDxMYXlvdXRVbml0Pihsb2dpY2FsVG9w
Rm9yRmxvd1RocmVhZENvbnRlbnQoKSwgbWFwcGVkUmVjdC54KCkpKTsKLSAgICAgICAgICAgIGlm
ICh0aGlzICE9IGVuZFJlZ2lvbikKKyAgICAgICAgICAgIGlmICh0aGlzICE9IGVuZEZyYWdtZW50
KQogICAgICAgICAgICAgICAgIG1hcHBlZFJlY3Quc2V0V2lkdGgoc3RkOjptYXg8TGF5b3V0VW5p
dD4oMCwgc3RkOjptaW48TGF5b3V0VW5pdD4obG9naWNhbEJvdHRvbUZvckZsb3dUaHJlYWRDb250
ZW50KCkgLSBtYXBwZWRSZWN0LngoKSwgbWFwcGVkUmVjdC53aWR0aCgpKSkpOwogICAgICAgICB9
CiAgICAgfQpAQCAtNDU1LDM3ICs0NTUsMzcgQEAgTGF5b3V0UmVjdCBSZW5kZXJSZWdpb246OnJl
Y3RGbG93UG9ydGlvbgogICAgIHJldHVybiBtX2Zsb3dUaHJlYWQtPm1hcEZyb21GbG93VGhyZWFk
VG9Mb2NhbChib3gsIG1hcHBlZFJlY3QpOwogfQogCi12b2lkIFJlbmRlclJlZ2lvbjo6YWRkTGF5
b3V0T3ZlcmZsb3dGb3JCb3goY29uc3QgUmVuZGVyQm94KiBib3gsIGNvbnN0IExheW91dFJlY3Qm
IHJlY3QpCit2b2lkIFJlbmRlckZyYWdtZW50Q29udGFpbmVyOjphZGRMYXlvdXRPdmVyZmxvd0Zv
ckJveChjb25zdCBSZW5kZXJCb3gqIGJveCwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkKIHsKICAg
ICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxSZW5k
ZXJPdmVyZmxvdz4gcmVnaW9uT3ZlcmZsb3c7Ci0gICAgZW5zdXJlT3ZlcmZsb3dGb3JCb3goYm94
LCByZWdpb25PdmVyZmxvdywgZmFsc2UpOworICAgIFJlZlB0cjxSZW5kZXJPdmVyZmxvdz4gZnJh
Z21lbnRPdmVyZmxvdzsKKyAgICBlbnN1cmVPdmVyZmxvd0ZvckJveChib3gsIGZyYWdtZW50T3Zl
cmZsb3csIGZhbHNlKTsKIAotICAgIGlmICghcmVnaW9uT3ZlcmZsb3cpCisgICAgaWYgKCFmcmFn
bWVudE92ZXJmbG93KQogICAgICAgICByZXR1cm47CiAKLSAgICByZWdpb25PdmVyZmxvdy0+YWRk
TGF5b3V0T3ZlcmZsb3cocmVjdCk7CisgICAgZnJhZ21lbnRPdmVyZmxvdy0+YWRkTGF5b3V0T3Zl
cmZsb3cocmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyUmVnaW9uOjphZGRWaXN1YWxPdmVyZmxvd0Zv
ckJveChjb25zdCBSZW5kZXJCb3gqIGJveCwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkKK3ZvaWQg
UmVuZGVyRnJhZ21lbnRDb250YWluZXI6OmFkZFZpc3VhbE92ZXJmbG93Rm9yQm94KGNvbnN0IFJl
bmRlckJveCogYm94LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0KQogewogICAgIGlmIChyZWN0Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFJlbmRlck92ZXJmbG93PiBy
ZWdpb25PdmVyZmxvdzsKLSAgICBlbnN1cmVPdmVyZmxvd0ZvckJveChib3gsIHJlZ2lvbk92ZXJm
bG93LCBmYWxzZSk7CisgICAgUmVmUHRyPFJlbmRlck92ZXJmbG93PiBmcmFnbWVudE92ZXJmbG93
OworICAgIGVuc3VyZU92ZXJmbG93Rm9yQm94KGJveCwgZnJhZ21lbnRPdmVyZmxvdywgZmFsc2Up
OwogCi0gICAgaWYgKCFyZWdpb25PdmVyZmxvdykKKyAgICBpZiAoIWZyYWdtZW50T3ZlcmZsb3cp
CiAgICAgICAgIHJldHVybjsKIAogICAgIExheW91dFJlY3QgZmxpcHBlZFJlY3QgPSByZWN0Owog
ICAgIGZsb3dUaHJlYWQoKS0+ZmxpcEZvcldyaXRpbmdNb2RlTG9jYWxDb29yZGluYXRlcyhmbGlw
cGVkUmVjdCk7Ci0gICAgcmVnaW9uT3ZlcmZsb3ctPmFkZFZpc3VhbE92ZXJmbG93KGZsaXBwZWRS
ZWN0KTsKKyAgICBmcmFnbWVudE92ZXJmbG93LT5hZGRWaXN1YWxPdmVyZmxvdyhmbGlwcGVkUmVj
dCk7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyUmVnaW9uOjpsYXlvdXRPdmVyZmxvd1JlY3RGb3JC
b3goY29uc3QgUmVuZGVyQm94KiBib3gpCitMYXlvdXRSZWN0IFJlbmRlckZyYWdtZW50Q29udGFp
bmVyOjpsYXlvdXRPdmVyZmxvd1JlY3RGb3JCb3goY29uc3QgUmVuZGVyQm94KiBib3gpCiB7CiAg
ICAgUmVmUHRyPFJlbmRlck92ZXJmbG93PiBvdmVyZmxvdzsKICAgICBlbnN1cmVPdmVyZmxvd0Zv
ckJveChib3gsIG92ZXJmbG93LCB0cnVlKTsKQEAgLTQ5NCwxMSArNDk0LDExIEBAIExheW91dFJl
Y3QgUmVuZGVyUmVnaW9uOjpsYXlvdXRPdmVyZmxvd1IKICAgICByZXR1cm4gb3ZlcmZsb3ctPmxh
eW91dE92ZXJmbG93UmVjdCgpOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlclJlZ2lvbjo6dmlzdWFs
T3ZlcmZsb3dSZWN0Rm9yQm94KGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiBib3gpCitMYXlv
dXRSZWN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyOjp2aXN1YWxPdmVyZmxvd1JlY3RGb3JCb3go
Y29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QmIGJveCkKIHsKICAgICBpZiAoaXM8UmVuZGVySW5s
aW5lPihib3gpKSB7CiAgICAgICAgIGNvbnN0IFJlbmRlcklubGluZSYgaW5saW5lQm94ID0gZG93
bmNhc3Q8UmVuZGVySW5saW5lPihib3gpOwotICAgICAgICByZXR1cm4gaW5saW5lQm94LmxpbmVz
VmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveEluUmVnaW9uKHRoaXMpOworICAgICAgICByZXR1cm4g
aW5saW5lQm94LmxpbmVzVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveEluRnJhZ21lbnQodGhpcyk7
CiAgICAgfQogCiAgICAgaWYgKGlzPFJlbmRlckJveD4oYm94KSkgewpAQCAtNTE0LDEwICs1MTQs
MTAgQEAgTGF5b3V0UmVjdCBSZW5kZXJSZWdpb246OnZpc3VhbE92ZXJmbG93UgogfQogCiAvLyBG
SVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgZm9yIHdyaXRpbmcgbW9kZXMuCi1MYXlvdXRSZWN0IFJl
bmRlclJlZ2lvbjo6bGF5b3V0T3ZlcmZsb3dSZWN0Rm9yQm94Rm9yUHJvcGFnYXRpb24oY29uc3Qg
UmVuZGVyQm94KiBib3gpCitMYXlvdXRSZWN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyOjpsYXlv
dXRPdmVyZmxvd1JlY3RGb3JCb3hGb3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJCb3gqIGJveCkK
IHsKICAgICAvLyBPbmx5IHByb3BhZ2F0ZSBpbnRlcmlvciBsYXlvdXQgb3ZlcmZsb3cgaWYgd2Ug
ZG9uJ3QgY2xpcCBpdC4KLSAgICBMYXlvdXRSZWN0IHJlY3QgPSBib3gtPmJvcmRlckJveFJlY3RJ
blJlZ2lvbih0aGlzKTsKKyAgICBMYXlvdXRSZWN0IHJlY3QgPSBib3gtPmJvcmRlckJveFJlY3RJ
bkZyYWdtZW50KHRoaXMpOwogICAgIHJlY3QgPSByZWN0Rmxvd1BvcnRpb25Gb3JCb3goYm94LCBy
ZWN0KTsKICAgICBpZiAoIWJveC0+aGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIHJlY3QudW5p
dGUobGF5b3V0T3ZlcmZsb3dSZWN0Rm9yQm94KGJveCkpOwpAQCAtNTM0LDcgKzUzNCw3IEBAIExh
eW91dFJlY3QgUmVuZGVyUmVnaW9uOjpsYXlvdXRPdmVyZmxvd1IKICAgICByZXR1cm4gcmVjdDsK
IH0KIAotTGF5b3V0UmVjdCBSZW5kZXJSZWdpb246OnZpc3VhbE92ZXJmbG93UmVjdEZvckJveEZv
clByb3BhZ2F0aW9uKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiBib3gpCitMYXlvdXRSZWN0
IFJlbmRlckZyYWdtZW50Q29udGFpbmVyOjp2aXN1YWxPdmVyZmxvd1JlY3RGb3JCb3hGb3JQcm9w
YWdhdGlvbihjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgYm94KQogewogICAgIExheW91dFJl
Y3QgcmVjdCA9IHZpc3VhbE92ZXJmbG93UmVjdEZvckJveChib3gpOwogICAgIGZsb3dUaHJlYWQo
KS0+ZmxpcEZvcldyaXRpbmdNb2RlTG9jYWxDb29yZGluYXRlcyhyZWN0KTsKQEAgLTU0MiwxOSAr
NTQyLDE5IEBAIExheW91dFJlY3QgUmVuZGVyUmVnaW9uOjp2aXN1YWxPdmVyZmxvd1IKICAgICBy
ZXR1cm4gcmVjdDsKIH0KIAotQ3VycmVudFJlbmRlclJlZ2lvbk1haW50YWluZXI6OkN1cnJlbnRS
ZW5kZXJSZWdpb25NYWludGFpbmVyKFJlbmRlclJlZ2lvbiYgcmVnaW9uKQotICAgIDogbV9yZWdp
b24ocmVnaW9uKQorQ3VycmVudFJlbmRlckZyYWdtZW50Q29udGFpbmVyTWFpbnRhaW5lcjo6Q3Vy
cmVudFJlbmRlckZyYWdtZW50Q29udGFpbmVyTWFpbnRhaW5lcihSZW5kZXJGcmFnbWVudENvbnRh
aW5lciYgZnJhZ21lbnQpCisgICAgOiBtX2ZyYWdtZW50KGZyYWdtZW50KQogewotICAgIFJlbmRl
ckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSByZWdpb24uZmxvd1RocmVhZCgpOwotICAgIC8vIEEg
ZmxvdyB0aHJlYWQgY2FuIGhhdmUgb25seSBvbmUgY3VycmVudCByZWdpb24uCi0gICAgQVNTRVJU
KCFmbG93VGhyZWFkLT5jdXJyZW50UmVnaW9uKCkpOwotICAgIGZsb3dUaHJlYWQtPnNldEN1cnJl
bnRSZWdpb25NYWludGFpbmVyKHRoaXMpOworICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJl
YWQgPSBmcmFnbWVudC5mbG93VGhyZWFkKCk7CisgICAgLy8gQSBmbG93IHRocmVhZCBjYW4gaGF2
ZSBvbmx5IG9uZSBjdXJyZW50IGZyYWdtZW50LgorICAgIEFTU0VSVCghZmxvd1RocmVhZC0+Y3Vy
cmVudEZyYWdtZW50KCkpOworICAgIGZsb3dUaHJlYWQtPnNldEN1cnJlbnRGcmFnbWVudE1haW50
YWluZXIodGhpcyk7CiB9CiAKLUN1cnJlbnRSZW5kZXJSZWdpb25NYWludGFpbmVyOjp+Q3VycmVu
dFJlbmRlclJlZ2lvbk1haW50YWluZXIoKQorQ3VycmVudFJlbmRlckZyYWdtZW50Q29udGFpbmVy
TWFpbnRhaW5lcjo6fkN1cnJlbnRSZW5kZXJGcmFnbWVudENvbnRhaW5lck1haW50YWluZXIoKQog
ewotICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBtX3JlZ2lvbi5mbG93VGhyZWFk
KCk7Ci0gICAgZmxvd1RocmVhZC0+c2V0Q3VycmVudFJlZ2lvbk1haW50YWluZXIobnVsbHB0cik7
CisgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IG1fZnJhZ21lbnQuZmxvd1RocmVh
ZCgpOworICAgIGZsb3dUaHJlYWQtPnNldEN1cnJlbnRGcmFnbWVudE1haW50YWluZXIobnVsbHB0
cik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGcmFnbWVudENvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudENvbnRhaW5lci5oCShyZXZpc2lvbiAyMjI0
NjIpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uaDoyMjI0NjIp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRDb250YWluZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwor
ICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJMYXllckZyYWdtZW50LmgiCisjaW5j
bHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCisjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCisj
aW5jbHVkZSA8bWVtb3J5PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEVsZW1lbnQ7
CitjbGFzcyBSZW5kZXJCb3g7CitjbGFzcyBSZW5kZXJCb3hSZWdpb25JbmZvOworY2xhc3MgUmVu
ZGVyRmxvd1RocmVhZDsKKworY2xhc3MgUmVuZGVyUmVnaW9uIDogcHVibGljIFJlbmRlckJsb2Nr
RmxvdyB7CitwdWJsaWM6CisgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2Us
IGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldEZs
b3dUaHJlYWRQb3J0aW9uUmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0KSB7IG1fZmxvd1RocmVh
ZFBvcnRpb25SZWN0ID0gcmVjdDsgfQorICAgIExheW91dFJlY3QgZmxvd1RocmVhZFBvcnRpb25S
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9mbG93VGhyZWFkUG9ydGlvblJlY3Q7IH0KKyAgICBMYXlv
dXRSZWN0IGZsb3dUaHJlYWRQb3J0aW9uT3ZlcmZsb3dSZWN0KCk7CisKKyAgICBMYXlvdXRQb2lu
dCBmbG93VGhyZWFkUG9ydGlvbkxvY2F0aW9uKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQg
YXR0YWNoUmVnaW9uKCk7CisgICAgdmlydHVhbCB2b2lkIGRldGFjaFJlZ2lvbigpOworCisgICAg
UmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmxvd1RocmVh
ZDsgfQorCisgICAgLy8gVmFsaWQgcmVnaW9ucyBkbyBub3QgY3JlYXRlIGNpcmN1bGFyIGRlcGVu
ZGVuY2llcyB3aXRoIG90aGVyIGZsb3dzLgorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNWYWxpZDsgfQorICAgIHZvaWQgc2V0SXNWYWxpZChib29sIHZhbGlkKSB7IG1faXNW
YWxpZCA9IHZhbGlkOyB9CisKKyAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiByZW5kZXJCb3hSZWdp
b25JbmZvKGNvbnN0IFJlbmRlckJveCopIGNvbnN0OworICAgIFJlbmRlckJveFJlZ2lvbkluZm8q
IHNldFJlbmRlckJveFJlZ2lvbkluZm8oY29uc3QgUmVuZGVyQm94KiwgTGF5b3V0VW5pdCBsb2dp
Y2FsTGVmdEluc2V0LCBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodEluc2V0LAorICAgICAgICBib29s
IGNvbnRhaW5pbmdCbG9ja0NoYWluSXNJbnNldCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
ckJveFJlZ2lvbkluZm8+IHRha2VSZW5kZXJCb3hSZWdpb25JbmZvKGNvbnN0IFJlbmRlckJveCop
OworICAgIHZvaWQgcmVtb3ZlUmVuZGVyQm94UmVnaW9uSW5mbyhjb25zdCBSZW5kZXJCb3gmKTsK
KworICAgIHZvaWQgZGVsZXRlQWxsUmVuZGVyQm94UmVnaW9uSW5mbygpOworCisgICAgYm9vbCBp
c0ZpcnN0UmVnaW9uKCkgY29uc3Q7CisgICAgYm9vbCBpc0xhc3RSZWdpb24oKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2xpcEZsb3dUaHJlYWRDb250ZW50KCkgY29uc3Q7CisKKyAg
ICAvLyBUaGVzZSBtZXRob2RzIHJlcHJlc2VudCB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiBhICJw
YWdlIiBhbmQgZm9yIGEgUmVuZGVyUmVnaW9uIHRoZXkgYXJlIGp1c3QgdGhlCisgICAgLy8gY29u
dGVudCB3aWR0aCBhbmQgY29udGVudCBoZWlnaHQgb2YgYSByZWdpb24uIEZvciBSZW5kZXJSZWdp
b25TZXRzLCBob3dldmVyLCB0aGV5IHdpbGwgYmUgdGhlIHdpZHRoIGFuZAorICAgIC8vIGhlaWdo
dCBvZiBhIHNpbmdsZSBjb2x1bW4gb3IgcGFnZSBpbiB0aGUgc2V0LgorICAgIHZpcnR1YWwgTGF5
b3V0VW5pdCBwYWdlTG9naWNhbFdpZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0
IHBhZ2VMb2dpY2FsSGVpZ2h0KCkgY29uc3Q7CisKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3BP
ZkZsb3dUaHJlYWRDb250ZW50UmVjdChjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CisgICAgTGF5
b3V0VW5pdCBsb2dpY2FsQm90dG9tT2ZGbG93VGhyZWFkQ29udGVudFJlY3QoY29uc3QgTGF5b3V0
UmVjdCYpIGNvbnN0OworICAgIExheW91dFVuaXQgbG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250
ZW50KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbFRvcE9mRmxvd1RocmVhZENvbnRlbnRSZWN0KGZs
b3dUaHJlYWRQb3J0aW9uUmVjdCgpKTsgfTsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b21G
b3JGbG93VGhyZWFkQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxCb3R0b21PZkZsb3dU
aHJlYWRDb250ZW50UmVjdChmbG93VGhyZWFkUG9ydGlvblJlY3QoKSk7IH07CisKKyAgICAvLyBU
aGlzIG1ldGhvZCByZXByZXNlbnRzIHRoZSBsb2dpY2FsIGhlaWdodCBvZiB0aGUgZW50aXJlIGZs
b3cgdGhyZWFkIHBvcnRpb24gdXNlZCBieSB0aGUgcmVnaW9uIG9yIHNldC4KKyAgICAvLyBGb3Ig
UmVuZGVyUmVnaW9ucyBpdCBtYXRjaGVzIGxvZ2ljYWxQYWdpbmF0aW9uSGVpZ2h0KCksIGJ1dCBm
b3Igc2V0cyBpdCBpcyB0aGUgaGVpZ2h0IG9mIGFsbCB0aGUgcGFnZXMKKyAgICAvLyBvciBjb2x1
bW5zIGFkZGVkIHRvZ2V0aGVyLgorICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0
T2ZBbGxGbG93VGhyZWFkQ29udGVudCgpIGNvbnN0OworCisgICAgLy8gVGhlIHRvcCBvZiB0aGUg
bmVhcmVzdCBwYWdlIGluc2lkZSB0aGUgcmVnaW9uLiBGb3IgUmVuZGVyUmVnaW9ucywgdGhpcyBp
cyBqdXN0IHRoZSBsb2dpY2FsIHRvcCBvZiB0aGUKKyAgICAvLyBmbG93IHRocmVhZCBwb3J0aW9u
IHdlIGNvbnRhaW4uIEZvciBzZXRzLCB3ZSBoYXZlIHRvIGZpZ3VyZSBvdXQgdGhlIHRvcCBvZiB0
aGUgbmVhcmVzdCBjb2x1bW4gb3IKKyAgICAvLyBwYWdlLgorICAgIHZpcnR1YWwgTGF5b3V0VW5p
dCBwYWdlTG9naWNhbFRvcEZvck9mZnNldChMYXlvdXRVbml0IG9mZnNldCkgY29uc3Q7CisKKyAg
ICAvLyBXaGV0aGVyIG9yIG5vdCB0aGlzIHJlZ2lvbiBpcyBhIHNldC4KKyAgICB2aXJ0dWFsIGJv
b2wgaXNSZW5kZXJSZWdpb25TZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIAorICAg
IHZpcnR1YWwgdm9pZCByZXBhaW50Rmxvd1RocmVhZENvbnRlbnQoY29uc3QgTGF5b3V0UmVjdCYg
cmVwYWludFJlY3QpOworCisgICAgdmlydHVhbCB2b2lkIGNvbGxlY3RMYXllckZyYWdtZW50cyhM
YXllckZyYWdtZW50cyYsIGNvbnN0IExheW91dFJlY3QmLCBjb25zdCBMYXlvdXRSZWN0JikgeyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmVnaW9uQm91bmRzRnJvbUZsb3dUaHJlYWRQb3J0
aW9uUmVjdChMYXlvdXRSZWN0JiByZWdpb25Cb3VuZHMpIGNvbnN0OworCisgICAgdm9pZCBhZGRM
YXlvdXRPdmVyZmxvd0ZvckJveChjb25zdCBSZW5kZXJCb3gqLCBjb25zdCBMYXlvdXRSZWN0Jik7
CisgICAgdm9pZCBhZGRWaXN1YWxPdmVyZmxvd0ZvckJveChjb25zdCBSZW5kZXJCb3gqLCBjb25z
dCBMYXlvdXRSZWN0Jik7CisgICAgTGF5b3V0UmVjdCBsYXlvdXRPdmVyZmxvd1JlY3RGb3JCb3go
Y29uc3QgUmVuZGVyQm94Kik7CisgICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RGb3JC
b3goY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QmKTsKKyAgICBMYXlvdXRSZWN0IGxheW91dE92
ZXJmbG93UmVjdEZvckJveEZvclByb3BhZ2F0aW9uKGNvbnN0IFJlbmRlckJveCopOworICAgIExh
eW91dFJlY3QgdmlzdWFsT3ZlcmZsb3dSZWN0Rm9yQm94Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVu
ZGVyQm94TW9kZWxPYmplY3QmKTsKKworICAgIExheW91dFJlY3QgcmVjdEZsb3dQb3J0aW9uRm9y
Qm94KGNvbnN0IFJlbmRlckJveCosIGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKKyAgICAKKyAg
ICB2b2lkIHNldFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSgpOworICAgIHZvaWQgcmVzdG9yZVJl
Z2lvbk9iamVjdHNPcmlnaW5hbFN0eWxlKCk7CisKKyAgICBib29sIGNhbkhhdmVDaGlsZHJlbigp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBjYW5IYXZlR2VuZXJh
dGVkQ2hpbGRyZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgVmlzaWJs
ZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5k
ZXJSZWdpb24qKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzRm9y
Qm94SW5SZWdpb24oVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sKiwgY29uc3QgUmVuZGVyQm94Kiwg
ZmxvYXQsIGZsb2F0KSB7IH0KKworcHJvdGVjdGVkOgorICAgIFJlbmRlclJlZ2lvbihFbGVtZW50
JiwgUmVuZGVyU3R5bGUmJiwgUmVuZGVyRmxvd1RocmVhZCopOworICAgIFJlbmRlclJlZ2lvbihE
b2N1bWVudCYsIFJlbmRlclN0eWxlJiYsIFJlbmRlckZsb3dUaHJlYWQqKTsKKworICAgIHZvaWQg
ZW5zdXJlT3ZlcmZsb3dGb3JCb3goY29uc3QgUmVuZGVyQm94KiwgUmVmUHRyPFJlbmRlck92ZXJm
bG93PiYsIGJvb2wpOworCisgICAgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygp
IG92ZXJyaWRlOworICAgIHZvaWQgY29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMoTGF5b3V0
VW5pdCYgbWluTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0JiBtYXhMb2dpY2FsV2lkdGgpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgZW51bSBPdmVyZmxvd1R5cGUgeworICAgICAgICBMYXlvdXRPdmVy
ZmxvdyA9IDAsCisgICAgICAgIFZpc3VhbE92ZXJmbG93CisgICAgfTsKKworICAgIExheW91dFJl
Y3Qgb3ZlcmZsb3dSZWN0Rm9yRmxvd1RocmVhZFBvcnRpb24oY29uc3QgTGF5b3V0UmVjdCYgZmxv
d1RocmVhZFBvcnRpb25SZWN0LCBib29sIGlzRmlyc3RQb3J0aW9uLCBib29sIGlzTGFzdFBvcnRp
b24sIE92ZXJmbG93VHlwZSk7CisgICAgdm9pZCByZXBhaW50Rmxvd1RocmVhZENvbnRlbnRSZWN0
YW5nbGUoY29uc3QgTGF5b3V0UmVjdCYgcmVwYWludFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGZs
b3dUaHJlYWRQb3J0aW9uUmVjdCwgY29uc3QgTGF5b3V0UG9pbnQmIHJlZ2lvbkxvY2F0aW9uLCBj
b25zdCBMYXlvdXRSZWN0KiBmbG93VGhyZWFkUG9ydGlvbkNsaXBSZWN0ID0gMCk7CisKKyAgICB2
b2lkIGNvbXB1dGVPdmVyZmxvd0Zyb21GbG93VGhyZWFkKCk7CisKK3ByaXZhdGU6CisgICAgYm9v
bCBpc1JlbmRlclJlZ2lvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICBjb25z
dCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIlJlbmRlclJlZ2lv
biI7IH0KKworICAgIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZSgpIG92ZXJyaWRlOworICAgIHZvaWQg
d2lsbEJlUmVtb3ZlZEZyb21UcmVlKCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5z
dGFsbEZsb3dUaHJlYWQoKTsKKworICAgIExheW91dFBvaW50IG1hcFJlZ2lvblBvaW50SW50b0Zs
b3dUaHJlYWRDb29yZGluYXRlcyhjb25zdCBMYXlvdXRQb2ludCYpOworCitwcm90ZWN0ZWQ6Cisg
ICAgUmVuZGVyRmxvd1RocmVhZCogbV9mbG93VGhyZWFkOworCitwcml2YXRlOgorICAgIExheW91
dFJlY3QgbV9mbG93VGhyZWFkUG9ydGlvblJlY3Q7CisKKyAgICAvLyBUaGlzIG1hcCBob2xkcyB1
bmlxdWUgaW5mb3JtYXRpb24gYWJvdXQgYSBibG9jayB0aGF0IGlzIHNwbGl0IGFjcm9zcyByZWdp
b25zLgorICAgIC8vIEEgUmVuZGVyQm94UmVnaW9uSW5mbyogdGVsbHMgdXMgYWJvdXQgYW55IGxh
eW91dCBpbmZvcm1hdGlvbiBmb3IgYSBSZW5kZXJCb3ggdGhhdAorICAgIC8vIGlzIHVuaXF1ZSB0
byB0aGUgcmVnaW9uLiBGb3Igbm93IGl0IGp1c3QgaG9sZHMgbG9naWNhbCB3aWR0aCBpbmZvcm1h
dGlvbiBmb3IgUmVuZGVyQmxvY2tzLCBidXQgZXZlbnR1YWxseQorICAgIC8vIGl0IHdpbGwgYWxz
byBob2xkIGEgY3VzdG9tIHN0eWxlIGZvciBhbnkgYm94IChmb3IgcmVnaW9uIHN0eWxpbmcpLgor
ICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBSZW5kZXJCb3gqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyQm94UmVnaW9uSW5mbz4+IFJlbmRlckJveFJlZ2lvbkluZm9NYXA7CisgICAgUmVuZGVyQm94
UmVnaW9uSW5mb01hcCBtX3JlbmRlckJveFJlZ2lvbkluZm87CisKKyAgICBib29sIG1faXNWYWxp
ZCA6IDE7Cit9OworCitjbGFzcyBDdXJyZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lciB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ3VycmVudFJlbmRlclJlZ2lvbk1haW50YWluZXIpOworcHVi
bGljOgorICAgIEN1cnJlbnRSZW5kZXJSZWdpb25NYWludGFpbmVyKFJlbmRlclJlZ2lvbiYpOwor
ICAgIH5DdXJyZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lcigpOworCisgICAgUmVuZGVyUmVnaW9u
JiByZWdpb24oKSBjb25zdCB7IHJldHVybiBtX3JlZ2lvbjsgfQorcHJpdmF0ZToKKyAgICBSZW5k
ZXJSZWdpb24mIG1fcmVnaW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX1JFTkRFUl9PQkpFQ1QoUmVuZGVyUmVnaW9uLCBpc1JlbmRlclJl
Z2lvbigpKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclJlZ2lvbi5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAj
IworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudENvbnRhaW5lci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudENvbnRhaW5lci5oCShyZXZp
c2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRD
b250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTAgKzM4LDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgRWxlbWVudDsKIGNsYXNzIFJlbmRlckJveDsKLWNsYXNzIFJlbmRl
ckJveFJlZ2lvbkluZm87CitjbGFzcyBSZW5kZXJCb3hGcmFnbWVudEluZm87CiBjbGFzcyBSZW5k
ZXJGbG93VGhyZWFkOwogCi1jbGFzcyBSZW5kZXJSZWdpb24gOiBwdWJsaWMgUmVuZGVyQmxvY2tG
bG93IHsKK2NsYXNzIFJlbmRlckZyYWdtZW50Q29udGFpbmVyIDogcHVibGljIFJlbmRlckJsb2Nr
RmxvdyB7CiBwdWJsaWM6CiAgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2Us
IGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgb3ZlcnJpZGU7CiAKQEAgLTUxLDI5ICs1MSwy
OSBAQCBwdWJsaWM6CiAKICAgICBMYXlvdXRQb2ludCBmbG93VGhyZWFkUG9ydGlvbkxvY2F0aW9u
KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUmVnaW9uKCk7Ci0gICAgdmlydHVh
bCB2b2lkIGRldGFjaFJlZ2lvbigpOworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hGcmFnbWVudCgp
OworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hGcmFnbWVudCgpOwogCiAgICAgUmVuZGVyRmxvd1Ro
cmVhZCogZmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmxvd1RocmVhZDsgfQogCi0gICAg
Ly8gVmFsaWQgcmVnaW9ucyBkbyBub3QgY3JlYXRlIGNpcmN1bGFyIGRlcGVuZGVuY2llcyB3aXRo
IG90aGVyIGZsb3dzLgorICAgIC8vIFZhbGlkIGZyYWdtZW50cyBkbyBub3QgY3JlYXRlIGNpcmN1
bGFyIGRlcGVuZGVuY2llcyB3aXRoIG90aGVyIGZsb3dzLgogICAgIGJvb2wgaXNWYWxpZCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNWYWxpZDsgfQogICAgIHZvaWQgc2V0SXNWYWxpZChib29sIHZhbGlk
KSB7IG1faXNWYWxpZCA9IHZhbGlkOyB9CiAKLSAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiByZW5k
ZXJCb3hSZWdpb25JbmZvKGNvbnN0IFJlbmRlckJveCopIGNvbnN0OwotICAgIFJlbmRlckJveFJl
Z2lvbkluZm8qIHNldFJlbmRlckJveFJlZ2lvbkluZm8oY29uc3QgUmVuZGVyQm94KiwgTGF5b3V0
VW5pdCBsb2dpY2FsTGVmdEluc2V0LCBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodEluc2V0LAorICAg
IFJlbmRlckJveEZyYWdtZW50SW5mbyogcmVuZGVyQm94RnJhZ21lbnRJbmZvKGNvbnN0IFJlbmRl
ckJveCopIGNvbnN0OworICAgIFJlbmRlckJveEZyYWdtZW50SW5mbyogc2V0UmVuZGVyQm94RnJh
Z21lbnRJbmZvKGNvbnN0IFJlbmRlckJveCosIExheW91dFVuaXQgbG9naWNhbExlZnRJbnNldCwg
TGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRJbnNldCwKICAgICAgICAgYm9vbCBjb250YWluaW5nQmxv
Y2tDaGFpbklzSW5zZXQpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCb3hSZWdpb25JbmZv
PiB0YWtlUmVuZGVyQm94UmVnaW9uSW5mbyhjb25zdCBSZW5kZXJCb3gqKTsKLSAgICB2b2lkIHJl
bW92ZVJlbmRlckJveFJlZ2lvbkluZm8oY29uc3QgUmVuZGVyQm94Jik7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlckJveEZyYWdtZW50SW5mbz4gdGFrZVJlbmRlckJveEZyYWdtZW50SW5mbyhj
b25zdCBSZW5kZXJCb3gqKTsKKyAgICB2b2lkIHJlbW92ZVJlbmRlckJveEZyYWdtZW50SW5mbyhj
b25zdCBSZW5kZXJCb3gmKTsKIAotICAgIHZvaWQgZGVsZXRlQWxsUmVuZGVyQm94UmVnaW9uSW5m
bygpOworICAgIHZvaWQgZGVsZXRlQWxsUmVuZGVyQm94RnJhZ21lbnRJbmZvKCk7CiAKLSAgICBi
b29sIGlzRmlyc3RSZWdpb24oKSBjb25zdDsKLSAgICBib29sIGlzTGFzdFJlZ2lvbigpIGNvbnN0
OworICAgIGJvb2wgaXNGaXJzdEZyYWdtZW50KCkgY29uc3Q7CisgICAgYm9vbCBpc0xhc3RGcmFn
bWVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDbGlwRmxvd1RocmVhZENvbnRl
bnQoKSBjb25zdDsKIAotICAgIC8vIFRoZXNlIG1ldGhvZHMgcmVwcmVzZW50IHRoZSB3aWR0aCBh
bmQgaGVpZ2h0IG9mIGEgInBhZ2UiIGFuZCBmb3IgYSBSZW5kZXJSZWdpb24gdGhleSBhcmUganVz
dCB0aGUKLSAgICAvLyBjb250ZW50IHdpZHRoIGFuZCBjb250ZW50IGhlaWdodCBvZiBhIHJlZ2lv
bi4gRm9yIFJlbmRlclJlZ2lvblNldHMsIGhvd2V2ZXIsIHRoZXkgd2lsbCBiZSB0aGUgd2lkdGgg
YW5kCisgICAgLy8gVGhlc2UgbWV0aG9kcyByZXByZXNlbnQgdGhlIHdpZHRoIGFuZCBoZWlnaHQg
b2YgYSAicGFnZSIgYW5kIGZvciBhIFJlbmRlckZyYWdtZW50Q29udGFpbmVyIHRoZXkgYXJlIGp1
c3QgdGhlCisgICAgLy8gY29udGVudCB3aWR0aCBhbmQgY29udGVudCBoZWlnaHQgb2YgYSBmcmFn
bWVudC4gRm9yIFJlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0cywgaG93ZXZlciwgdGhleSB3aWxs
IGJlIHRoZSB3aWR0aCBhbmQKICAgICAvLyBoZWlnaHQgb2YgYSBzaW5nbGUgY29sdW1uIG9yIHBh
Z2UgaW4gdGhlIHNldC4KICAgICB2aXJ0dWFsIExheW91dFVuaXQgcGFnZUxvZ2ljYWxXaWR0aCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCgpIGNvbnN0
OwpAQCAtODMsMjQgKzgzLDI0IEBAIHB1YmxpYzoKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3BG
b3JGbG93VGhyZWFkQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxUb3BPZkZsb3dUaHJl
YWRDb250ZW50UmVjdChmbG93VGhyZWFkUG9ydGlvblJlY3QoKSk7IH07CiAgICAgTGF5b3V0VW5p
dCBsb2dpY2FsQm90dG9tRm9yRmxvd1RocmVhZENvbnRlbnQoKSBjb25zdCB7IHJldHVybiBsb2dp
Y2FsQm90dG9tT2ZGbG93VGhyZWFkQ29udGVudFJlY3QoZmxvd1RocmVhZFBvcnRpb25SZWN0KCkp
OyB9OwogCi0gICAgLy8gVGhpcyBtZXRob2QgcmVwcmVzZW50cyB0aGUgbG9naWNhbCBoZWlnaHQg
b2YgdGhlIGVudGlyZSBmbG93IHRocmVhZCBwb3J0aW9uIHVzZWQgYnkgdGhlIHJlZ2lvbiBvciBz
ZXQuCi0gICAgLy8gRm9yIFJlbmRlclJlZ2lvbnMgaXQgbWF0Y2hlcyBsb2dpY2FsUGFnaW5hdGlv
bkhlaWdodCgpLCBidXQgZm9yIHNldHMgaXQgaXMgdGhlIGhlaWdodCBvZiBhbGwgdGhlIHBhZ2Vz
CisgICAgLy8gVGhpcyBtZXRob2QgcmVwcmVzZW50cyB0aGUgbG9naWNhbCBoZWlnaHQgb2YgdGhl
IGVudGlyZSBmbG93IHRocmVhZCBwb3J0aW9uIHVzZWQgYnkgdGhlIGZyYWdtZW50IG9yIHNldC4K
KyAgICAvLyBGb3IgUmVuZGVyRnJhZ21lbnRDb250YWluZXJzIGl0IG1hdGNoZXMgbG9naWNhbFBh
Z2luYXRpb25IZWlnaHQoKSwgYnV0IGZvciBzZXRzIGl0IGlzIHRoZSBoZWlnaHQgb2YgYWxsIHRo
ZSBwYWdlcwogICAgIC8vIG9yIGNvbHVtbnMgYWRkZWQgdG9nZXRoZXIuCiAgICAgdmlydHVhbCBM
YXlvdXRVbml0IGxvZ2ljYWxIZWlnaHRPZkFsbEZsb3dUaHJlYWRDb250ZW50KCkgY29uc3Q7CiAK
LSAgICAvLyBUaGUgdG9wIG9mIHRoZSBuZWFyZXN0IHBhZ2UgaW5zaWRlIHRoZSByZWdpb24uIEZv
ciBSZW5kZXJSZWdpb25zLCB0aGlzIGlzIGp1c3QgdGhlIGxvZ2ljYWwgdG9wIG9mIHRoZQorICAg
IC8vIFRoZSB0b3Agb2YgdGhlIG5lYXJlc3QgcGFnZSBpbnNpZGUgdGhlIGZyYWdtZW50LiBGb3Ig
UmVuZGVyRnJhZ21lbnRDb250YWluZXJzLCB0aGlzIGlzIGp1c3QgdGhlIGxvZ2ljYWwgdG9wIG9m
IHRoZQogICAgIC8vIGZsb3cgdGhyZWFkIHBvcnRpb24gd2UgY29udGFpbi4gRm9yIHNldHMsIHdl
IGhhdmUgdG8gZmlndXJlIG91dCB0aGUgdG9wIG9mIHRoZSBuZWFyZXN0IGNvbHVtbiBvcgogICAg
IC8vIHBhZ2UuCiAgICAgdmlydHVhbCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsVG9wRm9yT2Zmc2V0
KExheW91dFVuaXQgb2Zmc2V0KSBjb25zdDsKIAotICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoaXMg
cmVnaW9uIGlzIGEgc2V0LgotICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclJlZ2lvblNldCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgLy8gV2hldGhlciBvciBub3QgdGhpcyBmcmFnbWVu
dCBpcyBhIHNldC4KKyAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJGcmFnbWVudENvbnRhaW5lclNl
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHJlcGFp
bnRGbG93VGhyZWFkQ29udGVudChjb25zdCBMYXlvdXRSZWN0JiByZXBhaW50UmVjdCk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgY29sbGVjdExheWVyRnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiwgY29u
c3QgTGF5b3V0UmVjdCYsIGNvbnN0IExheW91dFJlY3QmKSB7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RSZWdpb25Cb3VuZHNGcm9tRmxvd1RocmVhZFBvcnRpb25SZWN0KExheW91dFJlY3Qm
IHJlZ2lvbkJvdW5kcykgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdEZyYWdtZW50Qm91
bmRzRnJvbUZsb3dUaHJlYWRQb3J0aW9uUmVjdChMYXlvdXRSZWN0JiBmcmFnbWVudEJvdW5kcykg
Y29uc3Q7CiAKICAgICB2b2lkIGFkZExheW91dE92ZXJmbG93Rm9yQm94KGNvbnN0IFJlbmRlckJv
eCosIGNvbnN0IExheW91dFJlY3QmKTsKICAgICB2b2lkIGFkZFZpc3VhbE92ZXJmbG93Rm9yQm94
KGNvbnN0IFJlbmRlckJveCosIGNvbnN0IExheW91dFJlY3QmKTsKQEAgLTExMSwxOCArMTExLDE4
IEBAIHB1YmxpYzoKIAogICAgIExheW91dFJlY3QgcmVjdEZsb3dQb3J0aW9uRm9yQm94KGNvbnN0
IFJlbmRlckJveCosIGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKICAgICAKLSAgICB2b2lkIHNl
dFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSgpOwotICAgIHZvaWQgcmVzdG9yZVJlZ2lvbk9iamVj
dHNPcmlnaW5hbFN0eWxlKCk7CisgICAgdm9pZCBzZXRGcmFnbWVudE9iamVjdHNGcmFnbWVudFN0
eWxlKCk7CisgICAgdm9pZCByZXN0b3JlRnJhZ21lbnRPYmplY3RzT3JpZ2luYWxTdHlsZSgpOwog
CiAgICAgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQogICAgIGJvb2wgY2FuSGF2ZUdlbmVyYXRlZENoaWxkcmVuKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNv
bnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyUmVnaW9uKikgb3ZlcnJpZGU7CisgICAgVmlz
aWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBS
ZW5kZXJGcmFnbWVudENvbnRhaW5lciopIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFi
c29sdXRlUXVhZHNGb3JCb3hJblJlZ2lvbihWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wqLCBjb25z
dCBSZW5kZXJCb3gqLCBmbG9hdCwgZmxvYXQpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0
ZVF1YWRzRm9yQm94SW5GcmFnbWVudChWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wqLCBjb25zdCBS
ZW5kZXJCb3gqLCBmbG9hdCwgZmxvYXQpIHsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgUmVuZGVyUmVn
aW9uKEVsZW1lbnQmLCBSZW5kZXJTdHlsZSYmLCBSZW5kZXJGbG93VGhyZWFkKik7Ci0gICAgUmVu
ZGVyUmVnaW9uKERvY3VtZW50JiwgUmVuZGVyU3R5bGUmJiwgUmVuZGVyRmxvd1RocmVhZCopOwor
ICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKEVsZW1lbnQmLCBSZW5kZXJTdHlsZSYmLCBSZW5k
ZXJGbG93VGhyZWFkKik7CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIoRG9jdW1lbnQmLCBS
ZW5kZXJTdHlsZSYmLCBSZW5kZXJGbG93VGhyZWFkKik7CiAKICAgICB2b2lkIGVuc3VyZU92ZXJm
bG93Rm9yQm94KGNvbnN0IFJlbmRlckJveCosIFJlZlB0cjxSZW5kZXJPdmVyZmxvdz4mLCBib29s
KTsKIApAQCAtMTM1LDIwICsxMzUsMjAgQEAgcHJvdGVjdGVkOgogICAgIH07CiAKICAgICBMYXlv
dXRSZWN0IG92ZXJmbG93UmVjdEZvckZsb3dUaHJlYWRQb3J0aW9uKGNvbnN0IExheW91dFJlY3Qm
IGZsb3dUaHJlYWRQb3J0aW9uUmVjdCwgYm9vbCBpc0ZpcnN0UG9ydGlvbiwgYm9vbCBpc0xhc3RQ
b3J0aW9uLCBPdmVyZmxvd1R5cGUpOwotICAgIHZvaWQgcmVwYWludEZsb3dUaHJlYWRDb250ZW50
UmVjdGFuZ2xlKGNvbnN0IExheW91dFJlY3QmIHJlcGFpbnRSZWN0LCBjb25zdCBMYXlvdXRSZWN0
JiBmbG93VGhyZWFkUG9ydGlvblJlY3QsIGNvbnN0IExheW91dFBvaW50JiByZWdpb25Mb2NhdGlv
biwgY29uc3QgTGF5b3V0UmVjdCogZmxvd1RocmVhZFBvcnRpb25DbGlwUmVjdCA9IDApOworICAg
IHZvaWQgcmVwYWludEZsb3dUaHJlYWRDb250ZW50UmVjdGFuZ2xlKGNvbnN0IExheW91dFJlY3Qm
IHJlcGFpbnRSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBmbG93VGhyZWFkUG9ydGlvblJlY3QsIGNv
bnN0IExheW91dFBvaW50JiBmcmFnbWVudExvY2F0aW9uLCBjb25zdCBMYXlvdXRSZWN0KiBmbG93
VGhyZWFkUG9ydGlvbkNsaXBSZWN0ID0gMCk7CiAKICAgICB2b2lkIGNvbXB1dGVPdmVyZmxvd0Zy
b21GbG93VGhyZWFkKCk7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBpc1JlbmRlclJlZ2lvbigpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIlJlbmRlclJlZ2lvbiI7IH0KKyAgICBib29sIGlzUmVu
ZGVyRnJhZ21lbnRDb250YWluZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAg
Y29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJSZW5kZXJG
cmFnbWVudENvbnRhaW5lciI7IH0KIAogICAgIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZSgpIG92ZXJy
aWRlOwogICAgIHZvaWQgd2lsbEJlUmVtb3ZlZEZyb21UcmVlKCkgb3ZlcnJpZGU7CiAKICAgICB2
aXJ0dWFsIHZvaWQgaW5zdGFsbEZsb3dUaHJlYWQoKTsKIAotICAgIExheW91dFBvaW50IG1hcFJl
Z2lvblBvaW50SW50b0Zsb3dUaHJlYWRDb29yZGluYXRlcyhjb25zdCBMYXlvdXRQb2ludCYpOwor
ICAgIExheW91dFBvaW50IG1hcEZyYWdtZW50UG9pbnRJbnRvRmxvd1RocmVhZENvb3JkaW5hdGVz
KGNvbnN0IExheW91dFBvaW50Jik7CiAKIHByb3RlY3RlZDoKICAgICBSZW5kZXJGbG93VGhyZWFk
KiBtX2Zsb3dUaHJlYWQ7CkBAIC0xNTYsMjcgKzE1NiwyNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRl
OgogICAgIExheW91dFJlY3QgbV9mbG93VGhyZWFkUG9ydGlvblJlY3Q7CiAKLSAgICAvLyBUaGlz
IG1hcCBob2xkcyB1bmlxdWUgaW5mb3JtYXRpb24gYWJvdXQgYSBibG9jayB0aGF0IGlzIHNwbGl0
IGFjcm9zcyByZWdpb25zLgotICAgIC8vIEEgUmVuZGVyQm94UmVnaW9uSW5mbyogdGVsbHMgdXMg
YWJvdXQgYW55IGxheW91dCBpbmZvcm1hdGlvbiBmb3IgYSBSZW5kZXJCb3ggdGhhdAotICAgIC8v
IGlzIHVuaXF1ZSB0byB0aGUgcmVnaW9uLiBGb3Igbm93IGl0IGp1c3QgaG9sZHMgbG9naWNhbCB3
aWR0aCBpbmZvcm1hdGlvbiBmb3IgUmVuZGVyQmxvY2tzLCBidXQgZXZlbnR1YWxseQotICAgIC8v
IGl0IHdpbGwgYWxzbyBob2xkIGEgY3VzdG9tIHN0eWxlIGZvciBhbnkgYm94IChmb3IgcmVnaW9u
IHN0eWxpbmcpLgotICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBSZW5kZXJCb3gqLCBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyQm94UmVnaW9uSW5mbz4+IFJlbmRlckJveFJlZ2lvbkluZm9NYXA7Ci0g
ICAgUmVuZGVyQm94UmVnaW9uSW5mb01hcCBtX3JlbmRlckJveFJlZ2lvbkluZm87CisgICAgLy8g
VGhpcyBtYXAgaG9sZHMgdW5pcXVlIGluZm9ybWF0aW9uIGFib3V0IGEgYmxvY2sgdGhhdCBpcyBz
cGxpdCBhY3Jvc3MgZnJhZ21lbnRzLgorICAgIC8vIEEgUmVuZGVyQm94RnJhZ21lbnRJbmZvKiB0
ZWxscyB1cyBhYm91dCBhbnkgbGF5b3V0IGluZm9ybWF0aW9uIGZvciBhIFJlbmRlckJveCB0aGF0
CisgICAgLy8gaXMgdW5pcXVlIHRvIHRoZSBmcmFnbWVudC4gRm9yIG5vdyBpdCBqdXN0IGhvbGRz
IGxvZ2ljYWwgd2lkdGggaW5mb3JtYXRpb24gZm9yIFJlbmRlckJsb2NrcywgYnV0IGV2ZW50dWFs
bHkKKyAgICAvLyBpdCB3aWxsIGFsc28gaG9sZCBhIGN1c3RvbSBzdHlsZSBmb3IgYW55IGJveCAo
Zm9yIGZyYWdtZW50IHN0eWxpbmcpLgorICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBSZW5kZXJC
b3gqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQm94RnJhZ21lbnRJbmZvPj4gUmVuZGVyQm94RnJh
Z21lbnRJbmZvTWFwOworICAgIFJlbmRlckJveEZyYWdtZW50SW5mb01hcCBtX3JlbmRlckJveEZy
YWdtZW50SW5mbzsKIAogICAgIGJvb2wgbV9pc1ZhbGlkIDogMTsKIH07CiAKLWNsYXNzIEN1cnJl
bnRSZW5kZXJSZWdpb25NYWludGFpbmVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdXJy
ZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lcik7CitjbGFzcyBDdXJyZW50UmVuZGVyRnJhZ21lbnRD
b250YWluZXJNYWludGFpbmVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdXJyZW50UmVu
ZGVyRnJhZ21lbnRDb250YWluZXJNYWludGFpbmVyKTsKIHB1YmxpYzoKLSAgICBDdXJyZW50UmVu
ZGVyUmVnaW9uTWFpbnRhaW5lcihSZW5kZXJSZWdpb24mKTsKLSAgICB+Q3VycmVudFJlbmRlclJl
Z2lvbk1haW50YWluZXIoKTsKKyAgICBDdXJyZW50UmVuZGVyRnJhZ21lbnRDb250YWluZXJNYWlu
dGFpbmVyKFJlbmRlckZyYWdtZW50Q29udGFpbmVyJik7CisgICAgfkN1cnJlbnRSZW5kZXJGcmFn
bWVudENvbnRhaW5lck1haW50YWluZXIoKTsKIAotICAgIFJlbmRlclJlZ2lvbiYgcmVnaW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9yZWdpb247IH0KKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciYg
ZnJhZ21lbnQoKSBjb25zdCB7IHJldHVybiBtX2ZyYWdtZW50OyB9CiBwcml2YXRlOgotICAgIFJl
bmRlclJlZ2lvbiYgbV9yZWdpb247CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXImIG1fZnJh
Z21lbnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfUkVOREVSX09CSkVDVChSZW5kZXJSZWdpb24sIGlzUmVuZGVyUmVnaW9uKCkpCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX1JFTkRFUl9PQkpFQ1QoUmVuZGVyRnJhZ21lbnRDb250YWluZXIs
IGlzUmVuZGVyRnJhZ21lbnRDb250YWluZXIoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGcmFnbWVudENvbnRhaW5lclNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0LmNwcAkocmV2aXNp
b24gMjIyNDYyKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uU2V0
LmNwcDoyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRD
b250YWluZXJTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlJlbmRlclJlZ2lvblNldC5oIgorCisjaW5jbHVkZSAiUmVuZGVyQm94UmVn
aW9uSW5mby5oIgorI2luY2x1ZGUgIlJlbmRlckZsb3dUaHJlYWQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitSZW5kZXJSZWdpb25TZXQ6OlJlbmRlclJlZ2lvblNldChEb2N1bWVudCYgZG9j
dW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUsIFJlbmRlckZsb3dUaHJlYWQmIGZsb3dUaHJlYWQp
CisgICAgOiBSZW5kZXJSZWdpb24oZG9jdW1lbnQsIFdURk1vdmUoc3R5bGUpLCAmZmxvd1RocmVh
ZCkKK3sKK30KKwordm9pZCBSZW5kZXJSZWdpb25TZXQ6Omluc3RhbGxGbG93VGhyZWFkKCkKK3sK
KyAgICAvLyBXZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nLCBzaW5jZSB3ZSB3ZXJlIGFibGUg
dG8gY29ubmVjdCB0aGUgZmxvdyB0aHJlYWQKKyAgICAvLyBpbiB0aGUgY29uc3RydWN0b3IuCit9
CisKK3ZvaWQgUmVuZGVyUmVnaW9uU2V0OjpleHBhbmRUb0VuY29tcGFzc0Zsb3dUaHJlYWRDb250
ZW50c0lmTmVlZGVkKCkKK3sKKyAgICAvLyBXaGVuZXZlciB0aGUgbGFzdCByZWdpb24gaXMgYSBz
ZXQsIGl0IGFsd2F5cyBleHBhbmRzIGl0cyByZWdpb24gcmVjdCB0byBjb25zdW1lIGFsbAorICAg
IC8vIG9mIHRoZSBmbG93IHRocmVhZCBjb250ZW50LiBUaGlzIGlzIGJlY2F1c2UgaXQgaXMgYWx3
YXlzIGNhcGFibGUgb2YgZ2VuZXJhdGluZyBhbgorICAgIC8vIGluZmluaXRlIG51bWJlciBvZiBi
b3hlcyBpbiBvcmRlciB0byBob2xkIGFsbCBvZiB0aGUgcmVtYWluaW5nIGNvbnRlbnQuCisgICAg
TGF5b3V0UmVjdCByZWN0KGZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpKTsKKyAgICAKKyAgICAvLyBH
ZXQgdGhlIG9mZnNldCB3aXRoaW4gdGhlIGZsb3cgdGhyZWFkIGluIGl0cyBibG9jayBwcm9ncmVz
c2lvbiBkaXJlY3Rpb24uIFRoZW4gZ2V0IHRoZQorICAgIC8vIGZsb3cgdGhyZWFkJ3MgcmVtYWlu
aW5nIGxvZ2ljYWwgaGVpZ2h0IGluY2x1ZGluZyBpdHMgb3ZlcmZsb3cgYW5kIGV4cGFuZCBvdXIg
cmVjdAorICAgIC8vIHRvIGVuY29tcGFzcyB0aGF0IHJlbWFpbmluZyBoZWlnaHQgYW5kIG92ZXJm
bG93LiBUaGUgaWRlYSBpcyB0aGF0IHdlIHdpbGwgZ2VuZXJhdGUKKyAgICAvLyBhZGRpdGlvbmFs
IGNvbHVtbnMgYW5kIHBhZ2VzIHRvIGhvbGQgdGhhdCBvdmVyZmxvdywgc2luY2UgcGVvcGxlIGRv
IHdyaXRlIGJhZAorICAgIC8vIGNvbnRlbnQgbGlrZSA8Ym9keSBzdHlsZT0iaGVpZ2h0OjBweCI+
IGluIG11bHRpLWNvbHVtbiBsYXlvdXRzLgorICAgIGJvb2wgaXNIb3Jpem9udGFsID0gZmxvd1Ro
cmVhZCgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOworICAgIExheW91dFVuaXQgbG9naWNh
bFRvcE9mZnNldCA9IGlzSG9yaXpvbnRhbCA/IHJlY3QueSgpIDogcmVjdC54KCk7CisgICAgTGF5
b3V0UmVjdCBsYXlvdXRSZWN0ID0gZmxvd1RocmVhZCgpLT5sYXlvdXRPdmVyZmxvd1JlY3QoKTsK
KyAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHRXaXRoT3ZlcmZsb3cgPSAoaXNIb3Jpem9udGFs
ID8gbGF5b3V0UmVjdC5tYXhZKCkgOiBsYXlvdXRSZWN0Lm1heFgoKSkgLSBsb2dpY2FsVG9wT2Zm
c2V0OworICAgIHNldEZsb3dUaHJlYWRQb3J0aW9uUmVjdChMYXlvdXRSZWN0KHJlY3QueCgpLCBy
ZWN0LnkoKSwgaXNIb3Jpem9udGFsID8gcmVjdC53aWR0aCgpIDogbG9naWNhbEhlaWdodFdpdGhP
dmVyZmxvdywgaXNIb3Jpem9udGFsID8gbG9naWNhbEhlaWdodFdpdGhPdmVyZmxvdyA6IHJlY3Qu
aGVpZ2h0KCkpKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZyYWdtZW50Q29udGFpbmVyU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQuY3BwCShyZXZpc2lvbiAyMjI0NjIp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwyNSArMjQsMjUgQEAKICAqLwogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyUmVnaW9uU2V0LmgiCisjaW5jbHVkZSAiUmVuZGVy
RnJhZ21lbnRDb250YWluZXJTZXQuaCIKIAotI2luY2x1ZGUgIlJlbmRlckJveFJlZ2lvbkluZm8u
aCIKKyNpbmNsdWRlICJSZW5kZXJCb3hGcmFnbWVudEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJG
bG93VGhyZWFkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVuZGVyUmVnaW9uU2V0OjpS
ZW5kZXJSZWdpb25TZXQoRG9jdW1lbnQmIGRvY3VtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlLCBS
ZW5kZXJGbG93VGhyZWFkJiBmbG93VGhyZWFkKQotICAgIDogUmVuZGVyUmVnaW9uKGRvY3VtZW50
LCBXVEZNb3ZlKHN0eWxlKSwgJmZsb3dUaHJlYWQpCitSZW5kZXJGcmFnbWVudENvbnRhaW5lclNl
dDo6UmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQoRG9jdW1lbnQmIGRvY3VtZW50LCBSZW5kZXJT
dHlsZSYmIHN0eWxlLCBSZW5kZXJGbG93VGhyZWFkJiBmbG93VGhyZWFkKQorICAgIDogUmVuZGVy
RnJhZ21lbnRDb250YWluZXIoZG9jdW1lbnQsIFdURk1vdmUoc3R5bGUpLCAmZmxvd1RocmVhZCkK
IHsKIH0KIAotdm9pZCBSZW5kZXJSZWdpb25TZXQ6Omluc3RhbGxGbG93VGhyZWFkKCkKK3ZvaWQg
UmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQ6Omluc3RhbGxGbG93VGhyZWFkKCkKIHsKICAgICAv
LyBXZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nLCBzaW5jZSB3ZSB3ZXJlIGFibGUgdG8gY29u
bmVjdCB0aGUgZmxvdyB0aHJlYWQKICAgICAvLyBpbiB0aGUgY29uc3RydWN0b3IuCiB9CiAKLXZv
aWQgUmVuZGVyUmVnaW9uU2V0OjpleHBhbmRUb0VuY29tcGFzc0Zsb3dUaHJlYWRDb250ZW50c0lm
TmVlZGVkKCkKK3ZvaWQgUmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQ6OmV4cGFuZFRvRW5jb21w
YXNzRmxvd1RocmVhZENvbnRlbnRzSWZOZWVkZWQoKQogewogICAgIC8vIFdoZW5ldmVyIHRoZSBs
YXN0IHJlZ2lvbiBpcyBhIHNldCwgaXQgYWx3YXlzIGV4cGFuZHMgaXRzIHJlZ2lvbiByZWN0IHRv
IGNvbnN1bWUgYWxsCiAgICAgLy8gb2YgdGhlIGZsb3cgdGhyZWFkIGNvbnRlbnQuIFRoaXMgaXMg
YmVjYXVzZSBpdCBpcyBhbHdheXMgY2FwYWJsZSBvZiBnZW5lcmF0aW5nIGFuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRDb250YWluZXJT
ZXQuaAkocmV2aXNpb24gMjIyNDYyKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVnaW9uU2V0Lmg6MjIyNDYyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZyYWdtZW50Q29udGFpbmVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFJlbmRlckZsb3dUaHJlYWQ7CisKKy8vIFJlbmRlclJlZ2lvblNldCByZXByZXNlbnRz
IGEgc2V0IG9mIHJlZ2lvbnMgdGhhdCBhbGwgaGF2ZSB0aGUgc2FtZSB3aWR0aCBhbmQgaGVpZ2h0
LiBJdCBpcyBhICJjb21wb3NpdGUgcmVnaW9uIGJveCIgdGhhdAorLy8gY2FuIGJlIHVzZWQgdG8g
cmVwcmVzZW50IGEgc2luZ2xlIHJ1biBvZiBjb250aWd1b3VzIHJlZ2lvbnMuCisvLworLy8gQnkg
Y29tYmluaW5nIHJ1bnMgb2Ygc2FtZS1zaXplIGNvbHVtbnMgb3IgcGFnZXMgaW50byBhIHNpbmds
ZSBvYmplY3QsIHdlIHNpZ25pZmljYW50bHkgcmVkdWNlIHRoZSBudW1iZXIgb2YgdW5pcXVlIFJl
bmRlck9iamVjdHMKKy8vIHJlcXVpcmVkIHRvIHJlcHJlc2VudCB0aG9zZSBvYmplY3RzLgorLy8K
Ky8vIFRoaXMgY2xhc3MgaXMgYWJzdHJhY3QgYW5kIGlzIG9ubHkgaW50ZW5kZWQgZm9yIHVzZSBi
eSByZW5kZXJlcnMgdGhhdCBnZW5lcmF0ZSBhbm9ueW1vdXMgcnVucyBvZiBpZGVudGljYWwgcmVn
aW9ucywgaS5lLiwKKy8vIGNvbHVtbnMgYW5kIHByaW50aW5nLiBSZW5kZXJNdWx0aUNvbHVtblNl
dCBhbmQgUmVuZGVyUGFnZVNldCByZXByZXNlbnQgcnVucyBvZiBjb2x1bW5zIGFuZCBwYWdlcyBy
ZXNwZWN0aXZlbHkuCisvLworLy8gRklYTUU6IEZvciBub3cgd2UgZGVyaXZlIGZyb20gUmVuZGVy
UmVnaW9uLCBidXQgdGhpcyBtYXkgY2hhbmdlIGF0IHNvbWUgcG9pbnQuCisKK2NsYXNzIFJlbmRl
clJlZ2lvblNldCA6IHB1YmxpYyBSZW5kZXJSZWdpb24geworcHVibGljOgorICAgIHZvaWQgZXhw
YW5kVG9FbmNvbXBhc3NGbG93VGhyZWFkQ29udGVudHNJZk5lZWRlZCgpOworCitwcm90ZWN0ZWQ6
CisgICAgUmVuZGVyUmVnaW9uU2V0KERvY3VtZW50JiwgUmVuZGVyU3R5bGUmJiwgUmVuZGVyRmxv
d1RocmVhZCYpOworCitwcml2YXRlOgorICAgIHZvaWQgaW5zdGFsbEZsb3dUaHJlYWQoKSBmaW5h
bDsKKworICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZSA9IDA7Cisg
ICAgCisgICAgYm9vbCBpc1JlbmRlclJlZ2lvblNldCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRy
dWU7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudENvbnRhaW5lclNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudENvbnRhaW5lclNldC5oCShyZXZp
c2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRD
b250YWluZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTMgKzI1LDEzIEBACiAKICNwcmFn
bWEgb25jZQogCi0jaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCisjaW5jbHVkZSAiUmVuZGVyRnJh
Z21lbnRDb250YWluZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSZW5kZXJG
bG93VGhyZWFkOwogCi0vLyBSZW5kZXJSZWdpb25TZXQgcmVwcmVzZW50cyBhIHNldCBvZiByZWdp
b25zIHRoYXQgYWxsIGhhdmUgdGhlIHNhbWUgd2lkdGggYW5kIGhlaWdodC4gSXQgaXMgYSAiY29t
cG9zaXRlIHJlZ2lvbiBib3giIHRoYXQKKy8vIFJlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0IHJl
cHJlc2VudHMgYSBzZXQgb2YgcmVnaW9ucyB0aGF0IGFsbCBoYXZlIHRoZSBzYW1lIHdpZHRoIGFu
ZCBoZWlnaHQuIEl0IGlzIGEgImNvbXBvc2l0ZSByZWdpb24gYm94IiB0aGF0CiAvLyBjYW4gYmUg
dXNlZCB0byByZXByZXNlbnQgYSBzaW5nbGUgcnVuIG9mIGNvbnRpZ3VvdXMgcmVnaW9ucy4KIC8v
CiAvLyBCeSBjb21iaW5pbmcgcnVucyBvZiBzYW1lLXNpemUgY29sdW1ucyBvciBwYWdlcyBpbnRv
IGEgc2luZ2xlIG9iamVjdCwgd2Ugc2lnbmlmaWNhbnRseSByZWR1Y2UgdGhlIG51bWJlciBvZiB1
bmlxdWUgUmVuZGVyT2JqZWN0cwpAQCAtNDAsMjEgKzQwLDIxIEBAIGNsYXNzIFJlbmRlckZsb3dU
aHJlYWQ7CiAvLyBUaGlzIGNsYXNzIGlzIGFic3RyYWN0IGFuZCBpcyBvbmx5IGludGVuZGVkIGZv
ciB1c2UgYnkgcmVuZGVyZXJzIHRoYXQgZ2VuZXJhdGUgYW5vbnltb3VzIHJ1bnMgb2YgaWRlbnRp
Y2FsIHJlZ2lvbnMsIGkuZS4sCiAvLyBjb2x1bW5zIGFuZCBwcmludGluZy4gUmVuZGVyTXVsdGlD
b2x1bW5TZXQgYW5kIFJlbmRlclBhZ2VTZXQgcmVwcmVzZW50IHJ1bnMgb2YgY29sdW1ucyBhbmQg
cGFnZXMgcmVzcGVjdGl2ZWx5LgogLy8KLS8vIEZJWE1FOiBGb3Igbm93IHdlIGRlcml2ZSBmcm9t
IFJlbmRlclJlZ2lvbiwgYnV0IHRoaXMgbWF5IGNoYW5nZSBhdCBzb21lIHBvaW50LgorLy8gRklY
TUU6IEZvciBub3cgd2UgZGVyaXZlIGZyb20gUmVuZGVyRnJhZ21lbnRDb250YWluZXIsIGJ1dCB0
aGlzIG1heSBjaGFuZ2UgYXQgc29tZSBwb2ludC4KIAotY2xhc3MgUmVuZGVyUmVnaW9uU2V0IDog
cHVibGljIFJlbmRlclJlZ2lvbiB7CitjbGFzcyBSZW5kZXJGcmFnbWVudENvbnRhaW5lclNldCA6
IHB1YmxpYyBSZW5kZXJGcmFnbWVudENvbnRhaW5lciB7CiBwdWJsaWM6CiAgICAgdm9pZCBleHBh
bmRUb0VuY29tcGFzc0Zsb3dUaHJlYWRDb250ZW50c0lmTmVlZGVkKCk7CiAKIHByb3RlY3RlZDoK
LSAgICBSZW5kZXJSZWdpb25TZXQoRG9jdW1lbnQmLCBSZW5kZXJTdHlsZSYmLCBSZW5kZXJGbG93
VGhyZWFkJik7CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQoRG9jdW1lbnQmLCBSZW5k
ZXJTdHlsZSYmLCBSZW5kZXJGbG93VGhyZWFkJik7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBpbnN0
YWxsRmxvd1RocmVhZCgpIGZpbmFsOwogCiAgICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNv
bnN0IG92ZXJyaWRlID0gMDsKICAgICAKLSAgICBib29sIGlzUmVuZGVyUmVnaW9uU2V0KCkgY29u
c3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wgaXNSZW5kZXJGcmFnbWVudENvbnRh
aW5lclNldCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAJ
KHJldmlzaW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1NCw3ICsxMTU0LDcgQEAgTGF5b3V0VW5pdCBSZW5k
ZXJHcmlkOjpjb21wdXRlTWFyZ2luTG9naQogICAgIExheW91dFVuaXQgbWFyZ2luU3RhcnQ7CiAg
ICAgTGF5b3V0VW5pdCBtYXJnaW5FbmQ7CiAgICAgaWYgKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5z
KQotICAgICAgICBjaGlsZC5jb21wdXRlSW5saW5lRGlyZWN0aW9uTWFyZ2lucygqdGhpcywgY2hp
bGQuY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudEluUmVnaW9uKG51bGxwdHIp
LCBjaGlsZC5sb2dpY2FsV2lkdGgoKSwgbWFyZ2luU3RhcnQsIG1hcmdpbkVuZCk7CisgICAgICAg
IGNoaWxkLmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25NYXJnaW5zKCp0aGlzLCBjaGlsZC5jb250YWlu
aW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5GcmFnbWVudChudWxscHRyKSwgY2hpbGQu
bG9naWNhbFdpZHRoKCksIG1hcmdpblN0YXJ0LCBtYXJnaW5FbmQpOwogICAgIGVsc2UKICAgICAg
ICAgY2hpbGQuY29tcHV0ZUJsb2NrRGlyZWN0aW9uTWFyZ2lucygqdGhpcywgbWFyZ2luU3RhcnQs
IG1hcmdpbkVuZCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwCShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTA0LDE0ICs5MDQsMTQgQEAgYm9vbCBS
ZW5kZXJJbmxpbmU6OmhpdFRlc3RDdWxsZWRJbmxpbmUoYwogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotVmlzaWJsZVBvc2l0aW9uIFJlbmRlcklubGluZTo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBM
YXlvdXRQb2ludCYgcG9pbnQsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uKQorVmlzaWJsZVBv
c2l0aW9uIFJlbmRlcklubGluZTo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYg
cG9pbnQsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCkKIHsKICAgICAv
LyBGSVhNRTogRG9lcyBub3QgZGVhbCB3aXRoIHJlbGF0aXZlIG9yIHN0aWNreSBwb3NpdGlvbmVk
IGlubGluZXMgKHNob3VsZCBpdD8pCiAgICAgUmVuZGVyQmxvY2smIGNvbnRhaW5pbmdCbG9jayA9
ICp0aGlzLT5jb250YWluaW5nQmxvY2soKTsKICAgICBpZiAoZmlyc3RMaW5lQm94KCkpIHsKICAg
ICAgICAgLy8gVGhpcyBpbmxpbmUgYWN0dWFsbHkgaGFzIGEgbGluZSBib3guICBXZSBtdXN0IGhh
dmUgY2xpY2tlZCBpbiB0aGUgYm9yZGVyL3BhZGRpbmcgb2Ygb25lIG9mIHRoZXNlIGJveGVzLiAg
V2UKICAgICAgICAgLy8gc2hvdWxkIHRyeSB0byBmaW5kIGEgcmVzdWx0IGJ5IGFza2luZyBvdXIg
Y29udGFpbmluZyBibG9jay4KLSAgICAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jay5wb3NpdGlv
bkZvclBvaW50KHBvaW50LCByZWdpb24pOworICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2Nr
LnBvc2l0aW9uRm9yUG9pbnQocG9pbnQsIGZyYWdtZW50KTsKICAgICB9CiAKICAgICAvLyBUcmFu
c2xhdGUgdGhlIGNvb3JkcyBmcm9tIHRoZSBwcmUtYW5vbnltb3VzIGJsb2NrIHRvIHRoZSBwb3N0
LWFub255bW91cyBibG9jay4KQEAgLTkyMCwxMSArOTIwLDExIEBAIFZpc2libGVQb3NpdGlvbiBS
ZW5kZXJJbmxpbmU6OnBvc2l0aW9uRm8KICAgICB3aGlsZSAoY29udGludWF0aW9uKSB7CiAgICAg
ICAgIFJlbmRlckJsb2NrKiBjdXJyZW50QmxvY2sgPSBjb250aW51YXRpb24tPmlzSW5saW5lKCkg
PyBjb250aW51YXRpb24tPmNvbnRhaW5pbmdCbG9jaygpIDogZG93bmNhc3Q8UmVuZGVyQmxvY2s+
KGNvbnRpbnVhdGlvbik7CiAgICAgICAgIGlmIChjb250aW51YXRpb24tPmlzSW5saW5lKCkgfHwg
Y29udGludWF0aW9uLT5maXJzdENoaWxkKCkpCi0gICAgICAgICAgICByZXR1cm4gY29udGludWF0
aW9uLT5wb3NpdGlvbkZvclBvaW50KHBhcmVudEJsb2NrUG9pbnQgLSBjdXJyZW50QmxvY2stPmxv
Y2F0aW9uT2Zmc2V0KCksIHJlZ2lvbik7CisgICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9u
LT5wb3NpdGlvbkZvclBvaW50KHBhcmVudEJsb2NrUG9pbnQgLSBjdXJyZW50QmxvY2stPmxvY2F0
aW9uT2Zmc2V0KCksIGZyYWdtZW50KTsKICAgICAgICAgY29udGludWF0aW9uID0gZG93bmNhc3Q8
UmVuZGVyQmxvY2s+KCpjb250aW51YXRpb24pLmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKTsK
ICAgICB9CiAgICAgCi0gICAgcmV0dXJuIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpwb3NpdGlvbkZv
clBvaW50KHBvaW50LCByZWdpb24pOworICAgIHJldHVybiBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
cG9zaXRpb25Gb3JQb2ludChwb2ludCwgZnJhZ21lbnQpOwogfQogCiBuYW1lc3BhY2UgewpAQCAt
MTExMCwxMCArMTExMCwxMCBAQCBMYXlvdXRSZWN0IFJlbmRlcklubGluZTo6bGluZXNWaXN1YWxP
dmVyCiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVySW5saW5lOjpsaW5l
c1Zpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3hJblJlZ2lvbihjb25zdCBSZW5kZXJSZWdpb24qIHJl
Z2lvbikgY29uc3QKK0xheW91dFJlY3QgUmVuZGVySW5saW5lOjpsaW5lc1Zpc3VhbE92ZXJmbG93
Qm91bmRpbmdCb3hJbkZyYWdtZW50KGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFn
bWVudCkgY29uc3QKIHsKICAgICBBU1NFUlQoYWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpOwotICAg
IEFTU0VSVChyZWdpb24pOworICAgIEFTU0VSVChmcmFnbWVudCk7CiAKICAgICBpZiAoIWZpcnN0
TGluZUJveCgpIHx8ICFsYXN0TGluZUJveCgpKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgp
OwpAQCAtMTEyMywyOCArMTEyMywyOCBAQCBMYXlvdXRSZWN0IFJlbmRlcklubGluZTo6bGluZXNW
aXN1YWxPdmVyCiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRTaWRlID0gTGF5b3V0VW5pdDo6
bWluKCk7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wOwogICAgIExheW91dFVuaXQgbG9naWNh
bEhlaWdodDsKLSAgICBJbmxpbmVGbG93Qm94KiBsYXN0SW5saW5lSW5SZWdpb24gPSAwOworICAg
IElubGluZUZsb3dCb3gqIGxhc3RJbmxpbmVJbkZyYWdtZW50ID0gMDsKICAgICBmb3IgKElubGlu
ZUZsb3dCb3gqIGN1cnIgPSBmaXJzdExpbmVCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRM
aW5lQm94KCkpIHsKICAgICAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdCA9IGN1cnItPnJv
b3QoKTsKLSAgICAgICAgaWYgKHJvb3QuY29udGFpbmluZ1JlZ2lvbigpICE9IHJlZ2lvbikgewot
ICAgICAgICAgICAgaWYgKGxhc3RJbmxpbmVJblJlZ2lvbikKKyAgICAgICAgaWYgKHJvb3QuY29u
dGFpbmluZ0ZyYWdtZW50KCkgIT0gZnJhZ21lbnQpIHsKKyAgICAgICAgICAgIGlmIChsYXN0SW5s
aW5lSW5GcmFnbWVudCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFsYXN0SW5saW5lSW5SZWdpb24pCisgICAg
ICAgIGlmICghbGFzdElubGluZUluRnJhZ21lbnQpCiAgICAgICAgICAgICBsb2dpY2FsVG9wID0g
Y3Vyci0+bG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KHJvb3QubGluZVRvcCgpKTsKIAotICAgICAg
ICBsYXN0SW5saW5lSW5SZWdpb24gPSBjdXJyOworICAgICAgICBsYXN0SW5saW5lSW5GcmFnbWVu
dCA9IGN1cnI7CiAKICAgICAgICAgbG9naWNhbExlZnRTaWRlID0gc3RkOjptaW4obG9naWNhbExl
ZnRTaWRlLCBjdXJyLT5sb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93KCkpOwogICAgICAgICBsb2dp
Y2FsUmlnaHRTaWRlID0gc3RkOjptYXgobG9naWNhbFJpZ2h0U2lkZSwgY3Vyci0+bG9naWNhbFJp
Z2h0VmlzdWFsT3ZlcmZsb3coKSk7CiAgICAgfQogCi0gICAgaWYgKCFsYXN0SW5saW5lSW5SZWdp
b24pCisgICAgaWYgKCFsYXN0SW5saW5lSW5GcmFnbWVudCkKICAgICAgICAgcmV0dXJuIExheW91
dFJlY3QoKTsKIAotICAgIGxvZ2ljYWxIZWlnaHQgPSBsYXN0SW5saW5lSW5SZWdpb24tPmxvZ2lj
YWxCb3R0b21WaXN1YWxPdmVyZmxvdyhsYXN0SW5saW5lSW5SZWdpb24tPnJvb3QoKS5saW5lQm90
dG9tKCkpIC0gbG9naWNhbFRvcDsKKyAgICBsb2dpY2FsSGVpZ2h0ID0gbGFzdElubGluZUluRnJh
Z21lbnQtPmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyhsYXN0SW5saW5lSW5GcmFnbWVudC0+
cm9vdCgpLmxpbmVCb3R0b20oKSkgLSBsb2dpY2FsVG9wOwogICAgIAogICAgIExheW91dFVuaXQg
bG9naWNhbFdpZHRoID0gbG9naWNhbFJpZ2h0U2lkZSAtIGxvZ2ljYWxMZWZ0U2lkZTsKICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHJldmlzaW9uIDIy
MjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBQ
b3NpdGlvbjsKLWNsYXNzIFJlbmRlclJlZ2lvbjsKK2NsYXNzIFJlbmRlckZyYWdtZW50Q29udGFp
bmVyOwogCiBjbGFzcyBSZW5kZXJJbmxpbmUgOiBwdWJsaWMgUmVuZGVyQm94TW9kZWxPYmplY3Qg
ewogcHVibGljOgpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9S
VCBJbnRSZWN0IGxpbmVzQm91bmRpbmdCb3goKSBjb25zdDsKICAgICBMYXlvdXRSZWN0IGxpbmVz
VmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveCgpIGNvbnN0OwotICAgIExheW91dFJlY3QgbGluZXNW
aXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94SW5SZWdpb24oY29uc3QgUmVuZGVyUmVnaW9uKikgY29u
c3Q7CisgICAgTGF5b3V0UmVjdCBsaW5lc1Zpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3hJbkZyYWdt
ZW50KGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKikgY29uc3Q7CiAKICAgICBJbmxpbmVG
bG93Qm94KiBjcmVhdGVBbmRBcHBlbmRJbmxpbmVGbG93Qm94KCk7CiAKQEAgLTE0OSw3ICsxNDks
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJM
YXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBUcmFuc2Zvcm1TdGF0ZSYsIE1hcENv
b3JkaW5hdGVzRmxhZ3MsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdCBvdmVycmlkZTsKICAgICBjb25z
dCBSZW5kZXJPYmplY3QqIHB1c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCogYW5jZXN0b3JUb1N0b3BBdCwgUmVuZGVyR2VvbWV0cnlNYXAmKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExh
eW91dFBvaW50JiwgY29uc3QgUmVuZGVyUmVnaW9uKikgZmluYWw7CisgICAgVmlzaWJsZVBvc2l0
aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJGcmFn
bWVudENvbnRhaW5lciopIGZpbmFsOwogCiAgICAgTGF5b3V0UmVjdCBmcmFtZVJlY3RGb3JTdGlj
a3lQb3NpdGlvbmluZygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGxpbmVzQm91bmRpbmdCb3goKTsg
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlz
aW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNl
RXZlbnQuaCIKICNpbmNsdWRlICJSZW5kZXJGbGV4aWJsZUJveC5oIgogI2luY2x1ZGUgIlJlbmRl
ckZsb3dUaHJlYWQuaCIKKyNpbmNsdWRlICJSZW5kZXJGcmFnbWVudENvbnRhaW5lci5oIgogI2lu
Y2x1ZGUgIlJlbmRlckdlb21ldHJ5TWFwLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNp
bmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKQEAgLTk2LDcgKzk3LDYgQEAKICNpbmNsdWRlICJSZW5k
ZXJMYXllckZpbHRlckluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJNYXJxdWVlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgiCi0jaW5jbHVkZSAiUmVuZGVyUmVnaW9u
LmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVwbGljYS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291
cmNlQ2xpcHBlci5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgpAQCAtMjA5Miw5ICsy
MDkyLDkgQEAgc3RhdGljIGlubGluZSBjb25zdCBSZW5kZXJMYXllciogYWNjdW11bAogICAgIGlm
IChhZGp1c3RGb3JDb2x1bW5zID09IFJlbmRlckxheWVyOjpBZGp1c3RGb3JDb2x1bW5zKSB7CiAg
ICAgICAgIGlmIChSZW5kZXJMYXllciogcGFyZW50TGF5ZXIgPSBsYXllci0+cGFyZW50KCkpIHsK
ICAgICAgICAgICAgIGlmIChpczxSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ+KHBhcmVudExh
eWVyLT5yZW5kZXJlcigpKSkgewotICAgICAgICAgICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9u
ID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkPihwYXJlbnRMYXllci0+cmVu
ZGVyZXIoKSkucGh5c2ljYWxUcmFuc2xhdGlvbkZyb21GbG93VG9SZWdpb24obG9jYXRpb24pOwot
ICAgICAgICAgICAgICAgIGlmIChyZWdpb24pCi0gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9u
Lm1vdmVCeShyZWdpb24tPnRvcExlZnRMb2NhdGlvbigpICsgLXBhcmVudExheWVyLT5yZW5kZXJC
b3goKS0+dG9wTGVmdExvY2F0aW9uKCkpOworICAgICAgICAgICAgICAgIFJlbmRlckZyYWdtZW50
Q29udGFpbmVyKiBmcmFnbWVudCA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVh
ZD4ocGFyZW50TGF5ZXItPnJlbmRlcmVyKCkpLnBoeXNpY2FsVHJhbnNsYXRpb25Gcm9tRmxvd1Rv
RnJhZ21lbnQobG9jYXRpb24pOworICAgICAgICAgICAgICAgIGlmIChmcmFnbWVudCkKKyAgICAg
ICAgICAgICAgICAgICAgbG9jYXRpb24ubW92ZUJ5KGZyYWdtZW50LT50b3BMZWZ0TG9jYXRpb24o
KSArIC1wYXJlbnRMYXllci0+cmVuZGVyQm94KCktPnRvcExlZnRMb2NhdGlvbigpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTU1MjksNyArNTUyOSw3IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IEMKICAgICAgICAgICAgICAgICBiYWNrZ3Jv
dW5kUmVjdC5pbnRlcnNlY3QobGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cpOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgLy8gU2hpZnQgdGhlIGJvdW5kcyB0byBiZSBmb3Igb3Vy
IHJlZ2lvbiBvbmx5LgotICAgICAgICAgICAgTGF5b3V0UmVjdCBib3VuZHMgPSByZW5kZXJCb3go
KS0+Ym9yZGVyQm94UmVjdEluUmVnaW9uKG51bGxwdHIpOworICAgICAgICAgICAgTGF5b3V0UmVj
dCBib3VuZHMgPSByZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdEluRnJhZ21lbnQobnVsbHB0cik7
CiAKICAgICAgICAgICAgIGJvdW5kcy5tb3ZlKG9mZnNldEZyb21Sb290TG9jYWwpOwogICAgICAg
ICAgICAgaWYgKHRoaXMgIT0gY2xpcFJlY3RzQ29udGV4dC5yb290TGF5ZXIgfHwgY2xpcFJlY3Rz
Q29udGV4dC5yZXNwZWN0T3ZlcmZsb3dDbGlwID09IFJlc3BlY3RPdmVyZmxvd0NsaXApCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAko
cmV2aXNpb24gMjIyNDYyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
QmFja2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDEzICs1MSwxMyBAQAogI2luY2x1ZGUg
IlBsdWdpblZpZXdCYXNlLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyRmxvd1RocmVhZC5oIgorI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50Q29udGFpbmVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVySFRNTENhbnZhcy5oIgogI2luY2x1ZGUgIlJlbmRlcklGcmFt
ZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJS
ZW5kZXJNZWRpYS5oIgotI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgogI2luY2x1ZGUgIlJlbmRl
clZpZGVvLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ0Nv
b3JkaW5hdG9yLmgiCkBAIC0yNTA2LDcgKzI1MDYsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2lu
Zzo6cGFpbnRJbnRvTGF5ZXIoCiAgICAgaWYgKG1fb3duaW5nTGF5ZXIuaXNSZW5kZXJWaWV3TGF5
ZXIoKSkKICAgICAgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkud2lsbFBhaW50Q29u
dGVudHMoY29udGV4dCwgcGFpbnREaXJ0eVJlY3QsIHBhaW50aW5nU3RhdGUpOwogCi0gICAgLy8g
RklYTUU6IEdyYXBoaWNzTGF5ZXJzIG5lZWQgYSB3YXkgdG8gc3BsaXQgZm9yIFJlbmRlclJlZ2lv
bnMuCisgICAgLy8gRklYTUU6IEdyYXBoaWNzTGF5ZXJzIG5lZWQgYSB3YXkgdG8gc3BsaXQgZm9y
IFJlbmRlckZyYWdtZW50Q29udGFpbmVycy4KICAgICBSZW5kZXJMYXllcjo6TGF5ZXJQYWludGlu
Z0luZm8gcGFpbnRpbmdJbmZvKCZtX293bmluZ0xheWVyLCBwYWludERpcnR5UmVjdCwgcGFpbnRC
ZWhhdmlvciwgLW1fc3VicGl4ZWxPZmZzZXRGcm9tUmVuZGVyZXIpOwogICAgIG1fb3duaW5nTGF5
ZXIucGFpbnRMYXllckNvbnRlbnRzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNv
bXBvc2l0b3IuY3BwCShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3Niw3ICsy
MDc2LDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhbkJlQ29tcG9zaQogICAgICAg
ICBpZiAoIWxheWVyLmlzSW5zaWRlRmxvd1RocmVhZCgpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICAgICAgLy8gQ1NTIFJlZ2lvbnMgZmxvdyB0aHJlYWRzIGRvIG5vdCBuZWVkIHRv
IGJlIGNvbXBvc2l0ZWQgYXMgd2UgdXNlIGNvbXBvc2l0ZWQgUmVuZGVyUmVnaW9ucworICAgICAg
ICAvLyBDU1MgUmVnaW9ucyBmbG93IHRocmVhZHMgZG8gbm90IG5lZWQgdG8gYmUgY29tcG9zaXRl
ZCBhcyB3ZSB1c2UgY29tcG9zaXRlZCBSZW5kZXJGcmFnbWVudENvbnRhaW5lcnMKICAgICAgICAg
Ly8gdG8gcmVuZGVyIHRoZSBiYWNrZ3JvdW5kIG9mIHRoZSBSZW5kZXJGbG93VGhyZWFkLgogICAg
ICAgICBpZiAobGF5ZXIuaXNSZW5kZXJGbG93VGhyZWFkKCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFr
LmNwcAkocmV2aXNpb24gMjIyNDYyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpbmVCcmVhay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw3ICsxNTEsNyBAQCBib29sIFJl
bmRlckxpbmVCcmVhazo6Y2FuQmVTZWxlY3Rpb25MZWFmCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LVZpc2libGVQb3NpdGlvbiBSZW5kZXJMaW5lQnJlYWs6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3Qg
TGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJSZWdpb24qKQorVmlzaWJsZVBvc2l0aW9uIFJlbmRl
ckxpbmVCcmVhazo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJl
bmRlckZyYWdtZW50Q29udGFpbmVyKikKIHsKICAgICBlbnN1cmVMaW5lQm94ZXMoKTsKICAgICBy
ZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKDAsIERPV05TVFJFQU0pOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaAkocmV2aXNpb24gMjIyNDYyKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oCSh3b3JraW5nIGNv
cHkpCkBAIC02Miw3ICs2Miw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBjYW5IYXZlQ2hpbGRyZW4o
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZvaWQgcGFpbnQoUGFpbnRJ
bmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBvdmVycmlkZSB7IH0KIAotICAgIFZpc2libGVQb3Np
dGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyUmVn
aW9uKikgb3ZlcnJpZGU7CisgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29u
c3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciopIG92ZXJyaWRl
OwogICAgIGludCBjYXJldE1pbk9mZnNldCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIGludCBjYXJl
dE1heE9mZnNldCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFm
KCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcAkocmV2aXNpb24gMjIyNDYy
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVh
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMSwxNiArMjAxLDE2IEBAIHZvaWQgUmVuZGVyTXVs
dGlDb2x1bW5GbG93VGhyZWFkOjpldmFjdWEKICAgICBkZXN0cm95KCk7CiB9CiAKLXZvaWQgUmVu
ZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjphZGRSZWdpb25Ub1RocmVhZChSZW5kZXJSZWdpb24q
IHJlbmRlclJlZ2lvbikKK3ZvaWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjphZGRGcmFn
bWVudFRvVGhyZWFkKFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBSZW5kZXJGcmFnbWVudENvbnRh
aW5lcikKIHsKLSAgICBhdXRvKiBjb2x1bW5TZXQgPSBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVt
blNldD4ocmVuZGVyUmVnaW9uKTsKKyAgICBhdXRvKiBjb2x1bW5TZXQgPSBkb3duY2FzdDxSZW5k
ZXJNdWx0aUNvbHVtblNldD4oUmVuZGVyRnJhZ21lbnRDb250YWluZXIpOwogICAgIGlmIChSZW5k
ZXJNdWx0aUNvbHVtblNldCogbmV4dFNldCA9IGNvbHVtblNldC0+bmV4dFNpYmxpbmdNdWx0aUNv
bHVtblNldCgpKSB7Ci0gICAgICAgIFJlbmRlclJlZ2lvbkxpc3Q6Oml0ZXJhdG9yIGl0ID0gbV9y
ZWdpb25MaXN0LmZpbmQobmV4dFNldCk7Ci0gICAgICAgIEFTU0VSVChpdCAhPSBtX3JlZ2lvbkxp
c3QuZW5kKCkpOwotICAgICAgICBtX3JlZ2lvbkxpc3QuaW5zZXJ0QmVmb3JlKGl0LCBjb2x1bW5T
ZXQpOworICAgICAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lckxpc3Q6Oml0ZXJhdG9yIGl0ID0g
bV9mcmFnbWVudExpc3QuZmluZChuZXh0U2V0KTsKKyAgICAgICAgQVNTRVJUKGl0ICE9IG1fZnJh
Z21lbnRMaXN0LmVuZCgpKTsKKyAgICAgICAgbV9mcmFnbWVudExpc3QuaW5zZXJ0QmVmb3JlKGl0
LCBjb2x1bW5TZXQpOwogICAgIH0gZWxzZQotICAgICAgICBtX3JlZ2lvbkxpc3QuYWRkKGNvbHVt
blNldCk7Ci0gICAgcmVuZGVyUmVnaW9uLT5zZXRJc1ZhbGlkKHRydWUpOworICAgICAgICBtX2Zy
YWdtZW50TGlzdC5hZGQoY29sdW1uU2V0KTsKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lci0+
c2V0SXNWYWxpZCh0cnVlKTsKIH0KIAogdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6
OndpbGxCZVJlbW92ZWRGcm9tVHJlZSgpCkBAIC0yMTksNyArMjE5LDcgQEAgdm9pZCBSZW5kZXJN
dWx0aUNvbHVtbkZsb3dUaHJlYWQ6OndpbGxCZQogICAgIC8vIGFyZSBzaWJsaW5ncyBvZiB0aGlz
IG9iamVjdCwgYW5kIHRoZXJlIG1heSBiZSBwb2ludGVycyB0byB0aGlzIG9iamVjdCdzIHNpYmxp
bmcgc29tZXdoZXJlCiAgICAgLy8gZnVydGhlciB1cCBvbiB0aGUgY2FsbCBzdGFjay4KICAgICBm
b3IgKFJlbmRlck11bHRpQ29sdW1uU2V0KiBjb2x1bW5TZXQgPSBmaXJzdE11bHRpQ29sdW1uU2V0
KCk7IGNvbHVtblNldDsgY29sdW1uU2V0ID0gY29sdW1uU2V0LT5uZXh0U2libGluZ011bHRpQ29s
dW1uU2V0KCkpCi0gICAgICAgIGNvbHVtblNldC0+ZGV0YWNoUmVnaW9uKCk7CisgICAgICAgIGNv
bHVtblNldC0+ZGV0YWNoRnJhZ21lbnQoKTsKICAgICBtdWx0aUNvbHVtbkJsb2NrRmxvdygpLT5z
ZXRNdWx0aUNvbHVtbkZsb3dUaHJlYWQobnVsbHB0cik7CiAgICAgUmVuZGVyRmxvd1RocmVhZDo6
d2lsbEJlUmVtb3ZlZEZyb21UcmVlKCk7CiB9CkBAIC0zOTIsNyArMzkyLDcgQEAgUmVuZGVyT2Jq
ZWN0KiBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYQogICAgIFJlbmRlck11bHRpQ29sdW1uU2V0
KiBuZXdTZXQgPSBuZXcgUmVuZGVyTXVsdGlDb2x1bW5TZXQoKnRoaXMsIFJlbmRlclN0eWxlOjpj
cmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KG11bHRpY29sQ29udGFpbmVyLT5zdHlsZSgp
LCBCTE9DSykpOwogICAgIG5ld1NldC0+aW5pdGlhbGl6ZVN0eWxlKCk7CiAgICAgbXVsdGljb2xD
b250YWluZXItPlJlbmRlckJsb2NrOjphZGRDaGlsZChuZXdTZXQsIGluc2VydEJlZm9yZU11bHRp
Y29sQ2hpbGQpOwotICAgIGludmFsaWRhdGVSZWdpb25zKCk7CisgICAgaW52YWxpZGF0ZUZyYWdt
ZW50cygpOwogCiAgICAgLy8gV2UgY2Fubm90IGhhbmRsZSBpbW1lZGlhdGUgY29sdW1uIHNldCBz
aWJsaW5ncyBhdCB0aGUgbW9tZW50IChhbmQgdGhlcmUncyBubyBuZWVkIGZvcgogICAgIC8vIGl0
LCBlaXRoZXIpLiBUaGVyZSBoYXMgdG8gYmUgYXQgbGVhc3Qgb25lIHNwYW5uZXIgc2VwYXJhdGlu
ZyB0aGVtLgpAQCAtNDY5LDcgKzQ2OSw3IEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhy
ZWFkOjpmbG93VGgKIHsKICAgICBpZiAobV9iZWluZ0V2YWN1YXRlZCkKICAgICAgICAgcmV0dXJu
OwotICAgIGludmFsaWRhdGVSZWdpb25zKCk7CisgICAgaW52YWxpZGF0ZUZyYWdtZW50cygpOwog
ICAgIGlmIChpczxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4ocmVsYXRpdmUp
KSB7CiAgICAgICAgIC8vIFJlbW92ZSB0aGUgbWFwIGVudHJ5IGZvciB0aGlzIHNwYW5uZXIsIGJ1
dCBsZWF2ZSB0aGUgYWN0dWFsIHNwYW5uZXIgcmVuZGVyZXIgYWxvbmUuIEFsc28KICAgICAgICAg
Ly8ga2VlcCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBzcGFubmVyLCBzaW5jZSB0aGUgcGxhY2Vob2xk
ZXIgbWF5IGJlIGFib3V0IHRvIGJlIHJlLWluc2VydGVkCkBAIC01MjUsMjggKzUyNSwyOCBAQCBM
YXlvdXRVbml0IFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6CiAKIHZvaWQgUmVuZGVyTXVs
dGlDb2x1bW5GbG93VGhyZWFkOjpzZXRQYWdlQnJlYWsoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2Nr
LCBMYXlvdXRVbml0IG9mZnNldCwgTGF5b3V0VW5pdCBzcGFjZVNob3J0YWdlKQogewotICAgIGlm
IChhdXRvKiBtdWx0aWNvbFNldCA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU2V0PihyZWdp
b25BdEJsb2NrT2Zmc2V0KGJsb2NrLCBvZmZzZXQpKSkKKyAgICBpZiAoYXV0byogbXVsdGljb2xT
ZXQgPSBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtblNldD4oZnJhZ21lbnRBdEJsb2NrT2Zmc2V0
KGJsb2NrLCBvZmZzZXQpKSkKICAgICAgICAgbXVsdGljb2xTZXQtPnJlY29yZFNwYWNlU2hvcnRh
Z2Uoc3BhY2VTaG9ydGFnZSk7CiB9CiAKIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFk
Ojp1cGRhdGVNaW5pbXVtUGFnZUhlaWdodChjb25zdCBSZW5kZXJCbG9jayogYmxvY2ssIExheW91
dFVuaXQgb2Zmc2V0LCBMYXlvdXRVbml0IG1pbkhlaWdodCkKIHsKLSAgICBpZiAoYXV0byogbXVs
dGljb2xTZXQgPSBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtblNldD4ocmVnaW9uQXRCbG9ja09m
ZnNldChibG9jaywgb2Zmc2V0KSkpCisgICAgaWYgKGF1dG8qIG11bHRpY29sU2V0ID0gZG93bmNh
c3Q8UmVuZGVyTXVsdGlDb2x1bW5TZXQ+KGZyYWdtZW50QXRCbG9ja09mZnNldChibG9jaywgb2Zm
c2V0KSkpCiAgICAgICAgIG11bHRpY29sU2V0LT51cGRhdGVNaW5pbXVtQ29sdW1uSGVpZ2h0KG1p
bkhlaWdodCk7CiB9CiAKLVJlbmRlclJlZ2lvbiogUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFk
OjpyZWdpb25BdEJsb2NrT2Zmc2V0KGNvbnN0IFJlbmRlckJveCogYm94LCBMYXlvdXRVbml0IG9m
ZnNldCwgYm9vbCBleHRlbmRMYXN0UmVnaW9uKSBjb25zdAorUmVuZGVyRnJhZ21lbnRDb250YWlu
ZXIqIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6ZnJhZ21lbnRBdEJsb2NrT2Zmc2V0KGNv
bnN0IFJlbmRlckJveCogYm94LCBMYXlvdXRVbml0IG9mZnNldCwgYm9vbCBleHRlbmRMYXN0RnJh
Z21lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2luTGF5b3V0KQotICAgICAgICByZXR1cm4gUmVu
ZGVyRmxvd1RocmVhZDo6cmVnaW9uQXRCbG9ja09mZnNldChib3gsIG9mZnNldCwgZXh0ZW5kTGFz
dFJlZ2lvbik7CisgICAgICAgIHJldHVybiBSZW5kZXJGbG93VGhyZWFkOjpmcmFnbWVudEF0Qmxv
Y2tPZmZzZXQoYm94LCBvZmZzZXQsIGV4dGVuZExhc3RGcmFnbWVudCk7CiAKLSAgICAvLyBMYXlv
dXQgaW4gcHJvZ3Jlc3MuIFdlIGFyZSBjYWxjdWxhdGluZyB0aGUgc2V0IGhlaWdodHMgYXMgd2Ug
c3BlYWssIHNvIHRoZSByZWdpb24gcmFuZ2UKKyAgICAvLyBMYXlvdXQgaW4gcHJvZ3Jlc3MuIFdl
IGFyZSBjYWxjdWxhdGluZyB0aGUgc2V0IGhlaWdodHMgYXMgd2Ugc3BlYWssIHNvIHRoZSBmcmFn
bWVudCByYW5nZQogICAgIC8vIGluZm9ybWF0aW9uIGlzIG5vdCB1cC10by1kYXRlLgogCiAgICAg
UmVuZGVyTXVsdGlDb2x1bW5TZXQqIGNvbHVtblNldCA9IG1fbGFzdFNldFdvcmtlZE9uID8gbV9s
YXN0U2V0V29ya2VkT24gOiBmaXJzdE11bHRpQ29sdW1uU2V0KCk7CiAgICAgaWYgKCFjb2x1bW5T
ZXQpIHsKICAgICAgICAgLy8gSWYgdGhlcmUncyBubyBzZXQsIGJhaWwuIFRoaXMgbXVsdGljb2wg
aXMgZW1wdHkgb3Igb25seSBjb25zaXN0cyBvZiBzcGFubmVycy4gVGhlcmUKLSAgICAgICAgLy8g
YXJlIG5vIHJlZ2lvbnMuCisgICAgICAgIC8vIGFyZSBubyBmcmFnbWVudHMuCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KICAgICAvLyBUaGUgbGFzdCBzZXQgd29ya2VkIG9uIGlzIGEg
Z29vZCBndWVzcy4gQnV0IGlmIHdlJ3JlIG5vdCB3aXRoaW4gdGhlIGJvdW5kcywgc2VhcmNoIGZv
ciB0aGUKQEAgLTU2OSwyOSArNTY5LDI5IEBAIFJlbmRlclJlZ2lvbiogUmVuZGVyTXVsdGlDb2x1
bW5GbG93VGhyZWEKICAgICByZXR1cm4gY29sdW1uU2V0OwogfQogCi12b2lkIFJlbmRlck11bHRp
Q29sdW1uRmxvd1RocmVhZDo6c2V0UmVnaW9uUmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQm94JiBi
b3gsIFJlbmRlclJlZ2lvbiogc3RhcnRSZWdpb24sIFJlbmRlclJlZ2lvbiogZW5kUmVnaW9uKQor
dm9pZCBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OnNldEZyYWdtZW50UmFuZ2VGb3JCb3go
Y29uc3QgUmVuZGVyQm94JiBib3gsIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBzdGFydEZyYWdt
ZW50LCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZW5kRnJhZ21lbnQpCiB7CiAgICAgLy8gU29t
ZSBjb2x1bW4gc2V0cyBtYXkgaGF2ZSB6ZXJvIGhlaWdodCwgd2hpY2ggbWVhbnMgdGhhdCB0d28g
b3IgbW9yZSBzZXRzIG1heSBzdGFydCBhdCB0aGUKICAgICAvLyBleGFjdCBzYW1lIGZsb3cgdGhy
ZWFkIHBvc2l0aW9uLCB3aGljaCBtZWFucyB0aGF0IHNvbWUgcGFydHMgb2YgdGhlIGNvZGUgbWF5
IGJlbGlldmUgdGhhdCBhCiAgICAgLy8gZ2l2ZW4gYm94IGxpdmVzIGluIHNldHMgdGhhdCBpdCBk
b2Vzbid0IHJlYWxseSBsaXZlIGluLiBNYWtlIHNvbWUgYWRqdXN0bWVudHMgaGVyZSBhbmQKLSAg
ICAvLyBpbmNsdWRlIHN1Y2ggc2V0cyBpZiB0aGV5IGFyZSBhZGphY2VudCB0byB0aGUgc3RhcnQg
YW5kL29yIGVuZCByZWdpb25zLgotICAgIGZvciAoUmVuZGVyTXVsdGlDb2x1bW5TZXQqIGNvbHVt
blNldCA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU2V0Pigqc3RhcnRSZWdpb24pLnByZXZp
b3VzU2libGluZ011bHRpQ29sdW1uU2V0KCk7IGNvbHVtblNldDsgY29sdW1uU2V0ID0gY29sdW1u
U2V0LT5wcmV2aW91c1NpYmxpbmdNdWx0aUNvbHVtblNldCgpKSB7CisgICAgLy8gaW5jbHVkZSBz
dWNoIHNldHMgaWYgdGhleSBhcmUgYWRqYWNlbnQgdG8gdGhlIHN0YXJ0IGFuZC9vciBlbmQgZnJh
Z21lbnRzLgorICAgIGZvciAoUmVuZGVyTXVsdGlDb2x1bW5TZXQqIGNvbHVtblNldCA9IGRvd25j
YXN0PFJlbmRlck11bHRpQ29sdW1uU2V0Pigqc3RhcnRGcmFnbWVudCkucHJldmlvdXNTaWJsaW5n
TXVsdGlDb2x1bW5TZXQoKTsgY29sdW1uU2V0OyBjb2x1bW5TZXQgPSBjb2x1bW5TZXQtPnByZXZp
b3VzU2libGluZ011bHRpQ29sdW1uU2V0KCkpIHsKICAgICAgICAgaWYgKGNvbHVtblNldC0+bG9n
aWNhbEhlaWdodEluRmxvd1RocmVhZCgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN0
YXJ0UmVnaW9uID0gY29sdW1uU2V0OworICAgICAgICBzdGFydEZyYWdtZW50ID0gY29sdW1uU2V0
OwogICAgIH0KLSAgICBmb3IgKFJlbmRlck11bHRpQ29sdW1uU2V0KiBjb2x1bW5TZXQgPSBkb3du
Y2FzdDxSZW5kZXJNdWx0aUNvbHVtblNldD4oKnN0YXJ0UmVnaW9uKS5uZXh0U2libGluZ011bHRp
Q29sdW1uU2V0KCk7IGNvbHVtblNldDsgY29sdW1uU2V0ID0gY29sdW1uU2V0LT5uZXh0U2libGlu
Z011bHRpQ29sdW1uU2V0KCkpIHsKKyAgICBmb3IgKFJlbmRlck11bHRpQ29sdW1uU2V0KiBjb2x1
bW5TZXQgPSBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtblNldD4oKnN0YXJ0RnJhZ21lbnQpLm5l
eHRTaWJsaW5nTXVsdGlDb2x1bW5TZXQoKTsgY29sdW1uU2V0OyBjb2x1bW5TZXQgPSBjb2x1bW5T
ZXQtPm5leHRTaWJsaW5nTXVsdGlDb2x1bW5TZXQoKSkgewogICAgICAgICBpZiAoY29sdW1uU2V0
LT5sb2dpY2FsSGVpZ2h0SW5GbG93VGhyZWFkKCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgZW5kUmVnaW9uID0gY29sdW1uU2V0OworICAgICAgICBlbmRGcmFnbWVudCA9IGNvbHVtblNl
dDsKICAgICB9CiAKLSAgICBSZW5kZXJGbG93VGhyZWFkOjpzZXRSZWdpb25SYW5nZUZvckJveChi
b3gsIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pOworICAgIFJlbmRlckZsb3dUaHJlYWQ6OnNldEZy
YWdtZW50UmFuZ2VGb3JCb3goYm94LCBzdGFydEZyYWdtZW50LCBlbmRGcmFnbWVudCk7CiB9CiAK
LWJvb2wgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjphZGRGb3JjZWRSZWdpb25CcmVhayhj
b25zdCBSZW5kZXJCbG9jayogYmxvY2ssIExheW91dFVuaXQgb2Zmc2V0LCBSZW5kZXJCb3gqIC8q
YnJlYWtDaGlsZCovLCBib29sIC8qaXNCZWZvcmUqLywgTGF5b3V0VW5pdCogb2Zmc2V0QnJlYWtB
ZGp1c3RtZW50KQorYm9vbCBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmFkZEZvcmNlZEZy
YWdtZW50QnJlYWsoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrLCBMYXlvdXRVbml0IG9mZnNldCwg
UmVuZGVyQm94KiAvKmJyZWFrQ2hpbGQqLywgYm9vbCAvKmlzQmVmb3JlKi8sIExheW91dFVuaXQq
IG9mZnNldEJyZWFrQWRqdXN0bWVudCkKIHsKLSAgICBpZiAoYXV0byogbXVsdGljb2xTZXQgPSBk
b3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtblNldD4ocmVnaW9uQXRCbG9ja09mZnNldChibG9jaywg
b2Zmc2V0KSkpIHsKKyAgICBpZiAoYXV0byogbXVsdGljb2xTZXQgPSBkb3duY2FzdDxSZW5kZXJN
dWx0aUNvbHVtblNldD4oZnJhZ21lbnRBdEJsb2NrT2Zmc2V0KGJsb2NrLCBvZmZzZXQpKSkgewog
ICAgICAgICBtdWx0aWNvbFNldC0+YWRkRm9yY2VkQnJlYWsob2Zmc2V0KTsKICAgICAgICAgaWYg
KG9mZnNldEJyZWFrQWRqdXN0bWVudCkKICAgICAgICAgICAgICpvZmZzZXRCcmVha0FkanVzdG1l
bnQgPSBwYWdlTG9naWNhbEhlaWdodEZvck9mZnNldChvZmZzZXQpID8gcGFnZVJlbWFpbmluZ0xv
Z2ljYWxIZWlnaHRGb3JPZmZzZXQob2Zmc2V0LCBJbmNsdWRlUGFnZUJvdW5kYXJ5KSA6IExheW91
dFVuaXQ6OmZyb21QaXhlbCgwKTsKQEAgLTY1NCw4ICs2NTQsOCBAQCBMYXlvdXRTaXplIFJlbmRl
ck11bHRpQ29sdW1uRmxvd1RocmVhZDo6CiAgICAgICAgICpvZmZzZXREZXBlbmRzT25Qb2ludCA9
IHRydWU7CiAgICAgCiAgICAgTGF5b3V0UG9pbnQgdHJhbnNsYXRlZFBoeXNpY2FsUG9pbnQocGh5
c2ljYWxQb2ludCk7Ci0gICAgaWYgKFJlbmRlclJlZ2lvbiogcmVnaW9uID0gcGh5c2ljYWxUcmFu
c2xhdGlvbkZyb21GbG93VG9SZWdpb24odHJhbnNsYXRlZFBoeXNpY2FsUG9pbnQpKQotICAgICAg
ICB0cmFuc2xhdGVkUGh5c2ljYWxQb2ludC5tb3ZlQnkocmVnaW9uLT50b3BMZWZ0TG9jYXRpb24o
KSk7CisgICAgaWYgKFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCA9IHBoeXNpY2Fs
VHJhbnNsYXRpb25Gcm9tRmxvd1RvRnJhZ21lbnQodHJhbnNsYXRlZFBoeXNpY2FsUG9pbnQpKQor
ICAgICAgICB0cmFuc2xhdGVkUGh5c2ljYWxQb2ludC5tb3ZlQnkoZnJhZ21lbnQtPnRvcExlZnRM
b2NhdGlvbigpKTsKICAgICAKICAgICBMYXlvdXRTaXplIG9mZnNldCh0cmFuc2xhdGVkUGh5c2lj
YWxQb2ludC54KCksIHRyYW5zbGF0ZWRQaHlzaWNhbFBvaW50LnkoKSk7CiAgICAgaWYgKGlzPFJl
bmRlckJveD4oZW5jbG9zaW5nQ29udGFpbmVyKSkKQEAgLTY2OSw3ICs2NjksNyBAQCB2b2lkIFJl
bmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6bWFwQWJzCiAgICAgcGFyZW50KCktPm1hcEFic29s
dXRlVG9Mb2NhbFBvaW50KG1vZGUsIHRyYW5zZm9ybVN0YXRlKTsKICAgICBMYXlvdXRQb2ludCB0
cmFuc2Zvcm1Qb2ludCh0cmFuc2Zvcm1TdGF0ZS5tYXBwZWRQb2ludCgpKTsKICAgICAKLSAgICAv
LyBOb3cgd2FsayB0aHJvdWdoIGVhY2ggcmVnaW9uLgorICAgIC8vIE5vdyB3YWxrIHRocm91Z2gg
ZWFjaCBmcmFnbWVudC4KICAgICBjb25zdCBSZW5kZXJNdWx0aUNvbHVtblNldCogY2FuZGlkYXRl
Q29sdW1uU2V0ID0gbnVsbHB0cjsKICAgICBMYXlvdXRQb2ludCBjYW5kaWRhdGVQb2ludDsKICAg
ICBMYXlvdXRTaXplIGNhbmRpZGF0ZUNvbnRhaW5lck9mZnNldDsKQEAgLTY4MCwxNiArNjgwLDE2
IEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjptYXBBYnMKICAgICAgICAgY2Fu
ZGlkYXRlUG9pbnQgPSB0cmFuc2Zvcm1Qb2ludCAtIGNhbmRpZGF0ZUNvbnRhaW5lck9mZnNldDsK
ICAgICAgICAgY2FuZGlkYXRlQ29sdW1uU2V0ID0gJmNvbHVtblNldDsKICAgICAgICAgCi0gICAg
ICAgIC8vIFdlIHJlYWxseSBoYXZlIG5vIGNsdWUgd2hhdCB0byBkbyB3aXRoIG92ZXJmbG93LiBX
ZSdsbCBqdXN0IHVzZSB0aGUgY2xvc2VzdCByZWdpb24gdG8gdGhlIHBvaW50IGluIHRoYXQgY2Fz
ZS4KKyAgICAgICAgLy8gV2UgcmVhbGx5IGhhdmUgbm8gY2x1ZSB3aGF0IHRvIGRvIHdpdGggb3Zl
cmZsb3cuIFdlJ2xsIGp1c3QgdXNlIHRoZSBjbG9zZXN0IGZyYWdtZW50IHRvIHRoZSBwb2ludCBp
biB0aGF0IGNhc2UuCiAgICAgICAgIExheW91dFVuaXQgcG9pbnRPZmZzZXQgPSBpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID8gY2FuZGlkYXRlUG9pbnQueSgpIDogY2FuZGlkYXRlUG9pbnQueCgp
OwotICAgICAgICBMYXlvdXRVbml0IHJlZ2lvbk9mZnNldCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkgPyBjb2x1bW5TZXQudG9wTGVmdExvY2F0aW9uKCkueSgpIDogY29sdW1uU2V0LnRvcExl
ZnRMb2NhdGlvbigpLngoKTsKLSAgICAgICAgaWYgKHBvaW50T2Zmc2V0IDwgcmVnaW9uT2Zmc2V0
ICsgY29sdW1uU2V0LmxvZ2ljYWxIZWlnaHQoKSkKKyAgICAgICAgTGF5b3V0VW5pdCBmcmFnbWVu
dE9mZnNldCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjb2x1bW5TZXQudG9wTGVmdExv
Y2F0aW9uKCkueSgpIDogY29sdW1uU2V0LnRvcExlZnRMb2NhdGlvbigpLngoKTsKKyAgICAgICAg
aWYgKHBvaW50T2Zmc2V0IDwgZnJhZ21lbnRPZmZzZXQgKyBjb2x1bW5TZXQubG9naWNhbEhlaWdo
dCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIAotICAgIC8vIE9uY2Ugd2UgaGF2
ZSBhIGdvb2QgZ3Vlc3MgYXMgdG8gd2hpY2ggcmVnaW9uIHdlIGhpdCB0ZXN0ZWQgdGhyb3VnaCAo
YW5kIHllcywgdGhpcyB3YXMganVzdCBhIGhldXJpc3RpYywgYnV0IGl0J3MKLSAgICAvLyB0aGUg
YmVzdCB3ZSBjb3VsZCBkbyksIHRoZW4gd2UgY2FuIG1hcCBmcm9tIHRoZSByZWdpb24gaW50byB0
aGUgZmxvdyB0aHJlYWQuCi0gICAgTGF5b3V0U2l6ZSB0cmFuc2xhdGlvbk9mZnNldCA9IHBoeXNp
Y2FsVHJhbnNsYXRpb25Gcm9tUmVnaW9uVG9GbG93KGNhbmRpZGF0ZUNvbHVtblNldCwgY2FuZGlk
YXRlUG9pbnQpICsgY2FuZGlkYXRlQ29udGFpbmVyT2Zmc2V0OworICAgIC8vIE9uY2Ugd2UgaGF2
ZSBhIGdvb2QgZ3Vlc3MgYXMgdG8gd2hpY2ggZnJhZ21lbnQgd2UgaGl0IHRlc3RlZCB0aHJvdWdo
IChhbmQgeWVzLCB0aGlzIHdhcyBqdXN0IGEgaGV1cmlzdGljLCBidXQgaXQncworICAgIC8vIHRo
ZSBiZXN0IHdlIGNvdWxkIGRvKSwgdGhlbiB3ZSBjYW4gbWFwIGZyb20gdGhlIGZyYWdtZW50IGlu
dG8gdGhlIGZsb3cgdGhyZWFkLgorICAgIExheW91dFNpemUgdHJhbnNsYXRpb25PZmZzZXQgPSBw
aHlzaWNhbFRyYW5zbGF0aW9uRnJvbUZyYWdtZW50VG9GbG93KGNhbmRpZGF0ZUNvbHVtblNldCwg
Y2FuZGlkYXRlUG9pbnQpICsgY2FuZGlkYXRlQ29udGFpbmVyT2Zmc2V0OwogICAgIGJvb2wgcHJl
c2VydmUzRCA9IG1vZGUgJiBVc2VUcmFuc2Zvcm1zICYmIChwYXJlbnQoKS0+c3R5bGUoKS5wcmVz
ZXJ2ZXMzRCgpIHx8IHN0eWxlKCkucHJlc2VydmVzM0QoKSk7CiAgICAgaWYgKG1vZGUgJiBVc2VU
cmFuc2Zvcm1zICYmIHNob3VsZFVzZVRyYW5zZm9ybUZyb21Db250YWluZXIocGFyZW50KCkpKSB7
CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHQ7CkBAIC02OTksNDEgKzY5OSw0MSBAQCB2
b2lkIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6bWFwQWJzCiAgICAgICAgIHRyYW5zZm9y
bVN0YXRlLm1vdmUodHJhbnNsYXRpb25PZmZzZXQud2lkdGgoKSwgdHJhbnNsYXRpb25PZmZzZXQu
aGVpZ2h0KCksIHByZXNlcnZlM0QgPyBUcmFuc2Zvcm1TdGF0ZTo6QWNjdW11bGF0ZVRyYW5zZm9y
bSA6IFRyYW5zZm9ybVN0YXRlOjpGbGF0dGVuVHJhbnNmb3JtKTsKIH0KIAotTGF5b3V0U2l6ZSBS
ZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OnBoeXNpY2FsVHJhbnNsYXRpb25Gcm9tUmVnaW9u
VG9GbG93KGNvbnN0IFJlbmRlck11bHRpQ29sdW1uU2V0KiBjb2x1bW5TZXQsIGNvbnN0IExheW91
dFBvaW50JiBwaHlzaWNhbFBvaW50KSBjb25zdAorTGF5b3V0U2l6ZSBSZW5kZXJNdWx0aUNvbHVt
bkZsb3dUaHJlYWQ6OnBoeXNpY2FsVHJhbnNsYXRpb25Gcm9tRnJhZ21lbnRUb0Zsb3coY29uc3Qg
UmVuZGVyTXVsdGlDb2x1bW5TZXQqIGNvbHVtblNldCwgY29uc3QgTGF5b3V0UG9pbnQmIHBoeXNp
Y2FsUG9pbnQpIGNvbnN0CiB7CiAgICAgTGF5b3V0UG9pbnQgbG9naWNhbFBvaW50ID0gY29sdW1u
U2V0LT5mbGlwRm9yV3JpdGluZ01vZGUocGh5c2ljYWxQb2ludCk7Ci0gICAgTGF5b3V0UG9pbnQg
dHJhbnNsYXRlZFBvaW50ID0gY29sdW1uU2V0LT50cmFuc2xhdGVSZWdpb25Qb2ludFRvRmxvd1Ro
cmVhZChsb2dpY2FsUG9pbnQpOworICAgIExheW91dFBvaW50IHRyYW5zbGF0ZWRQb2ludCA9IGNv
bHVtblNldC0+dHJhbnNsYXRlRnJhZ21lbnRQb2ludFRvRmxvd1RocmVhZChsb2dpY2FsUG9pbnQp
OwogICAgIExheW91dFBvaW50IHBoeXNpY2FsVHJhbnNsYXRlZFBvaW50ID0gY29sdW1uU2V0LT5m
bGlwRm9yV3JpdGluZ01vZGUodHJhbnNsYXRlZFBvaW50KTsKICAgICByZXR1cm4gcGh5c2ljYWxQ
b2ludCAtIHBoeXNpY2FsVHJhbnNsYXRlZFBvaW50OwogfQogCi1SZW5kZXJSZWdpb24qIFJlbmRl
ck11bHRpQ29sdW1uRmxvd1RocmVhZDo6bWFwRnJvbUZsb3dUb1JlZ2lvbihUcmFuc2Zvcm1TdGF0
ZSYgdHJhbnNmb3JtU3RhdGUpIGNvbnN0CitSZW5kZXJGcmFnbWVudENvbnRhaW5lciogUmVuZGVy
TXVsdGlDb2x1bW5GbG93VGhyZWFkOjptYXBGcm9tRmxvd1RvRnJhZ21lbnQoVHJhbnNmb3JtU3Rh
dGUmIHRyYW5zZm9ybVN0YXRlKSBjb25zdAogewotICAgIGlmICghaGFzVmFsaWRSZWdpb25JbmZv
KCkpCisgICAgaWYgKCFoYXNWYWxpZEZyYWdtZW50SW5mbygpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIC8vIEdldCBiYWNrIGludG8gb3VyIGxvY2FsIGZsb3cgdGhyZWFkIHNwYWNl
LgogICAgIExheW91dFJlY3QgYm94UmVjdCA9IHRyYW5zZm9ybVN0YXRlLm1hcHBlZFF1YWQoKS5l
bmNsb3NpbmdCb3VuZGluZ0JveCgpOwogICAgIGZsaXBGb3JXcml0aW5nTW9kZShib3hSZWN0KTsK
IAotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIHJlZmFjdG9yIFJlbmRlck9iamVjdDo6YWJzb2x1
dGVRdWFkcyB0byBiZSBhYmxlIHRvIHNwbGl0IHRoZSBxdWFkcyBhY3Jvc3MgcmVnaW9ucywKKyAg
ICAvLyBGSVhNRTogV2UgbmVlZCB0byByZWZhY3RvciBSZW5kZXJPYmplY3Q6OmFic29sdXRlUXVh
ZHMgdG8gYmUgYWJsZSB0byBzcGxpdCB0aGUgcXVhZHMgYWNyb3NzIGZyYWdtZW50cywKICAgICAv
LyBmb3Igbm93IHdlIGp1c3QgdGFrZSB0aGUgY2VudGVyIG9mIHRoZSBtYXBwZWQgZW5jbG9zaW5n
IGJveCBhbmQgbWFwIGl0IHRvIGEgY29sdW1uLgogICAgIExheW91dFBvaW50IGNlbnRlclBvaW50
ID0gYm94UmVjdC5jZW50ZXIoKTsKICAgICBMYXlvdXRVbml0IGNlbnRlckxvZ2ljYWxPZmZzZXQg
PSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2VudGVyUG9pbnQueSgpIDogY2VudGVyUG9p
bnQueCgpOwotICAgIFJlbmRlclJlZ2lvbiogcmVuZGVyUmVnaW9uID0gcmVnaW9uQXRCbG9ja09m
ZnNldCh0aGlzLCBjZW50ZXJMb2dpY2FsT2Zmc2V0LCB0cnVlKTsKLSAgICBpZiAoIXJlbmRlclJl
Z2lvbikKKyAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogUmVuZGVyRnJhZ21lbnRDb250YWlu
ZXIgPSBmcmFnbWVudEF0QmxvY2tPZmZzZXQodGhpcywgY2VudGVyTG9naWNhbE9mZnNldCwgdHJ1
ZSk7CisgICAgaWYgKCFSZW5kZXJGcmFnbWVudENvbnRhaW5lcikKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgdHJhbnNmb3JtU3RhdGUubW92ZShwaHlzaWNhbFRyYW5zbGF0aW9uT2Zmc2V0
RnJvbUZsb3dUb1JlZ2lvbihyZW5kZXJSZWdpb24sIGNlbnRlckxvZ2ljYWxPZmZzZXQpKTsKLSAg
ICByZXR1cm4gcmVuZGVyUmVnaW9uOworICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUocGh5c2ljYWxU
cmFuc2xhdGlvbk9mZnNldEZyb21GbG93VG9GcmFnbWVudChSZW5kZXJGcmFnbWVudENvbnRhaW5l
ciwgY2VudGVyTG9naWNhbE9mZnNldCkpOworICAgIHJldHVybiBSZW5kZXJGcmFnbWVudENvbnRh
aW5lcjsKIH0KIAotTGF5b3V0U2l6ZSBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OnBoeXNp
Y2FsVHJhbnNsYXRpb25PZmZzZXRGcm9tRmxvd1RvUmVnaW9uKGNvbnN0IFJlbmRlclJlZ2lvbiog
cmVuZGVyUmVnaW9uLCBjb25zdCBMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXQpIGNvbnN0CitMYXlv
dXRTaXplIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6cGh5c2ljYWxUcmFuc2xhdGlvbk9m
ZnNldEZyb21GbG93VG9GcmFnbWVudChjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogUmVu
ZGVyRnJhZ21lbnRDb250YWluZXIsIGNvbnN0IExheW91dFVuaXQgbG9naWNhbE9mZnNldCkgY29u
c3QKIHsKICAgICAvLyBOb3cgdGhhdCB3ZSBrbm93IHdoaWNoIG11bHRpY29sdW1uIHNldCB3ZSBo
aXQsIHdlIG5lZWQgdG8gZ2V0IHRoZSBhcHByb3ByaWF0ZSB0cmFuc2xhdGlvbiBvZmZzZXQgZm9y
IHRoZSBjb2x1bW4uCi0gICAgY29uc3QgYXV0byogY29sdW1uU2V0ID0gZG93bmNhc3Q8UmVuZGVy
TXVsdGlDb2x1bW5TZXQ+KHJlbmRlclJlZ2lvbik7CisgICAgY29uc3QgYXV0byogY29sdW1uU2V0
ID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TZXQ+KFJlbmRlckZyYWdtZW50Q29udGFpbmVy
KTsKICAgICBMYXlvdXRQb2ludCB0cmFuc2xhdGlvbk9mZnNldCA9IGNvbHVtblNldC0+Y29sdW1u
VHJhbnNsYXRpb25Gb3JPZmZzZXQobG9naWNhbE9mZnNldCk7CiAgICAgCi0gICAgLy8gTm93IHdl
IGtub3cgaG93IHdlIHdhbnQgdGhlIHJlY3QgdG8gYmUgdHJhbnNsYXRlZCBpbnRvIHRoZSByZWdp
b24uIEF0IHRoaXMgcG9pbnQgd2UncmUgY29udmVydGluZworICAgIC8vIE5vdyB3ZSBrbm93IGhv
dyB3ZSB3YW50IHRoZSByZWN0IHRvIGJlIHRyYW5zbGF0ZWQgaW50byB0aGUgZnJhZ21lbnQuIEF0
IHRoaXMgcG9pbnQgd2UncmUgY29udmVydGluZwogICAgIC8vIGJhY2sgdG8gcGh5c2ljYWwgY29v
cmRpbmF0ZXMuCiAgICAgaWYgKHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkg
ewogICAgICAgICBMYXlvdXRSZWN0IHBvcnRpb25SZWN0KGNvbHVtblNldC0+Zmxvd1RocmVhZFBv
cnRpb25SZWN0KCkpOwpAQCAtNzUzLDI3ICs3NTMsMjcgQEAgTGF5b3V0U2l6ZSBSZW5kZXJNdWx0
aUNvbHVtbkZsb3dUaHJlYWQ6OgogICAgIHJldHVybiBMYXlvdXRTaXplKHRyYW5zbGF0aW9uT2Zm
c2V0LngoKSwgdHJhbnNsYXRpb25PZmZzZXQueSgpKTsKIH0KIAotUmVuZGVyUmVnaW9uKiBSZW5k
ZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OnBoeXNpY2FsVHJhbnNsYXRpb25Gcm9tRmxvd1RvUmVn
aW9uKExheW91dFBvaW50JiBwaHlzaWNhbFBvaW50KSBjb25zdAorUmVuZGVyRnJhZ21lbnRDb250
YWluZXIqIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6cGh5c2ljYWxUcmFuc2xhdGlvbkZy
b21GbG93VG9GcmFnbWVudChMYXlvdXRQb2ludCYgcGh5c2ljYWxQb2ludCkgY29uc3QKIHsKLSAg
ICBpZiAoIWhhc1ZhbGlkUmVnaW9uSW5mbygpKQorICAgIGlmICghaGFzVmFsaWRGcmFnbWVudElu
Zm8oKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgLy8gUHV0IHRoZSBwaHlz
aWNhbCBwb2ludCBpbnRvIHRoZSBmbG93IHRocmVhZCdzIGNvb3JkaW5hdGUgc3BhY2UuCiAgICAg
TGF5b3V0UG9pbnQgbG9naWNhbFBvaW50ID0gZmxpcEZvcldyaXRpbmdNb2RlKHBoeXNpY2FsUG9p
bnQpOwogICAgIAotICAgIC8vIE5vdyBnZXQgdGhlIHJlZ2lvbiB0aGF0IHdlIGFyZSBpbi4KKyAg
ICAvLyBOb3cgZ2V0IHRoZSBmcmFnbWVudCB0aGF0IHdlIGFyZSBpbi4KICAgICBMYXlvdXRVbml0
IGxvZ2ljYWxPZmZzZXQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9naWNhbFBvaW50
LnkoKSA6IGxvZ2ljYWxQb2ludC54KCk7Ci0gICAgUmVuZGVyUmVnaW9uKiByZW5kZXJSZWdpb24g
PSByZWdpb25BdEJsb2NrT2Zmc2V0KHRoaXMsIGxvZ2ljYWxPZmZzZXQsIHRydWUpOwotICAgIGlm
ICghcmVuZGVyUmVnaW9uKQorICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBSZW5kZXJGcmFn
bWVudENvbnRhaW5lciA9IGZyYWdtZW50QXRCbG9ja09mZnNldCh0aGlzLCBsb2dpY2FsT2Zmc2V0
LCB0cnVlKTsKKyAgICBpZiAoIVJlbmRlckZyYWdtZW50Q29udGFpbmVyKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAKLSAgICAvLyBUcmFuc2xhdGUgdG8gdGhlIGNvb3JkaW5hdGUgc3Bh
Y2Ugb2YgdGhlIHJlZ2lvbi4KLSAgICBMYXlvdXRTaXplIHRyYW5zbGF0aW9uT2Zmc2V0ID0gcGh5
c2ljYWxUcmFuc2xhdGlvbk9mZnNldEZyb21GbG93VG9SZWdpb24ocmVuZGVyUmVnaW9uLCBsb2dp
Y2FsT2Zmc2V0KTsKKyAgICAvLyBUcmFuc2xhdGUgdG8gdGhlIGNvb3JkaW5hdGUgc3BhY2Ugb2Yg
dGhlIGZyYWdtZW50LgorICAgIExheW91dFNpemUgdHJhbnNsYXRpb25PZmZzZXQgPSBwaHlzaWNh
bFRyYW5zbGF0aW9uT2Zmc2V0RnJvbUZsb3dUb0ZyYWdtZW50KFJlbmRlckZyYWdtZW50Q29udGFp
bmVyLCBsb2dpY2FsT2Zmc2V0KTsKICAgICAKLSAgICAvLyBOb3cgc2hpZnQgdGhlIHBoeXNpY2Fs
IHBvaW50IGludG8gdGhlIHJlZ2lvbidzIGNvb3JkaW5hdGUgc3BhY2UuCisgICAgLy8gTm93IHNo
aWZ0IHRoZSBwaHlzaWNhbCBwb2ludCBpbnRvIHRoZSBmcmFnbWVudCdzIGNvb3JkaW5hdGUgc3Bh
Y2UuCiAgICAgcGh5c2ljYWxQb2ludCArPSB0cmFuc2xhdGlvbk9mZnNldDsKICAgICAKLSAgICBy
ZXR1cm4gcmVuZGVyUmVnaW9uOworICAgIHJldHVybiBSZW5kZXJGcmFnbWVudENvbnRhaW5lcjsK
IH0KIAogYm9vbCBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmlzUGFnZUxvZ2ljYWxIZWln
aHRLbm93bigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVs
dGlDb2x1bW5GbG93VGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5oCShyZXZpc2lvbiAyMjI0NjIpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgJKHdv
cmtpbmcgY29weSkKQEAgLTg1LDMwICs4NSwzMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBj
b21wdXRlTGluZUdyaWRQYWdpbmF0aW9uT3JpZ2luKExheW91dFN0YXRlJikgY29uc3Q7CiAgICAg
Ci0gICAgUmVuZGVyUmVnaW9uKiBtYXBGcm9tRmxvd1RvUmVnaW9uKFRyYW5zZm9ybVN0YXRlJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIG1hcEZyb21GbG93
VG9GcmFnbWVudChUcmFuc2Zvcm1TdGF0ZSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIAogICAgIC8v
IFRoaXMgbWV0aG9kIHRha2VzIGEgbG9naWNhbCBvZmZzZXQgYW5kIHJldHVybnMgYSBwaHlzaWNh
bCB0cmFuc2xhdGlvbiB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIG1hcAotICAgIC8vIGEgcGh5c2lj
YWwgcG9pbnQgKGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxvZ2ljYWwgb2Zmc2V0KSBpbnRvIHRoZSBy
ZWdpb24ncyBwaHlzaWNhbCBjb29yZGluYXRlIHNwYWNlLgotICAgIExheW91dFNpemUgcGh5c2lj
YWxUcmFuc2xhdGlvbk9mZnNldEZyb21GbG93VG9SZWdpb24oY29uc3QgUmVuZGVyUmVnaW9uKiwg
Y29uc3QgTGF5b3V0VW5pdCkgY29uc3Q7CisgICAgLy8gYSBwaHlzaWNhbCBwb2ludCAoY29ycmVz
cG9uZGluZyB0byB0aGUgbG9naWNhbCBvZmZzZXQpIGludG8gdGhlIGZyYWdtZW50J3MgcGh5c2lj
YWwgY29vcmRpbmF0ZSBzcGFjZS4KKyAgICBMYXlvdXRTaXplIHBoeXNpY2FsVHJhbnNsYXRpb25P
ZmZzZXRGcm9tRmxvd1RvRnJhZ21lbnQoY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqLCBj
b25zdCBMYXlvdXRVbml0KSBjb25zdDsKICAgICAKLSAgICAvLyBUaGUgcG9pbnQgaXMgcGh5c2lj
YWwsIGFuZCB0aGUgcmVzdWx0IGlzIGEgcGh5c2ljYWwgbG9jYXRpb24gd2l0aGluIHRoZSByZWdp
b24uCi0gICAgUmVuZGVyUmVnaW9uKiBwaHlzaWNhbFRyYW5zbGF0aW9uRnJvbUZsb3dUb1JlZ2lv
bihMYXlvdXRQb2ludCYpIGNvbnN0OworICAgIC8vIFRoZSBwb2ludCBpcyBwaHlzaWNhbCwgYW5k
IHRoZSByZXN1bHQgaXMgYSBwaHlzaWNhbCBsb2NhdGlvbiB3aXRoaW4gdGhlIGZyYWdtZW50Lgor
ICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBwaHlzaWNhbFRyYW5zbGF0aW9uRnJvbUZsb3dU
b0ZyYWdtZW50KExheW91dFBvaW50JikgY29uc3Q7CiAgICAgCi0gICAgLy8gVGhpcyBtZXRob2Qg
aXMgdGhlIGludmVyc2Ugb2YgdGhlIHByZXZpb3VzIG1ldGhvZCBhbmQgZ29lcyBmcm9tIHJlZ2lv
biB0byBmbG93LgotICAgIExheW91dFNpemUgcGh5c2ljYWxUcmFuc2xhdGlvbkZyb21SZWdpb25U
b0Zsb3coY29uc3QgUmVuZGVyTXVsdGlDb2x1bW5TZXQqLCBjb25zdCBMYXlvdXRQb2ludCYpIGNv
bnN0OworICAgIC8vIFRoaXMgbWV0aG9kIGlzIHRoZSBpbnZlcnNlIG9mIHRoZSBwcmV2aW91cyBt
ZXRob2QgYW5kIGdvZXMgZnJvbSBmcmFnbWVudCB0byBmbG93LgorICAgIExheW91dFNpemUgcGh5
c2ljYWxUcmFuc2xhdGlvbkZyb21GcmFnbWVudFRvRmxvdyhjb25zdCBSZW5kZXJNdWx0aUNvbHVt
blNldCosIGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0
TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgb3ZlcnJpZGU7CiAgICAgCiAgICAgdm9pZCBtYXBB
YnNvbHV0ZVRvTG9jYWxQb2ludChNYXBDb29yZGluYXRlc0ZsYWdzLCBUcmFuc2Zvcm1TdGF0ZSYp
IGNvbnN0IG92ZXJyaWRlOwogICAgIExheW91dFNpemUgb2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5k
ZXJFbGVtZW50JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBib29sKiBvZmZzZXREZXBlbmRzT25Qb2lu
dCA9IG51bGxwdHIpIGNvbnN0IG92ZXJyaWRlOwogICAgIAotICAgIC8vIEZJWE1FOiBFdmVudHVh
bGx5IGFzIGNvbHVtbiBhbmQgcmVnaW9uIGZsb3cgdGhyZWFkcyBzdGFydCBuZXN0aW5nLCB0aGlz
IHdpbGwgZW5kIHVwIGNoYW5naW5nLgorICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IGFzIGNvbHVt
biBhbmQgZnJhZ21lbnQgZmxvdyB0aHJlYWRzIHN0YXJ0IG5lc3RpbmcsIHRoaXMgd2lsbCBlbmQg
dXAgY2hhbmdpbmcuCiAgICAgYm9vbCBzaG91bGRDaGVja0NvbHVtbkJyZWFrcygpIGNvbnN0IG92
ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIGJvb2wgaXNSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJl
YWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgY29uc3QgY2hhciogcmVu
ZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgYWRkUmVnaW9uVG9UaHJlYWQoUmVu
ZGVyUmVnaW9uKikgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRGcmFnbWVudFRvVGhyZWFkKFJlbmRl
ckZyYWdtZW50Q29udGFpbmVyKikgb3ZlcnJpZGU7CiAgICAgdm9pZCB3aWxsQmVSZW1vdmVkRnJv
bVRyZWUoKSBvdmVycmlkZTsKICAgICBSZW5kZXJPYmplY3QqIHJlc29sdmVNb3ZlZENoaWxkKFJl
bmRlck9iamVjdCogY2hpbGQpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgZmxvd1RocmVhZERl
c2NlbmRhbnRJbnNlcnRlZChSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKQEAgLTExOCw5ICsxMTgs
OSBAQCBwcml2YXRlOgogICAgIExheW91dFVuaXQgaW5pdGlhbExvZ2ljYWxXaWR0aCgpIGNvbnN0
IG92ZXJyaWRlOwogICAgIHZvaWQgc2V0UGFnZUJyZWFrKGNvbnN0IFJlbmRlckJsb2NrKiwgTGF5
b3V0VW5pdCBvZmZzZXQsIExheW91dFVuaXQgc3BhY2VTaG9ydGFnZSkgb3ZlcnJpZGU7CiAgICAg
dm9pZCB1cGRhdGVNaW5pbXVtUGFnZUhlaWdodChjb25zdCBSZW5kZXJCbG9jayosIExheW91dFVu
aXQgb2Zmc2V0LCBMYXlvdXRVbml0IG1pbkhlaWdodCkgb3ZlcnJpZGU7Ci0gICAgUmVuZGVyUmVn
aW9uKiByZWdpb25BdEJsb2NrT2Zmc2V0KGNvbnN0IFJlbmRlckJveCosIExheW91dFVuaXQsIGJv
b2wgZXh0ZW5kTGFzdFJlZ2lvbiA9IGZhbHNlKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHNl
dFJlZ2lvblJhbmdlRm9yQm94KGNvbnN0IFJlbmRlckJveCYsIFJlbmRlclJlZ2lvbiosIFJlbmRl
clJlZ2lvbiopIG92ZXJyaWRlOwotICAgIGJvb2wgYWRkRm9yY2VkUmVnaW9uQnJlYWsoY29uc3Qg
UmVuZGVyQmxvY2sqLCBMYXlvdXRVbml0LCBSZW5kZXJCb3gqIGJyZWFrQ2hpbGQsIGJvb2wgaXNC
ZWZvcmUsIExheW91dFVuaXQqIG9mZnNldEJyZWFrQWRqdXN0bWVudCA9IDApIG92ZXJyaWRlOwor
ICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudEF0QmxvY2tPZmZzZXQoY29uc3Qg
UmVuZGVyQm94KiwgTGF5b3V0VW5pdCwgYm9vbCBleHRlbmRMYXN0RnJhZ21lbnQgPSBmYWxzZSkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRGcmFnbWVudFJhbmdlRm9yQm94KGNvbnN0IFJl
bmRlckJveCYsIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiwgUmVuZGVyRnJhZ21lbnRDb250YWlu
ZXIqKSBvdmVycmlkZTsKKyAgICBib29sIGFkZEZvcmNlZEZyYWdtZW50QnJlYWsoY29uc3QgUmVu
ZGVyQmxvY2sqLCBMYXlvdXRVbml0LCBSZW5kZXJCb3gqIGJyZWFrQ2hpbGQsIGJvb2wgaXNCZWZv
cmUsIExheW91dFVuaXQqIG9mZnNldEJyZWFrQWRqdXN0bWVudCA9IDApIG92ZXJyaWRlOwogICAg
IGJvb2wgaXNQYWdlTG9naWNhbEhlaWdodEtub3duKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2
b2lkIGhhbmRsZVNwYW5uZXJSZW1vdmFsKFJlbmRlck9iamVjdCYgc3Bhbm5lcik7CkBAIC0xMzYs
NyArMTM2LDcgQEAgcHJpdmF0ZToKICAgICBSZW5kZXJNdWx0aUNvbHVtblNldCogbV9sYXN0U2V0
V29ya2VkT247CiAKICAgICB1bnNpZ25lZCBtX2NvbHVtbkNvdW50OyAgIC8vIFRoZSBkZWZhdWx0
IGNvbHVtbiBjb3VudC93aWR0aCB0aGF0IGFyZSBiYXNlZCBvZmYgb3VyIGNvbnRhaW5pbmcgYmxv
Y2sgd2lkdGguIFRoZXNlIHZhbHVlcyByZXByZXNlbnQgb25seSB0aGUgZGVmYXVsdCwKLSAgICBM
YXlvdXRVbml0IG1fY29sdW1uV2lkdGg7IC8vIEEgbXVsdGktY29sdW1uIGJsb2NrIHRoYXQgaXMg
c3BsaXQgYWNyb3NzIHZhcmlhYmxlIHdpZHRoIHBhZ2VzIG9yIHJlZ2lvbnMgd2lsbCBoYXZlIGRp
ZmZlcmVudCBjb2x1bW4gY291bnRzIGFuZCB3aWR0aHMgaW4gZWFjaC4KKyAgICBMYXlvdXRVbml0
IG1fY29sdW1uV2lkdGg7IC8vIEEgbXVsdGktY29sdW1uIGJsb2NrIHRoYXQgaXMgc3BsaXQgYWNy
b3NzIHZhcmlhYmxlIHdpZHRoIHBhZ2VzIG9yIGZyYWdtZW50cyB3aWxsIGhhdmUgZGlmZmVyZW50
IGNvbHVtbiBjb3VudHMgYW5kIHdpZHRocyBpbiBlYWNoLgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gVGhlc2UgdmFsdWVzIHdpbGwgYmUgY2FjaGVkIChldmVudHVhbGx5KSBmb3Ig
bXVsdGktY29sdW1uIGJsb2Nrcy4KICAgICBMYXlvdXRVbml0IG1fY29sdW1uSGVpZ2h0QXZhaWxh
YmxlOyAvLyBUb3RhbCBoZWlnaHQgYXZhaWxhYmxlIHRvIGNvbHVtbnMsIG9yIDAgaWYgYXV0by4K
ICAgICBib29sIG1faW5MYXlvdXQ7IC8vIFNldCB3aGlsZSB3ZSdyZSBsYXlpbmcgb3V0IHRoZSBm
bG93IHRocmVhZCwgZHVyaW5nIHdoaWNoIGNvbHVtIHNldCBoZWlnaHRzIGFyZSB1bmtub3duLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5T
ZXQuY3BwCShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTXVsdGlDb2x1bW5TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1
ZGUgIlBhaW50SW5mby5oIgotI2luY2x1ZGUgIlJlbmRlckJveFJlZ2lvbkluZm8uaCIKKyNpbmNs
dWRlICJSZW5kZXJCb3hGcmFnbWVudEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgog
I2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRl
ck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmgiCkBAIC0zOCw3ICszOCw3IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFJlbmRlck11bHRpQ29sdW1uU2V0OjpSZW5kZXJNdWx0aUNvbHVt
blNldChSZW5kZXJGbG93VGhyZWFkJiBmbG93VGhyZWFkLCBSZW5kZXJTdHlsZSYmIHN0eWxlKQot
ICAgIDogUmVuZGVyUmVnaW9uU2V0KGZsb3dUaHJlYWQuZG9jdW1lbnQoKSwgV1RGTW92ZShzdHls
ZSksIGZsb3dUaHJlYWQpCisgICAgOiBSZW5kZXJGcmFnbWVudENvbnRhaW5lclNldChmbG93VGhy
ZWFkLmRvY3VtZW50KCksIFdURk1vdmUoc3R5bGUpLCBmbG93VGhyZWFkKQogICAgICwgbV9jb21w
dXRlZENvbHVtbkNvdW50KDEpCiAgICAgLCBtX2NvbXB1dGVkQ29sdW1uV2lkdGgoMCkKICAgICAs
IG1fY29tcHV0ZWRDb2x1bW5IZWlnaHQoMCkKQEAgLTMwOSwxMCArMzA5LDEwIEBAIHZvaWQgUmVu
ZGVyTXVsdGlDb2x1bW5TZXQ6OnJlY29yZFNwYWNlU2gKIAogdm9pZCBSZW5kZXJNdWx0aUNvbHVt
blNldDo6dXBkYXRlTG9naWNhbFdpZHRoKCkKIHsKLSAgICBzZXRDb21wdXRlZENvbHVtbldpZHRo
QW5kQ291bnQobXVsdGlDb2x1bW5GbG93VGhyZWFkKCktPmNvbHVtbldpZHRoKCksIG11bHRpQ29s
dW1uRmxvd1RocmVhZCgpLT5jb2x1bW5Db3VudCgpKTsgLy8gRklYTUU6IFRoaXMgd2lsbCBldmVu
dHVhbGx5IHZhcnkgaWYgd2UgYXJlIGNvbnRhaW5lZCBpbnNpZGUgcmVnaW9ucy4KKyAgICBzZXRD
b21wdXRlZENvbHVtbldpZHRoQW5kQ291bnQobXVsdGlDb2x1bW5GbG93VGhyZWFkKCktPmNvbHVt
bldpZHRoKCksIG11bHRpQ29sdW1uRmxvd1RocmVhZCgpLT5jb2x1bW5Db3VudCgpKTsgLy8gRklY
TUU6IFRoaXMgd2lsbCBldmVudHVhbGx5IHZhcnkgaWYgd2UgYXJlIGNvbnRhaW5lZCBpbnNpZGUg
ZnJhZ21lbnRzLgogICAgIAotICAgIC8vIEZJWE1FOiBXaGVuIHdlIGFkZCByZWdpb25zIHN1cHBv
cnQsIHdlJ2xsIHN0YXJ0IGl0IG9mZiBhdCB0aGUgd2lkdGggb2YgdGhlIG11bHRpLWNvbHVtbgot
ICAgIC8vIGJsb2NrIGluIHRoYXQgcGFydGljdWxhciByZWdpb24uCisgICAgLy8gRklYTUU6IFdo
ZW4gd2UgYWRkIGZyYWdtZW50cyBzdXBwb3J0LCB3ZSdsbCBzdGFydCBpdCBvZmYgYXQgdGhlIHdp
ZHRoIG9mIHRoZSBtdWx0aS1jb2x1bW4KKyAgICAvLyBibG9jayBpbiB0aGF0IHBhcnRpY3VsYXIg
ZnJhZ21lbnQuCiAgICAgc2V0TG9naWNhbFdpZHRoKHBhcmVudEJveCgpLT5jb250ZW50TG9naWNh
bFdpZHRoKCkpOwogfQogCkBAIC0zNzQsNyArMzc0LDcgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVt
blNldDo6YmVnaW5GbG93KFJlbgogCiAgICAgLy8gQXQgdGhpcyBwb2ludCBsYXlvdXQgaXMgZXhh
Y3RseSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgc2V0LiBTdG9yZSBibG9jayBvZmZzZXQgZnJv
bSBmbG93CiAgICAgLy8gdGhyZWFkIHN0YXJ0LgotICAgIExheW91dFVuaXQgbG9naWNhbFRvcElu
Rmxvd1RocmVhZCA9IGZsb3dUaHJlYWQtPm9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFJlZ2lv
bihjb250YWluZXIpICsgY29udGFpbmVyLT5sb2dpY2FsSGVpZ2h0KCk7CisgICAgTGF5b3V0VW5p
dCBsb2dpY2FsVG9wSW5GbG93VGhyZWFkID0gZmxvd1RocmVhZC0+b2Zmc2V0RnJvbUxvZ2ljYWxU
b3BPZkZpcnN0RnJhZ21lbnQoY29udGFpbmVyKSArIGNvbnRhaW5lci0+bG9naWNhbEhlaWdodCgp
OwogICAgIHNldExvZ2ljYWxUb3BJbkZsb3dUaHJlYWQobG9naWNhbFRvcEluRmxvd1RocmVhZCk7
CiB9CiAKQEAgLTM4Niw3ICszODYsNyBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0OjplbmRG
bG93KFJlbmRlCiAgICAgLy8gc3RhcnQuIEFsc28gbm90ZSB0aGF0IGEgbmV3IGNvbHVtbiBoZWln
aHQgbWF5IGhhdmUgYWZmZWN0ZWQgdGhlIGhlaWdodCB1c2VkIGluIHRoZSBmbG93CiAgICAgLy8g
dGhyZWFkIChiZWNhdXNlIG9mIHN0cnV0cyksIHdoaWNoIG1heSBhZmZlY3QgdGhlIG51bWJlciBv
ZiBjb2x1bW5zLiBTbyB3ZSBhbHNvIG5lZWQgdG8gdXBkYXRlCiAgICAgLy8gdGhlIGZsb3cgdGhy
ZWFkIHBvcnRpb24gaGVpZ2h0IGluIG9yZGVyIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIGFjdHVh
bCBjb2x1bW4tY291bnQuCi0gICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tSW5GbG93VGhyZWFk
ID0gZmxvd1RocmVhZC0+b2Zmc2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UmVnaW9uKGNvbnRhaW5l
cikgKyBib3R0b21JbkNvbnRhaW5lcjsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b21JbkZs
b3dUaHJlYWQgPSBmbG93VGhyZWFkLT5vZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RGcmFnbWVu
dChjb250YWluZXIpICsgYm90dG9tSW5Db250YWluZXI7CiAgICAgc2V0TG9naWNhbEJvdHRvbUlu
Rmxvd1RocmVhZChsb2dpY2FsQm90dG9tSW5GbG93VGhyZWFkKTsKICAgICBjb250YWluZXItPnNl
dExvZ2ljYWxIZWlnaHQoYm90dG9tSW5Db250YWluZXIpOwogfQpAQCAtNDAwLDggKzQwMCw4IEBA
IHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OmxheW91dCgpCiAgICAgbV9tYXhDb2x1bW5IZWln
aHQgPSBjYWxjdWxhdGVNYXhDb2x1bW5IZWlnaHQoKTsKIAogICAgIGlmICghbmV4dFNpYmxpbmdN
dWx0aUNvbHVtblNldCgpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgdGhlIGxhc3Qgc2V0LCBpLmUu
IHRoZSBsYXN0IHJlZ2lvbi4gU2VpemUgdGhlIG9wcG9ydHVuaXR5IHRvIHZhbGlkYXRlIHRoZW0u
Ci0gICAgICAgIG11bHRpQ29sdW1uRmxvd1RocmVhZCgpLT52YWxpZGF0ZVJlZ2lvbnMoKTsKKyAg
ICAgICAgLy8gVGhpcyBpcyB0aGUgbGFzdCBzZXQsIGkuZS4gdGhlIGxhc3QgZnJhZ21lbnQuIFNl
aXplIHRoZSBvcHBvcnR1bml0eSB0byB2YWxpZGF0ZSB0aGVtLgorICAgICAgICBtdWx0aUNvbHVt
bkZsb3dUaHJlYWQoKS0+dmFsaWRhdGVGcmFnbWVudHMoKTsKICAgICB9CiB9CiAKQEAgLTU0MSw3
ICs1NDEsNyBAQCBMYXlvdXRSZWN0IFJlbmRlck11bHRpQ29sdW1uU2V0OjpmbG93VGhyCiAgICAg
Ly8KICAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB3ZSB3aWxsIGtub3cgb3ZlcmZsb3cgb24gYSBw
ZXItY29sdW1uIGJhc2lzLCBidXQgd2UgY2FuJ3QgZG8gdGhpcyB1bnRpbCB3ZSBoYXZlIGEgcGFp
bnRpbmcKICAgICAvLyBtb2RlIHRoYXQgdW5kZXJzdGFuZHMgbm90IHRvIHBhaW50IGNvbnRlbnRz
IGZyb20gYSBwcmV2aW91cyBjb2x1bW4gaW4gdGhlIG92ZXJmbG93IGFyZWEgb2YgYSBmb2xsb3dp
bmcgY29sdW1uLgotICAgIC8vIFRoaXMgcHJvYmxlbSBhcHBsaWVzIHRvIHJlZ2lvbnMgYW5kIHBh
Z2VzIGFzIHdlbGwgYW5kIGlzIG5vdCB1bmlxdWUgdG8gY29sdW1ucy4KKyAgICAvLyBUaGlzIHBy
b2JsZW0gYXBwbGllcyB0byBmcmFnbWVudHMgYW5kIHBhZ2VzIGFzIHdlbGwgYW5kIGlzIG5vdCB1
bmlxdWUgdG8gY29sdW1ucy4KIAogICAgIGJvb2wgcHJvZ3Jlc3Npb25SZXZlcnNlZCA9IG11bHRp
Q29sdW1uRmxvd1RocmVhZCgpLT5wcm9ncmVzc2lvbklzUmV2ZXJzZWQoKTsKIApAQCAtNTUyLDcg
KzU1Miw3IEBAIExheW91dFJlY3QgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OmZsb3dUaHIKIAogICAg
IC8vIENhbGN1bGF0ZSB0aGUgb3ZlcmZsb3cgcmVjdGFuZ2xlLCBiYXNlZCBvbiB0aGUgZmxvdyB0
aHJlYWQncywgY2xpcHBlZCBhdCBjb2x1bW4gbG9naWNhbAogICAgIC8vIHRvcC9ib3R0b20gdW5s
ZXNzIGl0J3MgdGhlIGZpcnN0L2xhc3QgY29sdW1uLgotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dS
ZWN0ID0gb3ZlcmZsb3dSZWN0Rm9yRmxvd1RocmVhZFBvcnRpb24ocG9ydGlvblJlY3QsIGlzRmly
c3RDb2x1bW4gJiYgaXNGaXJzdFJlZ2lvbigpLCBpc0xhc3RDb2x1bW4gJiYgaXNMYXN0UmVnaW9u
KCksIFZpc3VhbE92ZXJmbG93KTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdCA9IG92ZXJm
bG93UmVjdEZvckZsb3dUaHJlYWRQb3J0aW9uKHBvcnRpb25SZWN0LCBpc0ZpcnN0Q29sdW1uICYm
IGlzRmlyc3RGcmFnbWVudCgpLCBpc0xhc3RDb2x1bW4gJiYgaXNMYXN0RnJhZ21lbnQoKSwgVmlz
dWFsT3ZlcmZsb3cpOwogCiAgICAgLy8gRm9yIFJlbmRlclZpZXdzIG9ubHkgKGkuZS4sIGlCb29r
cyksIGF2b2lkIG92ZXJmbG93aW5nIGludG8gbmVpZ2hib3JpbmcgY29sdW1ucywgYnkgY2xpcHBp
bmcgaW4gdGhlIG1pZGRsZSBvZiBhZGphY2VudCBjb2x1bW4gZ2Fwcy4gQWxzbyBtYWtlIHN1cmUg
dGhhdCB3ZSBhdm9pZCByb3VuZGluZyBlcnJvcnMuCiAgICAgaWYgKCZ2aWV3KCkgPT0gcGFyZW50
KCkpIHsKQEAgLTY2Niw3ICs2NjYsNyBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0OjpyZXBh
aW50Rmxvd1RoCiAgICAgLy8gTm93IHdlIGNhbiBjb21wYXJlIHRoaXMgcmVjdCB3aXRoIHRoZSBm
bG93IHRocmVhZCBwb3J0aW9ucyBvd25lZCBieSBlYWNoIGNvbHVtbi4gRmlyc3QgbGV0J3MKICAg
ICAvLyBqdXN0IHNlZSBpZiB0aGUgcmVwYWludCByZWN0IGludGVyc2VjdHMgb3VyIGZsb3cgdGhy
ZWFkIHBvcnRpb24gYXQgYWxsLgogICAgIExheW91dFJlY3QgY2xpcHBlZFJlY3QoZmxvd1RocmVh
ZFJlcGFpbnRSZWN0KTsKLSAgICBjbGlwcGVkUmVjdC5pbnRlcnNlY3QoUmVuZGVyUmVnaW9uOjpm
bG93VGhyZWFkUG9ydGlvbk92ZXJmbG93UmVjdCgpKTsKKyAgICBjbGlwcGVkUmVjdC5pbnRlcnNl
Y3QoUmVuZGVyRnJhZ21lbnRDb250YWluZXI6OmZsb3dUaHJlYWRQb3J0aW9uT3ZlcmZsb3dSZWN0
KCkpOwogICAgIGlmIChjbGlwcGVkUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAg
ICAKQEAgLTc0Myw3ICs3NDMsNyBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0Ojpjb2xsZWN0
TGF5ZXJGCiAgICAgLy8gTm93IHdlIGNhbiBjb21wYXJlIHdpdGggdGhlIGZsb3cgdGhyZWFkIHBv
cnRpb25zIG93bmVkIGJ5IGVhY2ggY29sdW1uLiBGaXJzdCBsZXQncwogICAgIC8vIHNlZSBpZiB0
aGUgcmVjdCBpbnRlcnNlY3RzIG91ciBmbG93IHRocmVhZCBwb3J0aW9uIGF0IGFsbC4KICAgICBM
YXlvdXRSZWN0IGNsaXBwZWRSZWN0KGxheWVyQm91bmRzSW5GbG93VGhyZWFkKTsKLSAgICBjbGlw
cGVkUmVjdC5pbnRlcnNlY3QoUmVuZGVyUmVnaW9uOjpmbG93VGhyZWFkUG9ydGlvbk92ZXJmbG93
UmVjdCgpKTsKKyAgICBjbGlwcGVkUmVjdC5pbnRlcnNlY3QoUmVuZGVyRnJhZ21lbnRDb250YWlu
ZXI6OmZsb3dUaHJlYWRQb3J0aW9uT3ZlcmZsb3dSZWN0KCkpOwogICAgIGlmIChjbGlwcGVkUmVj
dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKQEAgLTg2MSw3ICs4NjEsNyBAQCBM
YXlvdXRQb2ludCBSZW5kZXJNdWx0aUNvbHVtblNldDo6Y29sdW1uCiAgICAgcmV0dXJuIHRyYW5z
bGF0aW9uT2Zmc2V0OwogfQogCi12b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0OjphZGp1c3RSZWdp
b25Cb3VuZHNGcm9tRmxvd1RocmVhZFBvcnRpb25SZWN0KExheW91dFJlY3QmKSBjb25zdAordm9p
ZCBSZW5kZXJNdWx0aUNvbHVtblNldDo6YWRqdXN0RnJhZ21lbnRCb3VuZHNGcm9tRmxvd1RocmVh
ZFBvcnRpb25SZWN0KExheW91dFJlY3QmKSBjb25zdAogewogICAgIC8vIFRoaXMgb25seSBmaXJl
cyBmb3IgbmFtZWQgZmxvdyB0aHJlYWQgY29tcG9zaXRpbmcgY29kZSwgc28gbGV0J3MgbWFrZSBz
dXJlIHRvIEFTU0VSVCBpZiB0aGlzIGV2ZXIgZ2V0cyBpbnZva2VkLgogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpAQCAtODgwLDEyICs4ODAsMTIgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtblNl
dDo6YWRkT3ZlcmZsb3dGcgogICAgICAgICBhZGRWaXN1YWxPdmVyZmxvdyhsYXN0UmVjdCk7CiB9
CiAKLVZpc2libGVQb3NpdGlvbiBSZW5kZXJNdWx0aUNvbHVtblNldDo6cG9zaXRpb25Gb3JQb2lu
dChjb25zdCBMYXlvdXRQb2ludCYgbG9naWNhbFBvaW50LCBjb25zdCBSZW5kZXJSZWdpb24qKQor
VmlzaWJsZVBvc2l0aW9uIFJlbmRlck11bHRpQ29sdW1uU2V0Ojpwb3NpdGlvbkZvclBvaW50KGNv
bnN0IExheW91dFBvaW50JiBsb2dpY2FsUG9pbnQsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFp
bmVyKikKIHsKLSAgICByZXR1cm4gbXVsdGlDb2x1bW5GbG93VGhyZWFkKCktPnBvc2l0aW9uRm9y
UG9pbnQodHJhbnNsYXRlUmVnaW9uUG9pbnRUb0Zsb3dUaHJlYWQobG9naWNhbFBvaW50LCBDbGFt
cEhpdFRlc3RUcmFuc2xhdGlvblRvQ29sdW1ucyksIHRoaXMpOworICAgIHJldHVybiBtdWx0aUNv
bHVtbkZsb3dUaHJlYWQoKS0+cG9zaXRpb25Gb3JQb2ludCh0cmFuc2xhdGVGcmFnbWVudFBvaW50
VG9GbG93VGhyZWFkKGxvZ2ljYWxQb2ludCwgQ2xhbXBIaXRUZXN0VHJhbnNsYXRpb25Ub0NvbHVt
bnMpLCB0aGlzKTsKIH0KIAotTGF5b3V0UG9pbnQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnRyYW5z
bGF0ZVJlZ2lvblBvaW50VG9GbG93VGhyZWFkKGNvbnN0IExheW91dFBvaW50ICYgbG9naWNhbFBv
aW50LCBDb2x1bW5IaXRUZXN0VHJhbnNsYXRpb25Nb2RlIGNsYW1wTW9kZSkgY29uc3QKK0xheW91
dFBvaW50IFJlbmRlck11bHRpQ29sdW1uU2V0Ojp0cmFuc2xhdGVGcmFnbWVudFBvaW50VG9GbG93
VGhyZWFkKGNvbnN0IExheW91dFBvaW50ICYgbG9naWNhbFBvaW50LCBDb2x1bW5IaXRUZXN0VHJh
bnNsYXRpb25Nb2RlIGNsYW1wTW9kZSkgY29uc3QKIHsKICAgICAvLyBEZXRlcm1pbmUgd2hpY2gg
Y29sdW1ucyB3ZSBpbnRlcnNlY3QuCiAgICAgTGF5b3V0VW5pdCBjb2xHYXAgPSBjb2x1bW5HYXAo
KTsKQEAgLTk3Myw3ICs5NzMsNyBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0Ojp1cGRhdGVI
aXRUZXN0CiAgICAgICAgIHJlc3VsdC5zZXRJbm5lck5vZGUobm9kZSk7CiAgICAgICAgIGlmICgh
cmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpKQogICAgICAgICAgICAgcmVzdWx0LnNldElubmVy
Tm9uU2hhcmVkTm9kZShub2RlKTsKLSAgICAgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRQb2ludCA9
IHRyYW5zbGF0ZVJlZ2lvblBvaW50VG9GbG93VGhyZWFkKHBvaW50KTsKKyAgICAgICAgTGF5b3V0
UG9pbnQgYWRqdXN0ZWRQb2ludCA9IHRyYW5zbGF0ZUZyYWdtZW50UG9pbnRUb0Zsb3dUaHJlYWQo
cG9pbnQpOwogICAgICAgICB2aWV3KCkub2Zmc2V0Rm9yQ29udGVudHMoYWRqdXN0ZWRQb2ludCk7
CiAgICAgICAgIHJlc3VsdC5zZXRMb2NhbFBvaW50KGFkanVzdGVkUG9pbnQpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5o
CShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVs
dGlDb2x1bW5TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlICJMYXllckZyYWdtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyRnJhZ21l
bnRDb250YWluZXJTZXQuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQu
aCIKLSNpbmNsdWRlICJSZW5kZXJSZWdpb25TZXQuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQwLDkgKzQwLDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogLy8gZm9yIHRoZSAybmQgdG8gbi0xIHBhZ2VzLCBhbmQgdGhlbiBvbmUgbGFzdCBjb2x1
bW4gc2V0IHRoYXQgd2lsbCBob2xkIHRoZSBzaG9ydGVyIGNvbHVtbnMgb24gdGhlIGZpbmFsIHBh
Z2UgKHRoYXQgbWF5IGhhdmUgdG8gYmUgYmFsYW5jZWQKIC8vIGFzIHdlbGwpLgogLy8KLS8vIENv
bHVtbiBzcGFucyByZXN1bHQgaW4gdGhlIGNyZWF0aW9uIG9mIG5ldyBjb2x1bW4gc2V0cyBhcyB3
ZWxsLCBzaW5jZSBhIHNwYW5uaW5nIHJlZ2lvbiBoYXMgdG8gYmUgcGxhY2VkIGluIGJldHdlZW4g
dGhlIGNvbHVtbiBzZXRzIHRoYXQKKy8vIENvbHVtbiBzcGFucyByZXN1bHQgaW4gdGhlIGNyZWF0
aW9uIG9mIG5ldyBjb2x1bW4gc2V0cyBhcyB3ZWxsLCBzaW5jZSBhIHNwYW5uaW5nIGZyYWdtZW50
IGhhcyB0byBiZSBwbGFjZWQgaW4gYmV0d2VlbiB0aGUgY29sdW1uIHNldHMgdGhhdAogLy8gY29t
ZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBzcGFuLgotY2xhc3MgUmVuZGVyTXVsdGlDb2x1bW5TZXQg
ZmluYWwgOiBwdWJsaWMgUmVuZGVyUmVnaW9uU2V0IHsKK2NsYXNzIFJlbmRlck11bHRpQ29sdW1u
U2V0IGZpbmFsIDogcHVibGljIFJlbmRlckZyYWdtZW50Q29udGFpbmVyU2V0IHsKIHB1YmxpYzoK
ICAgICBSZW5kZXJNdWx0aUNvbHVtblNldChSZW5kZXJGbG93VGhyZWFkJiwgUmVuZGVyU3R5bGUm
Jik7CiAKQEAgLTEyMSw3ICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgICAgIENsYW1wSGl0VGVzdFRy
YW5zbGF0aW9uVG9Db2x1bW5zLAogICAgICAgICBEb05vdENsYW1wSGl0VGVzdFRyYW5zbGF0aW9u
VG9Db2x1bW5zCiAgICAgfTsKLSAgICBMYXlvdXRQb2ludCB0cmFuc2xhdGVSZWdpb25Qb2ludFRv
Rmxvd1RocmVhZChjb25zdCBMYXlvdXRQb2ludCAmIGxvZ2ljYWxQb2ludCwgQ29sdW1uSGl0VGVz
dFRyYW5zbGF0aW9uTW9kZSA9IERvTm90Q2xhbXBIaXRUZXN0VHJhbnNsYXRpb25Ub0NvbHVtbnMp
IGNvbnN0OworICAgIExheW91dFBvaW50IHRyYW5zbGF0ZUZyYWdtZW50UG9pbnRUb0Zsb3dUaHJl
YWQoY29uc3QgTGF5b3V0UG9pbnQgJiBsb2dpY2FsUG9pbnQsIENvbHVtbkhpdFRlc3RUcmFuc2xh
dGlvbk1vZGUgPSBEb05vdENsYW1wSGl0VGVzdFRyYW5zbGF0aW9uVG9Db2x1bW5zKSBjb25zdDsK
IAogICAgIHZvaWQgdXBkYXRlSGl0VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5
b3V0UG9pbnQmKSBvdmVycmlkZTsKICAgICAKQEAgLTE1MCw5ICsxNTAsOSBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBjb2xsZWN0TGF5ZXJGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBM
YXlvdXRSZWN0JiBsYXllckJvdW5kaW5nQm94LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3Qp
IG92ZXJyaWRlOwogCi0gICAgdm9pZCBhZGp1c3RSZWdpb25Cb3VuZHNGcm9tRmxvd1RocmVhZFBv
cnRpb25SZWN0KExheW91dFJlY3QmIHJlZ2lvbkJvdW5kcykgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBhZGp1c3RGcmFnbWVudEJvdW5kc0Zyb21GbG93VGhyZWFkUG9ydGlvblJlY3QoTGF5b3V0
UmVjdCYgZnJhZ21lbnRCb3VuZHMpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgVmlzaWJsZVBvc2l0
aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJSZWdp
b24qKSBvdmVycmlkZTsKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25z
dCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKikgb3ZlcnJpZGU7
CiAKICAgICBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAyMjI0
NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzkzLDcgKzc5Myw3IEBAIFJlbmRlckxheWVyTW9kZWxPYmplY3QqIFJlbmRl
ck9iamVjdDo6Y28KICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIElmIHdlIGhhdmUgYSBmbG93
IHRocmVhZCwgdGhlbiB3ZSBuZWVkIHRvIGRvIGluZGl2aWR1YWwgcmVwYWludHMgd2l0aGluIHRo
ZSBSZW5kZXJSZWdpb25zIGluc3RlYWQuCisgICAgLy8gSWYgd2UgaGF2ZSBhIGZsb3cgdGhyZWFk
LCB0aGVuIHdlIG5lZWQgdG8gZG8gaW5kaXZpZHVhbCByZXBhaW50cyB3aXRoaW4gdGhlIFJlbmRl
ckZyYWdtZW50Q29udGFpbmVycyBpbnN0ZWFkLgogICAgIC8vIFJldHVybiB0aGUgZmxvdyB0aHJl
YWQgYXMgYSByZXBhaW50IGNvbnRhaW5lciBpbiBvcmRlciB0byBjcmVhdGUgYSBjaG9rZXBvaW50
IHRoYXQgYWxsb3dzIHVzIHRvIGNoYW5nZQogICAgIC8vIHJlcGFpbnRpbmcgdG8gZG8gaW5kaXZp
ZHVhbCByZWdpb24gcmVwYWludHMuCiAgICAgUmVuZGVyRmxvd1RocmVhZCogcGFyZW50UmVuZGVy
Rmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKQEAgLTg0OCw3ICs4NDgs
NyBAQCB2b2lkIFJlbmRlck9iamVjdDo6cmVwYWludFVzaW5nQ29udGFpbmVyCiAgICAgICAgIHJl
cGFpbnRDb250YWluZXIgPSAmdmlldygpOwogCiAgICAgaWYgKGlzPFJlbmRlckZsb3dUaHJlYWQ+
KCpyZXBhaW50Q29udGFpbmVyKSkgewotICAgICAgICBkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFk
PigqcmVwYWludENvbnRhaW5lcikucmVwYWludFJlY3RhbmdsZUluUmVnaW9ucyhyKTsKKyAgICAg
ICAgZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4oKnJlcGFpbnRDb250YWluZXIpLnJlcGFpbnRS
ZWN0YW5nbGVJbkZyYWdtZW50cyhyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTA0
OCw5ICsxMDQ4LDkgQEAgdm9pZCBSZW5kZXJPYmplY3Q6Om91dHB1dFJlZ2lvbnNJbmZvcm1hdAog
ICAgIGlmICghZnRjYikKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyUmVnaW9uKiBzdGFy
dFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgUmVuZGVyUmVnaW9uKiBlbmRSZWdpb24gPSBudWxscHRy
OwotICAgIGZ0Y2ItPmdldFJlZ2lvblJhbmdlRm9yQm94KGRvd25jYXN0PFJlbmRlckJveD4odGhp
cyksIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pOworICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVy
KiBzdGFydFJlZ2lvbiA9IG51bGxwdHI7CisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGVu
ZFJlZ2lvbiA9IG51bGxwdHI7CisgICAgZnRjYi0+Z2V0RnJhZ21lbnRSYW5nZUZvckJveChkb3du
Y2FzdDxSZW5kZXJCb3g+KHRoaXMpLCBzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKTsKICAgICBzdHJl
YW0gPDwgIiBbUnM6IiA8PCBzdGFydFJlZ2lvbiA8PCAiIFJlOiIgPDwgZW5kUmVnaW9uIDw8ICJd
IjsKIH0KIApAQCAtMTUzOSw3ICsxNTM5LDcgQEAgUG9zaXRpb24gUmVuZGVyT2JqZWN0Ojpwb3Np
dGlvbkZvclBvaW50KAogICAgIHJldHVybiBwb3NpdGlvbkZvclBvaW50KHBvaW50LCBudWxscHRy
KS5kZWVwRXF1aXZhbGVudCgpOwogfQogCi1WaXNpYmxlUG9zaXRpb24gUmVuZGVyT2JqZWN0Ojpw
b3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyUmVnaW9uKikK
K1Zpc2libGVQb3NpdGlvbiBSZW5kZXJPYmplY3Q6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5
b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciopCiB7CiAgICAgcmV0dXJu
IGNyZWF0ZVZpc2libGVQb3NpdGlvbihjYXJldE1pbk9mZnNldCgpLCBET1dOU1RSRUFNKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDIy
MjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBjbGFzcyBSZW5kZXJGbG93VGhyZWFkOwogY2xhc3Mg
UmVuZGVyR2VvbWV0cnlNYXA7CiBjbGFzcyBSZW5kZXJMYXllcjsKIGNsYXNzIFJlbmRlckxheWVy
TW9kZWxPYmplY3Q7Ci1jbGFzcyBSZW5kZXJSZWdpb247CitjbGFzcyBSZW5kZXJGcmFnbWVudENv
bnRhaW5lcjsKIGNsYXNzIFJlbmRlclRoZW1lOwogY2xhc3MgU2VsZWN0aW9uU3VidHJlZVJvb3Q7
CiBjbGFzcyBUcmFuc2Zvcm1TdGF0ZTsKQEAgLTIzOCw3ICsyMzgsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBib29sIGlzUmVuZGVyQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJJRnJhbWUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlckltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJSZWdpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlckZyYWdtZW50Q29udGFpbmVyKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNSZXBsaWNhKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc1J1YnlJbmxpbmUoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQpAQCAtNTcwLDcgKzU3MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgdmlydHVhbCBQb3Np
dGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAgdmlydHVhbCBW
aXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0
IFJlbmRlclJlZ2lvbiopOworICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9y
UG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciop
OwogICAgIFZpc2libGVQb3NpdGlvbiBjcmVhdGVWaXNpYmxlUG9zaXRpb24oaW50IG9mZnNldCwg
RUFmZmluaXR5KSBjb25zdDsKICAgICBWaXNpYmxlUG9zaXRpb24gY3JlYXRlVmlzaWJsZVBvc2l0
aW9uKGNvbnN0IFBvc2l0aW9uJikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJSZWdpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJSZWdpb24uY3BwCShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDU2MCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICogTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0g
KiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJSZW5kZXJSZWdpb24uaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgot
I2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVk
ZSAiTGF5b3V0UmVwYWludGVyLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKLSNpbmNsdWRlICJSZW5k
ZXJCb3hSZWdpb25JbmZvLmgiCi0jaW5jbHVkZSAiUmVuZGVyRmxvd1RocmVhZC5oIgotI2luY2x1
ZGUgIlJlbmRlcklubGluZS5oIgotI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiU3R5
bGVSZXNvbHZlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlbmRlclJlZ2lvbjo6UmVu
ZGVyUmVnaW9uKEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUsIFJlbmRlckZs
b3dUaHJlYWQqIGZsb3dUaHJlYWQpCi0gICAgOiBSZW5kZXJCbG9ja0Zsb3coZWxlbWVudCwgV1RG
TW92ZShzdHlsZSkpCi0gICAgLCBtX2Zsb3dUaHJlYWQoZmxvd1RocmVhZCkKLSAgICAsIG1faXNW
YWxpZChmYWxzZSkKLXsKLX0KLQotUmVuZGVyUmVnaW9uOjpSZW5kZXJSZWdpb24oRG9jdW1lbnQm
IGRvY3VtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlLCBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhy
ZWFkKQotICAgIDogUmVuZGVyQmxvY2tGbG93KGRvY3VtZW50LCBXVEZNb3ZlKHN0eWxlKSkKLSAg
ICAsIG1fZmxvd1RocmVhZChmbG93VGhyZWFkKQotICAgICwgbV9pc1ZhbGlkKGZhbHNlKQotewot
fQotCi1MYXlvdXRQb2ludCBSZW5kZXJSZWdpb246Om1hcFJlZ2lvblBvaW50SW50b0Zsb3dUaHJl
YWRDb29yZGluYXRlcyhjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCi17Ci0gICAgLy8gQXNzdW1p
bmcgdGhlIHBvaW50IGlzIHJlbGF0aXZlIHRvIHRoZSByZWdpb24gYmxvY2ssIDMgY2FzZXMgd2ls
bCBiZSBjb25zaWRlcmVkOgotICAgIC8vIGEpIHRvcCBtYXJnaW4sIHBhZGRpbmcgb3IgYm9yZGVy
LgotICAgIC8vIGIpIGJvdHRvbSBtYXJnaW4sIHBhZGRpbmcgb3IgYm9yZGVyLgotICAgIC8vIGMp
IG5vbi1jb250ZW50IHJlZ2lvbiBhcmVhLgotCi0gICAgTGF5b3V0VW5pdCBwb2ludExvZ2ljYWxU
b3AoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBvaW50LnkoKSA6IHBvaW50LngoKSk7Ci0g
ICAgTGF5b3V0VW5pdCBwb2ludExvZ2ljYWxMZWZ0KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBwb2ludC54KCkgOiBwb2ludC55KCkpOwotICAgIExheW91dFVuaXQgZmxvd1RocmVhZExvZ2lj
YWxUb3AoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG1fZmxvd1RocmVhZFBvcnRpb25SZWN0
LnkoKSA6IG1fZmxvd1RocmVhZFBvcnRpb25SZWN0LngoKSk7Ci0gICAgTGF5b3V0VW5pdCBmbG93
VGhyZWFkTG9naWNhbExlZnQoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG1fZmxvd1RocmVh
ZFBvcnRpb25SZWN0LngoKSA6IG1fZmxvd1RocmVhZFBvcnRpb25SZWN0LnkoKSk7Ci0gICAgTGF5
b3V0VW5pdCBmbG93VGhyZWFkUG9ydGlvblRvcEJvdW5kKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBtX2Zsb3dUaHJlYWRQb3J0aW9uUmVjdC5oZWlnaHQoKSA6IG1fZmxvd1RocmVhZFBvcnRp
b25SZWN0LndpZHRoKCkpOwotICAgIExheW91dFVuaXQgZmxvd1RocmVhZFBvcnRpb25MZWZ0Qm91
bmQoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG1fZmxvd1RocmVhZFBvcnRpb25SZWN0Lndp
ZHRoKCkgOiBtX2Zsb3dUaHJlYWRQb3J0aW9uUmVjdC5oZWlnaHQoKSk7Ci0gICAgTGF5b3V0VW5p
dCBmbG93VGhyZWFkUG9ydGlvblRvcE1heChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbV9m
bG93VGhyZWFkUG9ydGlvblJlY3QubWF4WSgpIDogbV9mbG93VGhyZWFkUG9ydGlvblJlY3QubWF4
WCgpKTsKLSAgICBMYXlvdXRVbml0IGZsb3dUaHJlYWRQb3J0aW9uTGVmdE1heChpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID8gbV9mbG93VGhyZWFkUG9ydGlvblJlY3QubWF4WCgpIDogbV9mbG93
VGhyZWFkUG9ydGlvblJlY3QubWF4WSgpKTsKLSAgICBMYXlvdXRVbml0IGVmZmVjdGl2ZUZpeGVk
UG9pbnREZW5vbWluYXRvcjsKLSAgICBlZmZlY3RpdmVGaXhlZFBvaW50RGVub21pbmF0b3Iuc2V0
UmF3VmFsdWUoMSk7Ci0KLSAgICBpZiAocG9pbnRMb2dpY2FsVG9wIDwgMCkgewotICAgICAgICBM
YXlvdXRQb2ludCBwb2ludEluVGhyZWFkKDAsIGZsb3dUaHJlYWRMb2dpY2FsVG9wKTsKLSAgICAg
ICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBwb2ludEluVGhyZWFkIDogcG9p
bnRJblRocmVhZC50cmFuc3Bvc2VkUG9pbnQoKTsKLSAgICB9Ci0KLSAgICBpZiAocG9pbnRMb2dp
Y2FsVG9wID49IGZsb3dUaHJlYWRQb3J0aW9uVG9wQm91bmQpIHsKLSAgICAgICAgTGF5b3V0UG9p
bnQgcG9pbnRJblRocmVhZChmbG93VGhyZWFkUG9ydGlvbkxlZnRCb3VuZCwgZmxvd1RocmVhZFBv
cnRpb25Ub3BNYXggLSBlZmZlY3RpdmVGaXhlZFBvaW50RGVub21pbmF0b3IpOwotICAgICAgICBy
ZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBvaW50SW5UaHJlYWQgOiBwb2ludElu
VGhyZWFkLnRyYW5zcG9zZWRQb2ludCgpOwotICAgIH0KLQotICAgIGlmIChwb2ludExvZ2ljYWxM
ZWZ0IDwgMCkgewotICAgICAgICBMYXlvdXRQb2ludCBwb2ludEluVGhyZWFkKGZsb3dUaHJlYWRM
b2dpY2FsTGVmdCwgcG9pbnRMb2dpY2FsVG9wICsgZmxvd1RocmVhZExvZ2ljYWxUb3ApOwotICAg
ICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBvaW50SW5UaHJlYWQgOiBw
b2ludEluVGhyZWFkLnRyYW5zcG9zZWRQb2ludCgpOwotICAgIH0KLSAgICBpZiAocG9pbnRMb2dp
Y2FsTGVmdCA+PSBmbG93VGhyZWFkUG9ydGlvbkxlZnRCb3VuZCkgewotICAgICAgICBMYXlvdXRQ
b2ludCBwb2ludEluVGhyZWFkKGZsb3dUaHJlYWRQb3J0aW9uTGVmdE1heCAtIGVmZmVjdGl2ZUZp
eGVkUG9pbnREZW5vbWluYXRvciwgcG9pbnRMb2dpY2FsVG9wICsgZmxvd1RocmVhZExvZ2ljYWxU
b3ApOwotICAgICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBvaW50SW5U
aHJlYWQgOiBwb2ludEluVGhyZWFkLnRyYW5zcG9zZWRQb2ludCgpOwotICAgIH0KLSAgICBMYXlv
dXRQb2ludCBwb2ludEluVGhyZWFkKHBvaW50TG9naWNhbExlZnQgKyBmbG93VGhyZWFkTG9naWNh
bExlZnQsIHBvaW50TG9naWNhbFRvcCArIGZsb3dUaHJlYWRMb2dpY2FsVG9wKTsKLSAgICByZXR1
cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBvaW50SW5UaHJlYWQgOiBwb2ludEluVGhy
ZWFkLnRyYW5zcG9zZWRQb2ludCgpOwotfQotCi1WaXNpYmxlUG9zaXRpb24gUmVuZGVyUmVnaW9u
Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVuZGVy
UmVnaW9uKiByZWdpb24pCi17Ci0gICAgaWYgKCFpc1ZhbGlkKCkgfHwgIW1fZmxvd1RocmVhZC0+
Zmlyc3RDaGlsZCgpKSAvLyBjaGVja2luZyBmb3IgZW1wdHkgcmVnaW9uIGJsb2Nrcy4KLSAgICAg
ICAgcmV0dXJuIFJlbmRlckJsb2NrOjpwb3NpdGlvbkZvclBvaW50KHBvaW50LCByZWdpb24pOwot
Ci0gICAgcmV0dXJuIG1fZmxvd1RocmVhZC0+cG9zaXRpb25Gb3JQb2ludChtYXBSZWdpb25Qb2lu
dEludG9GbG93VGhyZWFkQ29vcmRpbmF0ZXMocG9pbnQpLCB0aGlzKTsKLX0KLQotTGF5b3V0VW5p
dCBSZW5kZXJSZWdpb246OnBhZ2VMb2dpY2FsV2lkdGgoKSBjb25zdAotewotICAgIEFTU0VSVChp
c1ZhbGlkKCkpOwotICAgIHJldHVybiBtX2Zsb3dUaHJlYWQtPmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkgPyBjb250ZW50V2lkdGgoKSA6IGNvbnRlbnRIZWlnaHQoKTsKLX0KLQotTGF5b3V0VW5p
dCBSZW5kZXJSZWdpb246OnBhZ2VMb2dpY2FsSGVpZ2h0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQo
aXNWYWxpZCgpKTsKLSAgICByZXR1cm4gbV9mbG93VGhyZWFkLT5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpID8gY29udGVudEhlaWdodCgpIDogY29udGVudFdpZHRoKCk7Ci19Ci0KLUxheW91dFVu
aXQgUmVuZGVyUmVnaW9uOjpsb2dpY2FsSGVpZ2h0T2ZBbGxGbG93VGhyZWFkQ29udGVudCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHBhZ2VMb2dpY2FsSGVpZ2h0KCk7Ci19Ci0KLUxheW91dFJlY3Qg
UmVuZGVyUmVnaW9uOjpmbG93VGhyZWFkUG9ydGlvbk92ZXJmbG93UmVjdCgpCi17Ci0gICAgcmV0
dXJuIG92ZXJmbG93UmVjdEZvckZsb3dUaHJlYWRQb3J0aW9uKGZsb3dUaHJlYWRQb3J0aW9uUmVj
dCgpLCBpc0ZpcnN0UmVnaW9uKCksIGlzTGFzdFJlZ2lvbigpLCBWaXN1YWxPdmVyZmxvdyk7Ci19
Ci0KLUxheW91dFBvaW50IFJlbmRlclJlZ2lvbjo6Zmxvd1RocmVhZFBvcnRpb25Mb2NhdGlvbigp
IGNvbnN0Ci17Ci0gICAgTGF5b3V0UG9pbnQgcG9ydGlvbkxvY2F0aW9uOwotICAgIExheW91dFJl
Y3QgcG9ydGlvblJlY3QgPSBmbG93VGhyZWFkUG9ydGlvblJlY3QoKTsKLQotICAgIGlmIChmbG93
VGhyZWFkKCktPnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkgewotICAgICAg
ICBMYXlvdXRSZWN0IGZsaXBwZWRGbG93VGhyZWFkUG9ydGlvblJlY3QocG9ydGlvblJlY3QpOwot
ICAgICAgICBmbG93VGhyZWFkKCktPmZsaXBGb3JXcml0aW5nTW9kZShmbGlwcGVkRmxvd1RocmVh
ZFBvcnRpb25SZWN0KTsKLSAgICAgICAgcG9ydGlvbkxvY2F0aW9uID0gZmxpcHBlZEZsb3dUaHJl
YWRQb3J0aW9uUmVjdC5sb2NhdGlvbigpOwotICAgIH0gZWxzZQotICAgICAgICBwb3J0aW9uTG9j
YXRpb24gPSBwb3J0aW9uUmVjdC5sb2NhdGlvbigpOwotCi0gICAgcmV0dXJuIHBvcnRpb25Mb2Nh
dGlvbjsKLX0KLQotTGF5b3V0UmVjdCBSZW5kZXJSZWdpb246Om92ZXJmbG93UmVjdEZvckZsb3dU
aHJlYWRQb3J0aW9uKGNvbnN0IExheW91dFJlY3QmIGZsb3dUaHJlYWRQb3J0aW9uUmVjdCwgYm9v
bCBpc0ZpcnN0UG9ydGlvbiwgYm9vbCBpc0xhc3RQb3J0aW9uLCBPdmVyZmxvd1R5cGUgb3ZlcmZs
b3dUeXBlKQotewotICAgIEFTU0VSVChpc1ZhbGlkKCkpOwotICAgIGlmIChzaG91bGRDbGlwRmxv
d1RocmVhZENvbnRlbnQoKSkKLSAgICAgICAgcmV0dXJuIGZsb3dUaHJlYWRQb3J0aW9uUmVjdDsK
LQotICAgIExheW91dFJlY3QgZmxvd1RocmVhZE92ZXJmbG93ID0gb3ZlcmZsb3dUeXBlID09IFZp
c3VhbE92ZXJmbG93ID8gdmlzdWFsT3ZlcmZsb3dSZWN0Rm9yQm94KCptX2Zsb3dUaHJlYWQpIDog
bGF5b3V0T3ZlcmZsb3dSZWN0Rm9yQm94KG1fZmxvd1RocmVhZCk7Ci0gICAgTGF5b3V0UmVjdCBj
bGlwUmVjdDsKLSAgICBpZiAobV9mbG93VGhyZWFkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KSB7Ci0gICAgICAgIExheW91dFVuaXQgbWluWSA9IGlzRmlyc3RQb3J0aW9uID8gZmxvd1RocmVh
ZE92ZXJmbG93LnkoKSA6IGZsb3dUaHJlYWRQb3J0aW9uUmVjdC55KCk7Ci0gICAgICAgIExheW91
dFVuaXQgbWF4WSA9IGlzTGFzdFBvcnRpb24gPyBzdGQ6Om1heChmbG93VGhyZWFkUG9ydGlvblJl
Y3QubWF4WSgpLCBmbG93VGhyZWFkT3ZlcmZsb3cubWF4WSgpKSA6IGZsb3dUaHJlYWRQb3J0aW9u
UmVjdC5tYXhZKCk7Ci0gICAgICAgIGJvb2wgY2xpcFggPSBzdHlsZSgpLm92ZXJmbG93WCgpICE9
IE9WSVNJQkxFOwotICAgICAgICBMYXlvdXRVbml0IG1pblggPSBjbGlwWCA/IGZsb3dUaHJlYWRQ
b3J0aW9uUmVjdC54KCkgOiBzdGQ6Om1pbihmbG93VGhyZWFkUG9ydGlvblJlY3QueCgpLCBmbG93
VGhyZWFkT3ZlcmZsb3cueCgpKTsKLSAgICAgICAgTGF5b3V0VW5pdCBtYXhYID0gY2xpcFggPyBm
bG93VGhyZWFkUG9ydGlvblJlY3QubWF4WCgpIDogc3RkOjptYXgoZmxvd1RocmVhZFBvcnRpb25S
ZWN0Lm1heFgoKSwgZmxvd1RocmVhZE92ZXJmbG93Lm1heFgoKSk7Ci0gICAgICAgIGNsaXBSZWN0
ID0gTGF5b3V0UmVjdChtaW5YLCBtaW5ZLCBtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIExheW91dFVuaXQgbWluWCA9IGlzRmlyc3RQb3J0aW9uID8gZmxv
d1RocmVhZE92ZXJmbG93LngoKSA6IGZsb3dUaHJlYWRQb3J0aW9uUmVjdC54KCk7Ci0gICAgICAg
IExheW91dFVuaXQgbWF4WCA9IGlzTGFzdFBvcnRpb24gPyBzdGQ6Om1heChmbG93VGhyZWFkUG9y
dGlvblJlY3QubWF4WCgpLCBmbG93VGhyZWFkT3ZlcmZsb3cubWF4WCgpKSA6IGZsb3dUaHJlYWRQ
b3J0aW9uUmVjdC5tYXhYKCk7Ci0gICAgICAgIGJvb2wgY2xpcFkgPSBzdHlsZSgpLm92ZXJmbG93
WSgpICE9IE9WSVNJQkxFOwotICAgICAgICBMYXlvdXRVbml0IG1pblkgPSBjbGlwWSA/IGZsb3dU
aHJlYWRQb3J0aW9uUmVjdC55KCkgOiBzdGQ6Om1pbihmbG93VGhyZWFkUG9ydGlvblJlY3QueSgp
LCBmbG93VGhyZWFkT3ZlcmZsb3cueSgpKTsKLSAgICAgICAgTGF5b3V0VW5pdCBtYXhZID0gY2xp
cFkgPyBmbG93VGhyZWFkUG9ydGlvblJlY3QubWF4WSgpIDogc3RkOjptYXgoZmxvd1RocmVhZFBv
cnRpb25SZWN0LnkoKSwgZmxvd1RocmVhZE92ZXJmbG93Lm1heFkoKSk7Ci0gICAgICAgIGNsaXBS
ZWN0ID0gTGF5b3V0UmVjdChtaW5YLCBtaW5ZLCBtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpOwot
ICAgIH0KLSAgICByZXR1cm4gY2xpcFJlY3Q7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyUmVnaW9u
OjpwYWdlTG9naWNhbFRvcEZvck9mZnNldChMYXlvdXRVbml0IC8qIG9mZnNldCAqLykgY29uc3QK
LXsKLSAgICByZXR1cm4gZmxvd1RocmVhZCgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8g
Zmxvd1RocmVhZFBvcnRpb25SZWN0KCkueSgpIDogZmxvd1RocmVhZFBvcnRpb25SZWN0KCkueCgp
OwotfQotCi1ib29sIFJlbmRlclJlZ2lvbjo6aXNGaXJzdFJlZ2lvbigpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKGlzVmFsaWQoKSk7Ci0KLSAgICByZXR1cm4gbV9mbG93VGhyZWFkLT5maXJzdFJlZ2lv
bigpID09IHRoaXM7Ci19Ci0KLWJvb2wgUmVuZGVyUmVnaW9uOjppc0xhc3RSZWdpb24oKSBjb25z
dAotewotICAgIEFTU0VSVChpc1ZhbGlkKCkpOwotCi0gICAgcmV0dXJuIG1fZmxvd1RocmVhZC0+
bGFzdFJlZ2lvbigpID09IHRoaXM7Ci19Ci0KLWJvb2wgUmVuZGVyUmVnaW9uOjpzaG91bGRDbGlw
Rmxvd1RocmVhZENvbnRlbnQoKSBjb25zdAotewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAo
KTsKLX0KLQotdm9pZCBSZW5kZXJSZWdpb246OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5j
ZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCi17Ci0gICAgUmVuZGVyQmxvY2tG
bG93OjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7Ci0KLSAgICBpZiAoIWlzVmFsaWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG9sZFN0eWxlICYmIG9sZFN0eWxlLT53cml0
aW5nTW9kZSgpICE9IHN0eWxlKCkud3JpdGluZ01vZGUoKSkKLSAgICAgICAgbV9mbG93VGhyZWFk
LT5yZWdpb25DaGFuZ2VkV3JpdGluZ01vZGUodGhpcyk7Ci19Ci0KLXZvaWQgUmVuZGVyUmVnaW9u
Ojpjb21wdXRlT3ZlcmZsb3dGcm9tRmxvd1RocmVhZCgpCi17Ci0gICAgQVNTRVJUKGlzVmFsaWQo
KSk7Ci0KLSAgICBMYXlvdXRSZWN0IGxheW91dFJlY3QgPSBsYXlvdXRPdmVyZmxvd1JlY3RGb3JC
b3gobV9mbG93VGhyZWFkKTsKLSAgICBsYXlvdXRSZWN0LnNldExvY2F0aW9uKGNvbnRlbnRCb3hS
ZWN0KCkubG9jYXRpb24oKSArIChsYXlvdXRSZWN0LmxvY2F0aW9uKCkgLSBtX2Zsb3dUaHJlYWRQ
b3J0aW9uUmVjdC5sb2NhdGlvbigpKSk7Ci0KLSAgICAvLyBGSVhNRTogQ29ycmVjdGx5IGFkanVz
dCB0aGUgbGF5b3V0IG92ZXJmbG93IGZvciB3cml0aW5nIG1vZGVzLgotICAgIGFkZExheW91dE92
ZXJmbG93KGxheW91dFJlY3QpOwotICAgIFJlbmRlckZsb3dUaHJlYWQqIGVuY2xvc2luZ1JlbmRl
ckZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaWYgKGVuY2xv
c2luZ1JlbmRlckZsb3dUaHJlYWQpCi0gICAgICAgIGVuY2xvc2luZ1JlbmRlckZsb3dUaHJlYWQt
PmFkZFJlZ2lvbnNMYXlvdXRPdmVyZmxvdyh0aGlzLCBsYXlvdXRSZWN0KTsKLQotICAgIHVwZGF0
ZUxheWVyVHJhbnNmb3JtKCk7Ci0gICAgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7Ci19
Ci0KLXZvaWQgUmVuZGVyUmVnaW9uOjpyZXBhaW50Rmxvd1RocmVhZENvbnRlbnQoY29uc3QgTGF5
b3V0UmVjdCYgcmVwYWludFJlY3QpCi17Ci0gICAgcmVwYWludEZsb3dUaHJlYWRDb250ZW50UmVj
dGFuZ2xlKHJlcGFpbnRSZWN0LCBmbG93VGhyZWFkUG9ydGlvblJlY3QoKSwgY29udGVudEJveFJl
Y3QoKS5sb2NhdGlvbigpKTsKLX0KLQotdm9pZCBSZW5kZXJSZWdpb246OnJlcGFpbnRGbG93VGhy
ZWFkQ29udGVudFJlY3RhbmdsZShjb25zdCBMYXlvdXRSZWN0JiByZXBhaW50UmVjdCwgY29uc3Qg
TGF5b3V0UmVjdCYgZmxvd1RocmVhZFBvcnRpb25SZWN0LCBjb25zdCBMYXlvdXRQb2ludCYgcmVn
aW9uTG9jYXRpb24sIGNvbnN0IExheW91dFJlY3QqIGZsb3dUaHJlYWRQb3J0aW9uQ2xpcFJlY3Qp
Ci17Ci0gICAgQVNTRVJUKGlzVmFsaWQoKSk7Ci0KLSAgICAvLyBXZSBvbmx5IGhhdmUgdG8gaXNz
dWUgYSByZXBhaW50IGluIHRoaXMgcmVnaW9uIGlmIHRoZSByZWdpb24gcmVjdCBpbnRlcnNlY3Rz
IHRoZSByZXBhaW50IHJlY3QuCi0gICAgTGF5b3V0UmVjdCBjbGlwcGVkUmVjdChyZXBhaW50UmVj
dCk7Ci0KLSAgICBpZiAoZmxvd1RocmVhZFBvcnRpb25DbGlwUmVjdCkgewotICAgICAgICBMYXlv
dXRSZWN0IGZsaXBwZWRGbG93VGhyZWFkUG9ydGlvbkNsaXBSZWN0KCpmbG93VGhyZWFkUG9ydGlv
bkNsaXBSZWN0KTsKLSAgICAgICAgZmxvd1RocmVhZCgpLT5mbGlwRm9yV3JpdGluZ01vZGUoZmxp
cHBlZEZsb3dUaHJlYWRQb3J0aW9uQ2xpcFJlY3QpOwotICAgICAgICBjbGlwcGVkUmVjdC5pbnRl
cnNlY3QoZmxpcHBlZEZsb3dUaHJlYWRQb3J0aW9uQ2xpcFJlY3QpOwotICAgIH0KLQotICAgIGlm
IChjbGlwcGVkUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIExheW91dFJl
Y3QgZmxpcHBlZEZsb3dUaHJlYWRQb3J0aW9uUmVjdChmbG93VGhyZWFkUG9ydGlvblJlY3QpOwot
ICAgIGZsb3dUaHJlYWQoKS0+ZmxpcEZvcldyaXRpbmdNb2RlKGZsaXBwZWRGbG93VGhyZWFkUG9y
dGlvblJlY3QpOyAvLyBQdXQgdGhlIHJlZ2lvbiByZWN0cyBpbnRvIHBoeXNpY2FsIGNvb3JkaW5h
dGVzLgotCi0gICAgLy8gUHV0IHRoZSByZWdpb24gcmVjdCBpbnRvIHRoZSByZWdpb24ncyBwaHlz
aWNhbCBjb29yZGluYXRlIHNwYWNlLgotICAgIGNsaXBwZWRSZWN0LnNldExvY2F0aW9uKHJlZ2lv
bkxvY2F0aW9uICsgKGNsaXBwZWRSZWN0LmxvY2F0aW9uKCkgLSBmbGlwcGVkRmxvd1RocmVhZFBv
cnRpb25SZWN0LmxvY2F0aW9uKCkpKTsKLQotICAgIC8vIE5vdyBzd2l0Y2ggdG8gdGhlIHJlZ2lv
bidzIHdyaXRpbmcgbW9kZSBjb29yZGluYXRlIHNwYWNlIGFuZCBsZXQgaXQgcmVwYWludCBpdHNl
bGYuCi0gICAgZmxpcEZvcldyaXRpbmdNb2RlKGNsaXBwZWRSZWN0KTsKLSAgICAKLSAgICAvLyBJ
c3N1ZSB0aGUgcmVwYWludC4KLSAgICByZXBhaW50UmVjdGFuZ2xlKGNsaXBwZWRSZWN0KTsKLX0K
LQotdm9pZCBSZW5kZXJSZWdpb246Omluc3RhbGxGbG93VGhyZWFkKCkKLXsKLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBSZW5kZXJSZWdpb246OmF0dGFjaFJlZ2lvbigpCi17
Ci0gICAgaWYgKHJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgLy8gQSByZWdpb24gc3RhcnRzIG9mZiBpbnZhbGlkLgotICAgIHNldElzVmFsaWQo
ZmFsc2UpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZmxvdyB0aHJlYWQgcmVmZXJlbmNlIGFu
ZCBjcmVhdGUgdGhlIGZsb3cgdGhyZWFkIG9iamVjdCBpZiBuZWVkZWQuCi0gICAgLy8gVGhlIGZs
b3cgdGhyZWFkIGxpZmV0aW1lIGlzIGluZmx1ZW5jZWQgYnkgdGhlIG51bWJlciBvZiByZWdpb25z
IGF0dGFjaGVkIHRvIGl0LAotICAgIC8vIGFuZCB3ZSBhcmUgYXR0YWNoaW5nIHRoZSByZWdpb24g
dG8gdGhlIGZsb3cgdGhyZWFkLgotICAgIGluc3RhbGxGbG93VGhyZWFkKCk7Ci0gICAgCi0gICAg
aWYgKCFtX2Zsb3dUaHJlYWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE9ubHkgYWZ0ZXIg
YWRkaW5nIHRoZSByZWdpb24gdG8gdGhlIHRocmVhZCwgdGhlIHJlZ2lvbiBpcyBtYXJrZWQgdG8g
YmUgdmFsaWQuCi0gICAgbV9mbG93VGhyZWFkLT5hZGRSZWdpb25Ub1RocmVhZCh0aGlzKTsKLX0K
LQotdm9pZCBSZW5kZXJSZWdpb246OmRldGFjaFJlZ2lvbigpCi17Ci0gICAgaWYgKG1fZmxvd1Ro
cmVhZCkKLSAgICAgICAgbV9mbG93VGhyZWFkLT5yZW1vdmVSZWdpb25Gcm9tVGhyZWFkKHRoaXMp
OwotICAgIG1fZmxvd1RocmVhZCA9IG51bGxwdHI7Ci19Ci0KLVJlbmRlckJveFJlZ2lvbkluZm8q
IFJlbmRlclJlZ2lvbjo6cmVuZGVyQm94UmVnaW9uSW5mbyhjb25zdCBSZW5kZXJCb3gqIGJveCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQoaXNWYWxpZCgpKTsKLSAgICByZXR1cm4gbV9yZW5kZXJCb3hS
ZWdpb25JbmZvLmdldChib3gpOwotfQotCi1SZW5kZXJCb3hSZWdpb25JbmZvKiBSZW5kZXJSZWdp
b246OnNldFJlbmRlckJveFJlZ2lvbkluZm8oY29uc3QgUmVuZGVyQm94KiBib3gsIExheW91dFVu
aXQgbG9naWNhbExlZnRJbnNldCwgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRJbnNldCwKLSAgICBi
b29sIGNvbnRhaW5pbmdCbG9ja0NoYWluSXNJbnNldCkKLXsKLSAgICBBU1NFUlQoaXNWYWxpZCgp
KTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCb3hSZWdpb25JbmZvPiYgYm94SW5mbyA9
IG1fcmVuZGVyQm94UmVnaW9uSW5mby5hZGQoYm94LCBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlckJv
eFJlZ2lvbkluZm8+KGxvZ2ljYWxMZWZ0SW5zZXQsIGxvZ2ljYWxSaWdodEluc2V0LCBjb250YWlu
aW5nQmxvY2tDaGFpbklzSW5zZXQpKS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgcmV0dXJuIGJveElu
Zm8uZ2V0KCk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCb3hSZWdpb25JbmZvPiBSZW5k
ZXJSZWdpb246OnRha2VSZW5kZXJCb3hSZWdpb25JbmZvKGNvbnN0IFJlbmRlckJveCogYm94KQot
ewotICAgIHJldHVybiBtX3JlbmRlckJveFJlZ2lvbkluZm8udGFrZShib3gpOwotfQotCi12b2lk
IFJlbmRlclJlZ2lvbjo6cmVtb3ZlUmVuZGVyQm94UmVnaW9uSW5mbyhjb25zdCBSZW5kZXJCb3gm
IGJveCkKLXsKLSAgICBtX3JlbmRlckJveFJlZ2lvbkluZm8ucmVtb3ZlKCZib3gpOwotfQotCi12
b2lkIFJlbmRlclJlZ2lvbjo6ZGVsZXRlQWxsUmVuZGVyQm94UmVnaW9uSW5mbygpCi17Ci0gICAg
bV9yZW5kZXJCb3hSZWdpb25JbmZvLmNsZWFyKCk7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyUmVn
aW9uOjpsb2dpY2FsVG9wT2ZGbG93VGhyZWFkQ29udGVudFJlY3QoY29uc3QgTGF5b3V0UmVjdCYg
cmVjdCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaXNWYWxpZCgpKTsKLSAgICByZXR1cm4gZmxvd1Ro
cmVhZCgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gcmVjdC55KCkgOiByZWN0LngoKTsK
LX0KLQotTGF5b3V0VW5pdCBSZW5kZXJSZWdpb246OmxvZ2ljYWxCb3R0b21PZkZsb3dUaHJlYWRD
b250ZW50UmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0KSBjb25zdAotewotICAgIEFTU0VSVChp
c1ZhbGlkKCkpOwotICAgIHJldHVybiBmbG93VGhyZWFkKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkgPyByZWN0Lm1heFkoKSA6IHJlY3QubWF4WCgpOwotfQotCi12b2lkIFJlbmRlclJlZ2lv
bjo6aW5zZXJ0ZWRJbnRvVHJlZSgpCi17Ci0gICAgYXR0YWNoUmVnaW9uKCk7Ci0gICAgaWYgKGlz
VmFsaWQoKSkKLSAgICAgICAgUmVuZGVyQmxvY2tGbG93OjppbnNlcnRlZEludG9UcmVlKCk7Ci19
Ci0KLXZvaWQgUmVuZGVyUmVnaW9uOjp3aWxsQmVSZW1vdmVkRnJvbVRyZWUoKQotewotICAgIFJl
bmRlckJsb2NrRmxvdzo6d2lsbEJlUmVtb3ZlZEZyb21UcmVlKCk7Ci0KLSAgICBkZXRhY2hSZWdp
b24oKTsKLX0KLQotdm9pZCBSZW5kZXJSZWdpb246OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lk
dGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCYgbWF4TG9naWNhbFdp
ZHRoKSBjb25zdAotewotICAgIGlmICghaXNWYWxpZCgpKSB7Ci0gICAgICAgIFJlbmRlckJsb2Nr
Rmxvdzo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMobWluTG9naWNhbFdpZHRoLCBtYXhM
b2dpY2FsV2lkdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbWluTG9naWNhbFdp
ZHRoID0gbV9mbG93VGhyZWFkLT5taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKTsKLSAgICBtYXhM
b2dpY2FsV2lkdGggPSBtX2Zsb3dUaHJlYWQtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpOwot
fQotCi12b2lkIFJlbmRlclJlZ2lvbjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQot
ewotICAgIEFTU0VSVChwcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSk7Ci0KLSAgICBpZiAo
IWlzVmFsaWQoKSkgewotICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTog
Q3VycmVudGx5LCB0aGUgY29kZSBoYW5kbGVzIG9ubHkgdGhlIDxsZW5ndGg+IGNhc2UgZm9yIG1p
bi13aWR0aC9tYXgtd2lkdGguCi0gICAgLy8gSXQgc2hvdWxkIGFsc28gc3VwcG9ydCBvdGhlciB2
YWx1ZXMsIGxpa2UgcGVyY2VudGFnZSwgY2FsYyBvciB2aWV3cG9ydCByZWxhdGl2ZS4KLSAgICBt
X21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0g
MDsKLQotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKLSAgICBp
ZiAoc3R5bGVUb1VzZS5sb2dpY2FsV2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGVUb1VzZS5sb2dp
Y2FsV2lkdGgoKS52YWx1ZSgpID4gMCkKLSAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lk
dGggPSBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IGFkanVzdENvbnRlbnRCb3hMb2dpY2Fs
V2lkdGhGb3JCb3hTaXppbmcoc3R5bGVUb1VzZS5sb2dpY2FsV2lkdGgoKS52YWx1ZSgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIGNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKG1fbWluUHJlZmVy
cmVkTG9naWNhbFdpZHRoLCBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCk7Ci0KLSAgICBpZiAo
c3R5bGVUb1VzZS5sb2dpY2FsTWluV2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGVUb1VzZS5sb2dp
Y2FsTWluV2lkdGgoKS52YWx1ZSgpID4gMCkgewotICAgICAgICBtX21heFByZWZlcnJlZExvZ2lj
YWxXaWR0aCA9IHN0ZDo6bWF4KG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBhZGp1c3RDb250
ZW50Qm94TG9naWNhbFdpZHRoRm9yQm94U2l6aW5nKHN0eWxlVG9Vc2UubG9naWNhbE1pbldpZHRo
KCkudmFsdWUoKSkpOwotICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IHN0ZDo6
bWF4KG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoLCBhZGp1c3RDb250ZW50Qm94TG9naWNhbFdp
ZHRoRm9yQm94U2l6aW5nKHN0eWxlVG9Vc2UubG9naWNhbE1pbldpZHRoKCkudmFsdWUoKSkpOwot
ICAgIH0KLQotICAgIGlmIChzdHlsZVRvVXNlLmxvZ2ljYWxNYXhXaWR0aCgpLmlzRml4ZWQoKSkg
ewotICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IHN0ZDo6bWluKG1fbWF4UHJl
ZmVycmVkTG9naWNhbFdpZHRoLCBhZGp1c3RDb250ZW50Qm94TG9naWNhbFdpZHRoRm9yQm94U2l6
aW5nKHN0eWxlVG9Vc2UubG9naWNhbE1heFdpZHRoKCkudmFsdWUoKSkpOwotICAgICAgICBtX21p
blByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IHN0ZDo6bWluKG1fbWluUHJlZmVycmVkTG9naWNhbFdp
ZHRoLCBhZGp1c3RDb250ZW50Qm94TG9naWNhbFdpZHRoRm9yQm94U2l6aW5nKHN0eWxlVG9Vc2Uu
bG9naWNhbE1heFdpZHRoKCkudmFsdWUoKSkpOwotICAgIH0KLQotICAgIExheW91dFVuaXQgYm9y
ZGVyQW5kUGFkZGluZyA9IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKTsKLSAgICBtX21p
blByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSBib3JkZXJBbmRQYWRkaW5nOwotICAgIG1fbWF4UHJl
ZmVycmVkTG9naWNhbFdpZHRoICs9IGJvcmRlckFuZFBhZGRpbmc7Ci0gICAgc2V0UHJlZmVycmVk
TG9naWNhbFdpZHRoc0RpcnR5KGZhbHNlKTsKLX0KLQotdm9pZCBSZW5kZXJSZWdpb246OmFkanVz
dFJlZ2lvbkJvdW5kc0Zyb21GbG93VGhyZWFkUG9ydGlvblJlY3QoTGF5b3V0UmVjdCYgcmVnaW9u
Qm91bmRzKSBjb25zdAotewotICAgIExheW91dFJlY3QgZmxpcHBlZEZsb3dUaHJlYWRQb3J0aW9u
UmVjdCA9IGZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpOwotICAgIGZsb3dUaHJlYWQoKS0+ZmxpcEZv
cldyaXRpbmdNb2RlKGZsaXBwZWRGbG93VGhyZWFkUG9ydGlvblJlY3QpOwotICAgIHJlZ2lvbkJv
dW5kcy5tb3ZlQnkoZmxpcHBlZEZsb3dUaHJlYWRQb3J0aW9uUmVjdC5sb2NhdGlvbigpKTsKLX0K
LQotdm9pZCBSZW5kZXJSZWdpb246OmVuc3VyZU92ZXJmbG93Rm9yQm94KGNvbnN0IFJlbmRlckJv
eCogYm94LCBSZWZQdHI8UmVuZGVyT3ZlcmZsb3c+JiBvdmVyZmxvdywgYm9vbCBmb3JjZUNyZWF0
aW9uKQotewotICAgIEFTU0VSVChtX2Zsb3dUaHJlYWQtPnJlbmRlclJlZ2lvbkxpc3QoKS5jb250
YWlucyh0aGlzKSk7Ci0gICAgQVNTRVJUKGlzVmFsaWQoKSk7Ci0KLSAgICBSZW5kZXJCb3hSZWdp
b25JbmZvKiBib3hJbmZvID0gcmVuZGVyQm94UmVnaW9uSW5mbyhib3gpOwotICAgIGlmICghYm94
SW5mbyAmJiAhZm9yY2VDcmVhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGJveElu
Zm8gJiYgYm94SW5mby0+b3ZlcmZsb3coKSkgewotICAgICAgICBvdmVyZmxvdyA9IGJveEluZm8t
Pm92ZXJmbG93KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgTGF5b3V0UmVj
dCBib3JkZXJCb3ggPSBib3gtPmJvcmRlckJveFJlY3RJblJlZ2lvbih0aGlzKTsKLSAgICBMYXlv
dXRSZWN0IGNsaWVudEJveDsKLSAgICBBU1NFUlQobV9mbG93VGhyZWFkLT5vYmplY3RTaG91bGRG
cmFnbWVudEluRmxvd1JlZ2lvbihib3gsIHRoaXMpKTsKLQotICAgIGlmICghYm9yZGVyQm94Lmlz
RW1wdHkoKSkgewotICAgICAgICBib3JkZXJCb3ggPSByZWN0Rmxvd1BvcnRpb25Gb3JCb3goYm94
LCBib3JkZXJCb3gpOwotICAgICAgICAKLSAgICAgICAgY2xpZW50Qm94ID0gYm94LT5jbGllbnRC
b3hSZWN0SW5SZWdpb24odGhpcyk7Ci0gICAgICAgIGNsaWVudEJveCA9IHJlY3RGbG93UG9ydGlv
bkZvckJveChib3gsIGNsaWVudEJveCk7Ci0gICAgICAgIAotICAgICAgICBtX2Zsb3dUaHJlYWQt
PmZsaXBGb3JXcml0aW5nTW9kZUxvY2FsQ29vcmRpbmF0ZXMoYm9yZGVyQm94KTsKLSAgICAgICAg
bV9mbG93VGhyZWFkLT5mbGlwRm9yV3JpdGluZ01vZGVMb2NhbENvb3JkaW5hdGVzKGNsaWVudEJv
eCk7Ci0gICAgfQotCi0gICAgaWYgKGJveEluZm8pIHsKLSAgICAgICAgYm94SW5mby0+Y3JlYXRl
T3ZlcmZsb3coY2xpZW50Qm94LCBib3JkZXJCb3gpOwotICAgICAgICBvdmVyZmxvdyA9IGJveElu
Zm8tPm92ZXJmbG93KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG92ZXJmbG93ID0gYWRvcHRSZWYo
bmV3IFJlbmRlck92ZXJmbG93KGNsaWVudEJveCwgYm9yZGVyQm94KSk7Ci19Ci0KLUxheW91dFJl
Y3QgUmVuZGVyUmVnaW9uOjpyZWN0Rmxvd1BvcnRpb25Gb3JCb3goY29uc3QgUmVuZGVyQm94KiBi
b3gsIGNvbnN0IExheW91dFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgTGF5b3V0UmVjdCBtYXBw
ZWRSZWN0ID0gbV9mbG93VGhyZWFkLT5tYXBGcm9tTG9jYWxUb0Zsb3dUaHJlYWQoYm94LCByZWN0
KTsKLQotICAgIFJlbmRlclJlZ2lvbiogc3RhcnRSZWdpb24gPSBudWxscHRyOwotICAgIFJlbmRl
clJlZ2lvbiogZW5kUmVnaW9uID0gbnVsbHB0cjsKLSAgICBpZiAobV9mbG93VGhyZWFkLT5nZXRS
ZWdpb25SYW5nZUZvckJveChib3gsIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pKSB7Ci0gICAgICAg
IGlmIChmbG93VGhyZWFkKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAg
ICAgIGlmICh0aGlzICE9IHN0YXJ0UmVnaW9uKQotICAgICAgICAgICAgICAgIG1hcHBlZFJlY3Qu
c2hpZnRZRWRnZVRvKHN0ZDo6bWF4PExheW91dFVuaXQ+KGxvZ2ljYWxUb3BGb3JGbG93VGhyZWFk
Q29udGVudCgpLCBtYXBwZWRSZWN0LnkoKSkpOwotICAgICAgICAgICAgaWYgKHRoaXMgIT0gZW5k
UmVnaW9uKQotICAgICAgICAgICAgICAgIG1hcHBlZFJlY3Quc2V0SGVpZ2h0KHN0ZDo6bWF4PExh
eW91dFVuaXQ+KDAsIHN0ZDo6bWluPExheW91dFVuaXQ+KGxvZ2ljYWxCb3R0b21Gb3JGbG93VGhy
ZWFkQ29udGVudCgpIC0gbWFwcGVkUmVjdC55KCksIG1hcHBlZFJlY3QuaGVpZ2h0KCkpKSk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodGhpcyAhPSBzdGFydFJlZ2lvbikKLSAg
ICAgICAgICAgICAgICBtYXBwZWRSZWN0LnNoaWZ0WEVkZ2VUbyhzdGQ6Om1heDxMYXlvdXRVbml0
Pihsb2dpY2FsVG9wRm9yRmxvd1RocmVhZENvbnRlbnQoKSwgbWFwcGVkUmVjdC54KCkpKTsKLSAg
ICAgICAgICAgIGlmICh0aGlzICE9IGVuZFJlZ2lvbikKLSAgICAgICAgICAgICAgICBtYXBwZWRS
ZWN0LnNldFdpZHRoKHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIHN0ZDo6bWluPExheW91dFVuaXQ+
KGxvZ2ljYWxCb3R0b21Gb3JGbG93VGhyZWFkQ29udGVudCgpIC0gbWFwcGVkUmVjdC54KCksIG1h
cHBlZFJlY3Qud2lkdGgoKSkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtX2Zs
b3dUaHJlYWQtPm1hcEZyb21GbG93VGhyZWFkVG9Mb2NhbChib3gsIG1hcHBlZFJlY3QpOwotfQot
Ci12b2lkIFJlbmRlclJlZ2lvbjo6YWRkTGF5b3V0T3ZlcmZsb3dGb3JCb3goY29uc3QgUmVuZGVy
Qm94KiBib3gsIGNvbnN0IExheW91dFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHJlY3QuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8UmVuZGVyT3ZlcmZsb3c+IHJlZ2lv
bk92ZXJmbG93OwotICAgIGVuc3VyZU92ZXJmbG93Rm9yQm94KGJveCwgcmVnaW9uT3ZlcmZsb3cs
IGZhbHNlKTsKLQotICAgIGlmICghcmVnaW9uT3ZlcmZsb3cpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHJlZ2lvbk92ZXJmbG93LT5hZGRMYXlvdXRPdmVyZmxvdyhyZWN0KTsKLX0KLQotdm9pZCBS
ZW5kZXJSZWdpb246OmFkZFZpc3VhbE92ZXJmbG93Rm9yQm94KGNvbnN0IFJlbmRlckJveCogYm94
LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0KQotewotICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPFJlbmRlck92ZXJmbG93PiByZWdpb25PdmVyZmxv
dzsKLSAgICBlbnN1cmVPdmVyZmxvd0ZvckJveChib3gsIHJlZ2lvbk92ZXJmbG93LCBmYWxzZSk7
Ci0KLSAgICBpZiAoIXJlZ2lvbk92ZXJmbG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBMYXlv
dXRSZWN0IGZsaXBwZWRSZWN0ID0gcmVjdDsKLSAgICBmbG93VGhyZWFkKCktPmZsaXBGb3JXcml0
aW5nTW9kZUxvY2FsQ29vcmRpbmF0ZXMoZmxpcHBlZFJlY3QpOwotICAgIHJlZ2lvbk92ZXJmbG93
LT5hZGRWaXN1YWxPdmVyZmxvdyhmbGlwcGVkUmVjdCk7Ci19Ci0KLUxheW91dFJlY3QgUmVuZGVy
UmVnaW9uOjpsYXlvdXRPdmVyZmxvd1JlY3RGb3JCb3goY29uc3QgUmVuZGVyQm94KiBib3gpCi17
Ci0gICAgUmVmUHRyPFJlbmRlck92ZXJmbG93PiBvdmVyZmxvdzsKLSAgICBlbnN1cmVPdmVyZmxv
d0ZvckJveChib3gsIG92ZXJmbG93LCB0cnVlKTsKLSAgICAKLSAgICBBU1NFUlQob3ZlcmZsb3cp
OwotICAgIHJldHVybiBvdmVyZmxvdy0+bGF5b3V0T3ZlcmZsb3dSZWN0KCk7Ci19Ci0KLUxheW91
dFJlY3QgUmVuZGVyUmVnaW9uOjp2aXN1YWxPdmVyZmxvd1JlY3RGb3JCb3goY29uc3QgUmVuZGVy
Qm94TW9kZWxPYmplY3QmIGJveCkKLXsKLSAgICBpZiAoaXM8UmVuZGVySW5saW5lPihib3gpKSB7
Ci0gICAgICAgIGNvbnN0IFJlbmRlcklubGluZSYgaW5saW5lQm94ID0gZG93bmNhc3Q8UmVuZGVy
SW5saW5lPihib3gpOwotICAgICAgICByZXR1cm4gaW5saW5lQm94LmxpbmVzVmlzdWFsT3ZlcmZs
b3dCb3VuZGluZ0JveEluUmVnaW9uKHRoaXMpOwotICAgIH0KLQotICAgIGlmIChpczxSZW5kZXJC
b3g+KGJveCkpIHsKLSAgICAgICAgUmVmUHRyPFJlbmRlck92ZXJmbG93PiBvdmVyZmxvdzsKLSAg
ICAgICAgZW5zdXJlT3ZlcmZsb3dGb3JCb3goJmRvd25jYXN0PFJlbmRlckJveD4oYm94KSwgb3Zl
cmZsb3csIHRydWUpOwotCi0gICAgICAgIEFTU0VSVChvdmVyZmxvdyk7Ci0gICAgICAgIHJldHVy
biBvdmVyZmxvdy0+dmlzdWFsT3ZlcmZsb3dSZWN0KCk7Ci0gICAgfQotCi0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIExheW91dFJlY3QoKTsKLX0KLQotLy8gRklYTUU6IFRo
aXMgZG9lc24ndCB3b3JrIGZvciB3cml0aW5nIG1vZGVzLgotTGF5b3V0UmVjdCBSZW5kZXJSZWdp
b246OmxheW91dE92ZXJmbG93UmVjdEZvckJveEZvclByb3BhZ2F0aW9uKGNvbnN0IFJlbmRlckJv
eCogYm94KQotewotICAgIC8vIE9ubHkgcHJvcGFnYXRlIGludGVyaW9yIGxheW91dCBvdmVyZmxv
dyBpZiB3ZSBkb24ndCBjbGlwIGl0LgotICAgIExheW91dFJlY3QgcmVjdCA9IGJveC0+Ym9yZGVy
Qm94UmVjdEluUmVnaW9uKHRoaXMpOwotICAgIHJlY3QgPSByZWN0Rmxvd1BvcnRpb25Gb3JCb3go
Ym94LCByZWN0KTsKLSAgICBpZiAoIWJveC0+aGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgIHJl
Y3QudW5pdGUobGF5b3V0T3ZlcmZsb3dSZWN0Rm9yQm94KGJveCkpOwotCi0gICAgYm9vbCBoYXNU
cmFuc2Zvcm0gPSBib3gtPmhhc1RyYW5zZm9ybSgpOwotICAgIGlmIChib3gtPmlzSW5GbG93UG9z
aXRpb25lZCgpIHx8IGhhc1RyYW5zZm9ybSkgewotICAgICAgICBpZiAoaGFzVHJhbnNmb3JtKQot
ICAgICAgICAgICAgcmVjdCA9IGJveC0+bGF5ZXIoKS0+Y3VycmVudFRyYW5zZm9ybSgpLm1hcFJl
Y3QocmVjdCk7Ci0KLSAgICAgICAgaWYgKGJveC0+aXNJbkZsb3dQb3NpdGlvbmVkKCkpCi0gICAg
ICAgICAgICByZWN0Lm1vdmUoYm94LT5vZmZzZXRGb3JJbkZsb3dQb3NpdGlvbigpKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gcmVjdDsKLX0KLQotTGF5b3V0UmVjdCBSZW5kZXJSZWdpb246OnZpc3Vh
bE92ZXJmbG93UmVjdEZvckJveEZvclByb3BhZ2F0aW9uKGNvbnN0IFJlbmRlckJveE1vZGVsT2Jq
ZWN0JiBib3gpCi17Ci0gICAgTGF5b3V0UmVjdCByZWN0ID0gdmlzdWFsT3ZlcmZsb3dSZWN0Rm9y
Qm94KGJveCk7Ci0gICAgZmxvd1RocmVhZCgpLT5mbGlwRm9yV3JpdGluZ01vZGVMb2NhbENvb3Jk
aW5hdGVzKHJlY3QpOwotCi0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLUN1cnJlbnRSZW5kZXJSZWdp
b25NYWludGFpbmVyOjpDdXJyZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lcihSZW5kZXJSZWdpb24m
IHJlZ2lvbikKLSAgICA6IG1fcmVnaW9uKHJlZ2lvbikKLXsKLSAgICBSZW5kZXJGbG93VGhyZWFk
KiBmbG93VGhyZWFkID0gcmVnaW9uLmZsb3dUaHJlYWQoKTsKLSAgICAvLyBBIGZsb3cgdGhyZWFk
IGNhbiBoYXZlIG9ubHkgb25lIGN1cnJlbnQgcmVnaW9uLgotICAgIEFTU0VSVCghZmxvd1RocmVh
ZC0+Y3VycmVudFJlZ2lvbigpKTsKLSAgICBmbG93VGhyZWFkLT5zZXRDdXJyZW50UmVnaW9uTWFp
bnRhaW5lcih0aGlzKTsKLX0KLQotQ3VycmVudFJlbmRlclJlZ2lvbk1haW50YWluZXI6On5DdXJy
ZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lcigpCi17Ci0gICAgUmVuZGVyRmxvd1RocmVhZCogZmxv
d1RocmVhZCA9IG1fcmVnaW9uLmZsb3dUaHJlYWQoKTsKLSAgICBmbG93VGhyZWFkLT5zZXRDdXJy
ZW50UmVnaW9uTWFpbnRhaW5lcihudWxscHRyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJl
Z2lvbi5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMK
LW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oCShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxODIg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBZG9iZSBTeXN0ZW1zIEluY29ycG9y
YXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKA
nEFTIElT4oCdIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJF
Ci0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksCi0gKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YKLSAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlICJMYXllckZyYWdtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93Lmgi
Ci0jaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCi0jaW5jbHVkZSA8bWVtb3J5PgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBSZW5kZXJCb3g7Ci1jbGFz
cyBSZW5kZXJCb3hSZWdpb25JbmZvOwotY2xhc3MgUmVuZGVyRmxvd1RocmVhZDsKLQotY2xhc3Mg
UmVuZGVyUmVnaW9uIDogcHVibGljIFJlbmRlckJsb2NrRmxvdyB7Ci1wdWJsaWM6Ci0gICAgdm9p
ZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRT
dHlsZSkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldEZsb3dUaHJlYWRQb3J0aW9uUmVjdChjb25z
dCBMYXlvdXRSZWN0JiByZWN0KSB7IG1fZmxvd1RocmVhZFBvcnRpb25SZWN0ID0gcmVjdDsgfQot
ICAgIExheW91dFJlY3QgZmxvd1RocmVhZFBvcnRpb25SZWN0KCkgY29uc3QgeyByZXR1cm4gbV9m
bG93VGhyZWFkUG9ydGlvblJlY3Q7IH0KLSAgICBMYXlvdXRSZWN0IGZsb3dUaHJlYWRQb3J0aW9u
T3ZlcmZsb3dSZWN0KCk7Ci0KLSAgICBMYXlvdXRQb2ludCBmbG93VGhyZWFkUG9ydGlvbkxvY2F0
aW9uKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUmVnaW9uKCk7Ci0gICAgdmly
dHVhbCB2b2lkIGRldGFjaFJlZ2lvbigpOwotCi0gICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1Ro
cmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmxvd1RocmVhZDsgfQotCi0gICAgLy8gVmFsaWQgcmVn
aW9ucyBkbyBub3QgY3JlYXRlIGNpcmN1bGFyIGRlcGVuZGVuY2llcyB3aXRoIG90aGVyIGZsb3dz
LgotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZDsgfQotICAgIHZv
aWQgc2V0SXNWYWxpZChib29sIHZhbGlkKSB7IG1faXNWYWxpZCA9IHZhbGlkOyB9Ci0KLSAgICBS
ZW5kZXJCb3hSZWdpb25JbmZvKiByZW5kZXJCb3hSZWdpb25JbmZvKGNvbnN0IFJlbmRlckJveCop
IGNvbnN0OwotICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIHNldFJlbmRlckJveFJlZ2lvbkluZm8o
Y29uc3QgUmVuZGVyQm94KiwgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdEluc2V0LCBMYXlvdXRVbml0
IGxvZ2ljYWxSaWdodEluc2V0LAotICAgICAgICBib29sIGNvbnRhaW5pbmdCbG9ja0NoYWluSXNJ
bnNldCk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJveFJlZ2lvbkluZm8+IHRha2VSZW5k
ZXJCb3hSZWdpb25JbmZvKGNvbnN0IFJlbmRlckJveCopOwotICAgIHZvaWQgcmVtb3ZlUmVuZGVy
Qm94UmVnaW9uSW5mbyhjb25zdCBSZW5kZXJCb3gmKTsKLQotICAgIHZvaWQgZGVsZXRlQWxsUmVu
ZGVyQm94UmVnaW9uSW5mbygpOwotCi0gICAgYm9vbCBpc0ZpcnN0UmVnaW9uKCkgY29uc3Q7Ci0g
ICAgYm9vbCBpc0xhc3RSZWdpb24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2xp
cEZsb3dUaHJlYWRDb250ZW50KCkgY29uc3Q7Ci0KLSAgICAvLyBUaGVzZSBtZXRob2RzIHJlcHJl
c2VudCB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiBhICJwYWdlIiBhbmQgZm9yIGEgUmVuZGVyUmVn
aW9uIHRoZXkgYXJlIGp1c3QgdGhlCi0gICAgLy8gY29udGVudCB3aWR0aCBhbmQgY29udGVudCBo
ZWlnaHQgb2YgYSByZWdpb24uIEZvciBSZW5kZXJSZWdpb25TZXRzLCBob3dldmVyLCB0aGV5IHdp
bGwgYmUgdGhlIHdpZHRoIGFuZAotICAgIC8vIGhlaWdodCBvZiBhIHNpbmdsZSBjb2x1bW4gb3Ig
cGFnZSBpbiB0aGUgc2V0LgotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbFdpZHRo
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0KCkgY29u
c3Q7Ci0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3BPZkZsb3dUaHJlYWRDb250ZW50UmVjdChj
b25zdCBMYXlvdXRSZWN0JikgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tT2ZG
bG93VGhyZWFkQ29udGVudFJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwotICAgIExheW91
dFVuaXQgbG9naWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbG9n
aWNhbFRvcE9mRmxvd1RocmVhZENvbnRlbnRSZWN0KGZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpKTsg
fTsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b21Gb3JGbG93VGhyZWFkQ29udGVudCgpIGNv
bnN0IHsgcmV0dXJuIGxvZ2ljYWxCb3R0b21PZkZsb3dUaHJlYWRDb250ZW50UmVjdChmbG93VGhy
ZWFkUG9ydGlvblJlY3QoKSk7IH07Ci0KLSAgICAvLyBUaGlzIG1ldGhvZCByZXByZXNlbnRzIHRo
ZSBsb2dpY2FsIGhlaWdodCBvZiB0aGUgZW50aXJlIGZsb3cgdGhyZWFkIHBvcnRpb24gdXNlZCBi
eSB0aGUgcmVnaW9uIG9yIHNldC4KLSAgICAvLyBGb3IgUmVuZGVyUmVnaW9ucyBpdCBtYXRjaGVz
IGxvZ2ljYWxQYWdpbmF0aW9uSGVpZ2h0KCksIGJ1dCBmb3Igc2V0cyBpdCBpcyB0aGUgaGVpZ2h0
IG9mIGFsbCB0aGUgcGFnZXMKLSAgICAvLyBvciBjb2x1bW5zIGFkZGVkIHRvZ2V0aGVyLgotICAg
IHZpcnR1YWwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0T2ZBbGxGbG93VGhyZWFkQ29udGVudCgp
IGNvbnN0OwotCi0gICAgLy8gVGhlIHRvcCBvZiB0aGUgbmVhcmVzdCBwYWdlIGluc2lkZSB0aGUg
cmVnaW9uLiBGb3IgUmVuZGVyUmVnaW9ucywgdGhpcyBpcyBqdXN0IHRoZSBsb2dpY2FsIHRvcCBv
ZiB0aGUKLSAgICAvLyBmbG93IHRocmVhZCBwb3J0aW9uIHdlIGNvbnRhaW4uIEZvciBzZXRzLCB3
ZSBoYXZlIHRvIGZpZ3VyZSBvdXQgdGhlIHRvcCBvZiB0aGUgbmVhcmVzdCBjb2x1bW4gb3IKLSAg
ICAvLyBwYWdlLgotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbFRvcEZvck9mZnNl
dChMYXlvdXRVbml0IG9mZnNldCkgY29uc3Q7Ci0KLSAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGlz
IHJlZ2lvbiBpcyBhIHNldC4KLSAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJSZWdpb25TZXQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCByZXBhaW50Rmxv
d1RocmVhZENvbnRlbnQoY29uc3QgTGF5b3V0UmVjdCYgcmVwYWludFJlY3QpOwotCi0gICAgdmly
dHVhbCB2b2lkIGNvbGxlY3RMYXllckZyYWdtZW50cyhMYXllckZyYWdtZW50cyYsIGNvbnN0IExh
eW91dFJlY3QmLCBjb25zdCBMYXlvdXRSZWN0JikgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0UmVnaW9uQm91bmRzRnJvbUZsb3dUaHJlYWRQb3J0aW9uUmVjdChMYXlvdXRSZWN0JiByZWdp
b25Cb3VuZHMpIGNvbnN0OwotCi0gICAgdm9pZCBhZGRMYXlvdXRPdmVyZmxvd0ZvckJveChjb25z
dCBSZW5kZXJCb3gqLCBjb25zdCBMYXlvdXRSZWN0Jik7Ci0gICAgdm9pZCBhZGRWaXN1YWxPdmVy
Zmxvd0ZvckJveChjb25zdCBSZW5kZXJCb3gqLCBjb25zdCBMYXlvdXRSZWN0Jik7Ci0gICAgTGF5
b3V0UmVjdCBsYXlvdXRPdmVyZmxvd1JlY3RGb3JCb3goY29uc3QgUmVuZGVyQm94Kik7Ci0gICAg
TGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RGb3JCb3goY29uc3QgUmVuZGVyQm94TW9kZWxP
YmplY3QmKTsKLSAgICBMYXlvdXRSZWN0IGxheW91dE92ZXJmbG93UmVjdEZvckJveEZvclByb3Bh
Z2F0aW9uKGNvbnN0IFJlbmRlckJveCopOwotICAgIExheW91dFJlY3QgdmlzdWFsT3ZlcmZsb3dS
ZWN0Rm9yQm94Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QmKTsKLQot
ICAgIExheW91dFJlY3QgcmVjdEZsb3dQb3J0aW9uRm9yQm94KGNvbnN0IFJlbmRlckJveCosIGNv
bnN0IExheW91dFJlY3QmKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHNldFJlZ2lvbk9iamVjdHNS
ZWdpb25TdHlsZSgpOwotICAgIHZvaWQgcmVzdG9yZVJlZ2lvbk9iamVjdHNPcmlnaW5hbFN0eWxl
KCk7Ci0KLSAgICBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgYm9vbCBjYW5IYXZlR2VuZXJhdGVkQ2hpbGRyZW4oKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9p
bnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJSZWdpb24qKSBvdmVycmlkZTsKLQot
ICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzRm9yQm94SW5SZWdpb24oVmVjdG9yPEZsb2F0
UXVhZD4mLCBib29sKiwgY29uc3QgUmVuZGVyQm94KiwgZmxvYXQsIGZsb2F0KSB7IH0KLQotcHJv
dGVjdGVkOgotICAgIFJlbmRlclJlZ2lvbihFbGVtZW50JiwgUmVuZGVyU3R5bGUmJiwgUmVuZGVy
Rmxvd1RocmVhZCopOwotICAgIFJlbmRlclJlZ2lvbihEb2N1bWVudCYsIFJlbmRlclN0eWxlJiYs
IFJlbmRlckZsb3dUaHJlYWQqKTsKLQotICAgIHZvaWQgZW5zdXJlT3ZlcmZsb3dGb3JCb3goY29u
c3QgUmVuZGVyQm94KiwgUmVmUHRyPFJlbmRlck92ZXJmbG93PiYsIGJvb2wpOwotCi0gICAgdm9p
ZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpIG92ZXJyaWRlOwotICAgIHZvaWQgY29t
cHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9naWNhbFdpZHRoLCBM
YXlvdXRVbml0JiBtYXhMb2dpY2FsV2lkdGgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgZW51bSBP
dmVyZmxvd1R5cGUgewotICAgICAgICBMYXlvdXRPdmVyZmxvdyA9IDAsCi0gICAgICAgIFZpc3Vh
bE92ZXJmbG93Ci0gICAgfTsKLQotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0Rm9yRmxvd1Ro
cmVhZFBvcnRpb24oY29uc3QgTGF5b3V0UmVjdCYgZmxvd1RocmVhZFBvcnRpb25SZWN0LCBib29s
IGlzRmlyc3RQb3J0aW9uLCBib29sIGlzTGFzdFBvcnRpb24sIE92ZXJmbG93VHlwZSk7Ci0gICAg
dm9pZCByZXBhaW50Rmxvd1RocmVhZENvbnRlbnRSZWN0YW5nbGUoY29uc3QgTGF5b3V0UmVjdCYg
cmVwYWludFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGZsb3dUaHJlYWRQb3J0aW9uUmVjdCwgY29u
c3QgTGF5b3V0UG9pbnQmIHJlZ2lvbkxvY2F0aW9uLCBjb25zdCBMYXlvdXRSZWN0KiBmbG93VGhy
ZWFkUG9ydGlvbkNsaXBSZWN0ID0gMCk7Ci0KLSAgICB2b2lkIGNvbXB1dGVPdmVyZmxvd0Zyb21G
bG93VGhyZWFkKCk7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBpc1JlbmRlclJlZ2lvbigpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gIlJlbmRlclJlZ2lvbiI7IH0KLQotICAgIHZvaWQgaW5zZXJ0
ZWRJbnRvVHJlZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbEJlUmVtb3ZlZEZyb21UcmVlKCkg
b3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaW5zdGFsbEZsb3dUaHJlYWQoKTsKLQotICAg
IExheW91dFBvaW50IG1hcFJlZ2lvblBvaW50SW50b0Zsb3dUaHJlYWRDb29yZGluYXRlcyhjb25z
dCBMYXlvdXRQb2ludCYpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgUmVuZGVyRmxvd1RocmVhZCogbV9m
bG93VGhyZWFkOwotCi1wcml2YXRlOgotICAgIExheW91dFJlY3QgbV9mbG93VGhyZWFkUG9ydGlv
blJlY3Q7Ci0KLSAgICAvLyBUaGlzIG1hcCBob2xkcyB1bmlxdWUgaW5mb3JtYXRpb24gYWJvdXQg
YSBibG9jayB0aGF0IGlzIHNwbGl0IGFjcm9zcyByZWdpb25zLgotICAgIC8vIEEgUmVuZGVyQm94
UmVnaW9uSW5mbyogdGVsbHMgdXMgYWJvdXQgYW55IGxheW91dCBpbmZvcm1hdGlvbiBmb3IgYSBS
ZW5kZXJCb3ggdGhhdAotICAgIC8vIGlzIHVuaXF1ZSB0byB0aGUgcmVnaW9uLiBGb3Igbm93IGl0
IGp1c3QgaG9sZHMgbG9naWNhbCB3aWR0aCBpbmZvcm1hdGlvbiBmb3IgUmVuZGVyQmxvY2tzLCBi
dXQgZXZlbnR1YWxseQotICAgIC8vIGl0IHdpbGwgYWxzbyBob2xkIGEgY3VzdG9tIHN0eWxlIGZv
ciBhbnkgYm94IChmb3IgcmVnaW9uIHN0eWxpbmcpLgotICAgIHR5cGVkZWYgSGFzaE1hcDxjb25z
dCBSZW5kZXJCb3gqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQm94UmVnaW9uSW5mbz4+IFJlbmRl
ckJveFJlZ2lvbkluZm9NYXA7Ci0gICAgUmVuZGVyQm94UmVnaW9uSW5mb01hcCBtX3JlbmRlckJv
eFJlZ2lvbkluZm87Ci0KLSAgICBib29sIG1faXNWYWxpZCA6IDE7Ci19OwotCi1jbGFzcyBDdXJy
ZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ3Vy
cmVudFJlbmRlclJlZ2lvbk1haW50YWluZXIpOwotcHVibGljOgotICAgIEN1cnJlbnRSZW5kZXJS
ZWdpb25NYWludGFpbmVyKFJlbmRlclJlZ2lvbiYpOwotICAgIH5DdXJyZW50UmVuZGVyUmVnaW9u
TWFpbnRhaW5lcigpOwotCi0gICAgUmVuZGVyUmVnaW9uJiByZWdpb24oKSBjb25zdCB7IHJldHVy
biBtX3JlZ2lvbjsgfQotcHJpdmF0ZToKLSAgICBSZW5kZXJSZWdpb24mIG1fcmVnaW9uOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1JFTkRF
Ul9PQkpFQ1QoUmVuZGVyUmVnaW9uLCBpc1JlbmRlclJlZ2lvbigpKQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
RGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJlZ2lvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclJlZ2lvblNldC5jcHAJKHJldmlzaW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSZWdpb25TZXQuY3BwCShub25leGlzdGVudCkKQEAgLTEsNjQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyUmVnaW9uU2V0LmgiCi0KLSNpbmNsdWRlICJS
ZW5kZXJCb3hSZWdpb25JbmZvLmgiCi0jaW5jbHVkZSAiUmVuZGVyRmxvd1RocmVhZC5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlbmRlclJlZ2lvblNldDo6UmVuZGVyUmVnaW9uU2V0KERv
Y3VtZW50JiBkb2N1bWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSwgUmVuZGVyRmxvd1RocmVhZCYg
Zmxvd1RocmVhZCkKLSAgICA6IFJlbmRlclJlZ2lvbihkb2N1bWVudCwgV1RGTW92ZShzdHlsZSks
ICZmbG93VGhyZWFkKQotewotfQotCi12b2lkIFJlbmRlclJlZ2lvblNldDo6aW5zdGFsbEZsb3dU
aHJlYWQoKQotewotICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcsIHNpbmNlIHdl
IHdlcmUgYWJsZSB0byBjb25uZWN0IHRoZSBmbG93IHRocmVhZAotICAgIC8vIGluIHRoZSBjb25z
dHJ1Y3Rvci4KLX0KLQotdm9pZCBSZW5kZXJSZWdpb25TZXQ6OmV4cGFuZFRvRW5jb21wYXNzRmxv
d1RocmVhZENvbnRlbnRzSWZOZWVkZWQoKQotewotICAgIC8vIFdoZW5ldmVyIHRoZSBsYXN0IHJl
Z2lvbiBpcyBhIHNldCwgaXQgYWx3YXlzIGV4cGFuZHMgaXRzIHJlZ2lvbiByZWN0IHRvIGNvbnN1
bWUgYWxsCi0gICAgLy8gb2YgdGhlIGZsb3cgdGhyZWFkIGNvbnRlbnQuIFRoaXMgaXMgYmVjYXVz
ZSBpdCBpcyBhbHdheXMgY2FwYWJsZSBvZiBnZW5lcmF0aW5nIGFuCi0gICAgLy8gaW5maW5pdGUg
bnVtYmVyIG9mIGJveGVzIGluIG9yZGVyIHRvIGhvbGQgYWxsIG9mIHRoZSByZW1haW5pbmcgY29u
dGVudC4KLSAgICBMYXlvdXRSZWN0IHJlY3QoZmxvd1RocmVhZFBvcnRpb25SZWN0KCkpOwotICAg
IAotICAgIC8vIEdldCB0aGUgb2Zmc2V0IHdpdGhpbiB0aGUgZmxvdyB0aHJlYWQgaW4gaXRzIGJs
b2NrIHByb2dyZXNzaW9uIGRpcmVjdGlvbi4gVGhlbiBnZXQgdGhlCi0gICAgLy8gZmxvdyB0aHJl
YWQncyByZW1haW5pbmcgbG9naWNhbCBoZWlnaHQgaW5jbHVkaW5nIGl0cyBvdmVyZmxvdyBhbmQg
ZXhwYW5kIG91ciByZWN0Ci0gICAgLy8gdG8gZW5jb21wYXNzIHRoYXQgcmVtYWluaW5nIGhlaWdo
dCBhbmQgb3ZlcmZsb3cuIFRoZSBpZGVhIGlzIHRoYXQgd2Ugd2lsbCBnZW5lcmF0ZQotICAgIC8v
IGFkZGl0aW9uYWwgY29sdW1ucyBhbmQgcGFnZXMgdG8gaG9sZCB0aGF0IG92ZXJmbG93LCBzaW5j
ZSBwZW9wbGUgZG8gd3JpdGUgYmFkCi0gICAgLy8gY29udGVudCBsaWtlIDxib2R5IHN0eWxlPSJo
ZWlnaHQ6MHB4Ij4gaW4gbXVsdGktY29sdW1uIGxheW91dHMuCi0gICAgYm9vbCBpc0hvcml6b250
YWwgPSBmbG93VGhyZWFkKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7Ci0gICAgTGF5b3V0
VW5pdCBsb2dpY2FsVG9wT2Zmc2V0ID0gaXNIb3Jpem9udGFsID8gcmVjdC55KCkgOiByZWN0Lngo
KTsKLSAgICBMYXlvdXRSZWN0IGxheW91dFJlY3QgPSBmbG93VGhyZWFkKCktPmxheW91dE92ZXJm
bG93UmVjdCgpOwotICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodFdpdGhPdmVyZmxvdyA9IChp
c0hvcml6b250YWwgPyBsYXlvdXRSZWN0Lm1heFkoKSA6IGxheW91dFJlY3QubWF4WCgpKSAtIGxv
Z2ljYWxUb3BPZmZzZXQ7Ci0gICAgc2V0Rmxvd1RocmVhZFBvcnRpb25SZWN0KExheW91dFJlY3Qo
cmVjdC54KCksIHJlY3QueSgpLCBpc0hvcml6b250YWwgPyByZWN0LndpZHRoKCkgOiBsb2dpY2Fs
SGVpZ2h0V2l0aE92ZXJmbG93LCBpc0hvcml6b250YWwgPyBsb2dpY2FsSGVpZ2h0V2l0aE92ZXJm
bG93IDogcmVjdC5oZWlnaHQoKSkpOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyUmVnaW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclJlZ2lvblNldC5oCShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uU2V0LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2MCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgUmVuZGVyRmxvd1RocmVhZDsKLQotLy8gUmVuZGVyUmVnaW9uU2V0IHJl
cHJlc2VudHMgYSBzZXQgb2YgcmVnaW9ucyB0aGF0IGFsbCBoYXZlIHRoZSBzYW1lIHdpZHRoIGFu
ZCBoZWlnaHQuIEl0IGlzIGEgImNvbXBvc2l0ZSByZWdpb24gYm94IiB0aGF0Ci0vLyBjYW4gYmUg
dXNlZCB0byByZXByZXNlbnQgYSBzaW5nbGUgcnVuIG9mIGNvbnRpZ3VvdXMgcmVnaW9ucy4KLS8v
Ci0vLyBCeSBjb21iaW5pbmcgcnVucyBvZiBzYW1lLXNpemUgY29sdW1ucyBvciBwYWdlcyBpbnRv
IGEgc2luZ2xlIG9iamVjdCwgd2Ugc2lnbmlmaWNhbnRseSByZWR1Y2UgdGhlIG51bWJlciBvZiB1
bmlxdWUgUmVuZGVyT2JqZWN0cwotLy8gcmVxdWlyZWQgdG8gcmVwcmVzZW50IHRob3NlIG9iamVj
dHMuCi0vLwotLy8gVGhpcyBjbGFzcyBpcyBhYnN0cmFjdCBhbmQgaXMgb25seSBpbnRlbmRlZCBm
b3IgdXNlIGJ5IHJlbmRlcmVycyB0aGF0IGdlbmVyYXRlIGFub255bW91cyBydW5zIG9mIGlkZW50
aWNhbCByZWdpb25zLCBpLmUuLAotLy8gY29sdW1ucyBhbmQgcHJpbnRpbmcuIFJlbmRlck11bHRp
Q29sdW1uU2V0IGFuZCBSZW5kZXJQYWdlU2V0IHJlcHJlc2VudCBydW5zIG9mIGNvbHVtbnMgYW5k
IHBhZ2VzIHJlc3BlY3RpdmVseS4KLS8vCi0vLyBGSVhNRTogRm9yIG5vdyB3ZSBkZXJpdmUgZnJv
bSBSZW5kZXJSZWdpb24sIGJ1dCB0aGlzIG1heSBjaGFuZ2UgYXQgc29tZSBwb2ludC4KLQotY2xh
c3MgUmVuZGVyUmVnaW9uU2V0IDogcHVibGljIFJlbmRlclJlZ2lvbiB7Ci1wdWJsaWM6Ci0gICAg
dm9pZCBleHBhbmRUb0VuY29tcGFzc0Zsb3dUaHJlYWRDb250ZW50c0lmTmVlZGVkKCk7Ci0KLXBy
b3RlY3RlZDoKLSAgICBSZW5kZXJSZWdpb25TZXQoRG9jdW1lbnQmLCBSZW5kZXJTdHlsZSYmLCBS
ZW5kZXJGbG93VGhyZWFkJik7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBpbnN0YWxsRmxvd1RocmVh
ZCgpIGZpbmFsOwotCi0gICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRl
ID0gMDsKLSAgICAKLSAgICBib29sIGlzUmVuZGVyUmVnaW9uU2V0KCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gdHJ1ZTsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lvbiAyMjI0NjIp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NzcsNyArNTc3LDcgQEAgdm9pZCBSZW5kZXJSZXBsYWNlZDo6Y29tcHV0ZVBy
ZWZlcnJlZExvZwogICAgIHNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7CiB9
CiAKLVZpc2libGVQb3NpdGlvbiBSZW5kZXJSZXBsYWNlZDo6cG9zaXRpb25Gb3JQb2ludChjb25z
dCBMYXlvdXRQb2ludCYgcG9pbnQsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uKQorVmlzaWJs
ZVBvc2l0aW9uIFJlbmRlclJlcGxhY2VkOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBv
aW50JiBwb2ludCwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50KQogewog
ICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgaXMgYnVnZ3kgaWYgdGhlIHJlcGxhY2VkIGVsZW1lbnQg
aXMgcmVsYXRpdmUgcG9zaXRpb25lZC4KICAgICBJbmxpbmVCb3gqIGJveCA9IGlubGluZUJveFdy
YXBwZXIoKTsKQEAgLTYwMSw3ICs2MDEsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyUmVwbGFj
ZWQ6OnBvc2l0aW9uCiAgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24oMSwgRE9X
TlNUUkVBTSk7CiAgICAgfQogCi0gICAgcmV0dXJuIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQb2lu
dChwb2ludCwgcmVnaW9uKTsKKyAgICByZXR1cm4gUmVuZGVyQm94Ojpwb3NpdGlvbkZvclBvaW50
KHBvaW50LCBmcmFnbWVudCk7CiB9CiAKIExheW91dFJlY3QgUmVuZGVyUmVwbGFjZWQ6OnNlbGVj
dGlvblJlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRD
b250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAkocmV2aXNpb24gMjIyNDYyKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgJKHdvcmtpbmcgY29weSkKQEAgLTgx
LDcgKzgxLDcgQEAgcHJpdmF0ZToKIAogICAgIExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVj
dEZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5l
cikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2lu
dChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlclJlZ2lvbiopIGZpbmFsOworICAgIFZp
c2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiwgY29uc3Qg
UmVuZGVyRnJhZ21lbnRDb250YWluZXIqKSBmaW5hbDsKICAgICAKICAgICBib29sIGNhbkJlU2Vs
ZWN0aW9uTGVhZigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZpc2lvbiAyMjI0NjIpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzIsNyArMzMyLDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6dXBkYXRlTG9naWNhbFdpZHRo
KCkKICAgICBpZiAoIWhhc1BlcnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2spIHsKICAgICAgICAg
TGF5b3V0VW5pdCBjb250YWluZXJMb2dpY2FsV2lkdGhGb3JBdXRvTWFyZ2lucyA9IGF2YWlsYWJs
ZUxvZ2ljYWxXaWR0aDsKICAgICAgICAgaWYgKGF2b2lkc0Zsb2F0cygpICYmIGNiLmNvbnRhaW5z
RmxvYXRzKCkpCi0gICAgICAgICAgICBjb250YWluZXJMb2dpY2FsV2lkdGhGb3JBdXRvTWFyZ2lu
cyA9IGNvbnRhaW5pbmdCbG9ja0F2YWlsYWJsZUxpbmVXaWR0aEluUmVnaW9uKDApOyAvLyBGSVhN
RTogV29yayB3aXRoIHJlZ2lvbnMgc29tZWRheS4KKyAgICAgICAgICAgIGNvbnRhaW5lckxvZ2lj
YWxXaWR0aEZvckF1dG9NYXJnaW5zID0gY29udGFpbmluZ0Jsb2NrQXZhaWxhYmxlTGluZVdpZHRo
SW5GcmFnbWVudCgwKTsgLy8gRklYTUU6IFdvcmsgd2l0aCByZWdpb25zIHNvbWVkYXkuCiAgICAg
ICAgIENvbXB1dGVkTWFyZ2luVmFsdWVzIG1hcmdpblZhbHVlczsKICAgICAgICAgYm9vbCBoYXNJ
bnZlcnRlZERpcmVjdGlvbiA9ICBjYi5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA9
PSBzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKICAgICAgICAgY29tcHV0ZUlubGlu
ZURpcmVjdGlvbk1hcmdpbnMoY2IsIGNvbnRhaW5lckxvZ2ljYWxXaWR0aEZvckF1dG9NYXJnaW5z
LCBsb2dpY2FsV2lkdGgoKSwKQEAgLTE1MTksMTYgKzE1MTksMTYgQEAgc3RkOjpvcHRpb25hbDxp
bnQ+IFJlbmRlclRhYmxlOjpmaXJzdExpbgogICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPGludD4o
KTsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJUYWJsZTo6b3ZlcmZsb3dDbGlwUmVjdChjb25zdCBM
YXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBPdmVybGF5U2Nyb2xs
YmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3ksIFBhaW50UGhhc2UgcGhhc2UpCitMYXlvdXRSZWN0
IFJlbmRlclRhYmxlOjpvdmVyZmxvd0NsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlv
biwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50LCBPdmVybGF5U2Nyb2xsYmFyU2l6
ZVJlbGV2YW5jeSByZWxldmFuY3ksIFBhaW50UGhhc2UgcGhhc2UpCiB7CiAgICAgTGF5b3V0UmVj
dCByZWN0OwogICAgIC8vIERvbid0IGNsaXAgb3V0IHRoZSB0YWJsZSdzIHNpZGUgb2YgdGhlIGNv
bGxhcHNlZCBib3JkZXJzIGlmIHdlJ3JlIGluIHRoZSBwYWludCBwaGFzZSB0aGF0IHdpbGwgYXNr
IHRoZSBzZWN0aW9ucyB0byBwYWludCB0aGVtLgogICAgIC8vIExpa2V3aXNlLCBpZiB3ZSdyZSBz
ZWxmLXBhaW50aW5nIHdlIGF2b2lkIGNsaXBwaW5nIHRoZW0gb3V0IGFzIHRoZSBjbGlwIHJlY3Qg
dGhhdCB3aWxsIGJlIHBhc3NlZCBkb3duIHRvIGNoaWxkIGxheWVycyBmcm9tIFJlbmRlckxheWVy
IHdpbGwgZG8gdGhhdCBpbnN0ZWFkLgogICAgIGlmIChwaGFzZSA9PSBQYWludFBoYXNlQ2hpbGRC
bG9ja0JhY2tncm91bmRzIHx8IGxheWVyKCktPmlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewotICAg
ICAgICByZWN0ID0gYm9yZGVyQm94UmVjdEluUmVnaW9uKHJlZ2lvbik7CisgICAgICAgIHJlY3Qg
PSBib3JkZXJCb3hSZWN0SW5GcmFnbWVudChmcmFnbWVudCk7CiAgICAgICAgIHJlY3Quc2V0TG9j
YXRpb24obG9jYXRpb24gKyByZWN0LmxvY2F0aW9uKCkpOwogICAgIH0gZWxzZQotICAgICAgICBy
ZWN0ID0gUmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0KGxvY2F0aW9uLCByZWdpb24sIHJlbGV2
YW5jeSk7CisgICAgICAgIHJlY3QgPSBSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3QobG9jYXRp
b24sIGZyYWdtZW50LCByZWxldmFuY3kpOwogCiAgICAgLy8gSWYgd2UgaGF2ZSBhIGNhcHRpb24s
IGV4cGFuZCB0aGUgY2xpcCB0byBpbmNsdWRlIHRoZSBjYXB0aW9uLgogICAgIC8vIEZJWE1FOiBU
ZWNobmljYWxseSB0aGlzIGlzIHdyb25nLCBidXQgaXQncyB2aXJ0dWFsbHkgaW1wb3NzaWJsZSB0
byBmaXggdGhpcwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHJl
dmlzaW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsOCArMzA4LDggQEAgcHJpdmF0ZToKICAgICBMYXlvdXRV
bml0IGNvbnZlcnRTdHlsZUxvZ2ljYWxXaWR0aFRvQ29tcHV0ZWRXaWR0aChjb25zdCBMZW5ndGgm
IHN0eWxlTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKTsKICAgICBMYXlv
dXRVbml0IGNvbnZlcnRTdHlsZUxvZ2ljYWxIZWlnaHRUb0NvbXB1dGVkSGVpZ2h0KGNvbnN0IExl
bmd0aCYgc3R5bGVMb2dpY2FsSGVpZ2h0KTsKIAotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlw
UmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlclJlZ2lvbiosIE92ZXJsYXlT
Y3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIFBhaW50
UGhhc2UgPSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kKSBmaW5hbDsKLSAgICBMYXlvdXRSZWN0
IG92ZXJmbG93Q2xpcFJlY3RGb3JDaGlsZExheWVycyhjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRp
b24sIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBy
ZWxldmFuY3kpIG92ZXJyaWRlIHsgcmV0dXJuIFJlbmRlckJveDo6b3ZlcmZsb3dDbGlwUmVjdChs
b2NhdGlvbiwgcmVnaW9uLCByZWxldmFuY3kpOyB9CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd0Ns
aXBSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyRnJhZ21lbnRDb250YWlu
ZXIqLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxi
YXJTaXplLCBQYWludFBoYXNlID0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCkgZmluYWw7Cisg
ICAgTGF5b3V0UmVjdCBvdmVyZmxvd0NsaXBSZWN0Rm9yQ2hpbGRMYXllcnMoY29uc3QgTGF5b3V0
UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQsIE92ZXJs
YXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgb3ZlcnJpZGUgeyByZXR1cm4gUmVu
ZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0KGxvY2F0aW9uLCBmcmFnbWVudCwgcmVsZXZhbmN5KTsg
fQogCiAgICAgdm9pZCBhZGRPdmVyZmxvd0Zyb21DaGlsZHJlbigpIGZpbmFsOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAyMjI0NjIpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1Myw3ICs0NTMsNyBAQCBQb3NpdGlvbiBSZW5kZXJUZXh0Ojpwb3NpdGlvbkZvclBvaW50
KGNvCiAgICAgcmV0dXJuIHBvc2l0aW9uRm9yUG9pbnQocG9pbnQsIG51bGxwdHIpLmRlZXBFcXVp
dmFsZW50KCk7CiB9CiAKLVZpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0Ojpwb3NpdGlvbkZvclBv
aW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVuZGVyUmVnaW9uKikKK1Zpc2li
bGVQb3NpdGlvbiBSZW5kZXJUZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50
JiBwb2ludCwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKQogewogICAgIGVuc3VyZUxp
bmVCb3hlcygpOwogICAgIHJldHVybiBtX2xpbmVCb3hlcy5wb3NpdGlvbkZvclBvaW50KCp0aGlz
LCBwb2ludCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlz
aW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxGbG9hdFF1
YWQ+IGFic29sdXRlUXVhZHNDbGlwcGVkVG9FbGxpcHNpcygpIGNvbnN0OwogCiAgICAgUG9zaXRp
b24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYpIG92ZXJyaWRlOwotICAgIFZp
c2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiwgY29uc3Qg
UmVuZGVyUmVnaW9uKikgb3ZlcnJpZGU7CisgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9y
UG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciop
IG92ZXJyaWRlOwogCiAgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBtX3RleHQuaW1w
bCgpLT5pczhCaXQoKTsgfQogICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOCgpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dC5pbXBsKCktPmNoYXJhY3RlcnM4KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDIyMjQ2MikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIlJlbmRlckNvdW50ZXIuaCIKICNp
bmNsdWRlICJSZW5kZXJEZXRhaWxzTWFya2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2wuaCIKKyNpbmNsdWRlICJSZW5kZXJGcmFnbWVudENvbnRhaW5lci5oIgogI2luY2x1
ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKQEAgLTQ5LDcgKzUwLDYgQEAKICNpbmNsdWRlICJSZW5kZXJMaW5l
QnJlYWsuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUgIlJlbmRlckxp
c3RNYXJrZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKICNpbmNsdWRlICJSZW5kZXJT
VkdDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdHcmFkaWVudFN0b3AuaCIKICNpbmNs
dWRlICJSZW5kZXJTVkdJbWFnZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlcmluZ0FsbEluT25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwCShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NCw2ICs2NCw4IEBACiAjaW5jbHVkZSAiUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwIgogI2lu
Y2x1ZGUgIlJlbmRlckZsZXhpYmxlQm94LmNwcCIKICNpbmNsdWRlICJSZW5kZXJGbG93VGhyZWFk
LmNwcCIKKyNpbmNsdWRlICJSZW5kZXJGcmFnbWVudENvbnRhaW5lci5jcHAiCisjaW5jbHVkZSAi
UmVuZGVyRnJhZ21lbnRDb250YWluZXJTZXQuY3BwIgogI2luY2x1ZGUgIlJlbmRlckZyYW1lLmNw
cCIKICNpbmNsdWRlICJSZW5kZXJGcmFtZUJhc2UuY3BwIgogI2luY2x1ZGUgIlJlbmRlckZyYW1l
U2V0LmNwcCIKQEAgLTk4LDggKzEwMCw2IEBACiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmNwcCIK
ICNpbmNsdWRlICJSZW5kZXJQcm9ncmVzcy5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyUXVvdGUuY3Bw
IgotI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5jcHAiCi0jaW5jbHVkZSAiUmVuZGVyUmVnaW9uU2V0
LmNwcCIKICNpbmNsdWRlICJSZW5kZXJSZXBsYWNlZC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyUmVw
bGljYS5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyUnVieS5jcHAiCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDEwICs1MSwxMCBAQCBDT01QSUxFX0FTU0VSVChzaXplb2YoUm9vdElubGluZUJveCkgPT0g
CiB0eXBlZGVmIFdURjo6SGFzaE1hcDxjb25zdCBSb290SW5saW5lQm94Kiwgc3RkOjp1bmlxdWVf
cHRyPEVsbGlwc2lzQm94Pj4gRWxsaXBzaXNCb3hNYXA7CiBzdGF0aWMgRWxsaXBzaXNCb3hNYXAq
IGdFbGxpcHNpc0JveE1hcDsKIAotc3RhdGljIENvbnRhaW5pbmdSZWdpb25NYXAmIGNvbnRhaW5p
bmdSZWdpb25NYXAoUmVuZGVyQmxvY2tGbG93JiBibG9jaykKK3N0YXRpYyBDb250YWluaW5nRnJh
Z21lbnRNYXAmIGNvbnRhaW5pbmdGcmFnbWVudE1hcChSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrKQog
ewogICAgIEFTU0VSVChibG9jay5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkpOwotICAgIHJl
dHVybiBibG9jay5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCktPmNvbnRhaW5pbmdSZWdpb25N
YXAoKTsKKyAgICByZXR1cm4gYmxvY2suZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpLT5jb250
YWluaW5nRnJhZ21lbnRNYXAoKTsKIH0KIAogUm9vdElubGluZUJveDo6Um9vdElubGluZUJveChS
ZW5kZXJCbG9ja0Zsb3cmIGJsb2NrKQpAQCAtNzAsNyArNzAsNyBAQCBSb290SW5saW5lQm94Ojp+
Um9vdElubGluZUJveCgpCiAgICAgZGV0YWNoRWxsaXBzaXNCb3goKTsKIAogICAgIGlmIChibG9j
a0Zsb3coKS5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkpCi0gICAgICAgIGNvbnRhaW5pbmdS
ZWdpb25NYXAoYmxvY2tGbG93KCkpLnJlbW92ZSh0aGlzKTsKKyAgICAgICAgY29udGFpbmluZ0Zy
YWdtZW50TWFwKGJsb2NrRmxvdygpKS5yZW1vdmUodGhpcyk7CiB9CiAKIHZvaWQgUm9vdElubGlu
ZUJveDo6ZGV0YWNoRWxsaXBzaXNCb3goKQpAQCAtMjAyLDM4ICsyMDIsMzggQEAgdm9pZCBSb290
SW5saW5lQm94OjpjaGlsZFJlbW92ZWQoSW5saW5lQgogICAgIH0KIH0KIAotUmVuZGVyUmVnaW9u
KiBSb290SW5saW5lQm94Ojpjb250YWluaW5nUmVnaW9uKCkgY29uc3QKK1JlbmRlckZyYWdtZW50
Q29udGFpbmVyKiBSb290SW5saW5lQm94Ojpjb250YWluaW5nRnJhZ21lbnQoKSBjb25zdAogewot
ICAgIENvbnRhaW5pbmdSZWdpb25NYXAmIHJlZ2lvbk1hcCA9IGNvbnRhaW5pbmdSZWdpb25NYXAo
YmxvY2tGbG93KCkpOwotICAgIGJvb2wgaGFzQ29udGFpbmluZ1JlZ2lvbiA9IHJlZ2lvbk1hcC5j
b250YWlucyh0aGlzKTsKLSAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9IGhhc0NvbnRhaW5pbmdS
ZWdpb24gPyByZWdpb25NYXAuZ2V0KHRoaXMpIDogbnVsbHB0cjsKKyAgICBDb250YWluaW5nRnJh
Z21lbnRNYXAmIGZyYWdtZW50TWFwID0gY29udGFpbmluZ0ZyYWdtZW50TWFwKGJsb2NrRmxvdygp
KTsKKyAgICBib29sIGhhc0NvbnRhaW5pbmdGcmFnbWVudCA9IGZyYWdtZW50TWFwLmNvbnRhaW5z
KHRoaXMpOworICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCA9IGhhc0NvbnRh
aW5pbmdGcmFnbWVudCA/IGZyYWdtZW50TWFwLmdldCh0aGlzKSA6IG51bGxwdHI7CiAKICNpZm5k
ZWYgTkRFQlVHCi0gICAgaWYgKGhhc0NvbnRhaW5pbmdSZWdpb24pIHsKKyAgICBpZiAoaGFzQ29u
dGFpbmluZ0ZyYWdtZW50KSB7CiAgICAgICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQg
PSBibG9ja0Zsb3coKS5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgIGNvbnN0
IFJlbmRlclJlZ2lvbkxpc3QmIHJlZ2lvbkxpc3QgPSBmbG93VGhyZWFkLT5yZW5kZXJSZWdpb25M
aXN0KCk7Ci0gICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHJlZ2lvbkxp
c3QuY29udGFpbnMocmVnaW9uKSk7CisgICAgICAgIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFp
bmVyTGlzdCYgZnJhZ21lbnRMaXN0ID0gZmxvd1RocmVhZC0+cmVuZGVyRnJhZ21lbnRDb250YWlu
ZXJMaXN0KCk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGZyYWdt
ZW50TGlzdC5jb250YWlucyhmcmFnbWVudCkpOwogICAgIH0KICNlbmRpZgogCi0gICAgcmV0dXJu
IHJlZ2lvbjsKKyAgICByZXR1cm4gZnJhZ21lbnQ7CiB9CiAKLXZvaWQgUm9vdElubGluZUJveDo6
Y2xlYXJDb250YWluaW5nUmVnaW9uKCkKK3ZvaWQgUm9vdElubGluZUJveDo6Y2xlYXJDb250YWlu
aW5nRnJhZ21lbnQoKQogewogICAgIEFTU0VSVCghaXNEaXJ0eSgpKTsKIAotICAgIGlmICghY29u
dGFpbmluZ1JlZ2lvbk1hcChibG9ja0Zsb3coKSkuY29udGFpbnModGhpcykpCisgICAgaWYgKCFj
b250YWluaW5nRnJhZ21lbnRNYXAoYmxvY2tGbG93KCkpLmNvbnRhaW5zKHRoaXMpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBjb250YWluaW5nUmVnaW9uTWFwKGJsb2NrRmxvdygpKS5yZW1vdmUo
dGhpcyk7CisgICAgY29udGFpbmluZ0ZyYWdtZW50TWFwKGJsb2NrRmxvdygpKS5yZW1vdmUodGhp
cyk7CiB9CiAKLXZvaWQgUm9vdElubGluZUJveDo6c2V0Q29udGFpbmluZ1JlZ2lvbihSZW5kZXJS
ZWdpb24mIHJlZ2lvbikKK3ZvaWQgUm9vdElubGluZUJveDo6c2V0Q29udGFpbmluZ0ZyYWdtZW50
KFJlbmRlckZyYWdtZW50Q29udGFpbmVyJiBmcmFnbWVudCkKIHsKICAgICBBU1NFUlQoIWlzRGly
dHkoKSk7CiAKLSAgICBjb250YWluaW5nUmVnaW9uTWFwKGJsb2NrRmxvdygpKS5zZXQodGhpcywg
JnJlZ2lvbik7CisgICAgY29udGFpbmluZ0ZyYWdtZW50TWFwKGJsb2NrRmxvdygpKS5zZXQodGhp
cywgJmZyYWdtZW50KTsKIH0KIAogTGF5b3V0VW5pdCBSb290SW5saW5lQm94OjphbGlnbkJveGVz
SW5CbG9ja0RpcmVjdGlvbihMYXlvdXRVbml0IGhlaWdodE9mQmxvY2ssIEdseXBoT3ZlcmZsb3dB
bmRGYWxsYmFja0ZvbnRzTWFwJiB0ZXh0Qm94RGF0YU1hcCwgVmVydGljYWxQb3NpdGlvbkNhY2hl
JiB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Um9vdElubGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
b290SW5saW5lQm94LmgJKHJldmlzaW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9Sb290SW5saW5lQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAgY2xh
c3MgRWxsaXBzaXNCb3g7CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgTG9naWNhbFNlbGVj
dGlvbk9mZnNldENhY2hlczsKIGNsYXNzIFJlbmRlckJsb2NrRmxvdzsKLWNsYXNzIFJlbmRlclJl
Z2lvbjsKK2NsYXNzIFJlbmRlckZyYWdtZW50Q29udGFpbmVyOwogCiBzdHJ1Y3QgQmlkaVN0YXR1
czsKIHN0cnVjdCBHYXBSZWN0czsKQEAgLTY1LDExICs2NSwxMSBAQCBwdWJsaWM6CiAgICAgTGF5
b3V0VW5pdCBwYWdpbmF0ZWRMaW5lV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3BhZ2luYXRlZExp
bmVXaWR0aDsgfQogICAgIHZvaWQgc2V0UGFnaW5hdGVkTGluZVdpZHRoKExheW91dFVuaXQgd2lk
dGgpIHsgbV9wYWdpbmF0ZWRMaW5lV2lkdGggPSB3aWR0aDsgfQogCi0gICAgLy8gSXQgc2hvdWxk
IG5vdCBiZSBhc3N1bWVkIHRoZSBjb250YWluaW5nUmVnaW9uKCkgaXMgYWx3YXlzIHZhbGlkLgot
ICAgIC8vIEl0IGNhbiBhbHNvIGJlIG51bGxwdHIgaWYgdGhlIGZsb3cgaGFzIG5vIHJlZ2lvbiBj
aGFpbi4KLSAgICBSZW5kZXJSZWdpb24qIGNvbnRhaW5pbmdSZWdpb24oKSBjb25zdDsKLSAgICB2
b2lkIHNldENvbnRhaW5pbmdSZWdpb24oUmVuZGVyUmVnaW9uJik7Ci0gICAgdm9pZCBjbGVhckNv
bnRhaW5pbmdSZWdpb24oKTsKKyAgICAvLyBJdCBzaG91bGQgbm90IGJlIGFzc3VtZWQgdGhlIGNv
bnRhaW5pbmdGcmFnbWVudCgpIGlzIGFsd2F5cyB2YWxpZC4KKyAgICAvLyBJdCBjYW4gYWxzbyBi
ZSBudWxscHRyIGlmIHRoZSBmbG93IGhhcyBubyBmcmFnbWVudCBjaGFpbi4KKyAgICBSZW5kZXJG
cmFnbWVudENvbnRhaW5lciogY29udGFpbmluZ0ZyYWdtZW50KCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRDb250YWluaW5nRnJhZ21lbnQoUmVuZGVyRnJhZ21lbnRDb250YWluZXImKTsKKyAgICB2b2lk
IGNsZWFyQ29udGFpbmluZ0ZyYWdtZW50KCk7CiAKICAgICBMYXlvdXRVbml0IHNlbGVjdGlvblRv
cCgpIGNvbnN0OwogICAgIExheW91dFVuaXQgc2VsZWN0aW9uQm90dG9tKCkgY29uc3Q7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRl
SW5mby5jcHAJKHJldmlzaW9uIDIyMjQ2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
aGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDgg
QEAKICNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zs
b3cuaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJGcmFnbWVudENv
bnRhaW5lci5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyUmVn
aW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMjY4LDcgKzI2OCw3IEBAIHN0YXRp
YyBpbmxpbmUgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW4KIAogTGF5b3V0VW5pdCBTaGFwZU91
dHNpZGVJbmZvOjpsb2dpY2FsTGVmdE9mZnNldCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fcmVuZGVy
ZXIuaXNSZW5kZXJSZWdpb24oKSkKKyAgICBpZiAobV9yZW5kZXJlci5pc1JlbmRlckZyYWdtZW50
Q29udGFpbmVyKCkpCiAgICAgICAgIHJldHVybiBMYXlvdXRVbml0KCk7CiAgICAgCiAgICAgc3dp
dGNoIChyZWZlcmVuY2VCb3goKm1fcmVuZGVyZXIuc3R5bGUoKS5zaGFwZU91dHNpZGUoKSkpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZUNvbnN0YW50
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZUNvbnN0YW50cy5oCShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGVDb25zdGFudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDgy
LDcgKzQ4Miw3IEBAIGVudW0gQnJlYWtCZXR3ZWVuIHsKIGJvb2wgYWx3YXlzUGFnZUJyZWFrKEJy
ZWFrQmV0d2Vlbik7CiAgICAgCiBlbnVtIEJyZWFrSW5zaWRlIHsKLSAgICBBdXRvQnJlYWtJbnNp
ZGUsIEF2b2lkQnJlYWtJbnNpZGUsIEF2b2lkQ29sdW1uQnJlYWtJbnNpZGUsIEF2b2lkUGFnZUJy
ZWFrSW5zaWRlLCBBdm9pZFJlZ2lvbkJyZWFrSW5zaWRlCisgICAgQXV0b0JyZWFrSW5zaWRlLCBB
dm9pZEJyZWFrSW5zaWRlLCBBdm9pZENvbHVtbkJyZWFrSW5zaWRlLCBBdm9pZFBhZ2VCcmVha0lu
c2lkZQogfTsKIAogZW51bSBIYW5naW5nUHVuY3R1YXRpb24gewpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCShyZXZp
c2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lu
bGluZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDcgQEAgYm9vbCBSZW5k
ZXJTVkdJbmxpbmVUZXh0OjpjaGFyYWN0ZXJTdGFydAogICAgIHJldHVybiBpdC0+dmFsdWUueCAh
PSBTVkdUZXh0TGF5b3V0QXR0cmlidXRlczo6ZW1wdHlWYWx1ZSgpIHx8IGl0LT52YWx1ZS55ICE9
IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzOjplbXB0eVZhbHVlKCk7CiB9CiAKLVZpc2libGVQb3Np
dGlvbiBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBv
aW50JiBwb2ludCwgY29uc3QgUmVuZGVyUmVnaW9uKikKK1Zpc2libGVQb3NpdGlvbiBSZW5kZXJT
VkdJbmxpbmVUZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwg
Y29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKQogewogICAgIGlmICghZmlyc3RUZXh0Qm94
KCkgfHwgIXRleHRMZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlv
bigwLCBET1dOU1RSRUFNKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHSW5saW5lVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTgsNyArNTgsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBpc1NWR0lubGluZVRleHQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBWaXNpYmxlUG9zaXRpb24g
cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlclJlZ2lvbiop
IG92ZXJyaWRlOworICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExh
eW91dFBvaW50JiwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKSBvdmVycmlkZTsKICAg
ICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIHVuc2lnbmVkIGNhcmV0T2Zm
c2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKSBvdmVycmlkZTsKICAg
ICBJbnRSZWN0IGxpbmVzQm91bmRpbmdCb3goKSBjb25zdCBvdmVycmlkZTsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW5saW5lVGV4dEJveD4gY3JlYXRlVGV4dEJveCgpIG92ZXJyaWRlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCShyZXZp
c2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Rl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTIsNyArNDUyLDcgQEAgYm9vbCBSZW5kZXJTVkdU
ZXh0Ojpub2RlQXRQb2ludChjb25zdCBIaQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmlzaWJs
ZVBvc2l0aW9uIFJlbmRlclNWR1RleHQ6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9p
bnQmIHBvaW50SW5Db250ZW50cywgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb24pCitWaXNpYmxl
UG9zaXRpb24gUmVuZGVyU1ZHVGV4dDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2lu
dCYgcG9pbnRJbkNvbnRlbnRzLCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21l
bnQpCiB7CiAgICAgUm9vdElubGluZUJveCogcm9vdEJveCA9IGZpcnN0Um9vdEJveCgpOwogICAg
IGlmICghcm9vdEJveCkKQEAgLTQ2NSw3ICs0NjUsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVy
U1ZHVGV4dDo6cG9zaXRpb25GCiAgICAgaWYgKCFjbG9zZXN0Qm94KQogICAgICAgICByZXR1cm4g
Y3JlYXRlVmlzaWJsZVBvc2l0aW9uKDAsIERPV05TVFJFQU0pOwogCi0gICAgcmV0dXJuIGNsb3Nl
c3RCb3gtPnJlbmRlcmVyKCkucG9zaXRpb25Gb3JQb2ludChMYXlvdXRQb2ludChwb2ludEluQ29u
dGVudHMueCgpLCBjbG9zZXN0Qm94LT55KCkpLCByZWdpb24pOworICAgIHJldHVybiBjbG9zZXN0
Qm94LT5yZW5kZXJlcigpLnBvc2l0aW9uRm9yUG9pbnQoTGF5b3V0UG9pbnQocG9pbnRJbkNvbnRl
bnRzLngoKSwgY2xvc2VzdEJveC0+eSgpKSwgZnJhZ21lbnQpOwogfQogCiB2b2lkIFJlbmRlclNW
R1RleHQ6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNG
aXhlZCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
VGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHVGV4dC5oCShyZXZpc2lvbiAyMjI0NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBvdmVy
cmlkZTsKICAgICBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBvdmVycmlk
ZTsKICAgICBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlv
bikgb3ZlcnJpZGU7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3Qg
TGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJSZWdpb24qKSBvdmVycmlkZTsKKyAgICBWaXNpYmxl
UG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRl
ckZyYWdtZW50Q29udGFpbmVyKikgb3ZlcnJpZGU7CiAKICAgICBib29sIHJlcXVpcmVzTGF5ZXIo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZvaWQgbGF5b3V0KCkgb3Zl
cnJpZGU7Cg==
</data>
<flag name="review"
          id="341832"
          type_id="1"
          status="+"
          setter="zalan"
    />
          </attachment>
      

    </bug>

</bugzilla>