<?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>193943</bug_id>
          
          <creation_ts>2019-01-28 17:34:32 -0800</creation_ts>
          <short_desc>Rename ChildProcess to AuxiliaryProcess</short_desc>
          <delta_ts>2019-01-29 15:14:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>aestes</cc>
    
    <cc>cdumez</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1499308</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-01-28 17:34:32 -0800</bug_when>
    <thetext>Rename ChildProcess to AuxiliaryProcess</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499309</commentid>
    <comment_count>1</comment_count>
      <attachid>360408</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-01-28 17:36:32 -0800</bug_when>
    <thetext>Created attachment 360408
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499311</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-28 17:39:55 -0800</bug_when>
    <thetext>Attachment 360408 did not pass style-queue:


ERROR: Source/WebKit/Shared/mac/AuxiliaryProcessMac.mm:63:  Misplaced OS version check. Please use a named macro in wtf/Platform.h, wtf/FeatureDefines.h, or an appropriate internal file.  [build/version_check] [5]
ERROR: Source/WebKit/Shared/mac/AuxiliaryProcessMac.mm:75:  Extra space after (  [whitespace/parens] [2]
ERROR: Source/WebKit/Shared/mac/AuxiliaryProcessMac.mm:75:  Extra space before )  [whitespace/parens] [2]
ERROR: Source/WebKit/WebProcess/wpe/WebProcessMainWPE.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/WebProcess/gtk/WebProcessMainGtk.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 5 in 68 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>1499660</commentid>
    <comment_count>3</comment_count>
      <attachid>360408</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2019-01-29 12:52:43 -0800</bug_when>
    <thetext>Comment on attachment 360408
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499719</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-01-29 14:13:06 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/240683/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499721</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-01-29 14:14:28 -0800</bug_when>
    <thetext>&lt;rdar://problem/47645448&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499749</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-01-29 15:10:23 -0800</bug_when>
    <thetext>LOL, did you remove all use of ChildProcess? I thought only NetworkProcess wanted this distinction?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499755</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-01-29 15:14:31 -0800</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #6)
&gt; LOL, did you remove all use of ChildProcess? I thought only NetworkProcess
&gt; wanted this distinction?

This was my understanding as well. This is a lot of code churn just for one of the child processes.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360408</attachid>
            <date>2019-01-28 17:36:32 -0800</date>
            <delta_ts>2019-01-29 12:52:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193943-20190128173631.patch</filename>
            <type>text/plain</type>
            <size>316050</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDA2MjYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxMyBAQAorMjAxOS0wMS0yOCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbmFtZSBDaGls
ZFByb2Nlc3MgdG8gQXV4aWxpYXJ5UHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkzOTQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgIkNoaWxkIiBpbXBsaWVzIHRoYXQgdGhlcmUgaXMgYSBwYXJl
bnQsIGJ1dCBJJ20gYWJvdXQgdG8gaW50cm9kdWNlIGEgdHlwZSBvZiBOZXR3b3JrUHJvY2VzcyB0
aGF0CisgICAgICAgIGRvZXNuJ3QgYWx3YXlzIGhhdmUgYSBwYXJlbnQsIGFuZCBtYXkgaGF2ZSBt
YW55IFVJUHJvY2Vzc2VzIHRoYXQgaXQgaXMgdGhlIGF1eGlsaWFyeSBmb3IuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVs
aXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAg
ICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2ll
cy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVz
L3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L0VudHJ5UG9pbnQvbWFjL1hQQ1NlcnZpY2UvTmV0d29ya1NlcnZpY2VFbnRyeVBvaW50Lm1tOgor
ICAgICAgICAoV2ViS2l0Ojppbml0aWFsaXplQXV4aWxpYXJ5UHJvY2VzczxOZXR3b3JrUHJvY2Vz
cz4pOgorICAgICAgICAoV2ViS2l0Ojppbml0aWFsaXplQ2hpbGRQcm9jZXNzPE5ldHdvcmtQcm9j
ZXNzPik6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpjYWxsRXhpdFNvb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6TmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6aW5pdGlhbGl6ZUNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6dGVybWluYXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRp
YWxpemVQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxp
emVQcm9jZXNzTmFtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjppbml0aWFs
aXplU2FuZGJveCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQuaDoKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpkZWxldGVPbGRWZXJzaW9ucyk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvaW9zL05ldHdvcmtQcm9jZXNzSU9TLm1tOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVByb2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVByb2Nlc3NOYW1lKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVTYW5kYm94KToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Byb2Nlc3NNYWMubW06CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplUHJvY2Vzc05hbWUpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVNhbmRib3gpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NNYWluU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OmluaXRpYWxpemVBdXhpbGlhcnlQcm9jZXNzPE5ldHdvcmtQcm9jZXNzPik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzTWFpblVuaXgpOgorICAgICAgICAoV2ViS2l0Ojppbml0aWFs
aXplQ2hpbGRQcm9jZXNzPE5ldHdvcmtQcm9jZXNzPik6IERlbGV0ZWQuCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3Mvd2F0Y2hvcy9OZXR3b3JrUHJveGltaXR5TWFuYWdlci5oOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL3dhdGNob3MvTmV0d29ya1Byb3hpbWl0eU1hbmFnZXIubW06CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm94aW1pdHlNYW5hZ2VyOjpOZXR3b3JrUHJveGltaXR5TWFu
YWdlcik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvd2luL05ldHdvcmtQcm9jZXNzTWFpbldp
bi5jcHA6CisgICAgICAgIChXZWJLaXQ6OmluaXRpYWxpemVBdXhpbGlhcnlQcm9jZXNzPE5ldHdv
cmtQcm9jZXNzPik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzTWFpbldpbik6Cisg
ICAgICAgIChXZWJLaXQ6OmluaXRpYWxpemVDaGlsZFByb2Nlc3M8TmV0d29ya1Byb2Nlc3M+KTog
RGVsZXRlZC4KKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9y
bU1hYy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBQbHVn
aW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5Qcm9j
ZXNzOjppbml0aWFsaXplUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblByb2Nlc3M6
OmluaXRpYWxpemVDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luUHJvY2Vzczo6
ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5Qcm9jZXNzOjppbml0
aWFsaXplUHJvY2Vzc05hbWUpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5Qcm9jZXNzOjppbml0
aWFsaXplU2FuZGJveCk6CisgICAgICAgICogUGx1Z2luUHJvY2Vzcy9QbHVnaW5Qcm9jZXNzLmg6
CisgICAgICAgICogUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc01hYy5tbToKKyAgICAg
ICAgKFdlYktpdDo6UGx1Z2luUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplUHJvY2Vzcyk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsdWdpblByb2Nlc3M6OmluaXRpYWxpemVQcm9jZXNzTmFtZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsdWdpblByb2Nlc3M6OmluaXRpYWxpemVTYW5kYm94KToKKyAgICAg
ICAgKFdlYktpdDo6UGx1Z2luUHJvY2Vzczo6c3RvcFJ1bkxvb3ApOgorICAgICAgICAqIFBsdWdp
blByb2Nlc3MvdW5peC9QbHVnaW5Qcm9jZXNzTWFpblVuaXguY3BwOgorICAgICAgICAoV2ViS2l0
OjpQbHVnaW5Qcm9jZXNzTWFpblVuaXgpOgorICAgICAgICAqIFBsdWdpblByb2Nlc3MvdW5peC9Q
bHVnaW5Qcm9jZXNzVW5peC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblByb2Nlc3M6OnBs
YXRmb3JtSW5pdGlhbGl6ZVByb2Nlc3MpOgorICAgICAgICAqIFNoYXJlZC9BdXRoZW50aWNhdGlv
bi9BdXRoZW50aWNhdGlvbk1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpBdXRoZW50aWNh
dGlvbk1hbmFnZXI6OkF1dGhlbnRpY2F0aW9uTWFuYWdlcik6CisgICAgICAgICogU2hhcmVkL0F1
dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5oOgorICAgICAgICAqIFNoYXJlZC9B
dXhpbGlhcnlQcm9jZXNzLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9TaGFyZWQvQ2hp
bGRQcm9jZXNzLmNwcC4KKyAgICAgICAgKFdlYktpdDo6QXV4aWxpYXJ5UHJvY2Vzczo6QXV4aWxp
YXJ5UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OkF1eGlsaWFyeVByb2Nlc3M6On5BdXhpbGlh
cnlQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6QXV4aWxpYXJ5UHJvY2Vzczo6ZGlkQ2xvc2Up
OgorICAgICAgICAoV2ViS2l0OjpBdXhpbGlhcnlQcm9jZXNzOjppbml0aWFsaXplKToKKyAgICAg
ICAgKFdlYktpdDo6QXV4aWxpYXJ5UHJvY2Vzczo6c2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxl
ZCk6CisgICAgICAgIChXZWJLaXQ6OkF1eGlsaWFyeVByb2Nlc3M6OmluaXRpYWxpemVQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6QXV4aWxpYXJ5UHJvY2Vzczo6aW5pdGlhbGl6ZVByb2Nlc3NO
YW1lKToKKyAgICAgICAgKFdlYktpdDo6QXV4aWxpYXJ5UHJvY2Vzczo6aW5pdGlhbGl6ZUNvbm5l
Y3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpBdXhpbGlhcnlQcm9jZXNzOjphZGRNZXNzYWdlUmVj
ZWl2ZXIpOgorICAgICAgICAoV2ViS2l0OjpBdXhpbGlhcnlQcm9jZXNzOjpyZW1vdmVNZXNzYWdl
UmVjZWl2ZXIpOgorICAgICAgICAoV2ViS2l0OjpBdXhpbGlhcnlQcm9jZXNzOjpkaXNhYmxlVGVy
bWluYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpBdXhpbGlhcnlQcm9jZXNzOjplbmFibGVUZXJt
aW5hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkF1eGlsaWFyeVByb2Nlc3M6Om1lc3NhZ2VTZW5k
ZXJDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6QXV4aWxpYXJ5UHJvY2Vzczo6bWVzc2Fn
ZVNlbmRlckRlc3RpbmF0aW9uSUQpOgorICAgICAgICAoV2ViS2l0OjpBdXhpbGlhcnlQcm9jZXNz
Ojp0ZXJtaW5hdGlvblRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpBdXhpbGlhcnlQcm9j
ZXNzOjpzdG9wUnVuTG9vcCk6CisgICAgICAgIChXZWJLaXQ6OkF1eGlsaWFyeVByb2Nlc3M6OnBs
YXRmb3JtU3RvcFJ1bkxvb3ApOgorICAgICAgICAoV2ViS2l0OjpBdXhpbGlhcnlQcm9jZXNzOjp0
ZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0OjpBdXhpbGlhcnlQcm9jZXNzOjpzaHV0RG93bik6
CisgICAgICAgIChXZWJLaXQ6OkF1eGlsaWFyeVByb2Nlc3M6OnJlZ2lzdGVyVVJMU2NoZW1lU2Vy
dmljZVdvcmtlcnNDYW5IYW5kbGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpBdXhpbGlhcnlQ
cm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpBdXhpbGlhcnlQ
cm9jZXNzOjppbml0aWFsaXplU2FuZGJveCk6CisgICAgICAgIChXZWJLaXQ6OkF1eGlsaWFyeVBy
b2Nlc3M6OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkF1eGls
aWFyeVByb2Nlc3M6OmRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2ZW50KToKKyAgICAgICAgKFdl
YktpdDo6Q2hpbGRQcm9jZXNzOjpDaGlsZFByb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpDaGlsZFByb2Nlc3M6On5DaGlsZFByb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpDaGlsZFByb2Nlc3M6OmRpZENsb3NlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
Q2hpbGRQcm9jZXNzOjppbml0aWFsaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q2hp
bGRQcm9jZXNzOjpzZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6Q2hpbGRQcm9jZXNzOjppbml0aWFsaXplUHJvY2Vzcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OkNoaWxkUHJvY2Vzczo6aW5pdGlhbGl6ZVByb2Nlc3NOYW1lKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q2hpbGRQcm9jZXNzOjppbml0aWFsaXplQ29ubmVjdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkNoaWxkUHJvY2Vzczo6YWRkTWVzc2FnZVJl
Y2VpdmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q2hpbGRQcm9jZXNzOjpyZW1vdmVN
ZXNzYWdlUmVjZWl2ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpDaGlsZFByb2Nlc3M6
OmRpc2FibGVUZXJtaW5hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkNoaWxkUHJv
Y2Vzczo6ZW5hYmxlVGVybWluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpDaGls
ZFByb2Nlc3M6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6Q2hpbGRQcm9jZXNzOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OkNoaWxkUHJvY2Vzczo6dGVybWluYXRpb25UaW1lckZpcmVkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q2hpbGRQcm9jZXNzOjpzdG9wUnVuTG9vcCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkNoaWxkUHJvY2Vzczo6cGxhdGZvcm1TdG9wUnVuTG9v
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkNoaWxkUHJvY2Vzczo6dGVybWluYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q2hpbGRQcm9jZXNzOjpzaHV0RG93bik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OkNoaWxkUHJvY2Vzczo6cmVnaXN0ZXJVUkxTY2hlbWVTZXJ2
aWNlV29ya2Vyc0NhbkhhbmRsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkNo
aWxkUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6Q2hpbGRQcm9jZXNzOjppbml0aWFsaXplU2FuZGJveCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OkNoaWxkUHJvY2Vzczo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6Q2hpbGRQcm9jZXNzOjpkaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVF
dmVudCk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL0F1eGlsaWFyeVByb2Nlc3MuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYktpdC9TaGFyZWQvQ2hpbGRQcm9jZXNzLmguCisgICAgICAgIChX
ZWJLaXQ6OkNoaWxkUHJvY2Vzczo6cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpDaGlsZFByb2Nlc3M6Om1lc3NhZ2VSZWNlaXZlck1hcCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkNoaWxkUHJvY2Vzczo6c2V0VGVybWluYXRpb25U
aW1lb3V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q2hpbGRQcm9jZXNzOjpzaG91bGRP
dmVycmlkZVF1YXJhbnRpbmUpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9BdXhpbGlhcnlQ
cm9jZXNzLm1lc3NhZ2VzLmluOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9DaGls
ZFByb2Nlc3MubWVzc2FnZXMuaW4uCisgICAgICAgICogU2hhcmVkL0F1eGlsaWFyeVByb2Nlc3NT
dXBwbGVtZW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL0NoaWxkUHJvY2Vz
c1N1cHBsZW1lbnQuaC4KKyAgICAgICAgKFdlYktpdDo6QXV4aWxpYXJ5UHJvY2Vzc1N1cHBsZW1l
bnQ6On5BdXhpbGlhcnlQcm9jZXNzU3VwcGxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OkNoaWxk
UHJvY2Vzc1N1cHBsZW1lbnQ6On5DaGlsZFByb2Nlc3NTdXBwbGVtZW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6Q2hpbGRQcm9jZXNzU3VwcGxlbWVudDo6aW5pdGlhbGl6ZUNvbm5lY3Rp
b24pOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9DaGlsZFByb2Nlc3MuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIFNoYXJlZC9DaGlsZFByb2Nlc3MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBT
aGFyZWQvQ2hpbGRQcm9jZXNzLm1lc3NhZ2VzLmluOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJl
ZC9DaGlsZFByb2Nlc3NTdXBwbGVtZW50Lmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL0Nv
Y29hL0F1eGlsaWFyeVByb2Nlc3NDb2NvYS5tbTogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9T
aGFyZWQvQ29jb2EvQ2hpbGRQcm9jZXNzQ29jb2EubW0uCisgICAgICAgIChXZWJLaXQ6OkF1eGls
aWFyeVByb2Nlc3M6OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6
OkNoaWxkUHJvY2Vzczo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBTaGFyZWQvQ29jb2EvQ2hpbGRQcm9jZXNzQ29jb2EubW06IFJlbW92ZWQuCisgICAgICAg
ICogU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2VydmljZUVu
dHJ5UG9pbnQuaDoKKyAgICAgICAgKFdlYktpdDo6aW5pdGlhbGl6ZUF1eGlsaWFyeVByb2Nlc3Mp
OgorICAgICAgICAoV2ViS2l0OjpYUENTZXJ2aWNlSW5pdGlhbGl6ZXIpOgorICAgICAgICAoV2Vi
S2l0Ojppbml0aWFsaXplQ2hpbGRQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQv
V2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU1FMaXRl
RGF0YWJhc2VUcmFja2VyOjpXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omh5c3RlcmVzaXNVcGRhdGVkKToKKyAgICAg
ICAgKFdlYktpdDo6bV9jaGlsZFByb2Nlc3NUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFy
ZWQvV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyLmg6CisgICAgICAgICogU2hhcmVkL2lvcy9BdXhp
bGlhcnlQcm9jZXNzSU9TLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9pb3Mv
Q2hpbGRQcm9jZXNzSU9TLm1tLgorICAgICAgICAoV2ViS2l0OjpBdXhpbGlhcnlQcm9jZXNzOjpw
bGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpBdXhpbGlhcnlQcm9jZXNzOjpp
bml0aWFsaXplU2FuZGJveCk6CisgICAgICAgIChXZWJLaXQ6OkF1eGlsaWFyeVByb2Nlc3M6OnNl
dFFPUyk6CisgICAgICAgIChXZWJLaXQ6OkF1eGlsaWFyeVByb2Nlc3M6OnBsYXRmb3JtU3RvcFJ1
bkxvb3ApOgorICAgICAgICAoV2ViS2l0OjpDaGlsZFByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkNoaWxkUHJvY2Vzczo6aW5pdGlhbGl6ZVNh
bmRib3gpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpDaGlsZFByb2Nlc3M6OnNldFFPUyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkNoaWxkUHJvY2Vzczo6cGxhdGZvcm1TdG9wUnVu
TG9vcCk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL2lvcy9DaGlsZFByb2Nlc3NJT1MubW06
IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQ2hpbGRQcm9jZXNzTWFjLm1tLgor
ICAgICAgICAoV2ViS2l0OjpTYW5kYm94SW5mbzo6U2FuZGJveEluZm8pOgorICAgICAgICAoV2Vi
S2l0OjpBdXhpbGlhcnlQcm9jZXNzOjpsYXVuY2hTZXJ2aWNlc0NoZWNrSW4pOgorICAgICAgICAo
V2ViS2l0OjpBdXhpbGlhcnlQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAo
V2ViS2l0Ojpwcm9jZXNzU3RvcmFnZUNsYXNzKToKKyAgICAgICAgKFdlYktpdDo6c2FuZGJveERp
cmVjdG9yeSk6CisgICAgICAgIChXZWJLaXQ6OmFwcGx5U2FuZGJveCk6CisgICAgICAgIChXZWJL
aXQ6OmluaXRpYWxpemVTYW5kYm94UGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6OkF1eGls
aWFyeVByb2Nlc3M6OmluaXRpYWxpemVTYW5kYm94KToKKyAgICAgICAgKFdlYktpdDo6QXV4aWxp
YXJ5UHJvY2Vzczo6c3RvcE5TQXBwUnVuTG9vcCk6CisgICAgICAgIChXZWJLaXQ6OkF1eGlsaWFy
eVByb2Nlc3M6OnN0b3BOU1J1bkxvb3ApOgorICAgICAgICAoV2ViS2l0OjpBdXhpbGlhcnlQcm9j
ZXNzOjpwbGF0Zm9ybVN0b3BSdW5Mb29wKToKKyAgICAgICAgKFdlYktpdDo6QXV4aWxpYXJ5UHJv
Y2Vzczo6c2V0UU9TKToKKyAgICAgICAgKFdlYktpdDo6QXV4aWxpYXJ5UHJvY2Vzczo6aXNTeXN0
ZW1XZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpDaGlsZFByb2Nlc3M6OmxhdW5jaFNlcnZpY2Vz
Q2hlY2tJbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkNoaWxkUHJvY2Vzczo6cGxhdGZv
cm1Jbml0aWFsaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q2hpbGRQcm9jZXNzOjpp
bml0aWFsaXplU2FuZGJveCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkNoaWxkUHJvY2Vz
czo6c3RvcE5TQXBwUnVuTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkNoaWxkUHJv
Y2Vzczo6c3RvcE5TUnVuTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkNoaWxkUHJv
Y2Vzczo6cGxhdGZvcm1TdG9wUnVuTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkNo
aWxkUHJvY2Vzczo6c2V0UU9TKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q2hpbGRQcm9j
ZXNzOjppc1N5c3RlbVdlYktpdCk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL21hYy9DaGls
ZFByb2Nlc3NNYWMubW06IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL21hYy9TZWNJdGVtU2hp
bS5jcHA6CisgICAgICAgIChXZWJLaXQ6Omdsb2JhbE5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6c2VuZFNlY0l0ZW1SZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6aW5pdGlhbGl6
ZVNlY0l0ZW1TaGltKToKKyAgICAgICAgKiBTaGFyZWQvbWFjL1NlY0l0ZW1TaGltLmg6CisgICAg
ICAgICogU2hhcmVkL3VuaXgvQXV4aWxpYXJ5UHJvY2Vzc01haW4uY3BwOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViS2l0L1NoYXJlZC91bml4L0NoaWxkUHJvY2Vzc01haW4uY3BwLgorICAgICAgICAo
V2ViS2l0OjpBdXhpbGlhcnlQcm9jZXNzTWFpbkJhc2U6OnBhcnNlQ29tbWFuZExpbmUpOgorICAg
ICAgICAoV2ViS2l0OjpDaGlsZFByb2Nlc3NNYWluQmFzZTo6cGFyc2VDb21tYW5kTGluZSk6IERl
bGV0ZWQuCisgICAgICAgICogU2hhcmVkL3VuaXgvQXV4aWxpYXJ5UHJvY2Vzc01haW4uaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYktpdC9TaGFyZWQvdW5peC9DaGlsZFByb2Nlc3NNYWluLmguCisg
ICAgICAgIChXZWJLaXQ6OkF1eGlsaWFyeVByb2Nlc3NNYWluQmFzZTo6dGFrZUluaXRpYWxpemF0
aW9uUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6OmluaXRpYWxpemVBdXhpbGlhcnlQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6QXV4aWxpYXJ5UHJvY2Vzc01haW4pOgorICAgICAgICAo
V2ViS2l0OjpDaGlsZFByb2Nlc3NNYWluQmFzZTo6cGxhdGZvcm1Jbml0aWFsaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6Q2hpbGRQcm9jZXNzTWFpbkJhc2U6OnBsYXRmb3JtRmluYWxp
emUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpDaGlsZFByb2Nlc3NNYWluQmFzZTo6dGFr
ZUluaXRpYWxpemF0aW9uUGFyYW1ldGVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Omlu
aXRpYWxpemVDaGlsZFByb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpDaGlsZFBy
b2Nlc3NNYWluKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvdW5peC9DaGlsZFByb2Nlc3NN
YWluLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvdW5peC9DaGlsZFByb2Nlc3NNYWlu
Lmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL3dpbi9BdXhpbGlhcnlQcm9jZXNzTWFpbldp
bi5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9DaGlsZFByb2Nlc3NN
YWluV2luLmNwcC4KKyAgICAgICAgKFdlYktpdDo6QXV4aWxpYXJ5UHJvY2Vzc01haW5CYXNlOjpw
YXJzZUNvbW1hbmRMaW5lKToKKyAgICAgICAgKFdlYktpdDo6Q2hpbGRQcm9jZXNzTWFpbkJhc2U6
OnBhcnNlQ29tbWFuZExpbmUpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC93aW4vQ2hpbGRQ
cm9jZXNzTWFpbldpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAg
ICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAg
ICAgKiBTb3VyY2VzV1BFLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24v
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0F1
dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ2hpbGRQcm9jZXNzUHJveHkuY3BwLgorICAgICAgICAoV2ViS2l0OjpB
dXhpbGlhcnlQcm9jZXNzUHJveHk6OkF1eGlsaWFyeVByb2Nlc3NQcm94eSk6CisgICAgICAgIChX
ZWJLaXQ6OkF1eGlsaWFyeVByb2Nlc3NQcm94eTo6fkF1eGlsaWFyeVByb2Nlc3NQcm94eSk6Cisg
ICAgICAgIChXZWJLaXQ6OkF1eGlsaWFyeVByb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyk6
CisgICAgICAgIChXZWJLaXQ6OkF1eGlsaWFyeVByb2Nlc3NQcm94eTo6Y29ubmVjdCk6CisgICAg
ICAgIChXZWJLaXQ6OkF1eGlsaWFyeVByb2Nlc3NQcm94eTo6dGVybWluYXRlKToKKyAgICAgICAg
KFdlYktpdDo6QXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpzdGF0ZSBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OkF1eGlsaWFyeVByb2Nlc3NQcm94eTo6c2VuZE1lc3NhZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpBdXhpbGlhcnlQcm9jZXNzUHJveHk6OmFkZE1lc3NhZ2VSZWNlaXZlcik6CisgICAgICAg
IChXZWJLaXQ6OkF1eGlsaWFyeVByb2Nlc3NQcm94eTo6cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKToK
KyAgICAgICAgKFdlYktpdDo6QXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpkaXNwYXRjaE1lc3NhZ2Up
OgorICAgICAgICAoV2ViS2l0OjpBdXhpbGlhcnlQcm9jZXNzUHJveHk6OmRpc3BhdGNoU3luY01l
c3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpBdXhpbGlhcnlQcm9jZXNzUHJveHk6OmRpZEZpbmlz
aExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6OkF1eGlsaWFyeVByb2Nlc3NQcm94eTo6c2h1
dERvd25Qcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6QXV4aWxpYXJ5UHJvY2Vzc1Byb3h5Ojpz
ZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6QXV4aWxpYXJ5
UHJvY2Vzc1Byb3h5Ojpjb25uZWN0aW9uV2lsbE9wZW4pOgorICAgICAgICAoV2ViS2l0OjpDaGls
ZFByb2Nlc3NQcm94eTo6Q2hpbGRQcm9jZXNzUHJveHkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpDaGlsZFByb2Nlc3NQcm94eTo6fkNoaWxkUHJvY2Vzc1Byb3h5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6Q2hpbGRQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpDaGlsZFByb2Nlc3NQcm94eTo6Y29ubmVjdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OkNoaWxkUHJvY2Vzc1Byb3h5Ojp0ZXJtaW5hdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpDaGlsZFByb2Nlc3NQcm94eTo6c3RhdGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpDaGlsZFByb2Nlc3NQcm94eTo6c2VuZE1lc3NhZ2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpDaGlsZFByb2Nlc3NQcm94eTo6YWRkTWVzc2Fn
ZVJlY2VpdmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q2hpbGRQcm9jZXNzUHJveHk6
OnJlbW92ZU1lc3NhZ2VSZWNlaXZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkNoaWxk
UHJvY2Vzc1Byb3h5OjpkaXNwYXRjaE1lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpDaGlsZFByb2Nlc3NQcm94eTo6ZGlzcGF0Y2hTeW5jTWVzc2FnZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OkNoaWxkUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpDaGlsZFByb2Nlc3NQcm94eTo6c2h1dERvd25Qcm9jZXNz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q2hpbGRQcm9jZXNzUHJveHk6OnNldFByb2Nl
c3NTdXBwcmVzc2lvbkVuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpDaGlsZFBy
b2Nlc3NQcm94eTo6Y29ubmVjdGlvbldpbGxPcGVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NoaWxkUHJvY2Vzc1Byb3h5LmguCisgICAgICAgIChXZWJLaXQ6OkF1eGlsaWFy
eVByb2Nlc3NQcm94eTo6c2VuZCk6CisgICAgICAgIChXZWJLaXQ6OkF1eGlsaWFyeVByb2Nlc3NQ
cm94eTo6c2VuZFN5bmMpOgorICAgICAgICAoV2ViS2l0OjpBdXhpbGlhcnlQcm9jZXNzUHJveHk6
OnNlbmRXaXRoQXN5bmNSZXBseSk6CisgICAgICAgIChXZWJLaXQ6OkNoaWxkUHJvY2Vzc1Byb3h5
OjpzZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q2hpbGRQcm9jZXNzUHJveHk6OnNl
bmRTeW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q2hpbGRQcm9jZXNzUHJveHk6OmNv
bm5lY3Rpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpDaGlsZFByb2Nlc3NQ
cm94eTo6aGFzQ29ubmVjdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkNo
aWxkUHJvY2Vzc1Byb3h5Ojpwcm9jZXNzSWRlbnRpZmllciBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OkNoaWxkUHJvY2Vzc1Byb3h5OjpjYW5TZW5kTWVzc2FnZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkNoaWxkUHJvY2Vzc1Byb3h5Ojpjb3JlUHJvY2Vzc0lk
ZW50aWZpZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpDaGlsZFByb2Nlc3NQ
cm94eTo6cGxhdGZvcm1HZXRMYXVuY2hPcHRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6Q2hpbGRQcm9jZXNzUHJveHk6OnNlbmRXaXRoQXN5bmNSZXBseSk6IERlbGV0ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0NoaWxkUHJvY2Vzc1Byb3h5LmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQ2hpbGRQcm9jZXNzUHJveHkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpE
b3dubG9hZFByb3h5TWFwOjpEb3dubG9hZFByb3h5TWFwKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
RG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luUHJv
Y2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luUHJv
Y2Vzc1Byb3h5OjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6CisgICAgICAgICogVUlQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1NlcnZp
Y2VXb3JrZXJQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpmaW5pc2hBdHRhY2hpbmdUb1dl
YlByb2Nlc3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZVNlcnZpY2VX
b3JrZXJzQ2FuSGFuZGxlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpXZWJQcm9jZXNzUHJveHkpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6bWF5YmVTaHV0RG93bik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6Y2FuVGVybWluYXRlQXV4aWxpYXJ5UHJvY2Vzcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6c2hvdWxkVGVybWluYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpyZXF1ZXN0VGVybWluYXRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmNhblRlcm1pbmF0ZUNoaWxkUHJvY2Vzcyk6IERl
bGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oOgorICAgICAgICAq
IFVuaWZpZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVByb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjppbml0aWFsaXplQ29ubmVjdGlvbik6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3M6OnRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6
aW5pdGlhbGl6ZVByb2Nlc3NOYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6aW5p
dGlhbGl6ZVNhbmRib3gpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwbGF0Zm9ybUlu
aXRpYWxpemVQcm9jZXNzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuaDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3NTdXBwbGVtZW50Lmg6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3M6OmluaXRpYWxpemVQcm9jZXNzTmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzOjpzdG9wUnVuTG9vcCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmluaXRpYWxp
emVTYW5kYm94KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzTWFpbkd0ay5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NNYWluVW5peCk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy93aW4vV2ViUHJvY2Vzc01haW5XaW4uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzTWFpbldpbik6CisgICAgICAgICogV2ViUHJvY2Vzcy93cGUvV2ViUHJvY2Vzc01haW5X
UEUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzTWFpblVuaXgpOgorCiAyMDE5LTAx
LTI4ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIEFk
ZCBTUEkgdG8gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSB0byByZXRyaWV2ZSBpdHMgdW5k
ZXJseWluZyBXS0NvbnRlbnRSdWxlTGlzdFN0b3JlCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDI0MDU4OSkKKysrIFNvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNSw3ICsxMjUsNyBAQCBzZXQoV2ViS2l0X01FU1NBR0VTX0lOX0ZJTEVTCiAg
ICAgUGx1Z2luUHJvY2Vzcy9QbHVnaW5Qcm9jZXNzLm1lc3NhZ2VzLmluCiAgICAgUGx1Z2luUHJv
Y2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgogCi0gICAgU2hhcmVkL0NoaWxk
UHJvY2Vzcy5tZXNzYWdlcy5pbgorICAgIFNoYXJlZC9BdXhpbGlhcnlQcm9jZXNzLm1lc3NhZ2Vz
LmluCiAgICAgU2hhcmVkL1dlYkNvbm5lY3Rpb24ubWVzc2FnZXMuaW4KIAogICAgIFNoYXJlZC9B
dXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QJKHJldmlzaW9u
IDI0MDU4OSkKKysrIFNvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlz
dAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCAkKFBST0pFQ1RfRElSKS9TY3JpcHRz
L3dlYmtpdC9tb2RlbC5weQogJChQUk9KRUNUX0RJUikvU2NyaXB0cy93ZWJraXQvcGFyc2VyLnB5
CiAkKFBST0pFQ1RfRElSKS9TaGFyZWQvQVBJL0NvY29hL1JlbW90ZU9iamVjdFJlZ2lzdHJ5Lm1l
c3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9TaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVudGlj
YXRpb25NYW5hZ2VyLm1lc3NhZ2VzLmluCi0kKFBST0pFQ1RfRElSKS9TaGFyZWQvQ2hpbGRQcm9j
ZXNzLm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9TaGFyZWQvQXV4aWxpYXJ5UHJvY2Vzcy5t
ZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvU2hhcmVkL1BsdWdpbnMvTlBPYmplY3RNZXNzYWdl
UmVjZWl2ZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1NoYXJlZC9XZWJDb25uZWN0aW9u
Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbApJ
bmRleDogU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0
CShyZXZpc2lvbiAyNDA1ODkpCisrKyBTb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1
dC54Y2ZpbGVsaXN0CSh3b3JraW5nIGNvcHkpCkBAIC03LDEwICs3LDEwIEBAICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWIKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL0F1dG9tYXRpb25Gcm9udGVuZERpc3BhdGNoZXJzLmgKICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL0F1dG9tYXRpb25Qcm90b2Nv
bE9iamVjdHMuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi9BdXRvbWF0aW9uUHJvdG9jb2xPYmplY3RzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL0F1eGlsaWFyeVByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwCisk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9BdXhpbGlhcnlQcm9j
ZXNzTWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktp
dDIvQ2FjaGVTdG9yYWdlRW5naW5lQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNvbm5lY3Rpb25NZXNzYWdlcy5oCi0kKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvV2ViS2l0Mi9DaGlsZFByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwCi0kKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9DaGlsZFByb2Nlc3NNZXNzYWdlcy5oCiAk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9Eb3dubG9hZFByb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvRG93bmxvYWRQcm94eU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL0RyYXdpbmdBcmVhTWVzc2FnZVJlY2VpdmVyLmNwcApJbmRl
eDogU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQkocmV2aXNpb24gMjQwNTg5KQorKysgU291cmNl
L1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC05NSw4ICs5NSw4
IEBAIGVuZGlmCiAKIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAgIEF1dGhlbnRpY2F0aW9uTWFu
YWdlciBcCisgICAgQXV4aWxpYXJ5UHJvY2VzcyBcCiAgICAgQ2FjaGVTdG9yYWdlRW5naW5lQ29u
bmVjdGlvbiBcCi0gICAgQ2hpbGRQcm9jZXNzIFwKICAgICBEb3dubG9hZFByb3h5IFwKICAgICBE
cmF3aW5nQXJlYSBcCiAgICAgRHJhd2luZ0FyZWFQcm94eSBcCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1BsYXRmb3JtR1RLLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm1H
VEsuY21ha2UJKHJldmlzaW9uIDI0MDU4OSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm1HVEsu
Y21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTU4Myw4ICs1ODMsOCBAQCBpZiAoRU5BQkxFX1BMVUdJ
Tl9QUk9DRVNTX0dUSzIpCiAgICAgICAgIFBsdWdpblByb2Nlc3MvdW5peC9QbHVnaW5Qcm9jZXNz
VW5peC5jcHAKIAogICAgICAgICBTaGFyZWQvQWN0aXZpdHlBc3NlcnRpb24uY3BwCisgICAgICAg
IFNoYXJlZC9BdXhpbGlhcnlQcm9jZXNzLmNwcAogICAgICAgICBTaGFyZWQvQmxvYkRhdGFGaWxl
UmVmZXJlbmNlV2l0aFNhbmRib3hFeHRlbnNpb24uY3BwCi0gICAgICAgIFNoYXJlZC9DaGlsZFBy
b2Nlc3MuY3BwCiAgICAgICAgIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwCiAgICAgICAgIFNo
YXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCiAgICAgICAgIFNoYXJlZC9XZWJFdmVudC5j
cHAKQEAgLTYxOSw3ICs2MTksNyBAQCBpZiAoRU5BQkxFX1BMVUdJTl9QUk9DRVNTX0dUSzIpCiAK
ICAgICAgICAgU2hhcmVkL3NvdXAvV2ViQ29yZUFyZ3VtZW50Q29kZXJzU291cC5jcHAKIAotICAg
ICAgICBTaGFyZWQvdW5peC9DaGlsZFByb2Nlc3NNYWluLmNwcAorICAgICAgICBTaGFyZWQvdW5p
eC9BdXhpbGlhcnlQcm9jZXNzTWFpbi5jcHAKIAogICAgICAgICBVSVByb2Nlc3MvTGF1bmNoZXIv
UHJvY2Vzc0xhdW5jaGVyLmNwcAogCkBAIC02NDAsMTEgKzY0MCwxMSBAQCBpZiAoRU5BQkxFX1BM
VUdJTl9QUk9DRVNTX0dUSzIpCiAgICAgICAgIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS91
bml4L05ldHNjYXBlUGx1Z2luVW5peC5jcHAKICAgICAgICAgV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpblgxMS5jcHAKIAorICAgICAgICAke0RFUklWRURfU09V
UkNFU19XRUJLSVRfRElSfS9BdXhpbGlhcnlQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcAogICAg
ICAgICAke0RFUklWRURfU09VUkNFU19XRUJLSVRfRElSfS9QbHVnaW5Db250cm9sbGVyUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwCiAgICAgICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQktJVF9ESVJ9
L1BsdWdpblByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwCi0gICAgICAgICR7REVSSVZFRF9TT1VS
Q0VTX1dFQktJVF9ESVJ9L1dlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcAog
ICAgICAgICAke0RFUklWRURfU09VUkNFU19XRUJLSVRfRElSfS9OUE9iamVjdE1lc3NhZ2VSZWNl
aXZlck1lc3NhZ2VSZWNlaXZlci5jcHAKLSAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCS0lU
X0RJUn0vQ2hpbGRQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcAorICAgICAgICAke0RFUklWRURf
U09VUkNFU19XRUJLSVRfRElSfS9XZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5j
cHAKICAgICApCiAKICAgICBhZGRfZXhlY3V0YWJsZShXZWJLaXRQbHVnaW5Qcm9jZXNzMiAke1Bs
dWdpblByb2Nlc3NHVEsyX1NPVVJDRVN9KQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybU1h
Yy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlCShy
ZXZpc2lvbiAyNDA1ODkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMK
IAogICAgIFNoYXJlZC9Db2NvYS9BUElEYXRhQ29jb2EubW0KICAgICBTaGFyZWQvQ29jb2EvQVBJ
T2JqZWN0Lm1tCi0gICAgU2hhcmVkL0NvY29hL0NoaWxkUHJvY2Vzc0NvY29hLm1tCisgICAgU2hh
cmVkL0NvY29hL0F1eGlsaWFyeVByb2Nlc3NDb2NvYS5tbQogICAgIFNoYXJlZC9Db2NvYS9Db21w
bGV0aW9uSGFuZGxlckNhbGxDaGVja2VyLm1tCiAgICAgU2hhcmVkL0NvY29hL0RhdGFEZXRlY3Rp
b25SZXN1bHQubW0KICAgICBTaGFyZWQvQ29jb2EvTG9hZFBhcmFtZXRlcnNDb2NvYS5tbQpAQCAt
MTM1LDcgKzEzNSw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAKICAgICBTaGFyZWQv
bWFjL0FyZ3VtZW50Q29kZXJzTWFjLm1tCiAgICAgU2hhcmVkL21hYy9BdHRyaWJ1dGVkU3RyaW5n
Lm1tCi0gICAgU2hhcmVkL21hYy9DaGlsZFByb2Nlc3NNYWMubW0KKyAgICBTaGFyZWQvbWFjL0F1
eGlsaWFyeVByb2Nlc3NNYWMubW0KICAgICBTaGFyZWQvbWFjL0NvZGVTaWduaW5nLm1tCiAgICAg
U2hhcmVkL21hYy9Db2xvclNwYWNlRGF0YS5tbQogICAgIFNoYXJlZC9tYWMvSGFuZ0RldGVjdGlv
bkRpc2FibGVyTWFjLm1tCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UJKHJldmlzaW9uIDI0
MDU4OSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDcgKzI2LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKIAogICAgIFNoYXJl
ZC9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luTW9kdWxlTm9uZS5jcHAKIAotICAgIFNo
YXJlZC93aW4vQ2hpbGRQcm9jZXNzTWFpbldpbi5jcHAKKyAgICBTaGFyZWQvd2luL0F1eGlsaWFy
eVByb2Nlc3NNYWluV2luLmNwcAogICAgIFNoYXJlZC93aW4vTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dFdpbi5jcHAKICAgICBTaGFyZWQvd2luL05hdGl2ZVdlYk1vdXNlRXZlbnRXaW4uY3BwCiAgICAg
U2hhcmVkL3dpbi9OYXRpdmVXZWJUb3VjaEV2ZW50V2luLmNwcApJbmRleDogU291cmNlL1dlYktp
dC9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CShy
ZXZpc2lvbiAyNDA1ODkpCisrKyBTb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xMDAsOSArMTAwLDkgQEAgUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlv
bi5jcHAgQAogLy8gVE9ETzogVGhlIGZpbGVzIGhlcmUgbWFya2VkIEBuby11bmlmeSBzaG91bGQg
YmUgdW5pZmllZCBvbmNlIEdUSydzIFBsdWdpblByb2Nlc3MyIGlzIHJlbW92ZWQuCiBTaGFyZWQv
QWN0aXZpdHlBc3NlcnRpb24uY3BwIEBuby11bmlmeQogU2hhcmVkL0FzeW5jUmVxdWVzdC5jcHAK
K1NoYXJlZC9BdXhpbGlhcnlQcm9jZXNzLmNwcCBAbm8tdW5pZnkKIFNoYXJlZC9CbG9iRGF0YUZp
bGVSZWZlcmVuY2VXaXRoU2FuZGJveEV4dGVuc2lvbi5jcHAgQG5vLXVuaWZ5CiBTaGFyZWQvQ2Fj
aGVNb2RlbC5jcHAKLVNoYXJlZC9DaGlsZFByb2Nlc3MuY3BwIEBuby11bmlmeQogU2hhcmVkL0Nv
bnRleHRNZW51Q29udGV4dERhdGEuY3BwCiBTaGFyZWQvRWRpdG9yU3RhdGUuY3BwCiBTaGFyZWQv
Rm9udEluZm8uY3BwCkBAIC0yMTksOCArMjE5LDggQEAgU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUv
UGx1Z2luSW5mb3JtYXRpbwogCiBTaGFyZWQvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGEuY3BwCiAK
K1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuY3BwCiBVSVByb2Nlc3MvQmFja2dyb3Vu
ZFByb2Nlc3NSZXNwb25zaXZlbmVzc1RpbWVyLmNwcAotVUlQcm9jZXNzL0NoaWxkUHJvY2Vzc1By
b3h5LmNwcAogVUlQcm9jZXNzL0RldmljZUlkSGFzaFNhbHRTdG9yYWdlLmNwcAogVUlQcm9jZXNz
L0RyYXdpbmdBcmVhUHJveHkuY3BwCiBVSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9Tb3VyY2VzQ29jb2EudHh0CShyZXZpc2lvbiAyNDA1ODkpCisrKyBTb3VyY2UvV2ViS2l0
L1NvdXJjZXNDb2NvYS50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw3ICsxMjgsNyBAQCBTaGFy
ZWQvQXV0aGVudGljYXRpb24vY29jb2EvQ2xpZW50Q2VydGlmCiBTaGFyZWQvQ29jb2EvQVBJRGF0
YUNvY29hLm1tCiBTaGFyZWQvQ29jb2EvQVBJT2JqZWN0Lm1tCiBTaGFyZWQvQ29jb2EvQXJndW1l
bnRDb2RlcnNDb2NvYS5tbQotU2hhcmVkL0NvY29hL0NoaWxkUHJvY2Vzc0NvY29hLm1tCitTaGFy
ZWQvQ29jb2EvQXV4aWxpYXJ5UHJvY2Vzc0NvY29hLm1tCiBTaGFyZWQvQ29jb2EvQ29tcGxldGlv
bkhhbmRsZXJDYWxsQ2hlY2tlci5tbQogU2hhcmVkL0NvY29hL0RhdGFEZXRlY3Rpb25SZXN1bHQu
bW0KIFNoYXJlZC9Db2NvYS9Mb2FkUGFyYW1ldGVyc0NvY29hLm1tCkBAIC0xNTAsNyArMTUwLDcg
QEAgU2hhcmVkL0NvY29hL1dLT2JqZWN0Lm1tCiBTaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9t
YWMvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQb2ludC5tbQogU2hhcmVkL0VudHJ5UG9pbnRV
dGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2VydmljZU1haW4ubW0KIAotU2hhcmVkL2lvcy9D
aGlsZFByb2Nlc3NJT1MubW0KK1NoYXJlZC9pb3MvQXV4aWxpYXJ5UHJvY2Vzc0lPUy5tbQogU2hh
cmVkL2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5tbQogU2hhcmVkL2lvcy9J
bnRlcmFjdGlvbkluZm9ybWF0aW9uUmVxdWVzdC5jcHAKIFNoYXJlZC9pb3MvTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudElPUy5tbQpAQCAtMTY0LDcgKzE2NCw3IEBAIFNoYXJlZC9pb3MvV2ViVG91Y2hF
dmVudElPUy5jcHAKIAogU2hhcmVkL21hYy9Bcmd1bWVudENvZGVyc01hYy5tbQogU2hhcmVkL21h
Yy9BdHRyaWJ1dGVkU3RyaW5nLm1tCi1TaGFyZWQvbWFjL0NoaWxkUHJvY2Vzc01hYy5tbQorU2hh
cmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCiBTaGFyZWQvbWFjL0NvZGVTaWduaW5nLm1t
CiBTaGFyZWQvbWFjL0NvbG9yU3BhY2VEYXRhLm1tCiBTaGFyZWQvbWFjL0hhbmdEZXRlY3Rpb25E
aXNhYmxlck1hYy5tbQpJbmRleDogU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CShyZXZpc2lvbiAyNDA1ODkpCisr
KyBTb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyAr
MTA1LDcgQEAgU2hhcmVkL2xpbnV4L1dlYk1lbW9yeVNhbXBsZXJMaW51eC5jcHAKIFNoYXJlZC9z
b3VwL1dlYkNvcmVBcmd1bWVudENvZGVyc1NvdXAuY3BwIEBuby11bmlmeQogU2hhcmVkL3NvdXAv
V2ViRXJyb3JzU291cC5jcHAKIAotU2hhcmVkL3VuaXgvQ2hpbGRQcm9jZXNzTWFpbi5jcHAgQG5v
LXVuaWZ5CitTaGFyZWQvdW5peC9BdXhpbGlhcnlQcm9jZXNzTWFpbi5jcHAgQG5vLXVuaWZ5CiAK
IFVJUHJvY2Vzcy9BY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHkuY3BwCiBVSVByb2Nlc3MvQmFj
a2luZ1N0b3JlLmNwcApJbmRleDogU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0CShyZXZpc2lvbiAyNDA1ODkpCisr
KyBTb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5
Niw3IEBAIFNoYXJlZC9saW51eC9XZWJNZW1vcnlTYW1wbGVyTGludXguY3BwCiBTaGFyZWQvc291
cC9XZWJDb3JlQXJndW1lbnRDb2RlcnNTb3VwLmNwcAogU2hhcmVkL3NvdXAvV2ViRXJyb3JzU291
cC5jcHAKIAotU2hhcmVkL3VuaXgvQ2hpbGRQcm9jZXNzTWFpbi5jcHAKK1NoYXJlZC91bml4L0F1
eGlsaWFyeVByb2Nlc3NNYWluLmNwcAogCiBVSVByb2Nlc3MvQWNjZWxlcmF0ZWREcmF3aW5nQXJl
YVByb3h5LmNwcAogVUlQcm9jZXNzL0RlZmF1bHRVbmRvQ29udHJvbGxlci5jcHAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVW5pZmllZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VuaWZpZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QJKHJldmlzaW9u
IDI0MDU4OSkKKysrIFNvdXJjZS9XZWJLaXQvVW5pZmllZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlz
dAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDEzICsxNjksMTMgQEAgJChTUkNST09UKS9TaGFyZWQv
QXN5bmNSZXF1ZXN0LmNwcAogJChTUkNST09UKS9TaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVu
dGljYXRpb25NYW5hZ2VyLmNwcAogJChTUkNST09UKS9TaGFyZWQvQXV0aGVudGljYXRpb24vY29j
b2EvQXV0aGVudGljYXRpb25NYW5hZ2VyQ29jb2EubW0KICQoU1JDUk9PVCkvU2hhcmVkL0F1dGhl
bnRpY2F0aW9uL2NvY29hL0NsaWVudENlcnRpZmljYXRlQXV0aGVudGljYXRpb25YUENDb25zdGFu
dHMuY3BwCiskKFNSQ1JPT1QpL1NoYXJlZC9BdXhpbGlhcnlQcm9jZXNzLmNwcAogJChTUkNST09U
KS9TaGFyZWQvQmxvYkRhdGFGaWxlUmVmZXJlbmNlV2l0aFNhbmRib3hFeHRlbnNpb24uY3BwCiAk
KFNSQ1JPT1QpL1NoYXJlZC9DYWNoZU1vZGVsLmNwcAotJChTUkNST09UKS9TaGFyZWQvQ2hpbGRQ
cm9jZXNzLmNwcAogJChTUkNST09UKS9TaGFyZWQvQ29jb2EvQVBJRGF0YUNvY29hLm1tCiAkKFNS
Q1JPT1QpL1NoYXJlZC9Db2NvYS9BUElPYmplY3QubW0KICQoU1JDUk9PVCkvU2hhcmVkL0NvY29h
L0FyZ3VtZW50Q29kZXJzQ29jb2EubW0KLSQoU1JDUk9PVCkvU2hhcmVkL0NvY29hL0NoaWxkUHJv
Y2Vzc0NvY29hLm1tCiskKFNSQ1JPT1QpL1NoYXJlZC9Db2NvYS9BdXhpbGlhcnlQcm9jZXNzQ29j
b2EubW0KICQoU1JDUk9PVCkvU2hhcmVkL0NvY29hL0NvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNr
ZXIubW0KICQoU1JDUk9PVCkvU2hhcmVkL0NvY29hL0RhdGFEZXRlY3Rpb25SZXN1bHQubW0KICQo
U1JDUk9PVCkvU2hhcmVkL0NvY29hL0xvYWRQYXJhbWV0ZXJzQ29jb2EubW0KQEAgLTI3OSw3ICsy
NzksNyBAQCAkKFNSQ1JPT1QpL1NoYXJlZC9XZWJzaXRlUG9saWNpZXNEYXRhLmNwCiAkKFNSQ1JP
T1QpL1NoYXJlZC9jZi9Bcmd1bWVudENvZGVyc0NGLmNwcAogJChTUkNST09UKS9TaGFyZWQvY2Yv
Q29va2llU3RvcmFnZVV0aWxzQ0YubW0KICQoU1JDUk9PVCkvU2hhcmVkL2NnL1NoYXJlYWJsZUJp
dG1hcENHLmNwcAotJChTUkNST09UKS9TaGFyZWQvaW9zL0NoaWxkUHJvY2Vzc0lPUy5tbQorJChT
UkNST09UKS9TaGFyZWQvaW9zL0F1eGlsaWFyeVByb2Nlc3NJT1MubW0KICQoU1JDUk9PVCkvU2hh
cmVkL2lvcy9JbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5tbQogJChTUkNST09UKS9T
aGFyZWQvaW9zL0ludGVyYWN0aW9uSW5mb3JtYXRpb25SZXF1ZXN0LmNwcAogJChTUkNST09UKS9T
aGFyZWQvaW9zL05hdGl2ZVdlYktleWJvYXJkRXZlbnRJT1MubW0KQEAgLTI5Miw3ICsyOTIsNyBA
QCAkKFNSQ1JPT1QpL1NoYXJlZC9pb3MvV2ViUGxhdGZvcm1Ub3VjaFBvCiAkKFNSQ1JPT1QpL1No
YXJlZC9pb3MvV2ViVG91Y2hFdmVudElPUy5jcHAKICQoU1JDUk9PVCkvU2hhcmVkL21hYy9Bcmd1
bWVudENvZGVyc01hYy5tbQogJChTUkNST09UKS9TaGFyZWQvbWFjL0F0dHJpYnV0ZWRTdHJpbmcu
bW0KLSQoU1JDUk9PVCkvU2hhcmVkL21hYy9DaGlsZFByb2Nlc3NNYWMubW0KKyQoU1JDUk9PVCkv
U2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFjLm1tCiAkKFNSQ1JPT1QpL1NoYXJlZC9tYWMv
Q29kZVNpZ25pbmcubW0KICQoU1JDUk9PVCkvU2hhcmVkL21hYy9Db2xvclNwYWNlRGF0YS5tbQog
JChTUkNST09UKS9TaGFyZWQvbWFjL0hhbmdEZXRlY3Rpb25EaXNhYmxlck1hYy5tbQpAQCAtNDgw
LDggKzQ4MCw4IEBAICQoU1JDUk9PVCkvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b20KICQo
U1JDUk9PVCkvVUlQcm9jZXNzL0F1dG9tYXRpb24vY29jb2EvV2ViQXV0b21hdGlvblNlc3Npb25D
b2NvYS5tbQogJChTUkNST09UKS9VSVByb2Nlc3MvQXV0b21hdGlvbi9pb3MvV2ViQXV0b21hdGlv
blNlc3Npb25JT1MubW0KICQoU1JDUk9PVCkvVUlQcm9jZXNzL0F1dG9tYXRpb24vbWFjL1dlYkF1
dG9tYXRpb25TZXNzaW9uTWFjLm1tCiskKFNSQ1JPT1QpL1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9j
ZXNzUHJveHkuY3BwCiAkKFNSQ1JPT1QpL1VJUHJvY2Vzcy9CYWNrZ3JvdW5kUHJvY2Vzc1Jlc3Bv
bnNpdmVuZXNzVGltZXIuY3BwCi0kKFNSQ1JPT1QpL1VJUHJvY2Vzcy9DaGlsZFByb2Nlc3NQcm94
eS5jcHAKICQoU1JDUk9PVCkvVUlQcm9jZXNzL0NvY29hL0F1dG9tYXRpb25DbGllbnQubW0KICQo
U1JDUk9PVCkvVUlQcm9jZXNzL0NvY29hL0F1dG9tYXRpb25TZXNzaW9uQ2xpZW50Lm1tCiAkKFNS
Q1JPT1QpL1VJUHJvY2Vzcy9Db2NvYS9EaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5tbQpJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHJl
dmlzaW9uIDI0MDU4OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiQXJn
dW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJBdHRhY2htZW50LmgiCiAjaW5jbHVkZSAiQXV0aGVu
dGljYXRpb25NYW5hZ2VyLmgiCi0jaW5jbHVkZSAiQ2hpbGRQcm9jZXNzTWVzc2FnZXMuaCIKKyNp
bmNsdWRlICJBdXhpbGlhcnlQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJEYXRhUmVmZXJl
bmNlLmgiCiAjaW5jbHVkZSAiRG93bmxvYWRQcm94eU1lc3NhZ2VzLmgiCiAjaWYgRU5BQkxFKExF
R0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKQEAgLTExNSw3ICsxMTUsNyBAQCBzdGF0aWMg
dm9pZCBjYWxsRXhpdFNvb24oSVBDOjpDb25uZWN0aW9uCiAgICAgLy8gdGhlIHByb2Nlc3Mgd2ls
bCBleGl0IGZvcmNpYmx5LgogICAgIGF1dG8gd2F0Y2hkb2dEZWxheSA9IDEwX3M7CiAKLSAgICBX
b3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5DaGlsZFByb2Nlc3MuV2F0Y2hEb2dR
dWV1ZSIpLT5kaXNwYXRjaEFmdGVyKHdhdGNoZG9nRGVsYXksIFtdIHsKKyAgICBXb3JrUXVldWU6
OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5OZXR3b3JrUHJvY2Vzcy5XYXRjaERvZ1F1ZXVlIikt
PmRpc3BhdGNoQWZ0ZXIod2F0Y2hkb2dEZWxheSwgW10gewogICAgICAgICAvLyBXZSB1c2UgX2V4
aXQgaGVyZSBzaW5jZSB0aGUgd2F0Y2hkb2cgY2FsbGJhY2sgaXMgY2FsbGVkIGZyb20gYW5vdGhl
ciB0aHJlYWQgYW5kIHdlIGRvbid0IHdhbnQKICAgICAgICAgLy8gZ2xvYmFsIGRlc3RydWN0b3Jz
IG9yIGF0ZXhpdCBoYW5kbGVycyB0byBiZSBjYWxsZWQgZnJvbSB0aGlzIHRocmVhZCB3aGlsZSB0
aGUgbWFpbiB0aHJlYWQgaXMgYnVzeQogICAgICAgICAvLyBkb2luZyBpdHMgdGhpbmcuCkBAIC0x
MjQsNyArMTI0LDcgQEAgc3RhdGljIHZvaWQgY2FsbEV4aXRTb29uKElQQzo6Q29ubmVjdGlvbgog
ICAgIH0pOwogfQogCi1OZXR3b3JrUHJvY2Vzczo6TmV0d29ya1Byb2Nlc3MoQ2hpbGRQcm9jZXNz
SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKK05ldHdvcmtQcm9jZXNzOjpO
ZXR3b3JrUHJvY2VzcyhBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiYg
cGFyYW1ldGVycykKICAgICA6IG1fZG93bmxvYWRNYW5hZ2VyKCp0aGlzKQogI2lmIEVOQUJMRShD
T05URU5UX0VYVEVOU0lPTlMpCiAgICAgLCBtX25ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2Vy
KCp0aGlzKQpAQCAtMjAzLDggKzIwMyw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRpZFJlY2Vp
dmVNZXNzYWdlKEkKICAgICBpZiAobWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNzYWdl
KGNvbm5lY3Rpb24sIGRlY29kZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoZGVjb2Rl
ci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OkNoaWxkUHJvY2Vzczo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpKSB7Ci0gICAgICAgIENoaWxkUHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3Nh
Z2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CisgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVy
TmFtZSgpID09IE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCkpIHsKKyAgICAgICAgQXV4aWxpYXJ5UHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVj
dGlvbiwgZGVjb2Rlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM1OSw3ICszNTks
NyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1ByCiAKIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OmluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiogY29ubmVj
dGlvbikKIHsKLSAgICBDaGlsZFByb2Nlc3M6OmluaXRpYWxpemVDb25uZWN0aW9uKGNvbm5lY3Rp
b24pOworICAgIEF1eGlsaWFyeVByb2Nlc3M6OmluaXRpYWxpemVDb25uZWN0aW9uKGNvbm5lY3Rp
b24pOwogCiAgICAgLy8gV2UgZ2l2ZSBhIGNoYW5jZSBmb3IgZGlkQ2xvc2UoKSB0byBnZXQgY2Fs
bGVkIG9uIHRoZSBtYWluIHRocmVhZCBidXQgZm9yY2VmdWxseSBjYWxsIF9leGl0KCkgYWZ0ZXIg
YSBkZWxheQogICAgIC8vIGluIGNhc2UgdGhlIG1haW4gdGhyZWFkIGlzIHVucmVzcG9uc2l2ZSBv
ciBkaWRDbG9zZSgpIHRha2VzIHRvbyBsb25nLgpAQCAtMTgwNCw3ICsxODA0LDcgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6bG9nRGlhZ25vc3RpY01lc3NhZwogdm9pZCBOZXR3b3JrUHJvY2Vzczo6
dGVybWluYXRlKCkKIHsKICAgICBwbGF0Zm9ybVRlcm1pbmF0ZSgpOwotICAgIENoaWxkUHJvY2Vz
czo6dGVybWluYXRlKCk7CisgICAgQXV4aWxpYXJ5UHJvY2Vzczo6dGVybWluYXRlKCk7CiB9CiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnByb2Nlc3NEaWRUcmFuc2l0aW9uVG9Gb3JlZ3JvdW5kKCkK
QEAgLTIyNjIsMTUgKzIyNjIsMTUgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVxdWVzdENhY2hl
U3RvcmFnZQogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQotdm9pZCBOZXR3b3JrUHJvY2Vzczo6
aW5pdGlhbGl6ZVByb2Nlc3MoY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0
ZXJzJikKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVQcm9jZXNzKGNvbnN0IEF1eGls
aWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmKQogewogfQogCi12b2lkIE5ldHdv
cmtQcm9jZXNzOjppbml0aWFsaXplUHJvY2Vzc05hbWUoY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlh
bGl6YXRpb25QYXJhbWV0ZXJzJikKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVQcm9j
ZXNzTmFtZShjb25zdCBBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJikK
IHsKIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVNhbmRib3goY29uc3QgQ2hp
bGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiwgU2FuZGJveEluaXRpYWxpemF0aW9u
UGFyYW1ldGVycyYpCit2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplU2FuZGJveChjb25z
dCBBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiwgU2FuZGJveEluaXRp
YWxpemF0aW9uUGFyYW1ldGVycyYpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJKHJldmlzaW9uIDI0MDU4OSkKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAkod29ya2luZyBjb3B5KQpA
QCAtMjUsOCArMjUsOCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkF1eGlsaWFyeVBy
b2Nlc3MuaCIKICNpbmNsdWRlICJDYWNoZU1vZGVsLmgiCi0jaW5jbHVkZSAiQ2hpbGRQcm9jZXNz
LmgiCiAjaW5jbHVkZSAiRG93bmxvYWRNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NvbnRl
bnRSdWxlTGlzdE1hbmFnZXIuaCIKICNpbmNsdWRlICJOZXR3b3JrSFRUUFNVcGdyYWRlQ2hlY2tl
ci5oIgpAQCAtMTAwLDcgKzEwMCw3IEBAIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogY2xhc3Mg
Q2FjaGU7CiB9CiAKLWNsYXNzIE5ldHdvcmtQcm9jZXNzIDogcHVibGljIENoaWxkUHJvY2Vzcywg
cHJpdmF0ZSBEb3dubG9hZE1hbmFnZXI6OkNsaWVudCwgcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPE5ldHdvcmtQcm9jZXNzPgorY2xhc3MgTmV0d29ya1Byb2Nlc3MgOiBwdWJsaWMgQXV4aWxp
YXJ5UHJvY2VzcywgcHJpdmF0ZSBEb3dubG9hZE1hbmFnZXI6OkNsaWVudCwgcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPE5ldHdvcmtQcm9jZXNzPgogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQogICAgICwgcHVibGljIFdlYkNvcmU6OklEQlNlcnZlcjo6SURCQmFja2luZ1N0b3JlVGVt
cG9yYXJ5RmlsZUhhbmRsZXIKICNlbmRpZgpAQCAtMTA4LDcgKzEwOCw3IEBAIGNsYXNzIE5ldHdv
cmtQcm9jZXNzIDogcHVibGljIENoaWxkUHJvY2UKIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShOZXR3b3JrUHJvY2Vzcyk7CiBwdWJsaWM6Ci0gICAgTmV0d29ya1Byb2Nlc3MoQ2hpbGRQcm9j
ZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiYpOworICAgIE5ldHdvcmtQcm9jZXNzKEF1eGls
aWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmJik7CiAgICAgfk5ldHdvcmtQcm9j
ZXNzKCk7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBQcm9jZXNzVHlwZSBwcm9jZXNzVHlwZSA9IFBy
b2Nlc3NUeXBlOjpOZXR3b3JrOwogCkBAIC0zMDksMTAgKzMwOSwxMCBAQCBwcml2YXRlOgogICAg
IHZvaWQgcGxhdGZvcm1QcmVwYXJlVG9TdXNwZW5kKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
Jik7CiAgICAgdm9pZCBwbGF0Zm9ybVByb2Nlc3NEaWRSZXN1bWUoKTsKIAotICAgIC8vIENoaWxk
UHJvY2VzcwotICAgIHZvaWQgaW5pdGlhbGl6ZVByb2Nlc3MoY29uc3QgQ2hpbGRQcm9jZXNzSW5p
dGlhbGl6YXRpb25QYXJhbWV0ZXJzJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBpbml0aWFsaXplUHJv
Y2Vzc05hbWUoY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBpbml0aWFsaXplU2FuZGJveChjb25zdCBDaGlsZFByb2Nlc3NJbml0
aWFsaXphdGlvblBhcmFtZXRlcnMmLCBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJikg
b3ZlcnJpZGU7CisgICAgLy8gQXV4aWxpYXJ5UHJvY2VzcworICAgIHZvaWQgaW5pdGlhbGl6ZVBy
b2Nlc3MoY29uc3QgQXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYpIG92
ZXJyaWRlOworICAgIHZvaWQgaW5pdGlhbGl6ZVByb2Nlc3NOYW1lKGNvbnN0IEF1eGlsaWFyeVBy
b2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmKSBvdmVycmlkZTsKKyAgICB2b2lkIGluaXRp
YWxpemVTYW5kYm94KGNvbnN0IEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRl
cnMmLCBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBpbml0aWFsaXplQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24qKSBvdmVycmlkZTsKICAgICBi
b29sIHNob3VsZFRlcm1pbmF0ZSgpIG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzU3VwcGxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50LmgJKHJl
dmlzaW9uIDI0MDU4OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3NTdXBwbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDE2ICsyMywxNSBAQAogICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgTmV0d29ya1By
b2Nlc3NTdXBwbGVtZW50X2gKLSNkZWZpbmUgTmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50X2gKKyNw
cmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ2hpbGRQcm9jZXNzU3VwcGxlbWVudC5oIgorI2luY2x1
ZGUgIkF1eGlsaWFyeVByb2Nlc3NTdXBwbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM7CiAKLWNsYXNzIE5ldHdv
cmtQcm9jZXNzU3VwcGxlbWVudCA6IHB1YmxpYyBDaGlsZFByb2Nlc3NTdXBwbGVtZW50IHsKK2Ns
YXNzIE5ldHdvcmtQcm9jZXNzU3VwcGxlbWVudCA6IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzU3Vw
cGxlbWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoY29uc3QgTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKQogICAgIHsKQEAgLTQwLDUgKzM5LDMgQEAg
cHVibGljOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBOZXR3b3Jr
UHJvY2Vzc1N1cHBsZW1lbnRfaApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9D
b29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjQw
NTg5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1h
bmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlci5oIgogCi0jaW5jbHVkZSAiQ2hpbGRQ
cm9jZXNzLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVk
ZSAiV2ViQ29va2llTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2ll
cy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJDb29raWVNYW5hZ2VyU291cC5jcHAJ
KHJldmlzaW9uIDI0MDU4OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2ll
cy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyAr
MjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXIu
aCIKIAotI2luY2x1ZGUgIkNoaWxkUHJvY2Vzcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNz
LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1NvdXBOZXR3b3JrU2Vzc2lvbi5oPgpJbmRleDogU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9FbnRyeVBvaW50L21hYy9YUENTZXJ2aWNlL05ldHdvcmtTZXJ2aWNlRW50cnlQ
b2ludC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0VudHJ5
UG9pbnQvbWFjL1hQQ1NlcnZpY2UvTmV0d29ya1NlcnZpY2VFbnRyeVBvaW50Lm1tCShyZXZpc2lv
biAyNDA1ODkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0VudHJ5UG9pbnQvbWFj
L1hQQ1NlcnZpY2UvTmV0d29ya1NlcnZpY2VFbnRyeVBvaW50Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKIH07CiAKIHRlbXBsYXRlPD4KLXZvaWQgaW5pdGlhbGl6
ZUNoaWxkUHJvY2VzczxOZXR3b3JrUHJvY2Vzcz4oQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25Q
YXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKK3ZvaWQgaW5pdGlhbGl6ZUF1eGlsaWFyeVByb2Nlc3M8
TmV0d29ya1Byb2Nlc3M+KEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMm
JiBwYXJhbWV0ZXJzKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxOZXR3b3JrUHJvY2Vz
cz4gbmV0d29ya1Byb2Nlc3MoV1RGTW92ZShwYXJhbWV0ZXJzKSk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
U3RvcmFnZS5jcHAJKHJldmlzaW9uIDI0MDU4OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVT
dG9yYWdlLmgiCiAKLSNpbmNsdWRlICJDaGlsZFByb2Nlc3MuaCIKKyNpbmNsdWRlICJBdXhpbGlh
cnlQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNo
ZUNvZGVycy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCIKQEAgLTExMzMs
NyArMTEzMyw3IEBAIHZvaWQgU3RvcmFnZTo6ZGVsZXRlT2xkVmVyc2lvbnMoKQogICAgICAgICAg
ICAgaWYgKGRpcmVjdG9yeVZlcnNpb24gPj0gdmVyc2lvbikKICAgICAgICAgICAgICAgICByZXR1
cm47CiAjaWYgUExBVEZPUk0oTUFDKQotICAgICAgICAgICAgaWYgKCFDaGlsZFByb2Nlc3M6Omlz
U3lzdGVtV2ViS2l0KCkgJiYgZGlyZWN0b3J5VmVyc2lvbiA9PSBsYXN0U3RhYmxlVmVyc2lvbikK
KyAgICAgICAgICAgIGlmICghQXV4aWxpYXJ5UHJvY2Vzczo6aXNTeXN0ZW1XZWJLaXQoKSAmJiBk
aXJlY3RvcnlWZXJzaW9uID09IGxhc3RTdGFibGVWZXJzaW9uKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2lvcy9O
ZXR3b3JrUHJvY2Vzc0lPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2lvcy9OZXR3b3JrUHJvY2Vzc0lPUy5tbQkocmV2aXNpb24gMjQwNTg5KQorKysgU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9pb3MvTmV0d29ya1Byb2Nlc3NJT1MubW0JKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDI0ICs0NCwyNCBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAotdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVByb2Nl
c3MoY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJikKK3ZvaWQgTmV0
d29ya1Byb2Nlc3M6OmluaXRpYWxpemVQcm9jZXNzKGNvbnN0IEF1eGlsaWFyeVByb2Nlc3NJbml0
aWFsaXphdGlvblBhcmFtZXRlcnMmKQogewogICAgIEluaXRXZWJDb3JlVGhyZWFkU3lzdGVtSW50
ZXJmYWNlKCk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVQcm9jZXNzTmFt
ZShjb25zdCBDaGlsZFByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmKQordm9pZCBOZXR3
b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVByb2Nlc3NOYW1lKGNvbnN0IEF1eGlsaWFyeVByb2Nlc3NJ
bml0aWFsaXphdGlvblBhcmFtZXRlcnMmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
LXZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVTYW5kYm94KGNvbnN0IENoaWxkUHJvY2Vz
c0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycywgU2FuZGJveEluaXRpYWxpemF0
aW9uUGFyYW1ldGVycyYgc2FuZGJveFBhcmFtZXRlcnMpCit2b2lkIE5ldHdvcmtQcm9jZXNzOjpp
bml0aWFsaXplU2FuZGJveChjb25zdCBBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJh
bWV0ZXJzJiBwYXJhbWV0ZXJzLCBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBzYW5k
Ym94UGFyYW1ldGVycykKIHsKICNpZiBFTkFCTEVfTUFOVUFMX05FVFdPUktfU0FOREJPWElORwog
ICAgIC8vIE5lZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQsIGJlY2F1c2Ugc2VydmljZSBoYXMg
YSBkaWZmZXJlbnQgYnVuZGxlIElELgogICAgIE5TQnVuZGxlICp3ZWJraXQyQnVuZGxlID0gW05T
QnVuZGxlIGJ1bmRsZUZvckNsYXNzOk5TQ2xhc3NGcm9tU3RyaW5nKEAiV0tXZWJWaWV3IildOwog
ICAgIHNhbmRib3hQYXJhbWV0ZXJzLnNldE92ZXJyaWRlU2FuZGJveFByb2ZpbGVQYXRoKFt3ZWJr
aXQyQnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAImNvbS5hcHBsZS5XZWJLaXQuTmV0d29ya1Byb2Nl
c3MiIG9mVHlwZTpAInNiIl0pOwogCi0gICAgQ2hpbGRQcm9jZXNzOjppbml0aWFsaXplU2FuZGJv
eChwYXJhbWV0ZXJzLCBzYW5kYm94UGFyYW1ldGVycyk7CisgICAgQXV4aWxpYXJ5UHJvY2Vzczo6
aW5pdGlhbGl6ZVNhbmRib3gocGFyYW1ldGVycywgc2FuZGJveFBhcmFtZXRlcnMpOwogI2Vsc2UK
ICAgICBVTlVTRURfUEFSQU0ocGFyYW1ldGVycyk7CiAgICAgVU5VU0VEX1BBUkFNKHNhbmRib3hQ
YXJhbWV0ZXJzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdv
cmtQcm9jZXNzTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvbWFjL05ldHdvcmtQcm9jZXNzTWFjLm1tCShyZXZpc2lvbiAyNDA1ODkpCisrKyBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUHJvY2Vzc01hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNTEsNyArNTEsNyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAotdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVByb2Nlc3MoY29u
c3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJikKK3ZvaWQgTmV0d29ya1By
b2Nlc3M6OmluaXRpYWxpemVQcm9jZXNzKGNvbnN0IEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXph
dGlvblBhcmFtZXRlcnMmKQogewogI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPU01B
QykKICAgICAvLyBIYXZpbmcgYSB3aW5kb3cgc2VydmVyIGNvbm5lY3Rpb24gaW4gdGhpcyBwcm9j
ZXNzIHdvdWxkIHJlc3VsdCBpbiBzcGluIGxvZ3MgKDxyZGFyOi8vcHJvYmxlbS8xMzIzOTExOT4p
LgpAQCAtNjIsNyArNjIsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplUHJvY2Vz
cyhjCiAgICAgbGF1bmNoU2VydmljZXNDaGVja0luKCk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nl
c3M6OmluaXRpYWxpemVQcm9jZXNzTmFtZShjb25zdCBDaGlsZFByb2Nlc3NJbml0aWFsaXphdGlv
blBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCit2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXpl
UHJvY2Vzc05hbWUoY29uc3QgQXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVy
cyYgcGFyYW1ldGVycykKIHsKICNpZiAhUExBVEZPUk0oSU9TTUFDKQogICAgIE5TU3RyaW5nICph
cHBsaWNhdGlvbk5hbWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpXRUJfVUlfU1RSSU5H
KCIlQCBOZXR3b3JraW5nIiwgInZpc2libGUgbmFtZSBvZiB0aGUgbmV0d29yayBwcm9jZXNzLiBU
aGUgYXJndW1lbnQgaXMgdGhlIGFwcGxpY2F0aW9uIG5hbWUuIiksIChOU1N0cmluZyAqKXBhcmFt
ZXRlcnMudWlQcm9jZXNzTmFtZV07CkBAIC04NSw3ICs4NSw3IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OmFsbG93U3BlY2lmaWNIVFRQU0MKICAgICBbTlNVUkxSZXF1ZXN0IHNldEFsbG93c1NwZWNp
ZmljSFRUUFNDZXJ0aWZpY2F0ZTooX19icmlkZ2UgTlNBcnJheSAqKWNlcnRpZmljYXRlSW5mby5j
ZXJ0aWZpY2F0ZUNoYWluKCkgZm9ySG9zdDooTlNTdHJpbmcgKilob3N0XTsKIH0KIAotdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVNhbmRib3goY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlh
bGl6YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJh
bWV0ZXJzJiBzYW5kYm94UGFyYW1ldGVycykKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxp
emVTYW5kYm94KGNvbnN0IEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMm
IHBhcmFtZXRlcnMsIFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmIHNhbmRib3hQYXJh
bWV0ZXJzKQogewogICAgIC8vIE5lZWQgdG8gb3ZlcmlkZSB0aGUgZGVmYXVsdCwgYmVjYXVzZSBz
ZXJ2aWNlIGhhcyBhIGRpZmZlcmVudCBidW5kbGUgSUQuCiAjaWYgV0tfQVBJX0VOQUJMRUQKQEAg
LTk2LDcgKzk2LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVNhbmRib3goYwog
CiAgICAgc2FuZGJveFBhcmFtZXRlcnMuc2V0T3ZlcnJpZGVTYW5kYm94UHJvZmlsZVBhdGgoW3dl
YktpdDJCdW5kbGUgcGF0aEZvclJlc291cmNlOkAiY29tLmFwcGxlLldlYktpdC5OZXR3b3JrUHJv
Y2VzcyIgb2ZUeXBlOkAic2IiXSk7CiAKLSAgICBDaGlsZFByb2Nlc3M6OmluaXRpYWxpemVTYW5k
Ym94KHBhcmFtZXRlcnMsIHNhbmRib3hQYXJhbWV0ZXJzKTsKKyAgICBBdXhpbGlhcnlQcm9jZXNz
Ojppbml0aWFsaXplU2FuZGJveChwYXJhbWV0ZXJzLCBzYW5kYm94UGFyYW1ldGVycyk7CiB9CiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2FjaGVGb3JBbGxPcmlnaW5zKHVpbnQzMl90IGNh
Y2hlc1RvQ2xlYXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0
d29ya1Byb2Nlc3NNYWluU291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzTWFpblNvdXAuY3BwCShyZXZpc2lvbiAyNDA1
ODkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NN
YWluU291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5oIgogCi0jaW5jbHVkZSAiQ2hpbGRQ
cm9jZXNzTWFpbi5oIgorI2luY2x1ZGUgIkF1eGlsaWFyeVByb2Nlc3NNYWluLmgiCiAjaW5jbHVk
ZSAiTmV0d29ya1Byb2Nlc3NNYWluVW5peC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0
b3JhZ2VTZXNzaW9uLmg+CiAKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAK
IHN0YXRpYyBSZWZQdHI8TmV0d29ya1Byb2Nlc3M+IGdsb2JhbE5ldHdvcmtQcm9jZXNzOwogCi1j
bGFzcyBOZXR3b3JrUHJvY2Vzc01haW4gZmluYWw6IHB1YmxpYyBDaGlsZFByb2Nlc3NNYWluQmFz
ZSB7CitjbGFzcyBOZXR3b3JrUHJvY2Vzc01haW4gZmluYWw6IHB1YmxpYyBBdXhpbGlhcnlQcm9j
ZXNzTWFpbkJhc2UgewogcHVibGljOgogICAgIHZvaWQgcGxhdGZvcm1GaW5hbGl6ZSgpIG92ZXJy
aWRlCiAgICAgewpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiB9OwogCiB0ZW1wbGF0ZTw+Ci12
b2lkIGluaXRpYWxpemVDaGlsZFByb2Nlc3M8TmV0d29ya1Byb2Nlc3M+KENoaWxkUHJvY2Vzc0lu
aXRpYWxpemF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCit2b2lkIGluaXRpYWxpemVBdXhp
bGlhcnlQcm9jZXNzPE5ldHdvcmtQcm9jZXNzPihBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRp
b25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
TmV0d29ya1Byb2Nlc3M+IG5ldHdvcmtQcm9jZXNzKFdURk1vdmUocGFyYW1ldGVycykpOwogICAg
IGdsb2JhbE5ldHdvcmtQcm9jZXNzID0gJm5ldHdvcmtQcm9jZXNzLmdldCgpOwpAQCAtNTQsNyAr
NTQsNyBAQCB2b2lkIGluaXRpYWxpemVDaGlsZFByb2Nlc3M8TmV0d29ya1Byb2NlCiAgICAgCiBp
bnQgTmV0d29ya1Byb2Nlc3NNYWluVW5peChpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7Ci0gICAg
cmV0dXJuIENoaWxkUHJvY2Vzc01haW48TmV0d29ya1Byb2Nlc3MsIE5ldHdvcmtQcm9jZXNzTWFp
bj4oYXJnYywgYXJndik7CisgICAgcmV0dXJuIEF1eGlsaWFyeVByb2Nlc3NNYWluPE5ldHdvcmtQ
cm9jZXNzLCBOZXR3b3JrUHJvY2Vzc01haW4+KGFyZ2MsIGFyZ3YpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2F0Y2hvcy9O
ZXR3b3JrUHJveGltaXR5TWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvd2F0Y2hvcy9OZXR3b3JrUHJveGltaXR5TWFuYWdlci5oCShyZXZpc2lvbiAy
NDA1ODkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3dhdGNob3MvTmV0d29ya1By
b3hpbWl0eU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBS
ZXNvdXJjZVJlcXVlc3Q7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBDaGlsZFByb2Nl
c3M7CitjbGFzcyBOZXR3b3JrUHJvY2VzczsKIGNsYXNzIE5ldHdvcmtEYXRhVGFza0NvY29hOwog
ZW51bSBjbGFzcyBOZXR3b3JrUHJveGltaXR5UmVjb21tZW5kYXRpb24gOiB1aW50OF90OwogCkBA
IC03MCw3ICs3MCw3IEBAIGNsYXNzIE5ldHdvcmtQcm94aW1pdHlNYW5hZ2VyIGZpbmFsIDogcHUK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShO
ZXR3b3JrUHJveGltaXR5TWFuYWdlcik7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgTmV0d29ya1By
b3hpbWl0eU1hbmFnZXIoQ2hpbGRQcm9jZXNzJik7CisgICAgZXhwbGljaXQgTmV0d29ya1Byb3hp
bWl0eU1hbmFnZXIoTmV0d29ya1Byb2Nlc3MmKTsKICAgICB+TmV0d29ya1Byb3hpbWl0eU1hbmFn
ZXIoKTsKIAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwpJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93YXRjaG9zL05ldHdvcmtQcm94aW1pdHlNYW5h
Z2VyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2F0Y2hv
cy9OZXR3b3JrUHJveGltaXR5TWFuYWdlci5tbQkocmV2aXNpb24gMjQwNTg5KQorKysgU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy93YXRjaG9zL05ldHdvcmtQcm94aW1pdHlNYW5hZ2VyLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbXBvcnQgIkxvZ2dpbmcuaCIK
ICNpbXBvcnQgIk5ldHdvcmtEYXRhVGFza0NvY29hLmgiCisjaW1wb3J0ICJOZXR3b3JrUHJvY2Vz
cy5oIgogI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKICNpbXBv
cnQgPElEUy9JRFMuaD4KICNpbXBvcnQgPFdpcmVsZXNzQ29leE1hbmFnZXIvV1JNX2lSQVRJbnRl
cmZhY2UuaD4KQEAgLTc3LDcgKzc4LDcgQEAgZW51bSBjbGFzcyBOZXR3b3JrUHJveGltaXR5UmVj
b21tZW5kYXRpbwogICAgIFdpRmksCiB9OwogCi1OZXR3b3JrUHJveGltaXR5TWFuYWdlcjo6TmV0
d29ya1Byb3hpbWl0eU1hbmFnZXIoQ2hpbGRQcm9jZXNzJikKK05ldHdvcmtQcm94aW1pdHlNYW5h
Z2VyOjpOZXR3b3JrUHJveGltaXR5TWFuYWdlcihOZXR3b3JrUHJvY2VzcyYpCiAgICAgOiBtX2lk
c1NlcnZpY2UgeyBhZG9wdE5TKFtbSURTU2VydmljZSBhbGxvY10gaW5pdFdpdGhTZXJ2aWNlOkAi
Y29tLmFwcGxlLnByaXZhdGUuYWxsb3kud2Via2l0bmV0d29ya2luZyJdKSB9CiAgICAgLCBtX2lk
c1NlcnZpY2VEZWxlZ2F0ZSB7IGFkb3B0TlMoW1tXS1Byb3hpbWl0eVNlcnZpY2VEZWxlZ2F0ZSBh
bGxvY10gaW5pdF0pIH0KICAgICAsIG1fcmVjb21tZW5kYXRpb25RdWV1ZSB7IGFkb3B0T1NPYmpl
Y3QoZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJXZWJLaXQgTmV0d29yayBQcm94aW1pdHkgUmVjb21t
ZW5kYXRpb24gUXVldWUiLCBESVNQQVRDSF9RVUVVRV9TRVJJQUwpKSB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3dpbi9OZXR3b3JrUHJvY2Vzc01haW5XaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvd2luL05ldHdvcmtQcm9jZXNz
TWFpbldpbi5jcHAJKHJldmlzaW9uIDI0MDU4OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvd2luL05ldHdvcmtQcm9jZXNzTWFpbldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDIwICsyNiwyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9j
ZXNzTWFpbldpbi5oIgogCi0jaW5jbHVkZSAiQ2hpbGRQcm9jZXNzTWFpbi5oIgorI2luY2x1ZGUg
IkF1eGlsaWFyeVByb2Nlc3NNYWluLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKIHRlbXBsYXRlPD4KLXZvaWQgaW5pdGlhbGl6ZUNoaWxkUHJv
Y2VzczxOZXR3b3JrUHJvY2Vzcz4oQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJz
JiYgcGFyYW1ldGVycykKK3ZvaWQgaW5pdGlhbGl6ZUF1eGlsaWFyeVByb2Nlc3M8TmV0d29ya1By
b2Nlc3M+KEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0
ZXJzKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxOZXR3b3JrUHJvY2Vzcz4gbmV0d29y
a1Byb2Nlc3MoV1RGTW92ZShwYXJhbWV0ZXJzKSk7CiB9CiAKIGludCBOZXR3b3JrUHJvY2Vzc01h
aW5XaW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewotICAgIHJldHVybiBDaGlsZFByb2Nlc3NN
YWluPE5ldHdvcmtQcm9jZXNzLCBDaGlsZFByb2Nlc3NNYWluQmFzZT4oYXJnYywgYXJndik7Cisg
ICAgcmV0dXJuIEF1eGlsaWFyeVByb2Nlc3NNYWluPE5ldHdvcmtQcm9jZXNzLCBBdXhpbGlhcnlQ
cm9jZXNzTWFpbkJhc2U+KGFyZ2MsIGFyZ3YpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Qcm9jZXNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5jcHAJ
KHJldmlzaW9uIDI0MDU4OSkKKysrIFNvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Q
cm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAi
QXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJBdHRhY2htZW50LmgiCi0jaW5jbHVkZSAiQ2hp
bGRQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJBdXhpbGlhcnlQcm9jZXNzTWVzc2FnZXMu
aCIKICNpbmNsdWRlICJOZXRzY2FwZVBsdWdpbi5oIgogI2luY2x1ZGUgIk5ldHNjYXBlUGx1Z2lu
TW9kdWxlLmgiCiAjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oIgpA
QCAtNzYsNyArNzYsNyBAQCBQbHVnaW5Qcm9jZXNzOjp+UGx1Z2luUHJvY2VzcygpCiB7CiB9CiAK
LXZvaWQgUGx1Z2luUHJvY2Vzczo6aW5pdGlhbGl6ZVByb2Nlc3MoY29uc3QgQ2hpbGRQcm9jZXNz
SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQordm9pZCBQbHVnaW5Qcm9jZXNz
Ojppbml0aWFsaXplUHJvY2Vzcyhjb25zdCBBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25Q
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewogICAgIFdURjo6c2V0UHJvY2Vzc1ByaXZpbGVnZXMo
YWxsUHJpdmlsZWdlcygpKTsKICAgICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OnBl
cm1pdFByb2Nlc3NUb1VzZUNvb2tpZUFQSSh0cnVlKTsKQEAgLTg2LDEwICs4NiwxMCBAQCB2b2lk
IFBsdWdpblByb2Nlc3M6OmluaXRpYWxpemVQcm9jZXNzKGNvCiAKIHZvaWQgUGx1Z2luUHJvY2Vz
czo6aW5pdGlhbGl6ZUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uKQogewot
ICAgIENoaWxkUHJvY2Vzczo6aW5pdGlhbGl6ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7CisgICAg
QXV4aWxpYXJ5UHJvY2Vzczo6aW5pdGlhbGl6ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7CiAKICAg
ICAvLyBXZSBjYWxsIF9leGl0KCkgZGlyZWN0bHkgZnJvbSB0aGUgYmFja2dyb3VuZCBxdWV1ZSBp
biBjYXNlIHRoZSBtYWluIHRocmVhZCBpcyB1bnJlc3BvbnNpdmUKLSAgICAvLyBhbmQgQ2hpbGRQ
cm9jZXNzOjpkaWRDbG9zZSgpIGRvZXMgbm90IGdldCBjYWxsZWQuCisgICAgLy8gYW5kIEF1eGls
aWFyeVByb2Nlc3M6OmRpZENsb3NlKCkgZG9lcyBub3QgZ2V0IGNhbGxlZC4KICAgICBjb25uZWN0
aW9uLT5zZXREaWRDbG9zZU9uQ29ubmVjdGlvbldvcmtRdWV1ZUNhbGxiYWNrKGNhbGxFeGl0KTsK
IH0KIApAQCAtMTMzLDggKzEzMyw4IEBAIGJvb2wgUGx1Z2luUHJvY2Vzczo6c2hvdWxkVGVybWlu
YXRlKCkKIHZvaWQgUGx1Z2luUHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCiB7CiAjaWYgT1MoTElOVVgp
Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpDaGls
ZFByb2Nlc3M6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewotICAgICAgICBDaGlsZFByb2Nlc3M6
OmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOworICAgIGlmIChkZWNvZGVy
Lm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpKSB7CisgICAgICAgIEF1eGlsaWFyeVByb2Nlc3M6OmRpZFJlY2Vp
dmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
I2VuZGlmCkBAIC0yNTMsMTEgKzI1MywxMSBAQCB2b2lkIFBsdWdpblByb2Nlc3M6Om1pbmltdW1M
aWZldGltZVRpbWVyCiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCi12b2lkIFBsdWdpblByb2Nl
c3M6OmluaXRpYWxpemVQcm9jZXNzTmFtZShjb25zdCBDaGlsZFByb2Nlc3NJbml0aWFsaXphdGlv
blBhcmFtZXRlcnMmKQordm9pZCBQbHVnaW5Qcm9jZXNzOjppbml0aWFsaXplUHJvY2Vzc05hbWUo
Y29uc3QgQXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYpCiB7CiB9CiAK
LXZvaWQgUGx1Z2luUHJvY2Vzczo6aW5pdGlhbGl6ZVNhbmRib3goY29uc3QgQ2hpbGRQcm9jZXNz
SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiwgU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVy
cyYpCit2b2lkIFBsdWdpblByb2Nlc3M6OmluaXRpYWxpemVTYW5kYm94KGNvbnN0IEF1eGlsaWFy
eVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmLCBTYW5kYm94SW5pdGlhbGl6YXRpb25Q
YXJhbWV0ZXJzJikKIHsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9QbHVnaW5Qcm9j
ZXNzL1BsdWdpblByb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsdWdpblBy
b2Nlc3MvUGx1Z2luUHJvY2Vzcy5oCShyZXZpc2lvbiAyNDA1ODkpCisrKyBTb3VyY2UvV2ViS2l0
L1BsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsy
Nyw3IEBACiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIAotI2luY2x1ZGUgIkNo
aWxkUHJvY2Vzcy5oIgorI2luY2x1ZGUgIkF1eGlsaWFyeVByb2Nlc3MuaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL0NvdW50ZWRVc2VyQWN0aXZpdHkuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNDIsNyArNDIsNyBAQCBjbGFzcyBO
ZXRzY2FwZVBsdWdpbk1vZHVsZTsKIGNsYXNzIFdlYlByb2Nlc3NDb25uZWN0aW9uOwogc3RydWN0
IFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM7CiAgICAgICAgIAotY2xhc3MgUGx1Z2lu
UHJvY2VzcyA6IHB1YmxpYyBDaGlsZFByb2Nlc3MKK2NsYXNzIFBsdWdpblByb2Nlc3MgOiBwdWJs
aWMgQXV4aWxpYXJ5UHJvY2VzcwogewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBsdWdpblBy
b2Nlc3MpOwogICAgIGZyaWVuZCBOZXZlckRlc3Ryb3llZDxQbHVnaW5Qcm9jZXNzPjsKQEAgLTc5
LDEzICs3OSwxMyBAQCBwcml2YXRlOgogICAgIGJvb2wgc2hvdWxkT3ZlcnJpZGVRdWFyYW50aW5l
KCkgZmluYWw7CiAjZW5kaWYKIAotICAgIC8vIENoaWxkUHJvY2VzcwotICAgIHZvaWQgaW5pdGlh
bGl6ZVByb2Nlc3MoY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBpbml0aWFsaXplUHJvY2Vzc05hbWUoY29uc3QgQ2hpbGRQcm9j
ZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJikgb3ZlcnJpZGU7CisgICAgLy8gQXV4aWxpYXJ5
UHJvY2VzcworICAgIHZvaWQgaW5pdGlhbGl6ZVByb2Nlc3MoY29uc3QgQXV4aWxpYXJ5UHJvY2Vz
c0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYpIG92ZXJyaWRlOworICAgIHZvaWQgaW5pdGlhbGl6
ZVByb2Nlc3NOYW1lKGNvbnN0IEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRl
cnMmKSBvdmVycmlkZTsKICAgICB2b2lkIGluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVj
dGlvbiopIG92ZXJyaWRlOwotICAgIHZvaWQgaW5pdGlhbGl6ZVNhbmRib3goY29uc3QgQ2hpbGRQ
cm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiwgU2FuZGJveEluaXRpYWxpemF0aW9uUGFy
YW1ldGVycyYpIG92ZXJyaWRlOworICAgIHZvaWQgaW5pdGlhbGl6ZVNhbmRib3goY29uc3QgQXV4
aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYsIFNhbmRib3hJbml0aWFsaXph
dGlvblBhcmFtZXRlcnMmKSBvdmVycmlkZTsKICAgICBib29sIHNob3VsZFRlcm1pbmF0ZSgpIG92
ZXJyaWRlOwotICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplUHJvY2Vzcyhjb25zdCBDaGlsZFBy
b2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmKTsKKyAgICB2b2lkIHBsYXRmb3JtSW5pdGlh
bGl6ZVByb2Nlc3MoY29uc3QgQXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVy
cyYpOwogCiAjaWYgVVNFKEFQUEtJVCkKICAgICB2b2lkIHN0b3BSdW5Mb29wKCkgb3ZlcnJpZGU7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvbWFjL1BsdWdpblByb2Nlc3NNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Q
cm9jZXNzTWFjLm1tCShyZXZpc2lvbiAyNDA1ODkpCisrKyBTb3VyY2UvV2ViS2l0L1BsdWdpblBy
b2Nlc3MvbWFjL1BsdWdpblByb2Nlc3NNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTUyNSw3ICs1
MjUsNyBAQCB2b2lkIFBsdWdpblByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVBsCiAjZW5kaWYK
IH0KIAotdm9pZCBQbHVnaW5Qcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVQcm9jZXNzKGNvbnN0
IENoaWxkUHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3ZvaWQg
UGx1Z2luUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplUHJvY2Vzcyhjb25zdCBBdXhpbGlhcnlQ
cm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewogICAgIGluaXRp
YWxpemVTaGltKCk7CiAKQEAgLTYyMyw3ICs2MjMsNyBAQCB2b2lkIFBsdWdpblByb2Nlc3M6OnBs
YXRmb3JtSW5pdGlhbGl6ZVByCiAgICAgfQogfQogCi12b2lkIFBsdWdpblByb2Nlc3M6OmluaXRp
YWxpemVQcm9jZXNzTmFtZShjb25zdCBDaGlsZFByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRl
cnMmIHBhcmFtZXRlcnMpCit2b2lkIFBsdWdpblByb2Nlc3M6OmluaXRpYWxpemVQcm9jZXNzTmFt
ZShjb25zdCBBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzKQogewogICAgIE5TU3RyaW5nICphcHBsaWNhdGlvbk5hbWUgPSBbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpXRUJfVUlfU1RSSU5HKCIlQCAoJUAgSW50ZXJuZXQgcGx1Zy1pbikiLCAidmlz
aWJsZSBuYW1lIG9mIHRoZSBwbHVnLWluIGhvc3QgcHJvY2Vzcy4gVGhlIGZpcnN0IGFyZ3VtZW50
IGlzIHRoZSBwbHVnLWluIG5hbWUgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGFwcGxp
Y2F0aW9uIG5hbWUuIiksIFtbKE5TU3RyaW5nICopbV9wbHVnaW5QYXRoIGxhc3RQYXRoQ29tcG9u
ZW50XSBzdHJpbmdCeURlbGV0aW5nUGF0aEV4dGVuc2lvbl0sIChOU1N0cmluZyAqKXBhcmFtZXRl
cnMudWlQcm9jZXNzTmFtZV07CiAgICAgX0xTU2V0QXBwbGljYXRpb25JbmZvcm1hdGlvbkl0ZW0o
a0xTRGVmYXVsdFNlc3Npb25JRCwgX0xTR2V0Q3VycmVudEFwcGxpY2F0aW9uQVNOKCksIF9rTFNE
aXNwbGF5TmFtZUtleSwgKENGU3RyaW5nUmVmKWFwcGxpY2F0aW9uTmFtZSwgbnVsbHB0cik7CkBA
IC02MzEsNyArNjMxLDcgQEAgdm9pZCBQbHVnaW5Qcm9jZXNzOjppbml0aWFsaXplUHJvY2Vzc05h
bQogICAgICAgICBfTFNTZXRBcHBsaWNhdGlvbkluZm9ybWF0aW9uSXRlbShrTFNEZWZhdWx0U2Vz
c2lvbklELCBfTFNHZXRDdXJyZW50QXBwbGljYXRpb25BU04oKSwga0xTUGx1Z0luQnVuZGxlSWRl
bnRpZmllcktleSwgbV9wbHVnaW5CdW5kbGVJZGVudGlmaWVyLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0
KCksIG51bGxwdHIpOwogfQogCi12b2lkIFBsdWdpblByb2Nlc3M6OmluaXRpYWxpemVTYW5kYm94
KGNvbnN0IENoaWxkUHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycywg
U2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycyYgc2FuZGJveFBhcmFtZXRlcnMpCit2b2lk
IFBsdWdpblByb2Nlc3M6OmluaXRpYWxpemVTYW5kYm94KGNvbnN0IEF1eGlsaWFyeVByb2Nlc3NJ
bml0aWFsaXphdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIFNhbmRib3hJbml0aWFsaXphdGlv
blBhcmFtZXRlcnMmIHNhbmRib3hQYXJhbWV0ZXJzKQogewogICAgIC8vIFBsdWdpblByb2Nlc3Mg
bWF5IGFscmVhZHkgYmUgc2FuZGJveGVkIGlmIGl0cyBwYXJlbnQgcHJvY2VzcyB3YXMgc2FuZGJv
eGVkLCBhbmQgbGF1bmNoZWQgYSBjaGlsZCBwcm9jZXNzIGluc3RlYWQgb2YgYW4gWFBDIHNlcnZp
Y2UuCiAgICAgLy8gVGhpcyBpcyBnZW5lcmFsbHkgbm90IGV4cGVjdGVkLCBob3dldmVyIHdlIGN1
cnJlbnRseSBhbHdheXMgc3Bhd24gYSBjaGlsZCBwcm9jZXNzIHRvIGNyZWF0ZSBhIE1JTUUgdHlw
ZSBwcmVmZXJlbmNlcyBmaWxlLgpAQCAtNjk1LDcgKzY5NSw3IEBAIHZvaWQgUGx1Z2luUHJvY2Vz
czo6aW5pdGlhbGl6ZVNhbmRib3goY28KIAogICAgIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRV
c2VyRGVmYXVsdHNdIHJlZ2lzdGVyRGVmYXVsdHM6QHsgQCJOU1VzZVJlbW90ZVNhdmVQYW5lbCIg
OiBAWUVTIH1dOwogCi0gICAgQ2hpbGRQcm9jZXNzOjppbml0aWFsaXplU2FuZGJveChwYXJhbWV0
ZXJzLCBzYW5kYm94UGFyYW1ldGVycyk7CisgICAgQXV4aWxpYXJ5UHJvY2Vzczo6aW5pdGlhbGl6
ZVNhbmRib3gocGFyYW1ldGVycywgc2FuZGJveFBhcmFtZXRlcnMpOwogfQogCiBib29sIFBsdWdp
blByb2Nlc3M6OnNob3VsZE92ZXJyaWRlUXVhcmFudGluZSgpCkBAIC03MDUsNyArNzA1LDcgQEAg
Ym9vbCBQbHVnaW5Qcm9jZXNzOjpzaG91bGRPdmVycmlkZVF1YXJhbgogCiB2b2lkIFBsdWdpblBy
b2Nlc3M6OnN0b3BSdW5Mb29wKCkKIHsKLSAgICBDaGlsZFByb2Nlc3M6OnN0b3BOU0FwcFJ1bkxv
b3AoKTsKKyAgICBBdXhpbGlhcnlQcm9jZXNzOjpzdG9wTlNBcHBSdW5Mb29wKCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL3Vu
aXgvUGx1Z2luUHJvY2Vzc01haW5Vbml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1BsdWdpblByb2Nlc3MvdW5peC9QbHVnaW5Qcm9jZXNzTWFpblVuaXguY3BwCShyZXZpc2lvbiAy
NDA1ODkpCisrKyBTb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvdW5peC9QbHVnaW5Qcm9jZXNz
TWFpblVuaXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpZiBFTkFC
TEUoUExVR0lOX1BST0NFU1MpCiAKLSNpbmNsdWRlICJDaGlsZFByb2Nlc3NNYWluLmgiCisjaW5j
bHVkZSAiQXV4aWxpYXJ5UHJvY2Vzc01haW4uaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5j
bHVkZSAiTmV0c2NhcGVQbHVnaW4uaCIKICNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzLmgiCkBAIC01
Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogc3RhdGljIExhenlOZXZlckRlc3Ryb3ll
ZDxXZWJDb3JlOjpYRXJyb3JUcmFwcGVyPiB4RXJyb3JUcmFwcGVyOwogI2VuZGlmCiAKLWNsYXNz
IFBsdWdpblByb2Nlc3NNYWluIGZpbmFsOiBwdWJsaWMgQ2hpbGRQcm9jZXNzTWFpbkJhc2Ugewor
Y2xhc3MgUGx1Z2luUHJvY2Vzc01haW4gZmluYWw6IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzTWFp
bkJhc2UgewogcHVibGljOgogICAgIGJvb2wgcGxhdGZvcm1Jbml0aWFsaXplKCkgb3ZlcnJpZGUK
ICAgICB7CkBAIC04OCwxMyArODgsMTMgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICAgICAgbV9w
YXJhbWV0ZXJzLmV4dHJhSW5pdGlhbGl6YXRpb25EYXRhLmFkZCgicGx1Z2luLXBhdGgiLCBhcmd2
WzNdKTsKLSAgICAgICAgcmV0dXJuIENoaWxkUHJvY2Vzc01haW5CYXNlOjpwYXJzZUNvbW1hbmRM
aW5lKGFyZ2MsIGFyZ3YpOworICAgICAgICByZXR1cm4gQXV4aWxpYXJ5UHJvY2Vzc01haW5CYXNl
OjpwYXJzZUNvbW1hbmRMaW5lKGFyZ2MsIGFyZ3YpOwogICAgIH0KIH07CiAKIGludCBQbHVnaW5Q
cm9jZXNzTWFpblVuaXgoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewotICAgIHJldHVybiBDaGls
ZFByb2Nlc3NNYWluPFBsdWdpblByb2Nlc3MsIFBsdWdpblByb2Nlc3NNYWluPihhcmdjLCBhcmd2
KTsKKyAgICByZXR1cm4gQXV4aWxpYXJ5UHJvY2Vzc01haW48UGx1Z2luUHJvY2VzcywgUGx1Z2lu
UHJvY2Vzc01haW4+KGFyZ2MsIGFyZ3YpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vzcy91bml4L1BsdWdpblByb2Nlc3NVbml4LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsdWdpblByb2Nlc3MvdW5peC9QbHVnaW5Q
cm9jZXNzVW5peC5jcHAJKHJldmlzaW9uIDI0MDU4OSkKKysrIFNvdXJjZS9XZWJLaXQvUGx1Z2lu
UHJvY2Vzcy91bml4L1BsdWdpblByb2Nlc3NVbml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NyArMzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotdm9pZCBQbHVnaW5Qcm9jZXNzOjpw
bGF0Zm9ybUluaXRpYWxpemVQcm9jZXNzKGNvbnN0IENoaWxkUHJvY2Vzc0luaXRpYWxpemF0aW9u
UGFyYW1ldGVycyYpCit2b2lkIFBsdWdpblByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVByb2Nl
c3MoY29uc3QgQXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYpCiB7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL0F1eGlsaWFyeVByb2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL0F1eGlsaWFyeVByb2Nlc3MuY3BwCShyZXZp
c2lvbiAyNDA1ODkpCShmcm9tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL0NoaWxkUHJvY2Vzcy5jcHA6
MjQwNTg5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvQXV4aWxpYXJ5UHJvY2Vzcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQ2hpbGRQcm9jZXNzLmgiCisKKyNpbmNsdWRlICJMb2dnaW5nLmgi
CisjaW5jbHVkZSAiU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycy5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvU2NoZW1lUmVnaXN0cnkuaD4KKyNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CisK
KyNpZiAhT1MoV0lORE9XUykKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjaWYgT1Mo
TElOVVgpCisjaW5jbHVkZSA8d3RmL01lbW9yeVByZXNzdXJlSGFuZGxlci5oPgorI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0NoaWxkUHJv
Y2Vzczo6Q2hpbGRQcm9jZXNzKCkKKyAgICA6IG1fdGVybWluYXRpb25Db3VudGVyKDApCisgICAg
LCBtX3Rlcm1pbmF0aW9uVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmQ2hpbGRQcm9jZXNz
Ojp0ZXJtaW5hdGlvblRpbWVyRmlyZWQpCisgICAgLCBtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2Fi
bGVkKCJQcm9jZXNzIFN1cHByZXNzaW9uIERpc2FibGVkIGJ5IFVJUHJvY2VzcyIpCit7Cit9CisK
K0NoaWxkUHJvY2Vzczo6fkNoaWxkUHJvY2VzcygpCit7Cit9CisKK3ZvaWQgQ2hpbGRQcm9jZXNz
OjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQoreworICAgIF9leGl0KEVYSVRfU1VDQ0VTUyk7
Cit9CisKK3ZvaWQgQ2hpbGRQcm9jZXNzOjppbml0aWFsaXplKGNvbnN0IENoaWxkUHJvY2Vzc0lu
aXRpYWxpemF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VF9XSVRIX01FU1NBR0UocGFyYW1ldGVycy5wcm9jZXNzSWRlbnRpZmllciwgIlVuYWJsZSB0byBp
bml0aWFsaXplIGNoaWxkIHByb2Nlc3Mgd2l0aG91dCBhIFdlYkNvcmUgcHJvY2VzcyBpZGVudGlm
aWVyIik7CisgICAgUHJvY2Vzczo6c2V0SWRlbnRpZmllcigqcGFyYW1ldGVycy5wcm9jZXNzSWRl
bnRpZmllcik7CisKKyAgICBwbGF0Zm9ybUluaXRpYWxpemUoKTsKKworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgIG1fcHJpb3JpdHlCb29zdE1lc3NhZ2UgPSBwYXJhbWV0ZXJzLnByaW9yaXR5Qm9v
c3RNZXNzYWdlOworI2VuZGlmCisKKyAgICBpbml0aWFsaXplUHJvY2VzcyhwYXJhbWV0ZXJzKTsK
KyAgICBpbml0aWFsaXplUHJvY2Vzc05hbWUocGFyYW1ldGVycyk7CisKKyAgICBTYW5kYm94SW5p
dGlhbGl6YXRpb25QYXJhbWV0ZXJzIHNhbmRib3hQYXJhbWV0ZXJzOworICAgIGluaXRpYWxpemVT
YW5kYm94KHBhcmFtZXRlcnMsIHNhbmRib3hQYXJhbWV0ZXJzKTsKKworICAgIC8vIEluIFdlYktp
dDIsIG9ubHkgdGhlIFVJIHByb2Nlc3Mgc2hvdWxkIGV2ZXIgYmUgZ2VuZXJhdGluZyBub24tZGVm
YXVsdCBQQUw6OlNlc3Npb25JRHMuCisgICAgUEFMOjpTZXNzaW9uSUQ6OmVuYWJsZUdlbmVyYXRp
b25Qcm90ZWN0aW9uKCk7CisKKyAgICBtX2Nvbm5lY3Rpb24gPSBJUEM6OkNvbm5lY3Rpb246OmNy
ZWF0ZUNsaWVudENvbm5lY3Rpb24ocGFyYW1ldGVycy5jb25uZWN0aW9uSWRlbnRpZmllciwgKnRo
aXMpOworICAgIGluaXRpYWxpemVDb25uZWN0aW9uKG1fY29ubmVjdGlvbi5nZXQoKSk7CisgICAg
bV9jb25uZWN0aW9uLT5vcGVuKCk7Cit9CisKK3ZvaWQgQ2hpbGRQcm9jZXNzOjpzZXRQcm9jZXNz
U3VwcHJlc3Npb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAoZW5hYmxlZCkKKyAg
ICAgICAgbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZC5zdG9wKCk7CisgICAgZWxzZQorICAg
ICAgICBtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkLnN0YXJ0KCk7Cit9CisKK3ZvaWQgQ2hp
bGRQcm9jZXNzOjppbml0aWFsaXplUHJvY2Vzcyhjb25zdCBDaGlsZFByb2Nlc3NJbml0aWFsaXph
dGlvblBhcmFtZXRlcnMmKQoreworfQorCit2b2lkIENoaWxkUHJvY2Vzczo6aW5pdGlhbGl6ZVBy
b2Nlc3NOYW1lKGNvbnN0IENoaWxkUHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYpCit7
Cit9CisKK3ZvaWQgQ2hpbGRQcm9jZXNzOjppbml0aWFsaXplQ29ubmVjdGlvbihJUEM6OkNvbm5l
Y3Rpb24qKQoreworfQorCit2b2lkIENoaWxkUHJvY2Vzczo6YWRkTWVzc2FnZVJlY2VpdmVyKElQ
Qzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6TWVzc2FnZVJlY2Vp
dmVyJiBtZXNzYWdlUmVjZWl2ZXIpCit7CisgICAgbV9tZXNzYWdlUmVjZWl2ZXJNYXAuYWRkTWVz
c2FnZVJlY2VpdmVyKG1lc3NhZ2VSZWNlaXZlck5hbWUsIG1lc3NhZ2VSZWNlaXZlcik7Cit9CisK
K3ZvaWQgQ2hpbGRQcm9jZXNzOjphZGRNZXNzYWdlUmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZlcmVu
Y2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgSVBDOjpNZXNz
YWdlUmVjZWl2ZXImIG1lc3NhZ2VSZWNlaXZlcikKK3sKKyAgICBtX21lc3NhZ2VSZWNlaXZlck1h
cC5hZGRNZXNzYWdlUmVjZWl2ZXIobWVzc2FnZVJlY2VpdmVyTmFtZSwgZGVzdGluYXRpb25JRCwg
bWVzc2FnZVJlY2VpdmVyKTsKK30KKwordm9pZCBDaGlsZFByb2Nlc3M6OnJlbW92ZU1lc3NhZ2VS
ZWNlaXZlcihJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCB1aW50NjRf
dCBkZXN0aW5hdGlvbklEKQoreworICAgIG1fbWVzc2FnZVJlY2VpdmVyTWFwLnJlbW92ZU1lc3Nh
Z2VSZWNlaXZlcihtZXNzYWdlUmVjZWl2ZXJOYW1lLCBkZXN0aW5hdGlvbklEKTsKK30KKwordm9p
ZCBDaGlsZFByb2Nlc3M6OnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihJUEM6OlN0cmluZ1JlZmVyZW5j
ZSBtZXNzYWdlUmVjZWl2ZXJOYW1lKQoreworICAgIG1fbWVzc2FnZVJlY2VpdmVyTWFwLnJlbW92
ZU1lc3NhZ2VSZWNlaXZlcihtZXNzYWdlUmVjZWl2ZXJOYW1lKTsKK30KKwordm9pZCBDaGlsZFBy
b2Nlc3M6OnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihJUEM6Ok1lc3NhZ2VSZWNlaXZlciYgbWVzc2Fn
ZVJlY2VpdmVyKQoreworICAgIG1fbWVzc2FnZVJlY2VpdmVyTWFwLnJlbW92ZU1lc3NhZ2VSZWNl
aXZlcihtZXNzYWdlUmVjZWl2ZXIpOworfQorCit2b2lkIENoaWxkUHJvY2Vzczo6ZGlzYWJsZVRl
cm1pbmF0aW9uKCkKK3sKKyAgICBtX3Rlcm1pbmF0aW9uQ291bnRlcisrOworICAgIG1fdGVybWlu
YXRpb25UaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgQ2hpbGRQcm9jZXNzOjplbmFibGVUZXJtaW5h
dGlvbigpCit7CisgICAgQVNTRVJUKG1fdGVybWluYXRpb25Db3VudGVyID4gMCk7CisgICAgbV90
ZXJtaW5hdGlvbkNvdW50ZXItLTsKKworICAgIGlmIChtX3Rlcm1pbmF0aW9uQ291bnRlcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3Rlcm1pbmF0aW9uVGltZW91dCkgeworICAgICAg
ICB0ZXJtaW5hdGlvblRpbWVyRmlyZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG1fdGVybWluYXRpb25UaW1lci5zdGFydE9uZVNob3QobV90ZXJtaW5hdGlvblRpbWVvdXQpOwor
fQorCitJUEM6OkNvbm5lY3Rpb24qIENoaWxkUHJvY2Vzczo6bWVzc2FnZVNlbmRlckNvbm5lY3Rp
b24oKQoreworICAgIHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7Cit9CisKK3VpbnQ2NF90IENo
aWxkUHJvY2Vzczo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKQoreworICAgIHJldHVybiAw
OworfQorCit2b2lkIENoaWxkUHJvY2Vzczo6dGVybWluYXRpb25UaW1lckZpcmVkKCkKK3sKKyAg
ICBpZiAoIXNob3VsZFRlcm1pbmF0ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICB0ZXJtaW5h
dGUoKTsKK30KKwordm9pZCBDaGlsZFByb2Nlc3M6OnN0b3BSdW5Mb29wKCkKK3sKKyAgICBwbGF0
Zm9ybVN0b3BSdW5Mb29wKCk7Cit9CisKKyNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKK3ZvaWQg
Q2hpbGRQcm9jZXNzOjpwbGF0Zm9ybVN0b3BSdW5Mb29wKCkKK3sKKyAgICBSdW5Mb29wOjptYWlu
KCkuc3RvcCgpOworfQorI2VuZGlmCisKK3ZvaWQgQ2hpbGRQcm9jZXNzOjp0ZXJtaW5hdGUoKQor
eworICAgIG1fY29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOworCisgICAgc3RvcFJ1bkxvb3AoKTsK
K30KKwordm9pZCBDaGlsZFByb2Nlc3M6OnNodXREb3duKCkKK3sKKyAgICB0ZXJtaW5hdGUoKTsK
K30KKwordm9pZCBDaGlsZFByb2Nlc3M6OnJlZ2lzdGVyVVJMU2NoZW1lU2VydmljZVdvcmtlcnND
YW5IYW5kbGUoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpIGNvbnN0Cit7CisgICAgV2ViQ29yZTo6
U2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyVVJMU2NoZW1lU2VydmljZVdvcmtlcnNDYW5IYW5kbGUo
dXJsU2NoZW1lKTsKK30KKworI2lmICFQTEFURk9STShDT0NPQSkKK3ZvaWQgQ2hpbGRQcm9jZXNz
OjpwbGF0Zm9ybUluaXRpYWxpemUoKQoreworfQorCit2b2lkIENoaWxkUHJvY2Vzczo6aW5pdGlh
bGl6ZVNhbmRib3goY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiwg
U2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycyYpCit7Cit9CisKK3ZvaWQgQ2hpbGRQcm9j
ZXNzOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJp
bmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVz
c2FnZU5hbWUpCit7CisgICAgV1RGTG9nQWx3YXlzKCJSZWNlaXZlZCBpbnZhbGlkIG1lc3NhZ2U6
ICclczo6JXMnIiwgbWVzc2FnZVJlY2VpdmVyTmFtZS50b1N0cmluZygpLmRhdGEoKSwgbWVzc2Fn
ZU5hbWUudG9TdHJpbmcoKS5kYXRhKCkpOworICAgIENSQVNIKCk7Cit9CisKKyNpZiBPUyhMSU5V
WCkKK3ZvaWQgQ2hpbGRQcm9jZXNzOjpkaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChib29s
IGlzQ3JpdGljYWwpCit7CisgICAgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpzaW5nbGV0b24oKS50
cmlnZ2VyTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKTsKK30KKyNlbmRpZgorCisjZW5k
aWYgLy8gIVBMQVRGT1JNKENPQ09BKQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKClByb3BlcnR5
IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvU2hhcmVkL0F1eGlsaWFyeVByb2Nlc3MuY3BwCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL0F1
eGlsaWFyeVByb2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL0F1
eGlsaWFyeVByb2Nlc3MuY3BwCShyZXZpc2lvbiAyNDA1ODkpCisrKyBTb3VyY2UvV2ViS2l0L1No
YXJlZC9BdXhpbGlhcnlQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBA
QAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDaGlsZFByb2Nlc3MuaCIK
KyNpbmNsdWRlICJBdXhpbGlhcnlQcm9jZXNzLmgiCiAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAj
aW5jbHVkZSAiU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycy5oIgpAQCAtNDIsMjMgKzQy
LDIzIEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1D
aGlsZFByb2Nlc3M6OkNoaWxkUHJvY2VzcygpCitBdXhpbGlhcnlQcm9jZXNzOjpBdXhpbGlhcnlQ
cm9jZXNzKCkKICAgICA6IG1fdGVybWluYXRpb25Db3VudGVyKDApCi0gICAgLCBtX3Rlcm1pbmF0
aW9uVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmQ2hpbGRQcm9jZXNzOjp0ZXJtaW5hdGlv
blRpbWVyRmlyZWQpCisgICAgLCBtX3Rlcm1pbmF0aW9uVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0
aGlzLCAmQXV4aWxpYXJ5UHJvY2Vzczo6dGVybWluYXRpb25UaW1lckZpcmVkKQogICAgICwgbV9w
cm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZCgiUHJvY2VzcyBTdXBwcmVzc2lvbiBEaXNhYmxlZCBi
eSBVSVByb2Nlc3MiKQogewogfQogCi1DaGlsZFByb2Nlc3M6On5DaGlsZFByb2Nlc3MoKQorQXV4
aWxpYXJ5UHJvY2Vzczo6fkF1eGlsaWFyeVByb2Nlc3MoKQogewogfQogCi12b2lkIENoaWxkUHJv
Y2Vzczo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKK3ZvaWQgQXV4aWxpYXJ5UHJvY2Vzczo6
ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKIHsKICAgICBfZXhpdChFWElUX1NVQ0NFU1MpOwog
fQogCi12b2lkIENoaWxkUHJvY2Vzczo6aW5pdGlhbGl6ZShjb25zdCBDaGlsZFByb2Nlc3NJbml0
aWFsaXphdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCit2b2lkIEF1eGlsaWFyeVByb2Nlc3M6
OmluaXRpYWxpemUoY29uc3QgQXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVy
cyYgcGFyYW1ldGVycykKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UocGFyYW1l
dGVycy5wcm9jZXNzSWRlbnRpZmllciwgIlVuYWJsZSB0byBpbml0aWFsaXplIGNoaWxkIHByb2Nl
c3Mgd2l0aG91dCBhIFdlYkNvcmUgcHJvY2VzcyBpZGVudGlmaWVyIik7CiAgICAgUHJvY2Vzczo6
c2V0SWRlbnRpZmllcigqcGFyYW1ldGVycy5wcm9jZXNzSWRlbnRpZmllcik7CkBAIC04Myw3ICs4
Myw3IEBAIHZvaWQgQ2hpbGRQcm9jZXNzOjppbml0aWFsaXplKGNvbnN0IENoaWwKICAgICBtX2Nv
bm5lY3Rpb24tPm9wZW4oKTsKIH0KIAotdm9pZCBDaGlsZFByb2Nlc3M6OnNldFByb2Nlc3NTdXBw
cmVzc2lvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQordm9pZCBBdXhpbGlhcnlQcm9jZXNzOjpzZXRQ
cm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBpZiAoZW5hYmxl
ZCkKICAgICAgICAgbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZC5zdG9wKCk7CkBAIC05MSw1
MCArOTEsNTAgQEAgdm9pZCBDaGlsZFByb2Nlc3M6OnNldFByb2Nlc3NTdXBwcmVzc2lvbgogICAg
ICAgICBtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkLnN0YXJ0KCk7CiB9CiAKLXZvaWQgQ2hp
bGRQcm9jZXNzOjppbml0aWFsaXplUHJvY2Vzcyhjb25zdCBDaGlsZFByb2Nlc3NJbml0aWFsaXph
dGlvblBhcmFtZXRlcnMmKQordm9pZCBBdXhpbGlhcnlQcm9jZXNzOjppbml0aWFsaXplUHJvY2Vz
cyhjb25zdCBBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJikKIHsKIH0K
IAotdm9pZCBDaGlsZFByb2Nlc3M6OmluaXRpYWxpemVQcm9jZXNzTmFtZShjb25zdCBDaGlsZFBy
b2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmKQordm9pZCBBdXhpbGlhcnlQcm9jZXNzOjpp
bml0aWFsaXplUHJvY2Vzc05hbWUoY29uc3QgQXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9u
UGFyYW1ldGVycyYpCiB7CiB9CiAKLXZvaWQgQ2hpbGRQcm9jZXNzOjppbml0aWFsaXplQ29ubmVj
dGlvbihJUEM6OkNvbm5lY3Rpb24qKQordm9pZCBBdXhpbGlhcnlQcm9jZXNzOjppbml0aWFsaXpl
Q29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24qKQogewogfQogCi12b2lkIENoaWxkUHJvY2Vzczo6
YWRkTWVzc2FnZVJlY2VpdmVyKElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5h
bWUsIElQQzo6TWVzc2FnZVJlY2VpdmVyJiBtZXNzYWdlUmVjZWl2ZXIpCit2b2lkIEF1eGlsaWFy
eVByb2Nlc3M6OmFkZE1lc3NhZ2VSZWNlaXZlcihJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdl
UmVjZWl2ZXJOYW1lLCBJUEM6Ok1lc3NhZ2VSZWNlaXZlciYgbWVzc2FnZVJlY2VpdmVyKQogewog
ICAgIG1fbWVzc2FnZVJlY2VpdmVyTWFwLmFkZE1lc3NhZ2VSZWNlaXZlcihtZXNzYWdlUmVjZWl2
ZXJOYW1lLCBtZXNzYWdlUmVjZWl2ZXIpOwogfQogCi12b2lkIENoaWxkUHJvY2Vzczo6YWRkTWVz
c2FnZVJlY2VpdmVyKElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIHVp
bnQ2NF90IGRlc3RpbmF0aW9uSUQsIElQQzo6TWVzc2FnZVJlY2VpdmVyJiBtZXNzYWdlUmVjZWl2
ZXIpCit2b2lkIEF1eGlsaWFyeVByb2Nlc3M6OmFkZE1lc3NhZ2VSZWNlaXZlcihJUEM6OlN0cmlu
Z1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBJ
UEM6Ok1lc3NhZ2VSZWNlaXZlciYgbWVzc2FnZVJlY2VpdmVyKQogewogICAgIG1fbWVzc2FnZVJl
Y2VpdmVyTWFwLmFkZE1lc3NhZ2VSZWNlaXZlcihtZXNzYWdlUmVjZWl2ZXJOYW1lLCBkZXN0aW5h
dGlvbklELCBtZXNzYWdlUmVjZWl2ZXIpOwogfQogCi12b2lkIENoaWxkUHJvY2Vzczo6cmVtb3Zl
TWVzc2FnZVJlY2VpdmVyKElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUs
IHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQpCit2b2lkIEF1eGlsaWFyeVByb2Nlc3M6OnJlbW92ZU1l
c3NhZ2VSZWNlaXZlcihJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCB1
aW50NjRfdCBkZXN0aW5hdGlvbklEKQogewogICAgIG1fbWVzc2FnZVJlY2VpdmVyTWFwLnJlbW92
ZU1lc3NhZ2VSZWNlaXZlcihtZXNzYWdlUmVjZWl2ZXJOYW1lLCBkZXN0aW5hdGlvbklEKTsKIH0K
IAotdm9pZCBDaGlsZFByb2Nlc3M6OnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihJUEM6OlN0cmluZ1Jl
ZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lKQordm9pZCBBdXhpbGlhcnlQcm9jZXNzOjpyZW1v
dmVNZXNzYWdlUmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFt
ZSkKIHsKICAgICBtX21lc3NhZ2VSZWNlaXZlck1hcC5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIobWVz
c2FnZVJlY2VpdmVyTmFtZSk7CiB9CiAKLXZvaWQgQ2hpbGRQcm9jZXNzOjpyZW1vdmVNZXNzYWdl
UmVjZWl2ZXIoSVBDOjpNZXNzYWdlUmVjZWl2ZXImIG1lc3NhZ2VSZWNlaXZlcikKK3ZvaWQgQXV4
aWxpYXJ5UHJvY2Vzczo6cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKElQQzo6TWVzc2FnZVJlY2VpdmVy
JiBtZXNzYWdlUmVjZWl2ZXIpCiB7CiAgICAgbV9tZXNzYWdlUmVjZWl2ZXJNYXAucmVtb3ZlTWVz
c2FnZVJlY2VpdmVyKG1lc3NhZ2VSZWNlaXZlcik7CiB9CiAKLXZvaWQgQ2hpbGRQcm9jZXNzOjpk
aXNhYmxlVGVybWluYXRpb24oKQordm9pZCBBdXhpbGlhcnlQcm9jZXNzOjpkaXNhYmxlVGVybWlu
YXRpb24oKQogewogICAgIG1fdGVybWluYXRpb25Db3VudGVyKys7CiAgICAgbV90ZXJtaW5hdGlv
blRpbWVyLnN0b3AoKTsKIH0KIAotdm9pZCBDaGlsZFByb2Nlc3M6OmVuYWJsZVRlcm1pbmF0aW9u
KCkKK3ZvaWQgQXV4aWxpYXJ5UHJvY2Vzczo6ZW5hYmxlVGVybWluYXRpb24oKQogewogICAgIEFT
U0VSVChtX3Rlcm1pbmF0aW9uQ291bnRlciA+IDApOwogICAgIG1fdGVybWluYXRpb25Db3VudGVy
LS07CkBAIC0xNTAsMTcgKzE1MCwxNyBAQCB2b2lkIENoaWxkUHJvY2Vzczo6ZW5hYmxlVGVybWlu
YXRpb24oKQogICAgIG1fdGVybWluYXRpb25UaW1lci5zdGFydE9uZVNob3QobV90ZXJtaW5hdGlv
blRpbWVvdXQpOwogfQogCi1JUEM6OkNvbm5lY3Rpb24qIENoaWxkUHJvY2Vzczo6bWVzc2FnZVNl
bmRlckNvbm5lY3Rpb24oKQorSVBDOjpDb25uZWN0aW9uKiBBdXhpbGlhcnlQcm9jZXNzOjptZXNz
YWdlU2VuZGVyQ29ubmVjdGlvbigpCiB7CiAgICAgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsK
IH0KIAotdWludDY0X3QgQ2hpbGRQcm9jZXNzOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgp
Cit1aW50NjRfdCBBdXhpbGlhcnlQcm9jZXNzOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgp
CiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgQ2hpbGRQcm9jZXNzOjp0ZXJtaW5hdGlvblRp
bWVyRmlyZWQoKQordm9pZCBBdXhpbGlhcnlQcm9jZXNzOjp0ZXJtaW5hdGlvblRpbWVyRmlyZWQo
KQogewogICAgIGlmICghc2hvdWxkVGVybWluYXRlKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE2
OCw1MiArMTY4LDUyIEBAIHZvaWQgQ2hpbGRQcm9jZXNzOjp0ZXJtaW5hdGlvblRpbWVyRmlyZWQK
ICAgICB0ZXJtaW5hdGUoKTsKIH0KIAotdm9pZCBDaGlsZFByb2Nlc3M6OnN0b3BSdW5Mb29wKCkK
K3ZvaWQgQXV4aWxpYXJ5UHJvY2Vzczo6c3RvcFJ1bkxvb3AoKQogewogICAgIHBsYXRmb3JtU3Rv
cFJ1bkxvb3AoKTsKIH0KIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotdm9pZCBDaGlsZFBy
b2Nlc3M6OnBsYXRmb3JtU3RvcFJ1bkxvb3AoKQordm9pZCBBdXhpbGlhcnlQcm9jZXNzOjpwbGF0
Zm9ybVN0b3BSdW5Mb29wKCkKIHsKICAgICBSdW5Mb29wOjptYWluKCkuc3RvcCgpOwogfQogI2Vu
ZGlmCiAKLXZvaWQgQ2hpbGRQcm9jZXNzOjp0ZXJtaW5hdGUoKQordm9pZCBBdXhpbGlhcnlQcm9j
ZXNzOjp0ZXJtaW5hdGUoKQogewogICAgIG1fY29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOwogCiAg
ICAgc3RvcFJ1bkxvb3AoKTsKIH0KIAotdm9pZCBDaGlsZFByb2Nlc3M6OnNodXREb3duKCkKK3Zv
aWQgQXV4aWxpYXJ5UHJvY2Vzczo6c2h1dERvd24oKQogewogICAgIHRlcm1pbmF0ZSgpOwogfQog
Ci12b2lkIENoaWxkUHJvY2Vzczo6cmVnaXN0ZXJVUkxTY2hlbWVTZXJ2aWNlV29ya2Vyc0Nhbkhh
bmRsZShjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkgY29uc3QKK3ZvaWQgQXV4aWxpYXJ5UHJvY2Vz
czo6cmVnaXN0ZXJVUkxTY2hlbWVTZXJ2aWNlV29ya2Vyc0NhbkhhbmRsZShjb25zdCBTdHJpbmcm
IHVybFNjaGVtZSkgY29uc3QKIHsKICAgICBXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6cmVnaXN0
ZXJVUkxTY2hlbWVTZXJ2aWNlV29ya2Vyc0NhbkhhbmRsZSh1cmxTY2hlbWUpOwogfQogCiAjaWYg
IVBMQVRGT1JNKENPQ09BKQotdm9pZCBDaGlsZFByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZSgp
Cit2b2lkIEF1eGlsaWFyeVByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiB7CiB9CiAKLXZv
aWQgQ2hpbGRQcm9jZXNzOjppbml0aWFsaXplU2FuZGJveChjb25zdCBDaGlsZFByb2Nlc3NJbml0
aWFsaXphdGlvblBhcmFtZXRlcnMmLCBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJikK
K3ZvaWQgQXV4aWxpYXJ5UHJvY2Vzczo6aW5pdGlhbGl6ZVNhbmRib3goY29uc3QgQXV4aWxpYXJ5
UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYsIFNhbmRib3hJbml0aWFsaXphdGlvblBh
cmFtZXRlcnMmKQogewogfQogCi12b2lkIENoaWxkUHJvY2Vzczo6ZGlkUmVjZWl2ZUludmFsaWRN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNl
aXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKQordm9pZCBBdXhpbGlh
cnlQcm9jZXNzOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVu
Y2UgbWVzc2FnZU5hbWUpCiB7CiAgICAgV1RGTG9nQWx3YXlzKCJSZWNlaXZlZCBpbnZhbGlkIG1l
c3NhZ2U6ICclczo6JXMnIiwgbWVzc2FnZVJlY2VpdmVyTmFtZS50b1N0cmluZygpLmRhdGEoKSwg
bWVzc2FnZU5hbWUudG9TdHJpbmcoKS5kYXRhKCkpOwogICAgIENSQVNIKCk7CiB9CiAKICNpZiBP
UyhMSU5VWCkKLXZvaWQgQ2hpbGRQcm9jZXNzOjpkaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVu
dChib29sIGlzQ3JpdGljYWwpCit2b2lkIEF1eGlsaWFyeVByb2Nlc3M6OmRpZFJlY2VpdmVNZW1v
cnlQcmVzc3VyZUV2ZW50KGJvb2wgaXNDcml0aWNhbCkKIHsKICAgICBNZW1vcnlQcmVzc3VyZUhh
bmRsZXI6OnNpbmdsZXRvbigpLnRyaWdnZXJNZW1vcnlQcmVzc3VyZUV2ZW50KGlzQ3JpdGljYWwp
OwogfQpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvQXV4aWxpYXJ5UHJvY2Vzcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL0F1eGlsaWFyeVByb2Nlc3MuaAkocmV2aXNp
b24gMjQwNTg5KQkoZnJvbSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9DaGlsZFByb2Nlc3MuaDoyNDA1
ODkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BdXhpbGlhcnlQcm9jZXNzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ2hpbGRQ
cm9jZXNzX2gKKyNkZWZpbmUgQ2hpbGRQcm9jZXNzX2gKKworI2luY2x1ZGUgIkNvbm5lY3Rpb24u
aCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXJNYXAuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2Vu
ZGVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9V
c2VyQWN0aXZpdHkuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9S
dW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU2FuZGJv
eEluaXRpYWxpemF0aW9uUGFyYW1ldGVyczsKK3N0cnVjdCBDaGlsZFByb2Nlc3NJbml0aWFsaXph
dGlvblBhcmFtZXRlcnM7CisKK2NsYXNzIENoaWxkUHJvY2VzcyA6IHByb3RlY3RlZCBJUEM6OkNv
bm5lY3Rpb246OkNsaWVudCwgcHVibGljIElQQzo6TWVzc2FnZVNlbmRlciB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQ2hpbGRQcm9jZXNzKTsKKworcHVibGljOgorICAgIGVudW0gY2xhc3Mg
UHJvY2Vzc1R5cGUgOiB1aW50OF90IHsKKyAgICAgICAgV2ViQ29udGVudCwKKyAgICAgICAgTmV0
d29yaywKKyAgICAgICAgUGx1Z2luCisgICAgfTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZShjb25z
dCBDaGlsZFByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmKTsKKworICAgIC8vIGRpc2Fi
bGUgYW5kIGVuYWJsZSB0ZXJtaW5hdGlvbiBvZiB0aGUgcHJvY2Vzcy4gd2hlbiBkaXNhYmxlVGVy
bWluYXRpb24gaXMgY2FsbGVkLCB0aGUKKyAgICAvLyBwcm9jZXNzIHdvbid0IHRlcm1pbmF0ZSB1
bmxlc3MgYSBjb3JyZXNwb25kaW5nIGRpc2FibGVUZXJtaW5hdGlvbiBjYWxsIGlzIG1hZGUuCisg
ICAgdm9pZCBkaXNhYmxlVGVybWluYXRpb24oKTsKKyAgICB2b2lkIGVuYWJsZVRlcm1pbmF0aW9u
KCk7CisKKyAgICB2b2lkIGFkZE1lc3NhZ2VSZWNlaXZlcihJUEM6OlN0cmluZ1JlZmVyZW5jZSBt
ZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6Ok1lc3NhZ2VSZWNlaXZlciYpOworICAgIHZvaWQgYWRk
TWVzc2FnZVJlY2VpdmVyKElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUs
IHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIElQQzo6TWVzc2FnZVJlY2VpdmVyJik7CisgICAgdm9p
ZCByZW1vdmVNZXNzYWdlUmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2Vp
dmVyTmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCk7CisgICAgdm9pZCByZW1vdmVNZXNzYWdl
UmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSk7CisgICAg
dm9pZCByZW1vdmVNZXNzYWdlUmVjZWl2ZXIoSVBDOjpNZXNzYWdlUmVjZWl2ZXImKTsKKworICAg
IHZvaWQgc2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChib29sKTsKKworI2lmIFBMQVRGT1JN
KENPQ09BKQorICAgIHZvaWQgc2V0QXBwbGljYXRpb25Jc0RhZW1vbigpOworICAgIHZvaWQgbGF1
bmNoU2VydmljZXNDaGVja0luKCk7CisgICAgdm9pZCBzZXRRT1MoaW50IGxhdGVuY3lRT1MsIGlu
dCB0aHJvdWdocHV0UU9TKTsKKyNlbmRpZgorCisgICAgSVBDOjpDb25uZWN0aW9uKiBwYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsgfQor
CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCgpIHsgcmV0
dXJuIG1fbWVzc2FnZVJlY2VpdmVyTWFwOyB9CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgc3Rh
dGljIGJvb2wgaXNTeXN0ZW1XZWJLaXQoKTsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgZXhw
bGljaXQgQ2hpbGRQcm9jZXNzKCk7CisgICAgdmlydHVhbCB+Q2hpbGRQcm9jZXNzKCk7CisKKyAg
ICB2b2lkIHNldFRlcm1pbmF0aW9uVGltZW91dChTZWNvbmRzIHNlY29uZHMpIHsgbV90ZXJtaW5h
dGlvblRpbWVvdXQgPSBzZWNvbmRzOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZVBy
b2Nlc3MoY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJik7CisgICAg
dmlydHVhbCB2b2lkIGluaXRpYWxpemVQcm9jZXNzTmFtZShjb25zdCBDaGlsZFByb2Nlc3NJbml0
aWFsaXphdGlvblBhcmFtZXRlcnMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZVNhbmRi
b3goY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiwgU2FuZGJveElu
aXRpYWxpemF0aW9uUGFyYW1ldGVycyYpOworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplQ29u
bmVjdGlvbihJUEM6OkNvbm5lY3Rpb24qKTsKKworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRUZXJt
aW5hdGUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHRlcm1pbmF0ZSgpOworCisgICAgdmlydHVh
bCB2b2lkIHN0b3BSdW5Mb29wKCk7CisKKyNpZiBVU0UoQVBQS0lUKQorICAgIHN0YXRpYyB2b2lk
IHN0b3BOU0FwcFJ1bkxvb3AoKTsKKyNlbmRpZgorICAgIAorI2lmIFBMQVRGT1JNKE1BQykgJiYg
RU5BQkxFKFdFQlBST0NFU1NfTlNSVU5MT09QKQorICAgIHN0YXRpYyB2b2lkIHN0b3BOU1J1bkxv
b3AoKTsKKyNlbmRpZgorCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKworICAgIHZvaWQgcmVnaXN0ZXJVUkxTY2hl
bWVTZXJ2aWNlV29ya2Vyc0NhbkhhbmRsZShjb25zdCBTdHJpbmcmKSBjb25zdDsKKyNpZiBPUyhM
SU5VWCkKKyAgICB2b2lkIGRpZFJlY2VpdmVNZW1vcnlQcmVzc3VyZUV2ZW50KGJvb2wgaXNDcml0
aWNhbCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkT3ZlcnJp
ZGVRdWFyYW50aW5lKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gSVBDOjpNZXNzYWdlU2Vu
ZGVyCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIG92ZXJy
aWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgb3ZlcnJpZGU7
CisKKyAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudC4KKyAgICB2b2lkIGRpZFJlY2VpdmVJ
bnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNz
YWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgZmluYWw7
CisgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKKworICAgIHZv
aWQgc2h1dERvd24oKTsKKworICAgIHZvaWQgdGVybWluYXRpb25UaW1lckZpcmVkKCk7CisKKyAg
ICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOworICAgIHZvaWQgcGxhdGZvcm1TdG9wUnVuTG9v
cCgpOworCisgICAgLy8gVGhlIHRpbWVvdXQsIGluIHNlY29uZHMsIGJlZm9yZSB0aGlzIHByb2Nl
c3Mgd2lsbCBiZSB0ZXJtaW5hdGVkIGlmIHRlcm1pbmF0aW9uCisgICAgLy8gaGFzIGJlZW4gZW5h
YmxlZC4gSWYgdGhlIHRpbWVvdXQgaXMgMCBzZWNvbmRzLCB0aGUgcHJvY2VzcyB3aWxsIGJlIHRl
cm1pbmF0ZWQgaW1tZWRpYXRlbHkuCisgICAgU2Vjb25kcyBtX3Rlcm1pbmF0aW9uVGltZW91dDsK
KworICAgIC8vIEEgdGVybWluYXRpb24gY291bnRlcjsgd2hlbiB0aGUgY291bnRlciByZWFjaGVz
IHplcm8sIHRoZSBwcm9jZXNzIHdpbGwgYmUgdGVybWluYXRlZAorICAgIC8vIGFmdGVyIGEgZ2l2
ZW4gcGVyaW9kIG9mIHRpbWUuCisgICAgdW5zaWduZWQgbV90ZXJtaW5hdGlvbkNvdW50ZXI7CisK
KyAgICBSdW5Mb29wOjpUaW1lcjxDaGlsZFByb2Nlc3M+IG1fdGVybWluYXRpb25UaW1lcjsKKwor
ICAgIFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKKyAgICBJUEM6Ok1lc3Nh
Z2VSZWNlaXZlck1hcCBtX21lc3NhZ2VSZWNlaXZlck1hcDsKKworICAgIFVzZXJBY3Rpdml0eSBt
X3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkOworCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAg
T1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBtX3ByaW9yaXR5Qm9vc3RNZXNzYWdlOworI2VuZGlm
Cit9OworCitzdHJ1Y3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzIHsKKyAg
ICBTdHJpbmcgdWlQcm9jZXNzTmFtZTsKKyAgICBTdHJpbmcgY2xpZW50SWRlbnRpZmllcjsKKyAg
ICBPcHRpb25hbDxXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllcj4gcHJvY2Vzc0lkZW50aWZpZXI7
CisgICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyOwor
ICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGV4dHJhSW5pdGlhbGl6YXRpb25EYXRhOworICAg
IENoaWxkUHJvY2Vzczo6UHJvY2Vzc1R5cGUgcHJvY2Vzc1R5cGU7CisjaWYgUExBVEZPUk0oQ09D
T0EpCisgICAgT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBwcmlvcml0eUJvb3N0TWVzc2FnZTsK
KyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBDaGlsZFBy
b2Nlc3NfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9TaGFyZWQvQXV4aWxp
YXJ5UHJvY2Vzcy5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAj
IworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL0F1eGlsaWFyeVByb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9BdXhpbGlhcnlQcm9jZXNzLmgJKHJldmlzaW9uIDI0MDU4OSkKKysrIFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL0F1eGlsaWFyeVByb2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjMs
OCArMjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNp
Zm5kZWYgQ2hpbGRQcm9jZXNzX2gKLSNkZWZpbmUgQ2hpbGRQcm9jZXNzX2gKKyNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlck1h
cC5oIgpAQCAtMzksMTAgKzM4LDEwIEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgU2Fu
ZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVyczsKLXN0cnVjdCBDaGlsZFByb2Nlc3NJbml0aWFs
aXphdGlvblBhcmFtZXRlcnM7CitzdHJ1Y3QgQXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9u
UGFyYW1ldGVyczsKIAotY2xhc3MgQ2hpbGRQcm9jZXNzIDogcHJvdGVjdGVkIElQQzo6Q29ubmVj
dGlvbjo6Q2xpZW50LCBwdWJsaWMgSVBDOjpNZXNzYWdlU2VuZGVyIHsKLSAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShDaGlsZFByb2Nlc3MpOworY2xhc3MgQXV4aWxpYXJ5UHJvY2VzcyA6IHByb3Rl
Y3RlZCBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCwgcHVibGljIElQQzo6TWVzc2FnZVNlbmRlciB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXV4aWxpYXJ5UHJvY2Vzcyk7CiAKIHB1YmxpYzoK
ICAgICBlbnVtIGNsYXNzIFByb2Nlc3NUeXBlIDogdWludDhfdCB7CkBAIC01MSw3ICs1MCw3IEBA
IHB1YmxpYzoKICAgICAgICAgUGx1Z2luCiAgICAgfTsKIAotICAgIHZvaWQgaW5pdGlhbGl6ZShj
b25zdCBDaGlsZFByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmKTsKKyAgICB2b2lkIGlu
aXRpYWxpemUoY29uc3QgQXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYp
OwogCiAgICAgLy8gZGlzYWJsZSBhbmQgZW5hYmxlIHRlcm1pbmF0aW9uIG9mIHRoZSBwcm9jZXNz
LiB3aGVuIGRpc2FibGVUZXJtaW5hdGlvbiBpcyBjYWxsZWQsIHRoZQogICAgIC8vIHByb2Nlc3Mg
d29uJ3QgdGVybWluYXRlIHVubGVzcyBhIGNvcnJlc3BvbmRpbmcgZGlzYWJsZVRlcm1pbmF0aW9u
IGNhbGwgaXMgbWFkZS4KQEAgLTgxLDE0ICs4MCwxNCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJv
dGVjdGVkOgotICAgIGV4cGxpY2l0IENoaWxkUHJvY2VzcygpOwotICAgIHZpcnR1YWwgfkNoaWxk
UHJvY2VzcygpOworICAgIGV4cGxpY2l0IEF1eGlsaWFyeVByb2Nlc3MoKTsKKyAgICB2aXJ0dWFs
IH5BdXhpbGlhcnlQcm9jZXNzKCk7CiAKICAgICB2b2lkIHNldFRlcm1pbmF0aW9uVGltZW91dChT
ZWNvbmRzIHNlY29uZHMpIHsgbV90ZXJtaW5hdGlvblRpbWVvdXQgPSBzZWNvbmRzOyB9CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZVByb2Nlc3MoY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlh
bGl6YXRpb25QYXJhbWV0ZXJzJik7Ci0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVQcm9jZXNz
TmFtZShjb25zdCBDaGlsZFByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZVNhbmRib3goY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6
YXRpb25QYXJhbWV0ZXJzJiwgU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycyYpOworICAg
IHZpcnR1YWwgdm9pZCBpbml0aWFsaXplUHJvY2Vzcyhjb25zdCBBdXhpbGlhcnlQcm9jZXNzSW5p
dGlhbGl6YXRpb25QYXJhbWV0ZXJzJik7CisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVQcm9j
ZXNzTmFtZShjb25zdCBBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJik7
CisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVTYW5kYm94KGNvbnN0IEF1eGlsaWFyeVByb2Nl
c3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmLCBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0
ZXJzJik7CiAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVj
dGlvbiopOwogCiAgICAgdmlydHVhbCBib29sIHNob3VsZFRlcm1pbmF0ZSgpID0gMDsKQEAgLTEz
Nyw3ICsxMzYsNyBAQCBwcml2YXRlOgogICAgIC8vIGFmdGVyIGEgZ2l2ZW4gcGVyaW9kIG9mIHRp
bWUuCiAgICAgdW5zaWduZWQgbV90ZXJtaW5hdGlvbkNvdW50ZXI7CiAKLSAgICBSdW5Mb29wOjpU
aW1lcjxDaGlsZFByb2Nlc3M+IG1fdGVybWluYXRpb25UaW1lcjsKKyAgICBSdW5Mb29wOjpUaW1l
cjxBdXhpbGlhcnlQcm9jZXNzPiBtX3Rlcm1pbmF0aW9uVGltZXI7CiAKICAgICBSZWZQdHI8SVBD
OjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CiAgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAg
bV9tZXNzYWdlUmVjZWl2ZXJNYXA7CkBAIC0xNDksMTggKzE0OCwxNiBAQCBwcml2YXRlOgogI2Vu
ZGlmCiB9OwogCi1zdHJ1Y3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzIHsK
K3N0cnVjdCBBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzIHsKICAgICBT
dHJpbmcgdWlQcm9jZXNzTmFtZTsKICAgICBTdHJpbmcgY2xpZW50SWRlbnRpZmllcjsKICAgICBP
cHRpb25hbDxXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllcj4gcHJvY2Vzc0lkZW50aWZpZXI7CiAg
ICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyOwogICAg
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGV4dHJhSW5pdGlhbGl6YXRpb25EYXRhOwotICAgIENo
aWxkUHJvY2Vzczo6UHJvY2Vzc1R5cGUgcHJvY2Vzc1R5cGU7CisgICAgQXV4aWxpYXJ5UHJvY2Vz
czo6UHJvY2Vzc1R5cGUgcHJvY2Vzc1R5cGU7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgT1NP
YmplY3RQdHI8eHBjX29iamVjdF90PiBwcmlvcml0eUJvb3N0TWVzc2FnZTsKICNlbmRpZgogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBDaGlsZFByb2Nlc3NfaApJbmRl
eDogU291cmNlL1dlYktpdC9TaGFyZWQvQXV4aWxpYXJ5UHJvY2Vzcy5tZXNzYWdlcy5pbgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BdXhpbGlhcnlQcm9jZXNzLm1lc3NhZ2Vz
LmluCShyZXZpc2lvbiAyNDA1ODkpCShmcm9tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL0NoaWxkUHJv
Y2Vzcy5tZXNzYWdlcy5pbjoyNDA1ODkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BdXhpbGlh
cnlQcm9jZXNzLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzEgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWVzc2FnZXMgLT4gQ2hpbGRQ
cm9jZXNzIHsKKyAgICBTaHV0RG93bigpCisgICAgUmVnaXN0ZXJVUkxTY2hlbWVTZXJ2aWNlV29y
a2Vyc0NhbkhhbmRsZShTdHJpbmcgc2NoZW1lKQorICAgIFNldFByb2Nlc3NTdXBwcmVzc2lvbkVu
YWJsZWQoYm9vbCBmbGFnKQorCisjaWYgT1MoTElOVVgpCisgICAgdm9pZCBEaWRSZWNlaXZlTWVt
b3J5UHJlc3N1cmVFdmVudChib29sIGlzQ3JpdGljYWwpCisjZW5kaWYKK30KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL0F1eGlsaWFyeVByb2Nlc3MubWVzc2FnZXMuaW4KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9TaGFyZWQvQXV4aWxpYXJ5UHJvY2Vzcy5tZXNzYWdlcy5pbgkocmV2
aXNpb24gMjQwNTg5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvQXV4aWxpYXJ5UHJvY2Vzcy5t
ZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNyBAQAogIyBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1tZXNzYWdlcyAtPiBDaGlsZFByb2Nlc3Mgewor
bWVzc2FnZXMgLT4gQXV4aWxpYXJ5UHJvY2VzcyB7CiAgICAgU2h1dERvd24oKQogICAgIFJlZ2lz
dGVyVVJMU2NoZW1lU2VydmljZVdvcmtlcnNDYW5IYW5kbGUoU3RyaW5nIHNjaGVtZSkKICAgICBT
ZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKGJvb2wgZmxhZykKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvU2hhcmVkL0F1eGlsaWFyeVByb2Nlc3NTdXBwbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9TaGFyZWQvQXV4aWxpYXJ5UHJvY2Vzc1N1cHBsZW1lbnQuaAkocmV2aXNpb24g
MjQwNTg5KQkoZnJvbSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9DaGlsZFByb2Nlc3NTdXBwbGVtZW50
Lmg6MjQwNTg5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvQXV4aWxpYXJ5UHJvY2Vzc1N1cHBs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBDaGlsZFByb2Nlc3NTdXBwbGVtZW50X2gKKyNkZWZpbmUgQ2hpbGRQcm9jZXNzU3VwcGxl
bWVudF9oCisKK25hbWVzcGFjZSBJUEMgeworY2xhc3MgQ29ubmVjdGlvbjsKK30gLy8gbmFtZXNw
YWNlIElQQworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgQ2hpbGRQcm9jZXNzU3VwcGxl
bWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q2hpbGRQcm9jZXNzU3VwcGxlbWVudCgpCisg
ICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplQ29ubmVjdGlvbihJUEM6
OkNvbm5lY3Rpb24qKQorICAgIHsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIENoaWxkUHJvY2Vzc1N1cHBsZW1lbnRfaApJbmRleDogU291cmNlL1dlYktp
dC9TaGFyZWQvQXV4aWxpYXJ5UHJvY2Vzc1N1cHBsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9BdXhpbGlhcnlQcm9jZXNzU3VwcGxlbWVudC5oCShyZXZpc2lvbiAy
NDA1ODkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BdXhpbGlhcnlQcm9jZXNzU3VwcGxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBDaGlsZFByb2Nlc3NTdXBwbGVtZW50X2gK
LSNkZWZpbmUgQ2hpbGRQcm9jZXNzU3VwcGxlbWVudF9oCisjcHJhZ21hIG9uY2UKIAogbmFtZXNw
YWNlIElQQyB7CiBjbGFzcyBDb25uZWN0aW9uOwpAQCAtMzIsOSArMzEsOSBAQCBjbGFzcyBDb25u
ZWN0aW9uOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgQ2hpbGRQcm9jZXNzU3VwcGxl
bWVudCB7CitjbGFzcyBBdXhpbGlhcnlQcm9jZXNzU3VwcGxlbWVudCB7CiBwdWJsaWM6Ci0gICAg
dmlydHVhbCB+Q2hpbGRQcm9jZXNzU3VwcGxlbWVudCgpCisgICAgdmlydHVhbCB+QXV4aWxpYXJ5
UHJvY2Vzc1N1cHBsZW1lbnQoKQogICAgIHsKICAgICB9CiAKQEAgLTQ0LDUgKzQzLDMgQEAgcHVi
bGljOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBDaGlsZFByb2Nl
c3NTdXBwbGVtZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL0NoaWxkUHJvY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvQ2hpbGRQcm9jZXNzLmNwcAko
cmV2aXNpb24gMjQwNTg5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvQ2hpbGRQcm9jZXNzLmNw
cAkobm9uZXhpc3RlbnQpCkBAIC0xLDIyNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkNoaWxkUHJvY2Vzcy5oIgotCi0jaW5jbHVkZSAiTG9nZ2lu
Zy5oIgotI2luY2x1ZGUgIlNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMuaCIKLSNpbmNs
dWRlIDxXZWJDb3JlL1NjaGVtZVJlZ2lzdHJ5Lmg+Ci0jaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5o
PgotCi0jaWYgIU9TKFdJTkRPV1MpCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLQotI2lm
IE9TKExJTlVYKQotI2luY2x1ZGUgPHd0Zi9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaD4KLSNlbmRp
ZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1DaGls
ZFByb2Nlc3M6OkNoaWxkUHJvY2VzcygpCi0gICAgOiBtX3Rlcm1pbmF0aW9uQ291bnRlcigwKQot
ICAgICwgbV90ZXJtaW5hdGlvblRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJkNoaWxkUHJv
Y2Vzczo6dGVybWluYXRpb25UaW1lckZpcmVkKQotICAgICwgbV9wcm9jZXNzU3VwcHJlc3Npb25E
aXNhYmxlZCgiUHJvY2VzcyBTdXBwcmVzc2lvbiBEaXNhYmxlZCBieSBVSVByb2Nlc3MiKQotewot
fQotCi1DaGlsZFByb2Nlc3M6On5DaGlsZFByb2Nlc3MoKQotewotfQotCi12b2lkIENoaWxkUHJv
Y2Vzczo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKLXsKLSAgICBfZXhpdChFWElUX1NVQ0NF
U1MpOwotfQotCi12b2lkIENoaWxkUHJvY2Vzczo6aW5pdGlhbGl6ZShjb25zdCBDaGlsZFByb2Nl
c3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCi17Ci0gICAgUkVMRUFTRV9B
U1NFUlRfV0lUSF9NRVNTQUdFKHBhcmFtZXRlcnMucHJvY2Vzc0lkZW50aWZpZXIsICJVbmFibGUg
dG8gaW5pdGlhbGl6ZSBjaGlsZCBwcm9jZXNzIHdpdGhvdXQgYSBXZWJDb3JlIHByb2Nlc3MgaWRl
bnRpZmllciIpOwotICAgIFByb2Nlc3M6OnNldElkZW50aWZpZXIoKnBhcmFtZXRlcnMucHJvY2Vz
c0lkZW50aWZpZXIpOwotCi0gICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7Ci0KLSNpZiBQTEFURk9S
TShDT0NPQSkKLSAgICBtX3ByaW9yaXR5Qm9vc3RNZXNzYWdlID0gcGFyYW1ldGVycy5wcmlvcml0
eUJvb3N0TWVzc2FnZTsKLSNlbmRpZgotCi0gICAgaW5pdGlhbGl6ZVByb2Nlc3MocGFyYW1ldGVy
cyk7Ci0gICAgaW5pdGlhbGl6ZVByb2Nlc3NOYW1lKHBhcmFtZXRlcnMpOwotCi0gICAgU2FuZGJv
eEluaXRpYWxpemF0aW9uUGFyYW1ldGVycyBzYW5kYm94UGFyYW1ldGVyczsKLSAgICBpbml0aWFs
aXplU2FuZGJveChwYXJhbWV0ZXJzLCBzYW5kYm94UGFyYW1ldGVycyk7Ci0KLSAgICAvLyBJbiBX
ZWJLaXQyLCBvbmx5IHRoZSBVSSBwcm9jZXNzIHNob3VsZCBldmVyIGJlIGdlbmVyYXRpbmcgbm9u
LWRlZmF1bHQgUEFMOjpTZXNzaW9uSURzLgotICAgIFBBTDo6U2Vzc2lvbklEOjplbmFibGVHZW5l
cmF0aW9uUHJvdGVjdGlvbigpOwotCi0gICAgbV9jb25uZWN0aW9uID0gSVBDOjpDb25uZWN0aW9u
OjpjcmVhdGVDbGllbnRDb25uZWN0aW9uKHBhcmFtZXRlcnMuY29ubmVjdGlvbklkZW50aWZpZXIs
ICp0aGlzKTsKLSAgICBpbml0aWFsaXplQ29ubmVjdGlvbihtX2Nvbm5lY3Rpb24uZ2V0KCkpOwot
ICAgIG1fY29ubmVjdGlvbi0+b3BlbigpOwotfQotCi12b2lkIENoaWxkUHJvY2Vzczo6c2V0UHJv
Y2Vzc1N1cHByZXNzaW9uRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKGVuYWJsZWQp
Ci0gICAgICAgIG1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWQuc3RvcCgpOwotICAgIGVsc2UK
LSAgICAgICAgbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZC5zdGFydCgpOwotfQotCi12b2lk
IENoaWxkUHJvY2Vzczo6aW5pdGlhbGl6ZVByb2Nlc3MoY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlh
bGl6YXRpb25QYXJhbWV0ZXJzJikKLXsKLX0KLQotdm9pZCBDaGlsZFByb2Nlc3M6OmluaXRpYWxp
emVQcm9jZXNzTmFtZShjb25zdCBDaGlsZFByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMm
KQotewotfQotCi12b2lkIENoaWxkUHJvY2Vzczo6aW5pdGlhbGl6ZUNvbm5lY3Rpb24oSVBDOjpD
b25uZWN0aW9uKikKLXsKLX0KLQotdm9pZCBDaGlsZFByb2Nlc3M6OmFkZE1lc3NhZ2VSZWNlaXZl
cihJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlciYgbWVzc2FnZVJlY2VpdmVyKQotewotICAgIG1fbWVzc2FnZVJlY2VpdmVyTWFwLmFk
ZE1lc3NhZ2VSZWNlaXZlcihtZXNzYWdlUmVjZWl2ZXJOYW1lLCBtZXNzYWdlUmVjZWl2ZXIpOwot
fQotCi12b2lkIENoaWxkUHJvY2Vzczo6YWRkTWVzc2FnZVJlY2VpdmVyKElQQzo6U3RyaW5nUmVm
ZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIElQQzo6
TWVzc2FnZVJlY2VpdmVyJiBtZXNzYWdlUmVjZWl2ZXIpCi17Ci0gICAgbV9tZXNzYWdlUmVjZWl2
ZXJNYXAuYWRkTWVzc2FnZVJlY2VpdmVyKG1lc3NhZ2VSZWNlaXZlck5hbWUsIGRlc3RpbmF0aW9u
SUQsIG1lc3NhZ2VSZWNlaXZlcik7Ci19Ci0KLXZvaWQgQ2hpbGRQcm9jZXNzOjpyZW1vdmVNZXNz
YWdlUmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgdWlu
dDY0X3QgZGVzdGluYXRpb25JRCkKLXsKLSAgICBtX21lc3NhZ2VSZWNlaXZlck1hcC5yZW1vdmVN
ZXNzYWdlUmVjZWl2ZXIobWVzc2FnZVJlY2VpdmVyTmFtZSwgZGVzdGluYXRpb25JRCk7Ci19Ci0K
LXZvaWQgQ2hpbGRQcm9jZXNzOjpyZW1vdmVNZXNzYWdlUmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZl
cmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSkKLXsKLSAgICBtX21lc3NhZ2VSZWNlaXZlck1hcC5y
ZW1vdmVNZXNzYWdlUmVjZWl2ZXIobWVzc2FnZVJlY2VpdmVyTmFtZSk7Ci19Ci0KLXZvaWQgQ2hp
bGRQcm9jZXNzOjpyZW1vdmVNZXNzYWdlUmVjZWl2ZXIoSVBDOjpNZXNzYWdlUmVjZWl2ZXImIG1l
c3NhZ2VSZWNlaXZlcikKLXsKLSAgICBtX21lc3NhZ2VSZWNlaXZlck1hcC5yZW1vdmVNZXNzYWdl
UmVjZWl2ZXIobWVzc2FnZVJlY2VpdmVyKTsKLX0KLQotdm9pZCBDaGlsZFByb2Nlc3M6OmRpc2Fi
bGVUZXJtaW5hdGlvbigpCi17Ci0gICAgbV90ZXJtaW5hdGlvbkNvdW50ZXIrKzsKLSAgICBtX3Rl
cm1pbmF0aW9uVGltZXIuc3RvcCgpOwotfQotCi12b2lkIENoaWxkUHJvY2Vzczo6ZW5hYmxlVGVy
bWluYXRpb24oKQotewotICAgIEFTU0VSVChtX3Rlcm1pbmF0aW9uQ291bnRlciA+IDApOwotICAg
IG1fdGVybWluYXRpb25Db3VudGVyLS07Ci0KLSAgICBpZiAobV90ZXJtaW5hdGlvbkNvdW50ZXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV90ZXJtaW5hdGlvblRpbWVvdXQpIHsKLSAg
ICAgICAgdGVybWluYXRpb25UaW1lckZpcmVkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBtX3Rlcm1pbmF0aW9uVGltZXIuc3RhcnRPbmVTaG90KG1fdGVybWluYXRpb25UaW1lb3V0
KTsKLX0KLQotSVBDOjpDb25uZWN0aW9uKiBDaGlsZFByb2Nlc3M6Om1lc3NhZ2VTZW5kZXJDb25u
ZWN0aW9uKCkKLXsKLSAgICByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOwotfQotCi11aW50NjRf
dCBDaGlsZFByb2Nlc3M6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkKLXsKLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBDaGlsZFByb2Nlc3M6OnRlcm1pbmF0aW9uVGltZXJGaXJlZCgpCi17
Ci0gICAgaWYgKCFzaG91bGRUZXJtaW5hdGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdGVy
bWluYXRlKCk7Ci19Ci0KLXZvaWQgQ2hpbGRQcm9jZXNzOjpzdG9wUnVuTG9vcCgpCi17Ci0gICAg
cGxhdGZvcm1TdG9wUnVuTG9vcCgpOwotfQotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi12
b2lkIENoaWxkUHJvY2Vzczo6cGxhdGZvcm1TdG9wUnVuTG9vcCgpCi17Ci0gICAgUnVuTG9vcDo6
bWFpbigpLnN0b3AoKTsKLX0KLSNlbmRpZgotCi12b2lkIENoaWxkUHJvY2Vzczo6dGVybWluYXRl
KCkKLXsKLSAgICBtX2Nvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKLQotICAgIHN0b3BSdW5Mb29w
KCk7Ci19Ci0KLXZvaWQgQ2hpbGRQcm9jZXNzOjpzaHV0RG93bigpCi17Ci0gICAgdGVybWluYXRl
KCk7Ci19Ci0KLXZvaWQgQ2hpbGRQcm9jZXNzOjpyZWdpc3RlclVSTFNjaGVtZVNlcnZpY2VXb3Jr
ZXJzQ2FuSGFuZGxlKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKSBjb25zdAotewotICAgIFdlYkNv
cmU6OlNjaGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTFNjaGVtZVNlcnZpY2VXb3JrZXJzQ2FuSGFu
ZGxlKHVybFNjaGVtZSk7Ci19Ci0KLSNpZiAhUExBVEZPUk0oQ09DT0EpCi12b2lkIENoaWxkUHJv
Y2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplKCkKLXsKLX0KLQotdm9pZCBDaGlsZFByb2Nlc3M6Omlu
aXRpYWxpemVTYW5kYm94KGNvbnN0IENoaWxkUHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVy
cyYsIFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmKQotewotfQotCi12b2lkIENoaWxk
UHJvY2Vzczo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNl
IG1lc3NhZ2VOYW1lKQotewotICAgIFdURkxvZ0Fsd2F5cygiUmVjZWl2ZWQgaW52YWxpZCBtZXNz
YWdlOiAnJXM6OiVzJyIsIG1lc3NhZ2VSZWNlaXZlck5hbWUudG9TdHJpbmcoKS5kYXRhKCksIG1l
c3NhZ2VOYW1lLnRvU3RyaW5nKCkuZGF0YSgpKTsKLSAgICBDUkFTSCgpOwotfQotCi0jaWYgT1Mo
TElOVVgpCi12b2lkIENoaWxkUHJvY2Vzczo6ZGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQo
Ym9vbCBpc0NyaXRpY2FsKQotewotICAgIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6c2luZ2xldG9u
KCkudHJpZ2dlck1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCk7Ci19Ci0jZW5kaWYKLQot
I2VuZGlmIC8vICFQTEFURk9STShDT0NPQSkKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9DaGlsZFByb2Nlc3MuY3BwCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQv
Q2hpbGRQcm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvQ2hpbGRQ
cm9jZXNzLmgJKHJldmlzaW9uIDI0MDU4OSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL0NoaWxk
UHJvY2Vzcy5oCShub25leGlzdGVudCkKQEAgLTEsMTY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgQ2hpbGRQcm9jZXNzX2gKLSNkZWZpbmUgQ2hpbGRQcm9jZXNzX2gKLQotI2lu
Y2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXJNYXAuaCIKLSNp
bmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9Vc2VyQWN0aXZpdHkuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFz
aC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotY2xhc3MgU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVyczsKLXN0cnVjdCBDaGls
ZFByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnM7Ci0KLWNsYXNzIENoaWxkUHJvY2VzcyA6
IHByb3RlY3RlZCBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCwgcHVibGljIElQQzo6TWVzc2FnZVNl
bmRlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2hpbGRQcm9jZXNzKTsKLQotcHVibGlj
OgotICAgIGVudW0gY2xhc3MgUHJvY2Vzc1R5cGUgOiB1aW50OF90IHsKLSAgICAgICAgV2ViQ29u
dGVudCwKLSAgICAgICAgTmV0d29yaywKLSAgICAgICAgUGx1Z2luCi0gICAgfTsKLQotICAgIHZv
aWQgaW5pdGlhbGl6ZShjb25zdCBDaGlsZFByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMm
KTsKLQotICAgIC8vIGRpc2FibGUgYW5kIGVuYWJsZSB0ZXJtaW5hdGlvbiBvZiB0aGUgcHJvY2Vz
cy4gd2hlbiBkaXNhYmxlVGVybWluYXRpb24gaXMgY2FsbGVkLCB0aGUKLSAgICAvLyBwcm9jZXNz
IHdvbid0IHRlcm1pbmF0ZSB1bmxlc3MgYSBjb3JyZXNwb25kaW5nIGRpc2FibGVUZXJtaW5hdGlv
biBjYWxsIGlzIG1hZGUuCi0gICAgdm9pZCBkaXNhYmxlVGVybWluYXRpb24oKTsKLSAgICB2b2lk
IGVuYWJsZVRlcm1pbmF0aW9uKCk7Ci0KLSAgICB2b2lkIGFkZE1lc3NhZ2VSZWNlaXZlcihJUEM6
OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6Ok1lc3NhZ2VSZWNlaXZl
ciYpOwotICAgIHZvaWQgYWRkTWVzc2FnZVJlY2VpdmVyKElQQzo6U3RyaW5nUmVmZXJlbmNlIG1l
c3NhZ2VSZWNlaXZlck5hbWUsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIElQQzo6TWVzc2FnZVJl
Y2VpdmVyJik7Ci0gICAgdm9pZCByZW1vdmVNZXNzYWdlUmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZl
cmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCk7Ci0gICAg
dm9pZCByZW1vdmVNZXNzYWdlUmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJl
Y2VpdmVyTmFtZSk7Ci0gICAgdm9pZCByZW1vdmVNZXNzYWdlUmVjZWl2ZXIoSVBDOjpNZXNzYWdl
UmVjZWl2ZXImKTsKLQotICAgIHZvaWQgc2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChib29s
KTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHZvaWQgc2V0QXBwbGljYXRpb25Jc0RhZW1v
bigpOwotICAgIHZvaWQgbGF1bmNoU2VydmljZXNDaGVja0luKCk7Ci0gICAgdm9pZCBzZXRRT1Mo
aW50IGxhdGVuY3lRT1MsIGludCB0aHJvdWdocHV0UU9TKTsKLSNlbmRpZgotCi0gICAgSVBDOjpD
b25uZWN0aW9uKiBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29u
bmVjdGlvbi5nZXQoKTsgfQotCi0gICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VS
ZWNlaXZlck1hcCgpIHsgcmV0dXJuIG1fbWVzc2FnZVJlY2VpdmVyTWFwOyB9Ci0KLSNpZiBQTEFU
Rk9STShNQUMpCi0gICAgc3RhdGljIGJvb2wgaXNTeXN0ZW1XZWJLaXQoKTsKLSNlbmRpZgotCi1w
cm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgQ2hpbGRQcm9jZXNzKCk7Ci0gICAgdmlydHVhbCB+Q2hp
bGRQcm9jZXNzKCk7Ci0KLSAgICB2b2lkIHNldFRlcm1pbmF0aW9uVGltZW91dChTZWNvbmRzIHNl
Y29uZHMpIHsgbV90ZXJtaW5hdGlvblRpbWVvdXQgPSBzZWNvbmRzOyB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgaW5pdGlhbGl6ZVByb2Nlc3MoY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25Q
YXJhbWV0ZXJzJik7Ci0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVQcm9jZXNzTmFtZShjb25z
dCBDaGlsZFByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmKTsKLSAgICB2aXJ0dWFsIHZv
aWQgaW5pdGlhbGl6ZVNhbmRib3goY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJh
bWV0ZXJzJiwgU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycyYpOwotICAgIHZpcnR1YWwg
dm9pZCBpbml0aWFsaXplQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24qKTsKLQotICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRUZXJtaW5hdGUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHRlcm1pbmF0
ZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIHN0b3BSdW5Mb29wKCk7Ci0KLSNpZiBVU0UoQVBQS0lU
KQotICAgIHN0YXRpYyB2b2lkIHN0b3BOU0FwcFJ1bkxvb3AoKTsKLSNlbmRpZgotICAgIAotI2lm
IFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFdFQlBST0NFU1NfTlNSVU5MT09QKQotICAgIHN0YXRp
YyB2b2lkIHN0b3BOU1J1bkxvb3AoKTsKLSNlbmRpZgotCi0gICAgdm9pZCBkaWRSZWNlaXZlTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKLQotICAgIHZv
aWQgcmVnaXN0ZXJVUkxTY2hlbWVTZXJ2aWNlV29ya2Vyc0NhbkhhbmRsZShjb25zdCBTdHJpbmcm
KSBjb25zdDsKLSNpZiBPUyhMSU5VWCkKLSAgICB2b2lkIGRpZFJlY2VpdmVNZW1vcnlQcmVzc3Vy
ZUV2ZW50KGJvb2wgaXNDcml0aWNhbCk7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkT3ZlcnJpZGVRdWFyYW50aW5lKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAg
Ly8gSVBDOjpNZXNzYWdlU2VuZGVyCi0gICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVy
Q29ubmVjdGlvbigpIG92ZXJyaWRlOwotICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5h
dGlvbklEKCkgb3ZlcnJpZGU7Ci0KLSAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudC4KLSAg
ICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0
cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBt
ZXNzYWdlTmFtZSkgZmluYWw7Ci0gICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBv
dmVycmlkZTsKLQotICAgIHZvaWQgc2h1dERvd24oKTsKLQotICAgIHZvaWQgdGVybWluYXRpb25U
aW1lckZpcmVkKCk7Ci0KLSAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwotICAgIHZvaWQg
cGxhdGZvcm1TdG9wUnVuTG9vcCgpOwotCi0gICAgLy8gVGhlIHRpbWVvdXQsIGluIHNlY29uZHMs
IGJlZm9yZSB0aGlzIHByb2Nlc3Mgd2lsbCBiZSB0ZXJtaW5hdGVkIGlmIHRlcm1pbmF0aW9uCi0g
ICAgLy8gaGFzIGJlZW4gZW5hYmxlZC4gSWYgdGhlIHRpbWVvdXQgaXMgMCBzZWNvbmRzLCB0aGUg
cHJvY2VzcyB3aWxsIGJlIHRlcm1pbmF0ZWQgaW1tZWRpYXRlbHkuCi0gICAgU2Vjb25kcyBtX3Rl
cm1pbmF0aW9uVGltZW91dDsKLQotICAgIC8vIEEgdGVybWluYXRpb24gY291bnRlcjsgd2hlbiB0
aGUgY291bnRlciByZWFjaGVzIHplcm8sIHRoZSBwcm9jZXNzIHdpbGwgYmUgdGVybWluYXRlZAot
ICAgIC8vIGFmdGVyIGEgZ2l2ZW4gcGVyaW9kIG9mIHRpbWUuCi0gICAgdW5zaWduZWQgbV90ZXJt
aW5hdGlvbkNvdW50ZXI7Ci0KLSAgICBSdW5Mb29wOjpUaW1lcjxDaGlsZFByb2Nlc3M+IG1fdGVy
bWluYXRpb25UaW1lcjsKLQotICAgIFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlv
bjsKLSAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCBtX21lc3NhZ2VSZWNlaXZlck1hcDsKLQot
ICAgIFVzZXJBY3Rpdml0eSBtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkOwotCi0jaWYgUExB
VEZPUk0oQ09DT0EpCi0gICAgT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBtX3ByaW9yaXR5Qm9v
c3RNZXNzYWdlOwotI2VuZGlmCi19OwotCi1zdHJ1Y3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRp
b25QYXJhbWV0ZXJzIHsKLSAgICBTdHJpbmcgdWlQcm9jZXNzTmFtZTsKLSAgICBTdHJpbmcgY2xp
ZW50SWRlbnRpZmllcjsKLSAgICBPcHRpb25hbDxXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllcj4g
cHJvY2Vzc0lkZW50aWZpZXI7Ci0gICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5l
Y3Rpb25JZGVudGlmaWVyOwotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGV4dHJhSW5pdGlh
bGl6YXRpb25EYXRhOwotICAgIENoaWxkUHJvY2Vzczo6UHJvY2Vzc1R5cGUgcHJvY2Vzc1R5cGU7
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgT1NPYmplY3RQdHI8eHBjX29iamVjdF90PiBwcmlv
cml0eUJvb3N0TWVzc2FnZTsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZiAvLyBDaGlsZFByb2Nlc3NfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YktpdC9TaGFyZWQvQ2hpbGRQcm9jZXNzLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0
eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9DaGlsZFByb2Nlc3MubWVzc2FnZXMuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvQ2hpbGRQcm9jZXNzLm1lc3NhZ2VzLmlu
CShyZXZpc2lvbiAyNDA1ODkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9DaGlsZFByb2Nlc3Mu
bWVzc2FnZXMuaW4JKG5vbmV4aXN0ZW50KQpAQCAtMSwzMSArMCwwIEBACi0jIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0j
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLW1lc3NhZ2VzIC0+IENoaWxkUHJvY2VzcyB7Ci0g
ICAgU2h1dERvd24oKQotICAgIFJlZ2lzdGVyVVJMU2NoZW1lU2VydmljZVdvcmtlcnNDYW5IYW5k
bGUoU3RyaW5nIHNjaGVtZSkKLSAgICBTZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKGJvb2wg
ZmxhZykKLQotI2lmIE9TKExJTlVYKQotICAgIHZvaWQgRGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJl
RXZlbnQoYm9vbCBpc0NyaXRpY2FsKQotI2VuZGlmCi19CkluZGV4OiBTb3VyY2UvV2ViS2l0L1No
YXJlZC9DaGlsZFByb2Nlc3NTdXBwbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9TaGFyZWQvQ2hpbGRQcm9jZXNzU3VwcGxlbWVudC5oCShyZXZpc2lvbiAyNDA1ODkpCisrKyBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9DaGlsZFByb2Nlc3NTdXBwbGVtZW50LmgJKG5vbmV4aXN0ZW50
KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDaGlsZFByb2Nlc3NTdXBw
bGVtZW50X2gKLSNkZWZpbmUgQ2hpbGRQcm9jZXNzU3VwcGxlbWVudF9oCi0KLW5hbWVzcGFjZSBJ
UEMgewotY2xhc3MgQ29ubmVjdGlvbjsKLX0gLy8gbmFtZXNwYWNlIElQQwotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotY2xhc3MgQ2hpbGRQcm9jZXNzU3VwcGxlbWVudCB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCB+Q2hpbGRQcm9jZXNzU3VwcGxlbWVudCgpCi0gICAgewotICAgIH0KLQotICAgIHZp
cnR1YWwgdm9pZCBpbml0aWFsaXplQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24qKQotICAgIHsK
LSAgICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIENoaWxkUHJv
Y2Vzc1N1cHBsZW1lbnRfaApJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvV2ViU1FMaXRlRGF0
YWJhc2VUcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJT
UUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwCShyZXZpc2lvbiAyNDA1ODkpCisrKyBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSwxNSArMzksNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIFdlYlNRTGl0ZURhdGFi
YXNlVHJhY2tlcjo6V2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyKE5ldHdvcmtQcm9jZXNzJiBwcm9j
ZXNzKQogICAgIDogbV9wcm9jZXNzKHByb2Nlc3MpCiAgICAgLCBtX2h5c3RlcmVzaXMoW3RoaXNd
KFBBTDo6SHlzdGVyZXNpc1N0YXRlIHN0YXRlKSB7IGh5c3RlcmVzaXNVcGRhdGVkKHN0YXRlKTsg
fSkKLSAgICAsIG1fY2hpbGRQcm9jZXNzVHlwZShDaGlsZFByb2Nlc3NUeXBlOjpOZXR3b3JrKQot
ewotICAgIFNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6c2V0Q2xpZW50KHRoaXMpOwotfQotCi1XZWJT
UUxpdGVEYXRhYmFzZVRyYWNrZXI6OldlYlNRTGl0ZURhdGFiYXNlVHJhY2tlcihXZWJQcm9jZXNz
JiBwcm9jZXNzKQotICAgIDogbV9wcm9jZXNzKHByb2Nlc3MpCi0gICAgLCBtX2h5c3RlcmVzaXMo
W3RoaXNdKFBBTDo6SHlzdGVyZXNpc1N0YXRlIHN0YXRlKSB7IGh5c3RlcmVzaXNVcGRhdGVkKHN0
YXRlKTsgfSkKLSAgICAsIG1fY2hpbGRQcm9jZXNzVHlwZShDaGlsZFByb2Nlc3NUeXBlOjpXZWJD
b250ZW50KQogewogICAgIFNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6c2V0Q2xpZW50KHRoaXMpOwog
fQpAQCAtNjgsMTQgKzU5LDcgQEAgdm9pZCBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXI6OmRpZEZp
bmlzaAogCiB2b2lkIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6aHlzdGVyZXNpc1VwZGF0ZWQo
UEFMOjpIeXN0ZXJlc2lzU3RhdGUgc3RhdGUpCiB7Ci0gICAgc3dpdGNoIChtX2NoaWxkUHJvY2Vz
c1R5cGUpIHsKLSAgICBjYXNlIENoaWxkUHJvY2Vzc1R5cGU6OldlYkNvbnRlbnQ6Ci0gICAgICAg
IG1fcHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzUHJveHk6OlNldElzSG9sZGluZ0xvY2tlZEZpbGVzKHN0YXRlID09IFBBTDo6SHlzdGVy
ZXNpc1N0YXRlOjpTdGFydGVkKSwgMCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2hpbGRQ
cm9jZXNzVHlwZTo6TmV0d29yazoKLSAgICAgICAgbV9wcm9jZXNzLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OlNldElzSG9sZGlu
Z0xvY2tlZEZpbGVzKHN0YXRlID09IFBBTDo6SHlzdGVyZXNpc1N0YXRlOjpTdGFydGVkKSwgMCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBtX3Byb2Nlc3MucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NQcm94eTo6U2V0SXNIb2xkaW5n
TG9ja2VkRmlsZXMoc3RhdGUgPT0gUEFMOjpIeXN0ZXJlc2lzU3RhdGU6OlN0YXJ0ZWQpLCAwKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaAkocmV2aXNpb24gMjQwNTg5KQorKysgU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi0jaWZuZGVmIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlcl9oCi0jZGVmaW5lIFdlYlNR
TGl0ZURhdGFiYXNlVHJhY2tlcl9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPFdlYkNvcmUv
U1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50Lmg+CiAjaW5jbHVkZSA8cGFsL0h5c3RlcmVzaXNB
Y3Rpdml0eS5oPgpAQCAtMzIsMTUgKzMxLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1j
bGFzcyBDaGlsZFByb2Nlc3M7CiBjbGFzcyBOZXR3b3JrUHJvY2VzczsKLWNsYXNzIFdlYlByb2Nl
c3M7CiAKIGNsYXNzIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlciA6IHB1YmxpYyBXZWJDb3JlOjpT
UUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdl
YlNRTGl0ZURhdGFiYXNlVHJhY2tlcikKIHB1YmxpYzoKICAgICBleHBsaWNpdCBXZWJTUUxpdGVE
YXRhYmFzZVRyYWNrZXIoTmV0d29ya1Byb2Nlc3MmKTsKLSAgICBleHBsaWNpdCBXZWJTUUxpdGVE
YXRhYmFzZVRyYWNrZXIoV2ViUHJvY2VzcyYpOwogCiAgICAgLy8gV2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2VUcmFja2VyQ2xpZW50CiAgICAgdm9pZCB3aWxsQmVnaW5GaXJzdFRyYW5zYWN0aW9uKCkg
b3ZlcnJpZGU7CkBAIC00OSwxMiArNDUsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQg
aHlzdGVyZXNpc1VwZGF0ZWQoUEFMOjpIeXN0ZXJlc2lzU3RhdGUpOwogCi0gICAgQ2hpbGRQcm9j
ZXNzJiBtX3Byb2Nlc3M7CisgICAgTmV0d29ya1Byb2Nlc3MmIG1fcHJvY2VzczsKICAgICBQQUw6
Okh5c3RlcmVzaXNBY3Rpdml0eSBtX2h5c3RlcmVzaXM7Ci0gICAgZW51bSBjbGFzcyBDaGlsZFBy
b2Nlc3NUeXBlIHsgTmV0d29yaywgV2ViQ29udGVudCB9OwotICAgIENoaWxkUHJvY2Vzc1R5cGUg
bV9jaGlsZFByb2Nlc3NUeXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRp
ZiAvLyBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJfaApJbmRleDogU291cmNlL1dlYktpdC9TaGFy
ZWQvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25NYW5hZ2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFn
ZXIuY3BwCShyZXZpc2lvbiAyNDA1ODkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BdXRoZW50
aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5
ICsyNyw5IEBACiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25NYW5hZ2VyLmgiCiAKICNpbmNsdWRl
ICJBdXRoZW50aWNhdGlvbk1hbmFnZXJNZXNzYWdlcy5oIgotI2luY2x1ZGUgIkNoaWxkUHJvY2Vz
cy5oIgogI2luY2x1ZGUgIkRvd25sb2FkLmgiCiAjaW5jbHVkZSAiRG93bmxvYWRQcm94eU1lc3Nh
Z2VzLmgiCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJv
Y2Vzc1Byb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJQZW5kaW5nRG93bmxvYWQuaCIKICNpbmNs
dWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKQEAgLTYwLDcgKzYwLDcgQEAgY29uc3QgY2hh
ciogQXV0aGVudGljYXRpb25NYW5hZ2VyOjpzdXBwbAogICAgIHJldHVybiAiQXV0aGVudGljYXRp
b25NYW5hZ2VyIjsKIH0KIAotQXV0aGVudGljYXRpb25NYW5hZ2VyOjpBdXRoZW50aWNhdGlvbk1h
bmFnZXIoQ2hpbGRQcm9jZXNzJiBwcm9jZXNzKQorQXV0aGVudGljYXRpb25NYW5hZ2VyOjpBdXRo
ZW50aWNhdGlvbk1hbmFnZXIoTmV0d29ya1Byb2Nlc3MmIHByb2Nlc3MpCiAgICAgOiBtX3Byb2Nl
c3MocHJvY2VzcykKIHsKICAgICBtX3Byb2Nlc3MuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpBdXRoZW50aWNhdGlvbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwpJ
bmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25N
YW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvQXV0aGVudGljYXRp
b24vQXV0aGVudGljYXRpb25NYW5hZ2VyLmgJKHJldmlzaW9uIDI0MDU4OSkKKysrIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KIAotI2lmbmRlZiBBdXRoZW50aWNhdGlvbk1hbmFnZXJfaAotI2RlZmluZSBB
dXRoZW50aWNhdGlvbk1hbmFnZXJfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJNZXNzYWdl
UmVjZWl2ZXIuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQuaCIKQEAgLTQ2
LDkgKzQ1LDkgQEAgY2xhc3MgQ3JlZGVudGlhbDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNs
YXNzIENoaWxkUHJvY2VzczsKIGNsYXNzIERvd25sb2FkOwogY2xhc3MgRG93bmxvYWRJRDsKK2Ns
YXNzIE5ldHdvcmtQcm9jZXNzOwogY2xhc3MgV2ViRnJhbWU7CiAKIGVudW0gY2xhc3MgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiA6IHVpbnQ4X3Q7CkBAIC01Nyw3ICs1Niw3IEBA
IHVzaW5nIENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyID0gQ29tcGwKIGNsYXNzIEF1dGhlbnRp
Y2F0aW9uTWFuYWdlciA6IHB1YmxpYyBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQsIHB1YmxpYyBJ
UEM6Ok1lc3NhZ2VSZWNlaXZlciwgcHVibGljIENhbk1ha2VXZWFrUHRyPEF1dGhlbnRpY2F0aW9u
TWFuYWdlcj4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEF1dGhlbnRpY2F0aW9uTWFuYWdl
cik7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQXV0aGVudGljYXRpb25NYW5hZ2VyKENoaWxkUHJv
Y2VzcyYpOworICAgIGV4cGxpY2l0IEF1dGhlbnRpY2F0aW9uTWFuYWdlcihOZXR3b3JrUHJvY2Vz
cyYpOwogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7CiAKQEAgLTg4
LDExICs4Nyw5IEBAIHByaXZhdGU6CiAKICAgICBWZWN0b3I8dWludDY0X3Q+IGNvYWxlc2NlQ2hh
bGxlbmdlc01hdGNoaW5nKHVpbnQ2NF90IGNoYWxsZW5nZUlEKSBjb25zdDsKIAotICAgIENoaWxk
UHJvY2VzcyYgbV9wcm9jZXNzOworICAgIE5ldHdvcmtQcm9jZXNzJiBtX3Byb2Nlc3M7CiAKICAg
ICBIYXNoTWFwPHVpbnQ2NF90LCBDaGFsbGVuZ2U+IG1fY2hhbGxlbmdlczsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gQXV0aGVudGljYXRpb25NYW5hZ2VyX2gKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL0F1eGlsaWFyeVByb2Nlc3NDb2NvYS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9BdXhpbGlhcnlQcm9jZXNz
Q29jb2EubW0JKHJldmlzaW9uIDI0MDU4OSkJKGZyb20gU291cmNlL1dlYktpdC9TaGFyZWQvQ29j
b2EvQ2hpbGRQcm9jZXNzQ29jb2EubW06MjQwNTg5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQv
Q29jb2EvQXV4aWxpYXJ5UHJvY2Vzc0NvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkNoaWxkUHJv
Y2Vzcy5oIgorCisjaW1wb3J0ICJXS0NyYXNoUmVwb3J0ZXIuaCIKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3ZvaWQgQ2hpbGRQcm9jZXNzOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBD
OjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpCit7CisgICAgc2V0Q3Jhc2hSZXBvcnRBcHBs
aWNhdGlvblNwZWNpZmljSW5mb3JtYXRpb24oKF9fYnJpZGdlIENGU3RyaW5nUmVmKVtOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAiUmVjZWl2ZWQgaW52YWxpZCBtZXNzYWdlOiAnJXM6OiVzJyIs
IG1lc3NhZ2VSZWNlaXZlck5hbWUudG9TdHJpbmcoKS5kYXRhKCksIG1lc3NhZ2VOYW1lLnRvU3Ry
aW5nKCkuZGF0YSgpXSk7CisgICAgQ1JBU0goKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYktp
dC9TaGFyZWQvQ29jb2EvQXV4aWxpYXJ5UHJvY2Vzc0NvY29hLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL0F1eGlsaWFyeVByb2Nlc3NDb2NvYS5tbQkocmV2aXNp
b24gMjQwNTg5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvQXV4aWxpYXJ5UHJvY2Vz
c0NvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMyArMjQsMTMgQEAKICAqLwogCiAjaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkNoaWxkUHJvY2Vzcy5oIgorI2ltcG9ydCAiQXV4aWxp
YXJ5UHJvY2Vzcy5oIgogCiAjaW1wb3J0ICJXS0NyYXNoUmVwb3J0ZXIuaCIKIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKLXZvaWQgQ2hpbGRQcm9jZXNzOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFt
ZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpCit2b2lkIEF1eGlsaWFyeVByb2Nl
c3M6OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmlu
Z1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNz
YWdlTmFtZSkKIHsKICAgICBzZXRDcmFzaFJlcG9ydEFwcGxpY2F0aW9uU3BlY2lmaWNJbmZvcm1h
dGlvbigoX19icmlkZ2UgQ0ZTdHJpbmdSZWYpW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJS
ZWNlaXZlZCBpbnZhbGlkIG1lc3NhZ2U6ICclczo6JXMnIiwgbWVzc2FnZVJlY2VpdmVyTmFtZS50
b1N0cmluZygpLmRhdGEoKSwgbWVzc2FnZU5hbWUudG9TdHJpbmcoKS5kYXRhKCldKTsKICAgICBD
UkFTSCgpOwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvQ2hpbGRQcm9jZXNzQ29j
b2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvQ2hpbGRQcm9j
ZXNzQ29jb2EubW0JKHJldmlzaW9uIDI0MDU4OSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL0Nv
Y29hL0NoaWxkUHJvY2Vzc0NvY29hLm1tCShub25leGlzdGVudCkKQEAgLTEsMzkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiQ2hpbGRQcm9jZXNzLmgi
Ci0KLSNpbXBvcnQgIldLQ3Jhc2hSZXBvcnRlci5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
dm9pZCBDaGlsZFByb2Nlc3M6OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmlu
Z1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkKLXsKLSAgICBzZXRDcmFzaFJlcG9ydEFwcGxpY2F0aW9u
U3BlY2lmaWNJbmZvcm1hdGlvbigoX19icmlkZ2UgQ0ZTdHJpbmdSZWYpW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCJSZWNlaXZlZCBpbnZhbGlkIG1lc3NhZ2U6ICclczo6JXMnIiwgbWVzc2Fn
ZVJlY2VpdmVyTmFtZS50b1N0cmluZygpLmRhdGEoKSwgbWVzc2FnZU5hbWUudG9TdHJpbmcoKS5k
YXRhKCldKTsKLSAgICBDUkFTSCgpOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRyeVBvaW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGll
cy9tYWMvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQb2ludC5oCShyZXZpc2lvbiAyNDA1ODkp
CisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2
aWNlL1hQQ1NlcnZpY2VFbnRyeVBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcg
QEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbXBvcnQgIkNoaWxkUHJvY2Vzcy5oIgorI2ltcG9ydCAi
QXV4aWxpYXJ5UHJvY2Vzcy5oIgogI2ltcG9ydCAiV2ViS2l0MkluaXRpYWxpemUuaCIKICNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0V4ZWN1dGFibGVBbGxvY2F0b3IuaD4KICNpbXBvcnQgPHd0Zi9P
U09iamVjdFB0ci5oPgpAQCAtNjgsNyArNjgsNyBAQCBwcm90ZWN0ZWQ6CiB9OwogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBYUENTZXJ2aWNlVHlwZT4KLXZvaWQgaW5pdGlhbGl6ZUNoaWxkUHJvY2VzcyhD
aGlsZFByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQordm9pZCBp
bml0aWFsaXplQXV4aWxpYXJ5UHJvY2VzcyhBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25Q
YXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKIHsKICAgICBYUENTZXJ2aWNlVHlwZTo6c2luZ2xldG9u
KCkuaW5pdGlhbGl6ZShXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKIH0KQEAgLTkyLDcgKzkyLDcgQEAg
QUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAgICAgaWYgKCFkZWxlZ2F0ZS5jaGVj
a0VudGl0bGVtZW50cygpKQogICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CiAKLSAgICBDaGls
ZFByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBBdXhpbGlh
cnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CiAgICAgaWYgKHBy
aW9yaXR5Qm9vc3RNZXNzYWdlKQogICAgICAgICBwYXJhbWV0ZXJzLnByaW9yaXR5Qm9vc3RNZXNz
YWdlID0gcHJpb3JpdHlCb29zdE1lc3NhZ2U7CiAKQEAgLTEyNSw3ICsxMjUsNyBAQCBBTExPV19E
RVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIAogICAgIHBhcmFtZXRlcnMucHJvY2Vzc1R5cGUg
PSBYUENTZXJ2aWNlVHlwZTo6cHJvY2Vzc1R5cGU7CiAKLSAgICBpbml0aWFsaXplQ2hpbGRQcm9j
ZXNzPFhQQ1NlcnZpY2VUeXBlPihXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpbml0aWFsaXpl
QXV4aWxpYXJ5UHJvY2VzczxYUENTZXJ2aWNlVHlwZT4oV1RGTW92ZShwYXJhbWV0ZXJzKSk7CiB9
CiAKIGludCBYUENTZXJ2aWNlTWFpbihpbnQsIGNvbnN0IGNoYXIqKik7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1NoYXJlZC9pb3MvQXV4aWxpYXJ5UHJvY2Vzc0lPUy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9pb3MvQXV4aWxpYXJ5UHJvY2Vzc0lPUy5tbQkocmV2aXNpb24g
MjQwNTg5KQkoZnJvbSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9pb3MvQ2hpbGRQcm9jZXNzSU9TLm1t
OjI0MDU4OSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL2lvcy9BdXhpbGlhcnlQcm9jZXNzSU9T
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZP
Uk0oSU9TTUFDKQorCisjaW1wb3J0ICJDaGlsZFByb2Nlc3MuaCIKKworI2ltcG9ydCAiU2FuZGJv
eEluaXRpYWxpemF0aW9uUGFyYW1ldGVycy5oIgorI2ltcG9ydCAiWFBDU2VydmljZUVudHJ5UG9p
bnQuaCIKKyNpbXBvcnQgPFdlYkNvcmUvRmxvYXRpbmdQb2ludEVudmlyb25tZW50Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL1N5c3RlbVZlcnNpb24uaD4KKyNpbXBvcnQgPG1hY2gvbWFjaC5oPgorI2lt
cG9ydCA8bWFjaC90YXNrLmg+CisjaW1wb3J0IDxwd2QuaD4KKyNpbXBvcnQgPHN0ZGxpYi5oPgor
I2ltcG9ydCA8c3lzZXhpdHMuaD4KKyNpbXBvcnQgPHd0Zi9GaWxlU3lzdGVtLmg+CisKKyNpZiBF
TkFCTEUoTUFOVUFMX1NBTkRCT1hJTkcpCisjaW1wb3J0IDx3dGYvc3BpL2Rhcndpbi9TYW5kYm94
U1BJLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgQ2hpbGRQcm9jZXNz
OjpwbGF0Zm9ybUluaXRpYWxpemUoKQoreworICAgIEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudCYg
ZmxvYXRpbmdQb2ludEVudmlyb25tZW50ID0gRmxvYXRpbmdQb2ludEVudmlyb25tZW50OjpzaW5n
bGV0b24oKTsgCisgICAgZmxvYXRpbmdQb2ludEVudmlyb25tZW50LmVuYWJsZURlbm9ybWFsU3Vw
cG9ydCgpOyAKKyAgICBmbG9hdGluZ1BvaW50RW52aXJvbm1lbnQuc2F2ZU1haW5UaHJlYWRFbnZp
cm9ubWVudCgpOyAKKyAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNoYW5nZUN1
cnJlbnREaXJlY3RvcnlQYXRoOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlUGF0aF1dOwor
fQorCit2b2lkIENoaWxkUHJvY2Vzczo6aW5pdGlhbGl6ZVNhbmRib3goY29uc3QgQ2hpbGRQcm9j
ZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBTYW5kYm94SW5pdGlhbGl6
YXRpb25QYXJhbWV0ZXJzJiBzYW5kYm94UGFyYW1ldGVycykKK3sKKyNpZiBFTkFCTEUoTUFOVUFM
X1NBTkRCT1hJTkcpCisgICAgTlNCdW5kbGUgKndlYmtpdDJCdW5kbGUgPSBbTlNCdW5kbGUgYnVu
ZGxlRm9yQ2xhc3M6TlNDbGFzc0Zyb21TdHJpbmcoQCJXS1dlYlZpZXciKV07CisgICAgU3RyaW5n
IGRlZmF1bHRQcm9maWxlUGF0aCA9IFt3ZWJraXQyQnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpbW05T
QnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIG9mVHlwZTpAInNiIl07CisgICAg
aWYgKHNhbmRib3hQYXJhbWV0ZXJzLnVzZXJEaXJlY3RvcnlTdWZmaXgoKS5pc051bGwoKSkgewor
ICAgICAgICBTdHJpbmcgZGVmYXVsdFVzZXJEaXJlY3RvcnlTdWZmaXggPSBtYWtlU3RyaW5nKFN0
cmluZyhbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdKSwgJysnLCBwYXJh
bWV0ZXJzLmNsaWVudElkZW50aWZpZXIpOworICAgICAgICBzYW5kYm94UGFyYW1ldGVycy5zZXRV
c2VyRGlyZWN0b3J5U3VmZml4KGRlZmF1bHRVc2VyRGlyZWN0b3J5U3VmZml4KTsKKyAgICB9CisK
KyNpZiAhUExBVEZPUk0oSU9TTUFDKQorICAgIFN0cmluZyBzYW5kYm94SW1wb3J0UGF0aCA9ICIv
dXNyL2xvY2FsL3NoYXJlL3NhbmRib3gvaW1wb3J0cyI7CisgICAgc2FuZGJveFBhcmFtZXRlcnMu
YWRkUGF0aFBhcmFtZXRlcigiSU1QT1JUX0RJUiIsIEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbihzYW5kYm94SW1wb3J0UGF0aCkuZGF0YSgpKTsKKyNlbmRpZgorCisgICAgc3dp
dGNoIChzYW5kYm94UGFyYW1ldGVycy5tb2RlKCkpIHsKKyAgICBjYXNlIFNhbmRib3hJbml0aWFs
aXphdGlvblBhcmFtZXRlcnM6OlVzZURlZmF1bHRTYW5kYm94UHJvZmlsZVBhdGg6CisgICAgY2Fz
ZSBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzOjpVc2VPdmVycmlkZVNhbmRib3hQcm9m
aWxlUGF0aDogeworICAgICAgICBTdHJpbmcgc2FuZGJveFByb2ZpbGVQYXRoID0gc2FuZGJveFBh
cmFtZXRlcnMubW9kZSgpID09IFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnM6OlVzZURl
ZmF1bHRTYW5kYm94UHJvZmlsZVBhdGggPyBkZWZhdWx0UHJvZmlsZVBhdGggOiBzYW5kYm94UGFy
YW1ldGVycy5vdmVycmlkZVNhbmRib3hQcm9maWxlUGF0aCgpOworICAgICAgICBpZiAoIXNhbmRi
b3hQcm9maWxlUGF0aC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIENTdHJpbmcgcHJvZmlsZVBh
dGggPSBGaWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc2FuZGJveFByb2ZpbGVQ
YXRoKTsKKyAgICAgICAgICAgIGNoYXIqIGVycm9yQnVmOworICAgICAgICAgICAgQUxMT1dfREVQ
UkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KKyAgICAgICAgICAgIGlmIChzYW5kYm94X2luaXRf
d2l0aF9wYXJhbWV0ZXJzKHByb2ZpbGVQYXRoLmRhdGEoKSwgU0FOREJPWF9OQU1FRF9FWFRFUk5B
TCwgc2FuZGJveFBhcmFtZXRlcnMubmFtZWRQYXJhbWV0ZXJBcnJheSgpLCAmZXJyb3JCdWYpKSB7
CisgICAgICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECisgICAg
ICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCIlczogQ291bGRuJ3QgaW5pdGlhbGl6ZSBzYW5kYm94
IHByb2ZpbGUgWyVzXSwgZXJyb3IgJyVzJ1xuIiwgZ2V0cHJvZ25hbWUoKSwgcHJvZmlsZVBhdGgu
ZGF0YSgpLCBlcnJvckJ1Zik7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIGNv
dW50ID0gc2FuZGJveFBhcmFtZXRlcnMuY291bnQoKTsgaSAhPSBjb3VudDsgKytpKQorICAgICAg
ICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIiVzPSVzXG4iLCBzYW5kYm94UGFyYW1ldGVycy5u
YW1lKGkpLCBzYW5kYm94UGFyYW1ldGVycy52YWx1ZShpKSk7CisgICAgICAgICAgICAgICAgZXhp
dChFWF9OT1BFUk0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVyczo6VXNlU2Fu
ZGJveFByb2ZpbGU6IHsKKyAgICAgICAgY2hhciogZXJyb3JCdWY7CisgICAgICAgIEFMTE9XX0RF
UFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCisgICAgICAgIGlmIChzYW5kYm94X2luaXRfd2l0
aF9wYXJhbWV0ZXJzKHNhbmRib3hQYXJhbWV0ZXJzLnNhbmRib3hQcm9maWxlKCkudXRmOCgpLmRh
dGEoKSwgMCwgc2FuZGJveFBhcmFtZXRlcnMubmFtZWRQYXJhbWV0ZXJBcnJheSgpLCAmZXJyb3JC
dWYpKSB7CisgICAgICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKKyAg
ICAgICAgICAgIFdURkxvZ0Fsd2F5cygiJXM6IENvdWxkbid0IGluaXRpYWxpemUgc2FuZGJveCBw
cm9maWxlLCBlcnJvciAnJXMnXG4iLCBnZXRwcm9nbmFtZSgpLCBlcnJvckJ1Zik7CisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMCwgY291bnQgPSBzYW5kYm94UGFyYW1ldGVycy5jb3VudCgp
OyBpICE9IGNvdW50OyArK2kpCisgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCIlcz0lc1xu
Iiwgc2FuZGJveFBhcmFtZXRlcnMubmFtZShpKSwgc2FuZGJveFBhcmFtZXRlcnMudmFsdWUoaSkp
OworICAgICAgICAgICAgZXhpdChFWF9OT1BFUk0pOworICAgICAgICB9CisKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHBhcmFtZXRlcnMpOwor
ICAgIFVOVVNFRF9QQVJBTShzYW5kYm94UGFyYW1ldGVycyk7CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQorCit2b2lkIENoaWxkUHJvY2Vzczo6c2V0UU9TKGlu
dCwgaW50KQoreworCit9CisKK3ZvaWQgQ2hpbGRQcm9jZXNzOjpwbGF0Zm9ybVN0b3BSdW5Mb29w
KCkKK3sKKyAgICBYUENTZXJ2aWNlRXhpdChXVEZNb3ZlKG1fcHJpb3JpdHlCb29zdE1lc3NhZ2Up
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dl
YktpdC9TaGFyZWQvaW9zL0F1eGlsaWFyeVByb2Nlc3NJT1MubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9TaGFyZWQvaW9zL0F1eGlsaWFyeVByb2Nlc3NJT1MubW0JKHJldmlzaW9uIDI0
MDU4OSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL2lvcy9BdXhpbGlhcnlQcm9jZXNzSU9TLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMSArMjQsMTAgQEAKICAqLwogCiAjaW1wb3J0ICJjb25m
aWcuaCIKKyNpbXBvcnQgIkF1eGlsaWFyeVByb2Nlc3MuaCIKIAogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpICYmICFQTEFURk9STShJT1NNQUMpCiAKLSNpbXBvcnQgIkNoaWxkUHJvY2Vzcy5oIgot
CiAjaW1wb3J0ICJTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzLmgiCiAjaW1wb3J0ICJY
UENTZXJ2aWNlRW50cnlQb2ludC5oIgogI2ltcG9ydCA8V2ViQ29yZS9GbG9hdGluZ1BvaW50RW52
aXJvbm1lbnQuaD4KQEAgLTQ2LDcgKzQ1LDcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXZv
aWQgQ2hpbGRQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemUoKQordm9pZCBBdXhpbGlhcnlQcm9j
ZXNzOjpwbGF0Zm9ybUluaXRpYWxpemUoKQogewogICAgIEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVu
dCYgZmxvYXRpbmdQb2ludEVudmlyb25tZW50ID0gRmxvYXRpbmdQb2ludEVudmlyb25tZW50Ojpz
aW5nbGV0b24oKTsgCiAgICAgZmxvYXRpbmdQb2ludEVudmlyb25tZW50LmVuYWJsZURlbm9ybWFs
U3VwcG9ydCgpOyAKQEAgLTU0LDcgKzUzLDcgQEAgdm9pZCBDaGlsZFByb2Nlc3M6OnBsYXRmb3Jt
SW5pdGlhbGl6ZSgpCiAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBjaGFuZ2VD
dXJyZW50RGlyZWN0b3J5UGF0aDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZVBhdGhdXTsK
IH0KIAotdm9pZCBDaGlsZFByb2Nlc3M6OmluaXRpYWxpemVTYW5kYm94KGNvbnN0IENoaWxkUHJv
Y2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycywgU2FuZGJveEluaXRpYWxp
emF0aW9uUGFyYW1ldGVycyYgc2FuZGJveFBhcmFtZXRlcnMpCit2b2lkIEF1eGlsaWFyeVByb2Nl
c3M6OmluaXRpYWxpemVTYW5kYm94KGNvbnN0IEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlv
blBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMm
IHNhbmRib3hQYXJhbWV0ZXJzKQogewogI2lmIEVOQUJMRShNQU5VQUxfU0FOREJPWElORykKICAg
ICBOU0J1bmRsZSAqd2Via2l0MkJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpOU0Ns
YXNzRnJvbVN0cmluZyhAIldLV2ViVmlldyIpXTsKQEAgLTEwOSwxMiArMTA4LDEyIEBAIHZvaWQg
Q2hpbGRQcm9jZXNzOjppbml0aWFsaXplU2FuZGJveChjb24KICNlbmRpZgogfQogCi12b2lkIENo
aWxkUHJvY2Vzczo6c2V0UU9TKGludCwgaW50KQordm9pZCBBdXhpbGlhcnlQcm9jZXNzOjpzZXRR
T1MoaW50LCBpbnQpCiB7CiAKIH0KIAotdm9pZCBDaGlsZFByb2Nlc3M6OnBsYXRmb3JtU3RvcFJ1
bkxvb3AoKQordm9pZCBBdXhpbGlhcnlQcm9jZXNzOjpwbGF0Zm9ybVN0b3BSdW5Mb29wKCkKIHsK
ICAgICBYUENTZXJ2aWNlRXhpdChXVEZNb3ZlKG1fcHJpb3JpdHlCb29zdE1lc3NhZ2UpKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL2lvcy9DaGlsZFByb2Nlc3NJT1MubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvaW9zL0NoaWxkUHJvY2Vzc0lPUy5tbQkocmV2
aXNpb24gMjQwNTg5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvaW9zL0NoaWxkUHJvY2Vzc0lP
Uy5tbQkobm9uZXhpc3RlbnQpCkBAIC0xLDEyNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2ltcG9ydCAiY29uZmlnLmgiCi0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZP
Uk0oSU9TTUFDKQotCi0jaW1wb3J0ICJDaGlsZFByb2Nlc3MuaCIKLQotI2ltcG9ydCAiU2FuZGJv
eEluaXRpYWxpemF0aW9uUGFyYW1ldGVycy5oIgotI2ltcG9ydCAiWFBDU2VydmljZUVudHJ5UG9p
bnQuaCIKLSNpbXBvcnQgPFdlYkNvcmUvRmxvYXRpbmdQb2ludEVudmlyb25tZW50Lmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL1N5c3RlbVZlcnNpb24uaD4KLSNpbXBvcnQgPG1hY2gvbWFjaC5oPgotI2lt
cG9ydCA8bWFjaC90YXNrLmg+Ci0jaW1wb3J0IDxwd2QuaD4KLSNpbXBvcnQgPHN0ZGxpYi5oPgot
I2ltcG9ydCA8c3lzZXhpdHMuaD4KLSNpbXBvcnQgPHd0Zi9GaWxlU3lzdGVtLmg+Ci0KLSNpZiBF
TkFCTEUoTUFOVUFMX1NBTkRCT1hJTkcpCi0jaW1wb3J0IDx3dGYvc3BpL2Rhcndpbi9TYW5kYm94
U1BJLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXZvaWQgQ2hpbGRQcm9jZXNz
OjpwbGF0Zm9ybUluaXRpYWxpemUoKQotewotICAgIEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudCYg
ZmxvYXRpbmdQb2ludEVudmlyb25tZW50ID0gRmxvYXRpbmdQb2ludEVudmlyb25tZW50OjpzaW5n
bGV0b24oKTsgCi0gICAgZmxvYXRpbmdQb2ludEVudmlyb25tZW50LmVuYWJsZURlbm9ybWFsU3Vw
cG9ydCgpOyAKLSAgICBmbG9hdGluZ1BvaW50RW52aXJvbm1lbnQuc2F2ZU1haW5UaHJlYWRFbnZp
cm9ubWVudCgpOyAKLSAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNoYW5nZUN1
cnJlbnREaXJlY3RvcnlQYXRoOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlUGF0aF1dOwot
fQotCi12b2lkIENoaWxkUHJvY2Vzczo6aW5pdGlhbGl6ZVNhbmRib3goY29uc3QgQ2hpbGRQcm9j
ZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBTYW5kYm94SW5pdGlhbGl6
YXRpb25QYXJhbWV0ZXJzJiBzYW5kYm94UGFyYW1ldGVycykKLXsKLSNpZiBFTkFCTEUoTUFOVUFM
X1NBTkRCT1hJTkcpCi0gICAgTlNCdW5kbGUgKndlYmtpdDJCdW5kbGUgPSBbTlNCdW5kbGUgYnVu
ZGxlRm9yQ2xhc3M6TlNDbGFzc0Zyb21TdHJpbmcoQCJXS1dlYlZpZXciKV07Ci0gICAgU3RyaW5n
IGRlZmF1bHRQcm9maWxlUGF0aCA9IFt3ZWJraXQyQnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpbW05T
QnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIG9mVHlwZTpAInNiIl07Ci0gICAg
aWYgKHNhbmRib3hQYXJhbWV0ZXJzLnVzZXJEaXJlY3RvcnlTdWZmaXgoKS5pc051bGwoKSkgewot
ICAgICAgICBTdHJpbmcgZGVmYXVsdFVzZXJEaXJlY3RvcnlTdWZmaXggPSBtYWtlU3RyaW5nKFN0
cmluZyhbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdKSwgJysnLCBwYXJh
bWV0ZXJzLmNsaWVudElkZW50aWZpZXIpOwotICAgICAgICBzYW5kYm94UGFyYW1ldGVycy5zZXRV
c2VyRGlyZWN0b3J5U3VmZml4KGRlZmF1bHRVc2VyRGlyZWN0b3J5U3VmZml4KTsKLSAgICB9Ci0K
LSNpZiAhUExBVEZPUk0oSU9TTUFDKQotICAgIFN0cmluZyBzYW5kYm94SW1wb3J0UGF0aCA9ICIv
dXNyL2xvY2FsL3NoYXJlL3NhbmRib3gvaW1wb3J0cyI7Ci0gICAgc2FuZGJveFBhcmFtZXRlcnMu
YWRkUGF0aFBhcmFtZXRlcigiSU1QT1JUX0RJUiIsIEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbihzYW5kYm94SW1wb3J0UGF0aCkuZGF0YSgpKTsKLSNlbmRpZgotCi0gICAgc3dp
dGNoIChzYW5kYm94UGFyYW1ldGVycy5tb2RlKCkpIHsKLSAgICBjYXNlIFNhbmRib3hJbml0aWFs
aXphdGlvblBhcmFtZXRlcnM6OlVzZURlZmF1bHRTYW5kYm94UHJvZmlsZVBhdGg6Ci0gICAgY2Fz
ZSBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzOjpVc2VPdmVycmlkZVNhbmRib3hQcm9m
aWxlUGF0aDogewotICAgICAgICBTdHJpbmcgc2FuZGJveFByb2ZpbGVQYXRoID0gc2FuZGJveFBh
cmFtZXRlcnMubW9kZSgpID09IFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnM6OlVzZURl
ZmF1bHRTYW5kYm94UHJvZmlsZVBhdGggPyBkZWZhdWx0UHJvZmlsZVBhdGggOiBzYW5kYm94UGFy
YW1ldGVycy5vdmVycmlkZVNhbmRib3hQcm9maWxlUGF0aCgpOwotICAgICAgICBpZiAoIXNhbmRi
b3hQcm9maWxlUGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIENTdHJpbmcgcHJvZmlsZVBh
dGggPSBGaWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc2FuZGJveFByb2ZpbGVQ
YXRoKTsKLSAgICAgICAgICAgIGNoYXIqIGVycm9yQnVmOwotICAgICAgICAgICAgQUxMT1dfREVQ
UkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICAgICAgICAgIGlmIChzYW5kYm94X2luaXRf
d2l0aF9wYXJhbWV0ZXJzKHByb2ZpbGVQYXRoLmRhdGEoKSwgU0FOREJPWF9OQU1FRF9FWFRFUk5B
TCwgc2FuZGJveFBhcmFtZXRlcnMubmFtZWRQYXJhbWV0ZXJBcnJheSgpLCAmZXJyb3JCdWYpKSB7
Ci0gICAgICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi0gICAg
ICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCIlczogQ291bGRuJ3QgaW5pdGlhbGl6ZSBzYW5kYm94
IHByb2ZpbGUgWyVzXSwgZXJyb3IgJyVzJ1xuIiwgZ2V0cHJvZ25hbWUoKSwgcHJvZmlsZVBhdGgu
ZGF0YSgpLCBlcnJvckJ1Zik7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIGNv
dW50ID0gc2FuZGJveFBhcmFtZXRlcnMuY291bnQoKTsgaSAhPSBjb3VudDsgKytpKQotICAgICAg
ICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIiVzPSVzXG4iLCBzYW5kYm94UGFyYW1ldGVycy5u
YW1lKGkpLCBzYW5kYm94UGFyYW1ldGVycy52YWx1ZShpKSk7Ci0gICAgICAgICAgICAgICAgZXhp
dChFWF9OT1BFUk0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVyczo6VXNlU2Fu
ZGJveFByb2ZpbGU6IHsKLSAgICAgICAgY2hhciogZXJyb3JCdWY7Ci0gICAgICAgIEFMTE9XX0RF
UFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgICAgIGlmIChzYW5kYm94X2luaXRfd2l0
aF9wYXJhbWV0ZXJzKHNhbmRib3hQYXJhbWV0ZXJzLnNhbmRib3hQcm9maWxlKCkudXRmOCgpLmRh
dGEoKSwgMCwgc2FuZGJveFBhcmFtZXRlcnMubmFtZWRQYXJhbWV0ZXJBcnJheSgpLCAmZXJyb3JC
dWYpKSB7Ci0gICAgICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLSAg
ICAgICAgICAgIFdURkxvZ0Fsd2F5cygiJXM6IENvdWxkbid0IGluaXRpYWxpemUgc2FuZGJveCBw
cm9maWxlLCBlcnJvciAnJXMnXG4iLCBnZXRwcm9nbmFtZSgpLCBlcnJvckJ1Zik7Ci0gICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMCwgY291bnQgPSBzYW5kYm94UGFyYW1ldGVycy5jb3VudCgp
OyBpICE9IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCIlcz0lc1xu
Iiwgc2FuZGJveFBhcmFtZXRlcnMubmFtZShpKSwgc2FuZGJveFBhcmFtZXRlcnMudmFsdWUoaSkp
OwotICAgICAgICAgICAgZXhpdChFWF9OT1BFUk0pOwotICAgICAgICB9Ci0KLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHBhcmFtZXRlcnMpOwot
ICAgIFVOVVNFRF9QQVJBTShzYW5kYm94UGFyYW1ldGVycyk7Ci0gICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotfQotCi12b2lkIENoaWxkUHJvY2Vzczo6c2V0UU9TKGlu
dCwgaW50KQotewotCi19Ci0KLXZvaWQgQ2hpbGRQcm9jZXNzOjpwbGF0Zm9ybVN0b3BSdW5Mb29w
KCkKLXsKLSAgICBYUENTZXJ2aWNlRXhpdChXVEZNb3ZlKG1fcHJpb3JpdHlCb29zdE1lc3NhZ2Up
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dl
YktpdC9TaGFyZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW0JKHJldmlzaW9uIDI0
MDU4OSkJKGZyb20gU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0NoaWxkUHJvY2Vzc01hYy5tbToy
NDA1ODkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXV4aWxpYXJ5UHJvY2Vzc01hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKElPU01BQykK
KyNpbXBvcnQgIkNoaWxkUHJvY2Vzcy5oIgorCisjaW1wb3J0ICJDb2RlU2lnbmluZy5oIgorI2lt
cG9ydCAiUXVhcmFudGluZVNQSS5oIgorI2ltcG9ydCAiU2FuZGJveEluaXRpYWxpemF0aW9uUGFy
YW1ldGVycy5oIgorI2ltcG9ydCAiU2FuZGJveFV0aWxpdGllcy5oIgorI2ltcG9ydCAiV0tGb3Vu
ZGF0aW9uLmgiCisjaW1wb3J0ICJYUENTZXJ2aWNlRW50cnlQb2ludC5oIgorI2ltcG9ydCA8V2Vi
Q29yZS9GaWxlSGFuZGxlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1N5c3RlbVZlcnNpb24uaD4KKyNp
bXBvcnQgPG1hY2gtby9keWxkLmg+CisjaW1wb3J0IDxtYWNoL21hY2guaD4KKyNpbXBvcnQgPG1h
Y2gvdGFzay5oPgorI2ltcG9ydCA8cGFsL2NyeXB0by9DcnlwdG9EaWdlc3QuaD4KKyNpbXBvcnQg
PHBhbC9zcGkvY29jb2EvTGF1bmNoU2VydmljZXNTUEkuaD4KKyNpbXBvcnQgPHB3ZC5oPgorI2lt
cG9ydCA8c3RkbGliLmg+CisjaW1wb3J0IDxzeXMvc3lzY3RsLmg+CisjaW1wb3J0IDxzeXNleGl0
cy5oPgorI2ltcG9ydCA8d3RmL0RhdGFMb2cuaD4KKyNpbXBvcnQgPHd0Zi9GaWxlU3lzdGVtLmg+
CisjaW1wb3J0IDx3dGYvUmFuZG9tTnVtYmVyLmg+CisjaW1wb3J0IDx3dGYvU2NvcGUuaD4KKyNp
bXBvcnQgPHd0Zi9TeXN0ZW1UcmFjaW5nLmg+CisjaW1wb3J0IDx3dGYvV2FsbFRpbWUuaD4KKyNp
bXBvcnQgPHd0Zi9zcGkvZGFyd2luL1NhbmRib3hTUEkuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0Jh
c2U2NC5oPgorI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCisjaWYgVVNFKEFQ
UExFX0lOVEVSTkFMX1NESykKKyNpbXBvcnQgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRp
b25TZXJ2aWNlc1ByaXYuaD4KKyNpbXBvcnQgPHJvb3RsZXNzLmg+CisjZW5kaWYKKworI2lmIFBM
QVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEzMDAK
KyNkZWZpbmUgVVNFX0NBQ0hFX0NPTVBJTEVEX1NBTkRCT1ggMQorI2Vsc2UKKyNkZWZpbmUgVVNF
X0NBQ0hFX0NPTVBJTEVEX1NBTkRCT1ggMAorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1NNQUMp
ICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCitlbnVtIExTU2Vzc2lvbklEIHsKKyAgICBrTFNE
ZWZhdWx0U2Vzc2lvbklEID0gLTIsCit9OworI2VuZGlmCisKK3R5cGVkZWYgYm9vbCAoXkxTU2Vy
dmVyQ29ubmVjdGlvbkFsbG93ZWRCbG9jaykgKCBDRkRpY3Rpb25hcnlSZWYgb3B0aW9uc1JlZiAp
OworZXh0ZXJuICJDIiB2b2lkIF9MU1NldEFwcGxpY2F0aW9uTGF1bmNoU2VydmljZXNTZXJ2ZXJD
b25uZWN0aW9uU3RhdHVzKHVpbnQ2NF90IGZsYWdzLCBMU1NlcnZlckNvbm5lY3Rpb25BbGxvd2Vk
QmxvY2sgYmxvY2spOworZXh0ZXJuICJDIiBDRkRpY3Rpb25hcnlSZWYgX0xTQXBwbGljYXRpb25D
aGVja0luKExTU2Vzc2lvbklEIHNlc3Npb25JRCwgQ0ZEaWN0aW9uYXJ5UmVmIGFwcGxpY2F0aW9u
SW5mbyk7CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
KyNpZiBVU0UoQ0FDSEVfQ09NUElMRURfU0FOREJPWCkKK3VzaW5nIFNhbmRib3hQcm9maWxlID0g
dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxzYW5kYm94X3Byb2ZpbGVfdD46OnR5cGU7Citz
dHJ1Y3QgU2FuZGJveFByb2ZpbGVEZWxldGVyIHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoU2FuZGJv
eFByb2ZpbGUqIHB0cikKKyAgICB7CisgICAgICAgIHNhbmRib3hfZnJlZV9wcm9maWxlKHB0cik7
CisgICAgfQorfTsKK3VzaW5nIFNhbmRib3hQcm9maWxlUHRyID0gc3RkOjp1bmlxdWVfcHRyPFNh
bmRib3hQcm9maWxlLCBTYW5kYm94UHJvZmlsZURlbGV0ZXI+OworCit1c2luZyBTYW5kYm94UGFy
YW1ldGVycyA9IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8c2FuZGJveF9wYXJhbXNfdD46
OnR5cGU7CitzdHJ1Y3QgU2FuZGJveFBhcmFtZXRlcnNEZWxldGVyIHsKKyAgICB2b2lkIG9wZXJh
dG9yKCkoU2FuZGJveFBhcmFtZXRlcnMqIHB0cikKKyAgICB7CisgICAgICAgIHNhbmRib3hfZnJl
ZV9wYXJhbXMocHRyKTsKKyAgICB9Cit9OwordXNpbmcgU2FuZGJveFBhcmFtZXRlcnNQdHIgPSBz
dGQ6OnVuaXF1ZV9wdHI8U2FuZGJveFBhcmFtZXRlcnMsIFNhbmRib3hQYXJhbWV0ZXJzRGVsZXRl
cj47CisKK3N0cnVjdCBDYWNoZWRTYW5kYm94SGVhZGVyIHsKKyAgICB1aW50MzJfdCB2ZXJzaW9u
TnVtYmVyOworICAgIHVpbnQzMl90IGxpYnNhbmRib3hWZXJzaW9uOworICAgIHVpbnQzMl90IGhl
YWRlclNpemU7CisgICAgdWludDMyX3QgYnVpbHRpblNpemU7IC8vIElmIGEgYnVpbHRpbiBkb2Vz
bid0IGV4aXN0LCB0aGlzIGlzIFVJTlRfTUFYLgorICAgIHVpbnQzMl90IGRhdGFTaXplOworfTsK
Ky8vIFRoZSBmaWxlIGlzIGxheWVkIG91dCBvbiBkaXNrIGxpa2U6CisvLyBieXRlIDAKKy8vIENh
Y2hlZFNhbmRib3hIZWFkZXIgPC0gc2l6ZW9mKENhY2hlZFNhbmRib3hIZWFkZXIpIGJ5dGVzCisv
LyBTYW5kYm94SGVhZGVyIDwtIENhY2hlZFNhbmRib3hIZWFkZXI6OmhlYWRlclNpemUgYnl0ZXMK
Ky8vIFtTYW5kYm94QnVpbHRpbl0gb3B0aW9uYWwuIFByZXNlbnQgaWYgQ2FjaGVkU2FuZGJveEhl
YWRlcjo6YnVpbHRpblNpemUgaXMgbm90IFVJTlRfTUFYLiBJZiBwcmVzZW50LCBidWlsdGluU2l6
ZSBieXRlcyAobm90IGluY2x1ZGluZyBudWxsIHRlcm1pbmF0aW9uKS4KKy8vIFNhbmRib3hEYXRh
IDwtIENhY2hlZFNhbmRib3hIZWFkZXI6OmRhdGFTaXplIGJ5dGVzCisvLyBieXRlIE4KKworc3Ry
dWN0IFNhbmRib3hJbmZvIHsKKyAgICBTYW5kYm94SW5mbyhjb25zdCBTdHJpbmcmIHBhcmVudERp
cmVjdG9yeVBhdGgsIGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5UGF0aCwgY29uc3QgU3RyaW5nJiBm
aWxlUGF0aCwgY29uc3QgU2FuZGJveFBhcmFtZXRlcnNQdHImIHNhbmRib3hQYXJhbWV0ZXJzLCBj
b25zdCBDU3RyaW5nJiBoZWFkZXIsIGNvbnN0IENoaWxkUHJvY2Vzczo6UHJvY2Vzc1R5cGUmIHBy
b2Nlc3NUeXBlLCBjb25zdCBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBpbml0aWFs
aXphdGlvblBhcmFtZXRlcnMsIGNvbnN0IFN0cmluZyYgcHJvZmlsZU9yUHJvZmlsZVBhdGgsIGJv
b2wgaXNQcm9maWxlUGF0aCkKKyAgICAgICAgOiBwYXJlbnREaXJlY3RvcnlQYXRoIHsgcGFyZW50
RGlyZWN0b3J5UGF0aCB9CisgICAgICAgICwgZGlyZWN0b3J5UGF0aCB7IGRpcmVjdG9yeVBhdGgg
fQorICAgICAgICAsIGZpbGVQYXRoIHsgZmlsZVBhdGggfQorICAgICAgICAsIHNhbmRib3hQYXJh
bWV0ZXJzIHsgc2FuZGJveFBhcmFtZXRlcnMgfQorICAgICAgICAsIGhlYWRlciB7IGhlYWRlciB9
CisgICAgICAgICwgcHJvY2Vzc1R5cGUgeyBwcm9jZXNzVHlwZSB9CisgICAgICAgICwgaW5pdGlh
bGl6YXRpb25QYXJhbWV0ZXJzIHsgaW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzIH0KKyAgICAgICAg
LCBwcm9maWxlT3JQcm9maWxlUGF0aCB7IHByb2ZpbGVPclByb2ZpbGVQYXRoIH0KKyAgICAgICAg
LCBpc1Byb2ZpbGVQYXRoIHsgaXNQcm9maWxlUGF0aCB9CisgICAgeworICAgIH0KKworICAgIGNv
bnN0IFN0cmluZyYgcGFyZW50RGlyZWN0b3J5UGF0aDsKKyAgICBjb25zdCBTdHJpbmcmIGRpcmVj
dG9yeVBhdGg7CisgICAgY29uc3QgU3RyaW5nJiBmaWxlUGF0aDsKKyAgICBjb25zdCBTYW5kYm94
UGFyYW1ldGVyc1B0ciYgc2FuZGJveFBhcmFtZXRlcnM7CisgICAgY29uc3QgQ1N0cmluZyYgaGVh
ZGVyOworICAgIGNvbnN0IENoaWxkUHJvY2Vzczo6UHJvY2Vzc1R5cGUmIHByb2Nlc3NUeXBlOwor
ICAgIGNvbnN0IFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmIGluaXRpYWxpemF0aW9u
UGFyYW1ldGVyczsKKyAgICBjb25zdCBTdHJpbmcmIHByb2ZpbGVPclByb2ZpbGVQYXRoOworICAg
IGNvbnN0IGJvb2wgaXNQcm9maWxlUGF0aDsKK307CisKK2NvbnN0ZXhwciB1aW50MzJfdCBDYWNo
ZWRTYW5kYm94VmVyc2lvbk51bWJlciA9IDA7CisjZW5kaWYgLy8gVVNFKENBQ0hFX0NPTVBJTEVE
X1NBTkRCT1gpCisKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVUaW1lckNvYWxlc2NpbmdQb2xpY3ko
KQoreworICAgIC8vIFNldCB0YXNrX2xhdGVuY3kgYW5kIHRhc2tfdGhyb3VnaHB1dCBRT1MgdGll
cnMgYXMgYXBwcm9wcmlhdGUgZm9yIGEgdmlzaWJsZSBhcHBsaWNhdGlvbi4KKyAgICBzdHJ1Y3Qg
dGFza19xb3NfcG9saWN5IHFvc2luZm8gPSB7IExBVEVOQ1lfUU9TX1RJRVJfMCwgVEhST1VHSFBV
VF9RT1NfVElFUl8wIH07CisgICAga2Vybl9yZXR1cm5fdCBrciA9IHRhc2tfcG9saWN5X3NldCht
YWNoX3Rhc2tfc2VsZigpLCBUQVNLX0JBU0VfUU9TX1BPTElDWSwgKHRhc2tfcG9saWN5X3QpJnFv
c2luZm8sIFRBU0tfUU9TX1BPTElDWV9DT1VOVCk7CisgICAgQVNTRVJUX1VOVVNFRChrciwga3Ig
PT0gS0VSTl9TVUNDRVNTKTsKK30KKwordm9pZCBDaGlsZFByb2Nlc3M6OmxhdW5jaFNlcnZpY2Vz
Q2hlY2tJbigpCit7CisgICAgX0xTU2V0QXBwbGljYXRpb25MYXVuY2hTZXJ2aWNlc1NlcnZlckNv
bm5lY3Rpb25TdGF0dXMoMCwgMCk7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gdW51
c2VkID0gX0xTQXBwbGljYXRpb25DaGVja0luKGtMU0RlZmF1bHRTZXNzaW9uSUQsIENGQnVuZGxl
R2V0SW5mb0RpY3Rpb25hcnkoQ0ZCdW5kbGVHZXRNYWluQnVuZGxlKCkpKTsKK30KKwordm9pZCBD
aGlsZFByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCit7CisgICAgaW5pdGlhbGl6ZVRpbWVy
Q29hbGVzY2luZ1BvbGljeSgpOworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0g
Y2hhbmdlQ3VycmVudERpcmVjdG9yeVBhdGg6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVQ
YXRoXV07Cit9CisKK3N0YXRpYyBPU1N0YXR1cyBlbmFibGVTYW5kYm94U3R5bGVGaWxlUXVhcmFu
dGluZSgpCit7CisjaWYgIVBMQVRGT1JNKElPU01BQykKKyAgICBxdG5fcHJvY190IHF1YXJhbnRp
bmVQcm9wZXJ0aWVzID0gcXRuX3Byb2NfYWxsb2MoKTsKKyAgICBhdXRvIHF1YXJhbnRpbmVQcm9w
ZXJ0aWVzRGVsZXRlciA9IG1ha2VTY29wZUV4aXQoW3F1YXJhbnRpbmVQcm9wZXJ0aWVzXSgpIHsK
KyAgICAgICAgcXRuX3Byb2NfZnJlZShxdWFyYW50aW5lUHJvcGVydGllcyk7CisgICAgfSk7CisK
KworICAgIGlmIChxdG5fcHJvY19pbml0X3dpdGhfc2VsZihxdWFyYW50aW5lUHJvcGVydGllcykp
IHsKKyAgICAgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS8xMzQ2Mzc1Mj4uCisgICAgICAgIHF0
bl9wcm9jX2luaXQocXVhcmFudGluZVByb3BlcnRpZXMpOworICAgIH0KKworICAgIGlmIChhdXRv
IGVycm9yID0gcXRuX3Byb2Nfc2V0X2ZsYWdzKHF1YXJhbnRpbmVQcm9wZXJ0aWVzLCBRVE5fRkxB
R19TQU5EQk9YKSkKKyAgICAgICAgcmV0dXJuIGVycm9yOworCisgICAgLy8gUVROX0ZMQUdfU0FO
REJPWCBpcyBzaWxlbnRseSBpZ25vcmVkIGlmIHNlY3VyaXR5Lm1hYy5xdG4uc2FuZGJveF9lbmZv
cmNlIHN5c2N0bCBpcyAwLgorICAgIC8vIEluIHRoYXQgY2FzZSwgcXVhcmFudGluZSBmYWxscyBi
YWNrIHRvIGFkdmlzb3J5IFFUTl9GTEFHX0RPV05MT0FELgorICAgIHJldHVybiBxdG5fcHJvY19h
cHBseV90b19zZWxmKHF1YXJhbnRpbmVQcm9wZXJ0aWVzKTsKKyNlbHNlCisgICAgcmV0dXJuIGZh
bHNlOworI2VuZGlmCit9CisKKyNpZiBVU0UoQ0FDSEVfQ09NUElMRURfU0FOREJPWCkKK3N0YXRp
YyBPcHRpb25hbDxWZWN0b3I8Y2hhcj4+IGZpbGVDb250ZW50cyhjb25zdCBTdHJpbmcmIHBhdGgs
IGJvb2wgc2hvdWxkTG9jayA9IGZhbHNlLCBPcHRpb25TZXQ8RmlsZVN5c3RlbTo6RmlsZUxvY2tN
b2RlPiBsb2NrTW9kZSA9IEZpbGVTeXN0ZW06OkZpbGVMb2NrTW9kZTo6RXhjbHVzaXZlKQorewor
ICAgIEZpbGVIYW5kbGUgZmlsZSA9IHNob3VsZExvY2sgPyBGaWxlSGFuZGxlKHBhdGgsIEZpbGVT
eXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCwgbG9ja01vZGUpIDogRmlsZUhhbmRsZShwYXRoLCBG
aWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQpOworICAgIGZpbGUub3BlbigpOworICAgIGlm
ICghZmlsZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGNoYXIgY2h1bmtb
NDA5Nl07CisgICAgY29uc3RleHByIHNpemVfdCBjaHVua1NpemUgPSBXVEZfQVJSQVlfTEVOR1RI
KGNodW5rKTsKKyAgICBzaXplX3QgY29udGVudFNpemUgPSAwOworICAgIFZlY3RvcjxjaGFyPiBj
b250ZW50czsKKyAgICBjb250ZW50cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNodW5rU2l6ZSk7
CisgICAgd2hpbGUgKHNpemVfdCBieXRlc1JlYWQgPSBmaWxlLnJlYWQoY2h1bmssIGNodW5rU2l6
ZSkpIHsKKyAgICAgICAgY29udGVudHMuYXBwZW5kKGNodW5rLCBieXRlc1JlYWQpOworICAgICAg
ICBjb250ZW50U2l6ZSArPSBieXRlc1JlYWQ7CisgICAgfQorICAgIGNvbnRlbnRzLnJlc2l6ZShj
b250ZW50U2l6ZSk7CisKKyAgICByZXR1cm4gY29udGVudHM7Cit9CisKKyNpZiBVU0UoQVBQTEVf
SU5URVJOQUxfU0RLKQorLy8gVGhlc2Ugc3RyaW5ncyBtdXN0IG1hdGNoIHRoZSBsYXN0IHNlZ21l
bnQgb2YgdGhlICJjb20uYXBwbGUucm9vdGxlc3Muc3RvcmFnZS48dGhpcyBwYXJ0IG11c3QgbWF0
Y2g+IiBlbnRyeSBpbiBlYWNoCisvLyBwcm9jZXNzJ3MgcmVzdHJpY3RlZCBlbnRpdGxlbWVudHMg
ZmlsZSAoZXguIENvbmZpZ3VyYXRpb25zL05ldHdvcmtpbmctT1NYLXJlc3RyaWN0ZWQuZW50aXRs
ZW1lbnRzKS4KK2NvbnN0ZXhwciBjb25zdCBjaGFyKiBwcm9jZXNzU3RvcmFnZUNsYXNzKENoaWxk
UHJvY2Vzczo6UHJvY2Vzc1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBj
YXNlIENoaWxkUHJvY2Vzczo6UHJvY2Vzc1R5cGU6OldlYkNvbnRlbnQ6CisgICAgICAgIHJldHVy
biAiV2ViS2l0V2ViQ29udGVudFNhbmRib3giOworICAgIGNhc2UgQ2hpbGRQcm9jZXNzOjpQcm9j
ZXNzVHlwZTo6TmV0d29yazoKKyAgICAgICAgcmV0dXJuICJXZWJLaXROZXR3b3JraW5nU2FuZGJv
eCI7CisgICAgY2FzZSBDaGlsZFByb2Nlc3M6OlByb2Nlc3NUeXBlOjpQbHVnaW46CisgICAgICAg
IHJldHVybiAiV2ViS2l0UGx1Z2luU2FuZGJveCI7CisgICAgfQorfQorI2VuZGlmIC8vIFVTRShB
UFBMRV9JTlRFUk5BTF9TREspCisKK3N0YXRpYyBPcHRpb25hbDxDU3RyaW5nPiBzZXRBbmRTZXJp
YWxpemVTYW5kYm94UGFyYW1ldGVycyhjb25zdCBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0
ZXJzJiBpbml0aWFsaXphdGlvblBhcmFtZXRlcnMsIGNvbnN0IFNhbmRib3hQYXJhbWV0ZXJzUHRy
JiBzYW5kYm94UGFyYW1ldGVycywgY29uc3QgU3RyaW5nJiBwcm9maWxlT3JQcm9maWxlUGF0aCwg
Ym9vbCBpc1Byb2ZpbGVQYXRoKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGluaXRpYWxpemF0aW9uUGFyYW1ldGVycy5jb3VudCgpOyAr
K2kpIHsKKyAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IGluaXRpYWxpemF0aW9uUGFyYW1ldGVy
cy5uYW1lKGkpOworICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSA9IGluaXRpYWxpemF0aW9uUGFy
YW1ldGVycy52YWx1ZShpKTsKKyAgICAgICAgaWYgKHNhbmRib3hfc2V0X3BhcmFtKHNhbmRib3hQ
YXJhbWV0ZXJzLmdldCgpLCBuYW1lLCB2YWx1ZSkpIHsKKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5
cygiJXM6IENvdWxkIG5vdCBzZXQgc2FuZGJveCBwYXJhbWV0ZXI6ICVzXG4iLCBnZXRwcm9nbmFt
ZSgpLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQor
ICAgICAgICBidWlsZGVyLmFwcGVuZChuYW1lLCBzdHJsZW4obmFtZSkpOworICAgICAgICBidWls
ZGVyLmFwcGVuZCgnOicpOworICAgICAgICBidWlsZGVyLmFwcGVuZCh2YWx1ZSwgc3RybGVuKHZh
bHVlKSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCc6Jyk7CisgICAgfQorICAgIGlmIChpc1By
b2ZpbGVQYXRoKSB7CisgICAgICAgIGF1dG8gY29udGVudHMgPSBmaWxlQ29udGVudHMocHJvZmls
ZU9yUHJvZmlsZVBhdGgpOworICAgICAgICBpZiAoIWNvbnRlbnRzKQorICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoY29udGVudHMtPmRhdGEo
KSwgY29udGVudHMtPnNpemUoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KHByb2ZpbGVPclByb2ZpbGVQYXRoKTsKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpLmFz
Y2lpKCk7Cit9CisKK3N0YXRpYyBTdHJpbmcgc2FuZGJveERhdGFWYXVsdFBhcmVudERpcmVjdG9y
eSgpCit7CisgICAgY2hhciB0ZW1wW1BBVEhfTUFYXTsKKyAgICBzaXplX3QgbGVuZ3RoID0gY29u
ZnN0cihfQ1NfREFSV0lOX1VTRVJfQ0FDSEVfRElSLCB0ZW1wLCBzaXplb2YodGVtcCkpOworICAg
IGlmICghbGVuZ3RoKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiJXM6IENvdWxkIG5vdCByZXRy
aWV2ZSB1c2VyIGNhY2hlIGRpcmVjdG9yeSBwYXRoOiAlc1xuIiwgZ2V0cHJvZ25hbWUoKSwgc3Ry
ZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZXhpdChFWF9OT1BFUk0pOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVChsZW5ndGggPD0gc2l6ZW9mKHRlbXApKTsKKyAgICBjaGFyIHJlc29sdmVkUGF0
aFtQQVRIX01BWF07CisgICAgaWYgKCFyZWFscGF0aCh0ZW1wLCByZXNvbHZlZFBhdGgpKSB7Cisg
ICAgICAgIFdURkxvZ0Fsd2F5cygiJXM6IENvdWxkIG5vdCBjYW5vbmljYWxpemUgdXNlciBjYWNo
ZSBkaXJlY3RvcnkgcGF0aDogJXNcbiIsIGdldHByb2duYW1lKCksIHN0cmVycm9yKGVycm5vKSk7
CisgICAgICAgIGV4aXQoRVhfTk9QRVJNKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc29sdmVkUGF0
aDsKK30KKworc3RhdGljIFN0cmluZyBzYW5kYm94RGlyZWN0b3J5KENoaWxkUHJvY2Vzczo6UHJv
Y2Vzc1R5cGUgcHJvY2Vzc1R5cGUsIGNvbnN0IFN0cmluZyYgcGFyZW50RGlyZWN0b3J5KQorewor
ICAgIFN0cmluZ0J1aWxkZXIgZGlyZWN0b3J5OworICAgIGRpcmVjdG9yeS5hcHBlbmQocGFyZW50
RGlyZWN0b3J5KTsKKyAgICBzd2l0Y2ggKHByb2Nlc3NUeXBlKSB7CisgICAgY2FzZSBDaGlsZFBy
b2Nlc3M6OlByb2Nlc3NUeXBlOjpXZWJDb250ZW50OgorICAgICAgICBkaXJlY3RvcnkuYXBwZW5k
KCIvY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50LlNhbmRib3giKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDaGlsZFByb2Nlc3M6OlByb2Nlc3NUeXBlOjpOZXR3b3JrOgorICAgICAgICBk
aXJlY3RvcnkuYXBwZW5kKCIvY29tLmFwcGxlLldlYktpdC5OZXR3b3JraW5nLlNhbmRib3giKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDaGlsZFByb2Nlc3M6OlByb2Nlc3NUeXBlOjpQbHVn
aW46CisgICAgICAgIGRpcmVjdG9yeS5hcHBlbmQoIi9jb20uYXBwbGUuV2ViS2l0LlBsdWdpbi5T
YW5kYm94Iik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworI2lmICFVU0UoQVBQTEVfSU5URVJO
QUxfU0RLKQorICAgIC8vIEFkZCAuT3BlblNvdXJjZSBzdWZmaXggc28gdGhhdCBvcGVuIHNvdXJj
ZSBidWlsZHMgZG9uJ3QgdHJ5IHRvIGFjY2VzcyBhIGRhdGEgdmF1bHQgdXNlZCBieSBzeXN0ZW0g
U2FmYXJpLgorICAgIGRpcmVjdG9yeS5hcHBlbmQoIi5PcGVuU291cmNlIik7CisjZW5kaWYKKwor
ICAgIHJldHVybiBkaXJlY3RvcnkudG9TdHJpbmcoKTsKK30KKworc3RhdGljIFN0cmluZyBzYW5k
Ym94RmlsZVBhdGgoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnlQYXRoLCBjb25zdCBDU3RyaW5nJiBo
ZWFkZXIpCit7CisgICAgU3RyaW5nQnVpbGRlciBzYW5kYm94RmlsZTsKKyAgICBzYW5kYm94Rmls
ZS5hcHBlbmQoZGlyZWN0b3J5UGF0aCk7CisgICAgc2FuZGJveEZpbGUuYXBwZW5kKCIvQ29tcGls
ZWRTYW5kYm94KyIpOworCisgICAgLy8gTWFrZSB0aGUgZmlsZW5hbWUgc2VtaS11bmlxdWUgYmFz
ZWQgb24gdGhlIGNvbnRlbnRzIG9mIHRoZSBoZWFkZXIuCisgICAgYXV0byBjcnlwdG8gPSBQQUw6
OkNyeXB0b0RpZ2VzdDo6Y3JlYXRlKFBBTDo6Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8y
NTYpOworICAgIGNyeXB0by0+YWRkQnl0ZXMoaGVhZGVyLmRhdGEoKSwgaGVhZGVyLmxlbmd0aCgp
KTsKKyAgICBWZWN0b3I8dWludDhfdD4gaGFzaCA9IGNyeXB0by0+Y29tcHV0ZUhhc2goKTsKKyAg
ICBTdHJpbmcgcmVhZGFibGVIYXNoID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUoaGFzaC5kYXRhKCks
IGhhc2guc2l6ZSgpKTsKKworICAgIHNhbmRib3hGaWxlLmFwcGVuZChyZWFkYWJsZUhhc2gpOwor
ICAgIHJldHVybiBzYW5kYm94RmlsZS50b1N0cmluZygpOworfQorCitzdGF0aWMgYm9vbCBlbnN1
cmVTYW5kYm94Q2FjaGVEaXJlY3RvcnkoY29uc3QgU2FuZGJveEluZm8mIGluZm8pCit7CisgICAg
aWYgKCFGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkoaW5mby5wYXJlbnREaXJlY3RvcnlQYXRo
LCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMpKSB7CisgICAgICAg
IEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhpbmZvLnBhcmVudERpcmVjdG9yeVBhdGgp
OworICAgICAgICBpZiAoIUZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShpbmZvLnBhcmVudERp
cmVjdG9yeVBhdGgsIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Olllcykp
IHsKKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiJXM6IENvdWxkIG5vdCBjcmVhdGUgc2FuZGJv
eCBkaXJlY3RvcnlcbiIsIGdldHByb2duYW1lKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKyAgICBj
b25zdCBjaGFyKiBzdG9yYWdlQ2xhc3MgPSBwcm9jZXNzU3RvcmFnZUNsYXNzKGluZm8ucHJvY2Vz
c1R5cGUpOworICAgIENTdHJpbmcgZGlyZWN0b3J5UGF0aCA9IEZpbGVTeXN0ZW06OmZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihpbmZvLmRpcmVjdG9yeVBhdGgpOworICAgIGlmIChkaXJlY3RvcnlQ
YXRoLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIG1ha2VEYXRh
VmF1bHQgPSBbJl0geworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAoIXJvb3RsZXNzX21r
ZGlyX2RhdGF2YXVsdChkaXJlY3RvcnlQYXRoLmRhdGEoKSwgMDcwMCwgc3RvcmFnZUNsYXNzKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSB3aGlsZSAoZXJybm8gPT0g
RUFHQUlOKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKKyAgICBpZiAobWFrZURh
dGFWYXVsdCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChlcnJubyA9PSBFRVhJ
U1QpIHsKKyAgICAgICAgLy8gVGhlIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cy4gRmlyc3Qgd2Un
bGwgY2hlY2sgaWYgaXQgaXMgYSBkYXRhIHZhdWx0LiBJZiBpdCBpcyB0aGVuCisgICAgICAgIC8v
IHdlIGFyZSB0aGUgb25lcyB3aG8gY3JlYXRlZCBpdCBhbmQgd2UgY2FuIGNvbnRpbnVlLiBJZiBp
dCBpcyBub3QgYSBkYXRhdmF1bHQgdGhlbiB3ZSdsbCBqdXN0CisgICAgICAgIC8vIGRlbGV0ZSBp
dCBhbmQgdHJ5IHRvIG1ha2UgYSBuZXcgb25lLgorICAgICAgICBpZiAoIXJvb3RsZXNzX2NoZWNr
X2RhdGF2YXVsdF9mbGFnKGRpcmVjdG9yeVBhdGguZGF0YSgpLCBzdG9yYWdlQ2xhc3MpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgYm9vbCBpc0RpcmVjdG9yeSA9IEZpbGVT
eXN0ZW06OmZpbGVJc0RpcmVjdG9yeShpbmZvLmRpcmVjdG9yeVBhdGgsIEZpbGVTeXN0ZW06OlNo
b3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKTsKKyAgICAgICAgaWYgKGlzRGlyZWN0b3J5KSB7
CisgICAgICAgICAgICBpZiAoIUZpbGVTeXN0ZW06OmRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KGlu
Zm8uZGlyZWN0b3J5UGF0aCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCFGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGluZm8u
ZGlyZWN0b3J5UGF0aCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKCFtYWtlRGF0YVZhdWx0KCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCIlczogU2FuZGJveCBkaXJl
Y3RvcnkgY291bGRuJ3QgYmUgY3JlYXRlZDogIiwgZ2V0cHJvZ25hbWUoKSwgc3RyZXJyb3IoZXJy
bm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyNlbHNlCisgICAgYm9vbCBoYXNT
YW5kYm94RGlyZWN0b3J5ID0gRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KGluZm8uZGlyZWN0
b3J5UGF0aCwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKTsKKyAg
ICBpZiAoIWhhc1NhbmRib3hEaXJlY3RvcnkpIHsKKyAgICAgICAgaWYgKEZpbGVTeXN0ZW06Om1h
a2VBbGxEaXJlY3RvcmllcyhpbmZvLmRpcmVjdG9yeVBhdGgpKSB7CisgICAgICAgICAgICBBU1NF
UlQoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KGluZm8uZGlyZWN0b3J5UGF0aCwgRmlsZVN5
c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKSk7CisgICAgICAgICAgICBoYXNT
YW5kYm94RGlyZWN0b3J5ID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IFdlIG1heSBoYXZlIHJhY2VkIHdpdGggc29tZW9uZSBlbHNlIG1ha2luZyBpdC4gVGhhdCdzIG9r
LgorICAgICAgICAgICAgaGFzU2FuZGJveERpcmVjdG9yeSA9IEZpbGVTeXN0ZW06OmZpbGVJc0Rp
cmVjdG9yeShpbmZvLmRpcmVjdG9yeVBhdGgsIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJv
bGljTGlua3M6Olllcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWhhc1NhbmRib3hE
aXJlY3RvcnkpIHsKKyAgICAgICAgLy8gQmFpbGluZyBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYSBz
YW5kYm94IGRpcmVjdG9yeS4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyNlbmRpZiAv
LyBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRp
YyBib29sIHdyaXRlU2FuZGJveERhdGFUb0NhY2hlRmlsZShjb25zdCBTYW5kYm94SW5mbyYgaW5m
bywgY29uc3QgVmVjdG9yPGNoYXI+JiBjYWNoZUZpbGUpCit7CisgICAgRmlsZUhhbmRsZSBmaWxl
IHsgaW5mby5maWxlUGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpXcml0ZSwgRmlsZVN5
c3RlbTo6RmlsZUxvY2tNb2RlOjpFeGNsdXNpdmUgfTsKKyAgICByZXR1cm4gZmlsZS53cml0ZShj
YWNoZUZpbGUuZGF0YSgpLCBjYWNoZUZpbGUuc2l6ZSgpKSA9PSBzYWZlQ2FzdDxpbnQ+KGNhY2hl
RmlsZS5zaXplKCkpOworfQorCitzdGF0aWMgU2FuZGJveFByb2ZpbGVQdHIgY29tcGlsZUFuZENh
Y2hlU2FuZGJveFByb2ZpbGUoY29uc3QgU2FuZGJveEluZm8mIGluZm8pCit7CisgICAgaWYgKCFl
bnN1cmVTYW5kYm94Q2FjaGVEaXJlY3RvcnkoaW5mbykpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgY2hhciogZXJyb3IgPSBudWxscHRyOworICAgIENTdHJpbmcgcHJvZmlsZU9yUHJv
ZmlsZVBhdGggPSBpbmZvLmlzUHJvZmlsZVBhdGggPyBGaWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24oaW5mby5wcm9maWxlT3JQcm9maWxlUGF0aCkgOiBpbmZvLnByb2ZpbGVPclBy
b2ZpbGVQYXRoLnV0ZjgoKTsKKyAgICBpZiAocHJvZmlsZU9yUHJvZmlsZVBhdGguaXNOdWxsKCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIFNhbmRib3hQcm9maWxlUHRyIHNhbmRib3hQ
cm9maWxlIHsgaW5mby5pc1Byb2ZpbGVQYXRoID8gc2FuZGJveF9jb21waWxlX2ZpbGUocHJvZmls
ZU9yUHJvZmlsZVBhdGguZGF0YSgpLCBpbmZvLnNhbmRib3hQYXJhbWV0ZXJzLmdldCgpLCAmZXJy
b3IpIDogc2FuZGJveF9jb21waWxlX3N0cmluZyhwcm9maWxlT3JQcm9maWxlUGF0aC5kYXRhKCks
IGluZm8uc2FuZGJveFBhcmFtZXRlcnMuZ2V0KCksICZlcnJvcikgfTsKKyAgICBpZiAoIXNhbmRi
b3hQcm9maWxlKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiJXM6IENvdWxkIG5vdCBjb21waWxl
IFdlYkNvbnRlbnQgc2FuZGJveDogJXNcbiIsIGdldHByb2duYW1lKCksIGVycm9yKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgY29uc3QgYm9vbCBoYXZlQnVpbHRpbiA9
IHNhbmRib3hQcm9maWxlLT5idWlsdGluOworICAgIGludDMyX3QgbGlic2FuZGJveFZlcnNpb24g
PSBOU1ZlcnNpb25PZlJ1blRpbWVMaWJyYXJ5KCJzYW5kYm94Iik7CisgICAgUkVMRUFTRV9BU1NF
UlQobGlic2FuZGJveFZlcnNpb24gPiAwKTsKKyAgICBDYWNoZWRTYW5kYm94SGVhZGVyIGNhY2hl
ZEhlYWRlciB7CisgICAgICAgIENhY2hlZFNhbmRib3hWZXJzaW9uTnVtYmVyLAorICAgICAgICBz
dGF0aWNfY2FzdDx1aW50MzJfdD4obGlic2FuZGJveFZlcnNpb24pLAorICAgICAgICBzYWZlQ2Fz
dDx1aW50MzJfdD4oaW5mby5oZWFkZXIubGVuZ3RoKCkpLAorICAgICAgICBoYXZlQnVpbHRpbiA/
IHNhZmVDYXN0PHVpbnQzMl90PihzdHJsZW4oc2FuZGJveFByb2ZpbGUtPmJ1aWx0aW4pKSA6IHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgc2FmZUNhc3Q8dWlu
dDMyX3Q+KHNhbmRib3hQcm9maWxlLT5zaXplKQorICAgIH07CisgICAgY29uc3Qgc2l6ZV90IGV4
cGVjdGVkRmlsZVNpemUgPSBzaXplb2YoY2FjaGVkSGVhZGVyKSArIGNhY2hlZEhlYWRlci5oZWFk
ZXJTaXplICsgKGhhdmVCdWlsdGluID8gY2FjaGVkSGVhZGVyLmJ1aWx0aW5TaXplIDogMCkgKyBj
YWNoZWRIZWFkZXIuZGF0YVNpemU7CisKKyAgICBWZWN0b3I8Y2hhcj4gY2FjaGVGaWxlOworICAg
IGNhY2hlRmlsZS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGV4cGVjdGVkRmlsZVNpemUpOworICAg
IGNhY2hlRmlsZS5hcHBlbmQoYml0d2lzZV9jYXN0PHVpbnQ4X3QqPigmY2FjaGVkSGVhZGVyKSwg
c2l6ZW9mKENhY2hlZFNhbmRib3hIZWFkZXIpKTsKKyAgICBjYWNoZUZpbGUuYXBwZW5kKGluZm8u
aGVhZGVyLmRhdGEoKSwgaW5mby5oZWFkZXIubGVuZ3RoKCkpOworICAgIGlmIChoYXZlQnVpbHRp
bikKKyAgICAgICAgY2FjaGVGaWxlLmFwcGVuZChzYW5kYm94UHJvZmlsZS0+YnVpbHRpbiwgY2Fj
aGVkSGVhZGVyLmJ1aWx0aW5TaXplKTsKKyAgICBjYWNoZUZpbGUuYXBwZW5kKHNhbmRib3hQcm9m
aWxlLT5kYXRhLCBjYWNoZWRIZWFkZXIuZGF0YVNpemUpOworCisgICAgaWYgKCF3cml0ZVNhbmRi
b3hEYXRhVG9DYWNoZUZpbGUoaW5mbywgY2FjaGVGaWxlKSkKKyAgICAgICAgV1RGTG9nQWx3YXlz
KCIlczogVW5hYmxlIHRvIGNhY2hlIGNvbXBpbGVkIHNhbmRib3hcbiIsIGdldHByb2duYW1lKCkp
OworCisgICAgcmV0dXJuIHNhbmRib3hQcm9maWxlOworfQorCitzdGF0aWMgYm9vbCB0cnlBcHBs
eUNhY2hlZFNhbmRib3goY29uc3QgU2FuZGJveEluZm8mIGluZm8pCit7CisjaWYgVVNFKEFQUExF
X0lOVEVSTkFMX1NESykKKyAgICBDU3RyaW5nIGRpcmVjdG9yeVBhdGggPSBGaWxlU3lzdGVtOjpm
aWxlU3lzdGVtUmVwcmVzZW50YXRpb24oaW5mby5kaXJlY3RvcnlQYXRoKTsKKyAgICBpZiAoZGly
ZWN0b3J5UGF0aC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChyb290
bGVzc19jaGVja19kYXRhdmF1bHRfZmxhZyhkaXJlY3RvcnlQYXRoLmRhdGEoKSwgcHJvY2Vzc1N0
b3JhZ2VDbGFzcyhpbmZvLnByb2Nlc3NUeXBlKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZgorCisgICAgYXV0byBjb250ZW50cyA9IGZpbGVDb250ZW50cyhpbmZvLmZpbGVQYXRoLCB0
cnVlLCBGaWxlU3lzdGVtOjpGaWxlTG9ja01vZGU6OlNoYXJlZCk7CisgICAgaWYgKCFjb250ZW50
cyB8fCBjb250ZW50cy0+aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgVmVj
dG9yPGNoYXI+IGNhY2hlZFNhbmRib3hDb250ZW50cyA9IFdURk1vdmUoKmNvbnRlbnRzKTsKKyAg
ICBpZiAoc2l6ZW9mKENhY2hlZFNhbmRib3hIZWFkZXIpID4gY2FjaGVkU2FuZGJveENvbnRlbnRz
LnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVGhpcyBkYXRhIG1heSBi
ZSBjb3JydXB0ZWQgaWYgdGhlIHNhbmRib3ggZmlsZSB3YXMgY2FjaGVkIG9uIGEgZGlmZmVyZW50
IHBsYXRmb3JtIHdpdGggZGlmZmVyZW50IGVuZGlhbm5lc3MKKyAgICBDYWNoZWRTYW5kYm94SGVh
ZGVyIGNhY2hlZFNhbmRib3hIZWFkZXI7CisgICAgbWVtY3B5KCZjYWNoZWRTYW5kYm94SGVhZGVy
LCBjYWNoZWRTYW5kYm94Q29udGVudHMuZGF0YSgpLCBzaXplb2YoQ2FjaGVkU2FuZGJveEhlYWRl
cikpOworICAgIGludDMyX3QgbGlic2FuZGJveFZlcnNpb24gPSBOU1ZlcnNpb25PZlJ1blRpbWVM
aWJyYXJ5KCJzYW5kYm94Iik7CisgICAgUkVMRUFTRV9BU1NFUlQobGlic2FuZGJveFZlcnNpb24g
PiAwKTsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGxpYnNhbmRib3hWZXJzaW9uKSAh
PSBjYWNoZWRTYW5kYm94SGVhZGVyLmxpYnNhbmRib3hWZXJzaW9uKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKGNhY2hlZFNhbmRib3hIZWFkZXIudmVyc2lvbk51bWJlciAhPSBDYWNo
ZWRTYW5kYm94VmVyc2lvbk51bWJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNvbnN0
IGJvb2wgaGF2ZUJ1aWx0aW4gPSBjYWNoZWRTYW5kYm94SGVhZGVyLmJ1aWx0aW5TaXplICE9IHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKKworICAgIC8vIFRoZXNlIHZhbHVl
cyBhcmUgY29tcHV0ZWQgYmFzZWQgb24gdGhlIGRpc2sgbGF5b3V0IHNwZWNpZmllZCBiZWxvdyB0
aGUgZGVmaW5pdGlvbiBvZiB0aGUgQ2FjaGVkU2FuZGJveEhlYWRlciBzdHJ1Y3QKKyAgICAvLyBh
bmQgbXVzdCBiZSBjaGFuZ2VkIGlmIHRoZSBsYXlvdXQgY2hhbmdlcy4KKyAgICBjb25zdCBjaGFy
KiBzYW5kYm94SGVhZGVyUHRyID0gYml0d2lzZV9jYXN0PGNoYXIgKj4oY2FjaGVkU2FuZGJveENv
bnRlbnRzLmRhdGEoKSkgKyBzaXplb2YoQ2FjaGVkU2FuZGJveEhlYWRlcik7CisgICAgY29uc3Qg
Y2hhciogc2FuZGJveEJ1aWx0aW5QdHIgPSBzYW5kYm94SGVhZGVyUHRyICsgY2FjaGVkU2FuZGJv
eEhlYWRlci5oZWFkZXJTaXplOworICAgIHVuc2lnbmVkIGNoYXIqIHNhbmRib3hEYXRhUHRyID0g
Yml0d2lzZV9jYXN0PHVuc2lnbmVkIGNoYXIqPihoYXZlQnVpbHRpbiA/IHNhbmRib3hCdWlsdGlu
UHRyICsgY2FjaGVkU2FuZGJveEhlYWRlci5idWlsdGluU2l6ZSA6IHNhbmRib3hCdWlsdGluUHRy
KTsKKworICAgIHNpemVfdCBleHBlY3RlZEZpbGVTaXplID0gc2l6ZW9mKENhY2hlZFNhbmRib3hI
ZWFkZXIpICsgY2FjaGVkU2FuZGJveEhlYWRlci5oZWFkZXJTaXplICsgY2FjaGVkU2FuZGJveEhl
YWRlci5kYXRhU2l6ZTsKKyAgICBpZiAoaGF2ZUJ1aWx0aW4pCisgICAgICAgIGV4cGVjdGVkRmls
ZVNpemUgKz0gY2FjaGVkU2FuZGJveEhlYWRlci5idWlsdGluU2l6ZTsKKyAgICBpZiAoY2FjaGVk
U2FuZGJveENvbnRlbnRzLnNpemUoKSAhPSBleHBlY3RlZEZpbGVTaXplKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKGNhY2hlZFNhbmRib3hIZWFkZXIuaGVhZGVyU2l6ZSAhPSBpbmZv
LmhlYWRlci5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtZW1jbXAo
c2FuZGJveEhlYWRlclB0ciwgaW5mby5oZWFkZXIuZGF0YSgpLCBpbmZvLmhlYWRlci5sZW5ndGgo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNhbmRib3hQcm9maWxlIHByb2ZpbGUg
eyB9OworICAgIENTdHJpbmcgYnVpbHRpbjsKKyAgICBwcm9maWxlLmJ1aWx0aW4gPSBudWxscHRy
OworICAgIHByb2ZpbGUuc2l6ZSA9IGNhY2hlZFNhbmRib3hIZWFkZXIuZGF0YVNpemU7CisgICAg
aWYgKGhhdmVCdWlsdGluKSB7CisgICAgICAgIGJ1aWx0aW4gPSBDU3RyaW5nOjpuZXdVbmluaXRp
YWxpemVkKGNhY2hlZFNhbmRib3hIZWFkZXIuYnVpbHRpblNpemUsIHByb2ZpbGUuYnVpbHRpbik7
CisgICAgICAgIGlmIChidWlsdGluLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBtZW1jcHkocHJvZmlsZS5idWlsdGluLCBzYW5kYm94QnVpbHRpblB0ciwgY2Fj
aGVkU2FuZGJveEhlYWRlci5idWlsdGluU2l6ZSk7CisgICAgfQorICAgIEFTU0VSVChzdGF0aWNf
Y2FzdDx2b2lkICo+KHNhbmRib3hEYXRhUHRyICsgcHJvZmlsZS5zaXplKSA8PSBzdGF0aWNfY2Fz
dDx2b2lkICo+KGNhY2hlZFNhbmRib3hDb250ZW50cy5kYXRhKCkgKyBjYWNoZWRTYW5kYm94Q29u
dGVudHMuc2l6ZSgpKSk7CisgICAgcHJvZmlsZS5kYXRhID0gc2FuZGJveERhdGFQdHI7CisKKyAg
ICBpZiAoc2FuZGJveF9hcHBseSgmcHJvZmlsZSkpIHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCIl
czogQ291bGQgbm90IGFwcGx5IGNhY2hlZCBzYW5kYm94OiAlc1xuIiwgZ2V0cHJvZ25hbWUoKSwg
c3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorI2VuZGlmIC8vIFVTRShDQUNIRV9DT01QSUxFRF9TQU5EQk9YKQorCitz
dGF0aWMgaW5saW5lIGNvbnN0IE5TQnVuZGxlICp3ZWJLaXQyQnVuZGxlKCkKK3sKKyNpZiBXS19B
UElfRU5BQkxFRAorICAgIGNvbnN0IHN0YXRpYyBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxl
IGJ1bmRsZUZvckNsYXNzOk5TQ2xhc3NGcm9tU3RyaW5nKEAiV0tXZWJWaWV3IildOworI2Vsc2UK
KyAgICBjb25zdCBzdGF0aWMgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JD
bGFzczpOU0NsYXNzRnJvbVN0cmluZyhAIldLVmlldyIpXTsKKyNlbmRpZgorCisgICAgcmV0dXJu
IGJ1bmRsZTsKK30KKworc3RhdGljIHZvaWQgZ2V0U2FuZGJveFByb2ZpbGVPclByb2ZpbGVQYXRo
KGNvbnN0IFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIFN0cmlu
ZyYgcHJvZmlsZU9yUHJvZmlsZVBhdGgsIGJvb2wmIGlzUHJvZmlsZVBhdGgpCit7CisgICAgc3dp
dGNoIChwYXJhbWV0ZXJzLm1vZGUoKSkgeworICAgIGNhc2UgU2FuZGJveEluaXRpYWxpemF0aW9u
UGFyYW1ldGVyczo6UHJvZmlsZVNlbGVjdGlvbk1vZGU6OlVzZURlZmF1bHRTYW5kYm94UHJvZmls
ZVBhdGg6CisgICAgICAgIHByb2ZpbGVPclByb2ZpbGVQYXRoID0gW3dlYktpdDJCdW5kbGUoKSBw
YXRoRm9yUmVzb3VyY2U6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBv
ZlR5cGU6QCJzYiJdOworICAgICAgICBpc1Byb2ZpbGVQYXRoID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVyczo6UHJvZmlsZVNl
bGVjdGlvbk1vZGU6OlVzZU92ZXJyaWRlU2FuZGJveFByb2ZpbGVQYXRoOgorICAgICAgICBwcm9m
aWxlT3JQcm9maWxlUGF0aCA9IHBhcmFtZXRlcnMub3ZlcnJpZGVTYW5kYm94UHJvZmlsZVBhdGgo
KTsKKyAgICAgICAgaXNQcm9maWxlUGF0aCA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnM6OlByb2ZpbGVTZWxlY3Rpb25Nb2Rl
OjpVc2VTYW5kYm94UHJvZmlsZToKKyAgICAgICAgcHJvZmlsZU9yUHJvZmlsZVBhdGggPSBwYXJh
bWV0ZXJzLnNhbmRib3hQcm9maWxlKCk7CisgICAgICAgIGlzUHJvZmlsZVBhdGggPSBmYWxzZTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworc3RhdGljIGJvb2wgY29tcGlsZUFuZEFwcGx5
U2FuZGJveFNsb3dDYXNlKGNvbnN0IFN0cmluZyYgcHJvZmlsZU9yUHJvZmlsZVBhdGgsIGJvb2wg
aXNQcm9maWxlUGF0aCwgY29uc3QgU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycyYgcGFy
YW1ldGVycykKK3sKKyAgICBjaGFyKiBlcnJvckJ1ZjsKKyAgICBDU3RyaW5nIHRlbXAgPSBpc1By
b2ZpbGVQYXRoID8gRmlsZVN5c3RlbTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHByb2ZpbGVP
clByb2ZpbGVQYXRoKSA6IHByb2ZpbGVPclByb2ZpbGVQYXRoLnV0ZjgoKTsKKyAgICB1aW50NjRf
dCBmbGFncyA9IGlzUHJvZmlsZVBhdGggPyBTQU5EQk9YX05BTUVEX0VYVEVSTkFMIDogMDsKKyAg
ICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgIGlmIChzYW5kYm94X2lu
aXRfd2l0aF9wYXJhbWV0ZXJzKHRlbXAuZGF0YSgpLCBmbGFncywgcGFyYW1ldGVycy5uYW1lZFBh
cmFtZXRlckFycmF5KCksICZlcnJvckJ1ZikpIHsKKyAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9E
RUNMQVJBVElPTlNfRU5ECisgICAgICAgIFdURkxvZ0Fsd2F5cygiJXM6IENvdWxkIG5vdCBpbml0
aWFsaXplIHNhbmRib3ggcHJvZmlsZSBbJXNdLCBlcnJvciAnJXMnXG4iLCBnZXRwcm9nbmFtZSgp
LCB0ZW1wLmRhdGEoKSwgZXJyb3JCdWYpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgY291
bnQgPSBwYXJhbWV0ZXJzLmNvdW50KCk7IGkgIT0gY291bnQ7ICsraSkKKyAgICAgICAgICAgIFdU
RkxvZ0Fsd2F5cygiJXM9JXNcbiIsIHBhcmFtZXRlcnMubmFtZShpKSwgcGFyYW1ldGVycy52YWx1
ZShpKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3N0YXRpYyBib29sIGFwcGx5U2FuZGJveChjb25zdCBDaGlsZFByb2Nlc3NJbml0aWFsaXph
dGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IFNhbmRib3hJbml0aWFsaXphdGlvblBh
cmFtZXRlcnMmIHNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMsIGNvbnN0IFN0cmluZyYg
ZGF0YVZhdWx0UGFyZW50RGlyZWN0b3J5KQoreworICAgIFN0cmluZyBwcm9maWxlT3JQcm9maWxl
UGF0aDsKKyAgICBib29sIGlzUHJvZmlsZVBhdGg7CisgICAgZ2V0U2FuZGJveFByb2ZpbGVPclBy
b2ZpbGVQYXRoKHNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMsIHByb2ZpbGVPclByb2Zp
bGVQYXRoLCBpc1Byb2ZpbGVQYXRoKTsKKyAgICBpZiAocHJvZmlsZU9yUHJvZmlsZVBhdGguaXNF
bXB0eSgpKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiJXM6IFByb2ZpbGUgcGF0aCBpcyBpbnZh
bGlkXG4iLCBnZXRwcm9nbmFtZSgpKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyNpZiBV
U0UoQ0FDSEVfQ09NUElMRURfU0FOREJPWCkKKyAgICAvLyBUaGUgcGx1Z2luIHByb2Nlc3MncyBE
QVJXSU5fVVNFUl9URU1QX0RJUiBhbmQgREFSV0lOX1VTRVJfQ0FDSEVfRElSIHNhbmRib3ggcGFy
YW1ldGVycyBhcmUgcmFuZG9taXplZCBzbworICAgIC8vIHNvIHRoZSBjb21waWxlZCBzYW5kYm94
IHNob3VsZCBub3QgYmUgY2FjaGVkIGJlY2F1c2UgaXQgd29uJ3QgYmUgcmV1c2VkLgorICAgIGlm
IChwYXJhbWV0ZXJzLnByb2Nlc3NUeXBlID09IENoaWxkUHJvY2Vzczo6UHJvY2Vzc1R5cGU6OlBs
dWdpbikKKyAgICAgICAgcmV0dXJuIGNvbXBpbGVBbmRBcHBseVNhbmRib3hTbG93Q2FzZShwcm9m
aWxlT3JQcm9maWxlUGF0aCwgaXNQcm9maWxlUGF0aCwgc2FuZGJveEluaXRpYWxpemF0aW9uUGFy
YW1ldGVycyk7CisKKyAgICBTYW5kYm94UGFyYW1ldGVyc1B0ciBzYW5kYm94UGFyYW1ldGVycyB7
IHNhbmRib3hfY3JlYXRlX3BhcmFtcygpIH07CisgICAgaWYgKCFzYW5kYm94UGFyYW1ldGVycykg
eworICAgICAgICBXVEZMb2dBbHdheXMoIiVzOiBDb3VsZCBub3QgY3JlYXRlIHNhbmRib3ggcGFy
YW1ldGVyc1xuIiwgZ2V0cHJvZ25hbWUoKSk7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAg
IGF1dG8gaGVhZGVyID0gc2V0QW5kU2VyaWFsaXplU2FuZGJveFBhcmFtZXRlcnMoc2FuZGJveElu
aXRpYWxpemF0aW9uUGFyYW1ldGVycywgc2FuZGJveFBhcmFtZXRlcnMsIHByb2ZpbGVPclByb2Zp
bGVQYXRoLCBpc1Byb2ZpbGVQYXRoKTsKKyAgICBpZiAoIWhlYWRlcikgeworICAgICAgICBXVEZM
b2dBbHdheXMoIiVzOiBTYW5kYm94IHBhcmFtZXRlcnMgYXJlIGludmFsaWRcbiIsIGdldHByb2du
YW1lKCkpOworICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIFN0cmluZyBkaXJlY3RvcnlQ
YXRoIHsgc2FuZGJveERpcmVjdG9yeShwYXJhbWV0ZXJzLnByb2Nlc3NUeXBlLCBkYXRhVmF1bHRQ
YXJlbnREaXJlY3RvcnkpIH07CisgICAgU3RyaW5nIGZpbGVQYXRoID0gc2FuZGJveEZpbGVQYXRo
KGRpcmVjdG9yeVBhdGgsICpoZWFkZXIpOworICAgIFNhbmRib3hJbmZvIGluZm8geworICAgICAg
ICBkYXRhVmF1bHRQYXJlbnREaXJlY3RvcnksCisgICAgICAgIGRpcmVjdG9yeVBhdGgsCisgICAg
ICAgIGZpbGVQYXRoLAorICAgICAgICBzYW5kYm94UGFyYW1ldGVycywKKyAgICAgICAgKmhlYWRl
ciwKKyAgICAgICAgcGFyYW1ldGVycy5wcm9jZXNzVHlwZSwKKyAgICAgICAgc2FuZGJveEluaXRp
YWxpemF0aW9uUGFyYW1ldGVycywKKyAgICAgICAgcHJvZmlsZU9yUHJvZmlsZVBhdGgsCisgICAg
ICAgIGlzUHJvZmlsZVBhdGgKKyAgICB9OworCisgICAgaWYgKHRyeUFwcGx5Q2FjaGVkU2FuZGJv
eChpbmZvKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBTYW5kYm94UHJvZmlsZVB0ciBz
YW5kYm94UHJvZmlsZSA9IGNvbXBpbGVBbmRDYWNoZVNhbmRib3hQcm9maWxlKGluZm8pOworICAg
IGlmICghc2FuZGJveFByb2ZpbGUpCisgICAgICAgIHJldHVybiBjb21waWxlQW5kQXBwbHlTYW5k
Ym94U2xvd0Nhc2UocHJvZmlsZU9yUHJvZmlsZVBhdGgsIGlzUHJvZmlsZVBhdGgsIHNhbmRib3hJ
bml0aWFsaXphdGlvblBhcmFtZXRlcnMpOworCisgICAgaWYgKHNhbmRib3hfYXBwbHkoc2FuZGJv
eFByb2ZpbGUuZ2V0KCkpKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiJXM6IENvdWxkIG5vdCBh
cHBseSBjb21waWxlZCBzYW5kYm94OiAlc1xuIiwgZ2V0cHJvZ25hbWUoKSwgc3RyZXJyb3IoZXJy
bm8pKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHBhcmFtZXRlcnMpOworICAgIFVOVVNFRF9QQVJBTShkYXRhVmF1
bHRQYXJlbnREaXJlY3RvcnkpOworICAgIHJldHVybiBjb21waWxlQW5kQXBwbHlTYW5kYm94U2xv
d0Nhc2UocHJvZmlsZU9yUHJvZmlsZVBhdGgsIGlzUHJvZmlsZVBhdGgsIHNhbmRib3hJbml0aWFs
aXphdGlvblBhcmFtZXRlcnMpOworI2VuZGlmIC8vIFVTRShDQUNIRV9DT01QSUxFRF9TQU5EQk9Y
KQorfQorCitzdGF0aWMgdm9pZCBpbml0aWFsaXplU2FuZGJveFBhcmFtZXRlcnMoY29uc3QgQ2hp
bGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBTYW5kYm94SW5p
dGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBzYW5kYm94UGFyYW1ldGVycykKK3sKKyAgICAvLyBWZXJp
ZnkgdXNlciBkaXJlY3Rvcnkgc3VmZml4LgorICAgIGlmIChzYW5kYm94UGFyYW1ldGVycy51c2Vy
RGlyZWN0b3J5U3VmZml4KCkuaXNOdWxsKCkpIHsKKyAgICAgICAgYXV0byB1c2VyRGlyZWN0b3J5
U3VmZml4ID0gcGFyYW1ldGVycy5leHRyYUluaXRpYWxpemF0aW9uRGF0YS5maW5kKCJ1c2VyLWRp
cmVjdG9yeS1zdWZmaXgiKTsKKyAgICAgICAgaWYgKHVzZXJEaXJlY3RvcnlTdWZmaXggIT0gcGFy
YW1ldGVycy5leHRyYUluaXRpYWxpemF0aW9uRGF0YS5lbmQoKSkKKyAgICAgICAgICAgIHNhbmRi
b3hQYXJhbWV0ZXJzLnNldFVzZXJEaXJlY3RvcnlTdWZmaXgoW21ha2VTdHJpbmcodXNlckRpcmVj
dG9yeVN1ZmZpeC0+dmFsdWUsICcvJywgU3RyaW5nKFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVu
ZGxlSWRlbnRpZmllcl0pKSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb25dKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBTdHJpbmcgY2xpZW50SWRlbnRpZmllciA9IGNvZGVTaWduaW5nSWRl
bnRpZmllcihwYXJhbWV0ZXJzLmNvbm5lY3Rpb25JZGVudGlmaWVyLnhwY0Nvbm5lY3Rpb24uZ2V0
KCkpOworICAgICAgICAgICAgaWYgKGNsaWVudElkZW50aWZpZXIuaXNOdWxsKCkpCisgICAgICAg
ICAgICAgICAgY2xpZW50SWRlbnRpZmllciA9IHBhcmFtZXRlcnMuY2xpZW50SWRlbnRpZmllcjsK
KyAgICAgICAgICAgIFN0cmluZyBkZWZhdWx0VXNlckRpcmVjdG9yeVN1ZmZpeCA9IG1ha2VTdHJp
bmcoU3RyaW5nKFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0pLCAnKycs
IGNsaWVudElkZW50aWZpZXIpOworICAgICAgICAgICAgc2FuZGJveFBhcmFtZXRlcnMuc2V0VXNl
ckRpcmVjdG9yeVN1ZmZpeChkZWZhdWx0VXNlckRpcmVjdG9yeVN1ZmZpeCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBTdHJpbmcgb3NTeXN0ZW1NYXJrZXRpbmdWZXJzaW9uID0gc3lzdGVtTWFy
a2V0aW5nVmVyc2lvbigpOworICAgIFZlY3RvcjxTdHJpbmc+IG9zVmVyc2lvblBhcnRzID0gb3NT
eXN0ZW1NYXJrZXRpbmdWZXJzaW9uLnNwbGl0KCcuJyk7CisgICAgaWYgKG9zVmVyc2lvblBhcnRz
LnNpemUoKSA8IDIpIHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCIlczogQ291bGRuJ3QgZmluZCBP
UyBWZXJzaW9uXG4iLCBnZXRwcm9nbmFtZSgpKTsKKyAgICAgICAgZXhpdChFWF9OT1BFUk0pOwor
ICAgIH0KKyAgICBTdHJpbmcgb3NWZXJzaW9uID0gb3NWZXJzaW9uUGFydHNbMF0gKyAnLicgKyBv
c1ZlcnNpb25QYXJ0c1sxXTsKKyAgICBzYW5kYm94UGFyYW1ldGVycy5hZGRQYXJhbWV0ZXIoIl9P
U19WRVJTSU9OIiwgb3NWZXJzaW9uLnV0ZjgoKS5kYXRhKCkpOworCisgICAgLy8gVXNlIHByaXZh
dGUgdGVtcG9yYXJ5IGFuZCBjYWNoZSBkaXJlY3Rvcmllcy4KKyAgICBzZXRlbnYoIkRJUkhFTFBF
Ul9VU0VSX0RJUl9TVUZGSVgiLCBGaWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
c2FuZGJveFBhcmFtZXRlcnMudXNlckRpcmVjdG9yeVN1ZmZpeCgpKS5kYXRhKCksIDEpOworICAg
IGNoYXIgdGVtcG9yYXJ5RGlyZWN0b3J5W1BBVEhfTUFYXTsKKyAgICBpZiAoIWNvbmZzdHIoX0NT
X0RBUldJTl9VU0VSX1RFTVBfRElSLCB0ZW1wb3JhcnlEaXJlY3RvcnksIHNpemVvZih0ZW1wb3Jh
cnlEaXJlY3RvcnkpKSkgeworICAgICAgICBXVEZMb2dBbHdheXMoIiVzOiBjb3VsZG4ndCByZXRy
aWV2ZSBwcml2YXRlIHRlbXBvcmFyeSBkaXJlY3RvcnkgcGF0aDogJWRcbiIsIGdldHByb2duYW1l
KCksIGVycm5vKTsKKyAgICAgICAgZXhpdChFWF9OT1BFUk0pOworICAgIH0KKyAgICBzZXRlbnYo
IlRNUERJUiIsIHRlbXBvcmFyeURpcmVjdG9yeSwgMSk7CisKKyAgICBzYW5kYm94UGFyYW1ldGVy
cy5hZGRQYXRoUGFyYW1ldGVyKCJXRUJLSVQyX0ZSQU1FV09SS19ESVIiLCBbW3dlYktpdDJCdW5k
bGUoKSBidW5kbGVQYXRoXSBzdHJpbmdCeURlbGV0aW5nTGFzdFBhdGhDb21wb25lbnRdKTsKKyAg
ICBzYW5kYm94UGFyYW1ldGVycy5hZGRDb25mRGlyZWN0b3J5UGFyYW1ldGVyKCJEQVJXSU5fVVNF
Ul9URU1QX0RJUiIsIF9DU19EQVJXSU5fVVNFUl9URU1QX0RJUik7CisgICAgc2FuZGJveFBhcmFt
ZXRlcnMuYWRkQ29uZkRpcmVjdG9yeVBhcmFtZXRlcigiREFSV0lOX1VTRVJfQ0FDSEVfRElSIiwg
X0NTX0RBUldJTl9VU0VSX0NBQ0hFX0RJUik7CisKKyAgICBjaGFyIGJ1ZmZlcls0MDk2XTsKKyAg
ICBpbnQgYnVmZmVyU2l6ZSA9IHNpemVvZihidWZmZXIpOworICAgIHN0cnVjdCBwYXNzd2QgcHdk
OworICAgIHN0cnVjdCBwYXNzd2QqIHJlc3VsdCA9IDA7CisgICAgaWYgKGdldHB3dWlkX3IoZ2V0
dWlkKCksICZwd2QsIGJ1ZmZlciwgYnVmZmVyU2l6ZSwgJnJlc3VsdCkgfHwgIXJlc3VsdCkgewor
ICAgICAgICBXVEZMb2dBbHdheXMoIiVzOiBDb3VsZG4ndCBmaW5kIGhvbWUgZGlyZWN0b3J5XG4i
LCBnZXRwcm9nbmFtZSgpKTsKKyAgICAgICAgZXhpdChFWF9OT1BFUk0pOworICAgIH0KKworICAg
IHNhbmRib3hQYXJhbWV0ZXJzLmFkZFBhdGhQYXJhbWV0ZXIoIkhPTUVfRElSIiwgcHdkLnB3X2Rp
cik7CisgICAgU3RyaW5nIHBhdGggPSBTdHJpbmc6OmZyb21VVEY4KHB3ZC5wd19kaXIpOworICAg
IHBhdGguYXBwZW5kKCIvTGlicmFyeSIpOworICAgIHNhbmRib3hQYXJhbWV0ZXJzLmFkZFBhdGhQ
YXJhbWV0ZXIoIkhPTUVfTElCUkFSWV9ESVIiLCBGaWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVz
ZW50YXRpb24ocGF0aCkuZGF0YSgpKTsKKyAgICBwYXRoLmFwcGVuZCgiL1ByZWZlcmVuY2VzIik7
CisgICAgc2FuZGJveFBhcmFtZXRlcnMuYWRkUGF0aFBhcmFtZXRlcigiSE9NRV9MSUJSQVJZX1BS
RUZFUkVOQ0VTX0RJUiIsIEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRo
KS5kYXRhKCkpOworfQorCit2b2lkIENoaWxkUHJvY2Vzczo6aW5pdGlhbGl6ZVNhbmRib3goY29u
c3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBTYW5k
Ym94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBzYW5kYm94UGFyYW1ldGVycykKK3sKKyAgICBU
cmFjZVNjb3BlIHRyYWNlU2NvcGUoSW5pdGlhbGl6ZVNhbmRib3hTdGFydCwgSW5pdGlhbGl6ZVNh
bmRib3hFbmQpOworCisjaWYgVVNFKENBQ0hFX0NPTVBJTEVEX1NBTkRCT1gpCisgICAgLy8gVGhp
cyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6ZVNhbmRib3hQYXJhbWV0ZXJzIHNvIHRo
YXQgdGhlIHBhdGggZG9lcyBub3QgaW5jbHVkZSB0aGUgdXNlciBkaXJlY3Rvcnkgc3VmZml4Lgor
ICAgIC8vIFdlIGRvbid0IHdhbnQgdGhlIHVzZXIgZGlyZWN0b3J5IHN1ZmZpeCBiZWNhdXNlIHdl
IHdhbnQgYWxsIHByb2Nlc3NlcyBvZiB0aGUgc2FtZSB0eXBlIHRvIHVzZSB0aGUgc2FtZSBjYWNo
ZSBkaXJlY3RvcnkuCisgICAgU3RyaW5nIGRhdGFWYXVsdFBhcmVudERpcmVjdG9yeSB7IHNhbmRi
b3hEYXRhVmF1bHRQYXJlbnREaXJlY3RvcnkoKSB9OworI2Vsc2UKKyAgICBTdHJpbmcgZGF0YVZh
dWx0UGFyZW50RGlyZWN0b3J5OworI2VuZGlmCisKKyAgICBpbml0aWFsaXplU2FuZGJveFBhcmFt
ZXRlcnMocGFyYW1ldGVycywgc2FuZGJveFBhcmFtZXRlcnMpOworCisgICAgaWYgKCFhcHBseVNh
bmRib3gocGFyYW1ldGVycywgc2FuZGJveFBhcmFtZXRlcnMsIGRhdGFWYXVsdFBhcmVudERpcmVj
dG9yeSkpIHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCIlczogVW5hYmxlIHRvIGFwcGx5IHNhbmRi
b3hcbiIsIGdldHByb2duYW1lKCkpOworICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIGlm
IChzaG91bGRPdmVycmlkZVF1YXJhbnRpbmUoKSkgeworICAgICAgICAvLyBUaGlzIHdpbGwgb3Zl
cnJpZGUgTFNGaWxlUXVhcmFudGluZUVuYWJsZWQgZnJvbSBJbmZvLnBsaXN0IHVubGVzcyBzYW5k
Ym94IHF1YXJhbnRpbmUgaXMgZ2xvYmFsbHkgZGlzYWJsZWQuCisgICAgICAgIE9TU3RhdHVzIGVy
cm9yID0gZW5hYmxlU2FuZGJveFN0eWxlRmlsZVF1YXJhbnRpbmUoKTsKKyAgICAgICAgaWYgKGVy
cm9yKSB7CisgICAgICAgICAgICBXVEZMb2dBbHdheXMoIiVzOiBDb3VsZG4ndCBlbmFibGUgc2Fu
ZGJveCBzdHlsZSBmaWxlIHF1YXJhbnRpbmU6ICVsZFxuIiwgZ2V0cHJvZ25hbWUoKSwgc3RhdGlj
X2Nhc3Q8bG9uZz4oZXJyb3IpKTsKKyAgICAgICAgICAgIGV4aXQoRVhfTk9QRVJNKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKworI2lmIFVTRShBUFBLSVQpCit2b2lkIENoaWxkUHJvY2Vzczo6c3Rv
cE5TQXBwUnVuTG9vcCgpCit7CisgICAgQVNTRVJUKFtOU0FwcCBpc1J1bm5pbmddKTsKKyAgICBb
TlNBcHAgc3RvcDpuaWxdOworCisgICAgTlNFdmVudCAqZXZlbnQgPSBbTlNFdmVudCBvdGhlckV2
ZW50V2l0aFR5cGU6TlNFdmVudFR5cGVBcHBsaWNhdGlvbkRlZmluZWQgbG9jYXRpb246TlNNYWtl
UG9pbnQoMCwgMCkgbW9kaWZpZXJGbGFnczowIHRpbWVzdGFtcDowLjAgd2luZG93TnVtYmVyOjAg
Y29udGV4dDpuaWwgc3VidHlwZTowIGRhdGExOjAgZGF0YTI6MF07CisgICAgW05TQXBwIHBvc3RF
dmVudDpldmVudCBhdFN0YXJ0OnRydWVdOworfQorI2VuZGlmCisKKyNpZiAhUExBVEZPUk0oSU9T
TUFDKSAmJiBFTkFCTEUoV0VCUFJPQ0VTU19OU1JVTkxPT1ApCit2b2lkIENoaWxkUHJvY2Vzczo6
c3RvcE5TUnVuTG9vcCgpCit7CisgICAgQVNTRVJUKFtOU1J1bkxvb3AgbWFpblJ1bkxvb3BdKTsK
KyAgICBbW05TUnVuTG9vcCBtYWluUnVuTG9vcF0gcGVyZm9ybUJsb2NrOl57CisgICAgICAgIGV4
aXQoMCk7CisgICAgfV07Cit9CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPU01BQykKK3ZvaWQg
Q2hpbGRQcm9jZXNzOjpwbGF0Zm9ybVN0b3BSdW5Mb29wKCkKK3sKKyAgICBYUENTZXJ2aWNlRXhp
dChXVEZNb3ZlKG1fcHJpb3JpdHlCb29zdE1lc3NhZ2UpKTsKK30KKyNlbmRpZgorCit2b2lkIENo
aWxkUHJvY2Vzczo6c2V0UU9TKGludCBsYXRlbmN5UU9TLCBpbnQgdGhyb3VnaHB1dFFPUykKK3sK
KyAgICBpZiAoIWxhdGVuY3lRT1MgJiYgIXRocm91Z2hwdXRRT1MpCisgICAgICAgIHJldHVybjsK
KworICAgIHN0cnVjdCB0YXNrX3Fvc19wb2xpY3kgcW9zaW5mbyA9IHsKKyAgICAgICAgbGF0ZW5j
eVFPUyA/IExBVEVOQ1lfUU9TX1RJRVJfMCArIGxhdGVuY3lRT1MgLSAxIDogTEFURU5DWV9RT1Nf
VElFUl9VTlNQRUNJRklFRCwKKyAgICAgICAgdGhyb3VnaHB1dFFPUyA/IFRIUk9VR0hQVVRfUU9T
X1RJRVJfMCArIHRocm91Z2hwdXRRT1MgLSAxIDogVEhST1VHSFBVVF9RT1NfVElFUl9VTlNQRUNJ
RklFRAorICAgIH07CisKKyAgICB0YXNrX3BvbGljeV9zZXQobWFjaF90YXNrX3NlbGYoKSwgVEFT
S19PVkVSUklERV9RT1NfUE9MSUNZLCAodGFza19wb2xpY3lfdCkmcW9zaW5mbywgVEFTS19RT1Nf
UE9MSUNZX0NPVU5UKTsKK30KKworI2lmIFBMQVRGT1JNKE1BQykKK2Jvb2wgQ2hpbGRQcm9jZXNz
Ojppc1N5c3RlbVdlYktpdCgpCit7CisgICAgc3RhdGljIGJvb2wgaXNTeXN0ZW1XZWJLaXQgPSBb
XSB7CisgICAgICAgIHJldHVybiBbW3dlYktpdDJCdW5kbGUoKSBidW5kbGVQYXRoXSBoYXNQcmVm
aXg6QCIvU3lzdGVtLyJdOworICAgIH0oKTsKKyAgICByZXR1cm4gaXNTeXN0ZW1XZWJLaXQ7Cit9
CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogU291cmNl
L1dlYktpdC9TaGFyZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F1eGlsaWFyeVByb2Nlc3NNYWMubW0JKHJldmlzaW9u
IDI0MDU4OSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdXhpbGlhcnlQcm9jZXNzTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIK
IAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9TTUFDKQotI2ltcG9ydCAiQ2hpbGRQ
cm9jZXNzLmgiCisjaW1wb3J0ICJBdXhpbGlhcnlQcm9jZXNzLmgiCiAKICNpbXBvcnQgIkNvZGVT
aWduaW5nLmgiCiAjaW1wb3J0ICJRdWFyYW50aW5lU1BJLmgiCkBAIC0xMTQsNyArMTE0LDcgQEAg
c3RydWN0IENhY2hlZFNhbmRib3hIZWFkZXIgewogLy8gYnl0ZSBOCiAKIHN0cnVjdCBTYW5kYm94
SW5mbyB7Ci0gICAgU2FuZGJveEluZm8oY29uc3QgU3RyaW5nJiBwYXJlbnREaXJlY3RvcnlQYXRo
LCBjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgsIGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIGNv
bnN0IFNhbmRib3hQYXJhbWV0ZXJzUHRyJiBzYW5kYm94UGFyYW1ldGVycywgY29uc3QgQ1N0cmlu
ZyYgaGVhZGVyLCBjb25zdCBDaGlsZFByb2Nlc3M6OlByb2Nlc3NUeXBlJiBwcm9jZXNzVHlwZSwg
Y29uc3QgU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycyYgaW5pdGlhbGl6YXRpb25QYXJh
bWV0ZXJzLCBjb25zdCBTdHJpbmcmIHByb2ZpbGVPclByb2ZpbGVQYXRoLCBib29sIGlzUHJvZmls
ZVBhdGgpCisgICAgU2FuZGJveEluZm8oY29uc3QgU3RyaW5nJiBwYXJlbnREaXJlY3RvcnlQYXRo
LCBjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgsIGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIGNv
bnN0IFNhbmRib3hQYXJhbWV0ZXJzUHRyJiBzYW5kYm94UGFyYW1ldGVycywgY29uc3QgQ1N0cmlu
ZyYgaGVhZGVyLCBjb25zdCBBdXhpbGlhcnlQcm9jZXNzOjpQcm9jZXNzVHlwZSYgcHJvY2Vzc1R5
cGUsIGNvbnN0IFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmIGluaXRpYWxpemF0aW9u
UGFyYW1ldGVycywgY29uc3QgU3RyaW5nJiBwcm9maWxlT3JQcm9maWxlUGF0aCwgYm9vbCBpc1By
b2ZpbGVQYXRoKQogICAgICAgICA6IHBhcmVudERpcmVjdG9yeVBhdGggeyBwYXJlbnREaXJlY3Rv
cnlQYXRoIH0KICAgICAgICAgLCBkaXJlY3RvcnlQYXRoIHsgZGlyZWN0b3J5UGF0aCB9CiAgICAg
ICAgICwgZmlsZVBhdGggeyBmaWxlUGF0aCB9CkBAIC0xMzIsNyArMTMyLDcgQEAgc3RydWN0IFNh
bmRib3hJbmZvIHsKICAgICBjb25zdCBTdHJpbmcmIGZpbGVQYXRoOwogICAgIGNvbnN0IFNhbmRi
b3hQYXJhbWV0ZXJzUHRyJiBzYW5kYm94UGFyYW1ldGVyczsKICAgICBjb25zdCBDU3RyaW5nJiBo
ZWFkZXI7Ci0gICAgY29uc3QgQ2hpbGRQcm9jZXNzOjpQcm9jZXNzVHlwZSYgcHJvY2Vzc1R5cGU7
CisgICAgY29uc3QgQXV4aWxpYXJ5UHJvY2Vzczo6UHJvY2Vzc1R5cGUmIHByb2Nlc3NUeXBlOwog
ICAgIGNvbnN0IFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmIGluaXRpYWxpemF0aW9u
UGFyYW1ldGVyczsKICAgICBjb25zdCBTdHJpbmcmIHByb2ZpbGVPclByb2ZpbGVQYXRoOwogICAg
IGNvbnN0IGJvb2wgaXNQcm9maWxlUGF0aDsKQEAgLTE0OSwxMyArMTQ5LDEzIEBAIHN0YXRpYyB2
b2lkIGluaXRpYWxpemVUaW1lckNvYWxlc2NpbmdQb2wKICAgICBBU1NFUlRfVU5VU0VEKGtyLCBr
ciA9PSBLRVJOX1NVQ0NFU1MpOwogfQogCi12b2lkIENoaWxkUHJvY2Vzczo6bGF1bmNoU2Vydmlj
ZXNDaGVja0luKCkKK3ZvaWQgQXV4aWxpYXJ5UHJvY2Vzczo6bGF1bmNoU2VydmljZXNDaGVja0lu
KCkKIHsKICAgICBfTFNTZXRBcHBsaWNhdGlvbkxhdW5jaFNlcnZpY2VzU2VydmVyQ29ubmVjdGlv
blN0YXR1cygwLCAwKTsKICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiB1bnVzZWQgPSBf
TFNBcHBsaWNhdGlvbkNoZWNrSW4oa0xTRGVmYXVsdFNlc3Npb25JRCwgQ0ZCdW5kbGVHZXRJbmZv
RGljdGlvbmFyeShDRkJ1bmRsZUdldE1haW5CdW5kbGUoKSkpOwogfQogCi12b2lkIENoaWxkUHJv
Y2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplKCkKK3ZvaWQgQXV4aWxpYXJ5UHJvY2Vzczo6cGxhdGZv
cm1Jbml0aWFsaXplKCkKIHsKICAgICBpbml0aWFsaXplVGltZXJDb2FsZXNjaW5nUG9saWN5KCk7
CiAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBjaGFuZ2VDdXJyZW50RGlyZWN0
b3J5UGF0aDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZVBhdGhdXTsKQEAgLTIxMSwxNCAr
MjExLDE0IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8Y2hhcj4+IGZpbGVDb250ZW4KICNpZiBV
U0UoQVBQTEVfSU5URVJOQUxfU0RLKQogLy8gVGhlc2Ugc3RyaW5ncyBtdXN0IG1hdGNoIHRoZSBs
YXN0IHNlZ21lbnQgb2YgdGhlICJjb20uYXBwbGUucm9vdGxlc3Muc3RvcmFnZS48dGhpcyBwYXJ0
IG11c3QgbWF0Y2g+IiBlbnRyeSBpbiBlYWNoCiAvLyBwcm9jZXNzJ3MgcmVzdHJpY3RlZCBlbnRp
dGxlbWVudHMgZmlsZSAoZXguIENvbmZpZ3VyYXRpb25zL05ldHdvcmtpbmctT1NYLXJlc3RyaWN0
ZWQuZW50aXRsZW1lbnRzKS4KLWNvbnN0ZXhwciBjb25zdCBjaGFyKiBwcm9jZXNzU3RvcmFnZUNs
YXNzKENoaWxkUHJvY2Vzczo6UHJvY2Vzc1R5cGUgdHlwZSkKK2NvbnN0ZXhwciBjb25zdCBjaGFy
KiBwcm9jZXNzU3RvcmFnZUNsYXNzKEF1eGlsaWFyeVByb2Nlc3M6OlByb2Nlc3NUeXBlIHR5cGUp
CiB7CiAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBDaGlsZFByb2Nlc3M6OlByb2Nlc3NU
eXBlOjpXZWJDb250ZW50OgorICAgIGNhc2UgQXV4aWxpYXJ5UHJvY2Vzczo6UHJvY2Vzc1R5cGU6
OldlYkNvbnRlbnQ6CiAgICAgICAgIHJldHVybiAiV2ViS2l0V2ViQ29udGVudFNhbmRib3giOwot
ICAgIGNhc2UgQ2hpbGRQcm9jZXNzOjpQcm9jZXNzVHlwZTo6TmV0d29yazoKKyAgICBjYXNlIEF1
eGlsaWFyeVByb2Nlc3M6OlByb2Nlc3NUeXBlOjpOZXR3b3JrOgogICAgICAgICByZXR1cm4gIldl
YktpdE5ldHdvcmtpbmdTYW5kYm94IjsKLSAgICBjYXNlIENoaWxkUHJvY2Vzczo6UHJvY2Vzc1R5
cGU6OlBsdWdpbjoKKyAgICBjYXNlIEF1eGlsaWFyeVByb2Nlc3M6OlByb2Nlc3NUeXBlOjpQbHVn
aW46CiAgICAgICAgIHJldHVybiAiV2ViS2l0UGx1Z2luU2FuZGJveCI7CiAgICAgfQogfQpAQCAt
MjY2LDE4ICsyNjYsMTggQEAgc3RhdGljIFN0cmluZyBzYW5kYm94RGF0YVZhdWx0UGFyZW50RGly
ZQogICAgIHJldHVybiByZXNvbHZlZFBhdGg7CiB9CiAKLXN0YXRpYyBTdHJpbmcgc2FuZGJveERp
cmVjdG9yeShDaGlsZFByb2Nlc3M6OlByb2Nlc3NUeXBlIHByb2Nlc3NUeXBlLCBjb25zdCBTdHJp
bmcmIHBhcmVudERpcmVjdG9yeSkKK3N0YXRpYyBTdHJpbmcgc2FuZGJveERpcmVjdG9yeShBdXhp
bGlhcnlQcm9jZXNzOjpQcm9jZXNzVHlwZSBwcm9jZXNzVHlwZSwgY29uc3QgU3RyaW5nJiBwYXJl
bnREaXJlY3RvcnkpCiB7CiAgICAgU3RyaW5nQnVpbGRlciBkaXJlY3Rvcnk7CiAgICAgZGlyZWN0
b3J5LmFwcGVuZChwYXJlbnREaXJlY3RvcnkpOwogICAgIHN3aXRjaCAocHJvY2Vzc1R5cGUpIHsK
LSAgICBjYXNlIENoaWxkUHJvY2Vzczo6UHJvY2Vzc1R5cGU6OldlYkNvbnRlbnQ6CisgICAgY2Fz
ZSBBdXhpbGlhcnlQcm9jZXNzOjpQcm9jZXNzVHlwZTo6V2ViQ29udGVudDoKICAgICAgICAgZGly
ZWN0b3J5LmFwcGVuZCgiL2NvbS5hcHBsZS5XZWJLaXQuV2ViQ29udGVudC5TYW5kYm94Iik7CiAg
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2hpbGRQcm9jZXNzOjpQcm9jZXNzVHlwZTo6TmV0d29y
azoKKyAgICBjYXNlIEF1eGlsaWFyeVByb2Nlc3M6OlByb2Nlc3NUeXBlOjpOZXR3b3JrOgogICAg
ICAgICBkaXJlY3RvcnkuYXBwZW5kKCIvY29tLmFwcGxlLldlYktpdC5OZXR3b3JraW5nLlNhbmRi
b3giKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDaGlsZFByb2Nlc3M6OlByb2Nlc3NUeXBl
OjpQbHVnaW46CisgICAgY2FzZSBBdXhpbGlhcnlQcm9jZXNzOjpQcm9jZXNzVHlwZTo6UGx1Z2lu
OgogICAgICAgICBkaXJlY3RvcnkuYXBwZW5kKCIvY29tLmFwcGxlLldlYktpdC5QbHVnaW4uU2Fu
ZGJveCIpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC01MzQsNyArNTM0LDcgQEAgc3RhdGlj
IGJvb2wgY29tcGlsZUFuZEFwcGx5U2FuZGJveFNsb3dDYQogICAgIHJldHVybiB0cnVlOwogfQog
Ci1zdGF0aWMgYm9vbCBhcHBseVNhbmRib3goY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRp
b25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJh
bWV0ZXJzJiBzYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzLCBjb25zdCBTdHJpbmcmIGRh
dGFWYXVsdFBhcmVudERpcmVjdG9yeSkKK3N0YXRpYyBib29sIGFwcGx5U2FuZGJveChjb25zdCBB
dXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25z
dCBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBzYW5kYm94SW5pdGlhbGl6YXRpb25Q
YXJhbWV0ZXJzLCBjb25zdCBTdHJpbmcmIGRhdGFWYXVsdFBhcmVudERpcmVjdG9yeSkKIHsKICAg
ICBTdHJpbmcgcHJvZmlsZU9yUHJvZmlsZVBhdGg7CiAgICAgYm9vbCBpc1Byb2ZpbGVQYXRoOwpA
QCAtNTQ3LDcgKzU0Nyw3IEBAIHN0YXRpYyBib29sIGFwcGx5U2FuZGJveChjb25zdCBDaGlsZFBy
b2MKICNpZiBVU0UoQ0FDSEVfQ09NUElMRURfU0FOREJPWCkKICAgICAvLyBUaGUgcGx1Z2luIHBy
b2Nlc3MncyBEQVJXSU5fVVNFUl9URU1QX0RJUiBhbmQgREFSV0lOX1VTRVJfQ0FDSEVfRElSIHNh
bmRib3ggcGFyYW1ldGVycyBhcmUgcmFuZG9taXplZCBzbwogICAgIC8vIHNvIHRoZSBjb21waWxl
ZCBzYW5kYm94IHNob3VsZCBub3QgYmUgY2FjaGVkIGJlY2F1c2UgaXQgd29uJ3QgYmUgcmV1c2Vk
LgotICAgIGlmIChwYXJhbWV0ZXJzLnByb2Nlc3NUeXBlID09IENoaWxkUHJvY2Vzczo6UHJvY2Vz
c1R5cGU6OlBsdWdpbikKKyAgICBpZiAocGFyYW1ldGVycy5wcm9jZXNzVHlwZSA9PSBBdXhpbGlh
cnlQcm9jZXNzOjpQcm9jZXNzVHlwZTo6UGx1Z2luKQogICAgICAgICByZXR1cm4gY29tcGlsZUFu
ZEFwcGx5U2FuZGJveFNsb3dDYXNlKHByb2ZpbGVPclByb2ZpbGVQYXRoLCBpc1Byb2ZpbGVQYXRo
LCBzYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzKTsKIAogICAgIFNhbmRib3hQYXJhbWV0
ZXJzUHRyIHNhbmRib3hQYXJhbWV0ZXJzIHsgc2FuZGJveF9jcmVhdGVfcGFyYW1zKCkgfTsKQEAg
LTU5NSw3ICs1OTUsNyBAQCBzdGF0aWMgYm9vbCBhcHBseVNhbmRib3goY29uc3QgQ2hpbGRQcm9j
CiAjZW5kaWYgLy8gVVNFKENBQ0hFX0NPTVBJTEVEX1NBTkRCT1gpCiB9CiAKLXN0YXRpYyB2b2lk
IGluaXRpYWxpemVTYW5kYm94UGFyYW1ldGVycyhjb25zdCBDaGlsZFByb2Nlc3NJbml0aWFsaXph
dGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRl
cnMmIHNhbmRib3hQYXJhbWV0ZXJzKQorc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVNhbmRib3hQYXJh
bWV0ZXJzKGNvbnN0IEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmIHBh
cmFtZXRlcnMsIFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmIHNhbmRib3hQYXJhbWV0
ZXJzKQogewogICAgIC8vIFZlcmlmeSB1c2VyIGRpcmVjdG9yeSBzdWZmaXguCiAgICAgaWYgKHNh
bmRib3hQYXJhbWV0ZXJzLnVzZXJEaXJlY3RvcnlTdWZmaXgoKS5pc051bGwoKSkgewpAQCAtNjUw
LDcgKzY1MCw3IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVTYW5kYm94UGFyYW1ldGVycygKICAg
ICBzYW5kYm94UGFyYW1ldGVycy5hZGRQYXRoUGFyYW1ldGVyKCJIT01FX0xJQlJBUllfUFJFRkVS
RU5DRVNfRElSIiwgRmlsZVN5c3RlbTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRh
dGEoKSk7CiB9CiAKLXZvaWQgQ2hpbGRQcm9jZXNzOjppbml0aWFsaXplU2FuZGJveChjb25zdCBD
aGlsZFByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIFNhbmRib3hJ
bml0aWFsaXphdGlvblBhcmFtZXRlcnMmIHNhbmRib3hQYXJhbWV0ZXJzKQordm9pZCBBdXhpbGlh
cnlQcm9jZXNzOjppbml0aWFsaXplU2FuZGJveChjb25zdCBBdXhpbGlhcnlQcm9jZXNzSW5pdGlh
bGl6YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJh
bWV0ZXJzJiBzYW5kYm94UGFyYW1ldGVycykKIHsKICAgICBUcmFjZVNjb3BlIHRyYWNlU2NvcGUo
SW5pdGlhbGl6ZVNhbmRib3hTdGFydCwgSW5pdGlhbGl6ZVNhbmRib3hFbmQpOwogCkBAIC02ODAs
NyArNjgwLDcgQEAgdm9pZCBDaGlsZFByb2Nlc3M6OmluaXRpYWxpemVTYW5kYm94KGNvbgogfQog
CiAjaWYgVVNFKEFQUEtJVCkKLXZvaWQgQ2hpbGRQcm9jZXNzOjpzdG9wTlNBcHBSdW5Mb29wKCkK
K3ZvaWQgQXV4aWxpYXJ5UHJvY2Vzczo6c3RvcE5TQXBwUnVuTG9vcCgpCiB7CiAgICAgQVNTRVJU
KFtOU0FwcCBpc1J1bm5pbmddKTsKICAgICBbTlNBcHAgc3RvcDpuaWxdOwpAQCAtNjkxLDcgKzY5
MSw3IEBAIHZvaWQgQ2hpbGRQcm9jZXNzOjpzdG9wTlNBcHBSdW5Mb29wKCkKICNlbmRpZgogCiAj
aWYgIVBMQVRGT1JNKElPU01BQykgJiYgRU5BQkxFKFdFQlBST0NFU1NfTlNSVU5MT09QKQotdm9p
ZCBDaGlsZFByb2Nlc3M6OnN0b3BOU1J1bkxvb3AoKQordm9pZCBBdXhpbGlhcnlQcm9jZXNzOjpz
dG9wTlNSdW5Mb29wKCkKIHsKICAgICBBU1NFUlQoW05TUnVuTG9vcCBtYWluUnVuTG9vcF0pOwog
ICAgIFtbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBwZXJmb3JtQmxvY2s6XnsKQEAgLTcwMSwxMyAr
NzAxLDEzIEBAIHZvaWQgQ2hpbGRQcm9jZXNzOjpzdG9wTlNSdW5Mb29wKCkKICNlbmRpZgogCiAj
aWYgUExBVEZPUk0oSU9TTUFDKQotdm9pZCBDaGlsZFByb2Nlc3M6OnBsYXRmb3JtU3RvcFJ1bkxv
b3AoKQordm9pZCBBdXhpbGlhcnlQcm9jZXNzOjpwbGF0Zm9ybVN0b3BSdW5Mb29wKCkKIHsKICAg
ICBYUENTZXJ2aWNlRXhpdChXVEZNb3ZlKG1fcHJpb3JpdHlCb29zdE1lc3NhZ2UpKTsKIH0KICNl
bmRpZgogCi12b2lkIENoaWxkUHJvY2Vzczo6c2V0UU9TKGludCBsYXRlbmN5UU9TLCBpbnQgdGhy
b3VnaHB1dFFPUykKK3ZvaWQgQXV4aWxpYXJ5UHJvY2Vzczo6c2V0UU9TKGludCBsYXRlbmN5UU9T
LCBpbnQgdGhyb3VnaHB1dFFPUykKIHsKICAgICBpZiAoIWxhdGVuY3lRT1MgJiYgIXRocm91Z2hw
dXRRT1MpCiAgICAgICAgIHJldHVybjsKQEAgLTcyMSw3ICs3MjEsNyBAQCB2b2lkIENoaWxkUHJv
Y2Vzczo6c2V0UU9TKGludCBsYXRlbmN5UU9TCiB9CiAKICNpZiBQTEFURk9STShNQUMpCi1ib29s
IENoaWxkUHJvY2Vzczo6aXNTeXN0ZW1XZWJLaXQoKQorYm9vbCBBdXhpbGlhcnlQcm9jZXNzOjpp
c1N5c3RlbVdlYktpdCgpCiB7CiAgICAgc3RhdGljIGJvb2wgaXNTeXN0ZW1XZWJLaXQgPSBbXSB7
CiAgICAgICAgIHJldHVybiBbW3dlYktpdDJCdW5kbGUoKSBidW5kbGVQYXRoXSBoYXNQcmVmaXg6
QCIvU3lzdGVtLyJdOwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0NoaWxkUHJvY2Vz
c01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQ2hpbGRQcm9j
ZXNzTWFjLm1tCShyZXZpc2lvbiAyNDA1ODkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMv
Q2hpbGRQcm9jZXNzTWFjLm1tCShub25leGlzdGVudCkKQEAgLTEsNzM1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotCi0jaWYgUExBVEZPUk0oTUFDKSB8fCBQ
TEFURk9STShJT1NNQUMpCi0jaW1wb3J0ICJDaGlsZFByb2Nlc3MuaCIKLQotI2ltcG9ydCAiQ29k
ZVNpZ25pbmcuaCIKLSNpbXBvcnQgIlF1YXJhbnRpbmVTUEkuaCIKLSNpbXBvcnQgIlNhbmRib3hJ
bml0aWFsaXphdGlvblBhcmFtZXRlcnMuaCIKLSNpbXBvcnQgIlNhbmRib3hVdGlsaXRpZXMuaCIK
LSNpbXBvcnQgIldLRm91bmRhdGlvbi5oIgotI2ltcG9ydCAiWFBDU2VydmljZUVudHJ5UG9pbnQu
aCIKLSNpbXBvcnQgPFdlYkNvcmUvRmlsZUhhbmRsZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9TeXN0
ZW1WZXJzaW9uLmg+Ci0jaW1wb3J0IDxtYWNoLW8vZHlsZC5oPgotI2ltcG9ydCA8bWFjaC9tYWNo
Lmg+Ci0jaW1wb3J0IDxtYWNoL3Rhc2suaD4KLSNpbXBvcnQgPHBhbC9jcnlwdG8vQ3J5cHRvRGln
ZXN0Lmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NvY29hL0xhdW5jaFNlcnZpY2VzU1BJLmg+Ci0jaW1w
b3J0IDxwd2QuaD4KLSNpbXBvcnQgPHN0ZGxpYi5oPgotI2ltcG9ydCA8c3lzL3N5c2N0bC5oPgot
I2ltcG9ydCA8c3lzZXhpdHMuaD4KLSNpbXBvcnQgPHd0Zi9EYXRhTG9nLmg+Ci0jaW1wb3J0IDx3
dGYvRmlsZVN5c3RlbS5oPgotI2ltcG9ydCA8d3RmL1JhbmRvbU51bWJlci5oPgotI2ltcG9ydCA8
d3RmL1Njb3BlLmg+Ci0jaW1wb3J0IDx3dGYvU3lzdGVtVHJhY2luZy5oPgotI2ltcG9ydCA8d3Rm
L1dhbGxUaW1lLmg+Ci0jaW1wb3J0IDx3dGYvc3BpL2Rhcndpbi9TYW5kYm94U1BJLmg+Ci0jaW1w
b3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KLQotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0jaW1wb3J0IDxBcHBsaWNhdGlvblNl
cnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXNQcml2Lmg+Ci0jaW1wb3J0IDxyb290bGVzcy5oPgot
I2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTAxMzAwCi0jZGVmaW5lIFVTRV9DQUNIRV9DT01QSUxFRF9TQU5EQk9YIDEKLSNl
bHNlCi0jZGVmaW5lIFVTRV9DQUNIRV9DT01QSUxFRF9TQU5EQk9YIDAKLSNlbmRpZgotCi0jaWYg
UExBVEZPUk0oSU9TTUFDKSAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotZW51bSBMU1Nlc3Np
b25JRCB7Ci0gICAga0xTRGVmYXVsdFNlc3Npb25JRCA9IC0yLAotfTsKLSNlbmRpZgotCi10eXBl
ZGVmIGJvb2wgKF5MU1NlcnZlckNvbm5lY3Rpb25BbGxvd2VkQmxvY2spICggQ0ZEaWN0aW9uYXJ5
UmVmIG9wdGlvbnNSZWYgKTsKLWV4dGVybiAiQyIgdm9pZCBfTFNTZXRBcHBsaWNhdGlvbkxhdW5j
aFNlcnZpY2VzU2VydmVyQ29ubmVjdGlvblN0YXR1cyh1aW50NjRfdCBmbGFncywgTFNTZXJ2ZXJD
b25uZWN0aW9uQWxsb3dlZEJsb2NrIGJsb2NrKTsKLWV4dGVybiAiQyIgQ0ZEaWN0aW9uYXJ5UmVm
IF9MU0FwcGxpY2F0aW9uQ2hlY2tJbihMU1Nlc3Npb25JRCBzZXNzaW9uSUQsIENGRGljdGlvbmFy
eVJlZiBhcHBsaWNhdGlvbkluZm8pOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwotCi0jaWYgVVNFKENBQ0hFX0NPTVBJTEVEX1NBTkRCT1gpCi11c2luZyBT
YW5kYm94UHJvZmlsZSA9IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8c2FuZGJveF9wcm9m
aWxlX3Q+Ojp0eXBlOwotc3RydWN0IFNhbmRib3hQcm9maWxlRGVsZXRlciB7Ci0gICAgdm9pZCBv
cGVyYXRvcigpKFNhbmRib3hQcm9maWxlKiBwdHIpCi0gICAgewotICAgICAgICBzYW5kYm94X2Zy
ZWVfcHJvZmlsZShwdHIpOwotICAgIH0KLX07Ci11c2luZyBTYW5kYm94UHJvZmlsZVB0ciA9IHN0
ZDo6dW5pcXVlX3B0cjxTYW5kYm94UHJvZmlsZSwgU2FuZGJveFByb2ZpbGVEZWxldGVyPjsKLQot
dXNpbmcgU2FuZGJveFBhcmFtZXRlcnMgPSB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVyPHNh
bmRib3hfcGFyYW1zX3Q+Ojp0eXBlOwotc3RydWN0IFNhbmRib3hQYXJhbWV0ZXJzRGVsZXRlciB7
Ci0gICAgdm9pZCBvcGVyYXRvcigpKFNhbmRib3hQYXJhbWV0ZXJzKiBwdHIpCi0gICAgewotICAg
ICAgICBzYW5kYm94X2ZyZWVfcGFyYW1zKHB0cik7Ci0gICAgfQotfTsKLXVzaW5nIFNhbmRib3hQ
YXJhbWV0ZXJzUHRyID0gc3RkOjp1bmlxdWVfcHRyPFNhbmRib3hQYXJhbWV0ZXJzLCBTYW5kYm94
UGFyYW1ldGVyc0RlbGV0ZXI+OwotCi1zdHJ1Y3QgQ2FjaGVkU2FuZGJveEhlYWRlciB7Ci0gICAg
dWludDMyX3QgdmVyc2lvbk51bWJlcjsKLSAgICB1aW50MzJfdCBsaWJzYW5kYm94VmVyc2lvbjsK
LSAgICB1aW50MzJfdCBoZWFkZXJTaXplOwotICAgIHVpbnQzMl90IGJ1aWx0aW5TaXplOyAvLyBJ
ZiBhIGJ1aWx0aW4gZG9lc24ndCBleGlzdCwgdGhpcyBpcyBVSU5UX01BWC4KLSAgICB1aW50MzJf
dCBkYXRhU2l6ZTsKLX07Ci0vLyBUaGUgZmlsZSBpcyBsYXllZCBvdXQgb24gZGlzayBsaWtlOgot
Ly8gYnl0ZSAwCi0vLyBDYWNoZWRTYW5kYm94SGVhZGVyIDwtIHNpemVvZihDYWNoZWRTYW5kYm94
SGVhZGVyKSBieXRlcwotLy8gU2FuZGJveEhlYWRlciA8LSBDYWNoZWRTYW5kYm94SGVhZGVyOjpo
ZWFkZXJTaXplIGJ5dGVzCi0vLyBbU2FuZGJveEJ1aWx0aW5dIG9wdGlvbmFsLiBQcmVzZW50IGlm
IENhY2hlZFNhbmRib3hIZWFkZXI6OmJ1aWx0aW5TaXplIGlzIG5vdCBVSU5UX01BWC4gSWYgcHJl
c2VudCwgYnVpbHRpblNpemUgYnl0ZXMgKG5vdCBpbmNsdWRpbmcgbnVsbCB0ZXJtaW5hdGlvbiku
Ci0vLyBTYW5kYm94RGF0YSA8LSBDYWNoZWRTYW5kYm94SGVhZGVyOjpkYXRhU2l6ZSBieXRlcwot
Ly8gYnl0ZSBOCi0KLXN0cnVjdCBTYW5kYm94SW5mbyB7Ci0gICAgU2FuZGJveEluZm8oY29uc3Qg
U3RyaW5nJiBwYXJlbnREaXJlY3RvcnlQYXRoLCBjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgs
IGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIGNvbnN0IFNhbmRib3hQYXJhbWV0ZXJzUHRyJiBzYW5k
Ym94UGFyYW1ldGVycywgY29uc3QgQ1N0cmluZyYgaGVhZGVyLCBjb25zdCBDaGlsZFByb2Nlc3M6
OlByb2Nlc3NUeXBlJiBwcm9jZXNzVHlwZSwgY29uc3QgU2FuZGJveEluaXRpYWxpemF0aW9uUGFy
YW1ldGVycyYgaW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzLCBjb25zdCBTdHJpbmcmIHByb2ZpbGVP
clByb2ZpbGVQYXRoLCBib29sIGlzUHJvZmlsZVBhdGgpCi0gICAgICAgIDogcGFyZW50RGlyZWN0
b3J5UGF0aCB7IHBhcmVudERpcmVjdG9yeVBhdGggfQotICAgICAgICAsIGRpcmVjdG9yeVBhdGgg
eyBkaXJlY3RvcnlQYXRoIH0KLSAgICAgICAgLCBmaWxlUGF0aCB7IGZpbGVQYXRoIH0KLSAgICAg
ICAgLCBzYW5kYm94UGFyYW1ldGVycyB7IHNhbmRib3hQYXJhbWV0ZXJzIH0KLSAgICAgICAgLCBo
ZWFkZXIgeyBoZWFkZXIgfQotICAgICAgICAsIHByb2Nlc3NUeXBlIHsgcHJvY2Vzc1R5cGUgfQot
ICAgICAgICAsIGluaXRpYWxpemF0aW9uUGFyYW1ldGVycyB7IGluaXRpYWxpemF0aW9uUGFyYW1l
dGVycyB9Ci0gICAgICAgICwgcHJvZmlsZU9yUHJvZmlsZVBhdGggeyBwcm9maWxlT3JQcm9maWxl
UGF0aCB9Ci0gICAgICAgICwgaXNQcm9maWxlUGF0aCB7IGlzUHJvZmlsZVBhdGggfQotICAgIHsK
LSAgICB9Ci0KLSAgICBjb25zdCBTdHJpbmcmIHBhcmVudERpcmVjdG9yeVBhdGg7Ci0gICAgY29u
c3QgU3RyaW5nJiBkaXJlY3RvcnlQYXRoOwotICAgIGNvbnN0IFN0cmluZyYgZmlsZVBhdGg7Ci0g
ICAgY29uc3QgU2FuZGJveFBhcmFtZXRlcnNQdHImIHNhbmRib3hQYXJhbWV0ZXJzOwotICAgIGNv
bnN0IENTdHJpbmcmIGhlYWRlcjsKLSAgICBjb25zdCBDaGlsZFByb2Nlc3M6OlByb2Nlc3NUeXBl
JiBwcm9jZXNzVHlwZTsKLSAgICBjb25zdCBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJz
JiBpbml0aWFsaXphdGlvblBhcmFtZXRlcnM7Ci0gICAgY29uc3QgU3RyaW5nJiBwcm9maWxlT3JQ
cm9maWxlUGF0aDsKLSAgICBjb25zdCBib29sIGlzUHJvZmlsZVBhdGg7Ci19OwotCi1jb25zdGV4
cHIgdWludDMyX3QgQ2FjaGVkU2FuZGJveFZlcnNpb25OdW1iZXIgPSAwOwotI2VuZGlmIC8vIFVT
RShDQUNIRV9DT01QSUxFRF9TQU5EQk9YKQotCi1zdGF0aWMgdm9pZCBpbml0aWFsaXplVGltZXJD
b2FsZXNjaW5nUG9saWN5KCkKLXsKLSAgICAvLyBTZXQgdGFza19sYXRlbmN5IGFuZCB0YXNrX3Ro
cm91Z2hwdXQgUU9TIHRpZXJzIGFzIGFwcHJvcHJpYXRlIGZvciBhIHZpc2libGUgYXBwbGljYXRp
b24uCi0gICAgc3RydWN0IHRhc2tfcW9zX3BvbGljeSBxb3NpbmZvID0geyBMQVRFTkNZX1FPU19U
SUVSXzAsIFRIUk9VR0hQVVRfUU9TX1RJRVJfMCB9OwotICAgIGtlcm5fcmV0dXJuX3Qga3IgPSB0
YXNrX3BvbGljeV9zZXQobWFjaF90YXNrX3NlbGYoKSwgVEFTS19CQVNFX1FPU19QT0xJQ1ksICh0
YXNrX3BvbGljeV90KSZxb3NpbmZvLCBUQVNLX1FPU19QT0xJQ1lfQ09VTlQpOwotICAgIEFTU0VS
VF9VTlVTRUQoa3IsIGtyID09IEtFUk5fU1VDQ0VTUyk7Ci19Ci0KLXZvaWQgQ2hpbGRQcm9jZXNz
OjpsYXVuY2hTZXJ2aWNlc0NoZWNrSW4oKQotewotICAgIF9MU1NldEFwcGxpY2F0aW9uTGF1bmNo
U2VydmljZXNTZXJ2ZXJDb25uZWN0aW9uU3RhdHVzKDAsIDApOwotICAgIFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+IHVudXNlZCA9IF9MU0FwcGxpY2F0aW9uQ2hlY2tJbihrTFNEZWZhdWx0U2Vz
c2lvbklELCBDRkJ1bmRsZUdldEluZm9EaWN0aW9uYXJ5KENGQnVuZGxlR2V0TWFpbkJ1bmRsZSgp
KSk7Ci19Ci0KLXZvaWQgQ2hpbGRQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemUoKQotewotICAg
IGluaXRpYWxpemVUaW1lckNvYWxlc2NpbmdQb2xpY3koKTsKLSAgICBbW05TRmlsZU1hbmFnZXIg
ZGVmYXVsdE1hbmFnZXJdIGNoYW5nZUN1cnJlbnREaXJlY3RvcnlQYXRoOltbTlNCdW5kbGUgbWFp
bkJ1bmRsZV0gYnVuZGxlUGF0aF1dOwotfQotCi1zdGF0aWMgT1NTdGF0dXMgZW5hYmxlU2FuZGJv
eFN0eWxlRmlsZVF1YXJhbnRpbmUoKQotewotI2lmICFQTEFURk9STShJT1NNQUMpCi0gICAgcXRu
X3Byb2NfdCBxdWFyYW50aW5lUHJvcGVydGllcyA9IHF0bl9wcm9jX2FsbG9jKCk7Ci0gICAgYXV0
byBxdWFyYW50aW5lUHJvcGVydGllc0RlbGV0ZXIgPSBtYWtlU2NvcGVFeGl0KFtxdWFyYW50aW5l
UHJvcGVydGllc10oKSB7Ci0gICAgICAgIHF0bl9wcm9jX2ZyZWUocXVhcmFudGluZVByb3BlcnRp
ZXMpOwotICAgIH0pOwotCi0KLSAgICBpZiAocXRuX3Byb2NfaW5pdF93aXRoX3NlbGYocXVhcmFu
dGluZVByb3BlcnRpZXMpKSB7Ci0gICAgICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vMTM0NjM3
NTI+LgotICAgICAgICBxdG5fcHJvY19pbml0KHF1YXJhbnRpbmVQcm9wZXJ0aWVzKTsKLSAgICB9
Ci0KLSAgICBpZiAoYXV0byBlcnJvciA9IHF0bl9wcm9jX3NldF9mbGFncyhxdWFyYW50aW5lUHJv
cGVydGllcywgUVROX0ZMQUdfU0FOREJPWCkpCi0gICAgICAgIHJldHVybiBlcnJvcjsKLQotICAg
IC8vIFFUTl9GTEFHX1NBTkRCT1ggaXMgc2lsZW50bHkgaWdub3JlZCBpZiBzZWN1cml0eS5tYWMu
cXRuLnNhbmRib3hfZW5mb3JjZSBzeXNjdGwgaXMgMC4KLSAgICAvLyBJbiB0aGF0IGNhc2UsIHF1
YXJhbnRpbmUgZmFsbHMgYmFjayB0byBhZHZpc29yeSBRVE5fRkxBR19ET1dOTE9BRC4KLSAgICBy
ZXR1cm4gcXRuX3Byb2NfYXBwbHlfdG9fc2VsZihxdWFyYW50aW5lUHJvcGVydGllcyk7Ci0jZWxz
ZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi0jaWYgVVNFKENBQ0hFX0NPTVBJTEVE
X1NBTkRCT1gpCi1zdGF0aWMgT3B0aW9uYWw8VmVjdG9yPGNoYXI+PiBmaWxlQ29udGVudHMoY29u
c3QgU3RyaW5nJiBwYXRoLCBib29sIHNob3VsZExvY2sgPSBmYWxzZSwgT3B0aW9uU2V0PEZpbGVT
eXN0ZW06OkZpbGVMb2NrTW9kZT4gbG9ja01vZGUgPSBGaWxlU3lzdGVtOjpGaWxlTG9ja01vZGU6
OkV4Y2x1c2l2ZSkKLXsKLSAgICBGaWxlSGFuZGxlIGZpbGUgPSBzaG91bGRMb2NrID8gRmlsZUhh
bmRsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQsIGxvY2tNb2RlKSA6IEZp
bGVIYW5kbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKLSAgICBmaWxl
Lm9wZW4oKTsKLSAgICBpZiAoIWZpbGUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0K
LSAgICBjaGFyIGNodW5rWzQwOTZdOwotICAgIGNvbnN0ZXhwciBzaXplX3QgY2h1bmtTaXplID0g
V1RGX0FSUkFZX0xFTkdUSChjaHVuayk7Ci0gICAgc2l6ZV90IGNvbnRlbnRTaXplID0gMDsKLSAg
ICBWZWN0b3I8Y2hhcj4gY29udGVudHM7Ci0gICAgY29udGVudHMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShjaHVua1NpemUpOwotICAgIHdoaWxlIChzaXplX3QgYnl0ZXNSZWFkID0gZmlsZS5yZWFk
KGNodW5rLCBjaHVua1NpemUpKSB7Ci0gICAgICAgIGNvbnRlbnRzLmFwcGVuZChjaHVuaywgYnl0
ZXNSZWFkKTsKLSAgICAgICAgY29udGVudFNpemUgKz0gYnl0ZXNSZWFkOwotICAgIH0KLSAgICBj
b250ZW50cy5yZXNpemUoY29udGVudFNpemUpOwotCi0gICAgcmV0dXJuIGNvbnRlbnRzOwotfQot
Ci0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLS8vIFRoZXNlIHN0cmluZ3MgbXVzdCBtYXRj
aCB0aGUgbGFzdCBzZWdtZW50IG9mIHRoZSAiY29tLmFwcGxlLnJvb3RsZXNzLnN0b3JhZ2UuPHRo
aXMgcGFydCBtdXN0IG1hdGNoPiIgZW50cnkgaW4gZWFjaAotLy8gcHJvY2VzcydzIHJlc3RyaWN0
ZWQgZW50aXRsZW1lbnRzIGZpbGUgKGV4LiBDb25maWd1cmF0aW9ucy9OZXR3b3JraW5nLU9TWC1y
ZXN0cmljdGVkLmVudGl0bGVtZW50cykuCi1jb25zdGV4cHIgY29uc3QgY2hhciogcHJvY2Vzc1N0
b3JhZ2VDbGFzcyhDaGlsZFByb2Nlc3M6OlByb2Nlc3NUeXBlIHR5cGUpCi17Ci0gICAgc3dpdGNo
ICh0eXBlKSB7Ci0gICAgY2FzZSBDaGlsZFByb2Nlc3M6OlByb2Nlc3NUeXBlOjpXZWJDb250ZW50
OgotICAgICAgICByZXR1cm4gIldlYktpdFdlYkNvbnRlbnRTYW5kYm94IjsKLSAgICBjYXNlIENo
aWxkUHJvY2Vzczo6UHJvY2Vzc1R5cGU6Ok5ldHdvcms6Ci0gICAgICAgIHJldHVybiAiV2ViS2l0
TmV0d29ya2luZ1NhbmRib3giOwotICAgIGNhc2UgQ2hpbGRQcm9jZXNzOjpQcm9jZXNzVHlwZTo6
UGx1Z2luOgotICAgICAgICByZXR1cm4gIldlYktpdFBsdWdpblNhbmRib3giOwotICAgIH0KLX0K
LSNlbmRpZiAvLyBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotCi1zdGF0aWMgT3B0aW9uYWw8Q1N0
cmluZz4gc2V0QW5kU2VyaWFsaXplU2FuZGJveFBhcmFtZXRlcnMoY29uc3QgU2FuZGJveEluaXRp
YWxpemF0aW9uUGFyYW1ldGVycyYgaW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzLCBjb25zdCBTYW5k
Ym94UGFyYW1ldGVyc1B0ciYgc2FuZGJveFBhcmFtZXRlcnMsIGNvbnN0IFN0cmluZyYgcHJvZmls
ZU9yUHJvZmlsZVBhdGgsIGJvb2wgaXNQcm9maWxlUGF0aCkKLXsKLSAgICBTdHJpbmdCdWlsZGVy
IGJ1aWxkZXI7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbml0aWFsaXphdGlvblBhcmFt
ZXRlcnMuY291bnQoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBpbml0aWFs
aXphdGlvblBhcmFtZXRlcnMubmFtZShpKTsKLSAgICAgICAgY29uc3QgY2hhciogdmFsdWUgPSBp
bml0aWFsaXphdGlvblBhcmFtZXRlcnMudmFsdWUoaSk7Ci0gICAgICAgIGlmIChzYW5kYm94X3Nl
dF9wYXJhbShzYW5kYm94UGFyYW1ldGVycy5nZXQoKSwgbmFtZSwgdmFsdWUpKSB7Ci0gICAgICAg
ICAgICBXVEZMb2dBbHdheXMoIiVzOiBDb3VsZCBub3Qgc2V0IHNhbmRib3ggcGFyYW1ldGVyOiAl
c1xuIiwgZ2V0cHJvZ25hbWUoKSwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgICAgIENSQVNI
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnVpbGRlci5hcHBlbmQobmFtZSwgc3RybGVuKG5hbWUp
KTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJzonKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQo
dmFsdWUsIHN0cmxlbih2YWx1ZSkpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnOicpOwotICAg
IH0KLSAgICBpZiAoaXNQcm9maWxlUGF0aCkgewotICAgICAgICBhdXRvIGNvbnRlbnRzID0gZmls
ZUNvbnRlbnRzKHByb2ZpbGVPclByb2ZpbGVQYXRoKTsKLSAgICAgICAgaWYgKCFjb250ZW50cykK
LSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5k
KGNvbnRlbnRzLT5kYXRhKCksIGNvbnRlbnRzLT5zaXplKCkpOwotICAgIH0gZWxzZQotICAgICAg
ICBidWlsZGVyLmFwcGVuZChwcm9maWxlT3JQcm9maWxlUGF0aCk7Ci0gICAgcmV0dXJuIGJ1aWxk
ZXIudG9TdHJpbmcoKS5hc2NpaSgpOwotfQotCi1zdGF0aWMgU3RyaW5nIHNhbmRib3hEYXRhVmF1
bHRQYXJlbnREaXJlY3RvcnkoKQotewotICAgIGNoYXIgdGVtcFtQQVRIX01BWF07Ci0gICAgc2l6
ZV90IGxlbmd0aCA9IGNvbmZzdHIoX0NTX0RBUldJTl9VU0VSX0NBQ0hFX0RJUiwgdGVtcCwgc2l6
ZW9mKHRlbXApKTsKLSAgICBpZiAoIWxlbmd0aCkgewotICAgICAgICBXVEZMb2dBbHdheXMoIiVz
OiBDb3VsZCBub3QgcmV0cmlldmUgdXNlciBjYWNoZSBkaXJlY3RvcnkgcGF0aDogJXNcbiIsIGdl
dHByb2duYW1lKCksIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIGV4aXQoRVhfTk9QRVJNKTsK
LSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlQobGVuZ3RoIDw9IHNpemVvZih0ZW1wKSk7Ci0gICAg
Y2hhciByZXNvbHZlZFBhdGhbUEFUSF9NQVhdOwotICAgIGlmICghcmVhbHBhdGgodGVtcCwgcmVz
b2x2ZWRQYXRoKSkgewotICAgICAgICBXVEZMb2dBbHdheXMoIiVzOiBDb3VsZCBub3QgY2Fub25p
Y2FsaXplIHVzZXIgY2FjaGUgZGlyZWN0b3J5IHBhdGg6ICVzXG4iLCBnZXRwcm9nbmFtZSgpLCBz
dHJlcnJvcihlcnJubykpOwotICAgICAgICBleGl0KEVYX05PUEVSTSk7Ci0gICAgfQotICAgIHJl
dHVybiByZXNvbHZlZFBhdGg7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgc2FuZGJveERpcmVjdG9yeShD
aGlsZFByb2Nlc3M6OlByb2Nlc3NUeXBlIHByb2Nlc3NUeXBlLCBjb25zdCBTdHJpbmcmIHBhcmVu
dERpcmVjdG9yeSkKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGRpcmVjdG9yeTsKLSAgICBkaXJlY3Rv
cnkuYXBwZW5kKHBhcmVudERpcmVjdG9yeSk7Ci0gICAgc3dpdGNoIChwcm9jZXNzVHlwZSkgewot
ICAgIGNhc2UgQ2hpbGRQcm9jZXNzOjpQcm9jZXNzVHlwZTo6V2ViQ29udGVudDoKLSAgICAgICAg
ZGlyZWN0b3J5LmFwcGVuZCgiL2NvbS5hcHBsZS5XZWJLaXQuV2ViQ29udGVudC5TYW5kYm94Iik7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2hpbGRQcm9jZXNzOjpQcm9jZXNzVHlwZTo6TmV0
d29yazoKLSAgICAgICAgZGlyZWN0b3J5LmFwcGVuZCgiL2NvbS5hcHBsZS5XZWJLaXQuTmV0d29y
a2luZy5TYW5kYm94Iik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2hpbGRQcm9jZXNzOjpQ
cm9jZXNzVHlwZTo6UGx1Z2luOgotICAgICAgICBkaXJlY3RvcnkuYXBwZW5kKCIvY29tLmFwcGxl
LldlYktpdC5QbHVnaW4uU2FuZGJveCIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSNpZiAh
VVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSAgICAvLyBBZGQgLk9wZW5Tb3VyY2Ugc3VmZml4IHNv
IHRoYXQgb3BlbiBzb3VyY2UgYnVpbGRzIGRvbid0IHRyeSB0byBhY2Nlc3MgYSBkYXRhIHZhdWx0
IHVzZWQgYnkgc3lzdGVtIFNhZmFyaS4KLSAgICBkaXJlY3RvcnkuYXBwZW5kKCIuT3BlblNvdXJj
ZSIpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gZGlyZWN0b3J5LnRvU3RyaW5nKCk7Ci19Ci0KLXN0
YXRpYyBTdHJpbmcgc2FuZGJveEZpbGVQYXRoKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5UGF0aCwg
Y29uc3QgQ1N0cmluZyYgaGVhZGVyKQotewotICAgIFN0cmluZ0J1aWxkZXIgc2FuZGJveEZpbGU7
Ci0gICAgc2FuZGJveEZpbGUuYXBwZW5kKGRpcmVjdG9yeVBhdGgpOwotICAgIHNhbmRib3hGaWxl
LmFwcGVuZCgiL0NvbXBpbGVkU2FuZGJveCsiKTsKLQotICAgIC8vIE1ha2UgdGhlIGZpbGVuYW1l
IHNlbWktdW5pcXVlIGJhc2VkIG9uIHRoZSBjb250ZW50cyBvZiB0aGUgaGVhZGVyLgotICAgIGF1
dG8gY3J5cHRvID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQQUw6OkNyeXB0b0RpZ2VzdDo6
QWxnb3JpdGhtOjpTSEFfMjU2KTsKLSAgICBjcnlwdG8tPmFkZEJ5dGVzKGhlYWRlci5kYXRhKCks
IGhlYWRlci5sZW5ndGgoKSk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGhhc2ggPSBjcnlwdG8tPmNv
bXB1dGVIYXNoKCk7Ci0gICAgU3RyaW5nIHJlYWRhYmxlSGFzaCA9IFdURjo6YmFzZTY0VVJMRW5j
b2RlKGhhc2guZGF0YSgpLCBoYXNoLnNpemUoKSk7Ci0KLSAgICBzYW5kYm94RmlsZS5hcHBlbmQo
cmVhZGFibGVIYXNoKTsKLSAgICByZXR1cm4gc2FuZGJveEZpbGUudG9TdHJpbmcoKTsKLX0KLQot
c3RhdGljIGJvb2wgZW5zdXJlU2FuZGJveENhY2hlRGlyZWN0b3J5KGNvbnN0IFNhbmRib3hJbmZv
JiBpbmZvKQotewotICAgIGlmICghRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KGluZm8ucGFy
ZW50RGlyZWN0b3J5UGF0aCwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6
WWVzKSkgewotICAgICAgICBGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMoaW5mby5wYXJl
bnREaXJlY3RvcnlQYXRoKTsKLSAgICAgICAgaWYgKCFGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3Rv
cnkoaW5mby5wYXJlbnREaXJlY3RvcnlQYXRoLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1i
b2xpY0xpbmtzOjpZZXMpKSB7Ci0gICAgICAgICAgICBXVEZMb2dBbHdheXMoIiVzOiBDb3VsZCBu
b3QgY3JlYXRlIHNhbmRib3ggZGlyZWN0b3J5XG4iLCBnZXRwcm9nbmFtZSgpKTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotI2lmIFVTRShBUFBMRV9JTlRF
Uk5BTF9TREspCi0gICAgY29uc3QgY2hhciogc3RvcmFnZUNsYXNzID0gcHJvY2Vzc1N0b3JhZ2VD
bGFzcyhpbmZvLnByb2Nlc3NUeXBlKTsKLSAgICBDU3RyaW5nIGRpcmVjdG9yeVBhdGggPSBGaWxl
U3lzdGVtOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oaW5mby5kaXJlY3RvcnlQYXRoKTsKLSAg
ICBpZiAoZGlyZWN0b3J5UGF0aC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgYXV0byBtYWtlRGF0YVZhdWx0ID0gWyZdIHsKLSAgICAgICAgZG8gewotICAgICAgICAgICAg
aWYgKCFyb290bGVzc19ta2Rpcl9kYXRhdmF1bHQoZGlyZWN0b3J5UGF0aC5kYXRhKCksIDA3MDAs
IHN0b3JhZ2VDbGFzcykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0g
d2hpbGUgKGVycm5vID09IEVBR0FJTik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Owot
Ci0gICAgaWYgKG1ha2VEYXRhVmF1bHQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBp
ZiAoZXJybm8gPT0gRUVYSVNUKSB7Ci0gICAgICAgIC8vIFRoZSBkaXJlY3RvcnkgYWxyZWFkeSBl
eGlzdHMuIEZpcnN0IHdlJ2xsIGNoZWNrIGlmIGl0IGlzIGEgZGF0YSB2YXVsdC4gSWYgaXQgaXMg
dGhlbgotICAgICAgICAvLyB3ZSBhcmUgdGhlIG9uZXMgd2hvIGNyZWF0ZWQgaXQgYW5kIHdlIGNh
biBjb250aW51ZS4gSWYgaXQgaXMgbm90IGEgZGF0YXZhdWx0IHRoZW4gd2UnbGwganVzdAotICAg
ICAgICAvLyBkZWxldGUgaXQgYW5kIHRyeSB0byBtYWtlIGEgbmV3IG9uZS4KLSAgICAgICAgaWYg
KCFyb290bGVzc19jaGVja19kYXRhdmF1bHRfZmxhZyhkaXJlY3RvcnlQYXRoLmRhdGEoKSwgc3Rv
cmFnZUNsYXNzKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGJvb2wgaXNE
aXJlY3RvcnkgPSBGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkoaW5mby5kaXJlY3RvcnlQYXRo
LCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObyk7Ci0gICAgICAgIGlm
IChpc0RpcmVjdG9yeSkgewotICAgICAgICAgICAgaWYgKCFGaWxlU3lzdGVtOjpkZWxldGVOb25F
bXB0eURpcmVjdG9yeShpbmZvLmRpcmVjdG9yeVBhdGgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghRmlsZVN5c3RlbTo6
ZGVsZXRlRmlsZShpbmZvLmRpcmVjdG9yeVBhdGgpKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbWFrZURhdGFWYXVsdCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygi
JXM6IFNhbmRib3ggZGlyZWN0b3J5IGNvdWxkbid0IGJlIGNyZWF0ZWQ6ICIsIGdldHByb2duYW1l
KCksIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0jZWxz
ZQotICAgIGJvb2wgaGFzU2FuZGJveERpcmVjdG9yeSA9IEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVj
dG9yeShpbmZvLmRpcmVjdG9yeVBhdGgsIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGlj
TGlua3M6Olllcyk7Ci0gICAgaWYgKCFoYXNTYW5kYm94RGlyZWN0b3J5KSB7Ci0gICAgICAgIGlm
IChGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMoaW5mby5kaXJlY3RvcnlQYXRoKSkgewot
ICAgICAgICAgICAgQVNTRVJUKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShpbmZvLmRpcmVj
dG9yeVBhdGgsIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykpOwot
ICAgICAgICAgICAgaGFzU2FuZGJveERpcmVjdG9yeSA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAvLyBXZSBtYXkgaGF2ZSByYWNlZCB3aXRoIHNvbWVvbmUgZWxzZSBtYWtp
bmcgaXQuIFRoYXQncyBvay4KLSAgICAgICAgICAgIGhhc1NhbmRib3hEaXJlY3RvcnkgPSBGaWxl
U3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkoaW5mby5kaXJlY3RvcnlQYXRoLCBGaWxlU3lzdGVtOjpT
aG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKCFoYXNTYW5kYm94RGlyZWN0b3J5KSB7Ci0gICAgICAgIC8vIEJhaWxpbmcgYmVjYXVzZSB3
ZSBkb24ndCBoYXZlIGEgc2FuZGJveCBkaXJlY3RvcnkuCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0jZW5kaWYgLy8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1zdGF0aWMgYm9vbCB3cml0ZVNhbmRib3hEYXRhVG9DYWNoZUZpbGUoY29uc3Qg
U2FuZGJveEluZm8mIGluZm8sIGNvbnN0IFZlY3RvcjxjaGFyPiYgY2FjaGVGaWxlKQotewotICAg
IEZpbGVIYW5kbGUgZmlsZSB7IGluZm8uZmlsZVBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9k
ZTo6V3JpdGUsIEZpbGVTeXN0ZW06OkZpbGVMb2NrTW9kZTo6RXhjbHVzaXZlIH07Ci0gICAgcmV0
dXJuIGZpbGUud3JpdGUoY2FjaGVGaWxlLmRhdGEoKSwgY2FjaGVGaWxlLnNpemUoKSkgPT0gc2Fm
ZUNhc3Q8aW50PihjYWNoZUZpbGUuc2l6ZSgpKTsKLX0KLQotc3RhdGljIFNhbmRib3hQcm9maWxl
UHRyIGNvbXBpbGVBbmRDYWNoZVNhbmRib3hQcm9maWxlKGNvbnN0IFNhbmRib3hJbmZvJiBpbmZv
KQotewotICAgIGlmICghZW5zdXJlU2FuZGJveENhY2hlRGlyZWN0b3J5KGluZm8pKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGNoYXIqIGVycm9yID0gbnVsbHB0cjsKLSAgICBDU3Ry
aW5nIHByb2ZpbGVPclByb2ZpbGVQYXRoID0gaW5mby5pc1Byb2ZpbGVQYXRoID8gRmlsZVN5c3Rl
bTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGluZm8ucHJvZmlsZU9yUHJvZmlsZVBhdGgpIDog
aW5mby5wcm9maWxlT3JQcm9maWxlUGF0aC51dGY4KCk7Ci0gICAgaWYgKHByb2ZpbGVPclByb2Zp
bGVQYXRoLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBTYW5kYm94UHJv
ZmlsZVB0ciBzYW5kYm94UHJvZmlsZSB7IGluZm8uaXNQcm9maWxlUGF0aCA/IHNhbmRib3hfY29t
cGlsZV9maWxlKHByb2ZpbGVPclByb2ZpbGVQYXRoLmRhdGEoKSwgaW5mby5zYW5kYm94UGFyYW1l
dGVycy5nZXQoKSwgJmVycm9yKSA6IHNhbmRib3hfY29tcGlsZV9zdHJpbmcocHJvZmlsZU9yUHJv
ZmlsZVBhdGguZGF0YSgpLCBpbmZvLnNhbmRib3hQYXJhbWV0ZXJzLmdldCgpLCAmZXJyb3IpIH07
Ci0gICAgaWYgKCFzYW5kYm94UHJvZmlsZSkgewotICAgICAgICBXVEZMb2dBbHdheXMoIiVzOiBD
b3VsZCBub3QgY29tcGlsZSBXZWJDb250ZW50IHNhbmRib3g6ICVzXG4iLCBnZXRwcm9nbmFtZSgp
LCBlcnJvcik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGNvbnN0IGJv
b2wgaGF2ZUJ1aWx0aW4gPSBzYW5kYm94UHJvZmlsZS0+YnVpbHRpbjsKLSAgICBpbnQzMl90IGxp
YnNhbmRib3hWZXJzaW9uID0gTlNWZXJzaW9uT2ZSdW5UaW1lTGlicmFyeSgic2FuZGJveCIpOwot
ICAgIFJFTEVBU0VfQVNTRVJUKGxpYnNhbmRib3hWZXJzaW9uID4gMCk7Ci0gICAgQ2FjaGVkU2Fu
ZGJveEhlYWRlciBjYWNoZWRIZWFkZXIgewotICAgICAgICBDYWNoZWRTYW5kYm94VmVyc2lvbk51
bWJlciwKLSAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGxpYnNhbmRib3hWZXJzaW9uKSwK
LSAgICAgICAgc2FmZUNhc3Q8dWludDMyX3Q+KGluZm8uaGVhZGVyLmxlbmd0aCgpKSwKLSAgICAg
ICAgaGF2ZUJ1aWx0aW4gPyBzYWZlQ2FzdDx1aW50MzJfdD4oc3RybGVuKHNhbmRib3hQcm9maWxl
LT5idWlsdGluKSkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCi0gICAg
ICAgIHNhZmVDYXN0PHVpbnQzMl90PihzYW5kYm94UHJvZmlsZS0+c2l6ZSkKLSAgICB9OwotICAg
IGNvbnN0IHNpemVfdCBleHBlY3RlZEZpbGVTaXplID0gc2l6ZW9mKGNhY2hlZEhlYWRlcikgKyBj
YWNoZWRIZWFkZXIuaGVhZGVyU2l6ZSArIChoYXZlQnVpbHRpbiA/IGNhY2hlZEhlYWRlci5idWls
dGluU2l6ZSA6IDApICsgY2FjaGVkSGVhZGVyLmRhdGFTaXplOwotCi0gICAgVmVjdG9yPGNoYXI+
IGNhY2hlRmlsZTsKLSAgICBjYWNoZUZpbGUucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShleHBlY3Rl
ZEZpbGVTaXplKTsKLSAgICBjYWNoZUZpbGUuYXBwZW5kKGJpdHdpc2VfY2FzdDx1aW50OF90Kj4o
JmNhY2hlZEhlYWRlciksIHNpemVvZihDYWNoZWRTYW5kYm94SGVhZGVyKSk7Ci0gICAgY2FjaGVG
aWxlLmFwcGVuZChpbmZvLmhlYWRlci5kYXRhKCksIGluZm8uaGVhZGVyLmxlbmd0aCgpKTsKLSAg
ICBpZiAoaGF2ZUJ1aWx0aW4pCi0gICAgICAgIGNhY2hlRmlsZS5hcHBlbmQoc2FuZGJveFByb2Zp
bGUtPmJ1aWx0aW4sIGNhY2hlZEhlYWRlci5idWlsdGluU2l6ZSk7Ci0gICAgY2FjaGVGaWxlLmFw
cGVuZChzYW5kYm94UHJvZmlsZS0+ZGF0YSwgY2FjaGVkSGVhZGVyLmRhdGFTaXplKTsKLQotICAg
IGlmICghd3JpdGVTYW5kYm94RGF0YVRvQ2FjaGVGaWxlKGluZm8sIGNhY2hlRmlsZSkpCi0gICAg
ICAgIFdURkxvZ0Fsd2F5cygiJXM6IFVuYWJsZSB0byBjYWNoZSBjb21waWxlZCBzYW5kYm94XG4i
LCBnZXRwcm9nbmFtZSgpKTsKLQotICAgIHJldHVybiBzYW5kYm94UHJvZmlsZTsKLX0KLQotc3Rh
dGljIGJvb2wgdHJ5QXBwbHlDYWNoZWRTYW5kYm94KGNvbnN0IFNhbmRib3hJbmZvJiBpbmZvKQot
ewotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0gICAgQ1N0cmluZyBkaXJlY3RvcnlQYXRo
ID0gRmlsZVN5c3RlbTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGluZm8uZGlyZWN0b3J5UGF0
aCk7Ci0gICAgaWYgKGRpcmVjdG9yeVBhdGguaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAocm9vdGxlc3NfY2hlY2tfZGF0YXZhdWx0X2ZsYWcoZGlyZWN0b3J5UGF0aC5k
YXRhKCksIHByb2Nlc3NTdG9yYWdlQ2xhc3MoaW5mby5wcm9jZXNzVHlwZSkpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLQotICAgIGF1dG8gY29udGVudHMgPSBmaWxlQ29udGVudHMo
aW5mby5maWxlUGF0aCwgdHJ1ZSwgRmlsZVN5c3RlbTo6RmlsZUxvY2tNb2RlOjpTaGFyZWQpOwot
ICAgIGlmICghY29udGVudHMgfHwgY29udGVudHMtPmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIFZlY3RvcjxjaGFyPiBjYWNoZWRTYW5kYm94Q29udGVudHMgPSBXVEZNb3Zl
KCpjb250ZW50cyk7Ci0gICAgaWYgKHNpemVvZihDYWNoZWRTYW5kYm94SGVhZGVyKSA+IGNhY2hl
ZFNhbmRib3hDb250ZW50cy5zaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8v
IFRoaXMgZGF0YSBtYXkgYmUgY29ycnVwdGVkIGlmIHRoZSBzYW5kYm94IGZpbGUgd2FzIGNhY2hl
ZCBvbiBhIGRpZmZlcmVudCBwbGF0Zm9ybSB3aXRoIGRpZmZlcmVudCBlbmRpYW5uZXNzCi0gICAg
Q2FjaGVkU2FuZGJveEhlYWRlciBjYWNoZWRTYW5kYm94SGVhZGVyOwotICAgIG1lbWNweSgmY2Fj
aGVkU2FuZGJveEhlYWRlciwgY2FjaGVkU2FuZGJveENvbnRlbnRzLmRhdGEoKSwgc2l6ZW9mKENh
Y2hlZFNhbmRib3hIZWFkZXIpKTsKLSAgICBpbnQzMl90IGxpYnNhbmRib3hWZXJzaW9uID0gTlNW
ZXJzaW9uT2ZSdW5UaW1lTGlicmFyeSgic2FuZGJveCIpOwotICAgIFJFTEVBU0VfQVNTRVJUKGxp
YnNhbmRib3hWZXJzaW9uID4gMCk7Ci0gICAgaWYgKHN0YXRpY19jYXN0PHVpbnQzMl90PihsaWJz
YW5kYm94VmVyc2lvbikgIT0gY2FjaGVkU2FuZGJveEhlYWRlci5saWJzYW5kYm94VmVyc2lvbikK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChjYWNoZWRTYW5kYm94SGVhZGVyLnZlcnNp
b25OdW1iZXIgIT0gQ2FjaGVkU2FuZGJveFZlcnNpb25OdW1iZXIpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBjb25zdCBib29sIGhhdmVCdWlsdGluID0gY2FjaGVkU2FuZGJveEhlYWRlci5i
dWlsdGluU2l6ZSAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7Ci0KLSAg
ICAvLyBUaGVzZSB2YWx1ZXMgYXJlIGNvbXB1dGVkIGJhc2VkIG9uIHRoZSBkaXNrIGxheW91dCBz
cGVjaWZpZWQgYmVsb3cgdGhlIGRlZmluaXRpb24gb2YgdGhlIENhY2hlZFNhbmRib3hIZWFkZXIg
c3RydWN0Ci0gICAgLy8gYW5kIG11c3QgYmUgY2hhbmdlZCBpZiB0aGUgbGF5b3V0IGNoYW5nZXMu
Ci0gICAgY29uc3QgY2hhciogc2FuZGJveEhlYWRlclB0ciA9IGJpdHdpc2VfY2FzdDxjaGFyICo+
KGNhY2hlZFNhbmRib3hDb250ZW50cy5kYXRhKCkpICsgc2l6ZW9mKENhY2hlZFNhbmRib3hIZWFk
ZXIpOwotICAgIGNvbnN0IGNoYXIqIHNhbmRib3hCdWlsdGluUHRyID0gc2FuZGJveEhlYWRlclB0
ciArIGNhY2hlZFNhbmRib3hIZWFkZXIuaGVhZGVyU2l6ZTsKLSAgICB1bnNpZ25lZCBjaGFyKiBz
YW5kYm94RGF0YVB0ciA9IGJpdHdpc2VfY2FzdDx1bnNpZ25lZCBjaGFyKj4oaGF2ZUJ1aWx0aW4g
PyBzYW5kYm94QnVpbHRpblB0ciArIGNhY2hlZFNhbmRib3hIZWFkZXIuYnVpbHRpblNpemUgOiBz
YW5kYm94QnVpbHRpblB0cik7Ci0KLSAgICBzaXplX3QgZXhwZWN0ZWRGaWxlU2l6ZSA9IHNpemVv
ZihDYWNoZWRTYW5kYm94SGVhZGVyKSArIGNhY2hlZFNhbmRib3hIZWFkZXIuaGVhZGVyU2l6ZSAr
IGNhY2hlZFNhbmRib3hIZWFkZXIuZGF0YVNpemU7Ci0gICAgaWYgKGhhdmVCdWlsdGluKQotICAg
ICAgICBleHBlY3RlZEZpbGVTaXplICs9IGNhY2hlZFNhbmRib3hIZWFkZXIuYnVpbHRpblNpemU7
Ci0gICAgaWYgKGNhY2hlZFNhbmRib3hDb250ZW50cy5zaXplKCkgIT0gZXhwZWN0ZWRGaWxlU2l6
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChjYWNoZWRTYW5kYm94SGVhZGVyLmhl
YWRlclNpemUgIT0gaW5mby5oZWFkZXIubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAobWVtY21wKHNhbmRib3hIZWFkZXJQdHIsIGluZm8uaGVhZGVyLmRhdGEoKSwgaW5m
by5oZWFkZXIubGVuZ3RoKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTYW5kYm94
UHJvZmlsZSBwcm9maWxlIHsgfTsKLSAgICBDU3RyaW5nIGJ1aWx0aW47Ci0gICAgcHJvZmlsZS5i
dWlsdGluID0gbnVsbHB0cjsKLSAgICBwcm9maWxlLnNpemUgPSBjYWNoZWRTYW5kYm94SGVhZGVy
LmRhdGFTaXplOwotICAgIGlmIChoYXZlQnVpbHRpbikgewotICAgICAgICBidWlsdGluID0gQ1N0
cmluZzo6bmV3VW5pbml0aWFsaXplZChjYWNoZWRTYW5kYm94SGVhZGVyLmJ1aWx0aW5TaXplLCBw
cm9maWxlLmJ1aWx0aW4pOwotICAgICAgICBpZiAoYnVpbHRpbi5pc051bGwoKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbWVtY3B5KHByb2ZpbGUuYnVpbHRpbiwgc2FuZGJv
eEJ1aWx0aW5QdHIsIGNhY2hlZFNhbmRib3hIZWFkZXIuYnVpbHRpblNpemUpOwotICAgIH0KLSAg
ICBBU1NFUlQoc3RhdGljX2Nhc3Q8dm9pZCAqPihzYW5kYm94RGF0YVB0ciArIHByb2ZpbGUuc2l6
ZSkgPD0gc3RhdGljX2Nhc3Q8dm9pZCAqPihjYWNoZWRTYW5kYm94Q29udGVudHMuZGF0YSgpICsg
Y2FjaGVkU2FuZGJveENvbnRlbnRzLnNpemUoKSkpOwotICAgIHByb2ZpbGUuZGF0YSA9IHNhbmRi
b3hEYXRhUHRyOwotCi0gICAgaWYgKHNhbmRib3hfYXBwbHkoJnByb2ZpbGUpKSB7Ci0gICAgICAg
IFdURkxvZ0Fsd2F5cygiJXM6IENvdWxkIG5vdCBhcHBseSBjYWNoZWQgc2FuZGJveDogJXNcbiIs
IGdldHByb2duYW1lKCksIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZiAvLyBVU0UoQ0FDSEVfQ09NUElM
RURfU0FOREJPWCkKLQotc3RhdGljIGlubGluZSBjb25zdCBOU0J1bmRsZSAqd2ViS2l0MkJ1bmRs
ZSgpCi17Ci0jaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBjb25zdCBzdGF0aWMgTlNCdW5kbGUgKmJ1
bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpOU0NsYXNzRnJvbVN0cmluZyhAIldLV2Vi
VmlldyIpXTsKLSNlbHNlCi0gICAgY29uc3Qgc3RhdGljIE5TQnVuZGxlICpidW5kbGUgPSBbTlNC
dW5kbGUgYnVuZGxlRm9yQ2xhc3M6TlNDbGFzc0Zyb21TdHJpbmcoQCJXS1ZpZXciKV07Ci0jZW5k
aWYKLQotICAgIHJldHVybiBidW5kbGU7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldFNhbmRib3hQcm9m
aWxlT3JQcm9maWxlUGF0aChjb25zdCBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBw
YXJhbWV0ZXJzLCBTdHJpbmcmIHByb2ZpbGVPclByb2ZpbGVQYXRoLCBib29sJiBpc1Byb2ZpbGVQ
YXRoKQotewotICAgIHN3aXRjaCAocGFyYW1ldGVycy5tb2RlKCkpIHsKLSAgICBjYXNlIFNhbmRi
b3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnM6OlByb2ZpbGVTZWxlY3Rpb25Nb2RlOjpVc2VEZWZh
dWx0U2FuZGJveFByb2ZpbGVQYXRoOgotICAgICAgICBwcm9maWxlT3JQcm9maWxlUGF0aCA9IFt3
ZWJLaXQyQnVuZGxlKCkgcGF0aEZvclJlc291cmNlOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVu
ZGxlSWRlbnRpZmllcl0gb2ZUeXBlOkAic2IiXTsKLSAgICAgICAgaXNQcm9maWxlUGF0aCA9IHRy
dWU7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFt
ZXRlcnM6OlByb2ZpbGVTZWxlY3Rpb25Nb2RlOjpVc2VPdmVycmlkZVNhbmRib3hQcm9maWxlUGF0
aDoKLSAgICAgICAgcHJvZmlsZU9yUHJvZmlsZVBhdGggPSBwYXJhbWV0ZXJzLm92ZXJyaWRlU2Fu
ZGJveFByb2ZpbGVQYXRoKCk7Ci0gICAgICAgIGlzUHJvZmlsZVBhdGggPSB0cnVlOwotICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzOjpQcm9m
aWxlU2VsZWN0aW9uTW9kZTo6VXNlU2FuZGJveFByb2ZpbGU6Ci0gICAgICAgIHByb2ZpbGVPclBy
b2ZpbGVQYXRoID0gcGFyYW1ldGVycy5zYW5kYm94UHJvZmlsZSgpOwotICAgICAgICBpc1Byb2Zp
bGVQYXRoID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBib29s
IGNvbXBpbGVBbmRBcHBseVNhbmRib3hTbG93Q2FzZShjb25zdCBTdHJpbmcmIHByb2ZpbGVPclBy
b2ZpbGVQYXRoLCBib29sIGlzUHJvZmlsZVBhdGgsIGNvbnN0IFNhbmRib3hJbml0aWFsaXphdGlv
blBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCi17Ci0gICAgY2hhciogZXJyb3JCdWY7Ci0gICAgQ1N0
cmluZyB0ZW1wID0gaXNQcm9maWxlUGF0aCA/IEZpbGVTeXN0ZW06OmZpbGVTeXN0ZW1SZXByZXNl
bnRhdGlvbihwcm9maWxlT3JQcm9maWxlUGF0aCkgOiBwcm9maWxlT3JQcm9maWxlUGF0aC51dGY4
KCk7Ci0gICAgdWludDY0X3QgZmxhZ3MgPSBpc1Byb2ZpbGVQYXRoID8gU0FOREJPWF9OQU1FRF9F
WFRFUk5BTCA6IDA7Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAg
ICBpZiAoc2FuZGJveF9pbml0X3dpdGhfcGFyYW1ldGVycyh0ZW1wLmRhdGEoKSwgZmxhZ3MsIHBh
cmFtZXRlcnMubmFtZWRQYXJhbWV0ZXJBcnJheSgpLCAmZXJyb3JCdWYpKSB7Ci0gICAgICAgIEFM
TE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotICAgICAgICBXVEZMb2dBbHdheXMoIiVz
OiBDb3VsZCBub3QgaW5pdGlhbGl6ZSBzYW5kYm94IHByb2ZpbGUgWyVzXSwgZXJyb3IgJyVzJ1xu
IiwgZ2V0cHJvZ25hbWUoKSwgdGVtcC5kYXRhKCksIGVycm9yQnVmKTsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDAsIGNvdW50ID0gcGFyYW1ldGVycy5jb3VudCgpOyBpICE9IGNvdW50OyArK2kp
Ci0gICAgICAgICAgICBXVEZMb2dBbHdheXMoIiVzPSVzXG4iLCBwYXJhbWV0ZXJzLm5hbWUoaSks
IHBhcmFtZXRlcnMudmFsdWUoaSkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBhcHBseVNhbmRib3goY29uc3QgQ2hpbGRQ
cm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBTYW5kYm94
SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBzYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJz
LCBjb25zdCBTdHJpbmcmIGRhdGFWYXVsdFBhcmVudERpcmVjdG9yeSkKLXsKLSAgICBTdHJpbmcg
cHJvZmlsZU9yUHJvZmlsZVBhdGg7Ci0gICAgYm9vbCBpc1Byb2ZpbGVQYXRoOwotICAgIGdldFNh
bmRib3hQcm9maWxlT3JQcm9maWxlUGF0aChzYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJz
LCBwcm9maWxlT3JQcm9maWxlUGF0aCwgaXNQcm9maWxlUGF0aCk7Ci0gICAgaWYgKHByb2ZpbGVP
clByb2ZpbGVQYXRoLmlzRW1wdHkoKSkgewotICAgICAgICBXVEZMb2dBbHdheXMoIiVzOiBQcm9m
aWxlIHBhdGggaXMgaW52YWxpZFxuIiwgZ2V0cHJvZ25hbWUoKSk7Ci0gICAgICAgIENSQVNIKCk7
Ci0gICAgfQotCi0jaWYgVVNFKENBQ0hFX0NPTVBJTEVEX1NBTkRCT1gpCi0gICAgLy8gVGhlIHBs
dWdpbiBwcm9jZXNzJ3MgREFSV0lOX1VTRVJfVEVNUF9ESVIgYW5kIERBUldJTl9VU0VSX0NBQ0hF
X0RJUiBzYW5kYm94IHBhcmFtZXRlcnMgYXJlIHJhbmRvbWl6ZWQgc28KLSAgICAvLyBzbyB0aGUg
Y29tcGlsZWQgc2FuZGJveCBzaG91bGQgbm90IGJlIGNhY2hlZCBiZWNhdXNlIGl0IHdvbid0IGJl
IHJldXNlZC4KLSAgICBpZiAocGFyYW1ldGVycy5wcm9jZXNzVHlwZSA9PSBDaGlsZFByb2Nlc3M6
OlByb2Nlc3NUeXBlOjpQbHVnaW4pCi0gICAgICAgIHJldHVybiBjb21waWxlQW5kQXBwbHlTYW5k
Ym94U2xvd0Nhc2UocHJvZmlsZU9yUHJvZmlsZVBhdGgsIGlzUHJvZmlsZVBhdGgsIHNhbmRib3hJ
bml0aWFsaXphdGlvblBhcmFtZXRlcnMpOwotCi0gICAgU2FuZGJveFBhcmFtZXRlcnNQdHIgc2Fu
ZGJveFBhcmFtZXRlcnMgeyBzYW5kYm94X2NyZWF0ZV9wYXJhbXMoKSB9OwotICAgIGlmICghc2Fu
ZGJveFBhcmFtZXRlcnMpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCIlczogQ291bGQgbm90IGNy
ZWF0ZSBzYW5kYm94IHBhcmFtZXRlcnNcbiIsIGdldHByb2duYW1lKCkpOwotICAgICAgICBDUkFT
SCgpOwotICAgIH0KLSAgICBhdXRvIGhlYWRlciA9IHNldEFuZFNlcmlhbGl6ZVNhbmRib3hQYXJh
bWV0ZXJzKHNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMsIHNhbmRib3hQYXJhbWV0ZXJz
LCBwcm9maWxlT3JQcm9maWxlUGF0aCwgaXNQcm9maWxlUGF0aCk7Ci0gICAgaWYgKCFoZWFkZXIp
IHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCIlczogU2FuZGJveCBwYXJhbWV0ZXJzIGFyZSBpbnZh
bGlkXG4iLCBnZXRwcm9nbmFtZSgpKTsKLSAgICAgICAgQ1JBU0goKTsKLSAgICB9Ci0KLSAgICBT
dHJpbmcgZGlyZWN0b3J5UGF0aCB7IHNhbmRib3hEaXJlY3RvcnkocGFyYW1ldGVycy5wcm9jZXNz
VHlwZSwgZGF0YVZhdWx0UGFyZW50RGlyZWN0b3J5KSB9OwotICAgIFN0cmluZyBmaWxlUGF0aCA9
IHNhbmRib3hGaWxlUGF0aChkaXJlY3RvcnlQYXRoLCAqaGVhZGVyKTsKLSAgICBTYW5kYm94SW5m
byBpbmZvIHsKLSAgICAgICAgZGF0YVZhdWx0UGFyZW50RGlyZWN0b3J5LAotICAgICAgICBkaXJl
Y3RvcnlQYXRoLAotICAgICAgICBmaWxlUGF0aCwKLSAgICAgICAgc2FuZGJveFBhcmFtZXRlcnMs
Ci0gICAgICAgICpoZWFkZXIsCi0gICAgICAgIHBhcmFtZXRlcnMucHJvY2Vzc1R5cGUsCi0gICAg
ICAgIHNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMsCi0gICAgICAgIHByb2ZpbGVPclBy
b2ZpbGVQYXRoLAotICAgICAgICBpc1Byb2ZpbGVQYXRoCi0gICAgfTsKLQotICAgIGlmICh0cnlB
cHBseUNhY2hlZFNhbmRib3goaW5mbykpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgU2Fu
ZGJveFByb2ZpbGVQdHIgc2FuZGJveFByb2ZpbGUgPSBjb21waWxlQW5kQ2FjaGVTYW5kYm94UHJv
ZmlsZShpbmZvKTsKLSAgICBpZiAoIXNhbmRib3hQcm9maWxlKQotICAgICAgICByZXR1cm4gY29t
cGlsZUFuZEFwcGx5U2FuZGJveFNsb3dDYXNlKHByb2ZpbGVPclByb2ZpbGVQYXRoLCBpc1Byb2Zp
bGVQYXRoLCBzYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzKTsKLQotICAgIGlmIChzYW5k
Ym94X2FwcGx5KHNhbmRib3hQcm9maWxlLmdldCgpKSkgewotICAgICAgICBXVEZMb2dBbHdheXMo
IiVzOiBDb3VsZCBub3QgYXBwbHkgY29tcGlsZWQgc2FuZGJveDogJXNcbiIsIGdldHByb2duYW1l
KCksIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShwYXJhbWV0ZXJzKTsKLSAgICBVTlVT
RURfUEFSQU0oZGF0YVZhdWx0UGFyZW50RGlyZWN0b3J5KTsKLSAgICByZXR1cm4gY29tcGlsZUFu
ZEFwcGx5U2FuZGJveFNsb3dDYXNlKHByb2ZpbGVPclByb2ZpbGVQYXRoLCBpc1Byb2ZpbGVQYXRo
LCBzYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzKTsKLSNlbmRpZiAvLyBVU0UoQ0FDSEVf
Q09NUElMRURfU0FOREJPWCkKLX0KLQotc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVNhbmRib3hQYXJh
bWV0ZXJzKGNvbnN0IENoaWxkUHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYgcGFyYW1l
dGVycywgU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycyYgc2FuZGJveFBhcmFtZXRlcnMp
Ci17Ci0gICAgLy8gVmVyaWZ5IHVzZXIgZGlyZWN0b3J5IHN1ZmZpeC4KLSAgICBpZiAoc2FuZGJv
eFBhcmFtZXRlcnMudXNlckRpcmVjdG9yeVN1ZmZpeCgpLmlzTnVsbCgpKSB7Ci0gICAgICAgIGF1
dG8gdXNlckRpcmVjdG9yeVN1ZmZpeCA9IHBhcmFtZXRlcnMuZXh0cmFJbml0aWFsaXphdGlvbkRh
dGEuZmluZCgidXNlci1kaXJlY3Rvcnktc3VmZml4Iik7Ci0gICAgICAgIGlmICh1c2VyRGlyZWN0
b3J5U3VmZml4ICE9IHBhcmFtZXRlcnMuZXh0cmFJbml0aWFsaXphdGlvbkRhdGEuZW5kKCkpCi0g
ICAgICAgICAgICBzYW5kYm94UGFyYW1ldGVycy5zZXRVc2VyRGlyZWN0b3J5U3VmZml4KFttYWtl
U3RyaW5nKHVzZXJEaXJlY3RvcnlTdWZmaXgtPnZhbHVlLCAnLycsIFN0cmluZyhbW05TQnVuZGxl
IG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdKSkgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
XSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgU3RyaW5nIGNsaWVudElkZW50aWZpZXIg
PSBjb2RlU2lnbmluZ0lkZW50aWZpZXIocGFyYW1ldGVycy5jb25uZWN0aW9uSWRlbnRpZmllci54
cGNDb25uZWN0aW9uLmdldCgpKTsKLSAgICAgICAgICAgIGlmIChjbGllbnRJZGVudGlmaWVyLmlz
TnVsbCgpKQotICAgICAgICAgICAgICAgIGNsaWVudElkZW50aWZpZXIgPSBwYXJhbWV0ZXJzLmNs
aWVudElkZW50aWZpZXI7Ci0gICAgICAgICAgICBTdHJpbmcgZGVmYXVsdFVzZXJEaXJlY3RvcnlT
dWZmaXggPSBtYWtlU3RyaW5nKFN0cmluZyhbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlk
ZW50aWZpZXJdKSwgJysnLCBjbGllbnRJZGVudGlmaWVyKTsKLSAgICAgICAgICAgIHNhbmRib3hQ
YXJhbWV0ZXJzLnNldFVzZXJEaXJlY3RvcnlTdWZmaXgoZGVmYXVsdFVzZXJEaXJlY3RvcnlTdWZm
aXgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgU3RyaW5nIG9zU3lzdGVtTWFya2V0aW5nVmVy
c2lvbiA9IHN5c3RlbU1hcmtldGluZ1ZlcnNpb24oKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBvc1Zl
cnNpb25QYXJ0cyA9IG9zU3lzdGVtTWFya2V0aW5nVmVyc2lvbi5zcGxpdCgnLicpOwotICAgIGlm
IChvc1ZlcnNpb25QYXJ0cy5zaXplKCkgPCAyKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiJXM6
IENvdWxkbid0IGZpbmQgT1MgVmVyc2lvblxuIiwgZ2V0cHJvZ25hbWUoKSk7Ci0gICAgICAgIGV4
aXQoRVhfTk9QRVJNKTsKLSAgICB9Ci0gICAgU3RyaW5nIG9zVmVyc2lvbiA9IG9zVmVyc2lvblBh
cnRzWzBdICsgJy4nICsgb3NWZXJzaW9uUGFydHNbMV07Ci0gICAgc2FuZGJveFBhcmFtZXRlcnMu
YWRkUGFyYW1ldGVyKCJfT1NfVkVSU0lPTiIsIG9zVmVyc2lvbi51dGY4KCkuZGF0YSgpKTsKLQot
ICAgIC8vIFVzZSBwcml2YXRlIHRlbXBvcmFyeSBhbmQgY2FjaGUgZGlyZWN0b3JpZXMuCi0gICAg
c2V0ZW52KCJESVJIRUxQRVJfVVNFUl9ESVJfU1VGRklYIiwgRmlsZVN5c3RlbTo6ZmlsZVN5c3Rl
bVJlcHJlc2VudGF0aW9uKHNhbmRib3hQYXJhbWV0ZXJzLnVzZXJEaXJlY3RvcnlTdWZmaXgoKSku
ZGF0YSgpLCAxKTsKLSAgICBjaGFyIHRlbXBvcmFyeURpcmVjdG9yeVtQQVRIX01BWF07Ci0gICAg
aWYgKCFjb25mc3RyKF9DU19EQVJXSU5fVVNFUl9URU1QX0RJUiwgdGVtcG9yYXJ5RGlyZWN0b3J5
LCBzaXplb2YodGVtcG9yYXJ5RGlyZWN0b3J5KSkpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCIl
czogY291bGRuJ3QgcmV0cmlldmUgcHJpdmF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHBhdGg6ICVk
XG4iLCBnZXRwcm9nbmFtZSgpLCBlcnJubyk7Ci0gICAgICAgIGV4aXQoRVhfTk9QRVJNKTsKLSAg
ICB9Ci0gICAgc2V0ZW52KCJUTVBESVIiLCB0ZW1wb3JhcnlEaXJlY3RvcnksIDEpOwotCi0gICAg
c2FuZGJveFBhcmFtZXRlcnMuYWRkUGF0aFBhcmFtZXRlcigiV0VCS0lUMl9GUkFNRVdPUktfRElS
IiwgW1t3ZWJLaXQyQnVuZGxlKCkgYnVuZGxlUGF0aF0gc3RyaW5nQnlEZWxldGluZ0xhc3RQYXRo
Q29tcG9uZW50XSk7Ci0gICAgc2FuZGJveFBhcmFtZXRlcnMuYWRkQ29uZkRpcmVjdG9yeVBhcmFt
ZXRlcigiREFSV0lOX1VTRVJfVEVNUF9ESVIiLCBfQ1NfREFSV0lOX1VTRVJfVEVNUF9ESVIpOwot
ICAgIHNhbmRib3hQYXJhbWV0ZXJzLmFkZENvbmZEaXJlY3RvcnlQYXJhbWV0ZXIoIkRBUldJTl9V
U0VSX0NBQ0hFX0RJUiIsIF9DU19EQVJXSU5fVVNFUl9DQUNIRV9ESVIpOwotCi0gICAgY2hhciBi
dWZmZXJbNDA5Nl07Ci0gICAgaW50IGJ1ZmZlclNpemUgPSBzaXplb2YoYnVmZmVyKTsKLSAgICBz
dHJ1Y3QgcGFzc3dkIHB3ZDsKLSAgICBzdHJ1Y3QgcGFzc3dkKiByZXN1bHQgPSAwOwotICAgIGlm
IChnZXRwd3VpZF9yKGdldHVpZCgpLCAmcHdkLCBidWZmZXIsIGJ1ZmZlclNpemUsICZyZXN1bHQp
IHx8ICFyZXN1bHQpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCIlczogQ291bGRuJ3QgZmluZCBo
b21lIGRpcmVjdG9yeVxuIiwgZ2V0cHJvZ25hbWUoKSk7Ci0gICAgICAgIGV4aXQoRVhfTk9QRVJN
KTsKLSAgICB9Ci0KLSAgICBzYW5kYm94UGFyYW1ldGVycy5hZGRQYXRoUGFyYW1ldGVyKCJIT01F
X0RJUiIsIHB3ZC5wd19kaXIpOwotICAgIFN0cmluZyBwYXRoID0gU3RyaW5nOjpmcm9tVVRGOChw
d2QucHdfZGlyKTsKLSAgICBwYXRoLmFwcGVuZCgiL0xpYnJhcnkiKTsKLSAgICBzYW5kYm94UGFy
YW1ldGVycy5hZGRQYXRoUGFyYW1ldGVyKCJIT01FX0xJQlJBUllfRElSIiwgRmlsZVN5c3RlbTo6
ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7Ci0gICAgcGF0aC5hcHBlbmQo
Ii9QcmVmZXJlbmNlcyIpOwotICAgIHNhbmRib3hQYXJhbWV0ZXJzLmFkZFBhdGhQYXJhbWV0ZXIo
IkhPTUVfTElCUkFSWV9QUkVGRVJFTkNFU19ESVIiLCBGaWxlU3lzdGVtOjpmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24ocGF0aCkuZGF0YSgpKTsKLX0KLQotdm9pZCBDaGlsZFByb2Nlc3M6OmluaXRp
YWxpemVTYW5kYm94KGNvbnN0IENoaWxkUHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYg
cGFyYW1ldGVycywgU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycyYgc2FuZGJveFBhcmFt
ZXRlcnMpCi17Ci0gICAgVHJhY2VTY29wZSB0cmFjZVNjb3BlKEluaXRpYWxpemVTYW5kYm94U3Rh
cnQsIEluaXRpYWxpemVTYW5kYm94RW5kKTsKLQotI2lmIFVTRShDQUNIRV9DT01QSUxFRF9TQU5E
Qk9YKQotICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemVTYW5kYm94
UGFyYW1ldGVycyBzbyB0aGF0IHRoZSBwYXRoIGRvZXMgbm90IGluY2x1ZGUgdGhlIHVzZXIgZGly
ZWN0b3J5IHN1ZmZpeC4KLSAgICAvLyBXZSBkb24ndCB3YW50IHRoZSB1c2VyIGRpcmVjdG9yeSBz
dWZmaXggYmVjYXVzZSB3ZSB3YW50IGFsbCBwcm9jZXNzZXMgb2YgdGhlIHNhbWUgdHlwZSB0byB1
c2UgdGhlIHNhbWUgY2FjaGUgZGlyZWN0b3J5LgotICAgIFN0cmluZyBkYXRhVmF1bHRQYXJlbnRE
aXJlY3RvcnkgeyBzYW5kYm94RGF0YVZhdWx0UGFyZW50RGlyZWN0b3J5KCkgfTsKLSNlbHNlCi0g
ICAgU3RyaW5nIGRhdGFWYXVsdFBhcmVudERpcmVjdG9yeTsKLSNlbmRpZgotCi0gICAgaW5pdGlh
bGl6ZVNhbmRib3hQYXJhbWV0ZXJzKHBhcmFtZXRlcnMsIHNhbmRib3hQYXJhbWV0ZXJzKTsKLQot
ICAgIGlmICghYXBwbHlTYW5kYm94KHBhcmFtZXRlcnMsIHNhbmRib3hQYXJhbWV0ZXJzLCBkYXRh
VmF1bHRQYXJlbnREaXJlY3RvcnkpKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiJXM6IFVuYWJs
ZSB0byBhcHBseSBzYW5kYm94XG4iLCBnZXRwcm9nbmFtZSgpKTsKLSAgICAgICAgQ1JBU0goKTsK
LSAgICB9Ci0KLSAgICBpZiAoc2hvdWxkT3ZlcnJpZGVRdWFyYW50aW5lKCkpIHsKLSAgICAgICAg
Ly8gVGhpcyB3aWxsIG92ZXJyaWRlIExTRmlsZVF1YXJhbnRpbmVFbmFibGVkIGZyb20gSW5mby5w
bGlzdCB1bmxlc3Mgc2FuZGJveCBxdWFyYW50aW5lIGlzIGdsb2JhbGx5IGRpc2FibGVkLgotICAg
ICAgICBPU1N0YXR1cyBlcnJvciA9IGVuYWJsZVNhbmRib3hTdHlsZUZpbGVRdWFyYW50aW5lKCk7
Ci0gICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCIlczogQ291
bGRuJ3QgZW5hYmxlIHNhbmRib3ggc3R5bGUgZmlsZSBxdWFyYW50aW5lOiAlbGRcbiIsIGdldHBy
b2duYW1lKCksIHN0YXRpY19jYXN0PGxvbmc+KGVycm9yKSk7Ci0gICAgICAgICAgICBleGl0KEVY
X05PUEVSTSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLSNpZiBVU0UoQVBQS0lUKQotdm9pZCBD
aGlsZFByb2Nlc3M6OnN0b3BOU0FwcFJ1bkxvb3AoKQotewotICAgIEFTU0VSVChbTlNBcHAgaXNS
dW5uaW5nXSk7Ci0gICAgW05TQXBwIHN0b3A6bmlsXTsKLQotICAgIE5TRXZlbnQgKmV2ZW50ID0g
W05TRXZlbnQgb3RoZXJFdmVudFdpdGhUeXBlOk5TRXZlbnRUeXBlQXBwbGljYXRpb25EZWZpbmVk
IGxvY2F0aW9uOk5TTWFrZVBvaW50KDAsIDApIG1vZGlmaWVyRmxhZ3M6MCB0aW1lc3RhbXA6MC4w
IHdpbmRvd051bWJlcjowIGNvbnRleHQ6bmlsIHN1YnR5cGU6MCBkYXRhMTowIGRhdGEyOjBdOwot
ICAgIFtOU0FwcCBwb3N0RXZlbnQ6ZXZlbnQgYXRTdGFydDp0cnVlXTsKLX0KLSNlbmRpZgotCi0j
aWYgIVBMQVRGT1JNKElPU01BQykgJiYgRU5BQkxFKFdFQlBST0NFU1NfTlNSVU5MT09QKQotdm9p
ZCBDaGlsZFByb2Nlc3M6OnN0b3BOU1J1bkxvb3AoKQotewotICAgIEFTU0VSVChbTlNSdW5Mb29w
IG1haW5SdW5Mb29wXSk7Ci0gICAgW1tOU1J1bkxvb3AgbWFpblJ1bkxvb3BdIHBlcmZvcm1CbG9j
azpeewotICAgICAgICBleGl0KDApOwotICAgIH1dOwotfQotI2VuZGlmCi0KLSNpZiBQTEFURk9S
TShJT1NNQUMpCi12b2lkIENoaWxkUHJvY2Vzczo6cGxhdGZvcm1TdG9wUnVuTG9vcCgpCi17Ci0g
ICAgWFBDU2VydmljZUV4aXQoV1RGTW92ZShtX3ByaW9yaXR5Qm9vc3RNZXNzYWdlKSk7Ci19Ci0j
ZW5kaWYKLQotdm9pZCBDaGlsZFByb2Nlc3M6OnNldFFPUyhpbnQgbGF0ZW5jeVFPUywgaW50IHRo
cm91Z2hwdXRRT1MpCi17Ci0gICAgaWYgKCFsYXRlbmN5UU9TICYmICF0aHJvdWdocHV0UU9TKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzdHJ1Y3QgdGFza19xb3NfcG9saWN5IHFvc2luZm8gPSB7
Ci0gICAgICAgIGxhdGVuY3lRT1MgPyBMQVRFTkNZX1FPU19USUVSXzAgKyBsYXRlbmN5UU9TIC0g
MSA6IExBVEVOQ1lfUU9TX1RJRVJfVU5TUEVDSUZJRUQsCi0gICAgICAgIHRocm91Z2hwdXRRT1Mg
PyBUSFJPVUdIUFVUX1FPU19USUVSXzAgKyB0aHJvdWdocHV0UU9TIC0gMSA6IFRIUk9VR0hQVVRf
UU9TX1RJRVJfVU5TUEVDSUZJRUQKLSAgICB9OwotCi0gICAgdGFza19wb2xpY3lfc2V0KG1hY2hf
dGFza19zZWxmKCksIFRBU0tfT1ZFUlJJREVfUU9TX1BPTElDWSwgKHRhc2tfcG9saWN5X3QpJnFv
c2luZm8sIFRBU0tfUU9TX1BPTElDWV9DT1VOVCk7Ci19Ci0KLSNpZiBQTEFURk9STShNQUMpCi1i
b29sIENoaWxkUHJvY2Vzczo6aXNTeXN0ZW1XZWJLaXQoKQotewotICAgIHN0YXRpYyBib29sIGlz
U3lzdGVtV2ViS2l0ID0gW10gewotICAgICAgICByZXR1cm4gW1t3ZWJLaXQyQnVuZGxlKCkgYnVu
ZGxlUGF0aF0gaGFzUHJlZml4OkAiL1N5c3RlbS8iXTsKLSAgICB9KCk7Ci0gICAgcmV0dXJuIGlz
U3lzdGVtV2ViS2l0OwotfQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9TZWNJdGVtU2hpbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1NlY0l0ZW1TaGltLmNwcAkocmV2aXNp
b24gMjQwNTg5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1NlY0l0ZW1TaGltLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2lmIEVOQUJMRShTRUNfSVRFTV9TSElN
KQogCiAjaW5jbHVkZSAiQmxvY2tpbmdSZXNwb25zZU1hcC5oIgotI2luY2x1ZGUgIkNoaWxkUHJv
Y2Vzcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCiAjaW5jbHVkZSAiU2VjSXRlbVJl
cXVlc3REYXRhLmgiCiAjaW5jbHVkZSAiU2VjSXRlbVJlc3BvbnNlRGF0YS5oIgogI2luY2x1ZGUg
IlNlY0l0ZW1TaGltTGlicmFyeS5oIgpAQCAtNTgsNyArNTgsMTEgQEAgZXh0ZXJuICJDIiB2b2lk
IF9DRlVSTENvbm5lY3Rpb25TZXRGcmFtZQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotc3RhdGlj
IENoaWxkUHJvY2Vzcyogc2hhcmVkUHJvY2VzczsKK3N0YXRpYyBXZWFrUHRyPE5ldHdvcmtQcm9j
ZXNzPiYgZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxXZWFrUHRyPE5ldHdvcmtQcm9jZXNzPj4gbmV0d29ya1Byb2Nlc3M7CisgICAgcmV0dXJuIG5l
dHdvcmtQcm9jZXNzLmdldCgpOworfQogCiBzdGF0aWMgV29ya1F1ZXVlJiB3b3JrUXVldWUoKQog
ewpAQCAtNzQsMTEgKzc4LDE0IEBAIHN0YXRpYyBXb3JrUXVldWUmIHdvcmtRdWV1ZSgpCiAKIHN0
YXRpYyBPcHRpb25hbDxTZWNJdGVtUmVzcG9uc2VEYXRhPiBzZW5kU2VjSXRlbVJlcXVlc3QoU2Vj
SXRlbVJlcXVlc3REYXRhOjpUeXBlIHJlcXVlc3RUeXBlLCBDRkRpY3Rpb25hcnlSZWYgcXVlcnks
IENGRGljdGlvbmFyeVJlZiBhdHRyaWJ1dGVzVG9NYXRjaCA9IDApCiB7CisgICAgaWYgKCFnbG9i
YWxOZXR3b3JrUHJvY2VzcygpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCiAgICAg
T3B0aW9uYWw8U2VjSXRlbVJlc3BvbnNlRGF0YT4gcmVzcG9uc2U7CiAKICAgICBCaW5hcnlTZW1h
cGhvcmUgc2VtYXBob3JlOwogCi0gICAgc2hhcmVkUHJvY2Vzcy0+cGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZFdpdGhSZXBseShNZXNzYWdlczo6U2VjSXRlbVNoaW1Qcm94eTo6U2VjSXRl
bVJlcXVlc3QoU2VjSXRlbVJlcXVlc3REYXRhKHJlcXVlc3RUeXBlLCBxdWVyeSwgYXR0cmlidXRl
c1RvTWF0Y2gpKSwgMCwgd29ya1F1ZXVlKCksIFsmcmVzcG9uc2UsICZzZW1hcGhvcmVdKGF1dG8g
cmVwbHkpIHsKKyAgICBnbG9iYWxOZXR3b3JrUHJvY2VzcygpLT5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kV2l0aFJlcGx5KE1lc3NhZ2VzOjpTZWNJdGVtU2hpbVByb3h5OjpTZWNJdGVt
UmVxdWVzdChTZWNJdGVtUmVxdWVzdERhdGEocmVxdWVzdFR5cGUsIHF1ZXJ5LCBhdHRyaWJ1dGVz
VG9NYXRjaCkpLCAwLCB3b3JrUXVldWUoKSwgWyZyZXNwb25zZSwgJnNlbWFwaG9yZV0oYXV0byBy
ZXBseSkgewogICAgICAgICBpZiAocmVwbHkpCiAgICAgICAgICAgICByZXNwb25zZSA9IFdURk1v
dmUoc3RkOjpnZXQ8MD4oKnJlcGx5KSk7CiAKQEAgLTEzNCw5ICsxNDEsOSBAQCBzdGF0aWMgT1NT
dGF0dXMgd2ViU2VjSXRlbURlbGV0ZShDRkRpY3RpCiAgICAgcmV0dXJuIHJlc3BvbnNlLT5yZXN1
bHRDb2RlKCk7CiB9CiAKLXZvaWQgaW5pdGlhbGl6ZVNlY0l0ZW1TaGltKENoaWxkUHJvY2VzcyYg
cHJvY2VzcykKK3ZvaWQgaW5pdGlhbGl6ZVNlY0l0ZW1TaGltKE5ldHdvcmtQcm9jZXNzJiBwcm9j
ZXNzKQogewotICAgIHNoYXJlZFByb2Nlc3MgPSAmcHJvY2VzczsKKyAgICBnbG9iYWxOZXR3b3Jr
UHJvY2VzcygpID0gbWFrZVdlYWtQdHIocHJvY2Vzcyk7CiAKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQogICAgIHN0cnVjdCBfQ0ZORnJhbWV3b3Jrc1N0dWJzIHN0dWJzID0gewpJbmRleDogU291
cmNlL1dlYktpdC9TaGFyZWQvbWFjL1NlY0l0ZW1TaGltLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9TaGFyZWQvbWFjL1NlY0l0ZW1TaGltLmgJKHJldmlzaW9uIDI0MDU4OSkKKysrIFNv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9TZWNJdGVtU2hpbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw5ICsyNyw5IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBDaGlsZFByb2Nlc3M7
CitjbGFzcyBOZXR3b3JrUHJvY2VzczsKIAotdm9pZCBpbml0aWFsaXplU2VjSXRlbVNoaW0oQ2hp
bGRQcm9jZXNzJik7Cit2b2lkIGluaXRpYWxpemVTZWNJdGVtU2hpbShOZXR3b3JrUHJvY2VzcyYp
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQv
dW5peC9BdXhpbGlhcnlQcm9jZXNzTWFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9TaGFyZWQvdW5peC9BdXhpbGlhcnlQcm9jZXNzTWFpbi5jcHAJKHJldmlzaW9uIDI0MDU4OSkJ
KGZyb20gU291cmNlL1dlYktpdC9TaGFyZWQvdW5peC9DaGlsZFByb2Nlc3NNYWluLmNwcDoyNDA1
ODkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC91bml4L0F1eGlsaWFyeVByb2Nlc3NNYWluLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJDaGlsZFByb2Nlc3NNYWluLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL1Byb2Nlc3MuaD4KKyNp
bmNsdWRlIDxzdGRsaWIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Jvb2wgQ2hpbGRQcm9j
ZXNzTWFpbkJhc2U6OnBhcnNlQ29tbWFuZExpbmUoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQorewor
ICAgIEFTU0VSVChhcmdjID49IDMpOworICAgIGlmIChhcmdjIDwgMykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgbV9wYXJhbWV0ZXJzLnByb2Nlc3NJZGVudGlmaWVyID0gbWFrZU9iamVj
dElkZW50aWZpZXI8V2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXJUeXBlPihhdG9sbChhcmd2WzFd
KSk7CisgICAgbV9wYXJhbWV0ZXJzLmNvbm5lY3Rpb25JZGVudGlmaWVyID0gYXRvaShhcmd2WzJd
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L1NoYXJlZC91bml4L0F1eGlsaWFyeVByb2Nlc3NN
YWluLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25h
dGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1NoYXJlZC91bml4L0F1eGlsaWFyeVByb2Nlc3NNYWluLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC91bml4L0F1eGlsaWFyeVByb2Nlc3NNYWluLmNwcAkocmV2aXNpb24g
MjQwNTg5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvdW5peC9BdXhpbGlhcnlQcm9jZXNzTWFp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDE0ICsyNCwxNCBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJDaGlsZFByb2Nlc3NNYWluLmgiCisjaW5jbHVkZSAiQXV4
aWxpYXJ5UHJvY2Vzc01haW4uaCIKIAogI2luY2x1ZGUgPFdlYkNvcmUvUHJvY2Vzcy5oPgogI2lu
Y2x1ZGUgPHN0ZGxpYi5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotYm9vbCBDaGlsZFByb2Nl
c3NNYWluQmFzZTo6cGFyc2VDb21tYW5kTGluZShpbnQgYXJnYywgY2hhcioqIGFyZ3YpCitib29s
IEF1eGlsaWFyeVByb2Nlc3NNYWluQmFzZTo6cGFyc2VDb21tYW5kTGluZShpbnQgYXJnYywgY2hh
cioqIGFyZ3YpCiB7CiAgICAgQVNTRVJUKGFyZ2MgPj0gMyk7CiAgICAgaWYgKGFyZ2MgPCAzKQpJ
bmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvdW5peC9BdXhpbGlhcnlQcm9jZXNzTWFpbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL3VuaXgvQXV4aWxpYXJ5UHJvY2Vzc01h
aW4uaAkocmV2aXNpb24gMjQwNTg5KQkoZnJvbSBTb3VyY2UvV2ViS2l0L1NoYXJlZC91bml4L0No
aWxkUHJvY2Vzc01haW4uaDoyNDA1ODkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC91bml4L0F1
eGlsaWFyeVByb2Nlc3NNYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkNoaWxkUHJvY2Vzcy5oIgorI2luY2x1ZGUgIldlYktpdDJJbml0aWFs
aXplLmgiCisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIENoaWxkUHJvY2Vzc01haW5CYXNlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wg
cGxhdGZvcm1Jbml0aWFsaXplKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBw
YXJzZUNvbW1hbmRMaW5lKGludCBhcmdjLCBjaGFyKiogYXJndik7CisgICAgdmlydHVhbCB2b2lk
IHBsYXRmb3JtRmluYWxpemUoKSB7IH0KKworICAgIENoaWxkUHJvY2Vzc0luaXRpYWxpemF0aW9u
UGFyYW1ldGVycyYmIHRha2VJbml0aWFsaXphdGlvblBhcmFtZXRlcnMoKSB7IHJldHVybiBXVEZN
b3ZlKG1fcGFyYW1ldGVycyk7IH0KKworcHJvdGVjdGVkOgorICAgIENoaWxkUHJvY2Vzc0luaXRp
YWxpemF0aW9uUGFyYW1ldGVycyBtX3BhcmFtZXRlcnM7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGlsZFByb2Nlc3NUeXBlPgordm9pZCBpbml0aWFsaXplQ2hpbGRQcm9jZXNzKENoaWxkUHJv
Y2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCit7CisgICAgQ2hpbGRQ
cm9jZXNzVHlwZTo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZShXVEZNb3ZlKHBhcmFtZXRlcnMpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRQcm9jZXNzVHlwZSwgdHlwZW5hbWUgQ2hpbGRQ
cm9jZXNzTWFpblR5cGU+CitpbnQgQ2hpbGRQcm9jZXNzTWFpbihpbnQgYXJnYywgY2hhcioqIGFy
Z3YpCit7CisgICAgQ2hpbGRQcm9jZXNzTWFpblR5cGUgY2hpbGRNYWluOworCisgICAgaWYgKCFj
aGlsZE1haW4ucGxhdGZvcm1Jbml0aWFsaXplKCkpCisgICAgICAgIHJldHVybiBFWElUX0ZBSUxV
UkU7CisKKyAgICBJbml0aWFsaXplV2ViS2l0MigpOworCisgICAgaWYgKCFjaGlsZE1haW4ucGFy
c2VDb21tYW5kTGluZShhcmdjLCBhcmd2KSkKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsK
KworICAgIGluaXRpYWxpemVDaGlsZFByb2Nlc3M8Q2hpbGRQcm9jZXNzVHlwZT4oY2hpbGRNYWlu
LnRha2VJbml0aWFsaXphdGlvblBhcmFtZXRlcnMoKSk7CisgICAgUnVuTG9vcDo6cnVuKCk7Cisg
ICAgY2hpbGRNYWluLnBsYXRmb3JtRmluYWxpemUoKTsKKworICAgIHJldHVybiBFWElUX1NVQ0NF
U1M7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1dlYktpdC9TaGFyZWQvdW5peC9BdXhpbGlhcnlQcm9jZXNzTWFpbi5oCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL3VuaXgvQXV4aWxp
YXJ5UHJvY2Vzc01haW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC91bml4
L0F1eGlsaWFyeVByb2Nlc3NNYWluLmgJKHJldmlzaW9uIDI0MDU4OSkKKysrIFNvdXJjZS9XZWJL
aXQvU2hhcmVkL3VuaXgvQXV4aWxpYXJ5UHJvY2Vzc01haW4uaAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNDYgKzI1LDQ2IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ2hpbGRQcm9jZXNz
LmgiCisjaW5jbHVkZSAiQXV4aWxpYXJ5UHJvY2Vzcy5oIgogI2luY2x1ZGUgIldlYktpdDJJbml0
aWFsaXplLmgiCiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKLWNsYXNzIENoaWxkUHJvY2Vzc01haW5CYXNlIHsKK2NsYXNzIEF1eGlsaWFyeVByb2Nlc3NN
YWluQmFzZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHBsYXRmb3JtSW5pdGlhbGl6ZSgp
IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDb21tYW5kTGluZShpbnQg
YXJnYywgY2hhcioqIGFyZ3YpOwogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUZpbmFsaXplKCkg
eyB9CiAKLSAgICBDaGlsZFByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmJiB0YWtlSW5p
dGlhbGl6YXRpb25QYXJhbWV0ZXJzKCkgeyByZXR1cm4gV1RGTW92ZShtX3BhcmFtZXRlcnMpOyB9
CisgICAgQXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYmIHRha2VJbml0
aWFsaXphdGlvblBhcmFtZXRlcnMoKSB7IHJldHVybiBXVEZNb3ZlKG1fcGFyYW1ldGVycyk7IH0K
IAogcHJvdGVjdGVkOgotICAgIENoaWxkUHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyBt
X3BhcmFtZXRlcnM7CisgICAgQXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVy
cyBtX3BhcmFtZXRlcnM7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGlsZFByb2Nlc3NUeXBl
Pgotdm9pZCBpbml0aWFsaXplQ2hpbGRQcm9jZXNzKENoaWxkUHJvY2Vzc0luaXRpYWxpemF0aW9u
UGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBBdXhpbGlhcnlQcm9j
ZXNzVHlwZT4KK3ZvaWQgaW5pdGlhbGl6ZUF1eGlsaWFyeVByb2Nlc3MoQXV4aWxpYXJ5UHJvY2Vz
c0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCiB7Ci0gICAgQ2hpbGRQcm9j
ZXNzVHlwZTo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZShXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAg
ICBBdXhpbGlhcnlQcm9jZXNzVHlwZTo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZShXVEZNb3ZlKHBh
cmFtZXRlcnMpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRQcm9jZXNzVHlwZSwgdHlw
ZW5hbWUgQ2hpbGRQcm9jZXNzTWFpblR5cGU+Ci1pbnQgQ2hpbGRQcm9jZXNzTWFpbihpbnQgYXJn
YywgY2hhcioqIGFyZ3YpCit0ZW1wbGF0ZTx0eXBlbmFtZSBBdXhpbGlhcnlQcm9jZXNzVHlwZSwg
dHlwZW5hbWUgQXV4aWxpYXJ5UHJvY2Vzc01haW5UeXBlPgoraW50IEF1eGlsaWFyeVByb2Nlc3NN
YWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKLSAgICBDaGlsZFByb2Nlc3NNYWluVHlwZSBj
aGlsZE1haW47CisgICAgQXV4aWxpYXJ5UHJvY2Vzc01haW5UeXBlIGF1eGlsaWFyeU1haW47CiAK
LSAgICBpZiAoIWNoaWxkTWFpbi5wbGF0Zm9ybUluaXRpYWxpemUoKSkKKyAgICBpZiAoIWF1eGls
aWFyeU1haW4ucGxhdGZvcm1Jbml0aWFsaXplKCkpCiAgICAgICAgIHJldHVybiBFWElUX0ZBSUxV
UkU7CiAKICAgICBJbml0aWFsaXplV2ViS2l0MigpOwogCi0gICAgaWYgKCFjaGlsZE1haW4ucGFy
c2VDb21tYW5kTGluZShhcmdjLCBhcmd2KSkKKyAgICBpZiAoIWF1eGlsaWFyeU1haW4ucGFyc2VD
b21tYW5kTGluZShhcmdjLCBhcmd2KSkKICAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKIAot
ICAgIGluaXRpYWxpemVDaGlsZFByb2Nlc3M8Q2hpbGRQcm9jZXNzVHlwZT4oY2hpbGRNYWluLnRh
a2VJbml0aWFsaXphdGlvblBhcmFtZXRlcnMoKSk7CisgICAgaW5pdGlhbGl6ZUF1eGlsaWFyeVBy
b2Nlc3M8QXV4aWxpYXJ5UHJvY2Vzc1R5cGU+KGF1eGlsaWFyeU1haW4udGFrZUluaXRpYWxpemF0
aW9uUGFyYW1ldGVycygpKTsKICAgICBSdW5Mb29wOjpydW4oKTsKLSAgICBjaGlsZE1haW4ucGxh
dGZvcm1GaW5hbGl6ZSgpOworICAgIGF1eGlsaWFyeU1haW4ucGxhdGZvcm1GaW5hbGl6ZSgpOwog
CiAgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVk
L3VuaXgvQ2hpbGRQcm9jZXNzTWFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9T
aGFyZWQvdW5peC9DaGlsZFByb2Nlc3NNYWluLmNwcAkocmV2aXNpb24gMjQwNTg5KQorKysgU291
cmNlL1dlYktpdC9TaGFyZWQvdW5peC9DaGlsZFByb2Nlc3NNYWluLmNwcAkobm9uZXhpc3RlbnQp
CkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNoaWxkUHJvY2Vzc01h
aW4uaCIKLQotI2luY2x1ZGUgPFdlYkNvcmUvUHJvY2Vzcy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotYm9vbCBDaGlsZFByb2Nlc3NNYWluQmFzZTo6cGFy
c2VDb21tYW5kTGluZShpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgQVNTRVJUKGFyZ2Mg
Pj0gMyk7Ci0gICAgaWYgKGFyZ2MgPCAzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBt
X3BhcmFtZXRlcnMucHJvY2Vzc0lkZW50aWZpZXIgPSBtYWtlT2JqZWN0SWRlbnRpZmllcjxXZWJD
b3JlOjpQcm9jZXNzSWRlbnRpZmllclR5cGU+KGF0b2xsKGFyZ3ZbMV0pKTsKLSAgICBtX3BhcmFt
ZXRlcnMuY29ubmVjdGlvbklkZW50aWZpZXIgPSBhdG9pKGFyZ3ZbMl0pOwotICAgIHJldHVybiB0
cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9XZWJLaXQvU2hhcmVkL3VuaXgvQ2hpbGRQcm9jZXNzTWFpbi5jcHAKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpE
ZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC91bml4L0NoaWxk
UHJvY2Vzc01haW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC91bml4L0No
aWxkUHJvY2Vzc01haW4uaAkocmV2aXNpb24gMjQwNTg5KQorKysgU291cmNlL1dlYktpdC9TaGFy
ZWQvdW5peC9DaGlsZFByb2Nlc3NNYWluLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw3MiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiQ2hpbGRQcm9jZXNzLmgiCi0jaW5jbHVkZSAiV2ViS2l0Mklu
aXRpYWxpemUuaCIKLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotY2xhc3MgQ2hpbGRQcm9jZXNzTWFpbkJhc2UgewotcHVibGljOgotICAgIHZpcnR1YWwg
Ym9vbCBwbGF0Zm9ybUluaXRpYWxpemUoKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBi
b29sIHBhcnNlQ29tbWFuZExpbmUoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KTsKLSAgICB2aXJ0dWFs
IHZvaWQgcGxhdGZvcm1GaW5hbGl6ZSgpIHsgfQotCi0gICAgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6
YXRpb25QYXJhbWV0ZXJzJiYgdGFrZUluaXRpYWxpemF0aW9uUGFyYW1ldGVycygpIHsgcmV0dXJu
IFdURk1vdmUobV9wYXJhbWV0ZXJzKTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgQ2hpbGRQcm9jZXNz
SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzIG1fcGFyYW1ldGVyczsKLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIENoaWxkUHJvY2Vzc1R5cGU+Ci12b2lkIGluaXRpYWxpemVDaGlsZFByb2Nlc3MoQ2hp
bGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKLXsKLSAgICBD
aGlsZFByb2Nlc3NUeXBlOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKFdURk1vdmUocGFyYW1ldGVy
cykpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGlsZFByb2Nlc3NUeXBlLCB0eXBlbmFtZSBD
aGlsZFByb2Nlc3NNYWluVHlwZT4KLWludCBDaGlsZFByb2Nlc3NNYWluKGludCBhcmdjLCBjaGFy
KiogYXJndikKLXsKLSAgICBDaGlsZFByb2Nlc3NNYWluVHlwZSBjaGlsZE1haW47Ci0KLSAgICBp
ZiAoIWNoaWxkTWFpbi5wbGF0Zm9ybUluaXRpYWxpemUoKSkKLSAgICAgICAgcmV0dXJuIEVYSVRf
RkFJTFVSRTsKLQotICAgIEluaXRpYWxpemVXZWJLaXQyKCk7Ci0KLSAgICBpZiAoIWNoaWxkTWFp
bi5wYXJzZUNvbW1hbmRMaW5lKGFyZ2MsIGFyZ3YpKQotICAgICAgICByZXR1cm4gRVhJVF9GQUlM
VVJFOwotCi0gICAgaW5pdGlhbGl6ZUNoaWxkUHJvY2VzczxDaGlsZFByb2Nlc3NUeXBlPihjaGls
ZE1haW4udGFrZUluaXRpYWxpemF0aW9uUGFyYW1ldGVycygpKTsKLSAgICBSdW5Mb29wOjpydW4o
KTsKLSAgICBjaGlsZE1haW4ucGxhdGZvcm1GaW5hbGl6ZSgpOwotCi0gICAgcmV0dXJuIEVYSVRf
U1VDQ0VTUzsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC91bml4L0NoaWxkUHJvY2Vzc01haW4uaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9BdXhp
bGlhcnlQcm9jZXNzTWFpbldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFy
ZWQvd2luL0F1eGlsaWFyeVByb2Nlc3NNYWluV2luLmNwcAkocmV2aXNpb24gMjQwNTg5KQkoZnJv
bSBTb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vQ2hpbGRQcm9jZXNzTWFpbldpbi5jcHA6MjQwNTg5
KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvd2luL0F1eGlsaWFyeVByb2Nlc3NNYWluV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDaGlsZFByb2Nlc3NNYWluLmgiCisKKyNpbmNsdWRl
IDxjc3RyaW5nPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworYm9vbCBDaGlsZFByb2Nlc3NNYWluQmFzZTo6cGFyc2VDb21tYW5kTGluZShp
bnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdjOyBp
KyspIHsKKyAgICAgICAgaWYgKCFzdHJjbXAoYXJndltpXSwgIi1jbGllbnRJZGVudGlmaWVyIikg
JiYgaSArIDEgPCBhcmdjKSB7CisgICAgICAgICAgICBTdHJpbmcgc3RyKGFyZ3ZbKytpXSk7Cisg
ICAgICAgICAgICBtX3BhcmFtZXRlcnMuY29ubmVjdGlvbklkZW50aWZpZXIgPSByZWludGVycHJl
dF9jYXN0PEhBTkRMRT4oc3RyLnRvVUludDY0KCkpOworICAgICAgICB9IGVsc2UgaWYgKCFzdHJj
bXAoYXJndltpXSwgIi1wcm9jZXNzSWRlbnRpZmllciIpICYmIGkgKyAxIDwgYXJnYykgeworICAg
ICAgICAgICAgU3RyaW5nIHN0cihhcmd2WysraV0pOworICAgICAgICAgICAgbV9wYXJhbWV0ZXJz
LnByb2Nlc3NJZGVudGlmaWVyID0gbWFrZU9iamVjdElkZW50aWZpZXI8V2ViQ29yZTo6UHJvY2Vz
c0lkZW50aWZpZXJUeXBlPihzdHIudG9VSW50NjQoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dl
YktpdC9TaGFyZWQvd2luL0F1eGlsaWFyeVByb2Nlc3NNYWluV2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vQXV4aWxpYXJ5UHJvY2Vzc01haW5XaW4uY3BwCShy
ZXZpc2lvbiAyNDA1ODkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vQXV4aWxpYXJ5UHJv
Y2Vzc01haW5XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxNCArMjQsMTQgQEAKICAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2hpbGRQcm9jZXNzTWFpbi5oIgorI2lu
Y2x1ZGUgIkF1eGlsaWFyeVByb2Nlc3NNYWluLmgiCiAKICNpbmNsdWRlIDxjc3RyaW5nPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotYm9v
bCBDaGlsZFByb2Nlc3NNYWluQmFzZTo6cGFyc2VDb21tYW5kTGluZShpbnQgYXJnYywgY2hhcioq
IGFyZ3YpCitib29sIEF1eGlsaWFyeVByb2Nlc3NNYWluQmFzZTo6cGFyc2VDb21tYW5kTGluZShp
bnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdjOyBp
KyspIHsKICAgICAgICAgaWYgKCFzdHJjbXAoYXJndltpXSwgIi1jbGllbnRJZGVudGlmaWVyIikg
JiYgaSArIDEgPCBhcmdjKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vQ2hpbGRQ
cm9jZXNzTWFpbldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvd2lu
L0NoaWxkUHJvY2Vzc01haW5XaW4uY3BwCShyZXZpc2lvbiAyNDA1ODkpCisrKyBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC93aW4vQ2hpbGRQcm9jZXNzTWFpbldpbi5jcHAJKG5vbmV4aXN0ZW50KQpAQCAt
MSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJDaGlsZFByb2Nlc3NNYWluLmgiCi0KLSNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotYm9vbCBDaGls
ZFByb2Nlc3NNYWluQmFzZTo6cGFyc2VDb21tYW5kTGluZShpbnQgYXJnYywgY2hhcioqIGFyZ3Yp
Ci17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKLSAgICAgICAgaWYgKCFz
dHJjbXAoYXJndltpXSwgIi1jbGllbnRJZGVudGlmaWVyIikgJiYgaSArIDEgPCBhcmdjKSB7Ci0g
ICAgICAgICAgICBTdHJpbmcgc3RyKGFyZ3ZbKytpXSk7Ci0gICAgICAgICAgICBtX3BhcmFtZXRl
cnMuY29ubmVjdGlvbklkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PEhBTkRMRT4oc3RyLnRv
VUludDY0KCkpOwotICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi1wcm9jZXNz
SWRlbnRpZmllciIpICYmIGkgKyAxIDwgYXJnYykgewotICAgICAgICAgICAgU3RyaW5nIHN0cihh
cmd2WysraV0pOwotICAgICAgICAgICAgbV9wYXJhbWV0ZXJzLnByb2Nlc3NJZGVudGlmaWVyID0g
bWFrZU9iamVjdElkZW50aWZpZXI8V2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXJUeXBlPihzdHIu
dG9VSW50NjQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxp
YXJ5UHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyNDA1ODkpCShmcm9tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NoaWxkUHJvY2Vzc1Byb3h5LmNwcDoyNDA1ODkpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQ2hpbGRQcm9jZXNzUHJveHkuaCIKKworI2luY2x1ZGUgIkNoaWxkUHJv
Y2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK0NoaWxkUHJvY2Vzc1Byb3h5OjpDaGlsZFByb2Nlc3NQcm94eShib29sIGFsd2F5
c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSkKKyAgICA6IG1fYWx3YXlzUnVuc0F0QmFja2dyb3Vu
ZFByaW9yaXR5KGFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSkKK3sKK30KKworQ2hpbGRQ
cm9jZXNzUHJveHk6On5DaGlsZFByb2Nlc3NQcm94eSgpCit7CisgICAgaWYgKG1fY29ubmVjdGlv
bikKKyAgICAgICAgbV9jb25uZWN0aW9uLT5pbnZhbGlkYXRlKCk7CisKKyAgICBpZiAobV9wcm9j
ZXNzTGF1bmNoZXIpIHsKKyAgICAgICAgbV9wcm9jZXNzTGF1bmNoZXItPmludmFsaWRhdGUoKTsK
KyAgICAgICAgbV9wcm9jZXNzTGF1bmNoZXIgPSBudWxscHRyOworICAgIH0KK30KKwordm9pZCBD
aGlsZFByb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5j
aE9wdGlvbnMmIGxhdW5jaE9wdGlvbnMpCit7CisgICAgbGF1bmNoT3B0aW9ucy5wcm9jZXNzSWRl
bnRpZmllciA9IG1fcHJvY2Vzc0lkZW50aWZpZXI7CisKKyAgICBpZiAoY29uc3QgY2hhciogdXNl
ckRpcmVjdG9yeVN1ZmZpeCA9IGdldGVudigiRElSSEVMUEVSX1VTRVJfRElSX1NVRkZJWCIpKQor
ICAgICAgICBsYXVuY2hPcHRpb25zLmV4dHJhSW5pdGlhbGl6YXRpb25EYXRhLmFkZCgidXNlci1k
aXJlY3Rvcnktc3VmZml4Il9zLCB1c2VyRGlyZWN0b3J5U3VmZml4KTsKKworICAgIGlmIChtX2Fs
d2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSkKKyAgICAgICAgbGF1bmNoT3B0aW9ucy5leHRy
YUluaXRpYWxpemF0aW9uRGF0YS5hZGQoImFsd2F5cy1ydW5zLWF0LWJhY2tncm91bmQtcHJpb3Jp
dHkiX3MsICJ0cnVlIik7CisKKyNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUpICYmIChQTEFURk9S
TShHVEspIHx8IFBMQVRGT1JNKFdQRSkpCisgICAgY29uc3QgY2hhciogdmFybmFtZTsKKyAgICBz
d2l0Y2ggKGxhdW5jaE9wdGlvbnMucHJvY2Vzc1R5cGUpIHsKKyAgICBjYXNlIFByb2Nlc3NMYXVu
Y2hlcjo6UHJvY2Vzc1R5cGU6OldlYjoKKyAgICAgICAgdmFybmFtZSA9ICJXRUJfUFJPQ0VTU19D
TURfUFJFRklYIjsKKyAgICAgICAgYnJlYWs7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCisgICAgY2FzZSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpQbHVnaW42NDoKKyAg
ICBjYXNlIFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6OlBsdWdpbjMyOgorICAgICAgICB2
YXJuYW1lID0gIlBMVUdJTl9QUk9DRVNTX0NNRF9QUkVGSVgiOworICAgICAgICBicmVhazsKKyNl
bmRpZgorICAgIGNhc2UgUHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlwZTo6TmV0d29yazoKKyAg
ICAgICAgdmFybmFtZSA9ICJORVRXT1JLX1BST0NFU1NfQ01EX1BSRUZJWCI7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjb25zdCBjaGFyKiBwcm9jZXNzQ21kUHJlZml4ID0gZ2V0ZW52KHZh
cm5hbWUpOworICAgIGlmIChwcm9jZXNzQ21kUHJlZml4ICYmICpwcm9jZXNzQ21kUHJlZml4KQor
ICAgICAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NDbWRQcmVmaXggPSBTdHJpbmc6OmZyb21VVEY4
KHByb2Nlc3NDbWRQcmVmaXgpOworI2VuZGlmIC8vIEVOQUJMRShERVZFTE9QRVJfTU9ERSkgJiYg
KFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKSkKKworICAgIHBsYXRmb3JtR2V0TGF1bmNo
T3B0aW9ucyhsYXVuY2hPcHRpb25zKTsKK30KKwordm9pZCBDaGlsZFByb2Nlc3NQcm94eTo6Y29u
bmVjdCgpCit7CisgICAgQVNTRVJUKCFtX3Byb2Nlc3NMYXVuY2hlcik7CisgICAgUHJvY2Vzc0xh
dW5jaGVyOjpMYXVuY2hPcHRpb25zIGxhdW5jaE9wdGlvbnM7CisgICAgZ2V0TGF1bmNoT3B0aW9u
cyhsYXVuY2hPcHRpb25zKTsKKyAgICBtX3Byb2Nlc3NMYXVuY2hlciA9IFByb2Nlc3NMYXVuY2hl
cjo6Y3JlYXRlKHRoaXMsIGxhdW5jaE9wdGlvbnMpOworfQorCit2b2lkIENoaWxkUHJvY2Vzc1By
b3h5Ojp0ZXJtaW5hdGUoKQoreworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGlmIChtX2Nvbm5l
Y3Rpb24gJiYgbV9jb25uZWN0aW9uLT5raWxsKCkpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgor
CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWFsbHkgbWVyZ2UgcHJvY2VzcyBsYXVuY2hpbmcg
aW50byBJUEMgY29ubmVjdGlvbiBjcmVhdGlvbiBhbmQgZ2V0IHJpZCBvZiB0aGUgcHJvY2VzcyBs
YXVuY2hlci4KKyAgICBpZiAobV9wcm9jZXNzTGF1bmNoZXIpCisgICAgICAgIG1fcHJvY2Vzc0xh
dW5jaGVyLT50ZXJtaW5hdGVQcm9jZXNzKCk7Cit9CisKK0NoaWxkUHJvY2Vzc1Byb3h5OjpTdGF0
ZSBDaGlsZFByb2Nlc3NQcm94eTo6c3RhdGUoKSBjb25zdAoreworICAgIGlmIChtX3Byb2Nlc3NM
YXVuY2hlciAmJiBtX3Byb2Nlc3NMYXVuY2hlci0+aXNMYXVuY2hpbmcoKSkKKyAgICAgICAgcmV0
dXJuIENoaWxkUHJvY2Vzc1Byb3h5OjpTdGF0ZTo6TGF1bmNoaW5nOworCisgICAgaWYgKCFtX2Nv
bm5lY3Rpb24pCisgICAgICAgIHJldHVybiBDaGlsZFByb2Nlc3NQcm94eTo6U3RhdGU6OlRlcm1p
bmF0ZWQ7CisKKyAgICByZXR1cm4gQ2hpbGRQcm9jZXNzUHJveHk6OlN0YXRlOjpSdW5uaW5nOwor
fQorCitib29sIENoaWxkUHJvY2Vzc1Byb3h5OjpzZW5kTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8
SVBDOjpFbmNvZGVyPiBlbmNvZGVyLCBPcHRpb25TZXQ8SVBDOjpTZW5kT3B0aW9uPiBzZW5kT3B0
aW9ucykKK3sKKyAgICBzd2l0Y2ggKHN0YXRlKCkpIHsKKyAgICBjYXNlIFN0YXRlOjpMYXVuY2hp
bmc6CisgICAgICAgIC8vIElmIHdlJ3JlIHdhaXRpbmcgZm9yIHRoZSBjaGlsZCBwcm9jZXNzIHRv
IGxhdW5jaCwgd2UgbmVlZCB0byBzdGFzaCBhd2F5IHRoZSBtZXNzYWdlcyBzbyB3ZSBjYW4gc2Vu
ZCB0aGVtIG9uY2Ugd2UgaGF2ZSBhIGNvbm5lY3Rpb24uCisgICAgICAgIG1fcGVuZGluZ01lc3Nh
Z2VzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihXVEZNb3ZlKGVuY29kZXIpLCBzZW5kT3B0aW9ucykp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgU3RhdGU6OlJ1bm5pbmc6CisgICAg
ICAgIHJldHVybiBjb25uZWN0aW9uKCktPnNlbmRNZXNzYWdlKFdURk1vdmUoZW5jb2RlciksIHNl
bmRPcHRpb25zKTsKKworICAgIGNhc2UgU3RhdGU6OlRlcm1pbmF0ZWQ6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ2hpbGRQcm9j
ZXNzUHJveHk6OmFkZE1lc3NhZ2VSZWNlaXZlcihJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdl
UmVjZWl2ZXJOYW1lLCBJUEM6Ok1lc3NhZ2VSZWNlaXZlciYgbWVzc2FnZVJlY2VpdmVyKQorewor
ICAgIG1fbWVzc2FnZVJlY2VpdmVyTWFwLmFkZE1lc3NhZ2VSZWNlaXZlcihtZXNzYWdlUmVjZWl2
ZXJOYW1lLCBtZXNzYWdlUmVjZWl2ZXIpOworfQorCit2b2lkIENoaWxkUHJvY2Vzc1Byb3h5Ojph
ZGRNZXNzYWdlUmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFt
ZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgSVBDOjpNZXNzYWdlUmVjZWl2ZXImIG1lc3NhZ2VS
ZWNlaXZlcikKK3sKKyAgICBtX21lc3NhZ2VSZWNlaXZlck1hcC5hZGRNZXNzYWdlUmVjZWl2ZXIo
bWVzc2FnZVJlY2VpdmVyTmFtZSwgZGVzdGluYXRpb25JRCwgbWVzc2FnZVJlY2VpdmVyKTsKK30K
Kwordm9pZCBDaGlsZFByb2Nlc3NQcm94eTo6cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKElQQzo6U3Ry
aW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQp
Cit7CisgICAgbV9tZXNzYWdlUmVjZWl2ZXJNYXAucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKG1lc3Nh
Z2VSZWNlaXZlck5hbWUsIGRlc3RpbmF0aW9uSUQpOworfQorCit2b2lkIENoaWxkUHJvY2Vzc1By
b3h5OjpyZW1vdmVNZXNzYWdlUmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJl
Y2VpdmVyTmFtZSkKK3sKKyAgICBtX21lc3NhZ2VSZWNlaXZlck1hcC5yZW1vdmVNZXNzYWdlUmVj
ZWl2ZXIobWVzc2FnZVJlY2VpdmVyTmFtZSk7Cit9CisKK2Jvb2wgQ2hpbGRQcm9jZXNzUHJveHk6
OmRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2Rl
ciYgZGVjb2RlcikKK3sKKyAgICByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXAuZGlzcGF0Y2hN
ZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOworfQorCitib29sIENoaWxkUHJvY2Vzc1Byb3h5
OjpkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpE
ZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNv
ZGVyKQoreworICAgIHJldHVybiBtX21lc3NhZ2VSZWNlaXZlck1hcC5kaXNwYXRjaFN5bmNNZXNz
YWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Cit9CisKK3ZvaWQgQ2hpbGRQ
cm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqLCBJUEM6OkNv
bm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIpCit7CisgICAgQVNTRVJU
KCFtX2Nvbm5lY3Rpb24pOworCisgICAgaWYgKCFJUEM6OkNvbm5lY3Rpb246OmlkZW50aWZpZXJJ
c1ZhbGlkKGNvbm5lY3Rpb25JZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9j
b25uZWN0aW9uID0gSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVTZXJ2ZXJDb25uZWN0aW9uKGNvbm5l
Y3Rpb25JZGVudGlmaWVyLCAqdGhpcyk7CisKKyAgICBjb25uZWN0aW9uV2lsbE9wZW4oKm1fY29u
bmVjdGlvbik7CisgICAgbV9jb25uZWN0aW9uLT5vcGVuKCk7CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fcGVuZGluZ01lc3NhZ2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+IG1lc3NhZ2UgPSBXVEZNb3ZlKG1fcGVuZGluZ01lc3Nh
Z2VzW2ldLmZpcnN0KTsKKyAgICAgICAgT3B0aW9uU2V0PElQQzo6U2VuZE9wdGlvbj4gc2VuZE9w
dGlvbnMgPSBtX3BlbmRpbmdNZXNzYWdlc1tpXS5zZWNvbmQ7CisgICAgICAgIG1fY29ubmVjdGlv
bi0+c2VuZE1lc3NhZ2UoV1RGTW92ZShtZXNzYWdlKSwgc2VuZE9wdGlvbnMpOworICAgIH0KKwor
ICAgIG1fcGVuZGluZ01lc3NhZ2VzLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ2hpbGRQcm9jZXNzUHJv
eHk6OnNodXREb3duUHJvY2VzcygpCit7CisgICAgc3dpdGNoIChzdGF0ZSgpKSB7CisgICAgY2Fz
ZSBTdGF0ZTo6TGF1bmNoaW5nOgorICAgICAgICBtX3Byb2Nlc3NMYXVuY2hlci0+aW52YWxpZGF0
ZSgpOworICAgICAgICBtX3Byb2Nlc3NMYXVuY2hlciA9IG51bGxwdHI7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgU3RhdGU6OlJ1bm5pbmc6CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAg
ICAgICAgLy8gT24gaU9TIGRlcGxveSBhIHdhdGNoZG9nIGluIHRoZSBVSSBwcm9jZXNzLCBzaW5j
ZSB0aGUgY2hpbGQgcHJvY2VzcyBtYXkgYmUgc3VzcGVuZGVkLgorICAgICAgICAvLyBJZiAzMHMg
aXMgaW5zdWZmaWNpZW50IGZvciBhbnkgb3V0c3RhbmRpbmcgYWN0aXZpdHkgdG8gY29tcGxldGUg
Y2xlYW5seSwgdGhlbiBpdCB3aWxsIGJlIGtpbGxlZC4KKyAgICAgICAgQVNTRVJUKG1fY29ubmVj
dGlvbik7CisgICAgICAgIG1fY29ubmVjdGlvbi0+dGVybWluYXRlU29vbigzMF9zKTsKKyNlbmRp
ZgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0YXRlOjpUZXJtaW5hdGVkOgorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2Nvbm5lY3Rpb24pCisgICAgICAgIHJldHVybjsK
KworICAgIHByb2Nlc3NXaWxsU2h1dERvd24oKm1fY29ubmVjdGlvbik7CisKKyAgICBpZiAoY2Fu
U2VuZE1lc3NhZ2UoKSkKKyAgICAgICAgc2VuZChNZXNzYWdlczo6Q2hpbGRQcm9jZXNzOjpTaHV0
RG93bigpLCAwKTsKKworICAgIG1fY29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOworICAgIG1fY29u
bmVjdGlvbiA9IG51bGxwdHI7Cit9CisKK3ZvaWQgQ2hpbGRQcm9jZXNzUHJveHk6OnNldFByb2Nl
c3NTdXBwcmVzc2lvbkVuYWJsZWQoYm9vbCBwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKQorewor
I2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGlmIChzdGF0ZSgpICE9IFN0YXRlOjpSdW5uaW5nKQor
ICAgICAgICByZXR1cm47CisKKyAgICBjb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OkNoaWxk
UHJvY2Vzczo6U2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChwcm9jZXNzU3VwcHJlc3Npb25F
bmFibGVkKSwgMCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwcm9jZXNzU3VwcHJlc3Npb25F
bmFibGVkKTsKKyNlbmRpZgorfQorCit2b2lkIENoaWxkUHJvY2Vzc1Byb3h5Ojpjb25uZWN0aW9u
V2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJikKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQ
cm9jZXNzUHJveHkuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCAr
MSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94eS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmNwcAkocmV2
aXNpb24gMjQwNTg5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vz
c1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTkgKzI0LDE5IEBACiAgKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNoaWxkUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVk
ZSAiQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgiCiAKLSNpbmNsdWRlICJDaGlsZFByb2Nlc3NNZXNz
YWdlcy5oIgorI2luY2x1ZGUgIkF1eGlsaWFyeVByb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUg
PHd0Zi9SdW5Mb29wLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1DaGlsZFByb2Nlc3NQcm94
eTo6Q2hpbGRQcm9jZXNzUHJveHkoYm9vbCBhbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkp
CitBdXhpbGlhcnlQcm9jZXNzUHJveHk6OkF1eGlsaWFyeVByb2Nlc3NQcm94eShib29sIGFsd2F5
c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSkKICAgICA6IG1fYWx3YXlzUnVuc0F0QmFja2dyb3Vu
ZFByaW9yaXR5KGFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSkKIHsKIH0KIAotQ2hpbGRQ
cm9jZXNzUHJveHk6On5DaGlsZFByb2Nlc3NQcm94eSgpCitBdXhpbGlhcnlQcm9jZXNzUHJveHk6
On5BdXhpbGlhcnlQcm9jZXNzUHJveHkoKQogewogICAgIGlmIChtX2Nvbm5lY3Rpb24pCiAgICAg
ICAgIG1fY29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOwpAQCAtNDcsNyArNDcsNyBAQCBDaGlsZFBy
b2Nlc3NQcm94eTo6fkNoaWxkUHJvY2Vzc1Byb3h5KCkKICAgICB9CiB9CiAKLXZvaWQgQ2hpbGRQ
cm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRp
b25zJiBsYXVuY2hPcHRpb25zKQordm9pZCBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OmdldExhdW5j
aE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuY2hPcHRpb25zKQog
ewogICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc0lkZW50aWZpZXIgPSBtX3Byb2Nlc3NJZGVudGlm
aWVyOwogCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgQ2hpbGRQcm9jZXNzUHJveHk6OmdldExhdW5j
aE9wdGlvbnMKICAgICBwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucyk7CiB9
CiAKLXZvaWQgQ2hpbGRQcm9jZXNzUHJveHk6OmNvbm5lY3QoKQordm9pZCBBdXhpbGlhcnlQcm9j
ZXNzUHJveHk6OmNvbm5lY3QoKQogewogICAgIEFTU0VSVCghbV9wcm9jZXNzTGF1bmNoZXIpOwog
ICAgIFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyBsYXVuY2hPcHRpb25zOwpAQCAtODks
NyArODksNyBAQCB2b2lkIENoaWxkUHJvY2Vzc1Byb3h5Ojpjb25uZWN0KCkKICAgICBtX3Byb2Nl
c3NMYXVuY2hlciA9IFByb2Nlc3NMYXVuY2hlcjo6Y3JlYXRlKHRoaXMsIGxhdW5jaE9wdGlvbnMp
OwogfQogCi12b2lkIENoaWxkUHJvY2Vzc1Byb3h5Ojp0ZXJtaW5hdGUoKQordm9pZCBBdXhpbGlh
cnlQcm9jZXNzUHJveHk6OnRlcm1pbmF0ZSgpCiB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAg
aWYgKG1fY29ubmVjdGlvbiAmJiBtX2Nvbm5lY3Rpb24tPmtpbGwoKSkKQEAgLTEwMSwxOCArMTAx
LDE4IEBAIHZvaWQgQ2hpbGRQcm9jZXNzUHJveHk6OnRlcm1pbmF0ZSgpCiAgICAgICAgIG1fcHJv
Y2Vzc0xhdW5jaGVyLT50ZXJtaW5hdGVQcm9jZXNzKCk7CiB9CiAKLUNoaWxkUHJvY2Vzc1Byb3h5
OjpTdGF0ZSBDaGlsZFByb2Nlc3NQcm94eTo6c3RhdGUoKSBjb25zdAorQXV4aWxpYXJ5UHJvY2Vz
c1Byb3h5OjpTdGF0ZSBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OnN0YXRlKCkgY29uc3QKIHsKICAg
ICBpZiAobV9wcm9jZXNzTGF1bmNoZXIgJiYgbV9wcm9jZXNzTGF1bmNoZXItPmlzTGF1bmNoaW5n
KCkpCi0gICAgICAgIHJldHVybiBDaGlsZFByb2Nlc3NQcm94eTo6U3RhdGU6OkxhdW5jaGluZzsK
KyAgICAgICAgcmV0dXJuIEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6U3RhdGU6OkxhdW5jaGluZzsK
IAogICAgIGlmICghbV9jb25uZWN0aW9uKQotICAgICAgICByZXR1cm4gQ2hpbGRQcm9jZXNzUHJv
eHk6OlN0YXRlOjpUZXJtaW5hdGVkOworICAgICAgICByZXR1cm4gQXV4aWxpYXJ5UHJvY2Vzc1By
b3h5OjpTdGF0ZTo6VGVybWluYXRlZDsKIAotICAgIHJldHVybiBDaGlsZFByb2Nlc3NQcm94eTo6
U3RhdGU6OlJ1bm5pbmc7CisgICAgcmV0dXJuIEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6U3RhdGU6
OlJ1bm5pbmc7CiB9CiAKLWJvb2wgQ2hpbGRQcm9jZXNzUHJveHk6OnNlbmRNZXNzYWdlKHN0ZDo6
dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+IGVuY29kZXIsIE9wdGlvblNldDxJUEM6OlNlbmRPcHRp
b24+IHNlbmRPcHRpb25zKQorYm9vbCBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OnNlbmRNZXNzYWdl
KHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+IGVuY29kZXIsIE9wdGlvblNldDxJUEM6OlNl
bmRPcHRpb24+IHNlbmRPcHRpb25zKQogewogICAgIHN3aXRjaCAoc3RhdGUoKSkgewogICAgIGNh
c2UgU3RhdGU6OkxhdW5jaGluZzoKQEAgLTEzMCwzNyArMTMwLDM3IEBAIGJvb2wgQ2hpbGRQcm9j
ZXNzUHJveHk6OnNlbmRNZXNzYWdlKHN0ZDoKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQg
Q2hpbGRQcm9jZXNzUHJveHk6OmFkZE1lc3NhZ2VSZWNlaXZlcihJUEM6OlN0cmluZ1JlZmVyZW5j
ZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6Ok1lc3NhZ2VSZWNlaXZlciYgbWVzc2FnZVJlY2Vp
dmVyKQordm9pZCBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OmFkZE1lc3NhZ2VSZWNlaXZlcihJUEM6
OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6Ok1lc3NhZ2VSZWNlaXZl
ciYgbWVzc2FnZVJlY2VpdmVyKQogewogICAgIG1fbWVzc2FnZVJlY2VpdmVyTWFwLmFkZE1lc3Nh
Z2VSZWNlaXZlcihtZXNzYWdlUmVjZWl2ZXJOYW1lLCBtZXNzYWdlUmVjZWl2ZXIpOwogfQogCi12
b2lkIENoaWxkUHJvY2Vzc1Byb3h5OjphZGRNZXNzYWdlUmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZl
cmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXImIG1lc3NhZ2VSZWNlaXZlcikKK3ZvaWQgQXV4aWxpYXJ5UHJvY2Vzc1By
b3h5OjphZGRNZXNzYWdlUmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2Vp
dmVyTmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgSVBDOjpNZXNzYWdlUmVjZWl2ZXImIG1l
c3NhZ2VSZWNlaXZlcikKIHsKICAgICBtX21lc3NhZ2VSZWNlaXZlck1hcC5hZGRNZXNzYWdlUmVj
ZWl2ZXIobWVzc2FnZVJlY2VpdmVyTmFtZSwgZGVzdGluYXRpb25JRCwgbWVzc2FnZVJlY2VpdmVy
KTsKIH0KIAotdm9pZCBDaGlsZFByb2Nlc3NQcm94eTo6cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKElQ
Qzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIHVpbnQ2NF90IGRlc3RpbmF0
aW9uSUQpCit2b2lkIEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6cmVtb3ZlTWVzc2FnZVJlY2VpdmVy
KElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIHVpbnQ2NF90IGRlc3Rp
bmF0aW9uSUQpCiB7CiAgICAgbV9tZXNzYWdlUmVjZWl2ZXJNYXAucmVtb3ZlTWVzc2FnZVJlY2Vp
dmVyKG1lc3NhZ2VSZWNlaXZlck5hbWUsIGRlc3RpbmF0aW9uSUQpOwogfQogCi12b2lkIENoaWxk
UHJvY2Vzc1Byb3h5OjpyZW1vdmVNZXNzYWdlUmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZlcmVuY2Ug
bWVzc2FnZVJlY2VpdmVyTmFtZSkKK3ZvaWQgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpyZW1vdmVN
ZXNzYWdlUmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSkK
IHsKICAgICBtX21lc3NhZ2VSZWNlaXZlck1hcC5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIobWVzc2Fn
ZVJlY2VpdmVyTmFtZSk7CiB9CiAKLWJvb2wgQ2hpbGRQcm9jZXNzUHJveHk6OmRpc3BhdGNoTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikK
K2Jvb2wgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCiB7CiAgICAgcmV0dXJuIG1f
bWVzc2FnZVJlY2VpdmVyTWFwLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsK
IH0KIAotYm9vbCBDaGlsZFByb2Nlc3NQcm94eTo6ZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVf
cHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKK2Jvb2wgQXV4aWxpYXJ5UHJvY2Vzc1By
b3h5OjpkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBD
OjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlF
bmNvZGVyKQogewogICAgIHJldHVybiBtX21lc3NhZ2VSZWNlaXZlck1hcC5kaXNwYXRjaFN5bmNN
ZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7CiB9CiAKLXZvaWQgQ2hp
bGRQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqLCBJUEM6
OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIpCit2b2lkIEF1eGls
aWFyeVByb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKFByb2Nlc3NMYXVuY2hlciosIElQ
Qzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcikKIHsKICAgICBB
U1NFUlQoIW1fY29ubmVjdGlvbik7CiAKQEAgLTE4MSw3ICsxODEsNyBAQCB2b2lkIENoaWxkUHJv
Y2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpCiAgICAgbV9wZW5kaW5nTWVzc2FnZXMuY2xlYXIo
KTsKIH0KIAotdm9pZCBDaGlsZFByb2Nlc3NQcm94eTo6c2h1dERvd25Qcm9jZXNzKCkKK3ZvaWQg
QXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpzaHV0RG93blByb2Nlc3MoKQogewogICAgIHN3aXRjaCAo
c3RhdGUoKSkgewogICAgIGNhc2UgU3RhdGU6OkxhdW5jaGluZzoKQEAgLTIwNiwyNSArMjA2LDI1
IEBAIHZvaWQgQ2hpbGRQcm9jZXNzUHJveHk6OnNodXREb3duUHJvY2VzcygKICAgICBwcm9jZXNz
V2lsbFNodXREb3duKCptX2Nvbm5lY3Rpb24pOwogCiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkp
Ci0gICAgICAgIHNlbmQoTWVzc2FnZXM6OkNoaWxkUHJvY2Vzczo6U2h1dERvd24oKSwgMCk7Cisg
ICAgICAgIHNlbmQoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OlNodXREb3duKCksIDApOwog
CiAgICAgbV9jb25uZWN0aW9uLT5pbnZhbGlkYXRlKCk7CiAgICAgbV9jb25uZWN0aW9uID0gbnVs
bHB0cjsKIH0KIAotdm9pZCBDaGlsZFByb2Nlc3NQcm94eTo6c2V0UHJvY2Vzc1N1cHByZXNzaW9u
RW5hYmxlZChib29sIHByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQpCit2b2lkIEF1eGlsaWFyeVBy
b2Nlc3NQcm94eTo6c2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChib29sIHByb2Nlc3NTdXBw
cmVzc2lvbkVuYWJsZWQpCiB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgaWYgKHN0YXRlKCkg
IT0gU3RhdGU6OlJ1bm5pbmcpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6Q2hpbGRQcm9jZXNzOjpTZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVk
KHByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQpLCAwKTsKKyAgICBjb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OlNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQo
cHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCksIDApOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
cHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCk7CiAjZW5kaWYKIH0KIAotdm9pZCBDaGlsZFByb2Nl
c3NQcm94eTo6Y29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlvbiYpCit2b2lkIEF1eGls
aWFyeVByb2Nlc3NQcm94eTo6Y29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlvbiYpCiB7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nl
c3NQcm94eS5oCShyZXZpc2lvbiAyNDA1ODkpCShmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NoaWxkUHJvY2Vzc1Byb3h5Lmg6MjQwNTg5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5o
IgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlck1hcC5oIgorI2luY2x1ZGUgIlByb2Nlc3NMYXVu
Y2hlci5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzLmg+CisjaW5jbHVkZSA8d3RmL1By
b2Nlc3NJRC5oPgorI2luY2x1ZGUgPHd0Zi9TeXN0ZW1UcmFjaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBD
aGlsZFByb2Nlc3NQcm94eSA6IFByb2Nlc3NMYXVuY2hlcjo6Q2xpZW50LCBwdWJsaWMgSVBDOjpD
b25uZWN0aW9uOjpDbGllbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENoaWxkUHJvY2Vz
c1Byb3h5KTsKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IENoaWxkUHJvY2Vzc1Byb3h5KGJv
b2wgYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5ID0gZmFsc2UpOworCitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+Q2hpbGRQcm9jZXNzUHJveHkoKTsKKworICAgIHZvaWQgY29ubmVjdCgpOwor
ICAgIHZvaWQgdGVybWluYXRlKCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHNl
bmQoVCYmIG1lc3NhZ2UsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIE9wdGlvblNldDxJUEM6OlNl
bmRPcHRpb24+IHNlbmRPcHRpb25zID0geyB9KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBi
b29sIHNlbmRTeW5jKFQmJiBtZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYmLCB1aW50NjRfdCBk
ZXN0aW5hdGlvbklELCBTZWNvbmRzIHRpbWVvdXQgPSAxX3MsIE9wdGlvblNldDxJUEM6OlNlbmRT
eW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMgPSB7IH0pOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lLi4uIEFyZ3M+IHZvaWQgc2VuZFdpdGhBc3luY1JlcGx5KFQmJiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChBcmdzLi4uKT4mJik7CisKKyAgICBJUEM6OkNvbm5lY3Rpb24qIGNv
bm5lY3Rpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fY29ubmVjdGlvbik7Cisg
ICAgICAgIHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7CisgICAgfQorICAgIAorICAgIGJvb2wg
aGFzQ29ubmVjdGlvbihjb25zdCBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9jb25uZWN0aW9uID09ICZjb25uZWN0aW9uOworICAgIH0K
KworICAgIHZvaWQgYWRkTWVzc2FnZVJlY2VpdmVyKElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3Nh
Z2VSZWNlaXZlck5hbWUsIElQQzo6TWVzc2FnZVJlY2VpdmVyJik7CisgICAgdm9pZCBhZGRNZXNz
YWdlUmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgdWlu
dDY0X3QgZGVzdGluYXRpb25JRCwgSVBDOjpNZXNzYWdlUmVjZWl2ZXImKTsKKyAgICB2b2lkIHJl
bW92ZU1lc3NhZ2VSZWNlaXZlcihJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJO
YW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklEKTsKKyAgICB2b2lkIHJlbW92ZU1lc3NhZ2VSZWNl
aXZlcihJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lKTsKKworICAgIGVu
dW0gY2xhc3MgU3RhdGUgeworICAgICAgICBMYXVuY2hpbmcsCisgICAgICAgIFJ1bm5pbmcsCisg
ICAgICAgIFRlcm1pbmF0ZWQsCisgICAgfTsKKyAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0OworCisg
ICAgUHJvY2Vzc0lEIHByb2Nlc3NJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZXNz
TGF1bmNoZXIgPyBtX3Byb2Nlc3NMYXVuY2hlci0+cHJvY2Vzc0lkZW50aWZpZXIoKSA6IDA7IH0K
KworICAgIGJvb2wgY2FuU2VuZE1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpICE9IFN0
YXRlOjpUZXJtaW5hdGVkO30KKyAgICBib29sIHNlbmRNZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxJ
UEM6OkVuY29kZXI+LCBPcHRpb25TZXQ8SVBDOjpTZW5kT3B0aW9uPik7CisKKyAgICB2b2lkIHNo
dXREb3duUHJvY2VzcygpOworCisgICAgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgY29yZVBy
b2Nlc3NJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZXNzSWRlbnRpZmllcjsgfQor
CisgICAgdm9pZCBzZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKGJvb2wpOworCitwcm90ZWN0
ZWQ6CisgICAgLy8gUHJvY2Vzc0xhdW5jaGVyOjpDbGllbnQKKyAgICB2b2lkIGRpZEZpbmlzaExh
dW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqLCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIpIG92
ZXJyaWRlOworCisgICAgYm9vbCBkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpEZWNvZGVyJik7CisgICAgYm9vbCBkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jik7CisgICAg
CisgICAgdmlydHVhbCB2b2lkIGdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVu
Y2hPcHRpb25zJik7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtR2V0TGF1bmNoT3B0aW9ucyhQ
cm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmKSB7IH07CisKK3ByaXZhdGU6CisgICAgdmly
dHVhbCB2b2lkIGNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcHJvY2Vzc1dpbGxTaHV0RG93bihJUEM6OkNvbm5lY3Rpb24mKSA9IDA7CisKKyAg
ICBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+LCBPcHRpb25T
ZXQ8SVBDOjpTZW5kT3B0aW9uPj4+IG1fcGVuZGluZ01lc3NhZ2VzOworICAgIFJlZlB0cjxQcm9j
ZXNzTGF1bmNoZXI+IG1fcHJvY2Vzc0xhdW5jaGVyOworICAgIFJlZlB0cjxJUEM6OkNvbm5lY3Rp
b24+IG1fY29ubmVjdGlvbjsKKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCBtX21lc3NhZ2VS
ZWNlaXZlck1hcDsKKyAgICBib29sIG1fYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5IHsg
ZmFsc2UgfTsKKyAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBtX3Byb2Nlc3NJZGVudGlm
aWVyIHsgZ2VuZXJhdGVPYmplY3RJZGVudGlmaWVyPFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVy
VHlwZT4oKSB9OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Jvb2wgQ2hpbGRQcm9jZXNz
UHJveHk6OnNlbmQoVCYmIG1lc3NhZ2UsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIE9wdGlvblNl
dDxJUEM6OlNlbmRPcHRpb24+IHNlbmRPcHRpb25zKQoreworICAgIENPTVBJTEVfQVNTRVJUKCFU
Ojppc1N5bmMsIEFzeW5jTWVzc2FnZUV4cGVjdGVkKTsKKworICAgIGF1dG8gZW5jb2RlciA9IHN0
ZDo6bWFrZV91bmlxdWU8SVBDOjpFbmNvZGVyPihUOjpyZWNlaXZlck5hbWUoKSwgVDo6bmFtZSgp
LCBkZXN0aW5hdGlvbklEKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUobWVzc2FnZS5hcmd1bWVudHMo
KSk7CisKKyAgICByZXR1cm4gc2VuZE1lc3NhZ2UoV1RGTW92ZShlbmNvZGVyKSwgc2VuZE9wdGlv
bnMpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBVPiAKK2Jvb2wgQ2hpbGRQcm9jZXNzUHJveHk6
OnNlbmRTeW5jKFUmJiBtZXNzYWdlLCB0eXBlbmFtZSBVOjpSZXBseSYmIHJlcGx5LCB1aW50NjRf
dCBkZXN0aW5hdGlvbklELCBTZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxJUEM6OlNlbmRTeW5j
T3B0aW9uPiBzZW5kU3luY09wdGlvbnMpCit7CisgICAgQ09NUElMRV9BU1NFUlQoVTo6aXNTeW5j
LCBTeW5jTWVzc2FnZUV4cGVjdGVkKTsKKworICAgIGlmICghbV9jb25uZWN0aW9uKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBUcmFjZVNjb3BlIHNjb3BlKFN5bmNNZXNzYWdlU3RhcnQs
IFN5bmNNZXNzYWdlRW5kKTsKKworICAgIHJldHVybiBjb25uZWN0aW9uKCktPnNlbmRTeW5jKHN0
ZDo6Zm9yd2FyZDxVPihtZXNzYWdlKSwgV1RGTW92ZShyZXBseSksIGRlc3RpbmF0aW9uSUQsIHRp
bWVvdXQsIHNlbmRTeW5jT3B0aW9ucyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lLi4uIEFyZ3M+Cit2b2lkIENoaWxkUHJvY2Vzc1Byb3h5OjpzZW5kV2l0aEFzeW5jUmVwbHko
VCYmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoQXJncy4uLik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCit7CisgICAgaWYgKCFtX2Nvbm5lY3Rpb24pIHsKKyAgICAgICAgVDo6Y2FuY2Vs
UmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgY29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoc3RkOjpmb3J3YXJkPFQ+
KG1lc3NhZ2UpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisgICAgCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5
bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94
eS5oCShyZXZpc2lvbiAyNDA1ODkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlh
cnlQcm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTQgKzM2LDE0IEBACiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBDaGlsZFByb2Nlc3NQcm94eSA6IFByb2Nlc3NMYXVu
Y2hlcjo6Q2xpZW50LCBwdWJsaWMgSVBDOjpDb25uZWN0aW9uOjpDbGllbnQgewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENoaWxkUHJvY2Vzc1Byb3h5KTsKK2NsYXNzIEF1eGlsaWFyeVByb2Nl
c3NQcm94eSA6IFByb2Nlc3NMYXVuY2hlcjo6Q2xpZW50LCBwdWJsaWMgSVBDOjpDb25uZWN0aW9u
OjpDbGllbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEF1eGlsaWFyeVByb2Nlc3NQcm94
eSk7CiAKIHByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBDaGlsZFByb2Nlc3NQcm94eShib29sIGFs
d2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSA9IGZhbHNlKTsKKyAgICBleHBsaWNpdCBBdXhp
bGlhcnlQcm9jZXNzUHJveHkoYm9vbCBhbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkgPSBm
YWxzZSk7CiAKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5DaGlsZFByb2Nlc3NQcm94eSgpOworICAg
IHZpcnR1YWwgfkF1eGlsaWFyeVByb2Nlc3NQcm94eSgpOwogCiAgICAgdm9pZCBjb25uZWN0KCk7
CiAgICAgdm9pZCB0ZXJtaW5hdGUoKTsKQEAgLTEwOSw3ICsxMDksNyBAQCBwcml2YXRlOgogfTsK
IAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWJvb2wgQ2hpbGRQcm9jZXNzUHJveHk6OnNlbmQoVCYm
IG1lc3NhZ2UsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIE9wdGlvblNldDxJUEM6OlNlbmRPcHRp
b24+IHNlbmRPcHRpb25zKQorYm9vbCBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OnNlbmQoVCYmIG1l
c3NhZ2UsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIE9wdGlvblNldDxJUEM6OlNlbmRPcHRpb24+
IHNlbmRPcHRpb25zKQogewogICAgIENPTVBJTEVfQVNTRVJUKCFUOjppc1N5bmMsIEFzeW5jTWVz
c2FnZUV4cGVjdGVkKTsKIApAQCAtMTIwLDcgKzEyMCw3IEBAIGJvb2wgQ2hpbGRQcm9jZXNzUHJv
eHk6OnNlbmQoVCYmIG1lc3NhZ2UKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVT4gCi1ib29sIENo
aWxkUHJvY2Vzc1Byb3h5OjpzZW5kU3luYyhVJiYgbWVzc2FnZSwgdHlwZW5hbWUgVTo6UmVwbHkm
JiByZXBseSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgU2Vjb25kcyB0aW1lb3V0LCBPcHRpb25T
ZXQ8SVBDOjpTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zKQorYm9vbCBBdXhpbGlhcnlQ
cm9jZXNzUHJveHk6OnNlbmRTeW5jKFUmJiBtZXNzYWdlLCB0eXBlbmFtZSBVOjpSZXBseSYmIHJl
cGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBTZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxJ
UEM6OlNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMpCiB7CiAgICAgQ09NUElMRV9BU1NF
UlQoVTo6aXNTeW5jLCBTeW5jTWVzc2FnZUV4cGVjdGVkKTsKIApAQCAtMTMzLDcgKzEzMyw3IEBA
IGJvb2wgQ2hpbGRQcm9jZXNzUHJveHk6OnNlbmRTeW5jKFUmJiBtZXMKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4KLXZvaWQgQ2hpbGRQcm9jZXNzUHJveHk6OnNl
bmRXaXRoQXN5bmNSZXBseShUJiYgbWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChBcmdz
Li4uKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5Ojpz
ZW5kV2l0aEFzeW5jUmVwbHkoVCYmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoQXJn
cy4uLik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFtX2Nvbm5lY3Rpb24pIHsK
ICAgICAgICAgVDo6Y2FuY2VsUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwpJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ2hpbGRQcm9jZXNzUHJveHkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NoaWxkUHJvY2Vzc1Byb3h5LmNwcAkocmV2
aXNpb24gMjQwNTg5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ2hpbGRQcm9jZXNzUHJv
eHkuY3BwCShub25leGlzdGVudCkKQEAgLTEsMjMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDaGlsZFByb2Nlc3NQcm94eS5oIgotCi0j
aW5jbHVkZSAiQ2hpbGRQcm9jZXNzTWVzc2FnZXMuaCIKLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotQ2hpbGRQcm9jZXNzUHJveHk6OkNoaWxkUHJvY2Vz
c1Byb3h5KGJvb2wgYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KQotICAgIDogbV9hbHdh
eXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5
KQotewotfQotCi1DaGlsZFByb2Nlc3NQcm94eTo6fkNoaWxkUHJvY2Vzc1Byb3h5KCkKLXsKLSAg
ICBpZiAobV9jb25uZWN0aW9uKQotICAgICAgICBtX2Nvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsK
LQotICAgIGlmIChtX3Byb2Nlc3NMYXVuY2hlcikgewotICAgICAgICBtX3Byb2Nlc3NMYXVuY2hl
ci0+aW52YWxpZGF0ZSgpOwotICAgICAgICBtX3Byb2Nlc3NMYXVuY2hlciA9IG51bGxwdHI7Ci0g
ICAgfQotfQotCi12b2lkIENoaWxkUHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKFByb2Nl
c3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYgbGF1bmNoT3B0aW9ucykKLXsKLSAgICBsYXVuY2hP
cHRpb25zLnByb2Nlc3NJZGVudGlmaWVyID0gbV9wcm9jZXNzSWRlbnRpZmllcjsKLQotICAgIGlm
IChjb25zdCBjaGFyKiB1c2VyRGlyZWN0b3J5U3VmZml4ID0gZ2V0ZW52KCJESVJIRUxQRVJfVVNF
Ul9ESVJfU1VGRklYIikpCi0gICAgICAgIGxhdW5jaE9wdGlvbnMuZXh0cmFJbml0aWFsaXphdGlv
bkRhdGEuYWRkKCJ1c2VyLWRpcmVjdG9yeS1zdWZmaXgiX3MsIHVzZXJEaXJlY3RvcnlTdWZmaXgp
OwotCi0gICAgaWYgKG1fYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KQotICAgICAgICBs
YXVuY2hPcHRpb25zLmV4dHJhSW5pdGlhbGl6YXRpb25EYXRhLmFkZCgiYWx3YXlzLXJ1bnMtYXQt
YmFja2dyb3VuZC1wcmlvcml0eSJfcywgInRydWUiKTsKLQotI2lmIEVOQUJMRShERVZFTE9QRVJf
TU9ERSkgJiYgKFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKSkKLSAgICBjb25zdCBjaGFy
KiB2YXJuYW1lOwotICAgIHN3aXRjaCAobGF1bmNoT3B0aW9ucy5wcm9jZXNzVHlwZSkgewotICAg
IGNhc2UgUHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlwZTo6V2ViOgotICAgICAgICB2YXJuYW1l
ID0gIldFQl9QUk9DRVNTX0NNRF9QUkVGSVgiOwotICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBjYXNlIFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5
cGU6OlBsdWdpbjY0OgotICAgIGNhc2UgUHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlwZTo6UGx1
Z2luMzI6Ci0gICAgICAgIHZhcm5hbWUgPSAiUExVR0lOX1BST0NFU1NfQ01EX1BSRUZJWCI7Ci0g
ICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NU
eXBlOjpOZXR3b3JrOgotICAgICAgICB2YXJuYW1lID0gIk5FVFdPUktfUFJPQ0VTU19DTURfUFJF
RklYIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNvbnN0IGNoYXIqIHByb2Nlc3NDbWRQ
cmVmaXggPSBnZXRlbnYodmFybmFtZSk7Ci0gICAgaWYgKHByb2Nlc3NDbWRQcmVmaXggJiYgKnBy
b2Nlc3NDbWRQcmVmaXgpCi0gICAgICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc0NtZFByZWZpeCA9
IFN0cmluZzo6ZnJvbVVURjgocHJvY2Vzc0NtZFByZWZpeCk7Ci0jZW5kaWYgLy8gRU5BQkxFKERF
VkVMT1BFUl9NT0RFKSAmJiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpKQotCi0gICAg
cGxhdGZvcm1HZXRMYXVuY2hPcHRpb25zKGxhdW5jaE9wdGlvbnMpOwotfQotCi12b2lkIENoaWxk
UHJvY2Vzc1Byb3h5Ojpjb25uZWN0KCkKLXsKLSAgICBBU1NFUlQoIW1fcHJvY2Vzc0xhdW5jaGVy
KTsKLSAgICBQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMgbGF1bmNoT3B0aW9uczsKLSAg
ICBnZXRMYXVuY2hPcHRpb25zKGxhdW5jaE9wdGlvbnMpOwotICAgIG1fcHJvY2Vzc0xhdW5jaGVy
ID0gUHJvY2Vzc0xhdW5jaGVyOjpjcmVhdGUodGhpcywgbGF1bmNoT3B0aW9ucyk7Ci19Ci0KLXZv
aWQgQ2hpbGRQcm9jZXNzUHJveHk6OnRlcm1pbmF0ZSgpCi17Ci0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci0gICAgaWYgKG1fY29ubmVjdGlvbiAmJiBtX2Nvbm5lY3Rpb24tPmtpbGwoKSkKLSAgICAgICAg
cmV0dXJuOwotI2VuZGlmCi0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlYWxseSBtZXJnZSBw
cm9jZXNzIGxhdW5jaGluZyBpbnRvIElQQyBjb25uZWN0aW9uIGNyZWF0aW9uIGFuZCBnZXQgcmlk
IG9mIHRoZSBwcm9jZXNzIGxhdW5jaGVyLgotICAgIGlmIChtX3Byb2Nlc3NMYXVuY2hlcikKLSAg
ICAgICAgbV9wcm9jZXNzTGF1bmNoZXItPnRlcm1pbmF0ZVByb2Nlc3MoKTsKLX0KLQotQ2hpbGRQ
cm9jZXNzUHJveHk6OlN0YXRlIENoaWxkUHJvY2Vzc1Byb3h5OjpzdGF0ZSgpIGNvbnN0Ci17Ci0g
ICAgaWYgKG1fcHJvY2Vzc0xhdW5jaGVyICYmIG1fcHJvY2Vzc0xhdW5jaGVyLT5pc0xhdW5jaGlu
ZygpKQotICAgICAgICByZXR1cm4gQ2hpbGRQcm9jZXNzUHJveHk6OlN0YXRlOjpMYXVuY2hpbmc7
Ci0KLSAgICBpZiAoIW1fY29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuIENoaWxkUHJvY2Vzc1By
b3h5OjpTdGF0ZTo6VGVybWluYXRlZDsKLQotICAgIHJldHVybiBDaGlsZFByb2Nlc3NQcm94eTo6
U3RhdGU6OlJ1bm5pbmc7Ci19Ci0KLWJvb2wgQ2hpbGRQcm9jZXNzUHJveHk6OnNlbmRNZXNzYWdl
KHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+IGVuY29kZXIsIE9wdGlvblNldDxJUEM6OlNl
bmRPcHRpb24+IHNlbmRPcHRpb25zKQotewotICAgIHN3aXRjaCAoc3RhdGUoKSkgewotICAgIGNh
c2UgU3RhdGU6OkxhdW5jaGluZzoKLSAgICAgICAgLy8gSWYgd2UncmUgd2FpdGluZyBmb3IgdGhl
IGNoaWxkIHByb2Nlc3MgdG8gbGF1bmNoLCB3ZSBuZWVkIHRvIHN0YXNoIGF3YXkgdGhlIG1lc3Nh
Z2VzIHNvIHdlIGNhbiBzZW5kIHRoZW0gb25jZSB3ZSBoYXZlIGEgY29ubmVjdGlvbi4KLSAgICAg
ICAgbV9wZW5kaW5nTWVzc2FnZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKFdURk1vdmUoZW5jb2Rl
ciksIHNlbmRPcHRpb25zKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBTdGF0
ZTo6UnVubmluZzoKLSAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb24oKS0+c2VuZE1lc3NhZ2UoV1RG
TW92ZShlbmNvZGVyKSwgc2VuZE9wdGlvbnMpOwotCi0gICAgY2FzZSBTdGF0ZTo6VGVybWluYXRl
ZDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBDaGlsZFByb2Nlc3NQcm94eTo6YWRkTWVzc2FnZVJlY2VpdmVyKElQQzo6U3RyaW5n
UmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6TWVzc2FnZVJlY2VpdmVyJiBtZXNz
YWdlUmVjZWl2ZXIpCi17Ci0gICAgbV9tZXNzYWdlUmVjZWl2ZXJNYXAuYWRkTWVzc2FnZVJlY2Vp
dmVyKG1lc3NhZ2VSZWNlaXZlck5hbWUsIG1lc3NhZ2VSZWNlaXZlcik7Ci19Ci0KLXZvaWQgQ2hp
bGRQcm9jZXNzUHJveHk6OmFkZE1lc3NhZ2VSZWNlaXZlcihJUEM6OlN0cmluZ1JlZmVyZW5jZSBt
ZXNzYWdlUmVjZWl2ZXJOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlciYgbWVzc2FnZVJlY2VpdmVyKQotewotICAgIG1fbWVzc2FnZVJlY2VpdmVyTWFwLmFk
ZE1lc3NhZ2VSZWNlaXZlcihtZXNzYWdlUmVjZWl2ZXJOYW1lLCBkZXN0aW5hdGlvbklELCBtZXNz
YWdlUmVjZWl2ZXIpOwotfQotCi12b2lkIENoaWxkUHJvY2Vzc1Byb3h5OjpyZW1vdmVNZXNzYWdl
UmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgdWludDY0
X3QgZGVzdGluYXRpb25JRCkKLXsKLSAgICBtX21lc3NhZ2VSZWNlaXZlck1hcC5yZW1vdmVNZXNz
YWdlUmVjZWl2ZXIobWVzc2FnZVJlY2VpdmVyTmFtZSwgZGVzdGluYXRpb25JRCk7Ci19Ci0KLXZv
aWQgQ2hpbGRQcm9jZXNzUHJveHk6OnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihJUEM6OlN0cmluZ1Jl
ZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lKQotewotICAgIG1fbWVzc2FnZVJlY2VpdmVyTWFw
LnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihtZXNzYWdlUmVjZWl2ZXJOYW1lKTsKLX0KLQotYm9vbCBD
aGlsZFByb2Nlc3NQcm94eTo6ZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIHJldHVybiBtX21lc3NhZ2VSZWNl
aXZlck1hcC5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci19Ci0KLWJvb2wg
Q2hpbGRQcm9jZXNzUHJveHk6OmRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVu
Y29kZXI+JiByZXBseUVuY29kZXIpCi17Ci0gICAgcmV0dXJuIG1fbWVzc2FnZVJlY2VpdmVyTWFw
LmRpc3BhdGNoU3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsK
LX0KLQotdm9pZCBDaGlsZFByb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKFByb2Nlc3NM
YXVuY2hlciosIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmll
cikKLXsKLSAgICBBU1NFUlQoIW1fY29ubmVjdGlvbik7Ci0KLSAgICBpZiAoIUlQQzo6Q29ubmVj
dGlvbjo6aWRlbnRpZmllcklzVmFsaWQoY29ubmVjdGlvbklkZW50aWZpZXIpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2Nvbm5lY3Rpb24gPSBJUEM6OkNvbm5lY3Rpb246OmNyZWF0ZVNlcnZl
ckNvbm5lY3Rpb24oY29ubmVjdGlvbklkZW50aWZpZXIsICp0aGlzKTsKLQotICAgIGNvbm5lY3Rp
b25XaWxsT3BlbigqbV9jb25uZWN0aW9uKTsKLSAgICBtX2Nvbm5lY3Rpb24tPm9wZW4oKTsKLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wZW5kaW5nTWVzc2FnZXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4gbWVzc2FnZSA9IFdURk1v
dmUobV9wZW5kaW5nTWVzc2FnZXNbaV0uZmlyc3QpOwotICAgICAgICBPcHRpb25TZXQ8SVBDOjpT
ZW5kT3B0aW9uPiBzZW5kT3B0aW9ucyA9IG1fcGVuZGluZ01lc3NhZ2VzW2ldLnNlY29uZDsKLSAg
ICAgICAgbV9jb25uZWN0aW9uLT5zZW5kTWVzc2FnZShXVEZNb3ZlKG1lc3NhZ2UpLCBzZW5kT3B0
aW9ucyk7Ci0gICAgfQotCi0gICAgbV9wZW5kaW5nTWVzc2FnZXMuY2xlYXIoKTsKLX0KLQotdm9p
ZCBDaGlsZFByb2Nlc3NQcm94eTo6c2h1dERvd25Qcm9jZXNzKCkKLXsKLSAgICBzd2l0Y2ggKHN0
YXRlKCkpIHsKLSAgICBjYXNlIFN0YXRlOjpMYXVuY2hpbmc6Ci0gICAgICAgIG1fcHJvY2Vzc0xh
dW5jaGVyLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1fcHJvY2Vzc0xhdW5jaGVyID0gbnVsbHB0
cjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTdGF0ZTo6UnVubmluZzoKLSNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgICAgICAvLyBPbiBpT1MgZGVwbG95IGEgd2F0Y2hkb2cgaW4gdGhl
IFVJIHByb2Nlc3MsIHNpbmNlIHRoZSBjaGlsZCBwcm9jZXNzIG1heSBiZSBzdXNwZW5kZWQuCi0g
ICAgICAgIC8vIElmIDMwcyBpcyBpbnN1ZmZpY2llbnQgZm9yIGFueSBvdXRzdGFuZGluZyBhY3Rp
dml0eSB0byBjb21wbGV0ZSBjbGVhbmx5LCB0aGVuIGl0IHdpbGwgYmUga2lsbGVkLgotICAgICAg
ICBBU1NFUlQobV9jb25uZWN0aW9uKTsKLSAgICAgICAgbV9jb25uZWN0aW9uLT50ZXJtaW5hdGVT
b29uKDMwX3MpOwotI2VuZGlmCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU3RhdGU6OlRlcm1p
bmF0ZWQ6Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fY29ubmVjdGlvbikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJvY2Vzc1dpbGxTaHV0RG93bigqbV9jb25uZWN0aW9u
KTsKLQotICAgIGlmIChjYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpD
aGlsZFByb2Nlc3M6OlNodXREb3duKCksIDApOwotCi0gICAgbV9jb25uZWN0aW9uLT5pbnZhbGlk
YXRlKCk7Ci0gICAgbV9jb25uZWN0aW9uID0gbnVsbHB0cjsKLX0KLQotdm9pZCBDaGlsZFByb2Nl
c3NQcm94eTo6c2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChib29sIHByb2Nlc3NTdXBwcmVz
c2lvbkVuYWJsZWQpCi17Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKHN0YXRlKCkgIT0g
U3RhdGU6OlJ1bm5pbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6Q2hpbGRQcm9jZXNzOjpTZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHBy
b2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQpLCAwKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHBy
b2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQpOwotI2VuZGlmCi19Ci0KLXZvaWQgQ2hpbGRQcm9jZXNz
UHJveHk6OmNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mKQotewotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NoaWxkUHJvY2Vzc1Byb3h5LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wt
c3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVy
dHkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NoaWxkUHJvY2Vzc1Byb3h5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ2hpbGRQcm9jZXNzUHJveHkuaAko
cmV2aXNpb24gMjQwNTg5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ2hpbGRQcm9jZXNz
UHJveHkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDE0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJNZXNz
YWdlUmVjZWl2ZXJNYXAuaCIKLSNpbmNsdWRlICJQcm9jZXNzTGF1bmNoZXIuaCIKLQotI2luY2x1
ZGUgPFdlYkNvcmUvUHJvY2Vzcy5oPgotI2luY2x1ZGUgPHd0Zi9Qcm9jZXNzSUQuaD4KLSNpbmNs
dWRlIDx3dGYvU3lzdGVtVHJhY2luZy5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291
bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgQ2hpbGRQcm9jZXNzUHJveHkg
OiBQcm9jZXNzTGF1bmNoZXI6OkNsaWVudCwgcHVibGljIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50
IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDaGlsZFByb2Nlc3NQcm94eSk7Ci0KLXByb3Rl
Y3RlZDoKLSAgICBleHBsaWNpdCBDaGlsZFByb2Nlc3NQcm94eShib29sIGFsd2F5c1J1bnNBdEJh
Y2tncm91bmRQcmlvcml0eSA9IGZhbHNlKTsKLQotcHVibGljOgotICAgIHZpcnR1YWwgfkNoaWxk
UHJvY2Vzc1Byb3h5KCk7Ci0KLSAgICB2b2lkIGNvbm5lY3QoKTsKLSAgICB2b2lkIHRlcm1pbmF0
ZSgpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBzZW5kKFQmJiBtZXNzYWdlLCB1
aW50NjRfdCBkZXN0aW5hdGlvbklELCBPcHRpb25TZXQ8SVBDOjpTZW5kT3B0aW9uPiBzZW5kT3B0
aW9ucyA9IHsgfSk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBzZW5kU3luYyhUJiYg
bWVzc2FnZSwgdHlwZW5hbWUgVDo6UmVwbHkmJiwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgU2Vj
b25kcyB0aW1lb3V0ID0gMV9zLCBPcHRpb25TZXQ8SVBDOjpTZW5kU3luY09wdGlvbj4gc2VuZFN5
bmNPcHRpb25zID0geyB9KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBB
cmdzPiB2b2lkIHNlbmRXaXRoQXN5bmNSZXBseShUJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
QXJncy4uLik+JiYpOwotCi0gICAgSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2Nvbm5lY3Rpb24pOwotICAgICAgICByZXR1cm4gbV9j
b25uZWN0aW9uLmdldCgpOwotICAgIH0KLSAgICAKLSAgICBib29sIGhhc0Nvbm5lY3Rpb24oY29u
c3QgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fY29ubmVjdGlvbiA9PSAmY29ubmVjdGlvbjsKLSAgICB9Ci0KLSAgICB2b2lkIGFkZE1l
c3NhZ2VSZWNlaXZlcihJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJ
UEM6Ok1lc3NhZ2VSZWNlaXZlciYpOwotICAgIHZvaWQgYWRkTWVzc2FnZVJlY2VpdmVyKElQQzo6
U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIHVpbnQ2NF90IGRlc3RpbmF0aW9u
SUQsIElQQzo6TWVzc2FnZVJlY2VpdmVyJik7Ci0gICAgdm9pZCByZW1vdmVNZXNzYWdlUmVjZWl2
ZXIoSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgdWludDY0X3QgZGVz
dGluYXRpb25JRCk7Ci0gICAgdm9pZCByZW1vdmVNZXNzYWdlUmVjZWl2ZXIoSVBDOjpTdHJpbmdS
ZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSk7Ci0KLSAgICBlbnVtIGNsYXNzIFN0YXRlIHsK
LSAgICAgICAgTGF1bmNoaW5nLAotICAgICAgICBSdW5uaW5nLAotICAgICAgICBUZXJtaW5hdGVk
LAotICAgIH07Ci0gICAgU3RhdGUgc3RhdGUoKSBjb25zdDsKLQotICAgIFByb2Nlc3NJRCBwcm9j
ZXNzSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc0xhdW5jaGVyID8gbV9wcm9j
ZXNzTGF1bmNoZXItPnByb2Nlc3NJZGVudGlmaWVyKCkgOiAwOyB9Ci0KLSAgICBib29sIGNhblNl
bmRNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKSAhPSBTdGF0ZTo6VGVybWluYXRlZDt9
Ci0gICAgYm9vbCBzZW5kTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiwgT3B0
aW9uU2V0PElQQzo6U2VuZE9wdGlvbj4pOwotCi0gICAgdm9pZCBzaHV0RG93blByb2Nlc3MoKTsK
LQotICAgIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIGNvcmVQcm9jZXNzSWRlbnRpZmllcigp
IGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc0lkZW50aWZpZXI7IH0KLQotICAgIHZvaWQgc2V0UHJv
Y2Vzc1N1cHByZXNzaW9uRW5hYmxlZChib29sKTsKLQotcHJvdGVjdGVkOgotICAgIC8vIFByb2Nl
c3NMYXVuY2hlcjo6Q2xpZW50Ci0gICAgdm9pZCBkaWRGaW5pc2hMYXVuY2hpbmcoUHJvY2Vzc0xh
dW5jaGVyKiwgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyKSBvdmVycmlkZTsKLQotICAgIGJv
b2wgZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwotICAg
IGJvb2wgZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
LCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOwotICAgIAotICAgIHZpcnR1YWwgdm9p
ZCBnZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYpOwotICAg
IHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpM
YXVuY2hPcHRpb25zJikgeyB9OwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0
aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJik7Ci0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3NX
aWxsU2h1dERvd24oSVBDOjpDb25uZWN0aW9uJikgPSAwOwotCi0gICAgVmVjdG9yPHN0ZDo6cGFp
cjxzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiwgT3B0aW9uU2V0PElQQzo6U2VuZE9wdGlv
bj4+PiBtX3BlbmRpbmdNZXNzYWdlczsKLSAgICBSZWZQdHI8UHJvY2Vzc0xhdW5jaGVyPiBtX3By
b2Nlc3NMYXVuY2hlcjsKLSAgICBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247
Ci0gICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7Ci0gICAg
Ym9vbCBtX2Fsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSB7IGZhbHNlIH07Ci0gICAgV2Vi
Q29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgbV9wcm9jZXNzSWRlbnRpZmllciB7IGdlbmVyYXRlT2Jq
ZWN0SWRlbnRpZmllcjxXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllclR5cGU+KCkgfTsKLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1ib29sIENoaWxkUHJvY2Vzc1Byb3h5OjpzZW5kKFQmJiBt
ZXNzYWdlLCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBPcHRpb25TZXQ8SVBDOjpTZW5kT3B0aW9u
PiBzZW5kT3B0aW9ucykKLXsKLSAgICBDT01QSUxFX0FTU0VSVCghVDo6aXNTeW5jLCBBc3luY01l
c3NhZ2VFeHBlY3RlZCk7Ci0KLSAgICBhdXRvIGVuY29kZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPElQ
Qzo6RW5jb2Rlcj4oVDo6cmVjZWl2ZXJOYW1lKCksIFQ6Om5hbWUoKSwgZGVzdGluYXRpb25JRCk7
Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKG1lc3NhZ2UuYXJndW1lbnRzKCkpOwotCi0gICAgcmV0dXJu
IHNlbmRNZXNzYWdlKFdURk1vdmUoZW5jb2RlciksIHNlbmRPcHRpb25zKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVT4gCi1ib29sIENoaWxkUHJvY2Vzc1Byb3h5OjpzZW5kU3luYyhVJiYgbWVz
c2FnZSwgdHlwZW5hbWUgVTo6UmVwbHkmJiByZXBseSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwg
U2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8SVBDOjpTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNP
cHRpb25zKQotewotICAgIENPTVBJTEVfQVNTRVJUKFU6OmlzU3luYywgU3luY01lc3NhZ2VFeHBl
Y3RlZCk7Ci0KLSAgICBpZiAoIW1fY29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgVHJhY2VTY29wZSBzY29wZShTeW5jTWVzc2FnZVN0YXJ0LCBTeW5jTWVzc2FnZUVuZCk7
Ci0KLSAgICByZXR1cm4gY29ubmVjdGlvbigpLT5zZW5kU3luYyhzdGQ6OmZvcndhcmQ8VT4obWVz
c2FnZSksIFdURk1vdmUocmVwbHkpLCBkZXN0aW5hdGlvbklELCB0aW1lb3V0LCBzZW5kU3luY09w
dGlvbnMpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmdzPgotdm9p
ZCBDaGlsZFByb2Nlc3NQcm94eTo6c2VuZFdpdGhBc3luY1JlcGx5KFQmJiBtZXNzYWdlLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKEFyZ3MuLi4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAg
IGlmICghbV9jb25uZWN0aW9uKSB7Ci0gICAgICAgIFQ6OmNhbmNlbFJlcGx5KFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbm5lY3Rp
b24oKS0+c2VuZFdpdGhBc3luY1JlcGx5KHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9DaGlsZFByb2Nlc3NQ
cm94eS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1u
YXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvU2VydmljZVdvcmtlclByb2Nlc3NQcm94eS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1NlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkuaAkocmV2aXNp
b24gMjQwNTg5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU2VydmljZVdvcmtlclByb2Nl
c3NQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB1
aW50NjRfdCBwYWdlSUQoKSBjb25zdCB7IHJldHVybiBtX3NlcnZpY2VXb3JrZXJQYWdlSUQ7IH0K
IAogcHJpdmF0ZToKLSAgICAvLyBDaGlsZFByb2Nlc3NQcm94eQorICAgIC8vIEF1eGlsaWFyeVBy
b2Nlc3NQcm94eQogICAgIHZvaWQgZ2V0TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6Okxh
dW5jaE9wdGlvbnMmKSBmaW5hbDsKIAogICAgIC8vIFByb2Nlc3NMYXVuY2hlcjo6Q2xpZW50Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDI0
MDU4OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc5Nyw5ICs3OTcsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3dhcFRvV2Vi
UHJvY2VzcyhSZWY8CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpmaW5pc2hBdHRhY2hpbmdUb1dlYlBy
b2Nlc3MoU2hvdWxkSW5pdGlhbGl6ZVdlYlBhZ2Ugc2hvdWxkSW5pdGlhbGl6ZVBhZ2UpCiB7Ci0g
ICAgQVNTRVJUKG1fcHJvY2Vzcy0+c3RhdGUoKSAhPSBDaGlsZFByb2Nlc3NQcm94eTo6U3RhdGU6
OlRlcm1pbmF0ZWQpOworICAgIEFTU0VSVChtX3Byb2Nlc3MtPnN0YXRlKCkgIT0gQXV4aWxpYXJ5
UHJvY2Vzc1Byb3h5OjpTdGF0ZTo6VGVybWluYXRlZCk7CiAKLSAgICBpZiAobV9wcm9jZXNzLT5z
dGF0ZSgpID09IENoaWxkUHJvY2Vzc1Byb3h5OjpTdGF0ZTo6UnVubmluZykgeworICAgIGlmICht
X3Byb2Nlc3MtPnN0YXRlKCkgPT0gQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpTdGF0ZTo6UnVubmlu
ZykgewogICAgICAgICBtX3dlYlByb2Nlc3NMaWZldGltZVRyYWNrZXIud2ViUGFnZUVudGVyaW5n
V2ViUHJvY2VzcygpOwogICAgICAgICBwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKCk7CiAgICAg
fQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAkocmV2
aXNpb24gMjQwNTg5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiQVBJTmF2aWdh
dGlvbi5oIgogI2luY2x1ZGUgIkFQSVBhZ2VDb25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAiQVBJ
UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgiCi0jaW5jbHVkZSAiQ2hpbGRQcm9jZXNzTWVzc2Fn
ZXMuaCIKKyNpbmNsdWRlICJBdXhpbGlhcnlQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJE
b3dubG9hZFByb3h5LmgiCiAjaW5jbHVkZSAiRG93bmxvYWRQcm94eU1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiR2FtZXBhZERhdGEuaCIKQEAgLTQ0Miw4ICs0NDIsOCBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpmdWxsS2V5Ym9hcmRBY2Nlc3NNCiAjaWYgT1MoTElOVVgpCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZW5kTWVtb3J5UHJlc3N1cmVFdmVudChib29sIGlzQ3JpdGljYWwpCiB7Ci0gICAgc2Vu
ZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpDaGlsZFByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQ
cmVzc3VyZUV2ZW50KGlzQ3JpdGljYWwpKTsKLSAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhN
ZXNzYWdlczo6Q2hpbGRQcm9jZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChpc0Ny
aXRpY2FsKSk7CisgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9j
ZXNzOjpEaWRSZWNlaXZlTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRpY2FsKSk7CisgICAgc2Vu
ZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2Vp
dmVNZW1vcnlQcmVzc3VyZUV2ZW50KGlzQ3JpdGljYWwpKTsKICNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKICAgICBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuc2VuZE1l
bW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCk7CiAjZW5kaWYKQEAgLTE0ODIsOSArMTQ4Miw5
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXMKIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lU2VydmljZVdvcmtlcnNDYW5IYW5kbGUoY29uc3Qg
U3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAgICAgbV9zY2hlbWVzU2VydmljZVdvcmtlcnNDYW5IYW5k
bGUuYWRkKHVybFNjaGVtZSk7Ci0gICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpDaGls
ZFByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lU2VydmljZVdvcmtlcnNDYW5IYW5kbGUodXJsU2No
ZW1lKSk7CisgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNz
OjpSZWdpc3RlclVSTFNjaGVtZVNlcnZpY2VXb3JrZXJzQ2FuSGFuZGxlKHVybFNjaGVtZSkpOwog
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpDaGlsZFByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lU2VydmljZVdvcmtlcnND
YW5IYW5kbGUodXJsU2NoZW1lKSwgMCk7CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lU2VydmljZVdvcmtl
cnNDYW5IYW5kbGUodXJsU2NoZW1lKSwgMCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJl
Z2lzdGVyVVJMU2NoZW1lQXNDYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdChjb25zdCBTdHJpbmcm
IHVybFNjaGVtZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5LmNwcAkocmV2aXNpb24gMjQwNTg5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIFJlZjxX
ZWJQcm9jZXNzUHJveHk+IFdlYlByb2Nlc3NQcm94eTo6Y3IKIH0KIAogV2ViUHJvY2Vzc1Byb3h5
OjpXZWJQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sLCBXZWJzaXRlRGF0
YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlLCBJc1ByZXdhcm1lZCBpc1ByZXdhcm1lZCkKLSAgICA6
IENoaWxkUHJvY2Vzc1Byb3h5KHByb2Nlc3NQb29sLmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlv
cml0eSgpKQorICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KHByb2Nlc3NQb29sLmFsd2F5c1J1
bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQogICAgICwgbV9yZXNwb25zaXZlbmVzc1RpbWVyKCp0
aGlzKQogICAgICwgbV9iYWNrZ3JvdW5kUmVzcG9uc2l2ZW5lc3NUaW1lcigqdGhpcykKICAgICAs
IG1fcHJvY2Vzc1Bvb2wocHJvY2Vzc1Bvb2wsIGlzUHJld2FybWVkID09IElzUHJld2FybWVkOjpZ
ZXMgPyBJc1dlYWs6OlllcyA6IElzV2Vhazo6Tm8pCkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBX
ZWJQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMoUAogewogICAgIGxhdW5jaE9wdGlvbnMu
cHJvY2Vzc1R5cGUgPSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpXZWI7CiAKLSAgICBD
aGlsZFByb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25zKTsKKyAgICBB
dXhpbGlhcnlQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucyk7CiAK
ICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wtPmN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRl
bnRpZmllcigpLmlzRW1wdHkoKSkKICAgICAgICAgbGF1bmNoT3B0aW9ucy5jdXN0b21XZWJDb250
ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIgPSBtX3Byb2Nlc3NQb29sLT5jdXN0b21XZWJDb250
ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKS5hc2NpaSgpOwpAQCAtNjU0LDcgKzY1NCw3IEBA
IHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcKIHsKICAgICBSRUxFQVNF
X0FTU0VSVChpc01haW5UaHJlYWRPckNoZWNrRGlzYWJsZWQoKSk7CiAKLSAgICBDaGlsZFByb2Nl
c3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKGxhdW5jaGVyLCBjb25uZWN0aW9uSWRlbnRpZmll
cik7CisgICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcobGF1bmNo
ZXIsIGNvbm5lY3Rpb25JZGVudGlmaWVyKTsKIAogICAgIGlmICghSVBDOjpDb25uZWN0aW9uOjpp
ZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9uSWRlbnRpZmllcikpIHsKICAgICAgICAgUkVMRUFT
RV9MT0dfSUYobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0Fsd2F5c09uTG9nZ2lu
Z0FsbG93ZWQoKSwgUHJvY2VzcywgIiVwIC0gV2ViUHJvY2Vzc1Byb3h5IGRpZEZpbmlzaExhdW5j
aGluZyAtIGludmFsaWQgY29ubmVjdGlvbiBpZGVudGlmaWVyICh3ZWIgcHJvY2VzcyBmYWlsZWQg
dG8gbGF1bmNoKSIsIHRoaXMpOwpAQCAtNzU4LDEzICs3NTgsMTMgQEAgdm9pZCBXZWJQcm9jZXNz
UHJveHk6OmRpZERlc3Ryb3lVc2VyR2VzdAogCiB2b2lkIFdlYlByb2Nlc3NQcm94eTo6bWF5YmVT
aHV0RG93bigpCiB7Ci0gICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6OlRlcm1pbmF0ZWQgfHwgIWNh
blRlcm1pbmF0ZUNoaWxkUHJvY2VzcygpKQorICAgIGlmIChzdGF0ZSgpID09IFN0YXRlOjpUZXJt
aW5hdGVkIHx8ICFjYW5UZXJtaW5hdGVBdXhpbGlhcnlQcm9jZXNzKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIHNodXREb3duKCk7CiB9CiAKLWJvb2wgV2ViUHJvY2Vzc1Byb3h5OjpjYW5UZXJt
aW5hdGVDaGlsZFByb2Nlc3MoKQorYm9vbCBXZWJQcm9jZXNzUHJveHk6OmNhblRlcm1pbmF0ZUF1
eGlsaWFyeVByb2Nlc3MoKQogewogICAgIGlmICghbV9wYWdlTWFwLmlzRW1wdHkoKSB8fCBtX3By
b2Nlc3NQb29sLT5oYXNTdXNwZW5kZWRQYWdlRm9yKCp0aGlzKSB8fCAhbV9wcm92aXNpb25hbFBh
Z2VzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzc3LDcgKzc3Nyw3IEBA
IGJvb2wgV2ViUHJvY2Vzc1Byb3h5OjpjYW5UZXJtaW5hdGVDaGlsZFAKIAogdm9pZCBXZWJQcm9j
ZXNzUHJveHk6OnNob3VsZFRlcm1pbmF0ZShib29sJiBzaG91bGRUZXJtaW5hdGUpCiB7Ci0gICAg
c2hvdWxkVGVybWluYXRlID0gY2FuVGVybWluYXRlQ2hpbGRQcm9jZXNzKCk7CisgICAgc2hvdWxk
VGVybWluYXRlID0gY2FuVGVybWluYXRlQXV4aWxpYXJ5UHJvY2VzcygpOwogICAgIGlmIChzaG91
bGRUZXJtaW5hdGUpIHsKICAgICAgICAgLy8gV2Uga25vdyB0aGF0IHRoZSB3ZWIgcHJvY2VzcyBp
cyBnb2luZyB0byB0ZXJtaW5hdGUgc28gc3RhcnQgc2h1dHRpbmcgaXQgZG93biBpbiB0aGUgVUkg
cHJvY2Vzcy4KICAgICAgICAgc2h1dERvd24oKTsKQEAgLTg3MSw3ICs4NzEsNyBAQCB2b2lkIFdl
YlByb2Nlc3NQcm94eTo6cmVxdWVzdFRlcm1pbmF0aW9uCiAgICAgYXV0byBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyk7CiAgICAgUkVMRUFTRV9MT0dfSUYobV93ZWJzaXRlRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKS5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgUHJvY2VzcywgIiVwIC0g
V2ViUHJvY2Vzc1Byb3h5OjpyZXF1ZXN0VGVybWluYXRpb24gLSByZWFzb24gJWQiLCB0aGlzLCBy
ZWFzb24pOwogCi0gICAgQ2hpbGRQcm9jZXNzUHJveHk6OnRlcm1pbmF0ZSgpOworICAgIEF1eGls
aWFyeVByb2Nlc3NQcm94eTo6dGVybWluYXRlKCk7CiAKICAgICBpZiAod2ViQ29ubmVjdGlvbigp
KQogICAgICAgICB3ZWJDb25uZWN0aW9uKCktPmRpZENsb3NlKCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAkocmV2aXNpb24gMjQwNTg5KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDggKzI2LDggQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQVBJVXNlckluaXRpYXRl
ZEFjdGlvbi5oIgorI2luY2x1ZGUgIkF1eGlsaWFyeVByb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUg
IkJhY2tncm91bmRQcm9jZXNzUmVzcG9uc2l2ZW5lc3NUaW1lci5oIgotI2luY2x1ZGUgIkNoaWxk
UHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyTWFwLmgiCiAjaW5jbHVk
ZSAiUGx1Z2luSW5mb1N0b3JlLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc0xhdW5jaGVyLmgiCkBAIC05
NCw3ICs5NCw3IEBAIHR5cGVkZWYgUmVmQ291bnRlcjxCYWNrZ3JvdW5kV2ViUHJvY2Vzc0MKIHR5
cGVkZWYgQmFja2dyb3VuZFdlYlByb2Nlc3NDb3VudGVyOjpUb2tlbiBCYWNrZ3JvdW5kV2ViUHJv
Y2Vzc1Rva2VuOwogI2VuZGlmCiAKLWNsYXNzIFdlYlByb2Nlc3NQcm94eSA6IHB1YmxpYyBDaGls
ZFByb2Nlc3NQcm94eSwgcHVibGljIFJlc3BvbnNpdmVuZXNzVGltZXI6OkNsaWVudCwgcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFdlYlByb2Nlc3NQcm94eT4sIHB1YmxpYyBDYW5NYWtlV2Vh
a1B0cjxXZWJQcm9jZXNzUHJveHk+LCBwcml2YXRlIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQgewor
Y2xhc3MgV2ViUHJvY2Vzc1Byb3h5IDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94eSwgcHVi
bGljIFJlc3BvbnNpdmVuZXNzVGltZXI6OkNsaWVudCwgcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPFdlYlByb2Nlc3NQcm94eT4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxXZWJQcm9jZXNzUHJv
eHk+LCBwcml2YXRlIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQgewogcHVibGljOgogICAgIHR5cGVk
ZWYgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYkZyYW1lUHJveHk+PiBXZWJGcmFtZVByb3h5
TWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgV2ViUGFnZVByb3h5Kj4gV2ViUGFn
ZVByb3h5TWFwOwpAQCAtMjU2LDcgKzI1Niw3IEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgdWlu
dDY0X3QgZ2VuZXJhdGVQYWdlSUQoKTsKICAgICBXZWJQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Bv
b2wmLCBXZWJzaXRlRGF0YVN0b3JlJiwgSXNQcmV3YXJtZWQpOwogCi0gICAgLy8gQ2hpbGRQcm9j
ZXNzUHJveHkKKyAgICAvLyBBdXhpbGlhcnlQcm9jZXNzUHJveHkKICAgICB2b2lkIGdldExhdW5j
aE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRp
b25zJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0
aW9uJikgb3ZlcnJpZGU7CkBAIC0zMzIsNyArMzMyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRp
ZFJlY2VpdmVXZWJQcm9jZXNzUHJveHlNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVj
b2RlciYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNXZWJQcm9jZXNzUHJveHlNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29k
ZXI+Jik7CiAKLSAgICBib29sIGNhblRlcm1pbmF0ZUNoaWxkUHJvY2VzcygpOworICAgIGJvb2wg
Y2FuVGVybWluYXRlQXV4aWxpYXJ5UHJvY2VzcygpOwogCiAgICAgdm9pZCBkaWRDb2xsZWN0UHJl
d2FybUluZm9ybWF0aW9uKGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBXZWJDb3JlOjpQcmV3
YXJtSW5mb3JtYXRpb24mKTsKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0aGVu
dGljYXRpb24vQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VQcm94eS5jcHAJKHJldmlzaW9uIDI0MDU4OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25EZWNp
c2lvbkxpc3RlbmVyLmgiCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25NYW5hZ2VyLmgiCiAjaW5j
bHVkZSAiQXV0aGVudGljYXRpb25NYW5hZ2VyTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJDaGlsZFBy
b2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgIkF1eGlsaWFyeVByb2Nlc3NQcm94eS5oIgogI2luY2x1
ZGUgIldlYkNlcnRpZmljYXRlSW5mby5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVy
cy5oIgogI2luY2x1ZGUgIldlYkNyZWRlbnRpYWwuaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRoZW50
aWNhdGlvbkNoYWxsZW5nZVByb3h5LmgJKHJldmlzaW9uIDI0MDU4OSkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHku
aAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQCBjbGFzcyBDb25uZWN0aW9uOwogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIEF1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lcjsK
LWNsYXNzIENoaWxkUHJvY2Vzc1Byb3h5OwogY2xhc3MgU2VjS2V5UHJveHlTdG9yZTsKIGNsYXNz
IFdlYkNyZWRlbnRpYWw7CiBjbGFzcyBXZWJQcm90ZWN0aW9uU3BhY2U7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAu
Y3BwCShyZXZpc2lvbiAyNDA1ODkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRQcm94eU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEb3dubG9hZFByb3h5TWFwLmgiCiAKLSNp
bmNsdWRlICJDaGlsZFByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgIkF1eGlsaWFyeVByb2Nlc3NQ
cm94eS5oIgogI2luY2x1ZGUgIkRvd25sb2FkUHJveHkuaCIKICNpbmNsdWRlICJEb3dubG9hZFBy
b3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXJNYXAuaCIKQEAgLTM0LDgg
KzM0LDggQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLURvd25sb2FkUHJveHlNYXA6OkRvd25s
b2FkUHJveHlNYXAoQ2hpbGRQcm9jZXNzUHJveHkqIHByb2Nlc3MpCi0gICAgOiBtX3Byb2Nlc3Mo
cHJvY2VzcykKK0Rvd25sb2FkUHJveHlNYXA6OkRvd25sb2FkUHJveHlNYXAoTmV0d29ya1Byb2Nl
c3NQcm94eSYgcHJvY2VzcykKKyAgICA6IG1fcHJvY2VzcygmcHJvY2VzcykKIHsKIH0KIApJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQ
cm94eU1hcC5oCShyZXZpc2lvbiAyNDA1ODkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw3
IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBE
b3dubG9hZFByb3h5TWFwX2gKLSNkZWZpbmUgRG93bmxvYWRQcm94eU1hcF9oCisjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgIkRvd25sb2FkSUQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpA
QCAtMzYsMTUgKzM1LDE1IEBAIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKLWNsYXNzIENoaWxkUHJvY2Vzc1Byb3h5OwogY2xhc3MgRG93bmxvYWRQcm94eTsK
K2NsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHk7CiBjbGFzcyBXZWJQcm9jZXNzUG9vbDsKIAogY2xh
c3MgRG93bmxvYWRQcm94eU1hcCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRG93bmxvYWRQ
cm94eU1hcCk7CiAKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBEb3dubG9hZFByb3h5TWFwKENoaWxk
UHJvY2Vzc1Byb3h5Kik7CisgICAgZXhwbGljaXQgRG93bmxvYWRQcm94eU1hcChOZXR3b3JrUHJv
Y2Vzc1Byb3h5Jik7CiAgICAgfkRvd25sb2FkUHJveHlNYXAoKTsKIAogICAgIERvd25sb2FkUHJv
eHkqIGNyZWF0ZURvd25sb2FkUHJveHkoV2ViUHJvY2Vzc1Bvb2wmLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmKTsKQEAgLTU1LDEwICs1NCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHBy
b2Nlc3NEaWRDbG9zZSgpOwogCiBwcml2YXRlOgotICAgIENoaWxkUHJvY2Vzc1Byb3h5KiBtX3By
b2Nlc3M7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSogbV9wcm9jZXNzOwogICAgIEhhc2hNYXA8
RG93bmxvYWRJRCwgUmVmUHRyPERvd25sb2FkUHJveHk+PiBtX2Rvd25sb2FkczsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRG93bmxvYWRQcm94eU1hcF9oCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NQcm94eS5jcHAJKHJldmlzaW9uIDI0MDU4OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcy
LDcgKzcyLDcgQEAgc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlQ2FsbGJhY2tJRCgpCiB9CiAKIE5l
dHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wmIHBy
b2Nlc3NQb29sKQotICAgIDogQ2hpbGRQcm9jZXNzUHJveHkocHJvY2Vzc1Bvb2wuYWx3YXlzUnVu
c0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCisgICAgOiBBdXhpbGlhcnlQcm9jZXNzUHJveHkocHJv
Y2Vzc1Bvb2wuYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCiAgICAgLCBtX3Byb2Nl
c3NQb29sKHByb2Nlc3NQb29sKQogICAgICwgbV9udW1QZW5kaW5nQ29ubmVjdGlvblJlcXVlc3Rz
KDApCiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKQEAgLTEwMyw3
ICsxMDMsNyBAQCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94CiB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpM
YXVuY2hPcHRpb25zJiBsYXVuY2hPcHRpb25zKQogewogICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vz
c1R5cGUgPSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpOZXR3b3JrOwotICAgIENoaWxk
UHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKGxhdW5jaE9wdGlvbnMpOworICAgIEF1eGls
aWFyeVByb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25zKTsKIAogICAg
IGlmIChwcm9jZXNzUG9vbCgpLnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWls
Rm9yVGVzdGluZygpKSB7CiAgICAgICAgIHByb2Nlc3NQb29sKCkuc2V0U2hvdWxkTWFrZU5leHRO
ZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGZhbHNlKTsKQEAgLTE0OSw3ICsxNDks
NyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldE5ldHdvcmtQcm9jCiBEb3dubG9hZFBy
b3h5KiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQogewogICAgIGlmICghbV9kb3dubG9hZFByb3h5
TWFwKQotICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAgPSBzdGQ6Om1ha2VfdW5pcXVlPERvd25s
b2FkUHJveHlNYXA+KHRoaXMpOworICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAgPSBzdGQ6Om1h
a2VfdW5pcXVlPERvd25sb2FkUHJveHlNYXA+KCp0aGlzKTsKIAogICAgIHJldHVybiBtX2Rvd25s
b2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJveHkobV9wcm9jZXNzUG9vbCwgcmVzb3VyY2VS
ZXF1ZXN0KTsKIH0KQEAgLTMzNCw3ICszMzQsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OmRpZERlbGV0ZVdlYnNpCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1
bmNoaW5nKFByb2Nlc3NMYXVuY2hlciogbGF1bmNoZXIsIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRp
ZmllciBjb25uZWN0aW9uSWRlbnRpZmllcikKIHsKLSAgICBDaGlsZFByb2Nlc3NQcm94eTo6ZGlk
RmluaXNoTGF1bmNoaW5nKGxhdW5jaGVyLCBjb25uZWN0aW9uSWRlbnRpZmllcik7CisgICAgQXV4
aWxpYXJ5UHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcobGF1bmNoZXIsIGNvbm5lY3Rp
b25JZGVudGlmaWVyKTsKIAogICAgIGlmICghSVBDOjpDb25uZWN0aW9uOjppZGVudGlmaWVySXNW
YWxpZChjb25uZWN0aW9uSWRlbnRpZmllcikpIHsKICAgICAgICAgbmV0d29ya1Byb2Nlc3NDcmFz
aGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzUHJveHkuaAkocmV2aXNpb24gMjQwNTg5KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQVBJV2Vic2l0ZURh
dGFTdG9yZS5oIgotI2luY2x1ZGUgIkNoaWxkUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiQXV4
aWxpYXJ5UHJvY2Vzc1Byb3h5LmgiCiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xf
TUFOQUdFUikKICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5oIgog
I2VuZGlmCkBAIC02NSw3ICs2NSw3IEBAIHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVyczsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Owogc3RydWN0IFdl
YnNpdGVEYXRhOwogCi1jbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIENo
aWxkUHJvY2Vzc1Byb3h5LCBwcml2YXRlIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQgeworY2xhc3Mg
TmV0d29ya1Byb2Nlc3NQcm94eSBmaW5hbCA6IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzUHJveHks
IHByaXZhdGUgUHJvY2Vzc1Rocm90dGxlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQg
TmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYpOwogICAgIH5OZXR3b3JrUHJvY2Vz
c1Byb3h5KCk7CkBAIC0xNTIsNyArMTUyLDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlU2Vz
c2lvbihQQUw6OlNlc3Npb25JRCk7CiAKIHByaXZhdGU6Ci0gICAgLy8gQ2hpbGRQcm9jZXNzUHJv
eHkKKyAgICAvLyBBdXhpbGlhcnlQcm9jZXNzUHJveHkKICAgICB2b2lkIGdldExhdW5jaE9wdGlv
bnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBj
b25uZWN0aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBw
cm9jZXNzV2lsbFNodXREb3duKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1By
b3h5LmNwcAkocmV2aXNpb24gMjQwNTg5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3
IEBACiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIAotI2luY2x1ZGUgIkNoaWxk
UHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiQXV4aWxpYXJ5UHJvY2Vzc01lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyTWVzc2FnZXMuaCIKICNp
bmNsdWRlICJQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiUGx1
Z2luUHJvY2Vzc01hbmFnZXIuaCIKQEAgLTg4LDcgKzg4LDcgQEAgUGx1Z2luUHJvY2Vzc1Byb3h5
Ojp+UGx1Z2luUHJvY2Vzc1Byb3h5KAogdm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6OmdldExhdW5j
aE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuY2hPcHRpb25zKQog
ewogICAgIHBsYXRmb3JtR2V0TGF1bmNoT3B0aW9uc1dpdGhBdHRyaWJ1dGVzKGxhdW5jaE9wdGlv
bnMsIG1fcGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMpOwotICAgIENoaWxkUHJvY2Vzc1Byb3h5Ojpn
ZXRMYXVuY2hPcHRpb25zKGxhdW5jaE9wdGlvbnMpOworICAgIEF1eGlsaWFyeVByb2Nlc3NQcm94
eTo6Z2V0TGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25zKTsKIH0KIAogdm9pZCBQbHVnaW5Qcm9j
ZXNzUHJveHk6OnByb2Nlc3NXaWxsU2h1dERvd24oSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
KQpAQCAtMTU3LDcgKzE1Nyw3IEBAIHZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjpzZW5kTWVtb3J5
UHJlc3MKICAgICBpZiAoc3RhdGUoKSA9PSBTdGF0ZTo6TGF1bmNoaW5nKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX2Nvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkNoaWxkUHJvY2Vzczo6RGlk
UmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXNDcml0aWNhbCksIDApOworICAgIG1fY29ubmVj
dGlvbi0+c2VuZChNZXNzYWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVBy
ZXNzdXJlRXZlbnQoaXNDcml0aWNhbCksIDApOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuaAko
cmV2aXNpb24gMjQwNTg5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5Qcm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTIgKzIzLDExIEBACiAgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBQbHVnaW5Qcm9j
ZXNzUHJveHlfaAotI2RlZmluZSBQbHVnaW5Qcm9jZXNzUHJveHlfaAorI3ByYWdtYSBvbmNlCiAK
ICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIAotI2luY2x1ZGUgIkNoaWxkUHJvY2Vz
c1Byb3h5LmgiCisjaW5jbHVkZSAiQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAi
Q29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIlBsdWdpbk1vZHVsZUluZm8uaCIKICNpbmNsdWRlICJQ
bHVnaW5Qcm9jZXNzLmgiCkBAIC02Niw3ICs2NSw3IEBAIGludCBwbHVnaW5Qcm9jZXNzTGF0ZW5j
eVFPUygpOwogaW50IHBsdWdpblByb2Nlc3NUaHJvdWdocHV0UU9TKCk7CiAjZW5kaWYKIAotY2xh
c3MgUGx1Z2luUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIENoaWxkUHJvY2Vzc1Byb3h5LCBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGx1Z2luUHJvY2Vzc1Byb3h5PiB7CitjbGFzcyBQ
bHVnaW5Qcm9jZXNzUHJveHkgZmluYWwgOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LCBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGx1Z2luUHJvY2Vzc1Byb3h5PiB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIFJlZjxQbHVnaW5Qcm9jZXNzUHJveHk+IGNyZWF0ZShQbHVnaW5Qcm9jZXNz
TWFuYWdlciosIGNvbnN0IFBsdWdpblByb2Nlc3NBdHRyaWJ1dGVzJiwgdWludDY0X3QgcGx1Z2lu
UHJvY2Vzc1Rva2VuKTsKICAgICB+UGx1Z2luUHJvY2Vzc1Byb3h5KCk7CkBAIC0xODMsNSArMTgy
LDMgQEAgcHJpdmF0ZToKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNlbmRpZiAvLyBQbHVnaW5Qcm9jZXNzUHJveHlfaApJ
bmRleDogU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAyNDA1ODkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNyArMTc3LDcgQEAKIAkJMUEyRDg0
QTMxMjdGNkFEMTAwMUVCOTYyIC8qIE5QVmFyaWFudERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMkQ4NEExMTI3RjZBRDEwMDFFQjk2MiAvKiBO
UFZhcmlhbnREYXRhLmggKi87IH07CiAJCTFBMkQ5MEQyMTI4MUM5NjYwMDFFQjk2MiAvKiBQbHVn
aW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQTJEOTBEMDEyODFDOTY2MDAxRUI5NjIgLyogUGx1Z2luUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oICovOyB9OwogCQkxQTJEOTFBNjEyODFENzM5MDAxRUI5
NjIgLyogUGx1Z2luQ29udHJvbGxlclByb3h5TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyRDkxQTUxMjgxRDczOTAwMUVCOTYyIC8qIFBsdWdp
bkNvbnRyb2xsZXJQcm94eU1hYy5tbSAqLzsgfTsKLQkJMUEyRDk1NkYxMjg0ODU2NDAwMUVCOTYy
IC8qIENoaWxkUHJvY2Vzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUEyRDk1NkQxMjg0ODU2NDAwMUVCOTYyIC8qIENoaWxkUHJvY2Vzcy5oICovOyB9
OworCQkxQTJEOTU2RjEyODQ4NTY0MDAxRUI5NjIgLyogQXV4aWxpYXJ5UHJvY2Vzcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyRDk1NkQxMjg0ODU2
NDAwMUVCOTYyIC8qIEF1eGlsaWFyeVByb2Nlc3MuaCAqLzsgfTsKIAkJMUEzMDA2NkUxMTEwRjRG
NzAwMzE5MzdDIC8qIFJlc3BvbnNpdmVuZXNzVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMzAwNjZDMTExMEY0RjcwMDMxOTM3QyAvKiBSZXNw
b25zaXZlbmVzc1RpbWVyLmggKi87IH07CiAJCTFBMzM0REVEMTZERThGODgwMDZBOEUzOCAvKiBT
dG9yYWdlQXJlYU1hcE1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTMzNERFQjE2REU4Rjg4MDA2QThFMzggLyogU3RvcmFn
ZUFyZWFNYXBNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQkxQTMzNERFRTE2REU4Rjg4MDA2
QThFMzggLyogU3RvcmFnZUFyZWFNYXBNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEzMzRERUMxNkRFOEY4ODAwNkE4RTM4IC8qIFN0b3Jh
Z2VBcmVhTWFwTWVzc2FnZXMuaCAqLzsgfTsKQEAgLTQyMyw3ICs0MjMsNyBAQAogCQkyNkY5QTgz
QjE4QTM0NjgxMDBBRUI4OEEgLyogV0tXZWJWaWV3UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZGOUE4M0ExOEEzNDYzRjAwQUVCODhBIC8q
IFdLV2ViVmlld1ByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkyNzQ5RjY0NDIxNDY1NjFCMDA4MzgwQkYgLyogSW5qZWN0ZWRCdW5kbGVO
b2RlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDNEJFRUFBMTIwQTBBNUYwMEZCQTBDNyAvKiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUu
Y3BwICovOyB9OwogCQkyNzQ5RjY0NTIxNDY1NjFFMDA4MzgwQkYgLyogSW5qZWN0ZWRCdW5kbGVS
YW5nZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzMzRTBEMDEyNDA4RTg2MDAzNjBGM0YgLyogSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRs
ZS5jcHAgKi87IH07Ci0JCTI5MEY0MjcyMTcyQTBDNzQwMDkzOUZGMCAvKiBDaGlsZFByb2Nlc3NT
dXBwbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyOTBGNDI3MTE3MkEwQzc0MDA5MzlGRjAgLyogQ2hpbGRQcm9jZXNzU3VwcGxlbWVudC5oICov
OyB9OworCQkyOTBGNDI3MjE3MkEwQzc0MDA5MzlGRjAgLyogQXV4aWxpYXJ5UHJvY2Vzc1N1cHBs
ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5
MEY0MjcxMTcyQTBDNzQwMDkzOUZGMCAvKiBBdXhpbGlhcnlQcm9jZXNzU3VwcGxlbWVudC5oICov
OyB9OwogCQkyOTIzMkRGNDE4QjI5RDY4MDBEMDU5NkYgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFn
ZU9iamVjdE1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjkyMzJERjMxOEIyOUQ2ODAwRDA1OTZGIC8qIFdLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmpl
Y3RNYWMuaCAqLzsgfTsKIAkJMjkzRUJFQUIxNjI3RDlDOTAwNUY4OUYxIC8qIFdLRE9NVGV4dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjkzRUJFQTkx
NjI3RDlDOTAwNUY4OUYxIC8qIFdLRE9NVGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI5NTAxNzI0MTYyQTQ1MDQwMDRBOUQ3MSAvKiBXS1dl
YlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXJQcml2YXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTUwMTcyMzE2MkE0NTA0MDA0
QTlENzEgLyogV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyUHJpdmF0
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02
NzksNyArNjc5LDcgQEAKIAkJMkQ5MkE3ODMyMTJCNkE3MTAwRjQ5M0ZEIC8qIFN0cmluZ1JlZmVy
ZW5jZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QUUwMEQ2OTE4MzI3QzEyMDAwODdERDcgLyogU3RyaW5nUmVmZXJlbmNlLmNwcCAqLzsgfTsKIAkJ
MkQ5MkE3ODQyMTJCNkFCMTAwRjQ5M0ZEIC8qIEFjdGl2aXR5QXNzZXJ0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RDc5MkQ1MTc2N0NCNkUw
MDg4MUNCRSAvKiBBY3Rpdml0eUFzc2VydGlvbi5jcHAgKi87IH07CiAJCTJEOTJBNzg1MjEyQjZB
QjEwMEY0OTNGRCAvKiBCbG9iRGF0YUZpbGVSZWZlcmVuY2VXaXRoU2FuZGJveEV4dGVuc2lvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTY0QTJF
RjE5MUFGMTRFMDAxMDczN0QgLyogQmxvYkRhdGFGaWxlUmVmZXJlbmNlV2l0aFNhbmRib3hFeHRl
bnNpb24uY3BwICovOyB9OwotCQkyRDkyQTc4NjIxMkI2QUIxMDBGNDkzRkQgLyogQ2hpbGRQcm9j
ZXNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
MkQ5NTZFMTI4NDg1NjQwMDFFQjk2MiAvKiBDaGlsZFByb2Nlc3MuY3BwICovOyB9OworCQkyRDky
QTc4NjIxMkI2QUIxMDBGNDkzRkQgLyogQXV4aWxpYXJ5UHJvY2Vzcy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTJEOTU2RTEyODQ4NTY0MDAxRUI5
NjIgLyogQXV4aWxpYXJ5UHJvY2Vzcy5jcHAgKi87IH07CiAJCTJEOTJBNzg3MjEyQjZBQjEwMEY0
OTNGRCAvKiBTaGFyZWFibGVCaXRtYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUE2NDIwRTIxMkRDRTJGRjAwQ0FBRTJDIC8qIFNoYXJlYWJsZUJp
dG1hcC5jcHAgKi87IH07CiAJCTJEOTJBNzg4MjEyQjZBQjEwMEY0OTNGRCAvKiBXZWJDb3JlQXJn
dW1lbnRDb2RlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTM5QUU3NjUxMzE2RTk5QzAwQUUwNkE2IC8qIFdlYkNvcmVBcmd1bWVudENvZGVycy5j
cHAgKi87IH07CiAJCTJEOTJBNzg5MjEyQjZBQjEwMEY0OTNGRCAvKiBXZWJFdmVudC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMDMzN0RBRDEyN0Ey
NEZFMDA4RkY0RjQgLyogV2ViRXZlbnQuY3BwICovOyB9OwpAQCAtMTAwNiw4ICsxMDA2LDggQEAK
IAkJNTFGMDYwRTExNjU0MzE4NTAwRjMyODJGIC8qIFdlYk1ETlNSZWdpc3Rlck1lc3NhZ2VSZWNl
aXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUYwNjBERDE2NTQzMTc1MDBGMzI4MkYgLyogV2ViTUROU1JlZ2lzdGVyTWVzc2FnZVJlY2VpdmVy
LmNwcCAqLzsgfTsKIAkJNTFGMDYwRTExNjU0MzE4NTAwRjMyODNGIC8qIE5ldHdvcmtNRE5TUmVn
aXN0ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFGMDYwREQxNjU0MzE3NTAwRjMyODNGIC8qIE5ldHdvcmtNRE5TUmVn
aXN0ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQk1MUY4ODZBNjFGMkMyMjgxMDBDMTkz
RUYgLyogV0tUZXN0aW5nU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFGODg2QTQxRjJDMjE0QTAwQzE5M0VGIC8qIFdLVGVzdGluZ1N1cHBv
cnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1
MUZBRUMzQTFCMDY1NzYzMDAwOUM0RTcgLyogQ2hpbGRQcm9jZXNzTWVzc2FnZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRkFFQzM3MUIwNjU3MzEw
MDA5QzRFNyAvKiBDaGlsZFByb2Nlc3NNZXNzYWdlcy5oICovOyB9OwotCQk1MUZBRUMzQjFCMDY1
NzY4MDAwOUM0RTcgLyogQ2hpbGRQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRkFFQzM2MUIwNjU3MzEwMDA5
QzRFNyAvKiBDaGlsZFByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQk1MUZBRUMz
QTFCMDY1NzYzMDAwOUM0RTcgLyogQXV4aWxpYXJ5UHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZBRUMzNzFCMDY1NzMxMDAw
OUM0RTcgLyogQXV4aWxpYXJ5UHJvY2Vzc01lc3NhZ2VzLmggKi87IH07CisJCTUxRkFFQzNCMUIw
NjU3NjgwMDA5QzRFNyAvKiBBdXhpbGlhcnlQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRkFFQzM2MUIwNjU3
MzEwMDA5QzRFNyAvKiBBdXhpbGlhcnlQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsK
IAkJNTFGRDE4QjYxNjUxRkJBRDAwREJFMUNFIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGRDE4QjQxNjUx
RkJBRDAwREJFMUNFIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlci5oICovOyB9OwogCQk1MjcyQjI4
QjE0MDY5ODVEMDA5NkE1RDAgLyogU3RhdGlzdGljc0RhdGEuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNzJCMjg5MTQwNjk4NUQwMDk2QTVEMCAvKiBT
dGF0aXN0aWNzRGF0YS5oICovOyB9OwogCQk1MjcyRDRDOTFFNzM1RjA5MDBFQjQyOTAgLyogV0tQ
cm90ZWN0aW9uU3BhY2VOUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTI3MkQ0QzcxRTczNUYwOTAwRUI0MjkwIC8qIFdLUHJvdGVjdGlvblNwYWNlTlMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTU4
Miw3ICsxNTgyLDcgQEAKIAkJRTEwNUZFNTQxOEQ3QjlERTAwOEY1N0E4IC8qIEVkaXRpbmdSYW5n
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEwNUZF
NTMxOEQ3QjlERTAwOEY1N0E4IC8qIEVkaXRpbmdSYW5nZS5oICovOyB9OwogCQlFMTFEMzVBRTE2
QjYzRDFCMDA2RDIzRDcgLyogY29tLmFwcGxlLldlYlByb2Nlc3Muc2IgaW4gUmVzb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOTY3RTM3MTUwQUI1RTIwMEM3MzE2
OSAvKiBjb20uYXBwbGUuV2ViUHJvY2Vzcy5zYiAqLzsgfTsKIAkJRTE0QTk1NEExNkUwMTZBNDAw
NjhERTgyIC8qIE5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTRBOTU0ODE2RTAxNkE0MDA2OERF
ODIgLyogTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMuaCAqLzsgfTsKLQkJRTE1MTND
NjcxNjZFQUJCMjAwMTQ5RkNCIC8qIENoaWxkUHJvY2Vzc1Byb3h5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTUxM0M2NTE2NkVBQkIyMDAxNDlGQ0Ig
LyogQ2hpbGRQcm9jZXNzUHJveHkuaCAqLzsgfTsKKwkJRTE1MTNDNjcxNjZFQUJCMjAwMTQ5RkNC
IC8qIEF1eGlsaWFyeVByb2Nlc3NQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTE1MTNDNjUxNjZFQUJCMjAwMTQ5RkNCIC8qIEF1eGlsaWFyeVBy
b2Nlc3NQcm94eS5oICovOyB9OwogCQlFMTUyNTUxQTE3MDExODE5MDAzRDdBREIgLyogTmV0d29y
a1Jlc291cmNlTG9hZGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTI1NTE4MTcwMTE4MTkwMDNEN0FEQiAvKiBOZXR3
b3JrUmVzb3VyY2VMb2FkZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQlFMTUyNTUxQjE3
MDExODE5MDAzRDdBREIgLyogTmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2FnZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNTI1NTE5MTcwMTE4MTkw
MDNEN0FEQiAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkZXJNZXNzYWdlcy5oICovOyB9OwogCQlFMTY0
QTJGMjE5MUFGMTRFMDAxMDczN0QgLyogQmxvYkRhdGFGaWxlUmVmZXJlbmNlV2l0aFNhbmRib3hF
eHRlbnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxNjRBMkYwMTkxQUYxNEUwMDEwNzM3RCAvKiBCbG9iRGF0YUZpbGVSZWZlcmVuY2VXaXRoU2Fu
ZGJveEV4dGVuc2lvbi5oICovOyB9OwpAQCAtMjAxOCw4ICsyMDE4LDggQEAKIAkJMUEyRDkwRDEx
MjgxQzk2NjAwMUVCOTYyIC8qIFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGx1Z2luUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMkQ5MUE1MTI4
MUQ3MzkwMDFFQjk2MiAvKiBQbHVnaW5Db250cm9sbGVyUHJveHlNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbHVnaW5Db250cm9sbGVyUHJveHlNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMkQ5MjIwMTI4MURDMUIwMDFFQjk2MiAv
KiBQbHVnaW5Qcm94eU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFBsdWdpblByb3h5TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTJE
OTU2RDEyODQ4NTY0MDAxRUI5NjIgLyogQ2hpbGRQcm9jZXNzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENoaWxkUHJvY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkxQTJEOTU2RTEyODQ4NTY0MDAxRUI5NjIgLyogQ2hpbGRQcm9jZXNzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENoaWxkUHJvY2Vzcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBMkQ5NTZEMTI4NDg1NjQwMDFFQjk2MiAvKiBBdXhpbGlh
cnlQcm9jZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1eGlsaWFyeVBy
b2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUEyRDk1NkUxMjg0ODU2NDAw
MUVCOTYyIC8qIEF1eGlsaWFyeVByb2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQXV4aWxpYXJ5UHJvY2Vzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFBMzAwNjZDMTExMEY0RjcwMDMxOTM3QyAvKiBSZXNwb25zaXZlbmVzc1RpbWVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3BvbnNpdmVuZXNzVGltZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEzMEVBQzUxMTVEN0RBMzAwNTNFOTM3IC8q
IENvbm5lY3Rpb25NYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBDb25uZWN0aW9uTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTMzNERF
QTE2REU4QjY4MDA2QThFMzggLyogU3RvcmFnZUFyZWFNYXAubWVzc2FnZXMuaW4gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU3Rv
cmFnZUFyZWFNYXAubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
MTA4LDcgKzIxMDgsNyBAQAogCQkxQTY1NjNFMzFCN0E4QzUwMDA5Q0Y3ODcgLyogQVBJV2luZG93
RmVhdHVyZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJV2luZG93RmVh
dHVyZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE2NkJGOEUxOEEwNTJFRDAw
MjA3MUI0IC8qIFdLV2ViVmlld0ludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdLV2ViVmlld0ludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFBNjdDRDJEMUNCQzUxM0YwMEJGRTNFQSAvKiBXS09wZW5QYW5lbFBhcmFtZXRlcnNJbnRlcm5h
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS09wZW5QYW5lbFBhcmFtZXRl
cnNJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTY5OEYxNzFFNDkx
MDIyMDA2NEU4ODEgLyogQ2hpbGRQcm9jZXNzQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBDaGlsZFByb2Nlc3NDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMUE2OThGMTcxRTQ5MTAyMjAwNjRFODgxIC8qIEF1eGlsaWFyeVByb2Nl
c3NDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEF1eGls
aWFyeVByb2Nlc3NDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE2RDg2
QkYxREY3NTI2NTAwNzc0NUU4IC8qIE1hY2hNZXNzYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1hY2hNZXNzYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUE2RDg2QzAxREY3NTI2NTAwNzc0NUU4IC8qIE1hY2hNZXNzYWdlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY2hNZXNzYWdlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFBNkZBMjFEMUJEMDQzNUIwMEFBQTY1MCAvKiBXS0ZyYW1lSW5mb1By
aXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tGcmFtZUluZm9Qcml2
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDQxLDcgKzI0NDEsNyBAQAog
CQkyNkYxMEJFNjE5MTg3RTJFMDAxRDBFNjggLyogV0tTeW50aGV0aWNDbGlja1RhcEdlc3R1cmVS
ZWNvZ25pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLU3ludGhldGlj
Q2xpY2tUYXBHZXN0dXJlUmVjb2duaXplci5oOyBwYXRoID0gaW9zL1dLU3ludGhldGljQ2xpY2tU
YXBHZXN0dXJlUmVjb2duaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNkYx
MEJFNzE5MTg3RTJFMDAxRDBFNjggLyogV0tTeW50aGV0aWNDbGlja1RhcEdlc3R1cmVSZWNvZ25p
emVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgbmFtZSA9IFdLU3ludGhldGljQ2xp
Y2tUYXBHZXN0dXJlUmVjb2duaXplci5tOyBwYXRoID0gaW9zL1dLU3ludGhldGljQ2xpY2tUYXBH
ZXN0dXJlUmVjb2duaXplci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNkY5QTgz
QTE4QTM0NjNGMDBBRUI4OEEgLyogV0tXZWJWaWV3UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
S1dlYlZpZXdQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTI5MEY0Mjcx
MTcyQTBDNzQwMDkzOUZGMCAvKiBDaGlsZFByb2Nlc3NTdXBwbGVtZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoaWxkUHJvY2Vzc1N1cHBsZW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjkwRjQyNzExNzJBMEM3NDAwOTM5RkYwIC8qIEF1eGlsaWFy
eVByb2Nlc3NTdXBwbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1
eGlsaWFyeVByb2Nlc3NTdXBwbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTI5MjMyREYxMThCMjlEMTEwMEQwNTk2RiAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0
TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tBY2Nlc3Np
YmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MjkyMzJERjMxOEIyOUQ2ODAwRDA1OTZGIC8qIFdLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RN
YWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tBY2Nlc3NpYmlsaXR5V2Vi
UGFnZU9iamVjdE1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOTIzMkRGNTE4
QjI5RENFMDBEMDU5NkYgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdElPUy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0
SU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMjEzLDcgKzMyMTMsNyBAQAog
CQk1MTVFNzcyNTE4M0RENkY2MDAwNzIwM0YgLyogQXN5bmNSZXF1ZXN0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFzeW5jUmVxdWVzdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxNUU3NzI2MTgzREQ2RjYwMDA3MjAzRiAvKiBBc3luY1JlcXVl
c3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXN5bmNSZXF1ZXN0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjBCRkUwMTMzODFERjkwMDkxODk5OSAvKiBM
b2dnaW5nRm91bmRhdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IExvZ2dpbmdGb3VuZGF0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1
MTY0QzA5NDFCMDVCNzU3MDA0RjEwMkEgLyogQ2hpbGRQcm9jZXNzLm1lc3NhZ2VzLmluICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IENoaWxkUHJvY2Vzcy5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NEMwOTQxQjA1Qjc1NzAwNEYxMDJBIC8qIEF1eGlsaWFyeVBy
b2Nlc3MubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQXV4aWxpYXJ5UHJvY2Vz
cy5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2QTRBNUIxMjBB
MkNDRDAwQzA1QjdGIC8qIEFQSUVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFQSUVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxN0EzM0IzMTMw
QjMwOEMwMEY4MENCNSAvKiBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTdBMzNCNDEzMEIzMDhDMDBGODBDQjUg
LyogV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0zMzI2LDggKzMzMjYsOCBAQAogCQk1MUZBMkQ1QTE1MjExQTFFMDBDMUJBMEIg
LyogSW5qZWN0ZWRCdW5kbGVET01XaW5kb3dFeHRlbnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVET01XaW5kb3dFeHRlbnNpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFGQTJENUMxNTIxMUE1MDAwQzFCQTBCIC8qIEluamVj
dGVkQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFGQTJENzUxNTIxMkUxRTAwQzFCQTBCIC8qIFdLQnVu
ZGxlRE9NV2luZG93RXh0ZW5zaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdLQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNTFGQUVDMzYxQjA2NTczMTAwMDlDNEU3IC8qIENoaWxkUHJvY2Vzc01lc3Nh
Z2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDaGls
ZFByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi9DaGlsZFByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJP
RFVDVFNfRElSOyB9OwotCQk1MUZBRUMzNzFCMDY1NzMxMDAwOUM0RTcgLyogQ2hpbGRQcm9jZXNz
TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ2hpbGRQcm9jZXNz
TWVzc2FnZXMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvQ2hpbGRQcm9jZXNzTWVz
c2FnZXMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJNTFGQUVDMzYx
QjA2NTczMTAwMDlDNEU3IC8qIEF1eGlsaWFyeVByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQXV4aWxpYXJ5UHJvY2Vzc01lc3Nh
Z2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL0F1eGlsaWFyeVBy
b2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElS
OyB9OworCQk1MUZBRUMzNzFCMDY1NzMxMDAwOUM0RTcgLyogQXV4aWxpYXJ5UHJvY2Vzc01lc3Nh
Z2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEF1eGlsaWFyeVByb2Nlc3NN
ZXNzYWdlcy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9BdXhpbGlhcnlQcm9jZXNz
TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNTFGQjA5
MDIxNjNBM0IxQzAwRUMzMjRBIC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5p
biAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IG5hbWUgPSBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW47IHBhdGggPSBOZXR3
b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTFGRDE4QjMxNjUxRkJBRDAwREJFMUNFIC8qIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUZEMThC
NDE2NTFGQkFEMDBEQkUxQ0UgLyogTmV0d29ya1Jlc291cmNlTG9hZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtSZXNvdXJjZUxvYWRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMzgxMyw3ICszODEzLDcgQEAKIAkJOTlGNjQyRDIxRkFCRTM3
ODAwOTYyMUU5IC8qIENvb3JkaW5hdGVTeXN0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ29vcmRpbmF0ZVN5c3RlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5QkM1OUQ2QzFFRkNDQ0I2MDAxRThEMDkgLyogQ2FsbGJhY2tJRC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsYmFja0lELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTlCQzU5RDZEMUVGQ0RDNkQwMDFFOEQwOSAvKiBPcHRpb25hbENhbGxiYWNrSUQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9uYWxDYWxsYmFja0lELmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTlGNTRGODhFMTY0ODhFODcwMDdERjgxQSAvKiBD
aGlsZFByb2Nlc3NNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBDaGlsZFByb2Nlc3NNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlGNTRG
ODhFMTY0ODhFODcwMDdERjgxQSAvKiBBdXhpbGlhcnlQcm9jZXNzTWFjLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUY1NEY4OTQxNjQ4QUUwRTAwN0RGODFBIC8qIFBs
dWdpblByb2Nlc3NNYW5hZ2VyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gUGx1Z2luUHJvY2Vzc01hbmFnZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlGQjVGMzkyMTY5RTZBODAwMDJDMjVCRiAvKiBXS0NvbnRleHRQcml2YXRlTWFj
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tDb250ZXh0UHJp
dmF0ZU1hYy5tbTsgcGF0aCA9IG1hYy9XS0NvbnRleHRQcml2YXRlTWFjLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5RkI1RjM5MzE2OUU2QTgwMDAyQzI1QkYgLyogV0tDb250ZXh0
UHJpdmF0ZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS0NvbnRleHRQ
cml2YXRlTWFjLmg7IHBhdGggPSBtYWMvV0tDb250ZXh0UHJpdmF0ZU1hYy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMzkwNyw3ICszOTA3LDcgQEAKIAkJQTdCRDk4NjMxOTQ2NTNE
NDAwRDM1Njk4IC8qIERhdGFiYXNlcy1pT1MuZW50aXRsZW1lbnRzICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54
bWw7IHBhdGggPSAiRGF0YWJhc2VzLWlPUy5lbnRpdGxlbWVudHMiOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBN0Q3OTJENDE3NjdDQjA5MDA4ODFDQkUgLyogQWN0aXZpdHlBc3NlcnRp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQWN0aXZpdHlBc3NlcnRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTdENzkyRDUxNzY3Q0I2RTAwODgxQ0JFIC8qIEFjdGl2aXR5QXNzZXJ0
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFjdGl2aXR5QXNz
ZXJ0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTdFOTNDRUIxOTI1MzFB
QTAwQTFEQzQ4IC8qIENoaWxkUHJvY2Vzc0lPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgbmFtZSA9IENoaWxkUHJvY2Vzc0lPUy5tbTsgcGF0aCA9IGlvcy9DaGlsZFByb2Nl
c3NJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3RTkzQ0VCMTkyNTMxQUEw
MEExREM0OCAvKiBBdXhpbGlhcnlQcm9jZXNzSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBuYW1lID0gQXV4aWxpYXJ5UHJvY2Vzc0lPUy5tbTsgcGF0aCA9IGlvcy9BdXhp
bGlhcnlQcm9jZXNzSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMzk2RUE1
NTEyRTBFRDJEMDBGNEZFQjcgLyogY29uZmlnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IGNvbmZpZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNjJFNzMwRjE0
MzA0N0E2MDA2OUVDMzUgLyogV0tIaXRUZXN0UmVzdWx0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdLSGl0VGVzdFJlc3VsdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUI2MkU3MzExMTQzMDQ3QjAwMDY5RUMzNSAvKiBXS0hpdFRlc3RSZXN1bHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tIaXRUZXN0UmVzdWx0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDI0LDggKzQ0MjQsOCBAQAogCQlFMTMzRkQ4
OTE0MjNERDdGMDBGQzdCRkIgLyogV2ViS2l0LmljbnMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS5pY25zOyBuYW1lID0gV2ViS2l0LmljbnM7
IHBhdGggPSBSZXNvdXJjZXMvV2ViS2l0LmljbnM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUxNEE5NTQ3MTZFMDE2QTQwMDY4REU4MiAvKiBOZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3Ry
YXRlZ2llcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3Jr
UHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUxNEE5NTQ4MTZFMDE2QTQwMDY4REU4MiAvKiBOZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3Ry
YXRlZ2llcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vz
c1BsYXRmb3JtU3RyYXRlZ2llcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMTUx
M0M2NDE2NkVBQkIyMDAxNDlGQ0IgLyogQ2hpbGRQcm9jZXNzUHJveHkuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2hpbGRQcm9jZXNzUHJveHkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlFMTUxM0M2NTE2NkVBQkIyMDAxNDlGQ0IgLyogQ2hpbGRQ
cm9jZXNzUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hpbGRQcm9j
ZXNzUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTE1MTNDNjQxNjZFQUJC
MjAwMTQ5RkNCIC8qIEF1eGlsaWFyeVByb2Nlc3NQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBBdXhpbGlhcnlQcm9jZXNzUHJveHkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFMTUxM0M2NTE2NkVBQkIyMDAxNDlGQ0IgLyogQXV4aWxpYXJ5
UHJvY2Vzc1Byb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1eGlsaWFy
eVByb2Nlc3NQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTUyNTUxNzE3
MDEwOUZCMDAzRDdBREIgLyogTmV0d29ya1Jlc291cmNlTG9hZGVyLm1lc3NhZ2VzLmluICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IE5ldHdvcmtSZXNvdXJjZUxvYWRlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTE1MjU1MTgxNzAxMTgxOTAwM0Q3QURCIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRl
ck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBOZXR3b3JrUmVzb3VyY2VMb2FkZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOyBwYXRoID0gRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9OZXR3b3JrUmVzb3VyY2VMb2FkZXJNZXNzYWdlUmVjZWl2ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlFMTUyNTUxOTE3MDExODE5
MDAzRDdBREIgLyogTmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2FnZXMuaDsgcGF0
aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvTmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2FnZXMu
aDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTUwMTQsMTYgKzUwMTQs
MTYgQEAKIAkJCQlCQzMyOUQ5RTE2QUNENDc4MDAzMTZERTIgLyogQVBJV2ViQXJjaGl2ZVJlc291
cmNlLm1tICovLAogCQkJCTUxNUU3NzI1MTgzREQ2RjYwMDA3MjAzRiAvKiBBc3luY1JlcXVlc3Qu
Y3BwICovLAogCQkJCTUxNUU3NzI2MTgzREQ2RjYwMDA3MjAzRiAvKiBBc3luY1JlcXVlc3QuaCAq
LywKKwkJCQkxQTJEOTU2RTEyODQ4NTY0MDAxRUI5NjIgLyogQXV4aWxpYXJ5UHJvY2Vzcy5jcHAg
Ki8sCisJCQkJMUEyRDk1NkQxMjg0ODU2NDAwMUVCOTYyIC8qIEF1eGlsaWFyeVByb2Nlc3MuaCAq
LywKKwkJCQk1MTY0QzA5NDFCMDVCNzU3MDA0RjEwMkEgLyogQXV4aWxpYXJ5UHJvY2Vzcy5tZXNz
YWdlcy5pbiAqLywKKwkJCQkyOTBGNDI3MTE3MkEwQzc0MDA5MzlGRjAgLyogQXV4aWxpYXJ5UHJv
Y2Vzc1N1cHBsZW1lbnQuaCAqLywKIAkJCQlFMTY0QTJFRjE5MUFGMTRFMDAxMDczN0QgLyogQmxv
YkRhdGFGaWxlUmVmZXJlbmNlV2l0aFNhbmRib3hFeHRlbnNpb24uY3BwICovLAogCQkJCUUxNjRB
MkYwMTkxQUYxNEUwMDEwNzM3RCAvKiBCbG9iRGF0YUZpbGVSZWZlcmVuY2VXaXRoU2FuZGJveEV4
dGVuc2lvbi5oICovLAogCQkJCTRGNjAxNDMwMTU1QzVBMzIwMDFGQkRFMCAvKiBCbG9ja2luZ1Jl
c3BvbnNlTWFwLmggKi8sCiAJCQkJQkNGMTg2MzcxNjdEMDcxRTAwQTFBODVBIC8qIENhY2hlTW9k
ZWwuY3BwICovLAogCQkJCUJDMzA2NUY5MTI1OTM0NEUwMEU3MTI3OCAvKiBDYWNoZU1vZGVsLmgg
Ki8sCiAJCQkJOUJDNTlENkMxRUZDQ0NCNjAwMUU4RDA5IC8qIENhbGxiYWNrSUQuaCAqLywKLQkJ
CQkxQTJEOTU2RTEyODQ4NTY0MDAxRUI5NjIgLyogQ2hpbGRQcm9jZXNzLmNwcCAqLywKLQkJCQkx
QTJEOTU2RDEyODQ4NTY0MDAxRUI5NjIgLyogQ2hpbGRQcm9jZXNzLmggKi8sCi0JCQkJNTE2NEMw
OTQxQjA1Qjc1NzAwNEYxMDJBIC8qIENoaWxkUHJvY2Vzcy5tZXNzYWdlcy5pbiAqLywKLQkJCQky
OTBGNDI3MTE3MkEwQzc0MDA5MzlGRjAgLyogQ2hpbGRQcm9jZXNzU3VwcGxlbWVudC5oICovLAog
CQkJCTUxMDZEN0JGMThCREJFNzMwMDBBQjE2NiAvKiBDb250ZXh0TWVudUNvbnRleHREYXRhLmNw
cCAqLywKIAkJCQk1MTA2RDdDMDE4QkRCRTczMDAwQUIxNjYgLyogQ29udGV4dE1lbnVDb250ZXh0
RGF0YS5oICovLAogCQkJCTk5RjY0MkQyMUZBQkUzNzgwMDk2MjFFOSAvKiBDb29yZGluYXRlU3lz
dGVtLmggKi8sCkBAIC01MzE1LDEwICs1MzE1LDEwIEBACiAJCQkJNTFDMEM5NzMxRERENzRGMDAw
MzJDQUQzIC8qIEljb25Mb2FkaW5nRGVsZWdhdGUubW0gKi8sCiAJCQkJN0E4MjFGNEIxRTJGNjY0
ODAwNjA0NTc3IC8qIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oICovLAogCQkJ
CTdBODIxRjREMUUyRjY3OUUwMDYwNDU3NyAvKiBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQubW0gKi8sCi0JCQkJNDExMjg2RUYyMUM4QTkwQzAwM0E4NTUwIC8qIE1lZGlhQ2FwdHVy
ZVV0aWxpdGllcy5oICovLAotCQkJCTQxMTI4NkYwMjFDOEE5MEQwMDNBODU1MCAvKiBNZWRpYUNh
cHR1cmVVdGlsaXRpZXMubW0gKi8sCiAJCQkJNTc5MDBCM0UyMUY4RjlCODAwODMxN0RFIC8qIExv
YWRPcHRpbWl6ZXIuaCAqLywKIAkJCQk1NzkwMEIzRjIxRjhGOUI4MDA4MzE3REUgLyogTG9hZE9w
dGltaXplci5tbSAqLywKKwkJCQk0MTEyODZFRjIxQzhBOTBDMDAzQTg1NTAgLyogTWVkaWFDYXB0
dXJlVXRpbGl0aWVzLmggKi8sCisJCQkJNDExMjg2RjAyMUM4QTkwRDAwM0E4NTUwIC8qIE1lZGlh
Q2FwdHVyZVV0aWxpdGllcy5tbSAqLywKIAkJCQkxQUJDM0RGNDE4OTlFNDM3MDA0RjA2MjYgLyog
TmF2aWdhdGlvblN0YXRlLmggKi8sCiAJCQkJMUFCQzNERjMxODk5RTQzNzAwNEYwNjI2IC8qIE5h
dmlnYXRpb25TdGF0ZS5tbSAqLywKIAkJCQk1QzZDRTZEMzFGNTlFQTM1MDAwN0M2Q0IgLyogUGFn
ZUNsaWVudEltcGxDb2NvYS5oICovLApAQCAtNTc4NSw3ICs1Nzg1LDcgQEAKIAkJMkRBOTQ0OTYx
ODg0RTREQTAwRUQ4NkRCIC8qIGlvcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCi0JCQkJQTdFOTNDRUIxOTI1MzFBQTAwQTFEQzQ4IC8qIENoaWxkUHJvY2Vzc0lP
Uy5tbSAqLywKKwkJCQlBN0U5M0NFQjE5MjUzMUFBMDBBMURDNDggLyogQXV4aWxpYXJ5UHJvY2Vz
c0lPUy5tbSAqLywKIAkJCQkyREE2NzMxOTIwQzc1NEIxMDAzQ0I0MDEgLyogRHluYW1pY1ZpZXdw
b3J0U2l6ZVVwZGF0ZS5oICovLAogCQkJCTJEQTk0NDlEMTg4NEU0RjAwMEVEODZEQiAvKiBHZXN0
dXJlVHlwZXMuaCAqLywKIAkJCQlDNUJDRTVEQTFDNTA3NjFEMDBDREUzRkEgLyogSW50ZXJhY3Rp
b25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCAqLywKQEAgLTYyMjAsNyArNjIyMCw3IEBACiAJCQkJ
Mzc4RTFBM0IxODFFRDZGRjAwMzEwMDdBIC8qIEFQSU9iamVjdC5tbSAqLywKIAkJCQlBMTc1QzQ0
OTIxQUEzMTcwMDAwMDM3RDAgLyogQXJndW1lbnRDb2RlcnNDb2NvYS5oICovLAogCQkJCUExNzVD
NDRCMjFBQTMzMUIwMDAwMzdEMCAvKiBBcmd1bWVudENvZGVyc0NvY29hLm1tICovLAotCQkJCTFB
Njk4RjE3MUU0OTEwMjIwMDY0RTg4MSAvKiBDaGlsZFByb2Nlc3NDb2NvYS5tbSAqLywKKwkJCQkx
QTY5OEYxNzFFNDkxMDIyMDA2NEU4ODEgLyogQXV4aWxpYXJ5UHJvY2Vzc0NvY29hLm1tICovLAog
CQkJCTM3QkVDNERGMTk0OTE0ODYwMDhCNDI4NiAvKiBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVj
a2VyLmggKi8sCiAJCQkJMzdCRUM0REUxOTQ5MTQ4NjAwOEI0Mjg2IC8qIENvbXBsZXRpb25IYW5k
bGVyQ2FsbENoZWNrZXIubW0gKi8sCiAJCQkJQzU1RjkxNkMxQzU5NUU0NDAwMjlFOTJEIC8qIERh
dGFEZXRlY3Rpb25SZXN1bHQuaCAqLywKQEAgLTczMzcsMTAgKzczMzcsMTAgQEAKIAkJCQkxQTUz
QzJBMzFBMzI1NjkxMDA0RThDNzAgLyogV2Vic2l0ZURhdGEgKi8sCiAJCQkJMUE0NEI5NTgxNkI3
M0Y4QzAwQjdCQkQ4IC8qIFdlYlN0b3JhZ2UgKi8sCiAJCQkJN0NEMTAyRDkxODY2NzcwNjAwRUQ0
MjlEIC8qIEF1dG9Db3JyZWN0aW9uQ2FsbGJhY2suaCAqLywKKwkJCQlFMTUxM0M2NDE2NkVBQkIy
MDAxNDlGQ0IgLyogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmNwcCAqLywKKwkJCQlFMTUxM0M2NTE2
NkVBQkIyMDAxNDlGQ0IgLyogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmggKi8sCiAJCQkJNDZBMkI2
MDYxRTU2NzVBMjAwQzNERURBIC8qIEJhY2tncm91bmRQcm9jZXNzUmVzcG9uc2l2ZW5lc3NUaW1l
ci5jcHAgKi8sCiAJCQkJNDZBMkI2MDcxRTU2NzVBMjAwQzNERURBIC8qIEJhY2tncm91bmRQcm9j
ZXNzUmVzcG9uc2l2ZW5lc3NUaW1lci5oICovLAotCQkJCUUxNTEzQzY0MTY2RUFCQjIwMDE0OUZD
QiAvKiBDaGlsZFByb2Nlc3NQcm94eS5jcHAgKi8sCi0JCQkJRTE1MTNDNjUxNjZFQUJCMjAwMTQ5
RkNCIC8qIENoaWxkUHJvY2Vzc1Byb3h5LmggKi8sCiAJCQkJMDcyOTdGOUMxQzE3MTFFQTAwM0Yw
NzM1IC8qIERldmljZUlkSGFzaFNhbHRTdG9yYWdlLmNwcCAqLywKIAkJCQkwNzI5N0Y5RDFDMTdC
QkVBMjIzRjA3MzUgLyogRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaCAqLywKIAkJCQlCQzI2NTIx
MjExODI2MDgxMDAyNDNFMTIgLyogRHJhd2luZ0FyZWFQcm94eS5jcHAgKi8sCkBAIC03Nzg2LDcg
Kzc3ODYsNyBAQAogCQkJCUUxNzlGRDlFMTM0RDM4MjUwMDE1Qjg4MyAvKiBBcmd1bWVudENvZGVy
c01hYy5tbSAqLywKIAkJCQlFMUEzMTczMTEzNENFQTZDMDA3QzlBNEYgLyogQXR0cmlidXRlZFN0
cmluZy5oICovLAogCQkJCUUxQTMxNzM0MTM0Q0VBODAwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3Ry
aW5nLm1tICovLAotCQkJCTlGNTRGODhFMTY0ODhFODcwMDdERjgxQSAvKiBDaGlsZFByb2Nlc3NN
YWMubW0gKi8sCisJCQkJOUY1NEY4OEUxNjQ4OEU4NzAwN0RGODFBIC8qIEF1eGlsaWFyeVByb2Nl
c3NNYWMubW0gKi8sCiAJCQkJQ0UxMUFENTExQ0JDNDgyRjAwNjgxRUU1IC8qIENvZGVTaWduaW5n
LmggKi8sCiAJCQkJQ0UxMUFENEYxQ0JDNDdGODAwNjgxRUU1IC8qIENvZGVTaWduaW5nLm1tICov
LAogCQkJCTFBMkE0QUZFMTU4NjkzOTIwMDkwQzlFOSAvKiBDb2xvclNwYWNlRGF0YS5oICovLApA
QCAtODM3OSw5ICs4Mzc5LDkgQEAKIAkJCQk5OTI0OUFENDFGMUYxRTMzMDBCNjJGQkIgLyogQXV0
b21hdGlvbkZyb250ZW5kRGlzcGF0Y2hlcnMuaCAqLywKIAkJCQk5OTU1QTZGMjFDNzk4NjY0MDBF
QjZBOTMgLyogQXV0b21hdGlvblByb3RvY29sT2JqZWN0cy5jcHAgKi8sCiAJCQkJOTk1NUE2RjMx
Qzc5ODY2NDAwRUI2QTkzIC8qIEF1dG9tYXRpb25Qcm90b2NvbE9iamVjdHMuaCAqLywKKwkJCQk1
MUZBRUMzNjFCMDY1NzMxMDAwOUM0RTcgLyogQXV4aWxpYXJ5UHJvY2Vzc01lc3NhZ2VSZWNlaXZl
ci5jcHAgKi8sCisJCQkJNTFGQUVDMzcxQjA2NTczMTAwMDlDNEU3IC8qIEF1eGlsaWFyeVByb2Nl
c3NNZXNzYWdlcy5oICovLAogCQkJCTUxN0NGMEUxMTYzQTQ4NkMwMEMyOTUwRiAvKiBDYWNoZVN0
b3JhZ2VFbmdpbmVDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKLQkJCQk1MUZBRUMz
NjFCMDY1NzMxMDAwOUM0RTcgLyogQ2hpbGRQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywK
LQkJCQk1MUZBRUMzNzFCMDY1NzMxMDAwOUM0RTcgLyogQ2hpbGRQcm9jZXNzTWVzc2FnZXMuaCAq
LywKIAkJCQlFMTdBRTJDMjE2QjlDNjNBMDAxQzQyRjEgLyogY29tLmFwcGxlLldlYktpdC5OZXR3
b3JrUHJvY2Vzcy5zYiAqLywKIAkJCQk3QTE1MDY3MjFERDU2Mjk4MDAxRjRCNTggLyogY29tLmFw
cGxlLldlYktpdC5wbHVnaW4tY29tbW9uLnNiICovLAogCQkJCUUxMTVDNzE1MTkwRjhBMjUwMEVD
QzUxNiAvKiBjb20uYXBwbGUuV2ViS2l0LlN0b3JhZ2Uuc2IgKi8sCkBAIC05MDAwLDYgKzkwMDAs
MTAgQEAKIAkJCQk5OTI0OUFENjFGMUYxRTVGMDBCNjJGQkIgLyogQXV0b21hdGlvbkZyb250ZW5k
RGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NTVBNkY3MUM3OTg2RTUwMEVCNkE5
MyAvKiBBdXRvbWF0aW9uUHJvdG9jb2xPYmplY3RzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTBE
MjhCQjFDNjUzOUQzMDA5ODY5NzcgLyogQXV0b21hdGlvblNlc3Npb25DbGllbnQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTFBMkQ5NTZGMTI4NDg1NjQwMDFFQjk2MiAvKiBBdXhpbGlhcnlQcm9jZXNz
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUZBRUMzQTFCMDY1NzYzMDAwOUM0RTcgLyogQXV4aWxp
YXJ5UHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMTUxM0M2NzE2NkVBQkIy
MDAxNDlGQ0IgLyogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmggaW4gSGVhZGVycyAqLywKKwkJCQky
OTBGNDI3MjE3MkEwQzc0MDA5MzlGRjAgLyogQXV4aWxpYXJ5UHJvY2Vzc1N1cHBsZW1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUNEQTA0MUY0MUFDRTIxMDUwMDRBMTNFQyAvKiBCYWNrQm9hcmRT
ZXJ2aWNlc1NQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDZBMkI2MDkxRTU2NzZBNjAwQzNERURB
IC8qIEJhY2tncm91bmRQcm9jZXNzUmVzcG9uc2l2ZW5lc3NUaW1lci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTE2NEEyRjIxOTFBRjE0RTAwMTA3MzdEIC8qIEJsb2JEYXRhRmlsZVJlZmVyZW5jZVdp
dGhTYW5kYm94RXh0ZW5zaW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTkwMTEsMTAgKzkwMTUsNiBA
QAogCQkJCTQxRkFCRDJBMUY0REUwMDEwMDZBNkM5NyAvKiBDYWNoZVN0b3JhZ2VFbmdpbmVDYWNo
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE4OTdFREExRjQxNUQ4QTAwMTZGQTQyIC8qIENhY2hl
U3RvcmFnZUVuZ2luZUNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQTJFNTFEMTJF
NEMwNUUwMEJDNDk2NiAvKiBDR1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUEyRDk1
NkYxMjg0ODU2NDAwMUVCOTYyIC8qIENoaWxkUHJvY2Vzcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NTFGQUVDM0ExQjA2NTc2MzAwMDlDNEU3IC8qIENoaWxkUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVh
ZGVycyAqLywKLQkJCQlFMTUxM0M2NzE2NkVBQkIyMDAxNDlGQ0IgLyogQ2hpbGRQcm9jZXNzUHJv
eHkuaCBpbiBIZWFkZXJzICovLAotCQkJCTI5MEY0MjcyMTcyQTBDNzQwMDkzOUZGMCAvKiBDaGls
ZFByb2Nlc3NTdXBwbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1N0I0QjQ2MDIwQjUwNEFD
MDBENEFENzkgLyogQ2xpZW50Q2VydGlmaWNhdGVBdXRoZW50aWNhdGlvblhQQ0NvbnN0YW50cy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQ0UxMUFENTIxQ0JDNDgyRjAwNjgxRUU1IC8qIENvZGVTaWdu
aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkzN0JFQzRFMTE5NDkxNDg2MDA4QjQyODYgLyogQ29t
cGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCkBAIC05MTE4LDYgKzkx
MTgsNyBAQAogCQkJCTQxMzA3NUFEMURFODVGNTgwMDM5RUM2OSAvKiBMaWJXZWJSVENTb2NrZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQxREM0NTlDMUUzREJCMjgwMEIxMUY1MSAvKiBMaWJXZWJS
VENTb2NrZXRDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMzA3NUIyMURFODVGNTgwMDM5
RUM2OSAvKiBMaWJXZWJSVENTb2NrZXRGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKKwkJCQk1Nzkw
MEI0MDIxRjhGOUI4MDA4MzE3REUgLyogTG9hZE9wdGltaXplci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMkQxMDg3NjExRDJDNTczRTAwQjg1RjgyIC8qIExvYWRQYXJhbWV0ZXJzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1NzhEQzI5ODIxNTVBMDAyMDA3NEU4MTUgLyogTG9jYWxBdXRoZW50aWNhdGlv
blNvZnRMaW5rLmggaW4gSGVhZGVycyAqLywKIAkJCQk1N0RDRURBQzIxNEM2MDI3MDAxNkI4NDcg
LyogTG9jYWxBdXRoZW50aWNhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTk5MjAsNyArOTkyMSw2
IEBACiAJCQkJN0M4OUQyQTQxQTY3ODg3NTAwM0E1RkRFIC8qIFdLVXNlclNjcmlwdFJlZi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM4Njk5QjUxMTZBQURBQTAwMkE5MjVCIC8qIFdLVmlldy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM4Njk5QjcxMTZBQURBQTAwMkE5MjVCIC8qIFdLVmlld0ludGVy
bmFsLmggaW4gSGVhZGVycyAqLywKLQkJCQk1NzkwMEI0MDIxRjhGOUI4MDA4MzE3REUgLyogTG9h
ZE9wdGltaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQyOEE0OTcxQUY5NjVBMTAwRjE5MEM5
IC8qIFdLVmlld0xheW91dFN0cmF0ZWd5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCRkE2MTc5RjEy
RjBCOTlEMDAzM0UwQ0EgLyogV0tWaWV3UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzVF
MUFGRTkxNkIyMEI3NTAwNkNDMUYyIC8qIFdLV2ViQXJjaGl2ZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xMDc3NywxMCArMTA3NzcsMTAgQEAKIAkJCQk5OTU1QTZGNDFDNzk4NkRDMDBFQjZBOTMgLyog
QXV0b21hdGlvbkJhY2tlbmREaXNwYXRjaGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OTI0
OUFENTFGMUYxRTU2MDBCNjJGQkIgLyogQXV0b21hdGlvbkZyb250ZW5kRGlzcGF0Y2hlcnMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTk1NUE2RjYxQzc5ODZFMzAwRUI2QTkzIC8qIEF1dG9tYXRp
b25Qcm90b2NvbE9iamVjdHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkQ5MkE3ODYyMTJCNkFC
MTAwRjQ5M0ZEIC8qIEF1eGlsaWFyeVByb2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTFG
QUVDM0IxQjA2NTc2ODAwMDlDNEU3IC8qIEF1eGlsaWFyeVByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5MkE3ODUyMTJCNkFCMTAwRjQ5M0ZEIC8qIEJsb2JE
YXRhRmlsZVJlZmVyZW5jZVdpdGhTYW5kYm94RXh0ZW5zaW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxN0NGMEUzMTYzQTQ4NkMwMEMyOTUwRiAvKiBDYWNoZVN0b3JhZ2VFbmdpbmVDb25uZWN0
aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTJEOTJBNzg2MjEyQjZB
QjEwMEY0OTNGRCAvKiBDaGlsZFByb2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFGQUVD
M0IxQjA2NTc2ODAwMDlDNEU3IC8qIENoaWxkUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkyRDkyQTc3RDIxMkI2QTcxMDBGNDkzRkQgLyogQ29ubmVjdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDkyQTc3RTIxMkI2QTcxMDBGNDkzRkQgLyogRGF0YVJl
ZmVyZW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDkyQTc3RjIxMkI2QTcxMDBGNDkzRkQg
LyogRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDI0MDU4OSkKKysrIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAog
I2luY2x1ZGUgIkFQSVBhZ2VHcm91cEhhbmRsZS5oIgogI2luY2x1ZGUgIkFQSVBhZ2VIYW5kbGUu
aCIKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbk1hbmFnZXIuaCIKLSNpbmNsdWRlICJDaGlsZFBy
b2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkF1eGlsaWFyeVByb2Nlc3NNZXNzYWdlcy5oIgog
I2luY2x1ZGUgIkRyYXdpbmdBcmVhLmgiCiAjaW5jbHVkZSAiRXZlbnREaXNwYXRjaGVyLmgiCiAj
aW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIKQEAgLTIyMyw3ICsyMjMsNyBAQCBXZWJQcm9jZXNz
Ojp+V2ViUHJvY2VzcygpCiB7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVByb2Nl
c3MoY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
KQordm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplUHJvY2Vzcyhjb25zdCBBdXhpbGlhcnlQcm9j
ZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewogICAgIFdURjo6c2V0
UHJvY2Vzc1ByaXZpbGVnZXMoeyB9KTsKIApAQCAtMjM0LDEwICsyMzQsMTAgQEAgdm9pZCBXZWJQ
cm9jZXNzOjppbml0aWFsaXplUHJvY2Vzcyhjb25zdAogCiB2b2lkIFdlYlByb2Nlc3M6OmluaXRp
YWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbikKIHsKLSAgICBDaGls
ZFByb2Nlc3M6OmluaXRpYWxpemVDb25uZWN0aW9uKGNvbm5lY3Rpb24pOworICAgIEF1eGlsaWFy
eVByb2Nlc3M6OmluaXRpYWxpemVDb25uZWN0aW9uKGNvbm5lY3Rpb24pOwogCiAgICAgLy8gV2Ug
Y2FsbCBfZXhpdCgpIGRpcmVjdGx5IGZyb20gdGhlIGJhY2tncm91bmQgcXVldWUgaW4gY2FzZSB0
aGUgbWFpbiB0aHJlYWQgaXMgdW5yZXNwb25zaXZlCi0gICAgLy8gYW5kIENoaWxkUHJvY2Vzczo6
ZGlkQ2xvc2UoKSBkb2VzIG5vdCBnZXQgY2FsbGVkLgorICAgIC8vIGFuZCBBdXhpbGlhcnlQcm9j
ZXNzOjpkaWRDbG9zZSgpIGRvZXMgbm90IGdldCBjYWxsZWQuCiAgICAgY29ubmVjdGlvbi0+c2V0
RGlkQ2xvc2VPbkNvbm5lY3Rpb25Xb3JrUXVldWVDYWxsYmFjayhjYWxsRXhpdCk7CiAKICNpZiAh
UExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV1BFKQpAQCAtNjYxLDcgKzY2MSw3IEBAIHZvaWQg
V2ViUHJvY2Vzczo6dGVybWluYXRlKCkKIAogICAgIHBsYXRmb3JtVGVybWluYXRlKCk7CiAKLSAg
ICBDaGlsZFByb2Nlc3M6OnRlcm1pbmF0ZSgpOworICAgIEF1eGlsaWFyeVByb2Nlc3M6OnRlcm1p
bmF0ZSgpOwogfQogCiB2b2lkIFdlYlByb2Nlc3M6OmRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlx
dWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKQEAgLTY4Miw4ICs2ODIsOCBAQCB2
b2lkIFdlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2Fn
ZXM6OkNoaWxkUHJvY2Vzczo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7Ci0gICAgICAgIENoaWxk
UHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CisgICAgaWYg
KGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9j
ZXNzOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKKyAgICAgICAgQXV4aWxpYXJ5UHJvY2Vzczo6
ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTEzMjgsMTUgKzEzMjgsMTUgQEAgdm9pZCBXZWJQcm9jZXNzOjpzZXRIaWRk
ZW5QYWdlRE9NVGltZXJUaAogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQotdm9pZCBXZWJQcm9j
ZXNzOjppbml0aWFsaXplUHJvY2Vzc05hbWUoY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRp
b25QYXJhbWV0ZXJzJikKK3ZvaWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVByb2Nlc3NOYW1lKGNv
bnN0IEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmKQogewogfQogCi12
b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVTYW5kYm94KGNvbnN0IENoaWxkUHJvY2Vzc0luaXRp
YWxpemF0aW9uUGFyYW1ldGVycyYsIFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmKQor
dm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplU2FuZGJveChjb25zdCBBdXhpbGlhcnlQcm9jZXNz
SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiwgU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVy
cyYpCiB7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplUHJvY2Vzcyhj
b25zdCBDaGlsZFByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmKQordm9pZCBXZWJQcm9j
ZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVQcm9jZXNzKGNvbnN0IEF1eGlsaWFyeVByb2Nlc3NJbml0
aWFsaXphdGlvblBhcmFtZXRlcnMmKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmgJKHJldmlzaW9uIDI0MDU4OSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDggQEAKIAogI3By
YWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBdXhpbGlhcnlQcm9jZXNzLmgiCiAjaW5jbHVkZSAiQ2Fj
aGVNb2RlbC5oIgotI2luY2x1ZGUgIkNoaWxkUHJvY2Vzcy5oIgogI2luY2x1ZGUgIlBsdWdpblBy
b2Nlc3NDb25uZWN0aW9uTWFuYWdlci5oIgogI2luY2x1ZGUgIlJlc291cmNlQ2FjaGVzVG9DbGVh
ci5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKQEAgLTEwNSw3ICsxMDUsNyBAQCBz
dHJ1Y3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKIHN0cnVjdCBXZWJzaXRlRGF0YTsK
IHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczsKIAotY2xhc3MgV2ViUHJvY2VzcyA6
IHB1YmxpYyBDaGlsZFByb2Nlc3MgeworY2xhc3MgV2ViUHJvY2VzcyA6IHB1YmxpYyBBdXhpbGlh
cnlQcm9jZXNzIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgV2ViUHJvY2VzcyYgc2luZ2xldG9uKCk7
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBQcm9jZXNzVHlwZSBwcm9jZXNzVHlwZSA9IFByb2Nlc3NU
eXBlOjpXZWJDb250ZW50OwpAQCAtMzU0LDEwICszNTQsMTAgQEAgcHJpdmF0ZToKICAgICBlbnVt
IGNsYXNzIENQVU1vbml0b3JVcGRhdGVSZWFzb24geyBMaW1pdEhhc0NoYW5nZWQsIFZpc2liaWxp
dHlIYXNDaGFuZ2VkIH07CiAgICAgdm9pZCB1cGRhdGVDUFVNb25pdG9yU3RhdGUoQ1BVTW9uaXRv
clVwZGF0ZVJlYXNvbik7CiAKLSAgICAvLyBDaGlsZFByb2Nlc3MKLSAgICB2b2lkIGluaXRpYWxp
emVQcm9jZXNzKGNvbnN0IENoaWxkUHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYpIG92
ZXJyaWRlOwotICAgIHZvaWQgaW5pdGlhbGl6ZVByb2Nlc3NOYW1lKGNvbnN0IENoaWxkUHJvY2Vz
c0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYpIG92ZXJyaWRlOwotICAgIHZvaWQgaW5pdGlhbGl6
ZVNhbmRib3goY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiwgU2Fu
ZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycyYpIG92ZXJyaWRlOworICAgIC8vIEF1eGlsaWFy
eVByb2Nlc3MKKyAgICB2b2lkIGluaXRpYWxpemVQcm9jZXNzKGNvbnN0IEF1eGlsaWFyeVByb2Nl
c3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmKSBvdmVycmlkZTsKKyAgICB2b2lkIGluaXRpYWxp
emVQcm9jZXNzTmFtZShjb25zdCBBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0
ZXJzJikgb3ZlcnJpZGU7CisgICAgdm9pZCBpbml0aWFsaXplU2FuZGJveChjb25zdCBBdXhpbGlh
cnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiwgU2FuZGJveEluaXRpYWxpemF0aW9u
UGFyYW1ldGVycyYpIG92ZXJyaWRlOwogICAgIHZvaWQgaW5pdGlhbGl6ZUNvbm5lY3Rpb24oSVBD
OjpDb25uZWN0aW9uKikgb3ZlcnJpZGU7CiAgICAgYm9vbCBzaG91bGRUZXJtaW5hdGUoKSBvdmVy
cmlkZTsKICAgICB2b2lkIHRlcm1pbmF0ZSgpIG92ZXJyaWRlOwpAQCAtMzczLDcgKzM3Myw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCByZXNldE1vY2tNZWRpYURldmljZXMoKTsKICNlbmRpZgogCi0g
ICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVQcm9jZXNzKGNvbnN0IENoaWxkUHJvY2Vzc0luaXRp
YWxpemF0aW9uUGFyYW1ldGVycyYpOworICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplUHJvY2Vz
cyhjb25zdCBBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJik7CiAKICAg
ICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAogICAgIGZyaWVuZCBjbGFzcyBXZWJDb25uZWN0
aW9uVG9VSVByb2Nlc3M7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vz
c1N1cHBsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UHJvY2Vzc1N1cHBsZW1lbnQuaAkocmV2aXNpb24gMjQwNTg5KQorKysgU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlByb2Nlc3NTdXBwbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDE2
ICsyMywxNSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNp
Zm5kZWYgV2ViUHJvY2Vzc1N1cHBsZW1lbnRfaAotI2RlZmluZSBXZWJQcm9jZXNzU3VwcGxlbWVu
dF9oCisjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkNoaWxkUHJvY2Vzc1N1cHBsZW1lbnQuaCIK
KyNpbmNsdWRlICJBdXhpbGlhcnlQcm9jZXNzU3VwcGxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogc3RydWN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM7CiAKLWNsYXNzIFdl
YlByb2Nlc3NTdXBwbGVtZW50IDogcHVibGljIENoaWxkUHJvY2Vzc1N1cHBsZW1lbnQgeworY2xh
c3MgV2ViUHJvY2Vzc1N1cHBsZW1lbnQgOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc1N1cHBsZW1l
bnQgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKGNvbnN0IFdlYlByb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMmKQogICAgIHsKQEAgLTQwLDUgKzM5LDMgQEAgcHVibGljOgog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJQcm9jZXNzU3VwcGxl
bWVudF9oCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0Nv
Y29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQ
cm9jZXNzQ29jb2EubW0JKHJldmlzaW9uIDI0MDU4OSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTIwOCw3ICsy
MDgsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByCiAjZW5kaWYK
IH0KIAotdm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplUHJvY2Vzc05hbWUoY29uc3QgQ2hpbGRQ
cm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJikKK3ZvaWQgV2ViUHJvY2Vzczo6aW5pdGlh
bGl6ZVByb2Nlc3NOYW1lKGNvbnN0IEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFt
ZXRlcnMmKQogewogI2lmIFBMQVRGT1JNKE1BQykKICAgICB1cGRhdGVQcm9jZXNzTmFtZSgpOwpA
QCAtMzQ4LDcgKzM0OCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6cmVnaXN0ZXJXaXRoU3RhdGVEdW1w
ZXIKIH0KICNlbmRpZgogCi12b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVByb2Nl
c3MoY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
KQordm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVQcm9jZXNzKGNvbnN0IEF1eGls
aWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAjaWYg
UExBVEZPUk0oTUFDKQogI2lmIEVOQUJMRShXRUJQUk9DRVNTX1dJTkRPV1NFUlZFUl9CTE9DS0lO
RykKQEAgLTQwMiw5ICs0MDIsOSBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6
ZVByb2NlCiB2b2lkIFdlYlByb2Nlc3M6OnN0b3BSdW5Mb29wKCkKIHsKICNpZiBQTEFURk9STShN
QUMpICYmIEVOQUJMRShXRUJQUk9DRVNTX05TUlVOTE9PUCkKLSAgICBDaGlsZFByb2Nlc3M6OnN0
b3BOU1J1bkxvb3AoKTsKKyAgICBBdXhpbGlhcnlQcm9jZXNzOjpzdG9wTlNSdW5Mb29wKCk7CiAj
ZWxzZQotICAgIENoaWxkUHJvY2Vzczo6c3RvcE5TQXBwUnVuTG9vcCgpOworICAgIEF1eGlsaWFy
eVByb2Nlc3M6OnN0b3BOU0FwcFJ1bkxvb3AoKTsKICNlbmRpZgogfQogI2VuZGlmCkBAIC00Mjks
NyArNDI5LDcgQEAgUmV0YWluUHRyPENGRGF0YVJlZj4gV2ViUHJvY2Vzczo6c291cmNlQQogI2Vu
ZGlmCiB9CiAKLXZvaWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVNhbmRib3goY29uc3QgQ2hpbGRQ
cm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBTYW5kYm94SW5pdGlh
bGl6YXRpb25QYXJhbWV0ZXJzJiBzYW5kYm94UGFyYW1ldGVycykKK3ZvaWQgV2ViUHJvY2Vzczo6
aW5pdGlhbGl6ZVNhbmRib3goY29uc3QgQXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFy
YW1ldGVycyYgcGFyYW1ldGVycywgU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycyYgc2Fu
ZGJveFBhcmFtZXRlcnMpCiB7CiAjaWYgRU5BQkxFKFdFQl9QUk9DRVNTX1NBTkRCT1gpCiAjaWYg
RU5BQkxFKE1BTlVBTF9TQU5EQk9YSU5HKQpAQCAtNDQ0LDcgKzQ0NCw3IEBAIHZvaWQgV2ViUHJv
Y2Vzczo6aW5pdGlhbGl6ZVNhbmRib3goY29uc3QKICNlbHNlCiAgICAgc2FuZGJveFBhcmFtZXRl
cnMuc2V0T3ZlcnJpZGVTYW5kYm94UHJvZmlsZVBhdGgoW3dlYktpdDJCdW5kbGUgcGF0aEZvclJl
c291cmNlOkAiY29tLmFwcGxlLldlYlByb2Nlc3MiIG9mVHlwZTpAInNiIl0pOwogI2VuZGlmCi0g
ICAgQ2hpbGRQcm9jZXNzOjppbml0aWFsaXplU2FuZGJveChwYXJhbWV0ZXJzLCBzYW5kYm94UGFy
YW1ldGVycyk7CisgICAgQXV4aWxpYXJ5UHJvY2Vzczo6aW5pdGlhbGl6ZVNhbmRib3gocGFyYW1l
dGVycywgc2FuZGJveFBhcmFtZXRlcnMpOwogI2VuZGlmCiAjZWxzZQogICAgIFVOVVNFRF9QQVJB
TShwYXJhbWV0ZXJzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9ndGsvV2ViUHJv
Y2Vzc01haW5HdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9n
dGsvV2ViUHJvY2Vzc01haW5HdGsuY3BwCShyZXZpc2lvbiAyNDA1ODkpCisrKyBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NNYWluR3RrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYlByb2Nl
c3NNYWluVW5peC5oIgogCi0jaW5jbHVkZSAiQ2hpbGRQcm9jZXNzTWFpbi5oIgorI2luY2x1ZGUg
IkF1eGlsaWFyeVByb2Nlc3NNYWluLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1
ZGUgPFdlYkNvcmUvU291cE5ldHdvcmtTZXNzaW9uLmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgpA
QCAtNDEsNyArNDEsNyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAotY2xhc3MgV2ViUHJvY2Vzc01haW4gZmluYWw6IHB1YmxpYyBDaGlsZFByb2Nlc3NN
YWluQmFzZSB7CitjbGFzcyBXZWJQcm9jZXNzTWFpbiBmaW5hbDogcHVibGljIEF1eGlsaWFyeVBy
b2Nlc3NNYWluQmFzZSB7CiBwdWJsaWM6CiAgICAgYm9vbCBwbGF0Zm9ybUluaXRpYWxpemUoKSBv
dmVycmlkZQogICAgIHsKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogCiBpbnQgV2ViUHJvY2Vz
c01haW5Vbml4KGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKLSAgICByZXR1cm4gQ2hpbGRQcm9j
ZXNzTWFpbjxXZWJQcm9jZXNzLCBXZWJQcm9jZXNzTWFpbj4oYXJnYywgYXJndik7CisgICAgcmV0
dXJuIEF1eGlsaWFyeVByb2Nlc3NNYWluPFdlYlByb2Nlc3MsIFdlYlByb2Nlc3NNYWluPihhcmdj
LCBhcmd2KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NNYWluV2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NNYWluV2luLmNwcAkocmV2aXNpb24g
MjQwNTg5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL3dpbi9XZWJQcm9jZXNzTWFpbldp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsyNiwxMyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NNYWluV2luLmgiCiAKLSNpbmNsdWRlICJDaGlsZFBy
b2Nlc3NNYWluLmgiCisjaW5jbHVkZSAiQXV4aWxpYXJ5UHJvY2Vzc01haW4uaCIKICNpbmNsdWRl
ICJXZWJQcm9jZXNzLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKLWNsYXNzIFdlYlByb2Nlc3NNYWluIGZpbmFsIDogcHVibGljIENoaWxkUHJvY2Vz
c01haW5CYXNlIHsKK2NsYXNzIFdlYlByb2Nlc3NNYWluIGZpbmFsIDogcHVibGljIEF1eGlsaWFy
eVByb2Nlc3NNYWluQmFzZSB7CiBwdWJsaWM6CiAgICAgYm9vbCBwbGF0Zm9ybUluaXRpYWxpemUo
KSBvdmVycmlkZQogICAgIHsKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogCiBpbnQgV2ViUHJv
Y2Vzc01haW5XaW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewotICAgIHJldHVybiBDaGlsZFBy
b2Nlc3NNYWluPFdlYlByb2Nlc3MsIFdlYlByb2Nlc3NNYWluPihhcmdjLCBhcmd2KTsKKyAgICBy
ZXR1cm4gQXV4aWxpYXJ5UHJvY2Vzc01haW48V2ViUHJvY2VzcywgV2ViUHJvY2Vzc01haW4+KGFy
Z2MsIGFyZ3YpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy93cGUvV2ViUHJvY2Vzc01haW5XUEUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy93cGUvV2ViUHJvY2Vzc01haW5XUEUuY3BwCShyZXZpc2lv
biAyNDA1ODkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mvd3BlL1dlYlByb2Nlc3NNYWlu
V1BFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NNYWluVW5peC5oIgogCi0jaW5jbHVkZSAiQ2hpbGRQ
cm9jZXNzTWFpbi5oIgorI2luY2x1ZGUgIkF1eGlsaWFyeVByb2Nlc3NNYWluLmgiCiAjaW5jbHVk
ZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1EaXNwbGF5TGliV1BF
Lmg+CiAjaW5jbHVkZSA8Z2xpYi5oPgpAQCAtMzgsNyArMzgsNyBAQAogbmFtZXNwYWNlIFdlYktp
dCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotY2xhc3MgV2ViUHJvY2Vzc01haW4gZmlu
YWwgOiBwdWJsaWMgQ2hpbGRQcm9jZXNzTWFpbkJhc2UgeworY2xhc3MgV2ViUHJvY2Vzc01haW4g
ZmluYWwgOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc01haW5CYXNlIHsKIHB1YmxpYzoKICAgICBi
b29sIHBsYXRmb3JtSW5pdGlhbGl6ZSgpIG92ZXJyaWRlCiAgICAgewpAQCAtNjAsNyArNjAsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChhcmdjIDwgNSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICBpZiAoIUNoaWxkUHJvY2Vzc01haW5CYXNlOjpwYXJzZUNvbW1hbmRMaW5l
KGFyZ2MsIGFyZ3YpKQorICAgICAgICBpZiAoIUF1eGlsaWFyeVByb2Nlc3NNYWluQmFzZTo6cGFy
c2VDb21tYW5kTGluZShhcmdjLCBhcmd2KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
I2lmIGRlZmluZWQoV1BFX0JBQ0tFTkRfQ0hFQ0tfVkVSU0lPTikgJiYgV1BFX0JBQ0tFTkRfQ0hF
Q0tfVkVSU0lPTigwLCAyLCAwKQpAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAKIGludCBXZWJQ
cm9jZXNzTWFpblVuaXgoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewotICAgIHJldHVybiBDaGls
ZFByb2Nlc3NNYWluPFdlYlByb2Nlc3MsIFdlYlByb2Nlc3NNYWluPihhcmdjLCBhcmd2KTsKKyAg
ICByZXR1cm4gQXV4aWxpYXJ5UHJvY2Vzc01haW48V2ViUHJvY2VzcywgV2ViUHJvY2Vzc01haW4+
KGFyZ2MsIGFyZ3YpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>
<flag name="review"
          id="377119"
          type_id="1"
          status="+"
          setter="aestes"
    />
          </attachment>
      

    </bug>

</bugzilla>