<?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>193252</bug_id>
          
          <creation_ts>2019-01-08 13:02:42 -0800</creation_ts>
          <short_desc>Move ResourceLoadStatistics files from UIProcess to NetworkProcess</short_desc>
          <delta_ts>2019-01-08 14:02:27 -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>WebKit2</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>
          
          <blocked>193199</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1492707</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-01-08 13:02:42 -0800</bug_when>
    <thetext>This patch is the first part of a refactoring to move the ResourceLoadStatistics logic from the UIProcess to the NetworkProcess.

This patch moves code into different folders and adjusts necessary build files, but does not change where the code executes.

A few files were modified to add include files that were needed after these moves, due to vagaries of the unified build system.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492708</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-01-08 13:04:31 -0800</bug_when>
    <thetext>&lt;rdar://problem/47125401&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492712</commentid>
    <comment_count>2</comment_count>
      <attachid>358627</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-01-08 13:11:27 -0800</bug_when>
    <thetext>Created attachment 358627
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492715</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-08 13:15:13 -0800</bug_when>
    <thetext>Attachment 358627 did not pass style-queue:


ERROR: Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:219:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:444:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:521:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:567:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:579:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:620:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:414:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 7 in 25 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>1492729</commentid>
    <comment_count>4</comment_count>
      <attachid>358629</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-01-08 13:25:32 -0800</bug_when>
    <thetext>Created attachment 358629
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492732</commentid>
    <comment_count>5</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-08 13:30:40 -0800</bug_when>
    <thetext>Attachment 358629 did not pass style-queue:


ERROR: Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:219:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:444:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:521:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:567:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:579:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:620:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:411:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 7 in 25 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>1492739</commentid>
    <comment_count>6</comment_count>
      <attachid>358632</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-01-08 13:35:49 -0800</bug_when>
    <thetext>Created attachment 358632
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492742</commentid>
    <comment_count>7</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-08 13:38:09 -0800</bug_when>
    <thetext>Attachment 358632 did not pass style-queue:


ERROR: Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:219:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:444:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:521:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:567:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:579:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:620:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:411:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 7 in 26 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>1492751</commentid>
    <comment_count>8</comment_count>
      <attachid>358632</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-08 14:02:26 -0800</bug_when>
    <thetext>Comment on attachment 358632
Patch for landing

Clearing flags on attachment: 358632

Committed r239747: &lt;https://trac.webkit.org/changeset/239747&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492752</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-08 14:02:27 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358627</attachid>
            <date>2019-01-08 13:11:27 -0800</date>
            <delta_ts>2019-01-08 13:25:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193252-20190108131125.patch</filename>
            <type>text/plain</type>
            <size>350850</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5NzA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDEzMTlkZGUxNzlhM2M0NzAz
OGY3NGRmMTM4ZmQ0OTRmMmI1NzQwZWMuLmI2MjhjOTk2YTBjNDAwZDNiN2M3MTQwNGQ2NzZjZTdl
NzJkYjc2ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTktMDEtMDggIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzIGZpbGVzIGZyb20gVUlQcm9jZXNzIHRvIE5ldHdvcmtQcm9jZXNzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTMyNTIKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzQ3MTI1NDAxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgdGhlIGZpcnN0IHBhcnQgb2YgYSByZWZh
Y3RvcmluZyB0byBtb3ZlIHRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIGxvZ2ljIGZyb20gdGhl
IFVJUHJvY2VzcyB0byB0aGUgTmV0d29ya1Byb2Nlc3MuCisKKyAgICAgICAgVGhpcyBwYXRjaCBt
b3ZlcyBjb2RlIGludG8gZGlmZmVyZW50IGZvbGRlcnMgYW5kIGFkanVzdHMgbmVjZXNzYXJ5IGJ1
aWxkIGZpbGVzLCBidXQgZG9lcyBub3QgY2hhbmdlIHdoZXJlIHRoZSBjb2RlIGV4ZWN1dGVzLiBU
aGVzZQorICAgICAgICBjaGFuZ2VzIGhhdmUgbm8gaW1wYWN0IG9uIGJlaGF2aW9yIG9yIHRlc3Qg
cmVzdWx0cy4KKworICAgICAgICBJIGFsc28gbW9kaWZpZWQgYSBmZXcgZmlsZXMgdG8gYWRkIG1p
c3NpbmcgaW5jbHVkZSBmaWxlcyB1bmNvdmVyZWQgYnkgdGhlIHVuaWZpZWQgYnVpbGQgc3lzdGVt
LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcC4KKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5o
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlLmguCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRT
dG9yYWdlLmNwcC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmgu
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmguCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGVsZW1ldHJ5LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwLgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRy
eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1RlbGVtZXRyeS5oLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fk
cy9QZW5kaW5nRG93bmxvYWQuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fk
cy9QZW5kaW5nRG93bmxvYWQuaDoKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAgICAg
ICAgKiBQbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBTaGFyZWQvUGVyc2lzdGVuY3lVdGls
cy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QZXJzaXN0ZW5jeVV0
aWxzLmNwcC4KKyAgICAgICAgKiBTaGFyZWQvUGVyc2lzdGVuY3lVdGlscy5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGVyc2lzdGVuY3lVdGlscy5oLgorICAgICAgICAq
IFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogU291
cmNlc0dUSy50eHQ6CisgICAgICAgICogU291cmNlc1dQRS50eHQ6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHA6CisgICAgICAgIChXS1dlYnNpdGVE
YXRhU3RvcmVTZXRXZWJBdXRoZW50aWNhdGlvbk1vY2tDb25maWd1cmF0aW9uKTogQWRkIG1pc3Np
bmcgV2ViS2l0Ojogc2NvcGUuCisgICAgICAgICogVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcDogQWRkIG1pc3NpbmcgaW5jbHVkZS4KKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViRGF0YUxpc3RTdWdnZXN0aW9uc0Ryb3Bkb3duLmNwcDogRGl0dG8uCisg
ICAgICAgICogVUlQcm9jZXNzL21hYy9EaXNwbGF5TGluay5jcHA6CisgICAgICAgICogVW5pZmll
ZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKwogMjAxOS0wMS0wNyAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5j
b20+CiAKICAgICAgICAgVHVybiBvbiBQb2ludGVyIEV2ZW50cyBieSBkZWZhdWx0IGZvciBpT1MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uODI0Yzk0N2M3MDUyN2U2MTkyZjM2ZGFjNzM5OTVlNTY5YzcwY2MwMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCkBAIC0wLDAgKzEsMTI5NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oIgorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgIlBsdWdpblByb2Nlc3NNYW5hZ2VyLmgiCisjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc1By
b3h5LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdl
LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0tleWVkQ29kaW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzLmg+CisjaW5jbHVkZSA8d3RmL0NhbGxiYWNrQWdncmVnYXRvci5o
PgorI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworY29uc3RleHByIHVuc2lnbmVkIHN0YXRpc3RpY3NNb2RlbFZlcnNpb24geyAx
NCB9OworY29uc3RleHByIHVuc2lnbmVkIG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGly
ZWN0VHJhY2VCYWNrIHsgNTAgfTsKK2NvbnN0ZXhwciBTZWNvbmRzIG1pbmltdW1TdGF0aXN0aWNz
UHJvY2Vzc2luZ0ludGVydmFsIHsgNV9zIH07Citjb25zdGV4cHIgdW5zaWduZWQgb3BlcmF0aW5n
RGF0ZXNXaW5kb3cgeyAzMCB9OworY29uc3RleHByIHVuc2lnbmVkIG1heEltcG9ydGFuY2UgeyAz
IH07CitzdGF0aWMgY29uc3QgY2hhciogZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSB7ICIz
cmRwYXJ0eXRlc3R3ZWJraXQub3JnIiB9OworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECitz
dGF0aWMgU3RyaW5nIGRvbWFpbnNUb1N0cmluZyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlu
cykKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgZm9yIChhdXRvJiBkb21haW4g
OiBkb21haW5zKSB7CisgICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkpCisgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGRv
bWFpbik7CisgICAgfQorICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisjZW5kaWYK
KworY2xhc3MgT3BlcmF0aW5nRGF0ZSB7CitwdWJsaWM6CisgICAgT3BlcmF0aW5nRGF0ZSgpID0g
ZGVmYXVsdDsKKworICAgIHN0YXRpYyBPcGVyYXRpbmdEYXRlIGZyb21XYWxsVGltZShXYWxsVGlt
ZSB0aW1lKQorICAgIHsKKyAgICAgICAgZG91YmxlIG1zID0gdGltZS5zZWNvbmRzU2luY2VFcG9j
aCgpLm1pbGxpc2Vjb25kcygpOworICAgICAgICBpbnQgeWVhciA9IG1zVG9ZZWFyKG1zKTsKKyAg
ICAgICAgaW50IHllYXJEYXkgPSBkYXlJblllYXIobXMsIHllYXIpOworICAgICAgICBpbnQgbW9u
dGggPSBtb250aEZyb21EYXlJblllYXIoeWVhckRheSwgaXNMZWFwWWVhcih5ZWFyKSk7CisgICAg
ICAgIGludCBtb250aERheSA9IGRheUluTW9udGhGcm9tRGF5SW5ZZWFyKHllYXJEYXksIGlzTGVh
cFllYXIoeWVhcikpOworCisgICAgICAgIHJldHVybiBPcGVyYXRpbmdEYXRlIHsgeWVhciwgbW9u
dGgsIG1vbnRoRGF5IH07CisgICAgfQorCisgICAgc3RhdGljIE9wZXJhdGluZ0RhdGUgdG9kYXko
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZShXYWxs
VGltZTo6bm93KCkpOworICAgIH0KKworICAgIFNlY29uZHMgc2Vjb25kc1NpbmNlRXBvY2goKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHMgeyBkYXRlVG9EYXlzRnJvbTE5NzAo
bV95ZWFyLCBtX21vbnRoLCBtX21vbnRoRGF5KSAqIHNlY29uZHNQZXJEYXkgfTsKKyAgICB9CisK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9tb250aERheSA9PSBvdGhlci5tX21vbnRoRGF5ICYmIG1f
bW9udGggPT0gb3RoZXIubV9tb250aCAmJiBtX3llYXIgPT0gb3RoZXIubV95ZWFyOworICAgIH0K
KworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wZXJhdGluZ0RhdGUmIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHNlY29uZHNTaW5jZUVwb2NoKCkgPCBvdGhlci5zZWNvbmRz
U2luY2VFcG9jaCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBPcGVyYXRp
bmdEYXRlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzZWNvbmRzU2luY2VF
cG9jaCgpIDw9IG90aGVyLnNlY29uZHNTaW5jZUVwb2NoKCk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIE9wZXJhdGluZ0RhdGUoaW50IHllYXIsIGludCBtb250aCwgaW50IG1vbnRoRGF5KQorICAg
ICAgICA6IG1feWVhcih5ZWFyKQorICAgICAgICAsIG1fbW9udGgobW9udGgpCisgICAgICAgICwg
bV9tb250aERheShtb250aERheSkKKyAgICB7IH0KKworICAgIGludCBtX3llYXIgeyAwIH07Cisg
ICAgaW50IG1fbW9udGggeyAwIH07IC8vIFswLCAxMV0uCisgICAgaW50IG1fbW9udGhEYXkgeyAw
IH07IC8vIFsxLCAzMV0uCit9OworCitzdGF0aWMgVmVjdG9yPE9wZXJhdGluZ0RhdGU+IG1lcmdl
T3BlcmF0aW5nRGF0ZXMoY29uc3QgVmVjdG9yPE9wZXJhdGluZ0RhdGU+JiBleGlzdGluZ0RhdGVz
LCBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4mJiBuZXdEYXRlcykKK3sKKyAgICBpZiAoZXhpc3RpbmdE
YXRlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBXVEZNb3ZlKG5ld0RhdGVzKTsKKworICAg
IFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtZXJnZWREYXRlcyhleGlzdGluZ0RhdGVzLnNpemUoKSAr
IG5ld0RhdGVzLnNpemUoKSk7CisKKyAgICAvLyBNZXJnZSB0aGUgdHdvIHNvcnRlZCB2ZWN0b3Jz
IG9mIGRhdGVzLgorICAgIHN0ZDo6bWVyZ2UoZXhpc3RpbmdEYXRlcy5iZWdpbigpLCBleGlzdGlu
Z0RhdGVzLmVuZCgpLCBuZXdEYXRlcy5iZWdpbigpLCBuZXdEYXRlcy5lbmQoKSwgbWVyZ2VkRGF0
ZXMuYmVnaW4oKSk7CisgICAgLy8gUmVtb3ZlIGR1cGxpY2F0ZSBkYXRlcy4KKyAgICByZW1vdmVS
ZXBlYXRlZEVsZW1lbnRzKG1lcmdlZERhdGVzKTsKKworICAgIC8vIERyb3Agb2xkIGRhdGVzIHVu
dGlsIHRoZSBWZWN0b3Igc2l6ZSByZWFjaGVzIG9wZXJhdGluZ0RhdGVzV2luZG93LgorICAgIHdo
aWxlIChtZXJnZWREYXRlcy5zaXplKCkgPiBvcGVyYXRpbmdEYXRlc1dpbmRvdykKKyAgICAgICAg
bWVyZ2VkRGF0ZXMucmVtb3ZlKDApOworCisgICAgcmV0dXJuIG1lcmdlZERhdGVzOworfQorCitz
dHJ1Y3QgU3RhdGlzdGljc0xhc3RTZWVuIHsKKyAgICBTdHJpbmcgdG9wUHJpdmF0ZWx5T3duZWRE
b21haW47CisgICAgV2FsbFRpbWUgbGFzdFNlZW47Cit9OworCitzdGF0aWMgdm9pZCBwcnVuZVJl
c291cmNlcyhIYXNoTWFwPFN0cmluZywgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4m
IHN0YXRpc3RpY3NNYXAsIFZlY3RvcjxTdGF0aXN0aWNzTGFzdFNlZW4+JiBzdGF0aXN0aWNzVG9Q
cnVuZSwgc2l6ZV90JiBudW1iZXJPZkVudHJpZXNUb1BydW5lKQoreworICAgIGlmIChzdGF0aXN0
aWNzVG9QcnVuZS5zaXplKCkgPiBudW1iZXJPZkVudHJpZXNUb1BydW5lKSB7CisgICAgICAgIHN0
ZDo6c29ydChzdGF0aXN0aWNzVG9QcnVuZS5iZWdpbigpLCBzdGF0aXN0aWNzVG9QcnVuZS5lbmQo
KSwgW10oY29uc3QgU3RhdGlzdGljc0xhc3RTZWVuJiBhLCBjb25zdCBTdGF0aXN0aWNzTGFzdFNl
ZW4mIGIpIHsKKyAgICAgICAgICAgIHJldHVybiBhLmxhc3RTZWVuIDwgYi5sYXN0U2VlbjsKKyAg
ICAgICAgfSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDAsIGVuZCA9IHN0ZDo6bWlu
KG51bWJlck9mRW50cmllc1RvUHJ1bmUsIHN0YXRpc3RpY3NUb1BydW5lLnNpemUoKSk7IGkgIT0g
ZW5kOyArK2ksIC0tbnVtYmVyT2ZFbnRyaWVzVG9QcnVuZSkKKyAgICAgICAgc3RhdGlzdGljc01h
cC5yZW1vdmUoc3RhdGlzdGljc1RvUHJ1bmVbaV0udG9wUHJpdmF0ZWx5T3duZWREb21haW4pOwor
fQorCitzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUltcG9ydGFuY2UoY29uc3QgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpCit7CisgICAgdW5zaWduZWQgaW1wb3J0YW5j
ZSA9IG1heEltcG9ydGFuY2U7CisgICAgaWYgKCFyZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVu
dFJlc291cmNlKQorICAgICAgICBpbXBvcnRhbmNlIC09IDE7CisgICAgaWYgKCFyZXNvdXJjZVN0
YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgIGltcG9ydGFuY2UgLT0gMjsKKyAg
ICByZXR1cm4gaW1wb3J0YW5jZTsKK30KKworUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUoV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlJiBzdG9yZSwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCisgICAgOiBtX3N0b3Jl
KHN0b3JlKQorICAgICwgbV93b3JrUXVldWUod29ya1F1ZXVlKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcmVnaXN0ZXJVc2Vy
RGVmYXVsdHNJZk5lZWRlZCgpOworI2VuZGlmCisgICAgaW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdE
YXRlSWZOZWNlc3NhcnkoKTsKKworICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaEFmdGVyKDVfcywg
W3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXSB7CisgICAgICAgIGlmICh3ZWFrVGhpcykK
KyAgICAgICAgICAgIHdlYWtUaGlzLT5jYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkoKTsKKyAg
ICB9KTsKK30KKworUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjp+UmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFBl
cnNpc3RlbnRTdG9yYWdlKFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZSYg
cGVyc2lzdGVudFN0b3JhZ2UpCit7CisgICAgbV9wZXJzaXN0ZW50U3RvcmFnZSA9IG1ha2VXZWFr
UHRyKHBlcnNpc3RlbnRTdG9yYWdlKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OmNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpIGNvbnN0Cit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAobV9wYXJhbWV0ZXJzLnNob3Vs
ZFN1Ym1pdFRlbGVtZXRyeSkKKyAgICAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVt
ZXRyeTo6Y2FsY3VsYXRlQW5kU3VibWl0KCp0aGlzKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNj
YW5uZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAg
ICBtX3BhcmFtZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5l
ZCA9IHZhbHVlOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2
YWx1ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBtX3BhcmFtZXRl
cnMuc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwgPSB2YWx1
ZTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFNob3Vs
ZFN1Ym1pdFRlbGVtZXRyeShib29sIHZhbHVlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworICAgIG1fcGFyYW1ldGVycy5zaG91bGRTdWJtaXRUZWxlbWV0cnkgPSB2YWx1ZTsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlbW92ZURhdGFS
ZWNvcmRzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmICghc2hvdWxkUmVtb3ZlRGF0YVJlY29y
ZHMoKSkgeworICAgICAgICBjYWxsYmFjaygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisj
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgbV9hY3RpdmVQbHVnaW5Ub2tlbnMu
Y2xlYXIoKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHBsdWdpbiA6IFBsdWdpblByb2Nlc3NNYW5h
Z2VyOjpzaW5nbGV0b24oKS5wbHVnaW5Qcm9jZXNzZXMoKSkKKyAgICAgICAgbV9hY3RpdmVQbHVn
aW5Ub2tlbnMuYWRkKHBsdWdpbi0+cGx1Z2luUHJvY2Vzc1Rva2VuKCkpOworI2VuZGlmCisKKyAg
ICBhdXRvIHByZXZhbGVudFJlc291cmNlRG9tYWlucyA9IHRvcFByaXZhdGVseUNvbnRyb2xsZWRE
b21haW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcigpOworICAgIGlmIChwcmV2YWxlbnRSZXNvdXJj
ZURvbWFpbnMuaXNFbXB0eSgpKSB7CisgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBSRUxFQVNFX0xPR19J
TkZPX0lGKG1fZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVn
LCAiQWJvdXQgdG8gcmVtb3ZlIGRhdGEgcmVjb3JkcyBmb3IgJXtwdWJsaWN9cy4iLCBkb21haW5z
VG9TdHJpbmcocHJldmFsZW50UmVzb3VyY2VEb21haW5zKS51dGY4KCkuZGF0YSgpKTsKKyNlbmRp
ZgorCisgICAgc2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQodHJ1ZSk7CisKKyAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goW3ByZXZhbGVudFJlc291cmNlRG9tYWlucyA9IGNyb3NzVGhyZWFk
Q29weShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgc2hvdWxkTm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZCA9IG1fcGFyYW1ldGVycy5zaG91bGROb3RpZnlQYWdlc1do
ZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLCB3b3JrUXVldWUgPSBtX3dvcmtRdWV1ZS5jb3B5UmVm
KCldICgpIG11dGFibGUgeworICAgICAgICBXZWJQcm9jZXNzUHJveHk6OmRlbGV0ZVdlYnNpdGVE
YXRhRm9yVG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNJbkFsbFBlcnNpc3RlbnREYXRhU3Rv
cmVzKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bW9uaXRvcmVkRGF0YVR5cGVzKCks
IFdURk1vdmUocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgc2hvdWxkTm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHdl
YWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIHdvcmtRdWV1ZSA9IHdvcmtRdWV1ZS5jb3B5UmVm
KCldKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgZG9tYWluc1dpdGhEZWxldGVkV2Vic2l0ZURhdGEp
IG11dGFibGUgeworICAgICAgICAgICAgd29ya1F1ZXVlLT5kaXNwYXRjaChbdG9wRG9tYWlucyA9
IGNyb3NzVGhyZWFkQ29weShkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSksIGNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayksIHdlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyldICgpIG11
dGFibGUgeworICAgICAgICAgICAgICAgIGlmICghd2Vha1RoaXMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHByZXZhbGVudFJlc291cmNlRG9t
YWluIDogdG9wRG9tYWlucykgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiBzdGF0aXN0aWMg
PSB3ZWFrVGhpcy0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmV2
YWxlbnRSZXNvdXJjZURvbWFpbik7CisgICAgICAgICAgICAgICAgICAgICsrc3RhdGlzdGljLmRh
dGFSZWNvcmRzUmVtb3ZlZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd2Vh
a1RoaXMtPnNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICBjYWxsYmFjaygpOworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICAgICAgICAgICAg
IFJFTEVBU0VfTE9HX0lORk9fSUYod2Vha1RoaXMtPm1fZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiRG9uZSByZW1vdmluZyBkYXRhIHJlY29yZHMuIik7
CisjZW5kaWYKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordW5z
aWduZWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZWN1cnNpdmVseUdldEFs
bERvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUb1RoaXNEb21haW4oY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMsIEhhc2hTZXQ8U3RyaW5nPiYg
ZG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvLCB1bnNpZ25lZCBudW1iZXJPZlJlY3Vyc2l2ZUNh
bGxzKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYg
KG51bWJlck9mUmVjdXJzaXZlQ2FsbHMgPj0gbWF4TnVtYmVyT2ZSZWN1cnNpdmVDYWxsc0luUmVk
aXJlY3RUcmFjZUJhY2spIHsKKyAgICAgICAgLy8gTW9kZWwgdmVyc2lvbiAxNCBpbnZva2VzIGEg
ZGVsaWJlcmF0ZSByZS1jbGFzc2lmaWNhdGlvbiBvZiB0aGUgd2hvbGUgc2V0LgorICAgICAgICBp
ZiAoc3RhdGlzdGljc01vZGVsVmVyc2lvbiAhPSAxNCkKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBSRUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAi
SGl0ICV1IHJlY3Vyc2l2ZSBjYWxscyBpbiByZWRpcmVjdCBiYWNrdHJhY2UuIFJldHVybmluZyBl
YXJseS4iLCBtYXhOdW1iZXJPZlJlY3Vyc2l2ZUNhbGxzSW5SZWRpcmVjdFRyYWNlQmFjayk7Cisg
ICAgICAgIHJldHVybiBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzOworICAgIH0KKworICAgIG51bWJl
ck9mUmVjdXJzaXZlQ2FsbHMrKzsKKworICAgIGZvciAoYXV0byYgc3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdEZyb21Eb21haW4gOiByZXNvdXJjZVN0YXRpc3RpYy5zdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c0Zyb20udmFsdWVzKCkpIHsKKyAgICAgICAgYXV0byBtYXBFbnRyeSA9IG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLmZpbmQoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb21Eb21haW4p
OworICAgICAgICBpZiAobWFwRW50cnkgPT0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5kKCkg
fHwgbWFwRW50cnktPnZhbHVlLmlzUHJldmFsZW50UmVzb3VyY2UpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgaWYgKGRvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUby5hZGQobWFwRW50
cnktPnZhbHVlLmhpZ2hMZXZlbERvbWFpbikuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgIG51bWJl
ck9mUmVjdXJzaXZlQ2FsbHMgPSByZWN1cnNpdmVseUdldEFsbERvbWFpbnNUaGF0SGF2ZVJlZGly
ZWN0ZWRUb1RoaXNEb21haW4obWFwRW50cnktPnZhbHVlLCBkb21haW5zVGhhdEhhdmVSZWRpcmVj
dGVkVG8sIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMpOworICAgIH0KKyAgICBmb3IgKGF1dG8mIHRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tRG9tYWluIDogcmVzb3VyY2VTdGF0aXN0aWMudG9wRnJh
bWVVbmlxdWVSZWRpcmVjdHNGcm9tLnZhbHVlcygpKSB7CisgICAgICAgIGF1dG8gbWFwRW50cnkg
PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5maW5kKHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9t
RG9tYWluKTsKKyAgICAgICAgaWYgKG1hcEVudHJ5ID09IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFw
LmVuZCgpIHx8IG1hcEVudHJ5LT52YWx1ZS5pc1ByZXZhbGVudFJlc291cmNlKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIGlmIChkb21haW5zVGhhdEhhdmVSZWRpcmVjdGVkVG8uYWRk
KG1hcEVudHJ5LT52YWx1ZS5oaWdoTGV2ZWxEb21haW4pLmlzTmV3RW50cnkpCisgICAgICAgICAg
ICBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzID0gcmVjdXJzaXZlbHlHZXRBbGxEb21haW5zVGhhdEhh
dmVSZWRpcmVjdGVkVG9UaGlzRG9tYWluKG1hcEVudHJ5LT52YWx1ZSwgZG9tYWluc1RoYXRIYXZl
UmVkaXJlY3RlZFRvLCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKTsKKyAgICB9CisKKyAgICByZXR1
cm4gbnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6Om1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50
KFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljKQorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKHJlc291cmNlU3RhdGlz
dGljLmlzUHJldmFsZW50UmVzb3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoYXV0
byYgc3VicmVzb3VyY2VEb21haW5SZWRpcmVjdGVkVG8gOiByZXNvdXJjZVN0YXRpc3RpYy5zdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnZhbHVlcygpKSB7CisgICAgICAgIGF1dG8gbWFwRW50
cnkgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5maW5kKHN1YnJlc291cmNlRG9tYWluUmVkaXJl
Y3RlZFRvKTsKKyAgICAgICAgaWYgKG1hcEVudHJ5ICE9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFw
LmVuZCgpICYmIG1hcEVudHJ5LT52YWx1ZS5pc1ByZXZhbGVudFJlc291cmNlKSB7CisgICAgICAg
ICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2Fk
UHJldmFsZW5jZTo6SGlnaCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmb3IgKGF1dG8mIHRvcEZyYW1lRG9tYWluUmVkaXJlY3RlZFRvIDogcmVzb3VyY2VT
dGF0aXN0aWMudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby52YWx1ZXMoKSkgeworICAgICAgICBh
dXRvIG1hcEVudHJ5ID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZmluZCh0b3BGcmFtZURvbWFp
blJlZGlyZWN0ZWRUbyk7CisgICAgICAgIGlmIChtYXBFbnRyeSAhPSBtX3Jlc291cmNlU3RhdGlz
dGljc01hcC5lbmQoKSAmJiBtYXBFbnRyeS0+dmFsdWUuaXNQcmV2YWxlbnRSZXNvdXJjZSkgewor
ICAgICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMsIFJlc291
cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQorfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNQ
cmV2YWxlbnREdWVUb0RlYnVnTW9kZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0
YXRpc3RpYykKK3sKKyAgICBpZiAoIW1fZGVidWdNb2RlRW5hYmxlZCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIHJlc291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFpbiA9
PSBkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlIHx8IHJlc291cmNlU3RhdGlzdGljLmhpZ2hM
ZXZlbERvbWFpbiA9PSBtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2U7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpwcm9jZXNzU3RhdGlzdGljc0FuZERh
dGFSZWNvcmRzKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlm
IChtX3BhcmFtZXRlcnMuc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1Jl
bW92YWwpIHsKKyAgICAgICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKSB7CisgICAgICAgICAgICBpZiAoaXNQcmV2YWxlbnRE
dWVUb0RlYnVnTW9kZShyZXNvdXJjZVN0YXRpc3RpYykpCisgICAgICAgICAgICAgICAgc2V0UHJl
dmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6
OkhpZ2gpOworICAgICAgICAgICAgZWxzZSBpZiAoIXJlc291cmNlU3RhdGlzdGljLmlzVmVyeVBy
ZXZhbGVudFJlc291cmNlKSB7CisgICAgICAgICAgICAgICAgbWFya0FzUHJldmFsZW50SWZIYXNS
ZWRpcmVjdGVkVG9QcmV2YWxlbnQocmVzb3VyY2VTdGF0aXN0aWMpOworICAgICAgICAgICAgICAg
IGF1dG8gY3VycmVudFByZXZhbGVuY2UgPSByZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJl
c291cmNlID8gUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCA6IFJlc291cmNlTG9hZFByZXZh
bGVuY2U6OkxvdzsKKyAgICAgICAgICAgICAgICBhdXRvIG5ld1ByZXZhbGVuY2UgPSBtX3Jlc291
cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmNhbGN1bGF0ZVJlc291cmNlUHJldmFsZW5jZShy
ZXNvdXJjZVN0YXRpc3RpYywgY3VycmVudFByZXZhbGVuY2UpOworICAgICAgICAgICAgICAgIGlm
IChuZXdQcmV2YWxlbmNlICE9IGN1cnJlbnRQcmV2YWxlbmNlKQorICAgICAgICAgICAgICAgICAg
ICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYywgbmV3UHJldmFsZW5jZSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZW1vdmVEYXRhUmVjb3Jk
cyhbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIHsKKyAgICAgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKTsKKyAgICAgICAg
aWYgKG1fcGVyc2lzdGVudFN0b3JhZ2UpCisgICAgICAgICAgICBtX3BlcnNpc3RlbnRTdG9yYWdl
LT5zY2hlZHVsZU9yV3JpdGVNZW1vcnlTdG9yZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lz
dGVudFN0b3JhZ2U6OkZvcmNlSW1tZWRpYXRlV3JpdGU6Ok5vKTsKKworICAgICAgICBpZiAoIW1f
cGFyYW1ldGVycy5zaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChb
XSB7CisgICAgICAgICAgICBXZWJQcm9jZXNzUHJveHk6Om5vdGlmeVBhZ2VTdGF0aXN0aWNzQW5k
RGF0YVJlY29yZHNQcm9jZXNzZWQoKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKGNvbnN0
IFN0cmluZyYgc3ViRnJhbWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHRvcEZyYW1lUHJp
bWFyeURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byYgc3ViRnJhbWVTdGF0aXN0aWMgPSBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHN1YkZyYW1lUHJpbWFyeURvbWFp
bik7CisgICAgaWYgKHNob3VsZEJsb2NrQW5kUHVyZ2VDb29raWVzKHN1YkZyYW1lU3RhdGlzdGlj
KSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoIXNob3VsZEJsb2NrQW5kS2VlcENvb2tpZXMoc3ViRnJhbWVTdGF0
aXN0aWMpKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHRydWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VS
ZWYobV9zdG9yZSksIHN1YkZyYW1lUHJpbWFyeURvbWFpbiA9IHN1YkZyYW1lUHJpbWFyeURvbWFp
bi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVQcmltYXJ5RG9tYWluID0gdG9wRnJhbWVQcmltYXJ5
RG9tYWluLmlzb2xhdGVkQ29weSgpLCBmcmFtZUlELCBwYWdlSUQsIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIHN0b3Jl
LT5jYWxsSGFzU3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFuZGxlcihzdWJGcmFtZVByaW1hcnlEb21h
aW4sIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgZnJhbWVJRCwgcGFnZUlELCBbc3RvcmUgPSBzdG9y
ZS5jb3B5UmVmKCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKGJvb2wgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNz
UXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgcmVzdWx0XSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihyZXN1bHQpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOwor
fQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVxdWVzdFN0b3Jh
Z2VBY2Nlc3MoU3RyaW5nJiYgc3ViRnJhbWVQcmltYXJ5RG9tYWluLCBTdHJpbmcmJiB0b3BGcmFt
ZVByaW1hcnlEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCBw
cm9tcHRFbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgYXV0byYgc3ViRnJhbWVTdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JQcmltYXJ5RG9tYWluKHN1YkZyYW1lUHJpbWFyeURvbWFpbik7CisgICAgaWYgKHNob3Vs
ZEJsb2NrQW5kUHVyZ2VDb29raWVzKHN1YkZyYW1lU3RhdGlzdGljKSkgeworI2lmICFSRUxFQVNF
X0xPR19ESVNBQkxFRAorICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKG1fZGVidWdMb2dnaW5n
RW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQ2Fubm90IGdyYW50IHN0b3Jh
Z2UgYWNjZXNzIHRvICV7cHVibGljfXMgc2luY2UgaXRzIGNvb2tpZXMgYXJlIGJsb2NrZWQgaW4g
dGhpcmQtcGFydHkgY29udGV4dHMgYW5kIGl0IGhhcyBub3QgcmVjZWl2ZWQgdXNlciBpbnRlcmFj
dGlvbiBhcyBmaXJzdC1wYXJ0eS4iLCBzdWJGcmFtZVByaW1hcnlEb21haW4udXRmOCgpLmRhdGEo
KSk7CisjZW5kaWYKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1
czo6Q2Fubm90UmVxdWVzdEFjY2Vzcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoIXNob3VsZEJsb2NrQW5kS2VlcENvb2tpZXMoc3ViRnJhbWVTdGF0aXN0aWMpKSB7CisjaWYg
IVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1
Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJObyBuZWVkIHRv
IGdyYW50IHN0b3JhZ2UgYWNjZXNzIHRvICV7cHVibGljfXMgc2luY2UgaXRzIGNvb2tpZXMgYXJl
IG5vdCBibG9ja2VkIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzLiIsIHN1YkZyYW1lUHJpbWFyeURv
bWFpbi51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihT
dG9yYWdlQWNjZXNzU3RhdHVzOjpIYXNBY2Nlc3MpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgYXV0byB1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyID0gcHJvbXB0RW5hYmxlZCAmJiBoYXNV
c2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0KHN1YkZyYW1lU3RhdGlzdGljLCB0
b3BGcmFtZVByaW1hcnlEb21haW4pOworICAgIGlmIChwcm9tcHRFbmFibGVkICYmICF1c2VyV2Fz
UHJvbXB0ZWRFYXJsaWVyKSB7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgICAgIFJF
TEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGVidWcsICJBYm91dCB0byBhc2sgdGhlIHVzZXIgd2hldGhlciB0aGV5IHdhbnQgdG8g
Z3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJXtwdWJsaWN9cyB1bmRlciAle3B1YmxpY31zIG9yIG5v
dC4iLCBzdWJGcmFtZVByaW1hcnlEb21haW4udXRmOCgpLmRhdGEoKSwgdG9wRnJhbWVQcmltYXJ5
RG9tYWluLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KFN0b3JhZ2VBY2Nlc3NTdGF0dXM6OlJlcXVpcmVzVXNlclByb21wdCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9IGVsc2UgaWYgKHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIpIHsKKyNpZiAhUkVMRUFT
RV9MT0dfRElTQUJMRUQKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRihtX2RlYnVnTG9nZ2lu
Z0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIlN0b3JhZ2UgYWNjZXNzIHdh
cyBncmFudGVkIHRvICV7cHVibGljfXMgdW5kZXIgJXtwdWJsaWN9cy4iLCBzdWJGcmFtZVByaW1h
cnlEb21haW4udXRmOCgpLmRhdGEoKSwgdG9wRnJhbWVQcmltYXJ5RG9tYWluLnV0ZjgoKS5kYXRh
KCkpOworI2VuZGlmCisgICAgfQorCisgICAgc3ViRnJhbWVTdGF0aXN0aWMudGltZXNBY2Nlc3Nl
ZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSsrOworCisgICAgZ3JhbnRTdG9yYWdl
QWNjZXNzSW50ZXJuYWwoV1RGTW92ZShzdWJGcmFtZVByaW1hcnlEb21haW4pLCBXVEZNb3ZlKHRv
cEZyYW1lUHJpbWFyeURvbWFpbiksIGZyYW1lSUQsIHBhZ2VJRCwgdXNlcldhc1Byb21wdGVkRWFy
bGllciwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChi
b29sIHdhc0dyYW50ZWRBY2Nlc3MpIG11dGFibGUgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cih3YXNHcmFudGVkQWNjZXNzID8gU3RvcmFnZUFjY2Vzc1N0YXR1czo6SGFzQWNjZXNzIDogU3Rv
cmFnZUFjY2Vzc1N0YXR1czo6Q2Fubm90UmVxdWVzdEFjY2Vzcyk7CisgICAgfSk7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vz
c1VuZGVyT3BlbmVyKFN0cmluZyYmIHByaW1hcnlEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3Ms
IHVpbnQ2NF90IG9wZW5lclBhZ2VJRCwgU3RyaW5nJiYgb3BlbmVyUHJpbWFyeURvbWFpbikKK3sK
KyAgICBBU1NFUlQocHJpbWFyeURvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyAhPSBvcGVuZXJQ
cmltYXJ5RG9tYWluKTsKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlm
IChwcmltYXJ5RG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzID09IG9wZW5lclByaW1hcnlEb21h
aW4pCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFj
Y2Vzc1N0YXRpc3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4o
cHJpbWFyeURvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcyk7CisgICAgYXV0byBjb29raWVzQmxv
Y2tlZEFuZFB1cmdlZCA9IHNob3VsZEJsb2NrQW5kUHVyZ2VDb29raWVzKGRvbWFpbkluTmVlZE9m
U3RvcmFnZUFjY2Vzc1N0YXRpc3RpYyk7CisKKyAgICAvLyBUaGUgZG9tYWluIGFscmVhZHkgaGFz
IGFjY2VzcyBpZiBpdHMgY29va2llcyBhcmUgbm90IGJsb2NrZWQuCisgICAgaWYgKCFjb29raWVz
QmxvY2tlZEFuZFB1cmdlZCAmJiAhc2hvdWxkQmxvY2tBbmRLZWVwQ29va2llcyhkb21haW5Jbk5l
ZWRPZlN0b3JhZ2VBY2Nlc3NTdGF0aXN0aWMpKQorICAgICAgICByZXR1cm47CisKKyNpZiAhUkVM
RUFTRV9MT0dfRElTQUJMRUQKKyAgICBSRUxFQVNFX0xPR19JTkZPX0lGKG1fZGVidWdMb2dnaW5n
RW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiW1RlbXBvcmFyeSBjb21iYXRp
YmlsaXR5IGZpeF0gU3RvcmFnZSBhY2Nlc3Mgd2FzIGdyYW50ZWQgZm9yICV7cHVibGljfXMgdW5k
ZXIgb3BlbmVyIHBhZ2UgZnJvbSAle3B1YmxpY31zLCB3aXRoIHVzZXIgaW50ZXJhY3Rpb24gaW4g
dGhlIG9wZW5lZCB3aW5kb3cuIiwgcHJpbWFyeURvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcy51
dGY4KCkuZGF0YSgpLCBvcGVuZXJQcmltYXJ5RG9tYWluLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlm
CisgICAgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoV1RGTW92ZShwcmltYXJ5RG9tYWluSW5O
ZWVkT2ZTdG9yYWdlQWNjZXNzKSwgV1RGTW92ZShvcGVuZXJQcmltYXJ5RG9tYWluKSwgV1RGOjpu
dWxsb3B0LCBvcGVuZXJQYWdlSUQsIGZhbHNlLCBbXShib29sKSB7IH0pOworfQorCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKFN0cmlu
ZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJhbWVIb3N0LCB1aW50NjRfdCBmcmFtZUlE
LCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93LCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBzdWJGcmFtZVByaW1hcnlEb21haW4gPSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzOjpwcmltYXJ5RG9tYWluKHN1YkZyYW1lSG9zdCk7CisgICAgYXV0
byB0b3BGcmFtZVByaW1hcnlEb21haW4gPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpwcmltYXJ5
RG9tYWluKHRvcEZyYW1lSG9zdCk7CisgICAgaWYgKHVzZXJXYXNQcm9tcHRlZE5vdykgeworICAg
ICAgICBhdXRvJiBzdWJGcmFtZVN0YXRpc3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0Zv
clByaW1hcnlEb21haW4oc3ViRnJhbWVQcmltYXJ5RG9tYWluKTsKKyAgICAgICAgQVNTRVJUKHN1
YkZyYW1lU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbik7CisgICAgICAgIHN1YkZyYW1lU3Rh
dGlzdGljLnN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lT3JpZ2lucy5hZGQodG9wRnJhbWVQcmlt
YXJ5RG9tYWluKTsKKyAgICB9CisgICAgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoV1RGTW92
ZShzdWJGcmFtZVByaW1hcnlEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1lUHJpbWFyeURvbWFpbiks
IGZyYW1lSUQsIHBhZ2VJRCwgdXNlcldhc1Byb21wdGVkTm93LCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpn
cmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdHJpbmcmJiBzdWJGcmFtZVByaW1hcnlEb21haW4s
IFN0cmluZyYmIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgT3B0aW9uYWw8dWludDY0X3Q+IGZyYW1l
SUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3dPckVhcmxpZXIsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoc3ViRnJhbWVQcmltYXJ5RG9tYWluID09IHRv
cEZyYW1lUHJpbWFyeURvbWFpbikgeworICAgICAgICBjYWxsYmFjayh0cnVlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBSZW1vdmUgbV9zdG9yYWdlQWNjZXNzUHJv
bXB0c0VuYWJsZWQgY2hlY2sgaWYgcHJvbXB0aW5nIGlzIG5vIGxvbmdlciBleHBlcmltZW50YWwu
CisgICAgaWYgKHVzZXJXYXNQcm9tcHRlZE5vd09yRWFybGllciAmJiBtX3N0b3JhZ2VBY2Nlc3NQ
cm9tcHRzRW5hYmxlZCkgeworICAgICAgICBhdXRvJiBzdWJGcmFtZVN0YXRpc3RpYyA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oc3ViRnJhbWVQcmltYXJ5RG9tYWlu
KTsKKyAgICAgICAgQVNTRVJUKHN1YkZyYW1lU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbik7
CisgICAgICAgIEFTU0VSVChzdWJGcmFtZVN0YXRpc3RpYy5zdG9yYWdlQWNjZXNzVW5kZXJUb3BG
cmFtZU9yaWdpbnMuY29udGFpbnModG9wRnJhbWVQcmltYXJ5RG9tYWluKSk7CisgICAgICAgIHN1
YkZyYW1lU3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gV2FsbFRpbWU6
Om5vdygpOworICAgIH0KKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3ViRnJhbWVQ
cmltYXJ5RG9tYWluID0gc3ViRnJhbWVQcmltYXJ5RG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BG
cmFtZVByaW1hcnlEb21haW4gPSB0b3BGcmFtZVByaW1hcnlEb21haW4uaXNvbGF0ZWRDb3B5KCks
IGZyYW1lSUQsIHBhZ2VJRCwgc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spXSgpIG11dGFibGUgeworICAgICAgICBzdG9yZS0+Y2FsbEdyYW50U3Rv
cmFnZUFjY2Vzc0hhbmRsZXIoc3ViRnJhbWVQcmltYXJ5RG9tYWluLCB0b3BGcmFtZVByaW1hcnlE
b21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHN0
b3JlID0gc3RvcmUuY29weVJlZigpXShib29sIHZhbHVlKSBtdXRhYmxlIHsKKyAgICAgICAgICAg
IHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKSwgdmFsdWVdICgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrKHZh
bHVlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW5kZmF0aGVyRXhpc3RpbmdXZWJz
aXRlRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2go
W3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spLCBzaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkID0gbV9wYXJh
bWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQsIHdvcmtR
dWV1ZSA9IG1fd29ya1F1ZXVlLmNvcHlSZWYoKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIG1ldGhvZCBiZWluZyBhIHN0YXRpYyBjYWxsIG9uIFdlYlByb2Nlc3NQcm94eSBp
cyB3cm9uZy4KKyAgICAgICAgLy8gSXQgc2hvdWxkIGJlIG9uIHRoZSBkYXRhIHN0b3JlIHRoYXQg
dGhpcyBvYmplY3QgYmVsb25ncyB0by4KKyAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojp0b3BQcml2
YXRlbHlDb250cm9sbGVkRG9tYWluc1dpdGhXZWJzaXRlRGF0YShXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6Om1vbml0b3JlZERhdGFUeXBlcygpLCBzaG91bGROb3RpZnlQYWdlc1doZW5E
YXRhUmVjb3Jkc1dlcmVTY2FubmVkLCBbd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgd29ya1F1ZXVlID0gd29ya1F1ZXVlLmNvcHlSZWYo
KV0gKEhhc2hTZXQ8U3RyaW5nPiYmIHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zV2l0aFdl
YnNpdGVEYXRhKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHdvcmtRdWV1ZS0+ZGlzcGF0Y2goW3dl
YWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIHRvcERvbWFpbnMgPSBjcm9zc1RocmVhZENvcHko
dG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNXaXRoV2Vic2l0ZURhdGEpLCBjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBpZiAoIXdl
YWtUaGlzKSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3Ig
KGF1dG8mIHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4gOiB0b3BEb21haW5zKSB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8mIHN0YXRpc3RpYyA9IHdlYWtUaGlzLT5lbnN1cmVSZXNvdXJj
ZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4p
OworICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5tX2VuZE9mR3JhbmRm
YXRoZXJpbmdUaW1lc3RhbXAgPSBXYWxsVGltZTo6bm93KCkgKyB3ZWFrVGhpcy0+bV9wYXJhbWV0
ZXJzLmdyYW5kZmF0aGVyaW5nVGltZTsKKyAgICAgICAgICAgICAgICBpZiAod2Vha1RoaXMtPm1f
cGVyc2lzdGVudFN0b3JhZ2UpCisgICAgICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5tX3BlcnNp
c3RlbnRTdG9yYWdlLT5zY2hlZHVsZU9yV3JpdGVNZW1vcnlTdG9yZShSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OkZvcmNlSW1tZWRpYXRlV3JpdGU6Olllcyk7CisgICAg
ICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+bG9nVGVz
dGluZ0V2ZW50KCJHcmFuZGZhdGhlcmVkIl9zKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
KTsKKyAgICB9KTsKK30KKworVmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjplbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKQoreworICAg
IGlmICghbV9kZWJ1Z01vZGVFbmFibGVkKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgVmVj
dG9yPFN0cmluZz4gcHJpbWFyeURvbWFpbnNUb0Jsb2NrOworICAgIHByaW1hcnlEb21haW5zVG9C
bG9jay5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIpOworCisgICAgYXV0byYgc3RhdGljU2Vzb3Vy
Y2VTdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKGRl
YnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UpOworICAgIHNldFByZXZhbGVudFJlc291cmNlKHN0
YXRpY1Nlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKKyAg
ICBwcmltYXJ5RG9tYWluc1RvQmxvY2sudW5jaGVja2VkQXBwZW5kKGRlYnVnU3RhdGljUHJldmFs
ZW50UmVzb3VyY2UpOworCisgICAgaWYgKCFtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2Uu
aXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8mIG1hbnVhbFJlc291cmNlU3RhdGlzdGljID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihtX2RlYnVnTWFudWFsUHJldmFs
ZW50UmVzb3VyY2UpOworICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShtYW51YWxSZXNvdXJj
ZVN0YXRpc3RpYywgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CisgICAgICAgIHByaW1h
cnlEb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQobV9kZWJ1Z01hbnVhbFByZXZhbGVudFJl
c291cmNlKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHByaW1hcnlEb21haW5zVG9CbG9jazsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBlbmFibGUpCit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICBtX2RlYnVnTW9kZUVuYWJsZWQgPSBlbmFibGU7CisgICAg
bV9kZWJ1Z0xvZ2dpbmdFbmFibGVkID0gZW5hYmxlOworCisgICAgZW5zdXJlUHJldmFsZW50UmVz
b3VyY2VzRm9yRGVidWdNb2RlKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25zdCBTdHJpbmcm
IGRvbWFpbikKK3sKKyAgICBpZiAoIW1fZGVidWdNb2RlRW5hYmxlZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlID0gZG9tYWluOworICAgIGF1
dG8mIHJlc291cmNlU3RhdGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFy
eURvbWFpbihkb21haW4pOworICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlz
dGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKKworI2lmICFSRUxFQVNFX0xPR19E
SVNBQkxFRAorICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVn
LCAiRGlkIHNldCAle3B1YmxpY31zIGFzIHByZXZhbGVudCByZXNvdXJjZSBmb3IgdGhlIHB1cnBv
c2VzIG9mIElUUCBEZWJ1ZyBNb2RlLiIsIGRvbWFpbi51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgor
fQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2NoZWR1bGVTdGF0
aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgpCit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICBtX3BlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVl
c3RJZGVudGlmaWVyID0gKyttX2xhc3RTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlm
aWVyOworICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaEFmdGVyKG1pbmltdW1TdGF0aXN0aWNzUHJv
Y2Vzc2luZ0ludGVydmFsLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHN0
YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgPSAqbV9wZW5kaW5nU3RhdGlzdGlj
c1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcl0geworICAgICAgICBpZiAoIXdlYWtUaGlzKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghbV9wZW5kaW5nU3RhdGlzdGljc1By
b2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciB8fCAqbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3Np
bmdSZXF1ZXN0SWRlbnRpZmllciAhPSBzdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlm
aWVyKSB7CisgICAgICAgICAgICAvLyBUaGlzIHJlcXVlc3QgaGFzIGJlZW4gY2FuY2VsZWQuCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB1cGRhdGVDb29raWVCbG9j
a2luZyhbXSgpIHsgfSk7CisgICAgICAgIHByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMo
KTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OmNhbmNlbFBlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3QoKQoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3Np
bmdSZXF1ZXN0SWRlbnRpZmllciA9IFdURjo6bnVsbG9wdDsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBTdHJpbmcm
IHRhcmdldFByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgbWFpbkZyYW1lUHJpbWFyeURvbWFp
biwgY29uc3QgU3RyaW5nJiBzb3VyY2VQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHRhcmdl
dEhvc3QsIGNvbnN0IFN0cmluZyYgbWFpbkZyYW1lSG9zdCwgYm9vbCBpc1JlZGlyZWN0LCBib29s
IGlzTWFpbkZyYW1lKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
Ym9vbCBhcmVUYXJnZXRBbmRNYWluRnJhbWVEb21haW5zQXNzb2NpYXRlZCA9IHRhcmdldFByaW1h
cnlEb21haW4gPT0gbWFpbkZyYW1lUHJpbWFyeURvbWFpbjsKKyAgICBib29sIGFyZVRhcmdldEFu
ZFNvdXJjZURvbWFpbnNBc3NvY2lhdGVkID0gdGFyZ2V0UHJpbWFyeURvbWFpbiA9PSBzb3VyY2VQ
cmltYXJ5RG9tYWluOworCisgICAgYm9vbCBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSBmYWxzZTsK
KyAgICBpZiAoIWlzTWFpbkZyYW1lICYmIHRhcmdldEhvc3QgIT0gbWFpbkZyYW1lSG9zdCAmJiAh
KGFyZVRhcmdldEFuZE1haW5GcmFtZURvbWFpbnNBc3NvY2lhdGVkIHx8IGFyZVRhcmdldEFuZFNv
dXJjZURvbWFpbnNBc3NvY2lhdGVkKSkgeworICAgICAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNz
ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJnZXRQcmltYXJ5
RG9tYWluKTsKKyAgICAgICAgdGFyZ2V0U3RhdGlzdGljcy5sYXN0U2VlbiA9IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3M6OnJlZHVjZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpub3coKSk7CisgICAg
ICAgIGlmICh0YXJnZXRTdGF0aXN0aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRk
KG1haW5GcmFtZVByaW1hcnlEb21haW4pLmlzTmV3RW50cnkpCisgICAgICAgICAgICBzdGF0aXN0
aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOworICAgIH0KKworICAgIGlmIChpc1JlZGlyZWN0ICYmICFh
cmVUYXJnZXRBbmRTb3VyY2VEb21haW5zQXNzb2NpYXRlZCkgeworICAgICAgICBpZiAoaXNNYWlu
RnJhbWUpIHsKKyAgICAgICAgICAgIGF1dG8mIHJlZGlyZWN0aW5nT3JpZ2luU3RhdGlzdGljcyA9
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oc291cmNlUHJpbWFyeURv
bWFpbik7CisgICAgICAgICAgICBpZiAocmVkaXJlY3RpbmdPcmlnaW5TdGF0aXN0aWNzLnRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RzVG8uYWRkKHRhcmdldFByaW1hcnlEb21haW4pLmlzTmV3RW50cnkp
CisgICAgICAgICAgICAgICAgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGF1dG8mIHRhcmdldFN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQ
cmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4pOworICAgICAgICAgICAgaWYgKHRhcmdl
dFN0YXRpc3RpY3MudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLmFkZChzb3VyY2VQcmltYXJ5
RG9tYWluKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRl
ZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiByZWRpcmVjdGlu
Z09yaWdpblN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9t
YWluKHNvdXJjZVByaW1hcnlEb21haW4pOworICAgICAgICAgICAgaWYgKHJlZGlyZWN0aW5nT3Jp
Z2luU3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmFkZCh0YXJnZXRQcmlt
YXJ5RG9tYWluKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBk
YXRlZCA9IHRydWU7CisgICAgICAgICAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0gZW5zdXJl
UmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJnZXRQcmltYXJ5RG9tYWluKTsK
KyAgICAgICAgICAgIGlmICh0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzRnJvbS5hZGQoc291cmNlUHJpbWFyeURvbWFpbikuaXNOZXdFbnRyeSkKKyAgICAgICAgICAg
ICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKHN0YXRpc3RpY3NXZXJlVXBkYXRlZCkKKyAgICAgICAgc2NoZWR1bGVTdGF0aXN0aWNz
UHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgcHJp
bWFyeURvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1
dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWlu
KHByaW1hcnlEb21haW4pOworICAgIHN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9uID0gdHJ1
ZTsKKyAgICBzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gV2FsbFRp
bWU6Om5vdygpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKQoreworICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byYgc3RhdGlzdGljcyA9IGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbik7Cisg
ICAgc3RhdGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTsKKyAgICBzdGF0aXN0aWNz
Lm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0geyB9OworfQorCitib29sIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFN0
cmluZyYgcHJpbWFyeURvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgIGF1dG8gbWFwRW50cnkgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5maW5kKHByaW1h
cnlEb21haW4pOworICAgIHJldHVybiBtYXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlzdGljc01h
cC5lbmQoKSA/IGZhbHNlOiBoYXNIYWRVbmV4cGlyZWRSZWNlbnRVc2VySW50ZXJhY3Rpb24obWFw
RW50cnktPnZhbHVlKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnNldFByZXZhbGVudFJlc291cmNlKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3Mm
IHJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIG5ld1ByZXZhbGVuY2Up
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICByZXNvdXJjZVN0YXRp
c3RpYy5pc1ByZXZhbGVudFJlc291cmNlID0gdHJ1ZTsKKyAgICByZXNvdXJjZVN0YXRpc3RpYy5p
c1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSA9IG5ld1ByZXZhbGVuY2UgPT0gUmVzb3VyY2VMb2FkUHJl
dmFsZW5jZTo6VmVyeUhpZ2g7CisgICAgSGFzaFNldDxTdHJpbmc+IGRvbWFpbnNUaGF0SGF2ZVJl
ZGlyZWN0ZWRUbzsKKyAgICByZWN1cnNpdmVseUdldEFsbERvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0
ZWRUb1RoaXNEb21haW4ocmVzb3VyY2VTdGF0aXN0aWMsIGRvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0
ZWRUbywgMCk7CisgICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zVGhhdEhhdmVSZWRpcmVj
dGVkVG8pIHsKKyAgICAgICAgYXV0byBtYXBFbnRyeSA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFw
LmZpbmQoZG9tYWluKTsKKyAgICAgICAgaWYgKG1hcEVudHJ5ID09IG1fcmVzb3VyY2VTdGF0aXN0
aWNzTWFwLmVuZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEFTU0VSVCghbWFw
RW50cnktPnZhbHVlLmlzUHJldmFsZW50UmVzb3VyY2UpOworICAgICAgICBtYXBFbnRyeS0+dmFs
dWUuaXNQcmV2YWxlbnRSZXNvdXJjZSA9IHRydWU7CisgICAgfQorfQorICAgIAorU3RyaW5nIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MoKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgU3Ry
aW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIlJlc291cmNlIGxv
YWQgc3RhdGlzdGljczpcblxuIik7CisgICAgZm9yIChhdXRvJiBtYXBFbnRyeSA6IG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKQorICAgICAgICByZXN1bHQuYXBwZW5kKG1hcEVudHJ5
LnRvU3RyaW5nKCkpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30KKworYm9vbCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29u
c3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgYXV0byBtYXBFbnRyeSA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFw
LmZpbmQocHJpbWFyeURvbWFpbik7CisgICAgcmV0dXJuIG1hcEVudHJ5ID09IG1fcmVzb3VyY2VT
dGF0aXN0aWNzTWFwLmVuZCgpID8gZmFsc2UgOiBtYXBFbnRyeS0+dmFsdWUuaXNQcmV2YWxlbnRS
ZXNvdXJjZTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omlz
VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikgY29uc3QK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gbWFwRW50cnkg
PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5maW5kKHByaW1hcnlEb21haW4pOworICAgIHJldHVy
biBtYXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSA/IGZhbHNlIDogbWFw
RW50cnktPnZhbHVlLmlzUHJldmFsZW50UmVzb3VyY2UgJiYgbWFwRW50cnktPnZhbHVlLmlzVmVy
eVByZXZhbGVudFJlc291cmNlOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN0cmluZyYgc3Vi
cmVzb3VyY2VQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHRvcEZyYW1lUHJpbWFyeURvbWFp
bikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8g
bWFwRW50cnkgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5maW5kKHN1YnJlc291cmNlUHJpbWFy
eURvbWFpbik7CisgICAgcmV0dXJuIG1hcEVudHJ5ID09IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFw
LmVuZCgpID8gZmFsc2UgOiBtYXBFbnRyeS0+dmFsdWUuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
T3JpZ2lucy5jb250YWlucyh0b3BGcmFtZVByaW1hcnlEb21haW4pOworfQorCitib29sIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVy
KGNvbnN0IFN0cmluZyYgc3ViRnJhbWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHRvcEZy
YW1lUHJpbWFyeURvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIGF1dG8gbWFwRW50cnkgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5maW5kKHN1
YkZyYW1lUHJpbWFyeURvbWFpbik7CisgICAgcmV0dXJuIG1hcEVudHJ5ID09IG1fcmVzb3VyY2VT
dGF0aXN0aWNzTWFwLmVuZCgpID8gZmFsc2UgOiBtYXBFbnRyeS0+dmFsdWUuc3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2lucy5jb250YWlucyh0b3BGcmFtZVByaW1hcnlEb21haW4pOworfQorCiti
b29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRp
cmVjdGluZ1RvKGNvbnN0IFN0cmluZyYgaG9zdFJlZGlyZWN0ZWRGcm9tUHJpbWFyeURvbWFpbiwg
Y29uc3QgU3RyaW5nJiBob3N0UmVkaXJlY3RlZFRvUHJpbWFyeURvbWFpbikgY29uc3QKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gbWFwRW50cnkgPSBtX3Jl
c291cmNlU3RhdGlzdGljc01hcC5maW5kKGhvc3RSZWRpcmVjdGVkRnJvbVByaW1hcnlEb21haW4p
OworICAgIHJldHVybiBtYXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSA/
IGZhbHNlIDogbWFwRW50cnktPnZhbHVlLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uY29u
dGFpbnMoaG9zdFJlZGlyZWN0ZWRUb1ByaW1hcnlEb21haW4pOworfQorCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBT
dHJpbmcmIHByaW1hcnlEb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJp
bWFyeURvbWFpbihwcmltYXJ5RG9tYWluKTsKKyAgICBzdGF0aXN0aWNzLmlzUHJldmFsZW50UmVz
b3VyY2UgPSBmYWxzZTsKKyAgICBzdGF0aXN0aWNzLmlzVmVyeVByZXZhbGVudFJlc291cmNlID0g
ZmFsc2U7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRH
cmFuZGZhdGhlcmVkKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbiwgYm9vbCB2YWx1ZSkKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8mIHN0YXRpc3RpY3Mg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4p
OworICAgIHN0YXRpc3RpY3MuZ3JhbmRmYXRoZXJlZCA9IHZhbHVlOworfQorCitib29sIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKGNvbnN0IFN0cmlu
ZyYgcHJpbWFyeURvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIGF1dG8gbWFwRW50cnkgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5maW5kKHBy
aW1hcnlEb21haW4pOworICAgIHJldHVybiBtYXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlzdGlj
c01hcC5lbmQoKSA/IGZhbHNlIDogbWFwRW50cnktPnZhbHVlLmdyYW5kZmF0aGVyZWQ7Cit9CisK
K3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVy
VG9wRnJhbWVPcmlnaW4oY29uc3QgU3RyaW5nJiBwcmltYXJ5U3ViRnJhbWVEb21haW4sIGNvbnN0
IFN0cmluZyYgcHJpbWFyeVRvcEZyYW1lRG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeVN1YkZyYW1lRG9tYWluKTsKKyAgICBzdGF0aXN0
aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKHByaW1hcnlUb3BGcmFtZURvbWFp
bik7CisgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3Rh
dGlzdGljcyBlbnRyeSBmb3IgdGhlIHRvcCBmcmFtZSBkb21haW4uCisgICAgZW5zdXJlUmVzb3Vy
Y2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5VG9wRnJhbWVEb21haW4pOworfQor
Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0IFN0cmluZyYgcHJpbWFyeVN1YnJlc291cmNlRG9tYWlu
LCBjb25zdCBTdHJpbmcmIHByaW1hcnlUb3BGcmFtZURvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJj
ZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbik7Cisg
ICAgc3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChwcmltYXJ5
VG9wRnJhbWVEb21haW4pOworICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFs
c28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSB0b3AgZnJhbWUgZG9tYWluLgorICAg
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeVRvcEZyYW1l
RG9tYWluKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdHJpbmcmIHByaW1hcnlTdWJyZXNv
dXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5U3VicmVzb3VyY2VE
b21haW4pOworICAgIHN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5hZGQo
cHJpbWFyeVJlZGlyZWN0RG9tYWluKTsKKyAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3Vy
ZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgcmVkaXJlY3QgZG9tYWlu
LgorICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeVJl
ZGlyZWN0RG9tYWluKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFN0cmluZyYgcHJpbWFy
eVN1YnJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIHByaW1hcnlSZWRpcmVjdERvbWFpbikK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8mIHN0YXRpc3Rp
Y3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlTdWJy
ZXNvdXJjZURvbWFpbik7CisgICAgc3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c0Zyb20uYWRkKHByaW1hcnlSZWRpcmVjdERvbWFpbik7CisgICAgLy8gRm9yIGNvbnNpc3RlbmN5
LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHJlZGly
ZWN0IGRvbWFpbi4KKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWlu
KHByaW1hcnlSZWRpcmVjdERvbWFpbik7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgU3RyaW5nJiB0
b3BGcmFtZVByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgcHJpbWFyeVJlZGlyZWN0RG9tYWlu
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byYgc3RhdGlz
dGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odG9wRnJhbWVQ
cmltYXJ5RG9tYWluKTsKKyAgICBzdGF0aXN0aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8u
YWRkKHByaW1hcnlSZWRpcmVjdERvbWFpbik7CisgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtl
IHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHJlZGlyZWN0IGRv
bWFpbi4KKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1h
cnlSZWRpcmVjdERvbWFpbik7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdHJpbmcmIHRvcEZy
YW1lUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pCit7
CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvJiBzdGF0aXN0aWNz
ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0b3BGcmFtZVByaW1h
cnlEb21haW4pOworICAgIHN0YXRpc3RpY3MudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLmFk
ZChwcmltYXJ5UmVkaXJlY3REb21haW4pOworICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBz
dXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21h
aW4uCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5
UmVkaXJlY3REb21haW4pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihTZWNvbmRzIHNlY29uZHMpCit7Cisg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKHNlY29uZHMgPj0gMF9z
KTsKKworICAgIG1fcGFyYW1ldGVycy50aW1lVG9MaXZlVXNlckludGVyYWN0aW9uID0gc2Vjb25k
czsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldE1pbmlt
dW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsK
KworICAgIG1fcGFyYW1ldGVycy5taW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwg
PSBzZWNvbmRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
c2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3MpOworCisgICAgbV9w
YXJhbWV0ZXJzLmdyYW5kZmF0aGVyaW5nVGltZSA9IHNlY29uZHM7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcChTZWNvbmRzIHNl
Y29uZHMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKHNl
Y29uZHMgPj0gMF9zKTsKKworICAgIG1fcGFyYW1ldGVycy5jYWNoZU1heEFnZUNhcFRpbWUgPSBz
ZWNvbmRzOworICAgIHVwZGF0ZUNhY2hlTWF4QWdlQ2FwKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjp1cGRhdGVDYWNoZU1heEFnZUNhcCgpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgCisgICAgUnVuTG9vcDo6bWFpbigpLmRp
c3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIHNlY29uZHMgPSBtX3BhcmFtZXRlcnMu
Y2FjaGVNYXhBZ2VDYXBUaW1lXSAoKSB7CisgICAgICAgIHN0b3JlLT5zZXRDYWNoZU1heEFnZUNh
cChzZWNvbmRzLCBbXSB7IH0pOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6c2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoU2Vjb25kcyBz
ZWNvbmRzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVChz
ZWNvbmRzID49IDBfcyk7CisgICAgCisgICAgbV9wYXJhbWV0ZXJzLmNsaWVudFNpZGVDb29raWVz
QWdlQ2FwVGltZSA9IHNlY29uZHM7CisgICAgdXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAo
KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNs
aWVudFNpZGVDb29raWVzQWdlQ2FwKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCisgICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIHNlY29uZHMgPSBtX3Bh
cmFtZXRlcnMuY2xpZW50U2lkZUNvb2tpZXNBZ2VDYXBUaW1lXSAoKSB7CisgICAgICAgIGlmIChh
dXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gc3RvcmUtPndlYnNpdGVEYXRhU3RvcmUoKSkKKyAgICAg
ICAgICAgIHdlYnNpdGVEYXRhU3RvcmUtPnNldEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKHNl
Y29uZHMsIFtdIHsgfSk7CisgICAgfSk7CisjZW5kaWYKK30KKworYm9vbCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNob3VsZFJlbW92ZURhdGFSZWNvcmRzKCkgY29uc3QKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChtX2RhdGFSZWNvcmRz
QmVpbmdSZW1vdmVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHBsdWdpbiA6IFBsdWdpblByb2Nl
c3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5wbHVnaW5Qcm9jZXNzZXMoKSkgeworICAgICAgICBpZiAo
IW1fYWN0aXZlUGx1Z2luVG9rZW5zLmNvbnRhaW5zKHBsdWdpbi0+cGx1Z2luUHJvY2Vzc1Rva2Vu
KCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1
cm4gIW1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkIHx8IE1vbm90b25pY1RpbWU6Om5v
dygpID49IChtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCArIG1fcGFyYW1ldGVycy5t
aW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwpOworfQorCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoYm9v
bCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fZGF0
YVJlY29yZHNCZWluZ1JlbW92ZWQgPSB2YWx1ZTsKKyAgICBpZiAobV9kYXRhUmVjb3Jkc0JlaW5n
UmVtb3ZlZCkKKyAgICAgICAgbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgPSBNb25v
dG9uaWNUaW1lOjpub3coKTsKK30KKworUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjplbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmlt
YXJ5RG9tYWluKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHJldHVybiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5l
bnN1cmUocHJpbWFyeURvbWFpbiwgWyZwcmltYXJ5RG9tYWluXSB7CisgICAgICAgIHJldHVybiBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzKHByaW1hcnlEb21haW4pOworICAgIH0pLml0ZXJhdG9yLT52
YWx1ZTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEtleWVkRW5jb2Rlcj4gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpjcmVhdGVFbmNvZGVyRnJvbURhdGEoKSBjb25zdAoreworICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBlbmNvZGVyID0gS2V5ZWRF
bmNvZGVyOjplbmNvZGVyKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlVUludDMyKCJ2ZXJzaW9uIiwg
c3RhdGlzdGljc01vZGVsVmVyc2lvbik7CisgICAgZW5jb2Rlci0+ZW5jb2RlRG91YmxlKCJlbmRP
ZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wIiwgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1w
LnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7CisKKyAgICBlbmNvZGVyLT5lbmNvZGVPYmpl
Y3RzKCJicm93c2luZ1N0YXRpc3RpY3MiLCBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5iZWdpbigp
LCBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSwgW10oS2V5ZWRFbmNvZGVyJiBlbmNvZGVy
SW5uZXIsIGNvbnN0IGF1dG8mIG9yaWdpbikgeworICAgICAgICBvcmlnaW4udmFsdWUuZW5jb2Rl
KGVuY29kZXJJbm5lcik7CisgICAgfSk7CisKKyAgICBlbmNvZGVyLT5lbmNvZGVPYmplY3RzKCJv
cGVyYXRpbmdEYXRlcyIsIG1fb3BlcmF0aW5nRGF0ZXMuYmVnaW4oKSwgbV9vcGVyYXRpbmdEYXRl
cy5lbmQoKSwgW10oS2V5ZWRFbmNvZGVyJiBlbmNvZGVySW5uZXIsIE9wZXJhdGluZ0RhdGUgZGF0
ZSkgeworICAgICAgICBlbmNvZGVySW5uZXIuZW5jb2RlRG91YmxlKCJkYXRlIiwgZGF0ZS5zZWNv
bmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpOworICAgIH0pOworCisgICAgcmV0dXJuIGVuY29kZXI7
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjptZXJnZVdpdGhE
YXRhRnJvbURlY29kZXIoS2V5ZWREZWNvZGVyJiBkZWNvZGVyKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgdW5zaWduZWQgdmVyc2lvbk9uRGlzazsKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlVUludDMyKCJ2ZXJzaW9uIiwgdmVyc2lvbk9uRGlzaykpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICh2ZXJzaW9uT25EaXNrID4gc3RhdGlzdGljc01vZGVsVmVyc2lv
bikgeworICAgICAgICBXVEZMb2dBbHdheXMoIkZvdW5kIHJlc291cmNlIGxvYWQgc3RhdGlzdGlj
cyBvbiBkaXNrIHdpdGggbW9kZWwgdmVyc2lvbiAldSB3aGVyZWFzIHRoZSBoaWdoZXN0IHN1cHBv
cnRlZCB2ZXJzaW9uIGlzICV1LiBSZXNldHRpbmcuIiwgdmVyc2lvbk9uRGlzaywgc3RhdGlzdGlj
c01vZGVsVmVyc2lvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkb3VibGUgZW5k
T2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsKKyAgICBpZiAoZGVjb2Rlci5kZWNvZGVEb3VibGUo
ImVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAiLCBlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0
YW1wKSkKKyAgICAgICAgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wID0gV2FsbFRpbWU6
OmZyb21SYXdTZWNvbmRzKGVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXApOworICAgIGVsc2UK
KyAgICAgICAgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wID0geyB9OworCisgICAgVmVj
dG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+IGxvYWRlZFN0YXRpc3RpY3M7CisgICAgYm9vbCBz
dWNjZWVkZWQgPSBkZWNvZGVyLmRlY29kZU9iamVjdHMoImJyb3dzaW5nU3RhdGlzdGljcyIsIGxv
YWRlZFN0YXRpc3RpY3MsIFt2ZXJzaW9uT25EaXNrXShLZXllZERlY29kZXImIGRlY29kZXJJbm5l
ciwgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgc3RhdGlzdGljcykgeworICAgICAgICByZXR1cm4g
c3RhdGlzdGljcy5kZWNvZGUoZGVjb2RlcklubmVyLCB2ZXJzaW9uT25EaXNrKTsKKyAgICB9KTsK
KworICAgIGlmICghc3VjY2VlZGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtZXJnZVN0YXRp
c3RpY3MoV1RGTW92ZShsb2FkZWRTdGF0aXN0aWNzKSk7CisgICAgdXBkYXRlQ29va2llQmxvY2tp
bmcoW10oKSB7IH0pOworCisgICAgVmVjdG9yPE9wZXJhdGluZ0RhdGU+IG9wZXJhdGluZ0RhdGVz
OworICAgIHN1Y2NlZWRlZCA9IGRlY29kZXIuZGVjb2RlT2JqZWN0cygib3BlcmF0aW5nRGF0ZXMi
LCBvcGVyYXRpbmdEYXRlcywgW10oS2V5ZWREZWNvZGVyJiBkZWNvZGVyLCBPcGVyYXRpbmdEYXRl
JiBkYXRlKSB7CisgICAgICAgIGRvdWJsZSB2YWx1ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZURvdWJsZSgiZGF0ZSIsIHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBkYXRlID0gT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKFdhbGxUaW1lOjpmcm9t
UmF3U2Vjb25kcyh2YWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9KTsKKworICAg
IGlmICghc3VjY2VlZGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX29wZXJhdGluZ0RhdGVz
ID0gbWVyZ2VPcGVyYXRpbmdEYXRlcyhtX29wZXJhdGluZ0RhdGVzLCBXVEZNb3ZlKG9wZXJhdGlu
Z0RhdGVzKSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpj
bGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7Cisg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX3Jlc291cmNlU3RhdGlzdGlj
c01hcC5jbGVhcigpOworICAgIG1fb3BlcmF0aW5nRGF0ZXMuY2xlYXIoKTsKKworICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOworCisgICAgcmVtb3ZlQWxsU3RvcmFnZUFjY2VzcyhbY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKKworICAg
IGF1dG8gcHJpbWFyeURvbWFpbnNUb0Jsb2NrID0gZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9y
RGVidWdNb2RlKCk7CisgICAgdXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKHByaW1hcnlE
b21haW5zVG9CbG9jaywgW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5j
b3B5UmVmKCldIHsgfSk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjp3YXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uKGNvbnN0IFJl
c291cmNlTG9hZFN0YXRpc3RpY3MmIGN1cnJlbnQsIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MmIHVwZGF0ZWQpIGNvbnN0Cit7CisgICAgaWYgKCFjdXJyZW50LmhhZFVzZXJJbnRlcmFjdGlv
biAmJiAhdXBkYXRlZC5oYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGF1dG8gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPSBzdGQ6Om1heChjdXJy
ZW50Lm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lLCB1cGRhdGVkLm1vc3RSZWNlbnRVc2Vy
SW50ZXJhY3Rpb25UaW1lKTsKKworICAgIHJldHVybiB1cGRhdGVkLmxhc3RTZWVuIDw9IG1vc3RS
ZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lICsgMjRfaDsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6Om1lcmdlU3RhdGlzdGljcyhWZWN0b3I8UmVzb3VyY2VMb2Fk
U3RhdGlzdGljcz4mJiBzdGF0aXN0aWNzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBzdGF0aXN0aWNzKSB7CisgICAgICAg
IGF1dG8gcmVzdWx0ID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5zdXJlKHN0YXRpc3RpYy5o
aWdoTGV2ZWxEb21haW4sIFsmc3RhdGlzdGljXSB7CisgICAgICAgICAgICByZXR1cm4gV1RGTW92
ZShzdGF0aXN0aWMpOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRy
eSkgeworICAgICAgICAgICAgaWYgKHdhc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50
ZXJhY3Rpb24ocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSwgc3RhdGlzdGljKSkKKyAgICAgICAgICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVU
b1VzZXJJbnRlcmFjdGlvbisrOworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5t
ZXJnZShzdGF0aXN0aWMpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2hvdWxkQmxvY2tBbmRLZWVwQ29va2llcyhjb25zdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXN0aWMpCit7CisgICAgcmV0dXJuIHN0YXRpc3Rp
Yy5pc1ByZXZhbGVudFJlc291cmNlICYmIHN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb247Cit9
CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzaG91bGRCbG9ja0Fu
ZFB1cmdlQ29va2llcyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXN0aWMpCit7
CisgICAgcmV0dXJuIHN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlICYmICFzdGF0aXN0aWMu
aGFkVXNlckludGVyYWN0aW9uOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6aGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdChjb25zdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXN0aWMsIGNvbnN0IFN0cmluZyYgZmlyc3RQYXJ0
eVByaW1hcnlEb21haW4pCit7CisgICAgcmV0dXJuIHN0YXRpc3RpYy5zdG9yYWdlQWNjZXNzVW5k
ZXJUb3BGcmFtZU9yaWdpbnMuY29udGFpbnMoZmlyc3RQYXJ0eVByaW1hcnlEb21haW4pOworfQor
CitzdGF0aWMgdm9pZCBkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMoY29uc3QgY2hhciogYWN0aW9u
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlucykKK3sKKyNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKKyAgICBzdGF0aWMgY29uc3QgYXV0byBtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0
YXRlbWVudCA9IDUwOworICAgIGlmIChkb21haW5zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGRvbWFpbnMuc2l6ZSgpIDw9IG1heE51bWJlck9mRG9tYWluc0luT25lTG9n
U3RhdGVtZW50KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RlYnVnLCAiQWJvdXQgdG8gJXtwdWJsaWN9cyBjb29raWVzIGluIHRoaXJkLXBhcnR5IGNv
bnRleHRzIGZvcjogJXtwdWJsaWN9cy4iLCBhY3Rpb24sIGRvbWFpbnNUb1N0cmluZyhkb21haW5z
KS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBWZWN0
b3I8U3RyaW5nPiBiYXRjaDsKKyAgICBiYXRjaC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1heE51
bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KTsKKyAgICBhdXRvIGJhdGNoTnVtYmVyID0g
MTsKKyAgICB1bnNpZ25lZCBudW1iZXJPZkJhdGNoZXMgPSBzdGQ6OmNlaWwoZG9tYWlucy5zaXpl
KCkgLyBzdGF0aWNfY2FzdDxmbG9hdD4obWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1l
bnQpKTsKKworICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykgeworICAgICAgICBpZiAo
YmF0Y2guc2l6ZSgpID09IG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KSB7Cisg
ICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Zywg
IkFib3V0IHRvICV7cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBmb3Ig
KCV7cHVibGljfWQgb2YgJXUpOiAle3B1YmxpY31zLiIsIGFjdGlvbiwgYmF0Y2hOdW1iZXIsIG51
bWJlck9mQmF0Y2hlcywgZG9tYWluc1RvU3RyaW5nKGJhdGNoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgICAgIGJhdGNoLnNocmluaygwKTsKKyAgICAgICAgICAgICsrYmF0Y2hOdW1iZXI7Cisg
ICAgICAgIH0KKyAgICAgICAgYmF0Y2guYXBwZW5kKGRvbWFpbik7CisgICAgfQorICAgIGlmICgh
YmF0Y2guaXNFbXB0eSgpKQorICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvICV7cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0
eSBjb250ZXh0cyBmb3IgKCV7cHVibGljfWQgb2YgJXUpOiAle3B1YmxpY31zLiIsIGFjdGlvbiwg
YmF0Y2hOdW1iZXIsIG51bWJlck9mQmF0Y2hlcywgZG9tYWluc1RvU3RyaW5nKGJhdGNoKS51dGY4
KCkuZGF0YSgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGFjdGlvbik7CisgICAgVU5VU0VE
X1BBUkFNKGRvbWFpbnMpOworI2VuZGlmCit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjp1cGRhdGVDb29raWVCbG9ja2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICBWZWN0b3I8U3RyaW5nPiBkb21haW5zVG9CbG9jazsKKyAgICBmb3IgKGF1dG8m
IHJlc291cmNlU3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpIHsK
KyAgICAgICAgaWYgKHJlc291cmNlU3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UpCisgICAg
ICAgICAgICBkb21haW5zVG9CbG9jay5hcHBlbmQocmVzb3VyY2VTdGF0aXN0aWMuaGlnaExldmVs
RG9tYWluKTsKKyAgICB9CisKKyAgICBpZiAoZG9tYWluc1RvQmxvY2suaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAobV9kZWJ1Z0xvZ2dpbmdFbmFibGVkICYmICFkb21haW5zVG9CbG9jay5pc0VtcHR5KCkp
CisgICAgICAgIGRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcygiYmxvY2siLCBkb21haW5zVG9CbG9j
ayk7CisKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3dlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpLCBzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGRvbWFpbnNUb0Jsb2NrID0gY3Jv
c3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Jsb2NrKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIHN0b3JlLT5jYWxsVXBk
YXRlUHJldmFsZW50RG9tYWluc1RvQmxvY2tDb29raWVzRm9ySGFuZGxlcihkb21haW5zVG9CbG9j
aywgW3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIHN0b3JlID0gc3RvcmUuY29weVJlZigp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgeworICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFt3ZWFr
VGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7CisgICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICAgICAgICAgICAg
IFJFTEVBU0VfTE9HX0lORk9fSUYod2Vha1RoaXMtPm1fZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiRG9uZSB1cGRhdGluZyBjb29raWUgYmxvY2tpbmcu
Iik7CisjZW5kaWYKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwor
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2Nr
aW5nRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvQmxvY2ssIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3Rv
cmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBkb21haW5zVG9CbG9jayA9IGNyb3NzVGhyZWFkQ29weShk
b21haW5zVG9CbG9jayksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildICgpIG11dGFibGUgeworICAgICAgICBzdG9yZS0+Y2FsbFVwZGF0ZVByZXZhbGVudERv
bWFpbnNUb0Jsb2NrQ29va2llc0ZvckhhbmRsZXIoZG9tYWluc1RvQmxvY2ssIFtzdG9yZSA9IHN0
b3JlLmNvcHlSZWYoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5k
aXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgZG9tYWlucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
aWYgKGRvbWFpbnMuaXNFbXB0eSgpKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0
b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgZG9tYWlucyA9IGNyb3NzVGhyZWFkQ29weShkb21haW5z
KV0geworICAgICAgICBzdG9yZS0+Y2FsbFJlbW92ZURvbWFpbnNIYW5kbGVyKGRvbWFpbnMpOwor
ICAgIH0pOworCisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzKGNvbnN0IEZ1bmN0aW9u
PHZvaWQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpPiYgcHJvY2Vzc0Z1bmN0aW9uKSBj
b25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgZm9yIChhdXRv
JiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKQor
ICAgICAgICBwcm9jZXNzRnVuY3Rpb24ocmVzb3VyY2VTdGF0aXN0aWMpOworfQorCitib29sIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aGFzSGFkVW5leHBpcmVkUmVjZW50VXNl
ckludGVyYWN0aW9uKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljKSBj
b25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKHJlc291
cmNlU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbiAmJiBoYXNTdGF0aXN0aWNzRXhwaXJlZChy
ZXNvdXJjZVN0YXRpc3RpYykpIHsKKyAgICAgICAgLy8gRHJvcCBwcml2YWN5IHNlbnNpdGl2ZSBk
YXRhIGJlY2F1c2Ugd2Ugbm8gbG9uZ2VyIG5lZWQgaXQuCisgICAgICAgIC8vIFNldCB0aW1lc3Rh
bXAgdG8gMCBzbyB0aGF0IHN0YXRpc3RpY3MgbWVyZ2Ugd2lsbCBrbm93CisgICAgICAgIC8vIGl0
IGhhcyBiZWVuIHJlc2V0IGFzIG9wcG9zZWQgdG8gaXRzIGRlZmF1bHQgLTEuCisgICAgICAgIHJl
c291cmNlU3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0geyB9OworICAg
ICAgICByZXNvdXJjZVN0YXRpc3RpYy5zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZU9yaWdpbnMu
Y2xlYXIoKTsKKyAgICAgICAgcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uID0g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHJlc291cmNlU3RhdGlzdGljLmhhZFVzZXJJbnRl
cmFjdGlvbjsKK30KKworVmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjp0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURhdGFG
b3IoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYm9vbCBzaG91
bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nID0gbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1w
ID4gV2FsbFRpbWU6Om5vdygpOworICAgIGJvb2wgc2hvdWxkQ2xlYXJHcmFuZGZhdGhlcmluZyA9
ICFzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nICYmIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1Rp
bWVzdGFtcDsKKworICAgIGlmIChzaG91bGRDbGVhckdyYW5kZmF0aGVyaW5nKQorICAgICAgICBt
X2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAgPSB7IH07CisKKyAgICBWZWN0b3I8U3RyaW5n
PiBwcmV2YWxlbnRSZXNvdXJjZXM7CisgICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBtX3Jlc291
cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkgeworICAgICAgICBpZiAoc3RhdGlzdGljLmlzUHJl
dmFsZW50UmVzb3VyY2UgJiYgIWhhc0hhZFVuZXhwaXJlZFJlY2VudFVzZXJJbnRlcmFjdGlvbihz
dGF0aXN0aWMpICYmICghc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyB8fCAhc3RhdGlzdGlj
LmdyYW5kZmF0aGVyZWQpKQorICAgICAgICAgICAgcHJldmFsZW50UmVzb3VyY2VzLmFwcGVuZChz
dGF0aXN0aWMuaGlnaExldmVsRG9tYWluKTsKKworICAgICAgICBpZiAoc2hvdWxkQ2xlYXJHcmFu
ZGZhdGhlcmluZyAmJiBzdGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCkKKyAgICAgICAgICAgIHN0YXRp
c3RpYy5ncmFuZGZhdGhlcmVkID0gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHByZXZhbGVu
dFJlc291cmNlczsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gdG9kYXkgPSBPcGVyYXRpbmdEYXRlOjp0
b2RheSgpOworICAgIGlmICghbV9vcGVyYXRpbmdEYXRlcy5pc0VtcHR5KCkgJiYgdG9kYXkgPD0g
bV9vcGVyYXRpbmdEYXRlcy5sYXN0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHdoaWxlICht
X29wZXJhdGluZ0RhdGVzLnNpemUoKSA+PSBvcGVyYXRpbmdEYXRlc1dpbmRvdykKKyAgICAgICAg
bV9vcGVyYXRpbmdEYXRlcy5yZW1vdmUoMCk7CisKKyAgICBtX29wZXJhdGluZ0RhdGVzLmFwcGVu
ZCh0b2RheSk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpo
YXNTdGF0aXN0aWNzRXhwaXJlZChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJj
ZVN0YXRpc3RpYykgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIGlmIChtX29wZXJhdGluZ0RhdGVzLnNpemUoKSA+PSBvcGVyYXRpbmdEYXRlc1dpbmRvdykg
eworICAgICAgICBpZiAoT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKHJlc291cmNlU3RhdGlz
dGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSA8IG1fb3BlcmF0aW5nRGF0ZXMuZmly
c3QoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIElmIHdlIGRv
bid0IG1lZXQgdGhlIHJlYWwgY3JpdGVyaWEgZm9yIGFuIGV4cGlyZWQgc3RhdGlzdGljLCBjaGVj
ayB0aGUgdXNlciBzZXR0aW5nIGZvciBhIHRpZ2h0ZXIgcmVzdHJpY3Rpb24gKG1haW5seSBmb3Ig
dGVzdGluZykuCisgICAgaWYgKG1fcGFyYW1ldGVycy50aW1lVG9MaXZlVXNlckludGVyYWN0aW9u
KSB7CisgICAgICAgIGlmIChXYWxsVGltZTo6bm93KCkgPiByZXNvdXJjZVN0YXRpc3RpYy5tb3N0
UmVjZW50VXNlckludGVyYWN0aW9uVGltZSArIG1fcGFyYW1ldGVycy50aW1lVG9MaXZlVXNlcklu
dGVyYWN0aW9uLnZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQpCit7
CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX3BhcmFtZXRlcnMubWF4
U3RhdGlzdGljc0VudHJpZXMgPSBtYXhpbXVtRW50cnlDb3VudDsKK30KKwordm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3Qg
cHJ1bmVUYXJnZXRDb3VudCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIG1fcGFyYW1ldGVycy5wcnVuZUVudHJpZXNEb3duVG8gPSBwcnVuZVRhcmdldENvdW50Owor
fQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cHJ1bmVTdGF0aXN0
aWNzSWZOZWVkZWQoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
aWYgKG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnNpemUoKSA8PSBtX3BhcmFtZXRlcnMubWF4U3Rh
dGlzdGljc0VudHJpZXMpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX3BhcmFtZXRl
cnMucHJ1bmVFbnRyaWVzRG93blRvIDw9IG1fcGFyYW1ldGVycy5tYXhTdGF0aXN0aWNzRW50cmll
cyk7CisKKyAgICBzaXplX3QgbnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1bmUgPSBtX3Jlc291cmNl
U3RhdGlzdGljc01hcC5zaXplKCkgLSBtX3BhcmFtZXRlcnMucHJ1bmVFbnRyaWVzRG93blRvOwor
ICAgIEFTU0VSVChudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSk7CisKKyAgICBWZWN0b3I8U3Rh
dGlzdGljc0xhc3RTZWVuPiByZXNvdXJjZXNUb1BydW5lUGVySW1wb3J0YW5jZVttYXhJbXBvcnRh
bmNlICsgMV07CisgICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VT
dGF0aXN0aWNzTWFwLnZhbHVlcygpKQorICAgICAgICByZXNvdXJjZXNUb1BydW5lUGVySW1wb3J0
YW5jZVtjb21wdXRlSW1wb3J0YW5jZShyZXNvdXJjZVN0YXRpc3RpYyldLmFwcGVuZCh7IHJlc291
cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFpbiwgcmVzb3VyY2VTdGF0aXN0aWMubGFzdFNlZW4g
fSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGltcG9ydGFuY2UgPSAwOyBudW1iZXJPZkVudHJpZXNM
ZWZ0VG9QcnVuZSAmJiBpbXBvcnRhbmNlIDw9IG1heEltcG9ydGFuY2U7ICsraW1wb3J0YW5jZSkK
KyAgICAgICAgcHJ1bmVSZXNvdXJjZXMobV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAsIHJlc291cmNl
c1RvUHJ1bmVQZXJJbXBvcnRhbmNlW2ltcG9ydGFuY2VdLCBudW1iZXJPZkVudHJpZXNMZWZ0VG9Q
cnVuZSk7CisKKyAgICBBU1NFUlQoIW51bWJlck9mRW50cmllc0xlZnRUb1BydW5lKTsKK30KKwor
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlc2V0UGFyYW1ldGVyc1Rv
RGVmYXVsdFZhbHVlcygpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAg
ICBtX3BhcmFtZXRlcnMgPSB7IH07Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpsb2dUZXN0aW5nRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudCkKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBldmVudCA9IGV2ZW50Lmlzb2xhdGVkQ29weSgp
XSB7CisgICAgICAgIHN0b3JlLT5sb2dUZXN0aW5nRXZlbnQoZXZlbnQpOworICAgIH0pOworfQor
Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0TGFzdFNlZW4oY29u
c3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBTZWNvbmRzIHNlY29uZHMpCit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluKTsKKyAgICBzdGF0
aXN0aWNzLmxhc3RTZWVuID0gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHNlY29uZHMuc2Vjb25k
cygpKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFBy
ZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8mIHJlc291cmNlU3RhdGlzdGljID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluKTsK
KyAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2Fk
UHJldmFsZW5jZTo6SGlnaCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9t
YWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byYgcmVz
b3VyY2VTdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWlu
KHByaW1hcnlEb21haW4pOworICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlz
dGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpWZXJ5SGlnaCk7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZW1vdmVBbGxTdG9yYWdlQWNjZXNzKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3Jl
ID0gbWFrZVJlZihtX3N0b3JlKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgc3RvcmUtPnJlbW92ZUFsbFN0b3JhZ2VB
Y2Nlc3MoW3N0b3JlID0gc3RvcmUuY29weVJlZigpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgc3RvcmUtPnN0
YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJv
Y2VzcygpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICB1cGRhdGVD
b29raWVCbG9ja2luZyhbXSgpIHsgfSk7CisgICAgdXBkYXRlQ2FjaGVNYXhBZ2VDYXAoKTsKKyAg
ICB1cGRhdGVDbGllbnRTaWRlQ29va2llc0FnZUNhcCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmll
ci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mM2E5YTdiOTZhMDBkODVkMGMxZWE3YjFjYWE2MWM3MmJkMWRiMGM0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oCkBAIC0wLDAgKzEsMjAzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0
YXRpc3RpY3NDbGFzc2lmaWVyLmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmgiCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisjaW5jbHVkZSA8d3RmL1dv
cmtRdWV1ZS5oPgorCisjaWYgSEFWRShDT1JFX1BSRURJQ1RJT04pCisjaW5jbHVkZSAiUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIEtleWVkRGVjb2RlcjsKK2NsYXNzIEtleWVkRW5jb2RlcjsKK3N0cnVj
dCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgT3BlcmF0aW5nRGF0ZTsKK2NsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50
U3RvcmFnZTsKKworLy8gVGhpcyBpcyBhbHdheXMgY29uc3RydWN0ZWQgLyB1c2VkIC8gZGVzdHJv
eWVkIG9uIHRoZSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUncyBzdGF0aXN0aWNzIHF1
ZXVlLgorY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlIDogcHVibGljIENh
bk1ha2VXZWFrUHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4geworcHVibGlj
OgorICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZShXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUmLCBXb3JrUXVldWUmKTsKKyAgICB+UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlKCk7CisKKyAgICB2b2lkIHNldFBlcnNpc3RlbnRTdG9yYWdlKFJlc291cmNl
TG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZSYpOworCisgICAgdm9pZCBjbGVhcihDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmlzRW1wdHkoKTsgfQorCisgICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OktleWVkRW5jb2Rlcj4gY3JlYXRlRW5jb2RlckZyb21EYXRhKCkgY29u
c3Q7CisgICAgdm9pZCBtZXJnZVdpdGhEYXRhRnJvbURlY29kZXIoV2ViQ29yZTo6S2V5ZWREZWNv
ZGVyJik7CisKKyAgICB2b2lkIG1lcmdlU3RhdGlzdGljcyhWZWN0b3I8V2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcz4mJik7CisgICAgdm9pZCBwcm9jZXNzU3RhdGlzdGljcyhjb25zdCBG
dW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmKT4mKSBj
b25zdDsKKworICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tpbmcoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKKyAgICB2b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvQmxvY2ssIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7CisgICAgdm9pZCBjbGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5zKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBkb21haW5zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworCisgICAg
dm9pZCBpbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSgpOworICAgIHZvaWQg
cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOworCisgICAgdm9pZCByZXF1ZXN0U3Rv
cmFnZUFjY2Vzc1VuZGVyT3BlbmVyKFN0cmluZyYmIHByaW1hcnlEb21haW5Jbk5lZWRPZlN0b3Jh
Z2VBY2Nlc3MsIHVpbnQ2NF90IG9wZW5lclBhZ2VJRCwgU3RyaW5nJiYgb3BlbmVyUHJpbWFyeURv
bWFpbik7CisgICAgdm9pZCByZW1vdmVBbGxTdG9yYWdlQWNjZXNzKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CisKKyAgICB2b2lkIGdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YShD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgY2FuY2VsUGVuZGluZ1N0YXRp
c3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpOworCisgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJl
c291cmNlVW5kZXIoY29uc3QgU3RyaW5nJiBzdWJyZXNvdXJjZVByaW1hcnlEb21haW4sIGNvbnN0
IFN0cmluZyYgdG9wRnJhbWVQcmltYXJ5RG9tYWluKSBjb25zdDsKKyAgICBib29sIGlzUmVnaXN0
ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBTdHJpbmcmIHN1YkZyYW1lUHJpbWFyeURvbWFpbiwg
Y29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1hcnlEb21haW4pIGNvbnN0OworICAgIGJvb2wgaXNS
ZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFN0cmluZyYgaG9zdFJlZGlyZWN0ZWRGcm9t
UHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiBob3N0UmVkaXJlY3RlZFRvUHJpbWFyeURvbWFp
bikgY29uc3Q7CisKKyAgICB2b2lkIGNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5n
JiBwcmltYXJ5RG9tYWluKTsKKyAgICBTdHJpbmcgZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3Mo
KSBjb25zdDsKKyAgICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiBwcmlt
YXJ5RG9tYWluKSBjb25zdDsKKyAgICBib29sIGlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0
IFN0cmluZyYgcHJpbWFyeURvbWFpbikgY29uc3Q7CisgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pOworICAgIHZvaWQgc2V0VmVyeVByZXZh
bGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbik7CisKKyAgICB2b2lkIHNl
dEdyYW5kZmF0aGVyZWQoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBib29sIHZhbHVlKTsK
KyAgICBib29sIGlzR3JhbmRmYXRoZXJlZChjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pIGNv
bnN0OworCisgICAgdm9pZCBzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgU3Ry
aW5nJiBwcmltYXJ5U3ViRnJhbWVEb21haW4sIGNvbnN0IFN0cmluZyYgcHJpbWFyeVRvcEZyYW1l
RG9tYWluKTsKKyAgICB2b2lkIHNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihjb25z
dCBTdHJpbmcmIHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBwcmltYXJ5
VG9wRnJhbWVEb21haW4pOworICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRv
KGNvbnN0IFN0cmluZyYgcHJpbWFyeVN1YnJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIHBy
aW1hcnlSZWRpcmVjdERvbWFpbik7CisgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0RnJvbShjb25zdCBTdHJpbmcmIHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgU3Ry
aW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pOworICAgIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdFRvKGNvbnN0IFN0cmluZyYgdG9wRnJhbWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJp
bmcmIHByaW1hcnlSZWRpcmVjdERvbWFpbik7CisgICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0RnJvbShjb25zdCBTdHJpbmcmIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgY29uc3QgU3Ry
aW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pOworCisgICAgdm9pZCBsb2dUZXN0aW5nRXZlbnQo
Y29uc3QgU3RyaW5nJik7CisKKyAgICB2b2lkIHNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVf
dCBtYXhpbXVtRW50cnlDb3VudCk7CisgICAgdm9pZCBzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6
ZV90IHBydW5lVGFyZ2V0Q291bnQpOworICAgIHZvaWQgcmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0
VmFsdWVzKCk7CisKKyAgICB2b2lkIGNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpIGNvbnN0
OworCisgICAgdm9pZCBzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJv
b2wpOworICAgIHZvaWQgc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jk
c1JlbW92YWwoYm9vbCk7CisgICAgdm9pZCBzZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkoYm9vbCk7
CisgICAgdm9pZCBzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMpOworICAgIHZv
aWQgc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNlY29uZHMpOworICAg
IHZvaWQgc2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMpOworICAgIHZvaWQgc2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sKTsKKyAgICBib29sIGlzRGVidWdNb2RlRW5h
YmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdNb2RlRW5hYmxlZDsgfTsKKyAgICB2b2lkIHNl
dFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFN0cmluZyYgZG9tYWluKTsKKwor
ICAgIHZvaWQgaGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdHJpbmcmIHN1YkZyYW1lUHJpbWFyeURv
bWFpbiwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1hcnlEb21haW4sIHVpbnQ2NF90IGZyYW1l
SUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7Cisg
ICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBzdWJGcmFtZVByaW1hcnlEb21h
aW4sIFN0cmluZyYmIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWlu
dDY0X3QgcGFnZUlELCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
U3RvcmFnZUFjY2Vzc1N0YXR1cyk+JiYpOworICAgIHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzKFN0
cmluZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJhbWVIb3N0LCB1aW50NjRfdCBmcmFt
ZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93LCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKKworICAgIHZvaWQgbG9nRnJhbWVOYXZpZ2F0aW9uKGNv
bnN0IFN0cmluZyYgdGFyZ2V0UHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiBtYWluRnJhbWVQ
cmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHNvdXJjZVByaW1hcnlEb21haW4sIGNvbnN0IFN0
cmluZyYgdGFyZ2V0SG9zdCwgY29uc3QgU3RyaW5nJiBtYWluRnJhbWVIb3N0LCBib29sIGlzUmVk
aXJlY3QsIGJvb2wgaXNNYWluRnJhbWUpOworICAgIHZvaWQgbG9nVXNlckludGVyYWN0aW9uKGNv
bnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbik7CisKKyAgICB2b2lkIGNsZWFyVXNlckludGVyYWN0
aW9uKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbik7CisgICAgYm9vbCBoYXNIYWRVc2VySW50
ZXJhY3Rpb24oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKTsKKworICAgIHZvaWQgc2V0TGFz
dFNlZW4oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBTZWNvbmRzKTsKKworICAgIHZvaWQg
ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgYm9vbCBz
aG91bGRCbG9ja0FuZEtlZXBDb29raWVzKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3MmKTsKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRCbG9ja0FuZFB1cmdlQ29va2llcyhjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgc3RhdGljIGJvb2wgaGFz
VXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdChjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzJiwgY29uc3QgU3RyaW5nJiBmaXJzdFBhcnR5UHJpbWFyeURvbWFp
bik7CisgICAgYm9vbCBoYXNIYWRVbmV4cGlyZWRSZWNlbnRVc2VySW50ZXJhY3Rpb24oV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpIGNvbnN0OworICAgIGJvb2wgaGFzU3RhdGlzdGlj
c0V4cGlyZWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpIGNvbnN0Owor
ICAgIGJvb2wgd2FzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbihjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBjdXJyZW50LCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiB1cGRhdGVkKSBjb25zdDsKKyAgICB2b2lkIHNldFBy
ZXZhbGVudFJlc291cmNlKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmLCBSZXNvdXJj
ZUxvYWRQcmV2YWxlbmNlKTsKKyAgICB1bnNpZ25lZCByZWN1cnNpdmVseUdldEFsbERvbWFpbnNU
aGF0SGF2ZVJlZGlyZWN0ZWRUb1RoaXNEb21haW4oY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyYsIEhhc2hTZXQ8U3RyaW5nPiYgZG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRv
LCB1bnNpZ25lZCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKSBjb25zdDsKKyAgICB2b2lkIHNldFN0
b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9zdG9yYWdlQWNjZXNz
UHJvbXB0c0VuYWJsZWQgID0gZW5hYmxlZDsgfQorICAgIGJvb2wgc2hvdWxkUmVtb3ZlRGF0YVJl
Y29yZHMoKSBjb25zdDsKKyAgICB2b2lkIHNldERlYnVnTG9nZ2dpbmdFbmFibGVkKGJvb2wgZW5h
YmxlZCkgeyBtX2RlYnVnTG9nZ2luZ0VuYWJsZWQgID0gZW5hYmxlZDsgfQorICAgIHZvaWQgc2V0
RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoYm9vbCk7CisgICAgdm9pZCBzY2hlZHVsZVN0YXRpc3Rp
Y3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7CisgICAgdm9pZCBncmFudFN0b3JhZ2VB
Y2Nlc3NJbnRlcm5hbChTdHJpbmcmJiBzdWJGcmFtZUhvc3QsIFN0cmluZyYmIHRvcEZyYW1lSG9z
dCwgT3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCB1c2Vy
V2FzUHJvbXB0ZWROb3dPckVhcmxpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYp
OworICAgIHZvaWQgbWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOworICAgIGJvb2wgaXNQcmV2YWxlbnREdWVU
b0RlYnVnTW9kZShXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgVmVjdG9y
PFN0cmluZz4gZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7CisgICAgdm9p
ZCByZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZv
aWQgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKTsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzJiBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKGNvbnN0
IFN0cmluZyYpOworICAgIFZlY3RvcjxTdHJpbmc+IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21h
aW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcigpOworICAgIHZvaWQgc2V0Q2FjaGVNYXhBZ2VDYXAo
U2Vjb25kcyk7CisgICAgdm9pZCB1cGRhdGVDYWNoZU1heEFnZUNhcCgpOworICAgIHZvaWQgc2V0
QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoU2Vjb25kcyk7CisgICAgdm9pZCB1cGRhdGVDbGll
bnRTaWRlQ29va2llc0FnZUNhcCgpOworCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgdm9pZCBy
ZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCk7CisjZW5kaWYKKworICAgIHN0cnVjdCBQYXJh
bWV0ZXJzIHsKKyAgICAgICAgc2l6ZV90IHBydW5lRW50cmllc0Rvd25UbyB7IDgwMCB9OworICAg
ICAgICBzaXplX3QgbWF4U3RhdGlzdGljc0VudHJpZXMgeyAxMDAwIH07CisgICAgICAgIE9wdGlv
bmFsPFNlY29uZHM+IHRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb247CisgICAgICAgIFNlY29uZHMg
bWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsIHsgMV9oIH07CisgICAgICAgIFNl
Y29uZHMgZ3JhbmRmYXRoZXJpbmdUaW1lIHsgMjRfaCAqIDcgfTsKKyAgICAgICAgU2Vjb25kcyBj
YWNoZU1heEFnZUNhcFRpbWUgeyAyNF9oICogNyB9OworICAgICAgICBTZWNvbmRzIGNsaWVudFNp
ZGVDb29raWVzQWdlQ2FwVGltZSB7IDI0X2ggKiA3IH07CisgICAgICAgIGJvb2wgc2hvdWxkTm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCB7IGZhbHNlIH07CisgICAgICAgIGJv
b2wgc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwgeyB0cnVl
IH07CisgICAgICAgIGJvb2wgc2hvdWxkU3VibWl0VGVsZW1ldHJ5IHsgdHJ1ZSB9OworICAgIH07
CisKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIG1fc3RvcmU7CisgICAgUmVm
PFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7CisgICAgV2Vha1B0cjxSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzUGVyc2lzdGVudFN0b3JhZ2U+IG1fcGVyc2lzdGVudFN0b3JhZ2U7CisgICAgSGFzaE1hcDxT
dHJpbmcsIFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+IG1fcmVzb3VyY2VTdGF0aXN0
aWNzTWFwOworI2lmIEhBVkUoQ09SRV9QUkVESUNUSU9OKQorICAgIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NDbGFzc2lmaWVyQ29jb2EgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcjsK
KyNlbHNlCisgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIgbV9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzQ2xhc3NpZmllcjsKKyNlbmRpZgorI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQorICAgIEhhc2hTZXQ8dWludDY0X3Q+IG1fYWN0aXZlUGx1Z2luVG9rZW5zOworI2Vu
ZGlmCisgICAgUGFyYW1ldGVycyBtX3BhcmFtZXRlcnM7CisgICAgVmVjdG9yPE9wZXJhdGluZ0Rh
dGU+IG1fb3BlcmF0aW5nRGF0ZXM7CisgICAgV2FsbFRpbWUgbV9lbmRPZkdyYW5kZmF0aGVyaW5n
VGltZXN0YW1wOworICAgIGJvb2wgbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkIHsgZmFsc2UgfTsKKyAg
ICBib29sIG1fZGVidWdNb2RlRW5hYmxlZCB7IGZhbHNlIH07CisgICAgU3RyaW5nIG1fZGVidWdN
YW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKKyAgICBib29sIG1fc3RvcmFnZUFjY2Vzc1Byb21wdHNF
bmFibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQgeyBm
YWxzZSB9OworICAgIE1vbm90b25pY1RpbWUgbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92
ZWQ7CisKKyAgICB1aW50NjRfdCBtX2xhc3RTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVu
dGlmaWVyIHsgMCB9OworICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBtX3BlbmRpbmdTdGF0aXN0aWNz
UHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVu
dFN0b3JhZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkZDc4MWI4ZGM3MDgxOWZiZmUxNzIwNjA5MzlhNTQ3
MTRjOGMyMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcApA
QCAtMCwwICsxLDI3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5oIgorCisj
aW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlBlcnNpc3RlbmN5VXRpbHMuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCIKKyNpbmNsdWRlICJXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVNb25p
dG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9LZXllZENvZGluZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CisjaW5j
bHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjb25zdGV4cHIgU2Vjb25kcyBtaW5pbXVtV3JpdGVJbnRlcnZhbCB7
IDVfbWluIH07CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgYm9vbCBoYXNG
aWxlQ2hhbmdlZFNpbmNlKGNvbnN0IFN0cmluZyYgcGF0aCwgV2FsbFRpbWUgc2luY2UpCit7Cisg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgYXV0byBtb2RpZmljYXRpb25UaW1l
ID0gRmlsZVN5c3RlbTo6Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUocGF0aCk7CisgICAgaWYgKCFt
b2RpZmljYXRpb25UaW1lKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBtb2Rp
ZmljYXRpb25UaW1lLnZhbHVlKCkgPiBzaW5jZTsKK30KKworUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BlcnNpc3RlbnRTdG9yYWdlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3Jh
Z2UoUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlJiBtZW1vcnlTdG9yZSwgV29ya1F1
ZXVlJiB3b3JrUXVldWUsIGNvbnN0IFN0cmluZyYgc3RvcmFnZURpcmVjdG9yeVBhdGgpCisgICAg
OiBtX21lbW9yeVN0b3JlKG1lbW9yeVN0b3JlKQorICAgICwgbV93b3JrUXVldWUod29ya1F1ZXVl
KQorICAgICwgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aChzdG9yYWdlRGlyZWN0b3J5UGF0aCkKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fbWVtb3J5U3RvcmUuc2V0
UGVyc2lzdGVudFN0b3JhZ2UoKnRoaXMpOworCisgICAgcG9wdWxhdGVNZW1vcnlTdG9yZUZyb21E
aXNrKCk7CisgICAgc3RhcnRNb25pdG9yaW5nRGlzaygpOworfQorCitSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6On5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVu
dFN0b3JhZ2UoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYg
KG1faGFzUGVuZGluZ1dyaXRlKQorICAgICAgICB3cml0ZU1lbW9yeVN0b3JlVG9EaXNrKCk7Cit9
CisKK1N0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OnN0b3Jh
Z2VEaXJlY3RvcnlQYXRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdG9yYWdlRGlyZWN0b3J5
UGF0aC5pc29sYXRlZENvcHkoKTsKK30KKworU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
ZXJzaXN0ZW50U3RvcmFnZTo6cmVzb3VyY2VMb2dGaWxlUGF0aCgpIGNvbnN0Cit7CisgICAgU3Ry
aW5nIHN0b3JhZ2VQYXRoID0gc3RvcmFnZURpcmVjdG9yeVBhdGgoKTsKKyAgICBpZiAoc3RvcmFn
ZVBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKworICAgIHJl
dHVybiBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoc3RvcmFnZVBhdGgsICJm
dWxsX2Jyb3dzaW5nX3Nlc3Npb25fcmVzb3VyY2VMb2cucGxpc3QiKTsKK30KKwordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OnN0YXJ0TW9uaXRvcmluZ0Rpc2so
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGlmIChtX2ZpbGVNb25p
dG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgcmVzb3VyY2VMb2dQYXRoID0gcmVz
b3VyY2VMb2dGaWxlUGF0aCgpOworICAgIGlmIChyZXNvdXJjZUxvZ1BhdGguaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2ZpbGVNb25pdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxG
aWxlTW9uaXRvcj4ocmVzb3VyY2VMb2dQYXRoLCBtX3dvcmtRdWV1ZS5jb3B5UmVmKCksIFt0aGlz
LCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0gKEZpbGVNb25pdG9yOjpGaWxlQ2hhbmdl
VHlwZSB0eXBlKSB7CisgICAgICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgICAg
ICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN3aXRjaCAo
dHlwZSkgeworICAgICAgICBjYXNlIEZpbGVNb25pdG9yOjpGaWxlQ2hhbmdlVHlwZTo6TW9kaWZp
Y2F0aW9uOgorICAgICAgICAgICAgcmVmcmVzaE1lbW9yeVN0b3JlRnJvbURpc2soKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZpbGVNb25pdG9yOjpGaWxlQ2hhbmdlVHlwZTo6
UmVtb3ZhbDoKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUuY2xlYXIoW10geyB9KTsKKyAgICAg
ICAgICAgIG1fZmlsZU1vbml0b3IgPSBudWxscHRyOworICAgICAgICAgICAgbW9uaXRvckRpcmVj
dG9yeUZvck5ld1N0YXRpc3RpY3MoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdl
Ojptb25pdG9yRGlyZWN0b3J5Rm9yTmV3U3RhdGlzdGljcygpCit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICBTdHJpbmcgc3RvcmFnZVBhdGggPSBzdG9yYWdlRGlyZWN0
b3J5UGF0aCgpOworICAgIEFTU0VSVCghc3RvcmFnZVBhdGguaXNFbXB0eSgpKTsKKworICAgIGlm
ICghRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhzdG9yYWdlUGF0aCkpIHsKKyAgICAgICAgaWYgKCFG
aWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMoc3RvcmFnZVBhdGgpKSB7CisgICAgICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlOiBGYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSBw
YXRoICVzIiwgc3RvcmFnZVBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2ZpbGVNb25pdG9yID0gc3RkOjptYWtlX3VuaXF1
ZTxGaWxlTW9uaXRvcj4oc3RvcmFnZVBhdGgsIG1fd29ya1F1ZXVlLmNvcHlSZWYoKSwgW3RoaXNd
IChGaWxlTW9uaXRvcjo6RmlsZUNoYW5nZVR5cGUgdHlwZSkgeworICAgICAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gRmlsZU1vbml0b3I6OkZpbGVD
aGFuZ2VUeXBlOjpSZW1vdmFsKSB7CisgICAgICAgICAgICAvLyBEaXJlY3Rvcnkgd2FzIHJlbW92
ZWQhCisgICAgICAgICAgICBtX2ZpbGVNb25pdG9yID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyByZXNvdXJjZUxvZ1BhdGggPSByZXNv
dXJjZUxvZ0ZpbGVQYXRoKCk7CisgICAgICAgIEFTU0VSVCghcmVzb3VyY2VMb2dQYXRoLmlzRW1w
dHkoKSk7CisKKyAgICAgICAgaWYgKCFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHJlc291cmNlTG9n
UGF0aCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9maWxlTW9uaXRvciA9IG51
bGxwdHI7CisKKyAgICAgICAgcmVmcmVzaE1lbW9yeVN0b3JlRnJvbURpc2soKTsKKyAgICAgICAg
c3RhcnRNb25pdG9yaW5nRGlzaygpOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6c3RvcE1vbml0b3JpbmdEaXNrKCkKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBtX2ZpbGVNb25pdG9yID0gbnVsbHB0cjsK
K30KKworLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgZmlsZSBjaGFuZ2VzIG9uIGRpc2suCit2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6cmVmcmVzaE1lbW9y
eVN0b3JlRnJvbURpc2soKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgU3RyaW5nIGZpbGVQYXRoID0gcmVzb3VyY2VMb2dGaWxlUGF0aCgpOworICAgIGlmIChmaWxl
UGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIHNvbWV0aW1lcyBz
ZWUgZmlsZSBjaGFuZ2VkIGV2ZW50cyBmcm9tIGJlZm9yZSBvdXIgbG9hZCBjb21wbGV0ZWQgKHdl
IHN0YXJ0CisgICAgLy8gcmVhZGluZyBhdCB0aGUgZmlyc3QgY2hhbmdlIGV2ZW50LCBidXQgd2Ug
bWlnaHQgcmVjZWl2ZSBhIHNlcmllcyBvZiBldmVudHMgcmVsYXRlZAorICAgIC8vIHRvIHRoZSBz
YW1lIGZpbGUgb3BlcmF0aW9uKS4gQ2F0Y2ggdGhpcyBjYXNlIHRvIGF2b2lkIHJlYWRpbmcgb3Zl
cmx5IG9mdGVuLgorICAgIGlmICghaGFzRmlsZUNoYW5nZWRTaW5jZShmaWxlUGF0aCwgbV9sYXN0
U3RhdGlzdGljc0ZpbGVTeW5jVGltZSkpCisgICAgICAgIHJldHVybjsKKworICAgIFdhbGxUaW1l
IHJlYWRUaW1lID0gV2FsbFRpbWU6Om5vdygpOworCisgICAgYXV0byBkZWNvZGVyID0gY3JlYXRl
Rm9yRmlsZShmaWxlUGF0aCk7CisgICAgaWYgKCFkZWNvZGVyKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX21lbW9yeVN0b3JlLm1lcmdlV2l0aERhdGFGcm9tRGVjb2RlcigqZGVjb2Rlcik7Cisg
ICAgbV9sYXN0U3RhdGlzdGljc0ZpbGVTeW5jVGltZSA9IHJlYWRUaW1lOworfQorCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6cG9wdWxhdGVNZW1vcnlTdG9y
ZUZyb21EaXNrKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFN0
cmluZyBmaWxlUGF0aCA9IHJlc291cmNlTG9nRmlsZVBhdGgoKTsKKyAgICBpZiAoZmlsZVBhdGgu
aXNFbXB0eSgpIHx8ICFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGZpbGVQYXRoKSkgeworICAgICAg
ICBtX21lbW9yeVN0b3JlLmdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YShbXSgpIHsgfSk7
CisgICAgICAgIG1vbml0b3JEaXJlY3RvcnlGb3JOZXdTdGF0aXN0aWNzKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoIWhhc0ZpbGVDaGFuZ2VkU2luY2UoZmlsZVBhdGgsIG1f
bGFzdFN0YXRpc3RpY3NGaWxlU3luY1RpbWUpKSB7CisgICAgICAgIC8vIE5vIG5lZWQgdG8gZ3Jh
bmRmYXRoZXIgaW4gdGhpcyBjYXNlLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgV2Fs
bFRpbWUgcmVhZFRpbWUgPSBXYWxsVGltZTo6bm93KCk7CisKKyAgICBhdXRvIGRlY29kZXIgPSBj
cmVhdGVGb3JGaWxlKGZpbGVQYXRoKTsKKyAgICBpZiAoIWRlY29kZXIpIHsKKyAgICAgICAgbV9t
ZW1vcnlTdG9yZS5ncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEoW10oKSB7IH0pOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRGVidWcgbW9kZSBoYXMgYSBwcmVwb3VsYXRl
ZCBtZW1vcnkgc3RvcmUuCisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX21lbW9yeVN0b3JlLmlz
RW1wdHkoKSB8fCBtX21lbW9yeVN0b3JlLmlzRGVidWdNb2RlRW5hYmxlZCgpLCAiVGhpcyBpcyB0
aGUgaW5pdGlhbCBpbXBvcnQgc28gdGhlIHN0b3JlIHNob3VsZCBiZSBlbXB0eSIpOworICAgIG1f
bWVtb3J5U3RvcmUubWVyZ2VXaXRoRGF0YUZyb21EZWNvZGVyKCpkZWNvZGVyKTsKKworICAgIG1f
bGFzdFN0YXRpc3RpY3NGaWxlU3luY1RpbWUgPSByZWFkVGltZTsKKworICAgIG1fbWVtb3J5U3Rv
cmUubG9nVGVzdGluZ0V2ZW50KCJQb3B1bGF0ZWRXaXRob3V0R3JhbmRmYXRoZXJpbmciX3MpOwor
fQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6d3JpdGVN
ZW1vcnlTdG9yZVRvRGlzaygpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICBtX2hhc1BlbmRpbmdXcml0ZSA9IGZhbHNlOworICAgIHN0b3BNb25pdG9yaW5nRGlzaygp
OworCisgICAgd3JpdGVUb0Rpc2sobV9tZW1vcnlTdG9yZS5jcmVhdGVFbmNvZGVyRnJvbURhdGEo
KSwgcmVzb3VyY2VMb2dGaWxlUGF0aCgpKTsKKworICAgIG1fbGFzdFN0YXRpc3RpY3NGaWxlU3lu
Y1RpbWUgPSBXYWxsVGltZTo6bm93KCk7CisgICAgbV9sYXN0U3RhdGlzdGljc1dyaXRlVGltZSA9
IE1vbm90b25pY1RpbWU6Om5vdygpOworCisgICAgc3RhcnRNb25pdG9yaW5nRGlzaygpOworfQor
Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6c2NoZWR1bGVP
cldyaXRlTWVtb3J5U3RvcmUoRm9yY2VJbW1lZGlhdGVXcml0ZSBmb3JjZUltbWVkaWF0ZVdyaXRl
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byB0aW1lU2lu
Y2VMYXN0V3JpdGUgPSBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fbGFzdFN0YXRpc3RpY3NXcml0
ZVRpbWU7CisgICAgaWYgKGZvcmNlSW1tZWRpYXRlV3JpdGUgIT0gRm9yY2VJbW1lZGlhdGVXcml0
ZTo6WWVzICYmIHRpbWVTaW5jZUxhc3RXcml0ZSA8IG1pbmltdW1Xcml0ZUludGVydmFsKSB7Cisg
ICAgICAgIGlmICghbV9oYXNQZW5kaW5nV3JpdGUpIHsKKyAgICAgICAgICAgIG1faGFzUGVuZGlu
Z1dyaXRlID0gdHJ1ZTsKKyAgICAgICAgICAgIFNlY29uZHMgZGVsYXkgPSBtaW5pbXVtV3JpdGVJ
bnRlcnZhbCAtIHRpbWVTaW5jZUxhc3RXcml0ZSArIDFfczsKKyAgICAgICAgICAgIG1fd29ya1F1
ZXVlLT5kaXNwYXRjaEFmdGVyKGRlbGF5LCBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyld
IHsKKyAgICAgICAgICAgICAgICBpZiAod2Vha1RoaXMpCisgICAgICAgICAgICAgICAgICAgIHdl
YWtUaGlzLT53cml0ZU1lbW9yeVN0b3JlVG9EaXNrKCk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgd3JpdGVNZW1vcnlTdG9yZVRvRGlz
aygpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6
Y2xlYXIoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIFN0cmluZyBm
aWxlUGF0aCA9IHJlc291cmNlTG9nRmlsZVBhdGgoKTsKKyAgICBpZiAoZmlsZVBhdGguaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzdG9wTW9uaXRvcmluZ0Rpc2soKTsKKworICAg
IGlmICghRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShmaWxlUGF0aCkgJiYgRmlsZVN5c3RlbTo6Zmls
ZUV4aXN0cyhmaWxlUGF0aCkpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MsICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6IFVu
YWJsZSB0byBkZWxldGUgc3RhdGlzdGljcyBmaWxlOiAlcyIsIGZpbGVQYXRoLnV0ZjgoKS5kYXRh
KCkpOworfQorCisjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6ZXhjbHVkZUZyb21CYWNrdXAoKSBjb25zdAorewor
fQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJz
aXN0ZW50U3RvcmFnZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEy
YWE5YjhhZWMyZmQ1MDAxZjFkMmNjNmFhMzNkYmIyNzI4ZWU2YmUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUg
PHd0Zi9Nb25vdG9uaWNUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRl
IDx3dGYvV2FsbFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorI2luY2x1ZGUgPHd0
Zi9Xb3JrUXVldWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworY2xhc3MgRmlsZU1vbml0b3I7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU7CisKKy8vIENhbiBv
bmx5IGJlIGNvbnN0cnVjdGVkIC8gZGVzdHJveWVkIC8gdXNlZCBmcm9tIHRoZSBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUncyBzdGF0aXN0aWMgcXVldWUuCitjbGFzcyBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlPiB7CitwdWJsaWM6CisgICAgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZSYsIFdvcmtRdWV1ZSYsIGNvbnN0IFN0cmluZyYgc3RvcmFnZURpcmVjdG9y
eVBhdGgpOworICAgIH5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UoKTsK
KworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIGVudW0gY2xhc3MgRm9yY2VJbW1lZGlhdGVXcml0
ZSB7IE5vLCBZZXMsIH07CisgICAgdm9pZCBzY2hlZHVsZU9yV3JpdGVNZW1vcnlTdG9yZShGb3Jj
ZUltbWVkaWF0ZVdyaXRlKTsKKworcHJpdmF0ZToKKyAgICBTdHJpbmcgc3RvcmFnZURpcmVjdG9y
eVBhdGgoKSBjb25zdDsKKyAgICBTdHJpbmcgcmVzb3VyY2VMb2dGaWxlUGF0aCgpIGNvbnN0Owor
CisgICAgdm9pZCBzdGFydE1vbml0b3JpbmdEaXNrKCk7CisgICAgdm9pZCBzdG9wTW9uaXRvcmlu
Z0Rpc2soKTsKKyAgICB2b2lkIG1vbml0b3JEaXJlY3RvcnlGb3JOZXdTdGF0aXN0aWNzKCk7CisK
KyAgICB2b2lkIHdyaXRlTWVtb3J5U3RvcmVUb0Rpc2soKTsKKyAgICB2b2lkIHBvcHVsYXRlTWVt
b3J5U3RvcmVGcm9tRGlzaygpOworICAgIHZvaWQgZXhjbHVkZUZyb21CYWNrdXAoKSBjb25zdDsK
KyAgICB2b2lkIHJlZnJlc2hNZW1vcnlTdG9yZUZyb21EaXNrKCk7CisKKyAgICBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUmIG1fbWVtb3J5U3RvcmU7CisgICAgUmVmPFdvcmtRdWV1
ZT4gbV93b3JrUXVldWU7CisgICAgY29uc3QgU3RyaW5nIG1fc3RvcmFnZURpcmVjdG9yeVBhdGg7
CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkZpbGVNb25pdG9yPiBtX2ZpbGVNb25pdG9y
OworICAgIFdhbGxUaW1lIG1fbGFzdFN0YXRpc3RpY3NGaWxlU3luY1RpbWU7CisgICAgTW9ub3Rv
bmljVGltZSBtX2xhc3RTdGF0aXN0aWNzV3JpdGVUaW1lOworICAgIGJvb2wgbV9oYXNQZW5kaW5n
V3JpdGUgeyBmYWxzZSB9OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NTFlNzEwOGQ3ODEwZTQxYTU2NDczNDA4
YzI1MTFkZmExMGZiYmMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKQEAg
LTAsMCArMSw5MDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKKworI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCIK
KyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuaCIKKyNp
bmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5j
bHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5Lmgi
CisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlTWVzc2FnZXMuaCIKKyNp
bmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgiCisjaW5jbHVkZSAi
V2Vic2l0ZURhdGFGZXRjaE9wdGlvbi5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaD4KKyNpbmNsdWRlIDx3
dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+CisjaW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFkQ29waWVy
Lmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RocmVh
ZHMvQmluYXJ5U2VtYXBob3JlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBpbmxpbmUgU3RyaW5n
IGlzb2xhdGVkUHJpbWFyeURvbWFpbihjb25zdCBUJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gUmVz
b3VyY2VMb2FkU3RhdGlzdGljczo6cHJpbWFyeURvbWFpbih2YWx1ZSkuaXNvbGF0ZWRDb3B5KCk7
Cit9CisKK2NvbnN0IE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+JiBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6Om1vbml0b3JlZERhdGFUeXBlcygpCit7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+PiBkYXRhVHlwZXMoc3RkOjppbml0
aWFsaXplcl9saXN0PFdlYnNpdGVEYXRhVHlwZT4oeworICAgICAgICBXZWJzaXRlRGF0YVR5cGU6
OkNvb2tpZXMsCisgICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6RE9NQ2FjaGUsCisgICAgICAgIFdl
YnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzLAorICAgICAgICBXZWJzaXRlRGF0YVR5
cGU6OkxvY2FsU3RvcmFnZSwKKyAgICAgICAgV2Vic2l0ZURhdGFUeXBlOjpNZWRpYUtleXMsCisg
ICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUsCisjaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6UGx1
Z0luRGF0YSwKKyNlbmRpZgorICAgICAgICBXZWJzaXRlRGF0YVR5cGU6OlNlYXJjaEZpZWxkUmVj
ZW50U2VhcmNoZXMsCisgICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UsCisj
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorICAgICAgICBXZWJzaXRlRGF0YVR5cGU6OlNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25zLAorI2VuZGlmCisgICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6
V2ViU1FMRGF0YWJhc2VzLAorICAgIH0pKTsKKworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICByZXR1cm4gZGF0YVR5cGVzOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChi
b29sIHZhbHVlKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBwb3N0
VGFzayhbdGhpcywgdmFsdWVdIHsKKyAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAg
ICAgICBtX21lbW9yeVN0b3JlLT5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2Fu
bmVkKHZhbHVlKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFs
KGJvb2wgdmFsdWUpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHBv
c3RUYXNrKFt0aGlzLCB2YWx1ZV0geworICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAg
ICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0
YVJlY29yZHNSZW1vdmFsKHZhbHVlKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeShib29sIHZhbHVlKQor
eworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBwb3N0VGFzayhbdGhpcywg
dmFsdWVdIHsKKyAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgICAgICBtX21lbW9y
eVN0b3JlLT5zZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkodmFsdWUpOworICAgIH0pOworfQorCitX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZShXZWJzaXRlRGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQorICAgIDogbV93ZWJzaXRl
RGF0YVN0b3JlKG1ha2VXZWFrUHRyKHdlYnNpdGVEYXRhU3RvcmUpKQorICAgICwgbV9zdGF0aXN0
aWNzUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZSBQcm9jZXNzIERhdGEgUXVldWUiLCBXb3JrUXVldWU6OlR5cGU6OlNlcmlhbCwgV29ya1F1ZXVl
OjpRT1M6OlV0aWxpdHkpKQorICAgICwgbV9kYWlseVRhc2tzVGltZXIoUnVuTG9vcDo6bWFpbigp
LCB0aGlzLCAmV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwZXJmb3JtRGFpbHlUYXNr
cykKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgcG9zdFRhc2soW3Ro
aXMsIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSB3ZWJzaXRlRGF0YVN0b3JlLnJl
c29sdmVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpLmlzb2xhdGVkQ29weSgpXSB7
CisgICAgICAgIG1fbWVtb3J5U3RvcmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZT4oKnRoaXMsIG1fc3RhdGlzdGljc1F1ZXVlKTsKKyAgICAgICAg
bV9wZXJzaXN0ZW50U3RvcmFnZSA9IHN0ZDo6bWFrZV91bmlxdWU8UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BlcnNpc3RlbnRTdG9yYWdlPigqbV9tZW1vcnlTdG9yZSwgbV9zdGF0aXN0aWNzUXVldWUs
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpOworICAgIH0pOworCisgICAgbV9kYWls
eVRhc2tzVGltZXIuc3RhcnRSZXBlYXRpbmcoMjRfaCk7Cit9CisKK1dlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6fldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSgpCit7CisgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGZsdXNoQW5kRGVzdHJveVBlcnNpc3Rl
bnRTdG9yZSgpOworfQorCitpbmxpbmUgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnBvc3RUYXNrKFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIHRhc2spCit7CisgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBtX3N0YXRpc3RpY3NRdWV1ZS0+ZGlzcGF0Y2goW3By
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgdGFzayA9IFdURk1vdmUodGFzayldIHsKKyAg
ICAgICAgdGFzaygpOworICAgIH0pOworfQorCitpbmxpbmUgdm9pZCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnBvc3RUYXNrUmVwbHkoV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgcmVw
bHkpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFdURk1vdmUocmVwbHkpKTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmZsdXNoQW5kRGVzdHJveVBlcnNpc3RlbnRTdG9yZSgpCit7CisgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmICghbV9wZXJzaXN0ZW50U3RvcmFn
ZSAmJiAhbV9tZW1vcnlTdG9yZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTWFrZSBzdXJl
IHdlIGRlc3Ryb3kgdGhlIHBlcnNpc3RlbnQgc3RvcmUgb24gdGhlIGJhY2tncm91bmQgcXVldWUg
YW5kIHdhaXQgZm9yIGl0IHRvIGRpZQorICAgIC8vIHN5bmNocm9ub3VzbHkgc2luY2UgaXQgaGFz
IGEgQysrIHJlZmVyZW5jZSB0byB1cy4gQmxvY2tpbmcgbmF0dXJlIG9mIHRoaXMgdGFzayBhbGxv
d3MgdXMKKyAgICAvLyB0byBub3QgbWFpbnRhaW4gYSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUgcmVmZXJlbmNlIGZvciB0aGUgZHVyYXRpb24gb2YgZGlzcGF0Y2gsCisgICAgLy8gYXZv
aWRpbmcgZG91YmxlLWRlbGV0aW9uIGlzc3VlcyB3aGVuIHRoaXMgaXMgaW52b2tlZCBmcm9tIHRo
ZSBkZXN0cnVjdG9yLgorICAgIEJpbmFyeVNlbWFwaG9yZSBzZW1hcGhvcmU7CisgICAgbV9zdGF0
aXN0aWNzUXVldWUtPmRpc3BhdGNoKFsmc2VtYXBob3JlLCB0aGlzXSB7CisgICAgICAgIG1fcGVy
c2lzdGVudFN0b3JhZ2UgPSBudWxscHRyOworICAgICAgICBtX21lbW9yeVN0b3JlID0gbnVsbHB0
cjsKKyAgICAgICAgc2VtYXBob3JlLnNpZ25hbCgpOworICAgIH0pOworICAgIHNlbWFwaG9yZS53
YWl0KCk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOworCisgICAgcG9zdFRhc2soW3RoaXMsIHZhbHVlLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBpZiAobV9t
ZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEZWJ1Z01vZGUodmFsdWUpOworICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVS
TCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7
CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHBvc3RUYXNrKFt0aGlzLCBw
cmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHVybCksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGlm
IChtX21lbW9yeVN0b3JlKQorICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0UHJldmFsZW50
UmVzb3VyY2VGb3JEZWJ1Z01vZGUocHJpbWFyeURvbWFpbik7CisgICAgICAgIHBvc3RUYXNrUmVw
bHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIH0pOworfQorCit2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29y
ZHNQcm9jZXNzaW5nKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
cG9zdFRhc2soW3RoaXNdIHsKKyAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgICAg
ICBtX21lbW9yeVN0b3JlLT5wcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7CisgICAg
fSk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVXBkYXRlZChWZWN0b3I8V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
cz4mJiBvcmlnaW5zKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICAv
LyBJdCBpcyBzYWZlIHRvIG1vdmUgdGhlIG9yaWdpbnMgdG8gdGhlIGJhY2tncm91bmQgcXVldWUg
d2l0aG91dCBpc29sYXRlZCBjb3B5IGhlcmUgYmVjYXVzZSB0aGlzIGlzIGFuIHItdmFsdWUKKyAg
ICAvLyBjb21pbmcgZnJvbSBJUEMuIFJlc291cmNlTG9hZFN0YXRpc3RpY3Mgb25seSBjb250YWlu
cyBzdHJpbmdzIHdoaWNoIGFyZSBzYWZlIHRvIG1vdmUgdG8gb3RoZXIgdGhyZWFkcyBhcyBsb25n
CisgICAgLy8gYXMgbm9ib2R5IG9uIHRoaXMgdGhyZWFkIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRo
b3NlIHN0cmluZ3MuCisgICAgcG9zdFRhc2soW3RoaXMsIG9yaWdpbnMgPSBXVEZNb3ZlKG9yaWdp
bnMpXSgpIG11dGFibGUgeworICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgbV9tZW1vcnlTdG9yZS0+bWVyZ2VTdGF0aXN0aWNzKFdURk1v
dmUob3JpZ2lucykpOworCisgICAgICAgIC8vIFdlIGNhbiBjYW5jZWwgYW55IHBlbmRpbmcgcmVx
dWVzdCB0byBwcm9jZXNzIHN0YXRpc3RpY3Mgc2luY2Ugd2UncmUgZG9pbmcgaXQgc3luY2hyb25v
dXNseSBiZWxvdy4KKyAgICAgICAgbV9tZW1vcnlTdG9yZS0+Y2FuY2VsUGVuZGluZ1N0YXRpc3Rp
Y3NQcm9jZXNzaW5nUmVxdWVzdCgpOworCisgICAgICAgIC8vIEZpcmUgYmVmb3JlIHByb2Nlc3Np
bmcgc3RhdGlzdGljcyB0byBwcm9wYWdhdGUgdXNlciBpbnRlcmFjdGlvbiBhcyBmYXN0IGFzIHBv
c3NpYmxlIHRvIHRoZSBuZXR3b3JrIHByb2Nlc3MuCisgICAgICAgIG1fbWVtb3J5U3RvcmUtPnVw
ZGF0ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9KTsKKyAgICAgICAgbV9tZW1vcnlTdG9yZS0+cHJv
Y2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOworICAgIH0pOworfQorCit2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzU3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBzdWJG
cmFtZUhvc3QsIFN0cmluZyYmIHRvcEZyYW1lSG9zdCwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0
X3QgcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChib29sKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKK3sKKyAgICBBU1NFUlQoc3ViRnJhbWVIb3N0ICE9IHRvcEZyYW1lSG9zdCk7CisgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHBvc3RUYXNrKFt0aGlzLCBzdWJGcmFt
ZVByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4oc3ViRnJhbWVIb3N0KSwgdG9w
RnJhbWVQcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHRvcEZyYW1lSG9zdCks
IGZyYW1lSUQsIHBhZ2VJRCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkgeworICAg
ICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoZmFsc2UpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgbV9tZW1vcnlTdG9yZS0+aGFzU3RvcmFnZUFjY2VzcyhzdWJGcmFtZVBy
aW1hcnlEb21haW4sIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgZnJhbWVJRCwgcGFnZUlELCBbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYm9vbCBoYXNTdG9y
YWdlQWNjZXNzKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGhhc1N0b3JhZ2VBY2Nlc3Nd
ICgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGhhc1N0b3Jh
Z2VBY2Nlc3MpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2FsbEhhc1N0b3JhZ2VBY2Nlc3NG
b3JGcmFtZUhhbmRsZXIoY29uc3QgU3RyaW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5n
JiBmaXJzdFBhcnR5RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBoYXNBY2Nlc3MpPiYmIGNhbGxiYWNrKQoreworICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQorICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKKyAgICAgICAgbV93ZWJz
aXRlRGF0YVN0b3JlLT5oYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyKHJlc291cmNlRG9t
YWluLCBmaXJzdFBhcnR5RG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIFdURk1vdmUoY2FsbGJhY2sp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIGNhbGxiYWNrKGZhbHNlKTsK
K30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlcXVlc3RTdG9yYWdl
QWNjZXNzKFN0cmluZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJhbWVIb3N0LCB1aW50
NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgcHJvbXB0RW5hYmxlZCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVzKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKK3sKKyAgICBBU1NFUlQoc3ViRnJhbWVIb3N0ICE9IHRvcEZyYW1lSG9zdCk7CisgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc3ViRnJhbWVQcmltYXJ5RG9tYWlu
ID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHN1YkZyYW1lSG9zdCk7CisgICAgYXV0byB0b3BGcmFt
ZVByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odG9wRnJhbWVIb3N0KTsKKyAg
ICBpZiAoc3ViRnJhbWVQcmltYXJ5RG9tYWluID09IHRvcEZyYW1lUHJpbWFyeURvbWFpbikgewor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpIYXNBY2Nlc3Mp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcG9zdFRhc2soW3RoaXMsIHN1YkZyYW1l
UHJpbWFyeURvbWFpbiA9IGNyb3NzVGhyZWFkQ29weShzdWJGcmFtZVByaW1hcnlEb21haW4pLCB0
b3BGcmFtZVByaW1hcnlEb21haW4gPSBjcm9zc1RocmVhZENvcHkodG9wRnJhbWVQcmltYXJ5RG9t
YWluKSwgZnJhbWVJRCwgcGFnZUlELCBwcm9tcHRFbmFibGVkLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFt
X21lbW9yeVN0b3JlKSB7CisgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpDYW5ub3RSZXF1
ZXN0QWNjZXNzKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgbV9tZW1vcnlTdG9yZS0+cmVxdWVzdFN0b3JhZ2VBY2Nlc3MoV1RGTW92
ZShzdWJGcmFtZVByaW1hcnlEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1lUHJpbWFyeURvbWFpbiks
IGZyYW1lSUQsIHBhZ2VJRCwgcHJvbXB0RW5hYmxlZCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKFN0b3JhZ2VBY2Nlc3NTdGF0dXMgc3RhdHVzKSBtdXRh
YmxlIHsKKyAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN0YXR1c10gKCkgbXV0YWJsZSB7CisgICAgICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoc3RhdHVzKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoU3RyaW5nJiYgcHJpbWFyeURvbWFpbklu
TmVlZE9mU3RvcmFnZUFjY2VzcywgdWludDY0X3Qgb3BlbmVyUGFnZUlELCBTdHJpbmcmJiBvcGVu
ZXJQcmltYXJ5RG9tYWluKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAg
ICAvLyBJdCBpcyBzYWZlIHRvIG1vdmUgdGhlIHN0cmluZ3MgdG8gdGhlIGJhY2tncm91bmQgcXVl
dWUgd2l0aG91dCBpc29sYXRlZCBjb3B5IGhlcmUgYmVjYXVzZSB0aGV5IGFyZSByLXZhbHVlIHJl
ZmVyZW5jZXMKKyAgICAvLyBjb21pbmcgZnJvbSBJUEMuIFN0cmluZ3Mgd2hpY2ggYXJlIHNhZmUg
dG8gbW92ZSB0byBvdGhlciB0aHJlYWRzIGFzIGxvbmcgYXMgbm9ib2R5IG9uIHRoaXMgdGhyZWFk
IGhvbGRzIGEgcmVmZXJlbmNlCisgICAgLy8gdG8gdGhvc2Ugc3RyaW5ncy4KKyAgICBwb3N0VGFz
ayhbdGhpcywgcHJpbWFyeURvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdURk1vdmUocHJp
bWFyeURvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyksIG9wZW5lclBhZ2VJRCwgb3BlbmVyUHJp
bWFyeURvbWFpbiA9IFdURk1vdmUob3BlbmVyUHJpbWFyeURvbWFpbildKCkgbXV0YWJsZSB7Cisg
ICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+cmVx
dWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihXVEZNb3ZlKHByaW1hcnlEb21haW5Jbk5lZWRP
ZlN0b3JhZ2VBY2Nlc3MpLCBvcGVuZXJQYWdlSUQsIFdURk1vdmUob3BlbmVyUHJpbWFyeURvbWFp
bikpOworICAgIH0pOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Z3JhbnRTdG9yYWdlQWNjZXNzKFN0cmluZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJh
bWVIb3N0LCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1By
b21wdGVkTm93LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgcG9zdFRhc2soW3Ro
aXMsIHN1YkZyYW1lSG9zdCA9IGNyb3NzVGhyZWFkQ29weShzdWJGcmFtZUhvc3QpLCB0b3BGcmFt
ZUhvc3QgPSBjcm9zc1RocmVhZENvcHkodG9wRnJhbWVIb3N0KSwgZnJhbWVJRCwgcGFnZUlELCB1
c2VyV2FzUHJvbXB0ZWROb3csIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpIHsKKyAg
ICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKGZhbHNlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgbV9tZW1vcnlTdG9yZS0+Z3JhbnRTdG9yYWdlQWNjZXNzKFdURk1v
dmUoc3ViRnJhbWVIb3N0KSwgV1RGTW92ZSh0b3BGcmFtZUhvc3QpLCBmcmFtZUlELCBwYWdlSUQs
IHVzZXJXYXNQcm9tcHRlZE5vdywgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKGJvb2wgd2FzR3JhbnRlZEFjY2VzcykgbXV0YWJsZSB7CisgICAgICAgICAg
ICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpLCB3YXNHcmFudGVkQWNjZXNzXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcih3YXNHcmFudGVkQWNjZXNzKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmNhbGxHcmFudFN0b3JhZ2VBY2Nlc3NIYW5kbGVyKGNvbnN0IFN0cmluZyYgc3ViRnJhbWVQ
cmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgT3B0aW9u
YWw8dWludDY0X3Q+IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sKT4mJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OworCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKKyAgICBpZiAobV93ZWJz
aXRlRGF0YVN0b3JlKSB7CisgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+Z3JhbnRTdG9yYWdl
QWNjZXNzSGFuZGxlcihzdWJGcmFtZVByaW1hcnlEb21haW4sIHRvcEZyYW1lUHJpbWFyeURvbWFp
biwgZnJhbWVJRCwgcGFnZUlELCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjZW5kaWYKKyAgICBjYWxsYmFjayhmYWxzZSk7Cit9CisKK3ZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpCit7CisgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHBvc3RUYXNrKFt0aGlzXSB7CisgICAg
ICAgIGlmICghbV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9t
ZW1vcnlTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICB9KTsKK30KKwordm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3Mo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFU
SVNUSUNTKQorICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCisgICAgICAgIG1fd2Vic2l0ZURh
dGFTdG9yZS0+cmVtb3ZlQWxsU3RvcmFnZUFjY2Vzc0hhbmRsZXIoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOworICAgIGVsc2UKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyNlbHNl
CisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6YXBwbGljYXRpb25XaWxsVGVybWluYXRlKCkKK3sKKyAgICBm
bHVzaEFuZERlc3Ryb3lQZXJzaXN0ZW50U3RvcmUoKTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnBlcmZvcm1EYWlseVRhc2tzKCkKK3sKKyAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgcG9zdFRhc2soW3RoaXNdIHsKKyAgICAgICAgaWYgKCFt
X21lbW9yeVN0b3JlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fbWVtb3J5U3Rv
cmUtPmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIG1f
bWVtb3J5U3RvcmUtPmNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpOworICAgIH0pOworfQor
Cit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3VibWl0VGVsZW1ldHJ5KCkK
K3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgcG9zdFRhc2soW3RoaXNd
IHsKKyAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgICAgICBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpjYWxjdWxhdGVBbmRTdWJtaXQoKm1fbWVtb3J5U3RvcmUp
OworICAgIH0pOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9n
RnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFdlYkZyYW1lUHJveHkmIGZyYW1lLCBjb25zdCBVUkwmIHBh
Z2VVUkwsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVVJM
JiByZWRpcmVjdFVSTCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
YXV0byBzb3VyY2VVUkwgPSByZWRpcmVjdFVSTDsKKyAgICBib29sIGlzUmVkaXJlY3QgPSAhcmVk
aXJlY3RVUkwuaXNOdWxsKCk7CisgICAgaWYgKCFpc1JlZGlyZWN0KSB7CisgICAgICAgIHNvdXJj
ZVVSTCA9IGZyYW1lLnVybCgpOworICAgICAgICBpZiAoc291cmNlVVJMLmlzTnVsbCgpKQorICAg
ICAgICAgICAgc291cmNlVVJMID0gcGFnZVVSTDsKKyAgICB9CisKKyAgICBhdXRvJiB0YXJnZXRV
UkwgPSByZXF1ZXN0LnVybCgpOworCisgICAgaWYgKCF0YXJnZXRVUkwuaXNWYWxpZCgpIHx8ICFw
YWdlVVJMLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB0YXJnZXRIb3N0
ID0gdGFyZ2V0VVJMLmhvc3QoKTsKKyAgICBhdXRvIG1haW5GcmFtZUhvc3QgPSBwYWdlVVJMLmhv
c3QoKTsKKworICAgIGlmICh0YXJnZXRIb3N0LmlzRW1wdHkoKSB8fCBtYWluRnJhbWVIb3N0Lmlz
RW1wdHkoKSB8fCB0YXJnZXRIb3N0ID09IHNvdXJjZVVSTC5ob3N0KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8gdGFyZ2V0UHJpbWFyeURvbWFpbiA9IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M6OnByaW1hcnlEb21haW4odGFyZ2V0VVJMKTsKKyAgICBhdXRvIG1haW5GcmFtZVByaW1hcnlE
b21haW4gPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpwcmltYXJ5RG9tYWluKHBhZ2VVUkwpOwor
ICAgIGF1dG8gc291cmNlUHJpbWFyeURvbWFpbiA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnBy
aW1hcnlEb21haW4oc291cmNlVVJMKTsKKworICAgIHBvc3RUYXNrKFt0aGlzLCB0YXJnZXRQcmlt
YXJ5RG9tYWluID0gdGFyZ2V0UHJpbWFyeURvbWFpbi5pc29sYXRlZENvcHkoKSwgbWFpbkZyYW1l
UHJpbWFyeURvbWFpbiA9IG1haW5GcmFtZVByaW1hcnlEb21haW4uaXNvbGF0ZWRDb3B5KCksIHNv
dXJjZVByaW1hcnlEb21haW4gPSBzb3VyY2VQcmltYXJ5RG9tYWluLmlzb2xhdGVkQ29weSgpLCB0
YXJnZXRIb3N0ID0gdGFyZ2V0SG9zdC50b1N0cmluZygpLmlzb2xhdGVkQ29weSgpLCBtYWluRnJh
bWVIb3N0ID0gbWFpbkZyYW1lSG9zdC50b1N0cmluZygpLmlzb2xhdGVkQ29weSgpLCBpc1JlZGly
ZWN0LCBpc01haW5GcmFtZSA9IGZyYW1lLmlzTWFpbkZyYW1lKCldIHsKKyAgICAgICAgCisgICAg
ICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+bG9nRnJh
bWVOYXZpZ2F0aW9uKHRhcmdldFByaW1hcnlEb21haW4sIG1haW5GcmFtZVByaW1hcnlEb21haW4s
IHNvdXJjZVByaW1hcnlEb21haW4sIHRhcmdldEhvc3QsIG1haW5GcmFtZUhvc3QsIGlzUmVkaXJl
Y3QsIGlzTWFpbkZyYW1lKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICBpZiAodXJsLnByb3RvY29sSXNBYm91dCgpIHx8IHVybC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQ
cmltYXJ5RG9tYWluKHVybCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAg
ICAgICAgbV9tZW1vcnlTdG9yZS0+bG9nVXNlckludGVyYWN0aW9uKHByaW1hcnlEb21haW4pOwor
ICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICB9
KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyVXNlcklu
dGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkgfHwgdXJsLmlzRW1wdHkoKSkgeworICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcG9zdFRh
c2soW3RoaXMsIHByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odXJsKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
KyAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5j
bGVhclVzZXJJbnRlcmFjdGlvbihwcmltYXJ5RG9tYWluKTsKKyAgICAgICAgcG9zdFRhc2tSZXBs
eShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJM
JiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAodXJsLnByb3Rv
Y29sSXNBYm91dCgpIHx8IHVybC5pc0VtcHR5KCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcG9zdFRhc2soW3RoaXMs
IHByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odXJsKSwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAg
IGJvb2wgaGFkVXNlckludGVyYWN0aW9uID0gbV9tZW1vcnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUt
Pmhhc0hhZFVzZXJJbnRlcmFjdGlvbihwcmltYXJ5RG9tYWluKSA6IGZhbHNlOworICAgICAgICBw
b3N0VGFza1JlcGx5KFtoYWRVc2VySW50ZXJhY3Rpb24sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoaGFkVXNlckludGVyYWN0aW9uKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9
CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRMYXN0U2Vlbihjb25z
dCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkgfHwgdXJsLmlzRW1wdHkoKSkgeworICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcG9z
dFRhc2soW3RoaXMsIHByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odXJsKSwg
c2Vjb25kcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgICAgICBtX21l
bW9yeVN0b3JlLT5zZXRMYXN0U2VlbihwcmltYXJ5RG9tYWluLCBzZWNvbmRzKTsKKyAgICAgICAg
cG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgfSk7Cit9Cisg
ICAgCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50UmVz
b3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYg
KHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwuaXNFbXB0eSgpKSB7CisgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwb3N0VGFzayhb
dGhpcywgcHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih1cmwpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAg
ICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFBy
ZXZhbGVudFJlc291cmNlKHByaW1hcnlEb21haW4pOworICAgICAgICBwb3N0VGFza1JlcGx5KFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwm
IHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorewor
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAodXJsLnByb3RvY29sSXNB
Ym91dCgpIHx8IHVybC5pc0VtcHR5KCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5RG9t
YWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHVybCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChtX21lbW9y
eVN0b3JlKQorICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0VmVyeVByZXZhbGVudFJlc291
cmNlKHByaW1hcnlEb21haW4pOworICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKKyAgICB9KTsKK30KKyAgICAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAg
IFN0cmluZyByZXN1bHQgPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+ZHVtcFJlc291
cmNlTG9hZFN0YXRpc3RpY3MoKSA6IGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHBvc3RUYXNrUmVw
bHkoW3Jlc3VsdCA9IHJlc3VsdC5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihyZXN1bHQpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAodXJsLnBy
b3RvY29sSXNBYm91dCgpIHx8IHVybC5pc0VtcHR5KCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcG9zdFRhc2soW3Ro
aXMsIHByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odXJsKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAg
ICAgIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZSA9IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0
b3JlLT5pc1ByZXZhbGVudFJlc291cmNlKHByaW1hcnlEb21haW4pIDogZmFsc2U7CisgICAgICAg
IHBvc3RUYXNrUmVwbHkoW2lzUHJldmFsZW50UmVzb3VyY2UsIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoaXNQcmV2YWxlbnRSZXNvdXJjZSk7CisgICAgICAgIH0pOworICAgIH0p
OworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNWZXJ5UHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgIGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkgfHwgdXJsLmlzRW1wdHkoKSkgeworICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgcG9zdFRhc2soW3RoaXMsIHByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlE
b21haW4odXJsKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0gKCkgbXV0YWJsZSB7CisgICAgICAgIGJvb2wgaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UgPSBt
X21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UocHJp
bWFyeURvbWFpbikgOiBmYWxzZTsKKyAgICAgICAgcG9zdFRhc2tSZXBseShbaXNWZXJ5UHJldmFs
ZW50UmVzb3VyY2UsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildICgpIG11dGFibGUgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaXNWZXJ5UHJl
dmFsZW50UmVzb3VyY2UpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihj
b25zdCBVUkwmIHN1YnJlc291cmNlLCBjb25zdCBVUkwmIHRvcEZyYW1lLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CisgICAgCisgICAgcG9zdFRhc2soW3RoaXMsIHN1YnJlc291cmNlUHJp
bWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbihzdWJyZXNvdXJjZSksIHRvcEZyYW1l
UHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih0b3BGcmFtZSksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAg
ICAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciA9IG1fbWVtb3J5U3RvcmUg
PyBtX21lbW9yeVN0b3JlLT5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoc3VicmVzb3Vy
Y2VQcmltYXJ5RG9tYWluLCB0b3BGcmFtZVByaW1hcnlEb21haW4pIDogZmFsc2U7CisgICAgICAg
IHBvc3RUYXNrUmVwbHkoW2lzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIp
OworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBVUkwmIHN1YkZyYW1l
LCBjb25zdCBVUkwmIHRvcEZyYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChib29sKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgcG9zdFRhc2soW3RoaXMsIHN1YkZyYW1lUHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFy
eURvbWFpbihzdWJGcmFtZSksIHRvcEZyYW1lUHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFy
eURvbWFpbih0b3BGcmFtZSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3ViRnJh
bWVVbmRlciA9IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc1JlZ2lzdGVyZWRBc1N1
YkZyYW1lVW5kZXIoc3ViRnJhbWVQcmltYXJ5RG9tYWluLCB0b3BGcmFtZVByaW1hcnlEb21haW4p
IDogZmFsc2U7CisgICAgICAgIHBvc3RUYXNrUmVwbHkoW2lzUmVnaXN0ZXJlZEFzU3ViRnJhbWVV
bmRlciwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkg
bXV0YWJsZSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihpc1JlZ2lzdGVyZWRBc1N1
YkZyYW1lVW5kZXIpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBV
UkwmIGhvc3RSZWRpcmVjdGVkRnJvbSwgY29uc3QgVVJMJiBob3N0UmVkaXJlY3RlZFRvLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkIChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgcG9zdFRhc2soW3RoaXMsIGhvc3RSZWRp
cmVjdGVkRnJvbVByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4oaG9zdFJlZGly
ZWN0ZWRGcm9tKSwgaG9zdFJlZGlyZWN0ZWRUb1ByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1h
cnlEb21haW4oaG9zdFJlZGlyZWN0ZWRUbyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICBib29sIGlzUmVnaXN0ZXJl
ZEFzUmVkaXJlY3RpbmdUbyA9IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc1JlZ2lz
dGVyZWRBc1JlZGlyZWN0aW5nVG8oaG9zdFJlZGlyZWN0ZWRGcm9tUHJpbWFyeURvbWFpbiwgaG9z
dFJlZGlyZWN0ZWRUb1ByaW1hcnlEb21haW4pIDogZmFsc2U7CisgICAgICAgIHBvc3RUYXNrUmVw
bHkoW2lzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8pOworICAgICAgICB9KTsKKyAg
ICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyUHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgaWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwuaXNFbXB0eSgpKSB7CisgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBw
b3N0VGFzayhbdGhpcywgcHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih1cmwp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgeworICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3Rv
cmUtPmNsZWFyUHJldmFsZW50UmVzb3VyY2UocHJpbWFyeURvbWFpbik7CisgICAgICAgIHBvc3RU
YXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIH0pOworfQorCit2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBV
UkwmIHVybCwgYm9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgaWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBwb3N0VGFzayhbdGhpcywgcHJpbWFyeURvbWFpbiA9IGlzb2xhdGVk
UHJpbWFyeURvbWFpbih1cmwpLCB2YWx1ZV0geworICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkK
KyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldEdyYW5kZmF0aGVyZWQocHJpbWFyeURvbWFp
biwgdmFsdWUpOworICAgIH0pOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6aXNHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkIChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgaWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwuaXNFbXB0
eSgpKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpLCBwcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9t
YWluKHVybCldICgpIG11dGFibGUgeworICAgICAgICBib29sIGlzR3JhbmRGYXRoZXJlZCA9IG1f
bWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc0dyYW5kZmF0aGVyZWQocHJpbWFyeURvbWFp
bikgOiBmYWxzZTsKKyAgICAgICAgcG9zdFRhc2tSZXBseShbaXNHcmFuZEZhdGhlcmVkLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsK
KyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGlzR3JhbmRGYXRoZXJlZCk7CisgICAgICAg
IH0pOworICAgIH0pOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0IFVSTCYgc3ViZnJhbWUsIGNvbnN0
IFVSTCYgdG9wRnJhbWUpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IGlmIChzdWJmcmFtZS5wcm90b2NvbElzQWJvdXQoKSB8fCBzdWJmcmFtZS5pc0VtcHR5KCkgfHwg
dG9wRnJhbWUucHJvdG9jb2xJc0Fib3V0KCkgfHwgdG9wRnJhbWUuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBwb3N0VGFzayhbdGhpcywgcHJpbWFyeVRvcEZyYW1lRG9tYWluID0g
aXNvbGF0ZWRQcmltYXJ5RG9tYWluKHRvcEZyYW1lKSwgcHJpbWFyeVN1YkZyYW1lRG9tYWluID0g
aXNvbGF0ZWRQcmltYXJ5RG9tYWluKHN1YmZyYW1lKV0geworICAgICAgICBpZiAobV9tZW1vcnlT
dG9yZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFN1YmZyYW1lVW5kZXJUb3BGcmFt
ZU9yaWdpbihwcmltYXJ5U3ViRnJhbWVEb21haW4sIHByaW1hcnlUb3BGcmFtZURvbWFpbik7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgVVJMJiBzdWJyZXNvdXJjZSwgY29uc3Qg
VVJMJiB0b3BGcmFtZSkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
aWYgKHN1YnJlc291cmNlLnByb3RvY29sSXNBYm91dCgpIHx8IHN1YnJlc291cmNlLmlzRW1wdHko
KSB8fCB0b3BGcmFtZS5wcm90b2NvbElzQWJvdXQoKSB8fCB0b3BGcmFtZS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5VG9wRnJhbWVEb21h
aW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odG9wRnJhbWUpLCBwcmltYXJ5U3VicmVzb3VyY2VE
b21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4oc3VicmVzb3VyY2UpXSB7CisgICAgICAgIGlm
IChtX21lbW9yeVN0b3JlKQorICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0U3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lT3JpZ2luKHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbiwgcHJpbWFyeVRv
cEZyYW1lRG9tYWluKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHN1YnJl
c291cmNlLCBjb25zdCBVUkwmIGhvc3ROYW1lUmVkaXJlY3RlZFRvKQoreworICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoc3VicmVzb3VyY2UucHJvdG9jb2xJc0Fib3V0
KCkgfHwgc3VicmVzb3VyY2UuaXNFbXB0eSgpIHx8IGhvc3ROYW1lUmVkaXJlY3RlZFRvLnByb3Rv
Y29sSXNBYm91dCgpIHx8IGhvc3ROYW1lUmVkaXJlY3RlZFRvLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgcG9zdFRhc2soW3RoaXMsIHByaW1hcnlSZWRpcmVjdERvbWFpbiA9IGlz
b2xhdGVkUHJpbWFyeURvbWFpbihob3N0TmFtZVJlZGlyZWN0ZWRUbyksIHByaW1hcnlTdWJyZXNv
dXJjZURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbihzdWJyZXNvdXJjZSldIHsKKyAgICAg
ICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJpbWFyeVN1YnJlc291cmNlRG9tYWluLCBwcmltYXJ5
UmVkaXJlY3REb21haW4pOworICAgIH0pOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiBz
dWJyZXNvdXJjZSwgY29uc3QgVVJMJiBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tKQoreworICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoc3VicmVzb3VyY2UucHJvdG9jb2xJ
c0Fib3V0KCkgfHwgc3VicmVzb3VyY2UuaXNFbXB0eSgpIHx8IGhvc3ROYW1lUmVkaXJlY3RlZEZy
b20ucHJvdG9jb2xJc0Fib3V0KCkgfHwgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBwb3N0VGFzayhbdGhpcywgcHJpbWFyeVJlZGly
ZWN0RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKGhvc3ROYW1lUmVkaXJlY3RlZEZyb20p
LCBwcmltYXJ5U3VicmVzb3VyY2VEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4oc3VicmVz
b3VyY2UpXSB7CisgICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICAgICAgbV9tZW1v
cnlTdG9yZS0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20ocHJpbWFyeVN1YnJlc291
cmNlRG9tYWluLCBwcmltYXJ5UmVkaXJlY3REb21haW4pOworICAgIH0pOworfQorCit2b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRv
KGNvbnN0IFVSTCYgdG9wRnJhbWVIb3N0TmFtZSwgY29uc3QgVVJMJiBob3N0TmFtZVJlZGlyZWN0
ZWRUbykKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKHRvcEZy
YW1lSG9zdE5hbWUucHJvdG9jb2xJc0Fib3V0KCkgfHwgdG9wRnJhbWVIb3N0TmFtZS5pc0VtcHR5
KCkgfHwgaG9zdE5hbWVSZWRpcmVjdGVkVG8ucHJvdG9jb2xJc0Fib3V0KCkgfHwgaG9zdE5hbWVS
ZWRpcmVjdGVkVG8uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgcG9zdFRh
c2soW3RoaXMsIHByaW1hcnlSZWRpcmVjdERvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbiho
b3N0TmFtZVJlZGlyZWN0ZWRUbyksIHRvcEZyYW1lUHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJp
bWFyeURvbWFpbih0b3BGcmFtZUhvc3ROYW1lKV0geworICAgICAgICBpZiAobV9tZW1vcnlTdG9y
ZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RU
byh0b3BGcmFtZVByaW1hcnlEb21haW4sIHByaW1hcnlSZWRpcmVjdERvbWFpbik7CisgICAgfSk7
Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZyYW1lSG9zdE5hbWUsIGNvbnN0IFVSTCYg
aG9zdE5hbWVSZWRpcmVjdGVkRnJvbSkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgaWYgKHRvcEZyYW1lSG9zdE5hbWUucHJvdG9jb2xJc0Fib3V0KCkgfHwgdG9wRnJh
bWVIb3N0TmFtZS5pc0VtcHR5KCkgfHwgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbS5wcm90b2NvbElz
QWJvdXQoKSB8fCBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5UmVkaXJlY3REb21haW4gPSBp
c29sYXRlZFByaW1hcnlEb21haW4oaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSksIHRvcEZyYW1lUHJp
bWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih0b3BGcmFtZUhvc3ROYW1lKV0gewor
ICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNl
dFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgcHJpbWFy
eVJlZGlyZWN0RG9tYWluKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIC8vIEhlbHBlciBmdW5jdGlv
biB1c2VkIGJ5IHRlc3Rpbmcgc3lzdGVtLiBTaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSB0aGUg
bWFpbiB0aHJlYWQuCisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHBvc3RU
YXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSAoKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFtX21lbW9yeVN0b3JlKSB7CisgICAgICAgICAg
ICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX21lbW9yeVN0b3JlLT51cGRhdGVDb29raWVC
bG9ja2luZyhbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0g
KCkgbXV0YWJsZSB7CisgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlRm9yRG9tYWlu
cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvQmxvY2ssIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
dXNlZCBieSB0ZXN0aW5nIHN5c3RlbS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIG1h
aW4gdGhyZWFkLgorICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgcG9zdFRhc2so
W3RoaXMsIGRvbWFpbnNUb0Jsb2NrID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Jsb2NrKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJs
ZSB7CisgICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkgeworICAgICAgICAgICAgcG9zdFRhc2tS
ZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBtX21lbW9yeVN0b3JlLT51cGRhdGVDb29raWVCbG9ja2luZ0Zv
ckRvbWFpbnMoZG9tYWluc1RvQmxvY2ssIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgcG9zdFRhc2tSZXBseShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckJsb2NraW5n
U3RhdGVGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgLy8gSGVscGVyIGZ1
bmN0aW9uIHVzZWQgYnkgdGVzdGluZyBzeXN0ZW0uIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9t
IHRoZSBtYWluIHRocmVhZC4KKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIHBv
c3RUYXNrKFt0aGlzLCBkb21haW5zID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnMpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAg
ICAgICAgaWYgKCFtX21lbW9yeVN0b3JlKSB7CisgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIG1fbWVtb3J5U3RvcmUtPmNsZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMo
ZG9tYWlucywgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KCkgbXV0YWJsZSB7CisgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KFNo
b3VsZEdyYW5kZmF0aGVyIHNob3VsZEdyYW5kZmF0aGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKKyAgICBwb3N0VGFzayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBz
aG91bGRHcmFuZGZhdGhlciwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChtX3BlcnNpc3RlbnRTdG9yYWdlKQor
ICAgICAgICAgICAgbV9wZXJzaXN0ZW50U3RvcmFnZS0+Y2xlYXIoKTsKKworICAgICAgICBDb21w
bGV0aW9uSGFuZGxlckNhbGxpbmdTY29wZSBjb21wbGV0aW9uSGFuZGxlckNhbGxlcihbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAg
ICAgICB9KTsKKworICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkgeworICAgICAgICAgICAgbV9t
ZW1vcnlTdG9yZS0+Y2xlYXIoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBwcm90ZWN0ZWRUaGlzLmNv
cHlSZWYoKSwgc2hvdWxkR3JhbmRmYXRoZXIsIGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlckNhbGxlcildICgpIG11dGFibGUgeworICAgICAgICAgICAg
ICAgIGlmIChzaG91bGRHcmFuZGZhdGhlciA9PSBTaG91bGRHcmFuZGZhdGhlcjo6WWVzKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgbV9tZW1vcnlTdG9yZS0+Z3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKGNvbXBs
ZXRpb25IYW5kbGVyQ2FsbGVyLnJlbGVhc2UoKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MsICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9y
eUFuZFBlcnNpc3RlbnQgQWZ0ZXIgYmVpbmcgY2xlYXJlZCwgbV9tZW1vcnlTdG9yZSBpcyBudWxs
IHdoZW4gdHJ5aW5nIHRvIGdyYW5kZmF0aGVyIGRhdGEuIik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoc2hvdWxk
R3JhbmRmYXRoZXIgPT0gU2hvdWxkR3JhbmRmYXRoZXI6OlllcykKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50IEJlZm9yZSBiZWlu
ZyBjbGVhcmVkLCBtX21lbW9yeVN0b3JlIGlzIG51bGwgd2hlbiB0cnlpbmcgdG8gZ3JhbmRmYXRo
ZXIgZGF0YS4iKTsKKyAgICAgICAgfQorICAgIH0pOworfQorCit2b2lkIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChXYWxs
VGltZSBtb2RpZmllZFNpbmNlLCBTaG91bGRHcmFuZGZhdGhlciBzaG91bGRHcmFuZGZhdGhlciwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICAvLyBGb3Igbm93LCBiZSBjb25zZXJ2YXRpdmUgYW5kIGNs
ZWFyIGV2ZXJ5dGhpbmcgcmVnYXJkbGVzcyBvZiBtb2RpZmllZFNpbmNlLgorICAgIFVOVVNFRF9Q
QVJBTShtb2RpZmllZFNpbmNlKTsKKyAgICBzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50KHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Cit9CisKK3ZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9u
KFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAg
IHBvc3RUYXNrKFt0aGlzLCBzZWNvbmRzXSB7CisgICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQor
ICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihz
ZWNvbmRzKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29u
ZHMpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBwb3N0VGFzayhbdGhp
cywgc2Vjb25kc10geworICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1f
bWVtb3J5U3RvcmUtPnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChzZWNv
bmRzKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMpCit7CisgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKKyAgICBwb3N0VGFzayhbdGhpcywgc2Vjb25kc10geworICAgICAg
ICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldEdyYW5k
ZmF0aGVyaW5nVGltZShzZWNvbmRzKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwKFNlY29uZHMgc2Vjb25kcywgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKKyAgICAK
KyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorICAgIGlmIChtX3dlYnNpdGVE
YXRhU3RvcmUpIHsKKyAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5zZXRDYWNoZU1heEFnZUNh
cEZvclByZXZhbGVudFJlc291cmNlcyhzZWNvbmRzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBjb21wbGV0aW9uSGFuZGxl
cigpOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2FsbFVwZGF0
ZVByZXZhbGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0ZvckhhbmRsZXIoY29uc3QgVmVjdG9yPFN0
cmluZz4mIGRvbWFpbnNUb0Jsb2NrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworI2lmIEVO
QUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCisgICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9y
ZSkgeworICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPnVwZGF0ZVByZXZhbGVudERvbWFpbnNU
b0Jsb2NrQ29va2llc0Zvcihkb21haW5zVG9CbG9jaywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNhbGxSZW1v
dmVEb21haW5zSGFuZGxlcihjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlucykKK3sKKyAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKKyAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQorICAgICAgICBtX3dlYnNpdGVE
YXRhU3RvcmUtPnJlbW92ZVByZXZhbGVudERvbWFpbnMoZG9tYWlucyk7CisjZW5kaWYKK30KKyAg
ICAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNYXhTdGF0aXN0aWNz
RW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKKyAgICBwb3N0VGFzayhbdGhpcywgbWF4aW11bUVudHJ5Q291bnRdIHsKKyAg
ICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRN
YXhTdGF0aXN0aWNzRW50cmllcyhtYXhpbXVtRW50cnlDb3VudCk7CisgICAgfSk7Cit9CisgICAg
Cit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93
blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50KQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBwb3N0VGFzayhbdGhpcywgcHJ1bmVUYXJnZXRDb3VudF0geworICAgICAg
ICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFBydW5l
RW50cmllc0Rvd25UbyhwcnVuZVRhcmdldENvdW50KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVl
cyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAg
ICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnJlc2V0
UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcygpOworCisgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIH0pOworfQorCit2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nVGVzdGluZ0V2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnQp
Cit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChtX3N0YXRpc3Rp
Y3NUZXN0aW5nQ2FsbGJhY2spCisgICAgICAgIG1fc3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjayhl
dmVudCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4MTcwNGE0ZWYyOTlkYzA4M2Qy
NzlmNTM0Yzc3MjgxY2ZhNzZiNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgK
QEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhVHlwZS5oIgorI2luY2x1
ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXVEYgeworY2xh
c3MgV29ya1F1ZXVlOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBSZXNvdXJjZVJl
cXVlc3Q7CitzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKK30KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTsKK2NsYXNz
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTsKK2NsYXNzIFdlYkZyYW1l
UHJveHk7CitjbGFzcyBXZWJQcm9jZXNzUHJveHk7CitjbGFzcyBXZWJzaXRlRGF0YVN0b3JlOwor
CitlbnVtIGNsYXNzIFN0b3JhZ2VBY2Nlc3NTdGF0dXMgeworICAgIENhbm5vdFJlcXVlc3RBY2Nl
c3MsCisgICAgUmVxdWlyZXNVc2VyUHJvbXB0LAorICAgIEhhc0FjY2VzcworfTsKKworY2xhc3Mg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIGZpbmFsIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSwgV1RGOjpEZXN0cnVjdGlv
blRocmVhZDo6TWFpbj4sIHB1YmxpYyBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IGNyZWF0ZShXZWJz
aXRlRGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKHdlYnNpdGVEYXRhU3Rv
cmUpKTsKKyAgICB9CisKKyAgICB+V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKCk7CisK
KyAgICBzdGF0aWMgY29uc3QgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4mIG1vbml0b3JlZERh
dGFUeXBlcygpOworCisgICAgV29ya1F1ZXVlJiBzdGF0aXN0aWNzUXVldWUoKSB7IHJldHVybiBt
X3N0YXRpc3RpY3NRdWV1ZS5nZXQoKTsgfQorCisgICAgdm9pZCBzZXROb3RpZnlQYWdlc1doZW5E
YXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wpOworICAgIHZvaWQgc2V0U2hvdWxkQ2xhc3NpZnlS
ZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCk7CisgICAgdm9pZCBzZXRTaG91
bGRTdWJtaXRUZWxlbWV0cnkoYm9vbCk7CisKKyAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3MoU3Ry
aW5nJiYgc3ViRnJhbWVIb3N0LCBTdHJpbmcmJiB0b3BGcmFtZUhvc3QsIHVpbnQ2NF90IGZyYW1l
SUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjYWxs
YmFjayk7CisgICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBzdWJGcmFtZUhv
c3QsIFN0cmluZyYmIHRvcEZyYW1lSG9zdCwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFn
ZUlELCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFj
Y2Vzc1N0YXR1cyk+JiYpOworICAgIHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzKFN0cmluZyYmIHN1
YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJhbWVIb3N0LCB1aW50NjRfdCBmcmFtZUlELCB1aW50
NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wpPiYmKTsKKyAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzQ2FsbGJhY2soYm9v
bCB3YXNHcmFudGVkLCB1aW50NjRfdCBjb250ZXh0SWQpOworCisgICAgdm9pZCBhcHBsaWNhdGlv
bldpbGxUZXJtaW5hdGUoKTsKKworICAgIHZvaWQgbG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFdl
YkZyYW1lUHJveHkmLCBjb25zdCBVUkwmIHBhZ2VVUkwsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYsIGNvbnN0IFVSTCYgcmVkaXJlY3RVUkwpOworICAgIHZvaWQgbG9nVXNlckludGVy
YWN0aW9uKGNvbnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9p
ZCBjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYpOworICAgIHZvaWQgaGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOworICAgIHZvaWQgc2V0TGFzdFNlZW4oY29uc3Qg
VVJMJiwgU2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNl
dFByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
Jik7CisgICAgdm9pZCBzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIGR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYpOworICAgIHZvaWQg
aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJv
b2wpPiYmKTsKKyAgICB2b2lkIGlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOworICAgIHZvaWQgaXNSZWdpc3RlcmVkQXNT
dWJyZXNvdXJjZVVuZGVyKGNvbnN0IFVSTCYgc3VicmVzb3VyY2UsIGNvbnN0IFVSTCYgdG9wRnJh
bWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOworICAgIHZvaWQgaXNSZWdpc3Rl
cmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFVSTCYgc3ViRnJhbWUsIGNvbnN0IFVSTCYgdG9wRnJh
bWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOworICAgIHZvaWQgaXNSZWdpc3Rl
cmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFVSTCYgaG9zdFJlZGlyZWN0ZWRGcm9tLCBjb25zdCBV
UkwmIGhvc3RSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwor
ICAgIHZvaWQgY2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJlZChjb25zdCBVUkwmLCBi
b29sKTsKKyAgICB2b2lkIGlzR3JhbmRmYXRoZXJlZChjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmKTsKKyAgICB2b2lkIHNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9y
aWdpbihjb25zdCBVUkwmIHN1YmZyYW1lLCBjb25zdCBVUkwmIHRvcEZyYW1lKTsKKyAgICB2b2lk
IHNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihjb25zdCBVUkwmIHN1YnJlc291cmNl
LCBjb25zdCBVUkwmIHRvcEZyYW1lKTsKKyAgICB2b2lkIHNldFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RUbyhjb25zdCBVUkwmIHN1YnJlc291cmNlLCBjb25zdCBVUkwmIGhvc3ROYW1lUmVkaXJl
Y3RlZFRvKTsKKyAgICB2b2lkIHNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0
IFVSTCYgc3VicmVzb3VyY2UsIGNvbnN0IFVSTCYgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSk7Cisg
ICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiB0b3BGcmFtZUhv
c3ROYW1lLCBjb25zdCBVUkwmIGhvc3ROYW1lUmVkaXJlY3RlZFRvKTsKKyAgICB2b2lkIHNldFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVIb3N0TmFtZSwgY29u
c3QgVVJMJiBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tKTsKKyAgICB2b2lkIHNjaGVkdWxlQ29va2ll
QmxvY2tpbmdVcGRhdGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNj
aGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGVGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBkb21haW5zVG9CbG9jaywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lk
IHNjaGVkdWxlQ2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgZG9tYWlucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNjaGVk
dWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZygpOworICAgIHZvaWQgc3VibWl0
VGVsZW1ldHJ5KCk7CisKKyAgICBlbnVtIGNsYXNzIFNob3VsZEdyYW5kZmF0aGVyIHsKKyAgICAg
ICAgTm8sCisgICAgICAgIFllcywKKyAgICB9OworICAgIHZvaWQgc2NoZWR1bGVDbGVhckluTWVt
b3J5QW5kUGVyc2lzdGVudChTaG91bGRHcmFuZGZhdGhlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmKTsKKyAgICB2b2lkIHNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQoV2Fs
bFRpbWUgbW9kaWZpZWRTaW5jZSwgU2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CisKKyAgICB2b2lkIHNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vj
b25kcyk7CisgICAgdm9pZCBzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwo
U2Vjb25kcyk7CisgICAgdm9pZCBzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyk7CisgICAg
dm9pZCBzZXRDYWNoZU1heEFnZUNhcChTZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOworICAgIHZvaWQgc2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90KTsKKyAgICB2b2lk
IHNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QpOworCisgICAgdm9pZCByZXNldFBhcmFtZXRl
cnNUb0RlZmF1bHRWYWx1ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKworICAgIHZv
aWQgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01v
ZGUoY29uc3QgVVJMJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICAKKyAgICB2
b2lkIHNldFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0
IFN0cmluZyYpPiYmIGNhbGxiYWNrKSB7IG1fc3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spOyB9CisgICAgdm9pZCBsb2dUZXN0aW5nRXZlbnQoY29uc3QgU3RyaW5n
Jik7CisgICAgdm9pZCBjYWxsR3JhbnRTdG9yYWdlQWNjZXNzSGFuZGxlcihjb25zdCBTdHJpbmcm
IHN1YkZyYW1lUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1hcnlEb21h
aW4sIE9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOworICAgIHZvaWQgcmVtb3ZlQWxsU3RvcmFnZUFjY2Vz
cyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgY2FsbFVwZGF0ZVByZXZh
bGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0ZvckhhbmRsZXIoY29uc3QgVmVjdG9yPFN0cmluZz4m
IGRvbWFpbnNUb0Jsb2NrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQg
Y2FsbFJlbW92ZURvbWFpbnNIYW5kbGVyKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zKTsK
KyAgICB2b2lkIGNhbGxIYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyKGNvbnN0IFN0cmlu
ZyYgcmVzb3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYgZmlyc3RQYXJ0eURvbWFpbiwgdWludDY0
X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wp
PiYmKTsKKworICAgIHZvaWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKKworICAgIFdlYnNp
dGVEYXRhU3RvcmUqIHdlYnNpdGVEYXRhU3RvcmUoKSB7IHJldHVybiBtX3dlYnNpdGVEYXRhU3Rv
cmUuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUoV2Vic2l0ZURhdGFTdG9yZSYpOworCisgICAgdm9pZCBwb3N0VGFzayhXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4mJik7CisgICAgc3RhdGljIHZvaWQgcG9zdFRhc2tSZXBseShXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4mJik7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlci4KKyAg
ICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYp
IG92ZXJyaWRlOworCisgICAgLy8gSVBDIG1lc3NhZ2UgaGFuZGxlcnMuCisgICAgdm9pZCByZXNv
dXJjZUxvYWRTdGF0aXN0aWNzVXBkYXRlZChWZWN0b3I8V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljcz4mJiBvcmlnaW5zKTsKKyAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJP
cGVuZXIoU3RyaW5nJiYgcHJpbWFyeURvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcywgdWludDY0
X3Qgb3BlbmVyUGFnZUlELCBTdHJpbmcmJiBvcGVuZXJQcmltYXJ5RG9tYWluKTsKKworICAgIHZv
aWQgcGVyZm9ybURhaWx5VGFza3MoKTsKKworICAgIFN0b3JhZ2VBY2Nlc3NTdGF0dXMgc3RvcmFn
ZUFjY2Vzc1N0YXR1cyhjb25zdCBTdHJpbmcmIHN1YkZyYW1lUHJpbWFyeURvbWFpbiwgY29uc3Qg
U3RyaW5nJiB0b3BGcmFtZVByaW1hcnlEb21haW4pOworCisgICAgdm9pZCBmbHVzaEFuZERlc3Ry
b3lQZXJzaXN0ZW50U3RvcmUoKTsKKworICAgIFdlYWtQdHI8V2Vic2l0ZURhdGFTdG9yZT4gbV93
ZWJzaXRlRGF0YVN0b3JlOworICAgIFJlZjxXb3JrUXVldWU+IG1fc3RhdGlzdGljc1F1ZXVlOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU+IG1f
bWVtb3J5U3RvcmU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
ZXJzaXN0ZW50U3RvcmFnZT4gbV9wZXJzaXN0ZW50U3RvcmFnZTsKKworICAgIFJ1bkxvb3A6OlRp
bWVyPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gbV9kYWlseVRhc2tzVGltZXI7CisK
KyAgICBib29sIG1faGFzU2NoZWR1bGVkUHJvY2Vzc1N0YXRzIHsgZmFsc2UgfTsKKworICAgIFdU
Rjo6RnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4gbV9zdGF0aXN0aWNzVGVzdGluZ0NhbGxi
YWNrOworCisgICAgYm9vbCBtX2ZpcnN0TmV0d29ya1Byb2Nlc3NDcmVhdGVkIHsgZmFsc2UgfTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0
cnkuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5NjkyZTEyOTEyYTZj
MWMwOThkM2I5ZjYwODA0YWUyZmYzN2RmOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rl
bGVtZXRyeS5jcHAKQEAgLTAsMCArMSwyOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oIgor
CisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmgiCisjaW5jbHVk
ZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
UmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Cisj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
ewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NvbnN0IHVuc2lnbmVkIG1pbmltdW1QcmV2
YWxlbnRSZXNvdXJjZXNGb3JUZWxlbWV0cnkgPSAzOworY29uc3QgdW5zaWduZWQgc2lnbmlmaWNh
bnRGaWd1cmVzRm9yTG9nZ2VkVmFsdWVzID0gMzsKK3N0YXRpYyBib29sIG5vdGlmeVBhZ2VzV2hl
blRlbGVtZXRyeVdhc0NhcHR1cmVkID0gZmFsc2U7CisKK3N0cnVjdCBQcmV2YWxlbnRSZXNvdXJj
ZVRlbGVtZXRyeSB7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3Zl
ZDsKKyAgICBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbjsKKyAgICB1bnNpZ25lZCBkYXlzU2lu
Y2VVc2VySW50ZXJhY3Rpb247CisgICAgdW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3Jp
Z2luczsKKyAgICB1bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zOworICAg
IHVuc2lnbmVkIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG87CisgICAgdW5zaWduZWQgdGlt
ZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uOworICAgIHVuc2lnbmVk
IHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEk7Cit9OworCitz
dGF0aWMgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiBzb3J0ZWRQcmV2YWxlbnRS
ZXNvdXJjZVRlbGVtZXRyeShjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUm
IHN0b3JlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIFZlY3RvcjxQ
cmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4gc29ydGVkOworICAgIHN0b3JlLnByb2Nlc3NTdGF0
aXN0aWNzKFsmc29ydGVkXSAoYXV0byYgc3RhdGlzdGljKSB7CisgICAgICAgIGlmICghc3RhdGlz
dGljLmlzUHJldmFsZW50UmVzb3VyY2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
dW5zaWduZWQgZGF5c1NpbmNlVXNlckludGVyYWN0aW9uID0gc3RhdGlzdGljLm1vc3RSZWNlbnRV
c2VySW50ZXJhY3Rpb25UaW1lIDw9IFdhbGxUaW1lKCkgPyAwIDogc3RkOjpmbG9vcigoV2FsbFRp
bWU6Om5vdygpIC0gc3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSAvIDI0
X2gpOworICAgICAgICBzb3J0ZWQuYXBwZW5kKFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5IHsK
KyAgICAgICAgICAgIHN0YXRpc3RpYy5kYXRhUmVjb3Jkc1JlbW92ZWQsCisgICAgICAgICAgICBz
dGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uLAorICAgICAgICAgICAgZGF5c1NpbmNlVXNlcklu
dGVyYWN0aW9uLAorICAgICAgICAgICAgc3RhdGlzdGljLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9y
aWdpbnMuc2l6ZSgpLAorICAgICAgICAgICAgc3RhdGlzdGljLnN1YnJlc291cmNlVW5kZXJUb3BG
cmFtZU9yaWdpbnMuc2l6ZSgpLAorICAgICAgICAgICAgc3RhdGlzdGljLnN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzVG8uc2l6ZSgpLAorICAgICAgICAgICAgc3RhdGlzdGljLnRpbWVzQWNjZXNz
ZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbiwKKyAgICAgICAgICAgIHN0YXRpc3Rp
Yy50aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJCisgICAgICAg
IH0pOworICAgIH0pOworCisgICAgaWYgKHNvcnRlZC5zaXplKCkgPCBtaW5pbXVtUHJldmFsZW50
UmVzb3VyY2VzRm9yVGVsZW1ldHJ5KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgc3RkOjpz
b3J0KHNvcnRlZC5iZWdpbigpLCBzb3J0ZWQuZW5kKCksIFtdKGNvbnN0IFByZXZhbGVudFJlc291
cmNlVGVsZW1ldHJ5JiBhLCBjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgYikgewor
ICAgICAgICByZXR1cm4gYS5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zICsgYS5zdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zICsgYS5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
ID4KKyAgICAgICAgYi5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zICsgYi5zdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVPcmlnaW5zICsgYi5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvOwor
ICAgIH0pOworCisgICAgcmV0dXJuIHNvcnRlZDsKK30KKworc3RhdGljIHVuc2lnbmVkIG51bWJl
ck9mUmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbihjb25zdCBWZWN0b3I8UHJldmFsZW50UmVz
b3VyY2VUZWxlbWV0cnk+JiByZXNvdXJjZXMsIHNpemVfdCBiZWdpbiwgc2l6ZV90IGVuZCkKK3sK
KyAgICBpZiAocmVzb3VyY2VzLmlzRW1wdHkoKSB8fCByZXNvdXJjZXMuc2l6ZSgpIDwgYmVnaW4g
KyAxIHx8IHJlc291cmNlcy5zaXplKCkgPCBlbmQgKyAxKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICAKKyAgICB1bnNpZ25lZCByZXN1bHQgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSBiZWdpbjsg
aSA8IGVuZDsgKytpKSB7CisgICAgICAgIGlmIChyZXNvdXJjZXNbaV0uaGFzSGFkVXNlckludGVy
YWN0aW9uKQorICAgICAgICAgICAgKytyZXN1bHQ7CisgICAgfQorICAgIAorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisgICAgCitzdGF0aWMgdW5zaWduZWQgbWVkaWFuKGNvbnN0IFZlY3Rvcjx1bnNp
Z25lZD4mIHYpCit7CisgICAgaWYgKHYuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICBpZiAodi5zaXplKCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIHZbMF07CisgICAgCisgICAgYXV0
byBzaXplID0gdi5zaXplKCk7CisgICAgYXV0byBtaWRkbGUgPSBzaXplIC8gMjsKKyAgICBpZiAo
c2l6ZSAlIDIpCisgICAgICAgIHJldHVybiB2W21pZGRsZV07CisgICAgcmV0dXJuICh2W21pZGRs
ZSAtIDFdICsgdlttaWRkbGVdKSAvIDI7Cit9CisgICAgCitzdGF0aWMgdW5zaWduZWQgbWVkaWFu
KGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHYsIHVuc2lnbmVkIGJl
Z2luLCB1bnNpZ25lZCBlbmQsIGNvbnN0IFdURjo6RnVuY3Rpb248dW5zaWduZWQoY29uc3QgUHJl
dmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+JiBzdGF0aXN0aWNHZXR0ZXIpCit7
CisgICAgaWYgKHYuaXNFbXB0eSgpIHx8IHYuc2l6ZSgpIDwgYmVnaW4gKyAxIHx8IHYuc2l6ZSgp
IDwgZW5kICsgMSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgVmVjdG9yPHVuc2lnbmVk
PiBwYXJ0OworICAgIHBhcnQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShlbmQgLSBiZWdpbiArIDEp
OworICAgIGZvciAodW5zaWduZWQgaSA9IGJlZ2luOyBpIDw9IGVuZDsgKytpKQorICAgICAgICBw
YXJ0LnVuY2hlY2tlZEFwcGVuZChzdGF0aXN0aWNHZXR0ZXIodltpXSkpOworICAgIAorICAgIHJl
dHVybiBtZWRpYW4ocGFydCk7Cit9CisgICAgCitzdGF0aWMgV2ViUGFnZVByb3h5KiBub25FcGhl
bWVyYWxXZWJQYWdlUHJveHkoKQoreworICAgIGF1dG8gcHJvY2Vzc1Bvb2xzID0gV2ViUHJvY2Vz
c1Bvb2w6OmFsbFByb2Nlc3NQb29scygpOworICAgIGlmIChwcm9jZXNzUG9vbHMuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBhdXRvIHByb2Nlc3NQb29sID0g
cHJvY2Vzc1Bvb2xzWzBdOworICAgIGlmICghcHJvY2Vzc1Bvb2wpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIAorICAgIGZvciAoYXV0byYgd2ViUHJvY2VzcyA6IHByb2Nlc3NQb29sLT5w
cm9jZXNzZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIHBhZ2UgOiB3ZWJQcm9jZXNzLT5wYWdl
cygpKSB7CisgICAgICAgICAgICBpZiAocGFnZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHJldHVybiBwYWdlOworICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorICAgIAorc3RhdGljIHZvaWQg
c3VibWl0VG9wTGlzdCh1bnNpZ25lZCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3AsIGNvbnN0
IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNvcnRlZFByZXZhbGVudFJlc291
cmNlcywgY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiYgc29ydGVkUHJl
dmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgV2ViUGFnZVByb3h5JiB3ZWJQ
YWdlUHJveHkpCit7CisgICAgV1RGOjpGdW5jdGlvbjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRS
ZXNvdXJjZVRlbGVtZXRyeSYgdGVsZW1ldHJ5KT4gc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lu
c0dldHRlciA9IFtdIChhdXRvJiB0KSB7CisgICAgICAgIHJldHVybiB0LnN1YmZyYW1lVW5kZXJU
b3BGcmFtZU9yaWdpbnM7CisgICAgfTsKKyAgICBXVEY6OkZ1bmN0aW9uPHVuc2lnbmVkKGNvbnN0
IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkpPiBzdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVPcmlnaW5zR2V0dGVyID0gW10gKGF1dG8mIHQpIHsKKyAgICAgICAgcmV0dXJuIHQu
c3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luczsKKyAgICB9OworICAgIFdURjo6RnVuY3Rp
b248dW5zaWduZWQoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+
IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9HZXR0ZXIgPSBbXSAoYXV0byYgdCkgeworICAg
ICAgICByZXR1cm4gdC5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvOworICAgIH07CisgICAg
V1RGOjpGdW5jdGlvbjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYg
dGVsZW1ldHJ5KT4gbnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZEdldHRlciA9IFtdIChh
dXRvJiB0KSB7CisgICAgICAgIHJldHVybiB0Lm51bWJlck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92
ZWQ7CisgICAgfTsKKyAgICBXVEY6OkZ1bmN0aW9uPHVuc2lnbmVkKGNvbnN0IFByZXZhbGVudFJl
c291cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkpPiBudW1iZXJPZlRpbWVzQWNjZXNzZWRBc0ZpcnN0
UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbkdldHRlciA9IFtdIChhdXRvJiB0KSB7CisgICAgICAg
IHJldHVybiB0LnRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbjsK
KyAgICB9OworICAgIFdURjo6RnVuY3Rpb248dW5zaWduZWQoY29uc3QgUHJldmFsZW50UmVzb3Vy
Y2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+IG51bWJlck9mVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0
eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSUdldHRlciA9IFtdIChhdXRvJiB0KSB7CisgICAgICAgIHJl
dHVybiB0LnRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEk7Cisg
ICAgfTsKKworICAgIHVuc2lnbmVkIHRvcFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJh
Y3Rpb24gPSBudW1iZXJPZlJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24oc29ydGVkUHJldmFs
ZW50UmVzb3VyY2VzLCAwLCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3AgLSAxKTsKKyAgICB1
bnNpZ25lZCB0b3BTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zID0gbWVkaWFuKHNvcnRlZFBy
ZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIG51bWJlck9mUmVzb3Vy
Y2VzRnJvbVRoZVRvcCAtIDEsIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNHZXR0ZXIpOwor
ICAgIHVuc2lnbmVkIHRvcFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMgPSBtZWRpYW4o
c29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgMCwgbnVtYmVy
T2ZSZXNvdXJjZXNGcm9tVGhlVG9wIC0gMSwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lu
c0dldHRlcik7CisgICAgdW5zaWduZWQgdG9wU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyA9
IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAw
LCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3AgLSAxLCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvR2V0dGVyKTsKKyAgICB1bnNpZ25lZCB0b3BOdW1iZXJPZlRpbWVzRGF0YVJlY29yZHNS
ZW1vdmVkID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJh
Y3Rpb24sIDAsIG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRvcCAtIDEsIG51bWJlck9mVGltZXNE
YXRhUmVjb3Jkc1JlbW92ZWRHZXR0ZXIpOworICAgIHVuc2lnbmVkIHRvcE51bWJlck9mVGltZXNB
Y2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uID0gbWVkaWFuKHNvcnRlZFBy
ZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIG51bWJlck9mUmVzb3Vy
Y2VzRnJvbVRoZVRvcCAtIDEsIG51bWJlck9mVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRv
VXNlckludGVyYWN0aW9uR2V0dGVyKTsKKyAgICB1bnNpZ25lZCB0b3BOdW1iZXJPZlRpbWVzQWNj
ZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgPSBtZWRpYW4oc29ydGVkUHJl
dmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgMCwgbnVtYmVyT2ZSZXNvdXJj
ZXNGcm9tVGhlVG9wIC0gMSwgbnVtYmVyT2ZUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9T
dG9yYWdlQWNjZXNzQVBJR2V0dGVyKTsKKworICAgIFN0cmluZ0J1aWxkZXIgcHJlYW1ibGVCdWls
ZGVyOworICAgIHByZWFtYmxlQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJ0b3AiKTsKKyAgICBwcmVh
bWJsZUJ1aWxkZXIuYXBwZW5kTnVtYmVyKG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRvcCk7Cisg
ICAgU3RyaW5nIGRlc2NyaXB0aW9uUHJlYW1ibGUgPSBwcmVhbWJsZUJ1aWxkZXIudG9TdHJpbmco
KTsKKyAgICAKKyAgICB3ZWJQYWdlUHJveHkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUo
RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5
KCksIGRlc2NyaXB0aW9uUHJlYW1ibGUgKyAiUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRl
cmFjdGlvbiIsCisgICAgICAgIHRvcFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rp
b24sIHNpZ25pZmljYW50RmlndXJlc0ZvckxvZ2dlZFZhbHVlcywgU2hvdWxkU2FtcGxlOjpObyk7
CisgICAgd2ViUGFnZVByb3h5LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0
aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBkZXNj
cmlwdGlvblByZWFtYmxlICsgIlN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMiLAorICAgICAg
ICB0b3BTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLCBzaWduaWZpY2FudEZpZ3VyZXNGb3JM
b2dnZWRWYWx1ZXMsIFNob3VsZFNhbXBsZTo6Tm8pOworICAgIHdlYlBhZ2VQcm94eS5sb2dEaWFn
bm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgZGVzY3JpcHRpb25QcmVhbWJsZSArICJTdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zIiwKKyAgICAgICAgdG9wU3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lT3JpZ2lucywgc2lnbmlmaWNhbnRGaWd1cmVzRm9yTG9nZ2VkVmFsdWVzLCBTaG91bGRT
YW1wbGU6Ok5vKTsKKyAgICB3ZWJQYWdlUHJveHkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFs
dWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5
S2V5KCksIGRlc2NyaXB0aW9uUHJlYW1ibGUgKyAiU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNU
byIsCisgICAgICAgIHRvcFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8sIHNpZ25pZmljYW50
RmlndXJlc0ZvckxvZ2dlZFZhbHVlcywgU2hvdWxkU2FtcGxlOjpObyk7CisgICAgd2ViUGFnZVBy
b3h5LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5czo6
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBkZXNjcmlwdGlvblByZWFtYmxl
ICsgIk51bWJlck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWQiLAorICAgICAgICB0b3BOdW1iZXJP
ZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkLCBzaWduaWZpY2FudEZpZ3VyZXNGb3JMb2dnZWRWYWx1
ZXMsIFNob3VsZFNhbXBsZTo6Tm8pOworICAgIHdlYlBhZ2VQcm94eS5sb2dEaWFnbm9zdGljTWVz
c2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUZWxlbWV0cnlLZXkoKSwgZGVzY3JpcHRpb25QcmVhbWJsZSArICJOdW1iZXJPZlRpbWVzQWNj
ZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbiIsCisgICAgICAgIHRvcE51bWJl
ck9mVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uLCBzaWduaWZp
Y2FudEZpZ3VyZXNGb3JMb2dnZWRWYWx1ZXMsIFNob3VsZFNhbXBsZTo6Tm8pOworICAgIHdlYlBh
Z2VQcm94eS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgZGVzY3JpcHRpb25QcmVh
bWJsZSArICJOdW1iZXJPZlRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nl
c3NBUEkiLAorICAgICAgICB0b3BOdW1iZXJPZlRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVU
b1N0b3JhZ2VBY2Nlc3NBUEksIHNpZ25pZmljYW50RmlndXJlc0ZvckxvZ2dlZFZhbHVlcywgU2hv
dWxkU2FtcGxlOjpObyk7Cit9CisgICAgCitzdGF0aWMgdm9pZCBzdWJtaXRUb3BMaXN0cyhjb25z
dCBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+JiBzb3J0ZWRQcmV2YWxlbnRSZXNv
dXJjZXMsIGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNvcnRlZFBy
ZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIFdlYlBhZ2VQcm94eSYgd2Vi
UGFnZVByb3h5KQoreworICAgIHN1Ym1pdFRvcExpc3QoMSwgc29ydGVkUHJldmFsZW50UmVzb3Vy
Y2VzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB3ZWJQ
YWdlUHJveHkpOworICAgIAorICAgIGlmIChzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0
VXNlckludGVyYWN0aW9uLnNpemUoKSA8IDMpCisgICAgICAgIHJldHVybjsKKyAgICBzdWJtaXRU
b3BMaXN0KDMsIHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3Vy
Y2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgd2ViUGFnZVByb3h5KTsKKyAgICAKKyAgICBpZiAo
c29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPCAx
MCkKKyAgICAgICAgcmV0dXJuOworICAgIHN1Ym1pdFRvcExpc3QoMTAsIHNvcnRlZFByZXZhbGVu
dFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlv
biwgd2ViUGFnZVByb3h5KTsKKyAgICAKKyAgICBpZiAoc29ydGVkUHJldmFsZW50UmVzb3VyY2Vz
V2l0aG91dFVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPCA1MCkKKyAgICAgICAgcmV0dXJuOworICAg
IHN1Ym1pdFRvcExpc3QoNTAsIHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFs
ZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgd2ViUGFnZVByb3h5KTsKKyAgICAK
KyAgICBpZiAoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbi5z
aXplKCkgPCAxMDApCisgICAgICAgIHJldHVybjsKKyAgICBzdWJtaXRUb3BMaXN0KDEwMCwgc29y
dGVkUHJldmFsZW50UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNl
ckludGVyYWN0aW9uLCB3ZWJQYWdlUHJveHkpOworfQorICAgIAorLy8gVGhpcyBmdW5jdGlvbiBp
cyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KK3ZvaWQgc3RhdGljIG5vdGlmeVBhZ2VzKHVuc2lnbmVk
IHRvdGFsUHJldmFsZW50UmVzb3VyY2VzLCB1bnNpZ25lZCB0b3RhbFByZXZhbGVudFJlc291cmNl
c1dpdGhVc2VySW50ZXJhY3Rpb24sIHVuc2lnbmVkIHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVP
cmlnaW5zKQoreworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdG90YWxQcmV2YWxlbnRS
ZXNvdXJjZXMsIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgdG9w
M1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNdIHsKKyAgICAgICAgQVBJOjpEaWN0aW9uYXJ5
OjpNYXBUeXBlIG1lc3NhZ2VCb2R5OworICAgICAgICBtZXNzYWdlQm9keS5zZXQoIlRvdGFsUHJl
dmFsZW50UmVzb3VyY2VzIl9zLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKHRvdGFsUHJldmFsZW50UmVz
b3VyY2VzKSk7CisgICAgICAgIG1lc3NhZ2VCb2R5LnNldCgiVG90YWxQcmV2YWxlbnRSZXNvdXJj
ZXNXaXRoVXNlckludGVyYWN0aW9uIl9zLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKHRvdGFsUHJldmFs
ZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbikpOworICAgICAgICBtZXNzYWdlQm9keS5z
ZXQoIlRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zIl9zLCBBUEk6OlVJbnQ2NDo6Y3Jl
YXRlKHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zKSk7CisgICAgICAgIFdlYlByb2Nl
c3NQcm94eTo6bm90aWZ5UGFnZVN0YXRpc3RpY3NUZWxlbWV0cnlGaW5pc2hlZChBUEk6OkRpY3Rp
b25hcnk6OmNyZWF0ZShtZXNzYWdlQm9keSkucHRyKCkpOworICAgIH0pOworfQorICAgIAorLy8g
VGhpcyBmdW5jdGlvbiBpcyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KK3ZvaWQgc3RhdGljIG5vdGlm
eVBhZ2VzKGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNvcnRlZFBy
ZXZhbGVudFJlc291cmNlcywgY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5
PiYgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgdW5zaWdu
ZWQgdG90YWxOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24pCit7
CisgICAgV1RGOjpGdW5jdGlvbjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVt
ZXRyeSYgdGVsZW1ldHJ5KT4gc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0dldHRlciA9IFtd
IChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdCkgeworICAgICAgICByZXR1cm4g
dC5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zOworICAgIH07CisgICAgCisgICAgbm90aWZ5
UGFnZXMoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLnNpemUoKSwgdG90YWxOdW1iZXJPZlByZXZh
bGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRS
ZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAwLCAyLCBzdWJmcmFtZVVuZGVyVG9wRnJh
bWVPcmlnaW5zR2V0dGVyKSk7Cit9CisgICAgCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUZWxlbWV0cnk6OmNhbGN1bGF0ZUFuZFN1Ym1pdChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmUmIHJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSkKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBhdXRvIHNvcnRlZFByZXZhbGVudFJl
c291cmNlcyA9IHNvcnRlZFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5KHJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZSk7CisgICAgaWYgKG5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1
cmVkICYmIHNvcnRlZFByZXZhbGVudFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbm90
aWZ5UGFnZXMoMCwgMCwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgVmVj
dG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNX
aXRob3V0VXNlckludGVyYWN0aW9uOworICAgIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhv
dXRVc2VySW50ZXJhY3Rpb24ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzb3J0ZWRQcmV2YWxlbnRS
ZXNvdXJjZXMuc2l6ZSgpKTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IHByZXZhbGVudFJlc291cmNl
c0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbjsKKyAgICAKKyAgICBmb3IgKGF1dG8mIHByZXZhbGVu
dFJlc291cmNlIDogc29ydGVkUHJldmFsZW50UmVzb3VyY2VzKSB7CisgICAgICAgIGlmIChwcmV2
YWxlbnRSZXNvdXJjZS5oYXNIYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgICAgICBwcmV2YWxl
bnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rpb24uYXBwZW5kKHByZXZhbGVudFJlc291
cmNlLmRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24udW5jaGVja2Vk
QXBwZW5kKHByZXZhbGVudFJlc291cmNlKTsKKyAgICB9CisgICAgCisgICAgLy8gRGlzcGF0Y2gg
b24gdGhlIG1haW4gdGhyZWFkIHRvIG1ha2Ugc3VyZSB0aGUgV2ViUGFnZVByb3h5IHdlJ3JlIHVz
aW5nIGRvZXNuJ3QgZ28gYXdheS4KKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3NvcnRl
ZFByZXZhbGVudFJlc291cmNlcyA9IFdURk1vdmUoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzKSwg
c29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiA9IFdURk1vdmUo
c29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiksIHByZXZhbGVu
dFJlc291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbiA9IFdURk1vdmUocHJldmFsZW50UmVz
b3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uKV0gKCkgeworICAgICAgICBhdXRvIHdlYlBh
Z2VQcm94eSA9IG5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eSgpOworICAgICAgICBpZiAoIXdlYlBh
Z2VQcm94eSkgeworICAgICAgICAgICAgaWYgKG5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0Nh
cHR1cmVkKQorICAgICAgICAgICAgICAgIG5vdGlmeVBhZ2VzKDAsIDAsIDApOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobm90aWZ5UGFnZXNX
aGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpIHsKKyAgICAgICAgICAgIG5vdGlmeVBhZ2VzKHNvcnRl
ZFByZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJ
bnRlcmFjdGlvbiwgcHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLnNp
emUoKSk7CisgICAgICAgICAgICAvLyBUaGUgbm90aWZ5IHBhZ2VzIGZ1bmN0aW9uIGlzIGZvciB0
ZXN0aW5nIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW4gYWN0dWFsIHN1Ym1pc3Npb24uCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHdlYlBhZ2VQcm94
eS0+bG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksICJ0b3RhbE51bWJlck9mUHJldmFs
ZW50UmVzb3VyY2VzIl9zLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMuc2l6ZSgpLCBzaWduaWZp
Y2FudEZpZ3VyZXNGb3JMb2dnZWRWYWx1ZXMsIFNob3VsZFNhbXBsZTo6Tm8pOworICAgICAgICB3
ZWJQYWdlUHJveHktPmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dn
aW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCAidG90YWxOdW1i
ZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24iX3MsIHByZXZhbGVudFJl
c291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbi5zaXplKCksIHNpZ25pZmljYW50RmlndXJl
c0ZvckxvZ2dlZFZhbHVlcywgU2hvdWxkU2FtcGxlOjpObyk7CisgICAgICAgIAorICAgICAgICBp
ZiAocHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLnNpemUoKSA+IDAp
CisgICAgICAgICAgICB3ZWJQYWdlUHJveHktPmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVl
KERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtl
eSgpLCAidG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNl
ckludGVyYWN0aW9uIl9zLCBwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rp
b25bMF0sIHNpZ25pZmljYW50RmlndXJlc0ZvckxvZ2dlZFZhbHVlcywgU2hvdWxkU2FtcGxlOjpO
byk7CisgICAgICAgIGlmIChwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rp
b24uc2l6ZSgpID4gMSkKKyAgICAgICAgICAgIHdlYlBhZ2VQcm94eS0+bG9nRGlhZ25vc3RpY01l
c3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0
aWNzVGVsZW1ldHJ5S2V5KCksICJtZWRpYW5QcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVy
YWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uIl9zLCBtZWRpYW4ocHJldmFsZW50UmVzb3Vy
Y2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uKSwgc2lnbmlmaWNhbnRGaWd1cmVzRm9yTG9nZ2Vk
VmFsdWVzLCBTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICAgICAgCisgICAgICAgIHN1Ym1pdFRvcExp
c3RzKHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0
aG91dFVzZXJJbnRlcmFjdGlvbiwgKndlYlBhZ2VQcm94eSk7CisgICAgfSk7Cit9CisgICAgCit2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OnNldE5vdGlmeVBhZ2VzV2hl
blRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgYWx3YXlzKQoreworICAgIG5vdGlmeVBhZ2VzV2hl
blRlbGVtZXRyeVdhc0NhcHR1cmVkID0gYWx3YXlzOworfQorICAgIAorfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NUZWxlbWV0cnkuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjk2
ZTYxYTFhZjBhYjczNTNiMDMxZGI3NTNmOWRkYjZmNTJjNjI5YgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGVsZW1ldHJ5LmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU7CisKK25h
bWVzcGFjZSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5IHsKKyAgICAKK3ZvaWQg
Y2FsY3VsYXRlQW5kU3VibWl0KGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZSYpOwordm9pZCBzZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sKTsK
KyAgICAKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93
bmxvYWRzL1BlbmRpbmdEb3dubG9hZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0Rvd25sb2Fkcy9QZW5kaW5nRG93bmxvYWQuY3BwCmluZGV4IDMwOWE5MzE5ZjZjM2M4NjRlYmQ1
N2E2YTk3MjBjZjNmNTY0MmE1YjAuLjNlYzk4M2UxZjY4OTAwOTg2ODcyOWFhMTg2NGQ4MmNhMWU1
MTlhM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L1BlbmRpbmdEb3dubG9hZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvUGVuZGluZ0Rvd25sb2FkLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUg
IlBlbmRpbmdEb3dubG9hZC5oIgogCiAjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1
ZGUgIkRvd25sb2FkLmgiCiAjaW5jbHVkZSAiRG93bmxvYWRQcm94eU1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiTmV0d29ya0xvYWQuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5oIgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVuZGluZ0Rvd25s
b2FkLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93
bmxvYWQuaAppbmRleCAwNmY1MzExZjc5ODBlYzM5ZDJkODc0YjFjNGU5MjJlNWRhNWU5MjM1Li40
YjkyZjFiMGVmZGFkNmY2NDRjZTlmNWRkNmIyMjc2ZGU1ZThmZjczIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93bmxvYWQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93bmxvYWQu
aApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgogI2luY2x1
ZGUgIk5ldHdvcmtMb2FkQ2xpZW50LmgiCisjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgog
CiBuYW1lc3BhY2UgSVBDIHsKIGNsYXNzIENvbm5lY3Rpb247CkBAIC00Myw3ICs0NCw3IEBAIGNs
YXNzIERvd25sb2FkSUQ7CiBjbGFzcyBOZXR3b3JrTG9hZDsKIGNsYXNzIE5ldHdvcmtMb2FkUGFy
YW1ldGVyczsKIGNsYXNzIE5ldHdvcmtTZXNzaW9uOwotICAgIAorCiBjbGFzcyBQZW5kaW5nRG93
bmxvYWQgOiBwdWJsaWMgTmV0d29ya0xvYWRDbGllbnQsIHB1YmxpYyBJUEM6Ok1lc3NhZ2VTZW5k
ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1N
YWMuY21ha2UKaW5kZXggZDY3ZTY0Y2Q5NzQwMzcyODg1OTg2OTdhZmZkM2M2ZTczMjA1NjZhZC4u
ZTIyYjgxNjY0OGRmOWJlNzY0N2U5ZWU5Y2EyZWRiMTNjOWI4Yjg2MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
TWFjLmNtYWtlCkBAIC0xOSw2ICsxOSw4IEBAIGlmIChOT1QgQVZGQVVESU9fTElCUkFSWS1OT1RG
T1VORCkKIGVuZGlmICgpCiAKIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCisgICAgTmV0d29y
a1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCisK
ICAgICBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL21hYy9XZWJDb29raWVNYW5hZ2VyTWFjLm1tCiAK
ICAgICBOZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyLmNwcApAQCAtMTU4LDcgKzE2MCw2IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VT
CiAKICAgICBVSVByb2Nlc3MvSGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXIuY3Bw
CiAgICAgVUlQcm9jZXNzL1BlckFjdGl2aXR5U3RhdGVDUFVVc2FnZVNhbXBsZXIuY3BwCi0gICAg
VUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKICAgICBVSVByb2Nl
c3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAKIAogICAgIFVJUHJvY2Vz
cy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21h
a2UKaW5kZXggMmFhMzVhZDQ4MzU3OTk2NDFjMDk0NGE3YWY5YzkwNzk0ZThkOTAxYi4uZmVkMzVm
YzJjOTE0Mzc2MjAyZGI0ODg2OWIxZjg0ZWYwMzk0ODA2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNt
YWtlCkBAIC04LDYgKzgsOCBAQCBmaWxlKE1BS0VfRElSRUNUT1JZICR7REVSSVZFRF9TT1VSQ0VT
X1dFQktJVF9ESVJ9KQogYWRkX2RlZmluaXRpb25zKC1EQlVJTERJTkdfV0VCS0lUKQogCiBsaXN0
KEFQUEVORCBXZWJLaXRfU09VUkNFUworICAgIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAorCiAgICAgTmV0d29ya1Byb2Nlc3Mvd2lu
L05ldHdvcmtQcm9jZXNzTWFpbldpbi5jcHAKIAogICAgIFBsYXRmb3JtL0lQQy93aW4vQXR0YWNo
bWVudFdpbi5jcHAKQEAgLTM2LDcgKzM4LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMK
ICAgICBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCiAgICAgVUlQcm9jZXNzL0xl
Z2FjeVNlc3Npb25TdGF0ZUNvZGluZ05vbmUuY3BwCiAgICAgVUlQcm9jZXNzL1dlYkdyYW1tYXJE
ZXRhaWwuY3BwCi0gICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5j
cHAKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAK
ICAgICBVSVByb2Nlc3MvV2ViVmlld3BvcnRBdHRyaWJ1dGVzLmNwcAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9QZXJzaXN0ZW5jeVV0aWxzLmNwcCBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL1BlcnNpc3RlbmN5VXRpbHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVkYmE5NjhiZDdlMGIzOGMz
ZDIyNjk0ZDZkNWQyZTZiMDY5ZDJhODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9QZXJzaXN0ZW5jeVV0aWxzLmNwcApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGVyc2lzdGVuY3lVdGlscy5o
IgorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxv
b3AuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CitzdGQ6OnVuaXF1ZV9wdHI8S2V5ZWREZWNvZGVyPiBjcmVhdGVGb3JGaWxlKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8g
aGFuZGxlID0gRmlsZVN5c3RlbTo6b3BlbkFuZExvY2tGaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZp
bGVPcGVuTW9kZTo6UmVhZCk7CisgICAgaWYgKGhhbmRsZSA9PSBGaWxlU3lzdGVtOjppbnZhbGlk
UGxhdGZvcm1GaWxlSGFuZGxlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGxvbmcg
bG9uZyBmaWxlU2l6ZSA9IDA7CisgICAgaWYgKCFGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShoYW5k
bGUsIGZpbGVTaXplKSB8fCAhZmlsZVNpemUpIHsKKyAgICAgICAgRmlsZVN5c3RlbTo6dW5sb2Nr
QW5kQ2xvc2VGaWxlKGhhbmRsZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIHNpemVfdCBieXRlc1RvUmVhZDsKKyAgICBpZiAoIVdURjo6Y29udmVydFNhZmVseShmaWxl
U2l6ZSwgYnl0ZXNUb1JlYWQpKSB7CisgICAgICAgIEZpbGVTeXN0ZW06OnVubG9ja0FuZENsb3Nl
RmlsZShoYW5kbGUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBWZWN0
b3I8Y2hhcj4gYnVmZmVyKGJ5dGVzVG9SZWFkKTsKKyAgICBzaXplX3QgdG90YWxCeXRlc1JlYWQg
PSBGaWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoaGFuZGxlLCBidWZmZXIuZGF0YSgpLCBidWZmZXIu
c2l6ZSgpKTsKKworICAgIEZpbGVTeXN0ZW06OnVubG9ja0FuZENsb3NlRmlsZShoYW5kbGUpOwor
CisgICAgaWYgKHRvdGFsQnl0ZXNSZWFkICE9IGJ5dGVzVG9SZWFkKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdHJ5IHRvIG1vZGlmeSB0aGUgY29u
c3RydWN0b3IgdG8gcGFzcyAmJi4KKyAgICByZXR1cm4gS2V5ZWREZWNvZGVyOjpkZWNvZGVyKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlci5kYXRhKCkpLCBidWZmZXIuc2l6
ZSgpKTsKK30KKwordm9pZCB3cml0ZVRvRGlzayhzdGQ6OnVuaXF1ZV9wdHI8S2V5ZWRFbmNvZGVy
PiYmIGVuY29kZXIsIFN0cmluZyYmIHBhdGgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBhdXRvIHJhd0RhdGEgPSBlbmNvZGVyLT5maW5pc2hFbmNvZGluZygpOwor
ICAgIGlmICghcmF3RGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRmlsZVN5c3RlbTo6UGxh
dGZvcm1GaWxlSGFuZGxlIGhhbmRsZSA9IEZpbGVTeXN0ZW06Om9wZW5BbmRMb2NrRmlsZShwYXRo
LCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OldyaXRlKTsKKyAgICBpZiAoaGFuZGxlID09IEZp
bGVTeXN0ZW06OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGF1dG8gd3JpdHRlbkJ5dGVzID0gRmlsZVN5c3RlbTo6d3JpdGVUb0ZpbGUoaGFuZGxlLCBy
YXdEYXRhLT5kYXRhKCksIHJhd0RhdGEtPnNpemUoKSk7CisgICAgRmlsZVN5c3RlbTo6dW5sb2Nr
QW5kQ2xvc2VGaWxlKGhhbmRsZSk7CisKKyAgICBpZiAod3JpdHRlbkJ5dGVzICE9IHN0YXRpY19j
YXN0PGludDY0X3Q+KHJhd0RhdGEtPnNpemUoKSkpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KERpc2tQZXJzaXN0ZW5jeSwgIkRpc2sgcGVyc2lzdGVuY3k6IFdlIG9ubHkgd3JvdGUgJWQgb3V0
IG9mICV6dSBieXRlcyB0byBkaXNrIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHdyaXR0ZW5CeXRl
cyksIHJhd0RhdGEtPnNpemUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvUGVyc2lzdGVuY3lVdGlscy5oIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvUGVyc2lzdGVuY3lVdGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2MDI3MGYxOTE2OGYz
N2Y5ZDgyOWFhZWQ1NzFiNzY2NzUyZjlkYmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9QZXJzaXN0ZW5jeVV0aWxzLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJDb3JlL0tleWVkQ29kaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6S2V5ZWRE
ZWNvZGVyPiBjcmVhdGVGb3JGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCk7Cit2b2lkIHdyaXRlVG9E
aXNrKHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpLZXllZEVuY29kZXI+JiYsIFN0cmluZyYmIHBh
dGgpOworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IGUwYTMyODJlMDA5
MmQ5N2NlMzVkNjY0NmI0MzMxYjhjYTExZjQ4ZTAuLjQ5NmU4OGM4M2ZiZDllYzRjY2ViMWMyODlm
M2QzZjhhNWFhZjhiOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysr
IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtNDEsNiArNDEsOSBAQCBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrU29ja2V0U3RyZWFtLmNwcAogTmV0d29ya1Byb2Nlc3MvUGluZ0xvYWQuY3Bw
CiBOZXR3b3JrUHJvY2Vzcy9QcmVjb25uZWN0VGFzay5jcHAKIAorTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCitOZXR3b3JrUHJv
Y2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5j
cHAKKwogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAogCiBOZXR3
b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCkBAIC0xMDcsNiArMTEwLDcgQEAgU2hh
cmVkL0ZyYW1lSW5mb0RhdGEuY3BwCiBTaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5jcHAKIFNoYXJl
ZC9Mb2FkUGFyYW1ldGVycy5jcHAKIFNoYXJlZC9OYXZpZ2F0aW9uQWN0aW9uRGF0YS5jcHAKK1No
YXJlZC9QZXJzaXN0ZW5jeVV0aWxzLmNwcAogU2hhcmVkL1BsYXRmb3JtUG9wdXBNZW51RGF0YS5j
cHAKIFNoYXJlZC9QcmludEluZm8uY3BwCiBTaGFyZWQvUlRDTmV0d29yay5jcHAKQEAgLTIyNSwx
MiArMjI5LDkgQEAgVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2Vy
UHJveHkuY3BwCiBVSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFByb3h5LmNw
cAogVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFByb3h5LmNwcAogVUlQcm9jZXNzL1BhZ2VMb2Fk
U3RhdGUuY3BwCi1VSVByb2Nlc3MvUGVyc2lzdGVuY3lVdGlscy5jcHAKIFVJUHJvY2Vzcy9Qcm9j
ZXNzQXNzZXJ0aW9uLmNwcAogVUlQcm9jZXNzL1Byb2Nlc3NUaHJvdHRsZXIuY3BwCiBVSVByb2Nl
c3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwCi1VSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlLmNwcAotVUlQcm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQ
ZXJzaXN0ZW50U3RvcmFnZS5jcHAKIFVJUHJvY2Vzcy9SZXNwb25zaXZlbmVzc1RpbWVyLmNwcAog
VUlQcm9jZXNzL1NlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkuY3BwCiBVSVByb2Nlc3MvU3RhdGlz
dGljc1JlcXVlc3QuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50
eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggYTQzMzZhMDk4MDk0YTUx
ODgwNTdkMmZjYTY1MjQxYjU5OWE5NDNiMi4uMzA4ZjY2Y2JlNmQyMzI0NmVkZGFmZGEzMWQyYWE0
NTg1ODJjOTRlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0Cisr
KyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtMjksNiArMjksOSBAQCBOZXR3
b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQogTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29y
a1Nlc3Npb25Db2NvYS5tbQogCitOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKK05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAKKwogTmV0d29ya1Byb2Nlc3MvQ29va2ll
cy9tYWMvV2ViQ29va2llTWFuYWdlck1hYy5tbQogCiBOZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90
b2NvbHMvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2EubW0KQEAgLTIwMiw4
ICsyMDUsNiBAQCBVSVByb2Nlc3MvUGVyQWN0aXZpdHlTdGF0ZUNQVVVzYWdlU2FtcGxlci5jcHAK
IFVJUHJvY2Vzcy9XZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd24uY3BwCiBVSVByb2Nlc3Mv
V2ViTWVkaWFTZXNzaW9uRm9jdXNNYW5hZ2VyLmNwcAogVUlQcm9jZXNzL1dlYk1lZGlhU2Vzc2lv
bkZvY3VzTWFuYWdlckNsaWVudC5jcHAKLVVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuY3BwCi1VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRy
eS5jcHAKIFVJUHJvY2Vzcy9XS0ltYWdlUHJldmlld1ZpZXdDb250cm9sbGVyLm1tCiBVSVByb2Nl
c3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CmluZGV4IDI2
NTM4NGI2NDE4ODc1Mzc4OTVkMDdmM2FkNTgzMjk0NGMwMWQyOTEuLmIwOGQ3MjNiNGFlZTYwYjQx
OWU3YjkzZTIxZDg4NjQ0Mjk1ZDE3ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNl
c0dUSy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dApAQCAtMjUsNiArMjUs
OSBAQAogLy8gbGlua2luZyBQbHVnaW5Qcm9jZXNzR1RLMi4gSSBkb24ndCBrbm93IHdoeSB0aGlz
IGlzIG5lY2Vzc2FyeS4gVGhlc2UKIC8vIGFubm90YXRpb25zIHNob3VsZCBiZSByZXZpc2l0ZWQg
YWZ0ZXIgcmVtb3ZpbmcgUGx1Z2luUHJvY2Vzc0dUSzIuCiAKK05ldHdvcmtQcm9jZXNzL0NsYXNz
aWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAorTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAorCiBOZXR3
b3JrUHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwCiAKIE5ldHdv
cmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXIuY3Bw
CkBAIC0xMDksOCArMTEyLDYgQEAgVUlQcm9jZXNzL0RlZmF1bHRVbmRvQ29udHJvbGxlci5jcHAK
IFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKIFVJUHJvY2Vzcy9MZWdhY3lTZXNz
aW9uU3RhdGVDb2RpbmdOb25lLmNwcAogVUlQcm9jZXNzL1dlYkdyYW1tYXJEZXRhaWwuY3BwCi1V
SVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAotVUlQcm9jZXNzL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCiBVSVByb2Nlc3MvV2ViVGV4dENo
ZWNrZXIuY3BwCiBVSVByb2Nlc3MvV2ViVGV4dENoZWNrZXJDbGllbnQuY3BwCiBVSVByb2Nlc3Mv
V2ViVmlld3BvcnRBdHRyaWJ1dGVzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3Vy
Y2VzV1BFLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKaW5kZXggOGVlMmZlZjQy
YTY2NDc4NTlmMzVmOGQzNDc5M2FmOTRhMDI5MzkzZS4uYmYwMzc0OTI1YmUwNTI0OTI0MTA5ZTU3
NjAxNzg1NGJlMDNiNDJlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4
dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0CkBAIC0yMSw2ICsyMSw5IEBACiAv
LyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCiAvLyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKK05l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNw
cAorTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVs
ZW1ldHJ5LmNwcAorCiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdl
clNvdXAuY3BwCiAKIE5ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXIuY3BwCkBAIC05OCw3ICsxMDEsNiBAQCBVSVByb2Nlc3MvQWNjZWxlcmF0
ZWREcmF3aW5nQXJlYVByb3h5LmNwcAogVUlQcm9jZXNzL0RlZmF1bHRVbmRvQ29udHJvbGxlci5j
cHAKIFVJUHJvY2Vzcy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmdOb25lLmNwcAogVUlQcm9jZXNz
L1dlYkdyYW1tYXJEZXRhaWwuY3BwCi1VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmNwcAogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnku
Y3BwCiBVSVByb2Nlc3MvV2ViVmlld3BvcnRBdHRyaWJ1dGVzLmNwcAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcApp
bmRleCBhM2UzNDY4MjU2YmI2NzAwODI5NWZjMTNmMDcyZGYzNzliNzAwMTJjLi5jZjZjYWY2ODlh
NjEwNGRhNzc3N2U4NTc5OTM4MjMzZWUzNDBlOGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAKQEAgLTU3OSwx
MyArNTc5LDEzIEBAIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0Q2FjaGVTdG9yYWdlUGVyT3Jp
Z2luUXVvdGEoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTCiB2b2lkIFdLV2Vic2l0ZURhdGFT
dG9yZVNldFdlYkF1dGhlbnRpY2F0aW9uTW9ja0NvbmZpZ3VyYXRpb24oV0tXZWJzaXRlRGF0YVN0
b3JlUmVmIGRhdGFTdG9yZVJlZiwgV0tEaWN0aW9uYXJ5UmVmIGNvbmZpZ3VyYXRpb25SZWYpCiB7
CiAjaWYgRU5BQkxFKFdFQl9BVVRITikKLSAgICBNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb247CisgICAgV2ViS2l0OjpNb2NrV2ViQXV0aGVudGljYXRpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb247CiAKICAgICBpZiAoYXV0byBzaWxlbnRGYWlsdXJl
UmVmID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KGNvbmZpZ3VyYXRpb25SZWYsIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNpbGVudEZhaWx1cmUiKSkuZ2V0KCkpKSkKICAgICAgICAgY29uZmlndXJhdGlvbi5zaWxlbnRG
YWlsdXJlID0gV0tCb29sZWFuR2V0VmFsdWUoc2lsZW50RmFpbHVyZVJlZik7CiAKICAgICBpZiAo
YXV0byBsb2NhbFJlZiA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShjb25maWd1cmF0aW9uUmVmLCBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJMb2NhbCIpKS5nZXQoKSkpKSB7Ci0gICAgICAgIE1vY2tXZWJBdXRoZW50
aWNhdGlvbkNvbmZpZ3VyYXRpb246OkxvY2FsIGxvY2FsOworICAgICAgICBXZWJLaXQ6Ok1vY2tX
ZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb246OkxvY2FsIGxvY2FsOwogICAgICAgICBsb2Nh
bC5hY2NlcHRBdXRoZW50aWNhdGlvbiA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdL
Qm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsb2NhbFJlZiwgYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQWNjZXB0QXV0aGVudGljYXRpb24iKSkuZ2V0
KCkpKSk7CiAgICAgICAgIGxvY2FsLmFjY2VwdEF0dGVzdGF0aW9uID0gV0tCb29sZWFuR2V0VmFs
dWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxv
Y2FsUmVmLCBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBY2NlcHRBdHRl
c3RhdGlvbiIpKS5nZXQoKSkpKTsKICAgICAgICAgaWYgKGxvY2FsLmFjY2VwdEF0dGVzdGF0aW9u
KSB7CkBAIC01OTcsMzUgKzU5NywzNSBAQCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVNldFdlYkF1
dGhlbnRpY2F0aW9uTW9ja0NvbmZpZ3VyYXRpb24oV0tXZWJzaXRlRGF0YVN0b3JlUgogICAgIH0K
IAogICAgIGlmIChhdXRvIGhpZFJlZiA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShjb25maWd1cmF0aW9uUmVmLCBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIaWQiKSkuZ2V0KCkpKSkgewotICAgICAgICBNb2NrV2Vi
QXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uOjpIaWQgaGlkOworICAgICAgICBXZWJLaXQ6Ok1v
Y2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb246OkhpZCBoaWQ7CiAKICAgICAgICAgYXV0
byBzdGFnZSA9IFdlYktpdDo6dG9JbXBsKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KGhpZFJlZiwgYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU3RhZ2UiKSkuZ2V0KCkpKSktPnN0cmluZygpOwogICAgICAgICBpZiAoc3RhZ2Ug
PT0gImluZm8iKQotICAgICAgICAgICAgaGlkLnN0YWdlID0gTW9ja1dlYkF1dGhlbnRpY2F0aW9u
Q29uZmlndXJhdGlvbjo6SGlkOjpTdGFnZTo6SW5mbzsKKyAgICAgICAgICAgIGhpZC5zdGFnZSA9
IFdlYktpdDo6TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbjo6SGlkOjpTdGFnZTo6
SW5mbzsKICAgICAgICAgaWYgKHN0YWdlID09ICJyZXF1ZXN0IikKLSAgICAgICAgICAgIGhpZC5z
dGFnZSA9IE1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb246OkhpZDo6U3RhZ2U6OlJl
cXVlc3Q7CisgICAgICAgICAgICBoaWQuc3RhZ2UgPSBXZWJLaXQ6Ok1vY2tXZWJBdXRoZW50aWNh
dGlvbkNvbmZpZ3VyYXRpb246OkhpZDo6U3RhZ2U6OlJlcXVlc3Q7CiAKICAgICAgICAgYXV0byBz
dWJTdGFnZSA9IFdlYktpdDo6dG9JbXBsKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rp
b25hcnlHZXRJdGVtRm9yS2V5KGhpZFJlZiwgYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiU3ViU3RhZ2UiKSkuZ2V0KCkpKSktPnN0cmluZygpOwogICAgICAgICBpZiAoc3Vi
U3RhZ2UgPT0gImluaXQiKQotICAgICAgICAgICAgaGlkLnN1YlN0YWdlID0gTW9ja1dlYkF1dGhl
bnRpY2F0aW9uQ29uZmlndXJhdGlvbjo6SGlkOjpTdWJTdGFnZTo6SW5pdDsKKyAgICAgICAgICAg
IGhpZC5zdWJTdGFnZSA9IFdlYktpdDo6TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlv
bjo6SGlkOjpTdWJTdGFnZTo6SW5pdDsKICAgICAgICAgaWYgKHN1YlN0YWdlID09ICJtc2ciKQot
ICAgICAgICAgICAgaGlkLnN1YlN0YWdlID0gTW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJh
dGlvbjo6SGlkOjpTdWJTdGFnZTo6TXNnOworICAgICAgICAgICAgaGlkLnN1YlN0YWdlID0gV2Vi
S2l0OjpNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uOjpIaWQ6OlN1YlN0YWdlOjpN
c2c7CiAKICAgICAgICAgYXV0byBlcnJvciA9IFdlYktpdDo6dG9JbXBsKHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGhpZFJlZiwgYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXJyb3IiKSkuZ2V0KCkpKSktPnN0cmluZygpOwog
ICAgICAgICBpZiAoZXJyb3IgPT0gInN1Y2Nlc3MiKQotICAgICAgICAgICAgaGlkLmVycm9yID0g
TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbjo6SGlkOjpFcnJvcjo6U3VjY2VzczsK
KyAgICAgICAgICAgIGhpZC5lcnJvciA9IFdlYktpdDo6TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29u
ZmlndXJhdGlvbjo6SGlkOjpFcnJvcjo6U3VjY2VzczsKICAgICAgICAgaWYgKGVycm9yID09ICJk
YXRhLW5vdC1zZW50IikKLSAgICAgICAgICAgIGhpZC5lcnJvciA9IE1vY2tXZWJBdXRoZW50aWNh
dGlvbkNvbmZpZ3VyYXRpb246OkhpZDo6RXJyb3I6OkRhdGFOb3RTZW50OworICAgICAgICAgICAg
aGlkLmVycm9yID0gV2ViS2l0OjpNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uOjpI
aWQ6OkVycm9yOjpEYXRhTm90U2VudDsKICAgICAgICAgaWYgKGVycm9yID09ICJlbXB0eS1yZXBv
cnQiKQotICAgICAgICAgICAgaGlkLmVycm9yID0gTW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmln
dXJhdGlvbjo6SGlkOjpFcnJvcjo6RW1wdHlSZXBvcnQ7CisgICAgICAgICAgICBoaWQuZXJyb3Ig
PSBXZWJLaXQ6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb246OkhpZDo6RXJyb3I6
OkVtcHR5UmVwb3J0OwogICAgICAgICBpZiAoZXJyb3IgPT0gIndyb25nLWNoYW5uZWwtaWQiKQot
ICAgICAgICAgICAgaGlkLmVycm9yID0gTW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlv
bjo6SGlkOjpFcnJvcjo6V3JvbmdDaGFubmVsSWQ7CisgICAgICAgICAgICBoaWQuZXJyb3IgPSBX
ZWJLaXQ6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb246OkhpZDo6RXJyb3I6Oldy
b25nQ2hhbm5lbElkOwogICAgICAgICBpZiAoZXJyb3IgPT0gIm1hbGljaW91cy1wYXlsb2FkIikK
LSAgICAgICAgICAgIGhpZC5lcnJvciA9IE1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRp
b246OkhpZDo6RXJyb3I6Ok1hbGljaW91c1BheWxvYWQ7CisgICAgICAgICAgICBoaWQuZXJyb3Ig
PSBXZWJLaXQ6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb246OkhpZDo6RXJyb3I6
Ok1hbGljaW91c1BheWxvYWQ7CiAgICAgICAgIGlmIChlcnJvciA9PSAidW5zdXBwb3J0ZWQtb3B0
aW9ucyIpCi0gICAgICAgICAgICBoaWQuZXJyb3IgPSBNb2NrV2ViQXV0aGVudGljYXRpb25Db25m
aWd1cmF0aW9uOjpIaWQ6OkVycm9yOjpVbnN1cHBvcnRlZE9wdGlvbnM7CisgICAgICAgICAgICBo
aWQuZXJyb3IgPSBXZWJLaXQ6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb246Okhp
ZDo6RXJyb3I6OlVuc3VwcG9ydGVkT3B0aW9uczsKICAgICAgICAgaWYgKGVycm9yID09ICJ3cm9u
Zy1ub25jZSIpCi0gICAgICAgICAgICBoaWQuZXJyb3IgPSBNb2NrV2ViQXV0aGVudGljYXRpb25D
b25maWd1cmF0aW9uOjpIaWQ6OkVycm9yOjpXcm9uZ05vbmNlOworICAgICAgICAgICAgaGlkLmVy
cm9yID0gV2ViS2l0OjpNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uOjpIaWQ6OkVy
cm9yOjpXcm9uZ05vbmNlOwogCiAgICAgICAgIGlmIChhdXRvIHBheWxvYWRCYXNlNjQgPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShoaWRSZWYsIGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBheWxvYWRCYXNlNjQiKSkuZ2V0
KCkpKSkKICAgICAgICAgICAgIGhpZC5wYXlsb2FkQmFzZTY0ID0gV2ViS2l0Ojp0b0ltcGwocGF5
bG9hZEJhc2U2NCktPnN0cmluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUGVyc2lzdGVuY3lVdGlscy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QZXJzaXN0
ZW5jeVV0aWxzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRiYTk2OGJkN2Uw
YjM4YzNkMjI2OTRkNmQ1ZDJlNmIwNjlkMmE4MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QZXJzaXN0ZW5jeVV0
aWxzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQZXJzaXN0ZW5jeVV0aWxzLmgiCi0KLSNp
bmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXN0ZDo6
dW5pcXVlX3B0cjxLZXllZERlY29kZXI+IGNyZWF0ZUZvckZpbGUoY29uc3QgU3RyaW5nJiBwYXRo
KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byBoYW5kbGUg
PSBGaWxlU3lzdGVtOjpvcGVuQW5kTG9ja0ZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5N
b2RlOjpSZWFkKTsKLSAgICBpZiAoaGFuZGxlID09IEZpbGVTeXN0ZW06OmludmFsaWRQbGF0Zm9y
bUZpbGVIYW5kbGUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgbG9uZyBsb25nIGZp
bGVTaXplID0gMDsKLSAgICBpZiAoIUZpbGVTeXN0ZW06OmdldEZpbGVTaXplKGhhbmRsZSwgZmls
ZVNpemUpIHx8ICFmaWxlU2l6ZSkgewotICAgICAgICBGaWxlU3lzdGVtOjp1bmxvY2tBbmRDbG9z
ZUZpbGUoaGFuZGxlKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgc2l6
ZV90IGJ5dGVzVG9SZWFkOwotICAgIGlmICghV1RGOjpjb252ZXJ0U2FmZWx5KGZpbGVTaXplLCBi
eXRlc1RvUmVhZCkpIHsKLSAgICAgICAgRmlsZVN5c3RlbTo6dW5sb2NrQW5kQ2xvc2VGaWxlKGhh
bmRsZSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIFZlY3RvcjxjaGFy
PiBidWZmZXIoYnl0ZXNUb1JlYWQpOwotICAgIHNpemVfdCB0b3RhbEJ5dGVzUmVhZCA9IEZpbGVT
eXN0ZW06OnJlYWRGcm9tRmlsZShoYW5kbGUsIGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkp
OwotCi0gICAgRmlsZVN5c3RlbTo6dW5sb2NrQW5kQ2xvc2VGaWxlKGhhbmRsZSk7Ci0KLSAgICBp
ZiAodG90YWxCeXRlc1JlYWQgIT0gYnl0ZXNUb1JlYWQpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cnkgdG8gbW9kaWZ5IHRoZSBjb25zdHJ1Y3Rv
ciB0byBwYXNzICYmLgotICAgIHJldHVybiBLZXllZERlY29kZXI6OmRlY29kZXIocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyLmRhdGEoKSksIGJ1ZmZlci5zaXplKCkpOwot
fQotCi12b2lkIHdyaXRlVG9EaXNrKHN0ZDo6dW5pcXVlX3B0cjxLZXllZEVuY29kZXI+JiYgZW5j
b2RlciwgU3RyaW5nJiYgcGF0aCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIGF1dG8gcmF3RGF0YSA9IGVuY29kZXItPmZpbmlzaEVuY29kaW5nKCk7Ci0gICAgaWYg
KCFyYXdEYXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZp
bGVIYW5kbGUgaGFuZGxlID0gRmlsZVN5c3RlbTo6b3BlbkFuZExvY2tGaWxlKHBhdGgsIEZpbGVT
eXN0ZW06OkZpbGVPcGVuTW9kZTo6V3JpdGUpOwotICAgIGlmIChoYW5kbGUgPT0gRmlsZVN5c3Rl
bTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byB3cml0dGVuQnl0ZXMgPSBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShoYW5kbGUsIHJhd0RhdGEt
PmRhdGEoKSwgcmF3RGF0YS0+c2l6ZSgpKTsKLSAgICBGaWxlU3lzdGVtOjp1bmxvY2tBbmRDbG9z
ZUZpbGUoaGFuZGxlKTsKLQotICAgIGlmICh3cml0dGVuQnl0ZXMgIT0gc3RhdGljX2Nhc3Q8aW50
NjRfdD4ocmF3RGF0YS0+c2l6ZSgpKSkKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoRGlza1Bl
cnNpc3RlbmN5LCAiRGlzayBwZXJzaXN0ZW5jeTogV2Ugb25seSB3cm90ZSAlZCBvdXQgb2YgJXp1
IGJ5dGVzIHRvIGRpc2siLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4od3JpdHRlbkJ5dGVzKSwgcmF3
RGF0YS0+c2l6ZSgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QZXJzaXN0ZW5jeVV0aWxzLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9QZXJzaXN0ZW5jeVV0aWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDE2MDI3MGYxOTE2OGYzN2Y5ZDgyOWFhZWQ1NzFiNzY2NzUyZjlkYmUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUGVyc2lzdGVuY3lVdGlscy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxXZWJDb3JlL0tleWVkQ29k
aW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
S2V5ZWREZWNvZGVyPiBjcmVhdGVGb3JGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci12b2lkIHdy
aXRlVG9EaXNrKHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpLZXllZEVuY29kZXI+JiYsIFN0cmlu
ZyYmIHBhdGgpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTcxODMyMDMyNGNjNmI5YjY0NDRh
N2M2ZjZiMjQxZDhiYWZkMDEwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjk3ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUuaCIKLQotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQ
bHVnaW5Qcm9jZXNzTWFuYWdlci5oIgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NQcm94eS5oIgot
I2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5oIgotI2lu
Y2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NUZWxlbWV0cnkuaCIKLSNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9LZXllZENvZGluZy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy5oPgotI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KLSNpbmNs
dWRlIDx3dGYvRGF0ZU1hdGguaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi0jaWYg
IVJFTEVBU0VfTE9HX0RJU0FCTEVECi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
Ci0KLWNvbnN0ZXhwciB1bnNpZ25lZCBzdGF0aXN0aWNzTW9kZWxWZXJzaW9uIHsgMTQgfTsKLWNv
bnN0ZXhwciB1bnNpZ25lZCBtYXhOdW1iZXJPZlJlY3Vyc2l2ZUNhbGxzSW5SZWRpcmVjdFRyYWNl
QmFjayB7IDUwIH07Ci1jb25zdGV4cHIgU2Vjb25kcyBtaW5pbXVtU3RhdGlzdGljc1Byb2Nlc3Np
bmdJbnRlcnZhbCB7IDVfcyB9OwotY29uc3RleHByIHVuc2lnbmVkIG9wZXJhdGluZ0RhdGVzV2lu
ZG93IHsgMzAgfTsKLWNvbnN0ZXhwciB1bnNpZ25lZCBtYXhJbXBvcnRhbmNlIHsgMyB9Owotc3Rh
dGljIGNvbnN0IGNoYXIqIGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UgeyAiM3JkcGFydHl0
ZXN0d2Via2l0Lm9yZyIgfTsKLQotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotc3RhdGljIFN0
cmluZyBkb21haW5zVG9TdHJpbmcoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMpCi17Ci0g
ICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlu
cykgewotICAgICAgICBpZiAoIWJ1aWxkZXIuaXNFbXB0eSgpKQotICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCIsICIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChkb21haW4pOwot
ICAgIH0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotfQotI2VuZGlmCi0KLWNsYXNz
IE9wZXJhdGluZ0RhdGUgewotcHVibGljOgotICAgIE9wZXJhdGluZ0RhdGUoKSA9IGRlZmF1bHQ7
Ci0KLSAgICBzdGF0aWMgT3BlcmF0aW5nRGF0ZSBmcm9tV2FsbFRpbWUoV2FsbFRpbWUgdGltZSkK
LSAgICB7Ci0gICAgICAgIGRvdWJsZSBtcyA9IHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS5taWxs
aXNlY29uZHMoKTsKLSAgICAgICAgaW50IHllYXIgPSBtc1RvWWVhcihtcyk7Ci0gICAgICAgIGlu
dCB5ZWFyRGF5ID0gZGF5SW5ZZWFyKG1zLCB5ZWFyKTsKLSAgICAgICAgaW50IG1vbnRoID0gbW9u
dGhGcm9tRGF5SW5ZZWFyKHllYXJEYXksIGlzTGVhcFllYXIoeWVhcikpOwotICAgICAgICBpbnQg
bW9udGhEYXkgPSBkYXlJbk1vbnRoRnJvbURheUluWWVhcih5ZWFyRGF5LCBpc0xlYXBZZWFyKHll
YXIpKTsKLQotICAgICAgICByZXR1cm4gT3BlcmF0aW5nRGF0ZSB7IHllYXIsIG1vbnRoLCBtb250
aERheSB9OwotICAgIH0KLQotICAgIHN0YXRpYyBPcGVyYXRpbmdEYXRlIHRvZGF5KCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUoV2FsbFRpbWU6Om5v
dygpKTsKLSAgICB9Ci0KLSAgICBTZWNvbmRzIHNlY29uZHNTaW5jZUVwb2NoKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBTZWNvbmRzIHsgZGF0ZVRvRGF5c0Zyb20xOTcwKG1feWVhciwg
bV9tb250aCwgbV9tb250aERheSkgKiBzZWNvbmRzUGVyRGF5IH07Ci0gICAgfQotCi0gICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IE9wZXJhdGluZ0RhdGUmIG90aGVyKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fbW9udGhEYXkgPT0gb3RoZXIubV9tb250aERheSAmJiBtX21vbnRoID09
IG90aGVyLm1fbW9udGggJiYgbV95ZWFyID09IG90aGVyLm1feWVhcjsKLSAgICB9Ci0KLSAgICBi
b29sIG9wZXJhdG9yPChjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBzZWNvbmRzU2luY2VFcG9jaCgpIDwgb3RoZXIuc2Vjb25kc1NpbmNlRXBv
Y2goKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgT3BlcmF0aW5nRGF0ZSYg
b3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gc2Vjb25kc1NpbmNlRXBvY2goKSA8
PSBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBPcGVy
YXRpbmdEYXRlKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBtb250aERheSkKLSAgICAgICAgOiBt
X3llYXIoeWVhcikKLSAgICAgICAgLCBtX21vbnRoKG1vbnRoKQotICAgICAgICAsIG1fbW9udGhE
YXkobW9udGhEYXkpCi0gICAgeyB9Ci0KLSAgICBpbnQgbV95ZWFyIHsgMCB9OwotICAgIGludCBt
X21vbnRoIHsgMCB9OyAvLyBbMCwgMTFdLgotICAgIGludCBtX21vbnRoRGF5IHsgMCB9OyAvLyBb
MSwgMzFdLgotfTsKLQotc3RhdGljIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtZXJnZU9wZXJhdGlu
Z0RhdGVzKGNvbnN0IFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYgZXhpc3RpbmdEYXRlcywgVmVjdG9y
PE9wZXJhdGluZ0RhdGU+JiYgbmV3RGF0ZXMpCi17Ci0gICAgaWYgKGV4aXN0aW5nRGF0ZXMuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gV1RGTW92ZShuZXdEYXRlcyk7Ci0KLSAgICBWZWN0b3I8
T3BlcmF0aW5nRGF0ZT4gbWVyZ2VkRGF0ZXMoZXhpc3RpbmdEYXRlcy5zaXplKCkgKyBuZXdEYXRl
cy5zaXplKCkpOwotCi0gICAgLy8gTWVyZ2UgdGhlIHR3byBzb3J0ZWQgdmVjdG9ycyBvZiBkYXRl
cy4KLSAgICBzdGQ6Om1lcmdlKGV4aXN0aW5nRGF0ZXMuYmVnaW4oKSwgZXhpc3RpbmdEYXRlcy5l
bmQoKSwgbmV3RGF0ZXMuYmVnaW4oKSwgbmV3RGF0ZXMuZW5kKCksIG1lcmdlZERhdGVzLmJlZ2lu
KCkpOwotICAgIC8vIFJlbW92ZSBkdXBsaWNhdGUgZGF0ZXMuCi0gICAgcmVtb3ZlUmVwZWF0ZWRF
bGVtZW50cyhtZXJnZWREYXRlcyk7Ci0KLSAgICAvLyBEcm9wIG9sZCBkYXRlcyB1bnRpbCB0aGUg
VmVjdG9yIHNpemUgcmVhY2hlcyBvcGVyYXRpbmdEYXRlc1dpbmRvdy4KLSAgICB3aGlsZSAobWVy
Z2VkRGF0ZXMuc2l6ZSgpID4gb3BlcmF0aW5nRGF0ZXNXaW5kb3cpCi0gICAgICAgIG1lcmdlZERh
dGVzLnJlbW92ZSgwKTsKLQotICAgIHJldHVybiBtZXJnZWREYXRlczsKLX0KLQotc3RydWN0IFN0
YXRpc3RpY3NMYXN0U2VlbiB7Ci0gICAgU3RyaW5nIHRvcFByaXZhdGVseU93bmVkRG9tYWluOwot
ICAgIFdhbGxUaW1lIGxhc3RTZWVuOwotfTsKLQotc3RhdGljIHZvaWQgcHJ1bmVSZXNvdXJjZXMo
SGFzaE1hcDxTdHJpbmcsIFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiBzdGF0aXN0
aWNzTWFwLCBWZWN0b3I8U3RhdGlzdGljc0xhc3RTZWVuPiYgc3RhdGlzdGljc1RvUHJ1bmUsIHNp
emVfdCYgbnVtYmVyT2ZFbnRyaWVzVG9QcnVuZSkKLXsKLSAgICBpZiAoc3RhdGlzdGljc1RvUHJ1
bmUuc2l6ZSgpID4gbnVtYmVyT2ZFbnRyaWVzVG9QcnVuZSkgewotICAgICAgICBzdGQ6OnNvcnQo
c3RhdGlzdGljc1RvUHJ1bmUuYmVnaW4oKSwgc3RhdGlzdGljc1RvUHJ1bmUuZW5kKCksIFtdKGNv
bnN0IFN0YXRpc3RpY3NMYXN0U2VlbiYgYSwgY29uc3QgU3RhdGlzdGljc0xhc3RTZWVuJiBiKSB7
Ci0gICAgICAgICAgICByZXR1cm4gYS5sYXN0U2VlbiA8IGIubGFzdFNlZW47Ci0gICAgICAgIH0p
OwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwLCBlbmQgPSBzdGQ6Om1pbihudW1iZXJP
ZkVudHJpZXNUb1BydW5lLCBzdGF0aXN0aWNzVG9QcnVuZS5zaXplKCkpOyBpICE9IGVuZDsgKytp
LCAtLW51bWJlck9mRW50cmllc1RvUHJ1bmUpCi0gICAgICAgIHN0YXRpc3RpY3NNYXAucmVtb3Zl
KHN0YXRpc3RpY3NUb1BydW5lW2ldLnRvcFByaXZhdGVseU93bmVkRG9tYWluKTsKLX0KLQotc3Rh
dGljIHVuc2lnbmVkIGNvbXB1dGVJbXBvcnRhbmNlKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MmIHJlc291cmNlU3RhdGlzdGljKQotewotICAgIHVuc2lnbmVkIGltcG9ydGFuY2UgPSBtYXhJ
bXBvcnRhbmNlOwotICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJj
ZSkKLSAgICAgICAgaW1wb3J0YW5jZSAtPSAxOwotICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMu
aGFkVXNlckludGVyYWN0aW9uKQotICAgICAgICBpbXBvcnRhbmNlIC09IDI7Ci0gICAgcmV0dXJu
IGltcG9ydGFuY2U7Ci19Ci0KLVJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZSYgc3RvcmUsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQotICAgIDogbV9zdG9yZShzdG9yZSkK
LSAgICAsIG1fd29ya1F1ZXVlKHdvcmtRdWV1ZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHJlZ2lzdGVyVXNlckRlZmF1bHRz
SWZOZWVkZWQoKTsKLSNlbmRpZgotICAgIGluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVj
ZXNzYXJ5KCk7Ci0KLSAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2hBZnRlcig1X3MsIFt3ZWFrVGhp
cyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0gewotICAgICAgICBpZiAod2Vha1RoaXMpCi0gICAgICAg
ICAgICB3ZWFrVGhpcy0+Y2FsY3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5KCk7Ci0gICAgfSk7Ci19
Ci0KLVJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6flJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZSgpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci19
Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRQZXJzaXN0ZW50
U3RvcmFnZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UmIHBlcnNpc3Rl
bnRTdG9yYWdlKQotewotICAgIG1fcGVyc2lzdGVudFN0b3JhZ2UgPSBtYWtlV2Vha1B0cihwZXJz
aXN0ZW50U3RvcmFnZSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpjYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkoKSBjb25zdAotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKG1fcGFyYW1ldGVycy5zaG91bGRTdWJtaXRU
ZWxlbWV0cnkpCi0gICAgICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OmNh
bGN1bGF0ZUFuZFN1Ym1pdCgqdGhpcyk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJv
b2wgdmFsdWUpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgbV9wYXJh
bWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgPSB2YWx1
ZTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFNob3Vs
ZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpCi17
Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgbV9wYXJhbWV0ZXJzLnNob3Vs
ZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsID0gdmFsdWU7Ci19Ci0K
LXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTaG91bGRTdWJtaXRU
ZWxlbWV0cnkoYm9vbCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
LSAgICBtX3BhcmFtZXRlcnMuc2hvdWxkU3VibWl0VGVsZW1ldHJ5ID0gdmFsdWU7Ci19Ci0KLXZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZW1vdmVEYXRhUmVjb3JkcyhD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCi17Ci0gICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIXNob3VsZFJlbW92ZURhdGFSZWNvcmRzKCkpIHsK
LSAgICAgICAgY2FsbGJhY2soKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIG1fYWN0aXZlUGx1Z2luVG9rZW5zLmNsZWFyKCk7
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBwbHVnaW4gOiBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2lu
Z2xldG9uKCkucGx1Z2luUHJvY2Vzc2VzKCkpCi0gICAgICAgIG1fYWN0aXZlUGx1Z2luVG9rZW5z
LmFkZChwbHVnaW4tPnBsdWdpblByb2Nlc3NUb2tlbigpKTsKLSNlbmRpZgotCi0gICAgYXV0byBw
cmV2YWxlbnRSZXNvdXJjZURvbWFpbnMgPSB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1Rv
UmVtb3ZlV2Vic2l0ZURhdGFGb3IoKTsKLSAgICBpZiAocHJldmFsZW50UmVzb3VyY2VEb21haW5z
LmlzRW1wdHkoKSkgewotICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgUkVMRUFTRV9MT0dfSU5GT19JRiht
X2RlYnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0
IHRvIHJlbW92ZSBkYXRhIHJlY29yZHMgZm9yICV7cHVibGljfXMuIiwgZG9tYWluc1RvU3RyaW5n
KHByZXZhbGVudFJlc291cmNlRG9tYWlucykudXRmOCgpLmRhdGEoKSk7Ci0jZW5kaWYKLQotICAg
IHNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKHRydWUpOwotCi0gICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFtwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMgPSBjcm9zc1RocmVhZENvcHkocHJl
dmFsZW50UmVzb3VyY2VEb21haW5zKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgd2Vh
a1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNv
cmRzV2VyZVNjYW5uZWQgPSBtX3BhcmFtZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJl
Y29yZHNXZXJlU2Nhbm5lZCwgd29ya1F1ZXVlID0gbV93b3JrUXVldWUuY29weVJlZigpXSAoKSBt
dXRhYmxlIHsKLSAgICAgICAgV2ViUHJvY2Vzc1Byb3h5OjpkZWxldGVXZWJzaXRlRGF0YUZvclRv
cFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zSW5BbGxQZXJzaXN0ZW50RGF0YVN0b3JlcyhXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1vbml0b3JlZERhdGFUeXBlcygpLCBXVEZNb3Zl
KHByZXZhbGVudFJlc291cmNlRG9tYWlucyksIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNv
cmRzV2VyZVNjYW5uZWQsIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB3ZWFrVGhpcyA9
IFdURk1vdmUod2Vha1RoaXMpLCB3b3JrUXVldWUgPSB3b3JrUXVldWUuY29weVJlZigpXShjb25z
dCBIYXNoU2V0PFN0cmluZz4mIGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSBtdXRhYmxl
IHsKLSAgICAgICAgICAgIHdvcmtRdWV1ZS0+ZGlzcGF0Y2goW3RvcERvbWFpbnMgPSBjcm9zc1Ro
cmVhZENvcHkoZG9tYWluc1dpdGhEZWxldGVkV2Vic2l0ZURhdGEpLCBjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spLCB3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpXSAoKSBtdXRhYmxlIHsK
LSAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNh
bGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbiA6IHRv
cERvbWFpbnMpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byYgc3RhdGlzdGljID0gd2Vha1Ro
aXMtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJldmFsZW50UmVz
b3VyY2VEb21haW4pOwotICAgICAgICAgICAgICAgICAgICArK3N0YXRpc3RpYy5kYXRhUmVjb3Jk
c1JlbW92ZWQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5z
ZXREYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgY2FsbGJh
Y2soKTsKLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICAgICAgICAgICAgICBSRUxFQVNF
X0xPR19JTkZPX0lGKHdlYWtUaGlzLT5tX2RlYnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEZWJ1ZywgIkRvbmUgcmVtb3ZpbmcgZGF0YSByZWNvcmRzLiIpOwotI2VuZGlm
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXVuc2lnbmVkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVjdXJzaXZlbHlHZXRBbGxEb21haW5z
VGhhdEhhdmVSZWRpcmVjdGVkVG9UaGlzRG9tYWluKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljLCBIYXNoU2V0PFN0cmluZz4mIGRvbWFpbnNU
aGF0SGF2ZVJlZGlyZWN0ZWRUbywgdW5zaWduZWQgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscykgY29u
c3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChudW1iZXJP
ZlJlY3Vyc2l2ZUNhbGxzID49IG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJh
Y2VCYWNrKSB7Ci0gICAgICAgIC8vIE1vZGVsIHZlcnNpb24gMTQgaW52b2tlcyBhIGRlbGliZXJh
dGUgcmUtY2xhc3NpZmljYXRpb24gb2YgdGhlIHdob2xlIHNldC4KLSAgICAgICAgaWYgKHN0YXRp
c3RpY3NNb2RlbFZlcnNpb24gIT0gMTQpCi0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgUkVMRUFTRV9MT0coUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgIkhpdCAldSBy
ZWN1cnNpdmUgY2FsbHMgaW4gcmVkaXJlY3QgYmFja3RyYWNlLiBSZXR1cm5pbmcgZWFybHkuIiwg
bWF4TnVtYmVyT2ZSZWN1cnNpdmVDYWxsc0luUmVkaXJlY3RUcmFjZUJhY2spOwotICAgICAgICBy
ZXR1cm4gbnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKLSAgICB9Ci0KLSAgICBudW1iZXJPZlJlY3Vy
c2l2ZUNhbGxzKys7Ci0KLSAgICBmb3IgKGF1dG8mIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RG
cm9tRG9tYWluIDogcmVzb3VyY2VTdGF0aXN0aWMuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNG
cm9tLnZhbHVlcygpKSB7Ci0gICAgICAgIGF1dG8gbWFwRW50cnkgPSBtX3Jlc291cmNlU3RhdGlz
dGljc01hcC5maW5kKHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tRG9tYWluKTsKLSAgICAg
ICAgaWYgKG1hcEVudHJ5ID09IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuZCgpIHx8IG1hcEVu
dHJ5LT52YWx1ZS5pc1ByZXZhbGVudFJlc291cmNlKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGlmIChkb21haW5zVGhhdEhhdmVSZWRpcmVjdGVkVG8uYWRkKG1hcEVudHJ5LT52YWx1
ZS5oaWdoTGV2ZWxEb21haW4pLmlzTmV3RW50cnkpCi0gICAgICAgICAgICBudW1iZXJPZlJlY3Vy
c2l2ZUNhbGxzID0gcmVjdXJzaXZlbHlHZXRBbGxEb21haW5zVGhhdEhhdmVSZWRpcmVjdGVkVG9U
aGlzRG9tYWluKG1hcEVudHJ5LT52YWx1ZSwgZG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvLCBu
dW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKTsKLSAgICB9Ci0gICAgZm9yIChhdXRvJiB0b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0RnJvbURvbWFpbiA6IHJlc291cmNlU3RhdGlzdGljLnRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzRnJvbS52YWx1ZXMoKSkgewotICAgICAgICBhdXRvIG1hcEVudHJ5ID0gbV9yZXNv
dXJjZVN0YXRpc3RpY3NNYXAuZmluZCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbURvbWFpbik7
Ci0gICAgICAgIGlmIChtYXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSB8
fCBtYXBFbnRyeS0+dmFsdWUuaXNQcmV2YWxlbnRSZXNvdXJjZSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBpZiAoZG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvLmFkZChtYXBFbnRy
eS0+dmFsdWUuaGlnaExldmVsRG9tYWluKS5pc05ld0VudHJ5KQotICAgICAgICAgICAgbnVtYmVy
T2ZSZWN1cnNpdmVDYWxscyA9IHJlY3Vyc2l2ZWx5R2V0QWxsRG9tYWluc1RoYXRIYXZlUmVkaXJl
Y3RlZFRvVGhpc0RvbWFpbihtYXBFbnRyeS0+dmFsdWUsIGRvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0
ZWRUbywgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bWJl
ck9mUmVjdXJzaXZlQ2FsbHM7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudChXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYykKLXsKLSAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChyZXNvdXJjZVN0YXRpc3RpYy5pc1By
ZXZhbGVudFJlc291cmNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGF1dG8mIHN1YnJl
c291cmNlRG9tYWluUmVkaXJlY3RlZFRvIDogcmVzb3VyY2VTdGF0aXN0aWMuc3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUby52YWx1ZXMoKSkgewotICAgICAgICBhdXRvIG1hcEVudHJ5ID0gbV9y
ZXNvdXJjZVN0YXRpc3RpY3NNYXAuZmluZChzdWJyZXNvdXJjZURvbWFpblJlZGlyZWN0ZWRUbyk7
Ci0gICAgICAgIGlmIChtYXBFbnRyeSAhPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSAm
JiBtYXBFbnRyeS0+dmFsdWUuaXNQcmV2YWxlbnRSZXNvdXJjZSkgewotICAgICAgICAgICAgc2V0
UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVu
Y2U6OkhpZ2gpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Zm9yIChhdXRvJiB0b3BGcmFtZURvbWFpblJlZGlyZWN0ZWRUbyA6IHJlc291cmNlU3RhdGlzdGlj
LnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8udmFsdWVzKCkpIHsKLSAgICAgICAgYXV0byBtYXBF
bnRyeSA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmZpbmQodG9wRnJhbWVEb21haW5SZWRpcmVj
dGVkVG8pOwotICAgICAgICBpZiAobWFwRW50cnkgIT0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAu
ZW5kKCkgJiYgbWFwRW50cnktPnZhbHVlLmlzUHJldmFsZW50UmVzb3VyY2UpIHsKLSAgICAgICAg
ICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQ
cmV2YWxlbmNlOjpIaWdoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUHJldmFsZW50
RHVlVG9EZWJ1Z01vZGUoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMp
Ci17Ci0gICAgaWYgKCFtX2RlYnVnTW9kZUVuYWJsZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiByZXNvdXJjZVN0YXRpc3RpYy5oaWdoTGV2ZWxEb21haW4gPT0gZGVidWdT
dGF0aWNQcmV2YWxlbnRSZXNvdXJjZSB8fCByZXNvdXJjZVN0YXRpc3RpYy5oaWdoTGV2ZWxEb21h
aW4gPT0gbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlOwotfQotCi12b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jk
cygpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAobV9wYXJh
bWV0ZXJzLnNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKSB7
Ci0gICAgICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlz
dGljc01hcC52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKGlzUHJldmFsZW50RHVlVG9EZWJ1
Z01vZGUocmVzb3VyY2VTdGF0aXN0aWMpKQotICAgICAgICAgICAgICAgIHNldFByZXZhbGVudFJl
c291cmNlKHJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKCFyZXNvdXJjZVN0YXRpc3RpYy5pc1ZlcnlQcmV2YWxlbnRS
ZXNvdXJjZSkgewotICAgICAgICAgICAgICAgIG1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3Rl
ZFRvUHJldmFsZW50KHJlc291cmNlU3RhdGlzdGljKTsKLSAgICAgICAgICAgICAgICBhdXRvIGN1
cnJlbnRQcmV2YWxlbmNlID0gcmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSA/
IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2ggOiBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpM
b3c7Ci0gICAgICAgICAgICAgICAgYXV0byBuZXdQcmV2YWxlbmNlID0gbV9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzQ2xhc3NpZmllci5jYWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2UocmVzb3VyY2VT
dGF0aXN0aWMsIGN1cnJlbnRQcmV2YWxlbmNlKTsKLSAgICAgICAgICAgICAgICBpZiAobmV3UHJl
dmFsZW5jZSAhPSBjdXJyZW50UHJldmFsZW5jZSkKLSAgICAgICAgICAgICAgICAgICAgc2V0UHJl
dmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMsIG5ld1ByZXZhbGVuY2UpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVtb3ZlRGF0YVJlY29yZHMoW3RoaXMs
IHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXSB7Ci0gICAgICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwotICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIHBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCk7Ci0gICAgICAgIGlmIChtX3Bl
cnNpc3RlbnRTdG9yYWdlKQotICAgICAgICAgICAgbV9wZXJzaXN0ZW50U3RvcmFnZS0+c2NoZWR1
bGVPcldyaXRlTWVtb3J5U3RvcmUoUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9y
YWdlOjpGb3JjZUltbWVkaWF0ZVdyaXRlOjpObyk7Ci0KLSAgICAgICAgaWYgKCFtX3BhcmFtZXRl
cnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW10gewotICAg
ICAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojpub3RpZnlQYWdlU3RhdGlzdGljc0FuZERhdGFSZWNv
cmRzUHJvY2Vzc2VkKCk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi12b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdHJpbmcm
IHN1YkZyYW1lUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1hcnlEb21h
aW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotICAgIGF1dG8mIHN1YkZyYW1lU3RhdGlzdGljID0gZW5zdXJlUmVzb3Vy
Y2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihzdWJGcmFtZVByaW1hcnlEb21haW4pOwotICAg
IGlmIChzaG91bGRCbG9ja0FuZFB1cmdlQ29va2llcyhzdWJGcmFtZVN0YXRpc3RpYykpIHsKLSAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKCFzaG91bGRCbG9ja0FuZEtlZXBDb29raWVzKHN1YkZyYW1lU3RhdGlzdGljKSkg
ewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0cnVlKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3Rv
cmUpLCBzdWJGcmFtZVByaW1hcnlEb21haW4gPSBzdWJGcmFtZVByaW1hcnlEb21haW4uaXNvbGF0
ZWRDb3B5KCksIHRvcEZyYW1lUHJpbWFyeURvbWFpbiA9IHRvcEZyYW1lUHJpbWFyeURvbWFpbi5p
c29sYXRlZENvcHkoKSwgZnJhbWVJRCwgcGFnZUlELCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBzdG9yZS0+Y2FsbEhh
c1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZUhhbmRsZXIoc3ViRnJhbWVQcmltYXJ5RG9tYWluLCB0b3BG
cmFtZVByaW1hcnlEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgW3N0b3JlID0gc3RvcmUuY29weVJl
ZigpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShib29s
IHJlc3VsdCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCku
ZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciks
IHJlc3VsdF0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
cmVzdWx0KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNz
KFN0cmluZyYmIHN1YkZyYW1lUHJpbWFyeURvbWFpbiwgU3RyaW5nJiYgdG9wRnJhbWVQcmltYXJ5
RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgcHJvbXB0RW5h
YmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVzKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAg
IGF1dG8mIHN1YkZyYW1lU3RhdGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJp
bWFyeURvbWFpbihzdWJGcmFtZVByaW1hcnlEb21haW4pOwotICAgIGlmIChzaG91bGRCbG9ja0Fu
ZFB1cmdlQ29va2llcyhzdWJGcmFtZVN0YXRpc3RpYykpIHsKLSNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKLSAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRihtX2RlYnVnTG9nZ2luZ0VuYWJsZWQs
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkNhbm5vdCBncmFudCBzdG9yYWdlIGFjY2Vz
cyB0byAle3B1YmxpY31zIHNpbmNlIGl0cyBjb29raWVzIGFyZSBibG9ja2VkIGluIHRoaXJkLXBh
cnR5IGNvbnRleHRzIGFuZCBpdCBoYXMgbm90IHJlY2VpdmVkIHVzZXIgaW50ZXJhY3Rpb24gYXMg
Zmlyc3QtcGFydHkuIiwgc3ViRnJhbWVQcmltYXJ5RG9tYWluLnV0ZjgoKS5kYXRhKCkpOwotI2Vu
ZGlmCi0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0b3JhZ2VBY2Nlc3NTdGF0dXM6OkNhbm5v
dFJlcXVlc3RBY2Nlc3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFzaG91
bGRCbG9ja0FuZEtlZXBDb29raWVzKHN1YkZyYW1lU3RhdGlzdGljKSkgewotI2lmICFSRUxFQVNF
X0xPR19ESVNBQkxFRAotICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKG1fZGVidWdMb2dnaW5n
RW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiTm8gbmVlZCB0byBncmFudCBz
dG9yYWdlIGFjY2VzcyB0byAle3B1YmxpY31zIHNpbmNlIGl0cyBjb29raWVzIGFyZSBub3QgYmxv
Y2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cy4iLCBzdWJGcmFtZVByaW1hcnlEb21haW4udXRm
OCgpLmRhdGEoKSk7Ci0jZW5kaWYKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFj
Y2Vzc1N0YXR1czo6SGFzQWNjZXNzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1
dG8gdXNlcldhc1Byb21wdGVkRWFybGllciA9IHByb21wdEVuYWJsZWQgJiYgaGFzVXNlckdyYW50
ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdChzdWJGcmFtZVN0YXRpc3RpYywgdG9wRnJhbWVQ
cmltYXJ5RG9tYWluKTsKLSAgICBpZiAocHJvbXB0RW5hYmxlZCAmJiAhdXNlcldhc1Byb21wdGVk
RWFybGllcikgewotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgICAgICBSRUxFQVNFX0xP
R19JTkZPX0lGKG1fZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnLCAiQWJvdXQgdG8gYXNrIHRoZSB1c2VyIHdoZXRoZXIgdGhleSB3YW50IHRvIGdyYW50IHN0
b3JhZ2UgYWNjZXNzIHRvICV7cHVibGljfXMgdW5kZXIgJXtwdWJsaWN9cyBvciBub3QuIiwgc3Vi
RnJhbWVQcmltYXJ5RG9tYWluLnV0ZjgoKS5kYXRhKCksIHRvcEZyYW1lUHJpbWFyeURvbWFpbi51
dGY4KCkuZGF0YSgpKTsKLSNlbmRpZgotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdl
QWNjZXNzU3RhdHVzOjpSZXF1aXJlc1VzZXJQcm9tcHQpOwotICAgICAgICByZXR1cm47Ci0gICAg
fSBlbHNlIGlmICh1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyKSB7Ci0jaWYgIVJFTEVBU0VfTE9HX0RJ
U0FCTEVECi0gICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdFbmFibGVk
LCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJTdG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRl
ZCB0byAle3B1YmxpY31zIHVuZGVyICV7cHVibGljfXMuIiwgc3ViRnJhbWVQcmltYXJ5RG9tYWlu
LnV0ZjgoKS5kYXRhKCksIHRvcEZyYW1lUHJpbWFyeURvbWFpbi51dGY4KCkuZGF0YSgpKTsKLSNl
bmRpZgotICAgIH0KLQotICAgIHN1YkZyYW1lU3RhdGlzdGljLnRpbWVzQWNjZXNzZWRBc0ZpcnN0
UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkrKzsKLQotICAgIGdyYW50U3RvcmFnZUFjY2Vzc0lu
dGVybmFsKFdURk1vdmUoc3ViRnJhbWVQcmltYXJ5RG9tYWluKSwgV1RGTW92ZSh0b3BGcmFtZVBy
aW1hcnlEb21haW4pLCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIsIFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYm9vbCB3YXNH
cmFudGVkQWNjZXNzKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2FzR3Jh
bnRlZEFjY2VzcyA/IFN0b3JhZ2VBY2Nlc3NTdGF0dXM6Okhhc0FjY2VzcyA6IFN0b3JhZ2VBY2Nl
c3NTdGF0dXM6OkNhbm5vdFJlcXVlc3RBY2Nlc3MpOwotICAgIH0pOwotfQotCi12b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9w
ZW5lcihTdHJpbmcmJiBwcmltYXJ5RG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCB1aW50NjRf
dCBvcGVuZXJQYWdlSUQsIFN0cmluZyYmIG9wZW5lclByaW1hcnlEb21haW4pCi17Ci0gICAgQVNT
RVJUKHByaW1hcnlEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgIT0gb3BlbmVyUHJpbWFyeURv
bWFpbik7Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAocHJpbWFy
eURvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9PSBvcGVuZXJQcmltYXJ5RG9tYWluKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3NTdGF0
aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlE
b21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MpOwotICAgIGF1dG8gY29va2llc0Jsb2NrZWRBbmRQ
dXJnZWQgPSBzaG91bGRCbG9ja0FuZFB1cmdlQ29va2llcyhkb21haW5Jbk5lZWRPZlN0b3JhZ2VB
Y2Nlc3NTdGF0aXN0aWMpOwotCi0gICAgLy8gVGhlIGRvbWFpbiBhbHJlYWR5IGhhcyBhY2Nlc3Mg
aWYgaXRzIGNvb2tpZXMgYXJlIG5vdCBibG9ja2VkLgotICAgIGlmICghY29va2llc0Jsb2NrZWRB
bmRQdXJnZWQgJiYgIXNob3VsZEJsb2NrQW5kS2VlcENvb2tpZXMoZG9tYWluSW5OZWVkT2ZTdG9y
YWdlQWNjZXNzU3RhdGlzdGljKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgIVJFTEVBU0VfTE9H
X0RJU0FCTEVECi0gICAgUkVMRUFTRV9MT0dfSU5GT19JRihtX2RlYnVnTG9nZ2luZ0VuYWJsZWQs
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIltUZW1wb3JhcnkgY29tYmF0aWJpbGl0eSBm
aXhdIFN0b3JhZ2UgYWNjZXNzIHdhcyBncmFudGVkIGZvciAle3B1YmxpY31zIHVuZGVyIG9wZW5l
ciBwYWdlIGZyb20gJXtwdWJsaWN9cywgd2l0aCB1c2VyIGludGVyYWN0aW9uIGluIHRoZSBvcGVu
ZWQgd2luZG93LiIsIHByaW1hcnlEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MudXRmOCgpLmRh
dGEoKSwgb3BlbmVyUHJpbWFyeURvbWFpbi51dGY4KCkuZGF0YSgpKTsKLSNlbmRpZgotICAgIGdy
YW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUocHJpbWFyeURvbWFpbkluTmVlZE9mU3Rv
cmFnZUFjY2VzcyksIFdURk1vdmUob3BlbmVyUHJpbWFyeURvbWFpbiksIFdURjo6bnVsbG9wdCwg
b3BlbmVyUGFnZUlELCBmYWxzZSwgW10oYm9vbCkgeyB9KTsKLX0KLQotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW50U3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBzdWJG
cmFtZUhvc3QsIFN0cmluZyYmIHRvcEZyYW1lSG9zdCwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0
X3QgcGFnZUlELCBib29sIHVzZXJXYXNQcm9tcHRlZE5vdywgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKLQotICAgIGF1dG8gc3ViRnJhbWVQcmltYXJ5RG9tYWluID0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljczo6cHJpbWFyeURvbWFpbihzdWJGcmFtZUhvc3QpOwotICAgIGF1dG8gdG9wRnJh
bWVQcmltYXJ5RG9tYWluID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6cHJpbWFyeURvbWFpbih0
b3BGcmFtZUhvc3QpOwotICAgIGlmICh1c2VyV2FzUHJvbXB0ZWROb3cpIHsKLSAgICAgICAgYXV0
byYgc3ViRnJhbWVTdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5
RG9tYWluKHN1YkZyYW1lUHJpbWFyeURvbWFpbik7Ci0gICAgICAgIEFTU0VSVChzdWJGcmFtZVN0
YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pOwotICAgICAgICBzdWJGcmFtZVN0YXRpc3RpYy5z
dG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKHRvcEZyYW1lUHJpbWFyeURvbWFp
bik7Ci0gICAgfQotICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoc3ViRnJh
bWVQcmltYXJ5RG9tYWluKSwgV1RGTW92ZSh0b3BGcmFtZVByaW1hcnlEb21haW4pLCBmcmFtZUlE
LCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZE5vdywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbnRTdG9y
YWdlQWNjZXNzSW50ZXJuYWwoU3RyaW5nJiYgc3ViRnJhbWVQcmltYXJ5RG9tYWluLCBTdHJpbmcm
JiB0b3BGcmFtZVByaW1hcnlEb21haW4sIE9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCB1aW50
NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93T3JFYXJsaWVyLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwotCi0gICAgaWYgKHN1YkZyYW1lUHJpbWFyeURvbWFpbiA9PSB0b3BGcmFtZVBy
aW1hcnlEb21haW4pIHsKLSAgICAgICAgY2FsbGJhY2sodHJ1ZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBGSVhNRTogUmVtb3ZlIG1fc3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFi
bGVkIGNoZWNrIGlmIHByb21wdGluZyBpcyBubyBsb25nZXIgZXhwZXJpbWVudGFsLgotICAgIGlm
ICh1c2VyV2FzUHJvbXB0ZWROb3dPckVhcmxpZXIgJiYgbV9zdG9yYWdlQWNjZXNzUHJvbXB0c0Vu
YWJsZWQpIHsKLSAgICAgICAgYXV0byYgc3ViRnJhbWVTdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJj
ZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHN1YkZyYW1lUHJpbWFyeURvbWFpbik7Ci0gICAg
ICAgIEFTU0VSVChzdWJGcmFtZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pOwotICAgICAg
ICBBU1NFUlQoc3ViRnJhbWVTdGF0aXN0aWMuc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVPcmln
aW5zLmNvbnRhaW5zKHRvcEZyYW1lUHJpbWFyeURvbWFpbikpOwotICAgICAgICBzdWJGcmFtZVN0
YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSA9IFdhbGxUaW1lOjpub3coKTsK
LSAgICB9Ci0KLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N1YkZyYW1lUHJpbWFyeURv
bWFpbiA9IHN1YkZyYW1lUHJpbWFyeURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVQcmlt
YXJ5RG9tYWluID0gdG9wRnJhbWVQcmltYXJ5RG9tYWluLmlzb2xhdGVkQ29weSgpLCBmcmFtZUlE
LCBwYWdlSUQsIHN0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgc3RvcmUtPmNhbGxHcmFudFN0b3JhZ2VBY2Nl
c3NIYW5kbGVyKHN1YkZyYW1lUHJpbWFyeURvbWFpbiwgdG9wRnJhbWVQcmltYXJ5RG9tYWluLCBm
cmFtZUlELCBwYWdlSUQsIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBzdG9yZSA9IHN0
b3JlLmNvcHlSZWYoKV0oYm9vbCB2YWx1ZSkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBzdG9yZS0+
c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayks
IHZhbHVlXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBjYWxsYmFjayh2YWx1ZSk7Ci0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQotewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt3ZWFrVGhp
cyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgc2hv
dWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCA9IG1fcGFyYW1ldGVycy5z
aG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLCB3b3JrUXVldWUgPSBt
X3dvcmtRdWV1ZS5jb3B5UmVmKCldICgpIG11dGFibGUgewotICAgICAgICAvLyBGSVhNRTogVGhp
cyBtZXRob2QgYmVpbmcgYSBzdGF0aWMgY2FsbCBvbiBXZWJQcm9jZXNzUHJveHkgaXMgd3Jvbmcu
Ci0gICAgICAgIC8vIEl0IHNob3VsZCBiZSBvbiB0aGUgZGF0YSBzdG9yZSB0aGF0IHRoaXMgb2Jq
ZWN0IGJlbG9uZ3MgdG8uCi0gICAgICAgIFdlYlByb2Nlc3NQcm94eTo6dG9wUHJpdmF0ZWx5Q29u
dHJvbGxlZERvbWFpbnNXaXRoV2Vic2l0ZURhdGEoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjptb25pdG9yZWREYXRhVHlwZXMoKSwgc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29y
ZHNXZXJlU2Nhbm5lZCwgW3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIGNhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayksIHdvcmtRdWV1ZSA9IHdvcmtRdWV1ZS5jb3B5UmVmKCldIChIYXNo
U2V0PFN0cmluZz4mJiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1dpdGhXZWJzaXRlRGF0
YSkgbXV0YWJsZSB7Ci0gICAgICAgICAgICB3b3JrUXVldWUtPmRpc3BhdGNoKFt3ZWFrVGhpcyA9
IFdURk1vdmUod2Vha1RoaXMpLCB0b3BEb21haW5zID0gY3Jvc3NUaHJlYWRDb3B5KHRvcFByaXZh
dGVseUNvbnRyb2xsZWREb21haW5zV2l0aFdlYnNpdGVEYXRhKSwgY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykg
ewotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiB0
b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluIDogdG9wRG9tYWlucykgewotICAgICAgICAgICAg
ICAgICAgICBhdXRvJiBzdGF0aXN0aWMgPSB3ZWFrVGhpcy0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUHJpbWFyeURvbWFpbih0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluKTsKLSAgICAg
ICAgICAgICAgICAgICAgc3RhdGlzdGljLmdyYW5kZmF0aGVyZWQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+bV9lbmRPZkdyYW5kZmF0aGVyaW5n
VGltZXN0YW1wID0gV2FsbFRpbWU6Om5vdygpICsgd2Vha1RoaXMtPm1fcGFyYW1ldGVycy5ncmFu
ZGZhdGhlcmluZ1RpbWU7Ci0gICAgICAgICAgICAgICAgaWYgKHdlYWtUaGlzLT5tX3BlcnNpc3Rl
bnRTdG9yYWdlKQotICAgICAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+bV9wZXJzaXN0ZW50U3Rv
cmFnZS0+c2NoZWR1bGVPcldyaXRlTWVtb3J5U3RvcmUoUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bl
cnNpc3RlbnRTdG9yYWdlOjpGb3JjZUltbWVkaWF0ZVdyaXRlOjpZZXMpOwotICAgICAgICAgICAg
ICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgd2Vha1RoaXMtPmxvZ1Rlc3RpbmdFdmVu
dCgiR3JhbmRmYXRoZXJlZCJfcyk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAg
fSk7Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCkKLXsKLSAgICBpZiAoIW1f
ZGVidWdNb2RlRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIFZlY3RvcjxTdHJp
bmc+IHByaW1hcnlEb21haW5zVG9CbG9jazsKLSAgICBwcmltYXJ5RG9tYWluc1RvQmxvY2sucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eSgyKTsKLQotICAgIGF1dG8mIHN0YXRpY1Nlc291cmNlU3RhdGlz
dGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihkZWJ1Z1N0YXRp
Y1ByZXZhbGVudFJlc291cmNlKTsKLSAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShzdGF0aWNTZXNv
dXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7Ci0gICAgcHJpbWFy
eURvbWFpbnNUb0Jsb2NrLnVuY2hlY2tlZEFwcGVuZChkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291
cmNlKTsKLQotICAgIGlmICghbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlLmlzRW1wdHko
KSkgewotICAgICAgICBhdXRvJiBtYW51YWxSZXNvdXJjZVN0YXRpc3RpYyA9IGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4obV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291
cmNlKTsKLSAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UobWFudWFsUmVzb3VyY2VTdGF0aXN0
aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOwotICAgICAgICBwcmltYXJ5RG9tYWlu
c1RvQmxvY2sudW5jaGVja2VkQXBwZW5kKG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSk7
Ci0gICAgfQotICAgIAotICAgIHJldHVybiBwcmltYXJ5RG9tYWluc1RvQmxvY2s7Ci19Ci0KLXZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGVidWdNb2RlKGJvb2wgZW5hYmxlKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOwotCi0gICAgbV9kZWJ1Z01vZGVFbmFibGVkID0gZW5hYmxlOwotICAgIG1fZGVidWdM
b2dnaW5nRW5hYmxlZCA9IGVuYWJsZTsKLQotICAgIGVuc3VyZVByZXZhbGVudFJlc291cmNlc0Zv
ckRlYnVnTW9kZSgpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgU3RyaW5nJiBkb21haW4p
Ci17Ci0gICAgaWYgKCFtX2RlYnVnTW9kZUVuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IGRvbWFpbjsKLSAgICBhdXRvJiByZXNv
dXJjZVN0YXRpc3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4o
ZG9tYWluKTsKLSAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYywgUmVz
b3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
LSAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkRpZCBz
ZXQgJXtwdWJsaWN9cyBhcyBwcmV2YWxlbnQgcmVzb3VyY2UgZm9yIHRoZSBwdXJwb3NlcyBvZiBJ
VFAgRGVidWcgTW9kZS4iLCBkb21haW4udXRmOCgpLmRhdGEoKSk7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc1By
b2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOwotCi0gICAgbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRp
ZmllciA9ICsrbV9sYXN0U3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcjsKLSAg
ICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2hBZnRlcihtaW5pbXVtU3RhdGlzdGljc1Byb2Nlc3NpbmdJ
bnRlcnZhbCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBzdGF0aXN0aWNz
UHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyID0gKm1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNz
aW5nUmVxdWVzdElkZW50aWZpZXJdIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIW1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5n
UmVxdWVzdElkZW50aWZpZXIgfHwgKm1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVz
dElkZW50aWZpZXIgIT0gc3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcikgewot
ICAgICAgICAgICAgLy8gVGhpcyByZXF1ZXN0IGhhcyBiZWVuIGNhbmNlbGVkLgotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdXBkYXRlQ29va2llQmxvY2tpbmcoW10o
KSB7IH0pOwotICAgICAgICBwcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7Ci0gICAg
fSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpjYW5jZWxQ
ZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0KCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKLQotICAgIG1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVz
dElkZW50aWZpZXIgPSBXVEY6Om51bGxvcHQ7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgU3RyaW5nJiB0YXJnZXRQ
cmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIG1haW5GcmFtZVByaW1hcnlEb21haW4sIGNvbnN0
IFN0cmluZyYgc291cmNlUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiB0YXJnZXRIb3N0LCBj
b25zdCBTdHJpbmcmIG1haW5GcmFtZUhvc3QsIGJvb2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5G
cmFtZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGJvb2wgYXJl
VGFyZ2V0QW5kTWFpbkZyYW1lRG9tYWluc0Fzc29jaWF0ZWQgPSB0YXJnZXRQcmltYXJ5RG9tYWlu
ID09IG1haW5GcmFtZVByaW1hcnlEb21haW47Ci0gICAgYm9vbCBhcmVUYXJnZXRBbmRTb3VyY2VE
b21haW5zQXNzb2NpYXRlZCA9IHRhcmdldFByaW1hcnlEb21haW4gPT0gc291cmNlUHJpbWFyeURv
bWFpbjsKLQotICAgIGJvb2wgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gZmFsc2U7Ci0gICAgaWYg
KCFpc01haW5GcmFtZSAmJiB0YXJnZXRIb3N0ICE9IG1haW5GcmFtZUhvc3QgJiYgIShhcmVUYXJn
ZXRBbmRNYWluRnJhbWVEb21haW5zQXNzb2NpYXRlZCB8fCBhcmVUYXJnZXRBbmRTb3VyY2VEb21h
aW5zQXNzb2NpYXRlZCkpIHsKLSAgICAgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFpbik7
Ci0gICAgICAgIHRhcmdldFN0YXRpc3RpY3MubGFzdFNlZW4gPSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzOjpyZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxsVGltZTo6bm93KCkpOwotICAgICAgICBpZiAo
dGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJh
bWVQcmltYXJ5RG9tYWluKS5pc05ld0VudHJ5KQotICAgICAgICAgICAgc3RhdGlzdGljc1dlcmVV
cGRhdGVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoaXNSZWRpcmVjdCAmJiAhYXJlVGFyZ2V0
QW5kU291cmNlRG9tYWluc0Fzc29jaWF0ZWQpIHsKLSAgICAgICAgaWYgKGlzTWFpbkZyYW1lKSB7
Ci0gICAgICAgICAgICBhdXRvJiByZWRpcmVjdGluZ09yaWdpblN0YXRpc3RpY3MgPSBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHNvdXJjZVByaW1hcnlEb21haW4pOwot
ICAgICAgICAgICAgaWYgKHJlZGlyZWN0aW5nT3JpZ2luU3RhdGlzdGljcy50b3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c1RvLmFkZCh0YXJnZXRQcmltYXJ5RG9tYWluKS5pc05ld0VudHJ5KQotICAgICAg
ICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7Ci0gICAgICAgICAgICBhdXRv
JiB0YXJnZXRTdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURv
bWFpbih0YXJnZXRQcmltYXJ5RG9tYWluKTsKLSAgICAgICAgICAgIGlmICh0YXJnZXRTdGF0aXN0
aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5hZGQoc291cmNlUHJpbWFyeURvbWFpbiku
aXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVl
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXV0byYgcmVkaXJlY3RpbmdPcmlnaW5T
dGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihzb3Vy
Y2VQcmltYXJ5RG9tYWluKTsKLSAgICAgICAgICAgIGlmIChyZWRpcmVjdGluZ09yaWdpblN0YXRp
c3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5hZGQodGFyZ2V0UHJpbWFyeURvbWFp
bikuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0
cnVlOwotICAgICAgICAgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFpbik7Ci0gICAgICAg
ICAgICBpZiAodGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20u
YWRkKHNvdXJjZVByaW1hcnlEb21haW4pLmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAgc3Rh
dGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChz
dGF0aXN0aWNzV2VyZVVwZGF0ZWQpCi0gICAgICAgIHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3Np
bmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIHByaW1hcnlEb21h
aW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvJiBzdGF0
aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5
RG9tYWluKTsKLSAgICBzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7Ci0gICAg
c3RhdGlzdGljcy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSA9IFdhbGxUaW1lOjpub3co
KTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNsZWFyVXNl
ckludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikKLXsKLSAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4pOwotICAgIHN0YXRp
c3RpY3MuaGFkVXNlckludGVyYWN0aW9uID0gZmFsc2U7Ci0gICAgc3RhdGlzdGljcy5tb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uVGltZSA9IHsgfTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIHBy
aW1hcnlEb21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBh
dXRvIG1hcEVudHJ5ID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZmluZChwcmltYXJ5RG9tYWlu
KTsKLSAgICByZXR1cm4gbWFwRW50cnkgPT0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5kKCkg
PyBmYWxzZTogaGFzSGFkVW5leHBpcmVkUmVjZW50VXNlckludGVyYWN0aW9uKG1hcEVudHJ5LT52
YWx1ZSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRQ
cmV2YWxlbnRSZXNvdXJjZShXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJj
ZVN0YXRpc3RpYywgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSBuZXdQcmV2YWxlbmNlKQotewotICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgcmVzb3VyY2VTdGF0aXN0aWMuaXNQ
cmV2YWxlbnRSZXNvdXJjZSA9IHRydWU7Ci0gICAgcmVzb3VyY2VTdGF0aXN0aWMuaXNWZXJ5UHJl
dmFsZW50UmVzb3VyY2UgPSBuZXdQcmV2YWxlbmNlID09IFJlc291cmNlTG9hZFByZXZhbGVuY2U6
OlZlcnlIaWdoOwotICAgIEhhc2hTZXQ8U3RyaW5nPiBkb21haW5zVGhhdEhhdmVSZWRpcmVjdGVk
VG87Ci0gICAgcmVjdXJzaXZlbHlHZXRBbGxEb21haW5zVGhhdEhhdmVSZWRpcmVjdGVkVG9UaGlz
RG9tYWluKHJlc291cmNlU3RhdGlzdGljLCBkb21haW5zVGhhdEhhdmVSZWRpcmVjdGVkVG8sIDAp
OwotICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvKSB7
Ci0gICAgICAgIGF1dG8gbWFwRW50cnkgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5maW5kKGRv
bWFpbik7Ci0gICAgICAgIGlmIChtYXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5l
bmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBBU1NFUlQoIW1hcEVudHJ5LT52
YWx1ZS5pc1ByZXZhbGVudFJlc291cmNlKTsKLSAgICAgICAgbWFwRW50cnktPnZhbHVlLmlzUHJl
dmFsZW50UmVzb3VyY2UgPSB0cnVlOwotICAgIH0KLX0KLSAgICAKLVN0cmluZyBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgY29u
c3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIFN0cmluZ0J1aWxk
ZXIgcmVzdWx0OwotICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJSZXNvdXJjZSBsb2FkIHN0YXRp
c3RpY3M6XG5cbiIpOwotICAgIGZvciAoYXV0byYgbWFwRW50cnkgOiBtX3Jlc291cmNlU3RhdGlz
dGljc01hcC52YWx1ZXMoKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZChtYXBFbnRyeS50b1N0cmlu
ZygpKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci19Ci0KLWJvb2wgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmlu
ZyYgcHJpbWFyeURvbWFpbikgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKLQotICAgIGF1dG8gbWFwRW50cnkgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5maW5kKHBy
aW1hcnlEb21haW4pOwotICAgIHJldHVybiBtYXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlzdGlj
c01hcC5lbmQoKSA/IGZhbHNlIDogbWFwRW50cnktPnZhbHVlLmlzUHJldmFsZW50UmVzb3VyY2U7
Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1ZlcnlQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIG1hcEVudHJ5ID0gbV9yZXNv
dXJjZVN0YXRpc3RpY3NNYXAuZmluZChwcmltYXJ5RG9tYWluKTsKLSAgICByZXR1cm4gbWFwRW50
cnkgPT0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5kKCkgPyBmYWxzZSA6IG1hcEVudHJ5LT52
YWx1ZS5pc1ByZXZhbGVudFJlc291cmNlICYmIG1hcEVudHJ5LT52YWx1ZS5pc1ZlcnlQcmV2YWxl
bnRSZXNvdXJjZTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBTdHJpbmcmIHN1YnJlc291cmNl
UHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1hcnlEb21haW4pIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIG1hcEVudHJ5
ID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZmluZChzdWJyZXNvdXJjZVByaW1hcnlEb21haW4p
OwotICAgIHJldHVybiBtYXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSA/
IGZhbHNlIDogbWFwRW50cnktPnZhbHVlLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMu
Y29udGFpbnModG9wRnJhbWVQcmltYXJ5RG9tYWluKTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBT
dHJpbmcmIHN1YkZyYW1lUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1h
cnlEb21haW4pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAg
ICBhdXRvIG1hcEVudHJ5ID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZmluZChzdWJGcmFtZVBy
aW1hcnlEb21haW4pOwotICAgIHJldHVybiBtYXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlzdGlj
c01hcC5lbmQoKSA/IGZhbHNlIDogbWFwRW50cnktPnZhbHVlLnN1YmZyYW1lVW5kZXJUb3BGcmFt
ZU9yaWdpbnMuY29udGFpbnModG9wRnJhbWVQcmltYXJ5RG9tYWluKTsKLX0KLQotYm9vbCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdU
byhjb25zdCBTdHJpbmcmIGhvc3RSZWRpcmVjdGVkRnJvbVByaW1hcnlEb21haW4sIGNvbnN0IFN0
cmluZyYgaG9zdFJlZGlyZWN0ZWRUb1ByaW1hcnlEb21haW4pIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIG1hcEVudHJ5ID0gbV9yZXNvdXJjZVN0
YXRpc3RpY3NNYXAuZmluZChob3N0UmVkaXJlY3RlZEZyb21QcmltYXJ5RG9tYWluKTsKLSAgICBy
ZXR1cm4gbWFwRW50cnkgPT0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5kKCkgPyBmYWxzZSA6
IG1hcEVudHJ5LT52YWx1ZS5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmNvbnRhaW5zKGhv
c3RSZWRpcmVjdGVkVG9QcmltYXJ5RG9tYWluKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiBw
cmltYXJ5RG9tYWluKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
YXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21h
aW4ocHJpbWFyeURvbWFpbik7Ci0gICAgc3RhdGlzdGljcy5pc1ByZXZhbGVudFJlc291cmNlID0g
ZmFsc2U7Ci0gICAgc3RhdGlzdGljcy5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSA9IGZhbHNlOwot
fQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0R3JhbmRmYXRo
ZXJlZChjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4sIGJvb2wgdmFsdWUpCi17Ci0gICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJl
UmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluKTsKLSAgICBz
dGF0aXN0aWNzLmdyYW5kZmF0aGVyZWQgPSB2YWx1ZTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBTdHJpbmcmIHByaW1h
cnlEb21haW4pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAg
ICBhdXRvIG1hcEVudHJ5ID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZmluZChwcmltYXJ5RG9t
YWluKTsKLSAgICByZXR1cm4gbWFwRW50cnkgPT0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5k
KCkgPyBmYWxzZSA6IG1hcEVudHJ5LT52YWx1ZS5ncmFuZGZhdGhlcmVkOwotfQotCi12b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1l
T3JpZ2luKGNvbnN0IFN0cmluZyYgcHJpbWFyeVN1YkZyYW1lRG9tYWluLCBjb25zdCBTdHJpbmcm
IHByaW1hcnlUb3BGcmFtZURvbWFpbikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKLQotICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQ
cmltYXJ5RG9tYWluKHByaW1hcnlTdWJGcmFtZURvbWFpbik7Ci0gICAgc3RhdGlzdGljcy5zdWJm
cmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChwcmltYXJ5VG9wRnJhbWVEb21haW4pOwotICAg
IC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3Mg
ZW50cnkgZm9yIHRoZSB0b3AgZnJhbWUgZG9tYWluLgotICAgIGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeVRvcEZyYW1lRG9tYWluKTsKLX0KLQotdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BG
cmFtZU9yaWdpbihjb25zdCBTdHJpbmcmIHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbiwgY29uc3Qg
U3RyaW5nJiBwcmltYXJ5VG9wRnJhbWVEb21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7Ci0KLSAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5U3VicmVzb3VyY2VEb21haW4pOwotICAgIHN0YXRp
c3RpY3Muc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucy5hZGQocHJpbWFyeVRvcEZyYW1l
RG9tYWluKTsKLSAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUg
YSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgdG9wIGZyYW1lIGRvbWFpbi4KLSAgICBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlUb3BGcmFtZURvbWFpbik7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgU3RyaW5nJiBwcmltYXJ5U3VicmVzb3VyY2VEb21h
aW4sIGNvbnN0IFN0cmluZyYgcHJpbWFyeVJlZGlyZWN0RG9tYWluKQotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeVN1YnJlc291cmNlRG9tYWluKTsK
LSAgICBzdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uYWRkKHByaW1hcnlS
ZWRpcmVjdERvbWFpbik7Ci0gICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxz
byBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHJlZGlyZWN0IGRvbWFpbi4KLSAgICBl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlSZWRpcmVjdERv
bWFpbik7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdHJpbmcmIHByaW1hcnlTdWJyZXNv
dXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pCi17Ci0gICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5U3VicmVzb3VyY2VE
b21haW4pOwotICAgIHN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLmFk
ZChwcmltYXJ5UmVkaXJlY3REb21haW4pOwotICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBz
dXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21h
aW4uCi0gICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5
UmVkaXJlY3REb21haW4pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN0cmluZyYgdG9wRnJhbWVQ
cmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHByaW1hcnlSZWRpcmVjdERvbWFpbikKLXsKLSAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRvcEZyYW1lUHJpbWFyeURv
bWFpbik7Ci0gICAgc3RhdGlzdGljcy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLmFkZChwcmlt
YXJ5UmVkaXJlY3REb21haW4pOwotICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdl
IGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4uCi0g
ICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5UmVkaXJl
Y3REb21haW4pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1h
cnlEb21haW4sIGNvbnN0IFN0cmluZyYgcHJpbWFyeVJlZGlyZWN0RG9tYWluKQotewotICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odG9wRnJhbWVQcmltYXJ5RG9tYWlu
KTsKLSAgICBzdGF0aXN0aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5hZGQocHJpbWFy
eVJlZGlyZWN0RG9tYWluKTsKLSAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBh
bHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgcmVkaXJlY3QgZG9tYWluLgotICAg
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeVJlZGlyZWN0
RG9tYWluKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNl
dFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vjb25kcyBzZWNvbmRzKQotewotICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7Ci0KLSAg
ICBtX3BhcmFtZXRlcnMudGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiA9IHNlY29uZHM7Ci19Ci0K
LXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRNaW5pbXVtVGltZUJl
dHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzKQotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7Ci0KLSAgICBt
X3BhcmFtZXRlcnMubWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsID0gc2Vjb25k
czsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldEdyYW5k
ZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7Ci0gICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKLQotICAgIG1fcGFyYW1ldGVy
cy5ncmFuZGZhdGhlcmluZ1RpbWUgPSBzZWNvbmRzOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXAoU2Vjb25kcyBzZWNvbmRzKQot
ewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChzZWNvbmRzID49
IDBfcyk7Ci0KLSAgICBtX3BhcmFtZXRlcnMuY2FjaGVNYXhBZ2VDYXBUaW1lID0gc2Vjb25kczsK
LSAgICB1cGRhdGVDYWNoZU1heEFnZUNhcCgpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6dXBkYXRlQ2FjaGVNYXhBZ2VDYXAoKQotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotICAgIAotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChb
c3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBzZWNvbmRzID0gbV9wYXJhbWV0ZXJzLmNhY2hlTWF4
QWdlQ2FwVGltZV0gKCkgewotICAgICAgICBzdG9yZS0+c2V0Q2FjaGVNYXhBZ2VDYXAoc2Vjb25k
cywgW10geyB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OnNldEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKFNlY29uZHMgc2Vjb25kcykK
LXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQoc2Vjb25kcyA+
PSAwX3MpOwotICAgIAotICAgIG1fcGFyYW1ldGVycy5jbGllbnRTaWRlQ29va2llc0FnZUNhcFRp
bWUgPSBzZWNvbmRzOwotICAgIHVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKCk7Ci19Ci0K
LXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjp1cGRhdGVDbGllbnRTaWRl
Q29va2llc0FnZUNhcCgpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSNp
ZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIFJ1bkxvb3A6Om1haW4oKS5k
aXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBzZWNvbmRzID0gbV9wYXJhbWV0ZXJz
LmNsaWVudFNpZGVDb29raWVzQWdlQ2FwVGltZV0gKCkgewotICAgICAgICBpZiAoYXV0byogd2Vi
c2l0ZURhdGFTdG9yZSA9IHN0b3JlLT53ZWJzaXRlRGF0YVN0b3JlKCkpCi0gICAgICAgICAgICB3
ZWJzaXRlRGF0YVN0b3JlLT5zZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyhzZWNvbmRzLCBb
XSB7IH0pOwotICAgIH0pOwotI2VuZGlmCi19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpzaG91bGRSZW1vdmVEYXRhUmVjb3JkcygpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAobV9kYXRhUmVjb3Jkc0JlaW5nUmVt
b3ZlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCi0gICAgZm9yIChjb25zdCBhdXRvJiBwbHVnaW4gOiBQbHVnaW5Qcm9jZXNzTWFuYWdl
cjo6c2luZ2xldG9uKCkucGx1Z2luUHJvY2Vzc2VzKCkpIHsKLSAgICAgICAgaWYgKCFtX2FjdGl2
ZVBsdWdpblRva2Vucy5jb250YWlucyhwbHVnaW4tPnBsdWdpblByb2Nlc3NUb2tlbigpKSkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuICFtX2xh
c3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCB8fCBNb25vdG9uaWNUaW1lOjpub3coKSA+PSAo
bV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgKyBtX3BhcmFtZXRlcnMubWluaW11bVRp
bWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OnNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKGJvb2wgdmFsdWUp
Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX2RhdGFSZWNvcmRz
QmVpbmdSZW1vdmVkID0gdmFsdWU7Ci0gICAgaWYgKG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQp
Ci0gICAgICAgIG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkID0gTW9ub3RvbmljVGlt
ZTo6bm93KCk7Ci19Ci0KLVJlc291cmNlTG9hZFN0YXRpc3RpY3MmIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFp
bihjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7Ci0KLSAgICByZXR1cm4gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5zdXJlKHBy
aW1hcnlEb21haW4sIFsmcHJpbWFyeURvbWFpbl0gewotICAgICAgICByZXR1cm4gUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyhwcmltYXJ5RG9tYWluKTsKLSAgICB9KS5pdGVyYXRvci0+dmFsdWU7Ci19
Ci0KLXN0ZDo6dW5pcXVlX3B0cjxLZXllZEVuY29kZXI+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6Y3JlYXRlRW5jb2RlckZyb21EYXRhKCkgY29uc3QKLXsKLSAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gZW5jb2RlciA9IEtleWVkRW5jb2Rlcjo6
ZW5jb2RlcigpOwotICAgIGVuY29kZXItPmVuY29kZVVJbnQzMigidmVyc2lvbiIsIHN0YXRpc3Rp
Y3NNb2RlbFZlcnNpb24pOwotICAgIGVuY29kZXItPmVuY29kZURvdWJsZSgiZW5kT2ZHcmFuZGZh
dGhlcmluZ1RpbWVzdGFtcCIsIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcC5zZWNvbmRz
U2luY2VFcG9jaCgpLnZhbHVlKCkpOwotCi0gICAgZW5jb2Rlci0+ZW5jb2RlT2JqZWN0cygiYnJv
d3NpbmdTdGF0aXN0aWNzIiwgbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuYmVnaW4oKSwgbV9yZXNv
dXJjZVN0YXRpc3RpY3NNYXAuZW5kKCksIFtdKEtleWVkRW5jb2RlciYgZW5jb2RlcklubmVyLCBj
b25zdCBhdXRvJiBvcmlnaW4pIHsKLSAgICAgICAgb3JpZ2luLnZhbHVlLmVuY29kZShlbmNvZGVy
SW5uZXIpOwotICAgIH0pOwotCi0gICAgZW5jb2Rlci0+ZW5jb2RlT2JqZWN0cygib3BlcmF0aW5n
RGF0ZXMiLCBtX29wZXJhdGluZ0RhdGVzLmJlZ2luKCksIG1fb3BlcmF0aW5nRGF0ZXMuZW5kKCks
IFtdKEtleWVkRW5jb2RlciYgZW5jb2RlcklubmVyLCBPcGVyYXRpbmdEYXRlIGRhdGUpIHsKLSAg
ICAgICAgZW5jb2RlcklubmVyLmVuY29kZURvdWJsZSgiZGF0ZSIsIGRhdGUuc2Vjb25kc1NpbmNl
RXBvY2goKS52YWx1ZSgpKTsKLSAgICB9KTsKLQotICAgIHJldHVybiBlbmNvZGVyOwotfQotCi12
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bWVyZ2VXaXRoRGF0YUZyb21E
ZWNvZGVyKEtleWVkRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKLQotICAgIHVuc2lnbmVkIHZlcnNpb25PbkRpc2s7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZVVJbnQzMigidmVyc2lvbiIsIHZlcnNpb25PbkRpc2spKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAodmVyc2lvbk9uRGlzayA+IHN0YXRpc3RpY3NNb2RlbFZlcnNpb24pIHsKLSAg
ICAgICAgV1RGTG9nQWx3YXlzKCJGb3VuZCByZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3Mgb24gZGlz
ayB3aXRoIG1vZGVsIHZlcnNpb24gJXUgd2hlcmVhcyB0aGUgaGlnaGVzdCBzdXBwb3J0ZWQgdmVy
c2lvbiBpcyAldS4gUmVzZXR0aW5nLiIsIHZlcnNpb25PbkRpc2ssIHN0YXRpc3RpY3NNb2RlbFZl
cnNpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZG91YmxlIGVuZE9mR3JhbmRm
YXRoZXJpbmdUaW1lc3RhbXA7Ci0gICAgaWYgKGRlY29kZXIuZGVjb2RlRG91YmxlKCJlbmRPZkdy
YW5kZmF0aGVyaW5nVGltZXN0YW1wIiwgZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCkpCi0g
ICAgICAgIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA9IFdhbGxUaW1lOjpmcm9tUmF3
U2Vjb25kcyhlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA9IHsgfTsKLQotICAgIFZlY3RvcjxSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzPiBsb2FkZWRTdGF0aXN0aWNzOwotICAgIGJvb2wgc3VjY2VlZGVk
ID0gZGVjb2Rlci5kZWNvZGVPYmplY3RzKCJicm93c2luZ1N0YXRpc3RpY3MiLCBsb2FkZWRTdGF0
aXN0aWNzLCBbdmVyc2lvbk9uRGlza10oS2V5ZWREZWNvZGVyJiBkZWNvZGVySW5uZXIsIFJlc291
cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MpIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpc3Rp
Y3MuZGVjb2RlKGRlY29kZXJJbm5lciwgdmVyc2lvbk9uRGlzayk7Ci0gICAgfSk7Ci0KLSAgICBp
ZiAoIXN1Y2NlZWRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWVyZ2VTdGF0aXN0aWNzKFdU
Rk1vdmUobG9hZGVkU3RhdGlzdGljcykpOwotICAgIHVwZGF0ZUNvb2tpZUJsb2NraW5nKFtdKCkg
eyB9KTsKLQotICAgIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBvcGVyYXRpbmdEYXRlczsKLSAgICBz
dWNjZWVkZWQgPSBkZWNvZGVyLmRlY29kZU9iamVjdHMoIm9wZXJhdGluZ0RhdGVzIiwgb3BlcmF0
aW5nRGF0ZXMsIFtdKEtleWVkRGVjb2RlciYgZGVjb2RlciwgT3BlcmF0aW5nRGF0ZSYgZGF0ZSkg
ewotICAgICAgICBkb3VibGUgdmFsdWU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVEb3Vi
bGUoImRhdGUiLCB2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
ZGF0ZSA9IE9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZShXYWxsVGltZTo6ZnJvbVJhd1NlY29u
ZHModmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSk7Ci0KLSAgICBpZiAoIXN1
Y2NlZWRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9vcGVyYXRpbmdEYXRlcyA9IG1lcmdl
T3BlcmF0aW5nRGF0ZXMobV9vcGVyYXRpbmdEYXRlcywgV1RGTW92ZShvcGVyYXRpbmdEYXRlcykp
OwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2xlYXIoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuY2xl
YXIoKTsKLSAgICBtX29wZXJhdGluZ0RhdGVzLmNsZWFyKCk7Ci0KLSAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLQotICAgIHJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoW2NhbGxiYWNrQWdncmVn
YXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7Ci0KLSAgICBhdXRvIHBy
aW1hcnlEb21haW5zVG9CbG9jayA9IGVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9k
ZSgpOwotICAgIHVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyhwcmltYXJ5RG9tYWluc1Rv
QmxvY2ssIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigp
XSB7IH0pOwotfQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6d2Fz
QWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbihjb25zdCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzJiBjdXJyZW50LCBjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiB1cGRh
dGVkKSBjb25zdAotewotICAgIGlmICghY3VycmVudC5oYWRVc2VySW50ZXJhY3Rpb24gJiYgIXVw
ZGF0ZWQuaGFkVXNlckludGVyYWN0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBh
dXRvIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gc3RkOjptYXgoY3VycmVudC5tb3N0
UmVjZW50VXNlckludGVyYWN0aW9uVGltZSwgdXBkYXRlZC5tb3N0UmVjZW50VXNlckludGVyYWN0
aW9uVGltZSk7Ci0KLSAgICByZXR1cm4gdXBkYXRlZC5sYXN0U2VlbiA8PSBtb3N0UmVjZW50VXNl
ckludGVyYWN0aW9uVGltZSArIDI0X2g7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjptZXJnZVN0YXRpc3RpY3MoVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M+JiYgc3RhdGlzdGljcykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQot
ICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogc3RhdGlzdGljcykgewotICAgICAgICBhdXRvIHJl
c3VsdCA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuc3VyZShzdGF0aXN0aWMuaGlnaExldmVs
RG9tYWluLCBbJnN0YXRpc3RpY10gewotICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoc3RhdGlz
dGljKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKLSAg
ICAgICAgICAgIGlmICh3YXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9u
KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUsIHN0YXRpc3RpYykpCi0gICAgICAgICAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS50aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50
ZXJhY3Rpb24rKzsKLSAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUubWVyZ2Uoc3Rh
dGlzdGljKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6OnNob3VsZEJsb2NrQW5kS2VlcENvb2tpZXMoY29uc3QgUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyYgc3RhdGlzdGljKQotewotICAgIHJldHVybiBzdGF0aXN0aWMuaXNQcmV2
YWxlbnRSZXNvdXJjZSAmJiBzdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uOwotfQotCi1ib29s
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2hvdWxkQmxvY2tBbmRQdXJnZUNv
b2tpZXMoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgc3RhdGlzdGljKQotewotICAgIHJl
dHVybiBzdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSAmJiAhc3RhdGlzdGljLmhhZFVzZXJJ
bnRlcmFjdGlvbjsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
Omhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQoY29uc3QgUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyYgc3RhdGlzdGljLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlQcmltYXJ5
RG9tYWluKQotewotICAgIHJldHVybiBzdGF0aXN0aWMuc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJh
bWVPcmlnaW5zLmNvbnRhaW5zKGZpcnN0UGFydHlQcmltYXJ5RG9tYWluKTsKLX0KLQotc3RhdGlj
IHZvaWQgZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKGNvbnN0IGNoYXIqIGFjdGlvbiwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGRvbWFpbnMpCi17Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0g
ICAgc3RhdGljIGNvbnN0IGF1dG8gbWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQg
PSA1MDsKLSAgICBpZiAoZG9tYWlucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChkb21haW5zLnNpemUoKSA8PSBtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVu
dCkgewotICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1
ZywgIkFib3V0IHRvICV7cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBm
b3I6ICV7cHVibGljfXMuIiwgYWN0aW9uLCBkb21haW5zVG9TdHJpbmcoZG9tYWlucykudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgVmVjdG9yPFN0cmlu
Zz4gYmF0Y2g7Ci0gICAgYmF0Y2gucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtYXhOdW1iZXJPZkRv
bWFpbnNJbk9uZUxvZ1N0YXRlbWVudCk7Ci0gICAgYXV0byBiYXRjaE51bWJlciA9IDE7Ci0gICAg
dW5zaWduZWQgbnVtYmVyT2ZCYXRjaGVzID0gc3RkOjpjZWlsKGRvbWFpbnMuc2l6ZSgpIC8gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KSk7Ci0K
LSAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpIHsKLSAgICAgICAgaWYgKGJhdGNoLnNp
emUoKSA9PSBtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCkgewotICAgICAgICAg
ICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0
byAle3B1YmxpY31zIGNvb2tpZXMgaW4gdGhpcmQtcGFydHkgY29udGV4dHMgZm9yICgle3B1Ymxp
Y31kIG9mICV1KTogJXtwdWJsaWN9cy4iLCBhY3Rpb24sIGJhdGNoTnVtYmVyLCBudW1iZXJPZkJh
dGNoZXMsIGRvbWFpbnNUb1N0cmluZyhiYXRjaCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAg
ICBiYXRjaC5zaHJpbmsoMCk7Ci0gICAgICAgICAgICArK2JhdGNoTnVtYmVyOwotICAgICAgICB9
Ci0gICAgICAgIGJhdGNoLmFwcGVuZChkb21haW4pOwotICAgIH0KLSAgICBpZiAoIWJhdGNoLmlz
RW1wdHkoKSkKLSAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGVidWcsICJBYm91dCB0byAle3B1YmxpY31zIGNvb2tpZXMgaW4gdGhpcmQtcGFydHkgY29udGV4
dHMgZm9yICgle3B1YmxpY31kIG9mICV1KTogJXtwdWJsaWN9cy4iLCBhY3Rpb24sIGJhdGNoTnVt
YmVyLCBudW1iZXJPZkJhdGNoZXMsIGRvbWFpbnNUb1N0cmluZyhiYXRjaCkudXRmOCgpLmRhdGEo
KSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShhY3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShk
b21haW5zKTsKLSNlbmRpZgotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6dXBkYXRlQ29va2llQmxvY2tpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgVmVjdG9yPFN0cmluZz4gZG9tYWluc1RvQmxvY2s7Ci0gICAgZm9yIChhdXRvJiByZXNvdXJj
ZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKSB7Ci0gICAgICAg
IGlmIChyZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlKQotICAgICAgICAgICAg
ZG9tYWluc1RvQmxvY2suYXBwZW5kKHJlc291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFpbik7
Ci0gICAgfQotCi0gICAgaWYgKGRvbWFpbnNUb0Jsb2NrLmlzRW1wdHkoKSkgewotICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1f
ZGVidWdMb2dnaW5nRW5hYmxlZCAmJiAhZG9tYWluc1RvQmxvY2suaXNFbXB0eSgpKQotICAgICAg
ICAgICAgZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKCJibG9jayIsIGRvbWFpbnNUb0Jsb2NrKTsK
LQotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigq
dGhpcyksIHN0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgZG9tYWluc1RvQmxvY2sgPSBjcm9zc1Ro
cmVhZENvcHkoZG9tYWluc1RvQmxvY2spLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgc3RvcmUtPmNhbGxVcGRhdGVQ
cmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3JIYW5kbGVyKGRvbWFpbnNUb0Jsb2NrLCBb
d2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7
Ci0gICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW3dlYWtUaGlz
ID0gV1RGTW92ZSh3ZWFrVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgICAgICAgICAgICAgUkVM
RUFTRV9MT0dfSU5GT19JRih3ZWFrVGhpcy0+bV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWcsICJEb25lIHVwZGF0aW5nIGNvb2tpZSBibG9ja2luZy4iKTsK
LSNlbmRpZgotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6dXBkYXRlQ29va2llQmxvY2tpbmdG
b3JEb21haW5zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9CbG9jaywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9
IG1ha2VSZWYobV9zdG9yZSksIGRvbWFpbnNUb0Jsb2NrID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFp
bnNUb0Jsb2NrKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIHN0b3JlLT5jYWxsVXBkYXRlUHJldmFsZW50RG9tYWlu
c1RvQmxvY2tDb29raWVzRm9ySGFuZGxlcihkb21haW5zVG9CbG9jaywgW3N0b3JlID0gc3RvcmUu
Y29weVJlZigpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSgpIG11dGFibGUgewotICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3Bh
dGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgewotICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpjbGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5zKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBkb21haW5zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAo
ZG9tYWlucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUg
PSBtYWtlUmVmKG1fc3RvcmUpLCBkb21haW5zID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnMpXSB7
Ci0gICAgICAgIHN0b3JlLT5jYWxsUmVtb3ZlRG9tYWluc0hhbmRsZXIoZG9tYWlucyk7Ci0gICAg
fSk7Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3MoY29uc3QgRnVuY3Rpb248dm9p
ZChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik+JiBwcm9jZXNzRnVuY3Rpb24pIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHJl
c291cmNlU3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpCi0gICAg
ICAgIHByb2Nlc3NGdW5jdGlvbihyZXNvdXJjZVN0YXRpc3RpYyk7Ci19Ci0KLWJvb2wgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpoYXNIYWRVbmV4cGlyZWRSZWNlbnRVc2VySW50
ZXJhY3Rpb24oUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAocmVzb3VyY2VT
dGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uICYmIGhhc1N0YXRpc3RpY3NFeHBpcmVkKHJlc291
cmNlU3RhdGlzdGljKSkgewotICAgICAgICAvLyBEcm9wIHByaXZhY3kgc2Vuc2l0aXZlIGRhdGEg
YmVjYXVzZSB3ZSBubyBsb25nZXIgbmVlZCBpdC4KLSAgICAgICAgLy8gU2V0IHRpbWVzdGFtcCB0
byAwIHNvIHRoYXQgc3RhdGlzdGljcyBtZXJnZSB3aWxsIGtub3cKLSAgICAgICAgLy8gaXQgaGFz
IGJlZW4gcmVzZXQgYXMgb3Bwb3NlZCB0byBpdHMgZGVmYXVsdCAtMS4KLSAgICAgICAgcmVzb3Vy
Y2VTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPSB7IH07Ci0gICAgICAg
IHJlc291cmNlU3RhdGlzdGljLnN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lT3JpZ2lucy5jbGVh
cigpOwotICAgICAgICByZXNvdXJjZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24gPSBmYWxz
ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0
aW9uOwotfQotCi1WZWN0b3I8U3RyaW5nPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcigp
Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBib29sIHNob3VsZENo
ZWNrRm9yR3JhbmRmYXRoZXJpbmcgPSBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAgPiBX
YWxsVGltZTo6bm93KCk7Ci0gICAgYm9vbCBzaG91bGRDbGVhckdyYW5kZmF0aGVyaW5nID0gIXNo
b3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgJiYgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0
YW1wOwotCi0gICAgaWYgKHNob3VsZENsZWFyR3JhbmRmYXRoZXJpbmcpCi0gICAgICAgIG1fZW5k
T2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA9IHsgfTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IHBy
ZXZhbGVudFJlc291cmNlczsKLSAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IG1fcmVzb3VyY2VT
dGF0aXN0aWNzTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChzdGF0aXN0aWMuaXNQcmV2YWxl
bnRSZXNvdXJjZSAmJiAhaGFzSGFkVW5leHBpcmVkUmVjZW50VXNlckludGVyYWN0aW9uKHN0YXRp
c3RpYykgJiYgKCFzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nIHx8ICFzdGF0aXN0aWMuZ3Jh
bmRmYXRoZXJlZCkpCi0gICAgICAgICAgICBwcmV2YWxlbnRSZXNvdXJjZXMuYXBwZW5kKHN0YXRp
c3RpYy5oaWdoTGV2ZWxEb21haW4pOwotCi0gICAgICAgIGlmIChzaG91bGRDbGVhckdyYW5kZmF0
aGVyaW5nICYmIHN0YXRpc3RpYy5ncmFuZGZhdGhlcmVkKQotICAgICAgICAgICAgc3RhdGlzdGlj
LmdyYW5kZmF0aGVyZWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcHJldmFsZW50UmVz
b3VyY2VzOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aW5j
bHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKQotewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byB0b2RheSA9IE9wZXJhdGluZ0RhdGU6OnRvZGF5
KCk7Ci0gICAgaWYgKCFtX29wZXJhdGluZ0RhdGVzLmlzRW1wdHkoKSAmJiB0b2RheSA8PSBtX29w
ZXJhdGluZ0RhdGVzLmxhc3QoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgd2hpbGUgKG1fb3Bl
cmF0aW5nRGF0ZXMuc2l6ZSgpID49IG9wZXJhdGluZ0RhdGVzV2luZG93KQotICAgICAgICBtX29w
ZXJhdGluZ0RhdGVzLnJlbW92ZSgwKTsKLQotICAgIG1fb3BlcmF0aW5nRGF0ZXMuYXBwZW5kKHRv
ZGF5KTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omhhc1N0
YXRpc3RpY3NFeHBpcmVkKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3Rh
dGlzdGljKSBjb25zdAotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
aWYgKG1fb3BlcmF0aW5nRGF0ZXMuc2l6ZSgpID49IG9wZXJhdGluZ0RhdGVzV2luZG93KSB7Ci0g
ICAgICAgIGlmIChPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUocmVzb3VyY2VTdGF0aXN0aWMu
bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpIDwgbV9vcGVyYXRpbmdEYXRlcy5maXJzdCgp
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgZG9uJ3Qg
bWVldCB0aGUgcmVhbCBjcml0ZXJpYSBmb3IgYW4gZXhwaXJlZCBzdGF0aXN0aWMsIGNoZWNrIHRo
ZSB1c2VyIHNldHRpbmcgZm9yIGEgdGlnaHRlciByZXN0cmljdGlvbiAobWFpbmx5IGZvciB0ZXN0
aW5nKS4KLSAgICBpZiAobV9wYXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pIHsK
LSAgICAgICAgaWYgKFdhbGxUaW1lOjpub3coKSA+IHJlc291cmNlU3RhdGlzdGljLm1vc3RSZWNl
bnRVc2VySW50ZXJhY3Rpb25UaW1lICsgbV9wYXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJh
Y3Rpb24udmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBtYXhpbXVtRW50cnlDb3VudCkKLXsKLSAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIG1fcGFyYW1ldGVycy5tYXhTdGF0
aXN0aWNzRW50cmllcyA9IG1heGltdW1FbnRyeUNvdW50OwotfQotCi12b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVu
ZVRhcmdldENvdW50KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
bV9wYXJhbWV0ZXJzLnBydW5lRW50cmllc0Rvd25UbyA9IHBydW5lVGFyZ2V0Q291bnQ7Ci19Ci0K
LXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJ
Zk5lZWRlZCgpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAo
bV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2l6ZSgpIDw9IG1fcGFyYW1ldGVycy5tYXhTdGF0aXN0
aWNzRW50cmllcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fcGFyYW1ldGVycy5w
cnVuZUVudHJpZXNEb3duVG8gPD0gbV9wYXJhbWV0ZXJzLm1heFN0YXRpc3RpY3NFbnRyaWVzKTsK
LQotICAgIHNpemVfdCBudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSA9IG1fcmVzb3VyY2VTdGF0
aXN0aWNzTWFwLnNpemUoKSAtIG1fcGFyYW1ldGVycy5wcnVuZUVudHJpZXNEb3duVG87Ci0gICAg
QVNTRVJUKG51bWJlck9mRW50cmllc0xlZnRUb1BydW5lKTsKLQotICAgIFZlY3RvcjxTdGF0aXN0
aWNzTGFzdFNlZW4+IHJlc291cmNlc1RvUHJ1bmVQZXJJbXBvcnRhbmNlW21heEltcG9ydGFuY2Ug
KyAxXTsKLSAgICBmb3IgKGF1dG8mIHJlc291cmNlU3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRp
c3RpY3NNYXAudmFsdWVzKCkpCi0gICAgICAgIHJlc291cmNlc1RvUHJ1bmVQZXJJbXBvcnRhbmNl
W2NvbXB1dGVJbXBvcnRhbmNlKHJlc291cmNlU3RhdGlzdGljKV0uYXBwZW5kKHsgcmVzb3VyY2VT
dGF0aXN0aWMuaGlnaExldmVsRG9tYWluLCByZXNvdXJjZVN0YXRpc3RpYy5sYXN0U2VlbiB9KTsK
LQotICAgIGZvciAodW5zaWduZWQgaW1wb3J0YW5jZSA9IDA7IG51bWJlck9mRW50cmllc0xlZnRU
b1BydW5lICYmIGltcG9ydGFuY2UgPD0gbWF4SW1wb3J0YW5jZTsgKytpbXBvcnRhbmNlKQotICAg
ICAgICBwcnVuZVJlc291cmNlcyhtX3Jlc291cmNlU3RhdGlzdGljc01hcCwgcmVzb3VyY2VzVG9Q
cnVuZVBlckltcG9ydGFuY2VbaW1wb3J0YW5jZV0sIG51bWJlck9mRW50cmllc0xlZnRUb1BydW5l
KTsKLQotICAgIEFTU0VSVCghbnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1bmUpOwotfQotCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZh
dWx0VmFsdWVzKCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIG1f
cGFyYW1ldGVycyA9IHsgfTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OmxvZ1Rlc3RpbmdFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50KQotewotICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtz
dG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGV2ZW50ID0gZXZlbnQuaXNvbGF0ZWRDb3B5KCldIHsK
LSAgICAgICAgc3RvcmUtPmxvZ1Rlc3RpbmdFdmVudChldmVudCk7Ci0gICAgfSk7Ci19Ci0KLXZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBT
dHJpbmcmIHByaW1hcnlEb21haW4sIFNlY29uZHMgc2Vjb25kcykKLXsKLSAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJj
ZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4pOwotICAgIHN0YXRpc3Rp
Y3MubGFzdFNlZW4gPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc2Vjb25kcy5zZWNvbmRzKCkp
OwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKQotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgPSBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4pOwotICAg
IHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2
YWxlbmNlOjpIaWdoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4p
Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvJiByZXNvdXJj
ZVN0YXRpc3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJp
bWFyeURvbWFpbik7Ci0gICAgc2V0UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMs
IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OlZlcnlIaWdoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBt
YWtlUmVmKG1fc3RvcmUpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBzdG9yZS0+cmVtb3ZlQWxsU3RvcmFnZUFjY2Vz
cyhbc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBzdG9yZS0+c3RhdGlz
dGljc1F1ZXVlKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNz
KCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHVwZGF0ZUNvb2tp
ZUJsb2NraW5nKFtdKCkgeyB9KTsKLSAgICB1cGRhdGVDYWNoZU1heEFnZUNhcCgpOwotICAgIHVw
ZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNh
OWE3Yjk2YTAwZDg1ZDBjMWVhN2IxY2FhNjFjNzJiZDFkYjBjNC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwMyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlJlc291
cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmgiCi0jaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmgiCi0jaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1dvcmtRdWV1ZS5oPgotCi0jaWYgSEFWRShDT1JFX1BSRURJQ1RJT04pCi0jaW5jbHVk
ZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5oIgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEtleWVkRGVjb2RlcjsKLWNsYXNzIEtleWVkRW5jb2Rl
cjsKLXN0cnVjdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotY2xhc3MgT3BlcmF0aW5nRGF0ZTsKLWNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
ZXJzaXN0ZW50U3RvcmFnZTsKLQotLy8gVGhpcyBpcyBhbHdheXMgY29uc3RydWN0ZWQgLyB1c2Vk
IC8gZGVzdHJveWVkIG9uIHRoZSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUncyBzdGF0
aXN0aWNzIHF1ZXVlLgotY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlIDog
cHVibGljIENhbk1ha2VXZWFrUHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4g
ewotcHVibGljOgotICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZShXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmLCBXb3JrUXVldWUmKTsKLSAgICB+UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlKCk7Ci0KLSAgICB2b2lkIHNldFBlcnNpc3RlbnRTdG9yYWdl
KFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZSYpOwotCi0gICAgdm9pZCBj
bGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmlzRW1wdHkoKTsgfQotCi0gICAg
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OktleWVkRW5jb2Rlcj4gY3JlYXRlRW5jb2RlckZyb21E
YXRhKCkgY29uc3Q7Ci0gICAgdm9pZCBtZXJnZVdpdGhEYXRhRnJvbURlY29kZXIoV2ViQ29yZTo6
S2V5ZWREZWNvZGVyJik7Ci0KLSAgICB2b2lkIG1lcmdlU3RhdGlzdGljcyhWZWN0b3I8V2ViQ29y
ZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mJik7Ci0gICAgdm9pZCBwcm9jZXNzU3RhdGlzdGlj
cyhjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MmKT4mKSBjb25zdDsKLQotICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tpbmcoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9t
YWlucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvQmxvY2ssIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCBjbGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5zKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
OwotCi0gICAgdm9pZCBpbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSgpOwot
ICAgIHZvaWQgcHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOwotCi0gICAgdm9pZCBy
ZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKFN0cmluZyYmIHByaW1hcnlEb21haW5Jbk5l
ZWRPZlN0b3JhZ2VBY2Nlc3MsIHVpbnQ2NF90IG9wZW5lclBhZ2VJRCwgU3RyaW5nJiYgb3BlbmVy
UHJpbWFyeURvbWFpbik7Ci0gICAgdm9pZCByZW1vdmVBbGxTdG9yYWdlQWNjZXNzKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJik7Ci0KLSAgICB2b2lkIGdyYW5kZmF0aGVyRXhpc3RpbmdXZWJz
aXRlRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgY2FuY2VsUGVu
ZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpOwotCi0gICAgYm9vbCBpc1JlZ2lzdGVy
ZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3QgU3RyaW5nJiBzdWJyZXNvdXJjZVByaW1hcnlEb21h
aW4sIGNvbnN0IFN0cmluZyYgdG9wRnJhbWVQcmltYXJ5RG9tYWluKSBjb25zdDsKLSAgICBib29s
IGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBTdHJpbmcmIHN1YkZyYW1lUHJpbWFy
eURvbWFpbiwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1hcnlEb21haW4pIGNvbnN0OwotICAg
IGJvb2wgaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFN0cmluZyYgaG9zdFJlZGly
ZWN0ZWRGcm9tUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiBob3N0UmVkaXJlY3RlZFRvUHJp
bWFyeURvbWFpbikgY29uc3Q7Ci0KLSAgICB2b2lkIGNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29u
c3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKTsKLSAgICBTdHJpbmcgZHVtcFJlc291cmNlTG9hZFN0
YXRpc3RpY3MoKSBjb25zdDsKLSAgICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3Ry
aW5nJiBwcmltYXJ5RG9tYWluKSBjb25zdDsKLSAgICBib29sIGlzVmVyeVByZXZhbGVudFJlc291
cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikgY29uc3Q7Ci0gICAgdm9pZCBzZXRQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pOwotICAgIHZvaWQgc2V0
VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbik7Ci0KLSAg
ICB2b2lkIHNldEdyYW5kZmF0aGVyZWQoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBib29s
IHZhbHVlKTsKLSAgICBib29sIGlzR3JhbmRmYXRoZXJlZChjb25zdCBTdHJpbmcmIHByaW1hcnlE
b21haW4pIGNvbnN0OwotCi0gICAgdm9pZCBzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4o
Y29uc3QgU3RyaW5nJiBwcmltYXJ5U3ViRnJhbWVEb21haW4sIGNvbnN0IFN0cmluZyYgcHJpbWFy
eVRvcEZyYW1lRG9tYWluKTsKLSAgICB2b2lkIHNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9y
aWdpbihjb25zdCBTdHJpbmcmIHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5n
JiBwcmltYXJ5VG9wRnJhbWVEb21haW4pOwotICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdFRvKGNvbnN0IFN0cmluZyYgcHJpbWFyeVN1YnJlc291cmNlRG9tYWluLCBjb25zdCBT
dHJpbmcmIHByaW1hcnlSZWRpcmVjdERvbWFpbik7Ci0gICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdHJpbmcmIHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbiwg
Y29uc3QgU3RyaW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pOwotICAgIHZvaWQgc2V0VG9wRnJh
bWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN0cmluZyYgdG9wRnJhbWVQcmltYXJ5RG9tYWluLCBj
b25zdCBTdHJpbmcmIHByaW1hcnlSZWRpcmVjdERvbWFpbik7Ci0gICAgdm9pZCBzZXRUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdHJpbmcmIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwg
Y29uc3QgU3RyaW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pOwotCi0gICAgdm9pZCBsb2dUZXN0
aW5nRXZlbnQoY29uc3QgU3RyaW5nJik7Ci0KLSAgICB2b2lkIHNldE1heFN0YXRpc3RpY3NFbnRy
aWVzKHNpemVfdCBtYXhpbXVtRW50cnlDb3VudCk7Ci0gICAgdm9pZCBzZXRQcnVuZUVudHJpZXNE
b3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQpOwotICAgIHZvaWQgcmVzZXRQYXJhbWV0ZXJz
VG9EZWZhdWx0VmFsdWVzKCk7Ci0KLSAgICB2b2lkIGNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRy
eSgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKGJvb2wpOwotICAgIHZvaWQgc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3Jkc1JlbW92YWwoYm9vbCk7Ci0gICAgdm9pZCBzZXRTaG91bGRTdWJtaXRUZWxlbWV0
cnkoYm9vbCk7Ci0gICAgdm9pZCBzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMp
OwotICAgIHZvaWQgc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNlY29u
ZHMpOwotICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMpOwotICAgIHZvaWQg
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sKTsKLSAgICBib29sIGlzRGVi
dWdNb2RlRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdNb2RlRW5hYmxlZDsgfTsKLSAg
ICB2b2lkIHNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFN0cmluZyYgZG9t
YWluKTsKLQotICAgIHZvaWQgaGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdHJpbmcmIHN1YkZyYW1l
UHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1hcnlEb21haW4sIHVpbnQ2
NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
KT4mJik7Ci0gICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBzdWJGcmFtZVBy
aW1hcnlEb21haW4sIFN0cmluZyYmIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgdWludDY0X3QgZnJh
bWVJRCwgdWludDY0X3QgcGFnZUlELCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1N0YXR1cyk+JiYpOwotICAgIHZvaWQgZ3JhbnRTdG9yYWdl
QWNjZXNzKFN0cmluZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJhbWVIb3N0LCB1aW50
NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93LCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKLQotICAgIHZvaWQgbG9nRnJhbWVOYXZp
Z2F0aW9uKGNvbnN0IFN0cmluZyYgdGFyZ2V0UHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiBt
YWluRnJhbWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHNvdXJjZVByaW1hcnlEb21haW4s
IGNvbnN0IFN0cmluZyYgdGFyZ2V0SG9zdCwgY29uc3QgU3RyaW5nJiBtYWluRnJhbWVIb3N0LCBi
b29sIGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUpOwotICAgIHZvaWQgbG9nVXNlckludGVy
YWN0aW9uKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbik7Ci0KLSAgICB2b2lkIGNsZWFyVXNl
ckludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbik7Ci0gICAgYm9vbCBoYXNI
YWRVc2VySW50ZXJhY3Rpb24oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKTsKLQotICAgIHZv
aWQgc2V0TGFzdFNlZW4oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBTZWNvbmRzKTsKLQot
ICAgIHZvaWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKLQotcHJpdmF0ZToKLSAgICBzdGF0
aWMgYm9vbCBzaG91bGRCbG9ja0FuZEtlZXBDb29raWVzKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3MmKTsKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRCbG9ja0FuZFB1cmdlQ29v
a2llcyhjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7Ci0gICAgc3RhdGlj
IGJvb2wgaGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdChjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiwgY29uc3QgU3RyaW5nJiBmaXJzdFBhcnR5UHJp
bWFyeURvbWFpbik7Ci0gICAgYm9vbCBoYXNIYWRVbmV4cGlyZWRSZWNlbnRVc2VySW50ZXJhY3Rp
b24oV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpIGNvbnN0OwotICAgIGJvb2wgaGFz
U3RhdGlzdGljc0V4cGlyZWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYp
IGNvbnN0OwotICAgIGJvb2wgd2FzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFj
dGlvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBjdXJyZW50LCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiB1cGRhdGVkKSBjb25zdDsKLSAgICB2
b2lkIHNldFByZXZhbGVudFJlc291cmNlKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3Mm
LCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlKTsKLSAgICB1bnNpZ25lZCByZWN1cnNpdmVseUdldEFs
bERvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUb1RoaXNEb21haW4oY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljcyYsIEhhc2hTZXQ8U3RyaW5nPiYgZG9tYWluc1RoYXRIYXZlUmVk
aXJlY3RlZFRvLCB1bnNpZ25lZCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKSBjb25zdDsKLSAgICB2
b2lkIHNldFN0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9zdG9y
YWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQgID0gZW5hYmxlZDsgfQotICAgIGJvb2wgc2hvdWxkUmVt
b3ZlRGF0YVJlY29yZHMoKSBjb25zdDsKLSAgICB2b2lkIHNldERlYnVnTG9nZ2dpbmdFbmFibGVk
KGJvb2wgZW5hYmxlZCkgeyBtX2RlYnVnTG9nZ2luZ0VuYWJsZWQgID0gZW5hYmxlZDsgfQotICAg
IHZvaWQgc2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoYm9vbCk7Ci0gICAgdm9pZCBzY2hlZHVs
ZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7Ci0gICAgdm9pZCBncmFu
dFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdHJpbmcmJiBzdWJGcmFtZUhvc3QsIFN0cmluZyYmIHRv
cEZyYW1lSG9zdCwgT3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwg
Ym9vbCB1c2VyV2FzUHJvbXB0ZWROb3dPckVhcmxpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYpOwotICAgIHZvaWQgbWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2
YWxlbnQoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwotICAgIGJvb2wgaXNQcmV2
YWxlbnREdWVUb0RlYnVnTW9kZShXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7Ci0g
ICAgVmVjdG9yPFN0cmluZz4gZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7
Ci0gICAgdm9pZCByZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
OwotICAgIHZvaWQgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKTsKLSAgICBXZWJDb3JlOjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzJiBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9t
YWluKGNvbnN0IFN0cmluZyYpOwotICAgIFZlY3RvcjxTdHJpbmc+IHRvcFByaXZhdGVseUNvbnRy
b2xsZWREb21haW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcigpOwotICAgIHZvaWQgc2V0Q2FjaGVN
YXhBZ2VDYXAoU2Vjb25kcyk7Ci0gICAgdm9pZCB1cGRhdGVDYWNoZU1heEFnZUNhcCgpOwotICAg
IHZvaWQgc2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoU2Vjb25kcyk7Ci0gICAgdm9pZCB1
cGRhdGVDbGllbnRTaWRlQ29va2llc0FnZUNhcCgpOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0g
ICAgdm9pZCByZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCk7Ci0jZW5kaWYKLQotICAgIHN0
cnVjdCBQYXJhbWV0ZXJzIHsKLSAgICAgICAgc2l6ZV90IHBydW5lRW50cmllc0Rvd25UbyB7IDgw
MCB9OwotICAgICAgICBzaXplX3QgbWF4U3RhdGlzdGljc0VudHJpZXMgeyAxMDAwIH07Ci0gICAg
ICAgIE9wdGlvbmFsPFNlY29uZHM+IHRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb247Ci0gICAgICAg
IFNlY29uZHMgbWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsIHsgMV9oIH07Ci0g
ICAgICAgIFNlY29uZHMgZ3JhbmRmYXRoZXJpbmdUaW1lIHsgMjRfaCAqIDcgfTsKLSAgICAgICAg
U2Vjb25kcyBjYWNoZU1heEFnZUNhcFRpbWUgeyAyNF9oICogNyB9OwotICAgICAgICBTZWNvbmRz
IGNsaWVudFNpZGVDb29raWVzQWdlQ2FwVGltZSB7IDI0X2ggKiA3IH07Ci0gICAgICAgIGJvb2wg
c2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCB7IGZhbHNlIH07Ci0g
ICAgICAgIGJvb2wgc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92
YWwgeyB0cnVlIH07Ci0gICAgICAgIGJvb2wgc2hvdWxkU3VibWl0VGVsZW1ldHJ5IHsgdHJ1ZSB9
OwotICAgIH07Ci0KLSAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIG1fc3RvcmU7
Ci0gICAgUmVmPFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7Ci0gICAgV2Vha1B0cjxSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U+IG1fcGVyc2lzdGVudFN0b3JhZ2U7Ci0gICAg
SGFzaE1hcDxTdHJpbmcsIFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+IG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwOwotI2lmIEhBVkUoQ09SRV9QUkVESUNUSU9OKQotICAgIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xh
c3NpZmllcjsKLSNlbHNlCi0gICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIgbV9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcjsKLSNlbmRpZgotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotICAgIEhhc2hTZXQ8dWludDY0X3Q+IG1fYWN0aXZlUGx1Z2luVG9r
ZW5zOwotI2VuZGlmCi0gICAgUGFyYW1ldGVycyBtX3BhcmFtZXRlcnM7Ci0gICAgVmVjdG9yPE9w
ZXJhdGluZ0RhdGU+IG1fb3BlcmF0aW5nRGF0ZXM7Ci0gICAgV2FsbFRpbWUgbV9lbmRPZkdyYW5k
ZmF0aGVyaW5nVGltZXN0YW1wOwotICAgIGJvb2wgbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkIHsgZmFs
c2UgfTsKLSAgICBib29sIG1fZGVidWdNb2RlRW5hYmxlZCB7IGZhbHNlIH07Ci0gICAgU3RyaW5n
IG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICBib29sIG1fc3RvcmFnZUFjY2Vz
c1Byb21wdHNFbmFibGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fZGF0YVJlY29yZHNCZWluZ1Jl
bW92ZWQgeyBmYWxzZSB9OwotICAgIE1vbm90b25pY1RpbWUgbV9sYXN0VGltZURhdGFSZWNvcmRz
V2VyZVJlbW92ZWQ7Ci0KLSAgICB1aW50NjRfdCBtX2xhc3RTdGF0aXN0aWNzUHJvY2Vzc2luZ1Jl
cXVlc3RJZGVudGlmaWVyIHsgMCB9OwotICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBtX3BlbmRpbmdT
dGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZDA4ZDgwMjE5ZTkwZjA0NWU4Njc1OTdiNjdiZDJiNjI0YjBm
N2I1Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3Jh
Z2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVy
c2lzdGVudFN0b3JhZ2UuaCIKLQotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCIKLSNpbmNsdWRlICJXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVNb25pdG9yLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9LZXllZENv
ZGluZy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1J1bkxvb3AuaD4KLSNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1jb25zdGV4cHIgU2Vjb25kcyBtaW5pbXVtV3JpdGVJbnRlcnZhbCB7IDVfbWluIH07
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1zdGF0aWMgYm9vbCBoYXNGaWxlQ2hhbmdl
ZFNpbmNlKGNvbnN0IFN0cmluZyYgcGF0aCwgV2FsbFRpbWUgc2luY2UpCi17Ci0gICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgYXV0byBtb2RpZmljYXRpb25UaW1lID0gRmlsZVN5
c3RlbTo6Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUocGF0aCk7Ci0gICAgaWYgKCFtb2RpZmljYXRp
b25UaW1lKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBtb2RpZmljYXRpb25U
aW1lLnZhbHVlKCkgPiBzaW5jZTsKLX0KLQotUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3Rl
bnRTdG9yYWdlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UoUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlJiBtZW1vcnlTdG9yZSwgV29ya1F1ZXVlJiB3b3Jr
UXVldWUsIGNvbnN0IFN0cmluZyYgc3RvcmFnZURpcmVjdG9yeVBhdGgpCi0gICAgOiBtX21lbW9y
eVN0b3JlKG1lbW9yeVN0b3JlKQotICAgICwgbV93b3JrUXVldWUod29ya1F1ZXVlKQotICAgICwg
bV9zdG9yYWdlRGlyZWN0b3J5UGF0aChzdG9yYWdlRGlyZWN0b3J5UGF0aCkKLXsKLSAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIG1fbWVtb3J5U3RvcmUuc2V0UGVyc2lzdGVu
dFN0b3JhZ2UoKnRoaXMpOwotCi0gICAgcG9wdWxhdGVNZW1vcnlTdG9yZUZyb21EaXNrKCk7Ci0g
ICAgc3RhcnRNb25pdG9yaW5nRGlzaygpOwotfQotCi1SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVy
c2lzdGVudFN0b3JhZ2U6On5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2Uo
KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKG1faGFzUGVu
ZGluZ1dyaXRlKQotICAgICAgICB3cml0ZU1lbW9yeVN0b3JlVG9EaXNrKCk7Ci19Ci0KLVN0cmlu
ZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OnN0b3JhZ2VEaXJlY3Rv
cnlQYXRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdG9yYWdlRGlyZWN0b3J5UGF0aC5pc29s
YXRlZENvcHkoKTsKLX0KLQotU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50
U3RvcmFnZTo6cmVzb3VyY2VMb2dGaWxlUGF0aCgpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHN0b3Jh
Z2VQYXRoID0gc3RvcmFnZURpcmVjdG9yeVBhdGgoKTsKLSAgICBpZiAoc3RvcmFnZVBhdGguaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLQotICAgIHJldHVybiBGaWxl
U3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoc3RvcmFnZVBhdGgsICJmdWxsX2Jyb3dz
aW5nX3Nlc3Npb25fcmVzb3VyY2VMb2cucGxpc3QiKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OnN0YXJ0TW9uaXRvcmluZ0Rpc2soKQotewotICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIGlmIChtX2ZpbGVNb25pdG9yKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgcmVzb3VyY2VMb2dQYXRoID0gcmVzb3VyY2VMb2dG
aWxlUGF0aCgpOwotICAgIGlmIChyZXNvdXJjZUxvZ1BhdGguaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2ZpbGVNb25pdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxGaWxlTW9uaXRv
cj4ocmVzb3VyY2VMb2dQYXRoLCBtX3dvcmtRdWV1ZS5jb3B5UmVmKCksIFt0aGlzLCB3ZWFrVGhp
cyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0gKEZpbGVNb25pdG9yOjpGaWxlQ2hhbmdlVHlwZSB0eXBl
KSB7Ci0gICAgICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgICAgICBpZiAoIXdl
YWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHN3aXRjaCAodHlwZSkgewot
ICAgICAgICBjYXNlIEZpbGVNb25pdG9yOjpGaWxlQ2hhbmdlVHlwZTo6TW9kaWZpY2F0aW9uOgot
ICAgICAgICAgICAgcmVmcmVzaE1lbW9yeVN0b3JlRnJvbURpc2soKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEZpbGVNb25pdG9yOjpGaWxlQ2hhbmdlVHlwZTo6UmVtb3ZhbDoK
LSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUuY2xlYXIoW10geyB9KTsKLSAgICAgICAgICAgIG1f
ZmlsZU1vbml0b3IgPSBudWxscHRyOwotICAgICAgICAgICAgbW9uaXRvckRpcmVjdG9yeUZvck5l
d1N0YXRpc3RpY3MoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfSk7Ci19
Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlOjptb25pdG9y
RGlyZWN0b3J5Rm9yTmV3U3RhdGlzdGljcygpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBTdHJpbmcgc3RvcmFnZVBhdGggPSBzdG9yYWdlRGlyZWN0b3J5UGF0aCgp
OwotICAgIEFTU0VSVCghc3RvcmFnZVBhdGguaXNFbXB0eSgpKTsKLQotICAgIGlmICghRmlsZVN5
c3RlbTo6ZmlsZUV4aXN0cyhzdG9yYWdlUGF0aCkpIHsKLSAgICAgICAgaWYgKCFGaWxlU3lzdGVt
OjptYWtlQWxsRGlyZWN0b3JpZXMoc3RvcmFnZVBhdGgpKSB7Ci0gICAgICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BlcnNpc3RlbnRTdG9yYWdlOiBGYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSBwYXRoICVzIiwg
c3RvcmFnZVBhdGgudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBtX2ZpbGVNb25pdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxGaWxlTW9u
aXRvcj4oc3RvcmFnZVBhdGgsIG1fd29ya1F1ZXVlLmNvcHlSZWYoKSwgW3RoaXNdIChGaWxlTW9u
aXRvcjo6RmlsZUNoYW5nZVR5cGUgdHlwZSkgewotICAgICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKLSAgICAgICAgaWYgKHR5cGUgPT0gRmlsZU1vbml0b3I6OkZpbGVDaGFuZ2VUeXBl
OjpSZW1vdmFsKSB7Ci0gICAgICAgICAgICAvLyBEaXJlY3Rvcnkgd2FzIHJlbW92ZWQhCi0gICAg
ICAgICAgICBtX2ZpbGVNb25pdG9yID0gbnVsbHB0cjsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIFN0cmluZyByZXNvdXJjZUxvZ1BhdGggPSByZXNvdXJjZUxvZ0Zp
bGVQYXRoKCk7Ci0gICAgICAgIEFTU0VSVCghcmVzb3VyY2VMb2dQYXRoLmlzRW1wdHkoKSk7Ci0K
LSAgICAgICAgaWYgKCFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHJlc291cmNlTG9nUGF0aCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9maWxlTW9uaXRvciA9IG51bGxwdHI7Ci0K
LSAgICAgICAgcmVmcmVzaE1lbW9yeVN0b3JlRnJvbURpc2soKTsKLSAgICAgICAgc3RhcnRNb25p
dG9yaW5nRGlzaygpOwotICAgIH0pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
ZXJzaXN0ZW50U3RvcmFnZTo6c3RvcE1vbml0b3JpbmdEaXNrKCkKLXsKLSAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKLSAgICBtX2ZpbGVNb25pdG9yID0gbnVsbHB0cjsKLX0KLQotLy8g
VGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgZmlsZSBjaGFuZ2VzIG9uIGRpc2suCi12b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6cmVmcmVzaE1lbW9yeVN0b3JlRnJv
bURpc2soKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgU3RyaW5n
IGZpbGVQYXRoID0gcmVzb3VyY2VMb2dGaWxlUGF0aCgpOwotICAgIGlmIChmaWxlUGF0aC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFdlIHNvbWV0aW1lcyBzZWUgZmlsZSBj
aGFuZ2VkIGV2ZW50cyBmcm9tIGJlZm9yZSBvdXIgbG9hZCBjb21wbGV0ZWQgKHdlIHN0YXJ0Ci0g
ICAgLy8gcmVhZGluZyBhdCB0aGUgZmlyc3QgY2hhbmdlIGV2ZW50LCBidXQgd2UgbWlnaHQgcmVj
ZWl2ZSBhIHNlcmllcyBvZiBldmVudHMgcmVsYXRlZAotICAgIC8vIHRvIHRoZSBzYW1lIGZpbGUg
b3BlcmF0aW9uKS4gQ2F0Y2ggdGhpcyBjYXNlIHRvIGF2b2lkIHJlYWRpbmcgb3Zlcmx5IG9mdGVu
LgotICAgIGlmICghaGFzRmlsZUNoYW5nZWRTaW5jZShmaWxlUGF0aCwgbV9sYXN0U3RhdGlzdGlj
c0ZpbGVTeW5jVGltZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdhbGxUaW1lIHJlYWRUaW1l
ID0gV2FsbFRpbWU6Om5vdygpOwotCi0gICAgYXV0byBkZWNvZGVyID0gY3JlYXRlRm9yRmlsZShm
aWxlUGF0aCk7Ci0gICAgaWYgKCFkZWNvZGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX21l
bW9yeVN0b3JlLm1lcmdlV2l0aERhdGFGcm9tRGVjb2RlcigqZGVjb2Rlcik7Ci0gICAgbV9sYXN0
U3RhdGlzdGljc0ZpbGVTeW5jVGltZSA9IHJlYWRUaW1lOwotfQotCi12b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6cG9wdWxhdGVNZW1vcnlTdG9yZUZyb21EaXNr
KCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIFN0cmluZyBmaWxl
UGF0aCA9IHJlc291cmNlTG9nRmlsZVBhdGgoKTsKLSAgICBpZiAoZmlsZVBhdGguaXNFbXB0eSgp
IHx8ICFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGZpbGVQYXRoKSkgewotICAgICAgICBtX21lbW9y
eVN0b3JlLmdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YShbXSgpIHsgfSk7Ci0gICAgICAg
IG1vbml0b3JEaXJlY3RvcnlGb3JOZXdTdGF0aXN0aWNzKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoIWhhc0ZpbGVDaGFuZ2VkU2luY2UoZmlsZVBhdGgsIG1fbGFzdFN0YXRp
c3RpY3NGaWxlU3luY1RpbWUpKSB7Ci0gICAgICAgIC8vIE5vIG5lZWQgdG8gZ3JhbmRmYXRoZXIg
aW4gdGhpcyBjYXNlLgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgV2FsbFRpbWUgcmVh
ZFRpbWUgPSBXYWxsVGltZTo6bm93KCk7Ci0KLSAgICBhdXRvIGRlY29kZXIgPSBjcmVhdGVGb3JG
aWxlKGZpbGVQYXRoKTsKLSAgICBpZiAoIWRlY29kZXIpIHsKLSAgICAgICAgbV9tZW1vcnlTdG9y
ZS5ncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEoW10oKSB7IH0pOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgLy8gRGVidWcgbW9kZSBoYXMgYSBwcmVwb3VsYXRlZCBtZW1vcnkg
c3RvcmUuCi0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX21lbW9yeVN0b3JlLmlzRW1wdHkoKSB8
fCBtX21lbW9yeVN0b3JlLmlzRGVidWdNb2RlRW5hYmxlZCgpLCAiVGhpcyBpcyB0aGUgaW5pdGlh
bCBpbXBvcnQgc28gdGhlIHN0b3JlIHNob3VsZCBiZSBlbXB0eSIpOwotICAgIG1fbWVtb3J5U3Rv
cmUubWVyZ2VXaXRoRGF0YUZyb21EZWNvZGVyKCpkZWNvZGVyKTsKLQotICAgIG1fbGFzdFN0YXRp
c3RpY3NGaWxlU3luY1RpbWUgPSByZWFkVGltZTsKLQotICAgIG1fbWVtb3J5U3RvcmUubG9nVGVz
dGluZ0V2ZW50KCJQb3B1bGF0ZWRXaXRob3V0R3JhbmRmYXRoZXJpbmciX3MpOwotfQotCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6d3JpdGVNZW1vcnlTdG9y
ZVRvRGlzaygpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX2hh
c1BlbmRpbmdXcml0ZSA9IGZhbHNlOwotICAgIHN0b3BNb25pdG9yaW5nRGlzaygpOwotCi0gICAg
d3JpdGVUb0Rpc2sobV9tZW1vcnlTdG9yZS5jcmVhdGVFbmNvZGVyRnJvbURhdGEoKSwgcmVzb3Vy
Y2VMb2dGaWxlUGF0aCgpKTsKLQotICAgIG1fbGFzdFN0YXRpc3RpY3NGaWxlU3luY1RpbWUgPSBX
YWxsVGltZTo6bm93KCk7Ci0gICAgbV9sYXN0U3RhdGlzdGljc1dyaXRlVGltZSA9IE1vbm90b25p
Y1RpbWU6Om5vdygpOwotCi0gICAgc3RhcnRNb25pdG9yaW5nRGlzaygpOwotfQotCi12b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6c2NoZWR1bGVPcldyaXRlTWVt
b3J5U3RvcmUoRm9yY2VJbW1lZGlhdGVXcml0ZSBmb3JjZUltbWVkaWF0ZVdyaXRlKQotewotICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byB0aW1lU2luY2VMYXN0V3Jp
dGUgPSBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fbGFzdFN0YXRpc3RpY3NXcml0ZVRpbWU7Ci0g
ICAgaWYgKGZvcmNlSW1tZWRpYXRlV3JpdGUgIT0gRm9yY2VJbW1lZGlhdGVXcml0ZTo6WWVzICYm
IHRpbWVTaW5jZUxhc3RXcml0ZSA8IG1pbmltdW1Xcml0ZUludGVydmFsKSB7Ci0gICAgICAgIGlm
ICghbV9oYXNQZW5kaW5nV3JpdGUpIHsKLSAgICAgICAgICAgIG1faGFzUGVuZGluZ1dyaXRlID0g
dHJ1ZTsKLSAgICAgICAgICAgIFNlY29uZHMgZGVsYXkgPSBtaW5pbXVtV3JpdGVJbnRlcnZhbCAt
IHRpbWVTaW5jZUxhc3RXcml0ZSArIDFfczsKLSAgICAgICAgICAgIG1fd29ya1F1ZXVlLT5kaXNw
YXRjaEFmdGVyKGRlbGF5LCBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIHsKLSAgICAg
ICAgICAgICAgICBpZiAod2Vha1RoaXMpCi0gICAgICAgICAgICAgICAgICAgIHdlYWtUaGlzLT53
cml0ZU1lbW9yeVN0b3JlVG9EaXNrKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgd3JpdGVNZW1vcnlTdG9yZVRvRGlzaygpOwotfQot
Ci12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6Y2xlYXIoKQot
ewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIFN0cmluZyBmaWxlUGF0aCA9
IHJlc291cmNlTG9nRmlsZVBhdGgoKTsKLSAgICBpZiAoZmlsZVBhdGguaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBzdG9wTW9uaXRvcmluZ0Rpc2soKTsKLQotICAgIGlmICghRmls
ZVN5c3RlbTo6ZGVsZXRlRmlsZShmaWxlUGF0aCkgJiYgRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhm
aWxlUGF0aCkpCi0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MsICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6IFVuYWJsZSB0byBk
ZWxldGUgc3RhdGlzdGljcyBmaWxlOiAlcyIsIGZpbGVQYXRoLnV0ZjgoKS5kYXRhKCkpOwotfQot
Ci0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
ZXJzaXN0ZW50U3RvcmFnZTo6ZXhjbHVkZUZyb21CYWNrdXAoKSBjb25zdAotewotfQotI2VuZGlm
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2Uu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJhYTliOGFlYzJmZDUwMDFmMWQyY2M2
YWEzM2RiYjI3MjhlZTZiZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVy
c2lzdGVudFN0b3JhZ2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNs
dWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0jaW5j
bHVkZSA8d3RmL1dhbGxUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvV29ya1F1ZXVlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEZpbGVNb25pdG9yOwotfQotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOwotCi0vLyBD
YW4gb25seSBiZSBjb25zdHJ1Y3RlZCAvIGRlc3Ryb3llZCAvIHVzZWQgZnJvbSB0aGUgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJ3Mgc3RhdGlzdGljIHF1ZXVlLgotY2xhc3MgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlIDogcHVibGljIENhbk1ha2VXZWFrUHRy
PFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZT4gewotcHVibGljOgotICAg
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZShSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUmLCBXb3JrUXVldWUmLCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VEaXJl
Y3RvcnlQYXRoKTsKLSAgICB+UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdl
KCk7Ci0KLSAgICB2b2lkIGNsZWFyKCk7Ci0KLSAgICBlbnVtIGNsYXNzIEZvcmNlSW1tZWRpYXRl
V3JpdGUgeyBObywgWWVzLCB9OwotICAgIHZvaWQgc2NoZWR1bGVPcldyaXRlTWVtb3J5U3RvcmUo
Rm9yY2VJbW1lZGlhdGVXcml0ZSk7Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nIHN0b3JhZ2VEaXJl
Y3RvcnlQYXRoKCkgY29uc3Q7Ci0gICAgU3RyaW5nIHJlc291cmNlTG9nRmlsZVBhdGgoKSBjb25z
dDsKLQotICAgIHZvaWQgc3RhcnRNb25pdG9yaW5nRGlzaygpOwotICAgIHZvaWQgc3RvcE1vbml0
b3JpbmdEaXNrKCk7Ci0gICAgdm9pZCBtb25pdG9yRGlyZWN0b3J5Rm9yTmV3U3RhdGlzdGljcygp
OwotCi0gICAgdm9pZCB3cml0ZU1lbW9yeVN0b3JlVG9EaXNrKCk7Ci0gICAgdm9pZCBwb3B1bGF0
ZU1lbW9yeVN0b3JlRnJvbURpc2soKTsKLSAgICB2b2lkIGV4Y2x1ZGVGcm9tQmFja3VwKCkgY29u
c3Q7Ci0gICAgdm9pZCByZWZyZXNoTWVtb3J5U3RvcmVGcm9tRGlzaygpOwotCi0gICAgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlJiBtX21lbW9yeVN0b3JlOwotICAgIFJlZjxXb3Jr
UXVldWU+IG1fd29ya1F1ZXVlOwotICAgIGNvbnN0IFN0cmluZyBtX3N0b3JhZ2VEaXJlY3RvcnlQ
YXRoOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpGaWxlTW9uaXRvcj4gbV9maWxlTW9u
aXRvcjsKLSAgICBXYWxsVGltZSBtX2xhc3RTdGF0aXN0aWNzRmlsZVN5bmNUaW1lOwotICAgIE1v
bm90b25pY1RpbWUgbV9sYXN0U3RhdGlzdGljc1dyaXRlVGltZTsKLSAgICBib29sIG1faGFzUGVu
ZGluZ1dyaXRlIHsgZmFsc2UgfTsKLX07Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclBy
b3h5LmNwcAppbmRleCA0ZWY1ZGNjMzY1YWEzOWFlNjA2ZDBiYmJmMzhlZjQ0OWZlNDkwNWQwLi5k
ZWU5MDZmOGIwODVkYmNmZDI5NGM2YmFjMDg4M2MyNjIyZGFjNTAxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyUHJveHkuY3BwCkBAIC0yOSw3ICsyOSw5IEBACiAjaW5jbHVkZSAiV2ViUGFn
ZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJv
Y2Vzcy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vz
c1Byb3h5LmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgPFdlYkNv
cmUvTWVkaWFDb25zdHJhaW50cy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTW9ja1JlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlYWx0aW1lTWVkaWFTb3VyY2Uu
aD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkRhdGFMaXN0U3VnZ2Vz
dGlvbnNEcm9wZG93bi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJEYXRhTGlzdFN1
Z2dlc3Rpb25zRHJvcGRvd24uY3BwCmluZGV4IGVlNmVkOGM5OGVlNzM2MjljMWM1MGY3N2YzN2Ez
ZDM0ODMzZThhMjkuLjgyNDJjZWNlYjM2MzgwMTIyMWVlZGRkMDBlYmMxN2Y1ZTYxN2U2NGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkRhdGFMaXN0U3VnZ2VzdGlvbnNE
cm9wZG93bi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRGF0YUxpc3RTdWdn
ZXN0aW9uc0Ryb3Bkb3duLmNwcApAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIldlYkRhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bi5oIgogCisjaW5jbHVk
ZSAiV2ViUGFnZVByb3h5LmgiCisKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNDUxZTcxMDhkNzgxMGU0MWE1NjQ3MzQwOGMyNTExZGZhMTBmYmJjMy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsOTAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKLQotI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUu
aCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuaCIK
LSNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0j
aW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5
LmgiCi0jaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlTWVzc2FnZXMuaCIK
LSNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgiCi0jaW5jbHVk
ZSAiV2Vic2l0ZURhdGFGZXRjaE9wdGlvbi5oIgotI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUu
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaD4KLSNpbmNsdWRl
IDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFkQ29w
aWVyLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3Ro
cmVhZHMvQmluYXJ5U2VtYXBob3JlLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBpbmxpbmUgU3Ry
aW5nIGlzb2xhdGVkUHJpbWFyeURvbWFpbihjb25zdCBUJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4g
UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6cHJpbWFyeURvbWFpbih2YWx1ZSkuaXNvbGF0ZWRDb3B5
KCk7Ci19Ci0KLWNvbnN0IE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+JiBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6Om1vbml0b3JlZERhdGFUeXBlcygpCi17Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+PiBkYXRhVHlwZXMoc3RkOjpp
bml0aWFsaXplcl9saXN0PFdlYnNpdGVEYXRhVHlwZT4oewotICAgICAgICBXZWJzaXRlRGF0YVR5
cGU6OkNvb2tpZXMsCi0gICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6RE9NQ2FjaGUsCi0gICAgICAg
IFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzLAotICAgICAgICBXZWJzaXRlRGF0
YVR5cGU6OkxvY2FsU3RvcmFnZSwKLSAgICAgICAgV2Vic2l0ZURhdGFUeXBlOjpNZWRpYUtleXMs
Ci0gICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUsCi0j
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6
UGx1Z0luRGF0YSwKLSNlbmRpZgotICAgICAgICBXZWJzaXRlRGF0YVR5cGU6OlNlYXJjaEZpZWxk
UmVjZW50U2VhcmNoZXMsCi0gICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2Us
Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgICAgICBXZWJzaXRlRGF0YVR5cGU6OlNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zLAotI2VuZGlmCi0gICAgICAgIFdlYnNpdGVEYXRhVHlw
ZTo6V2ViU1FMRGF0YWJhc2VzLAotICAgIH0pKTsKLQotICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICByZXR1cm4gZGF0YVR5cGVzOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5l
ZChib29sIHZhbHVlKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBw
b3N0VGFzayhbdGhpcywgdmFsdWVdIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAg
ICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKHZhbHVlKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1v
dmFsKGJvb2wgdmFsdWUpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAg
IHBvc3RUYXNrKFt0aGlzLCB2YWx1ZV0gewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAg
ICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3Jl
RGF0YVJlY29yZHNSZW1vdmFsKHZhbHVlKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeShib29sIHZhbHVl
KQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBwb3N0VGFzayhbdGhp
cywgdmFsdWVdIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21l
bW9yeVN0b3JlLT5zZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkodmFsdWUpOwotICAgIH0pOwotfQot
Ci1XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZShXZWJzaXRlRGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQotICAgIDogbV93ZWJz
aXRlRGF0YVN0b3JlKG1ha2VXZWFrUHRyKHdlYnNpdGVEYXRhU3RvcmUpKQotICAgICwgbV9zdGF0
aXN0aWNzUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZSBQcm9jZXNzIERhdGEgUXVldWUiLCBXb3JrUXVldWU6OlR5cGU6OlNlcmlhbCwgV29ya1F1
ZXVlOjpRT1M6OlV0aWxpdHkpKQotICAgICwgbV9kYWlseVRhc2tzVGltZXIoUnVuTG9vcDo6bWFp
bigpLCB0aGlzLCAmV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwZXJmb3JtRGFpbHlU
YXNrcykKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgcG9zdFRhc2so
W3RoaXMsIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSB3ZWJzaXRlRGF0YVN0b3Jl
LnJlc29sdmVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpLmlzb2xhdGVkQ29weSgp
XSB7Ci0gICAgICAgIG1fbWVtb3J5U3RvcmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4oKnRoaXMsIG1fc3RhdGlzdGljc1F1ZXVlKTsKLSAgICAg
ICAgbV9wZXJzaXN0ZW50U3RvcmFnZSA9IHN0ZDo6bWFrZV91bmlxdWU8UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlPigqbV9tZW1vcnlTdG9yZSwgbV9zdGF0aXN0aWNzUXVl
dWUsIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpOwotICAgIH0pOwotCi0gICAgbV9k
YWlseVRhc2tzVGltZXIuc3RhcnRSZXBlYXRpbmcoMjRfaCk7Ci19Ci0KLVdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6fldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSgpCi17Ci0g
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGZsdXNoQW5kRGVzdHJveVBlcnNp
c3RlbnRTdG9yZSgpOwotfQotCi1pbmxpbmUgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnBvc3RUYXNrKFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIHRhc2spCi17Ci0gICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBtX3N0YXRpc3RpY3NRdWV1ZS0+ZGlzcGF0Y2go
W3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgdGFzayA9IFdURk1vdmUodGFzayldIHsK
LSAgICAgICAgdGFzaygpOwotICAgIH0pOwotfQotCi1pbmxpbmUgdm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnBvc3RUYXNrUmVwbHkoV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYg
cmVwbHkpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFdURk1vdmUocmVwbHkpKTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmZsdXNoQW5kRGVzdHJveVBlcnNpc3RlbnRTdG9yZSgpCi17Ci0g
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmICghbV9wZXJzaXN0ZW50U3Rv
cmFnZSAmJiAhbV9tZW1vcnlTdG9yZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTWFrZSBz
dXJlIHdlIGRlc3Ryb3kgdGhlIHBlcnNpc3RlbnQgc3RvcmUgb24gdGhlIGJhY2tncm91bmQgcXVl
dWUgYW5kIHdhaXQgZm9yIGl0IHRvIGRpZQotICAgIC8vIHN5bmNocm9ub3VzbHkgc2luY2UgaXQg
aGFzIGEgQysrIHJlZmVyZW5jZSB0byB1cy4gQmxvY2tpbmcgbmF0dXJlIG9mIHRoaXMgdGFzayBh
bGxvd3MgdXMKLSAgICAvLyB0byBub3QgbWFpbnRhaW4gYSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUgcmVmZXJlbmNlIGZvciB0aGUgZHVyYXRpb24gb2YgZGlzcGF0Y2gsCi0gICAgLy8g
YXZvaWRpbmcgZG91YmxlLWRlbGV0aW9uIGlzc3VlcyB3aGVuIHRoaXMgaXMgaW52b2tlZCBmcm9t
IHRoZSBkZXN0cnVjdG9yLgotICAgIEJpbmFyeVNlbWFwaG9yZSBzZW1hcGhvcmU7Ci0gICAgbV9z
dGF0aXN0aWNzUXVldWUtPmRpc3BhdGNoKFsmc2VtYXBob3JlLCB0aGlzXSB7Ci0gICAgICAgIG1f
cGVyc2lzdGVudFN0b3JhZ2UgPSBudWxscHRyOwotICAgICAgICBtX21lbW9yeVN0b3JlID0gbnVs
bHB0cjsKLSAgICAgICAgc2VtYXBob3JlLnNpZ25hbCgpOwotICAgIH0pOwotICAgIHNlbWFwaG9y
ZS53YWl0KCk7Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwotCi0gICAgcG9zdFRhc2soW3RoaXMsIHZhbHVlLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAo
bV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEZWJ1Z01vZGUodmFsdWUpOwotICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Ci17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHBvc3RUYXNrKFt0aGlz
LCBwcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHVybCksIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAg
IGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0UHJldmFs
ZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUocHJpbWFyeURvbWFpbik7Ci0gICAgICAgIHBvc3RUYXNr
UmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0pOwotfQotCi12b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJl
Y29yZHNQcm9jZXNzaW5nKCkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgcG9zdFRhc2soW3RoaXNdIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAg
ICAgICBtX21lbW9yeVN0b3JlLT5wcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7Ci0g
ICAgfSk7Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVXBkYXRlZChWZWN0b3I8V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljcz4mJiBvcmlnaW5zKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAg
ICAvLyBJdCBpcyBzYWZlIHRvIG1vdmUgdGhlIG9yaWdpbnMgdG8gdGhlIGJhY2tncm91bmQgcXVl
dWUgd2l0aG91dCBpc29sYXRlZCBjb3B5IGhlcmUgYmVjYXVzZSB0aGlzIGlzIGFuIHItdmFsdWUK
LSAgICAvLyBjb21pbmcgZnJvbSBJUEMuIFJlc291cmNlTG9hZFN0YXRpc3RpY3Mgb25seSBjb250
YWlucyBzdHJpbmdzIHdoaWNoIGFyZSBzYWZlIHRvIG1vdmUgdG8gb3RoZXIgdGhyZWFkcyBhcyBs
b25nCi0gICAgLy8gYXMgbm9ib2R5IG9uIHRoaXMgdGhyZWFkIGhvbGRzIGEgcmVmZXJlbmNlIHRv
IHRob3NlIHN0cmluZ3MuCi0gICAgcG9zdFRhc2soW3RoaXMsIG9yaWdpbnMgPSBXVEZNb3ZlKG9y
aWdpbnMpXSgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+bWVyZ2VTdGF0aXN0aWNzKFdU
Rk1vdmUob3JpZ2lucykpOwotCi0gICAgICAgIC8vIFdlIGNhbiBjYW5jZWwgYW55IHBlbmRpbmcg
cmVxdWVzdCB0byBwcm9jZXNzIHN0YXRpc3RpY3Mgc2luY2Ugd2UncmUgZG9pbmcgaXQgc3luY2hy
b25vdXNseSBiZWxvdy4KLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+Y2FuY2VsUGVuZGluZ1N0YXRp
c3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpOwotCi0gICAgICAgIC8vIEZpcmUgYmVmb3JlIHByb2Nl
c3Npbmcgc3RhdGlzdGljcyB0byBwcm9wYWdhdGUgdXNlciBpbnRlcmFjdGlvbiBhcyBmYXN0IGFz
IHBvc3NpYmxlIHRvIHRoZSBuZXR3b3JrIHByb2Nlc3MuCi0gICAgICAgIG1fbWVtb3J5U3RvcmUt
PnVwZGF0ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9KTsKLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+
cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOwotICAgIH0pOwotfQotCi12b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzU3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBz
dWJGcmFtZUhvc3QsIFN0cmluZyYmIHRvcEZyYW1lSG9zdCwgdWludDY0X3QgZnJhbWVJRCwgdWlu
dDY0X3QgcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChib29sKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKLXsKLSAgICBBU1NFUlQoc3ViRnJhbWVIb3N0ICE9IHRvcEZyYW1lSG9zdCk7Ci0g
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHBvc3RUYXNrKFt0aGlzLCBzdWJG
cmFtZVByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4oc3ViRnJhbWVIb3N0KSwg
dG9wRnJhbWVQcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHRvcEZyYW1lSG9z
dCksIGZyYW1lSUQsIHBhZ2VJRCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkgewot
ICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoZmFsc2UpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+aGFzU3RvcmFnZUFjY2VzcyhzdWJGcmFt
ZVByaW1hcnlEb21haW4sIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgZnJhbWVJRCwgcGFnZUlELCBb
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYm9vbCBoYXNT
dG9yYWdlQWNjZXNzKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGhhc1N0b3JhZ2VBY2Nl
c3NdICgpIG11dGFibGUgewotICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGhhc1N0
b3JhZ2VBY2Nlc3MpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQot
Ci12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2FsbEhhc1N0b3JhZ2VBY2Nl
c3NGb3JGcmFtZUhhbmRsZXIoY29uc3QgU3RyaW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3QgU3Ry
aW5nJiBmaXJzdFBhcnR5RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBoYXNBY2Nlc3MpPiYmIGNhbGxiYWNrKQotewot
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9B
RF9TVEFUSVNUSUNTKQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgbV93
ZWJzaXRlRGF0YVN0b3JlLT5oYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyKHJlc291cmNl
RG9tYWluLCBmaXJzdFBhcnR5RG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIFdURk1vdmUoY2FsbGJh
Y2spKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotICAgIGNhbGxiYWNrKGZhbHNl
KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlcXVlc3RTdG9y
YWdlQWNjZXNzKFN0cmluZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJhbWVIb3N0LCB1
aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgcHJvbXB0RW5hYmxlZCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVzKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKLXsKLSAgICBBU1NFUlQoc3ViRnJhbWVIb3N0ICE9IHRvcEZyYW1lSG9zdCk7Ci0gICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gc3ViRnJhbWVQcmltYXJ5RG9t
YWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHN1YkZyYW1lSG9zdCk7Ci0gICAgYXV0byB0b3BG
cmFtZVByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odG9wRnJhbWVIb3N0KTsK
LSAgICBpZiAoc3ViRnJhbWVQcmltYXJ5RG9tYWluID09IHRvcEZyYW1lUHJpbWFyeURvbWFpbikg
ewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpIYXNBY2Nl
c3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcG9zdFRhc2soW3RoaXMsIHN1YkZy
YW1lUHJpbWFyeURvbWFpbiA9IGNyb3NzVGhyZWFkQ29weShzdWJGcmFtZVByaW1hcnlEb21haW4p
LCB0b3BGcmFtZVByaW1hcnlEb21haW4gPSBjcm9zc1RocmVhZENvcHkodG9wRnJhbWVQcmltYXJ5
RG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCBwcm9tcHRFbmFibGVkLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgaWYg
KCFtX21lbW9yeVN0b3JlKSB7Ci0gICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpDYW5ub3RS
ZXF1ZXN0QWNjZXNzKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+cmVxdWVzdFN0b3JhZ2VBY2Nlc3MoV1RG
TW92ZShzdWJGcmFtZVByaW1hcnlEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1lUHJpbWFyeURvbWFp
biksIGZyYW1lSUQsIHBhZ2VJRCwgcHJvbXB0RW5hYmxlZCwgW2NvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFN0b3JhZ2VBY2Nlc3NTdGF0dXMgc3RhdHVzKSBt
dXRhYmxlIHsKLSAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN0YXR1c10gKCkgbXV0YWJsZSB7Ci0gICAgICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoc3RhdHVzKTsKLSAgICAgICAgICAgIH0pOwotICAg
ICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoU3RyaW5nJiYgcHJpbWFyeURvbWFp
bkluTmVlZE9mU3RvcmFnZUFjY2VzcywgdWludDY0X3Qgb3BlbmVyUGFnZUlELCBTdHJpbmcmJiBv
cGVuZXJQcmltYXJ5RG9tYWluKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0K
LSAgICAvLyBJdCBpcyBzYWZlIHRvIG1vdmUgdGhlIHN0cmluZ3MgdG8gdGhlIGJhY2tncm91bmQg
cXVldWUgd2l0aG91dCBpc29sYXRlZCBjb3B5IGhlcmUgYmVjYXVzZSB0aGV5IGFyZSByLXZhbHVl
IHJlZmVyZW5jZXMKLSAgICAvLyBjb21pbmcgZnJvbSBJUEMuIFN0cmluZ3Mgd2hpY2ggYXJlIHNh
ZmUgdG8gbW92ZSB0byBvdGhlciB0aHJlYWRzIGFzIGxvbmcgYXMgbm9ib2R5IG9uIHRoaXMgdGhy
ZWFkIGhvbGRzIGEgcmVmZXJlbmNlCi0gICAgLy8gdG8gdGhvc2Ugc3RyaW5ncy4KLSAgICBwb3N0
VGFzayhbdGhpcywgcHJpbWFyeURvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdURk1vdmUo
cHJpbWFyeURvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyksIG9wZW5lclBhZ2VJRCwgb3BlbmVy
UHJpbWFyeURvbWFpbiA9IFdURk1vdmUob3BlbmVyUHJpbWFyeURvbWFpbildKCkgbXV0YWJsZSB7
Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+
cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihXVEZNb3ZlKHByaW1hcnlEb21haW5Jbk5l
ZWRPZlN0b3JhZ2VBY2Nlc3MpLCBvcGVuZXJQYWdlSUQsIFdURk1vdmUob3BlbmVyUHJpbWFyeURv
bWFpbikpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKFN0cmluZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9w
RnJhbWVIb3N0LCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldh
c1Byb21wdGVkTm93LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgcG9zdFRhc2so
W3RoaXMsIHN1YkZyYW1lSG9zdCA9IGNyb3NzVGhyZWFkQ29weShzdWJGcmFtZUhvc3QpLCB0b3BG
cmFtZUhvc3QgPSBjcm9zc1RocmVhZENvcHkodG9wRnJhbWVIb3N0KSwgZnJhbWVJRCwgcGFnZUlE
LCB1c2VyV2FzUHJvbXB0ZWROb3csIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpIHsK
LSAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKGZhbHNlKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+Z3JhbnRTdG9yYWdlQWNjZXNzKFdU
Rk1vdmUoc3ViRnJhbWVIb3N0KSwgV1RGTW92ZSh0b3BGcmFtZUhvc3QpLCBmcmFtZUlELCBwYWdl
SUQsIHVzZXJXYXNQcm9tcHRlZE5vdywgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKGJvb2wgd2FzR3JhbnRlZEFjY2VzcykgbXV0YWJsZSB7Ci0gICAgICAg
ICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpLCB3YXNHcmFudGVkQWNjZXNzXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcih3YXNHcmFudGVkQWNjZXNzKTsKLSAgICAgICAgICAgIH0pOwot
ICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OmNhbGxHcmFudFN0b3JhZ2VBY2Nlc3NIYW5kbGVyKGNvbnN0IFN0cmluZyYgc3ViRnJh
bWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgT3B0
aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4mJiBjYWxsYmFjaykKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwotCi0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBpZiAobV93
ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+Z3JhbnRTdG9y
YWdlQWNjZXNzSGFuZGxlcihzdWJGcmFtZVByaW1hcnlEb21haW4sIHRvcEZyYW1lUHJpbWFyeURv
bWFpbiwgZnJhbWVJRCwgcGFnZUlELCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0jZW5kaWYKLSAgICBjYWxsYmFjayhmYWxzZSk7Ci19Ci0KLXZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpCi17Ci0g
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHBvc3RUYXNrKFt0aGlzXSB7Ci0g
ICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
bV9tZW1vcnlTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICB9KTsKLX0KLQot
dm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZUFsbFN0b3JhZ2VBY2Nl
c3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIG1fd2Vic2l0
ZURhdGFTdG9yZS0+cmVtb3ZlQWxsU3RvcmFnZUFjY2Vzc0hhbmRsZXIoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgIGVsc2UKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSNl
bHNlCi0gICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YXBwbGljYXRpb25XaWxsVGVybWluYXRlKCkKLXsKLSAg
ICBmbHVzaEFuZERlc3Ryb3lQZXJzaXN0ZW50U3RvcmUoKTsKLX0KLQotdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBlcmZvcm1EYWlseVRhc2tzKCkKLXsKLSAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgcG9zdFRhc2soW3RoaXNdIHsKLSAgICAgICAgaWYg
KCFtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fbWVtb3J5
U3RvcmUtPmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAg
IG1fbWVtb3J5U3RvcmUtPmNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpOwotICAgIH0pOwot
fQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3VibWl0VGVsZW1ldHJ5
KCkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgcG9zdFRhc2soW3Ro
aXNdIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpjYWxjdWxhdGVBbmRTdWJtaXQoKm1fbWVtb3J5U3Rv
cmUpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFdlYkZyYW1lUHJveHkmIGZyYW1lLCBjb25zdCBVUkwm
IHBhZ2VVUkwsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3Qg
VVJMJiByZWRpcmVjdFVSTCkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgYXV0byBzb3VyY2VVUkwgPSByZWRpcmVjdFVSTDsKLSAgICBib29sIGlzUmVkaXJlY3QgPSAh
cmVkaXJlY3RVUkwuaXNOdWxsKCk7Ci0gICAgaWYgKCFpc1JlZGlyZWN0KSB7Ci0gICAgICAgIHNv
dXJjZVVSTCA9IGZyYW1lLnVybCgpOwotICAgICAgICBpZiAoc291cmNlVVJMLmlzTnVsbCgpKQot
ICAgICAgICAgICAgc291cmNlVVJMID0gcGFnZVVSTDsKLSAgICB9Ci0KLSAgICBhdXRvJiB0YXJn
ZXRVUkwgPSByZXF1ZXN0LnVybCgpOwotCi0gICAgaWYgKCF0YXJnZXRVUkwuaXNWYWxpZCgpIHx8
ICFwYWdlVVJMLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byB0YXJnZXRI
b3N0ID0gdGFyZ2V0VVJMLmhvc3QoKTsKLSAgICBhdXRvIG1haW5GcmFtZUhvc3QgPSBwYWdlVVJM
Lmhvc3QoKTsKLQotICAgIGlmICh0YXJnZXRIb3N0LmlzRW1wdHkoKSB8fCBtYWluRnJhbWVIb3N0
LmlzRW1wdHkoKSB8fCB0YXJnZXRIb3N0ID09IHNvdXJjZVVSTC5ob3N0KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8gdGFyZ2V0UHJpbWFyeURvbWFpbiA9IFJlc291cmNlTG9hZFN0YXRp
c3RpY3M6OnByaW1hcnlEb21haW4odGFyZ2V0VVJMKTsKLSAgICBhdXRvIG1haW5GcmFtZVByaW1h
cnlEb21haW4gPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpwcmltYXJ5RG9tYWluKHBhZ2VVUkwp
OwotICAgIGF1dG8gc291cmNlUHJpbWFyeURvbWFpbiA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3M6
OnByaW1hcnlEb21haW4oc291cmNlVVJMKTsKLQotICAgIHBvc3RUYXNrKFt0aGlzLCB0YXJnZXRQ
cmltYXJ5RG9tYWluID0gdGFyZ2V0UHJpbWFyeURvbWFpbi5pc29sYXRlZENvcHkoKSwgbWFpbkZy
YW1lUHJpbWFyeURvbWFpbiA9IG1haW5GcmFtZVByaW1hcnlEb21haW4uaXNvbGF0ZWRDb3B5KCks
IHNvdXJjZVByaW1hcnlEb21haW4gPSBzb3VyY2VQcmltYXJ5RG9tYWluLmlzb2xhdGVkQ29weSgp
LCB0YXJnZXRIb3N0ID0gdGFyZ2V0SG9zdC50b1N0cmluZygpLmlzb2xhdGVkQ29weSgpLCBtYWlu
RnJhbWVIb3N0ID0gbWFpbkZyYW1lSG9zdC50b1N0cmluZygpLmlzb2xhdGVkQ29weSgpLCBpc1Jl
ZGlyZWN0LCBpc01haW5GcmFtZSA9IGZyYW1lLmlzTWFpbkZyYW1lKCldIHsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+bG9n
RnJhbWVOYXZpZ2F0aW9uKHRhcmdldFByaW1hcnlEb21haW4sIG1haW5GcmFtZVByaW1hcnlEb21h
aW4sIHNvdXJjZVByaW1hcnlEb21haW4sIHRhcmdldEhvc3QsIG1haW5GcmFtZUhvc3QsIGlzUmVk
aXJlY3QsIGlzTWFpbkZyYW1lKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAodXJsLnByb3RvY29sSXNBYm91dCgpIHx8IHVy
bC5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5RG9tYWluID0gaXNvbGF0
ZWRQcmltYXJ5RG9tYWluKHVybCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAg
ICAgICAgICAgbV9tZW1vcnlTdG9yZS0+bG9nVXNlckludGVyYWN0aW9uKHByaW1hcnlEb21haW4p
OwotICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyVXNl
ckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQot
ICAgIGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkgfHwgdXJsLmlzRW1wdHkoKSkgewotICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcG9z
dFRhc2soW3RoaXMsIHByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odXJsKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3Jl
LT5jbGVhclVzZXJJbnRlcmFjdGlvbihwcmltYXJ5RG9tYWluKTsKLSAgICAgICAgcG9zdFRhc2tS
ZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAodXJsLnBy
b3RvY29sSXNBYm91dCgpIHx8IHVybC5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcG9zdFRhc2soW3Ro
aXMsIHByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odXJsKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAg
ICAgIGJvb2wgaGFkVXNlckludGVyYWN0aW9uID0gbV9tZW1vcnlTdG9yZSA/IG1fbWVtb3J5U3Rv
cmUtPmhhc0hhZFVzZXJJbnRlcmFjdGlvbihwcmltYXJ5RG9tYWluKSA6IGZhbHNlOwotICAgICAg
ICBwb3N0VGFza1JlcGx5KFtoYWRVc2VySW50ZXJhY3Rpb24sIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoaGFkVXNlckludGVyYWN0aW9uKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7
Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRMYXN0U2Vlbihj
b25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkgfHwgdXJsLmlzRW1wdHkoKSkgewotICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
cG9zdFRhc2soW3RoaXMsIHByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odXJs
KSwgc2Vjb25kcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBt
X21lbW9yeVN0b3JlLT5zZXRMYXN0U2VlbihwcmltYXJ5RG9tYWluLCBzZWNvbmRzKTsKLSAgICAg
ICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfSk7Ci19
Ci0gICAgCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50
UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
aWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwb3N0VGFz
ayhbdGhpcywgcHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih1cmwpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewot
ICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNl
dFByZXZhbGVudFJlc291cmNlKHByaW1hcnlEb21haW4pOwotICAgICAgICBwb3N0VGFza1JlcGx5
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQot
ewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAodXJsLnByb3RvY29s
SXNBYm91dCgpIHx8IHVybC5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5
RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHVybCksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21l
bW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0VmVyeVByZXZhbGVudFJl
c291cmNlKHByaW1hcnlEb21haW4pOwotICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICB9KTsKLX0KLSAgICAKLXZvaWQgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAg
ICAgIFN0cmluZyByZXN1bHQgPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+ZHVtcFJl
c291cmNlTG9hZFN0YXRpc3RpY3MoKSA6IGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHBvc3RUYXNr
UmVwbHkoW3Jlc3VsdCA9IHJlc3VsdC5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihyZXN1bHQpOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKGJvb2wpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAodXJs
LnByb3RvY29sSXNBYm91dCgpIHx8IHVybC5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcG9zdFRhc2so
W3RoaXMsIHByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odXJsKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0g
ICAgICAgIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZSA9IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9y
eVN0b3JlLT5pc1ByZXZhbGVudFJlc291cmNlKHByaW1hcnlEb21haW4pIDogZmFsc2U7Ci0gICAg
ICAgIHBvc3RUYXNrUmVwbHkoW2lzUHJldmFsZW50UmVzb3VyY2UsIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoaXNQcmV2YWxlbnRSZXNvdXJjZSk7Ci0gICAgICAgIH0pOwotICAg
IH0pOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNWZXJ5UHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKLQotICAgIGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkgfHwgdXJsLmlzRW1wdHkoKSkgewot
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgCi0gICAgcG9zdFRhc2soW3RoaXMsIHByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1h
cnlEb21haW4odXJsKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIGJvb2wgaXNWZXJ5UHJldmFsZW50UmVzb3VyY2Ug
PSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2Uo
cHJpbWFyeURvbWFpbikgOiBmYWxzZTsKLSAgICAgICAgcG9zdFRhc2tSZXBseShbaXNWZXJ5UHJl
dmFsZW50UmVzb3VyY2UsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildICgpIG11dGFibGUgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaXNWZXJ5
UHJldmFsZW50UmVzb3VyY2UpOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRl
cihjb25zdCBVUkwmIHN1YnJlc291cmNlLCBjb25zdCBVUkwmIHRvcEZyYW1lLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7Ci0gICAgCi0gICAgcG9zdFRhc2soW3RoaXMsIHN1YnJlc291cmNl
UHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbihzdWJyZXNvdXJjZSksIHRvcEZy
YW1lUHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih0b3BGcmFtZSksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewot
ICAgICAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciA9IG1fbWVtb3J5U3Rv
cmUgPyBtX21lbW9yeVN0b3JlLT5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoc3VicmVz
b3VyY2VQcmltYXJ5RG9tYWluLCB0b3BGcmFtZVByaW1hcnlEb21haW4pIDogZmFsc2U7Ci0gICAg
ICAgIHBvc3RUYXNrUmVwbHkoW2lzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0g
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIpOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBVUkwmIHN1YkZy
YW1lLCBjb25zdCBVUkwmIHRvcEZyYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChib29sKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwot
Ci0gICAgcG9zdFRhc2soW3RoaXMsIHN1YkZyYW1lUHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJp
bWFyeURvbWFpbihzdWJGcmFtZSksIHRvcEZyYW1lUHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJp
bWFyeURvbWFpbih0b3BGcmFtZSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3Vi
RnJhbWVVbmRlciA9IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc1JlZ2lzdGVyZWRB
c1N1YkZyYW1lVW5kZXIoc3ViRnJhbWVQcmltYXJ5RG9tYWluLCB0b3BGcmFtZVByaW1hcnlEb21h
aW4pIDogZmFsc2U7Ci0gICAgICAgIHBvc3RUYXNrUmVwbHkoW2lzUmVnaXN0ZXJlZEFzU3ViRnJh
bWVVbmRlciwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0g
KCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihpc1JlZ2lzdGVyZWRB
c1N1YkZyYW1lVW5kZXIpOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25z
dCBVUkwmIGhvc3RSZWRpcmVjdGVkRnJvbSwgY29uc3QgVVJMJiBob3N0UmVkaXJlY3RlZFRvLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkIChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgcG9zdFRhc2soW3RoaXMsIGhvc3RS
ZWRpcmVjdGVkRnJvbVByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4oaG9zdFJl
ZGlyZWN0ZWRGcm9tKSwgaG9zdFJlZGlyZWN0ZWRUb1ByaW1hcnlEb21haW4gPSBpc29sYXRlZFBy
aW1hcnlEb21haW4oaG9zdFJlZGlyZWN0ZWRUbyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBib29sIGlzUmVnaXN0
ZXJlZEFzUmVkaXJlY3RpbmdUbyA9IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc1Jl
Z2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oaG9zdFJlZGlyZWN0ZWRGcm9tUHJpbWFyeURvbWFpbiwg
aG9zdFJlZGlyZWN0ZWRUb1ByaW1hcnlEb21haW4pIDogZmFsc2U7Ci0gICAgICAgIHBvc3RUYXNr
UmVwbHkoW2lzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbywgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8pOwotICAgICAgICB9KTsK
LSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFy
UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgaWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBwb3N0VGFzayhbdGhpcywgcHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih1
cmwpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5
U3RvcmUtPmNsZWFyUHJldmFsZW50UmVzb3VyY2UocHJpbWFyeURvbWFpbik7Ci0gICAgICAgIHBv
c3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0pOwotfQotCi12
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25z
dCBVUkwmIHVybCwgYm9vbCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgaWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBwb3N0VGFzayhbdGhpcywgcHJpbWFyeURvbWFpbiA9IGlzb2xh
dGVkUHJpbWFyeURvbWFpbih1cmwpLCB2YWx1ZV0gewotICAgICAgICBpZiAobV9tZW1vcnlTdG9y
ZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldEdyYW5kZmF0aGVyZWQocHJpbWFyeURv
bWFpbiwgdmFsdWUpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkIChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwotCi0gICAgaWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBwcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5
RG9tYWluKHVybCldICgpIG11dGFibGUgewotICAgICAgICBib29sIGlzR3JhbmRGYXRoZXJlZCA9
IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc0dyYW5kZmF0aGVyZWQocHJpbWFyeURv
bWFpbikgOiBmYWxzZTsKLSAgICAgICAgcG9zdFRhc2tSZXBseShbaXNHcmFuZEZhdGhlcmVkLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGlzR3JhbmRGYXRoZXJlZCk7Ci0gICAg
ICAgIH0pOwotICAgIH0pOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0IFVSTCYgc3ViZnJhbWUsIGNv
bnN0IFVSTCYgdG9wRnJhbWUpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQot
ICAgIGlmIChzdWJmcmFtZS5wcm90b2NvbElzQWJvdXQoKSB8fCBzdWJmcmFtZS5pc0VtcHR5KCkg
fHwgdG9wRnJhbWUucHJvdG9jb2xJc0Fib3V0KCkgfHwgdG9wRnJhbWUuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBwb3N0VGFzayhbdGhpcywgcHJpbWFyeVRvcEZyYW1lRG9tYWlu
ID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHRvcEZyYW1lKSwgcHJpbWFyeVN1YkZyYW1lRG9tYWlu
ID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHN1YmZyYW1lKV0gewotICAgICAgICBpZiAobV9tZW1v
cnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFN1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbihwcmltYXJ5U3ViRnJhbWVEb21haW4sIHByaW1hcnlUb3BGcmFtZURvbWFpbik7
Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRT
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgVVJMJiBzdWJyZXNvdXJjZSwgY29u
c3QgVVJMJiB0b3BGcmFtZSkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgaWYgKHN1YnJlc291cmNlLnByb3RvY29sSXNBYm91dCgpIHx8IHN1YnJlc291cmNlLmlzRW1w
dHkoKSB8fCB0b3BGcmFtZS5wcm90b2NvbElzQWJvdXQoKSB8fCB0b3BGcmFtZS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5VG9wRnJhbWVE
b21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odG9wRnJhbWUpLCBwcmltYXJ5U3VicmVzb3Vy
Y2VEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4oc3VicmVzb3VyY2UpXSB7Ci0gICAgICAg
IGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0U3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbiwgcHJpbWFy
eVRvcEZyYW1lRG9tYWluKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHN1
YnJlc291cmNlLCBjb25zdCBVUkwmIGhvc3ROYW1lUmVkaXJlY3RlZFRvKQotewotICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoc3VicmVzb3VyY2UucHJvdG9jb2xJc0Fi
b3V0KCkgfHwgc3VicmVzb3VyY2UuaXNFbXB0eSgpIHx8IGhvc3ROYW1lUmVkaXJlY3RlZFRvLnBy
b3RvY29sSXNBYm91dCgpIHx8IGhvc3ROYW1lUmVkaXJlY3RlZFRvLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgcG9zdFRhc2soW3RoaXMsIHByaW1hcnlSZWRpcmVjdERvbWFpbiA9
IGlzb2xhdGVkUHJpbWFyeURvbWFpbihob3N0TmFtZVJlZGlyZWN0ZWRUbyksIHByaW1hcnlTdWJy
ZXNvdXJjZURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbihzdWJyZXNvdXJjZSldIHsKLSAg
ICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJpbWFyeVN1YnJlc291cmNlRG9tYWluLCBwcmlt
YXJ5UmVkaXJlY3REb21haW4pOwotICAgIH0pOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJM
JiBzdWJyZXNvdXJjZSwgY29uc3QgVVJMJiBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tKQotewotICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoc3VicmVzb3VyY2UucHJvdG9j
b2xJc0Fib3V0KCkgfHwgc3VicmVzb3VyY2UuaXNFbXB0eSgpIHx8IGhvc3ROYW1lUmVkaXJlY3Rl
ZEZyb20ucHJvdG9jb2xJc0Fib3V0KCkgfHwgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBwb3N0VGFzayhbdGhpcywgcHJpbWFyeVJl
ZGlyZWN0RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKGhvc3ROYW1lUmVkaXJlY3RlZEZy
b20pLCBwcmltYXJ5U3VicmVzb3VyY2VEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4oc3Vi
cmVzb3VyY2UpXSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9t
ZW1vcnlTdG9yZS0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20ocHJpbWFyeVN1YnJl
c291cmNlRG9tYWluLCBwcmltYXJ5UmVkaXJlY3REb21haW4pOwotICAgIH0pOwotfQotCi12b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVIb3N0TmFtZSwgY29uc3QgVVJMJiBob3N0TmFtZVJlZGly
ZWN0ZWRUbykKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKHRv
cEZyYW1lSG9zdE5hbWUucHJvdG9jb2xJc0Fib3V0KCkgfHwgdG9wRnJhbWVIb3N0TmFtZS5pc0Vt
cHR5KCkgfHwgaG9zdE5hbWVSZWRpcmVjdGVkVG8ucHJvdG9jb2xJc0Fib3V0KCkgfHwgaG9zdE5h
bWVSZWRpcmVjdGVkVG8uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgcG9z
dFRhc2soW3RoaXMsIHByaW1hcnlSZWRpcmVjdERvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFp
bihob3N0TmFtZVJlZGlyZWN0ZWRUbyksIHRvcEZyYW1lUHJpbWFyeURvbWFpbiA9IGlzb2xhdGVk
UHJpbWFyeURvbWFpbih0b3BGcmFtZUhvc3ROYW1lKV0gewotICAgICAgICBpZiAobV9tZW1vcnlT
dG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RUbyh0b3BGcmFtZVByaW1hcnlEb21haW4sIHByaW1hcnlSZWRpcmVjdERvbWFpbik7Ci0gICAg
fSk7Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZyYW1lSG9zdE5hbWUsIGNvbnN0IFVS
TCYgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwotCi0gICAgaWYgKHRvcEZyYW1lSG9zdE5hbWUucHJvdG9jb2xJc0Fib3V0KCkgfHwgdG9w
RnJhbWVIb3N0TmFtZS5pc0VtcHR5KCkgfHwgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbS5wcm90b2Nv
bElzQWJvdXQoKSB8fCBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5UmVkaXJlY3REb21haW4g
PSBpc29sYXRlZFByaW1hcnlEb21haW4oaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSksIHRvcEZyYW1l
UHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih0b3BGcmFtZUhvc3ROYW1lKV0g
ewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUt
PnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgcHJp
bWFyeVJlZGlyZWN0RG9tYWluKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIC8vIEhlbHBlciBmdW5j
dGlvbiB1c2VkIGJ5IHRlc3Rpbmcgc3lzdGVtLiBTaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSB0
aGUgbWFpbiB0aHJlYWQuCi0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHBv
c3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFtX21lbW9yeVN0b3JlKSB7Ci0gICAgICAg
ICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtX21lbW9yeVN0b3JlLT51cGRhdGVDb29r
aWVCbG9ja2luZyhbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlRm9yRG9t
YWlucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvQmxvY2ssIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gdXNlZCBieSB0ZXN0aW5nIHN5c3RlbS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhl
IG1haW4gdGhyZWFkLgotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgcG9zdFRh
c2soW3RoaXMsIGRvbWFpbnNUb0Jsb2NrID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Jsb2Nr
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0
YWJsZSB7Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkgewotICAgICAgICAgICAgcG9zdFRh
c2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICBtX21lbW9yeVN0b3JlLT51cGRhdGVDb29raWVCbG9ja2lu
Z0ZvckRvbWFpbnMoZG9tYWluc1RvQmxvY2ssIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICAgICAgcG9zdFRhc2tSZXBs
eShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQot
Ci12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckJsb2Nr
aW5nU3RhdGVGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgLy8gSGVscGVy
IGZ1bmN0aW9uIHVzZWQgYnkgdGVzdGluZyBzeXN0ZW0uIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBm
cm9tIHRoZSBtYWluIHRocmVhZC4KLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAg
IHBvc3RUYXNrKFt0aGlzLCBkb21haW5zID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnMpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsK
LSAgICAgICAgaWYgKCFtX21lbW9yeVN0b3JlKSB7Ci0gICAgICAgICAgICBwb3N0VGFza1JlcGx5
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIG1fbWVtb3J5U3RvcmUtPmNsZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFp
bnMoZG9tYWlucywgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50
KFNob3VsZEdyYW5kZmF0aGVyIHNob3VsZEdyYW5kZmF0aGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKLSAgICBwb3N0VGFzayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
LCBzaG91bGRHcmFuZGZhdGhlciwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX3BlcnNpc3RlbnRTdG9yYWdl
KQotICAgICAgICAgICAgbV9wZXJzaXN0ZW50U3RvcmFnZS0+Y2xlYXIoKTsKLQotICAgICAgICBD
b21wbGV0aW9uSGFuZGxlckNhbGxpbmdTY29wZSBjb21wbGV0aW9uSGFuZGxlckNhbGxlcihbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
LSAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgICAgICB9KTsKLQotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkgewotICAgICAgICAgICAg
bV9tZW1vcnlTdG9yZS0+Y2xlYXIoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBwcm90ZWN0ZWRUaGlz
LmNvcHlSZWYoKSwgc2hvdWxkR3JhbmRmYXRoZXIsIGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlckNhbGxlcildICgpIG11dGFibGUgewotICAgICAgICAg
ICAgICAgIGlmIChzaG91bGRHcmFuZGZhdGhlciA9PSBTaG91bGRHcmFuZGZhdGhlcjo6WWVzKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgICAg
ICAgICAgICAgbV9tZW1vcnlTdG9yZS0+Z3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKGNv
bXBsZXRpb25IYW5kbGVyQ2FsbGVyLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0YXRp
c3RpY3MsICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1l
bW9yeUFuZFBlcnNpc3RlbnQgQWZ0ZXIgYmVpbmcgY2xlYXJlZCwgbV9tZW1vcnlTdG9yZSBpcyBu
dWxsIHdoZW4gdHJ5aW5nIHRvIGdyYW5kZmF0aGVyIGRhdGEuIik7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoc2hv
dWxkR3JhbmRmYXRoZXIgPT0gU2hvdWxkR3JhbmRmYXRoZXI6OlllcykKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50IEJlZm9yZSBi
ZWluZyBjbGVhcmVkLCBtX21lbW9yeVN0b3JlIGlzIG51bGwgd2hlbiB0cnlpbmcgdG8gZ3JhbmRm
YXRoZXIgZGF0YS4iKTsKLSAgICAgICAgfQotICAgIH0pOwotfQotCi12b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChX
YWxsVGltZSBtb2RpZmllZFNpbmNlLCBTaG91bGRHcmFuZGZhdGhlciBzaG91bGRHcmFuZGZhdGhl
ciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQotewotICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICAvLyBGb3Igbm93LCBiZSBjb25zZXJ2YXRpdmUgYW5k
IGNsZWFyIGV2ZXJ5dGhpbmcgcmVnYXJkbGVzcyBvZiBtb2RpZmllZFNpbmNlLgotICAgIFVOVVNF
RF9QQVJBTShtb2RpZmllZFNpbmNlKTsKLSAgICBzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJz
aXN0ZW50KHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci19Ci0KLXZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0
aW9uKFNlY29uZHMgc2Vjb25kcykKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwot
ICAgIHBvc3RUYXNrKFt0aGlzLCBzZWNvbmRzXSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3Jl
KQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlv
bihzZWNvbmRzKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNl
Y29uZHMpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBwb3N0VGFzayhb
dGhpcywgc2Vjb25kc10gewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAg
IG1fbWVtb3J5U3RvcmUtPnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChz
ZWNvbmRzKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMpCi17Ci0gICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBwb3N0VGFzayhbdGhpcywgc2Vjb25kc10gewotICAg
ICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldEdy
YW5kZmF0aGVyaW5nVGltZShzZWNvbmRzKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwKFNlY29uZHMgc2Vjb25kcywg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKLSAg
ICAKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIGlmIChtX3dlYnNp
dGVEYXRhU3RvcmUpIHsKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5zZXRDYWNoZU1heEFn
ZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhzZWNvbmRzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2FsbFVw
ZGF0ZVByZXZhbGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0ZvckhhbmRsZXIoY29uc3QgVmVjdG9y
PFN0cmluZz4mIGRvbWFpbnNUb0Jsb2NrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotI2lm
IEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFT
dG9yZSkgewotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPnVwZGF0ZVByZXZhbGVudERvbWFp
bnNUb0Jsb2NrQ29va2llc0Zvcihkb21haW5zVG9CbG9jaywgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0gICAgY29tcGxldGlvbkhh
bmRsZXIoKTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNhbGxS
ZW1vdmVEb21haW5zSGFuZGxlcihjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlucykKLXsKLSAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBtX3dlYnNp
dGVEYXRhU3RvcmUtPnJlbW92ZVByZXZhbGVudERvbWFpbnMoZG9tYWlucyk7Ci0jZW5kaWYKLX0K
LSAgICAKLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNYXhTdGF0aXN0
aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQpCi17Ci0gICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKLSAgICBwb3N0VGFzayhbdGhpcywgbWF4aW11bUVudHJ5Q291bnRdIHsK
LSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5z
ZXRNYXhTdGF0aXN0aWNzRW50cmllcyhtYXhpbXVtRW50cnlDb3VudCk7Ci0gICAgfSk7Ci19Ci0g
ICAgCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRyaWVz
RG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50KQotewotICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7Ci0KLSAgICBwb3N0VGFzayhbdGhpcywgcHJ1bmVUYXJnZXRDb3VudF0gewotICAg
ICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFBy
dW5lRW50cmllc0Rvd25UbyhwcnVuZVRhcmdldENvdW50KTsKLSAgICB9KTsKLX0KLQotdm9pZCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZh
bHVlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0g
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHBvc3RUYXNrKFt0aGlzLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewot
ICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnJl
c2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcygpOwotCi0gICAgICAgIHBvc3RUYXNrUmVwbHko
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nVGVzdGluZ0V2ZW50KGNvbnN0IFN0cmluZyYgZXZl
bnQpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChtX3N0YXRp
c3RpY3NUZXN0aW5nQ2FsbGJhY2spCi0gICAgICAgIG1fc3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFj
ayhldmVudCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTgxNzA0YTRlZjI5OWRjMDgzZDI3OWY1MzRjNzcy
ODFjZmE3NmI0ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
aAorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJXZWJzaXRlRGF0
YVR5cGUuaCIKLSNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KLSNpbmNsdWRlIDx3
dGYvUnVuTG9vcC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KLSNpbmNsdWRl
IDx3dGYvV2Vha1B0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1l
c3BhY2UgV1RGIHsKLWNsYXNzIFdvcmtRdWV1ZTsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Y2xhc3MgUmVzb3VyY2VSZXF1ZXN0Owotc3RydWN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3M7Ci19
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU7Ci1jbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U7
Ci1jbGFzcyBXZWJGcmFtZVByb3h5OwotY2xhc3MgV2ViUHJvY2Vzc1Byb3h5OwotY2xhc3MgV2Vi
c2l0ZURhdGFTdG9yZTsKLQotZW51bSBjbGFzcyBTdG9yYWdlQWNjZXNzU3RhdHVzIHsKLSAgICBD
YW5ub3RSZXF1ZXN0QWNjZXNzLAotICAgIFJlcXVpcmVzVXNlclByb21wdCwKLSAgICBIYXNBY2Nl
c3MKLX07Ci0KLWNsYXNzIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSBmaW5hbCA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUs
IFdURjo6RGVzdHJ1Y3Rpb25UaHJlYWQ6Ok1haW4+LCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2
ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlPiBjcmVhdGUoV2Vic2l0ZURhdGFTdG9yZSYgd2Vic2l0ZURhdGFTdG9yZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZSh3ZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgfQotCi0gICAgfldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZSgpOwotCi0gICAgc3RhdGljIGNvbnN0IE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+JiBtb25pdG9yZWREYXRhVHlwZXMoKTsKLQotICAgIFdvcmtRdWV1ZSYgc3RhdGlzdGljc1F1
ZXVlKCkgeyByZXR1cm4gbV9zdGF0aXN0aWNzUXVldWUuZ2V0KCk7IH0KLQotICAgIHZvaWQgc2V0
Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sKTsKLSAgICB2b2lkIHNl
dFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wpOwot
ICAgIHZvaWQgc2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KGJvb2wpOwotCi0gICAgdm9pZCBoYXNT
dG9yYWdlQWNjZXNzKFN0cmluZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJhbWVIb3N0
LCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYgY2FsbGJhY2spOwotICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3MoU3Ry
aW5nJiYgc3ViRnJhbWVIb3N0LCBTdHJpbmcmJiB0b3BGcmFtZUhvc3QsIHVpbnQ2NF90IGZyYW1l
SUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCBwcm9tcHRFbmFibGVkLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmKTsKLSAgICB2b2lkIGdyYW50U3RvcmFnZUFj
Y2VzcyhTdHJpbmcmJiBzdWJGcmFtZUhvc3QsIFN0cmluZyYmIHRvcEZyYW1lSG9zdCwgdWludDY0
X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBib29sIHVzZXJXYXNQcm9tcHRlZE5vdywgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7Ci0gICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFj
Y2Vzc0NhbGxiYWNrKGJvb2wgd2FzR3JhbnRlZCwgdWludDY0X3QgY29udGV4dElkKTsKLQotICAg
IHZvaWQgYXBwbGljYXRpb25XaWxsVGVybWluYXRlKCk7Ci0KLSAgICB2b2lkIGxvZ0ZyYW1lTmF2
aWdhdGlvbihjb25zdCBXZWJGcmFtZVByb3h5JiwgY29uc3QgVVJMJiBwYWdlVVJMLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBVUkwmIHJlZGlyZWN0VVJMKTsKLSAgICB2
b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYpOwotICAgIHZvaWQgY2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihj
b25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKLSAgICB2b2lkIHNl
dExhc3RTZWVuKGNvbnN0IFVSTCYsIFNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
Jik7Ci0gICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgc2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNv
bnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCBkdW1wUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYp
PiYmKTsKLSAgICB2b2lkIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJik7Ci0gICAgdm9pZCBpc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZShjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKLSAgICB2b2lk
IGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBVUkwmIHN1YnJlc291cmNlLCBj
b25zdCBVUkwmIHRvcEZyYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKLSAg
ICB2b2lkIGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBVUkwmIHN1YkZyYW1lLCBj
b25zdCBVUkwmIHRvcEZyYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKLSAg
ICB2b2lkIGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBVUkwmIGhvc3RSZWRpcmVj
dGVkRnJvbSwgY29uc3QgVVJMJiBob3N0UmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wpPiYmKTsKLSAgICB2b2lkIGNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJM
JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHNldEdyYW5kZmF0aGVy
ZWQoY29uc3QgVVJMJiwgYm9vbCk7Ci0gICAgdm9pZCBpc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJM
JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7Ci0gICAgdm9pZCBzZXRTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgVVJMJiBzdWJmcmFtZSwgY29uc3QgVVJMJiB0b3BG
cmFtZSk7Ci0gICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3Qg
VVJMJiBzdWJyZXNvdXJjZSwgY29uc3QgVVJMJiB0b3BGcmFtZSk7Ci0gICAgdm9pZCBzZXRTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJjZSwgY29uc3QgVVJM
JiBob3N0TmFtZVJlZGlyZWN0ZWRUbyk7Ci0gICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0RnJvbShjb25zdCBVUkwmIHN1YnJlc291cmNlLCBjb25zdCBVUkwmIGhvc3ROYW1lUmVk
aXJlY3RlZEZyb20pOwotICAgIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0
IFVSTCYgdG9wRnJhbWVIb3N0TmFtZSwgY29uc3QgVVJMJiBob3N0TmFtZVJlZGlyZWN0ZWRUbyk7
Ci0gICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZy
YW1lSG9zdE5hbWUsIGNvbnN0IFVSTCYgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSk7Ci0gICAgdm9p
ZCBzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
Jik7Ci0gICAgdm9pZCBzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlRm9yRG9tYWlucyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvQmxvY2ssIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7Ci0gICAgdm9pZCBzY2hlZHVsZUNsZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7
Ci0gICAgdm9pZCBzY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoKTsK
LSAgICB2b2lkIHN1Ym1pdFRlbGVtZXRyeSgpOwotCi0gICAgZW51bSBjbGFzcyBTaG91bGRHcmFu
ZGZhdGhlciB7Ci0gICAgICAgIE5vLAotICAgICAgICBZZXMsCi0gICAgfTsKLSAgICB2b2lkIHNj
aGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQoU2hvdWxkR3JhbmRmYXRoZXIsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCBzY2hlZHVsZUNsZWFySW5NZW1vcnlB
bmRQZXJzaXN0ZW50KFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIFNob3VsZEdyYW5kZmF0aGVyLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotCi0gICAgdm9pZCBzZXRUaW1lVG9MaXZlVXNl
ckludGVyYWN0aW9uKFNlY29uZHMpOwotICAgIHZvaWQgc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0
YVJlY29yZHNSZW1vdmFsKFNlY29uZHMpOwotICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJpbmdUaW1l
KFNlY29uZHMpOwotICAgIHZvaWQgc2V0Q2FjaGVNYXhBZ2VDYXAoU2Vjb25kcywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNp
emVfdCk7Ci0gICAgdm9pZCBzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90KTsKLQotICAgIHZv
aWQgcmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7Ci0KLSAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9v
bCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHNldFByZXZhbGVudFJl
c291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
Jik7Ci0gICAgCi0gICAgdm9pZCBzZXRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKFdURjo6RnVu
Y3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjYWxsYmFjaykgeyBtX3N0YXRpc3RpY3NUZXN0
aW5nQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsgfQotICAgIHZvaWQgbG9nVGVzdGluZ0V2
ZW50KGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgY2FsbEdyYW50U3RvcmFnZUFjY2Vzc0hhbmRs
ZXIoY29uc3QgU3RyaW5nJiBzdWJGcmFtZVByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgdG9w
RnJhbWVQcmltYXJ5RG9tYWluLCBPcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgdWludDY0X3Qg
cGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKLSAgICB2b2lkIHJlbW92
ZUFsbFN0b3JhZ2VBY2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lk
IGNhbGxVcGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3JIYW5kbGVyKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9CbG9jaywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKLSAgICB2b2lkIGNhbGxSZW1vdmVEb21haW5zSGFuZGxlcihjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgZG9tYWlucyk7Ci0gICAgdm9pZCBjYWxsSGFzU3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFu
ZGxlcihjb25zdCBTdHJpbmcmIHJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFy
dHlEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJik7Ci0KLSAgICB2b2lkIGRpZENyZWF0ZU5ldHdvcmtQcm9jZXNz
KCk7Ci0KLSAgICBXZWJzaXRlRGF0YVN0b3JlKiB3ZWJzaXRlRGF0YVN0b3JlKCkgeyByZXR1cm4g
bV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKFdlYnNpdGVEYXRhU3RvcmUmKTsKLQotICAgIHZv
aWQgcG9zdFRhc2soV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYpOwotICAgIHN0YXRpYyB2b2lkIHBv
c3RUYXNrUmVwbHkoV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYpOwotCi0gICAgLy8gSVBDOjpNZXNz
YWdlUmVjZWl2ZXIuCi0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKLQotICAgIC8vIElQQyBtZXNzYWdlIGhhbmRsZXJz
LgotICAgIHZvaWQgcmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQoVmVjdG9yPFdlYkNvcmU6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiYgb3JpZ2lucyk7Ci0gICAgdm9pZCByZXF1ZXN0U3Rv
cmFnZUFjY2Vzc1VuZGVyT3BlbmVyKFN0cmluZyYmIHByaW1hcnlEb21haW5Jbk5lZWRPZlN0b3Jh
Z2VBY2Nlc3MsIHVpbnQ2NF90IG9wZW5lclBhZ2VJRCwgU3RyaW5nJiYgb3BlbmVyUHJpbWFyeURv
bWFpbik7Ci0KLSAgICB2b2lkIHBlcmZvcm1EYWlseVRhc2tzKCk7Ci0KLSAgICBTdG9yYWdlQWNj
ZXNzU3RhdHVzIHN0b3JhZ2VBY2Nlc3NTdGF0dXMoY29uc3QgU3RyaW5nJiBzdWJGcmFtZVByaW1h
cnlEb21haW4sIGNvbnN0IFN0cmluZyYgdG9wRnJhbWVQcmltYXJ5RG9tYWluKTsKLQotICAgIHZv
aWQgZmx1c2hBbmREZXN0cm95UGVyc2lzdGVudFN0b3JlKCk7Ci0KLSAgICBXZWFrUHRyPFdlYnNp
dGVEYXRhU3RvcmU+IG1fd2Vic2l0ZURhdGFTdG9yZTsKLSAgICBSZWY8V29ya1F1ZXVlPiBtX3N0
YXRpc3RpY3NRdWV1ZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlPiBtX21lbW9yeVN0b3JlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U+IG1fcGVyc2lzdGVudFN0b3JhZ2U7Ci0K
LSAgICBSdW5Mb29wOjpUaW1lcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IG1fZGFp
bHlUYXNrc1RpbWVyOwotCi0gICAgYm9vbCBtX2hhc1NjaGVkdWxlZFByb2Nlc3NTdGF0cyB7IGZh
bHNlIH07Ci0KLSAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+IG1fc3RhdGlz
dGljc1Rlc3RpbmdDYWxsYmFjazsKLQotICAgIGJvb2wgbV9maXJzdE5ldHdvcmtQcm9jZXNzQ3Jl
YXRlZCB7IGZhbHNlIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0
cnkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RlbGVtZXRyeS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NjkyZTEyOTEy
YTZjMWMwOThkM2I5ZjYwODA0YWUyZmYzN2RmOWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOTYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgiCi0KLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgotI2luY2x1
ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRGlhZ25vc3RpY0xvZ2dp
bmdLZXlzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg+Ci0j
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
LQotY29uc3QgdW5zaWduZWQgbWluaW11bVByZXZhbGVudFJlc291cmNlc0ZvclRlbGVtZXRyeSA9
IDM7Ci1jb25zdCB1bnNpZ25lZCBzaWduaWZpY2FudEZpZ3VyZXNGb3JMb2dnZWRWYWx1ZXMgPSAz
Owotc3RhdGljIGJvb2wgbm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQgPSBmYWxz
ZTsKLQotc3RydWN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5IHsKLSAgICB1bnNpZ25lZCBu
dW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkOwotICAgIGJvb2wgaGFzSGFkVXNlckludGVy
YWN0aW9uOwotICAgIHVuc2lnbmVkIGRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbjsKLSAgICB1bnNp
Z25lZCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zOwotICAgIHVuc2lnbmVkIHN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnM7Ci0gICAgdW5zaWduZWQgc3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUbzsKLSAgICB1bnNpZ25lZCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9V
c2VySW50ZXJhY3Rpb247Ci0gICAgdW5zaWduZWQgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1
ZVRvU3RvcmFnZUFjY2Vzc0FQSTsKLX07Ci0KLXN0YXRpYyBWZWN0b3I8UHJldmFsZW50UmVzb3Vy
Y2VUZWxlbWV0cnk+IHNvcnRlZFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5KGNvbnN0IFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSYgc3RvcmUpCi17Ci0gICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7Ci0gICAgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiBz
b3J0ZWQ7Ci0gICAgc3RvcmUucHJvY2Vzc1N0YXRpc3RpY3MoWyZzb3J0ZWRdIChhdXRvJiBzdGF0
aXN0aWMpIHsKLSAgICAgICAgaWYgKCFzdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB1bnNpZ25lZCBkYXlzU2luY2VVc2VySW50ZXJh
Y3Rpb24gPSBzdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPD0gV2FsbFRp
bWUoKSA/IDAgOiBzdGQ6OmZsb29yKChXYWxsVGltZTo6bm93KCkgLSBzdGF0aXN0aWMubW9zdFJl
Y2VudFVzZXJJbnRlcmFjdGlvblRpbWUpIC8gMjRfaCk7Ci0gICAgICAgIHNvcnRlZC5hcHBlbmQo
UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkgewotICAgICAgICAgICAgc3RhdGlzdGljLmRhdGFS
ZWNvcmRzUmVtb3ZlZCwKLSAgICAgICAgICAgIHN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24s
Ci0gICAgICAgICAgICBkYXlzU2luY2VVc2VySW50ZXJhY3Rpb24sCi0gICAgICAgICAgICBzdGF0
aXN0aWMuc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucy5zaXplKCksCi0gICAgICAgICAgICBz
dGF0aXN0aWMuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucy5zaXplKCksCi0gICAgICAg
ICAgICBzdGF0aXN0aWMuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5zaXplKCksCi0gICAg
ICAgICAgICBzdGF0aXN0aWMudGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVy
YWN0aW9uLAotICAgICAgICAgICAgc3RhdGlzdGljLnRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlE
dWVUb1N0b3JhZ2VBY2Nlc3NBUEkKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0KLSAgICBpZiAoc29y
dGVkLnNpemUoKSA8IG1pbmltdW1QcmV2YWxlbnRSZXNvdXJjZXNGb3JUZWxlbWV0cnkpCi0gICAg
ICAgIHJldHVybiB7IH07Ci0KLSAgICBzdGQ6OnNvcnQoc29ydGVkLmJlZ2luKCksIHNvcnRlZC5l
bmQoKSwgW10oY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIGEsIGNvbnN0IFByZXZh
bGVudFJlc291cmNlVGVsZW1ldHJ5JiBiKSB7Ci0gICAgICAgIHJldHVybiBhLnN1YmZyYW1lVW5k
ZXJUb3BGcmFtZU9yaWdpbnMgKyBhLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMgKyBh
LnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gPgotICAgICAgICBiLnN1YmZyYW1lVW5kZXJU
b3BGcmFtZU9yaWdpbnMgKyBiLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMgKyBiLnN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG87Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gc29ydGVk
OwotfQotCi1zdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0
aW9uKGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHJlc291cmNlcywg
c2l6ZV90IGJlZ2luLCBzaXplX3QgZW5kKQotewotICAgIGlmIChyZXNvdXJjZXMuaXNFbXB0eSgp
IHx8IHJlc291cmNlcy5zaXplKCkgPCBiZWdpbiArIDEgfHwgcmVzb3VyY2VzLnNpemUoKSA8IGVu
ZCArIDEpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7
Ci0gICAgZm9yIChzaXplX3QgaSA9IGJlZ2luOyBpIDwgZW5kOyArK2kpIHsKLSAgICAgICAgaWYg
KHJlc291cmNlc1tpXS5oYXNIYWRVc2VySW50ZXJhY3Rpb24pCi0gICAgICAgICAgICArK3Jlc3Vs
dDsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSAgICAKLXN0YXRpYyB1bnNp
Z25lZCBtZWRpYW4oY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgdikKLXsKLSAgICBpZiAodi5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICh2LnNpemUoKSA9PSAxKQotICAgICAg
ICByZXR1cm4gdlswXTsKLSAgICAKLSAgICBhdXRvIHNpemUgPSB2LnNpemUoKTsKLSAgICBhdXRv
IG1pZGRsZSA9IHNpemUgLyAyOwotICAgIGlmIChzaXplICUgMikKLSAgICAgICAgcmV0dXJuIHZb
bWlkZGxlXTsKLSAgICByZXR1cm4gKHZbbWlkZGxlIC0gMV0gKyB2W21pZGRsZV0pIC8gMjsKLX0K
LSAgICAKLXN0YXRpYyB1bnNpZ25lZCBtZWRpYW4oY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291
cmNlVGVsZW1ldHJ5PiYgdiwgdW5zaWduZWQgYmVnaW4sIHVuc2lnbmVkIGVuZCwgY29uc3QgV1RG
OjpGdW5jdGlvbjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdGVs
ZW1ldHJ5KT4mIHN0YXRpc3RpY0dldHRlcikKLXsKLSAgICBpZiAodi5pc0VtcHR5KCkgfHwgdi5z
aXplKCkgPCBiZWdpbiArIDEgfHwgdi5zaXplKCkgPCBlbmQgKyAxKQotICAgICAgICByZXR1cm4g
MDsKLSAgICAKLSAgICBWZWN0b3I8dW5zaWduZWQ+IHBhcnQ7Ci0gICAgcGFydC5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KGVuZCAtIGJlZ2luICsgMSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gYmVn
aW47IGkgPD0gZW5kOyArK2kpCi0gICAgICAgIHBhcnQudW5jaGVja2VkQXBwZW5kKHN0YXRpc3Rp
Y0dldHRlcih2W2ldKSk7Ci0gICAgCi0gICAgcmV0dXJuIG1lZGlhbihwYXJ0KTsKLX0KLSAgICAK
LXN0YXRpYyBXZWJQYWdlUHJveHkqIG5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eSgpCi17Ci0gICAg
YXV0byBwcm9jZXNzUG9vbHMgPSBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCk7Ci0g
ICAgaWYgKHByb2Nlc3NQb29scy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIAotICAgIGF1dG8gcHJvY2Vzc1Bvb2wgPSBwcm9jZXNzUG9vbHNbMF07Ci0gICAgaWYgKCFw
cm9jZXNzUG9vbCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgZm9yIChhdXRv
JiB3ZWJQcm9jZXNzIDogcHJvY2Vzc1Bvb2wtPnByb2Nlc3NlcygpKSB7Ci0gICAgICAgIGZvciAo
YXV0byYgcGFnZSA6IHdlYlByb2Nlc3MtPnBhZ2VzKCkpIHsKLSAgICAgICAgICAgIGlmIChwYWdl
LT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgcmV0dXJuIHBhZ2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51
bGxwdHI7Ci19Ci0gICAgCi1zdGF0aWMgdm9pZCBzdWJtaXRUb3BMaXN0KHVuc2lnbmVkIG51bWJl
ck9mUmVzb3VyY2VzRnJvbVRoZVRvcCwgY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVs
ZW1ldHJ5PiYgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCBjb25zdCBWZWN0b3I8UHJldmFsZW50
UmVzb3VyY2VUZWxlbWV0cnk+JiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlcklu
dGVyYWN0aW9uLCBXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKLXsKLSAgICBXVEY6OkZ1bmN0
aW9uPHVuc2lnbmVkKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkp
PiBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zR2V0dGVyID0gW10gKGF1dG8mIHQpIHsKLSAg
ICAgICAgcmV0dXJuIHQuc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luczsKLSAgICB9OwotICAg
IFdURjo6RnVuY3Rpb248dW5zaWduZWQoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkm
IHRlbGVtZXRyeSk+IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNHZXR0ZXIgPSBbXSAo
YXV0byYgdCkgewotICAgICAgICByZXR1cm4gdC5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmln
aW5zOwotICAgIH07Ci0gICAgV1RGOjpGdW5jdGlvbjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRS
ZXNvdXJjZVRlbGVtZXRyeSYgdGVsZW1ldHJ5KT4gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNU
b0dldHRlciA9IFtdIChhdXRvJiB0KSB7Ci0gICAgICAgIHJldHVybiB0LnN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzVG87Ci0gICAgfTsKLSAgICBXVEY6OkZ1bmN0aW9uPHVuc2lnbmVkKGNvbnN0
IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkpPiBudW1iZXJPZlRpbWVzRGF0
YVJlY29yZHNSZW1vdmVkR2V0dGVyID0gW10gKGF1dG8mIHQpIHsKLSAgICAgICAgcmV0dXJuIHQu
bnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZDsKLSAgICB9OwotICAgIFdURjo6RnVuY3Rp
b248dW5zaWduZWQoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+
IG51bWJlck9mVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uR2V0
dGVyID0gW10gKGF1dG8mIHQpIHsKLSAgICAgICAgcmV0dXJuIHQudGltZXNBY2Nlc3NlZEFzRmly
c3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uOwotICAgIH07Ci0gICAgV1RGOjpGdW5jdGlvbjx1
bnNpZ25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdGVsZW1ldHJ5KT4gbnVt
YmVyT2ZUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJR2V0dGVy
ID0gW10gKGF1dG8mIHQpIHsKLSAgICAgICAgcmV0dXJuIHQudGltZXNBY2Nlc3NlZEFzRmlyc3RQ
YXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSTsKLSAgICB9OwotCi0gICAgdW5zaWduZWQgdG9wUHJl
dmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiA9IG51bWJlck9mUmVzb3VyY2VzV2l0
aFVzZXJJbnRlcmFjdGlvbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIDAsIG51bWJlck9mUmVz
b3VyY2VzRnJvbVRoZVRvcCAtIDEpOwotICAgIHVuc2lnbmVkIHRvcFN1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbnMgPSBtZWRpYW4oc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJ
bnRlcmFjdGlvbiwgMCwgbnVtYmVyT2ZSZXNvdXJjZXNGcm9tVGhlVG9wIC0gMSwgc3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2luc0dldHRlcik7Ci0gICAgdW5zaWduZWQgdG9wU3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lT3JpZ2lucyA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRo
b3V0VXNlckludGVyYWN0aW9uLCAwLCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3AgLSAxLCBz
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zR2V0dGVyKTsKLSAgICB1bnNpZ25lZCB0b3BT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291
cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRv
cCAtIDEsIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9HZXR0ZXIpOwotICAgIHVuc2lnbmVk
IHRvcE51bWJlck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWQgPSBtZWRpYW4oc29ydGVkUHJldmFs
ZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgMCwgbnVtYmVyT2ZSZXNvdXJjZXNG
cm9tVGhlVG9wIC0gMSwgbnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZEdldHRlcik7Ci0g
ICAgdW5zaWduZWQgdG9wTnVtYmVyT2ZUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2Vy
SW50ZXJhY3Rpb24gPSBtZWRpYW4oc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJ
bnRlcmFjdGlvbiwgMCwgbnVtYmVyT2ZSZXNvdXJjZXNGcm9tVGhlVG9wIC0gMSwgbnVtYmVyT2ZU
aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb25HZXR0ZXIpOwotICAg
IHVuc2lnbmVkIHRvcE51bWJlck9mVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFn
ZUFjY2Vzc0FQSSA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlcklu
dGVyYWN0aW9uLCAwLCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3AgLSAxLCBudW1iZXJPZlRp
bWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUElHZXR0ZXIpOwotCi0g
ICAgU3RyaW5nQnVpbGRlciBwcmVhbWJsZUJ1aWxkZXI7Ci0gICAgcHJlYW1ibGVCdWlsZGVyLmFw
cGVuZExpdGVyYWwoInRvcCIpOwotICAgIHByZWFtYmxlQnVpbGRlci5hcHBlbmROdW1iZXIobnVt
YmVyT2ZSZXNvdXJjZXNGcm9tVGhlVG9wKTsKLSAgICBTdHJpbmcgZGVzY3JpcHRpb25QcmVhbWJs
ZSA9IHByZWFtYmxlQnVpbGRlci50b1N0cmluZygpOwotICAgIAotICAgIHdlYlBhZ2VQcm94eS5s
b2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291
cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgZGVzY3JpcHRpb25QcmVhbWJsZSArICJQ
cmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uIiwKLSAgICAgICAgdG9wUHJldmFs
ZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgc2lnbmlmaWNhbnRGaWd1cmVzRm9yTG9n
Z2VkVmFsdWVzLCBTaG91bGRTYW1wbGU6Ok5vKTsKLSAgICB3ZWJQYWdlUHJveHkubG9nRGlhZ25v
c3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksIGRlc2NyaXB0aW9uUHJlYW1ibGUgKyAiU3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2lucyIsCi0gICAgICAgIHRvcFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9y
aWdpbnMsIHNpZ25pZmljYW50RmlndXJlc0ZvckxvZ2dlZFZhbHVlcywgU2hvdWxkU2FtcGxlOjpO
byk7Ci0gICAgd2ViUGFnZVByb3h5LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdu
b3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBk
ZXNjcmlwdGlvblByZWFtYmxlICsgIlN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMiLAot
ICAgICAgICB0b3BTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLCBzaWduaWZpY2FudEZp
Z3VyZXNGb3JMb2dnZWRWYWx1ZXMsIFNob3VsZFNhbXBsZTo6Tm8pOwotICAgIHdlYlBhZ2VQcm94
eS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJl
c291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgZGVzY3JpcHRpb25QcmVhbWJsZSAr
ICJTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIiwKLSAgICAgICAgdG9wU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUbywgc2lnbmlmaWNhbnRGaWd1cmVzRm9yTG9nZ2VkVmFsdWVzLCBTaG91
bGRTYW1wbGU6Ok5vKTsKLSAgICB3ZWJQYWdlUHJveHkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRo
VmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1l
dHJ5S2V5KCksIGRlc2NyaXB0aW9uUHJlYW1ibGUgKyAiTnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRz
UmVtb3ZlZCIsCi0gICAgICAgIHRvcE51bWJlck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWQsIHNp
Z25pZmljYW50RmlndXJlc0ZvckxvZ2dlZFZhbHVlcywgU2hvdWxkU2FtcGxlOjpObyk7Ci0gICAg
d2ViUGFnZVByb3h5LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dn
aW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBkZXNjcmlwdGlv
blByZWFtYmxlICsgIk51bWJlck9mVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlcklu
dGVyYWN0aW9uIiwKLSAgICAgICAgdG9wTnVtYmVyT2ZUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5
RHVlVG9Vc2VySW50ZXJhY3Rpb24sIHNpZ25pZmljYW50RmlndXJlc0ZvckxvZ2dlZFZhbHVlcywg
U2hvdWxkU2FtcGxlOjpObyk7Ci0gICAgd2ViUGFnZVByb3h5LmxvZ0RpYWdub3N0aWNNZXNzYWdl
V2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rl
bGVtZXRyeUtleSgpLCBkZXNjcmlwdGlvblByZWFtYmxlICsgIk51bWJlck9mVGltZXNBY2Nlc3Nl
ZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSIsCi0gICAgICAgIHRvcE51bWJlck9m
VGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSwgc2lnbmlmaWNh
bnRGaWd1cmVzRm9yTG9nZ2VkVmFsdWVzLCBTaG91bGRTYW1wbGU6Ok5vKTsKLX0KLSAgICAKLXN0
YXRpYyB2b2lkIHN1Ym1pdFRvcExpc3RzKGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRl
bGVtZXRyeT4mIHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgY29uc3QgVmVjdG9yPFByZXZhbGVu
dFJlc291cmNlVGVsZW1ldHJ5PiYgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJ
bnRlcmFjdGlvbiwgV2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJveHkpCi17Ci0gICAgc3VibWl0VG9w
TGlzdCgxLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIHNvcnRlZFByZXZhbGVudFJlc291cmNl
c1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIHdlYlBhZ2VQcm94eSk7Ci0gICAgCi0gICAgaWYgKHNv
cnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24uc2l6ZSgpIDwgMykK
LSAgICAgICAgcmV0dXJuOwotICAgIHN1Ym1pdFRvcExpc3QoMywgc29ydGVkUHJldmFsZW50UmVz
b3VyY2VzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB3
ZWJQYWdlUHJveHkpOwotICAgIAotICAgIGlmIChzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRo
b3V0VXNlckludGVyYWN0aW9uLnNpemUoKSA8IDEwKQotICAgICAgICByZXR1cm47Ci0gICAgc3Vi
bWl0VG9wTGlzdCgxMCwgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxlbnRS
ZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB3ZWJQYWdlUHJveHkpOwotICAgIAotICAg
IGlmIChzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLnNpemUo
KSA8IDUwKQotICAgICAgICByZXR1cm47Ci0gICAgc3VibWl0VG9wTGlzdCg1MCwgc29ydGVkUHJl
dmFsZW50UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVy
YWN0aW9uLCB3ZWJQYWdlUHJveHkpOwotICAgIAotICAgIGlmIChzb3J0ZWRQcmV2YWxlbnRSZXNv
dXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLnNpemUoKSA8IDEwMCkKLSAgICAgICAgcmV0dXJu
OwotICAgIHN1Ym1pdFRvcExpc3QoMTAwLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIHNvcnRl
ZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIHdlYlBhZ2VQcm94eSk7
Ci19Ci0gICAgCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgotdm9p
ZCBzdGF0aWMgbm90aWZ5UGFnZXModW5zaWduZWQgdG90YWxQcmV2YWxlbnRSZXNvdXJjZXMsIHVu
c2lnbmVkIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgdW5zaWdu
ZWQgdG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMpCi17Ci0gICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFt0b3RhbFByZXZhbGVudFJlc291cmNlcywgdG90YWxQcmV2YWxlbnRSZXNv
dXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCB0b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lu
c10gewotICAgICAgICBBUEk6OkRpY3Rpb25hcnk6Ok1hcFR5cGUgbWVzc2FnZUJvZHk7Ci0gICAg
ICAgIG1lc3NhZ2VCb2R5LnNldCgiVG90YWxQcmV2YWxlbnRSZXNvdXJjZXMiX3MsIEFQSTo6VUlu
dDY0OjpjcmVhdGUodG90YWxQcmV2YWxlbnRSZXNvdXJjZXMpKTsKLSAgICAgICAgbWVzc2FnZUJv
ZHkuc2V0KCJUb3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24iX3MsIEFQ
STo6VUludDY0OjpjcmVhdGUodG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0
aW9uKSk7Ci0gICAgICAgIG1lc3NhZ2VCb2R5LnNldCgiVG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFt
ZU9yaWdpbnMiX3MsIEFQSTo6VUludDY0OjpjcmVhdGUodG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFt
ZU9yaWdpbnMpKTsKLSAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojpub3RpZnlQYWdlU3RhdGlzdGlj
c1RlbGVtZXRyeUZpbmlzaGVkKEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKG1lc3NhZ2VCb2R5KS5w
dHIoKSk7Ci0gICAgfSk7Ci19Ci0gICAgCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIGZvciB0ZXN0aW5n
IHB1cnBvc2VzLgotdm9pZCBzdGF0aWMgbm90aWZ5UGFnZXMoY29uc3QgVmVjdG9yPFByZXZhbGVu
dFJlc291cmNlVGVsZW1ldHJ5PiYgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCBjb25zdCBWZWN0
b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+JiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNX
aXRob3V0VXNlckludGVyYWN0aW9uLCB1bnNpZ25lZCB0b3RhbE51bWJlck9mUHJldmFsZW50UmVz
b3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbikKLXsKLSAgICBXVEY6OkZ1bmN0aW9uPHVuc2lnbmVk
KGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkpPiBzdWJmcmFtZVVu
ZGVyVG9wRnJhbWVPcmlnaW5zR2V0dGVyID0gW10gKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVs
ZW1ldHJ5JiB0KSB7Ci0gICAgICAgIHJldHVybiB0LnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdp
bnM7Ci0gICAgfTsKLSAgICAKLSAgICBub3RpZnlQYWdlcyhzb3J0ZWRQcmV2YWxlbnRSZXNvdXJj
ZXMuc2l6ZSgpLCB0b3RhbE51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFj
dGlvbiwgbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rp
b24sIDAsIDIsIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNHZXR0ZXIpKTsKLX0KLSAgICAK
LXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6Y2FsY3VsYXRlQW5kU3Vi
bWl0KGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSYgcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAg
IAotICAgIGF1dG8gc29ydGVkUHJldmFsZW50UmVzb3VyY2VzID0gc29ydGVkUHJldmFsZW50UmVz
b3VyY2VUZWxlbWV0cnkocmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKTsKLSAgICBpZiAobm90
aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQgJiYgc29ydGVkUHJldmFsZW50UmVzb3Vy
Y2VzLmlzRW1wdHkoKSkgewotICAgICAgICBub3RpZnlQYWdlcygwLCAwLCAwKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0
cnk+IHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb247Ci0gICAg
c29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbi5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHNvcnRlZFByZXZhbGVudFJlc291cmNlcy5zaXplKCkpOwotICAgIFZlY3Rv
cjx1bnNpZ25lZD4gcHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uOwot
ICAgIAotICAgIGZvciAoYXV0byYgcHJldmFsZW50UmVzb3VyY2UgOiBzb3J0ZWRQcmV2YWxlbnRS
ZXNvdXJjZXMpIHsKLSAgICAgICAgaWYgKHByZXZhbGVudFJlc291cmNlLmhhc0hhZFVzZXJJbnRl
cmFjdGlvbikKLSAgICAgICAgICAgIHByZXZhbGVudFJlc291cmNlc0RheXNTaW5jZVVzZXJJbnRl
cmFjdGlvbi5hcHBlbmQocHJldmFsZW50UmVzb3VyY2UuZGF5c1NpbmNlVXNlckludGVyYWN0aW9u
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0
aG91dFVzZXJJbnRlcmFjdGlvbi51bmNoZWNrZWRBcHBlbmQocHJldmFsZW50UmVzb3VyY2UpOwot
ICAgIH0KLSAgICAKLSAgICAvLyBEaXNwYXRjaCBvbiB0aGUgbWFpbiB0aHJlYWQgdG8gbWFrZSBz
dXJlIHRoZSBXZWJQYWdlUHJveHkgd2UncmUgdXNpbmcgZG9lc24ndCBnbyBhd2F5LgotICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc29ydGVkUHJldmFsZW50UmVzb3VyY2VzID0gV1RGTW92
ZShzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMpLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRo
b3V0VXNlckludGVyYWN0aW9uID0gV1RGTW92ZShzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRo
b3V0VXNlckludGVyYWN0aW9uKSwgcHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVy
YWN0aW9uID0gV1RGTW92ZShwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rp
b24pXSAoKSB7Ci0gICAgICAgIGF1dG8gd2ViUGFnZVByb3h5ID0gbm9uRXBoZW1lcmFsV2ViUGFn
ZVByb3h5KCk7Ci0gICAgICAgIGlmICghd2ViUGFnZVByb3h5KSB7Ci0gICAgICAgICAgICBpZiAo
bm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpCi0gICAgICAgICAgICAgICAgbm90
aWZ5UGFnZXMoMCwgMCwgMCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGlmIChub3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCkgewot
ICAgICAgICAgICAgbm90aWZ5UGFnZXMoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCBzb3J0ZWRQ
cmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCBwcmV2YWxlbnRSZXNvdXJj
ZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rpb24uc2l6ZSgpKTsKLSAgICAgICAgICAgIC8vIFRoZSBu
b3RpZnkgcGFnZXMgZnVuY3Rpb24gaXMgZm9yIHRlc3Rpbmcgc28gd2UgZG9uJ3QgbmVlZCB0byBk
byBhbiBhY3R1YWwgc3VibWlzc2lvbi4KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgd2ViUGFnZVByb3h5LT5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhW
YWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0
cnlLZXkoKSwgInRvdGFsTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXMiX3MsIHNvcnRlZFByZXZh
bGVudFJlc291cmNlcy5zaXplKCksIHNpZ25pZmljYW50RmlndXJlc0ZvckxvZ2dlZFZhbHVlcywg
U2hvdWxkU2FtcGxlOjpObyk7Ci0gICAgICAgIHdlYlBhZ2VQcm94eS0+bG9nRGlhZ25vc3RpY01l
c3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0
aWNzVGVsZW1ldHJ5S2V5KCksICJ0b3RhbE51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVz
ZXJJbnRlcmFjdGlvbiJfcywgcHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0
aW9uLnNpemUoKSwgc2lnbmlmaWNhbnRGaWd1cmVzRm9yTG9nZ2VkVmFsdWVzLCBTaG91bGRTYW1w
bGU6Ok5vKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2lu
Y2VVc2VySW50ZXJhY3Rpb24uc2l6ZSgpID4gMCkKLSAgICAgICAgICAgIHdlYlBhZ2VQcm94eS0+
bG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNv
dXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksICJ0b3BQcmV2YWxlbnRSZXNvdXJjZVdp
dGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24iX3MsIHByZXZhbGVudFJl
c291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvblswXSwgc2lnbmlmaWNhbnRGaWd1cmVzRm9y
TG9nZ2VkVmFsdWVzLCBTaG91bGRTYW1wbGU6Ok5vKTsKLSAgICAgICAgaWYgKHByZXZhbGVudFJl
c291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPiAxKQotICAgICAgICAgICAg
d2ViUGFnZVByb3h5LT5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9n
Z2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgIm1lZGlhblBy
ZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rp
b24iX3MsIG1lZGlhbihwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rpb24p
LCBzaWduaWZpY2FudEZpZ3VyZXNGb3JMb2dnZWRWYWx1ZXMsIFNob3VsZFNhbXBsZTo6Tm8pOwot
ICAgICAgICAKLSAgICAgICAgc3VibWl0VG9wTGlzdHMoc29ydGVkUHJldmFsZW50UmVzb3VyY2Vz
LCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAqd2ViUGFn
ZVByb3h5KTsKLSAgICB9KTsKLX0KLSAgICAKLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RlbGVtZXRyeTo6c2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCBh
bHdheXMpCi17Ci0gICAgbm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQgPSBhbHdh
eXM7Ci19Ci0gICAgCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGY5NmU2MWExYWYwYWI3MzUzYjAzMWRiNzUzZjlkZGI2ZjUyYzYyOWIuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oCisrKyAvZGV2
L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFz
cyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU7Ci0KLW5hbWVzcGFjZSBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5IHsKLSAgICAKLXZvaWQgY2FsY3VsYXRlQW5kU3Vi
bWl0KGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSYpOwotdm9pZCBzZXRO
b3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sKTsKLSAgICAKLX0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9EaXNwbGF5TGluay5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvRGlzcGxheUxpbmsuY3BwCmluZGV4IGYzMTNhNDhm
ZDdkNzhjYWNlODMzMDFhNGJjNGZjNWEwN2RkOThiZTYuLmJmYjAzMjQyNmQ5OGNmZjM4OGI1MTA0
OTM0ODQzODExYjExMGVmODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21h
Yy9EaXNwbGF5TGluay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL0Rpc3Bs
YXlMaW5rLmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShXRUJQUk9DRVNTX1dJTkRP
V1NFUlZFUl9CTE9DS0lORykKIAogI2luY2x1ZGUgIkRyYXdpbmdBcmVhTWVzc2FnZXMuaCIKKyNp
bmNsdWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHku
aCIKICNpbmNsdWRlIDx3dGYvUHJvY2Vzc1ByaXZpbGVnZS5oPgogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VuaWZpZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0
L1VuaWZpZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggZGJhNmIzN2Y0MmZlNjY0Y2Jl
YjU1Y2QyYTRkOWNhNmFjMzRjMTdjYS4uZTZjN2EwYzdhMjY2MGUxOGE4MmUzYzE1MjVjODkyZDcw
Njg4NmY1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VbmlmaWVkU291cmNlcy1pbnB1dC54
Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9XZWJLaXQvVW5pZmllZFNvdXJjZXMtaW5wdXQueGNmaWxl
bGlzdApAQCAtMSw0ICsxLDggQEAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJLaXQyL0VkaXRhYmxlSW1hZ2VDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcAorJChT
UkNST09UKS9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZS5jcHAKKyQoU1JDUk9PVCkvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuY3BwCiskKFNSQ1JPT1QpL05ldHdv
cmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAor
JChTUkNST09UKS9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NUZWxlbWV0cnkuY3BwCiAkKFNSQ1JPT1QpL05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2Vi
Q29va2llTWFuYWdlci5jcHAKICQoU1JDUk9PVCkvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9tYWMv
V2ViQ29va2llTWFuYWdlck1hYy5tbQogJChTUkNST09UKS9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Q
cm90b2NvbHMvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2EubW0KQEAgLTU1
MCw4ICs1NTQsNiBAQCAkKFNSQ1JPT1QpL1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Jl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0KICQoU1JDUk9PVCkvVUlQcm9jZXNz
L1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlP
Uy5tbQogJChTUkNST09UKS9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tCiAkKFNSQ1JPT1QpL1VJUHJvY2Vzcy9SZW1v
dGVXZWJJbnNwZWN0b3JQcm94eS5jcHAKLSQoU1JDUk9PVCkvVUlQcm9jZXNzL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAKLSQoU1JDUk9PVCkvVUlQcm9jZXNzL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5jcHAKICQoU1JDUk9PVCkvVUlQcm9jZXNz
L1Jlc3BvbnNpdmVuZXNzVGltZXIuY3BwCiAkKFNSQ1JPT1QpL1VJUHJvY2Vzcy9TZXJ2aWNlV29y
a2VyUHJvY2Vzc1Byb3h5LmNwcAogJChTUkNST09UKS9VSVByb2Nlc3MvU3RhdGlzdGljc1JlcXVl
c3QuY3BwCkBAIC02MjAsOCArNjIyLDYgQEAgJChTUkNST09UKS9VSVByb2Nlc3MvV2ViUHJvY2Vz
c0xpZmV0aW1lT2JzZXJ2ZXIuY3BwCiAkKFNSQ1JPT1QpL1VJUHJvY2Vzcy9XZWJQcm9jZXNzTGlm
ZXRpbWVUcmFja2VyLmNwcAogJChTUkNST09UKS9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3Bw
CiAkKFNSQ1JPT1QpL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCi0kKFNSQ1JPT1QpL1VJ
UHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCi0kKFNSQ1JPT1QpL1VJ
UHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAogJChTUkNST09U
KS9VSVByb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAKICQoU1JDUk9P
VCkvVUlQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmNwcAog
JChTUkNST09UKS9VSVByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDAwYTFj
NWY2NDk5YTliZGEyNjA5YTIwMGJiMzAxNDdmN2NkNmZiMzQuLmU3ZTQ3NzJhMDM2ZmU5ZTJjYTFm
YTM2ZjcxMGUyMjQ3MzRhN2M2YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzUsNyArNzUsNiBAQAogCQkwMDVEMTU4RjE4RTRDNEVC
MDA3MzQ2MTkgLyogX1dLRmluZERlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwMDVEMTU4RTE4RTRDNEVCMDA3MzQ2MTkgLyogX1dLRmluZERl
bGVnYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMDBCOTY2MTYxOEUyNENCQTAwQ0UxRjg4IC8qIEFQSUZpbmRDbGllbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQjk2NjE1MThFMjRDQkEwMENF
MUY4OCAvKiBBUElGaW5kQ2xpZW50LmggKi87IH07CiAJCTAwQjk2NjFBMThFMjVBRTEwMENFMUY4
OCAvKiBGaW5kQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwMEI5NjYxODE4RTI1QUUxMDBDRTFGODggLyogRmluZENsaWVudC5oICovOyB9Owot
CQkwNzI5N0Y5RjFDMTdBQTFBMDE1RjA3MzUgLyogUGVyc2lzdGVuY3lVdGlscy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDczMjFGOUQxQzE3QkJFQTIy
M0YwNzM1IC8qIFBlcnNpc3RlbmN5VXRpbHMuaCAqLzsgfTsKIAkJMDcyOTdGOUYxQzE3QkJFQTAw
M0YwNzM1IC8qIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzI5N0Y5RDFDMTdCQkVBMDAzRjA3MzUg
LyogVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuaCAqLzsgfTsKIAkJMDcyOTdGOUYxQzE3
QkJFQTAxNUYwNzM1IC8qIERldmljZUlkSGFzaFNhbHRTdG9yYWdlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzI5N0Y5RDFDMTdCQkVBMjIzRjA3MzUg
LyogRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaCAqLzsgfTsKIAkJMDcyOTdGQTMxQzE4NkFEQjAw
M0YwNzM1IC8qIFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzI5N0ZBMTFDMTg2QURCMDAzRjA3MzUgLyog
V0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTg3LDcgKzk4Niw2IEBACiAJCTUxREQ5RjI4MTYzNjdE
QTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MURE
OUYyNjE2MzY3REEyMDAxNTc4RTkgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNz
YWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQk1MUREOUYyOTE2MzY3REEyMDAxNTc4RTkgLyogTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFERDlGMjcxNjM2N0RBMjAwMTU3OEU5IC8qIE5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCAqLzsgfTsKIAkJNTFFMzUxQ0Ix
ODBGMkNDQzAwRTUzQkU5IC8qIElEQlV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFMzUxQzkxODBGMkNDQzAwRTUzQkU5IC8qIElEQlV0
aWxpdGllcy5oICovOyB9OwotCQk1MUU2QzE2NDFGMjkzNUREMDBGRDM0MzcgLyogUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUU2QzE2MTFGMjkzNUNEMDBGRDM0MzcgLyogUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmggKi87IH07CiAJCTUxRUZDMUNGMTUy
NEU2MjUwMEM5QTkzOCAvKiBXS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGQTJENTQxNTIxMTE4NjAwQzFC
QTBCIC8qIFdLQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFGMDYwRTAxNjU0MzE3RjAwRjMyODFCIC8q
IFdlYlJlc291cmNlTG9hZGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjA2MERFMTY1NDMxNzUwMEYzMjgxQiAvKiBXZWJSZXNvdXJj
ZUxvYWRlck1lc3NhZ2VzLmggKi87IH07CiAJCTUxRjA2MEUxMTY1NDMxODUwMEYzMjgxQiAvKiBX
ZWJSZXNvdXJjZUxvYWRlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwNjBERDE2NTQzMTc1MDBGMzI4MUIgLyogV2Vi
UmVzb3VyY2VMb2FkZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwpAQCAtMTA4Niw3ICsxMDg0
LDYgQEAKIAkJNjNDMzJDMjgxRTk4MTE5MDAwNjk5QkQwIC8qIF9XS0dlb2xvY2F0aW9uUG9zaXRp
b25JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNjNDMzJDMjcxRTk4MTE5MDAwNjk5QkQwIC8qIF9XS0dlb2xvY2F0aW9uUG9zaXRpb25JbnRl
cm5hbC5oICovOyB9OwogCQk2NUI4NkYxRTEyRjExREUzMDBCN0REOEEgLyogV0tCdW5kbGVJbnNw
ZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1
Qjg2RjE4MTJGMTFEN0IwMEI3REQ4QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZBNTA4MEJGMUYwRURBQUEw
MEU2MTdDNSAvKiBXS1dpbmRvd0ZlYXR1cmVzUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkE1MDgwQkUxRjBFREFBQTAwRTYxN0M1IC8qIFdL
V2luZG93RmVhdHVyZXNQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJNkI4MjFEREMxRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZCODIxRERBMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmggKi87IH07CiAJCTZCRTk2OUMxMUU1NEQ0NTIwMDhCNzQ4
MyAvKiBjb3JlUHJlZGljdGlvbl9tb2RlbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkJFOTY5QzAxRTU0RDQ1MjAwOEI3NDgzIC8qIGNvcmVQcmVkaWN0
aW9uX21vZGVsICovOyB9OwogCQk2QkU5NjlDQjFFNTRENENGMDA4Qjc0ODMgLyogUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNkJFOTY5QzkxRTU0RDRDRjAwOEI3NDgzIC8qIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EuaCAqLzsgfTsKIAkJNkJFOTY5Q0QxRTU0RTA1
NDAwOEI3NDgzIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QkU5NjlDQzFFNTRFMDU0MDA4
Qjc0ODMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaCAqLzsgfTsKQEAgLTEx
MDksNiArMTEwNiwxMCBAQAogCQk3QUI2RUE0NTFFRUFBRTM4MDAwMzdCMkIgLyogQVBJSWNvbkRh
dGFiYXNlQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3QUI2RUE0NDFFRUFBRTIzMDAwMzdCMkIgLyogQVBJSWNvbkRhdGFiYXNlQ2xpZW50Lmgg
Ki87IH07CiAJCTdBQjZFQTQ3MUVFQUI2QjgwMDAzN0IyQiAvKiBBUElHZW9sb2NhdGlvblByb3Zp
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUI2
RUE0NjFFRUFCNkIwMDAwMzdCMkIgLyogQVBJR2VvbG9jYXRpb25Qcm92aWRlci5oICovOyB9Owog
CQk3QUYyMzYyMTFFNzlBNDA4MDA0MzhBMDUgLyogV2ViRXJyb3JzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUYyMzYxRjFFNzlBM0Q4MDA0MzhBMDUg
LyogV2ViRXJyb3JzLmggKi87IH07CisJCTdBRkJEMzYzMjFFNTBGMzkwMDVEQkFDQiAvKiBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdBRkJEMzYyMjFFNTBGMzkwMDVEQkFDQiAvKiBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCAqLzsgfTsKKwkJN0FGQkQzNjcyMUU1MUJBQjAwNURCQUNC
IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGQkQzNjUyMUU1MUJBQjAwNURCQUNCIC8q
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oICovOyB9OworCQk3QUZCRDM2QTIx
RTU0MkYxMDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUZCRDM2
ODIxRTU0MkU4MDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9y
YWdlLmggKi87IH07CisJCTdBRkJEMzZGMjFFNTQ2RjgwMDVEQkFDQiAvKiBQZXJzaXN0ZW5jeVV0
aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUZC
RDM2RDIxRTU0NkUzMDA1REJBQ0IgLyogUGVyc2lzdGVuY3lVdGlscy5oICovOyB9OwogCQk3QzA2
NUYyQzFDOENEOTVGMDBDMkQ5NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzA2NUYy
QTFDOENEOTVGMDBDMkQ5NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmgg
Ki87IH07CiAJCTdDMTM1QUE5MTczQjBCQ0EwMDU4NkFFMiAvKiBXS1BsdWdpbkluZm9ybWF0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzEzNUFB
NzE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5JbmZvcm1hdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMUJBMzNFMUE0QTBFNjAwMDQz
RTI0OSAvKiBBUElEaWN0aW9uYXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3QzFCQTMzQzFBNEEwRTYwMDA0M0UyNDkgLyogQVBJRGljdGlvbmFyeS5o
ICovOyB9OwpAQCAtMTE5NCw3ICsxMTk1LDYgQEAKIAkJODM5OTAyMDMxQkU5QTAyQjAwMEYzNjUz
IC8qIE5ldHdvcmtMb2FkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4Mzk5MDFGRTFCRTlBMDFCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQuaCAqLzsgfTsK
IAkJODM5QTJGMzIxRTIwNjc0NTAwMzkwNTdFIC8qIEhpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNh
Z2VTYW1wbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4MzlBMkYzMDFFMjA2NzM5MDAzOTA1N0UgLyogSGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2Fn
ZVNhbXBsZXIuaCAqLzsgfTsKIAkJODNBMEVEMzUxRjc0N0NDRjAwMzI5OUVCIC8qIFByZWNvbm5l
Y3RUYXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
M0EwRUQzMjFGNzQ3Q0M2MDAzMjk5RUIgLyogUHJlY29ubmVjdFRhc2suaCAqLzsgfTsKLQkJODNC
M0NCMTAyMEUyQUIwMTAwNDQxRTlCIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM2ODFE
Q0EyMEUyOTA0QTAwQzI0OUNEIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5o
ICovOyB9OwogCQk4M0Q0NTRENzFCRTlEM0M0MDA2QzkzQkQgLyogTmV0d29ya0xvYWRDbGllbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzRDQ1NEQ2
MUJFOUQzQzQwMDZDOTNCRCAvKiBOZXR3b3JrTG9hZENsaWVudC5oICovOyB9OwogCQk4M0VFNTc1
QzFEQjdENjExMDBDNzRDNTAgLyogV2ViVmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzRUU1NzVBMURCN0Q2MDYw
MEM3NEM1MCAvKiBXZWJWYWxpZGF0aW9uTWVzc2FnZUNsaWVudC5oICovOyB9OwogCQk4M0YxQTA3
QTFGOTZFNzc5MDA0NUI5NEUgLyogV2ViU1dPcmlnaW5UYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODNGMUEwNzgxRjk2RTc3MTAwNDVCOTRFIC8q
IFdlYlNXT3JpZ2luVGFibGUuaCAqLzsgfTsKQEAgLTE4NTQsMTQgKzE4NTQsMTIgQEAKIAkJMDBC
OTY2MTUxOEUyNENCQTAwQ0UxRjg4IC8qIEFQSUZpbmRDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQVBJRmluZENsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwMEI5NjYxNzE4RTI1QUUxMDBDRTFGODggLyogRmluZENsaWVudC5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZpbmRDbGllbnQubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTAwQjk2NjE4MThFMjVBRTEwMENFMUY4OCAvKiBGaW5kQ2xp
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbmRDbGllbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDcyOTQ1NUMxQzE3MTFFQTAwM0YwNzM1IC8qIFBl
cnNpc3RlbmN5VXRpbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGVyc2lzdGVuY3lVdGlscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3Mjk3
RjlDMUMxNzExRUEwMDNGMDczNSAvKiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3Mjk3RjlDMUMxN0JCRUEwMDNGMDcz
NSAvKiBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3Mjk3RjlEMUMxN0JCRUEwMDNGMDczNSAvKiBV
c2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwNzI5N0Y5RDFDMTdCQkVBMjIzRjA3MzUgLyogRGV2aWNlSWRIYXNoU2Fs
dFN0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGV2aWNlSWRIYXNo
U2FsdFN0b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyOTdGQTAxQzE4
NkFEQjAwM0YwNzM1IC8qIFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyOTdGQTExQzE4NkFEQjAwM0YwNzM1
IC8qIFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTA3MzIxRjlEMUMxN0JCRUEyMjNGMDczNSAvKiBQZXJzaXN0ZW5jeVV0aWxz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBlcnNpc3RlbmN5VXRpbHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc0RTc1RkIxREYxRkQxMzAwRDMxOEVDIC8q
IFVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTA3NEU3NUZDMURGMjAwMjQwMEQzMThFQyAvKiBVc2VyTWVkaWFQcm9jZXNzTWFuYWdlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VyTWVkaWFQcm9jZXNz
TWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3NEU3NjAwMURGNzA3
NUQwMEQzMThFQyAvKiBNZWRpYURldmljZVNhbmRib3hFeHRlbnNpb25zLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRGV2aWNlU2FuZGJveEV4dGVuc2lvbnMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzMxMiw4ICszMzEwLDYgQEAKIAkJ
NTFFMzUxQzkxODBGMkNDQzAwRTUzQkU5IC8qIElEQlV0aWxpdGllcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJREJVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTFFMzk5MDUxRDZGNTRDNTAwOUM4ODMxIC8qIFVJR2FtZXBhZFByb3ZpZGVyQ29j
b2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBVSUdhbWVwYWRQ
cm92aWRlckNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUU2QzE1RjFG
MjkzNTUxMDBGRDM0MzcgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdl
SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNp
c3RlbnRTdG9yYWdlSU9TLm1tOyBwYXRoID0gaW9zL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJz
aXN0ZW50U3RvcmFnZUlPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFFNkMx
NjExRjI5MzVDRDAwRkQzNDM3IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3Rv
cmFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0
b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFFNkMxNjIxRjI5MzVDRDAw
RkQzNDM3IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUU4QjY4RDFFNzEyODczMDAxQjcx
MzIgLyogV2ViVVJMU2NoZW1lVGFzay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWJVUkxTY2hlbWVUYXNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTFFOTQ5OTYxRDc2MUNDNzAwRUM5RUI5IC8qIFVJR2FtZXBhZFByb3ZpZGVySU9TLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVUlHYW1lcGFkUHJvdmlkZXJJ
T1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRjA2MEREMTY1NDMxNzUwMEYz
MjgxQiAvKiBXZWJSZXNvdXJjZUxvYWRlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBXZWJSZXNvdXJjZUxvYWRlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJp
dmVkU291cmNlcy9XZWJLaXQyL1dlYlJlc291cmNlTG9hZGVyTWVzc2FnZVJlY2VpdmVyLmNwcDsg
c291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTM1MDgsOCArMzUwNCw2IEBA
CiAJCTY1Qjg2RjE3MTJGMTFEN0IwMEI3REQ4QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS0J1bmRsZUluc3BlY3Rvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1Qjg2RjE4MTJGMTFEN0IwMEI3REQ4QSAv
KiBXS0J1bmRsZUluc3BlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
S0J1bmRsZUluc3BlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QTUwODBC
RTFGMEVEQUFBMDBFNjE3QzUgLyogV0tXaW5kb3dGZWF0dXJlc1ByaXZhdGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0tXaW5kb3dGZWF0dXJlc1ByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNkI4MjFEREExRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUZWxlbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rl
bGVtZXRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QjgyMUREQjFFRUYwNURE
MDBEN0FGNEEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkJFOTY5QzAxRTU0RDQ1MjAwOEI3NDgzIC8qIGNv
cmVQcmVkaWN0aW9uX21vZGVsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGNvcmVQcmVkaWN0aW9u
X21vZGVsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QkU5NjlDNjFFNTRENEI2MDA4
Qjc0ODMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZp
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QkU5NjlDODFFNTRENENGMDA4
Qjc0ODMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xh
c3NpZmllckNvY29hLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1MzUsMTEg
KzM1MjksMTAgQEAKIAkJN0E4MjFGNEIxRTJGNjY0ODAwNjA0NTc3IC8qIExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBM
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0E4MjFGNEQxRTJGNjc5RTAwNjA0NTc3IC8qIExlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0E4MjFGNEYxRTJGN0E1QzAwNjA0NTc3IC8qIEFQSUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElDdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
N0E4NDNBMUEyMUU0MUZCMjAwREVGNjYzIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
Y3BwOyBwYXRoID0gQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QThBOUQ1NzFFRjExOUFBMDA5ODAxQUUg
LyogQVBJSW5qZWN0ZWRCdW5kbGVDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQVBJSW5qZWN0ZWRCdW5kbGVDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0E4QTlENTkxRUYxMzAyMDAwOTgwMUFFIC8qIEFQSUluamVjdGVkQnVuZGxlQnVuZGxl
Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUluamVjdGVkQnVu
ZGxlQnVuZGxlQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBOEE5RDVC
MUVGMTQ1OEUwMDk4MDFBRSAvKiBBUElJbmplY3RlZEJ1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGll
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJSW5qZWN0ZWRCdW5kbGVQ
YWdlUmVzb3VyY2VMb2FkQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdB
OUNEOEMwMUM3Nzk4NDkwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0E5Q0Q4
QzExQzc3OTg0OTAwRDlGNkM3IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E5Q0Q4QzIxQzc3OUFENjAw
RDlGNkM3IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5tZXNzYWdlcy5pbiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUubWVzc2Fn
ZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBQjZFQTQ0MUVFQUFFMjMwMDAz
N0IyQiAvKiBBUElJY29uRGF0YWJhc2VDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQVBJSWNvbkRhdGFiYXNlQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdBQjZFQTQ2MUVFQUI2QjAwMDAzN0IyQiAvKiBBUElHZW9sb2NhdGlvblByb3ZpZGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUdlb2xvY2F0aW9uUHJvdmlk
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1NDgsNiArMzU0MSwxNSBAQAog
CQk3QUYyMzYxRjFFNzlBM0Q4MDA0MzhBMDUgLyogV2ViRXJyb3JzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkVycm9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QUYyMzYyMjFFNzlBNDMxMDA0MzhBMDUgLyogV2ViRXJyb3JzQ29jb2EubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFcnJvcnNDb2NvYS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FGNjZFMTEyMEMwN0NCNjAwNzgyOEVBIC8qIFdl
YkNvbnRlbnQtT1NYLmVudGl0bGVtZW50cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QuZW50aXRsZW1l
bnRzOyBwYXRoID0gIldlYkNvbnRlbnQtT1NYLmVudGl0bGVtZW50cyI7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTdBRkJEMzYyMjFFNTBGMzkwMDVEQkFDQiAvKiBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg7IHBhdGggPSBDbGFzc2lmaWVyL1dlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
QUZCRDM2NDIxRTUxQkFCMDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHA7IHBhdGggPSBDbGFzc2lmaWVyL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTdBRkJEMzY1MjFFNTFCQUIwMDVEQkFDQiAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlLmg7IHBhdGggPSBDbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QUZCRDM2
ODIxRTU0MkU4MDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9y
YWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3Rv
cmFnZS5oOyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVu
dFN0b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0FGQkQzNjkyMUU1NDJF
ODAwNURCQUNCIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3Jh
Z2UuY3BwOyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVu
dFN0b3JhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QUZCRDM2QjIxRTU0
NTQ0MDA1REJBQ0IgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5Lmg7IHBhdGggPSBD
bGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0FGQkQzNkMyMUU1NDU0NDAwNURCQUNCIC8qIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHA7IHBhdGggPSBDbGFzc2lmaWVyL1dlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3QUZCRDM2RDIxRTU0NkUzMDA1REJBQ0IgLyogUGVyc2lzdGVuY3lVdGlscy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQZXJzaXN0ZW5jeVV0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTdBRkJEMzZFMjFFNTQ2RTMwMDVEQkFDQiAvKiBQZXJzaXN0ZW5jeVV0aWxzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBlcnNpc3RlbmN5VXRpbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3QzA2NUYyOTFDOENEOTVGMDBDMkQ5NTAgLyogV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyRGF0YVR5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDMDY1RjJBMUM4Q0Q5NUYwMEMyRDk1MCAvKiBXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJEYXRhVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdDMEJCOUE4MThEQ0RFODkwMDA2QzA4NiAvKiBXZWJDb250ZW50LWlPUy5lbnRp
dGxlbWVudHMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnhtbDsgcGF0aCA9ICJXZWJDb250ZW50LWlPUy5lbnRpdGxlbWVudHMiOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzY4MCw4ICszNjgyLDYgQEAKIAkJODM0QjI1MTAxQTg0
MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hlU3RhdGlzdGljcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4MzYwMzQ5RDFBQ0IzNEQ2MDA2MjY1NDkgLyogV2ViU1FMaXRlRGF0
YWJhc2VUcmFja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdl
YlNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTgzNjAzNDlFMUFDQjM0RDYwMDYyNjU0OSAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU1FMaXRlRGF0YWJhc2VUcmFja2Vy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTgzNjgxRENBMjBFMjkwNEEwMEMyNDlD
RCAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTgzNjgxRENCMjBFMjkwNEIwMEMyNDlDRCAvKiBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM3MkRCMjQxQTY3NEM4RjAwQzY5N0M1IC8q
IFdLUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdLUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTgzNzJEQjI2MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODM3MkRCMjcxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQYWdl
RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTUwNTEsNiArNTA1MSw4IEBACiAJCQkJMUFEQ0I4NjgxODk4MzFCMzAwMjJFRTVBIC8qIE5hdmln
YXRpb25BY3Rpb25EYXRhLmNwcCAqLywKIAkJCQkxQURDQjg2OTE4OTgzMUIzMDAyMkVFNUEgLyog
TmF2aWdhdGlvbkFjdGlvbkRhdGEuaCAqLywKIAkJCQk5QkM1OUQ2RDFFRkNEQzZEMDAxRThEMDkg
LyogT3B0aW9uYWxDYWxsYmFja0lELmggKi8sCisJCQkJN0FGQkQzNkUyMUU1NDZFMzAwNURCQUNC
IC8qIFBlcnNpc3RlbmN5VXRpbHMuY3BwICovLAorCQkJCTdBRkJEMzZEMjFFNTQ2RTMwMDVEQkFD
QiAvKiBQZXJzaXN0ZW5jeVV0aWxzLmggKi8sCiAJCQkJQkNDNDNBQjgxMjdCOTVEQzAwMzE3RjE2
IC8qIFBsYXRmb3JtUG9wdXBNZW51RGF0YS5jcHAgKi8sCiAJCQkJQkNDNDNBQjkxMjdCOTVEQzAw
MzE3RjE2IC8qIFBsYXRmb3JtUG9wdXBNZW51RGF0YS5oICovLAogCQkJCUUxOEM5MkYzMTJEQjlF
NzEwMENGMkFFQiAvKiBQcmludEluZm8uY3BwICovLApAQCAtNTUxNSw4ICs1NTE3LDggQEAKIAkJ
MkQxNTUxQTkxRjVBOUI0MjAwMDZFM0ZFIC8qIFJlbW90ZUxheWVyVHJlZSAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJRTQwNDkwNkYyMURFNjVENzAwMzdG
MERCIC8qIG1hYyAqLywKIAkJCQkyRDE1NTFBQTFGNUE5QkE3MDAwNkUzRkUgLyogaW9zICovLAor
CQkJCUU0MDQ5MDZGMjFERTY1RDcwMDM3RjBEQiAvKiBtYWMgKi8sCiAJCQkJMUFCMTZBRTAxNjQ4
NjU2RDAwMjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaCAqLywKIAkJ
CQkwRkYyNEEyRjE4NzlFNEZFMDAzQUJGMEMgLyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eS5tZXNzYWdlcy5pbiAqLywKIAkJCQkxQUIxNkFERjE2NDg2NTZEMDAyOTBENjIgLyogUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tbSAqLywKQEAgLTY0MTIsNiArNjQxNCw3IEBA
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUU0ODlEMjgyMUEwQTJC
RTgwMDc4QzA2QSAvKiBjYWNoZSAqLywKKwkJCQk3QTg0M0ExRDIxRTQxRkQ5MDBERUY2NjMgLyog
Q2xhc3NpZmllciAqLywKIAkJCQk3RUM0RjBGODE4RTRBOTIyMDA4MDU2QUYgLyogY29jb2EgKi8s
CiAJCQkJMzMwOTM0NEIxMzE1QjkzQTAwOTdBN0JDIC8qIENvb2tpZXMgKi8sCiAJCQkJNUMxNDI2
RjIxQzIzRjgyRDAwRDQxMTgzIC8qIEN1c3RvbVByb3RvY29scyAqLywKQEAgLTY4OTMsNiArNjg5
NiwyMSBAQAogCQkJbmFtZSA9IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07
CisJCTdBODQzQTFEMjFFNDFGRDkwMERFRjY2MyAvKiBDbGFzc2lmaWVyICovID0geworCQkJaXNh
ID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3QUZCRDM2NDIxRTUxQkFCMDA1REJB
Q0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcCAqLywKKwkJCQk3QUZC
RDM2NTIxRTUxQkFCMDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
LmggKi8sCisJCQkJN0FGQkQzNjkyMUU1NDJFODAwNURCQUNCIC8qIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5jcHAgKi8sCisJCQkJN0FGQkQzNjgyMUU1NDJFODAwNURC
QUNCIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5oICovLAorCQkJ
CTdBODQzQTFBMjFFNDFGQjIwMERFRjY2MyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwICovLAorCQkJCTdBRkJEMzYyMjFFNTBGMzkwMDVEQkFDQiAvKiBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaCAqLywKKwkJCQk3QUZCRDM2QzIxRTU0NTQ0MDA1REJBQ0IgLyog
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAgKi8sCisJCQkJN0FGQkQzNkIy
MUU1NDU0NDAwNURCQUNCIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCAq
LywKKwkJCSk7CisJCQluYW1lID0gQ2xhc3NpZmllcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CisJCX07CiAJCTdDNkU3MEY4MThCMkQ0N0UwMEYyNEUyRSAvKiBjb2NvYSAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC03MzI3LDggKzczNDUsNiBAQAog
CQkJCTFBQzc1MzdBMTgzQTlGREIwMDcyQ0IxNSAvKiBQYWdlTG9hZFN0YXRlLmggKi8sCiAJCQkJ
ODMyRUQxODkxRTJGRTEzQjAwNkJBNjRBIC8qIFBlckFjdGl2aXR5U3RhdGVDUFVVc2FnZVNhbXBs
ZXIuY3BwICovLAogCQkJCTgzMkVEMThBMUUyRkUxM0IwMDZCQTY0QSAvKiBQZXJBY3Rpdml0eVN0
YXRlQ1BVVXNhZ2VTYW1wbGVyLmggKi8sCi0JCQkJMDcyOTQ1NUMxQzE3MTFFQTAwM0YwNzM1IC8q
IFBlcnNpc3RlbmN5VXRpbHMuY3BwICovLAotCQkJCTA3MzIxRjlEMUMxN0JCRUEyMjNGMDczNSAv
KiBQZXJzaXN0ZW5jeVV0aWxzLmggKi8sCiAJCQkJMzc3MTZBNTkxOTVCOTEwNTAwRUU4QjFCIC8q
IFByb2Nlc3NBc3NlcnRpb24uY3BwICovLAogCQkJCTg2Rjk1MzYwMThGRjRGRDQwMDFEQjJFRiAv
KiBQcm9jZXNzQXNzZXJ0aW9uLmggKi8sCiAJCQkJODZFNjdBMjIxOTBGNDExODAwMDA0QUI3IC8q
IFByb2Nlc3NUaHJvdHRsZXIuY3BwICovLApAQCAtNzMzNywxMCArNzM1Myw2IEBACiAJCQkJQTU1
QkE4MUIxQkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5LmNwcCAqLywK
IAkJCQlBNTVCQTgxOTFCQTI1QjFFMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHku
aCAqLywKIAkJCQlBNTVCQTgxQTFCQTI1QjFFMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHkubWVzc2FnZXMuaW4gKi8sCi0JCQkJODM2ODFEQ0IyMEUyOTA0QjAwQzI0OUNEIC8qIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAgKi8sCi0JCQkJODM2ODFEQ0EyMEUy
OTA0QTAwQzI0OUNEIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oICovLAot
CQkJCTUxRTZDMTYyMUYyOTM1Q0QwMEZEMzQzNyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVy
c2lzdGVudFN0b3JhZ2UuY3BwICovLAotCQkJCTUxRTZDMTYxMUYyOTM1Q0QwMEZEMzQzNyAvKiBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuaCAqLywKIAkJCQlCQzExMUIw
ODExMkY1RTNDMDAzMzdCQUIgLyogUmVzcG9uc2l2ZW5lc3NUaW1lci5jcHAgKi8sCiAJCQkJMUEz
MDA2NkMxMTEwRjRGNzAwMzE5MzdDIC8qIFJlc3BvbnNpdmVuZXNzVGltZXIuaCAqLywKIAkJCQk1
Q0E5ODU0OTIxMEJFQjVBMDA1N0VCNkIgLyogU2FmZUJyb3dzaW5nV2FybmluZy5oICovLApAQCAt
NzQ1NiwxMSArNzQ2OCw3IEBACiAJCQkJQkMxMTFCMEQxMTJGNUU0RjAwMzM3QkFCIC8qIFdlYlBy
b2Nlc3NQcm94eS5jcHAgKi8sCiAJCQkJQkMwMzJEQ0YxMEY0Mzg5RjAwNThDMTVBIC8qIFdlYlBy
b2Nlc3NQcm94eS5oICovLAogCQkJCUJDRUU3QUIzMTI4MTcwOTUwMDk4MjdEQSAvKiBXZWJQcm9j
ZXNzUHJveHkubWVzc2FnZXMuaW4gKi8sCi0JCQkJN0E5Q0Q4QzAxQzc3OTg0OTAwRDlGNkM3IC8q
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgKi8sCi0JCQkJN0E5Q0Q4QzExQzc3
OTg0OTAwRDlGNkM3IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oICovLAogCQkJ
CTdBOUNEOEMyMUM3NzlBRDYwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUubWVzc2FnZXMuaW4gKi8sCi0JCQkJNkI4MjFEREIxRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwICovLAotCQkJCTZCODIxRERBMUVFRjA1
REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmggKi8sCiAJ
CQkJNTFEMTI0MjQxRTZEM0NDMzAwMkIyODIwIC8qIFdlYlVSTFNjaGVtZUhhbmRsZXIuY3BwICov
LAogCQkJCTUxRDEyNDI1MUU2RDNDQzMwMDJCMjgyMCAvKiBXZWJVUkxTY2hlbWVIYW5kbGVyLmgg
Ki8sCiAJCQkJNTFFOEI2OEQxRTcxMjg3MzAwMUI3MTMyIC8qIFdlYlVSTFNjaGVtZVRhc2suY3Bw
ICovLApAQCAtOTE5MCw3ICs5MTk4LDcgQEAKIAkJCQkyREMxOEZCMDIxODkxMjY0MDAyNUE4OEQg
LyogUGVuY2lsS2l0U1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzI5OERBMDFDM0RGMDIxMDA0
NzBBRkUgLyogUGVuZGluZ0Rvd25sb2FkLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzJFRDE4QzFF
MkZFMTU3MDA2QkE2NEEgLyogUGVyQWN0aXZpdHlTdGF0ZUNQVVVzYWdlU2FtcGxlci5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMDcyOTdGOUYxQzE3QUExQTAxNUYwNzM1IC8qIFBlcnNpc3RlbmN5VXRp
bHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTdBRkJEMzZGMjFFNTQ2RjgwMDVEQkFDQiAvKiBQZXJz
aXN0ZW5jeVV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0U4NUIyMDFDODhFNjRCMDA3MEJG
Q0UgLyogUGluZ0xvYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUUyMDA0MThFNzcwNTEwMDNF
QzNFNSAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLmggaW4gSGVhZGVycyAqLywKIAkJCQky
REEwNDlCNDE4MENDQ0QzMDBBQUZBOUUgLyogUGxhdGZvcm1DQUxheWVyUmVtb3RlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTkyNjMsOCArOTI3MSw4IEBACiAJCQkJQTU1QkE4MTcxQkEyM0UxMjAwN0NE
MzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJLmggaW4gSGVhZGVycyAqLywKIAkJCQk2QkU5NjlD
RDFFNTRFMDU0MDA4Qjc0ODMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTZCRTk2OUNCMUU1NEQ0Q0YwMDhCNzQ4MyAvKiBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hLmggaW4gSGVhZGVycyAqLywKLQkJCQk4M0IzQ0Ix
MDIwRTJBQjAxMDA0NDFFOUIgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk1MUU2QzE2NDFGMjkzNUREMDBGRDM0MzcgLyogUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QUZC
RDM2NzIxRTUxQkFCMDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3QUZCRDM2QTIxRTU0MkYxMDA1REJBQ0IgLyogUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QTMwMDY2RTExMTBGNEY3MDAzMTkzN0MgLyogUmVzcG9uc2l2ZW5lc3NUaW1lci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDEwNDgyQ0UxREREMzI0RjAwRjAwNkQwIC8qIFJUQ05ldHdvcmsuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBFOTdENzREMjAwRTkwMDQwMEJGNjY0MyAvKiBTYWZlQnJvd3NpbmdT
UEkuaCBpbiBIZWFkZXJzICovLApAQCAtOTUxOCw4ICs5NTI2LDggQEAKIAkJCQkzNzYwODgxRjE1
MDQxM0U5MDBGQzgyQzcgLyogV2ViUmVuZGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MTBBRkZCQTE2NTQyMDQ4MDAxQkEwNUUgLyogV2ViUmVzb3VyY2VMb2FkZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxRjA2MEUwMTY1NDMxN0YwMEYzMjgxQiAvKiBXZWJSZXNvdXJjZUxvYWRlck1l
c3NhZ2VzLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QUZCRDM2MzIxRTUwRjM5MDA1REJBQ0IgLyog
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QTc5
MUVGQjFDN0NGRDAxMDBDNEM1MkIgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlTWVz
c2FnZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTZCODIxRERDMUVFRjA1REQwMEQ3QUY0QSAvKiBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk0
MTMwNzVCMDFERTg1RjU4MDAzOUVDNjkgLyogV2ViUlRDTW9uaXRvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDFGQUY1RjUxRTNDMDY0OTAwMUFFNjc4IC8qIFdlYlJUQ1Jlc29sdmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MURDNDU5RjFFM0RCREE1MDBCMTFGNTEgLyogV2ViUlRDU29ja2V0Lmgg
aW4gSGVhZGVycyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358629</attachid>
            <date>2019-01-08 13:25:32 -0800</date>
            <delta_ts>2019-01-08 13:35:47 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-193252-20190108132531.patch</filename>
            <type>text/plain</type>
            <size>351040</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5NzA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDEzMTlkZGUxNzlhM2M0NzAz
OGY3NGRmMTM4ZmQ0OTRmMmI1NzQwZWMuLjUzM2YxMDFmOGFlM2VjMTZmM2JiOTk5ZTBmMDZkYWUz
NDVjNmVkN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTktMDEtMDggIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzIGZpbGVzIGZyb20gVUlQcm9jZXNzIHRvIE5ldHdvcmtQcm9jZXNzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTMyNTIKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzQ3MTI1NDAxPgorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hy
aXN0ZW5zZW4uCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyB0aGUgZmlyc3QgcGFydCBvZiBhIHJl
ZmFjdG9yaW5nIHRvIG1vdmUgdGhlIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgbG9naWMgZnJvbSB0
aGUgVUlQcm9jZXNzIHRvIHRoZSBOZXR3b3JrUHJvY2Vzcy4KKworICAgICAgICBUaGlzIHBhdGNo
IG1vdmVzIGNvZGUgaW50byBkaWZmZXJlbnQgZm9sZGVycyBhbmQgYWRqdXN0cyBuZWNlc3Nhcnkg
YnVpbGQgZmlsZXMsIGJ1dCBkb2VzIG5vdCBjaGFuZ2Ugd2hlcmUgdGhlIGNvZGUgZXhlY3V0ZXMu
IFRoZXNlCisgICAgICAgIGNoYW5nZXMgaGF2ZSBubyBpbXBhY3Qgb24gYmVoYXZpb3Igb3IgdGVz
dCByZXN1bHRzLgorCisgICAgICAgIEkgYWxzbyBtb2RpZmllZCBhIGZldyBmaWxlcyB0byBhZGQg
bWlzc2luZyBpbmNsdWRlIGZpbGVzIHVuY292ZXJlZCBieSB0aGUgdW5pZmllZCBidWlsZCBzeXN0
ZW0uCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwLgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUuaC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVu
dFN0b3JhZ2UuY3BwLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2Uu
aC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuaC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAuCisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1l
dHJ5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmguCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxv
YWRzL1BlbmRpbmdEb3dubG9hZC5jcHA6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxv
YWRzL1BlbmRpbmdEb3dubG9hZC5oOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAg
ICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIFNoYXJlZC9QZXJzaXN0ZW5jeVV0
aWxzLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BlcnNpc3RlbmN5
VXRpbHMuY3BwLgorICAgICAgICAqIFNoYXJlZC9QZXJzaXN0ZW5jeVV0aWxzLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QZXJzaXN0ZW5jeVV0aWxzLmguCisgICAgICAg
ICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBT
b3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzV1BFLnR4dDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdLV2Vic2l0
ZURhdGFTdG9yZVNldFdlYkF1dGhlbnRpY2F0aW9uTW9ja0NvbmZpZ3VyYXRpb24pOiBBZGQgbWlz
c2luZyBXZWJLaXQ6OiBzY29wZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvVXNlck1lZGlhUGVybWlz
c2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwOiBBZGQgbWlzc2luZyBpbmNsdWRlLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd24uY3BwOiBEaXR0by4K
KyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL0Rpc3BsYXlMaW5rLmNwcDoKKyAgICAgICAgKiBVbmlm
aWVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorCiAyMDE5LTAxLTA3ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxl
LmNvbT4KIAogICAgICAgICBUdXJuIG9uIFBvaW50ZXIgRXZlbnRzIGJ5IGRlZmF1bHQgZm9yIGlP
UwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xOWMzOGUxYzQ3Y2VkNjA4MjU3OGU3ZDE5MzgxNTFmZDUwZjc1NGZkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAKQEAgLTAsMCArMSwxMjk0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmgiCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisj
aW5jbHVkZSAiUGx1Z2luUHJvY2Vzc01hbmFnZXIuaCIKKyNpbmNsdWRlICJQbHVnaW5Qcm9jZXNz
UHJveHkuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3Jh
Z2UuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlICJXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvS2V5ZWRDb2RpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3MuaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NvbnN0ZXhwciB1bnNpZ25lZCBzdGF0
aXN0aWNzTW9kZWxWZXJzaW9uIHsgMTQgfTsKK2NvbnN0ZXhwciB1bnNpZ25lZCBtYXhOdW1iZXJP
ZlJlY3Vyc2l2ZUNhbGxzSW5SZWRpcmVjdFRyYWNlQmFjayB7IDUwIH07Citjb25zdGV4cHIgU2Vj
b25kcyBtaW5pbXVtU3RhdGlzdGljc1Byb2Nlc3NpbmdJbnRlcnZhbCB7IDVfcyB9OworY29uc3Rl
eHByIHVuc2lnbmVkIG9wZXJhdGluZ0RhdGVzV2luZG93IHsgMzAgfTsKK2NvbnN0ZXhwciB1bnNp
Z25lZCBtYXhJbXBvcnRhbmNlIHsgMyB9Oworc3RhdGljIGNvbnN0IGNoYXIqIGRlYnVnU3RhdGlj
UHJldmFsZW50UmVzb3VyY2UgeyAiM3JkcGFydHl0ZXN0d2Via2l0Lm9yZyIgfTsKKworI2lmICFS
RUxFQVNFX0xPR19ESVNBQkxFRAorc3RhdGljIFN0cmluZyBkb21haW5zVG9TdHJpbmcoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGRvbWFpbnMpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwor
ICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykgeworICAgICAgICBpZiAoIWJ1aWxkZXIu
aXNFbXB0eSgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOworICAg
ICAgICBidWlsZGVyLmFwcGVuZChkb21haW4pOworICAgIH0KKyAgICByZXR1cm4gYnVpbGRlci50
b1N0cmluZygpOworfQorI2VuZGlmCisKK2NsYXNzIE9wZXJhdGluZ0RhdGUgeworcHVibGljOgor
ICAgIE9wZXJhdGluZ0RhdGUoKSA9IGRlZmF1bHQ7CisKKyAgICBzdGF0aWMgT3BlcmF0aW5nRGF0
ZSBmcm9tV2FsbFRpbWUoV2FsbFRpbWUgdGltZSkKKyAgICB7CisgICAgICAgIGRvdWJsZSBtcyA9
IHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS5taWxsaXNlY29uZHMoKTsKKyAgICAgICAgaW50IHll
YXIgPSBtc1RvWWVhcihtcyk7CisgICAgICAgIGludCB5ZWFyRGF5ID0gZGF5SW5ZZWFyKG1zLCB5
ZWFyKTsKKyAgICAgICAgaW50IG1vbnRoID0gbW9udGhGcm9tRGF5SW5ZZWFyKHllYXJEYXksIGlz
TGVhcFllYXIoeWVhcikpOworICAgICAgICBpbnQgbW9udGhEYXkgPSBkYXlJbk1vbnRoRnJvbURh
eUluWWVhcih5ZWFyRGF5LCBpc0xlYXBZZWFyKHllYXIpKTsKKworICAgICAgICByZXR1cm4gT3Bl
cmF0aW5nRGF0ZSB7IHllYXIsIG1vbnRoLCBtb250aERheSB9OworICAgIH0KKworICAgIHN0YXRp
YyBPcGVyYXRpbmdEYXRlIHRvZGF5KCkKKyAgICB7CisgICAgICAgIHJldHVybiBPcGVyYXRpbmdE
YXRlOjpmcm9tV2FsbFRpbWUoV2FsbFRpbWU6Om5vdygpKTsKKyAgICB9CisKKyAgICBTZWNvbmRz
IHNlY29uZHNTaW5jZUVwb2NoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTZWNvbmRz
IHsgZGF0ZVRvRGF5c0Zyb20xOTcwKG1feWVhciwgbV9tb250aCwgbV9tb250aERheSkgKiBzZWNv
bmRzUGVyRGF5IH07CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE9wZXJhdGlu
Z0RhdGUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbW9udGhEYXkgPT0g
b3RoZXIubV9tb250aERheSAmJiBtX21vbnRoID09IG90aGVyLm1fbW9udGggJiYgbV95ZWFyID09
IG90aGVyLm1feWVhcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBPcGVyYXRp
bmdEYXRlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzZWNvbmRzU2luY2VF
cG9jaCgpIDwgb3RoZXIuc2Vjb25kc1NpbmNlRXBvY2goKTsKKyAgICB9CisKKyAgICBib29sIG9w
ZXJhdG9yPD0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gc2Vjb25kc1NpbmNlRXBvY2goKSA8PSBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBPcGVyYXRpbmdEYXRlKGludCB5ZWFyLCBpbnQgbW9u
dGgsIGludCBtb250aERheSkKKyAgICAgICAgOiBtX3llYXIoeWVhcikKKyAgICAgICAgLCBtX21v
bnRoKG1vbnRoKQorICAgICAgICAsIG1fbW9udGhEYXkobW9udGhEYXkpCisgICAgeyB9CisKKyAg
ICBpbnQgbV95ZWFyIHsgMCB9OworICAgIGludCBtX21vbnRoIHsgMCB9OyAvLyBbMCwgMTFdLgor
ICAgIGludCBtX21vbnRoRGF5IHsgMCB9OyAvLyBbMSwgMzFdLgorfTsKKworc3RhdGljIFZlY3Rv
cjxPcGVyYXRpbmdEYXRlPiBtZXJnZU9wZXJhdGluZ0RhdGVzKGNvbnN0IFZlY3RvcjxPcGVyYXRp
bmdEYXRlPiYgZXhpc3RpbmdEYXRlcywgVmVjdG9yPE9wZXJhdGluZ0RhdGU+JiYgbmV3RGF0ZXMp
Cit7CisgICAgaWYgKGV4aXN0aW5nRGF0ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gV1RG
TW92ZShuZXdEYXRlcyk7CisKKyAgICBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4gbWVyZ2VkRGF0ZXMo
ZXhpc3RpbmdEYXRlcy5zaXplKCkgKyBuZXdEYXRlcy5zaXplKCkpOworCisgICAgLy8gTWVyZ2Ug
dGhlIHR3byBzb3J0ZWQgdmVjdG9ycyBvZiBkYXRlcy4KKyAgICBzdGQ6Om1lcmdlKGV4aXN0aW5n
RGF0ZXMuYmVnaW4oKSwgZXhpc3RpbmdEYXRlcy5lbmQoKSwgbmV3RGF0ZXMuYmVnaW4oKSwgbmV3
RGF0ZXMuZW5kKCksIG1lcmdlZERhdGVzLmJlZ2luKCkpOworICAgIC8vIFJlbW92ZSBkdXBsaWNh
dGUgZGF0ZXMuCisgICAgcmVtb3ZlUmVwZWF0ZWRFbGVtZW50cyhtZXJnZWREYXRlcyk7CisKKyAg
ICAvLyBEcm9wIG9sZCBkYXRlcyB1bnRpbCB0aGUgVmVjdG9yIHNpemUgcmVhY2hlcyBvcGVyYXRp
bmdEYXRlc1dpbmRvdy4KKyAgICB3aGlsZSAobWVyZ2VkRGF0ZXMuc2l6ZSgpID4gb3BlcmF0aW5n
RGF0ZXNXaW5kb3cpCisgICAgICAgIG1lcmdlZERhdGVzLnJlbW92ZSgwKTsKKworICAgIHJldHVy
biBtZXJnZWREYXRlczsKK30KKworc3RydWN0IFN0YXRpc3RpY3NMYXN0U2VlbiB7CisgICAgU3Ry
aW5nIHRvcFByaXZhdGVseU93bmVkRG9tYWluOworICAgIFdhbGxUaW1lIGxhc3RTZWVuOworfTsK
Kworc3RhdGljIHZvaWQgcHJ1bmVSZXNvdXJjZXMoSGFzaE1hcDxTdHJpbmcsIFdlYkNvcmU6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3M+JiBzdGF0aXN0aWNzTWFwLCBWZWN0b3I8U3RhdGlzdGljc0xh
c3RTZWVuPiYgc3RhdGlzdGljc1RvUHJ1bmUsIHNpemVfdCYgbnVtYmVyT2ZFbnRyaWVzVG9QcnVu
ZSkKK3sKKyAgICBpZiAoc3RhdGlzdGljc1RvUHJ1bmUuc2l6ZSgpID4gbnVtYmVyT2ZFbnRyaWVz
VG9QcnVuZSkgeworICAgICAgICBzdGQ6OnNvcnQoc3RhdGlzdGljc1RvUHJ1bmUuYmVnaW4oKSwg
c3RhdGlzdGljc1RvUHJ1bmUuZW5kKCksIFtdKGNvbnN0IFN0YXRpc3RpY3NMYXN0U2VlbiYgYSwg
Y29uc3QgU3RhdGlzdGljc0xhc3RTZWVuJiBiKSB7CisgICAgICAgICAgICByZXR1cm4gYS5sYXN0
U2VlbiA8IGIubGFzdFNlZW47CisgICAgICAgIH0pOworICAgIH0KKworICAgIGZvciAoc2l6ZV90
IGkgPSAwLCBlbmQgPSBzdGQ6Om1pbihudW1iZXJPZkVudHJpZXNUb1BydW5lLCBzdGF0aXN0aWNz
VG9QcnVuZS5zaXplKCkpOyBpICE9IGVuZDsgKytpLCAtLW51bWJlck9mRW50cmllc1RvUHJ1bmUp
CisgICAgICAgIHN0YXRpc3RpY3NNYXAucmVtb3ZlKHN0YXRpc3RpY3NUb1BydW5lW2ldLnRvcFBy
aXZhdGVseU93bmVkRG9tYWluKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVJbXBvcnRh
bmNlKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljKQorewor
ICAgIHVuc2lnbmVkIGltcG9ydGFuY2UgPSBtYXhJbXBvcnRhbmNlOworICAgIGlmICghcmVzb3Vy
Y2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSkKKyAgICAgICAgaW1wb3J0YW5jZSAtPSAx
OworICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uKQorICAgICAg
ICBpbXBvcnRhbmNlIC09IDI7CisgICAgcmV0dXJuIGltcG9ydGFuY2U7Cit9CisKK1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYgc3RvcmUsIFdvcmtRdWV1ZSYgd29y
a1F1ZXVlKQorICAgIDogbV9zdG9yZShzdG9yZSkKKyAgICAsIG1fd29ya1F1ZXVlKHdvcmtRdWV1
ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKTsKKyNlbmRpZgorICAgIGlu
Y2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCk7CisKKyAgICBtX3dvcmtRdWV1
ZS0+ZGlzcGF0Y2hBZnRlcig1X3MsIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0gewor
ICAgICAgICBpZiAod2Vha1RoaXMpCisgICAgICAgICAgICB3ZWFrVGhpcy0+Y2FsY3VsYXRlQW5k
U3VibWl0VGVsZW1ldHJ5KCk7CisgICAgfSk7Cit9CisKK1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6flJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSgpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpzZXRQZXJzaXN0ZW50U3RvcmFnZShSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzUGVyc2lzdGVudFN0b3JhZ2UmIHBlcnNpc3RlbnRTdG9yYWdlKQoreworICAgIG1fcGVyc2lz
dGVudFN0b3JhZ2UgPSBtYWtlV2Vha1B0cihwZXJzaXN0ZW50U3RvcmFnZSk7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpjYWxjdWxhdGVBbmRTdWJtaXRUZWxl
bWV0cnkoKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
aWYgKG1fcGFyYW1ldGVycy5zaG91bGRTdWJtaXRUZWxlbWV0cnkpCisgICAgICAgIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OmNhbGN1bGF0ZUFuZFN1Ym1pdCgqdGhpcyk7Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXROb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisgICAgbV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2VzV2hl
bkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgPSB2YWx1ZTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0
YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisgICAgbV9wYXJhbWV0ZXJzLnNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0
YVJlY29yZHNSZW1vdmFsID0gdmFsdWU7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpzZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkoYm9vbCB2YWx1ZSkKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBtX3BhcmFtZXRlcnMuc2hvdWxkU3Vi
bWl0VGVsZW1ldHJ5ID0gdmFsdWU7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpyZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y2FsbGJhY2spCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAo
IXNob3VsZFJlbW92ZURhdGFSZWNvcmRzKCkpIHsKKyAgICAgICAgY2FsbGJhY2soKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAg
IG1fYWN0aXZlUGx1Z2luVG9rZW5zLmNsZWFyKCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBwbHVn
aW4gOiBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkucGx1Z2luUHJvY2Vzc2VzKCkp
CisgICAgICAgIG1fYWN0aXZlUGx1Z2luVG9rZW5zLmFkZChwbHVnaW4tPnBsdWdpblByb2Nlc3NU
b2tlbigpKTsKKyNlbmRpZgorCisgICAgYXV0byBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMgPSB0
b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IoKTsKKyAg
ICBpZiAocHJldmFsZW50UmVzb3VyY2VEb21haW5zLmlzRW1wdHkoKSkgeworICAgICAgICBjYWxs
YmFjaygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FC
TEVECisgICAgUkVMRUFTRV9MT0dfSU5GT19JRihtX2RlYnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvIHJlbW92ZSBkYXRhIHJlY29yZHMgZm9y
ICV7cHVibGljfXMuIiwgZG9tYWluc1RvU3RyaW5nKHByZXZhbGVudFJlc291cmNlRG9tYWlucyku
dXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKKworICAgIHNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVk
KHRydWUpOworCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcmV2YWxlbnRSZXNvdXJj
ZURvbWFpbnMgPSBjcm9zc1RocmVhZENvcHkocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyks
IHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgPSBtX3BhcmFtZXRl
cnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwgd29ya1F1ZXVl
ID0gbV93b3JrUXVldWUuY29weVJlZigpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgV2ViUHJvY2Vz
c1Byb3h5OjpkZWxldGVXZWJzaXRlRGF0YUZvclRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5z
SW5BbGxQZXJzaXN0ZW50RGF0YVN0b3JlcyhXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
Om1vbml0b3JlZERhdGFUeXBlcygpLCBXVEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9tYWlucyks
IHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQsIFtjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spLCB3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCB3b3JrUXVl
dWUgPSB3b3JrUXVldWUuY29weVJlZigpXShjb25zdCBIYXNoU2V0PFN0cmluZz4mIGRvbWFpbnNX
aXRoRGVsZXRlZFdlYnNpdGVEYXRhKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHdvcmtRdWV1ZS0+
ZGlzcGF0Y2goW3RvcERvbWFpbnMgPSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1dpdGhEZWxldGVk
V2Vic2l0ZURhdGEpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB3ZWFrVGhpcyA9IFdU
Rk1vdmUod2Vha1RoaXMpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBpZiAoIXdlYWtU
aGlzKSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yIChhdXRv
JiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbiA6IHRvcERvbWFpbnMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byYgc3RhdGlzdGljID0gd2Vha1RoaXMtPmVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclByaW1hcnlEb21haW4ocHJldmFsZW50UmVzb3VyY2VEb21haW4pOworICAgICAgICAgICAg
ICAgICAgICArK3N0YXRpc3RpYy5kYXRhUmVjb3Jkc1JlbW92ZWQ7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5zZXREYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZChm
YWxzZSk7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKKyNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKHdlYWtUaGlzLT5tX2Rl
YnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkRvbmUgcmVt
b3ZpbmcgZGF0YSByZWNvcmRzLiIpOworI2VuZGlmCisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fSk7CisgICAgfSk7Cit9CisKK3Vuc2lnbmVkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6cmVjdXJzaXZlbHlHZXRBbGxEb21haW5zVGhhdEhhdmVSZWRpcmVjdGVkVG9UaGlzRG9t
YWluKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlz
dGljLCBIYXNoU2V0PFN0cmluZz4mIGRvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUbywgdW5zaWdu
ZWQgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscykgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKKworICAgIGlmIChudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzID49IG1heE51bWJl
ck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJhY2VCYWNrKSB7CisgICAgICAgIC8vIE1vZGVs
IHZlcnNpb24gMTQgaW52b2tlcyBhIGRlbGliZXJhdGUgcmUtY2xhc3NpZmljYXRpb24gb2YgdGhl
IHdob2xlIHNldC4KKyAgICAgICAgaWYgKHN0YXRpc3RpY3NNb2RlbFZlcnNpb24gIT0gMTQpCisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgUkVMRUFTRV9MT0coUmVz
b3VyY2VMb2FkU3RhdGlzdGljcywgIkhpdCAldSByZWN1cnNpdmUgY2FsbHMgaW4gcmVkaXJlY3Qg
YmFja3RyYWNlLiBSZXR1cm5pbmcgZWFybHkuIiwgbWF4TnVtYmVyT2ZSZWN1cnNpdmVDYWxsc0lu
UmVkaXJlY3RUcmFjZUJhY2spOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZSZWN1cnNpdmVDYWxs
czsKKyAgICB9CisKKyAgICBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKys7CisKKyAgICBmb3IgKGF1
dG8mIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tRG9tYWluIDogcmVzb3VyY2VTdGF0aXN0
aWMuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLnZhbHVlcygpKSB7CisgICAgICAgIGF1
dG8gbWFwRW50cnkgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5maW5kKHN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RGcm9tRG9tYWluKTsKKyAgICAgICAgaWYgKG1hcEVudHJ5ID09IG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLmVuZCgpIHx8IG1hcEVudHJ5LT52YWx1ZS5pc1ByZXZhbGVudFJlc291
cmNlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChkb21haW5zVGhhdEhhdmVS
ZWRpcmVjdGVkVG8uYWRkKG1hcEVudHJ5LT52YWx1ZS5oaWdoTGV2ZWxEb21haW4pLmlzTmV3RW50
cnkpCisgICAgICAgICAgICBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzID0gcmVjdXJzaXZlbHlHZXRB
bGxEb21haW5zVGhhdEhhdmVSZWRpcmVjdGVkVG9UaGlzRG9tYWluKG1hcEVudHJ5LT52YWx1ZSwg
ZG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvLCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKTsKKyAg
ICB9CisgICAgZm9yIChhdXRvJiB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbURvbWFpbiA6IHJl
c291cmNlU3RhdGlzdGljLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS52YWx1ZXMoKSkgewor
ICAgICAgICBhdXRvIG1hcEVudHJ5ID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZmluZCh0b3BG
cmFtZVVuaXF1ZVJlZGlyZWN0RnJvbURvbWFpbik7CisgICAgICAgIGlmIChtYXBFbnRyeSA9PSBt
X3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSB8fCBtYXBFbnRyeS0+dmFsdWUuaXNQcmV2YWxl
bnRSZXNvdXJjZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoZG9tYWluc1Ro
YXRIYXZlUmVkaXJlY3RlZFRvLmFkZChtYXBFbnRyeS0+dmFsdWUuaGlnaExldmVsRG9tYWluKS5p
c05ld0VudHJ5KQorICAgICAgICAgICAgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscyA9IHJlY3Vyc2l2
ZWx5R2V0QWxsRG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvVGhpc0RvbWFpbihtYXBFbnRyeS0+
dmFsdWUsIGRvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUbywgbnVtYmVyT2ZSZWN1cnNpdmVDYWxs
cyk7CisgICAgfQorCisgICAgcmV0dXJuIG51bWJlck9mUmVjdXJzaXZlQ2FsbHM7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhh
c1JlZGlyZWN0ZWRUb1ByZXZhbGVudChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBy
ZXNvdXJjZVN0YXRpc3RpYykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIGlmIChyZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBmb3IgKGF1dG8mIHN1YnJlc291cmNlRG9tYWluUmVkaXJlY3RlZFRvIDog
cmVzb3VyY2VTdGF0aXN0aWMuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby52YWx1ZXMoKSkg
eworICAgICAgICBhdXRvIG1hcEVudHJ5ID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZmluZChz
dWJyZXNvdXJjZURvbWFpblJlZGlyZWN0ZWRUbyk7CisgICAgICAgIGlmIChtYXBFbnRyeSAhPSBt
X3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSAmJiBtYXBFbnRyeS0+dmFsdWUuaXNQcmV2YWxl
bnRSZXNvdXJjZSkgeworICAgICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VT
dGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChhdXRvJiB0b3BGcmFtZURvbWFpblJl
ZGlyZWN0ZWRUbyA6IHJlc291cmNlU3RhdGlzdGljLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8u
dmFsdWVzKCkpIHsKKyAgICAgICAgYXV0byBtYXBFbnRyeSA9IG1fcmVzb3VyY2VTdGF0aXN0aWNz
TWFwLmZpbmQodG9wRnJhbWVEb21haW5SZWRpcmVjdGVkVG8pOworICAgICAgICBpZiAobWFwRW50
cnkgIT0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5kKCkgJiYgbWFwRW50cnktPnZhbHVlLmlz
UHJldmFsZW50UmVzb3VyY2UpIHsKKyAgICAgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKHJl
c291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OmlzUHJldmFsZW50RHVlVG9EZWJ1Z01vZGUoUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpCit7CisgICAgaWYgKCFtX2RlYnVnTW9kZUVu
YWJsZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiByZXNvdXJjZVN0YXRp
c3RpYy5oaWdoTGV2ZWxEb21haW4gPT0gZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSB8fCBy
ZXNvdXJjZVN0YXRpc3RpYy5oaWdoTGV2ZWxEb21haW4gPT0gbV9kZWJ1Z01hbnVhbFByZXZhbGVu
dFJlc291cmNlOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpCit7CisgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CisKKyAgICBpZiAobV9wYXJhbWV0ZXJzLnNob3VsZENsYXNzaWZ5UmVzb3Vy
Y2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKSB7CisgICAgICAgIGZvciAoYXV0byYgcmVzb3Vy
Y2VTdGF0aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkgeworICAgICAg
ICAgICAgaWYgKGlzUHJldmFsZW50RHVlVG9EZWJ1Z01vZGUocmVzb3VyY2VTdGF0aXN0aWMpKQor
ICAgICAgICAgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLCBS
ZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCFyZXNv
dXJjZVN0YXRpc3RpYy5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSkgeworICAgICAgICAgICAgICAg
IG1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KHJlc291cmNlU3RhdGlz
dGljKTsKKyAgICAgICAgICAgICAgICBhdXRvIGN1cnJlbnRQcmV2YWxlbmNlID0gcmVzb3VyY2VT
dGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSA/IFJlc291cmNlTG9hZFByZXZhbGVuY2U6Okhp
Z2ggOiBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpMb3c7CisgICAgICAgICAgICAgICAgYXV0byBu
ZXdQcmV2YWxlbmNlID0gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5jYWxjdWxh
dGVSZXNvdXJjZVByZXZhbGVuY2UocmVzb3VyY2VTdGF0aXN0aWMsIGN1cnJlbnRQcmV2YWxlbmNl
KTsKKyAgICAgICAgICAgICAgICBpZiAobmV3UHJldmFsZW5jZSAhPSBjdXJyZW50UHJldmFsZW5j
ZSkKKyAgICAgICAgICAgICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0
aXN0aWMsIG5ld1ByZXZhbGVuY2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgcmVtb3ZlRGF0YVJlY29yZHMoW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRo
aXMpXSB7CisgICAgICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgICAgICBpZiAo
IXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHBydW5lU3RhdGlzdGlj
c0lmTmVlZGVkKCk7CisgICAgICAgIGlmIChtX3BlcnNpc3RlbnRTdG9yYWdlKQorICAgICAgICAg
ICAgbV9wZXJzaXN0ZW50U3RvcmFnZS0+c2NoZWR1bGVPcldyaXRlTWVtb3J5U3RvcmUoUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlOjpGb3JjZUltbWVkaWF0ZVdyaXRlOjpO
byk7CisKKyAgICAgICAgaWYgKCFtX3BhcmFtZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0
YVJlY29yZHNXZXJlU2Nhbm5lZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goW10geworICAgICAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojpu
b3RpZnlQYWdlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2VkKCk7CisgICAgICAgIH0p
OworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
aGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdHJpbmcmIHN1YkZyYW1lUHJpbWFyeURvbWFpbiwgY29u
c3QgU3RyaW5nJiB0b3BGcmFtZVByaW1hcnlEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2
NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8mIHN1
YkZyYW1lU3RhdGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFp
bihzdWJGcmFtZVByaW1hcnlEb21haW4pOworICAgIGlmIChzaG91bGRCbG9ja0FuZFB1cmdlQ29v
a2llcyhzdWJGcmFtZVN0YXRpc3RpYykpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFs
c2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFzaG91bGRCbG9ja0FuZEtl
ZXBDb29raWVzKHN1YkZyYW1lU3RhdGlzdGljKSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cih0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJ1bkxvb3A6Om1haW4oKS5k
aXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBzdWJGcmFtZVByaW1hcnlEb21haW4g
PSBzdWJGcmFtZVByaW1hcnlEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lUHJpbWFyeURv
bWFpbiA9IHRvcEZyYW1lUHJpbWFyeURvbWFpbi5pc29sYXRlZENvcHkoKSwgZnJhbWVJRCwgcGFn
ZUlELCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgeworICAgICAgICBzdG9yZS0+Y2FsbEhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZUhhbmRs
ZXIoc3ViRnJhbWVQcmltYXJ5RG9tYWluLCB0b3BGcmFtZVByaW1hcnlEb21haW4sIGZyYW1lSUQs
IHBhZ2VJRCwgW3N0b3JlID0gc3RvcmUuY29weVJlZigpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShib29sIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAg
ICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHJlc3VsdF0gKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVzdWx0KTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKFN0cmluZyYmIHN1YkZyYW1lUHJpbWFyeURv
bWFpbiwgU3RyaW5nJiYgdG9wRnJhbWVQcmltYXJ5RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1
aW50NjRfdCBwYWdlSUQsIGJvb2wgcHJvbXB0RW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChTdG9yYWdlQWNjZXNzU3RhdHVzKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8mIHN1YkZyYW1lU3RhdGlzdGljID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihzdWJGcmFtZVByaW1hcnlE
b21haW4pOworICAgIGlmIChzaG91bGRCbG9ja0FuZFB1cmdlQ29va2llcyhzdWJGcmFtZVN0YXRp
c3RpYykpIHsKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICAgICAgUkVMRUFTRV9MT0df
SU5GT19JRihtX2RlYnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1
ZywgIkNhbm5vdCBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAle3B1YmxpY31zIHNpbmNlIGl0cyBj
b29raWVzIGFyZSBibG9ja2VkIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzIGFuZCBpdCBoYXMgbm90
IHJlY2VpdmVkIHVzZXIgaW50ZXJhY3Rpb24gYXMgZmlyc3QtcGFydHkuIiwgc3ViRnJhbWVQcmlt
YXJ5RG9tYWluLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKFN0b3JhZ2VBY2Nlc3NTdGF0dXM6OkNhbm5vdFJlcXVlc3RBY2Nlc3MpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCFzaG91bGRCbG9ja0FuZEtlZXBDb29raWVzKHN1YkZy
YW1lU3RhdGlzdGljKSkgeworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICAgICBSRUxF
QVNFX0xPR19JTkZPX0lGKG1fZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RlYnVnLCAiTm8gbmVlZCB0byBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAle3B1YmxpY31z
IHNpbmNlIGl0cyBjb29raWVzIGFyZSBub3QgYmxvY2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0
cy4iLCBzdWJGcmFtZVByaW1hcnlEb21haW4udXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKKyAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6SGFzQWNjZXNzKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gdXNlcldhc1Byb21wdGVkRWFybGllciA9
IHByb21wdEVuYWJsZWQgJiYgaGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21w
dChzdWJGcmFtZVN0YXRpc3RpYywgdG9wRnJhbWVQcmltYXJ5RG9tYWluKTsKKyAgICBpZiAocHJv
bXB0RW5hYmxlZCAmJiAhdXNlcldhc1Byb21wdGVkRWFybGllcikgeworI2lmICFSRUxFQVNFX0xP
R19ESVNBQkxFRAorICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKG1fZGVidWdMb2dnaW5nRW5h
YmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gYXNrIHRoZSB1c2Vy
IHdoZXRoZXIgdGhleSB3YW50IHRvIGdyYW50IHN0b3JhZ2UgYWNjZXNzIHRvICV7cHVibGljfXMg
dW5kZXIgJXtwdWJsaWN9cyBvciBub3QuIiwgc3ViRnJhbWVQcmltYXJ5RG9tYWluLnV0ZjgoKS5k
YXRhKCksIHRvcEZyYW1lUHJpbWFyeURvbWFpbi51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpSZXF1aXJlc1VzZXJQ
cm9tcHQpOworICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmICh1c2VyV2FzUHJvbXB0ZWRF
YXJsaWVyKSB7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgICAgIFJFTEVBU0VfTE9H
X0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWcsICJTdG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCB0byAle3B1YmxpY31zIHVuZGVyICV7cHVi
bGljfXMuIiwgc3ViRnJhbWVQcmltYXJ5RG9tYWluLnV0ZjgoKS5kYXRhKCksIHRvcEZyYW1lUHJp
bWFyeURvbWFpbi51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorICAgIH0KKworICAgIHN1YkZyYW1l
U3RhdGlzdGljLnRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkr
KzsKKworICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoc3ViRnJhbWVQcmlt
YXJ5RG9tYWluKSwgV1RGTW92ZSh0b3BGcmFtZVByaW1hcnlEb21haW4pLCBmcmFtZUlELCBwYWdl
SUQsIHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSAoYm9vbCB3YXNHcmFudGVkQWNjZXNzKSBtdXRhYmxlIHsKKyAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIod2FzR3JhbnRlZEFjY2VzcyA/IFN0b3JhZ2VBY2Nlc3NT
dGF0dXM6Okhhc0FjY2VzcyA6IFN0b3JhZ2VBY2Nlc3NTdGF0dXM6OkNhbm5vdFJlcXVlc3RBY2Nl
c3MpOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihTdHJpbmcmJiBwcmltYXJ5RG9tYWlu
SW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCB1aW50NjRfdCBvcGVuZXJQYWdlSUQsIFN0cmluZyYmIG9w
ZW5lclByaW1hcnlEb21haW4pCit7CisgICAgQVNTRVJUKHByaW1hcnlEb21haW5Jbk5lZWRPZlN0
b3JhZ2VBY2Nlc3MgIT0gb3BlbmVyUHJpbWFyeURvbWFpbik7CisgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CisKKyAgICBpZiAocHJpbWFyeURvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vz
cyA9PSBvcGVuZXJQcmltYXJ5RG9tYWluKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBk
b21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3NTdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3Mp
OworICAgIGF1dG8gY29va2llc0Jsb2NrZWRBbmRQdXJnZWQgPSBzaG91bGRCbG9ja0FuZFB1cmdl
Q29va2llcyhkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3NTdGF0aXN0aWMpOworCisgICAgLy8g
VGhlIGRvbWFpbiBhbHJlYWR5IGhhcyBhY2Nlc3MgaWYgaXRzIGNvb2tpZXMgYXJlIG5vdCBibG9j
a2VkLgorICAgIGlmICghY29va2llc0Jsb2NrZWRBbmRQdXJnZWQgJiYgIXNob3VsZEJsb2NrQW5k
S2VlcENvb2tpZXMoZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzU3RhdGlzdGljKSkKKyAgICAg
ICAgcmV0dXJuOworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgUkVMRUFTRV9MT0df
SU5GT19JRihtX2RlYnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1
ZywgIltUZW1wb3JhcnkgY29tYmF0aWJpbGl0eSBmaXhdIFN0b3JhZ2UgYWNjZXNzIHdhcyBncmFu
dGVkIGZvciAle3B1YmxpY31zIHVuZGVyIG9wZW5lciBwYWdlIGZyb20gJXtwdWJsaWN9cywgd2l0
aCB1c2VyIGludGVyYWN0aW9uIGluIHRoZSBvcGVuZWQgd2luZG93LiIsIHByaW1hcnlEb21haW5J
bk5lZWRPZlN0b3JhZ2VBY2Nlc3MudXRmOCgpLmRhdGEoKSwgb3BlbmVyUHJpbWFyeURvbWFpbi51
dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdU
Rk1vdmUocHJpbWFyeURvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyksIFdURk1vdmUob3BlbmVy
UHJpbWFyeURvbWFpbiksIFdURjo6bnVsbG9wdCwgb3BlbmVyUGFnZUlELCBmYWxzZSwgW10oYm9v
bCkgeyB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omdy
YW50U3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBzdWJGcmFtZUhvc3QsIFN0cmluZyYmIHRvcEZyYW1l
SG9zdCwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBib29sIHVzZXJXYXNQcm9t
cHRlZE5vdywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc3ViRnJh
bWVQcmltYXJ5RG9tYWluID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6cHJpbWFyeURvbWFpbihz
dWJGcmFtZUhvc3QpOworICAgIGF1dG8gdG9wRnJhbWVQcmltYXJ5RG9tYWluID0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljczo6cHJpbWFyeURvbWFpbih0b3BGcmFtZUhvc3QpOworICAgIGlmICh1c2Vy
V2FzUHJvbXB0ZWROb3cpIHsKKyAgICAgICAgYXV0byYgc3ViRnJhbWVTdGF0aXN0aWMgPSBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHN1YkZyYW1lUHJpbWFyeURvbWFp
bik7CisgICAgICAgIEFTU0VSVChzdWJGcmFtZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24p
OworICAgICAgICBzdWJGcmFtZVN0YXRpc3RpYy5zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZU9y
aWdpbnMuYWRkKHRvcEZyYW1lUHJpbWFyeURvbWFpbik7CisgICAgfQorICAgIGdyYW50U3RvcmFn
ZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoc3ViRnJhbWVQcmltYXJ5RG9tYWluKSwgV1RGTW92ZSh0
b3BGcmFtZVByaW1hcnlEb21haW4pLCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZE5v
dywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoU3RyaW5nJiYg
c3ViRnJhbWVQcmltYXJ5RG9tYWluLCBTdHJpbmcmJiB0b3BGcmFtZVByaW1hcnlEb21haW4sIE9w
dGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1By
b21wdGVkTm93T3JFYXJsaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNhbGxi
YWNrKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKHN1YkZy
YW1lUHJpbWFyeURvbWFpbiA9PSB0b3BGcmFtZVByaW1hcnlEb21haW4pIHsKKyAgICAgICAgY2Fs
bGJhY2sodHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogUmVt
b3ZlIG1fc3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkIGNoZWNrIGlmIHByb21wdGluZyBpcyBu
byBsb25nZXIgZXhwZXJpbWVudGFsLgorICAgIGlmICh1c2VyV2FzUHJvbXB0ZWROb3dPckVhcmxp
ZXIgJiYgbV9zdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQpIHsKKyAgICAgICAgYXV0byYgc3Vi
RnJhbWVTdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWlu
KHN1YkZyYW1lUHJpbWFyeURvbWFpbik7CisgICAgICAgIEFTU0VSVChzdWJGcmFtZVN0YXRpc3Rp
Yy5oYWRVc2VySW50ZXJhY3Rpb24pOworICAgICAgICBBU1NFUlQoc3ViRnJhbWVTdGF0aXN0aWMu
c3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVPcmlnaW5zLmNvbnRhaW5zKHRvcEZyYW1lUHJpbWFy
eURvbWFpbikpOworICAgICAgICBzdWJGcmFtZVN0YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVy
YWN0aW9uVGltZSA9IFdhbGxUaW1lOjpub3coKTsKKyAgICB9CisKKyAgICBSdW5Mb29wOjptYWlu
KCkuZGlzcGF0Y2goW3N1YkZyYW1lUHJpbWFyeURvbWFpbiA9IHN1YkZyYW1lUHJpbWFyeURvbWFp
bi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVQcmltYXJ5RG9tYWluID0gdG9wRnJhbWVQcmltYXJ5
RG9tYWluLmlzb2xhdGVkQ29weSgpLCBmcmFtZUlELCBwYWdlSUQsIHN0b3JlID0gbWFrZVJlZiht
X3N0b3JlKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAg
ICAgc3RvcmUtPmNhbGxHcmFudFN0b3JhZ2VBY2Nlc3NIYW5kbGVyKHN1YkZyYW1lUHJpbWFyeURv
bWFpbiwgdG9wRnJhbWVQcmltYXJ5RG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIFtjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spLCBzdG9yZSA9IHN0b3JlLmNvcHlSZWYoKV0oYm9vbCB2YWx1ZSkg
bXV0YWJsZSB7CisgICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2go
W2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHZhbHVlXSAoKSBtdXRhYmxlIHsKKyAgICAg
ICAgICAgICAgICBjYWxsYmFjayh2YWx1ZSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7
CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpn
cmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNhbGxiYWNrKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29y
ZHNXZXJlU2Nhbm5lZCA9IG1fcGFyYW1ldGVycy5zaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVj
b3Jkc1dlcmVTY2FubmVkLCB3b3JrUXVldWUgPSBtX3dvcmtRdWV1ZS5jb3B5UmVmKCldICgpIG11
dGFibGUgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBtZXRob2QgYmVpbmcgYSBzdGF0aWMgY2Fs
bCBvbiBXZWJQcm9jZXNzUHJveHkgaXMgd3JvbmcuCisgICAgICAgIC8vIEl0IHNob3VsZCBiZSBv
biB0aGUgZGF0YSBzdG9yZSB0aGF0IHRoaXMgb2JqZWN0IGJlbG9uZ3MgdG8uCisgICAgICAgIFdl
YlByb2Nlc3NQcm94eTo6dG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNXaXRoV2Vic2l0ZURh
dGEoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptb25pdG9yZWREYXRhVHlwZXMoKSwg
c2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwgW3dlYWtUaGlzID0g
V1RGTW92ZSh3ZWFrVGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHdvcmtRdWV1
ZSA9IHdvcmtRdWV1ZS5jb3B5UmVmKCldIChIYXNoU2V0PFN0cmluZz4mJiB0b3BQcml2YXRlbHlD
b250cm9sbGVkRG9tYWluc1dpdGhXZWJzaXRlRGF0YSkgbXV0YWJsZSB7CisgICAgICAgICAgICB3
b3JrUXVldWUtPmRpc3BhdGNoKFt3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCB0b3BEb21h
aW5zID0gY3Jvc3NUaHJlYWRDb3B5KHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zV2l0aFdl
YnNpdGVEYXRhKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0gKCkgbXV0YWJsZSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykgeworICAgICAgICAgICAgICAgICAgICBjYWxs
YmFjaygpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlu
IDogdG9wRG9tYWlucykgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiBzdGF0aXN0aWMgPSB3
ZWFrVGhpcy0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0b3BQcml2
YXRlbHlDb250cm9sbGVkRG9tYWluKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljLmdy
YW5kZmF0aGVyZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3
ZWFrVGhpcy0+bV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wID0gV2FsbFRpbWU6Om5vdygp
ICsgd2Vha1RoaXMtPm1fcGFyYW1ldGVycy5ncmFuZGZhdGhlcmluZ1RpbWU7CisgICAgICAgICAg
ICAgICAgaWYgKHdlYWtUaGlzLT5tX3BlcnNpc3RlbnRTdG9yYWdlKQorICAgICAgICAgICAgICAg
ICAgICB3ZWFrVGhpcy0+bV9wZXJzaXN0ZW50U3RvcmFnZS0+c2NoZWR1bGVPcldyaXRlTWVtb3J5
U3RvcmUoUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlOjpGb3JjZUltbWVk
aWF0ZVdyaXRlOjpZZXMpOworICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAg
ICAgICAgd2Vha1RoaXMtPmxvZ1Rlc3RpbmdFdmVudCgiR3JhbmRmYXRoZXJlZCJfcyk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6ZW5zdXJlUHJldmFsZW50UmVzb3VyY2Vz
Rm9yRGVidWdNb2RlKCkKK3sKKyAgICBpZiAoIW1fZGVidWdNb2RlRW5hYmxlZCkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIFZlY3RvcjxTdHJpbmc+IHByaW1hcnlEb21haW5zVG9CbG9jazsK
KyAgICBwcmltYXJ5RG9tYWluc1RvQmxvY2sucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyKTsKKwor
ICAgIGF1dG8mIHN0YXRpY1Nlc291cmNlU3RhdGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUHJpbWFyeURvbWFpbihkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKTsKKyAgICBz
ZXRQcmV2YWxlbnRSZXNvdXJjZShzdGF0aWNTZXNvdXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2Fk
UHJldmFsZW5jZTo6SGlnaCk7CisgICAgcHJpbWFyeURvbWFpbnNUb0Jsb2NrLnVuY2hlY2tlZEFw
cGVuZChkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKTsKKworICAgIGlmICghbV9kZWJ1Z01h
bnVhbFByZXZhbGVudFJlc291cmNlLmlzRW1wdHkoKSkgeworICAgICAgICBhdXRvJiBtYW51YWxS
ZXNvdXJjZVN0YXRpc3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21h
aW4obV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKTsKKyAgICAgICAgc2V0UHJldmFsZW50
UmVzb3VyY2UobWFudWFsUmVzb3VyY2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6
OkhpZ2gpOworICAgICAgICBwcmltYXJ5RG9tYWluc1RvQmxvY2sudW5jaGVja2VkQXBwZW5kKG1f
ZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBw
cmltYXJ5RG9tYWluc1RvQmxvY2s7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgZW5hYmxl
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgbV9kZWJ1Z01vZGVF
bmFibGVkID0gZW5hYmxlOworICAgIG1fZGVidWdMb2dnaW5nRW5hYmxlZCA9IGVuYWJsZTsKKwor
ICAgIGVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpOworfQorCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JE
ZWJ1Z01vZGUoY29uc3QgU3RyaW5nJiBkb21haW4pCit7CisgICAgaWYgKCFtX2RlYnVnTW9kZUVu
YWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNv
dXJjZSA9IGRvbWFpbjsKKyAgICBhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA9IGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oZG9tYWluKTsKKyAgICBzZXRQcmV2YWxlbnRS
ZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7
CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkRpZCBzZXQgJXtwdWJsaWN9cyBhcyBwcmV2YWxlbnQg
cmVzb3VyY2UgZm9yIHRoZSBwdXJwb3NlcyBvZiBJVFAgRGVidWcgTW9kZS4iLCBkb21haW4udXRm
OCgpLmRhdGEoKSk7CisjZW5kaWYKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3Nhcnko
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgbV9wZW5kaW5nU3Rh
dGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciA9ICsrbV9sYXN0U3RhdGlzdGljc1By
b2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcjsKKyAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2hBZnRl
cihtaW5pbXVtU3RhdGlzdGljc1Byb2Nlc3NpbmdJbnRlcnZhbCwgW3RoaXMsIHdlYWtUaGlzID0g
bWFrZVdlYWtQdHIoKnRoaXMpLCBzdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVy
ID0gKm1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXJdIHsKKyAg
ICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAo
IW1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgfHwgKm1fcGVu
ZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgIT0gc3RhdGlzdGljc1By
b2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcikgeworICAgICAgICAgICAgLy8gVGhpcyByZXF1ZXN0
IGhhcyBiZWVuIGNhbmNlbGVkLgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgdXBkYXRlQ29va2llQmxvY2tpbmcoW10oKSB7IH0pOworICAgICAgICBwcm9jZXNzU3Rh
dGlzdGljc0FuZERhdGFSZWNvcmRzKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpjYW5jZWxQZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdS
ZXF1ZXN0KCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fcGVu
ZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgPSBXVEY6Om51bGxvcHQ7
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpsb2dGcmFtZU5h
dmlnYXRpb24oY29uc3QgU3RyaW5nJiB0YXJnZXRQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcm
IG1haW5GcmFtZVByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgc291cmNlUHJpbWFyeURvbWFp
biwgY29uc3QgU3RyaW5nJiB0YXJnZXRIb3N0LCBjb25zdCBTdHJpbmcmIG1haW5GcmFtZUhvc3Qs
IGJvb2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5GcmFtZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIGJvb2wgYXJlVGFyZ2V0QW5kTWFpbkZyYW1lRG9tYWluc0Fz
c29jaWF0ZWQgPSB0YXJnZXRQcmltYXJ5RG9tYWluID09IG1haW5GcmFtZVByaW1hcnlEb21haW47
CisgICAgYm9vbCBhcmVUYXJnZXRBbmRTb3VyY2VEb21haW5zQXNzb2NpYXRlZCA9IHRhcmdldFBy
aW1hcnlEb21haW4gPT0gc291cmNlUHJpbWFyeURvbWFpbjsKKworICAgIGJvb2wgc3RhdGlzdGlj
c1dlcmVVcGRhdGVkID0gZmFsc2U7CisgICAgaWYgKCFpc01haW5GcmFtZSAmJiB0YXJnZXRIb3N0
ICE9IG1haW5GcmFtZUhvc3QgJiYgIShhcmVUYXJnZXRBbmRNYWluRnJhbWVEb21haW5zQXNzb2Np
YXRlZCB8fCBhcmVUYXJnZXRBbmRTb3VyY2VEb21haW5zQXNzb2NpYXRlZCkpIHsKKyAgICAgICAg
YXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1h
cnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFpbik7CisgICAgICAgIHRhcmdldFN0YXRpc3RpY3Mu
bGFzdFNlZW4gPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpyZWR1Y2VUaW1lUmVzb2x1dGlvbihX
YWxsVGltZTo6bm93KCkpOworICAgICAgICBpZiAodGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFtZVVu
ZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJhbWVQcmltYXJ5RG9tYWluKS5pc05ld0VudHJ5
KQorICAgICAgICAgICAgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKKyAgICB9CisKKyAg
ICBpZiAoaXNSZWRpcmVjdCAmJiAhYXJlVGFyZ2V0QW5kU291cmNlRG9tYWluc0Fzc29jaWF0ZWQp
IHsKKyAgICAgICAgaWYgKGlzTWFpbkZyYW1lKSB7CisgICAgICAgICAgICBhdXRvJiByZWRpcmVj
dGluZ09yaWdpblN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5
RG9tYWluKHNvdXJjZVByaW1hcnlEb21haW4pOworICAgICAgICAgICAgaWYgKHJlZGlyZWN0aW5n
T3JpZ2luU3RhdGlzdGljcy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLmFkZCh0YXJnZXRQcmlt
YXJ5RG9tYWluKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBk
YXRlZCA9IHRydWU7CisgICAgICAgICAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0gZW5zdXJl
UmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJnZXRQcmltYXJ5RG9tYWluKTsK
KyAgICAgICAgICAgIGlmICh0YXJnZXRTdGF0aXN0aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3Rz
RnJvbS5hZGQoc291cmNlUHJpbWFyeURvbWFpbikuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAg
ICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgYXV0byYgcmVkaXJlY3RpbmdPcmlnaW5TdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VT
dGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihzb3VyY2VQcmltYXJ5RG9tYWluKTsKKyAgICAgICAg
ICAgIGlmIChyZWRpcmVjdGluZ09yaWdpblN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUby5hZGQodGFyZ2V0UHJpbWFyeURvbWFpbikuaXNOZXdFbnRyeSkKKyAgICAgICAgICAg
ICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOworICAgICAgICAgICAgYXV0byYgdGFy
Z2V0U3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4o
dGFyZ2V0UHJpbWFyeURvbWFpbik7CisgICAgICAgICAgICBpZiAodGFyZ2V0U3RhdGlzdGljcy5z
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20uYWRkKHNvdXJjZVByaW1hcnlEb21haW4pLmlz
TmV3RW50cnkpCisgICAgICAgICAgICAgICAgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzdGF0aXN0aWNzV2VyZVVwZGF0ZWQpCisgICAg
ICAgIHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKK30K
Kwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1VzZXJJbnRlcmFj
dGlvbihjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CisKKyAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluKTsKKyAgICBzdGF0aXN0aWNzLmhh
ZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7CisgICAgc3RhdGlzdGljcy5tb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uVGltZSA9IFdhbGxUaW1lOjpub3coKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYg
cHJpbWFyeURvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9t
YWluKHByaW1hcnlEb21haW4pOworICAgIHN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9uID0g
ZmFsc2U7CisgICAgc3RhdGlzdGljcy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSA9IHsg
fTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omhhc0hhZFVz
ZXJJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pCit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIG1hcEVudHJ5ID0gbV9yZXNvdXJjZVN0
YXRpc3RpY3NNYXAuZmluZChwcmltYXJ5RG9tYWluKTsKKyAgICByZXR1cm4gbWFwRW50cnkgPT0g
bV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5kKCkgPyBmYWxzZTogaGFzSGFkVW5leHBpcmVkUmVj
ZW50VXNlckludGVyYWN0aW9uKG1hcEVudHJ5LT52YWx1ZSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2FkUHJl
dmFsZW5jZSBuZXdQcmV2YWxlbmNlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgcmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSA9IHRydWU7Cisg
ICAgcmVzb3VyY2VTdGF0aXN0aWMuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UgPSBuZXdQcmV2YWxl
bmNlID09IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OlZlcnlIaWdoOworICAgIEhhc2hTZXQ8U3Ry
aW5nPiBkb21haW5zVGhhdEhhdmVSZWRpcmVjdGVkVG87CisgICAgcmVjdXJzaXZlbHlHZXRBbGxE
b21haW5zVGhhdEhhdmVSZWRpcmVjdGVkVG9UaGlzRG9tYWluKHJlc291cmNlU3RhdGlzdGljLCBk
b21haW5zVGhhdEhhdmVSZWRpcmVjdGVkVG8sIDApOworICAgIGZvciAoYXV0byYgZG9tYWluIDog
ZG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvKSB7CisgICAgICAgIGF1dG8gbWFwRW50cnkgPSBt
X3Jlc291cmNlU3RhdGlzdGljc01hcC5maW5kKGRvbWFpbik7CisgICAgICAgIGlmIChtYXBFbnRy
eSA9PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBBU1NFUlQoIW1hcEVudHJ5LT52YWx1ZS5pc1ByZXZhbGVudFJlc291cmNlKTsK
KyAgICAgICAgbWFwRW50cnktPnZhbHVlLmlzUHJldmFsZW50UmVzb3VyY2UgPSB0cnVlOworICAg
IH0KK30KKyAgICAKK1N0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmR1
bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKKworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5hcHBl
bmRMaXRlcmFsKCJSZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3M6XG5cbiIpOworICAgIGZvciAoYXV0
byYgbWFwRW50cnkgOiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkKKyAgICAgICAg
cmVzdWx0LmFwcGVuZChtYXBFbnRyeS50b1N0cmluZygpKTsKKyAgICByZXR1cm4gcmVzdWx0LnRv
U3RyaW5nKCk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpp
c1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikgY29uc3QKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gbWFwRW50cnkgPSBt
X3Jlc291cmNlU3RhdGlzdGljc01hcC5maW5kKHByaW1hcnlEb21haW4pOworICAgIHJldHVybiBt
YXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSA/IGZhbHNlIDogbWFwRW50
cnktPnZhbHVlLmlzUHJldmFsZW50UmVzb3VyY2U7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBTdHJpbmcm
IHByaW1hcnlEb21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBhdXRvIG1hcEVudHJ5ID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZmluZChwcmlt
YXJ5RG9tYWluKTsKKyAgICByZXR1cm4gbWFwRW50cnkgPT0gbV9yZXNvdXJjZVN0YXRpc3RpY3NN
YXAuZW5kKCkgPyBmYWxzZSA6IG1hcEVudHJ5LT52YWx1ZS5pc1ByZXZhbGVudFJlc291cmNlICYm
IG1hcEVudHJ5LT52YWx1ZS5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZTsKK30KKworYm9vbCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VV
bmRlcihjb25zdCBTdHJpbmcmIHN1YnJlc291cmNlUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5n
JiB0b3BGcmFtZVByaW1hcnlEb21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CisKKyAgICBhdXRvIG1hcEVudHJ5ID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAu
ZmluZChzdWJyZXNvdXJjZVByaW1hcnlEb21haW4pOworICAgIHJldHVybiBtYXBFbnRyeSA9PSBt
X3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSA/IGZhbHNlIDogbWFwRW50cnktPnZhbHVlLnN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuY29udGFpbnModG9wRnJhbWVQcmltYXJ5RG9t
YWluKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUmVn
aXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBTdHJpbmcmIHN1YkZyYW1lUHJpbWFyeURvbWFp
biwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1hcnlEb21haW4pIGNvbnN0Cit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIG1hcEVudHJ5ID0gbV9yZXNvdXJj
ZVN0YXRpc3RpY3NNYXAuZmluZChzdWJGcmFtZVByaW1hcnlEb21haW4pOworICAgIHJldHVybiBt
YXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSA/IGZhbHNlIDogbWFwRW50
cnktPnZhbHVlLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMuY29udGFpbnModG9wRnJhbWVQ
cmltYXJ5RG9tYWluKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBTdHJpbmcmIGhvc3RSZWRpcmVj
dGVkRnJvbVByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgaG9zdFJlZGlyZWN0ZWRUb1ByaW1h
cnlEb21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAg
ICBhdXRvIG1hcEVudHJ5ID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZmluZChob3N0UmVkaXJl
Y3RlZEZyb21QcmltYXJ5RG9tYWluKTsKKyAgICByZXR1cm4gbWFwRW50cnkgPT0gbV9yZXNvdXJj
ZVN0YXRpc3RpY3NNYXAuZW5kKCkgPyBmYWxzZSA6IG1hcEVudHJ5LT52YWx1ZS5zdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c1RvLmNvbnRhaW5zKGhvc3RSZWRpcmVjdGVkVG9QcmltYXJ5RG9tYWlu
KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNsZWFyUHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKQoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbik7CisgICAgc3Rh
dGlzdGljcy5pc1ByZXZhbGVudFJlc291cmNlID0gZmFsc2U7CisgICAgc3RhdGlzdGljcy5pc1Zl
cnlQcmV2YWxlbnRSZXNvdXJjZSA9IGZhbHNlOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBTdHJpbmcmIHByaW1hcnlE
b21haW4sIGJvb2wgdmFsdWUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFy
eURvbWFpbihwcmltYXJ5RG9tYWluKTsKKyAgICBzdGF0aXN0aWNzLmdyYW5kZmF0aGVyZWQgPSB2
YWx1ZTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzR3Jh
bmRmYXRoZXJlZChjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pIGNvbnN0Cit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIG1hcEVudHJ5ID0gbV9yZXNvdXJj
ZVN0YXRpc3RpY3NNYXAuZmluZChwcmltYXJ5RG9tYWluKTsKKyAgICByZXR1cm4gbWFwRW50cnkg
PT0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5kKCkgPyBmYWxzZSA6IG1hcEVudHJ5LT52YWx1
ZS5ncmFuZGZhdGhlcmVkOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0IFN0cmluZyYgcHJpbWFy
eVN1YkZyYW1lRG9tYWluLCBjb25zdCBTdHJpbmcmIHByaW1hcnlUb3BGcmFtZURvbWFpbikKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8mIHN0YXRpc3RpY3Mg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlTdWJGcmFt
ZURvbWFpbik7CisgICAgc3RhdGlzdGljcy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFk
ZChwcmltYXJ5VG9wRnJhbWVEb21haW4pOworICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBz
dXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSB0b3AgZnJhbWUgZG9t
YWluLgorICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFy
eVRvcEZyYW1lRG9tYWluKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihjb25zdCBTdHJpbmcmIHBy
aW1hcnlTdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBwcmltYXJ5VG9wRnJhbWVEb21h
aW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvJiBzdGF0
aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5
U3VicmVzb3VyY2VEb21haW4pOworICAgIHN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lT3JpZ2lucy5hZGQocHJpbWFyeVRvcEZyYW1lRG9tYWluKTsKKyAgICAvLyBGb3IgY29uc2lz
dGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUg
dG9wIGZyYW1lIGRvbWFpbi4KKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5
RG9tYWluKHByaW1hcnlUb3BGcmFtZURvbWFpbik7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3Qg
U3RyaW5nJiBwcmltYXJ5U3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYgcHJpbWFyeVJl
ZGlyZWN0RG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
YXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21h
aW4ocHJpbWFyeVN1YnJlc291cmNlRG9tYWluKTsKKyAgICBzdGF0aXN0aWNzLnN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG8uYWRkKHByaW1hcnlSZWRpcmVjdERvbWFpbik7CisgICAgLy8gRm9y
IGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBm
b3IgdGhlIHJlZGlyZWN0IGRvbWFpbi4KKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQ
cmltYXJ5RG9tYWluKHByaW1hcnlSZWRpcmVjdERvbWFpbik7Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJv
bShjb25zdCBTdHJpbmcmIHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBw
cmltYXJ5UmVkaXJlY3REb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJp
bWFyeURvbWFpbihwcmltYXJ5U3VicmVzb3VyY2VEb21haW4pOworICAgIHN0YXRpc3RpY3Muc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLmFkZChwcmltYXJ5UmVkaXJlY3REb21haW4pOwor
ICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3Rp
Y3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4uCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5UmVkaXJlY3REb21haW4pOworfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRp
cmVjdFRvKGNvbnN0IFN0cmluZyYgdG9wRnJhbWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcm
IHByaW1hcnlSZWRpcmVjdERvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQ
cmltYXJ5RG9tYWluKHRvcEZyYW1lUHJpbWFyeURvbWFpbik7CisgICAgc3RhdGlzdGljcy50b3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c1RvLmFkZChwcmltYXJ5UmVkaXJlY3REb21haW4pOworICAgIC8v
IEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50
cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4uCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUHJpbWFyeURvbWFpbihwcmltYXJ5UmVkaXJlY3REb21haW4pOworfQorCit2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZy
b20oY29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgcHJp
bWFyeVJlZGlyZWN0RG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1h
cnlEb21haW4odG9wRnJhbWVQcmltYXJ5RG9tYWluKTsKKyAgICBzdGF0aXN0aWNzLnRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzRnJvbS5hZGQocHJpbWFyeVJlZGlyZWN0RG9tYWluKTsKKyAgICAvLyBG
b3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5
IGZvciB0aGUgcmVkaXJlY3QgZG9tYWluLgorICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0Zv
clByaW1hcnlEb21haW4ocHJpbWFyeVJlZGlyZWN0RG9tYWluKTsKK30KKwordm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24o
U2Vjb25kcyBzZWNvbmRzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAg
IEFTU0VSVChzZWNvbmRzID49IDBfcyk7CisKKyAgICBtX3BhcmFtZXRlcnMudGltZVRvTGl2ZVVz
ZXJJbnRlcmFjdGlvbiA9IHNlY29uZHM7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vj
b25kcyBzZWNvbmRzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFT
U0VSVChzZWNvbmRzID49IDBfcyk7CisKKyAgICBtX3BhcmFtZXRlcnMubWluaW11bVRpbWVCZXR3
ZWVuRGF0YVJlY29yZHNSZW1vdmFsID0gc2Vjb25kczsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29u
ZHMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKHNlY29u
ZHMgPj0gMF9zKTsKKworICAgIG1fcGFyYW1ldGVycy5ncmFuZGZhdGhlcmluZ1RpbWUgPSBzZWNv
bmRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0Q2Fj
aGVNYXhBZ2VDYXAoU2Vjb25kcyBzZWNvbmRzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7CisKKyAgICBtX3BhcmFtZXRlcnMu
Y2FjaGVNYXhBZ2VDYXBUaW1lID0gc2Vjb25kczsKKyAgICB1cGRhdGVDYWNoZU1heEFnZUNhcCgp
OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6dXBkYXRlQ2Fj
aGVNYXhBZ2VDYXAoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIAor
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBz
ZWNvbmRzID0gbV9wYXJhbWV0ZXJzLmNhY2hlTWF4QWdlQ2FwVGltZV0gKCkgeworICAgICAgICBz
dG9yZS0+c2V0Q2FjaGVNYXhBZ2VDYXAoc2Vjb25kcywgW10geyB9KTsKKyAgICB9KTsKK30KKwor
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldEFnZUNhcEZvckNsaWVu
dFNpZGVDb29raWVzKFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKyAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3MpOworICAgIAorICAgIG1fcGFyYW1l
dGVycy5jbGllbnRTaWRlQ29va2llc0FnZUNhcFRpbWUgPSBzZWNvbmRzOworICAgIHVwZGF0ZUNs
aWVudFNpZGVDb29raWVzQWdlQ2FwKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjp1cGRhdGVDbGllbnRTaWRlQ29va2llc0FnZUNhcCgpCit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFU
SVNUSUNTKQorICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1f
c3RvcmUpLCBzZWNvbmRzID0gbV9wYXJhbWV0ZXJzLmNsaWVudFNpZGVDb29raWVzQWdlQ2FwVGlt
ZV0gKCkgeworICAgICAgICBpZiAoYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IHN0b3JlLT53ZWJz
aXRlRGF0YVN0b3JlKCkpCisgICAgICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlLT5zZXRBZ2VDYXBG
b3JDbGllbnRTaWRlQ29va2llcyhzZWNvbmRzLCBbXSB7IH0pOworICAgIH0pOworI2VuZGlmCit9
CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzaG91bGRSZW1vdmVE
YXRhUmVjb3JkcygpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICBpZiAobV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgZm9yIChjb25zdCBhdXRv
JiBwbHVnaW4gOiBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkucGx1Z2luUHJvY2Vz
c2VzKCkpIHsKKyAgICAgICAgaWYgKCFtX2FjdGl2ZVBsdWdpblRva2Vucy5jb250YWlucyhwbHVn
aW4tPnBsdWdpblByb2Nlc3NUb2tlbigpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyNlbmRpZgorCisgICAgcmV0dXJuICFtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3Zl
ZCB8fCBNb25vdG9uaWNUaW1lOjpub3coKSA+PSAobV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJl
bW92ZWQgKyBtX3BhcmFtZXRlcnMubWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFs
KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldERhdGFS
ZWNvcmRzQmVpbmdSZW1vdmVkKGJvb2wgdmFsdWUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CisKKyAgICBtX2RhdGFSZWNvcmRzQmVpbmdSZW1vdmVkID0gdmFsdWU7CisgICAg
aWYgKG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQpCisgICAgICAgIG1fbGFzdFRpbWVEYXRhUmVj
b3Jkc1dlcmVSZW1vdmVkID0gTW9ub3RvbmljVGltZTo6bm93KCk7Cit9CisKK1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3MmIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6ZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihjb25zdCBTdHJpbmcmIHByaW1hcnlEb21h
aW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICByZXR1cm4gbV9y
ZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5zdXJlKHByaW1hcnlEb21haW4sIFsmcHJpbWFyeURvbWFp
bl0geworICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhwcmltYXJ5RG9tYWlu
KTsKKyAgICB9KS5pdGVyYXRvci0+dmFsdWU7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxLZXllZEVu
Y29kZXI+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y3JlYXRlRW5jb2RlckZy
b21EYXRhKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IGF1dG8gZW5jb2RlciA9IEtleWVkRW5jb2Rlcjo6ZW5jb2RlcigpOworICAgIGVuY29kZXItPmVu
Y29kZVVJbnQzMigidmVyc2lvbiIsIHN0YXRpc3RpY3NNb2RlbFZlcnNpb24pOworICAgIGVuY29k
ZXItPmVuY29kZURvdWJsZSgiZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCIsIG1fZW5kT2ZH
cmFuZGZhdGhlcmluZ1RpbWVzdGFtcC5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpOworCisg
ICAgZW5jb2Rlci0+ZW5jb2RlT2JqZWN0cygiYnJvd3NpbmdTdGF0aXN0aWNzIiwgbV9yZXNvdXJj
ZVN0YXRpc3RpY3NNYXAuYmVnaW4oKSwgbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5kKCksIFtd
KEtleWVkRW5jb2RlciYgZW5jb2RlcklubmVyLCBjb25zdCBhdXRvJiBvcmlnaW4pIHsKKyAgICAg
ICAgb3JpZ2luLnZhbHVlLmVuY29kZShlbmNvZGVySW5uZXIpOworICAgIH0pOworCisgICAgZW5j
b2Rlci0+ZW5jb2RlT2JqZWN0cygib3BlcmF0aW5nRGF0ZXMiLCBtX29wZXJhdGluZ0RhdGVzLmJl
Z2luKCksIG1fb3BlcmF0aW5nRGF0ZXMuZW5kKCksIFtdKEtleWVkRW5jb2RlciYgZW5jb2Rlcklu
bmVyLCBPcGVyYXRpbmdEYXRlIGRhdGUpIHsKKyAgICAgICAgZW5jb2RlcklubmVyLmVuY29kZURv
dWJsZSgiZGF0ZSIsIGRhdGUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsKKyAgICB9KTsK
KworICAgIHJldHVybiBlbmNvZGVyOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6bWVyZ2VXaXRoRGF0YUZyb21EZWNvZGVyKEtleWVkRGVjb2RlciYgZGVjb2Rl
cikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHVuc2lnbmVkIHZl
cnNpb25PbkRpc2s7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZVVJbnQzMigidmVyc2lvbiIsIHZl
cnNpb25PbkRpc2spKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAodmVyc2lvbk9uRGlzayA+
IHN0YXRpc3RpY3NNb2RlbFZlcnNpb24pIHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJGb3VuZCBy
ZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3Mgb24gZGlzayB3aXRoIG1vZGVsIHZlcnNpb24gJXUgd2hl
cmVhcyB0aGUgaGlnaGVzdCBzdXBwb3J0ZWQgdmVyc2lvbiBpcyAldS4gUmVzZXR0aW5nLiIsIHZl
cnNpb25PbkRpc2ssIHN0YXRpc3RpY3NNb2RlbFZlcnNpb24pOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgZG91YmxlIGVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXA7CisgICAgaWYg
KGRlY29kZXIuZGVjb2RlRG91YmxlKCJlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wIiwgZW5k
T2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCkpCisgICAgICAgIG1fZW5kT2ZHcmFuZGZhdGhlcmlu
Z1RpbWVzdGFtcCA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhlbmRPZkdyYW5kZmF0aGVyaW5n
VGltZXN0YW1wKTsKKyAgICBlbHNlCisgICAgICAgIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVz
dGFtcCA9IHsgfTsKKworICAgIFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBsb2FkZWRT
dGF0aXN0aWNzOworICAgIGJvb2wgc3VjY2VlZGVkID0gZGVjb2Rlci5kZWNvZGVPYmplY3RzKCJi
cm93c2luZ1N0YXRpc3RpY3MiLCBsb2FkZWRTdGF0aXN0aWNzLCBbdmVyc2lvbk9uRGlza10oS2V5
ZWREZWNvZGVyJiBkZWNvZGVySW5uZXIsIFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3Rp
Y3MpIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpc3RpY3MuZGVjb2RlKGRlY29kZXJJbm5lciwgdmVy
c2lvbk9uRGlzayk7CisgICAgfSk7CisKKyAgICBpZiAoIXN1Y2NlZWRlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbWVyZ2VTdGF0aXN0aWNzKFdURk1vdmUobG9hZGVkU3RhdGlzdGljcykpOwor
ICAgIHVwZGF0ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9KTsKKworICAgIFZlY3RvcjxPcGVyYXRp
bmdEYXRlPiBvcGVyYXRpbmdEYXRlczsKKyAgICBzdWNjZWVkZWQgPSBkZWNvZGVyLmRlY29kZU9i
amVjdHMoIm9wZXJhdGluZ0RhdGVzIiwgb3BlcmF0aW5nRGF0ZXMsIFtdKEtleWVkRGVjb2RlciYg
ZGVjb2RlciwgT3BlcmF0aW5nRGF0ZSYgZGF0ZSkgeworICAgICAgICBkb3VibGUgdmFsdWU7Cisg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVEb3VibGUoImRhdGUiLCB2YWx1ZSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZGF0ZSA9IE9wZXJhdGluZ0RhdGU6OmZyb21X
YWxsVGltZShXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHModmFsdWUpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfSk7CisKKyAgICBpZiAoIXN1Y2NlZWRlZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9vcGVyYXRpbmdEYXRlcyA9IG1lcmdlT3BlcmF0aW5nRGF0ZXMobV9vcGVyYXRpbmdE
YXRlcywgV1RGTW92ZShvcGVyYXRpbmdEYXRlcykpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2xlYXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuY2xlYXIoKTsKKyAgICBtX29wZXJhdGluZ0RhdGVz
LmNsZWFyKCk7CisKKyAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKworICAgIHJlbW92ZUFs
bFN0b3JhZ2VBY2Nlc3MoW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5j
b3B5UmVmKCldIHsgfSk7CisKKyAgICBhdXRvIHByaW1hcnlEb21haW5zVG9CbG9jayA9IGVuc3Vy
ZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpOworICAgIHVwZGF0ZUNvb2tpZUJsb2Nr
aW5nRm9yRG9tYWlucyhwcmltYXJ5RG9tYWluc1RvQmxvY2ssIFtjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOworfQorCitib29sIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6d2FzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1Vz
ZXJJbnRlcmFjdGlvbihjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBjdXJyZW50LCBjb25z
dCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiB1cGRhdGVkKSBjb25zdAoreworICAgIGlmICghY3Vy
cmVudC5oYWRVc2VySW50ZXJhY3Rpb24gJiYgIXVwZGF0ZWQuaGFkVXNlckludGVyYWN0aW9uKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rp
b25UaW1lID0gc3RkOjptYXgoY3VycmVudC5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSwg
dXBkYXRlZC5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSk7CisKKyAgICByZXR1cm4gdXBk
YXRlZC5sYXN0U2VlbiA8PSBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSArIDI0X2g7Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjptZXJnZVN0YXRpc3Rp
Y3MoVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiYgc3RhdGlzdGljcykKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDog
c3RhdGlzdGljcykgeworICAgICAgICBhdXRvIHJlc3VsdCA9IG1fcmVzb3VyY2VTdGF0aXN0aWNz
TWFwLmVuc3VyZShzdGF0aXN0aWMuaGlnaExldmVsRG9tYWluLCBbJnN0YXRpc3RpY10geworICAg
ICAgICAgICAgcmV0dXJuIFdURk1vdmUoc3RhdGlzdGljKTsKKyAgICAgICAgfSk7CisgICAgICAg
IGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgIGlmICh3YXNBY2Nlc3NlZEFz
Rmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUsIHN0
YXRpc3RpYykpCisgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS50aW1lc0Fj
Y2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb24rKzsKKyAgICAgICAgICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUubWVyZ2Uoc3RhdGlzdGljKTsKKyAgICAgICAgfQorICAgIH0K
K30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNob3VsZEJsb2Nr
QW5kS2VlcENvb2tpZXMoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgc3RhdGlzdGljKQor
eworICAgIHJldHVybiBzdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSAmJiBzdGF0aXN0aWMu
aGFkVXNlckludGVyYWN0aW9uOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6c2hvdWxkQmxvY2tBbmRQdXJnZUNvb2tpZXMoY29uc3QgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyYgc3RhdGlzdGljKQoreworICAgIHJldHVybiBzdGF0aXN0aWMuaXNQcmV2YWxlbnRS
ZXNvdXJjZSAmJiAhc3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbjsKK30KKworYm9vbCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vz
c1Rocm91Z2hQcm9tcHQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgc3RhdGlzdGljLCBj
b25zdCBTdHJpbmcmIGZpcnN0UGFydHlQcmltYXJ5RG9tYWluKQoreworICAgIHJldHVybiBzdGF0
aXN0aWMuc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVPcmlnaW5zLmNvbnRhaW5zKGZpcnN0UGFy
dHlQcmltYXJ5RG9tYWluKTsKK30KKworc3RhdGljIHZvaWQgZGVidWdMb2dEb21haW5zSW5CYXRj
aGVzKGNvbnN0IGNoYXIqIGFjdGlvbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMpCit7
CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgc3RhdGljIGNvbnN0IGF1dG8gbWF4TnVt
YmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQgPSA1MDsKKyAgICBpZiAoZG9tYWlucy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChkb21haW5zLnNpemUoKSA8PSBtYXhO
dW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCkgeworICAgICAgICBSRUxFQVNFX0xPR19J
TkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvICV7cHVibGljfXMgY29v
a2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBmb3I6ICV7cHVibGljfXMuIiwgYWN0aW9uLCBk
b21haW5zVG9TdHJpbmcoZG9tYWlucykudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgVmVjdG9yPFN0cmluZz4gYmF0Y2g7CisgICAgYmF0Y2gucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCk7Cisg
ICAgYXV0byBiYXRjaE51bWJlciA9IDE7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZCYXRjaGVzID0g
c3RkOjpjZWlsKGRvbWFpbnMuc2l6ZSgpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1heE51bWJlck9m
RG9tYWluc0luT25lTG9nU3RhdGVtZW50KSk7CisKKyAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRv
bWFpbnMpIHsKKyAgICAgICAgaWYgKGJhdGNoLnNpemUoKSA9PSBtYXhOdW1iZXJPZkRvbWFpbnNJ
bk9uZUxvZ1N0YXRlbWVudCkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0byAle3B1YmxpY31zIGNvb2tpZXMgaW4gdGhp
cmQtcGFydHkgY29udGV4dHMgZm9yICgle3B1YmxpY31kIG9mICV1KTogJXtwdWJsaWN9cy4iLCBh
Y3Rpb24sIGJhdGNoTnVtYmVyLCBudW1iZXJPZkJhdGNoZXMsIGRvbWFpbnNUb1N0cmluZyhiYXRj
aCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBiYXRjaC5zaHJpbmsoMCk7CisgICAgICAg
ICAgICArK2JhdGNoTnVtYmVyOworICAgICAgICB9CisgICAgICAgIGJhdGNoLmFwcGVuZChkb21h
aW4pOworICAgIH0KKyAgICBpZiAoIWJhdGNoLmlzRW1wdHkoKSkKKyAgICAgICAgUkVMRUFTRV9M
T0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0byAle3B1YmxpY31z
IGNvb2tpZXMgaW4gdGhpcmQtcGFydHkgY29udGV4dHMgZm9yICgle3B1YmxpY31kIG9mICV1KTog
JXtwdWJsaWN9cy4iLCBhY3Rpb24sIGJhdGNoTnVtYmVyLCBudW1iZXJPZkJhdGNoZXMsIGRvbWFp
bnNUb1N0cmluZyhiYXRjaCkudXRmOCgpLmRhdGEoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShhY3Rpb24pOworICAgIFVOVVNFRF9QQVJBTShkb21haW5zKTsKKyNlbmRpZgorfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6dXBkYXRlQ29va2llQmxvY2tpbmco
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgVmVjdG9yPFN0cmluZz4gZG9tYWluc1Rv
QmxvY2s7CisgICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0
aXN0aWNzTWFwLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChyZXNvdXJjZVN0YXRpc3RpYy5pc1By
ZXZhbGVudFJlc291cmNlKQorICAgICAgICAgICAgZG9tYWluc1RvQmxvY2suYXBwZW5kKHJlc291
cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFpbik7CisgICAgfQorCisgICAgaWYgKGRvbWFpbnNU
b0Jsb2NrLmlzRW1wdHkoKSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fZGVidWdMb2dnaW5nRW5hYmxlZCAmJiAhZG9t
YWluc1RvQmxvY2suaXNFbXB0eSgpKQorICAgICAgICBkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMo
ImJsb2NrIiwgZG9tYWluc1RvQmxvY2spOworCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUp
LCBkb21haW5zVG9CbG9jayA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zVG9CbG9jayksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewor
ICAgICAgICBzdG9yZS0+Y2FsbFVwZGF0ZVByZXZhbGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0Zv
ckhhbmRsZXIoZG9tYWluc1RvQmxvY2ssIFt3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCBz
dG9yZSA9IHN0b3JlLmNvcHlSZWYoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNz
UXVldWUoKS5kaXNwYXRjaChbd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgICAgIGlmICghd2Vh
a1RoaXMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKHdlYWtUaGlzLT5tX2Rl
YnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkRvbmUgdXBk
YXRpbmcgY29va2llIGJsb2NraW5nLiIpOworI2VuZGlmCisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjp1cGRhdGVDb29raWVCbG9ja2luZ0ZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFN0cmluZz4m
IGRvbWFpbnNUb0Jsb2NrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgZG9tYWluc1RvQmxv
Y2sgPSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1RvQmxvY2spLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgc3RvcmUt
PmNhbGxVcGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3JIYW5kbGVyKGRvbWFp
bnNUb0Jsb2NrLCBbc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBzdG9y
ZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30K
Kwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNsZWFyQmxvY2tpbmdT
dGF0ZUZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIGlmIChkb21haW5zLmlzRW1wdHkoKSkgeworICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGRvbWFpbnMgPSBj
cm9zc1RocmVhZENvcHkoZG9tYWlucyldIHsKKyAgICAgICAgc3RvcmUtPmNhbGxSZW1vdmVEb21h
aW5zSGFuZGxlcihkb21haW5zKTsKKyAgICB9KTsKKworICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpwcm9jZXNzU3Rh
dGlzdGljcyhjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3Mm
KT4mIHByb2Nlc3NGdW5jdGlvbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBtX3Jlc291cmNlU3Rh
dGlzdGljc01hcC52YWx1ZXMoKSkKKyAgICAgICAgcHJvY2Vzc0Z1bmN0aW9uKHJlc291cmNlU3Rh
dGlzdGljKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omhh
c0hhZFVuZXhwaXJlZFJlY2VudFVzZXJJbnRlcmFjdGlvbihSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
JiByZXNvdXJjZVN0YXRpc3RpYykgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIGlmIChyZXNvdXJjZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24gJiYg
aGFzU3RhdGlzdGljc0V4cGlyZWQocmVzb3VyY2VTdGF0aXN0aWMpKSB7CisgICAgICAgIC8vIERy
b3AgcHJpdmFjeSBzZW5zaXRpdmUgZGF0YSBiZWNhdXNlIHdlIG5vIGxvbmdlciBuZWVkIGl0Lgor
ICAgICAgICAvLyBTZXQgdGltZXN0YW1wIHRvIDAgc28gdGhhdCBzdGF0aXN0aWNzIG1lcmdlIHdp
bGwga25vdworICAgICAgICAvLyBpdCBoYXMgYmVlbiByZXNldCBhcyBvcHBvc2VkIHRvIGl0cyBk
ZWZhdWx0IC0xLgorICAgICAgICByZXNvdXJjZVN0YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVy
YWN0aW9uVGltZSA9IHsgfTsKKyAgICAgICAgcmVzb3VyY2VTdGF0aXN0aWMuc3RvcmFnZUFjY2Vz
c1VuZGVyVG9wRnJhbWVPcmlnaW5zLmNsZWFyKCk7CisgICAgICAgIHJlc291cmNlU3RhdGlzdGlj
LmhhZFVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiByZXNvdXJj
ZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb247Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6dG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFp
bnNUb1JlbW92ZVdlYnNpdGVEYXRhRm9yKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIGJvb2wgc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyA9IG1fZW5kT2ZH
cmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA+IFdhbGxUaW1lOjpub3coKTsKKyAgICBib29sIHNob3Vs
ZENsZWFyR3JhbmRmYXRoZXJpbmcgPSAhc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyAmJiBt
X2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXA7CisKKyAgICBpZiAoc2hvdWxkQ2xlYXJHcmFu
ZGZhdGhlcmluZykKKyAgICAgICAgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wID0geyB9
OworCisgICAgVmVjdG9yPFN0cmluZz4gcHJldmFsZW50UmVzb3VyY2VzOworICAgIGZvciAoYXV0
byYgc3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpIHsKKyAgICAg
ICAgaWYgKHN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlICYmICFoYXNIYWRVbmV4cGlyZWRS
ZWNlbnRVc2VySW50ZXJhY3Rpb24oc3RhdGlzdGljKSAmJiAoIXNob3VsZENoZWNrRm9yR3JhbmRm
YXRoZXJpbmcgfHwgIXN0YXRpc3RpYy5ncmFuZGZhdGhlcmVkKSkKKyAgICAgICAgICAgIHByZXZh
bGVudFJlc291cmNlcy5hcHBlbmQoc3RhdGlzdGljLmhpZ2hMZXZlbERvbWFpbik7CisKKyAgICAg
ICAgaWYgKHNob3VsZENsZWFyR3JhbmRmYXRoZXJpbmcgJiYgc3RhdGlzdGljLmdyYW5kZmF0aGVy
ZWQpCisgICAgICAgICAgICBzdGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCA9IGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiBwcmV2YWxlbnRSZXNvdXJjZXM7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vz
c2FyeSgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHRv
ZGF5ID0gT3BlcmF0aW5nRGF0ZTo6dG9kYXkoKTsKKyAgICBpZiAoIW1fb3BlcmF0aW5nRGF0ZXMu
aXNFbXB0eSgpICYmIHRvZGF5IDw9IG1fb3BlcmF0aW5nRGF0ZXMubGFzdCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICB3aGlsZSAobV9vcGVyYXRpbmdEYXRlcy5zaXplKCkgPj0gb3BlcmF0aW5n
RGF0ZXNXaW5kb3cpCisgICAgICAgIG1fb3BlcmF0aW5nRGF0ZXMucmVtb3ZlKDApOworCisgICAg
bV9vcGVyYXRpbmdEYXRlcy5hcHBlbmQodG9kYXkpOworfQorCitib29sIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6aGFzU3RhdGlzdGljc0V4cGlyZWQoY29uc3QgUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAobV9vcGVyYXRpbmdEYXRlcy5zaXplKCkgPj0g
b3BlcmF0aW5nRGF0ZXNXaW5kb3cpIHsKKyAgICAgICAgaWYgKE9wZXJhdGluZ0RhdGU6OmZyb21X
YWxsVGltZShyZXNvdXJjZVN0YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSkg
PCBtX29wZXJhdGluZ0RhdGVzLmZpcnN0KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICAvLyBJZiB3ZSBkb24ndCBtZWV0IHRoZSByZWFsIGNyaXRlcmlhIGZvciBhbiBl
eHBpcmVkIHN0YXRpc3RpYywgY2hlY2sgdGhlIHVzZXIgc2V0dGluZyBmb3IgYSB0aWdodGVyIHJl
c3RyaWN0aW9uIChtYWlubHkgZm9yIHRlc3RpbmcpLgorICAgIGlmIChtX3BhcmFtZXRlcnMudGlt
ZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbikgeworICAgICAgICBpZiAoV2FsbFRpbWU6Om5vdygpID4g
cmVzb3VyY2VTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgKyBtX3BhcmFt
ZXRlcnMudGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbi52YWx1ZSgpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90
IG1heGltdW1FbnRyeUNvdW50KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgbV9wYXJhbWV0ZXJzLm1heFN0YXRpc3RpY3NFbnRyaWVzID0gbWF4aW11bUVudHJ5Q291
bnQ7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRQcnVu
ZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQpCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX3BhcmFtZXRlcnMucHJ1bmVFbnRyaWVzRG93blRv
ID0gcHJ1bmVUYXJnZXRDb3VudDsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OnBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIGlmIChtX3Jlc291cmNlU3RhdGlzdGljc01hcC5zaXplKCkg
PD0gbV9wYXJhbWV0ZXJzLm1heFN0YXRpc3RpY3NFbnRyaWVzKQorICAgICAgICByZXR1cm47CisK
KyAgICBBU1NFUlQobV9wYXJhbWV0ZXJzLnBydW5lRW50cmllc0Rvd25UbyA8PSBtX3BhcmFtZXRl
cnMubWF4U3RhdGlzdGljc0VudHJpZXMpOworCisgICAgc2l6ZV90IG51bWJlck9mRW50cmllc0xl
ZnRUb1BydW5lID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2l6ZSgpIC0gbV9wYXJhbWV0ZXJz
LnBydW5lRW50cmllc0Rvd25UbzsKKyAgICBBU1NFUlQobnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1
bmUpOworCisgICAgVmVjdG9yPFN0YXRpc3RpY3NMYXN0U2Vlbj4gcmVzb3VyY2VzVG9QcnVuZVBl
ckltcG9ydGFuY2VbbWF4SW1wb3J0YW5jZSArIDFdOworICAgIGZvciAoYXV0byYgcmVzb3VyY2VT
dGF0aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkKKyAgICAgICAgcmVz
b3VyY2VzVG9QcnVuZVBlckltcG9ydGFuY2VbY29tcHV0ZUltcG9ydGFuY2UocmVzb3VyY2VTdGF0
aXN0aWMpXS5hcHBlbmQoeyByZXNvdXJjZVN0YXRpc3RpYy5oaWdoTGV2ZWxEb21haW4sIHJlc291
cmNlU3RhdGlzdGljLmxhc3RTZWVuIH0pOworCisgICAgZm9yICh1bnNpZ25lZCBpbXBvcnRhbmNl
ID0gMDsgbnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1bmUgJiYgaW1wb3J0YW5jZSA8PSBtYXhJbXBv
cnRhbmNlOyArK2ltcG9ydGFuY2UpCisgICAgICAgIHBydW5lUmVzb3VyY2VzKG1fcmVzb3VyY2VT
dGF0aXN0aWNzTWFwLCByZXNvdXJjZXNUb1BydW5lUGVySW1wb3J0YW5jZVtpbXBvcnRhbmNlXSwg
bnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1bmUpOworCisgICAgQVNTRVJUKCFudW1iZXJPZkVudHJp
ZXNMZWZ0VG9QcnVuZSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgbV9wYXJhbWV0ZXJzID0geyB9OworfQorCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9nVGVzdGluZ0V2ZW50KGNvbnN0IFN0
cmluZyYgZXZlbnQpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBS
dW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgZXZlbnQg
PSBldmVudC5pc29sYXRlZENvcHkoKV0geworICAgICAgICBzdG9yZS0+bG9nVGVzdGluZ0V2ZW50
KGV2ZW50KTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbiwgU2Vjb25kcyBz
ZWNvbmRzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byYg
c3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJp
bWFyeURvbWFpbik7CisgICAgc3RhdGlzdGljcy5sYXN0U2VlbiA9IFdhbGxUaW1lOjpmcm9tUmF3
U2Vjb25kcyhzZWNvbmRzLnNlY29uZHMoKSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHByaW1h
cnlEb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRv
JiByZXNvdXJjZVN0YXRpc3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlE
b21haW4ocHJpbWFyeURvbWFpbik7CisgICAgc2V0UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VT
dGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOworfQorCit2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNv
bnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIGF1dG8mIHJlc291cmNlU3RhdGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluKTsKKyAgICBzZXRQcmV2YWxlbnRS
ZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6VmVyeUhp
Z2gpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVtb3Zl
QWxsU3RvcmFnZUFjY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIHN0
b3JlLT5yZW1vdmVBbGxTdG9yYWdlQWNjZXNzKFtzdG9yZSA9IHN0b3JlLmNvcHlSZWYoKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
KyAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0pOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworCisgICAgdXBkYXRlQ29va2llQmxvY2tpbmcoW10oKSB7IH0pOworICAgIHVwZGF0
ZUNhY2hlTWF4QWdlQ2FwKCk7CisgICAgdXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
LmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjNhOWE3Yjk2YTAwZDg1ZDBjMWVh
N2IxY2FhNjFjNzJiZDFkYjBjNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUu
aApAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5oIgorI2luY2x1ZGUgIldl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgorI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9u
SGFuZGxlci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0
ci5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKworI2lmIEhBVkUoQ09SRV9QUkVESUNU
SU9OKQorI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EuaCIK
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBLZXllZERlY29kZXI7CitjbGFz
cyBLZXllZEVuY29kZXI7CitzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKK30KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE9wZXJhdGluZ0RhdGU7CitjbGFzcyBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U7CisKKy8vIFRoaXMgaXMgYWx3YXlzIGNvbnN0
cnVjdGVkIC8gdXNlZCAvIGRlc3Ryb3llZCBvbiB0aGUgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlJ3Mgc3RhdGlzdGljcyBxdWV1ZS4KK2NsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZSA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU+IHsKK3B1YmxpYzoKKyAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiwgV29ya1F1ZXVlJik7CisgICAg
flJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSgpOworCisgICAgdm9pZCBzZXRQZXJz
aXN0ZW50U3RvcmFnZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UmKTsK
KworICAgIHZvaWQgY2xlYXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICBib29s
IGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5pc0VtcHR5
KCk7IH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpLZXllZEVuY29kZXI+IGNyZWF0
ZUVuY29kZXJGcm9tRGF0YSgpIGNvbnN0OworICAgIHZvaWQgbWVyZ2VXaXRoRGF0YUZyb21EZWNv
ZGVyKFdlYkNvcmU6OktleWVkRGVjb2RlciYpOworCisgICAgdm9pZCBtZXJnZVN0YXRpc3RpY3Mo
VmVjdG9yPFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiYpOworICAgIHZvaWQgcHJv
Y2Vzc1N0YXRpc3RpY3MoY29uc3QgRnVuY3Rpb248dm9pZChjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzJik+JikgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZUNvb2tpZUJsb2Nr
aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCB1cGRhdGVDb29raWVC
bG9ja2luZ0ZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb0Jsb2NrLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgY2xlYXJCbG9ja2luZ1N0YXRl
Rm9yRG9tYWlucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlucywgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKTsKKworICAgIHZvaWQgaW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZO
ZWNlc3NhcnkoKTsKKyAgICB2b2lkIHByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsK
KworICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihTdHJpbmcmJiBwcmlt
YXJ5RG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCB1aW50NjRfdCBvcGVuZXJQYWdlSUQsIFN0
cmluZyYmIG9wZW5lclByaW1hcnlEb21haW4pOworICAgIHZvaWQgcmVtb3ZlQWxsU3RvcmFnZUFj
Y2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworCisgICAgdm9pZCBncmFuZGZhdGhl
ckV4aXN0aW5nV2Vic2l0ZURhdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2
b2lkIGNhbmNlbFBlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3QoKTsKKworICAgIGJv
b2wgaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN0cmluZyYgc3VicmVzb3Vy
Y2VQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHRvcEZyYW1lUHJpbWFyeURvbWFpbikgY29u
c3Q7CisgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgU3RyaW5nJiBz
dWJGcmFtZVByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgdG9wRnJhbWVQcmltYXJ5RG9tYWlu
KSBjb25zdDsKKyAgICBib29sIGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBTdHJp
bmcmIGhvc3RSZWRpcmVjdGVkRnJvbVByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgaG9zdFJl
ZGlyZWN0ZWRUb1ByaW1hcnlEb21haW4pIGNvbnN0OworCisgICAgdm9pZCBjbGVhclByZXZhbGVu
dFJlc291cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbik7CisgICAgU3RyaW5nIGR1bXBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgY29uc3Q7CisgICAgYm9vbCBpc1ByZXZhbGVudFJlc291
cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikgY29uc3Q7CisgICAgYm9vbCBpc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pIGNvbnN0OworICAg
IHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKTsK
KyAgICB2b2lkIHNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHByaW1hcnlE
b21haW4pOworCisgICAgdm9pZCBzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFN0cmluZyYgcHJpbWFy
eURvbWFpbiwgYm9vbCB2YWx1ZSk7CisgICAgYm9vbCBpc0dyYW5kZmF0aGVyZWQoY29uc3QgU3Ry
aW5nJiBwcmltYXJ5RG9tYWluKSBjb25zdDsKKworICAgIHZvaWQgc2V0U3ViZnJhbWVVbmRlclRv
cEZyYW1lT3JpZ2luKGNvbnN0IFN0cmluZyYgcHJpbWFyeVN1YkZyYW1lRG9tYWluLCBjb25zdCBT
dHJpbmcmIHByaW1hcnlUb3BGcmFtZURvbWFpbik7CisgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgU3RyaW5nJiBwcmltYXJ5U3VicmVzb3VyY2VEb21haW4s
IGNvbnN0IFN0cmluZyYgcHJpbWFyeVRvcEZyYW1lRG9tYWluKTsKKyAgICB2b2lkIHNldFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdHJpbmcmIHByaW1hcnlTdWJyZXNvdXJjZURv
bWFpbiwgY29uc3QgU3RyaW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pOworICAgIHZvaWQgc2V0
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3RyaW5nJiBwcmltYXJ5U3VicmVz
b3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYgcHJpbWFyeVJlZGlyZWN0RG9tYWluKTsKKyAgICB2
b2lkIHNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdHJpbmcmIHRvcEZyYW1lUHJp
bWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pOworICAgIHZv
aWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3RyaW5nJiB0b3BGcmFtZVBy
aW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgcHJpbWFyeVJlZGlyZWN0RG9tYWluKTsKKworICAg
IHZvaWQgbG9nVGVzdGluZ0V2ZW50KGNvbnN0IFN0cmluZyYpOworCisgICAgdm9pZCBzZXRNYXhT
dGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQpOworICAgIHZvaWQgc2V0
UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50KTsKKyAgICB2b2lkIHJl
c2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcygpOworCisgICAgdm9pZCBjYWxjdWxhdGVBbmRT
dWJtaXRUZWxlbWV0cnkoKSBjb25zdDsKKworICAgIHZvaWQgc2V0Tm90aWZ5UGFnZXNXaGVuRGF0
YVJlY29yZHNXZXJlU2Nhbm5lZChib29sKTsKKyAgICB2b2lkIHNldFNob3VsZENsYXNzaWZ5UmVz
b3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wpOworICAgIHZvaWQgc2V0U2hvdWxk
U3VibWl0VGVsZW1ldHJ5KGJvb2wpOworICAgIHZvaWQgc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFj
dGlvbihTZWNvbmRzKTsKKyAgICB2b2lkIHNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRz
UmVtb3ZhbChTZWNvbmRzKTsKKyAgICB2b2lkIHNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRz
KTsKKyAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCk7Cisg
ICAgYm9vbCBpc0RlYnVnTW9kZUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnTW9kZUVu
YWJsZWQ7IH07CisgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25z
dCBTdHJpbmcmIGRvbWFpbik7CisKKyAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgU3Ry
aW5nJiBzdWJGcmFtZVByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgdG9wRnJhbWVQcmltYXJ5
RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYpOworICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3MoU3RyaW5n
JiYgc3ViRnJhbWVQcmltYXJ5RG9tYWluLCBTdHJpbmcmJiB0b3BGcmFtZVByaW1hcnlEb21haW4s
IHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCBwcm9tcHRFbmFibGVkLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmKTsKKyAgICB2b2lk
IGdyYW50U3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBzdWJGcmFtZUhvc3QsIFN0cmluZyYmIHRvcEZy
YW1lSG9zdCwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBib29sIHVzZXJXYXNQ
cm9tcHRlZE5vdywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CisKKyAgICB2b2lk
IGxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBTdHJpbmcmIHRhcmdldFByaW1hcnlEb21haW4sIGNv
bnN0IFN0cmluZyYgbWFpbkZyYW1lUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiBzb3VyY2VQ
cmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHRhcmdldEhvc3QsIGNvbnN0IFN0cmluZyYgbWFp
bkZyYW1lSG9zdCwgYm9vbCBpc1JlZGlyZWN0LCBib29sIGlzTWFpbkZyYW1lKTsKKyAgICB2b2lk
IGxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pOworCisgICAg
dm9pZCBjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pOwor
ICAgIGJvb2wgaGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFp
bik7CisKKyAgICB2b2lkIHNldExhc3RTZWVuKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbiwg
U2Vjb25kcyk7CisKKyAgICB2b2lkIGRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7CisKK3ByaXZh
dGU6CisgICAgc3RhdGljIGJvb2wgc2hvdWxkQmxvY2tBbmRLZWVwQ29va2llcyhjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgc3RhdGljIGJvb2wgc2hvdWxkQmxv
Y2tBbmRQdXJnZUNvb2tpZXMoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYp
OworICAgIHN0YXRpYyBib29sIGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9t
cHQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYsIGNvbnN0IFN0cmluZyYg
Zmlyc3RQYXJ0eVByaW1hcnlEb21haW4pOworICAgIGJvb2wgaGFzSGFkVW5leHBpcmVkUmVjZW50
VXNlckludGVyYWN0aW9uKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmKSBjb25zdDsK
KyAgICBib29sIGhhc1N0YXRpc3RpY3NFeHBpcmVkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3MmKSBjb25zdDsKKyAgICBib29sIHdhc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVl
VG9Vc2VySW50ZXJhY3Rpb24oY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYg
Y3VycmVudCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgdXBkYXRlZCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShXZWJDb3JlOjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzJiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSk7CisgICAgdW5zaWduZWQgcmVj
dXJzaXZlbHlHZXRBbGxEb21haW5zVGhhdEhhdmVSZWRpcmVjdGVkVG9UaGlzRG9tYWluKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmLCBIYXNoU2V0PFN0cmluZz4mIGRvbWFp
bnNUaGF0SGF2ZVJlZGlyZWN0ZWRUbywgdW5zaWduZWQgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscykg
Y29uc3Q7CisgICAgdm9pZCBzZXRTdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQoYm9vbCBlbmFi
bGVkKSB7IG1fc3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkICA9IGVuYWJsZWQ7IH0KKyAgICBi
b29sIHNob3VsZFJlbW92ZURhdGFSZWNvcmRzKCkgY29uc3Q7CisgICAgdm9pZCBzZXREZWJ1Z0xv
Z2dnaW5nRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkICA9IGVu
YWJsZWQ7IH0KKyAgICB2b2lkIHNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKGJvb2wpOworICAg
IHZvaWQgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgpOwor
ICAgIHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoU3RyaW5nJiYgc3ViRnJhbWVIb3N0
LCBTdHJpbmcmJiB0b3BGcmFtZUhvc3QsIE9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCB1aW50
NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93T3JFYXJsaWVyLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKKyAgICB2b2lkIG1hcmtBc1ByZXZhbGVudElmSGFzUmVk
aXJlY3RlZFRvUHJldmFsZW50KFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKKyAg
ICBib29sIGlzUHJldmFsZW50RHVlVG9EZWJ1Z01vZGUoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyYpOworICAgIFZlY3RvcjxTdHJpbmc+IGVuc3VyZVByZXZhbGVudFJlc291cmNlc0Zv
ckRlYnVnTW9kZSgpOworICAgIHZvaWQgcmVtb3ZlRGF0YVJlY29yZHMoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCk7CisgICAg
V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUHJpbWFyeURvbWFpbihjb25zdCBTdHJpbmcmKTsKKyAgICBWZWN0b3I8U3RyaW5nPiB0b3BQ
cml2YXRlbHlDb250cm9sbGVkRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IoKTsKKyAgICB2
b2lkIHNldENhY2hlTWF4QWdlQ2FwKFNlY29uZHMpOworICAgIHZvaWQgdXBkYXRlQ2FjaGVNYXhB
Z2VDYXAoKTsKKyAgICB2b2lkIHNldEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKFNlY29uZHMp
OworICAgIHZvaWQgdXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKTsKKworI2lmIFBMQVRG
T1JNKENPQ09BKQorICAgIHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpOworI2Vu
ZGlmCisKKyAgICBzdHJ1Y3QgUGFyYW1ldGVycyB7CisgICAgICAgIHNpemVfdCBwcnVuZUVudHJp
ZXNEb3duVG8geyA4MDAgfTsKKyAgICAgICAgc2l6ZV90IG1heFN0YXRpc3RpY3NFbnRyaWVzIHsg
MTAwMCB9OworICAgICAgICBPcHRpb25hbDxTZWNvbmRzPiB0aW1lVG9MaXZlVXNlckludGVyYWN0
aW9uOworICAgICAgICBTZWNvbmRzIG1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3Zh
bCB7IDFfaCB9OworICAgICAgICBTZWNvbmRzIGdyYW5kZmF0aGVyaW5nVGltZSB7IDI0X2ggKiA3
IH07CisgICAgICAgIFNlY29uZHMgY2FjaGVNYXhBZ2VDYXBUaW1lIHsgMjRfaCAqIDcgfTsKKyAg
ICAgICAgU2Vjb25kcyBjbGllbnRTaWRlQ29va2llc0FnZUNhcFRpbWUgeyAyNF9oICogNyB9Owor
ICAgICAgICBib29sIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQg
eyBmYWxzZSB9OworICAgICAgICBib29sIHNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0
YVJlY29yZHNSZW1vdmFsIHsgdHJ1ZSB9OworICAgICAgICBib29sIHNob3VsZFN1Ym1pdFRlbGVt
ZXRyeSB7IHRydWUgfTsKKyAgICB9OworCisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlJiBtX3N0b3JlOworICAgIFJlZjxXb3JrUXVldWU+IG1fd29ya1F1ZXVlOworICAgIFdlYWtQ
dHI8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlPiBtX3BlcnNpc3RlbnRT
dG9yYWdlOworICAgIEhhc2hNYXA8U3RyaW5nLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzPiBtX3Jlc291cmNlU3RhdGlzdGljc01hcDsKKyNpZiBIQVZFKENPUkVfUFJFRElDVElPTikK
KyAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hIG1fcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0NsYXNzaWZpZXI7CisjZWxzZQorICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3ND
bGFzc2lmaWVyIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI7CisjZW5kaWYKKyNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBIYXNoU2V0PHVpbnQ2NF90PiBtX2Fj
dGl2ZVBsdWdpblRva2VuczsKKyNlbmRpZgorICAgIFBhcmFtZXRlcnMgbV9wYXJhbWV0ZXJzOwor
ICAgIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtX29wZXJhdGluZ0RhdGVzOworICAgIFdhbGxUaW1l
IG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsKKyAgICBib29sIG1fZGVidWdMb2dnaW5n
RW5hYmxlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2RlYnVnTW9kZUVuYWJsZWQgeyBmYWxzZSB9
OworICAgIFN0cmluZyBtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2U7CisgICAgYm9vbCBt
X3N0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2RhdGFS
ZWNvcmRzQmVpbmdSZW1vdmVkIHsgZmFsc2UgfTsKKyAgICBNb25vdG9uaWNUaW1lIG1fbGFzdFRp
bWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkOworCisgICAgdWludDY0X3QgbV9sYXN0U3RhdGlzdGlj
c1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciB7IDAgfTsKKyAgICBPcHRpb25hbDx1aW50NjRf
dD4gbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcjsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFn
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZGQ3ODFiOGRj
NzA4MTlmYmZlMTcyMDYwOTM5YTU0NzE0YzhjMjE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQ
ZXJzaXN0ZW50U3RvcmFnZS5jcHAKQEAgLTAsMCArMSwyNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVy
c2lzdGVudFN0b3JhZ2UuaCIKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQZXJz
aXN0ZW5jeVV0aWxzLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlLmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9GaWxlTW9uaXRvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3Rl
bS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvS2V5ZWRDb2RpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1NoYXJlZEJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3Rm
L1dvcmtRdWV1ZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY29uc3RleHByIFNlY29uZHMg
bWluaW11bVdyaXRlSW50ZXJ2YWwgeyA1X21pbiB9OworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworc3RhdGljIGJvb2wgaGFzRmlsZUNoYW5nZWRTaW5jZShjb25zdCBTdHJpbmcmIHBhdGgs
IFdhbGxUaW1lIHNpbmNlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAg
IGF1dG8gbW9kaWZpY2F0aW9uVGltZSA9IEZpbGVTeXN0ZW06OmdldEZpbGVNb2RpZmljYXRpb25U
aW1lKHBhdGgpOworICAgIGlmICghbW9kaWZpY2F0aW9uVGltZSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICByZXR1cm4gbW9kaWZpY2F0aW9uVGltZS52YWx1ZSgpID4gc2luY2U7Cit9CisK
K1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlKFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZSYgbWVtb3J5U3RvcmUsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlLCBjb25zdCBTdHJpbmcmIHN0b3Jh
Z2VEaXJlY3RvcnlQYXRoKQorICAgIDogbV9tZW1vcnlTdG9yZShtZW1vcnlTdG9yZSkKKyAgICAs
IG1fd29ya1F1ZXVlKHdvcmtRdWV1ZSkKKyAgICAsIG1fc3RvcmFnZURpcmVjdG9yeVBhdGgoc3Rv
cmFnZURpcmVjdG9yeVBhdGgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICBtX21lbW9yeVN0b3JlLnNldFBlcnNpc3RlbnRTdG9yYWdlKCp0aGlzKTsKKworICAgIHBv
cHVsYXRlTWVtb3J5U3RvcmVGcm9tRGlzaygpOworICAgIHN0YXJ0TW9uaXRvcmluZ0Rpc2soKTsK
K30KKworUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlOjp+UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKKworICAgIGlmIChtX2hhc1BlbmRpbmdXcml0ZSkKKyAgICAgICAgd3JpdGVN
ZW1vcnlTdG9yZVRvRGlzaygpOworfQorCitTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bl
cnNpc3RlbnRTdG9yYWdlOjpzdG9yYWdlRGlyZWN0b3J5UGF0aCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fc3RvcmFnZURpcmVjdG9yeVBhdGguaXNvbGF0ZWRDb3B5KCk7Cit9CisKK1N0cmluZyBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OnJlc291cmNlTG9nRmlsZVBh
dGgoKSBjb25zdAoreworICAgIFN0cmluZyBzdG9yYWdlUGF0aCA9IHN0b3JhZ2VEaXJlY3RvcnlQ
YXRoKCk7CisgICAgaWYgKHN0b3JhZ2VQYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7CisKKyAgICByZXR1cm4gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KHN0b3JhZ2VQYXRoLCAiZnVsbF9icm93c2luZ19zZXNzaW9uX3Jlc291cmNlTG9nLnBs
aXN0Iik7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdl
OjpzdGFydE1vbml0b3JpbmdEaXNrKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKyAgICBpZiAobV9maWxlTW9uaXRvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5n
IHJlc291cmNlTG9nUGF0aCA9IHJlc291cmNlTG9nRmlsZVBhdGgoKTsKKyAgICBpZiAocmVzb3Vy
Y2VMb2dQYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9maWxlTW9uaXRv
ciA9IHN0ZDo6bWFrZV91bmlxdWU8RmlsZU1vbml0b3I+KHJlc291cmNlTG9nUGF0aCwgbV93b3Jr
UXVldWUuY29weVJlZigpLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIChG
aWxlTW9uaXRvcjo6RmlsZUNoYW5nZVR5cGUgdHlwZSkgeworICAgICAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBGaWxlTW9uaXRvcjo6
RmlsZUNoYW5nZVR5cGU6Ok1vZGlmaWNhdGlvbjoKKyAgICAgICAgICAgIHJlZnJlc2hNZW1vcnlT
dG9yZUZyb21EaXNrKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGaWxlTW9u
aXRvcjo6RmlsZUNoYW5nZVR5cGU6OlJlbW92YWw6CisgICAgICAgICAgICBtX21lbW9yeVN0b3Jl
LmNsZWFyKFtdIHsgfSk7CisgICAgICAgICAgICBtX2ZpbGVNb25pdG9yID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgIG1vbml0b3JEaXJlY3RvcnlGb3JOZXdTdGF0aXN0aWNzKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6bW9uaXRvckRpcmVjdG9yeUZvck5ld1N0YXRpc3RpY3Mo
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgU3RyaW5nIHN0b3Jh
Z2VQYXRoID0gc3RvcmFnZURpcmVjdG9yeVBhdGgoKTsKKyAgICBBU1NFUlQoIXN0b3JhZ2VQYXRo
LmlzRW1wdHkoKSk7CisKKyAgICBpZiAoIUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3RvcmFnZVBh
dGgpKSB7CisgICAgICAgIGlmICghRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKHN0b3Jh
Z2VQYXRoKSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcywgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTogRmFpbGVk
IHRvIGNyZWF0ZSBkaXJlY3RvcnkgcGF0aCAlcyIsIHN0b3JhZ2VQYXRoLnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgbV9maWxlTW9u
aXRvciA9IHN0ZDo6bWFrZV91bmlxdWU8RmlsZU1vbml0b3I+KHN0b3JhZ2VQYXRoLCBtX3dvcmtR
dWV1ZS5jb3B5UmVmKCksIFt0aGlzXSAoRmlsZU1vbml0b3I6OkZpbGVDaGFuZ2VUeXBlIHR5cGUp
IHsKKyAgICAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgICAgIGlmICh0eXBl
ID09IEZpbGVNb25pdG9yOjpGaWxlQ2hhbmdlVHlwZTo6UmVtb3ZhbCkgeworICAgICAgICAgICAg
Ly8gRGlyZWN0b3J5IHdhcyByZW1vdmVkIQorICAgICAgICAgICAgbV9maWxlTW9uaXRvciA9IG51
bGxwdHI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcg
cmVzb3VyY2VMb2dQYXRoID0gcmVzb3VyY2VMb2dGaWxlUGF0aCgpOworICAgICAgICBBU1NFUlQo
IXJlc291cmNlTG9nUGF0aC5pc0VtcHR5KCkpOworCisgICAgICAgIGlmICghRmlsZVN5c3RlbTo6
ZmlsZUV4aXN0cyhyZXNvdXJjZUxvZ1BhdGgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIG1fZmlsZU1vbml0b3IgPSBudWxscHRyOworCisgICAgICAgIHJlZnJlc2hNZW1vcnlTdG9y
ZUZyb21EaXNrKCk7CisgICAgICAgIHN0YXJ0TW9uaXRvcmluZ0Rpc2soKTsKKyAgICB9KTsKK30K
Kwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OnN0b3BNb25p
dG9yaW5nRGlzaygpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgbV9m
aWxlTW9uaXRvciA9IG51bGxwdHI7Cit9CisKKy8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGZp
bGUgY2hhbmdlcyBvbiBkaXNrLgordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVu
dFN0b3JhZ2U6OnJlZnJlc2hNZW1vcnlTdG9yZUZyb21EaXNrKCkKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFN0cmluZyBmaWxlUGF0aCA9IHJlc291cmNlTG9nRmls
ZVBhdGgoKTsKKyAgICBpZiAoZmlsZVBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBXZSBzb21ldGltZXMgc2VlIGZpbGUgY2hhbmdlZCBldmVudHMgZnJvbSBiZWZvcmUg
b3VyIGxvYWQgY29tcGxldGVkICh3ZSBzdGFydAorICAgIC8vIHJlYWRpbmcgYXQgdGhlIGZpcnN0
IGNoYW5nZSBldmVudCwgYnV0IHdlIG1pZ2h0IHJlY2VpdmUgYSBzZXJpZXMgb2YgZXZlbnRzIHJl
bGF0ZWQKKyAgICAvLyB0byB0aGUgc2FtZSBmaWxlIG9wZXJhdGlvbikuIENhdGNoIHRoaXMgY2Fz
ZSB0byBhdm9pZCByZWFkaW5nIG92ZXJseSBvZnRlbi4KKyAgICBpZiAoIWhhc0ZpbGVDaGFuZ2Vk
U2luY2UoZmlsZVBhdGgsIG1fbGFzdFN0YXRpc3RpY3NGaWxlU3luY1RpbWUpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBXYWxsVGltZSByZWFkVGltZSA9IFdhbGxUaW1lOjpub3coKTsKKworICAg
IGF1dG8gZGVjb2RlciA9IGNyZWF0ZUZvckZpbGUoZmlsZVBhdGgpOworICAgIGlmICghZGVjb2Rl
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9tZW1vcnlTdG9yZS5tZXJnZVdpdGhEYXRhRnJv
bURlY29kZXIoKmRlY29kZXIpOworICAgIG1fbGFzdFN0YXRpc3RpY3NGaWxlU3luY1RpbWUgPSBy
ZWFkVGltZTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3Jh
Z2U6OnBvcHVsYXRlTWVtb3J5U3RvcmVGcm9tRGlzaygpCit7CisgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CisKKyAgICBTdHJpbmcgZmlsZVBhdGggPSByZXNvdXJjZUxvZ0ZpbGVQYXRo
KCk7CisgICAgaWYgKGZpbGVQYXRoLmlzRW1wdHkoKSB8fCAhRmlsZVN5c3RlbTo6ZmlsZUV4aXN0
cyhmaWxlUGF0aCkpIHsKKyAgICAgICAgbV9tZW1vcnlTdG9yZS5ncmFuZGZhdGhlckV4aXN0aW5n
V2Vic2l0ZURhdGEoW10oKSB7IH0pOworICAgICAgICBtb25pdG9yRGlyZWN0b3J5Rm9yTmV3U3Rh
dGlzdGljcygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFoYXNGaWxlQ2hh
bmdlZFNpbmNlKGZpbGVQYXRoLCBtX2xhc3RTdGF0aXN0aWNzRmlsZVN5bmNUaW1lKSkgeworICAg
ICAgICAvLyBObyBuZWVkIHRvIGdyYW5kZmF0aGVyIGluIHRoaXMgY2FzZS4KKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIFdhbGxUaW1lIHJlYWRUaW1lID0gV2FsbFRpbWU6Om5vdygpOwor
CisgICAgYXV0byBkZWNvZGVyID0gY3JlYXRlRm9yRmlsZShmaWxlUGF0aCk7CisgICAgaWYgKCFk
ZWNvZGVyKSB7CisgICAgICAgIG1fbWVtb3J5U3RvcmUuZ3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNp
dGVEYXRhKFtdKCkgeyB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIERlYnVn
IG1vZGUgaGFzIGEgcHJlcG91bGF0ZWQgbWVtb3J5IHN0b3JlLgorICAgIEFTU0VSVF9XSVRIX01F
U1NBR0UobV9tZW1vcnlTdG9yZS5pc0VtcHR5KCkgfHwgbV9tZW1vcnlTdG9yZS5pc0RlYnVnTW9k
ZUVuYWJsZWQoKSwgIlRoaXMgaXMgdGhlIGluaXRpYWwgaW1wb3J0IHNvIHRoZSBzdG9yZSBzaG91
bGQgYmUgZW1wdHkiKTsKKyAgICBtX21lbW9yeVN0b3JlLm1lcmdlV2l0aERhdGFGcm9tRGVjb2Rl
cigqZGVjb2Rlcik7CisKKyAgICBtX2xhc3RTdGF0aXN0aWNzRmlsZVN5bmNUaW1lID0gcmVhZFRp
bWU7CisKKyAgICBtX21lbW9yeVN0b3JlLmxvZ1Rlc3RpbmdFdmVudCgiUG9wdWxhdGVkV2l0aG91
dEdyYW5kZmF0aGVyaW5nIl9zKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVy
c2lzdGVudFN0b3JhZ2U6OndyaXRlTWVtb3J5U3RvcmVUb0Rpc2soKQoreworICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgbV9oYXNQZW5kaW5nV3JpdGUgPSBmYWxzZTsKKyAg
ICBzdG9wTW9uaXRvcmluZ0Rpc2soKTsKKworICAgIHdyaXRlVG9EaXNrKG1fbWVtb3J5U3RvcmUu
Y3JlYXRlRW5jb2RlckZyb21EYXRhKCksIHJlc291cmNlTG9nRmlsZVBhdGgoKSk7CisKKyAgICBt
X2xhc3RTdGF0aXN0aWNzRmlsZVN5bmNUaW1lID0gV2FsbFRpbWU6Om5vdygpOworICAgIG1fbGFz
dFN0YXRpc3RpY3NXcml0ZVRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKworICAgIHN0YXJ0
TW9uaXRvcmluZ0Rpc2soKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lz
dGVudFN0b3JhZ2U6OnNjaGVkdWxlT3JXcml0ZU1lbW9yeVN0b3JlKEZvcmNlSW1tZWRpYXRlV3Jp
dGUgZm9yY2VJbW1lZGlhdGVXcml0ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIGF1dG8gdGltZVNpbmNlTGFzdFdyaXRlID0gTW9ub3RvbmljVGltZTo6bm93KCkg
LSBtX2xhc3RTdGF0aXN0aWNzV3JpdGVUaW1lOworICAgIGlmIChmb3JjZUltbWVkaWF0ZVdyaXRl
ICE9IEZvcmNlSW1tZWRpYXRlV3JpdGU6OlllcyAmJiB0aW1lU2luY2VMYXN0V3JpdGUgPCBtaW5p
bXVtV3JpdGVJbnRlcnZhbCkgeworICAgICAgICBpZiAoIW1faGFzUGVuZGluZ1dyaXRlKSB7Cisg
ICAgICAgICAgICBtX2hhc1BlbmRpbmdXcml0ZSA9IHRydWU7CisgICAgICAgICAgICBTZWNvbmRz
IGRlbGF5ID0gbWluaW11bVdyaXRlSW50ZXJ2YWwgLSB0aW1lU2luY2VMYXN0V3JpdGUgKyAxX3M7
CisgICAgICAgICAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2hBZnRlcihkZWxheSwgW3dlYWtUaGlz
ID0gbWFrZVdlYWtQdHIoKnRoaXMpXSB7CisgICAgICAgICAgICAgICAgaWYgKHdlYWtUaGlzKQor
ICAgICAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+d3JpdGVNZW1vcnlTdG9yZVRvRGlzaygpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHdyaXRlTWVtb3J5U3RvcmVUb0Rpc2soKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzUGVyc2lzdGVudFN0b3JhZ2U6OmNsZWFyKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKyAgICBTdHJpbmcgZmlsZVBhdGggPSByZXNvdXJjZUxvZ0ZpbGVQYXRoKCk7Cisg
ICAgaWYgKGZpbGVQYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RvcE1v
bml0b3JpbmdEaXNrKCk7CisKKyAgICBpZiAoIUZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoZmlsZVBh
dGgpICYmIEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoZmlsZVBhdGgpKQorICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BlcnNpc3RlbnRTdG9yYWdlOiBVbmFibGUgdG8gZGVsZXRlIHN0YXRpc3RpY3MgZmlsZTogJXMi
LCBmaWxlUGF0aC51dGY4KCkuZGF0YSgpKTsKK30KKworI2lmICFQTEFURk9STShJT1NfRkFNSUxZ
KQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OmV4Y2x1ZGVG
cm9tQmFja3VwKCkgY29uc3QKK3sKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0
b3JhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xMmFhOWI4YWVjMmZkNTAwMWYxZDJjYzZhYTMzZGJiMjcyOGVl
NmJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFz
c2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5oCkBAIC0wLDAg
KzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0
Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL1dhbGxUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1dl
YWtQdHIuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEZpbGVNb25pdG9yOwor
fQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOworCisvLyBDYW4gb25seSBiZSBjb25zdHJ1Y3RlZCAvIGRlc3Ryb3llZCAvIHVz
ZWQgZnJvbSB0aGUgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJ3Mgc3RhdGlzdGljIHF1
ZXVlLgorY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlIDogcHVi
bGljIENhbk1ha2VXZWFrUHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFn
ZT4geworcHVibGljOgorICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFn
ZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUmLCBXb3JrUXVldWUmLCBjb25zdCBT
dHJpbmcmIHN0b3JhZ2VEaXJlY3RvcnlQYXRoKTsKKyAgICB+UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BlcnNpc3RlbnRTdG9yYWdlKCk7CisKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBlbnVtIGNs
YXNzIEZvcmNlSW1tZWRpYXRlV3JpdGUgeyBObywgWWVzLCB9OworICAgIHZvaWQgc2NoZWR1bGVP
cldyaXRlTWVtb3J5U3RvcmUoRm9yY2VJbW1lZGlhdGVXcml0ZSk7CisKK3ByaXZhdGU6CisgICAg
U3RyaW5nIHN0b3JhZ2VEaXJlY3RvcnlQYXRoKCkgY29uc3Q7CisgICAgU3RyaW5nIHJlc291cmNl
TG9nRmlsZVBhdGgoKSBjb25zdDsKKworICAgIHZvaWQgc3RhcnRNb25pdG9yaW5nRGlzaygpOwor
ICAgIHZvaWQgc3RvcE1vbml0b3JpbmdEaXNrKCk7CisgICAgdm9pZCBtb25pdG9yRGlyZWN0b3J5
Rm9yTmV3U3RhdGlzdGljcygpOworCisgICAgdm9pZCB3cml0ZU1lbW9yeVN0b3JlVG9EaXNrKCk7
CisgICAgdm9pZCBwb3B1bGF0ZU1lbW9yeVN0b3JlRnJvbURpc2soKTsKKyAgICB2b2lkIGV4Y2x1
ZGVGcm9tQmFja3VwKCkgY29uc3Q7CisgICAgdm9pZCByZWZyZXNoTWVtb3J5U3RvcmVGcm9tRGlz
aygpOworCisgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlJiBtX21lbW9yeVN0
b3JlOworICAgIFJlZjxXb3JrUXVldWU+IG1fd29ya1F1ZXVlOworICAgIGNvbnN0IFN0cmluZyBt
X3N0b3JhZ2VEaXJlY3RvcnlQYXRoOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpGaWxl
TW9uaXRvcj4gbV9maWxlTW9uaXRvcjsKKyAgICBXYWxsVGltZSBtX2xhc3RTdGF0aXN0aWNzRmls
ZVN5bmNUaW1lOworICAgIE1vbm90b25pY1RpbWUgbV9sYXN0U3RhdGlzdGljc1dyaXRlVGltZTsK
KyAgICBib29sIG1faGFzUGVuZGluZ1dyaXRlIHsgZmFsc2UgfTsKK307CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFz
c2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDUx
ZTcxMDhkNzgxMGU0MWE1NjQ3MzQwOGMyNTExZGZhMTBmYmJjMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuY3BwCkBAIC0wLDAgKzEsOTAyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmgiCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bl
cnNpc3RlbnRTdG9yYWdlLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5oIgorI2luY2x1ZGUg
IldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIldlYlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rl
bGVtZXRyeS5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhRmV0Y2hPcHRpb24uaCIKKyNpbmNsdWRl
ICJXZWJzaXRlRGF0YVN0b3JlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzLmg+CisjaW5jbHVkZSA8d3RmL0NhbGxiYWNrQWdncmVnYXRvci5oPgorI2luY2x1ZGUg
PHd0Zi9Dcm9zc1RocmVhZENvcGllci5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgorI2luY2x1ZGUgPHd0Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdGF0aWMgaW5saW5lIFN0cmluZyBpc29sYXRlZFByaW1hcnlEb21haW4oY29uc3QgVCYgdmFs
dWUpCit7CisgICAgcmV0dXJuIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlEb21haW4o
dmFsdWUpLmlzb2xhdGVkQ29weSgpOworfQorCitjb25zdCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFU
eXBlPiYgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptb25pdG9yZWREYXRhVHlwZXMo
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
Pj4gZGF0YVR5cGVzKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxXZWJzaXRlRGF0YVR5cGU+KHsKKyAg
ICAgICAgV2Vic2l0ZURhdGFUeXBlOjpDb29raWVzLAorICAgICAgICBXZWJzaXRlRGF0YVR5cGU6
OkRPTUNhY2hlLAorICAgICAgICBXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcywK
KyAgICAgICAgV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UsCisgICAgICAgIFdlYnNpdGVE
YXRhVHlwZTo6TWVkaWFLZXlzLAorICAgICAgICBXZWJzaXRlRGF0YVR5cGU6Ok9mZmxpbmVXZWJB
cHBsaWNhdGlvbkNhY2hlLAorI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAg
ICBXZWJzaXRlRGF0YVR5cGU6OlBsdWdJbkRhdGEsCisjZW5kaWYKKyAgICAgICAgV2Vic2l0ZURh
dGFUeXBlOjpTZWFyY2hGaWVsZFJlY2VudFNlYXJjaGVzLAorICAgICAgICBXZWJzaXRlRGF0YVR5
cGU6OlNlc3Npb25TdG9yYWdlLAorI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKKyAgICAgICAg
V2Vic2l0ZURhdGFUeXBlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9ucywKKyNlbmRpZgorICAg
ICAgICBXZWJzaXRlRGF0YVR5cGU6OldlYlNRTERhdGFiYXNlcywKKyAgICB9KSk7CisKKyAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgcmV0dXJuIGRhdGFUeXBlczsKK30KKwor
dm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgcG9zdFRhc2soW3RoaXMsIHZhbHVlXSB7CisgICAgICAgIGlmICht
X21lbW9yeVN0b3JlKQorICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0Tm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2YWx1ZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0Jl
Zm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKQoreworICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CisKKyAgICBwb3N0VGFzayhbdGhpcywgdmFsdWVdIHsKKyAgICAgICAgaWYg
KG1fbWVtb3J5U3RvcmUpCisgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRTaG91bGRDbGFz
c2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh2YWx1ZSk7CisgICAgfSk7Cit9
CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRTdWJtaXRU
ZWxlbWV0cnkoYm9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgcG9zdFRhc2soW3RoaXMsIHZhbHVlXSB7CisgICAgICAgIGlmIChtX21lbW9yeVN0b3Jl
KQorICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KHZh
bHVlKTsKKyAgICB9KTsKK30KKworV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoV2Vic2l0ZURhdGFTdG9yZSYgd2Vic2l0ZURhdGFT
dG9yZSkKKyAgICA6IG1fd2Vic2l0ZURhdGFTdG9yZShtYWtlV2Vha1B0cih3ZWJzaXRlRGF0YVN0
b3JlKSkKKyAgICAsIG1fc3RhdGlzdGljc1F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgUHJvY2VzcyBEYXRhIFF1ZXVlIiwgV29ya1F1ZXVlOjpU
eXBlOjpTZXJpYWwsIFdvcmtRdWV1ZTo6UU9TOjpVdGlsaXR5KSkKKyAgICAsIG1fZGFpbHlUYXNr
c1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6cGVyZm9ybURhaWx5VGFza3MpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIHBvc3RUYXNrKFt0aGlzLCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
ID0gd2Vic2l0ZURhdGFTdG9yZS5yZXNvbHZlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rv
cnkoKS5pc29sYXRlZENvcHkoKV0geworICAgICAgICBtX21lbW9yeVN0b3JlID0gc3RkOjptYWtl
X3VuaXF1ZTxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU+KCp0aGlzLCBtX3N0YXRp
c3RpY3NRdWV1ZSk7CisgICAgICAgIG1fcGVyc2lzdGVudFN0b3JhZ2UgPSBzdGQ6Om1ha2VfdW5p
cXVlPFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZT4oKm1fbWVtb3J5U3Rv
cmUsIG1fc3RhdGlzdGljc1F1ZXVlLCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KTsK
KyAgICB9KTsKKworICAgIG1fZGFpbHlUYXNrc1RpbWVyLnN0YXJ0UmVwZWF0aW5nKDI0X2gpOwor
fQorCitXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6On5XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBm
bHVzaEFuZERlc3Ryb3lQZXJzaXN0ZW50U3RvcmUoKTsKK30KKworaW5saW5lIHZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwb3N0VGFzayhXVEY6OkZ1bmN0aW9uPHZvaWQoKT4m
JiB0YXNrKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgbV9zdGF0aXN0
aWNzUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHRhc2sg
PSBXVEZNb3ZlKHRhc2spXSB7CisgICAgICAgIHRhc2soKTsKKyAgICB9KTsKK30KKworaW5saW5l
IHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwb3N0VGFza1JlcGx5KFdURjo6
RnVuY3Rpb248dm9pZCgpPiYmIHJlcGx5KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKHJlcGx5KSk7Cit9CisK
K3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmbHVzaEFuZERlc3Ryb3lQZXJz
aXN0ZW50U3RvcmUoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBp
ZiAoIW1fcGVyc2lzdGVudFN0b3JhZ2UgJiYgIW1fbWVtb3J5U3RvcmUpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIE1ha2Ugc3VyZSB3ZSBkZXN0cm95IHRoZSBwZXJzaXN0ZW50IHN0b3JlIG9u
IHRoZSBiYWNrZ3JvdW5kIHF1ZXVlIGFuZCB3YWl0IGZvciBpdCB0byBkaWUKKyAgICAvLyBzeW5j
aHJvbm91c2x5IHNpbmNlIGl0IGhhcyBhIEMrKyByZWZlcmVuY2UgdG8gdXMuIEJsb2NraW5nIG5h
dHVyZSBvZiB0aGlzIHRhc2sgYWxsb3dzIHVzCisgICAgLy8gdG8gbm90IG1haW50YWluIGEgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIHJlZmVyZW5jZSBmb3IgdGhlIGR1cmF0aW9uIG9m
IGRpc3BhdGNoLAorICAgIC8vIGF2b2lkaW5nIGRvdWJsZS1kZWxldGlvbiBpc3N1ZXMgd2hlbiB0
aGlzIGlzIGludm9rZWQgZnJvbSB0aGUgZGVzdHJ1Y3Rvci4KKyAgICBCaW5hcnlTZW1hcGhvcmUg
c2VtYXBob3JlOworICAgIG1fc3RhdGlzdGljc1F1ZXVlLT5kaXNwYXRjaChbJnNlbWFwaG9yZSwg
dGhpc10geworICAgICAgICBtX3BlcnNpc3RlbnRTdG9yYWdlID0gbnVsbHB0cjsKKyAgICAgICAg
bV9tZW1vcnlTdG9yZSA9IG51bGxwdHI7CisgICAgICAgIHNlbWFwaG9yZS5zaWduYWwoKTsKKyAg
ICB9KTsKKyAgICBzZW1hcGhvcmUud2FpdCgpOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sIHZh
bHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7Cisg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHBvc3RUYXNrKFt0aGlzLCB2YWx1
ZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlIHsKKyAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgICAgICBtX21lbW9yeVN0
b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKHZhbHVlKTsKKyAgICAgICAg
cG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgfSk7Cit9CisK
K3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJj
ZUZvckRlYnVnTW9kZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICBwb3N0VGFzayhbdGhpcywgcHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFp
bih1cmwpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgeworICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVt
b3J5U3RvcmUtPnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKHByaW1hcnlEb21haW4p
OworICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAg
ICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxl
U3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZygpCit7CisgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIHBvc3RUYXNrKFt0aGlzXSB7CisgICAgICAgIGlmIChtX21l
bW9yeVN0b3JlKQorICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+cHJvY2Vzc1N0YXRpc3RpY3NB
bmREYXRhUmVjb3JkcygpOworICAgIH0pOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQoVmVjdG9yPFdlYkNvcmU6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiYgb3JpZ2lucykKK3sKKyAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgLy8gSXQgaXMgc2FmZSB0byBtb3ZlIHRoZSBvcmlnaW5zIHRv
IHRoZSBiYWNrZ3JvdW5kIHF1ZXVlIHdpdGhvdXQgaXNvbGF0ZWQgY29weSBoZXJlIGJlY2F1c2Ug
dGhpcyBpcyBhbiByLXZhbHVlCisgICAgLy8gY29taW5nIGZyb20gSVBDLiBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzIG9ubHkgY29udGFpbnMgc3RyaW5ncyB3aGljaCBhcmUgc2FmZSB0byBtb3ZlIHRv
IG90aGVyIHRocmVhZHMgYXMgbG9uZworICAgIC8vIGFzIG5vYm9keSBvbiB0aGlzIHRocmVhZCBo
b2xkcyBhIHJlZmVyZW5jZSB0byB0aG9zZSBzdHJpbmdzLgorICAgIHBvc3RUYXNrKFt0aGlzLCBv
cmlnaW5zID0gV1RGTW92ZShvcmlnaW5zKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFtX21l
bW9yeVN0b3JlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fbWVtb3J5U3RvcmUt
Pm1lcmdlU3RhdGlzdGljcyhXVEZNb3ZlKG9yaWdpbnMpKTsKKworICAgICAgICAvLyBXZSBjYW4g
Y2FuY2VsIGFueSBwZW5kaW5nIHJlcXVlc3QgdG8gcHJvY2VzcyBzdGF0aXN0aWNzIHNpbmNlIHdl
J3JlIGRvaW5nIGl0IHN5bmNocm9ub3VzbHkgYmVsb3cuCisgICAgICAgIG1fbWVtb3J5U3RvcmUt
PmNhbmNlbFBlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3QoKTsKKworICAgICAgICAv
LyBGaXJlIGJlZm9yZSBwcm9jZXNzaW5nIHN0YXRpc3RpY3MgdG8gcHJvcGFnYXRlIHVzZXIgaW50
ZXJhY3Rpb24gYXMgZmFzdCBhcyBwb3NzaWJsZSB0byB0aGUgbmV0d29yayBwcm9jZXNzLgorICAg
ICAgICBtX21lbW9yeVN0b3JlLT51cGRhdGVDb29raWVCbG9ja2luZyhbXSgpIHsgfSk7CisgICAg
ICAgIG1fbWVtb3J5U3RvcmUtPnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsKKyAg
ICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc1N0b3Jh
Z2VBY2Nlc3MoU3RyaW5nJiYgc3ViRnJhbWVIb3N0LCBTdHJpbmcmJiB0b3BGcmFtZUhvc3QsIHVp
bnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAo
Ym9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKHN1YkZyYW1lSG9zdCAh
PSB0b3BGcmFtZUhvc3QpOworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBw
b3N0VGFzayhbdGhpcywgc3ViRnJhbWVQcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9t
YWluKHN1YkZyYW1lSG9zdCksIHRvcEZyYW1lUHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFy
eURvbWFpbih0b3BGcmFtZUhvc3QpLCBmcmFtZUlELCBwYWdlSUQsIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICBpZiAo
IW1fbWVtb3J5U3RvcmUpIHsKKyAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fbWVtb3J5U3RvcmUtPmhhc1N0
b3JhZ2VBY2Nlc3Moc3ViRnJhbWVQcmltYXJ5RG9tYWluLCB0b3BGcmFtZVByaW1hcnlEb21haW4s
IGZyYW1lSUQsIHBhZ2VJRCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKGJvb2wgaGFzU3RvcmFnZUFjY2VzcykgbXV0YWJsZSB7CisgICAgICAgICAgICBw
b3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpLCBoYXNTdG9yYWdlQWNjZXNzXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihoYXNTdG9yYWdlQWNjZXNzKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmNhbGxIYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyKGNvbnN0IFN0cmluZyYgcmVzb3Vy
Y2VEb21haW4sIGNvbnN0IFN0cmluZyYgZmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3QgZnJhbWVJ
RCwgdWludDY0X3QgcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaGFzQWNjZXNz
KT4mJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisjaWYg
RU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKKyAgICBpZiAobV93ZWJzaXRlRGF0YVN0
b3JlKSB7CisgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+aGFzU3RvcmFnZUFjY2Vzc0ZvckZy
YW1lSGFuZGxlcihyZXNvdXJjZURvbWFpbiwgZmlyc3RQYXJ0eURvbWFpbiwgZnJhbWVJRCwgcGFn
ZUlELCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYK
KyAgICBjYWxsYmFjayhmYWxzZSk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBzdWJGcmFtZUhvc3QsIFN0cmlu
ZyYmIHRvcEZyYW1lSG9zdCwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBib29s
IHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1N0YXR1
cyk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKHN1YkZyYW1lSG9zdCAhPSB0
b3BGcmFtZUhvc3QpOworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRv
IHN1YkZyYW1lUHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbihzdWJGcmFtZUhv
c3QpOworICAgIGF1dG8gdG9wRnJhbWVQcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9t
YWluKHRvcEZyYW1lSG9zdCk7CisgICAgaWYgKHN1YkZyYW1lUHJpbWFyeURvbWFpbiA9PSB0b3BG
cmFtZVByaW1hcnlEb21haW4pIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFj
Y2Vzc1N0YXR1czo6SGFzQWNjZXNzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHBv
c3RUYXNrKFt0aGlzLCBzdWJGcmFtZVByaW1hcnlEb21haW4gPSBjcm9zc1RocmVhZENvcHkoc3Vi
RnJhbWVQcmltYXJ5RG9tYWluKSwgdG9wRnJhbWVQcmltYXJ5RG9tYWluID0gY3Jvc3NUaHJlYWRD
b3B5KHRvcEZyYW1lUHJpbWFyeURvbWFpbiksIGZyYW1lSUQsIHBhZ2VJRCwgcHJvbXB0RW5hYmxl
ZCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0
YWJsZSB7CisgICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkgeworICAgICAgICAgICAgcG9zdFRh
c2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0g
KCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFj
Y2Vzc1N0YXR1czo6Q2Fubm90UmVxdWVzdEFjY2Vzcyk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fbWVtb3J5U3RvcmUtPnJlcXVl
c3RTdG9yYWdlQWNjZXNzKFdURk1vdmUoc3ViRnJhbWVQcmltYXJ5RG9tYWluKSwgV1RGTW92ZSh0
b3BGcmFtZVByaW1hcnlEb21haW4pLCBmcmFtZUlELCBwYWdlSUQsIHByb21wdEVuYWJsZWQsIFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTdG9yYWdlQWNj
ZXNzU3RhdHVzIHN0YXR1cykgbXV0YWJsZSB7CisgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdGF0dXNdICgp
IG11dGFibGUgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0YXR1cyk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKFN0
cmluZyYmIHByaW1hcnlEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MsIHVpbnQ2NF90IG9wZW5l
clBhZ2VJRCwgU3RyaW5nJiYgb3BlbmVyUHJpbWFyeURvbWFpbikKK3sKKyAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgLy8gSXQgaXMgc2FmZSB0byBtb3ZlIHRoZSBzdHJpbmdz
IHRvIHRoZSBiYWNrZ3JvdW5kIHF1ZXVlIHdpdGhvdXQgaXNvbGF0ZWQgY29weSBoZXJlIGJlY2F1
c2UgdGhleSBhcmUgci12YWx1ZSByZWZlcmVuY2VzCisgICAgLy8gY29taW5nIGZyb20gSVBDLiBT
dHJpbmdzIHdoaWNoIGFyZSBzYWZlIHRvIG1vdmUgdG8gb3RoZXIgdGhyZWFkcyBhcyBsb25nIGFz
IG5vYm9keSBvbiB0aGlzIHRocmVhZCBob2xkcyBhIHJlZmVyZW5jZQorICAgIC8vIHRvIHRob3Nl
IHN0cmluZ3MuCisgICAgcG9zdFRhc2soW3RoaXMsIHByaW1hcnlEb21haW5Jbk5lZWRPZlN0b3Jh
Z2VBY2Nlc3MgPSBXVEZNb3ZlKHByaW1hcnlEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MpLCBv
cGVuZXJQYWdlSUQsIG9wZW5lclByaW1hcnlEb21haW4gPSBXVEZNb3ZlKG9wZW5lclByaW1hcnlE
b21haW4pXSgpIG11dGFibGUgeworICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAg
ICAgIG1fbWVtb3J5U3RvcmUtPnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoV1RGTW92
ZShwcmltYXJ5RG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzKSwgb3BlbmVyUGFnZUlELCBXVEZN
b3ZlKG9wZW5lclByaW1hcnlEb21haW4pKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdyYW50U3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBzdWJGcmFt
ZUhvc3QsIFN0cmluZyYmIHRvcEZyYW1lSG9zdCwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3Qg
cGFnZUlELCBib29sIHVzZXJXYXNQcm9tcHRlZE5vdywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChi
b29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOworICAgIHBvc3RUYXNrKFt0aGlzLCBzdWJGcmFtZUhvc3QgPSBjcm9zc1RocmVhZENvcHko
c3ViRnJhbWVIb3N0KSwgdG9wRnJhbWVIb3N0ID0gY3Jvc3NUaHJlYWRDb3B5KHRvcEZyYW1lSG9z
dCksIGZyYW1lSUQsIHBhZ2VJRCwgdXNlcldhc1Byb21wdGVkTm93LCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgaWYg
KCFtX21lbW9yeVN0b3JlKSB7CisgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fbWVtb3J5U3RvcmUtPmdy
YW50U3RvcmFnZUFjY2VzcyhXVEZNb3ZlKHN1YkZyYW1lSG9zdCksIFdURk1vdmUodG9wRnJhbWVI
b3N0KSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0ZWROb3csIFtjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShib29sIHdhc0dyYW50ZWRBY2Nlc3Mp
IG11dGFibGUgeworICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgd2FzR3JhbnRlZEFjY2Vzc10gKCkgbXV0YWJs
ZSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2FzR3JhbnRlZEFjY2Vzcyk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjYWxsR3JhbnRTdG9yYWdlQWNjZXNzSGFuZGxlcihj
b25zdCBTdHJpbmcmIHN1YkZyYW1lUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiB0b3BGcmFt
ZVByaW1hcnlEb21haW4sIE9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCB1aW50NjRfdCBwYWdl
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spCit7CisgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJ
U1RJQ1MpCisgICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgeworICAgICAgICBtX3dlYnNpdGVE
YXRhU3RvcmUtPmdyYW50U3RvcmFnZUFjY2Vzc0hhbmRsZXIoc3ViRnJhbWVQcmltYXJ5RG9tYWlu
LCB0b3BGcmFtZVByaW1hcnlEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgV1RGTW92ZShjYWxsYmFj
aykpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgY2FsbGJhY2soZmFsc2Up
OworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZGlkQ3JlYXRlTmV0
d29ya1Byb2Nlc3MoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBw
b3N0VGFzayhbdGhpc10geworICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIG1fbWVtb3J5U3RvcmUtPmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNz
KCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpy
ZW1vdmVBbGxTdG9yYWdlQWNjZXNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisjaWYgRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKKyAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3Jl
KQorICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3NIYW5k
bGVyKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBlbHNlCisgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7CisjZWxzZQorICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisjZW5kaWYK
K30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmFwcGxpY2F0aW9uV2ls
bFRlcm1pbmF0ZSgpCit7CisgICAgZmx1c2hBbmREZXN0cm95UGVyc2lzdGVudFN0b3JlKCk7Cit9
CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwZXJmb3JtRGFpbHlUYXNr
cygpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHBvc3RUYXNrKFt0
aGlzXSB7CisgICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBtX21lbW9yeVN0b3JlLT5pbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5l
Y2Vzc2FyeSgpOworICAgICAgICBtX21lbW9yeVN0b3JlLT5jYWxjdWxhdGVBbmRTdWJtaXRUZWxl
bWV0cnkoKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnN1Ym1pdFRlbGVtZXRyeSgpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgIHBvc3RUYXNrKFt0aGlzXSB7CisgICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAg
ICAgICAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6Y2FsY3VsYXRlQW5k
U3VibWl0KCptX21lbW9yeVN0b3JlKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBXZWJGcmFtZVByb3h5
JiBmcmFtZSwgY29uc3QgVVJMJiBwYWdlVVJMLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFVSTCYgcmVkaXJlY3RVUkwpCit7CisgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc291cmNlVVJMID0gcmVkaXJlY3RVUkw7CisgICAg
Ym9vbCBpc1JlZGlyZWN0ID0gIXJlZGlyZWN0VVJMLmlzTnVsbCgpOworICAgIGlmICghaXNSZWRp
cmVjdCkgeworICAgICAgICBzb3VyY2VVUkwgPSBmcmFtZS51cmwoKTsKKyAgICAgICAgaWYgKHNv
dXJjZVVSTC5pc051bGwoKSkKKyAgICAgICAgICAgIHNvdXJjZVVSTCA9IHBhZ2VVUkw7CisgICAg
fQorCisgICAgYXV0byYgdGFyZ2V0VVJMID0gcmVxdWVzdC51cmwoKTsKKworICAgIGlmICghdGFy
Z2V0VVJMLmlzVmFsaWQoKSB8fCAhcGFnZVVSTC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGF1dG8gdGFyZ2V0SG9zdCA9IHRhcmdldFVSTC5ob3N0KCk7CisgICAgYXV0byBtYWlu
RnJhbWVIb3N0ID0gcGFnZVVSTC5ob3N0KCk7CisKKyAgICBpZiAodGFyZ2V0SG9zdC5pc0VtcHR5
KCkgfHwgbWFpbkZyYW1lSG9zdC5pc0VtcHR5KCkgfHwgdGFyZ2V0SG9zdCA9PSBzb3VyY2VVUkwu
aG9zdCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHRhcmdldFByaW1hcnlEb21haW4g
PSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpwcmltYXJ5RG9tYWluKHRhcmdldFVSTCk7CisgICAg
YXV0byBtYWluRnJhbWVQcmltYXJ5RG9tYWluID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6cHJp
bWFyeURvbWFpbihwYWdlVVJMKTsKKyAgICBhdXRvIHNvdXJjZVByaW1hcnlEb21haW4gPSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzOjpwcmltYXJ5RG9tYWluKHNvdXJjZVVSTCk7CisKKyAgICBwb3N0
VGFzayhbdGhpcywgdGFyZ2V0UHJpbWFyeURvbWFpbiA9IHRhcmdldFByaW1hcnlEb21haW4uaXNv
bGF0ZWRDb3B5KCksIG1haW5GcmFtZVByaW1hcnlEb21haW4gPSBtYWluRnJhbWVQcmltYXJ5RG9t
YWluLmlzb2xhdGVkQ29weSgpLCBzb3VyY2VQcmltYXJ5RG9tYWluID0gc291cmNlUHJpbWFyeURv
bWFpbi5pc29sYXRlZENvcHkoKSwgdGFyZ2V0SG9zdCA9IHRhcmdldEhvc3QudG9TdHJpbmcoKS5p
c29sYXRlZENvcHkoKSwgbWFpbkZyYW1lSG9zdCA9IG1haW5GcmFtZUhvc3QudG9TdHJpbmcoKS5p
c29sYXRlZENvcHkoKSwgaXNSZWRpcmVjdCwgaXNNYWluRnJhbWUgPSBmcmFtZS5pc01haW5GcmFt
ZSgpXSB7CisgICAgICAgIAorICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAg
IG1fbWVtb3J5U3RvcmUtPmxvZ0ZyYW1lTmF2aWdhdGlvbih0YXJnZXRQcmltYXJ5RG9tYWluLCBt
YWluRnJhbWVQcmltYXJ5RG9tYWluLCBzb3VyY2VQcmltYXJ5RG9tYWluLCB0YXJnZXRIb3N0LCBt
YWluRnJhbWVIb3N0LCBpc1JlZGlyZWN0LCBpc01haW5GcmFtZSk7CisgICAgfSk7Cit9CisKK3Zv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKHVybC5wcm90
b2NvbElzQWJvdXQoKSB8fCB1cmwuaXNFbXB0eSgpKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwb3N0VGFzayhbdGhpcywgcHJp
bWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih1cmwpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBpZiAo
bV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmxvZ1VzZXJJbnRlcmFj
dGlvbihwcmltYXJ5RG9tYWluKTsKKyAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICBpZiAodXJsLnByb3RvY29sSXNBYm91dCgpIHx8IHVybC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQ
cmltYXJ5RG9tYWluKHVybCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAg
ICAgICAgbV9tZW1vcnlTdG9yZS0+Y2xlYXJVc2VySW50ZXJhY3Rpb24ocHJpbWFyeURvbWFpbik7
CisgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAg
IH0pOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzSGFkVXNl
ckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChib29s
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgaWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9t
YWluKHVybCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
ICgpIG11dGFibGUgeworICAgICAgICBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiA9IG1fbWVtb3J5
U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5oYXNIYWRVc2VySW50ZXJhY3Rpb24ocHJpbWFyeURvbWFp
bikgOiBmYWxzZTsKKyAgICAgICAgcG9zdFRhc2tSZXBseShbaGFkVXNlckludGVyYWN0aW9uLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGhhZFVzZXJJbnRlcmFjdGlvbik7Cisg
ICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJMJiB1cmwsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAodXJsLnByb3RvY29sSXNBYm91dCgpIHx8IHVy
bC5pc0VtcHR5KCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5RG9tYWluID0gaXNvbGF0
ZWRQcmltYXJ5RG9tYWluKHVybCksIHNlY29uZHMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChtX21lbW9yeVN0
b3JlKQorICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0TGFzdFNlZW4ocHJpbWFyeURvbWFp
biwgc2Vjb25kcyk7CisgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOworICAgIH0pOworfQorICAgIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKKworICAgIGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkgfHwgdXJsLmlzRW1w
dHkoKSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgcG9zdFRhc2soW3RoaXMsIHByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1h
cnlEb21haW4odXJsKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgICAg
ICBtX21lbW9yeVN0b3JlLT5zZXRQcmV2YWxlbnRSZXNvdXJjZShwcmltYXJ5RG9tYWluKTsKKyAg
ICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgfSk7
Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRWZXJ5UHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgaWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwuaXNFbXB0eSgpKSB7CisgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwb3N0
VGFzayhbdGhpcywgcHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih1cmwpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
eworICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUt
PnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShwcmltYXJ5RG9tYWluKTsKKyAgICAgICAgcG9zdFRh
c2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgfSk7Cit9CisgICAgCit2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRp
c3RpY3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgcG9zdFRh
c2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
ICgpIG11dGFibGUgeworICAgICAgICBTdHJpbmcgcmVzdWx0ID0gbV9tZW1vcnlTdG9yZSA/IG1f
bWVtb3J5U3RvcmUtPmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgOiBlbXB0eVN0cmluZygp
OworICAgICAgICBwb3N0VGFza1JlcGx5KFtyZXN1bHQgPSByZXN1bHQuaXNvbGF0ZWRDb3B5KCks
IGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFi
bGUgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVzdWx0KTsKKyAgICAgICAgfSk7
CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1By
ZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChi
b29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgaWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwuaXNFbXB0eSgpKSB7
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5
RG9tYWluKHVybCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildICgpIG11dGFibGUgeworICAgICAgICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UgPSBtX21l
bW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNQcmV2YWxlbnRSZXNvdXJjZShwcmltYXJ5RG9t
YWluKSA6IGZhbHNlOworICAgICAgICBwb3N0VGFza1JlcGx5KFtpc1ByZXZhbGVudFJlc291cmNl
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRh
YmxlIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGlzUHJldmFsZW50UmVzb3VyY2Up
OworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAodXJsLnByb3RvY29sSXNBYm91dCgpIHx8
IHVybC5pc0VtcHR5KCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5RG9t
YWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHVybCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICBib29sIGlzVmVy
eVByZXZhbGVudFJlc291cmNlID0gbV9tZW1vcnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUtPmlzVmVy
eVByZXZhbGVudFJlc291cmNlKHByaW1hcnlEb21haW4pIDogZmFsc2U7CisgICAgICAgIHBvc3RU
YXNrUmVwbHkoW2lzVmVyeVByZXZhbGVudFJlc291cmNlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKGlzVmVyeVByZXZhbGVudFJlc291cmNlKTsKKyAgICAgICAgfSk7CisgICAg
fSk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVy
ZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3QgVVJMJiBzdWJyZXNvdXJjZSwgY29uc3QgVVJMJiB0
b3BGcmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIAorICAgIHBvc3RUYXNr
KFt0aGlzLCBzdWJyZXNvdXJjZVByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4o
c3VicmVzb3VyY2UpLCB0b3BGcmFtZVByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21h
aW4odG9wRnJhbWUpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIgPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNSZWdpc3RlcmVkQXNTdWJy
ZXNvdXJjZVVuZGVyKHN1YnJlc291cmNlUHJpbWFyeURvbWFpbiwgdG9wRnJhbWVQcmltYXJ5RG9t
YWluKSA6IGZhbHNlOworICAgICAgICBwb3N0VGFza1JlcGx5KFtpc1JlZ2lzdGVyZWRBc1N1YnJl
c291cmNlVW5kZXIsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildICgpIG11dGFibGUgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaXNSZWdpc3Rl
cmVkQXNTdWJyZXNvdXJjZVVuZGVyKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5k
ZXIoY29uc3QgVVJMJiBzdWJGcmFtZSwgY29uc3QgVVJMJiB0b3BGcmFtZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCAoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHBvc3RUYXNrKFt0aGlzLCBzdWJGcmFtZVByaW1hcnlE
b21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4oc3ViRnJhbWUpLCB0b3BGcmFtZVByaW1hcnlE
b21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odG9wRnJhbWUpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgYm9v
bCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIgPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlT
dG9yZS0+aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKHN1YkZyYW1lUHJpbWFyeURvbWFpbiwg
dG9wRnJhbWVQcmltYXJ5RG9tYWluKSA6IGZhbHNlOworICAgICAgICBwb3N0VGFza1JlcGx5KFtp
c1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKTsKKyAgICAgICAgfSk7CisgICAgfSk7
Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVyZWRB
c1JlZGlyZWN0aW5nVG8oY29uc3QgVVJMJiBob3N0UmVkaXJlY3RlZEZyb20sIGNvbnN0IFVSTCYg
aG9zdFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHBv
c3RUYXNrKFt0aGlzLCBob3N0UmVkaXJlY3RlZEZyb21QcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQ
cmltYXJ5RG9tYWluKGhvc3RSZWRpcmVjdGVkRnJvbSksIGhvc3RSZWRpcmVjdGVkVG9QcmltYXJ5
RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKGhvc3RSZWRpcmVjdGVkVG8pLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAg
ICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8gPSBtX21lbW9yeVN0b3JlID8g
bV9tZW1vcnlTdG9yZS0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGhvc3RSZWRpcmVjdGVk
RnJvbVByaW1hcnlEb21haW4sIGhvc3RSZWRpcmVjdGVkVG9QcmltYXJ5RG9tYWluKSA6IGZhbHNl
OworICAgICAgICBwb3N0VGFza1JlcGx5KFtpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8sIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUg
eworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGlu
Z1RvKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkgfHwg
dXJsLmlzRW1wdHkoKSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgcG9zdFRhc2soW3RoaXMsIHByaW1hcnlEb21haW4gPSBpc29s
YXRlZFByaW1hcnlEb21haW4odXJsKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisg
ICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5jbGVhclByZXZhbGVudFJlc291cmNlKHByaW1hcnlE
b21haW4pOworICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dEdyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIGJvb2wgdmFsdWUpCit7CisgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkgfHwg
dXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcG9zdFRhc2soW3RoaXMsIHBy
aW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odXJsKSwgdmFsdWVdIHsKKyAgICAg
ICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRHcmFu
ZGZhdGhlcmVkKHByaW1hcnlEb21haW4sIHZhbHVlKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVy
bCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7
CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmICh1cmwucHJvdG9jb2xJ
c0Fib3V0KCkgfHwgdXJsLmlzRW1wdHkoKSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwb3N0VGFzayhbdGhpcywgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgcHJpbWFyeURvbWFp
biA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih1cmwpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgYm9v
bCBpc0dyYW5kRmF0aGVyZWQgPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNHcmFu
ZGZhdGhlcmVkKHByaW1hcnlEb21haW4pIDogZmFsc2U7CisgICAgICAgIHBvc3RUYXNrUmVwbHko
W2lzR3JhbmRGYXRoZXJlZCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihpc0dy
YW5kRmF0aGVyZWQpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihjb25z
dCBVUkwmIHN1YmZyYW1lLCBjb25zdCBVUkwmIHRvcEZyYW1lKQoreworICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICBpZiAoc3ViZnJhbWUucHJvdG9jb2xJc0Fib3V0KCkgfHwg
c3ViZnJhbWUuaXNFbXB0eSgpIHx8IHRvcEZyYW1lLnByb3RvY29sSXNBYm91dCgpIHx8IHRvcEZy
YW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcG9zdFRhc2soW3RoaXMsIHBy
aW1hcnlUb3BGcmFtZURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih0b3BGcmFtZSksIHBy
aW1hcnlTdWJGcmFtZURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbihzdWJmcmFtZSldIHsK
KyAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5z
ZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4ocHJpbWFyeVN1YkZyYW1lRG9tYWluLCBwcmlt
YXJ5VG9wRnJhbWVEb21haW4pOworICAgIH0pOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0IFVS
TCYgc3VicmVzb3VyY2UsIGNvbnN0IFVSTCYgdG9wRnJhbWUpCit7CisgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIGlmIChzdWJyZXNvdXJjZS5wcm90b2NvbElzQWJvdXQoKSB8
fCBzdWJyZXNvdXJjZS5pc0VtcHR5KCkgfHwgdG9wRnJhbWUucHJvdG9jb2xJc0Fib3V0KCkgfHwg
dG9wRnJhbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBwb3N0VGFzayhbdGhp
cywgcHJpbWFyeVRvcEZyYW1lRG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHRvcEZyYW1l
KSwgcHJpbWFyeVN1YnJlc291cmNlRG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHN1YnJl
c291cmNlKV0geworICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVt
b3J5U3RvcmUtPnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmltYXJ5U3VicmVz
b3VyY2VEb21haW4sIHByaW1hcnlUb3BGcmFtZURvbWFpbik7CisgICAgfSk7Cit9CisKK3ZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJjZSwgY29uc3QgVVJMJiBob3N0TmFtZVJlZGlyZWN0
ZWRUbykKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKHN1YnJl
c291cmNlLnByb3RvY29sSXNBYm91dCgpIHx8IHN1YnJlc291cmNlLmlzRW1wdHkoKSB8fCBob3N0
TmFtZVJlZGlyZWN0ZWRUby5wcm90b2NvbElzQWJvdXQoKSB8fCBob3N0TmFtZVJlZGlyZWN0ZWRU
by5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHBvc3RUYXNrKFt0aGlzLCBwcmlt
YXJ5UmVkaXJlY3REb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4oaG9zdE5hbWVSZWRpcmVj
dGVkVG8pLCBwcmltYXJ5U3VicmVzb3VyY2VEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4o
c3VicmVzb3VyY2UpXSB7CisgICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICAgICAg
bV9tZW1vcnlTdG9yZS0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKHByaW1hcnlTdWJy
ZXNvdXJjZURvbWFpbiwgcHJpbWFyeVJlZGlyZWN0RG9tYWluKTsKKyAgICB9KTsKK30KKwordm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVzb3VyY2UsIGNvbnN0IFVSTCYgaG9zdE5hbWVSZWRp
cmVjdGVkRnJvbSkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYg
KHN1YnJlc291cmNlLnByb3RvY29sSXNBYm91dCgpIHx8IHN1YnJlc291cmNlLmlzRW1wdHkoKSB8
fCBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tLnByb3RvY29sSXNBYm91dCgpIHx8IGhvc3ROYW1lUmVk
aXJlY3RlZEZyb20uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgcG9zdFRh
c2soW3RoaXMsIHByaW1hcnlSZWRpcmVjdERvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbiho
b3N0TmFtZVJlZGlyZWN0ZWRGcm9tKSwgcHJpbWFyeVN1YnJlc291cmNlRG9tYWluID0gaXNvbGF0
ZWRQcmltYXJ5RG9tYWluKHN1YnJlc291cmNlKV0geworICAgICAgICBpZiAobV9tZW1vcnlTdG9y
ZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RGcm9tKHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbiwgcHJpbWFyeVJlZGlyZWN0RG9tYWluKTsK
KyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZyYW1lSG9zdE5hbWUsIGNvbnN0
IFVSTCYgaG9zdE5hbWVSZWRpcmVjdGVkVG8pCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIGlmICh0b3BGcmFtZUhvc3ROYW1lLnByb3RvY29sSXNBYm91dCgpIHx8IHRv
cEZyYW1lSG9zdE5hbWUuaXNFbXB0eSgpIHx8IGhvc3ROYW1lUmVkaXJlY3RlZFRvLnByb3RvY29s
SXNBYm91dCgpIHx8IGhvc3ROYW1lUmVkaXJlY3RlZFRvLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5UmVkaXJlY3REb21haW4gPSBp
c29sYXRlZFByaW1hcnlEb21haW4oaG9zdE5hbWVSZWRpcmVjdGVkVG8pLCB0b3BGcmFtZVByaW1h
cnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odG9wRnJhbWVIb3N0TmFtZSldIHsKKyAg
ICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8odG9wRnJhbWVQcmltYXJ5RG9tYWluLCBwcmltYXJ5UmVk
aXJlY3REb21haW4pOworICAgIH0pOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiB0b3BGcmFt
ZUhvc3ROYW1lLCBjb25zdCBVUkwmIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pCit7CisgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmICh0b3BGcmFtZUhvc3ROYW1lLnByb3Rv
Y29sSXNBYm91dCgpIHx8IHRvcEZyYW1lSG9zdE5hbWUuaXNFbXB0eSgpIHx8IGhvc3ROYW1lUmVk
aXJlY3RlZEZyb20ucHJvdG9jb2xJc0Fib3V0KCkgfHwgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBwb3N0VGFzayhbdGhpcywgcHJp
bWFyeVJlZGlyZWN0RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKGhvc3ROYW1lUmVkaXJl
Y3RlZEZyb20pLCB0b3BGcmFtZVByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4o
dG9wRnJhbWVIb3N0TmFtZSldIHsKKyAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAg
ICAgICBtX21lbW9yeVN0b3JlLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSh0b3BGcmFt
ZVByaW1hcnlEb21haW4sIHByaW1hcnlSZWRpcmVjdERvbWFpbik7CisgICAgfSk7Cit9CisKK3Zv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5n
VXBkYXRlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sK
KyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSB0ZXN0aW5nIHN5c3RlbS4gU2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLgorICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CisKKyAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghbV9tZW1v
cnlTdG9yZSkgeworICAgICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9tZW1v
cnlTdG9yZS0+dXBkYXRlQ29va2llQmxvY2tpbmcoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICAgICAgcG9zdFRhc2tS
ZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgIH0pOworICAgIH0pOwor
fQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDb29raWVC
bG9ja2luZ1VwZGF0ZUZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb0Js
b2NrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7Cisg
ICAgLy8gSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgdGVzdGluZyBzeXN0ZW0uIFNob3VsZCBvbmx5
IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOworICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW5zVG9CbG9jayA9IGNyb3NzVGhyZWFk
Q29weShkb21haW5zVG9CbG9jayksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpIHsK
KyAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9tZW1vcnlTdG9yZS0+
dXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKGRvbWFpbnNUb0Jsb2NrLCBbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAg
ICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgICAg
ICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNjaGVkdWxlQ2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgZG9tYWlucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQoreworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IHRlc3Rpbmcgc3lzdGVtLiBTaG91
bGQgb25seSBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKKyAgICBwb3N0VGFzayhbdGhpcywgZG9tYWlucyA9IGNyb3NzVGhyZWFk
Q29weShkb21haW5zKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkgeworICAgICAg
ICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX21lbW9yeVN0b3JlLT5jbGVhckJs
b2NraW5nU3RhdGVGb3JEb21haW5zKGRvbWFpbnMsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgcG9zdFRhc2tS
ZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgIH0pOworICAgIH0pOwor
fQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhcklu
TWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRHcmFuZGZhdGhlciBzaG91bGRHcmFuZGZhdGhlciwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgcG9zdFRhc2soW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgc2hvdWxkR3JhbmRmYXRoZXIsIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICBpZiAo
bV9wZXJzaXN0ZW50U3RvcmFnZSkKKyAgICAgICAgICAgIG1fcGVyc2lzdGVudFN0b3JhZ2UtPmNs
ZWFyKCk7CisKKyAgICAgICAgQ29tcGxldGlvbkhhbmRsZXJDYWxsaW5nU2NvcGUgY29tcGxldGlv
bkhhbmRsZXJDYWxsZXIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaWYgKG1fbWVtb3J5U3Rv
cmUpIHsKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmNsZWFyKFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gcHJvdGVjdGVkVGhpcy5jb3B5UmVmKCksIHNob3VsZEdyYW5kZmF0aGVyLCBjb21wbGV0
aW9uSGFuZGxlckNhbGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXJDYWxsZXIpXSAoKSBt
dXRhYmxlIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkR3JhbmRmYXRoZXIgPT0gU2hvdWxk
R3JhbmRmYXRoZXI6OlllcykgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9tZW1vcnlTdG9y
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmdyYW5kZmF0aGVyRXhp
c3RpbmdXZWJzaXRlRGF0YShjb21wbGV0aW9uSGFuZGxlckNhbGxlci5yZWxlYXNlKCkpOworICAg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0xP
RyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50IEFmdGVyIGJlaW5nIGNsZWFyZWQs
IG1fbWVtb3J5U3RvcmUgaXMgbnVsbCB3aGVuIHRyeWluZyB0byBncmFuZGZhdGhlciBkYXRhLiIp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWYgKHNob3VsZEdyYW5kZmF0aGVyID09IFNob3VsZEdyYW5kZmF0aGVyOjpZ
ZXMpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0coUmVzb3VyY2VMb2FkU3RhdGlzdGljcywg
IldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5k
UGVyc2lzdGVudCBCZWZvcmUgYmVpbmcgY2xlYXJlZCwgbV9tZW1vcnlTdG9yZSBpcyBudWxsIHdo
ZW4gdHJ5aW5nIHRvIGdyYW5kZmF0aGVyIGRhdGEuIik7CisgICAgICAgIH0KKyAgICB9KTsKK30K
Kwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1l
bW9yeUFuZFBlcnNpc3RlbnQoV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgU2hvdWxkR3JhbmRmYXRo
ZXIgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFj
aykKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgLy8gRm9yIG5vdywg
YmUgY29uc2VydmF0aXZlIGFuZCBjbGVhciBldmVyeXRoaW5nIHJlZ2FyZGxlc3Mgb2YgbW9kaWZp
ZWRTaW5jZS4KKyAgICBVTlVTRURfUEFSQU0obW9kaWZpZWRTaW5jZSk7CisgICAgc2NoZWR1bGVD
bGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChzaG91bGRHcmFuZGZhdGhlciwgV1RGTW92ZShjYWxs
YmFjaykpOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VGlt
ZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihTZWNvbmRzIHNlY29uZHMpCit7CisgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKKyAgICBwb3N0VGFzayhbdGhpcywgc2Vjb25kc10geworICAgICAg
ICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFRpbWVU
b0xpdmVVc2VySW50ZXJhY3Rpb24oc2Vjb25kcyk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jk
c1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CisgICAgcG9zdFRhc2soW3RoaXMsIHNlY29uZHNdIHsKKyAgICAgICAgaWYgKG1fbWVtb3J5
U3RvcmUpCisgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwoc2Vjb25kcyk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNv
bmRzKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgcG9zdFRhc2soW3Ro
aXMsIHNlY29uZHNdIHsKKyAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgICAgICBt
X21lbW9yeVN0b3JlLT5zZXRHcmFuZGZhdGhlcmluZ1RpbWUoc2Vjb25kcyk7CisgICAgfSk7Cit9
CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRDYWNoZU1heEFnZUNh
cChTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVChz
ZWNvbmRzID49IDBfcyk7CisgICAgCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKKyAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7CisgICAgICAgIG1fd2Vic2l0ZURhdGFT
dG9yZS0+c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoc2Vjb25kcywgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlm
CisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmNhbGxVcGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3JI
YW5kbGVyKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9CbG9jaywgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CisKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorICAg
IGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKKyAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT51
cGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3IoZG9tYWluc1RvQmxvY2ssIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRp
ZgorICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpjYWxsUmVtb3ZlRG9tYWluc0hhbmRsZXIoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGRvbWFpbnMpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworI2lmIEVO
QUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCisgICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9y
ZSkKKyAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5yZW1vdmVQcmV2YWxlbnREb21haW5zKGRv
bWFpbnMpOworI2VuZGlmCit9CisgICAgCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50KQor
eworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgcG9zdFRhc2soW3RoaXMsIG1h
eGltdW1FbnRyeUNvdW50XSB7CisgICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICAg
ICAgbV9tZW1vcnlTdG9yZS0+c2V0TWF4U3RhdGlzdGljc0VudHJpZXMobWF4aW11bUVudHJ5Q291
bnQpOworICAgIH0pOworfQorICAgIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCkKK3sKKyAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgcG9zdFRhc2soW3RoaXMsIHBydW5l
VGFyZ2V0Q291bnRdIHsKKyAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgICAgICBt
X21lbW9yeVN0b3JlLT5zZXRQcnVuZUVudHJpZXNEb3duVG8ocHJ1bmVUYXJnZXRDb3VudCk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNldFBh
cmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBw
b3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgICAg
ICBtX21lbW9yeVN0b3JlLT5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoKTsKKworICAg
ICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICB9KTsK
K30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1Rlc3RpbmdFdmVu
dChjb25zdCBTdHJpbmcmIGV2ZW50KQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBpZiAobV9zdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKQorICAgICAgICBtX3N0YXRp
c3RpY3NUZXN0aW5nQ2FsbGJhY2soZXZlbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41ODE3MDRhNGVmMjk5ZGMwODNkMjc5ZjUzNGM3NzI4MWNmYTc2YjRlCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5oCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJXZWJz
aXRlRGF0YVR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KKyNpbmNs
dWRlIDx3dGYvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KKyNp
bmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIFdvcmtRdWV1ZTsKK30KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0Oworc3RydWN0IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU7CitjbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0
b3JhZ2U7CitjbGFzcyBXZWJGcmFtZVByb3h5OworY2xhc3MgV2ViUHJvY2Vzc1Byb3h5OworY2xh
c3MgV2Vic2l0ZURhdGFTdG9yZTsKKworZW51bSBjbGFzcyBTdG9yYWdlQWNjZXNzU3RhdHVzIHsK
KyAgICBDYW5ub3RSZXF1ZXN0QWNjZXNzLAorICAgIFJlcXVpcmVzVXNlclByb21wdCwKKyAgICBI
YXNBY2Nlc3MKK307CisKK2NsYXNzIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSBmaW5h
bCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUsIFdURjo6RGVzdHJ1Y3Rpb25UaHJlYWQ6Ok1haW4+LCBwdWJsaWMgSVBDOjpNZXNzYWdl
UmVjZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8V2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlPiBjcmVhdGUoV2Vic2l0ZURhdGFTdG9yZSYgd2Vic2l0ZURhdGFTdG9yZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZSh3ZWJzaXRlRGF0YVN0b3JlKSk7CisgICAgfQorCisgICAgfldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZSgpOworCisgICAgc3RhdGljIGNvbnN0IE9wdGlvblNldDxXZWJzaXRl
RGF0YVR5cGU+JiBtb25pdG9yZWREYXRhVHlwZXMoKTsKKworICAgIFdvcmtRdWV1ZSYgc3RhdGlz
dGljc1F1ZXVlKCkgeyByZXR1cm4gbV9zdGF0aXN0aWNzUXVldWUuZ2V0KCk7IH0KKworICAgIHZv
aWQgc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sKTsKKyAgICB2
b2lkIHNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJv
b2wpOworICAgIHZvaWQgc2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KGJvb2wpOworCisgICAgdm9p
ZCBoYXNTdG9yYWdlQWNjZXNzKFN0cmluZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJh
bWVIb3N0LCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spOworICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nl
c3MoU3RyaW5nJiYgc3ViRnJhbWVIb3N0LCBTdHJpbmcmJiB0b3BGcmFtZUhvc3QsIHVpbnQ2NF90
IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCBwcm9tcHRFbmFibGVkLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmKTsKKyAgICB2b2lkIGdyYW50U3Rv
cmFnZUFjY2VzcyhTdHJpbmcmJiBzdWJGcmFtZUhvc3QsIFN0cmluZyYmIHRvcEZyYW1lSG9zdCwg
dWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBib29sIHVzZXJXYXNQcm9tcHRlZE5v
dywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CisgICAgdm9pZCByZXF1ZXN0U3Rv
cmFnZUFjY2Vzc0NhbGxiYWNrKGJvb2wgd2FzR3JhbnRlZCwgdWludDY0X3QgY29udGV4dElkKTsK
KworICAgIHZvaWQgYXBwbGljYXRpb25XaWxsVGVybWluYXRlKCk7CisKKyAgICB2b2lkIGxvZ0Zy
YW1lTmF2aWdhdGlvbihjb25zdCBXZWJGcmFtZVByb3h5JiwgY29uc3QgVVJMJiBwYWdlVVJMLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBVUkwmIHJlZGlyZWN0VVJMKTsK
KyAgICB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpOworICAgIHZvaWQgY2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIGhhc0hhZFVzZXJJbnRlcmFj
dGlvbihjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKKyAgICB2
b2lkIHNldExhc3RTZWVuKGNvbnN0IFVSTCYsIFNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7CisgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgc2V0VmVyeVByZXZhbGVudFJlc291
cmNlKGNvbnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBk
dW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0
cmluZyYpPiYmKTsKKyAgICB2b2lkIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CisgICAgdm9pZCBpc1ZlcnlQcmV2YWxlbnRS
ZXNvdXJjZShjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKKyAg
ICB2b2lkIGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBVUkwmIHN1YnJlc291
cmNlLCBjb25zdCBVUkwmIHRvcEZyYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYm
KTsKKyAgICB2b2lkIGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBVUkwmIHN1YkZy
YW1lLCBjb25zdCBVUkwmIHRvcEZyYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYm
KTsKKyAgICB2b2lkIGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBVUkwmIGhvc3RS
ZWRpcmVjdGVkRnJvbSwgY29uc3QgVVJMJiBob3N0UmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmKTsKKyAgICB2b2lkIGNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29u
c3QgVVJMJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNldEdyYW5k
ZmF0aGVyZWQoY29uc3QgVVJMJiwgYm9vbCk7CisgICAgdm9pZCBpc0dyYW5kZmF0aGVyZWQoY29u
c3QgVVJMJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CisgICAgdm9pZCBzZXRT
dWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgVVJMJiBzdWJmcmFtZSwgY29uc3QgVVJM
JiB0b3BGcmFtZSk7CisgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4o
Y29uc3QgVVJMJiBzdWJyZXNvdXJjZSwgY29uc3QgVVJMJiB0b3BGcmFtZSk7CisgICAgdm9pZCBz
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJjZSwgY29u
c3QgVVJMJiBob3N0TmFtZVJlZGlyZWN0ZWRUbyk7CisgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHN1YnJlc291cmNlLCBjb25zdCBVUkwmIGhvc3RO
YW1lUmVkaXJlY3RlZEZyb20pOworICAgIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRv
KGNvbnN0IFVSTCYgdG9wRnJhbWVIb3N0TmFtZSwgY29uc3QgVVJMJiBob3N0TmFtZVJlZGlyZWN0
ZWRUbyk7CisgICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwm
IHRvcEZyYW1lSG9zdE5hbWUsIGNvbnN0IFVSTCYgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSk7Cisg
ICAgdm9pZCBzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7CisgICAgdm9pZCBzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlRm9yRG9tYWlu
cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvQmxvY2ssIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CisgICAgdm9pZCBzY2hlZHVsZUNsZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFp
bnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7CisgICAgdm9pZCBzY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3Np
bmcoKTsKKyAgICB2b2lkIHN1Ym1pdFRlbGVtZXRyeSgpOworCisgICAgZW51bSBjbGFzcyBTaG91
bGRHcmFuZGZhdGhlciB7CisgICAgICAgIE5vLAorICAgICAgICBZZXMsCisgICAgfTsKKyAgICB2
b2lkIHNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQoU2hvdWxkR3JhbmRmYXRoZXIs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBzY2hlZHVsZUNsZWFySW5N
ZW1vcnlBbmRQZXJzaXN0ZW50KFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIFNob3VsZEdyYW5kZmF0
aGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworCisgICAgdm9pZCBzZXRUaW1lVG9M
aXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMpOworICAgIHZvaWQgc2V0TWluaW11bVRpbWVCZXR3
ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNlY29uZHMpOworICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJp
bmdUaW1lKFNlY29uZHMpOworICAgIHZvaWQgc2V0Q2FjaGVNYXhBZ2VDYXAoU2Vjb25kcywgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNldE1heFN0YXRpc3RpY3NFbnRy
aWVzKHNpemVfdCk7CisgICAgdm9pZCBzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90KTsKKwor
ICAgIHZvaWQgcmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CisKKyAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01v
ZGUoYm9vbCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNldFByZXZh
bGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7CisgICAgCisgICAgdm9pZCBzZXRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKFdU
Rjo6RnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjYWxsYmFjaykgeyBtX3N0YXRpc3Rp
Y3NUZXN0aW5nQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsgfQorICAgIHZvaWQgbG9nVGVz
dGluZ0V2ZW50KGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgY2FsbEdyYW50U3RvcmFnZUFjY2Vz
c0hhbmRsZXIoY29uc3QgU3RyaW5nJiBzdWJGcmFtZVByaW1hcnlEb21haW4sIGNvbnN0IFN0cmlu
ZyYgdG9wRnJhbWVQcmltYXJ5RG9tYWluLCBPcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgdWlu
dDY0X3QgcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKKyAgICB2b2lk
IHJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAg
ICB2b2lkIGNhbGxVcGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3JIYW5kbGVy
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9CbG9jaywgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKKyAgICB2b2lkIGNhbGxSZW1vdmVEb21haW5zSGFuZGxlcihjb25zdCBWZWN0
b3I8U3RyaW5nPiYgZG9tYWlucyk7CisgICAgdm9pZCBjYWxsSGFzU3RvcmFnZUFjY2Vzc0ZvckZy
YW1lSGFuZGxlcihjb25zdCBTdHJpbmcmIHJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZp
cnN0UGFydHlEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CisKKyAgICB2b2lkIGRpZENyZWF0ZU5ldHdvcmtQ
cm9jZXNzKCk7CisKKyAgICBXZWJzaXRlRGF0YVN0b3JlKiB3ZWJzaXRlRGF0YVN0b3JlKCkgeyBy
ZXR1cm4gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgZXhwbGlj
aXQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKFdlYnNpdGVEYXRhU3RvcmUmKTsKKwor
ICAgIHZvaWQgcG9zdFRhc2soV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYpOworICAgIHN0YXRpYyB2
b2lkIHBvc3RUYXNrUmVwbHkoV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYpOworCisgICAgLy8gSVBD
OjpNZXNzYWdlUmVjZWl2ZXIuCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKworICAgIC8vIElQQyBtZXNzYWdlIGhh
bmRsZXJzLgorICAgIHZvaWQgcmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQoVmVjdG9yPFdl
YkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiYgb3JpZ2lucyk7CisgICAgdm9pZCByZXF1
ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKFN0cmluZyYmIHByaW1hcnlEb21haW5Jbk5lZWRP
ZlN0b3JhZ2VBY2Nlc3MsIHVpbnQ2NF90IG9wZW5lclBhZ2VJRCwgU3RyaW5nJiYgb3BlbmVyUHJp
bWFyeURvbWFpbik7CisKKyAgICB2b2lkIHBlcmZvcm1EYWlseVRhc2tzKCk7CisKKyAgICBTdG9y
YWdlQWNjZXNzU3RhdHVzIHN0b3JhZ2VBY2Nlc3NTdGF0dXMoY29uc3QgU3RyaW5nJiBzdWJGcmFt
ZVByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgdG9wRnJhbWVQcmltYXJ5RG9tYWluKTsKKwor
ICAgIHZvaWQgZmx1c2hBbmREZXN0cm95UGVyc2lzdGVudFN0b3JlKCk7CisKKyAgICBXZWFrUHRy
PFdlYnNpdGVEYXRhU3RvcmU+IG1fd2Vic2l0ZURhdGFTdG9yZTsKKyAgICBSZWY8V29ya1F1ZXVl
PiBtX3N0YXRpc3RpY3NRdWV1ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlPiBtX21lbW9yeVN0b3JlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U+IG1fcGVyc2lzdGVudFN0b3Jh
Z2U7CisKKyAgICBSdW5Mb29wOjpUaW1lcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+
IG1fZGFpbHlUYXNrc1RpbWVyOworCisgICAgYm9vbCBtX2hhc1NjaGVkdWxlZFByb2Nlc3NTdGF0
cyB7IGZhbHNlIH07CisKKyAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+IG1f
c3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjazsKKworICAgIGJvb2wgbV9maXJzdE5ldHdvcmtQcm9j
ZXNzQ3JlYXRlZCB7IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mOTY5MmUxMjkxMmE2YzFjMDk4ZDNiOWY2MDgwNGFlMmZmMzdkZjlhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCkBAIC0wLDAgKzEsMjk2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NUZWxlbWV0cnkuaCIKKworI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCisjaW5jbHVkZSAiV2Vi
UHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaWFnbm9zdGljTG9nZ2luZ0tleXMu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaD4KKyNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjb25z
dCB1bnNpZ25lZCBtaW5pbXVtUHJldmFsZW50UmVzb3VyY2VzRm9yVGVsZW1ldHJ5ID0gMzsKK2Nv
bnN0IHVuc2lnbmVkIHNpZ25pZmljYW50RmlndXJlc0ZvckxvZ2dlZFZhbHVlcyA9IDM7CitzdGF0
aWMgYm9vbCBub3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCA9IGZhbHNlOworCitz
dHJ1Y3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkgeworICAgIHVuc2lnbmVkIG51bWJlck9m
VGltZXNEYXRhUmVjb3Jkc1JlbW92ZWQ7CisgICAgYm9vbCBoYXNIYWRVc2VySW50ZXJhY3Rpb247
CisgICAgdW5zaWduZWQgZGF5c1NpbmNlVXNlckludGVyYWN0aW9uOworICAgIHVuc2lnbmVkIHN1
YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnM7CisgICAgdW5zaWduZWQgc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lT3JpZ2luczsKKyAgICB1bnNpZ25lZCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvOworICAgIHVuc2lnbmVkIHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRl
cmFjdGlvbjsKKyAgICB1bnNpZ25lZCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9y
YWdlQWNjZXNzQVBJOworfTsKKworc3RhdGljIFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVt
ZXRyeT4gc29ydGVkUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkoY29uc3QgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlJiBzdG9yZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKyAgICBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+IHNvcnRlZDsK
KyAgICBzdG9yZS5wcm9jZXNzU3RhdGlzdGljcyhbJnNvcnRlZF0gKGF1dG8mIHN0YXRpc3RpYykg
eworICAgICAgICBpZiAoIXN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHVuc2lnbmVkIGRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbiA9
IHN0YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSA8PSBXYWxsVGltZSgpID8g
MCA6IHN0ZDo6Zmxvb3IoKFdhbGxUaW1lOjpub3coKSAtIHN0YXRpc3RpYy5tb3N0UmVjZW50VXNl
ckludGVyYWN0aW9uVGltZSkgLyAyNF9oKTsKKyAgICAgICAgc29ydGVkLmFwcGVuZChQcmV2YWxl
bnRSZXNvdXJjZVRlbGVtZXRyeSB7CisgICAgICAgICAgICBzdGF0aXN0aWMuZGF0YVJlY29yZHNS
ZW1vdmVkLAorICAgICAgICAgICAgc3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbiwKKyAgICAg
ICAgICAgIGRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbiwKKyAgICAgICAgICAgIHN0YXRpc3RpYy5z
dWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLnNpemUoKSwKKyAgICAgICAgICAgIHN0YXRpc3Rp
Yy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLnNpemUoKSwKKyAgICAgICAgICAgIHN0
YXRpc3RpYy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnNpemUoKSwKKyAgICAgICAgICAg
IHN0YXRpc3RpYy50aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb24s
CisgICAgICAgICAgICBzdGF0aXN0aWMudGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3Rv
cmFnZUFjY2Vzc0FQSQorICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIGlmIChzb3J0ZWQuc2l6
ZSgpIDwgbWluaW11bVByZXZhbGVudFJlc291cmNlc0ZvclRlbGVtZXRyeSkKKyAgICAgICAgcmV0
dXJuIHsgfTsKKworICAgIHN0ZDo6c29ydChzb3J0ZWQuYmVnaW4oKSwgc29ydGVkLmVuZCgpLCBb
XShjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgYSwgY29uc3QgUHJldmFsZW50UmVz
b3VyY2VUZWxlbWV0cnkmIGIpIHsKKyAgICAgICAgcmV0dXJuIGEuc3ViZnJhbWVVbmRlclRvcEZy
YW1lT3JpZ2lucyArIGEuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucyArIGEuc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUbyA+CisgICAgICAgIGIuc3ViZnJhbWVVbmRlclRvcEZyYW1l
T3JpZ2lucyArIGIuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucyArIGIuc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUbzsKKyAgICB9KTsKKworICAgIHJldHVybiBzb3J0ZWQ7Cit9CisK
K3N0YXRpYyB1bnNpZ25lZCBudW1iZXJPZlJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24oY29u
c3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiYgcmVzb3VyY2VzLCBzaXplX3Qg
YmVnaW4sIHNpemVfdCBlbmQpCit7CisgICAgaWYgKHJlc291cmNlcy5pc0VtcHR5KCkgfHwgcmVz
b3VyY2VzLnNpemUoKSA8IGJlZ2luICsgMSB8fCByZXNvdXJjZXMuc2l6ZSgpIDwgZW5kICsgMSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKKyAgICBm
b3IgKHNpemVfdCBpID0gYmVnaW47IGkgPCBlbmQ7ICsraSkgeworICAgICAgICBpZiAocmVzb3Vy
Y2VzW2ldLmhhc0hhZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAgICAgICsrcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorICAgIAorc3RhdGljIHVuc2lnbmVkIG1l
ZGlhbihjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiB2KQoreworICAgIGlmICh2LmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHYuc2l6ZSgpID09IDEpCisgICAgICAgIHJldHVy
biB2WzBdOworICAgIAorICAgIGF1dG8gc2l6ZSA9IHYuc2l6ZSgpOworICAgIGF1dG8gbWlkZGxl
ID0gc2l6ZSAvIDI7CisgICAgaWYgKHNpemUgJSAyKQorICAgICAgICByZXR1cm4gdlttaWRkbGVd
OworICAgIHJldHVybiAodlttaWRkbGUgLSAxXSArIHZbbWlkZGxlXSkgLyAyOworfQorICAgIAor
c3RhdGljIHVuc2lnbmVkIG1lZGlhbihjb25zdCBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxl
bWV0cnk+JiB2LCB1bnNpZ25lZCBiZWdpbiwgdW5zaWduZWQgZW5kLCBjb25zdCBXVEY6OkZ1bmN0
aW9uPHVuc2lnbmVkKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkp
PiYgc3RhdGlzdGljR2V0dGVyKQoreworICAgIGlmICh2LmlzRW1wdHkoKSB8fCB2LnNpemUoKSA8
IGJlZ2luICsgMSB8fCB2LnNpemUoKSA8IGVuZCArIDEpCisgICAgICAgIHJldHVybiAwOworICAg
IAorICAgIFZlY3Rvcjx1bnNpZ25lZD4gcGFydDsKKyAgICBwYXJ0LnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoZW5kIC0gYmVnaW4gKyAxKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBiZWdpbjsgaSA8
PSBlbmQ7ICsraSkKKyAgICAgICAgcGFydC51bmNoZWNrZWRBcHBlbmQoc3RhdGlzdGljR2V0dGVy
KHZbaV0pKTsKKyAgICAKKyAgICByZXR1cm4gbWVkaWFuKHBhcnQpOworfQorICAgIAorc3RhdGlj
IFdlYlBhZ2VQcm94eSogbm9uRXBoZW1lcmFsV2ViUGFnZVByb3h5KCkKK3sKKyAgICBhdXRvIHBy
b2Nlc3NQb29scyA9IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKTsKKyAgICBpZiAo
cHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisg
ICAgYXV0byBwcm9jZXNzUG9vbCA9IHByb2Nlc3NQb29sc1swXTsKKyAgICBpZiAoIXByb2Nlc3NQ
b29sKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBmb3IgKGF1dG8mIHdlYlBy
b2Nlc3MgOiBwcm9jZXNzUG9vbC0+cHJvY2Vzc2VzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBw
YWdlIDogd2ViUHJvY2Vzcy0+cGFnZXMoKSkgeworICAgICAgICAgICAgaWYgKHBhZ2UtPnNlc3Np
b25JRCgpLmlzRXBoZW1lcmFsKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICByZXR1cm4gcGFnZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKyAgICAKK3N0YXRpYyB2b2lkIHN1Ym1pdFRvcExpc3QodW5zaWduZWQgbnVtYmVyT2ZSZXNv
dXJjZXNGcm9tVGhlVG9wLCBjb25zdCBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+
JiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJj
ZVRlbGVtZXRyeT4mIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rp
b24sIFdlYlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5KQoreworICAgIFdURjo6RnVuY3Rpb248dW5z
aWduZWQoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+IHN1YmZy
YW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNHZXR0ZXIgPSBbXSAoYXV0byYgdCkgeworICAgICAgICBy
ZXR1cm4gdC5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zOworICAgIH07CisgICAgV1RGOjpG
dW5jdGlvbjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdGVsZW1l
dHJ5KT4gc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0dldHRlciA9IFtdIChhdXRvJiB0
KSB7CisgICAgICAgIHJldHVybiB0LnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnM7Cisg
ICAgfTsKKyAgICBXVEY6OkZ1bmN0aW9uPHVuc2lnbmVkKGNvbnN0IFByZXZhbGVudFJlc291cmNl
VGVsZW1ldHJ5JiB0ZWxlbWV0cnkpPiBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvR2V0dGVy
ID0gW10gKGF1dG8mIHQpIHsKKyAgICAgICAgcmV0dXJuIHQuc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUbzsKKyAgICB9OworICAgIFdURjo6RnVuY3Rpb248dW5zaWduZWQoY29uc3QgUHJldmFs
ZW50UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+IG51bWJlck9mVGltZXNEYXRhUmVjb3Jk
c1JlbW92ZWRHZXR0ZXIgPSBbXSAoYXV0byYgdCkgeworICAgICAgICByZXR1cm4gdC5udW1iZXJP
ZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkOworICAgIH07CisgICAgV1RGOjpGdW5jdGlvbjx1bnNp
Z25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdGVsZW1ldHJ5KT4gbnVtYmVy
T2ZUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb25HZXR0ZXIgPSBb
XSAoYXV0byYgdCkgeworICAgICAgICByZXR1cm4gdC50aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5
RHVlVG9Vc2VySW50ZXJhY3Rpb247CisgICAgfTsKKyAgICBXVEY6OkZ1bmN0aW9uPHVuc2lnbmVk
KGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkpPiBudW1iZXJPZlRp
bWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUElHZXR0ZXIgPSBbXSAo
YXV0byYgdCkgeworICAgICAgICByZXR1cm4gdC50aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVl
VG9TdG9yYWdlQWNjZXNzQVBJOworICAgIH07CisKKyAgICB1bnNpZ25lZCB0b3BQcmV2YWxlbnRS
ZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uID0gbnVtYmVyT2ZSZXNvdXJjZXNXaXRoVXNlcklu
dGVyYWN0aW9uKHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgMCwgbnVtYmVyT2ZSZXNvdXJjZXNG
cm9tVGhlVG9wIC0gMSk7CisgICAgdW5zaWduZWQgdG9wU3ViZnJhbWVVbmRlclRvcEZyYW1lT3Jp
Z2lucyA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0
aW9uLCAwLCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3AgLSAxLCBzdWJmcmFtZVVuZGVyVG9w
RnJhbWVPcmlnaW5zR2V0dGVyKTsKKyAgICB1bnNpZ25lZCB0b3BTdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVPcmlnaW5zID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2Vy
SW50ZXJhY3Rpb24sIDAsIG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRvcCAtIDEsIHN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNHZXR0ZXIpOworICAgIHVuc2lnbmVkIHRvcFN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG8gPSBtZWRpYW4oc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0
aG91dFVzZXJJbnRlcmFjdGlvbiwgMCwgbnVtYmVyT2ZSZXNvdXJjZXNGcm9tVGhlVG9wIC0gMSwg
c3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0dldHRlcik7CisgICAgdW5zaWduZWQgdG9wTnVt
YmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZCA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNv
dXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAwLCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVU
b3AgLSAxLCBudW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkR2V0dGVyKTsKKyAgICB1bnNp
Z25lZCB0b3BOdW1iZXJPZlRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFj
dGlvbiA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0
aW9uLCAwLCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3AgLSAxLCBudW1iZXJPZlRpbWVzQWNj
ZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbkdldHRlcik7CisgICAgdW5zaWdu
ZWQgdG9wTnVtYmVyT2ZUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNz
QVBJID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rp
b24sIDAsIG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRvcCAtIDEsIG51bWJlck9mVGltZXNBY2Nl
c3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSUdldHRlcik7CisKKyAgICBTdHJp
bmdCdWlsZGVyIHByZWFtYmxlQnVpbGRlcjsKKyAgICBwcmVhbWJsZUJ1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgidG9wIik7CisgICAgcHJlYW1ibGVCdWlsZGVyLmFwcGVuZE51bWJlcihudW1iZXJPZlJl
c291cmNlc0Zyb21UaGVUb3ApOworICAgIFN0cmluZyBkZXNjcmlwdGlvblByZWFtYmxlID0gcHJl
YW1ibGVCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgCisgICAgd2ViUGFnZVByb3h5LmxvZ0RpYWdu
b3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBkZXNjcmlwdGlvblByZWFtYmxlICsgIlByZXZhbGVu
dFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24iLAorICAgICAgICB0b3BQcmV2YWxlbnRSZXNv
dXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCBzaWduaWZpY2FudEZpZ3VyZXNGb3JMb2dnZWRWYWx1
ZXMsIFNob3VsZFNhbXBsZTo6Tm8pOworICAgIHdlYlBhZ2VQcm94eS5sb2dEaWFnbm9zdGljTWVz
c2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUZWxlbWV0cnlLZXkoKSwgZGVzY3JpcHRpb25QcmVhbWJsZSArICJTdWJmcmFtZVVuZGVyVG9w
RnJhbWVPcmlnaW5zIiwKKyAgICAgICAgdG9wU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucywg
c2lnbmlmaWNhbnRGaWd1cmVzRm9yTG9nZ2VkVmFsdWVzLCBTaG91bGRTYW1wbGU6Ok5vKTsKKyAg
ICB3ZWJQYWdlUHJveHkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xv
Z2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksIGRlc2NyaXB0
aW9uUHJlYW1ibGUgKyAiU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucyIsCisgICAgICAg
IHRvcFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMsIHNpZ25pZmljYW50RmlndXJlc0Zv
ckxvZ2dlZFZhbHVlcywgU2hvdWxkU2FtcGxlOjpObyk7CisgICAgd2ViUGFnZVByb3h5LmxvZ0Rp
YWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBkZXNjcmlwdGlvblByZWFtYmxlICsgIlN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG8iLAorICAgICAgICB0b3BTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvLCBzaWduaWZpY2FudEZpZ3VyZXNGb3JMb2dnZWRWYWx1ZXMsIFNob3VsZFNhbXBs
ZTo6Tm8pOworICAgIHdlYlBhZ2VQcm94eS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShE
aWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXko
KSwgZGVzY3JpcHRpb25QcmVhbWJsZSArICJOdW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVk
IiwKKyAgICAgICAgdG9wTnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZCwgc2lnbmlmaWNh
bnRGaWd1cmVzRm9yTG9nZ2VkVmFsdWVzLCBTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICB3ZWJQYWdl
UHJveHkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlz
OjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksIGRlc2NyaXB0aW9uUHJlYW1i
bGUgKyAiTnVtYmVyT2ZUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rp
b24iLAorICAgICAgICB0b3BOdW1iZXJPZlRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1Vz
ZXJJbnRlcmFjdGlvbiwgc2lnbmlmaWNhbnRGaWd1cmVzRm9yTG9nZ2VkVmFsdWVzLCBTaG91bGRT
YW1wbGU6Ok5vKTsKKyAgICB3ZWJQYWdlUHJveHkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFs
dWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5
S2V5KCksIGRlc2NyaXB0aW9uUHJlYW1ibGUgKyAiTnVtYmVyT2ZUaW1lc0FjY2Vzc2VkQXNGaXJz
dFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJIiwKKyAgICAgICAgdG9wTnVtYmVyT2ZUaW1lc0Fj
Y2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJLCBzaWduaWZpY2FudEZpZ3Vy
ZXNGb3JMb2dnZWRWYWx1ZXMsIFNob3VsZFNhbXBsZTo6Tm8pOworfQorICAgIAorc3RhdGljIHZv
aWQgc3VibWl0VG9wTGlzdHMoY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5
PiYgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCBjb25zdCBWZWN0b3I8UHJldmFsZW50UmVzb3Vy
Y2VUZWxlbWV0cnk+JiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0
aW9uLCBXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKK3sKKyAgICBzdWJtaXRUb3BMaXN0KDEs
IHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91
dFVzZXJJbnRlcmFjdGlvbiwgd2ViUGFnZVByb3h5KTsKKyAgICAKKyAgICBpZiAoc29ydGVkUHJl
dmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPCAzKQorICAgICAg
ICByZXR1cm47CisgICAgc3VibWl0VG9wTGlzdCgzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMs
IHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIHdlYlBhZ2VQ
cm94eSk7CisgICAgCisgICAgaWYgKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2Vy
SW50ZXJhY3Rpb24uc2l6ZSgpIDwgMTApCisgICAgICAgIHJldHVybjsKKyAgICBzdWJtaXRUb3BM
aXN0KDEwLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIHNvcnRlZFByZXZhbGVudFJlc291cmNl
c1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIHdlYlBhZ2VQcm94eSk7CisgICAgCisgICAgaWYgKHNv
cnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24uc2l6ZSgpIDwgNTAp
CisgICAgICAgIHJldHVybjsKKyAgICBzdWJtaXRUb3BMaXN0KDUwLCBzb3J0ZWRQcmV2YWxlbnRS
ZXNvdXJjZXMsIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24s
IHdlYlBhZ2VQcm94eSk7CisgICAgCisgICAgaWYgKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dp
dGhvdXRVc2VySW50ZXJhY3Rpb24uc2l6ZSgpIDwgMTAwKQorICAgICAgICByZXR1cm47CisgICAg
c3VibWl0VG9wTGlzdCgxMDAsIHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFs
ZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgd2ViUGFnZVByb3h5KTsKK30KKyAg
ICAKKy8vIFRoaXMgZnVuY3Rpb24gaXMgZm9yIHRlc3RpbmcgcHVycG9zZXMuCit2b2lkIHN0YXRp
YyBub3RpZnlQYWdlcyh1bnNpZ25lZCB0b3RhbFByZXZhbGVudFJlc291cmNlcywgdW5zaWduZWQg
dG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCB1bnNpZ25lZCB0b3Az
U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucykKK3sKKyAgICBSdW5Mb29wOjptYWluKCkuZGlz
cGF0Y2goW3RvdGFsUHJldmFsZW50UmVzb3VyY2VzLCB0b3RhbFByZXZhbGVudFJlc291cmNlc1dp
dGhVc2VySW50ZXJhY3Rpb24sIHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zXSB7Cisg
ICAgICAgIEFQSTo6RGljdGlvbmFyeTo6TWFwVHlwZSBtZXNzYWdlQm9keTsKKyAgICAgICAgbWVz
c2FnZUJvZHkuc2V0KCJUb3RhbFByZXZhbGVudFJlc291cmNlcyJfcywgQVBJOjpVSW50NjQ6OmNy
ZWF0ZSh0b3RhbFByZXZhbGVudFJlc291cmNlcykpOworICAgICAgICBtZXNzYWdlQm9keS5zZXQo
IlRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiJfcywgQVBJOjpVSW50
NjQ6OmNyZWF0ZSh0b3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24pKTsK
KyAgICAgICAgbWVzc2FnZUJvZHkuc2V0KCJUb3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lu
cyJfcywgQVBJOjpVSW50NjQ6OmNyZWF0ZSh0b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lu
cykpOworICAgICAgICBXZWJQcm9jZXNzUHJveHk6Om5vdGlmeVBhZ2VTdGF0aXN0aWNzVGVsZW1l
dHJ5RmluaXNoZWQoQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUobWVzc2FnZUJvZHkpLnB0cigpKTsK
KyAgICB9KTsKK30KKyAgICAKKy8vIFRoaXMgZnVuY3Rpb24gaXMgZm9yIHRlc3RpbmcgcHVycG9z
ZXMuCit2b2lkIHN0YXRpYyBub3RpZnlQYWdlcyhjb25zdCBWZWN0b3I8UHJldmFsZW50UmVzb3Vy
Y2VUZWxlbWV0cnk+JiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIGNvbnN0IFZlY3RvcjxQcmV2
YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRV
c2VySW50ZXJhY3Rpb24sIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNX
aXRoVXNlckludGVyYWN0aW9uKQoreworICAgIFdURjo6RnVuY3Rpb248dW5zaWduZWQoY29uc3Qg
UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+IHN1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbnNHZXR0ZXIgPSBbXSAoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkm
IHQpIHsKKyAgICAgICAgcmV0dXJuIHQuc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luczsKKyAg
ICB9OworICAgIAorICAgIG5vdGlmeVBhZ2VzKHNvcnRlZFByZXZhbGVudFJlc291cmNlcy5zaXpl
KCksIHRvdGFsTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCBt
ZWRpYW4oc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgMCwg
Miwgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0dldHRlcikpOworfQorICAgIAordm9pZCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpjYWxjdWxhdGVBbmRTdWJtaXQoY29u
c3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlJiByZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgCisgICAg
YXV0byBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMgPSBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZVRl
bGVtZXRyeShyZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUpOworICAgIGlmIChub3RpZnlQYWdl
c1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCAmJiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMuaXNF
bXB0eSgpKSB7CisgICAgICAgIG5vdGlmeVBhZ2VzKDAsIDAsIDApOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4gc29y
dGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbjsKKyAgICBzb3J0ZWRQ
cmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLnNpemUoKSk7CisgICAgVmVjdG9yPHVuc2ln
bmVkPiBwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rpb247CisgICAgCisg
ICAgZm9yIChhdXRvJiBwcmV2YWxlbnRSZXNvdXJjZSA6IHNvcnRlZFByZXZhbGVudFJlc291cmNl
cykgeworICAgICAgICBpZiAocHJldmFsZW50UmVzb3VyY2UuaGFzSGFkVXNlckludGVyYWN0aW9u
KQorICAgICAgICAgICAgcHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9u
LmFwcGVuZChwcmV2YWxlbnRSZXNvdXJjZS5kYXlzU2luY2VVc2VySW50ZXJhY3Rpb24pOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNl
ckludGVyYWN0aW9uLnVuY2hlY2tlZEFwcGVuZChwcmV2YWxlbnRSZXNvdXJjZSk7CisgICAgfQor
ICAgIAorICAgIC8vIERpc3BhdGNoIG9uIHRoZSBtYWluIHRocmVhZCB0byBtYWtlIHN1cmUgdGhl
IFdlYlBhZ2VQcm94eSB3ZSdyZSB1c2luZyBkb2Vzbid0IGdvIGF3YXkuCisgICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFtzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMgPSBXVEZNb3ZlKHNvcnRl
ZFByZXZhbGVudFJlc291cmNlcyksIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2Vy
SW50ZXJhY3Rpb24gPSBXVEZNb3ZlKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2Vy
SW50ZXJhY3Rpb24pLCBwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rpb24g
PSBXVEZNb3ZlKHByZXZhbGVudFJlc291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbildICgp
IHsKKyAgICAgICAgYXV0byB3ZWJQYWdlUHJveHkgPSBub25FcGhlbWVyYWxXZWJQYWdlUHJveHko
KTsKKyAgICAgICAgaWYgKCF3ZWJQYWdlUHJveHkpIHsKKyAgICAgICAgICAgIGlmIChub3RpZnlQ
YWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCkKKyAgICAgICAgICAgICAgICBub3RpZnlQYWdl
cygwLCAwLCAwKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKG5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKSB7CisgICAgICAg
ICAgICBub3RpZnlQYWdlcyhzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIHNvcnRlZFByZXZhbGVu
dFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIHByZXZhbGVudFJlc291cmNlc0RheXNT
aW5jZVVzZXJJbnRlcmFjdGlvbi5zaXplKCkpOworICAgICAgICAgICAgLy8gVGhlIG5vdGlmeSBw
YWdlcyBmdW5jdGlvbiBpcyBmb3IgdGVzdGluZyBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFuIGFj
dHVhbCBzdWJtaXNzaW9uLgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICB3ZWJQYWdlUHJveHktPmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERp
YWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgp
LCAidG90YWxOdW1iZXJPZlByZXZhbGVudFJlc291cmNlcyJfcywgc29ydGVkUHJldmFsZW50UmVz
b3VyY2VzLnNpemUoKSwgc2lnbmlmaWNhbnRGaWd1cmVzRm9yTG9nZ2VkVmFsdWVzLCBTaG91bGRT
YW1wbGU6Ok5vKTsKKyAgICAgICAgd2ViUGFnZVByb3h5LT5sb2dEaWFnbm9zdGljTWVzc2FnZVdp
dGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxl
bWV0cnlLZXkoKSwgInRvdGFsTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVy
YWN0aW9uIl9zLCBwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rpb24uc2l6
ZSgpLCBzaWduaWZpY2FudEZpZ3VyZXNGb3JMb2dnZWRWYWx1ZXMsIFNob3VsZFNhbXBsZTo6Tm8p
OworICAgICAgICAKKyAgICAgICAgaWYgKHByZXZhbGVudFJlc291cmNlc0RheXNTaW5jZVVzZXJJ
bnRlcmFjdGlvbi5zaXplKCkgPiAwKQorICAgICAgICAgICAgd2ViUGFnZVByb3h5LT5sb2dEaWFn
bm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgInRvcFByZXZhbGVudFJlc291cmNlV2l0aFVzZXJJ
bnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbiJfcywgcHJldmFsZW50UmVzb3VyY2Vz
RGF5c1NpbmNlVXNlckludGVyYWN0aW9uWzBdLCBzaWduaWZpY2FudEZpZ3VyZXNGb3JMb2dnZWRW
YWx1ZXMsIFNob3VsZFNhbXBsZTo6Tm8pOworICAgICAgICBpZiAocHJldmFsZW50UmVzb3VyY2Vz
RGF5c1NpbmNlVXNlckludGVyYWN0aW9uLnNpemUoKSA+IDEpCisgICAgICAgICAgICB3ZWJQYWdl
UHJveHktPmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5
czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCAibWVkaWFuUHJldmFsZW50
UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbkRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbiJfcywg
bWVkaWFuKHByZXZhbGVudFJlc291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbiksIHNpZ25p
ZmljYW50RmlndXJlc0ZvckxvZ2dlZFZhbHVlcywgU2hvdWxkU2FtcGxlOjpObyk7CisgICAgICAg
IAorICAgICAgICBzdWJtaXRUb3BMaXN0cyhzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIHNvcnRl
ZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sICp3ZWJQYWdlUHJveHkp
OworICAgIH0pOworfQorICAgIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1l
dHJ5OjpzZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIGFsd2F5cykK
K3sKKyAgICBub3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCA9IGFsd2F5czsKK30K
KyAgICAKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmggYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVt
ZXRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmY5NmU2MWExYWYwYWI3MzUzYjAzMWRiNzUzZjlkZGI2ZjUyYzYy
OWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNz
aWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oCkBAIC0wLDAgKzEsNDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOworCituYW1lc3BhY2UgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rl
bGVtZXRyeSB7CisgICAgCit2b2lkIGNhbGN1bGF0ZUFuZFN1Ym1pdChjb25zdCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUmKTsKK3ZvaWQgc2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1l
dHJ5V2FzQ2FwdHVyZWQoYm9vbCk7CisgICAgCit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93bmxvYWQuY3BwIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVuZGluZ0Rvd25sb2FkLmNwcAppbmRl
eCAzMDlhOTMxOWY2YzNjODY0ZWJkNTdhNmE5NzIwY2YzZjU2NDJhNWIwLi4zZWM5ODNlMWY2ODkw
MDk4Njg3MjlhYTE4NjRkODJjYTFlNTE5YTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93bmxvYWQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL1BlbmRpbmdEb3dubG9hZC5jcHAKQEAgLTI3
LDYgKzI3LDcgQEAKICNpbmNsdWRlICJQZW5kaW5nRG93bmxvYWQuaCIKIAogI2luY2x1ZGUgIkRh
dGFSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJEb3dubG9hZC5oIgogI2luY2x1ZGUgIkRvd25sb2Fk
UHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtMb2FkLmgiCiAjaW5jbHVkZSAiTmV0
d29ya1Byb2Nlc3MuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
RG93bmxvYWRzL1BlbmRpbmdEb3dubG9hZC5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Eb3dubG9hZHMvUGVuZGluZ0Rvd25sb2FkLmgKaW5kZXggMDZmNTMxMWY3OTgwZWMzOWQyZDg3
NGIxYzRlOTIyZTVkYTVlOTIzNS4uNGI5MmYxYjBlZmRhZDZmNjQ0Y2U5ZjVkZDZiMjI3NmRlNWU4
ZmY3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMv
UGVuZGluZ0Rvd25sb2FkLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3du
bG9hZHMvUGVuZGluZ0Rvd25sb2FkLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIk1l
c3NhZ2VTZW5kZXIuaCIKICNpbmNsdWRlICJOZXR3b3JrTG9hZENsaWVudC5oIgorI2luY2x1ZGUg
IlNhbmRib3hFeHRlbnNpb24uaCIKIAogbmFtZXNwYWNlIElQQyB7CiBjbGFzcyBDb25uZWN0aW9u
OwpAQCAtNDMsNyArNDQsNyBAQCBjbGFzcyBEb3dubG9hZElEOwogY2xhc3MgTmV0d29ya0xvYWQ7
CiBjbGFzcyBOZXR3b3JrTG9hZFBhcmFtZXRlcnM7CiBjbGFzcyBOZXR3b3JrU2Vzc2lvbjsKLSAg
ICAKKwogY2xhc3MgUGVuZGluZ0Rvd25sb2FkIDogcHVibGljIE5ldHdvcmtMb2FkQ2xpZW50LCBw
dWJsaWMgSVBDOjpNZXNzYWdlU2VuZGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1NYWMuY21ha2UgYi9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IGQ2N2U2NGNkOTc0MDM3Mjg4NTk4
Njk3YWZmZDNjNmU3MzIwNTY2YWQuLjM2ODcxZDMxMTFhZjRmY2FkYmQ1OTI1NjRkMjk3ZGE4ZGE3
OTRhYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIv
U291cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtMTksNiArMTksOSBAQCBpZiAoTk9U
IEFWRkFVRElPX0xJQlJBUlktTk9URk9VTkQpCiBlbmRpZiAoKQogCiBsaXN0KEFQUEVORCBXZWJL
aXRfU09VUkNFUworICAgIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmNwcAorICAgIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAKKwogICAgIE5ldHdvcmtQcm9jZXNzL0Nv
b2tpZXMvbWFjL1dlYkNvb2tpZU1hbmFnZXJNYWMubW0KIAogICAgIE5ldHdvcmtQcm9jZXNzL0N1
c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXIuY3BwCkBAIC0xNTgsOCAr
MTYxLDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKIAogICAgIFVJUHJvY2Vzcy9IaWdo
UGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlci5jcHAKICAgICBVSVByb2Nlc3MvUGVyQWN0
aXZpdHlTdGF0ZUNQVVVzYWdlU2FtcGxlci5jcHAKLSAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmNwcAotICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzVGVsZW1ldHJ5LmNwcAogCiAgICAgVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21h
dGlvblNlc3Npb24uY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4u
Y21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IDJhYTM1YWQ0ODM1
Nzk5NjQxYzA5NDRhN2FmOWM5MDc5NGU4ZDkwMWIuLjIwMDNiMGFkZjVhZGY0ZWYyNGIxMzZiNDRk
NGRiMTkyOWMwZjEyMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21h
a2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtOCw2ICs4LDkgQEAg
ZmlsZShNQUtFX0RJUkVDVE9SWSAke0RFUklWRURfU09VUkNFU19XRUJLSVRfRElSfSkKIGFkZF9k
ZWZpbml0aW9ucygtREJVSUxESU5HX1dFQktJVCkKIAogbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJD
RVMKKyAgICBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCisKICAgICBOZXR3b3JrUHJvY2Vzcy93aW4vTmV0d29y
a1Byb2Nlc3NNYWluV2luLmNwcAogCiAgICAgUGxhdGZvcm0vSVBDL3dpbi9BdHRhY2htZW50V2lu
LmNwcApAQCAtMzYsOCArMzksNiBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwogICAgIFVJ
UHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKICAgICBVSVByb2Nlc3MvTGVnYWN5U2Vz
c2lvblN0YXRlQ29kaW5nTm9uZS5jcHAKICAgICBVSVByb2Nlc3MvV2ViR3JhbW1hckRldGFpbC5j
cHAKLSAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAotICAg
IFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAogICAgIFVJ
UHJvY2Vzcy9XZWJWaWV3cG9ydEF0dHJpYnV0ZXMuY3BwCiAKICAgICBVSVByb2Nlc3MvQVBJL0Mv
V0tWaWV3cG9ydEF0dHJpYnV0ZXMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9QZXJzaXN0ZW5jeVV0aWxzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BlcnNpc3RlbmN5
VXRpbHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVkYmE5NjhiZDdlMGIzOGMzZDIyNjk0ZDZkNWQyZTZiMDY5
ZDJhODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QZXJzaXN0ZW5j
eVV0aWxzLmNwcApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUGVyc2lzdGVuY3lVdGlscy5oIgorCisjaW5jbHVkZSAiTG9n
Z2luZy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvU2hhcmVkQnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGQ6OnVuaXF1ZV9wdHI8
S2V5ZWREZWNvZGVyPiBjcmVhdGVGb3JGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gaGFuZGxlID0gRmlsZVN5c3Rl
bTo6b3BlbkFuZExvY2tGaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCk7
CisgICAgaWYgKGhhbmRsZSA9PSBGaWxlU3lzdGVtOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxl
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGxvbmcgbG9uZyBmaWxlU2l6ZSA9IDA7
CisgICAgaWYgKCFGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShoYW5kbGUsIGZpbGVTaXplKSB8fCAh
ZmlsZVNpemUpIHsKKyAgICAgICAgRmlsZVN5c3RlbTo6dW5sb2NrQW5kQ2xvc2VGaWxlKGhhbmRs
ZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHNpemVfdCBieXRlc1Rv
UmVhZDsKKyAgICBpZiAoIVdURjo6Y29udmVydFNhZmVseShmaWxlU2l6ZSwgYnl0ZXNUb1JlYWQp
KSB7CisgICAgICAgIEZpbGVTeXN0ZW06OnVubG9ja0FuZENsb3NlRmlsZShoYW5kbGUpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyKGJ5
dGVzVG9SZWFkKTsKKyAgICBzaXplX3QgdG90YWxCeXRlc1JlYWQgPSBGaWxlU3lzdGVtOjpyZWFk
RnJvbUZpbGUoaGFuZGxlLCBidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsKKworICAgIEZp
bGVTeXN0ZW06OnVubG9ja0FuZENsb3NlRmlsZShoYW5kbGUpOworCisgICAgaWYgKHRvdGFsQnl0
ZXNSZWFkICE9IGJ5dGVzVG9SZWFkKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgdHJ5IHRvIG1vZGlmeSB0aGUgY29uc3RydWN0b3IgdG8gcGFzcyAm
Ji4KKyAgICByZXR1cm4gS2V5ZWREZWNvZGVyOjpkZWNvZGVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KGJ1ZmZlci5kYXRhKCkpLCBidWZmZXIuc2l6ZSgpKTsKK30KKwordm9pZCB3
cml0ZVRvRGlzayhzdGQ6OnVuaXF1ZV9wdHI8S2V5ZWRFbmNvZGVyPiYmIGVuY29kZXIsIFN0cmlu
ZyYmIHBhdGgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRv
IHJhd0RhdGEgPSBlbmNvZGVyLT5maW5pc2hFbmNvZGluZygpOworICAgIGlmICghcmF3RGF0YSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGhh
bmRsZSA9IEZpbGVTeXN0ZW06Om9wZW5BbmRMb2NrRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxl
T3Blbk1vZGU6OldyaXRlKTsKKyAgICBpZiAoaGFuZGxlID09IEZpbGVTeXN0ZW06OmludmFsaWRQ
bGF0Zm9ybUZpbGVIYW5kbGUpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gd3JpdHRlbkJ5
dGVzID0gRmlsZVN5c3RlbTo6d3JpdGVUb0ZpbGUoaGFuZGxlLCByYXdEYXRhLT5kYXRhKCksIHJh
d0RhdGEtPnNpemUoKSk7CisgICAgRmlsZVN5c3RlbTo6dW5sb2NrQW5kQ2xvc2VGaWxlKGhhbmRs
ZSk7CisKKyAgICBpZiAod3JpdHRlbkJ5dGVzICE9IHN0YXRpY19jYXN0PGludDY0X3Q+KHJhd0Rh
dGEtPnNpemUoKSkpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKERpc2tQZXJzaXN0ZW5jeSwg
IkRpc2sgcGVyc2lzdGVuY3k6IFdlIG9ubHkgd3JvdGUgJWQgb3V0IG9mICV6dSBieXRlcyB0byBk
aXNrIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHdyaXR0ZW5CeXRlcyksIHJhd0RhdGEtPnNpemUo
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvUGVyc2lzdGVuY3lVdGlscy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUGVyc2lz
dGVuY3lVdGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2MDI3MGYxOTE2OGYzN2Y5ZDgyOWFhZWQ1NzFiNzY2
NzUyZjlkYmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QZXJzaXN0
ZW5jeVV0aWxzLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlIDxXZWJDb3JlL0tleWVkQ29kaW5nLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6S2V5ZWREZWNvZGVyPiBjcmVhdGVGb3JG
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCk7Cit2b2lkIHdyaXRlVG9EaXNrKHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpLZXllZEVuY29kZXI+JiYsIFN0cmluZyYmIHBhdGgpOworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IGUwYTMyODJlMDA5MmQ5N2NlMzVkNjY0NmI0MzMx
YjhjYTExZjQ4ZTAuLjQ5NmU4OGM4M2ZiZDllYzRjY2ViMWMyODlmM2QzZjhhNWFhZjhiOWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9T
b3VyY2VzLnR4dApAQCAtNDEsNiArNDEsOSBAQCBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU29ja2V0
U3RyZWFtLmNwcAogTmV0d29ya1Byb2Nlc3MvUGluZ0xvYWQuY3BwCiBOZXR3b3JrUHJvY2Vzcy9Q
cmVjb25uZWN0VGFzay5jcHAKIAorTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCitOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5jcHAKKwogTmV0d29ya1Byb2Nl
c3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAogCiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWQuY3BwCkBAIC0xMDcsNiArMTEwLDcgQEAgU2hhcmVkL0ZyYW1lSW5mb0RhdGEu
Y3BwCiBTaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5jcHAKIFNoYXJlZC9Mb2FkUGFyYW1ldGVycy5j
cHAKIFNoYXJlZC9OYXZpZ2F0aW9uQWN0aW9uRGF0YS5jcHAKK1NoYXJlZC9QZXJzaXN0ZW5jeVV0
aWxzLmNwcAogU2hhcmVkL1BsYXRmb3JtUG9wdXBNZW51RGF0YS5jcHAKIFNoYXJlZC9QcmludElu
Zm8uY3BwCiBTaGFyZWQvUlRDTmV0d29yay5jcHAKQEAgLTIyNSwxMiArMjI5LDkgQEAgVUlQcm9j
ZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCiBVSVByb2Nl
c3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFByb3h5LmNwcAogVUlQcm9jZXNzL0luc3Bl
Y3RvclRhcmdldFByb3h5LmNwcAogVUlQcm9jZXNzL1BhZ2VMb2FkU3RhdGUuY3BwCi1VSVByb2Nl
c3MvUGVyc2lzdGVuY3lVdGlscy5jcHAKIFVJUHJvY2Vzcy9Qcm9jZXNzQXNzZXJ0aW9uLmNwcAog
VUlQcm9jZXNzL1Byb2Nlc3NUaHJvdHRsZXIuY3BwCiBVSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHkuY3BwCi1VSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
LmNwcAotVUlQcm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5j
cHAKIFVJUHJvY2Vzcy9SZXNwb25zaXZlbmVzc1RpbWVyLmNwcAogVUlQcm9jZXNzL1NlcnZpY2VX
b3JrZXJQcm9jZXNzUHJveHkuY3BwCiBVSVByb2Nlc3MvU3RhdGlzdGljc1JlcXVlc3QuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggYTQzMzZhMDk4MDk0YTUxODgwNTdkMmZjYTY1MjQxYjU5
OWE5NDNiMi4uMzA4ZjY2Y2JlNmQyMzI0NmVkZGFmZGEzMWQyYWE0NTg1ODJjOTRlMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQv
U291cmNlc0NvY29hLnR4dApAQCAtMjksNiArMjksOSBAQCBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9O
ZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nl
c3NDb2NvYS5tbQogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQog
CitOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5jcHAKK05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RlbGVtZXRyeS5jcHAKKwogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9tYWMvV2ViQ29va2llTWFu
YWdlck1hYy5tbQogCiBOZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvQ29jb2EvTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2EubW0KQEAgLTIwMiw4ICsyMDUsNiBAQCBVSVByb2Nl
c3MvUGVyQWN0aXZpdHlTdGF0ZUNQVVVzYWdlU2FtcGxlci5jcHAKIFVJUHJvY2Vzcy9XZWJEYXRh
TGlzdFN1Z2dlc3Rpb25zRHJvcGRvd24uY3BwCiBVSVByb2Nlc3MvV2ViTWVkaWFTZXNzaW9uRm9j
dXNNYW5hZ2VyLmNwcAogVUlQcm9jZXNzL1dlYk1lZGlhU2Vzc2lvbkZvY3VzTWFuYWdlckNsaWVu
dC5jcHAKLVVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCi1VSVBy
b2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAKIFVJUHJvY2Vzcy9X
S0ltYWdlUHJldmlld1ZpZXdDb250cm9sbGVyLm1tCiBVSVByb2Nlc3MvV0tJbnNwZWN0b3JIaWdo
bGlnaHRWaWV3Lm1tCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQg
Yi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CmluZGV4IDI2NTM4NGI2NDE4ODc1Mzc4OTVk
MDdmM2FkNTgzMjk0NGMwMWQyOTEuLmIwOGQ3MjNiNGFlZTYwYjQxOWU3YjkzZTIxZDg4NjQ0Mjk1
ZDE3ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKKysrIGIvU291
cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dApAQCAtMjUsNiArMjUsOSBAQAogLy8gbGlua2luZyBQ
bHVnaW5Qcm9jZXNzR1RLMi4gSSBkb24ndCBrbm93IHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4gVGhl
c2UKIC8vIGFubm90YXRpb25zIHNob3VsZCBiZSByZXZpc2l0ZWQgYWZ0ZXIgcmVtb3ZpbmcgUGx1
Z2luUHJvY2Vzc0dUSzIuCiAKK05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmNwcAorTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAorCiBOZXR3b3JrUHJvY2Vzcy9Db29raWVz
L3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwCiAKIE5ldHdvcmtQcm9jZXNzL0N1c3RvbVBy
b3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXIuY3BwCkBAIC0xMDksOCArMTEyLDYg
QEAgVUlQcm9jZXNzL0RlZmF1bHRVbmRvQ29udHJvbGxlci5jcHAKIFVJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5SW1wbC5jcHAKIFVJUHJvY2Vzcy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmdOb25l
LmNwcAogVUlQcm9jZXNzL1dlYkdyYW1tYXJEZXRhaWwuY3BwCi1VSVByb2Nlc3MvV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAotVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NUZWxlbWV0cnkuY3BwCiBVSVByb2Nlc3MvV2ViVGV4dENoZWNrZXIuY3BwCiBVSVByb2Nl
c3MvV2ViVGV4dENoZWNrZXJDbGllbnQuY3BwCiBVSVByb2Nlc3MvV2ViVmlld3BvcnRBdHRyaWJ1
dGVzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dCBiL1NvdXJj
ZS9XZWJLaXQvU291cmNlc1dQRS50eHQKaW5kZXggOGVlMmZlZjQyYTY2NDc4NTlmMzVmOGQzNDc5
M2FmOTRhMDI5MzkzZS4uNTExOWNhZTU2YmMwNmYyMjk3M2Y2NzMzYzA4NDM3YWIyZTNlM2UxMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NvdXJjZXNXUEUudHh0CkBAIC0yMSw2ICsyMSw5IEBACiAvLyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCiAv
LyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKK05ldHdvcmtQcm9jZXNzL0NsYXNz
aWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAorTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAorCiBOZXR3
b3JrUHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwCiAKIE5ldHdv
cmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXIuY3Bw
CkBAIC05OCw4ICsxMDEsNiBAQCBVSVByb2Nlc3MvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5
LmNwcAogVUlQcm9jZXNzL0RlZmF1bHRVbmRvQ29udHJvbGxlci5jcHAKIFVJUHJvY2Vzcy9MZWdh
Y3lTZXNzaW9uU3RhdGVDb2RpbmdOb25lLmNwcAogVUlQcm9jZXNzL1dlYkdyYW1tYXJEZXRhaWwu
Y3BwCi1VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAotVUlQcm9j
ZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCiBVSVByb2Nlc3MvV2Vi
Vmlld3BvcnRBdHRyaWJ1dGVzLmNwcAogCiBVSVByb2Nlc3MvQVBJL0MvV0tHcmFtbWFyRGV0YWls
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRl
RGF0YVN0b3JlUmVmLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0
ZURhdGFTdG9yZVJlZi5jcHAKaW5kZXggYTNlMzQ2ODI1NmJiNjcwMDgyOTVmYzEzZjA3MmRmMzc5
YjcwMDEyYy4uY2Y2Y2FmNjg5YTYxMDRkYTc3NzdlODU3OTkzODIzM2VlMzQwZThkYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVm
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3Rv
cmVSZWYuY3BwCkBAIC01NzksMTMgKzU3OSwxMyBAQCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVNl
dENhY2hlU3RvcmFnZVBlck9yaWdpblF1b3RhKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhUwog
dm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRXZWJBdXRoZW50aWNhdGlvbk1vY2tDb25maWd1cmF0
aW9uKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIFdLRGljdGlvbmFyeVJlZiBj
b25maWd1cmF0aW9uUmVmKQogewogI2lmIEVOQUJMRShXRUJfQVVUSE4pCi0gICAgTW9ja1dlYkF1
dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uOworICAgIFdlYktpdDo6TW9j
a1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uOwogCiAgICAgaWYg
KGF1dG8gc2lsZW50RmFpbHVyZVJlZiA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShjb25maWd1cmF0aW9uUmVmLCBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTaWxlbnRGYWlsdXJlIikpLmdldCgpKSkpCiAgICAgICAgIGNv
bmZpZ3VyYXRpb24uc2lsZW50RmFpbHVyZSA9IFdLQm9vbGVhbkdldFZhbHVlKHNpbGVudEZhaWx1
cmVSZWYpOwogCiAgICAgaWYgKGF1dG8gbG9jYWxSZWYgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25h
cnlSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkoY29uZmlndXJhdGlvblJlZiwgYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiTG9jYWwiKSkuZ2V0KCkpKSkgewotICAg
ICAgICBNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uOjpMb2NhbCBsb2NhbDsKKyAg
ICAgICAgV2ViS2l0OjpNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uOjpMb2NhbCBs
b2NhbDsKICAgICAgICAgbG9jYWwuYWNjZXB0QXV0aGVudGljYXRpb24gPSBXS0Jvb2xlYW5HZXRW
YWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXko
bG9jYWxSZWYsIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFjY2VwdEF1
dGhlbnRpY2F0aW9uIikpLmdldCgpKSkpOwogICAgICAgICBsb2NhbC5hY2NlcHRBdHRlc3RhdGlv
biA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShsb2NhbFJlZiwgYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiQWNjZXB0QXR0ZXN0YXRpb24iKSkuZ2V0KCkpKSk7CiAgICAgICAgIGlmIChsb2Nh
bC5hY2NlcHRBdHRlc3RhdGlvbikgewpAQCAtNTk3LDM1ICs1OTcsMzUgQEAgdm9pZCBXS1dlYnNp
dGVEYXRhU3RvcmVTZXRXZWJBdXRoZW50aWNhdGlvbk1vY2tDb25maWd1cmF0aW9uKFdLV2Vic2l0
ZURhdGFTdG9yZVIKICAgICB9CiAKICAgICBpZiAoYXV0byBoaWRSZWYgPSBzdGF0aWNfY2FzdDxX
S0RpY3Rpb25hcnlSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkoY29uZmlndXJhdGlvblJl
ZiwgYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGlkIikpLmdldCgpKSkp
IHsKLSAgICAgICAgTW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbjo6SGlkIGhpZDsK
KyAgICAgICAgV2ViS2l0OjpNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uOjpIaWQg
aGlkOwogCiAgICAgICAgIGF1dG8gc3RhZ2UgPSBXZWJLaXQ6OnRvSW1wbChzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShoaWRSZWYsIGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YWdlIikpLmdldCgpKSkpLT5zdHJpbmcoKTsK
ICAgICAgICAgaWYgKHN0YWdlID09ICJpbmZvIikKLSAgICAgICAgICAgIGhpZC5zdGFnZSA9IE1v
Y2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb246OkhpZDo6U3RhZ2U6OkluZm87CisgICAg
ICAgICAgICBoaWQuc3RhZ2UgPSBXZWJLaXQ6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3Vy
YXRpb246OkhpZDo6U3RhZ2U6OkluZm87CiAgICAgICAgIGlmIChzdGFnZSA9PSAicmVxdWVzdCIp
Ci0gICAgICAgICAgICBoaWQuc3RhZ2UgPSBNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0
aW9uOjpIaWQ6OlN0YWdlOjpSZXF1ZXN0OworICAgICAgICAgICAgaGlkLnN0YWdlID0gV2ViS2l0
OjpNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uOjpIaWQ6OlN0YWdlOjpSZXF1ZXN0
OwogCiAgICAgICAgIGF1dG8gc3ViU3RhZ2UgPSBXZWJLaXQ6OnRvSW1wbChzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShoaWRSZWYsIGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN1YlN0YWdlIikpLmdldCgpKSkpLT5zdHJpbmco
KTsKICAgICAgICAgaWYgKHN1YlN0YWdlID09ICJpbml0IikKLSAgICAgICAgICAgIGhpZC5zdWJT
dGFnZSA9IE1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb246OkhpZDo6U3ViU3RhZ2U6
OkluaXQ7CisgICAgICAgICAgICBoaWQuc3ViU3RhZ2UgPSBXZWJLaXQ6Ok1vY2tXZWJBdXRoZW50
aWNhdGlvbkNvbmZpZ3VyYXRpb246OkhpZDo6U3ViU3RhZ2U6OkluaXQ7CiAgICAgICAgIGlmIChz
dWJTdGFnZSA9PSAibXNnIikKLSAgICAgICAgICAgIGhpZC5zdWJTdGFnZSA9IE1vY2tXZWJBdXRo
ZW50aWNhdGlvbkNvbmZpZ3VyYXRpb246OkhpZDo6U3ViU3RhZ2U6Ok1zZzsKKyAgICAgICAgICAg
IGhpZC5zdWJTdGFnZSA9IFdlYktpdDo6TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlv
bjo6SGlkOjpTdWJTdGFnZTo6TXNnOwogCiAgICAgICAgIGF1dG8gZXJyb3IgPSBXZWJLaXQ6OnRv
SW1wbChzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSho
aWRSZWYsIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkVycm9yIikpLmdl
dCgpKSkpLT5zdHJpbmcoKTsKICAgICAgICAgaWYgKGVycm9yID09ICJzdWNjZXNzIikKLSAgICAg
ICAgICAgIGhpZC5lcnJvciA9IE1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb246Okhp
ZDo6RXJyb3I6OlN1Y2Nlc3M7CisgICAgICAgICAgICBoaWQuZXJyb3IgPSBXZWJLaXQ6Ok1vY2tX
ZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb246OkhpZDo6RXJyb3I6OlN1Y2Nlc3M7CiAgICAg
ICAgIGlmIChlcnJvciA9PSAiZGF0YS1ub3Qtc2VudCIpCi0gICAgICAgICAgICBoaWQuZXJyb3Ig
PSBNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uOjpIaWQ6OkVycm9yOjpEYXRhTm90
U2VudDsKKyAgICAgICAgICAgIGhpZC5lcnJvciA9IFdlYktpdDo6TW9ja1dlYkF1dGhlbnRpY2F0
aW9uQ29uZmlndXJhdGlvbjo6SGlkOjpFcnJvcjo6RGF0YU5vdFNlbnQ7CiAgICAgICAgIGlmIChl
cnJvciA9PSAiZW1wdHktcmVwb3J0IikKLSAgICAgICAgICAgIGhpZC5lcnJvciA9IE1vY2tXZWJB
dXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb246OkhpZDo6RXJyb3I6OkVtcHR5UmVwb3J0OworICAg
ICAgICAgICAgaGlkLmVycm9yID0gV2ViS2l0OjpNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1
cmF0aW9uOjpIaWQ6OkVycm9yOjpFbXB0eVJlcG9ydDsKICAgICAgICAgaWYgKGVycm9yID09ICJ3
cm9uZy1jaGFubmVsLWlkIikKLSAgICAgICAgICAgIGhpZC5lcnJvciA9IE1vY2tXZWJBdXRoZW50
aWNhdGlvbkNvbmZpZ3VyYXRpb246OkhpZDo6RXJyb3I6Oldyb25nQ2hhbm5lbElkOworICAgICAg
ICAgICAgaGlkLmVycm9yID0gV2ViS2l0OjpNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0
aW9uOjpIaWQ6OkVycm9yOjpXcm9uZ0NoYW5uZWxJZDsKICAgICAgICAgaWYgKGVycm9yID09ICJt
YWxpY2lvdXMtcGF5bG9hZCIpCi0gICAgICAgICAgICBoaWQuZXJyb3IgPSBNb2NrV2ViQXV0aGVu
dGljYXRpb25Db25maWd1cmF0aW9uOjpIaWQ6OkVycm9yOjpNYWxpY2lvdXNQYXlsb2FkOworICAg
ICAgICAgICAgaGlkLmVycm9yID0gV2ViS2l0OjpNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1
cmF0aW9uOjpIaWQ6OkVycm9yOjpNYWxpY2lvdXNQYXlsb2FkOwogICAgICAgICBpZiAoZXJyb3Ig
PT0gInVuc3VwcG9ydGVkLW9wdGlvbnMiKQotICAgICAgICAgICAgaGlkLmVycm9yID0gTW9ja1dl
YkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbjo6SGlkOjpFcnJvcjo6VW5zdXBwb3J0ZWRPcHRp
b25zOworICAgICAgICAgICAgaGlkLmVycm9yID0gV2ViS2l0OjpNb2NrV2ViQXV0aGVudGljYXRp
b25Db25maWd1cmF0aW9uOjpIaWQ6OkVycm9yOjpVbnN1cHBvcnRlZE9wdGlvbnM7CiAgICAgICAg
IGlmIChlcnJvciA9PSAid3Jvbmctbm9uY2UiKQotICAgICAgICAgICAgaGlkLmVycm9yID0gTW9j
a1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbjo6SGlkOjpFcnJvcjo6V3JvbmdOb25jZTsK
KyAgICAgICAgICAgIGhpZC5lcnJvciA9IFdlYktpdDo6TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29u
ZmlndXJhdGlvbjo6SGlkOjpFcnJvcjo6V3JvbmdOb25jZTsKIAogICAgICAgICBpZiAoYXV0byBw
YXlsb2FkQmFzZTY0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkoaGlkUmVmLCBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQ
YXlsb2FkQmFzZTY0IikpLmdldCgpKSkpCiAgICAgICAgICAgICBoaWQucGF5bG9hZEJhc2U2NCA9
IFdlYktpdDo6dG9JbXBsKHBheWxvYWRCYXNlNjQpLT5zdHJpbmcoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BlcnNpc3RlbmN5VXRpbHMuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUGVyc2lzdGVuY3lVdGlscy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDVkYmE5NjhiZDdlMGIzOGMzZDIyNjk0ZDZkNWQyZTZiMDY5ZDJhODEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUGVyc2lzdGVuY3lVdGlscy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGVyc2lz
dGVuY3lVdGlscy5oIgotCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgPFdlYkNvcmUv
RmlsZVN5c3RlbS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1J1bkxvb3AuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwotCi1zdGQ6OnVuaXF1ZV9wdHI8S2V5ZWREZWNvZGVyPiBjcmVhdGVGb3JGaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIGF1dG8gaGFuZGxlID0gRmlsZVN5c3RlbTo6b3BlbkFuZExvY2tGaWxlKHBhdGgsIEZp
bGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCk7Ci0gICAgaWYgKGhhbmRsZSA9PSBGaWxlU3lz
dGVtOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIGxvbmcgbG9uZyBmaWxlU2l6ZSA9IDA7Ci0gICAgaWYgKCFGaWxlU3lzdGVtOjpnZXRG
aWxlU2l6ZShoYW5kbGUsIGZpbGVTaXplKSB8fCAhZmlsZVNpemUpIHsKLSAgICAgICAgRmlsZVN5
c3RlbTo6dW5sb2NrQW5kQ2xvc2VGaWxlKGhhbmRsZSk7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KLQotICAgIHNpemVfdCBieXRlc1RvUmVhZDsKLSAgICBpZiAoIVdURjo6Y29udmVy
dFNhZmVseShmaWxlU2l6ZSwgYnl0ZXNUb1JlYWQpKSB7Ci0gICAgICAgIEZpbGVTeXN0ZW06OnVu
bG9ja0FuZENsb3NlRmlsZShoYW5kbGUpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9
Ci0KLSAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyKGJ5dGVzVG9SZWFkKTsKLSAgICBzaXplX3QgdG90
YWxCeXRlc1JlYWQgPSBGaWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoaGFuZGxlLCBidWZmZXIuZGF0
YSgpLCBidWZmZXIuc2l6ZSgpKTsKLQotICAgIEZpbGVTeXN0ZW06OnVubG9ja0FuZENsb3NlRmls
ZShoYW5kbGUpOwotCi0gICAgaWYgKHRvdGFsQnl0ZXNSZWFkICE9IGJ5dGVzVG9SZWFkKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdHJ5IHRvIG1v
ZGlmeSB0aGUgY29uc3RydWN0b3IgdG8gcGFzcyAmJi4KLSAgICByZXR1cm4gS2V5ZWREZWNvZGVy
OjpkZWNvZGVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlci5kYXRhKCkp
LCBidWZmZXIuc2l6ZSgpKTsKLX0KLQotdm9pZCB3cml0ZVRvRGlzayhzdGQ6OnVuaXF1ZV9wdHI8
S2V5ZWRFbmNvZGVyPiYmIGVuY29kZXIsIFN0cmluZyYmIHBhdGgpCi17Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIHJhd0RhdGEgPSBlbmNvZGVyLT5maW5pc2hF
bmNvZGluZygpOwotICAgIGlmICghcmF3RGF0YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmls
ZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSA9IEZpbGVTeXN0ZW06Om9wZW5BbmRM
b2NrRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OldyaXRlKTsKLSAgICBpZiAo
aGFuZGxlID09IEZpbGVTeXN0ZW06OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8gd3JpdHRlbkJ5dGVzID0gRmlsZVN5c3RlbTo6d3JpdGVUb0Zp
bGUoaGFuZGxlLCByYXdEYXRhLT5kYXRhKCksIHJhd0RhdGEtPnNpemUoKSk7Ci0gICAgRmlsZVN5
c3RlbTo6dW5sb2NrQW5kQ2xvc2VGaWxlKGhhbmRsZSk7Ci0KLSAgICBpZiAod3JpdHRlbkJ5dGVz
ICE9IHN0YXRpY19jYXN0PGludDY0X3Q+KHJhd0RhdGEtPnNpemUoKSkpCi0gICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKERpc2tQZXJzaXN0ZW5jeSwgIkRpc2sgcGVyc2lzdGVuY3k6IFdlIG9ubHkg
d3JvdGUgJWQgb3V0IG9mICV6dSBieXRlcyB0byBkaXNrIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHdyaXR0ZW5CeXRlcyksIHJhd0RhdGEtPnNpemUoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGVyc2lzdGVuY3lVdGls
cy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGVyc2lzdGVuY3lVdGlscy5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjAyNzBmMTkxNjhmMzdmOWQ4MjlhYWVkNTcxYjc2Njc1
MmY5ZGJlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BlcnNpc3RlbmN5VXRpbHMuaAorKysgL2Rldi9udWxsCkBA
IC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSA8V2ViQ29yZS9LZXllZENvZGluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OktleWVkRGVjb2Rlcj4gY3JlYXRlRm9yRmlsZShjb25zdCBTdHJp
bmcmIHBhdGgpOwotdm9pZCB3cml0ZVRvRGlzayhzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6S2V5
ZWRFbmNvZGVyPiYmLCBTdHJpbmcmJiBwYXRoKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U3
MTgzMjAzMjRjYzZiOWI2NDQ0YTdjNmY2YjI0MWQ4YmFmZDAxMC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTI5
NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmgiCi0KLSNpbmNsdWRlICJMb2dn
aW5nLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc01hbmFnZXIuaCIKLSNpbmNsdWRlICJQbHVn
aW5Qcm9jZXNzUHJveHkuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lz
dGVudFN0b3JhZ2UuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKLSNpbmNsdWRlICJX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgiCi0jaW5jbHVkZSAiV2Vic2l0ZURh
dGFTdG9yZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvS2V5ZWRDb2RpbmcuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaD4KLSNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tB
Z2dyZWdhdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+Ci0jaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KLQotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwotCi1jb25zdGV4cHIgdW5zaWduZWQgc3RhdGlzdGljc01vZGVs
VmVyc2lvbiB7IDE0IH07Ci1jb25zdGV4cHIgdW5zaWduZWQgbWF4TnVtYmVyT2ZSZWN1cnNpdmVD
YWxsc0luUmVkaXJlY3RUcmFjZUJhY2sgeyA1MCB9OwotY29uc3RleHByIFNlY29uZHMgbWluaW11
bVN0YXRpc3RpY3NQcm9jZXNzaW5nSW50ZXJ2YWwgeyA1X3MgfTsKLWNvbnN0ZXhwciB1bnNpZ25l
ZCBvcGVyYXRpbmdEYXRlc1dpbmRvdyB7IDMwIH07Ci1jb25zdGV4cHIgdW5zaWduZWQgbWF4SW1w
b3J0YW5jZSB7IDMgfTsKLXN0YXRpYyBjb25zdCBjaGFyKiBkZWJ1Z1N0YXRpY1ByZXZhbGVudFJl
c291cmNlIHsgIjNyZHBhcnR5dGVzdHdlYmtpdC5vcmciIH07Ci0KLSNpZiAhUkVMRUFTRV9MT0df
RElTQUJMRUQKLXN0YXRpYyBTdHJpbmcgZG9tYWluc1RvU3RyaW5nKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBkb21haW5zKQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBmb3IgKGF1
dG8mIGRvbWFpbiA6IGRvbWFpbnMpIHsKLSAgICAgICAgaWYgKCFidWlsZGVyLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKLSAgICAgICAgYnVpbGRl
ci5hcHBlbmQoZG9tYWluKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsK
LX0KLSNlbmRpZgotCi1jbGFzcyBPcGVyYXRpbmdEYXRlIHsKLXB1YmxpYzoKLSAgICBPcGVyYXRp
bmdEYXRlKCkgPSBkZWZhdWx0OwotCi0gICAgc3RhdGljIE9wZXJhdGluZ0RhdGUgZnJvbVdhbGxU
aW1lKFdhbGxUaW1lIHRpbWUpCi0gICAgewotICAgICAgICBkb3VibGUgbXMgPSB0aW1lLnNlY29u
ZHNTaW5jZUVwb2NoKCkubWlsbGlzZWNvbmRzKCk7Ci0gICAgICAgIGludCB5ZWFyID0gbXNUb1ll
YXIobXMpOwotICAgICAgICBpbnQgeWVhckRheSA9IGRheUluWWVhcihtcywgeWVhcik7Ci0gICAg
ICAgIGludCBtb250aCA9IG1vbnRoRnJvbURheUluWWVhcih5ZWFyRGF5LCBpc0xlYXBZZWFyKHll
YXIpKTsKLSAgICAgICAgaW50IG1vbnRoRGF5ID0gZGF5SW5Nb250aEZyb21EYXlJblllYXIoeWVh
ckRheSwgaXNMZWFwWWVhcih5ZWFyKSk7Ci0KLSAgICAgICAgcmV0dXJuIE9wZXJhdGluZ0RhdGUg
eyB5ZWFyLCBtb250aCwgbW9udGhEYXkgfTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgT3BlcmF0aW5n
RGF0ZSB0b2RheSgpCi0gICAgewotICAgICAgICByZXR1cm4gT3BlcmF0aW5nRGF0ZTo6ZnJvbVdh
bGxUaW1lKFdhbGxUaW1lOjpub3coKSk7Ci0gICAgfQotCi0gICAgU2Vjb25kcyBzZWNvbmRzU2lu
Y2VFcG9jaCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gU2Vjb25kcyB7IGRhdGVUb0Rh
eXNGcm9tMTk3MChtX3llYXIsIG1fbW9udGgsIG1fbW9udGhEYXkpICogc2Vjb25kc1BlckRheSB9
OwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhl
cikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX21vbnRoRGF5ID09IG90aGVyLm1fbW9u
dGhEYXkgJiYgbV9tb250aCA9PSBvdGhlci5tX21vbnRoICYmIG1feWVhciA9PSBvdGhlci5tX3ll
YXI7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3Ro
ZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gc2Vjb25kc1NpbmNlRXBvY2goKSA8IG90
aGVyLnNlY29uZHNTaW5jZUVwb2NoKCk7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcjw9KGNv
bnN0IE9wZXJhdGluZ0RhdGUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHNl
Y29uZHNTaW5jZUVwb2NoKCkgPD0gb3RoZXIuc2Vjb25kc1NpbmNlRXBvY2goKTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgT3BlcmF0aW5nRGF0ZShpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgbW9u
dGhEYXkpCi0gICAgICAgIDogbV95ZWFyKHllYXIpCi0gICAgICAgICwgbV9tb250aChtb250aCkK
LSAgICAgICAgLCBtX21vbnRoRGF5KG1vbnRoRGF5KQotICAgIHsgfQotCi0gICAgaW50IG1feWVh
ciB7IDAgfTsKLSAgICBpbnQgbV9tb250aCB7IDAgfTsgLy8gWzAsIDExXS4KLSAgICBpbnQgbV9t
b250aERheSB7IDAgfTsgLy8gWzEsIDMxXS4KLX07Ci0KLXN0YXRpYyBWZWN0b3I8T3BlcmF0aW5n
RGF0ZT4gbWVyZ2VPcGVyYXRpbmdEYXRlcyhjb25zdCBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4mIGV4
aXN0aW5nRGF0ZXMsIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYmIG5ld0RhdGVzKQotewotICAgIGlm
IChleGlzdGluZ0RhdGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFdURk1vdmUobmV3RGF0
ZXMpOwotCi0gICAgVmVjdG9yPE9wZXJhdGluZ0RhdGU+IG1lcmdlZERhdGVzKGV4aXN0aW5nRGF0
ZXMuc2l6ZSgpICsgbmV3RGF0ZXMuc2l6ZSgpKTsKLQotICAgIC8vIE1lcmdlIHRoZSB0d28gc29y
dGVkIHZlY3RvcnMgb2YgZGF0ZXMuCi0gICAgc3RkOjptZXJnZShleGlzdGluZ0RhdGVzLmJlZ2lu
KCksIGV4aXN0aW5nRGF0ZXMuZW5kKCksIG5ld0RhdGVzLmJlZ2luKCksIG5ld0RhdGVzLmVuZCgp
LCBtZXJnZWREYXRlcy5iZWdpbigpKTsKLSAgICAvLyBSZW1vdmUgZHVwbGljYXRlIGRhdGVzLgot
ICAgIHJlbW92ZVJlcGVhdGVkRWxlbWVudHMobWVyZ2VkRGF0ZXMpOwotCi0gICAgLy8gRHJvcCBv
bGQgZGF0ZXMgdW50aWwgdGhlIFZlY3RvciBzaXplIHJlYWNoZXMgb3BlcmF0aW5nRGF0ZXNXaW5k
b3cuCi0gICAgd2hpbGUgKG1lcmdlZERhdGVzLnNpemUoKSA+IG9wZXJhdGluZ0RhdGVzV2luZG93
KQotICAgICAgICBtZXJnZWREYXRlcy5yZW1vdmUoMCk7Ci0KLSAgICByZXR1cm4gbWVyZ2VkRGF0
ZXM7Ci19Ci0KLXN0cnVjdCBTdGF0aXN0aWNzTGFzdFNlZW4gewotICAgIFN0cmluZyB0b3BQcml2
YXRlbHlPd25lZERvbWFpbjsKLSAgICBXYWxsVGltZSBsYXN0U2VlbjsKLX07Ci0KLXN0YXRpYyB2
b2lkIHBydW5lUmVzb3VyY2VzKEhhc2hNYXA8U3RyaW5nLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzPiYgc3RhdGlzdGljc01hcCwgVmVjdG9yPFN0YXRpc3RpY3NMYXN0U2Vlbj4mIHN0
YXRpc3RpY3NUb1BydW5lLCBzaXplX3QmIG51bWJlck9mRW50cmllc1RvUHJ1bmUpCi17Ci0gICAg
aWYgKHN0YXRpc3RpY3NUb1BydW5lLnNpemUoKSA+IG51bWJlck9mRW50cmllc1RvUHJ1bmUpIHsK
LSAgICAgICAgc3RkOjpzb3J0KHN0YXRpc3RpY3NUb1BydW5lLmJlZ2luKCksIHN0YXRpc3RpY3NU
b1BydW5lLmVuZCgpLCBbXShjb25zdCBTdGF0aXN0aWNzTGFzdFNlZW4mIGEsIGNvbnN0IFN0YXRp
c3RpY3NMYXN0U2VlbiYgYikgewotICAgICAgICAgICAgcmV0dXJuIGEubGFzdFNlZW4gPCBiLmxh
c3RTZWVuOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMCwgZW5k
ID0gc3RkOjptaW4obnVtYmVyT2ZFbnRyaWVzVG9QcnVuZSwgc3RhdGlzdGljc1RvUHJ1bmUuc2l6
ZSgpKTsgaSAhPSBlbmQ7ICsraSwgLS1udW1iZXJPZkVudHJpZXNUb1BydW5lKQotICAgICAgICBz
dGF0aXN0aWNzTWFwLnJlbW92ZShzdGF0aXN0aWNzVG9QcnVuZVtpXS50b3BQcml2YXRlbHlPd25l
ZERvbWFpbik7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSW1wb3J0YW5jZShjb25zdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYykKLXsKLSAgICB1bnNpZ25l
ZCBpbXBvcnRhbmNlID0gbWF4SW1wb3J0YW5jZTsKLSAgICBpZiAoIXJlc291cmNlU3RhdGlzdGlj
LmlzUHJldmFsZW50UmVzb3VyY2UpCi0gICAgICAgIGltcG9ydGFuY2UgLT0gMTsKLSAgICBpZiAo
IXJlc291cmNlU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbikKLSAgICAgICAgaW1wb3J0YW5j
ZSAtPSAyOwotICAgIHJldHVybiBpbXBvcnRhbmNlOwotfQotCi1SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZShXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIHN0b3JlLCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKLSAg
ICA6IG1fc3RvcmUoc3RvcmUpCi0gICAgLCBtX3dvcmtRdWV1ZSh3b3JrUXVldWUpCi17Ci0gICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBy
ZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCk7Ci0jZW5kaWYKLSAgICBpbmNsdWRlVG9kYXlB
c09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSgpOwotCi0gICAgbV93b3JrUXVldWUtPmRpc3BhdGNo
QWZ0ZXIoNV9zLCBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIHsKLSAgICAgICAgaWYg
KHdlYWtUaGlzKQotICAgICAgICAgICAgd2Vha1RoaXMtPmNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVt
ZXRyeSgpOwotICAgIH0pOwotfQotCi1SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
On5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUoKQotewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6c2V0UGVyc2lzdGVudFN0b3JhZ2UoUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3Rl
bnRTdG9yYWdlJiBwZXJzaXN0ZW50U3RvcmFnZSkKLXsKLSAgICBtX3BlcnNpc3RlbnRTdG9yYWdl
ID0gbWFrZVdlYWtQdHIocGVyc2lzdGVudFN0b3JhZ2UpOwotfQotCi12b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2FsY3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5KCkgY29u
c3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChtX3BhcmFt
ZXRlcnMuc2hvdWxkU3VibWl0VGVsZW1ldHJ5KQotICAgICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzVGVsZW1ldHJ5OjpjYWxjdWxhdGVBbmRTdWJtaXQoKnRoaXMpOwotfQotCi12b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJl
Y29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOwotICAgIG1fcGFyYW1ldGVycy5zaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jk
c1dlcmVTY2FubmVkID0gdmFsdWU7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVt
b3ZhbChib29sIHZhbHVlKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAg
IG1fcGFyYW1ldGVycy5zaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVt
b3ZhbCA9IHZhbHVlOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6c2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KGJvb2wgdmFsdWUpCi17Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0gICAgbV9wYXJhbWV0ZXJzLnNob3VsZFN1Ym1pdFRlbGVtZXRy
eSA9IHZhbHVlOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
cmVtb3ZlRGF0YVJlY29yZHMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQot
ewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKCFzaG91bGRSZW1v
dmVEYXRhUmVjb3JkcygpKSB7Ci0gICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBtX2FjdGl2ZVBs
dWdpblRva2Vucy5jbGVhcigpOwotICAgIGZvciAoY29uc3QgYXV0byYgcGx1Z2luIDogUGx1Z2lu
UHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLnBsdWdpblByb2Nlc3NlcygpKQotICAgICAgICBt
X2FjdGl2ZVBsdWdpblRva2Vucy5hZGQocGx1Z2luLT5wbHVnaW5Qcm9jZXNzVG9rZW4oKSk7Ci0j
ZW5kaWYKLQotICAgIGF1dG8gcHJldmFsZW50UmVzb3VyY2VEb21haW5zID0gdG9wUHJpdmF0ZWx5
Q29udHJvbGxlZERvbWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRhRm9yKCk7Ci0gICAgaWYgKHByZXZh
bGVudFJlc291cmNlRG9tYWlucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgY2FsbGJhY2soKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIFJF
TEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGVidWcsICJBYm91dCB0byByZW1vdmUgZGF0YSByZWNvcmRzIGZvciAle3B1YmxpY31z
LiIsIGRvbWFpbnNUb1N0cmluZyhwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLnV0ZjgoKS5kYXRh
KCkpOwotI2VuZGlmCi0KLSAgICBzZXREYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCh0cnVlKTsKLQot
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJldmFsZW50UmVzb3VyY2VEb21haW5zID0g
Y3Jvc3NUaHJlYWRDb3B5KHByZXZhbGVudFJlc291cmNlRG9tYWlucyksIGNhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayksIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBzaG91bGROb3Rp
ZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkID0gbV9wYXJhbWV0ZXJzLnNob3VsZE5v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQsIHdvcmtRdWV1ZSA9IG1fd29ya1F1
ZXVlLmNvcHlSZWYoKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIFdlYlByb2Nlc3NQcm94eTo6ZGVs
ZXRlV2Vic2l0ZURhdGFGb3JUb3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc0luQWxsUGVyc2lz
dGVudERhdGFTdG9yZXMoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptb25pdG9yZWRE
YXRhVHlwZXMoKSwgV1RGTW92ZShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLCBzaG91bGROb3Rp
ZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLCBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKSwgd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgd29ya1F1ZXVlID0gd29ya1F1
ZXVlLmNvcHlSZWYoKV0oY29uc3QgSGFzaFNldDxTdHJpbmc+JiBkb21haW5zV2l0aERlbGV0ZWRX
ZWJzaXRlRGF0YSkgbXV0YWJsZSB7Ci0gICAgICAgICAgICB3b3JrUXVldWUtPmRpc3BhdGNoKFt0
b3BEb21haW5zID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRh
KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtU
aGlzKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykgewotICAg
ICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZvciAoYXV0byYgcHJldmFsZW50
UmVzb3VyY2VEb21haW4gOiB0b3BEb21haW5zKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8m
IHN0YXRpc3RpYyA9IHdlYWtUaGlzLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5
RG9tYWluKHByZXZhbGVudFJlc291cmNlRG9tYWluKTsKLSAgICAgICAgICAgICAgICAgICAgKytz
dGF0aXN0aWMuZGF0YVJlY29yZHNSZW1vdmVkOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB3ZWFrVGhpcy0+c2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoZmFsc2UpOwotICAg
ICAgICAgICAgICAgIGNhbGxiYWNrKCk7Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAg
ICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRih3ZWFrVGhpcy0+bV9kZWJ1Z0xvZ2dpbmdF
bmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJEb25lIHJlbW92aW5nIGRhdGEg
cmVjb3Jkcy4iKTsKLSNlbmRpZgotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0p
OwotfQotCi11bnNpZ25lZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlY3Vy
c2l2ZWx5R2V0QWxsRG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvVGhpc0RvbWFpbihjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYywgSGFzaFNl
dDxTdHJpbmc+JiBkb21haW5zVGhhdEhhdmVSZWRpcmVjdGVkVG8sIHVuc2lnbmVkIG51bWJlck9m
UmVjdXJzaXZlQ2FsbHMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
Ci0KLSAgICBpZiAobnVtYmVyT2ZSZWN1cnNpdmVDYWxscyA+PSBtYXhOdW1iZXJPZlJlY3Vyc2l2
ZUNhbGxzSW5SZWRpcmVjdFRyYWNlQmFjaykgewotICAgICAgICAvLyBNb2RlbCB2ZXJzaW9uIDE0
IGludm9rZXMgYSBkZWxpYmVyYXRlIHJlLWNsYXNzaWZpY2F0aW9uIG9mIHRoZSB3aG9sZSBzZXQu
Ci0gICAgICAgIGlmIChzdGF0aXN0aWNzTW9kZWxWZXJzaW9uICE9IDE0KQotICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0
YXRpc3RpY3MsICJIaXQgJXUgcmVjdXJzaXZlIGNhbGxzIGluIHJlZGlyZWN0IGJhY2t0cmFjZS4g
UmV0dXJuaW5nIGVhcmx5LiIsIG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJh
Y2VCYWNrKTsKLSAgICAgICAgcmV0dXJuIG51bWJlck9mUmVjdXJzaXZlQ2FsbHM7Ci0gICAgfQot
Ci0gICAgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscysrOwotCi0gICAgZm9yIChhdXRvJiBzdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0RnJvbURvbWFpbiA6IHJlc291cmNlU3RhdGlzdGljLnN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzRnJvbS52YWx1ZXMoKSkgewotICAgICAgICBhdXRvIG1hcEVudHJ5
ID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZmluZChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
RnJvbURvbWFpbik7Ci0gICAgICAgIGlmIChtYXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlzdGlj
c01hcC5lbmQoKSB8fCBtYXBFbnRyeS0+dmFsdWUuaXNQcmV2YWxlbnRSZXNvdXJjZSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRv
LmFkZChtYXBFbnRyeS0+dmFsdWUuaGlnaExldmVsRG9tYWluKS5pc05ld0VudHJ5KQotICAgICAg
ICAgICAgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscyA9IHJlY3Vyc2l2ZWx5R2V0QWxsRG9tYWluc1Ro
YXRIYXZlUmVkaXJlY3RlZFRvVGhpc0RvbWFpbihtYXBFbnRyeS0+dmFsdWUsIGRvbWFpbnNUaGF0
SGF2ZVJlZGlyZWN0ZWRUbywgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscyk7Ci0gICAgfQotICAgIGZv
ciAoYXV0byYgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb21Eb21haW4gOiByZXNvdXJjZVN0YXRp
c3RpYy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20udmFsdWVzKCkpIHsKLSAgICAgICAgYXV0
byBtYXBFbnRyeSA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmZpbmQodG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdEZyb21Eb21haW4pOwotICAgICAgICBpZiAobWFwRW50cnkgPT0gbV9yZXNvdXJjZVN0
YXRpc3RpY3NNYXAuZW5kKCkgfHwgbWFwRW50cnktPnZhbHVlLmlzUHJldmFsZW50UmVzb3VyY2Up
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGRvbWFpbnNUaGF0SGF2ZVJlZGly
ZWN0ZWRUby5hZGQobWFwRW50cnktPnZhbHVlLmhpZ2hMZXZlbERvbWFpbikuaXNOZXdFbnRyeSkK
LSAgICAgICAgICAgIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMgPSByZWN1cnNpdmVseUdldEFsbERv
bWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUb1RoaXNEb21haW4obWFwRW50cnktPnZhbHVlLCBkb21h
aW5zVGhhdEhhdmVSZWRpcmVjdGVkVG8sIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMpOwotICAgIH0K
LQotICAgIHJldHVybiBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzOwotfQotCi12b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVk
VG9QcmV2YWxlbnQoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0
aXN0aWMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAocmVz
b3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgZm9yIChhdXRvJiBzdWJyZXNvdXJjZURvbWFpblJlZGlyZWN0ZWRUbyA6IHJlc291cmNlU3Rh
dGlzdGljLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8udmFsdWVzKCkpIHsKLSAgICAgICAg
YXV0byBtYXBFbnRyeSA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmZpbmQoc3VicmVzb3VyY2VE
b21haW5SZWRpcmVjdGVkVG8pOwotICAgICAgICBpZiAobWFwRW50cnkgIT0gbV9yZXNvdXJjZVN0
YXRpc3RpY3NNYXAuZW5kKCkgJiYgbWFwRW50cnktPnZhbHVlLmlzUHJldmFsZW50UmVzb3VyY2Up
IHsKLSAgICAgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLCBS
ZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGZvciAoYXV0byYgdG9wRnJhbWVEb21haW5SZWRpcmVjdGVkVG8g
OiByZXNvdXJjZVN0YXRpc3RpYy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLnZhbHVlcygpKSB7
Ci0gICAgICAgIGF1dG8gbWFwRW50cnkgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5maW5kKHRv
cEZyYW1lRG9tYWluUmVkaXJlY3RlZFRvKTsKLSAgICAgICAgaWYgKG1hcEVudHJ5ICE9IG1fcmVz
b3VyY2VTdGF0aXN0aWNzTWFwLmVuZCgpICYmIG1hcEVudHJ5LT52YWx1ZS5pc1ByZXZhbGVudFJl
c291cmNlKSB7Ci0gICAgICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRp
c3RpYywgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjppc1ByZXZhbGVudER1ZVRvRGVidWdNb2RlKFJlc291cmNlTG9hZFN0YXRpc3RpY3Mm
IHJlc291cmNlU3RhdGlzdGljKQotewotICAgIGlmICghbV9kZWJ1Z01vZGVFbmFibGVkKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gcmVzb3VyY2VTdGF0aXN0aWMuaGlnaExl
dmVsRG9tYWluID09IGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UgfHwgcmVzb3VyY2VTdGF0
aXN0aWMuaGlnaExldmVsRG9tYWluID09IG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsK
LX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnByb2Nlc3NTdGF0
aXN0aWNzQW5kRGF0YVJlY29yZHMoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgaWYgKG1fcGFyYW1ldGVycy5zaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURh
dGFSZWNvcmRzUmVtb3ZhbCkgewotICAgICAgICBmb3IgKGF1dG8mIHJlc291cmNlU3RhdGlzdGlj
IDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChp
c1ByZXZhbGVudER1ZVRvRGVidWdNb2RlKHJlc291cmNlU3RhdGlzdGljKSkKLSAgICAgICAgICAg
ICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2Fk
UHJldmFsZW5jZTo6SGlnaCk7Ci0gICAgICAgICAgICBlbHNlIGlmICghcmVzb3VyY2VTdGF0aXN0
aWMuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpIHsKLSAgICAgICAgICAgICAgICBtYXJrQXNQcmV2
YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudChyZXNvdXJjZVN0YXRpc3RpYyk7Ci0gICAg
ICAgICAgICAgICAgYXV0byBjdXJyZW50UHJldmFsZW5jZSA9IHJlc291cmNlU3RhdGlzdGljLmlz
UHJldmFsZW50UmVzb3VyY2UgPyBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoIDogUmVzb3Vy
Y2VMb2FkUHJldmFsZW5jZTo6TG93OwotICAgICAgICAgICAgICAgIGF1dG8gbmV3UHJldmFsZW5j
ZSA9IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuY2FsY3VsYXRlUmVzb3VyY2VQ
cmV2YWxlbmNlKHJlc291cmNlU3RhdGlzdGljLCBjdXJyZW50UHJldmFsZW5jZSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5ld1ByZXZhbGVuY2UgIT0gY3VycmVudFByZXZhbGVuY2UpCi0gICAgICAg
ICAgICAgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLCBuZXdQ
cmV2YWxlbmNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlbW92
ZURhdGFSZWNvcmRzKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0gewotICAg
ICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgp
OwotICAgICAgICBpZiAobV9wZXJzaXN0ZW50U3RvcmFnZSkKLSAgICAgICAgICAgIG1fcGVyc2lz
dGVudFN0b3JhZ2UtPnNjaGVkdWxlT3JXcml0ZU1lbW9yeVN0b3JlKFJlc291cmNlTG9hZFN0YXRp
c3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6Rm9yY2VJbW1lZGlhdGVXcml0ZTo6Tm8pOwotCi0gICAg
ICAgIGlmICghbV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2Vy
ZVNjYW5uZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFtdIHsKLSAgICAgICAgICAgIFdlYlByb2Nlc3NQcm94eTo6bm90aWZ5UGFnZVN0
YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NlZCgpOwotICAgICAgICB9KTsKLSAgICB9KTsK
LX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omhhc1N0b3JhZ2VB
Y2Nlc3MoY29uc3QgU3RyaW5nJiBzdWJGcmFtZVByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYg
dG9wRnJhbWVQcmltYXJ5RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0g
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvJiBzdWJGcmFtZVN0YXRp
c3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oc3ViRnJhbWVQ
cmltYXJ5RG9tYWluKTsKLSAgICBpZiAoc2hvdWxkQmxvY2tBbmRQdXJnZUNvb2tpZXMoc3ViRnJh
bWVTdGF0aXN0aWMpKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghc2hvdWxkQmxvY2tBbmRLZWVwQ29va2llcyhz
dWJGcmFtZVN0YXRpc3RpYykpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0
b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgc3ViRnJhbWVQcmltYXJ5RG9tYWluID0gc3ViRnJhbWVQ
cmltYXJ5RG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZVByaW1hcnlEb21haW4gPSB0b3BG
cmFtZVByaW1hcnlEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJRCwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAg
ICAgICAgc3RvcmUtPmNhbGxIYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyKHN1YkZyYW1l
UHJpbWFyeURvbWFpbiwgdG9wRnJhbWVQcmltYXJ5RG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIFtz
dG9yZSA9IHN0b3JlLmNvcHlSZWYoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oYm9vbCByZXN1bHQpIG11dGFibGUgewotICAgICAgICAgICAgc3RvcmUt
PnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCByZXN1bHRdICgpIG11dGFibGUgewotICAgICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKHJlc3VsdCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7
Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpy
ZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBzdWJGcmFtZVByaW1hcnlEb21haW4sIFN0cmlu
ZyYmIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFn
ZUlELCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFj
Y2Vzc1N0YXR1cyk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0KLSAgICBhdXRvJiBzdWJGcmFtZVN0YXRpc3RpYyA9IGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oc3ViRnJhbWVQcmltYXJ5RG9tYWluKTsKLSAg
ICBpZiAoc2hvdWxkQmxvY2tBbmRQdXJnZUNvb2tpZXMoc3ViRnJhbWVTdGF0aXN0aWMpKSB7Ci0j
aWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9k
ZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJDYW5ub3Qg
Z3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJXtwdWJsaWN9cyBzaW5jZSBpdHMgY29va2llcyBhcmUg
YmxvY2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBhbmQgaXQgaGFzIG5vdCByZWNlaXZlZCB1
c2VyIGludGVyYWN0aW9uIGFzIGZpcnN0LXBhcnR5LiIsIHN1YkZyYW1lUHJpbWFyeURvbWFpbi51
dGY4KCkuZGF0YSgpKTsKLSNlbmRpZgotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdl
QWNjZXNzU3RhdHVzOjpDYW5ub3RSZXF1ZXN0QWNjZXNzKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmICghc2hvdWxkQmxvY2tBbmRLZWVwQ29va2llcyhzdWJGcmFtZVN0YXRpc3Rp
YykpIHsKLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICAgICAgUkVMRUFTRV9MT0dfSU5G
T19JRihtX2RlYnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Zywg
Ik5vIG5lZWQgdG8gZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJXtwdWJsaWN9cyBzaW5jZSBpdHMg
Y29va2llcyBhcmUgbm90IGJsb2NrZWQgaW4gdGhpcmQtcGFydHkgY29udGV4dHMuIiwgc3ViRnJh
bWVQcmltYXJ5RG9tYWluLnV0ZjgoKS5kYXRhKCkpOwotI2VuZGlmCi0gICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKFN0b3JhZ2VBY2Nlc3NTdGF0dXM6Okhhc0FjY2Vzcyk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBhdXRvIHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIgPSBwcm9tcHRFbmFi
bGVkICYmIGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQoc3ViRnJhbWVT
dGF0aXN0aWMsIHRvcEZyYW1lUHJpbWFyeURvbWFpbik7Ci0gICAgaWYgKHByb21wdEVuYWJsZWQg
JiYgIXVzZXJXYXNQcm9tcHRlZEVhcmxpZXIpIHsKLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
LSAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRihtX2RlYnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvIGFzayB0aGUgdXNlciB3aGV0aGVyIHRo
ZXkgd2FudCB0byBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAle3B1YmxpY31zIHVuZGVyICV7cHVi
bGljfXMgb3Igbm90LiIsIHN1YkZyYW1lUHJpbWFyeURvbWFpbi51dGY4KCkuZGF0YSgpLCB0b3BG
cmFtZVByaW1hcnlEb21haW4udXRmOCgpLmRhdGEoKSk7Ci0jZW5kaWYKLSAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6UmVxdWlyZXNVc2VyUHJvbXB0KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAodXNlcldhc1Byb21wdGVkRWFybGllcikgewot
I2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKG1f
ZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiU3RvcmFn
ZSBhY2Nlc3Mgd2FzIGdyYW50ZWQgdG8gJXtwdWJsaWN9cyB1bmRlciAle3B1YmxpY31zLiIsIHN1
YkZyYW1lUHJpbWFyeURvbWFpbi51dGY4KCkuZGF0YSgpLCB0b3BGcmFtZVByaW1hcnlEb21haW4u
dXRmOCgpLmRhdGEoKSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBzdWJGcmFtZVN0YXRpc3RpYy50
aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJKys7Ci0KLSAgICBn
cmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChXVEZNb3ZlKHN1YkZyYW1lUHJpbWFyeURvbWFpbiks
IFdURk1vdmUodG9wRnJhbWVQcmltYXJ5RG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2Fz
UHJvbXB0ZWRFYXJsaWVyLCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0gKGJvb2wgd2FzR3JhbnRlZEFjY2VzcykgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKHdhc0dyYW50ZWRBY2Nlc3MgPyBTdG9yYWdlQWNjZXNzU3RhdHVzOjpIYXNB
Y2Nlc3MgOiBTdG9yYWdlQWNjZXNzU3RhdHVzOjpDYW5ub3RSZXF1ZXN0QWNjZXNzKTsKLSAgICB9
KTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlcXVlc3RT
dG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoU3RyaW5nJiYgcHJpbWFyeURvbWFpbkluTmVlZE9mU3Rv
cmFnZUFjY2VzcywgdWludDY0X3Qgb3BlbmVyUGFnZUlELCBTdHJpbmcmJiBvcGVuZXJQcmltYXJ5
RG9tYWluKQotewotICAgIEFTU0VSVChwcmltYXJ5RG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNz
ICE9IG9wZW5lclByaW1hcnlEb21haW4pOwotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgaWYgKHByaW1hcnlEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgPT0gb3BlbmVy
UHJpbWFyeURvbWFpbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgZG9tYWluSW5OZWVk
T2ZTdG9yYWdlQWNjZXNzU3RhdGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJp
bWFyeURvbWFpbihwcmltYXJ5RG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzKTsKLSAgICBhdXRv
IGNvb2tpZXNCbG9ja2VkQW5kUHVyZ2VkID0gc2hvdWxkQmxvY2tBbmRQdXJnZUNvb2tpZXMoZG9t
YWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzU3RhdGlzdGljKTsKLQotICAgIC8vIFRoZSBkb21haW4g
YWxyZWFkeSBoYXMgYWNjZXNzIGlmIGl0cyBjb29raWVzIGFyZSBub3QgYmxvY2tlZC4KLSAgICBp
ZiAoIWNvb2tpZXNCbG9ja2VkQW5kUHVyZ2VkICYmICFzaG91bGRCbG9ja0FuZEtlZXBDb29raWVz
KGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzc1N0YXRpc3RpYykpCi0gICAgICAgIHJldHVybjsK
LQotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9k
ZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJbVGVtcG9y
YXJ5IGNvbWJhdGliaWxpdHkgZml4XSBTdG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCBmb3IgJXtw
dWJsaWN9cyB1bmRlciBvcGVuZXIgcGFnZSBmcm9tICV7cHVibGljfXMsIHdpdGggdXNlciBpbnRl
cmFjdGlvbiBpbiB0aGUgb3BlbmVkIHdpbmRvdy4iLCBwcmltYXJ5RG9tYWluSW5OZWVkT2ZTdG9y
YWdlQWNjZXNzLnV0ZjgoKS5kYXRhKCksIG9wZW5lclByaW1hcnlEb21haW4udXRmOCgpLmRhdGEo
KSk7Ci0jZW5kaWYKLSAgICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChXVEZNb3ZlKHByaW1h
cnlEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MpLCBXVEZNb3ZlKG9wZW5lclByaW1hcnlEb21h
aW4pLCBXVEY6Om51bGxvcHQsIG9wZW5lclBhZ2VJRCwgZmFsc2UsIFtdKGJvb2wpIHsgfSk7Ci19
Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpncmFudFN0b3JhZ2VB
Y2Nlc3MoU3RyaW5nJiYgc3ViRnJhbWVIb3N0LCBTdHJpbmcmJiB0b3BGcmFtZUhvc3QsIHVpbnQ2
NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIHN1YkZyYW1lUHJpbWFyeURv
bWFpbiA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlEb21haW4oc3ViRnJhbWVIb3N0
KTsKLSAgICBhdXRvIHRvcEZyYW1lUHJpbWFyeURvbWFpbiA9IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M6OnByaW1hcnlEb21haW4odG9wRnJhbWVIb3N0KTsKLSAgICBpZiAodXNlcldhc1Byb21wdGVk
Tm93KSB7Ci0gICAgICAgIGF1dG8mIHN1YkZyYW1lU3RhdGlzdGljID0gZW5zdXJlUmVzb3VyY2VT
dGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihzdWJGcmFtZVByaW1hcnlEb21haW4pOwotICAgICAg
ICBBU1NFUlQoc3ViRnJhbWVTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uKTsKLSAgICAgICAg
c3ViRnJhbWVTdGF0aXN0aWMuc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZCh0
b3BGcmFtZVByaW1hcnlEb21haW4pOwotICAgIH0KLSAgICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRl
cm5hbChXVEZNb3ZlKHN1YkZyYW1lUHJpbWFyeURvbWFpbiksIFdURk1vdmUodG9wRnJhbWVQcmlt
YXJ5RG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0ZWROb3csIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFN0cmluZyYmIHN1YkZyYW1lUHJp
bWFyeURvbWFpbiwgU3RyaW5nJiYgdG9wRnJhbWVQcmltYXJ5RG9tYWluLCBPcHRpb25hbDx1aW50
NjRfdD4gZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBib29sIHVzZXJXYXNQcm9tcHRlZE5vd09y
RWFybGllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjYWxsYmFjaykKLXsKLSAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChzdWJGcmFtZVByaW1hcnlE
b21haW4gPT0gdG9wRnJhbWVQcmltYXJ5RG9tYWluKSB7Ci0gICAgICAgIGNhbGxiYWNrKHRydWUp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFJlbW92ZSBtX3N0b3Jh
Z2VBY2Nlc3NQcm9tcHRzRW5hYmxlZCBjaGVjayBpZiBwcm9tcHRpbmcgaXMgbm8gbG9uZ2VyIGV4
cGVyaW1lbnRhbC4KLSAgICBpZiAodXNlcldhc1Byb21wdGVkTm93T3JFYXJsaWVyICYmIG1fc3Rv
cmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkKSB7Ci0gICAgICAgIGF1dG8mIHN1YkZyYW1lU3RhdGlz
dGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihzdWJGcmFtZVBy
aW1hcnlEb21haW4pOwotICAgICAgICBBU1NFUlQoc3ViRnJhbWVTdGF0aXN0aWMuaGFkVXNlcklu
dGVyYWN0aW9uKTsKLSAgICAgICAgQVNTRVJUKHN1YkZyYW1lU3RhdGlzdGljLnN0b3JhZ2VBY2Nl
c3NVbmRlclRvcEZyYW1lT3JpZ2lucy5jb250YWlucyh0b3BGcmFtZVByaW1hcnlEb21haW4pKTsK
LSAgICAgICAgc3ViRnJhbWVTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUg
PSBXYWxsVGltZTo6bm93KCk7Ci0gICAgfQotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFtzdWJGcmFtZVByaW1hcnlEb21haW4gPSBzdWJGcmFtZVByaW1hcnlEb21haW4uaXNvbGF0ZWRD
b3B5KCksIHRvcEZyYW1lUHJpbWFyeURvbWFpbiA9IHRvcEZyYW1lUHJpbWFyeURvbWFpbi5pc29s
YXRlZENvcHkoKSwgZnJhbWVJRCwgcGFnZUlELCBzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGNh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7Ci0gICAgICAgIHN0b3JlLT5j
YWxsR3JhbnRTdG9yYWdlQWNjZXNzSGFuZGxlcihzdWJGcmFtZVByaW1hcnlEb21haW4sIHRvcEZy
YW1lUHJpbWFyeURvbWFpbiwgZnJhbWVJRCwgcGFnZUlELCBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKSwgc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCldKGJvb2wgdmFsdWUpIG11dGFibGUgewot
ICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFtjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spLCB2YWx1ZV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAg
Y2FsbGJhY2sodmFsdWUpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwot
fQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbmRmYXRoZXJF
eGlzdGluZ1dlYnNpdGVEYXRhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykK
LXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIGNhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayksIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5u
ZWQgPSBtX3BhcmFtZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nh
bm5lZCwgd29ya1F1ZXVlID0gbV93b3JrUXVldWUuY29weVJlZigpXSAoKSBtdXRhYmxlIHsKLSAg
ICAgICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIGJlaW5nIGEgc3RhdGljIGNhbGwgb24gV2ViUHJv
Y2Vzc1Byb3h5IGlzIHdyb25nLgotICAgICAgICAvLyBJdCBzaG91bGQgYmUgb24gdGhlIGRhdGEg
c3RvcmUgdGhhdCB0aGlzIG9iamVjdCBiZWxvbmdzIHRvLgotICAgICAgICBXZWJQcm9jZXNzUHJv
eHk6OnRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zV2l0aFdlYnNpdGVEYXRhKFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bW9uaXRvcmVkRGF0YVR5cGVzKCksIHNob3VsZE5vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQsIFt3ZWFrVGhpcyA9IFdURk1vdmUod2Vh
a1RoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB3b3JrUXVldWUgPSB3b3JrUXVl
dWUuY29weVJlZigpXSAoSGFzaFNldDxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERv
bWFpbnNXaXRoV2Vic2l0ZURhdGEpIG11dGFibGUgewotICAgICAgICAgICAgd29ya1F1ZXVlLT5k
aXNwYXRjaChbd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgdG9wRG9tYWlucyA9IGNyb3Nz
VGhyZWFkQ29weSh0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1dpdGhXZWJzaXRlRGF0YSks
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldICgpIG11dGFibGUgewotICAgICAgICAgICAg
ICAgIGlmICghd2Vha1RoaXMpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGZvciAoYXV0byYgdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbiA6IHRvcERvbWFp
bnMpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byYgc3RhdGlzdGljID0gd2Vha1RoaXMtPmVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odG9wUHJpdmF0ZWx5Q29udHJv
bGxlZERvbWFpbik7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpYy5ncmFuZGZhdGhlcmVk
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgd2Vha1RoaXMtPm1f
ZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA9IFdhbGxUaW1lOjpub3coKSArIHdlYWtUaGlz
LT5tX3BhcmFtZXRlcnMuZ3JhbmRmYXRoZXJpbmdUaW1lOwotICAgICAgICAgICAgICAgIGlmICh3
ZWFrVGhpcy0+bV9wZXJzaXN0ZW50U3RvcmFnZSkKLSAgICAgICAgICAgICAgICAgICAgd2Vha1Ro
aXMtPm1fcGVyc2lzdGVudFN0b3JhZ2UtPnNjaGVkdWxlT3JXcml0ZU1lbW9yeVN0b3JlKFJlc291
cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6Rm9yY2VJbW1lZGlhdGVXcml0ZTo6
WWVzKTsKLSAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICAgICAgICAgIHdlYWtU
aGlzLT5sb2dUZXN0aW5nRXZlbnQoIkdyYW5kZmF0aGVyZWQiX3MpOwotICAgICAgICAgICAgfSk7
Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi1WZWN0b3I8U3RyaW5nPiBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9k
ZSgpCi17Ci0gICAgaWYgKCFtX2RlYnVnTW9kZUVuYWJsZWQpCi0gICAgICAgIHJldHVybiB7IH07
Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiBwcmltYXJ5RG9tYWluc1RvQmxvY2s7Ci0gICAgcHJpbWFy
eURvbWFpbnNUb0Jsb2NrLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMik7Ci0KLSAgICBhdXRvJiBz
dGF0aWNTZXNvdXJjZVN0YXRpc3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1h
cnlEb21haW4oZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSk7Ci0gICAgc2V0UHJldmFsZW50
UmVzb3VyY2Uoc3RhdGljU2Vzb3VyY2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6
OkhpZ2gpOwotICAgIHByaW1hcnlEb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQoZGVidWdT
dGF0aWNQcmV2YWxlbnRSZXNvdXJjZSk7Ci0KLSAgICBpZiAoIW1fZGVidWdNYW51YWxQcmV2YWxl
bnRSZXNvdXJjZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byYgbWFudWFsUmVzb3VyY2VTdGF0
aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKG1fZGVidWdN
YW51YWxQcmV2YWxlbnRSZXNvdXJjZSk7Ci0gICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKG1h
bnVhbFJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKLSAg
ICAgICAgcHJpbWFyeURvbWFpbnNUb0Jsb2NrLnVuY2hlY2tlZEFwcGVuZChtX2RlYnVnTWFudWFs
UHJldmFsZW50UmVzb3VyY2UpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcHJpbWFyeURvbWFp
bnNUb0Jsb2NrOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sIGVuYWJsZSkKLXsKLSAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIG1fZGVidWdNb2RlRW5hYmxlZCA9IGVu
YWJsZTsKLSAgICBtX2RlYnVnTG9nZ2luZ0VuYWJsZWQgPSBlbmFibGU7Ci0KLSAgICBlbnN1cmVQ
cmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNv
bnN0IFN0cmluZyYgZG9tYWluKQotewotICAgIGlmICghbV9kZWJ1Z01vZGVFbmFibGVkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBkb21h
aW47Ci0gICAgYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JQcmltYXJ5RG9tYWluKGRvbWFpbik7Ci0gICAgc2V0UHJldmFsZW50UmVzb3VyY2UocmVz
b3VyY2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOwotCi0jaWYgIVJF
TEVBU0VfTE9HX0RJU0FCTEVECi0gICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGVidWcsICJEaWQgc2V0ICV7cHVibGljfXMgYXMgcHJldmFsZW50IHJlc291cmNlIGZv
ciB0aGUgcHVycG9zZXMgb2YgSVRQIERlYnVnIE1vZGUuIiwgZG9tYWluLnV0ZjgoKS5kYXRhKCkp
OwotI2VuZGlmCi19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpz
Y2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCkKLXsKLSAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIG1fcGVuZGluZ1N0YXRpc3RpY3NQcm9j
ZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgPSArK21fbGFzdFN0YXRpc3RpY3NQcm9jZXNzaW5nUmVx
dWVzdElkZW50aWZpZXI7Ci0gICAgbV93b3JrUXVldWUtPmRpc3BhdGNoQWZ0ZXIobWluaW11bVN0
YXRpc3RpY3NQcm9jZXNzaW5nSW50ZXJ2YWwsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRy
KCp0aGlzKSwgc3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciA9ICptX3BlbmRp
bmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyXSB7Ci0gICAgICAgIGlmICgh
d2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCFtX3BlbmRpbmdT
dGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyIHx8ICptX3BlbmRpbmdTdGF0aXN0
aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyICE9IHN0YXRpc3RpY3NQcm9jZXNzaW5nUmVx
dWVzdElkZW50aWZpZXIpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgcmVxdWVzdCBoYXMgYmVlbiBj
YW5jZWxlZC4KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHVwZGF0
ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9KTsKLSAgICAgICAgcHJvY2Vzc1N0YXRpc3RpY3NBbmRE
YXRhUmVjb3JkcygpOwotICAgIH0pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6Y2FuY2VsUGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpCi17
Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX3BlbmRpbmdTdGF0aXN0
aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyID0gV1RGOjpudWxsb3B0OwotfQotCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNv
bnN0IFN0cmluZyYgdGFyZ2V0UHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiBtYWluRnJhbWVQ
cmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHNvdXJjZVByaW1hcnlEb21haW4sIGNvbnN0IFN0
cmluZyYgdGFyZ2V0SG9zdCwgY29uc3QgU3RyaW5nJiBtYWluRnJhbWVIb3N0LCBib29sIGlzUmVk
aXJlY3QsIGJvb2wgaXNNYWluRnJhbWUpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0KLSAgICBib29sIGFyZVRhcmdldEFuZE1haW5GcmFtZURvbWFpbnNBc3NvY2lhdGVkID0g
dGFyZ2V0UHJpbWFyeURvbWFpbiA9PSBtYWluRnJhbWVQcmltYXJ5RG9tYWluOwotICAgIGJvb2wg
YXJlVGFyZ2V0QW5kU291cmNlRG9tYWluc0Fzc29jaWF0ZWQgPSB0YXJnZXRQcmltYXJ5RG9tYWlu
ID09IHNvdXJjZVByaW1hcnlEb21haW47Ci0KLSAgICBib29sIHN0YXRpc3RpY3NXZXJlVXBkYXRl
ZCA9IGZhbHNlOwotICAgIGlmICghaXNNYWluRnJhbWUgJiYgdGFyZ2V0SG9zdCAhPSBtYWluRnJh
bWVIb3N0ICYmICEoYXJlVGFyZ2V0QW5kTWFpbkZyYW1lRG9tYWluc0Fzc29jaWF0ZWQgfHwgYXJl
VGFyZ2V0QW5kU291cmNlRG9tYWluc0Fzc29jaWF0ZWQpKSB7Ci0gICAgICAgIGF1dG8mIHRhcmdl
dFN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRh
cmdldFByaW1hcnlEb21haW4pOwotICAgICAgICB0YXJnZXRTdGF0aXN0aWNzLmxhc3RTZWVuID0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6cmVkdWNlVGltZVJlc29sdXRpb24oV2FsbFRpbWU6Om5v
dygpKTsKLSAgICAgICAgaWYgKHRhcmdldFN0YXRpc3RpY3Muc3ViZnJhbWVVbmRlclRvcEZyYW1l
T3JpZ2lucy5hZGQobWFpbkZyYW1lUHJpbWFyeURvbWFpbikuaXNOZXdFbnRyeSkKLSAgICAgICAg
ICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGlzUmVk
aXJlY3QgJiYgIWFyZVRhcmdldEFuZFNvdXJjZURvbWFpbnNBc3NvY2lhdGVkKSB7Ci0gICAgICAg
IGlmIChpc01haW5GcmFtZSkgewotICAgICAgICAgICAgYXV0byYgcmVkaXJlY3RpbmdPcmlnaW5T
dGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihzb3Vy
Y2VQcmltYXJ5RG9tYWluKTsKLSAgICAgICAgICAgIGlmIChyZWRpcmVjdGluZ09yaWdpblN0YXRp
c3RpY3MudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby5hZGQodGFyZ2V0UHJpbWFyeURvbWFpbiku
aXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVl
OwotICAgICAgICAgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclByaW1hcnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFpbik7Ci0gICAgICAgICAg
ICBpZiAodGFyZ2V0U3RhdGlzdGljcy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20uYWRkKHNv
dXJjZVByaW1hcnlEb21haW4pLmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAgc3RhdGlzdGlj
c1dlcmVVcGRhdGVkID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8m
IHJlZGlyZWN0aW5nT3JpZ2luU3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0Zv
clByaW1hcnlEb21haW4oc291cmNlUHJpbWFyeURvbWFpbik7Ci0gICAgICAgICAgICBpZiAocmVk
aXJlY3RpbmdPcmlnaW5TdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uYWRk
KHRhcmdldFByaW1hcnlEb21haW4pLmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAgc3RhdGlz
dGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGF1dG8mIHRhcmdldFN0YXRpc3Rp
Y3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1h
cnlEb21haW4pOwotICAgICAgICAgICAgaWYgKHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNGcm9tLmFkZChzb3VyY2VQcmltYXJ5RG9tYWluKS5pc05ld0VudHJ5KQot
ICAgICAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAoc3RhdGlzdGljc1dlcmVVcGRhdGVkKQotICAgICAgICBzY2hlZHVs
ZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7Ci19Ci0KLXZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3Qg
U3RyaW5nJiBwcmltYXJ5RG9tYWluKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclBy
aW1hcnlEb21haW4ocHJpbWFyeURvbWFpbik7Ci0gICAgc3RhdGlzdGljcy5oYWRVc2VySW50ZXJh
Y3Rpb24gPSB0cnVlOwotICAgIHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRp
bWUgPSBXYWxsVGltZTo6bm93KCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIHByaW1hcnlEb21h
aW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvJiBzdGF0
aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5
RG9tYWluKTsKLSAgICBzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlOwotICAg
IHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPSB7IH07Ci19Ci0KLWJv
b2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rp
b24oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwotCi0gICAgYXV0byBtYXBFbnRyeSA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFw
LmZpbmQocHJpbWFyeURvbWFpbik7Ci0gICAgcmV0dXJuIG1hcEVudHJ5ID09IG1fcmVzb3VyY2VT
dGF0aXN0aWNzTWFwLmVuZCgpID8gZmFsc2U6IGhhc0hhZFVuZXhwaXJlZFJlY2VudFVzZXJJbnRl
cmFjdGlvbihtYXBFbnRyeS0+dmFsdWUpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2UgbmV3
UHJldmFsZW5jZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHJl
c291cmNlU3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UgPSB0cnVlOwotICAgIHJlc291cmNl
U3RhdGlzdGljLmlzVmVyeVByZXZhbGVudFJlc291cmNlID0gbmV3UHJldmFsZW5jZSA9PSBSZXNv
dXJjZUxvYWRQcmV2YWxlbmNlOjpWZXJ5SGlnaDsKLSAgICBIYXNoU2V0PFN0cmluZz4gZG9tYWlu
c1RoYXRIYXZlUmVkaXJlY3RlZFRvOwotICAgIHJlY3Vyc2l2ZWx5R2V0QWxsRG9tYWluc1RoYXRI
YXZlUmVkaXJlY3RlZFRvVGhpc0RvbWFpbihyZXNvdXJjZVN0YXRpc3RpYywgZG9tYWluc1RoYXRI
YXZlUmVkaXJlY3RlZFRvLCAwKTsKLSAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnNUaGF0
SGF2ZVJlZGlyZWN0ZWRUbykgewotICAgICAgICBhdXRvIG1hcEVudHJ5ID0gbV9yZXNvdXJjZVN0
YXRpc3RpY3NNYXAuZmluZChkb21haW4pOwotICAgICAgICBpZiAobWFwRW50cnkgPT0gbV9yZXNv
dXJjZVN0YXRpc3RpY3NNYXAuZW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
QVNTRVJUKCFtYXBFbnRyeS0+dmFsdWUuaXNQcmV2YWxlbnRSZXNvdXJjZSk7Ci0gICAgICAgIG1h
cEVudHJ5LT52YWx1ZS5pc1ByZXZhbGVudFJlc291cmNlID0gdHJ1ZTsKLSAgICB9Ci19Ci0gICAg
Ci1TdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpkdW1wUmVzb3VyY2VM
b2FkU3RhdGlzdGljcygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
Ci0KLSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgi
UmVzb3VyY2UgbG9hZCBzdGF0aXN0aWNzOlxuXG4iKTsKLSAgICBmb3IgKGF1dG8mIG1hcEVudHJ5
IDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpCi0gICAgICAgIHJlc3VsdC5hcHBl
bmQobWFwRW50cnkudG9TdHJpbmcoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwot
fQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNQcmV2YWxlbnRS
ZXNvdXJjZShjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIG1hcEVudHJ5ID0gbV9yZXNvdXJjZVN0
YXRpc3RpY3NNYXAuZmluZChwcmltYXJ5RG9tYWluKTsKLSAgICByZXR1cm4gbWFwRW50cnkgPT0g
bV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5kKCkgPyBmYWxzZSA6IG1hcEVudHJ5LT52YWx1ZS5p
c1ByZXZhbGVudFJlc291cmNlOwotfQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9t
YWluKSBjb25zdAotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0
byBtYXBFbnRyeSA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmZpbmQocHJpbWFyeURvbWFpbik7
Ci0gICAgcmV0dXJuIG1hcEVudHJ5ID09IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuZCgpID8g
ZmFsc2UgOiBtYXBFbnRyeS0+dmFsdWUuaXNQcmV2YWxlbnRSZXNvdXJjZSAmJiBtYXBFbnRyeS0+
dmFsdWUuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2U7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3Qg
U3RyaW5nJiBzdWJyZXNvdXJjZVByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgdG9wRnJhbWVQ
cmltYXJ5RG9tYWluKSBjb25zdAotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
Ci0gICAgYXV0byBtYXBFbnRyeSA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmZpbmQoc3VicmVz
b3VyY2VQcmltYXJ5RG9tYWluKTsKLSAgICByZXR1cm4gbWFwRW50cnkgPT0gbV9yZXNvdXJjZVN0
YXRpc3RpY3NNYXAuZW5kKCkgPyBmYWxzZSA6IG1hcEVudHJ5LT52YWx1ZS5zdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVPcmlnaW5zLmNvbnRhaW5zKHRvcEZyYW1lUHJpbWFyeURvbWFpbik7Ci19Ci0K
LWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1
YkZyYW1lVW5kZXIoY29uc3QgU3RyaW5nJiBzdWJGcmFtZVByaW1hcnlEb21haW4sIGNvbnN0IFN0
cmluZyYgdG9wRnJhbWVQcmltYXJ5RG9tYWluKSBjb25zdAotewotICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwotCi0gICAgYXV0byBtYXBFbnRyeSA9IG1fcmVzb3VyY2VTdGF0aXN0aWNz
TWFwLmZpbmQoc3ViRnJhbWVQcmltYXJ5RG9tYWluKTsKLSAgICByZXR1cm4gbWFwRW50cnkgPT0g
bV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5kKCkgPyBmYWxzZSA6IG1hcEVudHJ5LT52YWx1ZS5z
dWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmNvbnRhaW5zKHRvcEZyYW1lUHJpbWFyeURvbWFp
bik7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1JlZ2lz
dGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgU3RyaW5nJiBob3N0UmVkaXJlY3RlZEZyb21Qcmlt
YXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIGhvc3RSZWRpcmVjdGVkVG9QcmltYXJ5RG9tYWluKSBj
b25zdAotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byBtYXBF
bnRyeSA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmZpbmQoaG9zdFJlZGlyZWN0ZWRGcm9tUHJp
bWFyeURvbWFpbik7Ci0gICAgcmV0dXJuIG1hcEVudHJ5ID09IG1fcmVzb3VyY2VTdGF0aXN0aWNz
TWFwLmVuZCgpID8gZmFsc2UgOiBtYXBFbnRyeS0+dmFsdWUuc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUby5jb250YWlucyhob3N0UmVkaXJlY3RlZFRvUHJpbWFyeURvbWFpbik7Ci19Ci0KLXZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291
cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4pOwotICAgIHN0YXRpc3RpY3MuaXNQ
cmV2YWxlbnRSZXNvdXJjZSA9IGZhbHNlOwotICAgIHN0YXRpc3RpY3MuaXNWZXJ5UHJldmFsZW50
UmVzb3VyY2UgPSBmYWxzZTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBib29s
IHZhbHVlKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byYg
c3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJp
bWFyeURvbWFpbik7Ci0gICAgc3RhdGlzdGljcy5ncmFuZGZhdGhlcmVkID0gdmFsdWU7Ci19Ci0K
LWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc0dyYW5kZmF0aGVyZWQo
Y29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKSBjb25zdAotewotICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwotCi0gICAgYXV0byBtYXBFbnRyeSA9IG1fcmVzb3VyY2VTdGF0aXN0aWNz
TWFwLmZpbmQocHJpbWFyeURvbWFpbik7Ci0gICAgcmV0dXJuIG1hcEVudHJ5ID09IG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLmVuZCgpID8gZmFsc2UgOiBtYXBFbnRyeS0+dmFsdWUuZ3JhbmRmYXRo
ZXJlZDsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1
YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihjb25zdCBTdHJpbmcmIHByaW1hcnlTdWJGcmFtZURv
bWFpbiwgY29uc3QgU3RyaW5nJiBwcmltYXJ5VG9wRnJhbWVEb21haW4pCi17Ci0gICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5U3ViRnJhbWVEb21haW4pOwot
ICAgIHN0YXRpc3RpY3Muc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucy5hZGQocHJpbWFyeVRv
cEZyYW1lRG9tYWluKTsKLSAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNv
IGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgdG9wIGZyYW1lIGRvbWFpbi4KLSAgICBl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlUb3BGcmFtZURv
bWFpbik7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRT
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgU3RyaW5nJiBwcmltYXJ5U3VicmVz
b3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYgcHJpbWFyeVRvcEZyYW1lRG9tYWluKQotewotICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byYgc3RhdGlzdGljcyA9IGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeVN1YnJlc291cmNl
RG9tYWluKTsKLSAgICBzdGF0aXN0aWNzLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMu
YWRkKHByaW1hcnlUb3BGcmFtZURvbWFpbik7Ci0gICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtl
IHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHRvcCBmcmFtZSBk
b21haW4uCi0gICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmlt
YXJ5VG9wRnJhbWVEb21haW4pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN0cmluZyYgcHJp
bWFyeVN1YnJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIHByaW1hcnlSZWRpcmVjdERvbWFp
bikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8mIHN0YXRp
c3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlT
dWJyZXNvdXJjZURvbWFpbik7Ci0gICAgc3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvLmFkZChwcmltYXJ5UmVkaXJlY3REb21haW4pOwotICAgIC8vIEZvciBjb25zaXN0ZW5j
eSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRp
cmVjdCBkb21haW4uCi0gICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFp
bihwcmltYXJ5UmVkaXJlY3REb21haW4pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3Ry
aW5nJiBwcmltYXJ5U3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYgcHJpbWFyeVJlZGly
ZWN0RG9tYWluKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0
byYgc3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4o
cHJpbWFyeVN1YnJlc291cmNlRG9tYWluKTsKLSAgICBzdGF0aXN0aWNzLnN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzRnJvbS5hZGQocHJpbWFyeVJlZGlyZWN0RG9tYWluKTsKLSAgICAvLyBGb3Ig
Y29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZv
ciB0aGUgcmVkaXJlY3QgZG9tYWluLgotICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclBy
aW1hcnlEb21haW4ocHJpbWFyeVJlZGlyZWN0RG9tYWluKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25z
dCBTdHJpbmcmIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiBwcmltYXJ5UmVk
aXJlY3REb21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBh
dXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFp
bih0b3BGcmFtZVByaW1hcnlEb21haW4pOwotICAgIHN0YXRpc3RpY3MudG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUby5hZGQocHJpbWFyeVJlZGlyZWN0RG9tYWluKTsKLSAgICAvLyBGb3IgY29uc2lz
dGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUg
cmVkaXJlY3QgZG9tYWluLgotICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlE
b21haW4ocHJpbWFyeVJlZGlyZWN0RG9tYWluKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFN0
cmluZyYgdG9wRnJhbWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHByaW1hcnlSZWRpcmVj
dERvbWFpbikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8m
IHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRv
cEZyYW1lUHJpbWFyeURvbWFpbik7Ci0gICAgc3RhdGlzdGljcy50b3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c0Zyb20uYWRkKHByaW1hcnlSZWRpcmVjdERvbWFpbik7Ci0gICAgLy8gRm9yIGNvbnNpc3Rl
bmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHJl
ZGlyZWN0IGRvbWFpbi4KLSAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9t
YWluKHByaW1hcnlSZWRpcmVjdERvbWFpbik7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMgc2Vj
b25kcykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQoc2Vj
b25kcyA+PSAwX3MpOwotCi0gICAgbV9wYXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rp
b24gPSBzZWNvbmRzOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNlY29uZHMgc2Vjb25k
cykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQoc2Vjb25k
cyA+PSAwX3MpOwotCi0gICAgbV9wYXJhbWV0ZXJzLm1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNv
cmRzUmVtb3ZhbCA9IHNlY29uZHM7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzKQotewotICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7
Ci0KLSAgICBtX3BhcmFtZXRlcnMuZ3JhbmRmYXRoZXJpbmdUaW1lID0gc2Vjb25kczsKLX0KLQot
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldENhY2hlTWF4QWdlQ2Fw
KFNlY29uZHMgc2Vjb25kcykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAg
ICBBU1NFUlQoc2Vjb25kcyA+PSAwX3MpOwotCi0gICAgbV9wYXJhbWV0ZXJzLmNhY2hlTWF4QWdl
Q2FwVGltZSA9IHNlY29uZHM7Ci0gICAgdXBkYXRlQ2FjaGVNYXhBZ2VDYXAoKTsKLX0KLQotdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNhY2hlTWF4QWdlQ2Fw
KCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgc2Vjb25kcyA9IG1f
cGFyYW1ldGVycy5jYWNoZU1heEFnZUNhcFRpbWVdICgpIHsKLSAgICAgICAgc3RvcmUtPnNldENh
Y2hlTWF4QWdlQ2FwKHNlY29uZHMsIFtdIHsgfSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2ll
cyhTZWNvbmRzIHNlY29uZHMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0g
ICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKLSAgICAKLSAgICBtX3BhcmFtZXRlcnMuY2xpZW50
U2lkZUNvb2tpZXNBZ2VDYXBUaW1lID0gc2Vjb25kczsKLSAgICB1cGRhdGVDbGllbnRTaWRlQ29v
a2llc0FnZUNhcCgpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6dXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKQotewotICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwotCi0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgc2Vj
b25kcyA9IG1fcGFyYW1ldGVycy5jbGllbnRTaWRlQ29va2llc0FnZUNhcFRpbWVdICgpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBzdG9yZS0+d2Vic2l0ZURhdGFTdG9y
ZSgpKQotICAgICAgICAgICAgd2Vic2l0ZURhdGFTdG9yZS0+c2V0QWdlQ2FwRm9yQ2xpZW50U2lk
ZUNvb2tpZXMoc2Vjb25kcywgW10geyB9KTsKLSAgICB9KTsKLSNlbmRpZgotfQotCi1ib29sIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2hvdWxkUmVtb3ZlRGF0YVJlY29yZHMo
KSBjb25zdAotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKG1f
ZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGZvciAoY29uc3QgYXV0byYgcGx1Z2luIDog
UGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLnBsdWdpblByb2Nlc3NlcygpKSB7Ci0g
ICAgICAgIGlmICghbV9hY3RpdmVQbHVnaW5Ub2tlbnMuY29udGFpbnMocGx1Z2luLT5wbHVnaW5Q
cm9jZXNzVG9rZW4oKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYK
LQotICAgIHJldHVybiAhbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgfHwgTW9ub3Rv
bmljVGltZTo6bm93KCkgPj0gKG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkICsgbV9w
YXJhbWV0ZXJzLm1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk7Ci19Ci0KLXZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXREYXRhUmVjb3Jkc0JlaW5n
UmVtb3ZlZChib29sIHZhbHVlKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
Ci0gICAgbV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCA9IHZhbHVlOwotICAgIGlmIChtX2RhdGFS
ZWNvcmRzQmVpbmdSZW1vdmVkKQotICAgICAgICBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVt
b3ZlZCA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotfQotCi1SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
JiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclByaW1hcnlEb21haW4oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKQotewotICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgcmV0dXJuIG1fcmVzb3VyY2VTdGF0
aXN0aWNzTWFwLmVuc3VyZShwcmltYXJ5RG9tYWluLCBbJnByaW1hcnlEb21haW5dIHsKLSAgICAg
ICAgcmV0dXJuIFJlc291cmNlTG9hZFN0YXRpc3RpY3MocHJpbWFyeURvbWFpbik7Ci0gICAgfSku
aXRlcmF0b3ItPnZhbHVlOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8S2V5ZWRFbmNvZGVyPiBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNyZWF0ZUVuY29kZXJGcm9tRGF0YSgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIGVuY29k
ZXIgPSBLZXllZEVuY29kZXI6OmVuY29kZXIoKTsKLSAgICBlbmNvZGVyLT5lbmNvZGVVSW50MzIo
InZlcnNpb24iLCBzdGF0aXN0aWNzTW9kZWxWZXJzaW9uKTsKLSAgICBlbmNvZGVyLT5lbmNvZGVE
b3VibGUoImVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAiLCBtX2VuZE9mR3JhbmRmYXRoZXJp
bmdUaW1lc3RhbXAuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsKLQotICAgIGVuY29kZXIt
PmVuY29kZU9iamVjdHMoImJyb3dzaW5nU3RhdGlzdGljcyIsIG1fcmVzb3VyY2VTdGF0aXN0aWNz
TWFwLmJlZ2luKCksIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuZCgpLCBbXShLZXllZEVuY29k
ZXImIGVuY29kZXJJbm5lciwgY29uc3QgYXV0byYgb3JpZ2luKSB7Ci0gICAgICAgIG9yaWdpbi52
YWx1ZS5lbmNvZGUoZW5jb2RlcklubmVyKTsKLSAgICB9KTsKLQotICAgIGVuY29kZXItPmVuY29k
ZU9iamVjdHMoIm9wZXJhdGluZ0RhdGVzIiwgbV9vcGVyYXRpbmdEYXRlcy5iZWdpbigpLCBtX29w
ZXJhdGluZ0RhdGVzLmVuZCgpLCBbXShLZXllZEVuY29kZXImIGVuY29kZXJJbm5lciwgT3BlcmF0
aW5nRGF0ZSBkYXRlKSB7Ci0gICAgICAgIGVuY29kZXJJbm5lci5lbmNvZGVEb3VibGUoImRhdGUi
LCBkYXRlLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7Ci0gICAgfSk7Ci0KLSAgICByZXR1
cm4gZW5jb2RlcjsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
Om1lcmdlV2l0aERhdGFGcm9tRGVjb2RlcihLZXllZERlY29kZXImIGRlY29kZXIpCi17Ci0gICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICB1bnNpZ25lZCB2ZXJzaW9uT25EaXNr
OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVVSW50MzIoInZlcnNpb24iLCB2ZXJzaW9uT25EaXNr
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHZlcnNpb25PbkRpc2sgPiBzdGF0aXN0aWNz
TW9kZWxWZXJzaW9uKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRm91bmQgcmVzb3VyY2UgbG9h
ZCBzdGF0aXN0aWNzIG9uIGRpc2sgd2l0aCBtb2RlbCB2ZXJzaW9uICV1IHdoZXJlYXMgdGhlIGhp
Z2hlc3Qgc3VwcG9ydGVkIHZlcnNpb24gaXMgJXUuIFJlc2V0dGluZy4iLCB2ZXJzaW9uT25EaXNr
LCBzdGF0aXN0aWNzTW9kZWxWZXJzaW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGRvdWJsZSBlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wOwotICAgIGlmIChkZWNvZGVyLmRl
Y29kZURvdWJsZSgiZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCIsIGVuZE9mR3JhbmRmYXRo
ZXJpbmdUaW1lc3RhbXApKQotICAgICAgICBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAg
PSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCk7
Ci0gICAgZWxzZQotICAgICAgICBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAgPSB7IH07
Ci0KLSAgICBWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4gbG9hZGVkU3RhdGlzdGljczsK
LSAgICBib29sIHN1Y2NlZWRlZCA9IGRlY29kZXIuZGVjb2RlT2JqZWN0cygiYnJvd3NpbmdTdGF0
aXN0aWNzIiwgbG9hZGVkU3RhdGlzdGljcywgW3ZlcnNpb25PbkRpc2tdKEtleWVkRGVjb2RlciYg
ZGVjb2RlcklubmVyLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXN0aWNzKSB7Ci0gICAg
ICAgIHJldHVybiBzdGF0aXN0aWNzLmRlY29kZShkZWNvZGVySW5uZXIsIHZlcnNpb25PbkRpc2sp
OwotICAgIH0pOwotCi0gICAgaWYgKCFzdWNjZWVkZWQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1lcmdlU3RhdGlzdGljcyhXVEZNb3ZlKGxvYWRlZFN0YXRpc3RpY3MpKTsKLSAgICB1cGRhdGVD
b29raWVCbG9ja2luZyhbXSgpIHsgfSk7Ci0KLSAgICBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4gb3Bl
cmF0aW5nRGF0ZXM7Ci0gICAgc3VjY2VlZGVkID0gZGVjb2Rlci5kZWNvZGVPYmplY3RzKCJvcGVy
YXRpbmdEYXRlcyIsIG9wZXJhdGluZ0RhdGVzLCBbXShLZXllZERlY29kZXImIGRlY29kZXIsIE9w
ZXJhdGluZ0RhdGUmIGRhdGUpIHsKLSAgICAgICAgZG91YmxlIHZhbHVlOwotICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlRG91YmxlKCJkYXRlIiwgdmFsdWUpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIGRhdGUgPSBPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUoV2Fs
bFRpbWU6OmZyb21SYXdTZWNvbmRzKHZhbHVlKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0pOwotCi0gICAgaWYgKCFzdWNjZWVkZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fb3Bl
cmF0aW5nRGF0ZXMgPSBtZXJnZU9wZXJhdGluZ0RhdGVzKG1fb3BlcmF0aW5nRGF0ZXMsIFdURk1v
dmUob3BlcmF0aW5nRGF0ZXMpKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OmNsZWFyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLmNsZWFyKCk7Ci0gICAgbV9vcGVyYXRpbmdEYXRlcy5jbGVhcigpOwot
Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICByZW1vdmVBbGxTdG9yYWdlQWNj
ZXNzKFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7
IH0pOwotCi0gICAgYXV0byBwcmltYXJ5RG9tYWluc1RvQmxvY2sgPSBlbnN1cmVQcmV2YWxlbnRS
ZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKTsKLSAgICB1cGRhdGVDb29raWVCbG9ja2luZ0ZvckRvbWFp
bnMocHJpbWFyeURvbWFpbnNUb0Jsb2NrLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tB
Z2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6Ondhc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rp
b24oY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgY3VycmVudCwgY29uc3QgUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyYgdXBkYXRlZCkgY29uc3QKLXsKLSAgICBpZiAoIWN1cnJlbnQuaGFkVXNl
ckludGVyYWN0aW9uICYmICF1cGRhdGVkLmhhZFVzZXJJbnRlcmFjdGlvbikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYXV0byBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSA9IHN0
ZDo6bWF4KGN1cnJlbnQubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIHVwZGF0ZWQubW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpOwotCi0gICAgcmV0dXJuIHVwZGF0ZWQubGFzdFNl
ZW4gPD0gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgKyAyNF9oOwotfQotCi12b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bWVyZ2VTdGF0aXN0aWNzKFZlY3RvcjxS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYmIHN0YXRpc3RpY3MpCi17Ci0gICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IHN0YXRpc3RpY3Mp
IHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbnN1cmUo
c3RhdGlzdGljLmhpZ2hMZXZlbERvbWFpbiwgWyZzdGF0aXN0aWNdIHsKLSAgICAgICAgICAgIHJl
dHVybiBXVEZNb3ZlKHN0YXRpc3RpYyk7Ci0gICAgICAgIH0pOwotICAgICAgICBpZiAoIXJlc3Vs
dC5pc05ld0VudHJ5KSB7Ci0gICAgICAgICAgICBpZiAod2FzQWNjZXNzZWRBc0ZpcnN0UGFydHlE
dWVUb1VzZXJJbnRlcmFjdGlvbihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLCBzdGF0aXN0aWMpKQot
ICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUudGltZXNBY2Nlc3NlZEFzRmly
c3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uKys7Ci0gICAgICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLm1lcmdlKHN0YXRpc3RpYyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzaG91bGRCbG9ja0FuZEtlZXBDb29r
aWVzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3RpYykKLXsKLSAgICByZXR1
cm4gc3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UgJiYgc3RhdGlzdGljLmhhZFVzZXJJbnRl
cmFjdGlvbjsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNo
b3VsZEJsb2NrQW5kUHVyZ2VDb29raWVzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0
YXRpc3RpYykKLXsKLSAgICByZXR1cm4gc3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UgJiYg
IXN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb247Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJv
bXB0KGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3RpYywgY29uc3QgU3RyaW5n
JiBmaXJzdFBhcnR5UHJpbWFyeURvbWFpbikKLXsKLSAgICByZXR1cm4gc3RhdGlzdGljLnN0b3Jh
Z2VBY2Nlc3NVbmRlclRvcEZyYW1lT3JpZ2lucy5jb250YWlucyhmaXJzdFBhcnR5UHJpbWFyeURv
bWFpbik7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcyhjb25zdCBj
aGFyKiBhY3Rpb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zKQotewotI2lmICFSRUxF
QVNFX0xPR19ESVNBQkxFRAotICAgIHN0YXRpYyBjb25zdCBhdXRvIG1heE51bWJlck9mRG9tYWlu
c0luT25lTG9nU3RhdGVtZW50ID0gNTA7Ci0gICAgaWYgKGRvbWFpbnMuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoZG9tYWlucy5zaXplKCkgPD0gbWF4TnVtYmVyT2ZEb21h
aW5zSW5PbmVMb2dTdGF0ZW1lbnQpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0byAle3B1YmxpY31zIGNvb2tpZXMgaW4gdGhp
cmQtcGFydHkgY29udGV4dHMgZm9yOiAle3B1YmxpY31zLiIsIGFjdGlvbiwgZG9tYWluc1RvU3Ry
aW5nKGRvbWFpbnMpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IAotICAgIFZlY3RvcjxTdHJpbmc+IGJhdGNoOwotICAgIGJhdGNoLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQpOwotICAgIGF1dG8gYmF0
Y2hOdW1iZXIgPSAxOwotICAgIHVuc2lnbmVkIG51bWJlck9mQmF0Y2hlcyA9IHN0ZDo6Y2VpbChk
b21haW5zLnNpemUoKSAvIHN0YXRpY19jYXN0PGZsb2F0PihtYXhOdW1iZXJPZkRvbWFpbnNJbk9u
ZUxvZ1N0YXRlbWVudCkpOwotCi0gICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zKSB7Ci0g
ICAgICAgIGlmIChiYXRjaC5zaXplKCkgPT0gbWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0
ZW1lbnQpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RlYnVnLCAiQWJvdXQgdG8gJXtwdWJsaWN9cyBjb29raWVzIGluIHRoaXJkLXBhcnR5IGNv
bnRleHRzIGZvciAoJXtwdWJsaWN9ZCBvZiAldSk6ICV7cHVibGljfXMuIiwgYWN0aW9uLCBiYXRj
aE51bWJlciwgbnVtYmVyT2ZCYXRjaGVzLCBkb21haW5zVG9TdHJpbmcoYmF0Y2gpLnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICAgICAgYmF0Y2guc2hyaW5rKDApOwotICAgICAgICAgICAgKytiYXRj
aE51bWJlcjsKLSAgICAgICAgfQotICAgICAgICBiYXRjaC5hcHBlbmQoZG9tYWluKTsKLSAgICB9
Ci0gICAgaWYgKCFiYXRjaC5pc0VtcHR5KCkpCi0gICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gJXtwdWJsaWN9cyBjb29raWVzIGlu
IHRoaXJkLXBhcnR5IGNvbnRleHRzIGZvciAoJXtwdWJsaWN9ZCBvZiAldSk6ICV7cHVibGljfXMu
IiwgYWN0aW9uLCBiYXRjaE51bWJlciwgbnVtYmVyT2ZCYXRjaGVzLCBkb21haW5zVG9TdHJpbmco
YmF0Y2gpLnV0ZjgoKS5kYXRhKCkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYWN0aW9uKTsK
LSAgICBVTlVTRURfUEFSQU0oZG9tYWlucyk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IGRvbWFpbnNUb0Jsb2NrOwotICAg
IGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52
YWx1ZXMoKSkgewotICAgICAgICBpZiAocmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNv
dXJjZSkKLSAgICAgICAgICAgIGRvbWFpbnNUb0Jsb2NrLmFwcGVuZChyZXNvdXJjZVN0YXRpc3Rp
Yy5oaWdoTGV2ZWxEb21haW4pOwotICAgIH0KLQotICAgIGlmIChkb21haW5zVG9CbG9jay5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChtX2RlYnVnTG9nZ2luZ0VuYWJsZWQgJiYgIWRvbWFpbnNUb0Jsb2Nr
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcygiYmxvY2si
LCBkb21haW5zVG9CbG9jayk7Ci0KLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3dlYWtU
aGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGRvbWFp
bnNUb0Jsb2NrID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Jsb2NrKSwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAg
IHN0b3JlLT5jYWxsVXBkYXRlUHJldmFsZW50RG9tYWluc1RvQmxvY2tDb29raWVzRm9ySGFuZGxl
cihkb21haW5zVG9CbG9jaywgW3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIHN0b3JlID0g
c3RvcmUuY29weVJlZigpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgp
LmRpc3BhdGNoKFt3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAot
ICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYod2Vha1RoaXMtPm1fZGVidWdMb2dn
aW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiRG9uZSB1cGRhdGluZyBj
b29raWUgYmxvY2tpbmcuIik7Ci0jZW5kaWYKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsK
LSAgICB9KTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVw
ZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlu
c1RvQmxvY2ssIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
LXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBkb21haW5zVG9CbG9jayA9IGNy
b3NzVGhyZWFkQ29weShkb21haW5zVG9CbG9jayksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBzdG9yZS0+Y2FsbFVw
ZGF0ZVByZXZhbGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0ZvckhhbmRsZXIoZG9tYWluc1RvQmxv
Y2ssIFtzdG9yZSA9IHN0b3JlLmNvcHlSZWYoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIHN0b3JlLT5zdGF0
aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2xlYXJCbG9ja2luZ1N0YXRlRm9y
RG9tYWlucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlucywgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOwotCi0gICAgaWYgKGRvbWFpbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSdW5Mb29wOjptYWlu
KCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgZG9tYWlucyA9IGNyb3NzVGhy
ZWFkQ29weShkb21haW5zKV0gewotICAgICAgICBzdG9yZS0+Y2FsbFJlbW92ZURvbWFpbnNIYW5k
bGVyKGRvbWFpbnMpOwotICAgIH0pOwotCi0gICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLX0KLQot
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNz
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpPiYgcHJv
Y2Vzc0Z1bmN0aW9uKSBjb25zdAotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
Ci0gICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNz
TWFwLnZhbHVlcygpKQotICAgICAgICBwcm9jZXNzRnVuY3Rpb24ocmVzb3VyY2VTdGF0aXN0aWMp
OwotfQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aGFzSGFkVW5l
eHBpcmVkUmVjZW50VXNlckludGVyYWN0aW9uKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291
cmNlU3RhdGlzdGljKSBjb25zdAotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
Ci0gICAgaWYgKHJlc291cmNlU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbiAmJiBoYXNTdGF0
aXN0aWNzRXhwaXJlZChyZXNvdXJjZVN0YXRpc3RpYykpIHsKLSAgICAgICAgLy8gRHJvcCBwcml2
YWN5IHNlbnNpdGl2ZSBkYXRhIGJlY2F1c2Ugd2Ugbm8gbG9uZ2VyIG5lZWQgaXQuCi0gICAgICAg
IC8vIFNldCB0aW1lc3RhbXAgdG8gMCBzbyB0aGF0IHN0YXRpc3RpY3MgbWVyZ2Ugd2lsbCBrbm93
Ci0gICAgICAgIC8vIGl0IGhhcyBiZWVuIHJlc2V0IGFzIG9wcG9zZWQgdG8gaXRzIGRlZmF1bHQg
LTEuCi0gICAgICAgIHJlc291cmNlU3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25U
aW1lID0geyB9OwotICAgICAgICByZXNvdXJjZVN0YXRpc3RpYy5zdG9yYWdlQWNjZXNzVW5kZXJU
b3BGcmFtZU9yaWdpbnMuY2xlYXIoKTsKLSAgICAgICAgcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNl
ckludGVyYWN0aW9uID0gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc291cmNlU3RhdGlz
dGljLmhhZFVzZXJJbnRlcmFjdGlvbjsKLX0KLQotVmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjp0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1RvUmVt
b3ZlV2Vic2l0ZURhdGFGb3IoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
Ci0gICAgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nID0gbV9lbmRPZkdyYW5kZmF0
aGVyaW5nVGltZXN0YW1wID4gV2FsbFRpbWU6Om5vdygpOwotICAgIGJvb2wgc2hvdWxkQ2xlYXJH
cmFuZGZhdGhlcmluZyA9ICFzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nICYmIG1fZW5kT2ZH
cmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsKLQotICAgIGlmIChzaG91bGRDbGVhckdyYW5kZmF0aGVy
aW5nKQotICAgICAgICBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAgPSB7IH07Ci0KLSAg
ICBWZWN0b3I8U3RyaW5nPiBwcmV2YWxlbnRSZXNvdXJjZXM7Ci0gICAgZm9yIChhdXRvJiBzdGF0
aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkgewotICAgICAgICBpZiAo
c3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UgJiYgIWhhc0hhZFVuZXhwaXJlZFJlY2VudFVz
ZXJJbnRlcmFjdGlvbihzdGF0aXN0aWMpICYmICghc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmlu
ZyB8fCAhc3RhdGlzdGljLmdyYW5kZmF0aGVyZWQpKQotICAgICAgICAgICAgcHJldmFsZW50UmVz
b3VyY2VzLmFwcGVuZChzdGF0aXN0aWMuaGlnaExldmVsRG9tYWluKTsKLQotICAgICAgICBpZiAo
c2hvdWxkQ2xlYXJHcmFuZGZhdGhlcmluZyAmJiBzdGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCkKLSAg
ICAgICAgICAgIHN0YXRpc3RpYy5ncmFuZGZhdGhlcmVkID0gZmFsc2U7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHByZXZhbGVudFJlc291cmNlczsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCkK
LXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gdG9kYXkgPSBP
cGVyYXRpbmdEYXRlOjp0b2RheSgpOwotICAgIGlmICghbV9vcGVyYXRpbmdEYXRlcy5pc0VtcHR5
KCkgJiYgdG9kYXkgPD0gbV9vcGVyYXRpbmdEYXRlcy5sYXN0KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHdoaWxlIChtX29wZXJhdGluZ0RhdGVzLnNpemUoKSA+PSBvcGVyYXRpbmdEYXRlc1dp
bmRvdykKLSAgICAgICAgbV9vcGVyYXRpbmdEYXRlcy5yZW1vdmUoMCk7Ci0KLSAgICBtX29wZXJh
dGluZ0RhdGVzLmFwcGVuZCh0b2RheSk7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpoYXNTdGF0aXN0aWNzRXhwaXJlZChjb25zdCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYykgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotICAgIGlmIChtX29wZXJhdGluZ0RhdGVzLnNpemUoKSA+PSBvcGVyYXRp
bmdEYXRlc1dpbmRvdykgewotICAgICAgICBpZiAoT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1l
KHJlc291cmNlU3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSA8IG1fb3Bl
cmF0aW5nRGF0ZXMuZmlyc3QoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIC8vIElmIHdlIGRvbid0IG1lZXQgdGhlIHJlYWwgY3JpdGVyaWEgZm9yIGFuIGV4cGlyZWQg
c3RhdGlzdGljLCBjaGVjayB0aGUgdXNlciBzZXR0aW5nIGZvciBhIHRpZ2h0ZXIgcmVzdHJpY3Rp
b24gKG1haW5seSBmb3IgdGVzdGluZykuCi0gICAgaWYgKG1fcGFyYW1ldGVycy50aW1lVG9MaXZl
VXNlckludGVyYWN0aW9uKSB7Ci0gICAgICAgIGlmIChXYWxsVGltZTo6bm93KCkgPiByZXNvdXJj
ZVN0YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSArIG1fcGFyYW1ldGVycy50
aW1lVG9MaXZlVXNlckludGVyYWN0aW9uLnZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11
bUVudHJ5Q291bnQpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBt
X3BhcmFtZXRlcnMubWF4U3RhdGlzdGljc0VudHJpZXMgPSBtYXhpbXVtRW50cnlDb3VudDsKLX0K
LQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFBydW5lRW50cmll
c0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotICAgIG1fcGFyYW1ldGVycy5wcnVuZUVudHJpZXNEb3duVG8gPSBwcnVu
ZVRhcmdldENvdW50OwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOwotCi0gICAgaWYgKG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnNpemUoKSA8PSBtX3Bh
cmFtZXRlcnMubWF4U3RhdGlzdGljc0VudHJpZXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFT
U0VSVChtX3BhcmFtZXRlcnMucHJ1bmVFbnRyaWVzRG93blRvIDw9IG1fcGFyYW1ldGVycy5tYXhT
dGF0aXN0aWNzRW50cmllcyk7Ci0KLSAgICBzaXplX3QgbnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1
bmUgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5zaXplKCkgLSBtX3BhcmFtZXRlcnMucHJ1bmVF
bnRyaWVzRG93blRvOwotICAgIEFTU0VSVChudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSk7Ci0K
LSAgICBWZWN0b3I8U3RhdGlzdGljc0xhc3RTZWVuPiByZXNvdXJjZXNUb1BydW5lUGVySW1wb3J0
YW5jZVttYXhJbXBvcnRhbmNlICsgMV07Ci0gICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3Rp
YyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKQotICAgICAgICByZXNvdXJjZXNU
b1BydW5lUGVySW1wb3J0YW5jZVtjb21wdXRlSW1wb3J0YW5jZShyZXNvdXJjZVN0YXRpc3RpYyld
LmFwcGVuZCh7IHJlc291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFpbiwgcmVzb3VyY2VTdGF0
aXN0aWMubGFzdFNlZW4gfSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGltcG9ydGFuY2UgPSAwOyBu
dW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSAmJiBpbXBvcnRhbmNlIDw9IG1heEltcG9ydGFuY2U7
ICsraW1wb3J0YW5jZSkKLSAgICAgICAgcHJ1bmVSZXNvdXJjZXMobV9yZXNvdXJjZVN0YXRpc3Rp
Y3NNYXAsIHJlc291cmNlc1RvUHJ1bmVQZXJJbXBvcnRhbmNlW2ltcG9ydGFuY2VdLCBudW1iZXJP
ZkVudHJpZXNMZWZ0VG9QcnVuZSk7Ci0KLSAgICBBU1NFUlQoIW51bWJlck9mRW50cmllc0xlZnRU
b1BydW5lKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJl
c2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcygpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7Ci0KLSAgICBtX3BhcmFtZXRlcnMgPSB7IH07Ci19Ci0KLXZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpsb2dUZXN0aW5nRXZlbnQoY29uc3QgU3RyaW5nJiBl
dmVudCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBldmVudCA9IGV2ZW50
Lmlzb2xhdGVkQ29weSgpXSB7Ci0gICAgICAgIHN0b3JlLT5sb2dUZXN0aW5nRXZlbnQoZXZlbnQp
OwotICAgIH0pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
c2V0TGFzdFNlZW4oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBTZWNvbmRzIHNlY29uZHMp
Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvJiBzdGF0aXN0
aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5RG9t
YWluKTsKLSAgICBzdGF0aXN0aWNzLmxhc3RTZWVuID0gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRz
KHNlY29uZHMuc2Vjb25kcygpKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFp
bikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8mIHJlc291
cmNlU3RhdGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihw
cmltYXJ5RG9tYWluKTsKLSAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3Rp
YywgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3Ry
aW5nJiBwcmltYXJ5RG9tYWluKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
Ci0gICAgYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4pOwotICAgIHNldFByZXZhbGVudFJlc291cmNl
KHJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpWZXJ5SGlnaCk7Ci19
Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZW1vdmVBbGxTdG9y
YWdlQWNjZXNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
LXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgc3RvcmUtPnJl
bW92ZUFsbFN0b3JhZ2VBY2Nlc3MoW3N0b3JlID0gc3RvcmUuY29weVJlZigpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAg
ICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0g
ICAgfSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpkaWRD
cmVhdGVOZXR3b3JrUHJvY2VzcygpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
Ci0KLSAgICB1cGRhdGVDb29raWVCbG9ja2luZyhbXSgpIHsgfSk7Ci0gICAgdXBkYXRlQ2FjaGVN
YXhBZ2VDYXAoKTsKLSAgICB1cGRhdGVDbGllbnRTaWRlQ29va2llc0FnZUNhcCgpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGYzYTlhN2I5NmEwMGQ4NWQwYzFlYTdiMWNhYTYxYzcyYmQxZGIwYzQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwyMDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5oIgotI2luY2x1
ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgotI2luY2x1ZGUgPHd0Zi9Db21w
bGV0aW9uSGFuZGxlci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYv
V2Vha1B0ci5oPgotI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KLQotI2lmIEhBVkUoQ09SRV9Q
UkVESUNUSU9OKQotI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29j
b2EuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBLZXllZERlY29kZXI7
Ci1jbGFzcyBLZXllZEVuY29kZXI7Ci1zdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKLX0K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIE9wZXJhdGluZ0RhdGU7Ci1jbGFzcyBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U7Ci0KLS8vIFRoaXMgaXMgYWx3YXlz
IGNvbnN0cnVjdGVkIC8gdXNlZCAvIGRlc3Ryb3llZCBvbiB0aGUgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlJ3Mgc3RhdGlzdGljcyBxdWV1ZS4KLWNsYXNzIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZSA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU+IHsKLXB1YmxpYzoKLSAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiwgV29ya1F1ZXVlJik7
Ci0gICAgflJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSgpOwotCi0gICAgdm9pZCBz
ZXRQZXJzaXN0ZW50U3RvcmFnZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3Jh
Z2UmKTsKLQotICAgIHZvaWQgY2xlYXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5p
c0VtcHR5KCk7IH0KLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpLZXllZEVuY29kZXI+
IGNyZWF0ZUVuY29kZXJGcm9tRGF0YSgpIGNvbnN0OwotICAgIHZvaWQgbWVyZ2VXaXRoRGF0YUZy
b21EZWNvZGVyKFdlYkNvcmU6OktleWVkRGVjb2RlciYpOwotCi0gICAgdm9pZCBtZXJnZVN0YXRp
c3RpY3MoVmVjdG9yPFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiYpOwotICAgIHZv
aWQgcHJvY2Vzc1N0YXRpc3RpY3MoY29uc3QgRnVuY3Rpb248dm9pZChjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik+JikgY29uc3Q7Ci0KLSAgICB2b2lkIHVwZGF0ZUNvb2tp
ZUJsb2NraW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCB1cGRhdGVD
b29raWVCbG9ja2luZ0ZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb0Js
b2NrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgY2xlYXJCbG9ja2lu
Z1N0YXRlRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlucywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKTsKLQotICAgIHZvaWQgaW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdE
YXRlSWZOZWNlc3NhcnkoKTsKLSAgICB2b2lkIHByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29y
ZHMoKTsKLQotICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihTdHJpbmcm
JiBwcmltYXJ5RG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCB1aW50NjRfdCBvcGVuZXJQYWdl
SUQsIFN0cmluZyYmIG9wZW5lclByaW1hcnlEb21haW4pOwotICAgIHZvaWQgcmVtb3ZlQWxsU3Rv
cmFnZUFjY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotCi0gICAgdm9pZCBncmFu
ZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
LSAgICB2b2lkIGNhbmNlbFBlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3QoKTsKLQot
ICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN0cmluZyYgc3Vi
cmVzb3VyY2VQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHRvcEZyYW1lUHJpbWFyeURvbWFp
bikgY29uc3Q7Ci0gICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgU3Ry
aW5nJiBzdWJGcmFtZVByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgdG9wRnJhbWVQcmltYXJ5
RG9tYWluKSBjb25zdDsKLSAgICBib29sIGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25z
dCBTdHJpbmcmIGhvc3RSZWRpcmVjdGVkRnJvbVByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYg
aG9zdFJlZGlyZWN0ZWRUb1ByaW1hcnlEb21haW4pIGNvbnN0OwotCi0gICAgdm9pZCBjbGVhclBy
ZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbik7Ci0gICAgU3RyaW5n
IGR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1ByZXZhbGVu
dFJlc291cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikgY29uc3Q7Ci0gICAgYm9vbCBp
c1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pIGNvbnN0
OwotICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9t
YWluKTsKLSAgICB2b2lkIHNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHBy
aW1hcnlEb21haW4pOwotCi0gICAgdm9pZCBzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFN0cmluZyYg
cHJpbWFyeURvbWFpbiwgYm9vbCB2YWx1ZSk7Ci0gICAgYm9vbCBpc0dyYW5kZmF0aGVyZWQoY29u
c3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKSBjb25zdDsKLQotICAgIHZvaWQgc2V0U3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0IFN0cmluZyYgcHJpbWFyeVN1YkZyYW1lRG9tYWluLCBj
b25zdCBTdHJpbmcmIHByaW1hcnlUb3BGcmFtZURvbWFpbik7Ci0gICAgdm9pZCBzZXRTdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgU3RyaW5nJiBwcmltYXJ5U3VicmVzb3VyY2VE
b21haW4sIGNvbnN0IFN0cmluZyYgcHJpbWFyeVRvcEZyYW1lRG9tYWluKTsKLSAgICB2b2lkIHNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdHJpbmcmIHByaW1hcnlTdWJyZXNv
dXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pOwotICAgIHZv
aWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3RyaW5nJiBwcmltYXJ5
U3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYgcHJpbWFyeVJlZGlyZWN0RG9tYWluKTsK
LSAgICB2b2lkIHNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdHJpbmcmIHRvcEZy
YW1lUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pOwot
ICAgIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3RyaW5nJiB0b3BG
cmFtZVByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgcHJpbWFyeVJlZGlyZWN0RG9tYWluKTsK
LQotICAgIHZvaWQgbG9nVGVzdGluZ0V2ZW50KGNvbnN0IFN0cmluZyYpOwotCi0gICAgdm9pZCBz
ZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQpOwotICAgIHZv
aWQgc2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50KTsKLSAgICB2
b2lkIHJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcygpOwotCi0gICAgdm9pZCBjYWxjdWxh
dGVBbmRTdWJtaXRUZWxlbWV0cnkoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0Tm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sKTsKLSAgICB2b2lkIHNldFNob3VsZENsYXNz
aWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wpOwotICAgIHZvaWQgc2V0
U2hvdWxkU3VibWl0VGVsZW1ldHJ5KGJvb2wpOwotICAgIHZvaWQgc2V0VGltZVRvTGl2ZVVzZXJJ
bnRlcmFjdGlvbihTZWNvbmRzKTsKLSAgICB2b2lkIHNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFS
ZWNvcmRzUmVtb3ZhbChTZWNvbmRzKTsKLSAgICB2b2lkIHNldEdyYW5kZmF0aGVyaW5nVGltZShT
ZWNvbmRzKTsKLSAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9v
bCk7Ci0gICAgYm9vbCBpc0RlYnVnTW9kZUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVn
TW9kZUVuYWJsZWQ7IH07Ci0gICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9k
ZShjb25zdCBTdHJpbmcmIGRvbWFpbik7Ci0KLSAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3MoY29u
c3QgU3RyaW5nJiBzdWJGcmFtZVByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgdG9wRnJhbWVQ
cmltYXJ5RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwotICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3Mo
U3RyaW5nJiYgc3ViRnJhbWVQcmltYXJ5RG9tYWluLCBTdHJpbmcmJiB0b3BGcmFtZVByaW1hcnlE
b21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCBwcm9tcHRFbmFi
bGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmKTsKLSAg
ICB2b2lkIGdyYW50U3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBzdWJGcmFtZUhvc3QsIFN0cmluZyYm
IHRvcEZyYW1lSG9zdCwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBib29sIHVz
ZXJXYXNQcm9tcHRlZE5vdywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7Ci0KLSAg
ICB2b2lkIGxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBTdHJpbmcmIHRhcmdldFByaW1hcnlEb21h
aW4sIGNvbnN0IFN0cmluZyYgbWFpbkZyYW1lUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiBz
b3VyY2VQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHRhcmdldEhvc3QsIGNvbnN0IFN0cmlu
ZyYgbWFpbkZyYW1lSG9zdCwgYm9vbCBpc1JlZGlyZWN0LCBib29sIGlzTWFpbkZyYW1lKTsKLSAg
ICB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pOwot
Ci0gICAgdm9pZCBjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIHByaW1hcnlEb21h
aW4pOwotICAgIGJvb2wgaGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgcHJpbWFy
eURvbWFpbik7Ci0KLSAgICB2b2lkIHNldExhc3RTZWVuKGNvbnN0IFN0cmluZyYgcHJpbWFyeURv
bWFpbiwgU2Vjb25kcyk7Ci0KLSAgICB2b2lkIGRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci0K
LXByaXZhdGU6Ci0gICAgc3RhdGljIGJvb2wgc2hvdWxkQmxvY2tBbmRLZWVwQ29va2llcyhjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7Ci0gICAgc3RhdGljIGJvb2wgc2hv
dWxkQmxvY2tBbmRQdXJnZUNvb2tpZXMoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljcyYpOwotICAgIHN0YXRpYyBib29sIGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91
Z2hQcm9tcHQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYsIGNvbnN0IFN0
cmluZyYgZmlyc3RQYXJ0eVByaW1hcnlEb21haW4pOwotICAgIGJvb2wgaGFzSGFkVW5leHBpcmVk
UmVjZW50VXNlckludGVyYWN0aW9uKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmKSBj
b25zdDsKLSAgICBib29sIGhhc1N0YXRpc3RpY3NFeHBpcmVkKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3MmKSBjb25zdDsKLSAgICBib29sIHdhc0FjY2Vzc2VkQXNGaXJzdFBh
cnR5RHVlVG9Vc2VySW50ZXJhY3Rpb24oY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljcyYgY3VycmVudCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgdXBk
YXRlZCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShXZWJDb3JlOjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzJiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSk7Ci0gICAgdW5zaWdu
ZWQgcmVjdXJzaXZlbHlHZXRBbGxEb21haW5zVGhhdEhhdmVSZWRpcmVjdGVkVG9UaGlzRG9tYWlu
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmLCBIYXNoU2V0PFN0cmluZz4m
IGRvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUbywgdW5zaWduZWQgbnVtYmVyT2ZSZWN1cnNpdmVD
YWxscykgY29uc3Q7Ci0gICAgdm9pZCBzZXRTdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQoYm9v
bCBlbmFibGVkKSB7IG1fc3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkICA9IGVuYWJsZWQ7IH0K
LSAgICBib29sIHNob3VsZFJlbW92ZURhdGFSZWNvcmRzKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRE
ZWJ1Z0xvZ2dnaW5nRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9kZWJ1Z0xvZ2dpbmdFbmFibGVk
ICA9IGVuYWJsZWQ7IH0KLSAgICB2b2lkIHNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKGJvb2wp
OwotICAgIHZvaWQgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2Fy
eSgpOwotICAgIHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoU3RyaW5nJiYgc3ViRnJh
bWVIb3N0LCBTdHJpbmcmJiB0b3BGcmFtZUhvc3QsIE9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlE
LCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93T3JFYXJsaWVyLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKLSAgICB2b2lkIG1hcmtBc1ByZXZhbGVudElm
SGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3Mm
KTsKLSAgICBib29sIGlzUHJldmFsZW50RHVlVG9EZWJ1Z01vZGUoV2ViQ29yZTo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljcyYpOwotICAgIFZlY3RvcjxTdHJpbmc+IGVuc3VyZVByZXZhbGVudFJlc291
cmNlc0ZvckRlYnVnTW9kZSgpOwotICAgIHZvaWQgcmVtb3ZlRGF0YVJlY29yZHMoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCk7
Ci0gICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUHJpbWFyeURvbWFpbihjb25zdCBTdHJpbmcmKTsKLSAgICBWZWN0b3I8U3RyaW5n
PiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IoKTsK
LSAgICB2b2lkIHNldENhY2hlTWF4QWdlQ2FwKFNlY29uZHMpOwotICAgIHZvaWQgdXBkYXRlQ2Fj
aGVNYXhBZ2VDYXAoKTsKLSAgICB2b2lkIHNldEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKFNl
Y29uZHMpOwotICAgIHZvaWQgdXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKTsKLQotI2lm
IFBMQVRGT1JNKENPQ09BKQotICAgIHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgp
OwotI2VuZGlmCi0KLSAgICBzdHJ1Y3QgUGFyYW1ldGVycyB7Ci0gICAgICAgIHNpemVfdCBwcnVu
ZUVudHJpZXNEb3duVG8geyA4MDAgfTsKLSAgICAgICAgc2l6ZV90IG1heFN0YXRpc3RpY3NFbnRy
aWVzIHsgMTAwMCB9OwotICAgICAgICBPcHRpb25hbDxTZWNvbmRzPiB0aW1lVG9MaXZlVXNlcklu
dGVyYWN0aW9uOwotICAgICAgICBTZWNvbmRzIG1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRz
UmVtb3ZhbCB7IDFfaCB9OwotICAgICAgICBTZWNvbmRzIGdyYW5kZmF0aGVyaW5nVGltZSB7IDI0
X2ggKiA3IH07Ci0gICAgICAgIFNlY29uZHMgY2FjaGVNYXhBZ2VDYXBUaW1lIHsgMjRfaCAqIDcg
fTsKLSAgICAgICAgU2Vjb25kcyBjbGllbnRTaWRlQ29va2llc0FnZUNhcFRpbWUgeyAyNF9oICog
NyB9OwotICAgICAgICBib29sIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNj
YW5uZWQgeyBmYWxzZSB9OwotICAgICAgICBib29sIHNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVm
b3JlRGF0YVJlY29yZHNSZW1vdmFsIHsgdHJ1ZSB9OwotICAgICAgICBib29sIHNob3VsZFN1Ym1p
dFRlbGVtZXRyeSB7IHRydWUgfTsKLSAgICB9OwotCi0gICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlJiBtX3N0b3JlOwotICAgIFJlZjxXb3JrUXVldWU+IG1fd29ya1F1ZXVlOwotICAg
IFdlYWtQdHI8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlPiBtX3BlcnNp
c3RlbnRTdG9yYWdlOwotICAgIEhhc2hNYXA8U3RyaW5nLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzPiBtX3Jlc291cmNlU3RhdGlzdGljc01hcDsKLSNpZiBIQVZFKENPUkVfUFJFRElD
VElPTikKLSAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hIG1fcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI7Ci0jZWxzZQotICAgIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NDbGFzc2lmaWVyIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI7Ci0jZW5k
aWYKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBIYXNoU2V0PHVpbnQ2NF90
PiBtX2FjdGl2ZVBsdWdpblRva2VuczsKLSNlbmRpZgotICAgIFBhcmFtZXRlcnMgbV9wYXJhbWV0
ZXJzOwotICAgIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtX29wZXJhdGluZ0RhdGVzOwotICAgIFdh
bGxUaW1lIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsKLSAgICBib29sIG1fZGVidWdM
b2dnaW5nRW5hYmxlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2RlYnVnTW9kZUVuYWJsZWQgeyBm
YWxzZSB9OwotICAgIFN0cmluZyBtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0gICAg
Ym9vbCBtX3N0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBt
X2RhdGFSZWNvcmRzQmVpbmdSZW1vdmVkIHsgZmFsc2UgfTsKLSAgICBNb25vdG9uaWNUaW1lIG1f
bGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkOwotCi0gICAgdWludDY0X3QgbV9sYXN0U3Rh
dGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciB7IDAgfTsKLSAgICBPcHRpb25hbDx1
aW50NjRfdD4gbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcjsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3Rv
cmFnZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwOGQ4MDIxOWU5MGYwNDVl
ODY3NTk3YjY3YmQyYjYyNGIwZjdiNWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI3MSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmgiCi0KLSNpbmNsdWRlICJMb2dnaW5n
LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmgiCi0jaW5j
bHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCi0jaW5jbHVkZSA8V2ViQ29y
ZS9GaWxlTW9uaXRvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvS2V5ZWRDb2RpbmcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZl
ci5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0jaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY29uc3RleHByIFNlY29uZHMgbWluaW11bVdyaXRl
SW50ZXJ2YWwgeyA1X21pbiB9OwotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotc3RhdGlj
IGJvb2wgaGFzRmlsZUNoYW5nZWRTaW5jZShjb25zdCBTdHJpbmcmIHBhdGgsIFdhbGxUaW1lIHNp
bmNlKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIGF1dG8gbW9kaWZp
Y2F0aW9uVGltZSA9IEZpbGVTeXN0ZW06OmdldEZpbGVNb2RpZmljYXRpb25UaW1lKHBhdGgpOwot
ICAgIGlmICghbW9kaWZpY2F0aW9uVGltZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBy
ZXR1cm4gbW9kaWZpY2F0aW9uVGltZS52YWx1ZSgpID4gc2luY2U7Ci19Ci0KLVJlc291cmNlTG9h
ZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNp
c3RlbnRTdG9yYWdlKFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSYgbWVtb3J5U3Rv
cmUsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlLCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VEaXJlY3RvcnlQ
YXRoKQotICAgIDogbV9tZW1vcnlTdG9yZShtZW1vcnlTdG9yZSkKLSAgICAsIG1fd29ya1F1ZXVl
KHdvcmtRdWV1ZSkKLSAgICAsIG1fc3RvcmFnZURpcmVjdG9yeVBhdGgoc3RvcmFnZURpcmVjdG9y
eVBhdGgpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX21lbW9y
eVN0b3JlLnNldFBlcnNpc3RlbnRTdG9yYWdlKCp0aGlzKTsKLQotICAgIHBvcHVsYXRlTWVtb3J5
U3RvcmVGcm9tRGlzaygpOwotICAgIHN0YXJ0TW9uaXRvcmluZ0Rpc2soKTsKLX0KLQotUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlOjp+UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BlcnNpc3RlbnRTdG9yYWdlKCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIGlmIChtX2hhc1BlbmRpbmdXcml0ZSkKLSAgICAgICAgd3JpdGVNZW1vcnlTdG9yZVRv
RGlzaygpOwotfQotCi1TdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9y
YWdlOjpzdG9yYWdlRGlyZWN0b3J5UGF0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc3RvcmFn
ZURpcmVjdG9yeVBhdGguaXNvbGF0ZWRDb3B5KCk7Ci19Ci0KLVN0cmluZyBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OnJlc291cmNlTG9nRmlsZVBhdGgoKSBjb25zdAot
ewotICAgIFN0cmluZyBzdG9yYWdlUGF0aCA9IHN0b3JhZ2VEaXJlY3RvcnlQYXRoKCk7Ci0gICAg
aWYgKHN0b3JhZ2VQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
Ci0KLSAgICByZXR1cm4gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHN0b3Jh
Z2VQYXRoLCAiZnVsbF9icm93c2luZ19zZXNzaW9uX3Jlc291cmNlTG9nLnBsaXN0Iik7Ci19Ci0K
LXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlOjpzdGFydE1vbml0
b3JpbmdEaXNrKCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBpZiAo
bV9maWxlTW9uaXRvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIHJlc291cmNlTG9n
UGF0aCA9IHJlc291cmNlTG9nRmlsZVBhdGgoKTsKLSAgICBpZiAocmVzb3VyY2VMb2dQYXRoLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9maWxlTW9uaXRvciA9IHN0ZDo6bWFr
ZV91bmlxdWU8RmlsZU1vbml0b3I+KHJlc291cmNlTG9nUGF0aCwgbV93b3JrUXVldWUuY29weVJl
ZigpLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIChGaWxlTW9uaXRvcjo6
RmlsZUNoYW5nZVR5cGUgdHlwZSkgewotICAgICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBGaWxlTW9uaXRvcjo6RmlsZUNoYW5nZVR5
cGU6Ok1vZGlmaWNhdGlvbjoKLSAgICAgICAgICAgIHJlZnJlc2hNZW1vcnlTdG9yZUZyb21EaXNr
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGaWxlTW9uaXRvcjo6RmlsZUNo
YW5nZVR5cGU6OlJlbW92YWw6Ci0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLmNsZWFyKFtdIHsg
fSk7Ci0gICAgICAgICAgICBtX2ZpbGVNb25pdG9yID0gbnVsbHB0cjsKLSAgICAgICAgICAgIG1v
bml0b3JEaXJlY3RvcnlGb3JOZXdTdGF0aXN0aWNzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0
ZW50U3RvcmFnZTo6bW9uaXRvckRpcmVjdG9yeUZvck5ld1N0YXRpc3RpY3MoKQotewotICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgU3RyaW5nIHN0b3JhZ2VQYXRoID0gc3Rv
cmFnZURpcmVjdG9yeVBhdGgoKTsKLSAgICBBU1NFUlQoIXN0b3JhZ2VQYXRoLmlzRW1wdHkoKSk7
Ci0KLSAgICBpZiAoIUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc3RvcmFnZVBhdGgpKSB7Ci0gICAg
ICAgIGlmICghRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKHN0b3JhZ2VQYXRoKSkgewot
ICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgIlJl
c291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTogRmFpbGVkIHRvIGNyZWF0ZSBk
aXJlY3RvcnkgcGF0aCAlcyIsIHN0b3JhZ2VQYXRoLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9maWxlTW9uaXRvciA9IHN0ZDo6
bWFrZV91bmlxdWU8RmlsZU1vbml0b3I+KHN0b3JhZ2VQYXRoLCBtX3dvcmtRdWV1ZS5jb3B5UmVm
KCksIFt0aGlzXSAoRmlsZU1vbml0b3I6OkZpbGVDaGFuZ2VUeXBlIHR5cGUpIHsKLSAgICAgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgICAgIGlmICh0eXBlID09IEZpbGVNb25p
dG9yOjpGaWxlQ2hhbmdlVHlwZTo6UmVtb3ZhbCkgewotICAgICAgICAgICAgLy8gRGlyZWN0b3J5
IHdhcyByZW1vdmVkIQotICAgICAgICAgICAgbV9maWxlTW9uaXRvciA9IG51bGxwdHI7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgcmVzb3VyY2VMb2dQ
YXRoID0gcmVzb3VyY2VMb2dGaWxlUGF0aCgpOwotICAgICAgICBBU1NFUlQoIXJlc291cmNlTG9n
UGF0aC5pc0VtcHR5KCkpOwotCi0gICAgICAgIGlmICghRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhy
ZXNvdXJjZUxvZ1BhdGgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fZmlsZU1v
bml0b3IgPSBudWxscHRyOwotCi0gICAgICAgIHJlZnJlc2hNZW1vcnlTdG9yZUZyb21EaXNrKCk7
Ci0gICAgICAgIHN0YXJ0TW9uaXRvcmluZ0Rpc2soKTsKLSAgICB9KTsKLX0KLQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OnN0b3BNb25pdG9yaW5nRGlzaygp
Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgbV9maWxlTW9uaXRvciA9
IG51bGxwdHI7Ci19Ci0KLS8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGZpbGUgY2hhbmdlcyBv
biBkaXNrLgotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OnJl
ZnJlc2hNZW1vcnlTdG9yZUZyb21EaXNrKCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKLQotICAgIFN0cmluZyBmaWxlUGF0aCA9IHJlc291cmNlTG9nRmlsZVBhdGgoKTsKLSAg
ICBpZiAoZmlsZVBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBz
b21ldGltZXMgc2VlIGZpbGUgY2hhbmdlZCBldmVudHMgZnJvbSBiZWZvcmUgb3VyIGxvYWQgY29t
cGxldGVkICh3ZSBzdGFydAotICAgIC8vIHJlYWRpbmcgYXQgdGhlIGZpcnN0IGNoYW5nZSBldmVu
dCwgYnV0IHdlIG1pZ2h0IHJlY2VpdmUgYSBzZXJpZXMgb2YgZXZlbnRzIHJlbGF0ZWQKLSAgICAv
LyB0byB0aGUgc2FtZSBmaWxlIG9wZXJhdGlvbikuIENhdGNoIHRoaXMgY2FzZSB0byBhdm9pZCBy
ZWFkaW5nIG92ZXJseSBvZnRlbi4KLSAgICBpZiAoIWhhc0ZpbGVDaGFuZ2VkU2luY2UoZmlsZVBh
dGgsIG1fbGFzdFN0YXRpc3RpY3NGaWxlU3luY1RpbWUpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBXYWxsVGltZSByZWFkVGltZSA9IFdhbGxUaW1lOjpub3coKTsKLQotICAgIGF1dG8gZGVjb2Rl
ciA9IGNyZWF0ZUZvckZpbGUoZmlsZVBhdGgpOwotICAgIGlmICghZGVjb2RlcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9tZW1vcnlTdG9yZS5tZXJnZVdpdGhEYXRhRnJvbURlY29kZXIoKmRl
Y29kZXIpOwotICAgIG1fbGFzdFN0YXRpc3RpY3NGaWxlU3luY1RpbWUgPSByZWFkVGltZTsKLX0K
LQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OnBvcHVsYXRl
TWVtb3J5U3RvcmVGcm9tRGlzaygpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
Ci0KLSAgICBTdHJpbmcgZmlsZVBhdGggPSByZXNvdXJjZUxvZ0ZpbGVQYXRoKCk7Ci0gICAgaWYg
KGZpbGVQYXRoLmlzRW1wdHkoKSB8fCAhRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhmaWxlUGF0aCkp
IHsKLSAgICAgICAgbV9tZW1vcnlTdG9yZS5ncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEo
W10oKSB7IH0pOwotICAgICAgICBtb25pdG9yRGlyZWN0b3J5Rm9yTmV3U3RhdGlzdGljcygpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFoYXNGaWxlQ2hhbmdlZFNpbmNlKGZp
bGVQYXRoLCBtX2xhc3RTdGF0aXN0aWNzRmlsZVN5bmNUaW1lKSkgewotICAgICAgICAvLyBObyBu
ZWVkIHRvIGdyYW5kZmF0aGVyIGluIHRoaXMgY2FzZS4KLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIFdhbGxUaW1lIHJlYWRUaW1lID0gV2FsbFRpbWU6Om5vdygpOwotCi0gICAgYXV0byBk
ZWNvZGVyID0gY3JlYXRlRm9yRmlsZShmaWxlUGF0aCk7Ci0gICAgaWYgKCFkZWNvZGVyKSB7Ci0g
ICAgICAgIG1fbWVtb3J5U3RvcmUuZ3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKFtdKCkg
eyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIERlYnVnIG1vZGUgaGFzIGEg
cHJlcG91bGF0ZWQgbWVtb3J5IHN0b3JlLgotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9tZW1v
cnlTdG9yZS5pc0VtcHR5KCkgfHwgbV9tZW1vcnlTdG9yZS5pc0RlYnVnTW9kZUVuYWJsZWQoKSwg
IlRoaXMgaXMgdGhlIGluaXRpYWwgaW1wb3J0IHNvIHRoZSBzdG9yZSBzaG91bGQgYmUgZW1wdHki
KTsKLSAgICBtX21lbW9yeVN0b3JlLm1lcmdlV2l0aERhdGFGcm9tRGVjb2RlcigqZGVjb2Rlcik7
Ci0KLSAgICBtX2xhc3RTdGF0aXN0aWNzRmlsZVN5bmNUaW1lID0gcmVhZFRpbWU7Ci0KLSAgICBt
X21lbW9yeVN0b3JlLmxvZ1Rlc3RpbmdFdmVudCgiUG9wdWxhdGVkV2l0aG91dEdyYW5kZmF0aGVy
aW5nIl9zKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3Jh
Z2U6OndyaXRlTWVtb3J5U3RvcmVUb0Rpc2soKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOwotCi0gICAgbV9oYXNQZW5kaW5nV3JpdGUgPSBmYWxzZTsKLSAgICBzdG9wTW9uaXRv
cmluZ0Rpc2soKTsKLQotICAgIHdyaXRlVG9EaXNrKG1fbWVtb3J5U3RvcmUuY3JlYXRlRW5jb2Rl
ckZyb21EYXRhKCksIHJlc291cmNlTG9nRmlsZVBhdGgoKSk7Ci0KLSAgICBtX2xhc3RTdGF0aXN0
aWNzRmlsZVN5bmNUaW1lID0gV2FsbFRpbWU6Om5vdygpOwotICAgIG1fbGFzdFN0YXRpc3RpY3NX
cml0ZVRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLQotICAgIHN0YXJ0TW9uaXRvcmluZ0Rp
c2soKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6
OnNjaGVkdWxlT3JXcml0ZU1lbW9yeVN0b3JlKEZvcmNlSW1tZWRpYXRlV3JpdGUgZm9yY2VJbW1l
ZGlhdGVXcml0ZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1
dG8gdGltZVNpbmNlTGFzdFdyaXRlID0gTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX2xhc3RTdGF0
aXN0aWNzV3JpdGVUaW1lOwotICAgIGlmIChmb3JjZUltbWVkaWF0ZVdyaXRlICE9IEZvcmNlSW1t
ZWRpYXRlV3JpdGU6OlllcyAmJiB0aW1lU2luY2VMYXN0V3JpdGUgPCBtaW5pbXVtV3JpdGVJbnRl
cnZhbCkgewotICAgICAgICBpZiAoIW1faGFzUGVuZGluZ1dyaXRlKSB7Ci0gICAgICAgICAgICBt
X2hhc1BlbmRpbmdXcml0ZSA9IHRydWU7Ci0gICAgICAgICAgICBTZWNvbmRzIGRlbGF5ID0gbWlu
aW11bVdyaXRlSW50ZXJ2YWwgLSB0aW1lU2luY2VMYXN0V3JpdGUgKyAxX3M7Ci0gICAgICAgICAg
ICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2hBZnRlcihkZWxheSwgW3dlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpXSB7Ci0gICAgICAgICAgICAgICAgaWYgKHdlYWtUaGlzKQotICAgICAgICAgICAg
ICAgICAgICB3ZWFrVGhpcy0+d3JpdGVNZW1vcnlTdG9yZVRvRGlzaygpOwotICAgICAgICAgICAg
fSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHdyaXRlTWVtb3J5
U3RvcmVUb0Rpc2soKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVu
dFN0b3JhZ2U6OmNsZWFyKCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAg
ICBTdHJpbmcgZmlsZVBhdGggPSByZXNvdXJjZUxvZ0ZpbGVQYXRoKCk7Ci0gICAgaWYgKGZpbGVQ
YXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RvcE1vbml0b3JpbmdEaXNr
KCk7Ci0KLSAgICBpZiAoIUZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoZmlsZVBhdGgpICYmIEZpbGVT
eXN0ZW06OmZpbGVFeGlzdHMoZmlsZVBhdGgpKQotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRT
dG9yYWdlOiBVbmFibGUgdG8gZGVsZXRlIHN0YXRpc3RpY3MgZmlsZTogJXMiLCBmaWxlUGF0aC51
dGY4KCkuZGF0YSgpKTsKLX0KLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OmV4Y2x1ZGVGcm9tQmFja3VwKCkg
Y29uc3QKLXsKLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50
U3RvcmFnZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BlcnNpc3RlbnRTdG9yYWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYWE5
YjhhZWMyZmQ1MDAxZjFkMmNjNmFhMzNkYmIyNzI4ZWU2YmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3
NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KLSNpbmNsdWRlIDx3
dGYvUnVuTG9vcC5oPgotI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgotI2luY2x1ZGUgPHd0Zi9X
ZWFrUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBGaWxlTW9uaXRvcjsK
LX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTsKLQotLy8gQ2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgLyBkZXN0cm95ZWQgLyB1
c2VkIGZyb20gdGhlIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSdzIHN0YXRpc3RpYyBx
dWV1ZS4KLWNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZSA6IHB1
YmxpYyBDYW5NYWtlV2Vha1B0cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3Jh
Z2U+IHsKLXB1YmxpYzoKLSAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3Jh
Z2UoUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlJiwgV29ya1F1ZXVlJiwgY29uc3Qg
U3RyaW5nJiBzdG9yYWdlRGlyZWN0b3J5UGF0aCk7Ci0gICAgflJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NQZXJzaXN0ZW50U3RvcmFnZSgpOwotCi0gICAgdm9pZCBjbGVhcigpOwotCi0gICAgZW51bSBj
bGFzcyBGb3JjZUltbWVkaWF0ZVdyaXRlIHsgTm8sIFllcywgfTsKLSAgICB2b2lkIHNjaGVkdWxl
T3JXcml0ZU1lbW9yeVN0b3JlKEZvcmNlSW1tZWRpYXRlV3JpdGUpOwotCi1wcml2YXRlOgotICAg
IFN0cmluZyBzdG9yYWdlRGlyZWN0b3J5UGF0aCgpIGNvbnN0OwotICAgIFN0cmluZyByZXNvdXJj
ZUxvZ0ZpbGVQYXRoKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHN0YXJ0TW9uaXRvcmluZ0Rpc2soKTsK
LSAgICB2b2lkIHN0b3BNb25pdG9yaW5nRGlzaygpOwotICAgIHZvaWQgbW9uaXRvckRpcmVjdG9y
eUZvck5ld1N0YXRpc3RpY3MoKTsKLQotICAgIHZvaWQgd3JpdGVNZW1vcnlTdG9yZVRvRGlzaygp
OwotICAgIHZvaWQgcG9wdWxhdGVNZW1vcnlTdG9yZUZyb21EaXNrKCk7Ci0gICAgdm9pZCBleGNs
dWRlRnJvbUJhY2t1cCgpIGNvbnN0OwotICAgIHZvaWQgcmVmcmVzaE1lbW9yeVN0b3JlRnJvbURp
c2soKTsKLQotICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSYgbV9tZW1vcnlT
dG9yZTsKLSAgICBSZWY8V29ya1F1ZXVlPiBtX3dvcmtRdWV1ZTsKLSAgICBjb25zdCBTdHJpbmcg
bV9zdG9yYWdlRGlyZWN0b3J5UGF0aDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6Rmls
ZU1vbml0b3I+IG1fZmlsZU1vbml0b3I7Ci0gICAgV2FsbFRpbWUgbV9sYXN0U3RhdGlzdGljc0Zp
bGVTeW5jVGltZTsKLSAgICBNb25vdG9uaWNUaW1lIG1fbGFzdFN0YXRpc3RpY3NXcml0ZVRpbWU7
Ci0gICAgYm9vbCBtX2hhc1BlbmRpbmdXcml0ZSB7IGZhbHNlIH07Ci19OwotCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1h
bmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKaW5kZXggNGVmNWRjYzM2NWFhMzlhZTYwNmQwYmJi
ZjM4ZWY0NDlmZTQ5MDVkMC4uZGVlOTA2ZjhiMDg1ZGJjZmQyOTRjNmJhYzA4ODNjMjYyMmRhYzUw
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Vz
ZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcApAQCAtMjksNyArMjksOSBA
QAogI2luY2x1ZGUgIldlYlBhZ2VNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5o
IgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgog
I2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUu
aCIKICNpbmNsdWRlIDxXZWJDb3JlL01lZGlhQ29uc3RyYWludHMuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9S
ZWFsdGltZU1lZGlhU291cmNlLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd24uY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViRGF0YUxpc3RTdWdnZXN0aW9uc0Ryb3Bkb3duLmNwcAppbmRleCBlZTZlZDhjOThl
ZTczNjI5YzFjNTBmNzdmMzdhM2QzNDgzM2U4YTI5Li44MjQyY2VjZWIzNjM4MDEyMjFlZWRkZDAw
ZWJjMTdmNWU2MTdlNjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJE
YXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkRhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bi5jcHAKQEAgLTI2LDYgKzI2LDggQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJv
cGRvd24uaCIKIAorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorCiAjaWYgRU5BQkxFKERBVEFM
SVNUX0VMRU1FTlQpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1MWU3MTA4ZDc4MTBlNDFhNTY0NzM0MDhjMjUx
MWRmYTEwZmJiYzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDkwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmgiCi0KLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bl
cnNpc3RlbnRTdG9yYWdlLmgiCi0jaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5oIgotI2luY2x1ZGUg
IldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NNZXNzYWdlcy5oIgotI2luY2x1
ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rl
bGVtZXRyeS5oIgotI2luY2x1ZGUgIldlYnNpdGVEYXRhRmV0Y2hPcHRpb24uaCIKLSNpbmNsdWRl
ICJXZWJzaXRlRGF0YVN0b3JlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzLmg+Ci0jaW5jbHVkZSA8d3RmL0NhbGxiYWNrQWdncmVnYXRvci5oPgotI2luY2x1ZGUg
PHd0Zi9Dcm9zc1RocmVhZENvcGllci5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgotI2luY2x1ZGUgPHd0Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5oPgotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdGF0aWMgaW5saW5lIFN0cmluZyBpc29sYXRlZFByaW1hcnlEb21haW4oY29uc3QgVCYgdmFs
dWUpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlEb21haW4o
dmFsdWUpLmlzb2xhdGVkQ29weSgpOwotfQotCi1jb25zdCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFU
eXBlPiYgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptb25pdG9yZWREYXRhVHlwZXMo
KQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
Pj4gZGF0YVR5cGVzKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxXZWJzaXRlRGF0YVR5cGU+KHsKLSAg
ICAgICAgV2Vic2l0ZURhdGFUeXBlOjpDb29raWVzLAotICAgICAgICBXZWJzaXRlRGF0YVR5cGU6
OkRPTUNhY2hlLAotICAgICAgICBXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcywK
LSAgICAgICAgV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UsCi0gICAgICAgIFdlYnNpdGVE
YXRhVHlwZTo6TWVkaWFLZXlzLAotICAgICAgICBXZWJzaXRlRGF0YVR5cGU6Ok9mZmxpbmVXZWJB
cHBsaWNhdGlvbkNhY2hlLAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAg
ICBXZWJzaXRlRGF0YVR5cGU6OlBsdWdJbkRhdGEsCi0jZW5kaWYKLSAgICAgICAgV2Vic2l0ZURh
dGFUeXBlOjpTZWFyY2hGaWVsZFJlY2VudFNlYXJjaGVzLAotICAgICAgICBXZWJzaXRlRGF0YVR5
cGU6OlNlc3Npb25TdG9yYWdlLAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICAgICAg
V2Vic2l0ZURhdGFUeXBlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9ucywKLSNlbmRpZgotICAg
ICAgICBXZWJzaXRlRGF0YVR5cGU6OldlYlNRTERhdGFiYXNlcywKLSAgICB9KSk7Ci0KLSAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgcmV0dXJuIGRhdGFUeXBlczsKLX0KLQot
dm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwotCi0gICAgcG9zdFRhc2soW3RoaXMsIHZhbHVlXSB7Ci0gICAgICAgIGlmICht
X21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0Tm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2YWx1ZSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0Jl
Zm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKQotewotICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7Ci0KLSAgICBwb3N0VGFzayhbdGhpcywgdmFsdWVdIHsKLSAgICAgICAgaWYg
KG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRTaG91bGRDbGFz
c2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh2YWx1ZSk7Ci0gICAgfSk7Ci19
Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRTdWJtaXRU
ZWxlbWV0cnkoYm9vbCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwot
Ci0gICAgcG9zdFRhc2soW3RoaXMsIHZhbHVlXSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3Jl
KQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KHZh
bHVlKTsKLSAgICB9KTsKLX0KLQotV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoV2Vic2l0ZURhdGFTdG9yZSYgd2Vic2l0ZURhdGFT
dG9yZSkKLSAgICA6IG1fd2Vic2l0ZURhdGFTdG9yZShtYWtlV2Vha1B0cih3ZWJzaXRlRGF0YVN0
b3JlKSkKLSAgICAsIG1fc3RhdGlzdGljc1F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgUHJvY2VzcyBEYXRhIFF1ZXVlIiwgV29ya1F1ZXVlOjpU
eXBlOjpTZXJpYWwsIFdvcmtRdWV1ZTo6UU9TOjpVdGlsaXR5KSkKLSAgICAsIG1fZGFpbHlUYXNr
c1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6cGVyZm9ybURhaWx5VGFza3MpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKLQotICAgIHBvc3RUYXNrKFt0aGlzLCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
ID0gd2Vic2l0ZURhdGFTdG9yZS5yZXNvbHZlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rv
cnkoKS5pc29sYXRlZENvcHkoKV0gewotICAgICAgICBtX21lbW9yeVN0b3JlID0gc3RkOjptYWtl
X3VuaXF1ZTxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU+KCp0aGlzLCBtX3N0YXRp
c3RpY3NRdWV1ZSk7Ci0gICAgICAgIG1fcGVyc2lzdGVudFN0b3JhZ2UgPSBzdGQ6Om1ha2VfdW5p
cXVlPFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZT4oKm1fbWVtb3J5U3Rv
cmUsIG1fc3RhdGlzdGljc1F1ZXVlLCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KTsK
LSAgICB9KTsKLQotICAgIG1fZGFpbHlUYXNrc1RpbWVyLnN0YXJ0UmVwZWF0aW5nKDI0X2gpOwot
fQotCi1XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6On5XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUoKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBm
bHVzaEFuZERlc3Ryb3lQZXJzaXN0ZW50U3RvcmUoKTsKLX0KLQotaW5saW5lIHZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwb3N0VGFzayhXVEY6OkZ1bmN0aW9uPHZvaWQoKT4m
JiB0YXNrKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgbV9zdGF0aXN0
aWNzUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHRhc2sg
PSBXVEZNb3ZlKHRhc2spXSB7Ci0gICAgICAgIHRhc2soKTsKLSAgICB9KTsKLX0KLQotaW5saW5l
IHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwb3N0VGFza1JlcGx5KFdURjo6
RnVuY3Rpb248dm9pZCgpPiYmIHJlcGx5KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKHJlcGx5KSk7Ci19Ci0K
LXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmbHVzaEFuZERlc3Ryb3lQZXJz
aXN0ZW50U3RvcmUoKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBp
ZiAoIW1fcGVyc2lzdGVudFN0b3JhZ2UgJiYgIW1fbWVtb3J5U3RvcmUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIE1ha2Ugc3VyZSB3ZSBkZXN0cm95IHRoZSBwZXJzaXN0ZW50IHN0b3JlIG9u
IHRoZSBiYWNrZ3JvdW5kIHF1ZXVlIGFuZCB3YWl0IGZvciBpdCB0byBkaWUKLSAgICAvLyBzeW5j
aHJvbm91c2x5IHNpbmNlIGl0IGhhcyBhIEMrKyByZWZlcmVuY2UgdG8gdXMuIEJsb2NraW5nIG5h
dHVyZSBvZiB0aGlzIHRhc2sgYWxsb3dzIHVzCi0gICAgLy8gdG8gbm90IG1haW50YWluIGEgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIHJlZmVyZW5jZSBmb3IgdGhlIGR1cmF0aW9uIG9m
IGRpc3BhdGNoLAotICAgIC8vIGF2b2lkaW5nIGRvdWJsZS1kZWxldGlvbiBpc3N1ZXMgd2hlbiB0
aGlzIGlzIGludm9rZWQgZnJvbSB0aGUgZGVzdHJ1Y3Rvci4KLSAgICBCaW5hcnlTZW1hcGhvcmUg
c2VtYXBob3JlOwotICAgIG1fc3RhdGlzdGljc1F1ZXVlLT5kaXNwYXRjaChbJnNlbWFwaG9yZSwg
dGhpc10gewotICAgICAgICBtX3BlcnNpc3RlbnRTdG9yYWdlID0gbnVsbHB0cjsKLSAgICAgICAg
bV9tZW1vcnlTdG9yZSA9IG51bGxwdHI7Ci0gICAgICAgIHNlbWFwaG9yZS5zaWduYWwoKTsKLSAg
ICB9KTsKLSAgICBzZW1hcGhvcmUud2FpdCgpOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sIHZh
bHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0g
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHBvc3RUYXNrKFt0aGlzLCB2YWx1
ZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0
b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKHZhbHVlKTsKLSAgICAgICAg
cG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfSk7Ci19Ci0K
LXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJj
ZUZvckRlYnVnTW9kZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0K
LSAgICBwb3N0VGFzayhbdGhpcywgcHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFp
bih1cmwpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVt
b3J5U3RvcmUtPnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKHByaW1hcnlEb21haW4p
OwotICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxl
U3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZygpCi17Ci0gICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKLQotICAgIHBvc3RUYXNrKFt0aGlzXSB7Ci0gICAgICAgIGlmIChtX21l
bW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+cHJvY2Vzc1N0YXRpc3RpY3NB
bmREYXRhUmVjb3JkcygpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQoVmVjdG9yPFdlYkNvcmU6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiYgb3JpZ2lucykKLXsKLSAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwotCi0gICAgLy8gSXQgaXMgc2FmZSB0byBtb3ZlIHRoZSBvcmlnaW5zIHRv
IHRoZSBiYWNrZ3JvdW5kIHF1ZXVlIHdpdGhvdXQgaXNvbGF0ZWQgY29weSBoZXJlIGJlY2F1c2Ug
dGhpcyBpcyBhbiByLXZhbHVlCi0gICAgLy8gY29taW5nIGZyb20gSVBDLiBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzIG9ubHkgY29udGFpbnMgc3RyaW5ncyB3aGljaCBhcmUgc2FmZSB0byBtb3ZlIHRv
IG90aGVyIHRocmVhZHMgYXMgbG9uZwotICAgIC8vIGFzIG5vYm9keSBvbiB0aGlzIHRocmVhZCBo
b2xkcyBhIHJlZmVyZW5jZSB0byB0aG9zZSBzdHJpbmdzLgotICAgIHBvc3RUYXNrKFt0aGlzLCBv
cmlnaW5zID0gV1RGTW92ZShvcmlnaW5zKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFtX21l
bW9yeVN0b3JlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fbWVtb3J5U3RvcmUt
Pm1lcmdlU3RhdGlzdGljcyhXVEZNb3ZlKG9yaWdpbnMpKTsKLQotICAgICAgICAvLyBXZSBjYW4g
Y2FuY2VsIGFueSBwZW5kaW5nIHJlcXVlc3QgdG8gcHJvY2VzcyBzdGF0aXN0aWNzIHNpbmNlIHdl
J3JlIGRvaW5nIGl0IHN5bmNocm9ub3VzbHkgYmVsb3cuCi0gICAgICAgIG1fbWVtb3J5U3RvcmUt
PmNhbmNlbFBlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3QoKTsKLQotICAgICAgICAv
LyBGaXJlIGJlZm9yZSBwcm9jZXNzaW5nIHN0YXRpc3RpY3MgdG8gcHJvcGFnYXRlIHVzZXIgaW50
ZXJhY3Rpb24gYXMgZmFzdCBhcyBwb3NzaWJsZSB0byB0aGUgbmV0d29yayBwcm9jZXNzLgotICAg
ICAgICBtX21lbW9yeVN0b3JlLT51cGRhdGVDb29raWVCbG9ja2luZyhbXSgpIHsgfSk7Ci0gICAg
ICAgIG1fbWVtb3J5U3RvcmUtPnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsKLSAg
ICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc1N0b3Jh
Z2VBY2Nlc3MoU3RyaW5nJiYgc3ViRnJhbWVIb3N0LCBTdHJpbmcmJiB0b3BGcmFtZUhvc3QsIHVp
bnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAo
Ym9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKHN1YkZyYW1lSG9zdCAh
PSB0b3BGcmFtZUhvc3QpOwotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBw
b3N0VGFzayhbdGhpcywgc3ViRnJhbWVQcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9t
YWluKHN1YkZyYW1lSG9zdCksIHRvcEZyYW1lUHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFy
eURvbWFpbih0b3BGcmFtZUhvc3QpLCBmcmFtZUlELCBwYWdlSUQsIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBpZiAo
IW1fbWVtb3J5U3RvcmUpIHsKLSAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKLSAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1fbWVtb3J5U3RvcmUtPmhhc1N0
b3JhZ2VBY2Nlc3Moc3ViRnJhbWVQcmltYXJ5RG9tYWluLCB0b3BGcmFtZVByaW1hcnlEb21haW4s
IGZyYW1lSUQsIHBhZ2VJRCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKGJvb2wgaGFzU3RvcmFnZUFjY2VzcykgbXV0YWJsZSB7Ci0gICAgICAgICAgICBw
b3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpLCBoYXNTdG9yYWdlQWNjZXNzXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihoYXNTdG9yYWdlQWNjZXNzKTsKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmNhbGxIYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyKGNvbnN0IFN0cmluZyYgcmVzb3Vy
Y2VEb21haW4sIGNvbnN0IFN0cmluZyYgZmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3QgZnJhbWVJ
RCwgdWludDY0X3QgcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaGFzQWNjZXNz
KT4mJiBjYWxsYmFjaykKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0jaWYg
RU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0
b3JlKSB7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+aGFzU3RvcmFnZUFjY2Vzc0ZvckZy
YW1lSGFuZGxlcihyZXNvdXJjZURvbWFpbiwgZmlyc3RQYXJ0eURvbWFpbiwgZnJhbWVJRCwgcGFn
ZUlELCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYK
LSAgICBjYWxsYmFjayhmYWxzZSk7Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBzdWJGcmFtZUhvc3QsIFN0cmlu
ZyYmIHRvcEZyYW1lSG9zdCwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBib29s
IHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1N0YXR1
cyk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKHN1YkZyYW1lSG9zdCAhPSB0
b3BGcmFtZUhvc3QpOwotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRv
IHN1YkZyYW1lUHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbihzdWJGcmFtZUhv
c3QpOwotICAgIGF1dG8gdG9wRnJhbWVQcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9t
YWluKHRvcEZyYW1lSG9zdCk7Ci0gICAgaWYgKHN1YkZyYW1lUHJpbWFyeURvbWFpbiA9PSB0b3BG
cmFtZVByaW1hcnlEb21haW4pIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFj
Y2Vzc1N0YXR1czo6SGFzQWNjZXNzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBv
c3RUYXNrKFt0aGlzLCBzdWJGcmFtZVByaW1hcnlEb21haW4gPSBjcm9zc1RocmVhZENvcHkoc3Vi
RnJhbWVQcmltYXJ5RG9tYWluKSwgdG9wRnJhbWVQcmltYXJ5RG9tYWluID0gY3Jvc3NUaHJlYWRD
b3B5KHRvcEZyYW1lUHJpbWFyeURvbWFpbiksIGZyYW1lSUQsIHBhZ2VJRCwgcHJvbXB0RW5hYmxl
ZCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0
YWJsZSB7Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkgewotICAgICAgICAgICAgcG9zdFRh
c2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0g
KCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFj
Y2Vzc1N0YXR1czo6Q2Fubm90UmVxdWVzdEFjY2Vzcyk7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1fbWVtb3J5U3RvcmUtPnJlcXVl
c3RTdG9yYWdlQWNjZXNzKFdURk1vdmUoc3ViRnJhbWVQcmltYXJ5RG9tYWluKSwgV1RGTW92ZSh0
b3BGcmFtZVByaW1hcnlEb21haW4pLCBmcmFtZUlELCBwYWdlSUQsIHByb21wdEVuYWJsZWQsIFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTdG9yYWdlQWNj
ZXNzU3RhdHVzIHN0YXR1cykgbXV0YWJsZSB7Ci0gICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdGF0dXNdICgp
IG11dGFibGUgewotICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0YXR1cyk7Ci0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKFN0
cmluZyYmIHByaW1hcnlEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MsIHVpbnQ2NF90IG9wZW5l
clBhZ2VJRCwgU3RyaW5nJiYgb3BlbmVyUHJpbWFyeURvbWFpbikKLXsKLSAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwotCi0gICAgLy8gSXQgaXMgc2FmZSB0byBtb3ZlIHRoZSBzdHJpbmdz
IHRvIHRoZSBiYWNrZ3JvdW5kIHF1ZXVlIHdpdGhvdXQgaXNvbGF0ZWQgY29weSBoZXJlIGJlY2F1
c2UgdGhleSBhcmUgci12YWx1ZSByZWZlcmVuY2VzCi0gICAgLy8gY29taW5nIGZyb20gSVBDLiBT
dHJpbmdzIHdoaWNoIGFyZSBzYWZlIHRvIG1vdmUgdG8gb3RoZXIgdGhyZWFkcyBhcyBsb25nIGFz
IG5vYm9keSBvbiB0aGlzIHRocmVhZCBob2xkcyBhIHJlZmVyZW5jZQotICAgIC8vIHRvIHRob3Nl
IHN0cmluZ3MuCi0gICAgcG9zdFRhc2soW3RoaXMsIHByaW1hcnlEb21haW5Jbk5lZWRPZlN0b3Jh
Z2VBY2Nlc3MgPSBXVEZNb3ZlKHByaW1hcnlEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MpLCBv
cGVuZXJQYWdlSUQsIG9wZW5lclByaW1hcnlEb21haW4gPSBXVEZNb3ZlKG9wZW5lclByaW1hcnlE
b21haW4pXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAg
ICAgIG1fbWVtb3J5U3RvcmUtPnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoV1RGTW92
ZShwcmltYXJ5RG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzKSwgb3BlbmVyUGFnZUlELCBXVEZN
b3ZlKG9wZW5lclByaW1hcnlEb21haW4pKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdyYW50U3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBzdWJGcmFt
ZUhvc3QsIFN0cmluZyYmIHRvcEZyYW1lSG9zdCwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3Qg
cGFnZUlELCBib29sIHVzZXJXYXNQcm9tcHRlZE5vdywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChi
b29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwotICAgIHBvc3RUYXNrKFt0aGlzLCBzdWJGcmFtZUhvc3QgPSBjcm9zc1RocmVhZENvcHko
c3ViRnJhbWVIb3N0KSwgdG9wRnJhbWVIb3N0ID0gY3Jvc3NUaHJlYWRDb3B5KHRvcEZyYW1lSG9z
dCksIGZyYW1lSUQsIHBhZ2VJRCwgdXNlcldhc1Byb21wdGVkTm93LCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgaWYg
KCFtX21lbW9yeVN0b3JlKSB7Ci0gICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Ci0gICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1fbWVtb3J5U3RvcmUtPmdy
YW50U3RvcmFnZUFjY2VzcyhXVEZNb3ZlKHN1YkZyYW1lSG9zdCksIFdURk1vdmUodG9wRnJhbWVI
b3N0KSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0ZWROb3csIFtjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShib29sIHdhc0dyYW50ZWRBY2Nlc3Mp
IG11dGFibGUgewotICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgd2FzR3JhbnRlZEFjY2Vzc10gKCkgbXV0YWJs
ZSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2FzR3JhbnRlZEFjY2Vzcyk7
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjYWxsR3JhbnRTdG9yYWdlQWNjZXNzSGFuZGxlcihj
b25zdCBTdHJpbmcmIHN1YkZyYW1lUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiB0b3BGcmFt
ZVByaW1hcnlEb21haW4sIE9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCB1aW50NjRfdCBwYWdl
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spCi17Ci0gICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJ
U1RJQ1MpCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBtX3dlYnNpdGVE
YXRhU3RvcmUtPmdyYW50U3RvcmFnZUFjY2Vzc0hhbmRsZXIoc3ViRnJhbWVQcmltYXJ5RG9tYWlu
LCB0b3BGcmFtZVByaW1hcnlEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgV1RGTW92ZShjYWxsYmFj
aykpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0gICAgY2FsbGJhY2soZmFsc2Up
OwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZGlkQ3JlYXRlTmV0
d29ya1Byb2Nlc3MoKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBw
b3N0VGFzayhbdGhpc10gewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIG1fbWVtb3J5U3RvcmUtPmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNz
KCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpy
ZW1vdmVBbGxTdG9yYWdlQWNjZXNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0jaWYgRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3Jl
KQotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3NIYW5k
bGVyKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7Ci0jZWxzZQotICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0jZW5kaWYK
LX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmFwcGxpY2F0aW9uV2ls
bFRlcm1pbmF0ZSgpCi17Ci0gICAgZmx1c2hBbmREZXN0cm95UGVyc2lzdGVudFN0b3JlKCk7Ci19
Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwZXJmb3JtRGFpbHlUYXNr
cygpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHBvc3RUYXNrKFt0
aGlzXSB7Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBtX21lbW9yeVN0b3JlLT5pbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5l
Y2Vzc2FyeSgpOwotICAgICAgICBtX21lbW9yeVN0b3JlLT5jYWxjdWxhdGVBbmRTdWJtaXRUZWxl
bWV0cnkoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnN1Ym1pdFRlbGVtZXRyeSgpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIHBvc3RUYXNrKFt0aGlzXSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAg
ICAgICAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6Y2FsY3VsYXRlQW5k
U3VibWl0KCptX21lbW9yeVN0b3JlKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBXZWJGcmFtZVByb3h5
JiBmcmFtZSwgY29uc3QgVVJMJiBwYWdlVVJMLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFVSTCYgcmVkaXJlY3RVUkwpCi17Ci0gICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gc291cmNlVVJMID0gcmVkaXJlY3RVUkw7Ci0gICAg
Ym9vbCBpc1JlZGlyZWN0ID0gIXJlZGlyZWN0VVJMLmlzTnVsbCgpOwotICAgIGlmICghaXNSZWRp
cmVjdCkgewotICAgICAgICBzb3VyY2VVUkwgPSBmcmFtZS51cmwoKTsKLSAgICAgICAgaWYgKHNv
dXJjZVVSTC5pc051bGwoKSkKLSAgICAgICAgICAgIHNvdXJjZVVSTCA9IHBhZ2VVUkw7Ci0gICAg
fQotCi0gICAgYXV0byYgdGFyZ2V0VVJMID0gcmVxdWVzdC51cmwoKTsKLQotICAgIGlmICghdGFy
Z2V0VVJMLmlzVmFsaWQoKSB8fCAhcGFnZVVSTC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGF1dG8gdGFyZ2V0SG9zdCA9IHRhcmdldFVSTC5ob3N0KCk7Ci0gICAgYXV0byBtYWlu
RnJhbWVIb3N0ID0gcGFnZVVSTC5ob3N0KCk7Ci0KLSAgICBpZiAodGFyZ2V0SG9zdC5pc0VtcHR5
KCkgfHwgbWFpbkZyYW1lSG9zdC5pc0VtcHR5KCkgfHwgdGFyZ2V0SG9zdCA9PSBzb3VyY2VVUkwu
aG9zdCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHRhcmdldFByaW1hcnlEb21haW4g
PSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpwcmltYXJ5RG9tYWluKHRhcmdldFVSTCk7Ci0gICAg
YXV0byBtYWluRnJhbWVQcmltYXJ5RG9tYWluID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6cHJp
bWFyeURvbWFpbihwYWdlVVJMKTsKLSAgICBhdXRvIHNvdXJjZVByaW1hcnlEb21haW4gPSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzOjpwcmltYXJ5RG9tYWluKHNvdXJjZVVSTCk7Ci0KLSAgICBwb3N0
VGFzayhbdGhpcywgdGFyZ2V0UHJpbWFyeURvbWFpbiA9IHRhcmdldFByaW1hcnlEb21haW4uaXNv
bGF0ZWRDb3B5KCksIG1haW5GcmFtZVByaW1hcnlEb21haW4gPSBtYWluRnJhbWVQcmltYXJ5RG9t
YWluLmlzb2xhdGVkQ29weSgpLCBzb3VyY2VQcmltYXJ5RG9tYWluID0gc291cmNlUHJpbWFyeURv
bWFpbi5pc29sYXRlZENvcHkoKSwgdGFyZ2V0SG9zdCA9IHRhcmdldEhvc3QudG9TdHJpbmcoKS5p
c29sYXRlZENvcHkoKSwgbWFpbkZyYW1lSG9zdCA9IG1haW5GcmFtZUhvc3QudG9TdHJpbmcoKS5p
c29sYXRlZENvcHkoKSwgaXNSZWRpcmVjdCwgaXNNYWluRnJhbWUgPSBmcmFtZS5pc01haW5GcmFt
ZSgpXSB7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAg
IG1fbWVtb3J5U3RvcmUtPmxvZ0ZyYW1lTmF2aWdhdGlvbih0YXJnZXRQcmltYXJ5RG9tYWluLCBt
YWluRnJhbWVQcmltYXJ5RG9tYWluLCBzb3VyY2VQcmltYXJ5RG9tYWluLCB0YXJnZXRIb3N0LCBt
YWluRnJhbWVIb3N0LCBpc1JlZGlyZWN0LCBpc01haW5GcmFtZSk7Ci0gICAgfSk7Ci19Ci0KLXZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKHVybC5wcm90
b2NvbElzQWJvdXQoKSB8fCB1cmwuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwb3N0VGFzayhbdGhpcywgcHJp
bWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih1cmwpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAo
bV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmxvZ1VzZXJJbnRlcmFj
dGlvbihwcmltYXJ5RG9tYWluKTsKLSAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAodXJsLnByb3RvY29sSXNBYm91dCgpIHx8IHVybC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQ
cmltYXJ5RG9tYWluKHVybCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAg
ICAgICAgbV9tZW1vcnlTdG9yZS0+Y2xlYXJVc2VySW50ZXJhY3Rpb24ocHJpbWFyeURvbWFpbik7
Ci0gICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAg
IH0pOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzSGFkVXNl
ckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChib29s
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgaWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9t
YWluKHVybCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
ICgpIG11dGFibGUgewotICAgICAgICBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiA9IG1fbWVtb3J5
U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5oYXNIYWRVc2VySW50ZXJhY3Rpb24ocHJpbWFyeURvbWFp
bikgOiBmYWxzZTsKLSAgICAgICAgcG9zdFRhc2tSZXBseShbaGFkVXNlckludGVyYWN0aW9uLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGhhZFVzZXJJbnRlcmFjdGlvbik7Ci0g
ICAgICAgIH0pOwotICAgIH0pOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJMJiB1cmwsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAodXJsLnByb3RvY29sSXNBYm91dCgpIHx8IHVy
bC5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5RG9tYWluID0gaXNvbGF0
ZWRQcmltYXJ5RG9tYWluKHVybCksIHNlY29uZHMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0
b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0TGFzdFNlZW4ocHJpbWFyeURvbWFp
biwgc2Vjb25kcyk7Ci0gICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotICAgIH0pOwotfQotICAgIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotICAgIGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkgfHwgdXJsLmlzRW1w
dHkoKSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgcG9zdFRhc2soW3RoaXMsIHByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1h
cnlEb21haW4odXJsKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAg
ICBtX21lbW9yeVN0b3JlLT5zZXRQcmV2YWxlbnRSZXNvdXJjZShwcmltYXJ5RG9tYWluKTsKLSAg
ICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfSk7
Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRWZXJ5UHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgaWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwb3N0
VGFzayhbdGhpcywgcHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih1cmwpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
ewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUt
PnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShwcmltYXJ5RG9tYWluKTsKLSAgICAgICAgcG9zdFRh
c2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfSk7Ci19Ci0gICAgCi12
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRp
c3RpY3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgcG9zdFRh
c2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
ICgpIG11dGFibGUgewotICAgICAgICBTdHJpbmcgcmVzdWx0ID0gbV9tZW1vcnlTdG9yZSA/IG1f
bWVtb3J5U3RvcmUtPmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgOiBlbXB0eVN0cmluZygp
OwotICAgICAgICBwb3N0VGFza1JlcGx5KFtyZXN1bHQgPSByZXN1bHQuaXNvbGF0ZWRDb3B5KCks
IGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFi
bGUgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVzdWx0KTsKLSAgICAgICAgfSk7
Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1By
ZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChi
b29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwotCi0gICAgaWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5
RG9tYWluKHVybCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildICgpIG11dGFibGUgewotICAgICAgICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UgPSBtX21l
bW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNQcmV2YWxlbnRSZXNvdXJjZShwcmltYXJ5RG9t
YWluKSA6IGZhbHNlOwotICAgICAgICBwb3N0VGFza1JlcGx5KFtpc1ByZXZhbGVudFJlc291cmNl
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRh
YmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGlzUHJldmFsZW50UmVzb3VyY2Up
OwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAodXJsLnByb3RvY29sSXNBYm91dCgpIHx8
IHVybC5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5RG9t
YWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHVybCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBib29sIGlzVmVy
eVByZXZhbGVudFJlc291cmNlID0gbV9tZW1vcnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUtPmlzVmVy
eVByZXZhbGVudFJlc291cmNlKHByaW1hcnlEb21haW4pIDogZmFsc2U7Ci0gICAgICAgIHBvc3RU
YXNrUmVwbHkoW2lzVmVyeVByZXZhbGVudFJlc291cmNlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKGlzVmVyeVByZXZhbGVudFJlc291cmNlKTsKLSAgICAgICAgfSk7Ci0gICAg
fSk7Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVy
ZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3QgVVJMJiBzdWJyZXNvdXJjZSwgY29uc3QgVVJMJiB0
b3BGcmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIAotICAgIHBvc3RUYXNr
KFt0aGlzLCBzdWJyZXNvdXJjZVByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4o
c3VicmVzb3VyY2UpLCB0b3BGcmFtZVByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21h
aW4odG9wRnJhbWUpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIgPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNSZWdpc3RlcmVkQXNTdWJy
ZXNvdXJjZVVuZGVyKHN1YnJlc291cmNlUHJpbWFyeURvbWFpbiwgdG9wRnJhbWVQcmltYXJ5RG9t
YWluKSA6IGZhbHNlOwotICAgICAgICBwb3N0VGFza1JlcGx5KFtpc1JlZ2lzdGVyZWRBc1N1YnJl
c291cmNlVW5kZXIsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildICgpIG11dGFibGUgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaXNSZWdpc3Rl
cmVkQXNTdWJyZXNvdXJjZVVuZGVyKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5k
ZXIoY29uc3QgVVJMJiBzdWJGcmFtZSwgY29uc3QgVVJMJiB0b3BGcmFtZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCAoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHBvc3RUYXNrKFt0aGlzLCBzdWJGcmFtZVByaW1hcnlE
b21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4oc3ViRnJhbWUpLCB0b3BGcmFtZVByaW1hcnlE
b21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odG9wRnJhbWUpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgYm9v
bCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIgPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlT
dG9yZS0+aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKHN1YkZyYW1lUHJpbWFyeURvbWFpbiwg
dG9wRnJhbWVQcmltYXJ5RG9tYWluKSA6IGZhbHNlOwotICAgICAgICBwb3N0VGFza1JlcGx5KFtp
c1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7
Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVyZWRB
c1JlZGlyZWN0aW5nVG8oY29uc3QgVVJMJiBob3N0UmVkaXJlY3RlZEZyb20sIGNvbnN0IFVSTCYg
aG9zdFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHBv
c3RUYXNrKFt0aGlzLCBob3N0UmVkaXJlY3RlZEZyb21QcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQ
cmltYXJ5RG9tYWluKGhvc3RSZWRpcmVjdGVkRnJvbSksIGhvc3RSZWRpcmVjdGVkVG9QcmltYXJ5
RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKGhvc3RSZWRpcmVjdGVkVG8pLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAg
ICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8gPSBtX21lbW9yeVN0b3JlID8g
bV9tZW1vcnlTdG9yZS0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGhvc3RSZWRpcmVjdGVk
RnJvbVByaW1hcnlEb21haW4sIGhvc3RSZWRpcmVjdGVkVG9QcmltYXJ5RG9tYWluKSA6IGZhbHNl
OwotICAgICAgICBwb3N0VGFza1JlcGx5KFtpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8sIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUg
ewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGlu
Z1RvKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkgfHwg
dXJsLmlzRW1wdHkoKSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgcG9zdFRhc2soW3RoaXMsIHByaW1hcnlEb21haW4gPSBpc29s
YXRlZFByaW1hcnlEb21haW4odXJsKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0g
ICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5jbGVhclByZXZhbGVudFJlc291cmNlKHByaW1hcnlE
b21haW4pOwotICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dEdyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIGJvb2wgdmFsdWUpCi17Ci0gICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkgfHwg
dXJsLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcG9zdFRhc2soW3RoaXMsIHBy
aW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odXJsKSwgdmFsdWVdIHsKLSAgICAg
ICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRHcmFu
ZGZhdGhlcmVkKHByaW1hcnlEb21haW4sIHZhbHVlKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVy
bCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17
Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmICh1cmwucHJvdG9jb2xJ
c0Fib3V0KCkgfHwgdXJsLmlzRW1wdHkoKSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwb3N0VGFzayhbdGhpcywgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgcHJpbWFyeURvbWFp
biA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih1cmwpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgYm9v
bCBpc0dyYW5kRmF0aGVyZWQgPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNHcmFu
ZGZhdGhlcmVkKHByaW1hcnlEb21haW4pIDogZmFsc2U7Ci0gICAgICAgIHBvc3RUYXNrUmVwbHko
W2lzR3JhbmRGYXRoZXJlZCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihpc0dy
YW5kRmF0aGVyZWQpOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihjb25z
dCBVUkwmIHN1YmZyYW1lLCBjb25zdCBVUkwmIHRvcEZyYW1lKQotewotICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoc3ViZnJhbWUucHJvdG9jb2xJc0Fib3V0KCkgfHwg
c3ViZnJhbWUuaXNFbXB0eSgpIHx8IHRvcEZyYW1lLnByb3RvY29sSXNBYm91dCgpIHx8IHRvcEZy
YW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcG9zdFRhc2soW3RoaXMsIHBy
aW1hcnlUb3BGcmFtZURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih0b3BGcmFtZSksIHBy
aW1hcnlTdWJGcmFtZURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbihzdWJmcmFtZSldIHsK
LSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5z
ZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4ocHJpbWFyeVN1YkZyYW1lRG9tYWluLCBwcmlt
YXJ5VG9wRnJhbWVEb21haW4pOwotICAgIH0pOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0IFVS
TCYgc3VicmVzb3VyY2UsIGNvbnN0IFVSTCYgdG9wRnJhbWUpCi17Ci0gICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChzdWJyZXNvdXJjZS5wcm90b2NvbElzQWJvdXQoKSB8
fCBzdWJyZXNvdXJjZS5pc0VtcHR5KCkgfHwgdG9wRnJhbWUucHJvdG9jb2xJc0Fib3V0KCkgfHwg
dG9wRnJhbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwb3N0VGFzayhbdGhp
cywgcHJpbWFyeVRvcEZyYW1lRG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHRvcEZyYW1l
KSwgcHJpbWFyeVN1YnJlc291cmNlRG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHN1YnJl
c291cmNlKV0gewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVt
b3J5U3RvcmUtPnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihwcmltYXJ5U3VicmVz
b3VyY2VEb21haW4sIHByaW1hcnlUb3BGcmFtZURvbWFpbik7Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJjZSwgY29uc3QgVVJMJiBob3N0TmFtZVJlZGlyZWN0
ZWRUbykKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKHN1YnJl
c291cmNlLnByb3RvY29sSXNBYm91dCgpIHx8IHN1YnJlc291cmNlLmlzRW1wdHkoKSB8fCBob3N0
TmFtZVJlZGlyZWN0ZWRUby5wcm90b2NvbElzQWJvdXQoKSB8fCBob3N0TmFtZVJlZGlyZWN0ZWRU
by5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBvc3RUYXNrKFt0aGlzLCBwcmlt
YXJ5UmVkaXJlY3REb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4oaG9zdE5hbWVSZWRpcmVj
dGVkVG8pLCBwcmltYXJ5U3VicmVzb3VyY2VEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4o
c3VicmVzb3VyY2UpXSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAg
bV9tZW1vcnlTdG9yZS0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKHByaW1hcnlTdWJy
ZXNvdXJjZURvbWFpbiwgcHJpbWFyeVJlZGlyZWN0RG9tYWluKTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVzb3VyY2UsIGNvbnN0IFVSTCYgaG9zdE5hbWVSZWRp
cmVjdGVkRnJvbSkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYg
KHN1YnJlc291cmNlLnByb3RvY29sSXNBYm91dCgpIHx8IHN1YnJlc291cmNlLmlzRW1wdHkoKSB8
fCBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tLnByb3RvY29sSXNBYm91dCgpIHx8IGhvc3ROYW1lUmVk
aXJlY3RlZEZyb20uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgcG9zdFRh
c2soW3RoaXMsIHByaW1hcnlSZWRpcmVjdERvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbiho
b3N0TmFtZVJlZGlyZWN0ZWRGcm9tKSwgcHJpbWFyeVN1YnJlc291cmNlRG9tYWluID0gaXNvbGF0
ZWRQcmltYXJ5RG9tYWluKHN1YnJlc291cmNlKV0gewotICAgICAgICBpZiAobV9tZW1vcnlTdG9y
ZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RGcm9tKHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbiwgcHJpbWFyeVJlZGlyZWN0RG9tYWluKTsK
LSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZyYW1lSG9zdE5hbWUsIGNvbnN0
IFVSTCYgaG9zdE5hbWVSZWRpcmVjdGVkVG8pCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKLQotICAgIGlmICh0b3BGcmFtZUhvc3ROYW1lLnByb3RvY29sSXNBYm91dCgpIHx8IHRv
cEZyYW1lSG9zdE5hbWUuaXNFbXB0eSgpIHx8IGhvc3ROYW1lUmVkaXJlY3RlZFRvLnByb3RvY29s
SXNBYm91dCgpIHx8IGhvc3ROYW1lUmVkaXJlY3RlZFRvLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5UmVkaXJlY3REb21haW4gPSBp
c29sYXRlZFByaW1hcnlEb21haW4oaG9zdE5hbWVSZWRpcmVjdGVkVG8pLCB0b3BGcmFtZVByaW1h
cnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odG9wRnJhbWVIb3N0TmFtZSldIHsKLSAg
ICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8odG9wRnJhbWVQcmltYXJ5RG9tYWluLCBwcmltYXJ5UmVk
aXJlY3REb21haW4pOwotICAgIH0pOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiB0b3BGcmFt
ZUhvc3ROYW1lLCBjb25zdCBVUkwmIGhvc3ROYW1lUmVkaXJlY3RlZEZyb20pCi17Ci0gICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmICh0b3BGcmFtZUhvc3ROYW1lLnByb3Rv
Y29sSXNBYm91dCgpIHx8IHRvcEZyYW1lSG9zdE5hbWUuaXNFbXB0eSgpIHx8IGhvc3ROYW1lUmVk
aXJlY3RlZEZyb20ucHJvdG9jb2xJc0Fib3V0KCkgfHwgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBwb3N0VGFzayhbdGhpcywgcHJp
bWFyeVJlZGlyZWN0RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKGhvc3ROYW1lUmVkaXJl
Y3RlZEZyb20pLCB0b3BGcmFtZVByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4o
dG9wRnJhbWVIb3N0TmFtZSldIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAg
ICAgICBtX21lbW9yeVN0b3JlLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSh0b3BGcmFt
ZVByaW1hcnlEb21haW4sIHByaW1hcnlSZWRpcmVjdERvbWFpbik7Ci0gICAgfSk7Ci19Ci0KLXZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5n
VXBkYXRlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsK
LSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSB0ZXN0aW5nIHN5c3RlbS4gU2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLgotICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7Ci0KLSAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghbV9tZW1v
cnlTdG9yZSkgewotICAgICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbV9tZW1v
cnlTdG9yZS0+dXBkYXRlQ29va2llQmxvY2tpbmcoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICAgICAgcG9zdFRhc2tS
ZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwot
fQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDb29raWVC
bG9ja2luZ1VwZGF0ZUZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb0Js
b2NrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0g
ICAgLy8gSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgdGVzdGluZyBzeXN0ZW0uIFNob3VsZCBvbmx5
IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwotICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW5zVG9CbG9jayA9IGNyb3NzVGhyZWFk
Q29weShkb21haW5zVG9CbG9jayksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpIHsK
LSAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+
dXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKGRvbWFpbnNUb0Jsb2NrLCBbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAg
ICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAg
ICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNjaGVkdWxlQ2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgZG9tYWlucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQotewotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IHRlc3Rpbmcgc3lzdGVtLiBTaG91
bGQgb25seSBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCi0gICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKLSAgICBwb3N0VGFzayhbdGhpcywgZG9tYWlucyA9IGNyb3NzVGhyZWFk
Q29weShkb21haW5zKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkgewotICAgICAg
ICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBtX21lbW9yeVN0b3JlLT5jbGVhckJs
b2NraW5nU3RhdGVGb3JEb21haW5zKGRvbWFpbnMsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICAgICAgcG9zdFRhc2tS
ZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwot
fQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhcklu
TWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRHcmFuZGZhdGhlciBzaG91bGRHcmFuZGZhdGhlciwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgcG9zdFRhc2soW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgc2hvdWxkR3JhbmRmYXRoZXIsIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBpZiAo
bV9wZXJzaXN0ZW50U3RvcmFnZSkKLSAgICAgICAgICAgIG1fcGVyc2lzdGVudFN0b3JhZ2UtPmNs
ZWFyKCk7Ci0KLSAgICAgICAgQ29tcGxldGlvbkhhbmRsZXJDYWxsaW5nU2NvcGUgY29tcGxldGlv
bkhhbmRsZXJDYWxsZXIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgaWYgKG1fbWVtb3J5U3Rv
cmUpIHsKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmNsZWFyKFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gcHJvdGVjdGVkVGhpcy5jb3B5UmVmKCksIHNob3VsZEdyYW5kZmF0aGVyLCBjb21wbGV0
aW9uSGFuZGxlckNhbGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXJDYWxsZXIpXSAoKSBt
dXRhYmxlIHsKLSAgICAgICAgICAgICAgICBpZiAoc2hvdWxkR3JhbmRmYXRoZXIgPT0gU2hvdWxk
R3JhbmRmYXRoZXI6OlllcykgewotICAgICAgICAgICAgICAgICAgICBpZiAobV9tZW1vcnlTdG9y
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmdyYW5kZmF0aGVyRXhp
c3RpbmdXZWJzaXRlRGF0YShjb21wbGV0aW9uSGFuZGxlckNhbGxlci5yZWxlYXNlKCkpOwotICAg
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0xP
RyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50IEFmdGVyIGJlaW5nIGNsZWFyZWQs
IG1fbWVtb3J5U3RvcmUgaXMgbnVsbCB3aGVuIHRyeWluZyB0byBncmFuZGZhdGhlciBkYXRhLiIp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgaWYgKHNob3VsZEdyYW5kZmF0aGVyID09IFNob3VsZEdyYW5kZmF0aGVyOjpZ
ZXMpCi0gICAgICAgICAgICAgICAgUkVMRUFTRV9MT0coUmVzb3VyY2VMb2FkU3RhdGlzdGljcywg
IldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5k
UGVyc2lzdGVudCBCZWZvcmUgYmVpbmcgY2xlYXJlZCwgbV9tZW1vcnlTdG9yZSBpcyBudWxsIHdo
ZW4gdHJ5aW5nIHRvIGdyYW5kZmF0aGVyIGRhdGEuIik7Ci0gICAgICAgIH0KLSAgICB9KTsKLX0K
LQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1l
bW9yeUFuZFBlcnNpc3RlbnQoV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgU2hvdWxkR3JhbmRmYXRo
ZXIgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFj
aykKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgLy8gRm9yIG5vdywg
YmUgY29uc2VydmF0aXZlIGFuZCBjbGVhciBldmVyeXRoaW5nIHJlZ2FyZGxlc3Mgb2YgbW9kaWZp
ZWRTaW5jZS4KLSAgICBVTlVTRURfUEFSQU0obW9kaWZpZWRTaW5jZSk7Ci0gICAgc2NoZWR1bGVD
bGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChzaG91bGRHcmFuZGZhdGhlciwgV1RGTW92ZShjYWxs
YmFjaykpOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VGlt
ZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihTZWNvbmRzIHNlY29uZHMpCi17Ci0gICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKLSAgICBwb3N0VGFzayhbdGhpcywgc2Vjb25kc10gewotICAgICAg
ICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFRpbWVU
b0xpdmVVc2VySW50ZXJhY3Rpb24oc2Vjb25kcyk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jk
c1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7Ci0gICAgcG9zdFRhc2soW3RoaXMsIHNlY29uZHNdIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5
U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwoc2Vjb25kcyk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNv
bmRzKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgcG9zdFRhc2soW3Ro
aXMsIHNlY29uZHNdIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBt
X21lbW9yeVN0b3JlLT5zZXRHcmFuZGZhdGhlcmluZ1RpbWUoc2Vjb25kcyk7Ci0gICAgfSk7Ci19
Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRDYWNoZU1heEFnZUNh
cChTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChz
ZWNvbmRzID49IDBfcyk7Ci0gICAgCi0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFT
dG9yZS0+c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoc2Vjb25kcywgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlm
Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmNhbGxVcGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3JI
YW5kbGVyKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9CbG9jaywgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7Ci0KLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAg
IGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT51
cGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3IoZG9tYWluc1RvQmxvY2ssIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRp
ZgotICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpjYWxsUmVtb3ZlRG9tYWluc0hhbmRsZXIoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGRvbWFpbnMpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotI2lmIEVO
QUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9y
ZSkKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5yZW1vdmVQcmV2YWxlbnREb21haW5zKGRv
bWFpbnMpOwotI2VuZGlmCi19Ci0gICAgCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50KQot
ewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgcG9zdFRhc2soW3RoaXMsIG1h
eGltdW1FbnRyeUNvdW50XSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAg
ICAgbV9tZW1vcnlTdG9yZS0+c2V0TWF4U3RhdGlzdGljc0VudHJpZXMobWF4aW11bUVudHJ5Q291
bnQpOwotICAgIH0pOwotfQotICAgIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCkKLXsKLSAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgcG9zdFRhc2soW3RoaXMsIHBydW5l
VGFyZ2V0Q291bnRdIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBt
X21lbW9yeVN0b3JlLT5zZXRQcnVuZUVudHJpZXNEb3duVG8ocHJ1bmVUYXJnZXRDb3VudCk7Ci0g
ICAgfSk7Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNldFBh
cmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBw
b3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAg
ICBtX21lbW9yeVN0b3JlLT5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoKTsKLQotICAg
ICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9KTsK
LX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1Rlc3RpbmdFdmVu
dChjb25zdCBTdHJpbmcmIGV2ZW50KQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
Ci0KLSAgICBpZiAobV9zdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKQotICAgICAgICBtX3N0YXRp
c3RpY3NUZXN0aW5nQ2FsbGJhY2soZXZlbnQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4MTcwNGE0ZWYy
OTlkYzA4M2QyNzlmNTM0Yzc3MjgxY2ZhNzZiNGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0j
aW5jbHVkZSAiV2Vic2l0ZURhdGFUeXBlLmgiCi0jaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5k
bGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL1dh
bGxUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBXb3JrUXVldWU7Ci19Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFJlc291cmNlUmVxdWVzdDsKLXN0cnVjdCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOwotY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BlcnNpc3RlbnRTdG9yYWdlOwotY2xhc3MgV2ViRnJhbWVQcm94eTsKLWNsYXNzIFdlYlByb2Nl
c3NQcm94eTsKLWNsYXNzIFdlYnNpdGVEYXRhU3RvcmU7Ci0KLWVudW0gY2xhc3MgU3RvcmFnZUFj
Y2Vzc1N0YXR1cyB7Ci0gICAgQ2Fubm90UmVxdWVzdEFjY2VzcywKLSAgICBSZXF1aXJlc1VzZXJQ
cm9tcHQsCi0gICAgSGFzQWNjZXNzCi19OwotCi1jbGFzcyBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUgZmluYWwgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLCBXVEY6OkRlc3RydWN0aW9uVGhyZWFkOjpNYWluPiwgcHVibGlj
IElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gY3JlYXRlKFdlYnNpdGVEYXRhU3RvcmUmIHdlYnNpdGVE
YXRhU3RvcmUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUod2Vic2l0ZURhdGFTdG9yZSkpOwotICAgIH0KLQotICAgIH5X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoKTsKLQotICAgIHN0YXRpYyBjb25zdCBPcHRp
b25TZXQ8V2Vic2l0ZURhdGFUeXBlPiYgbW9uaXRvcmVkRGF0YVR5cGVzKCk7Ci0KLSAgICBXb3Jr
UXVldWUmIHN0YXRpc3RpY3NRdWV1ZSgpIHsgcmV0dXJuIG1fc3RhdGlzdGljc1F1ZXVlLmdldCgp
OyB9Ci0KLSAgICB2b2lkIHNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQo
Ym9vbCk7Ci0gICAgdm9pZCBzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNv
cmRzUmVtb3ZhbChib29sKTsKLSAgICB2b2lkIHNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeShib29s
KTsKLQotICAgIHZvaWQgaGFzU3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBzdWJGcmFtZUhvc3QsIFN0
cmluZyYmIHRvcEZyYW1lSG9zdCwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKTsKLSAgICB2b2lkIHJlcXVl
c3RTdG9yYWdlQWNjZXNzKFN0cmluZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJhbWVI
b3N0LCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgcHJvbXB0RW5hYmxl
ZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVzKT4mJik7Ci0gICAg
dm9pZCBncmFudFN0b3JhZ2VBY2Nlc3MoU3RyaW5nJiYgc3ViRnJhbWVIb3N0LCBTdHJpbmcmJiB0
b3BGcmFtZUhvc3QsIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCB1c2Vy
V2FzUHJvbXB0ZWROb3csIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwotICAgIHZv
aWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3NDYWxsYmFjayhib29sIHdhc0dyYW50ZWQsIHVpbnQ2NF90
IGNvbnRleHRJZCk7Ci0KLSAgICB2b2lkIGFwcGxpY2F0aW9uV2lsbFRlcm1pbmF0ZSgpOwotCi0g
ICAgdm9pZCBsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgV2ViRnJhbWVQcm94eSYsIGNvbnN0IFVS
TCYgcGFnZVVSTCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgVVJMJiBy
ZWRpcmVjdFVSTCk7Ci0gICAgdm9pZCBsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIGNsZWFyVXNlckludGVyYWN0aW9u
KGNvbnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCBoYXNI
YWRVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
KT4mJik7Ci0gICAgdm9pZCBzZXRMYXN0U2Vlbihjb25zdCBVUkwmLCBTZWNvbmRzLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoY29u
c3QgVVJMJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHNldFZlcnlQ
cmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
OwotICAgIHZvaWQgZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChjb25zdCBTdHJpbmcmKT4mJik7Ci0gICAgdm9pZCBpc1ByZXZhbGVudFJlc291cmNlKGNv
bnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwotICAgIHZvaWQgaXNW
ZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChi
b29sKT4mJik7Ci0gICAgdm9pZCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3Qg
VVJMJiBzdWJyZXNvdXJjZSwgY29uc3QgVVJMJiB0b3BGcmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sKT4mJik7Ci0gICAgdm9pZCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29u
c3QgVVJMJiBzdWJGcmFtZSwgY29uc3QgVVJMJiB0b3BGcmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sKT4mJik7Ci0gICAgdm9pZCBpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29u
c3QgVVJMJiBob3N0UmVkaXJlY3RlZEZyb20sIGNvbnN0IFVSTCYgaG9zdFJlZGlyZWN0ZWRUbywg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7Ci0gICAgdm9pZCBjbGVhclByZXZhbGVu
dFJlc291cmNlKGNvbnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAg
dm9pZCBzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYsIGJvb2wpOwotICAgIHZvaWQgaXNHcmFu
ZGZhdGhlcmVkKGNvbnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwot
ICAgIHZvaWQgc2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0IFVSTCYgc3ViZnJh
bWUsIGNvbnN0IFVSTCYgdG9wRnJhbWUpOwotICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lT3JpZ2luKGNvbnN0IFVSTCYgc3VicmVzb3VyY2UsIGNvbnN0IFVSTCYgdG9wRnJhbWUp
OwotICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgc3Vi
cmVzb3VyY2UsIGNvbnN0IFVSTCYgaG9zdE5hbWVSZWRpcmVjdGVkVG8pOwotICAgIHZvaWQgc2V0
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiBzdWJyZXNvdXJjZSwgY29u
c3QgVVJMJiBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tKTsKLSAgICB2b2lkIHNldFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZyYW1lSG9zdE5hbWUsIGNvbnN0IFVSTCYgaG9z
dE5hbWVSZWRpcmVjdGVkVG8pOwotICAgIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZy
b20oY29uc3QgVVJMJiB0b3BGcmFtZUhvc3ROYW1lLCBjb25zdCBVUkwmIGhvc3ROYW1lUmVkaXJl
Y3RlZEZyb20pOwotICAgIHZvaWQgc2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgc2NoZWR1bGVDb29raWVCbG9ja2luZ1Vw
ZGF0ZUZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb0Jsb2NrLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgc2NoZWR1bGVDbGVhckJsb2NraW5n
U3RhdGVGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgc2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJl
Y29yZHNQcm9jZXNzaW5nKCk7Ci0gICAgdm9pZCBzdWJtaXRUZWxlbWV0cnkoKTsKLQotICAgIGVu
dW0gY2xhc3MgU2hvdWxkR3JhbmRmYXRoZXIgewotICAgICAgICBObywKLSAgICAgICAgWWVzLAot
ICAgIH07Ci0gICAgdm9pZCBzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KFNob3Vs
ZEdyYW5kZmF0aGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgc2No
ZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBT
aG91bGRHcmFuZGZhdGhlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLQotICAgIHZv
aWQgc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihTZWNvbmRzKTsKLSAgICB2b2lkIHNldE1p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzKTsKLSAgICB2b2lkIHNl
dEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzKTsKLSAgICB2b2lkIHNldENhY2hlTWF4QWdlQ2Fw
KFNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCBzZXRNYXhT
dGF0aXN0aWNzRW50cmllcyhzaXplX3QpOwotICAgIHZvaWQgc2V0UHJ1bmVFbnRyaWVzRG93blRv
KHNpemVfdCk7Ci0KLSAgICB2b2lkIHJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotCi0gICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGVidWdNb2RlKGJvb2wsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAg
dm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25zdCBVUkwmLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIAotICAgIHZvaWQgc2V0U3RhdGlzdGljc1Rlc3Rp
bmdDYWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY2FsbGJhY2sp
IHsgbV9zdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7IH0KLSAg
ICB2b2lkIGxvZ1Rlc3RpbmdFdmVudChjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGNhbGxHcmFu
dFN0b3JhZ2VBY2Nlc3NIYW5kbGVyKGNvbnN0IFN0cmluZyYgc3ViRnJhbWVQcmltYXJ5RG9tYWlu
LCBjb25zdCBTdHJpbmcmIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgT3B0aW9uYWw8dWludDY0X3Q+
IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4m
Jik7Ci0gICAgdm9pZCByZW1vdmVBbGxTdG9yYWdlQWNjZXNzKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7Ci0gICAgdm9pZCBjYWxsVXBkYXRlUHJldmFsZW50RG9tYWluc1RvQmxvY2tDb29r
aWVzRm9ySGFuZGxlcihjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvQmxvY2ssIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCBjYWxsUmVtb3ZlRG9tYWluc0hhbmRs
ZXIoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMpOwotICAgIHZvaWQgY2FsbEhhc1N0b3Jh
Z2VBY2Nlc3NGb3JGcmFtZUhhbmRsZXIoY29uc3QgU3RyaW5nJiByZXNvdXJjZURvbWFpbiwgY29u
c3QgU3RyaW5nJiBmaXJzdFBhcnR5RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBw
YWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwotCi0gICAgdm9pZCBkaWRD
cmVhdGVOZXR3b3JrUHJvY2VzcygpOwotCi0gICAgV2Vic2l0ZURhdGFTdG9yZSogd2Vic2l0ZURh
dGFTdG9yZSgpIHsgcmV0dXJuIG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsgfQotCi1wcml2YXRl
OgotICAgIGV4cGxpY2l0IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZShXZWJzaXRlRGF0
YVN0b3JlJik7Ci0KLSAgICB2b2lkIHBvc3RUYXNrKFdURjo6RnVuY3Rpb248dm9pZCgpPiYmKTsK
LSAgICBzdGF0aWMgdm9pZCBwb3N0VGFza1JlcGx5KFdURjo6RnVuY3Rpb248dm9pZCgpPiYmKTsK
LQotICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyLgotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBJ
UEMgbWVzc2FnZSBoYW5kbGVycy4KLSAgICB2b2lkIHJlc291cmNlTG9hZFN0YXRpc3RpY3NVcGRh
dGVkKFZlY3RvcjxXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYmIG9yaWdpbnMpOwot
ICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihTdHJpbmcmJiBwcmltYXJ5
RG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCB1aW50NjRfdCBvcGVuZXJQYWdlSUQsIFN0cmlu
ZyYmIG9wZW5lclByaW1hcnlEb21haW4pOwotCi0gICAgdm9pZCBwZXJmb3JtRGFpbHlUYXNrcygp
OwotCi0gICAgU3RvcmFnZUFjY2Vzc1N0YXR1cyBzdG9yYWdlQWNjZXNzU3RhdHVzKGNvbnN0IFN0
cmluZyYgc3ViRnJhbWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHRvcEZyYW1lUHJpbWFy
eURvbWFpbik7Ci0KLSAgICB2b2lkIGZsdXNoQW5kRGVzdHJveVBlcnNpc3RlbnRTdG9yZSgpOwot
Ci0gICAgV2Vha1B0cjxXZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNpdGVEYXRhU3RvcmU7Ci0gICAg
UmVmPFdvcmtRdWV1ZT4gbV9zdGF0aXN0aWNzUXVldWU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4gbV9tZW1vcnlTdG9yZTsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlPiBtX3Bl
cnNpc3RlbnRTdG9yYWdlOwotCi0gICAgUnVuTG9vcDo6VGltZXI8V2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlPiBtX2RhaWx5VGFza3NUaW1lcjsKLQotICAgIGJvb2wgbV9oYXNTY2hlZHVs
ZWRQcm9jZXNzU3RhdHMgeyBmYWxzZSB9OwotCi0gICAgV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0
IFN0cmluZyYpPiBtX3N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2s7Ci0KLSAgICBib29sIG1fZmly
c3ROZXR3b3JrUHJvY2Vzc0NyZWF0ZWQgeyBmYWxzZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBmOTY5MmUxMjkxMmE2YzFjMDk4ZDNiOWY2MDgwNGFlMmZmMzdkZjlhLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMjk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oIgotCi0jaW5jbHVk
ZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmgiCi0jaW5jbHVkZSAiV2ViUHJv
Y2Vzc1Bvb2wuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKLSNpbmNsdWRlIDxXZWJD
b3JlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VM
b2FkU3RhdGlzdGljcy5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci0KLWNvbnN0IHVuc2lnbmVkIG1pbmltdW1QcmV2YWxlbnRSZXNv
dXJjZXNGb3JUZWxlbWV0cnkgPSAzOwotY29uc3QgdW5zaWduZWQgc2lnbmlmaWNhbnRGaWd1cmVz
Rm9yTG9nZ2VkVmFsdWVzID0gMzsKLXN0YXRpYyBib29sIG5vdGlmeVBhZ2VzV2hlblRlbGVtZXRy
eVdhc0NhcHR1cmVkID0gZmFsc2U7Ci0KLXN0cnVjdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRy
eSB7Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZDsKLSAgICBi
b29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbjsKLSAgICB1bnNpZ25lZCBkYXlzU2luY2VVc2VySW50
ZXJhY3Rpb247Ci0gICAgdW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luczsKLSAg
ICB1bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zOwotICAgIHVuc2lnbmVk
IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG87Ci0gICAgdW5zaWduZWQgdGltZXNBY2Nlc3Nl
ZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uOwotICAgIHVuc2lnbmVkIHRpbWVzQWNj
ZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEk7Ci19OwotCi1zdGF0aWMgVmVj
dG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZVRl
bGVtZXRyeShjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUmIHN0b3JlKQot
ewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIFZlY3RvcjxQcmV2YWxlbnRS
ZXNvdXJjZVRlbGVtZXRyeT4gc29ydGVkOwotICAgIHN0b3JlLnByb2Nlc3NTdGF0aXN0aWNzKFsm
c29ydGVkXSAoYXV0byYgc3RhdGlzdGljKSB7Ci0gICAgICAgIGlmICghc3RhdGlzdGljLmlzUHJl
dmFsZW50UmVzb3VyY2UpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdW5zaWduZWQg
ZGF5c1NpbmNlVXNlckludGVyYWN0aW9uID0gc3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25UaW1lIDw9IFdhbGxUaW1lKCkgPyAwIDogc3RkOjpmbG9vcigoV2FsbFRpbWU6Om5vdygp
IC0gc3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSAvIDI0X2gpOwotICAg
ICAgICBzb3J0ZWQuYXBwZW5kKFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5IHsKLSAgICAgICAg
ICAgIHN0YXRpc3RpYy5kYXRhUmVjb3Jkc1JlbW92ZWQsCi0gICAgICAgICAgICBzdGF0aXN0aWMu
aGFkVXNlckludGVyYWN0aW9uLAotICAgICAgICAgICAgZGF5c1NpbmNlVXNlckludGVyYWN0aW9u
LAotICAgICAgICAgICAgc3RhdGlzdGljLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMuc2l6
ZSgpLAotICAgICAgICAgICAgc3RhdGlzdGljLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdp
bnMuc2l6ZSgpLAotICAgICAgICAgICAgc3RhdGlzdGljLnN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG8uc2l6ZSgpLAotICAgICAgICAgICAgc3RhdGlzdGljLnRpbWVzQWNjZXNzZWRBc0ZpcnN0
UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbiwKLSAgICAgICAgICAgIHN0YXRpc3RpYy50aW1lc0Fj
Y2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJCi0gICAgICAgIH0pOwotICAg
IH0pOwotCi0gICAgaWYgKHNvcnRlZC5zaXplKCkgPCBtaW5pbXVtUHJldmFsZW50UmVzb3VyY2Vz
Rm9yVGVsZW1ldHJ5KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgc3RkOjpzb3J0KHNvcnRl
ZC5iZWdpbigpLCBzb3J0ZWQuZW5kKCksIFtdKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1l
dHJ5JiBhLCBjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgYikgewotICAgICAgICBy
ZXR1cm4gYS5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zICsgYS5zdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVPcmlnaW5zICsgYS5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvID4KLSAgICAg
ICAgYi5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zICsgYi5zdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVPcmlnaW5zICsgYi5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvOwotICAgIH0pOwot
Ci0gICAgcmV0dXJuIHNvcnRlZDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIG51bWJlck9mUmVzb3Vy
Y2VzV2l0aFVzZXJJbnRlcmFjdGlvbihjb25zdCBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxl
bWV0cnk+JiByZXNvdXJjZXMsIHNpemVfdCBiZWdpbiwgc2l6ZV90IGVuZCkKLXsKLSAgICBpZiAo
cmVzb3VyY2VzLmlzRW1wdHkoKSB8fCByZXNvdXJjZXMuc2l6ZSgpIDwgYmVnaW4gKyAxIHx8IHJl
c291cmNlcy5zaXplKCkgPCBlbmQgKyAxKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICB1
bnNpZ25lZCByZXN1bHQgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSBiZWdpbjsgaSA8IGVuZDsg
KytpKSB7Ci0gICAgICAgIGlmIChyZXNvdXJjZXNbaV0uaGFzSGFkVXNlckludGVyYWN0aW9uKQot
ICAgICAgICAgICAgKytyZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0gICAgCi1zdGF0aWMgdW5zaWduZWQgbWVkaWFuKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHYp
Ci17Ci0gICAgaWYgKHYuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAodi5z
aXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIHZbMF07Ci0gICAgCi0gICAgYXV0byBzaXplID0g
di5zaXplKCk7Ci0gICAgYXV0byBtaWRkbGUgPSBzaXplIC8gMjsKLSAgICBpZiAoc2l6ZSAlIDIp
Ci0gICAgICAgIHJldHVybiB2W21pZGRsZV07Ci0gICAgcmV0dXJuICh2W21pZGRsZSAtIDFdICsg
dlttaWRkbGVdKSAvIDI7Ci19Ci0gICAgCi1zdGF0aWMgdW5zaWduZWQgbWVkaWFuKGNvbnN0IFZl
Y3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHYsIHVuc2lnbmVkIGJlZ2luLCB1bnNp
Z25lZCBlbmQsIGNvbnN0IFdURjo6RnVuY3Rpb248dW5zaWduZWQoY29uc3QgUHJldmFsZW50UmVz
b3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+JiBzdGF0aXN0aWNHZXR0ZXIpCi17Ci0gICAgaWYg
KHYuaXNFbXB0eSgpIHx8IHYuc2l6ZSgpIDwgYmVnaW4gKyAxIHx8IHYuc2l6ZSgpIDwgZW5kICsg
MSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgVmVjdG9yPHVuc2lnbmVkPiBwYXJ0Owot
ICAgIHBhcnQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShlbmQgLSBiZWdpbiArIDEpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IGJlZ2luOyBpIDw9IGVuZDsgKytpKQotICAgICAgICBwYXJ0LnVuY2hl
Y2tlZEFwcGVuZChzdGF0aXN0aWNHZXR0ZXIodltpXSkpOwotICAgIAotICAgIHJldHVybiBtZWRp
YW4ocGFydCk7Ci19Ci0gICAgCi1zdGF0aWMgV2ViUGFnZVByb3h5KiBub25FcGhlbWVyYWxXZWJQ
YWdlUHJveHkoKQotewotICAgIGF1dG8gcHJvY2Vzc1Bvb2xzID0gV2ViUHJvY2Vzc1Bvb2w6OmFs
bFByb2Nlc3NQb29scygpOwotICAgIGlmIChwcm9jZXNzUG9vbHMuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBhdXRvIHByb2Nlc3NQb29sID0gcHJvY2Vzc1Bv
b2xzWzBdOwotICAgIGlmICghcHJvY2Vzc1Bvb2wpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIAotICAgIGZvciAoYXV0byYgd2ViUHJvY2VzcyA6IHByb2Nlc3NQb29sLT5wcm9jZXNzZXMo
KSkgewotICAgICAgICBmb3IgKGF1dG8mIHBhZ2UgOiB3ZWJQcm9jZXNzLT5wYWdlcygpKSB7Ci0g
ICAgICAgICAgICBpZiAocGFnZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJldHVybiBwYWdlOwotICAgICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotICAgIAotc3RhdGljIHZvaWQgc3VibWl0VG9w
TGlzdCh1bnNpZ25lZCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3AsIGNvbnN0IFZlY3RvcjxQ
cmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgY29u
c3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiYgc29ydGVkUHJldmFsZW50UmVz
b3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgV2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJveHkp
Ci17Ci0gICAgV1RGOjpGdW5jdGlvbjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRl
bGVtZXRyeSYgdGVsZW1ldHJ5KT4gc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0dldHRlciA9
IFtdIChhdXRvJiB0KSB7Ci0gICAgICAgIHJldHVybiB0LnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9y
aWdpbnM7Ci0gICAgfTsKLSAgICBXVEY6OkZ1bmN0aW9uPHVuc2lnbmVkKGNvbnN0IFByZXZhbGVu
dFJlc291cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkpPiBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVP
cmlnaW5zR2V0dGVyID0gW10gKGF1dG8mIHQpIHsKLSAgICAgICAgcmV0dXJuIHQuc3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lT3JpZ2luczsKLSAgICB9OwotICAgIFdURjo6RnVuY3Rpb248dW5zaWdu
ZWQoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+IHN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG9HZXR0ZXIgPSBbXSAoYXV0byYgdCkgewotICAgICAgICByZXR1
cm4gdC5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvOwotICAgIH07Ci0gICAgV1RGOjpGdW5j
dGlvbjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdGVsZW1ldHJ5
KT4gbnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZEdldHRlciA9IFtdIChhdXRvJiB0KSB7
Ci0gICAgICAgIHJldHVybiB0Lm51bWJlck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWQ7Ci0gICAg
fTsKLSAgICBXVEY6OkZ1bmN0aW9uPHVuc2lnbmVkKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVs
ZW1ldHJ5JiB0ZWxlbWV0cnkpPiBudW1iZXJPZlRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVU
b1VzZXJJbnRlcmFjdGlvbkdldHRlciA9IFtdIChhdXRvJiB0KSB7Ci0gICAgICAgIHJldHVybiB0
LnRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbjsKLSAgICB9Owot
ICAgIFdURjo6RnVuY3Rpb248dW5zaWduZWQoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0
cnkmIHRlbGVtZXRyeSk+IG51bWJlck9mVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3Rv
cmFnZUFjY2Vzc0FQSUdldHRlciA9IFtdIChhdXRvJiB0KSB7Ci0gICAgICAgIHJldHVybiB0LnRp
bWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEk7Ci0gICAgfTsKLQot
ICAgIHVuc2lnbmVkIHRvcFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24gPSBu
dW1iZXJPZlJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24oc29ydGVkUHJldmFsZW50UmVzb3Vy
Y2VzLCAwLCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3AgLSAxKTsKLSAgICB1bnNpZ25lZCB0
b3BTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJl
c291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIG51bWJlck9mUmVzb3VyY2VzRnJvbVRo
ZVRvcCAtIDEsIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNHZXR0ZXIpOwotICAgIHVuc2ln
bmVkIHRvcFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMgPSBtZWRpYW4oc29ydGVkUHJl
dmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgMCwgbnVtYmVyT2ZSZXNvdXJj
ZXNGcm9tVGhlVG9wIC0gMSwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0dldHRlcik7
Ci0gICAgdW5zaWduZWQgdG9wU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyA9IG1lZGlhbihz
b3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAwLCBudW1iZXJP
ZlJlc291cmNlc0Zyb21UaGVUb3AgLSAxLCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvR2V0
dGVyKTsKLSAgICB1bnNpZ25lZCB0b3BOdW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkID0g
bWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAs
IG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRvcCAtIDEsIG51bWJlck9mVGltZXNEYXRhUmVjb3Jk
c1JlbW92ZWRHZXR0ZXIpOwotICAgIHVuc2lnbmVkIHRvcE51bWJlck9mVGltZXNBY2Nlc3NlZEFz
Rmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJl
c291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIG51bWJlck9mUmVzb3VyY2VzRnJvbVRo
ZVRvcCAtIDEsIG51bWJlck9mVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVy
YWN0aW9uR2V0dGVyKTsKLSAgICB1bnNpZ25lZCB0b3BOdW1iZXJPZlRpbWVzQWNjZXNzZWRBc0Zp
cnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgPSBtZWRpYW4oc29ydGVkUHJldmFsZW50UmVz
b3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgMCwgbnVtYmVyT2ZSZXNvdXJjZXNGcm9tVGhl
VG9wIC0gMSwgbnVtYmVyT2ZUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNj
ZXNzQVBJR2V0dGVyKTsKLQotICAgIFN0cmluZ0J1aWxkZXIgcHJlYW1ibGVCdWlsZGVyOwotICAg
IHByZWFtYmxlQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJ0b3AiKTsKLSAgICBwcmVhbWJsZUJ1aWxk
ZXIuYXBwZW5kTnVtYmVyKG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRvcCk7Ci0gICAgU3RyaW5n
IGRlc2NyaXB0aW9uUHJlYW1ibGUgPSBwcmVhbWJsZUJ1aWxkZXIudG9TdHJpbmcoKTsKLSAgICAK
LSAgICB3ZWJQYWdlUHJveHkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3Rp
Y0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksIGRlc2Ny
aXB0aW9uUHJlYW1ibGUgKyAiUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiIs
Ci0gICAgICAgIHRvcFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIHNpZ25p
ZmljYW50RmlndXJlc0ZvckxvZ2dlZFZhbHVlcywgU2hvdWxkU2FtcGxlOjpObyk7Ci0gICAgd2Vi
UGFnZVByb3h5LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5n
S2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBkZXNjcmlwdGlvblBy
ZWFtYmxlICsgIlN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMiLAotICAgICAgICB0b3BTdWJm
cmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLCBzaWduaWZpY2FudEZpZ3VyZXNGb3JMb2dnZWRWYWx1
ZXMsIFNob3VsZFNhbXBsZTo6Tm8pOwotICAgIHdlYlBhZ2VQcm94eS5sb2dEaWFnbm9zdGljTWVz
c2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUZWxlbWV0cnlLZXkoKSwgZGVzY3JpcHRpb25QcmVhbWJsZSArICJTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVPcmlnaW5zIiwKLSAgICAgICAgdG9wU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3Jp
Z2lucywgc2lnbmlmaWNhbnRGaWd1cmVzRm9yTG9nZ2VkVmFsdWVzLCBTaG91bGRTYW1wbGU6Ok5v
KTsKLSAgICB3ZWJQYWdlUHJveHkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25v
c3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksIGRl
c2NyaXB0aW9uUHJlYW1ibGUgKyAiU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyIsCi0gICAg
ICAgIHRvcFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8sIHNpZ25pZmljYW50RmlndXJlc0Zv
ckxvZ2dlZFZhbHVlcywgU2hvdWxkU2FtcGxlOjpObyk7Ci0gICAgd2ViUGFnZVByb3h5LmxvZ0Rp
YWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBkZXNjcmlwdGlvblByZWFtYmxlICsgIk51bWJl
ck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWQiLAotICAgICAgICB0b3BOdW1iZXJPZlRpbWVzRGF0
YVJlY29yZHNSZW1vdmVkLCBzaWduaWZpY2FudEZpZ3VyZXNGb3JMb2dnZWRWYWx1ZXMsIFNob3Vs
ZFNhbXBsZTo6Tm8pOwotICAgIHdlYlBhZ2VQcm94eS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhW
YWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0
cnlLZXkoKSwgZGVzY3JpcHRpb25QcmVhbWJsZSArICJOdW1iZXJPZlRpbWVzQWNjZXNzZWRBc0Zp
cnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbiIsCi0gICAgICAgIHRvcE51bWJlck9mVGltZXNB
Y2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uLCBzaWduaWZpY2FudEZpZ3Vy
ZXNGb3JMb2dnZWRWYWx1ZXMsIFNob3VsZFNhbXBsZTo6Tm8pOwotICAgIHdlYlBhZ2VQcm94eS5s
b2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291
cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgZGVzY3JpcHRpb25QcmVhbWJsZSArICJO
dW1iZXJPZlRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkiLAot
ICAgICAgICB0b3BOdW1iZXJPZlRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VB
Y2Nlc3NBUEksIHNpZ25pZmljYW50RmlndXJlc0ZvckxvZ2dlZFZhbHVlcywgU2hvdWxkU2FtcGxl
OjpObyk7Ci19Ci0gICAgCi1zdGF0aWMgdm9pZCBzdWJtaXRUb3BMaXN0cyhjb25zdCBWZWN0b3I8
UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+JiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIGNv
bnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNvcnRlZFByZXZhbGVudFJl
c291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIFdlYlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5
KQotewotICAgIHN1Ym1pdFRvcExpc3QoMSwgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCBzb3J0
ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB3ZWJQYWdlUHJveHkp
OwotICAgIAotICAgIGlmIChzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVy
YWN0aW9uLnNpemUoKSA8IDMpCi0gICAgICAgIHJldHVybjsKLSAgICBzdWJtaXRUb3BMaXN0KDMs
IHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91
dFVzZXJJbnRlcmFjdGlvbiwgd2ViUGFnZVByb3h5KTsKLSAgICAKLSAgICBpZiAoc29ydGVkUHJl
dmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPCAxMCkKLSAgICAg
ICAgcmV0dXJuOwotICAgIHN1Ym1pdFRvcExpc3QoMTAsIHNvcnRlZFByZXZhbGVudFJlc291cmNl
cywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgd2ViUGFn
ZVByb3h5KTsKLSAgICAKLSAgICBpZiAoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVz
ZXJJbnRlcmFjdGlvbi5zaXplKCkgPCA1MCkKLSAgICAgICAgcmV0dXJuOwotICAgIHN1Ym1pdFRv
cExpc3QoNTAsIHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3Vy
Y2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgd2ViUGFnZVByb3h5KTsKLSAgICAKLSAgICBpZiAo
c29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPCAx
MDApCi0gICAgICAgIHJldHVybjsKLSAgICBzdWJtaXRUb3BMaXN0KDEwMCwgc29ydGVkUHJldmFs
ZW50UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0
aW9uLCB3ZWJQYWdlUHJveHkpOwotfQotICAgIAotLy8gVGhpcyBmdW5jdGlvbiBpcyBmb3IgdGVz
dGluZyBwdXJwb3Nlcy4KLXZvaWQgc3RhdGljIG5vdGlmeVBhZ2VzKHVuc2lnbmVkIHRvdGFsUHJl
dmFsZW50UmVzb3VyY2VzLCB1bnNpZ25lZCB0b3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2Vy
SW50ZXJhY3Rpb24sIHVuc2lnbmVkIHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zKQot
ewotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdG90YWxQcmV2YWxlbnRSZXNvdXJjZXMs
IHRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgdG9wM1N1YmZyYW1l
VW5kZXJUb3BGcmFtZU9yaWdpbnNdIHsKLSAgICAgICAgQVBJOjpEaWN0aW9uYXJ5OjpNYXBUeXBl
IG1lc3NhZ2VCb2R5OwotICAgICAgICBtZXNzYWdlQm9keS5zZXQoIlRvdGFsUHJldmFsZW50UmVz
b3VyY2VzIl9zLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKHRvdGFsUHJldmFsZW50UmVzb3VyY2VzKSk7
Ci0gICAgICAgIG1lc3NhZ2VCb2R5LnNldCgiVG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNl
ckludGVyYWN0aW9uIl9zLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKHRvdGFsUHJldmFsZW50UmVzb3Vy
Y2VzV2l0aFVzZXJJbnRlcmFjdGlvbikpOwotICAgICAgICBtZXNzYWdlQm9keS5zZXQoIlRvcDNT
dWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zIl9zLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKHRvcDNT
dWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zKSk7Ci0gICAgICAgIFdlYlByb2Nlc3NQcm94eTo6
bm90aWZ5UGFnZVN0YXRpc3RpY3NUZWxlbWV0cnlGaW5pc2hlZChBUEk6OkRpY3Rpb25hcnk6OmNy
ZWF0ZShtZXNzYWdlQm9keSkucHRyKCkpOwotICAgIH0pOwotfQotICAgIAotLy8gVGhpcyBmdW5j
dGlvbiBpcyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KLXZvaWQgc3RhdGljIG5vdGlmeVBhZ2VzKGNv
bnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNvcnRlZFByZXZhbGVudFJl
c291cmNlcywgY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiYgc29ydGVk
UHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgdW5zaWduZWQgdG90YWxO
dW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24pCi17Ci0gICAgV1RG
OjpGdW5jdGlvbjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdGVs
ZW1ldHJ5KT4gc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0dldHRlciA9IFtdIChjb25zdCBQ
cmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdCkgewotICAgICAgICByZXR1cm4gdC5zdWJmcmFt
ZVVuZGVyVG9wRnJhbWVPcmlnaW5zOwotICAgIH07Ci0gICAgCi0gICAgbm90aWZ5UGFnZXMoc29y
dGVkUHJldmFsZW50UmVzb3VyY2VzLnNpemUoKSwgdG90YWxOdW1iZXJPZlByZXZhbGVudFJlc291
cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNX
aXRob3V0VXNlckludGVyYWN0aW9uLCAwLCAyLCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5z
R2V0dGVyKSk7Ci19Ci0gICAgCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0
cnk6OmNhbGN1bGF0ZUFuZFN1Ym1pdChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmUmIHJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICBhdXRvIHNvcnRlZFByZXZhbGVudFJlc291cmNlcyA9
IHNvcnRlZFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5KHJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZSk7Ci0gICAgaWYgKG5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkICYmIHNv
cnRlZFByZXZhbGVudFJlc291cmNlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbm90aWZ5UGFnZXMo
MCwgMCwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgVmVjdG9yPFByZXZh
bGVudFJlc291cmNlVGVsZW1ldHJ5PiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNl
ckludGVyYWN0aW9uOwotICAgIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50
ZXJhY3Rpb24ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMu
c2l6ZSgpKTsKLSAgICBWZWN0b3I8dW5zaWduZWQ+IHByZXZhbGVudFJlc291cmNlc0RheXNTaW5j
ZVVzZXJJbnRlcmFjdGlvbjsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByZXZhbGVudFJlc291cmNl
IDogc29ydGVkUHJldmFsZW50UmVzb3VyY2VzKSB7Ci0gICAgICAgIGlmIChwcmV2YWxlbnRSZXNv
dXJjZS5oYXNIYWRVc2VySW50ZXJhY3Rpb24pCi0gICAgICAgICAgICBwcmV2YWxlbnRSZXNvdXJj
ZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rpb24uYXBwZW5kKHByZXZhbGVudFJlc291cmNlLmRheXNT
aW5jZVVzZXJJbnRlcmFjdGlvbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNvcnRlZFBy
ZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24udW5jaGVja2VkQXBwZW5kKHBy
ZXZhbGVudFJlc291cmNlKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gRGlzcGF0Y2ggb24gdGhlIG1h
aW4gdGhyZWFkIHRvIG1ha2Ugc3VyZSB0aGUgV2ViUGFnZVByb3h5IHdlJ3JlIHVzaW5nIGRvZXNu
J3QgZ28gYXdheS4KLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3NvcnRlZFByZXZhbGVu
dFJlc291cmNlcyA9IFdURk1vdmUoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzKSwgc29ydGVkUHJl
dmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiA9IFdURk1vdmUoc29ydGVkUHJl
dmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiksIHByZXZhbGVudFJlc291cmNl
c0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbiA9IFdURk1vdmUocHJldmFsZW50UmVzb3VyY2VzRGF5
c1NpbmNlVXNlckludGVyYWN0aW9uKV0gKCkgewotICAgICAgICBhdXRvIHdlYlBhZ2VQcm94eSA9
IG5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eSgpOwotICAgICAgICBpZiAoIXdlYlBhZ2VQcm94eSkg
ewotICAgICAgICAgICAgaWYgKG5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKQot
ICAgICAgICAgICAgICAgIG5vdGlmeVBhZ2VzKDAsIDAsIDApOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobm90aWZ5UGFnZXNXaGVuVGVsZW1l
dHJ5V2FzQ2FwdHVyZWQpIHsKLSAgICAgICAgICAgIG5vdGlmeVBhZ2VzKHNvcnRlZFByZXZhbGVu
dFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlv
biwgcHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLnNpemUoKSk7Ci0g
ICAgICAgICAgICAvLyBUaGUgbm90aWZ5IHBhZ2VzIGZ1bmN0aW9uIGlzIGZvciB0ZXN0aW5nIHNv
IHdlIGRvbid0IG5lZWQgdG8gZG8gYW4gYWN0dWFsIHN1Ym1pc3Npb24uCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHdlYlBhZ2VQcm94eS0+bG9nRGlh
Z25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksICJ0b3RhbE51bWJlck9mUHJldmFsZW50UmVzb3Vy
Y2VzIl9zLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMuc2l6ZSgpLCBzaWduaWZpY2FudEZpZ3Vy
ZXNGb3JMb2dnZWRWYWx1ZXMsIFNob3VsZFNhbXBsZTo6Tm8pOwotICAgICAgICB3ZWJQYWdlUHJv
eHktPmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5czo6
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCAidG90YWxOdW1iZXJPZlByZXZh
bGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24iX3MsIHByZXZhbGVudFJlc291cmNlc0Rh
eXNTaW5jZVVzZXJJbnRlcmFjdGlvbi5zaXplKCksIHNpZ25pZmljYW50RmlndXJlc0ZvckxvZ2dl
ZFZhbHVlcywgU2hvdWxkU2FtcGxlOjpObyk7Ci0gICAgICAgIAotICAgICAgICBpZiAocHJldmFs
ZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLnNpemUoKSA+IDApCi0gICAgICAg
ICAgICB3ZWJQYWdlUHJveHktPmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0
aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCAidG9w
UHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0
aW9uIl9zLCBwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rpb25bMF0sIHNp
Z25pZmljYW50RmlndXJlc0ZvckxvZ2dlZFZhbHVlcywgU2hvdWxkU2FtcGxlOjpObyk7Ci0gICAg
ICAgIGlmIChwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rpb24uc2l6ZSgp
ID4gMSkKLSAgICAgICAgICAgIHdlYlBhZ2VQcm94eS0+bG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRo
VmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1l
dHJ5S2V5KCksICJtZWRpYW5QcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uRGF5
c1NpbmNlVXNlckludGVyYWN0aW9uIl9zLCBtZWRpYW4ocHJldmFsZW50UmVzb3VyY2VzRGF5c1Np
bmNlVXNlckludGVyYWN0aW9uKSwgc2lnbmlmaWNhbnRGaWd1cmVzRm9yTG9nZ2VkVmFsdWVzLCBT
aG91bGRTYW1wbGU6Ok5vKTsKLSAgICAgICAgCi0gICAgICAgIHN1Ym1pdFRvcExpc3RzKHNvcnRl
ZFByZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJ
bnRlcmFjdGlvbiwgKndlYlBhZ2VQcm94eSk7Ci0gICAgfSk7Ci19Ci0gICAgCi12b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OnNldE5vdGlmeVBhZ2VzV2hlblRlbGVtZXRy
eVdhc0NhcHR1cmVkKGJvb2wgYWx3YXlzKQotewotICAgIG5vdGlmeVBhZ2VzV2hlblRlbGVtZXRy
eVdhc0NhcHR1cmVkID0gYWx3YXlzOwotfQotICAgIAotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTZlNjFhMWFmMGFiNzM1M2IwMzFkYjc1
M2Y5ZGRiNmY1MmM2MjliLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnkuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOwot
Ci1uYW1lc3BhY2UgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeSB7Ci0gICAgCi12
b2lkIGNhbGN1bGF0ZUFuZFN1Ym1pdChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmUmKTsKLXZvaWQgc2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9v
bCk7Ci0gICAgCi19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMv
RGlzcGxheUxpbmsuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL0Rpc3BsYXlMaW5r
LmNwcAppbmRleCBmMzEzYTQ4ZmQ3ZDc4Y2FjZTgzMzAxYTRiYzRmYzVhMDdkZDk4YmU2Li5iZmIw
MzI0MjZkOThjZmYzODhiNTEwNDkzNDg0MzgxMWIxMTBlZjg5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvRGlzcGxheUxpbmsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL21hYy9EaXNwbGF5TGluay5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFC
TEUoV0VCUFJPQ0VTU19XSU5ET1dTRVJWRVJfQkxPQ0tJTkcpCiAKICNpbmNsdWRlICJEcmF3aW5n
QXJlYU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVk
ZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NQcml2aWxlZ2UuaD4K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VbmlmaWVkU291cmNlcy1pbnB1dC54Y2ZpbGVs
aXN0IGIvU291cmNlL1dlYktpdC9VbmlmaWVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CmluZGV4
IGRiYTZiMzdmNDJmZTY2NGNiZWI1NWNkMmE0ZDljYTZhYzM0YzE3Y2EuLmU2YzdhMGM3YTI2NjBl
MThhODJlM2MxNTI1Yzg5MmQ3MDY4ODZmNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVW5p
ZmllZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L1VuaWZpZWRT
b3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTEsNCArMSw4IEBACiAkKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9FZGl0YWJsZUltYWdlQ29udHJvbGxlck1lc3Nh
Z2VSZWNlaXZlci5jcHAKKyQoU1JDUk9PVCkvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCiskKFNSQ1JPT1QpL05ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmNw
cAorJChTUkNST09UKS9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHAKKyQoU1JDUk9PVCkvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAogJChTUkNST09UKS9OZXR3b3Jr
UHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCiAkKFNSQ1JPT1QpL05ldHdvcmtQ
cm9jZXNzL0Nvb2tpZXMvbWFjL1dlYkNvb2tpZU1hbmFnZXJNYWMubW0KICQoU1JDUk9PVCkvTmV0
d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL0NvY29hL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlckNvY29hLm1tCkBAIC01NTAsOCArNTU0LDYgQEAgJChTUkNST09UKS9VSVByb2Nlc3MvUmVt
b3RlTGF5ZXJUcmVlL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tCiAk
KFNSQ1JPT1QpL1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVPdmVy
Zmxvd1Njcm9sbGluZ05vZGVJT1MubW0KICQoU1JDUk9PVCkvVUlQcm9jZXNzL1JlbW90ZUxheWVy
VHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbQogJChTUkNS
T09UKS9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwCi0kKFNSQ1JPT1QpL1VJ
UHJvY2Vzcy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCi0kKFNSQ1JPT1Qp
L1VJUHJvY2Vzcy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuY3BwCiAk
KFNSQ1JPT1QpL1VJUHJvY2Vzcy9SZXNwb25zaXZlbmVzc1RpbWVyLmNwcAogJChTUkNST09UKS9V
SVByb2Nlc3MvU2VydmljZVdvcmtlclByb2Nlc3NQcm94eS5jcHAKICQoU1JDUk9PVCkvVUlQcm9j
ZXNzL1N0YXRpc3RpY3NSZXF1ZXN0LmNwcApAQCAtNjIwLDggKzYyMiw2IEBAICQoU1JDUk9PVCkv
VUlQcm9jZXNzL1dlYlByb2Nlc3NMaWZldGltZU9ic2VydmVyLmNwcAogJChTUkNST09UKS9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc0xpZmV0aW1lVHJhY2tlci5jcHAKICQoU1JDUk9PVCkvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQb29sLmNwcAogJChTUkNST09UKS9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmNwcAotJChTUkNST09UKS9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmNwcAotJChTUkNST09UKS9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVt
ZXRyeS5jcHAKICQoU1JDUk9PVCkvVUlQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0
YWJhc2UuY3BwCiAkKFNSQ1JPT1QpL1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURh
dGFiYXNlVHJhY2tlci5jcHAKICQoU1JDUk9PVCkvVUlQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFn
ZU1hbmFnZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCAwMGExYzVmNjQ5OWE5YmRhMjYwOWEyMDBiYjMwMTQ3ZjdjZDZmYjM0Li5l
N2U0NzcyYTAzNmZlOWUyY2ExZmEzNmY3MTBlMjI0NzM0YTdjNmFlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTc1LDcgKzc1LDYgQEAK
IAkJMDA1RDE1OEYxOEU0QzRFQjAwNzM0NjE5IC8qIF9XS0ZpbmREZWxlZ2F0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDA1RDE1OEUxOEU0QzRFQjAw
NzM0NjE5IC8qIF9XS0ZpbmREZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTAwQjk2NjE2MThFMjRDQkEwMENFMUY4OCAvKiBBUElGaW5k
Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
MEI5NjYxNTE4RTI0Q0JBMDBDRTFGODggLyogQVBJRmluZENsaWVudC5oICovOyB9OwogCQkwMEI5
NjYxQTE4RTI1QUUxMDBDRTFGODggLyogRmluZENsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDBCOTY2MTgxOEUyNUFFMTAwQ0UxRjg4IC8qIEZp
bmRDbGllbnQuaCAqLzsgfTsKLQkJMDcyOTdGOUYxQzE3QUExQTAxNUYwNzM1IC8qIFBlcnNpc3Rl
bmN5VXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA3MzIxRjlEMUMxN0JCRUEyMjNGMDczNSAvKiBQZXJzaXN0ZW5jeVV0aWxzLmggKi87IH07CiAJ
CTA3Mjk3RjlGMUMxN0JCRUEwMDNGMDczNSAvKiBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyOTdG
OUQxQzE3QkJFQTAwM0YwNzM1IC8qIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmggKi87
IH07CiAJCTA3Mjk3RjlGMUMxN0JCRUEwMTVGMDczNSAvKiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFn
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyOTdG
OUQxQzE3QkJFQTIyM0YwNzM1IC8qIERldmljZUlkSGFzaFNhbHRTdG9yYWdlLmggKi87IH07CiAJ
CTA3Mjk3RkEzMUMxODZBREIwMDNGMDczNSAvKiBXS1VzZXJNZWRpYVBlcm1pc3Npb25DaGVjay5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyOTdGQTEx
QzE4NkFEQjAwM0YwNzM1IC8qIFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk4Nyw3ICs5ODYsNiBA
QAogCQk1MUREOUYyODE2MzY3REEyMDAxNTc4RTkgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFERDlGMjYxNjM2N0RBMjAwMTU3OEU5IC8qIE5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJNTFERDlGMjkxNjM2
N0RBMjAwMTU3OEU5IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxREQ5RjI3MTYz
NjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgg
Ki87IH07CiAJCTUxRTM1MUNCMTgwRjJDQ0MwMEU1M0JFOSAvKiBJREJVdGlsaXRpZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTM1MUM5MTgwRjJD
Q0MwMEU1M0JFOSAvKiBJREJVdGlsaXRpZXMuaCAqLzsgfTsKLQkJNTFFNkMxNjQxRjI5MzVERDAw
RkQzNDM3IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFNkMxNjExRjI5MzVD
RDAwRkQzNDM3IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5oICov
OyB9OwogCQk1MUVGQzFDRjE1MjRFNjI1MDBDOUE5MzggLyogV0tCdW5kbGVET01XaW5kb3dFeHRl
bnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
RkEyRDU0MTUyMTExODYwMEMxQkEwQiAvKiBXS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxRjA2MEUw
MTY1NDMxN0YwMEYzMjgxQiAvKiBXZWJSZXNvdXJjZUxvYWRlck1lc3NhZ2VzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwNjBERTE2NTQzMTc1MDBG
MzI4MUIgLyogV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlcy5oICovOyB9OwogCQk1MUYwNjBFMTE2
NTQzMTg1MDBGMzI4MUIgLyogV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGMDYwREQxNjU0
MzE3NTAwRjMyODFCIC8qIFdlYlJlc291cmNlTG9hZGVyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsg
fTsKQEAgLTEwODYsNyArMTA4NCw2IEBACiAJCTYzQzMyQzI4MUU5ODExOTAwMDY5OUJEMCAvKiBf
V0tHZW9sb2NhdGlvblBvc2l0aW9uSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYzQzMyQzI3MUU5ODExOTAwMDY5OUJEMCAvKiBfV0tHZW9s
b2NhdGlvblBvc2l0aW9uSW50ZXJuYWwuaCAqLzsgfTsKIAkJNjVCODZGMUUxMkYxMURFMzAwQjdE
RDhBIC8qIFdLQnVuZGxlSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NUI4NkYxODEyRjExRDdCMDBCN0REOEEgLyogV0tCdW5kbGVJbnNw
ZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk2QTUwODBCRjFGMEVEQUFBMDBFNjE3QzUgLyogV0tXaW5kb3dGZWF0dXJlc1ByaXZhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZBNTA4MEJFMUYw
RURBQUEwMEU2MTdDNSAvKiBXS1dpbmRvd0ZlYXR1cmVzUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTZCODIxRERDMUVFRjA1REQwMEQ3
QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QjgyMUREQTFFRUYwNUREMDBEN0FG
NEEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oICovOyB9OwogCQk2QkU5
NjlDMTFFNTRENDUyMDA4Qjc0ODMgLyogY29yZVByZWRpY3Rpb25fbW9kZWwgaW4gUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCRTk2OUMwMUU1NEQ0NTIwMDhC
NzQ4MyAvKiBjb3JlUHJlZGljdGlvbl9tb2RlbCAqLzsgfTsKIAkJNkJFOTY5Q0IxRTU0RDRDRjAw
OEI3NDgzIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCRTk2OUM5MUU1NEQ0Q0Yw
MDhCNzQ4MyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hLmggKi87IH07
CiAJCTZCRTk2OUNEMUU1NEUwNTQwMDhCNzQ4MyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xh
c3NpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NkJFOTY5Q0MxRTU0RTA1NDAwOEI3NDgzIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lm
aWVyLmggKi87IH07CkBAIC0xMTA5LDYgKzExMDYsMTAgQEAKIAkJN0FCNkVBNDUxRUVBQUUzODAw
MDM3QjJCIC8qIEFQSUljb25EYXRhYmFzZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FCNkVBNDQxRUVBQUUyMzAwMDM3QjJCIC8qIEFQSUlj
b25EYXRhYmFzZUNsaWVudC5oICovOyB9OwogCQk3QUI2RUE0NzFFRUFCNkI4MDAwMzdCMkIgLyog
QVBJR2VvbG9jYXRpb25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0FCNkVBNDYxRUVBQjZCMDAwMDM3QjJCIC8qIEFQSUdlb2xvY2F0aW9u
UHJvdmlkZXIuaCAqLzsgfTsKIAkJN0FGMjM2MjExRTc5QTQwODAwNDM4QTA1IC8qIFdlYkVycm9y
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGMjM2
MUYxRTc5QTNEODAwNDM4QTA1IC8qIFdlYkVycm9ycy5oICovOyB9OworCQk3QUZCRDM2MzIxRTUw
RjM5MDA1REJBQ0IgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUZCRDM2MjIxRTUwRjM5MDA1
REJBQ0IgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggKi87IH07CisJCTdBRkJE
MzY3MjFFNTFCQUIwMDVEQkFDQiAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRkJEMzY1
MjFFNTFCQUIwMDVEQkFDQiAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCAq
LzsgfTsKKwkJN0FGQkQzNkEyMUU1NDJGMTAwNURCQUNCIC8qIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NQZXJzaXN0ZW50U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0FGQkQzNjgyMUU1NDJFODAwNURCQUNCIC8qIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5oICovOyB9OworCQk3QUZCRDM2RjIxRTU0NkY4MDA1REJB
Q0IgLyogUGVyc2lzdGVuY3lVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0FGQkQzNkQyMUU1NDZFMzAwNURCQUNCIC8qIFBlcnNpc3RlbmN5VXRp
bHMuaCAqLzsgfTsKIAkJN0MwNjVGMkMxQzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250ZW50
Q29udHJvbGxlckRhdGFUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0MwNjVGMkExQzhDRDk1RjAwQzJEOTUwIC8qIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlckRhdGFUeXBlcy5oICovOyB9OwogCQk3QzEzNUFBOTE3M0IwQkNBMDA1ODZBRTIgLyog
V0tQbHVnaW5JbmZvcm1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0MxMzVBQTcxNzNCMEJDQTAwNTg2QUUyIC8qIFdLUGx1Z2luSW5mb3JtYXRp
b24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
QzFCQTMzRTFBNEEwRTYwMDA0M0UyNDkgLyogQVBJRGljdGlvbmFyeS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MxQkEzM0MxQTRBMEU2MDAwNDNFMjQ5
IC8qIEFQSURpY3Rpb25hcnkuaCAqLzsgfTsKQEAgLTExOTQsNyArMTE5NSw2IEBACiAJCTgzOTkw
MjAzMUJFOUEwMkIwMDBGMzY1MyAvKiBOZXR3b3JrTG9hZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM5OTAxRkUxQkU5QTAxQjAwMEYzNjUzIC8qIE5l
dHdvcmtMb2FkLmggKi87IH07CiAJCTgzOUEyRjMyMUUyMDY3NDUwMDM5MDU3RSAvKiBIaWdoUGVy
Zm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODM5QTJGMzAxRTIwNjczOTAwMzkwNTdFIC8qIEhpZ2hQZXJm
b3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1wbGVyLmggKi87IH07CiAJCTgzQTBFRDM1MUY3NDdDQ0Yw
MDMyOTlFQiAvKiBQcmVjb25uZWN0VGFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODNBMEVEMzIxRjc0N0NDNjAwMzI5OUVCIC8qIFByZWNvbm5lY3RU
YXNrLmggKi87IH07Ci0JCTgzQjNDQjEwMjBFMkFCMDEwMDQ0MUU5QiAvKiBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDgzNjgxRENBMjBFMjkwNEEwMEMyNDlDRCAvKiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUuaCAqLzsgfTsKIAkJODNENDU0RDcxQkU5RDNDNDAwNkM5M0JEIC8q
IE5ldHdvcmtMb2FkQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4M0Q0NTRENjFCRTlEM0M0MDA2QzkzQkQgLyogTmV0d29ya0xvYWRDbGllbnQu
aCAqLzsgfTsKIAkJODNFRTU3NUMxREI3RDYxMTAwQzc0QzUwIC8qIFdlYlZhbGlkYXRpb25NZXNz
YWdlQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4M0VFNTc1QTFEQjdENjA2MDBDNzRDNTAgLyogV2ViVmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQu
aCAqLzsgfTsKIAkJODNGMUEwN0ExRjk2RTc3OTAwNDVCOTRFIC8qIFdlYlNXT3JpZ2luVGFibGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzRjFBMDc4
MUY5NkU3NzEwMDQ1Qjk0RSAvKiBXZWJTV09yaWdpblRhYmxlLmggKi87IH07CkBAIC0xODU0LDE0
ICsxODU0LDEyIEBACiAJCTAwQjk2NjE1MThFMjRDQkEwMENFMUY4OCAvKiBBUElGaW5kQ2xpZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUZpbmRDbGllbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDBCOTY2MTcxOEUyNUFFMTAwQ0UxRjg4IC8qIEZp
bmRDbGllbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGaW5k
Q2xpZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwMEI5NjYxODE4RTI1QUUx
MDBDRTFGODggLyogRmluZENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGaW5kQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA3Mjk0NTVDMUMx
NzExRUEwMDNGMDczNSAvKiBQZXJzaXN0ZW5jeVV0aWxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBlcnNpc3RlbmN5VXRpbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwNzI5N0Y5QzFDMTcxMUVBMDAzRjA3MzUgLyogRGV2aWNlSWRIYXNoU2Fs
dFN0b3JhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGV2aWNl
SWRIYXNoU2FsdFN0b3JhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzI5
N0Y5QzFDMTdCQkVBMDAzRjA3MzUgLyogVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVXNlck1lZGlhUGVybWlzc2lv
bkNoZWNrUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzI5N0Y5RDFD
MTdCQkVBMDAzRjA3MzUgLyogVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyOTdGOUQxQzE3QkJFQTIyM0YwNzM1
IC8qIERldmljZUlkSGFzaFNhbHRTdG9yYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERldmljZUlkSGFzaFNhbHRTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA3Mjk3RkEwMUMxODZBREIwMDNGMDczNSAvKiBXS1VzZXJNZWRpYVBlcm1pc3Npb25D
aGVjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS1VzZXJNZWRp
YVBlcm1pc3Npb25DaGVjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3Mjk3
RkExMUMxODZBREIwMDNGMDczNSAvKiBXS1VzZXJNZWRpYVBlcm1pc3Npb25DaGVjay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1VzZXJNZWRpYVBlcm1pc3Npb25DaGVjay5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwNzMyMUY5RDFDMTdCQkVBMjIzRjA3MzUg
LyogUGVyc2lzdGVuY3lVdGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
ZXJzaXN0ZW5jeVV0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3NEU3NUZC
MURGMUZEMTMwMEQzMThFQyAvKiBVc2VyTWVkaWFQcm9jZXNzTWFuYWdlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyTWVkaWFQcm9jZXNzTWFuYWdlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwNzRFNzVGQzFERjIwMDI0MDBEMzE4RUMgLyogVXNlck1l
ZGlhUHJvY2Vzc01hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVXNlck1lZGlhUHJvY2Vzc01hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwNzRFNzYwMDFERjcwNzVEMDBEMzE4RUMgLyogTWVkaWFEZXZpY2VTYW5kYm94RXh0ZW5z
aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYURldmlj
ZVNhbmRib3hFeHRlbnNpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMz
MTIsOCArMzMxMCw2IEBACiAJCTUxRTM1MUM5MTgwRjJDQ0MwMEU1M0JFOSAvKiBJREJVdGlsaXRp
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCVXRpbGl0aWVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRTM5OTA1MUQ2RjU0QzUwMDlDODgzMSAvKiBV
SUdhbWVwYWRQcm92aWRlckNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gVUlHYW1lcGFkUHJvdmlkZXJDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTFFNkMxNUYxRjI5MzU1MTAwRkQzNDM3IC8qIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NQZXJzaXN0ZW50U3RvcmFnZUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFJlc291cmNl
TG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZUlPUy5tbTsgcGF0aCA9IGlvcy9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2VJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTUxRTZDMTYxMUYyOTM1Q0QwMEZEMzQzNyAvKiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTUxRTZDMTYyMUYyOTM1Q0QwMEZEMzQzNyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lz
dGVudFN0b3JhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BlcnNpc3RlbnRTdG9yYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFF
OEI2OEQxRTcxMjg3MzAwMUI3MTMyIC8qIFdlYlVSTFNjaGVtZVRhc2suY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViVVJMU2NoZW1lVGFzay5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRTk0OTk2MUQ3NjFDQzcwMEVDOUVCOSAvKiBVSUdhbWVw
YWRQcm92aWRlcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFVJR2FtZXBhZFByb3ZpZGVySU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MUYwNjBERDE2NTQzMTc1MDBGMzI4MUIgLyogV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlUmVjZWl2
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlUmVjZWl2
ZXIuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJSZXNvdXJjZUxvYWRlck1l
c3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBA
IC0zNTA4LDggKzM1MDQsNiBAQAogCQk2NUI4NkYxNzEyRjExRDdCMDBCN0REOEEgLyogV0tCdW5k
bGVJbnNwZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tC
dW5kbGVJbnNwZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUI4NkYx
ODEyRjExRDdCMDBCN0REOEEgLyogV0tCdW5kbGVJbnNwZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0tCdW5kbGVJbnNwZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkE1MDgwQkUxRjBFREFBQTAwRTYxN0M1IC8qIFdLV2luZG93RmVhdHVyZXNQ
cml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2luZG93RmVhdHVyZXNQcml2YXRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZCODIxRERBMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNkI4MjFEREIxRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RlbGVtZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZCRTk2OUMwMUU1
NEQ0NTIwMDhCNzQ4MyAvKiBjb3JlUHJlZGljdGlvbl9tb2RlbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBjb3JlUHJlZGljdGlvbl9tb2RlbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkJFOTY5QzYxRTU0RDRCNjAwOEI3NDgzIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lm
aWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkJFOTY5QzgxRTU0RDRDRjAwOEI3NDgzIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lm
aWVyQ29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0zNTM1LDExICszNTI5LDEwIEBACiAJCTdBODIxRjRCMUUyRjY2NDgwMDYwNDU3
NyAvKiBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBODIxRjREMUUyRjY3OUUwMDYwNDU3NyAvKiBM
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBODIxRjRGMUUyRjdBNUMwMDYwNDU3NyAv
KiBBUElDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQVBJQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTdBODQzQTFBMjFFNDFGQjIwMERFRjY2MyAvKiBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmNwcDsgcGF0aCA9IENsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E4QTlE
NTcxRUYxMTlBQTAwOTgwMUFFIC8qIEFQSUluamVjdGVkQnVuZGxlQ2xpZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUluamVjdGVkQnVuZGxlQ2xpZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBOEE5RDU5MUVGMTMwMjAwMDk4MDFBRSAvKiBBUElJ
bmplY3RlZEJ1bmRsZUJ1bmRsZUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBUElJbmplY3RlZEJ1bmRsZUJ1bmRsZUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QThBOUQ1QjFFRjE0NThFMDA5ODAxQUUgLyogQVBJSW5qZWN0ZWRCdW5kbGVQ
YWdlUmVzb3VyY2VMb2FkQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEFQSUluamVjdGVkQnVuZGxlUGFnZVJlc291cmNlTG9hZENsaWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk3QTlDRDhDMDFDNzc5ODQ5MDBEOUY2QzcgLyogV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTdBOUNEOEMxMUM3Nzk4NDkwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdBOUNEOEMyMUM3NzlBRDYwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QUI2RUE0NDFFRUFBRTIzMDAwMzdCMkIgLyogQVBJSWNvbkRhdGFiYXNlQ2xpZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUljb25EYXRhYmFzZUNsaWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUI2RUE0NjFFRUFCNkIwMDAwMzdCMkIgLyogQVBJ
R2VvbG9jYXRpb25Qcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
UElHZW9sb2NhdGlvblByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0z
NTQ4LDYgKzM1NDEsMTUgQEAKIAkJN0FGMjM2MUYxRTc5QTNEODAwNDM4QTA1IC8qIFdlYkVycm9y
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFcnJvcnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FGMjM2MjIxRTc5QTQzMTAwNDM4QTA1IC8qIFdlYkVy
cm9yc0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2Vi
RXJyb3JzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjY2RTExMjBD
MDdDQjYwMDc4MjhFQSAvKiBXZWJDb250ZW50LU9TWC5lbnRpdGxlbWVudHMgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0LnBsaXN0LmVudGl0bGVtZW50czsgcGF0aCA9ICJXZWJDb250ZW50LU9TWC5lbnRpdGxlbWVu
dHMiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QUZCRDM2MjIxRTUwRjM5MDA1REJB
Q0IgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOyBwYXRoID0g
Q2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJN0FGQkQzNjQyMUU1MUJBQjAwNURCQUNCIC8qIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwOyBwYXRoID0gQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3QUZCRDM2NTIxRTUxQkFCMDA1REJBQ0IgLyogUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oOyBwYXRoID0gQ2xhc3NpZmll
ci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJN0FGQkQzNjgyMUU1NDJFODAwNURCQUNCIC8qIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuaDsgcGF0aCA9IENsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTdBRkJEMzY5MjFFNTQyRTgwMDVEQkFDQiAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVy
c2lzdGVudFN0b3JhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcDsgcGF0aCA9IENsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJN0FGQkQzNkIyMUU1NDU0NDAwNURCQUNCIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUZWxlbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rl
bGVtZXRyeS5oOyBwYXRoID0gQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVs
ZW1ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBRkJEMzZDMjFFNTQ1NDQw
MDVEQkFDQiAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwOyBwYXRo
ID0gQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0FGQkQzNkQyMUU1NDZFMzAwNURCQUNCIC8qIFBl
cnNpc3RlbmN5VXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVyc2lzdGVuY3lVdGlscy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QUZCRDM2RTIxRTU0NkUzMDA1REJBQ0IgLyogUGVy
c2lzdGVuY3lVdGlscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQZXJzaXN0ZW5jeVV0aWxzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwNjVGMjkxQzhDRDk1RjAwQzJEOTUw
IC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzA2NUYyQTFDOENEOTVGMDBDMkQ5
NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzBCQjlBODE4RENERTg5MDAwNkMwODYgLyog
V2ViQ29udGVudC1pT1MuZW50aXRsZW1lbnRzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54bWw7IHBhdGggPSAiV2ViQ29udGVudC1pT1MuZW50
aXRsZW1lbnRzIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2ODAsOCArMzY4Miw2
IEBACiAJCTgzNEIyNTEwMUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZVN0YXRpc3Rp
Y3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM2MDM0OUQxQUNCMzRENjAwNjI2
NTQ5IC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4MzYwMzQ5RTFBQ0IzNEQ2MDA2MjY1NDkgLyogV2ViU1FMaXRl
RGF0YWJhc2VUcmFja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNR
TGl0ZURhdGFiYXNlVHJhY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4MzY4
MURDQTIwRTI5MDRBMDBDMjQ5Q0QgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4MzY4MURDQjIw
RTI5MDRCMDBDMjQ5Q0QgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNzJEQjI0
MUE2NzRDOEYwMEM2OTdDNSAvKiBXS1BhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1BhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzcyREIyNjFBNjc1NjI4MDBDNjk3
QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNzJEQjI3MUE2NzU2MjgwMEM2OTdDNSAv
KiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC01MDUxLDYgKzUwNTEsOCBAQAogCQkJCTFBRENCODY4MTg5ODMx
QjMwMDIyRUU1QSAvKiBOYXZpZ2F0aW9uQWN0aW9uRGF0YS5jcHAgKi8sCiAJCQkJMUFEQ0I4Njkx
ODk4MzFCMzAwMjJFRTVBIC8qIE5hdmlnYXRpb25BY3Rpb25EYXRhLmggKi8sCiAJCQkJOUJDNTlE
NkQxRUZDREM2RDAwMUU4RDA5IC8qIE9wdGlvbmFsQ2FsbGJhY2tJRC5oICovLAorCQkJCTdBRkJE
MzZFMjFFNTQ2RTMwMDVEQkFDQiAvKiBQZXJzaXN0ZW5jeVV0aWxzLmNwcCAqLywKKwkJCQk3QUZC
RDM2RDIxRTU0NkUzMDA1REJBQ0IgLyogUGVyc2lzdGVuY3lVdGlscy5oICovLAogCQkJCUJDQzQz
QUI4MTI3Qjk1REMwMDMxN0YxNiAvKiBQbGF0Zm9ybVBvcHVwTWVudURhdGEuY3BwICovLAogCQkJ
CUJDQzQzQUI5MTI3Qjk1REMwMDMxN0YxNiAvKiBQbGF0Zm9ybVBvcHVwTWVudURhdGEuaCAqLywK
IAkJCQlFMThDOTJGMzEyREI5RTcxMDBDRjJBRUIgLyogUHJpbnRJbmZvLmNwcCAqLywKQEAgLTU1
MTUsOCArNTUxNyw4IEBACiAJCTJEMTU1MUE5MUY1QTlCNDIwMDA2RTNGRSAvKiBSZW1vdGVMYXll
clRyZWUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUU0
MDQ5MDZGMjFERTY1RDcwMDM3RjBEQiAvKiBtYWMgKi8sCiAJCQkJMkQxNTUxQUExRjVBOUJBNzAw
MDZFM0ZFIC8qIGlvcyAqLywKKwkJCQlFNDA0OTA2RjIxREU2NUQ3MDAzN0YwREIgLyogbWFjICov
LAogCQkJCTFBQjE2QUUwMTY0ODY1NkQwMDI5MEQ2MiAvKiBSZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYVByb3h5LmggKi8sCiAJCQkJMEZGMjRBMkYxODc5RTRGRTAwM0FCRjBDIC8qIFJlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4gKi8sCiAJCQkJMUFCMTZBREYxNjQ4
NjU2RDAwMjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubW0gKi8sCkBA
IC02NDEyLDYgKzY0MTQsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
IAkJCQlFNDg5RDI4MjFBMEEyQkU4MDA3OEMwNkEgLyogY2FjaGUgKi8sCisJCQkJN0E4NDNBMUQy
MUU0MUZEOTAwREVGNjYzIC8qIENsYXNzaWZpZXIgKi8sCiAJCQkJN0VDNEYwRjgxOEU0QTkyMjAw
ODA1NkFGIC8qIGNvY29hICovLAogCQkJCTMzMDkzNDRCMTMxNUI5M0EwMDk3QTdCQyAvKiBDb29r
aWVzICovLAogCQkJCTVDMTQyNkYyMUMyM0Y4MkQwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbHMg
Ki8sCkBAIC02ODkzLDYgKzY4OTYsMjEgQEAKIAkJCW5hbWUgPSBtYWM7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwogCQl9OworCQk3QTg0M0ExRDIxRTQxRkQ5MDBERUY2NjMgLyogQ2xhc3Np
ZmllciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJN0FG
QkQzNjQyMUU1MUJBQjAwNURCQUNCIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZS5jcHAgKi8sCisJCQkJN0FGQkQzNjUyMUU1MUJBQjAwNURCQUNCIC8qIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZS5oICovLAorCQkJCTdBRkJEMzY5MjFFNTQyRTgwMDVEQkFDQiAv
KiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuY3BwICovLAorCQkJCTdB
RkJEMzY4MjFFNTQyRTgwMDVEQkFDQiAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVu
dFN0b3JhZ2UuaCAqLywKKwkJCQk3QTg0M0ExQTIxRTQxRkIyMDBERUY2NjMgLyogV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCAqLywKKwkJCQk3QUZCRDM2MjIxRTUwRjM5MDA1REJB
Q0IgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggKi8sCisJCQkJN0FGQkQzNkMy
MUU1NDU0NDAwNURCQUNCIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3Bw
ICovLAorCQkJCTdBRkJEMzZCMjFFNTQ1NDQwMDVEQkFDQiAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzVGVsZW1ldHJ5LmggKi8sCisJCQkpOworCQkJbmFtZSA9IENsYXNzaWZpZXI7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk3QzZFNzBGODE4QjJENDdFMDBGMjRFMkUg
LyogY29jb2EgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAt
NzMyNyw4ICs3MzQ1LDYgQEAKIAkJCQkxQUM3NTM3QTE4M0E5RkRCMDA3MkNCMTUgLyogUGFnZUxv
YWRTdGF0ZS5oICovLAogCQkJCTgzMkVEMTg5MUUyRkUxM0IwMDZCQTY0QSAvKiBQZXJBY3Rpdml0
eVN0YXRlQ1BVVXNhZ2VTYW1wbGVyLmNwcCAqLywKIAkJCQk4MzJFRDE4QTFFMkZFMTNCMDA2QkE2
NEEgLyogUGVyQWN0aXZpdHlTdGF0ZUNQVVVzYWdlU2FtcGxlci5oICovLAotCQkJCTA3Mjk0NTVD
MUMxNzExRUEwMDNGMDczNSAvKiBQZXJzaXN0ZW5jeVV0aWxzLmNwcCAqLywKLQkJCQkwNzMyMUY5
RDFDMTdCQkVBMjIzRjA3MzUgLyogUGVyc2lzdGVuY3lVdGlscy5oICovLAogCQkJCTM3NzE2QTU5
MTk1QjkxMDUwMEVFOEIxQiAvKiBQcm9jZXNzQXNzZXJ0aW9uLmNwcCAqLywKIAkJCQk4NkY5NTM2
MDE4RkY0RkQ0MDAxREIyRUYgLyogUHJvY2Vzc0Fzc2VydGlvbi5oICovLAogCQkJCTg2RTY3QTIy
MTkwRjQxMTgwMDAwNEFCNyAvKiBQcm9jZXNzVGhyb3R0bGVyLmNwcCAqLywKQEAgLTczMzcsMTAg
KzczNTMsNiBAQAogCQkJCUE1NUJBODFCMUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eS5jcHAgKi8sCiAJCQkJQTU1QkE4MTkxQkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5LmggKi8sCiAJCQkJQTU1QkE4MUExQkEyNUIxRTAwN0NEMzNEIC8q
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluICovLAotCQkJCTgzNjgxRENCMjBF
MjkwNEIwMEMyNDlDRCAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwICov
LAotCQkJCTgzNjgxRENBMjBFMjkwNEEwMEMyNDlDRCAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmUuaCAqLywKLQkJCQk1MUU2QzE2MjFGMjkzNUNEMDBGRDM0MzcgLyogUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcCAqLywKLQkJCQk1MUU2QzE2MTFG
MjkzNUNEMDBGRDM0MzcgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdl
LmggKi8sCiAJCQkJQkMxMTFCMDgxMTJGNUUzQzAwMzM3QkFCIC8qIFJlc3BvbnNpdmVuZXNzVGlt
ZXIuY3BwICovLAogCQkJCTFBMzAwNjZDMTExMEY0RjcwMDMxOTM3QyAvKiBSZXNwb25zaXZlbmVz
c1RpbWVyLmggKi8sCiAJCQkJNUNBOTg1NDkyMTBCRUI1QTAwNTdFQjZCIC8qIFNhZmVCcm93c2lu
Z1dhcm5pbmcuaCAqLywKQEAgLTc0NTYsMTEgKzc0NjgsNyBAQAogCQkJCUJDMTExQjBEMTEyRjVF
NEYwMDMzN0JBQiAvKiBXZWJQcm9jZXNzUHJveHkuY3BwICovLAogCQkJCUJDMDMyRENGMTBGNDM4
OUYwMDU4QzE1QSAvKiBXZWJQcm9jZXNzUHJveHkuaCAqLywKIAkJCQlCQ0VFN0FCMzEyODE3MDk1
MDA5ODI3REEgLyogV2ViUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluICovLAotCQkJCTdBOUNEOEMw
MUM3Nzk4NDkwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwICov
LAotCQkJCTdBOUNEOEMxMUM3Nzk4NDkwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuaCAqLywKIAkJCQk3QTlDRDhDMjFDNzc5QUQ2MDBEOUY2QzcgLyogV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLm1lc3NhZ2VzLmluICovLAotCQkJCTZCODIxRERCMUVFRjA1
REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcCAqLywK
LQkJCQk2QjgyMUREQTFFRUYwNUREMDBEN0FGNEEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RlbGVtZXRyeS5oICovLAogCQkJCTUxRDEyNDI0MUU2RDNDQzMwMDJCMjgyMCAvKiBXZWJVUkxT
Y2hlbWVIYW5kbGVyLmNwcCAqLywKIAkJCQk1MUQxMjQyNTFFNkQzQ0MzMDAyQjI4MjAgLyogV2Vi
VVJMU2NoZW1lSGFuZGxlci5oICovLAogCQkJCTUxRThCNjhEMUU3MTI4NzMwMDFCNzEzMiAvKiBX
ZWJVUkxTY2hlbWVUYXNrLmNwcCAqLywKQEAgLTkxOTAsNyArOTE5OCw3IEBACiAJCQkJMkRDMThG
QjAyMTg5MTI2NDAwMjVBODhEIC8qIFBlbmNpbEtpdFNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NUMyOThEQTAxQzNERjAyMTAwNDcwQUZFIC8qIFBlbmRpbmdEb3dubG9hZC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODMyRUQxOEMxRTJGRTE1NzAwNkJBNjRBIC8qIFBlckFjdGl2aXR5U3RhdGVDUFVV
c2FnZVNhbXBsZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTA3Mjk3RjlGMUMxN0FBMUEwMTVGMDcz
NSAvKiBQZXJzaXN0ZW5jeVV0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QUZCRDM2RjIxRTU0
NkY4MDA1REJBQ0IgLyogUGVyc2lzdGVuY3lVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNF
ODVCMjAxQzg4RTY0QjAwNzBCRkNFIC8qIFBpbmdMb2FkLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjVFMjAwNDE4RTc3MDUxMDAzRUMzRTUgLyogUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMkRBMDQ5QjQxODBDQ0NEMzAwQUFGQTlFIC8qIFBsYXRmb3JtQ0FM
YXllclJlbW90ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjYzLDggKzkyNzEsOCBAQAogCQkJCUE1
NUJBODE3MUJBMjNFMTIwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNkJFOTY5Q0QxRTU0RTA1NDAwOEI3NDgzIC8qIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NDbGFzc2lmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2QkU5NjlDQjFFNTRENENGMDA4
Qjc0ODMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJODNCM0NCMTAyMEUyQUIwMTAwNDQxRTlCIC8qIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFFNkMxNjQxRjI5MzVERDAw
RkQzNDM3IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJN0FGQkQzNjcyMUU1MUJBQjAwNURCQUNCIC8qIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0FGQkQzNkEyMUU1NDJG
MTAwNURCQUNCIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUEzMDA2NkUxMTEwRjRGNzAwMzE5MzdDIC8qIFJlc3BvbnNpdmVu
ZXNzVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMDQ4MkNFMURERDMyNEYwMEYwMDZEMCAv
KiBSVENOZXR3b3JrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRTk3RDc0RDIwMEU5MDA0MDBCRjY2
NDMgLyogU2FmZUJyb3dzaW5nU1BJLmggaW4gSGVhZGVycyAqLywKQEAgLTk1MTgsOCArOTUyNiw4
IEBACiAJCQkJMzc2MDg4MUYxNTA0MTNFOTAwRkM4MkM3IC8qIFdlYlJlbmRlck9iamVjdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTEwQUZGQkExNjU0MjA0ODAwMUJBMDVFIC8qIFdlYlJlc291cmNl
TG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUYwNjBFMDE2NTQzMTdGMDBGMzI4MUIgLyog
V2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0FGQkQzNjMy
MUU1MEYzOTAwNURCQUNCIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJN0E3OTFFRkIxQzdDRkQwMTAwQzRDNTJCIC8qIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKLQkJCQk2QjgyMUREQzFF
RUYwNUREMDBEN0FGNEEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDEzMDc1QjAxREU4NUY1ODAwMzlFQzY5IC8qIFdlYlJUQ01vbml0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxRkFGNUY1MUUzQzA2NDkwMDFBRTY3OCAvKiBXZWJS
VENSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFEQzQ1OUYxRTNEQkRBNTAwQjExRjUx
IC8qIFdlYlJUQ1NvY2tldC5oIGluIEhlYWRlcnMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358632</attachid>
            <date>2019-01-08 13:35:49 -0800</date>
            <delta_ts>2019-01-08 14:02:26 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-193252-20190108133548.patch</filename>
            <type>text/plain</type>
            <size>351651</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5NzA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDEzMTlkZGUxNzlhM2M0NzAz
OGY3NGRmMTM4ZmQ0OTRmMmI1NzQwZWMuLmU1ZTk5MzU0YTExZmEzMzkzNTlkMWM0YzY3OWI0MWNh
N2RmMTQ1YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTktMDEtMDggIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzIGZpbGVzIGZyb20gVUlQcm9jZXNzIHRvIE5ldHdvcmtQcm9jZXNzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTMyNTIKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzQ3MTI1NDAxPgorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hy
aXN0ZW5zZW4uCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyB0aGUgZmlyc3QgcGFydCBvZiBhIHJl
ZmFjdG9yaW5nIHRvIG1vdmUgdGhlIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgbG9naWMgZnJvbSB0
aGUgVUlQcm9jZXNzIHRvIHRoZSBOZXR3b3JrUHJvY2Vzcy4KKworICAgICAgICBUaGlzIHBhdGNo
IG1vdmVzIGNvZGUgaW50byBkaWZmZXJlbnQgZm9sZGVycyBhbmQgYWRqdXN0cyBuZWNlc3Nhcnkg
YnVpbGQgZmlsZXMsIGJ1dCBkb2VzIG5vdCBjaGFuZ2Ugd2hlcmUgdGhlIGNvZGUgZXhlY3V0ZXMu
IFRoZXNlCisgICAgICAgIGNoYW5nZXMgaGF2ZSBubyBpbXBhY3Qgb24gYmVoYXZpb3Igb3IgdGVz
dCByZXN1bHRzLgorCisgICAgICAgIEkgYWxzbyBtb2RpZmllZCBhIGZldyBmaWxlcyB0byBhZGQg
bWlzc2luZyBpbmNsdWRlIGZpbGVzIHVuY292ZXJlZCBieSB0aGUgdW5pZmllZCBidWlsZCBzeXN0
ZW0uCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwLgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUuaC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVu
dFN0b3JhZ2UuY3BwLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2Uu
aC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuaC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAuCisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1l
dHJ5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmguCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxv
YWRzL1BlbmRpbmdEb3dubG9hZC5jcHA6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxv
YWRzL1BlbmRpbmdEb3dubG9hZC5oOgorICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAg
ICAgICAqIFNoYXJlZC9QZXJzaXN0ZW5jeVV0aWxzLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1BlcnNpc3RlbmN5VXRpbHMuY3BwLgorICAgICAgICAqIFNoYXJlZC9Q
ZXJzaXN0ZW5jeVV0aWxzLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Q
ZXJzaXN0ZW5jeVV0aWxzLmguCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291
cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBTb3Vy
Y2VzV1BFLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3Jl
UmVmLmNwcDoKKyAgICAgICAgKFdLV2Vic2l0ZURhdGFTdG9yZVNldFdlYkF1dGhlbnRpY2F0aW9u
TW9ja0NvbmZpZ3VyYXRpb24pOiBBZGQgbWlzc2luZyBXZWJLaXQ6OiBzY29wZS4KKyAgICAgICAg
KiBVSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwOiBB
ZGQgbWlzc2luZyBpbmNsdWRlLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJEYXRhTGlzdFN1Z2dl
c3Rpb25zRHJvcGRvd24uY3BwOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL0Rpc3Bs
YXlMaW5rLmNwcDoKKyAgICAgICAgKiBVbmlmaWVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0Ogor
ICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE5LTAxLTA3
ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBUdXJuIG9uIFBvaW50
ZXIgRXZlbnRzIGJ5IGRlZmF1bHQgZm9yIGlPUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKaW5kZXggNmRiMWU5
MTE4YTY5OTRmOTQ1ZjM4ZjFhZjJkZmFjYTIwYjhjM2Q4NC4uZmVhZjRkMWJmNjlhYzE4NGU2ZTIy
MWNmNmI4ZTFjNDM4MDk2MjMyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DTWFrZUxpc3Rz
LnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CkBAIC01LDYgKzUsNyBAQCBz
ZXRfcHJvcGVydHkoRElSRUNUT1JZIC4gUFJPUEVSVFkgRk9MREVSICJXZWJLaXQiKQogc2V0KFdl
YktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCS0lUX0RJUn0iCiAgICAgIiR7V0VC
S0lUX0RJUn0vTmV0d29ya1Byb2Nlc3MiCisgICAgIiR7V0VCS0lUX0RJUn0vTmV0d29ya1Byb2Nl
c3MvQ2xhc3NpZmllciIKICAgICAiJHtXRUJLSVRfRElSfS9OZXR3b3JrUHJvY2Vzcy9Db29raWVz
IgogICAgICIke1dFQktJVF9ESVJ9L05ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scyIKICAg
ICAiJHtXRUJLSVRfRElSfS9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5
YzM4ZTFjNDdjZWQ2MDgyNTc4ZTdkMTkzODE1MWZkNTBmNzU0ZmQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlLmNwcApAQCAtMCwwICsxLDEyOTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmUuaCIKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQbHVnaW5Q
cm9jZXNzTWFuYWdlci5oIgorI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NQcm94eS5oIgorI2luY2x1
ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5oIgorI2luY2x1ZGUg
IldlYlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnkuaCIKKyNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9LZXllZENvZGluZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlz
dGljcy5oPgorI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KKyNpbmNsdWRlIDx3
dGYvRGF0ZU1hdGguaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworY29uc3RleHByIHVuc2lnbmVkIHN0YXRpc3RpY3NNb2RlbFZlcnNp
b24geyAxNCB9OworY29uc3RleHByIHVuc2lnbmVkIG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJ
blJlZGlyZWN0VHJhY2VCYWNrIHsgNTAgfTsKK2NvbnN0ZXhwciBTZWNvbmRzIG1pbmltdW1TdGF0
aXN0aWNzUHJvY2Vzc2luZ0ludGVydmFsIHsgNV9zIH07Citjb25zdGV4cHIgdW5zaWduZWQgb3Bl
cmF0aW5nRGF0ZXNXaW5kb3cgeyAzMCB9OworY29uc3RleHByIHVuc2lnbmVkIG1heEltcG9ydGFu
Y2UgeyAzIH07CitzdGF0aWMgY29uc3QgY2hhciogZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJj
ZSB7ICIzcmRwYXJ0eXRlc3R3ZWJraXQub3JnIiB9OworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FC
TEVECitzdGF0aWMgU3RyaW5nIGRvbWFpbnNUb1N0cmluZyhjb25zdCBWZWN0b3I8U3RyaW5nPiYg
ZG9tYWlucykKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgZm9yIChhdXRvJiBk
b21haW4gOiBkb21haW5zKSB7CisgICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7CisgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKGRvbWFpbik7CisgICAgfQorICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9Cisj
ZW5kaWYKKworY2xhc3MgT3BlcmF0aW5nRGF0ZSB7CitwdWJsaWM6CisgICAgT3BlcmF0aW5nRGF0
ZSgpID0gZGVmYXVsdDsKKworICAgIHN0YXRpYyBPcGVyYXRpbmdEYXRlIGZyb21XYWxsVGltZShX
YWxsVGltZSB0aW1lKQorICAgIHsKKyAgICAgICAgZG91YmxlIG1zID0gdGltZS5zZWNvbmRzU2lu
Y2VFcG9jaCgpLm1pbGxpc2Vjb25kcygpOworICAgICAgICBpbnQgeWVhciA9IG1zVG9ZZWFyKG1z
KTsKKyAgICAgICAgaW50IHllYXJEYXkgPSBkYXlJblllYXIobXMsIHllYXIpOworICAgICAgICBp
bnQgbW9udGggPSBtb250aEZyb21EYXlJblllYXIoeWVhckRheSwgaXNMZWFwWWVhcih5ZWFyKSk7
CisgICAgICAgIGludCBtb250aERheSA9IGRheUluTW9udGhGcm9tRGF5SW5ZZWFyKHllYXJEYXks
IGlzTGVhcFllYXIoeWVhcikpOworCisgICAgICAgIHJldHVybiBPcGVyYXRpbmdEYXRlIHsgeWVh
ciwgbW9udGgsIG1vbnRoRGF5IH07CisgICAgfQorCisgICAgc3RhdGljIE9wZXJhdGluZ0RhdGUg
dG9kYXkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGlt
ZShXYWxsVGltZTo6bm93KCkpOworICAgIH0KKworICAgIFNlY29uZHMgc2Vjb25kc1NpbmNlRXBv
Y2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHMgeyBkYXRlVG9EYXlzRnJv
bTE5NzAobV95ZWFyLCBtX21vbnRoLCBtX21vbnRoRGF5KSAqIHNlY29uZHNQZXJEYXkgfTsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9tb250aERheSA9PSBvdGhlci5tX21vbnRoRGF5
ICYmIG1fbW9udGggPT0gb3RoZXIubV9tb250aCAmJiBtX3llYXIgPT0gb3RoZXIubV95ZWFyOwor
ICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wZXJhdGluZ0RhdGUmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHNlY29uZHNTaW5jZUVwb2NoKCkgPCBvdGhlci5z
ZWNvbmRzU2luY2VFcG9jaCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBP
cGVyYXRpbmdEYXRlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzZWNvbmRz
U2luY2VFcG9jaCgpIDw9IG90aGVyLnNlY29uZHNTaW5jZUVwb2NoKCk7CisgICAgfQorCitwcml2
YXRlOgorICAgIE9wZXJhdGluZ0RhdGUoaW50IHllYXIsIGludCBtb250aCwgaW50IG1vbnRoRGF5
KQorICAgICAgICA6IG1feWVhcih5ZWFyKQorICAgICAgICAsIG1fbW9udGgobW9udGgpCisgICAg
ICAgICwgbV9tb250aERheShtb250aERheSkKKyAgICB7IH0KKworICAgIGludCBtX3llYXIgeyAw
IH07CisgICAgaW50IG1fbW9udGggeyAwIH07IC8vIFswLCAxMV0uCisgICAgaW50IG1fbW9udGhE
YXkgeyAwIH07IC8vIFsxLCAzMV0uCit9OworCitzdGF0aWMgVmVjdG9yPE9wZXJhdGluZ0RhdGU+
IG1lcmdlT3BlcmF0aW5nRGF0ZXMoY29uc3QgVmVjdG9yPE9wZXJhdGluZ0RhdGU+JiBleGlzdGlu
Z0RhdGVzLCBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4mJiBuZXdEYXRlcykKK3sKKyAgICBpZiAoZXhp
c3RpbmdEYXRlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBXVEZNb3ZlKG5ld0RhdGVzKTsK
KworICAgIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtZXJnZWREYXRlcyhleGlzdGluZ0RhdGVzLnNp
emUoKSArIG5ld0RhdGVzLnNpemUoKSk7CisKKyAgICAvLyBNZXJnZSB0aGUgdHdvIHNvcnRlZCB2
ZWN0b3JzIG9mIGRhdGVzLgorICAgIHN0ZDo6bWVyZ2UoZXhpc3RpbmdEYXRlcy5iZWdpbigpLCBl
eGlzdGluZ0RhdGVzLmVuZCgpLCBuZXdEYXRlcy5iZWdpbigpLCBuZXdEYXRlcy5lbmQoKSwgbWVy
Z2VkRGF0ZXMuYmVnaW4oKSk7CisgICAgLy8gUmVtb3ZlIGR1cGxpY2F0ZSBkYXRlcy4KKyAgICBy
ZW1vdmVSZXBlYXRlZEVsZW1lbnRzKG1lcmdlZERhdGVzKTsKKworICAgIC8vIERyb3Agb2xkIGRh
dGVzIHVudGlsIHRoZSBWZWN0b3Igc2l6ZSByZWFjaGVzIG9wZXJhdGluZ0RhdGVzV2luZG93Lgor
ICAgIHdoaWxlIChtZXJnZWREYXRlcy5zaXplKCkgPiBvcGVyYXRpbmdEYXRlc1dpbmRvdykKKyAg
ICAgICAgbWVyZ2VkRGF0ZXMucmVtb3ZlKDApOworCisgICAgcmV0dXJuIG1lcmdlZERhdGVzOwor
fQorCitzdHJ1Y3QgU3RhdGlzdGljc0xhc3RTZWVuIHsKKyAgICBTdHJpbmcgdG9wUHJpdmF0ZWx5
T3duZWREb21haW47CisgICAgV2FsbFRpbWUgbGFzdFNlZW47Cit9OworCitzdGF0aWMgdm9pZCBw
cnVuZVJlc291cmNlcyhIYXNoTWFwPFN0cmluZywgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljcz4mIHN0YXRpc3RpY3NNYXAsIFZlY3RvcjxTdGF0aXN0aWNzTGFzdFNlZW4+JiBzdGF0aXN0
aWNzVG9QcnVuZSwgc2l6ZV90JiBudW1iZXJPZkVudHJpZXNUb1BydW5lKQoreworICAgIGlmIChz
dGF0aXN0aWNzVG9QcnVuZS5zaXplKCkgPiBudW1iZXJPZkVudHJpZXNUb1BydW5lKSB7CisgICAg
ICAgIHN0ZDo6c29ydChzdGF0aXN0aWNzVG9QcnVuZS5iZWdpbigpLCBzdGF0aXN0aWNzVG9QcnVu
ZS5lbmQoKSwgW10oY29uc3QgU3RhdGlzdGljc0xhc3RTZWVuJiBhLCBjb25zdCBTdGF0aXN0aWNz
TGFzdFNlZW4mIGIpIHsKKyAgICAgICAgICAgIHJldHVybiBhLmxhc3RTZWVuIDwgYi5sYXN0U2Vl
bjsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDAsIGVuZCA9IHN0
ZDo6bWluKG51bWJlck9mRW50cmllc1RvUHJ1bmUsIHN0YXRpc3RpY3NUb1BydW5lLnNpemUoKSk7
IGkgIT0gZW5kOyArK2ksIC0tbnVtYmVyT2ZFbnRyaWVzVG9QcnVuZSkKKyAgICAgICAgc3RhdGlz
dGljc01hcC5yZW1vdmUoc3RhdGlzdGljc1RvUHJ1bmVbaV0udG9wUHJpdmF0ZWx5T3duZWREb21h
aW4pOworfQorCitzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUltcG9ydGFuY2UoY29uc3QgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpCit7CisgICAgdW5zaWduZWQgaW1w
b3J0YW5jZSA9IG1heEltcG9ydGFuY2U7CisgICAgaWYgKCFyZXNvdXJjZVN0YXRpc3RpYy5pc1By
ZXZhbGVudFJlc291cmNlKQorICAgICAgICBpbXBvcnRhbmNlIC09IDE7CisgICAgaWYgKCFyZXNv
dXJjZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgIGltcG9ydGFuY2UgLT0g
MjsKKyAgICByZXR1cm4gaW1wb3J0YW5jZTsKK30KKworUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUoV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCisgICAgOiBt
X3N0b3JlKHN0b3JlKQorICAgICwgbV93b3JrUXVldWUod29ya1F1ZXVlKQoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcmVnaXN0
ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpOworI2VuZGlmCisgICAgaW5jbHVkZVRvZGF5QXNPcGVy
YXRpbmdEYXRlSWZOZWNlc3NhcnkoKTsKKworICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaEFmdGVy
KDVfcywgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXSB7CisgICAgICAgIGlmICh3ZWFr
VGhpcykKKyAgICAgICAgICAgIHdlYWtUaGlzLT5jYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnko
KTsKKyAgICB9KTsKK30KKworUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjp+UmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OnNldFBlcnNpc3RlbnRTdG9yYWdlKFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3Rv
cmFnZSYgcGVyc2lzdGVudFN0b3JhZ2UpCit7CisgICAgbV9wZXJzaXN0ZW50U3RvcmFnZSA9IG1h
a2VXZWFrUHRyKHBlcnNpc3RlbnRTdG9yYWdlKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OmNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpIGNvbnN0Cit7
CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAobV9wYXJhbWV0ZXJz
LnNob3VsZFN1Ym1pdFRlbGVtZXRyeSkKKyAgICAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RlbGVtZXRyeTo6Y2FsY3VsYXRlQW5kU3VibWl0KCp0aGlzKTsKK30KKwordm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRz
V2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKyAgICBtX3BhcmFtZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJl
U2Nhbm5lZCA9IHZhbHVlOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwo
Ym9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBtX3Bh
cmFtZXRlcnMuc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwg
PSB2YWx1ZTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNl
dFNob3VsZFN1Ym1pdFRlbGVtZXRyeShib29sIHZhbHVlKQoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworICAgIG1fcGFyYW1ldGVycy5zaG91bGRTdWJtaXRUZWxlbWV0cnkgPSB2
YWx1ZTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlbW92
ZURhdGFSZWNvcmRzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmICghc2hvdWxkUmVtb3ZlRGF0
YVJlY29yZHMoKSkgeworICAgICAgICBjYWxsYmFjaygpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgbV9hY3RpdmVQbHVnaW5U
b2tlbnMuY2xlYXIoKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHBsdWdpbiA6IFBsdWdpblByb2Nl
c3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5wbHVnaW5Qcm9jZXNzZXMoKSkKKyAgICAgICAgbV9hY3Rp
dmVQbHVnaW5Ub2tlbnMuYWRkKHBsdWdpbi0+cGx1Z2luUHJvY2Vzc1Rva2VuKCkpOworI2VuZGlm
CisKKyAgICBhdXRvIHByZXZhbGVudFJlc291cmNlRG9tYWlucyA9IHRvcFByaXZhdGVseUNvbnRy
b2xsZWREb21haW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcigpOworICAgIGlmIChwcmV2YWxlbnRS
ZXNvdXJjZURvbWFpbnMuaXNFbXB0eSgpKSB7CisgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBSRUxFQVNF
X0xPR19JTkZPX0lGKG1fZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RlYnVnLCAiQWJvdXQgdG8gcmVtb3ZlIGRhdGEgcmVjb3JkcyBmb3IgJXtwdWJsaWN9cy4iLCBk
b21haW5zVG9TdHJpbmcocHJldmFsZW50UmVzb3VyY2VEb21haW5zKS51dGY4KCkuZGF0YSgpKTsK
KyNlbmRpZgorCisgICAgc2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQodHJ1ZSk7CisKKyAgICBS
dW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3ByZXZhbGVudFJlc291cmNlRG9tYWlucyA9IGNyb3Nz
VGhyZWFkQ29weShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLCBjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgc2hvdWxkTm90aWZ5UGFn
ZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCA9IG1fcGFyYW1ldGVycy5zaG91bGROb3RpZnlQ
YWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLCB3b3JrUXVldWUgPSBtX3dvcmtRdWV1ZS5j
b3B5UmVmKCldICgpIG11dGFibGUgeworICAgICAgICBXZWJQcm9jZXNzUHJveHk6OmRlbGV0ZVdl
YnNpdGVEYXRhRm9yVG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNJbkFsbFBlcnNpc3RlbnRE
YXRhU3RvcmVzKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bW9uaXRvcmVkRGF0YVR5
cGVzKCksIFdURk1vdmUocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgc2hvdWxkTm90aWZ5UGFn
ZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayksIHdlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIHdvcmtRdWV1ZSA9IHdvcmtRdWV1ZS5j
b3B5UmVmKCldKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgZG9tYWluc1dpdGhEZWxldGVkV2Vic2l0
ZURhdGEpIG11dGFibGUgeworICAgICAgICAgICAgd29ya1F1ZXVlLT5kaXNwYXRjaChbdG9wRG9t
YWlucyA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSksIGNh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHdlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyld
ICgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGlmICghd2Vha1RoaXMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHByZXZhbGVudFJlc291
cmNlRG9tYWluIDogdG9wRG9tYWlucykgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiBzdGF0
aXN0aWMgPSB3ZWFrVGhpcy0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFp
bihwcmV2YWxlbnRSZXNvdXJjZURvbWFpbik7CisgICAgICAgICAgICAgICAgICAgICsrc3RhdGlz
dGljLmRhdGFSZWNvcmRzUmVtb3ZlZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgd2Vha1RoaXMtPnNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKGZhbHNlKTsKKyAgICAgICAg
ICAgICAgICBjYWxsYmFjaygpOworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICAgICAg
ICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYod2Vha1RoaXMtPm1fZGVidWdMb2dnaW5nRW5hYmxl
ZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiRG9uZSByZW1vdmluZyBkYXRhIHJlY29y
ZHMuIik7CisjZW5kaWYKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30K
KwordW5zaWduZWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZWN1cnNpdmVs
eUdldEFsbERvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUb1RoaXNEb21haW4oY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMsIEhhc2hTZXQ8U3Ry
aW5nPiYgZG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvLCB1bnNpZ25lZCBudW1iZXJPZlJlY3Vy
c2l2ZUNhbGxzKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgaWYgKG51bWJlck9mUmVjdXJzaXZlQ2FsbHMgPj0gbWF4TnVtYmVyT2ZSZWN1cnNpdmVDYWxs
c0luUmVkaXJlY3RUcmFjZUJhY2spIHsKKyAgICAgICAgLy8gTW9kZWwgdmVyc2lvbiAxNCBpbnZv
a2VzIGEgZGVsaWJlcmF0ZSByZS1jbGFzc2lmaWNhdGlvbiBvZiB0aGUgd2hvbGUgc2V0LgorICAg
ICAgICBpZiAoc3RhdGlzdGljc01vZGVsVmVyc2lvbiAhPSAxNCkKKyAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBSRUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLCAiSGl0ICV1IHJlY3Vyc2l2ZSBjYWxscyBpbiByZWRpcmVjdCBiYWNrdHJhY2UuIFJldHVy
bmluZyBlYXJseS4iLCBtYXhOdW1iZXJPZlJlY3Vyc2l2ZUNhbGxzSW5SZWRpcmVjdFRyYWNlQmFj
ayk7CisgICAgICAgIHJldHVybiBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzOworICAgIH0KKworICAg
IG51bWJlck9mUmVjdXJzaXZlQ2FsbHMrKzsKKworICAgIGZvciAoYXV0byYgc3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdEZyb21Eb21haW4gOiByZXNvdXJjZVN0YXRpc3RpYy5zdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c0Zyb20udmFsdWVzKCkpIHsKKyAgICAgICAgYXV0byBtYXBFbnRyeSA9IG1f
cmVzb3VyY2VTdGF0aXN0aWNzTWFwLmZpbmQoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb21E
b21haW4pOworICAgICAgICBpZiAobWFwRW50cnkgPT0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAu
ZW5kKCkgfHwgbWFwRW50cnktPnZhbHVlLmlzUHJldmFsZW50UmVzb3VyY2UpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgaWYgKGRvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUby5hZGQo
bWFwRW50cnktPnZhbHVlLmhpZ2hMZXZlbERvbWFpbikuaXNOZXdFbnRyeSkKKyAgICAgICAgICAg
IG51bWJlck9mUmVjdXJzaXZlQ2FsbHMgPSByZWN1cnNpdmVseUdldEFsbERvbWFpbnNUaGF0SGF2
ZVJlZGlyZWN0ZWRUb1RoaXNEb21haW4obWFwRW50cnktPnZhbHVlLCBkb21haW5zVGhhdEhhdmVS
ZWRpcmVjdGVkVG8sIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMpOworICAgIH0KKyAgICBmb3IgKGF1
dG8mIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tRG9tYWluIDogcmVzb3VyY2VTdGF0aXN0aWMu
dG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLnZhbHVlcygpKSB7CisgICAgICAgIGF1dG8gbWFw
RW50cnkgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5maW5kKHRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RGcm9tRG9tYWluKTsKKyAgICAgICAgaWYgKG1hcEVudHJ5ID09IG1fcmVzb3VyY2VTdGF0aXN0
aWNzTWFwLmVuZCgpIHx8IG1hcEVudHJ5LT52YWx1ZS5pc1ByZXZhbGVudFJlc291cmNlKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChkb21haW5zVGhhdEhhdmVSZWRpcmVjdGVk
VG8uYWRkKG1hcEVudHJ5LT52YWx1ZS5oaWdoTGV2ZWxEb21haW4pLmlzTmV3RW50cnkpCisgICAg
ICAgICAgICBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzID0gcmVjdXJzaXZlbHlHZXRBbGxEb21haW5z
VGhhdEhhdmVSZWRpcmVjdGVkVG9UaGlzRG9tYWluKG1hcEVudHJ5LT52YWx1ZSwgZG9tYWluc1Ro
YXRIYXZlUmVkaXJlY3RlZFRvLCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gbnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6Om1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJl
dmFsZW50KFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGlj
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKHJlc291cmNl
U3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAgIGZv
ciAoYXV0byYgc3VicmVzb3VyY2VEb21haW5SZWRpcmVjdGVkVG8gOiByZXNvdXJjZVN0YXRpc3Rp
Yy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnZhbHVlcygpKSB7CisgICAgICAgIGF1dG8g
bWFwRW50cnkgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5maW5kKHN1YnJlc291cmNlRG9tYWlu
UmVkaXJlY3RlZFRvKTsKKyAgICAgICAgaWYgKG1hcEVudHJ5ICE9IG1fcmVzb3VyY2VTdGF0aXN0
aWNzTWFwLmVuZCgpICYmIG1hcEVudHJ5LT52YWx1ZS5pc1ByZXZhbGVudFJlc291cmNlKSB7Cisg
ICAgICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYywgUmVzb3Vy
Y2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBmb3IgKGF1dG8mIHRvcEZyYW1lRG9tYWluUmVkaXJlY3RlZFRvIDogcmVz
b3VyY2VTdGF0aXN0aWMudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby52YWx1ZXMoKSkgeworICAg
ICAgICBhdXRvIG1hcEVudHJ5ID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZmluZCh0b3BGcmFt
ZURvbWFpblJlZGlyZWN0ZWRUbyk7CisgICAgICAgIGlmIChtYXBFbnRyeSAhPSBtX3Jlc291cmNl
U3RhdGlzdGljc01hcC5lbmQoKSAmJiBtYXBFbnRyeS0+dmFsdWUuaXNQcmV2YWxlbnRSZXNvdXJj
ZSkgeworICAgICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMs
IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6aXNQcmV2YWxlbnREdWVUb0RlYnVnTW9kZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNv
dXJjZVN0YXRpc3RpYykKK3sKKyAgICBpZiAoIW1fZGVidWdNb2RlRW5hYmxlZCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHJlc291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERv
bWFpbiA9PSBkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlIHx8IHJlc291cmNlU3RhdGlzdGlj
LmhpZ2hMZXZlbERvbWFpbiA9PSBtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2U7Cit9CisK
K3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpwcm9jZXNzU3RhdGlzdGlj
c0FuZERhdGFSZWNvcmRzKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIGlmIChtX3BhcmFtZXRlcnMuc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVj
b3Jkc1JlbW92YWwpIHsKKyAgICAgICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG1f
cmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKSB7CisgICAgICAgICAgICBpZiAoaXNQcmV2
YWxlbnREdWVUb0RlYnVnTW9kZShyZXNvdXJjZVN0YXRpc3RpYykpCisgICAgICAgICAgICAgICAg
c2V0UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZh
bGVuY2U6OkhpZ2gpOworICAgICAgICAgICAgZWxzZSBpZiAoIXJlc291cmNlU3RhdGlzdGljLmlz
VmVyeVByZXZhbGVudFJlc291cmNlKSB7CisgICAgICAgICAgICAgICAgbWFya0FzUHJldmFsZW50
SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQocmVzb3VyY2VTdGF0aXN0aWMpOworICAgICAgICAg
ICAgICAgIGF1dG8gY3VycmVudFByZXZhbGVuY2UgPSByZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZh
bGVudFJlc291cmNlID8gUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCA6IFJlc291cmNlTG9h
ZFByZXZhbGVuY2U6OkxvdzsKKyAgICAgICAgICAgICAgICBhdXRvIG5ld1ByZXZhbGVuY2UgPSBt
X3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmNhbGN1bGF0ZVJlc291cmNlUHJldmFs
ZW5jZShyZXNvdXJjZVN0YXRpc3RpYywgY3VycmVudFByZXZhbGVuY2UpOworICAgICAgICAgICAg
ICAgIGlmIChuZXdQcmV2YWxlbmNlICE9IGN1cnJlbnRQcmV2YWxlbmNlKQorICAgICAgICAgICAg
ICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYywgbmV3UHJldmFs
ZW5jZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZW1vdmVEYXRh
UmVjb3JkcyhbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIHsKKyAgICAgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKTsKKyAg
ICAgICAgaWYgKG1fcGVyc2lzdGVudFN0b3JhZ2UpCisgICAgICAgICAgICBtX3BlcnNpc3RlbnRT
dG9yYWdlLT5zY2hlZHVsZU9yV3JpdGVNZW1vcnlTdG9yZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGVyc2lzdGVudFN0b3JhZ2U6OkZvcmNlSW1tZWRpYXRlV3JpdGU6Ok5vKTsKKworICAgICAgICBp
ZiAoIW1fcGFyYW1ldGVycy5zaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2Fu
bmVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNw
YXRjaChbXSB7CisgICAgICAgICAgICBXZWJQcm9jZXNzUHJveHk6Om5vdGlmeVBhZ2VTdGF0aXN0
aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzZWQoKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisK
K3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpoYXNTdG9yYWdlQWNjZXNz
KGNvbnN0IFN0cmluZyYgc3ViRnJhbWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHRvcEZy
YW1lUHJpbWFyeURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byYgc3ViRnJhbWVTdGF0aXN0aWMg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHN1YkZyYW1lUHJpbWFy
eURvbWFpbik7CisgICAgaWYgKHNob3VsZEJsb2NrQW5kUHVyZ2VDb29raWVzKHN1YkZyYW1lU3Rh
dGlzdGljKSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoIXNob3VsZEJsb2NrQW5kS2VlcENvb2tpZXMoc3ViRnJh
bWVTdGF0aXN0aWMpKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHRydWUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9
IG1ha2VSZWYobV9zdG9yZSksIHN1YkZyYW1lUHJpbWFyeURvbWFpbiA9IHN1YkZyYW1lUHJpbWFy
eURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVQcmltYXJ5RG9tYWluID0gdG9wRnJhbWVQ
cmltYXJ5RG9tYWluLmlzb2xhdGVkQ29weSgpLCBmcmFtZUlELCBwYWdlSUQsIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAg
IHN0b3JlLT5jYWxsSGFzU3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFuZGxlcihzdWJGcmFtZVByaW1h
cnlEb21haW4sIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgZnJhbWVJRCwgcGFnZUlELCBbc3RvcmUg
PSBzdG9yZS5jb3B5UmVmKCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKGJvb2wgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0b3JlLT5zdGF0
aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSwgcmVzdWx0XSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihyZXN1bHQpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAg
IH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVxdWVz
dFN0b3JhZ2VBY2Nlc3MoU3RyaW5nJiYgc3ViRnJhbWVQcmltYXJ5RG9tYWluLCBTdHJpbmcmJiB0
b3BGcmFtZVByaW1hcnlEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwg
Ym9vbCBwcm9tcHRFbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NT
dGF0dXMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworCisgICAgYXV0byYgc3ViRnJhbWVTdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHN1YkZyYW1lUHJpbWFyeURvbWFpbik7CisgICAgaWYg
KHNob3VsZEJsb2NrQW5kUHVyZ2VDb29raWVzKHN1YkZyYW1lU3RhdGlzdGljKSkgeworI2lmICFS
RUxFQVNFX0xPR19ESVNBQkxFRAorICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKG1fZGVidWdM
b2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQ2Fubm90IGdyYW50
IHN0b3JhZ2UgYWNjZXNzIHRvICV7cHVibGljfXMgc2luY2UgaXRzIGNvb2tpZXMgYXJlIGJsb2Nr
ZWQgaW4gdGhpcmQtcGFydHkgY29udGV4dHMgYW5kIGl0IGhhcyBub3QgcmVjZWl2ZWQgdXNlciBp
bnRlcmFjdGlvbiBhcyBmaXJzdC1wYXJ0eS4iLCBzdWJGcmFtZVByaW1hcnlEb21haW4udXRmOCgp
LmRhdGEoKSk7CisjZW5kaWYKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vz
c1N0YXR1czo6Q2Fubm90UmVxdWVzdEFjY2Vzcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoIXNob3VsZEJsb2NrQW5kS2VlcENvb2tpZXMoc3ViRnJhbWVTdGF0aXN0aWMpKSB7
CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYo
bV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJObyBu
ZWVkIHRvIGdyYW50IHN0b3JhZ2UgYWNjZXNzIHRvICV7cHVibGljfXMgc2luY2UgaXRzIGNvb2tp
ZXMgYXJlIG5vdCBibG9ja2VkIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzLiIsIHN1YkZyYW1lUHJp
bWFyeURvbWFpbi51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpIYXNBY2Nlc3MpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgYXV0byB1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyID0gcHJvbXB0RW5hYmxlZCAm
JiBoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0KHN1YkZyYW1lU3RhdGlz
dGljLCB0b3BGcmFtZVByaW1hcnlEb21haW4pOworICAgIGlmIChwcm9tcHRFbmFibGVkICYmICF1
c2VyV2FzUHJvbXB0ZWRFYXJsaWVyKSB7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAg
ICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0byBhc2sgdGhlIHVzZXIgd2hldGhlciB0aGV5IHdh
bnQgdG8gZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJXtwdWJsaWN9cyB1bmRlciAle3B1YmxpY31z
IG9yIG5vdC4iLCBzdWJGcmFtZVByaW1hcnlEb21haW4udXRmOCgpLmRhdGEoKSwgdG9wRnJhbWVQ
cmltYXJ5RG9tYWluLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFN0b3JhZ2VBY2Nlc3NTdGF0dXM6OlJlcXVpcmVzVXNlclByb21wdCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9IGVsc2UgaWYgKHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIpIHsKKyNpZiAh
UkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRihtX2RlYnVn
TG9nZ2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIlN0b3JhZ2UgYWNj
ZXNzIHdhcyBncmFudGVkIHRvICV7cHVibGljfXMgdW5kZXIgJXtwdWJsaWN9cy4iLCBzdWJGcmFt
ZVByaW1hcnlEb21haW4udXRmOCgpLmRhdGEoKSwgdG9wRnJhbWVQcmltYXJ5RG9tYWluLnV0Zjgo
KS5kYXRhKCkpOworI2VuZGlmCisgICAgfQorCisgICAgc3ViRnJhbWVTdGF0aXN0aWMudGltZXNB
Y2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSsrOworCisgICAgZ3JhbnRT
dG9yYWdlQWNjZXNzSW50ZXJuYWwoV1RGTW92ZShzdWJGcmFtZVByaW1hcnlEb21haW4pLCBXVEZN
b3ZlKHRvcEZyYW1lUHJpbWFyeURvbWFpbiksIGZyYW1lSUQsIHBhZ2VJRCwgdXNlcldhc1Byb21w
dGVkRWFybGllciwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildIChib29sIHdhc0dyYW50ZWRBY2Nlc3MpIG11dGFibGUgeworICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcih3YXNHcmFudGVkQWNjZXNzID8gU3RvcmFnZUFjY2Vzc1N0YXR1czo6SGFzQWNjZXNz
IDogU3RvcmFnZUFjY2Vzc1N0YXR1czo6Q2Fubm90UmVxdWVzdEFjY2Vzcyk7CisgICAgfSk7Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZXF1ZXN0U3RvcmFn
ZUFjY2Vzc1VuZGVyT3BlbmVyKFN0cmluZyYmIHByaW1hcnlEb21haW5Jbk5lZWRPZlN0b3JhZ2VB
Y2Nlc3MsIHVpbnQ2NF90IG9wZW5lclBhZ2VJRCwgU3RyaW5nJiYgb3BlbmVyUHJpbWFyeURvbWFp
bikKK3sKKyAgICBBU1NFUlQocHJpbWFyeURvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyAhPSBv
cGVuZXJQcmltYXJ5RG9tYWluKTsKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIGlmIChwcmltYXJ5RG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzID09IG9wZW5lclByaW1h
cnlEb21haW4pCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIGRvbWFpbkluTmVlZE9mU3Rv
cmFnZUFjY2Vzc1N0YXRpc3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlE
b21haW4ocHJpbWFyeURvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcyk7CisgICAgYXV0byBjb29r
aWVzQmxvY2tlZEFuZFB1cmdlZCA9IHNob3VsZEJsb2NrQW5kUHVyZ2VDb29raWVzKGRvbWFpbklu
TmVlZE9mU3RvcmFnZUFjY2Vzc1N0YXRpc3RpYyk7CisKKyAgICAvLyBUaGUgZG9tYWluIGFscmVh
ZHkgaGFzIGFjY2VzcyBpZiBpdHMgY29va2llcyBhcmUgbm90IGJsb2NrZWQuCisgICAgaWYgKCFj
b29raWVzQmxvY2tlZEFuZFB1cmdlZCAmJiAhc2hvdWxkQmxvY2tBbmRLZWVwQ29va2llcyhkb21h
aW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3NTdGF0aXN0aWMpKQorICAgICAgICByZXR1cm47CisKKyNp
ZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBSRUxFQVNFX0xPR19JTkZPX0lGKG1fZGVidWdM
b2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiW1RlbXBvcmFyeSBj
b21iYXRpYmlsaXR5IGZpeF0gU3RvcmFnZSBhY2Nlc3Mgd2FzIGdyYW50ZWQgZm9yICV7cHVibGlj
fXMgdW5kZXIgb3BlbmVyIHBhZ2UgZnJvbSAle3B1YmxpY31zLCB3aXRoIHVzZXIgaW50ZXJhY3Rp
b24gaW4gdGhlIG9wZW5lZCB3aW5kb3cuIiwgcHJpbWFyeURvbWFpbkluTmVlZE9mU3RvcmFnZUFj
Y2Vzcy51dGY4KCkuZGF0YSgpLCBvcGVuZXJQcmltYXJ5RG9tYWluLnV0ZjgoKS5kYXRhKCkpOwor
I2VuZGlmCisgICAgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoV1RGTW92ZShwcmltYXJ5RG9t
YWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzKSwgV1RGTW92ZShvcGVuZXJQcmltYXJ5RG9tYWluKSwg
V1RGOjpudWxsb3B0LCBvcGVuZXJQYWdlSUQsIGZhbHNlLCBbXShib29sKSB7IH0pOworfQorCit2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNz
KFN0cmluZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJhbWVIb3N0LCB1aW50NjRfdCBm
cmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBzdWJGcmFtZVByaW1hcnlEb21haW4g
PSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpwcmltYXJ5RG9tYWluKHN1YkZyYW1lSG9zdCk7Cisg
ICAgYXV0byB0b3BGcmFtZVByaW1hcnlEb21haW4gPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpw
cmltYXJ5RG9tYWluKHRvcEZyYW1lSG9zdCk7CisgICAgaWYgKHVzZXJXYXNQcm9tcHRlZE5vdykg
eworICAgICAgICBhdXRvJiBzdWJGcmFtZVN0YXRpc3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclByaW1hcnlEb21haW4oc3ViRnJhbWVQcmltYXJ5RG9tYWluKTsKKyAgICAgICAgQVNT
RVJUKHN1YkZyYW1lU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbik7CisgICAgICAgIHN1YkZy
YW1lU3RhdGlzdGljLnN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lT3JpZ2lucy5hZGQodG9wRnJh
bWVQcmltYXJ5RG9tYWluKTsKKyAgICB9CisgICAgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwo
V1RGTW92ZShzdWJGcmFtZVByaW1hcnlEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1lUHJpbWFyeURv
bWFpbiksIGZyYW1lSUQsIHBhZ2VJRCwgdXNlcldhc1Byb21wdGVkTm93LCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdHJpbmcmJiBzdWJGcmFtZVByaW1hcnlE
b21haW4sIFN0cmluZyYmIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgT3B0aW9uYWw8dWludDY0X3Q+
IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3dPckVhcmxp
ZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spCit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoc3ViRnJhbWVQcmltYXJ5RG9tYWlu
ID09IHRvcEZyYW1lUHJpbWFyeURvbWFpbikgeworICAgICAgICBjYWxsYmFjayh0cnVlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBSZW1vdmUgbV9zdG9yYWdlQWNj
ZXNzUHJvbXB0c0VuYWJsZWQgY2hlY2sgaWYgcHJvbXB0aW5nIGlzIG5vIGxvbmdlciBleHBlcmlt
ZW50YWwuCisgICAgaWYgKHVzZXJXYXNQcm9tcHRlZE5vd09yRWFybGllciAmJiBtX3N0b3JhZ2VB
Y2Nlc3NQcm9tcHRzRW5hYmxlZCkgeworICAgICAgICBhdXRvJiBzdWJGcmFtZVN0YXRpc3RpYyA9
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oc3ViRnJhbWVQcmltYXJ5
RG9tYWluKTsKKyAgICAgICAgQVNTRVJUKHN1YkZyYW1lU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFj
dGlvbik7CisgICAgICAgIEFTU0VSVChzdWJGcmFtZVN0YXRpc3RpYy5zdG9yYWdlQWNjZXNzVW5k
ZXJUb3BGcmFtZU9yaWdpbnMuY29udGFpbnModG9wRnJhbWVQcmltYXJ5RG9tYWluKSk7CisgICAg
ICAgIHN1YkZyYW1lU3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gV2Fs
bFRpbWU6Om5vdygpOworICAgIH0KKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3Vi
RnJhbWVQcmltYXJ5RG9tYWluID0gc3ViRnJhbWVQcmltYXJ5RG9tYWluLmlzb2xhdGVkQ29weSgp
LCB0b3BGcmFtZVByaW1hcnlEb21haW4gPSB0b3BGcmFtZVByaW1hcnlEb21haW4uaXNvbGF0ZWRD
b3B5KCksIGZyYW1lSUQsIHBhZ2VJRCwgc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIG11dGFibGUgeworICAgICAgICBzdG9yZS0+Y2FsbEdy
YW50U3RvcmFnZUFjY2Vzc0hhbmRsZXIoc3ViRnJhbWVQcmltYXJ5RG9tYWluLCB0b3BGcmFtZVBy
aW1hcnlEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayksIHN0b3JlID0gc3RvcmUuY29weVJlZigpXShib29sIHZhbHVlKSBtdXRhYmxlIHsKKyAgICAg
ICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKSwgdmFsdWVdICgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNhbGxi
YWNrKHZhbHVlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwor
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW5kZmF0aGVyRXhpc3Rp
bmdXZWJzaXRlRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCit7Cisg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBSdW5Mb29wOjptYWluKCkuZGlz
cGF0Y2goW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spLCBzaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkID0g
bV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQs
IHdvcmtRdWV1ZSA9IG1fd29ya1F1ZXVlLmNvcHlSZWYoKV0gKCkgbXV0YWJsZSB7CisgICAgICAg
IC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBiZWluZyBhIHN0YXRpYyBjYWxsIG9uIFdlYlByb2Nlc3NQ
cm94eSBpcyB3cm9uZy4KKyAgICAgICAgLy8gSXQgc2hvdWxkIGJlIG9uIHRoZSBkYXRhIHN0b3Jl
IHRoYXQgdGhpcyBvYmplY3QgYmVsb25ncyB0by4KKyAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojp0
b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1dpdGhXZWJzaXRlRGF0YShXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6Om1vbml0b3JlZERhdGFUeXBlcygpLCBzaG91bGROb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLCBbd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlz
KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgd29ya1F1ZXVlID0gd29ya1F1ZXVlLmNv
cHlSZWYoKV0gKEhhc2hTZXQ8U3RyaW5nPiYmIHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5z
V2l0aFdlYnNpdGVEYXRhKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHdvcmtRdWV1ZS0+ZGlzcGF0
Y2goW3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIHRvcERvbWFpbnMgPSBjcm9zc1RocmVh
ZENvcHkodG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNXaXRoV2Vic2l0ZURhdGEpLCBjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIXdlYWtUaGlzKSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBmb3IgKGF1dG8mIHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4gOiB0b3BEb21haW5zKSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHN0YXRpc3RpYyA9IHdlYWtUaGlzLT5lbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRvcFByaXZhdGVseUNvbnRyb2xsZWRE
b21haW4pOworICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5tX2VuZE9m
R3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAgPSBXYWxsVGltZTo6bm93KCkgKyB3ZWFrVGhpcy0+bV9w
YXJhbWV0ZXJzLmdyYW5kZmF0aGVyaW5nVGltZTsKKyAgICAgICAgICAgICAgICBpZiAod2Vha1Ro
aXMtPm1fcGVyc2lzdGVudFN0b3JhZ2UpCisgICAgICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5t
X3BlcnNpc3RlbnRTdG9yYWdlLT5zY2hlZHVsZU9yV3JpdGVNZW1vcnlTdG9yZShSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OkZvcmNlSW1tZWRpYXRlV3JpdGU6Olllcyk7
CisgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+
bG9nVGVzdGluZ0V2ZW50KCJHcmFuZGZhdGhlcmVkIl9zKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9KTsKKyAgICB9KTsKK30KKworVmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjplbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKQor
eworICAgIGlmICghbV9kZWJ1Z01vZGVFbmFibGVkKQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgVmVjdG9yPFN0cmluZz4gcHJpbWFyeURvbWFpbnNUb0Jsb2NrOworICAgIHByaW1hcnlEb21h
aW5zVG9CbG9jay5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIpOworCisgICAgYXV0byYgc3RhdGlj
U2Vzb3VyY2VTdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9t
YWluKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UpOworICAgIHNldFByZXZhbGVudFJlc291
cmNlKHN0YXRpY1Nlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdo
KTsKKyAgICBwcmltYXJ5RG9tYWluc1RvQmxvY2sudW5jaGVja2VkQXBwZW5kKGRlYnVnU3RhdGlj
UHJldmFsZW50UmVzb3VyY2UpOworCisgICAgaWYgKCFtX2RlYnVnTWFudWFsUHJldmFsZW50UmVz
b3VyY2UuaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8mIG1hbnVhbFJlc291cmNlU3RhdGlzdGlj
ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihtX2RlYnVnTWFudWFs
UHJldmFsZW50UmVzb3VyY2UpOworICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShtYW51YWxS
ZXNvdXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CisgICAgICAg
IHByaW1hcnlEb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQobV9kZWJ1Z01hbnVhbFByZXZh
bGVudFJlc291cmNlKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHByaW1hcnlEb21haW5zVG9C
bG9jazsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBlbmFibGUpCit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX2RlYnVnTW9kZUVuYWJsZWQgPSBlbmFibGU7
CisgICAgbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkID0gZW5hYmxlOworCisgICAgZW5zdXJlUHJldmFs
ZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25zdCBT
dHJpbmcmIGRvbWFpbikKK3sKKyAgICBpZiAoIW1fZGVidWdNb2RlRW5hYmxlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlID0gZG9tYWluOwor
ICAgIGF1dG8mIHJlc291cmNlU3RhdGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UHJpbWFyeURvbWFpbihkb21haW4pOworICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNl
U3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKKworI2lmICFSRUxFQVNF
X0xPR19ESVNBQkxFRAorICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RlYnVnLCAiRGlkIHNldCAle3B1YmxpY31zIGFzIHByZXZhbGVudCByZXNvdXJjZSBmb3IgdGhl
IHB1cnBvc2VzIG9mIElUUCBEZWJ1ZyBNb2RlLiIsIGRvbWFpbi51dGY4KCkuZGF0YSgpKTsKKyNl
bmRpZgorfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2NoZWR1
bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgpCit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX3BlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2lu
Z1JlcXVlc3RJZGVudGlmaWVyID0gKyttX2xhc3RTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJ
ZGVudGlmaWVyOworICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaEFmdGVyKG1pbmltdW1TdGF0aXN0
aWNzUHJvY2Vzc2luZ0ludGVydmFsLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhp
cyksIHN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgPSAqbV9wZW5kaW5nU3Rh
dGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcl0geworICAgICAgICBpZiAoIXdlYWtU
aGlzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghbV9wZW5kaW5nU3RhdGlz
dGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciB8fCAqbV9wZW5kaW5nU3RhdGlzdGljc1By
b2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciAhPSBzdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJ
ZGVudGlmaWVyKSB7CisgICAgICAgICAgICAvLyBUaGlzIHJlcXVlc3QgaGFzIGJlZW4gY2FuY2Vs
ZWQuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB1cGRhdGVDb29r
aWVCbG9ja2luZyhbXSgpIHsgfSk7CisgICAgICAgIHByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJl
Y29yZHMoKTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OmNhbmNlbFBlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3QoKQoreworICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgbV9wZW5kaW5nU3RhdGlzdGljc1By
b2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciA9IFdURjo6bnVsbG9wdDsKK30KKwordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBT
dHJpbmcmIHRhcmdldFByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgbWFpbkZyYW1lUHJpbWFy
eURvbWFpbiwgY29uc3QgU3RyaW5nJiBzb3VyY2VQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcm
IHRhcmdldEhvc3QsIGNvbnN0IFN0cmluZyYgbWFpbkZyYW1lSG9zdCwgYm9vbCBpc1JlZGlyZWN0
LCBib29sIGlzTWFpbkZyYW1lKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgYm9vbCBhcmVUYXJnZXRBbmRNYWluRnJhbWVEb21haW5zQXNzb2NpYXRlZCA9IHRhcmdl
dFByaW1hcnlEb21haW4gPT0gbWFpbkZyYW1lUHJpbWFyeURvbWFpbjsKKyAgICBib29sIGFyZVRh
cmdldEFuZFNvdXJjZURvbWFpbnNBc3NvY2lhdGVkID0gdGFyZ2V0UHJpbWFyeURvbWFpbiA9PSBz
b3VyY2VQcmltYXJ5RG9tYWluOworCisgICAgYm9vbCBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSBm
YWxzZTsKKyAgICBpZiAoIWlzTWFpbkZyYW1lICYmIHRhcmdldEhvc3QgIT0gbWFpbkZyYW1lSG9z
dCAmJiAhKGFyZVRhcmdldEFuZE1haW5GcmFtZURvbWFpbnNBc3NvY2lhdGVkIHx8IGFyZVRhcmdl
dEFuZFNvdXJjZURvbWFpbnNBc3NvY2lhdGVkKSkgeworICAgICAgICBhdXRvJiB0YXJnZXRTdGF0
aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJnZXRQ
cmltYXJ5RG9tYWluKTsKKyAgICAgICAgdGFyZ2V0U3RhdGlzdGljcy5sYXN0U2VlbiA9IFJlc291
cmNlTG9hZFN0YXRpc3RpY3M6OnJlZHVjZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpub3coKSk7
CisgICAgICAgIGlmICh0YXJnZXRTdGF0aXN0aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdp
bnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21haW4pLmlzTmV3RW50cnkpCisgICAgICAgICAgICBz
dGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOworICAgIH0KKworICAgIGlmIChpc1JlZGlyZWN0
ICYmICFhcmVUYXJnZXRBbmRTb3VyY2VEb21haW5zQXNzb2NpYXRlZCkgeworICAgICAgICBpZiAo
aXNNYWluRnJhbWUpIHsKKyAgICAgICAgICAgIGF1dG8mIHJlZGlyZWN0aW5nT3JpZ2luU3RhdGlz
dGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oc291cmNlUHJp
bWFyeURvbWFpbik7CisgICAgICAgICAgICBpZiAocmVkaXJlY3RpbmdPcmlnaW5TdGF0aXN0aWNz
LnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uYWRkKHRhcmdldFByaW1hcnlEb21haW4pLmlzTmV3
RW50cnkpCisgICAgICAgICAgICAgICAgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGF1dG8mIHRhcmdldFN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4pOworICAgICAgICAgICAgaWYg
KHRhcmdldFN0YXRpc3RpY3MudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLmFkZChzb3VyY2VQ
cmltYXJ5RG9tYWluKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJl
VXBkYXRlZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvJiByZWRp
cmVjdGluZ09yaWdpblN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmlt
YXJ5RG9tYWluKHNvdXJjZVByaW1hcnlEb21haW4pOworICAgICAgICAgICAgaWYgKHJlZGlyZWN0
aW5nT3JpZ2luU3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmFkZCh0YXJn
ZXRQcmltYXJ5RG9tYWluKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgIHN0YXRpc3RpY3NX
ZXJlVXBkYXRlZCA9IHRydWU7CisgICAgICAgICAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJnZXRQcmltYXJ5RG9t
YWluKTsKKyAgICAgICAgICAgIGlmICh0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzRnJvbS5hZGQoc291cmNlUHJpbWFyeURvbWFpbikuaXNOZXdFbnRyeSkKKyAgICAg
ICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKHN0YXRpc3RpY3NXZXJlVXBkYXRlZCkKKyAgICAgICAgc2NoZWR1bGVTdGF0
aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgpOworfQorCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFN0cmlu
ZyYgcHJpbWFyeURvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5
RG9tYWluKHByaW1hcnlEb21haW4pOworICAgIHN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9u
ID0gdHJ1ZTsKKyAgICBzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0g
V2FsbFRpbWU6Om5vdygpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKQor
eworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byYgc3RhdGlzdGlj
cyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFp
bik7CisgICAgc3RhdGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTsKKyAgICBzdGF0
aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0geyB9OworfQorCitib29sIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNv
bnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIGF1dG8gbWFwRW50cnkgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5maW5k
KHByaW1hcnlEb21haW4pOworICAgIHJldHVybiBtYXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlz
dGljc01hcC5lbmQoKSA/IGZhbHNlOiBoYXNIYWRVbmV4cGlyZWRSZWNlbnRVc2VySW50ZXJhY3Rp
b24obWFwRW50cnktPnZhbHVlKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3MmIHJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIG5ld1ByZXZh
bGVuY2UpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICByZXNvdXJj
ZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlID0gdHJ1ZTsKKyAgICByZXNvdXJjZVN0YXRp
c3RpYy5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSA9IG5ld1ByZXZhbGVuY2UgPT0gUmVzb3VyY2VM
b2FkUHJldmFsZW5jZTo6VmVyeUhpZ2g7CisgICAgSGFzaFNldDxTdHJpbmc+IGRvbWFpbnNUaGF0
SGF2ZVJlZGlyZWN0ZWRUbzsKKyAgICByZWN1cnNpdmVseUdldEFsbERvbWFpbnNUaGF0SGF2ZVJl
ZGlyZWN0ZWRUb1RoaXNEb21haW4ocmVzb3VyY2VTdGF0aXN0aWMsIGRvbWFpbnNUaGF0SGF2ZVJl
ZGlyZWN0ZWRUbywgMCk7CisgICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zVGhhdEhhdmVS
ZWRpcmVjdGVkVG8pIHsKKyAgICAgICAgYXV0byBtYXBFbnRyeSA9IG1fcmVzb3VyY2VTdGF0aXN0
aWNzTWFwLmZpbmQoZG9tYWluKTsKKyAgICAgICAgaWYgKG1hcEVudHJ5ID09IG1fcmVzb3VyY2VT
dGF0aXN0aWNzTWFwLmVuZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEFTU0VS
VCghbWFwRW50cnktPnZhbHVlLmlzUHJldmFsZW50UmVzb3VyY2UpOworICAgICAgICBtYXBFbnRy
eS0+dmFsdWUuaXNQcmV2YWxlbnRSZXNvdXJjZSA9IHRydWU7CisgICAgfQorfQorICAgIAorU3Ry
aW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0
YXRpc3RpY3MoKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIlJlc291
cmNlIGxvYWQgc3RhdGlzdGljczpcblxuIik7CisgICAgZm9yIChhdXRvJiBtYXBFbnRyeSA6IG1f
cmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKQorICAgICAgICByZXN1bHQuYXBwZW5kKG1h
cEVudHJ5LnRvU3RyaW5nKCkpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30KKwor
Ym9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUHJldmFsZW50UmVzb3Vy
Y2UoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBtYXBFbnRyeSA9IG1fcmVzb3VyY2VTdGF0aXN0
aWNzTWFwLmZpbmQocHJpbWFyeURvbWFpbik7CisgICAgcmV0dXJuIG1hcEVudHJ5ID09IG1fcmVz
b3VyY2VTdGF0aXN0aWNzTWFwLmVuZCgpID8gZmFsc2UgOiBtYXBFbnRyeS0+dmFsdWUuaXNQcmV2
YWxlbnRSZXNvdXJjZTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikg
Y29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gbWFw
RW50cnkgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5maW5kKHByaW1hcnlEb21haW4pOworICAg
IHJldHVybiBtYXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSA/IGZhbHNl
IDogbWFwRW50cnktPnZhbHVlLmlzUHJldmFsZW50UmVzb3VyY2UgJiYgbWFwRW50cnktPnZhbHVl
LmlzVmVyeVByZXZhbGVudFJlc291cmNlOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN0cmlu
ZyYgc3VicmVzb3VyY2VQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHRvcEZyYW1lUHJpbWFy
eURvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IGF1dG8gbWFwRW50cnkgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5maW5kKHN1YnJlc291cmNl
UHJpbWFyeURvbWFpbik7CisgICAgcmV0dXJuIG1hcEVudHJ5ID09IG1fcmVzb3VyY2VTdGF0aXN0
aWNzTWFwLmVuZCgpID8gZmFsc2UgOiBtYXBFbnRyeS0+dmFsdWUuc3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lT3JpZ2lucy5jb250YWlucyh0b3BGcmFtZVByaW1hcnlEb21haW4pOworfQorCitib29s
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFt
ZVVuZGVyKGNvbnN0IFN0cmluZyYgc3ViRnJhbWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcm
IHRvcEZyYW1lUHJpbWFyeURvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIGF1dG8gbWFwRW50cnkgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5m
aW5kKHN1YkZyYW1lUHJpbWFyeURvbWFpbik7CisgICAgcmV0dXJuIG1hcEVudHJ5ID09IG1fcmVz
b3VyY2VTdGF0aXN0aWNzTWFwLmVuZCgpID8gZmFsc2UgOiBtYXBFbnRyeS0+dmFsdWUuc3ViZnJh
bWVVbmRlclRvcEZyYW1lT3JpZ2lucy5jb250YWlucyh0b3BGcmFtZVByaW1hcnlEb21haW4pOwor
fQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNSZWdpc3RlcmVk
QXNSZWRpcmVjdGluZ1RvKGNvbnN0IFN0cmluZyYgaG9zdFJlZGlyZWN0ZWRGcm9tUHJpbWFyeURv
bWFpbiwgY29uc3QgU3RyaW5nJiBob3N0UmVkaXJlY3RlZFRvUHJpbWFyeURvbWFpbikgY29uc3QK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gbWFwRW50cnkg
PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5maW5kKGhvc3RSZWRpcmVjdGVkRnJvbVByaW1hcnlE
b21haW4pOworICAgIHJldHVybiBtYXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5l
bmQoKSA/IGZhbHNlIDogbWFwRW50cnktPnZhbHVlLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG8uY29udGFpbnMoaG9zdFJlZGlyZWN0ZWRUb1ByaW1hcnlEb21haW4pOworfQorCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShj
b25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluKTsKKyAgICBzdGF0aXN0aWNzLmlzUHJldmFs
ZW50UmVzb3VyY2UgPSBmYWxzZTsKKyAgICBzdGF0aXN0aWNzLmlzVmVyeVByZXZhbGVudFJlc291
cmNlID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbiwgYm9vbCB2YWx1
ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8mIHN0YXRp
c3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlE
b21haW4pOworICAgIHN0YXRpc3RpY3MuZ3JhbmRmYXRoZXJlZCA9IHZhbHVlOworfQorCitib29s
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKGNvbnN0
IFN0cmluZyYgcHJpbWFyeURvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIGF1dG8gbWFwRW50cnkgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5m
aW5kKHByaW1hcnlEb21haW4pOworICAgIHJldHVybiBtYXBFbnRyeSA9PSBtX3Jlc291cmNlU3Rh
dGlzdGljc01hcC5lbmQoKSA/IGZhbHNlIDogbWFwRW50cnktPnZhbHVlLmdyYW5kZmF0aGVyZWQ7
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgU3RyaW5nJiBwcmltYXJ5U3ViRnJhbWVEb21haW4s
IGNvbnN0IFN0cmluZyYgcHJpbWFyeVRvcEZyYW1lRG9tYWluKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeVN1YkZyYW1lRG9tYWluKTsKKyAgICBz
dGF0aXN0aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKHByaW1hcnlUb3BGcmFt
ZURvbWFpbik7CisgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZl
IGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHRvcCBmcmFtZSBkb21haW4uCisgICAgZW5zdXJl
UmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5VG9wRnJhbWVEb21haW4p
OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0IFN0cmluZyYgcHJpbWFyeVN1YnJlc291cmNl
RG9tYWluLCBjb25zdCBTdHJpbmcmIHByaW1hcnlUb3BGcmFtZURvbWFpbikKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlTdWJyZXNvdXJjZURvbWFp
bik7CisgICAgc3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChw
cmltYXJ5VG9wRnJhbWVEb21haW4pOworICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJl
IHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSB0b3AgZnJhbWUgZG9tYWlu
LgorICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeVRv
cEZyYW1lRG9tYWluKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdHJpbmcmIHByaW1hcnlT
dWJyZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pCit7
CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvJiBzdGF0aXN0aWNz
ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5U3VicmVz
b3VyY2VEb21haW4pOworICAgIHN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNU
by5hZGQocHJpbWFyeVJlZGlyZWN0RG9tYWluKTsKKyAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1h
a2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgcmVkaXJlY3Qg
ZG9tYWluLgorICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJp
bWFyeVJlZGlyZWN0RG9tYWluKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFN0cmluZyYg
cHJpbWFyeVN1YnJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIHByaW1hcnlSZWRpcmVjdERv
bWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8mIHN0
YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1h
cnlTdWJyZXNvdXJjZURvbWFpbik7CisgICAgc3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c0Zyb20uYWRkKHByaW1hcnlSZWRpcmVjdERvbWFpbik7CisgICAgLy8gRm9yIGNvbnNp
c3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhl
IHJlZGlyZWN0IGRvbWFpbi4KKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5
RG9tYWluKHByaW1hcnlSZWRpcmVjdERvbWFpbik7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgU3Ry
aW5nJiB0b3BGcmFtZVByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgcHJpbWFyeVJlZGlyZWN0
RG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byYg
c3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odG9w
RnJhbWVQcmltYXJ5RG9tYWluKTsKKyAgICBzdGF0aXN0aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG8uYWRkKHByaW1hcnlSZWRpcmVjdERvbWFpbik7CisgICAgLy8gRm9yIGNvbnNpc3RlbmN5
LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHJlZGly
ZWN0IGRvbWFpbi4KKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWlu
KHByaW1hcnlSZWRpcmVjdERvbWFpbik7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdHJpbmcm
IHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiBwcmltYXJ5UmVkaXJlY3REb21h
aW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvJiBzdGF0
aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0b3BGcmFt
ZVByaW1hcnlEb21haW4pOworICAgIHN0YXRpc3RpY3MudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNG
cm9tLmFkZChwcmltYXJ5UmVkaXJlY3REb21haW4pOworICAgIC8vIEZvciBjb25zaXN0ZW5jeSwg
bWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVj
dCBkb21haW4uCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihw
cmltYXJ5UmVkaXJlY3REb21haW4pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihTZWNvbmRzIHNlY29uZHMp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKHNlY29uZHMg
Pj0gMF9zKTsKKworICAgIG1fcGFyYW1ldGVycy50aW1lVG9MaXZlVXNlckludGVyYWN0aW9uID0g
c2Vjb25kczsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNl
dE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMpCit7
CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKHNlY29uZHMgPj0g
MF9zKTsKKworICAgIG1fcGFyYW1ldGVycy5taW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1Jl
bW92YWwgPSBzZWNvbmRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3MpOworCisg
ICAgbV9wYXJhbWV0ZXJzLmdyYW5kZmF0aGVyaW5nVGltZSA9IHNlY29uZHM7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcChTZWNv
bmRzIHNlY29uZHMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNT
RVJUKHNlY29uZHMgPj0gMF9zKTsKKworICAgIG1fcGFyYW1ldGVycy5jYWNoZU1heEFnZUNhcFRp
bWUgPSBzZWNvbmRzOworICAgIHVwZGF0ZUNhY2hlTWF4QWdlQ2FwKCk7Cit9CisKK3ZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjp1cGRhdGVDYWNoZU1heEFnZUNhcCgpCit7
CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgCisgICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIHNlY29uZHMgPSBtX3BhcmFt
ZXRlcnMuY2FjaGVNYXhBZ2VDYXBUaW1lXSAoKSB7CisgICAgICAgIHN0b3JlLT5zZXRDYWNoZU1h
eEFnZUNhcChzZWNvbmRzLCBbXSB7IH0pOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoU2Vj
b25kcyBzZWNvbmRzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFT
U0VSVChzZWNvbmRzID49IDBfcyk7CisgICAgCisgICAgbV9wYXJhbWV0ZXJzLmNsaWVudFNpZGVD
b29raWVzQWdlQ2FwVGltZSA9IHNlY29uZHM7CisgICAgdXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNB
Z2VDYXAoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVw
ZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCisgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIHNlY29uZHMg
PSBtX3BhcmFtZXRlcnMuY2xpZW50U2lkZUNvb2tpZXNBZ2VDYXBUaW1lXSAoKSB7CisgICAgICAg
IGlmIChhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gc3RvcmUtPndlYnNpdGVEYXRhU3RvcmUoKSkK
KyAgICAgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUtPnNldEFnZUNhcEZvckNsaWVudFNpZGVDb29r
aWVzKHNlY29uZHMsIFtdIHsgfSk7CisgICAgfSk7CisjZW5kaWYKK30KKworYm9vbCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNob3VsZFJlbW92ZURhdGFSZWNvcmRzKCkgY29u
c3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChtX2RhdGFS
ZWNvcmRzQmVpbmdSZW1vdmVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHBsdWdpbiA6IFBsdWdp
blByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5wbHVnaW5Qcm9jZXNzZXMoKSkgeworICAgICAg
ICBpZiAoIW1fYWN0aXZlUGx1Z2luVG9rZW5zLmNvbnRhaW5zKHBsdWdpbi0+cGx1Z2luUHJvY2Vz
c1Rva2VuKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmCisKKyAg
ICByZXR1cm4gIW1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkIHx8IE1vbm90b25pY1Rp
bWU6Om5vdygpID49IChtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCArIG1fcGFyYW1l
dGVycy5taW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwpOworfQorCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0RGF0YVJlY29yZHNCZWluZ1JlbW92
ZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQgPSB2YWx1ZTsKKyAgICBpZiAobV9kYXRhUmVjb3Jk
c0JlaW5nUmVtb3ZlZCkKKyAgICAgICAgbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQg
PSBNb25vdG9uaWNUaW1lOjpub3coKTsKK30KKworUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjplbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JQcmltYXJ5RG9tYWluKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHJldHVybiBtX3Jlc291cmNlU3RhdGlzdGlj
c01hcC5lbnN1cmUocHJpbWFyeURvbWFpbiwgWyZwcmltYXJ5RG9tYWluXSB7CisgICAgICAgIHJl
dHVybiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKHByaW1hcnlEb21haW4pOworICAgIH0pLml0ZXJh
dG9yLT52YWx1ZTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEtleWVkRW5jb2Rlcj4gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpjcmVhdGVFbmNvZGVyRnJvbURhdGEoKSBjb25zdAor
eworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBlbmNvZGVyID0g
S2V5ZWRFbmNvZGVyOjplbmNvZGVyKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlVUludDMyKCJ2ZXJz
aW9uIiwgc3RhdGlzdGljc01vZGVsVmVyc2lvbik7CisgICAgZW5jb2Rlci0+ZW5jb2RlRG91Ymxl
KCJlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wIiwgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGlt
ZXN0YW1wLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7CisKKyAgICBlbmNvZGVyLT5lbmNv
ZGVPYmplY3RzKCJicm93c2luZ1N0YXRpc3RpY3MiLCBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5i
ZWdpbigpLCBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSwgW10oS2V5ZWRFbmNvZGVyJiBl
bmNvZGVySW5uZXIsIGNvbnN0IGF1dG8mIG9yaWdpbikgeworICAgICAgICBvcmlnaW4udmFsdWUu
ZW5jb2RlKGVuY29kZXJJbm5lcik7CisgICAgfSk7CisKKyAgICBlbmNvZGVyLT5lbmNvZGVPYmpl
Y3RzKCJvcGVyYXRpbmdEYXRlcyIsIG1fb3BlcmF0aW5nRGF0ZXMuYmVnaW4oKSwgbV9vcGVyYXRp
bmdEYXRlcy5lbmQoKSwgW10oS2V5ZWRFbmNvZGVyJiBlbmNvZGVySW5uZXIsIE9wZXJhdGluZ0Rh
dGUgZGF0ZSkgeworICAgICAgICBlbmNvZGVySW5uZXIuZW5jb2RlRG91YmxlKCJkYXRlIiwgZGF0
ZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpOworICAgIH0pOworCisgICAgcmV0dXJuIGVu
Y29kZXI7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjptZXJn
ZVdpdGhEYXRhRnJvbURlY29kZXIoS2V5ZWREZWNvZGVyJiBkZWNvZGVyKQoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgdW5zaWduZWQgdmVyc2lvbk9uRGlzazsKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlVUludDMyKCJ2ZXJzaW9uIiwgdmVyc2lvbk9uRGlzaykpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICh2ZXJzaW9uT25EaXNrID4gc3RhdGlzdGljc01vZGVs
VmVyc2lvbikgeworICAgICAgICBXVEZMb2dBbHdheXMoIkZvdW5kIHJlc291cmNlIGxvYWQgc3Rh
dGlzdGljcyBvbiBkaXNrIHdpdGggbW9kZWwgdmVyc2lvbiAldSB3aGVyZWFzIHRoZSBoaWdoZXN0
IHN1cHBvcnRlZCB2ZXJzaW9uIGlzICV1LiBSZXNldHRpbmcuIiwgdmVyc2lvbk9uRGlzaywgc3Rh
dGlzdGljc01vZGVsVmVyc2lvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkb3Vi
bGUgZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsKKyAgICBpZiAoZGVjb2Rlci5kZWNvZGVE
b3VibGUoImVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAiLCBlbmRPZkdyYW5kZmF0aGVyaW5n
VGltZXN0YW1wKSkKKyAgICAgICAgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wID0gV2Fs
bFRpbWU6OmZyb21SYXdTZWNvbmRzKGVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXApOworICAg
IGVsc2UKKyAgICAgICAgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wID0geyB9OworCisg
ICAgVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+IGxvYWRlZFN0YXRpc3RpY3M7CisgICAg
Ym9vbCBzdWNjZWVkZWQgPSBkZWNvZGVyLmRlY29kZU9iamVjdHMoImJyb3dzaW5nU3RhdGlzdGlj
cyIsIGxvYWRlZFN0YXRpc3RpY3MsIFt2ZXJzaW9uT25EaXNrXShLZXllZERlY29kZXImIGRlY29k
ZXJJbm5lciwgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgc3RhdGlzdGljcykgeworICAgICAgICBy
ZXR1cm4gc3RhdGlzdGljcy5kZWNvZGUoZGVjb2RlcklubmVyLCB2ZXJzaW9uT25EaXNrKTsKKyAg
ICB9KTsKKworICAgIGlmICghc3VjY2VlZGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtZXJn
ZVN0YXRpc3RpY3MoV1RGTW92ZShsb2FkZWRTdGF0aXN0aWNzKSk7CisgICAgdXBkYXRlQ29va2ll
QmxvY2tpbmcoW10oKSB7IH0pOworCisgICAgVmVjdG9yPE9wZXJhdGluZ0RhdGU+IG9wZXJhdGlu
Z0RhdGVzOworICAgIHN1Y2NlZWRlZCA9IGRlY29kZXIuZGVjb2RlT2JqZWN0cygib3BlcmF0aW5n
RGF0ZXMiLCBvcGVyYXRpbmdEYXRlcywgW10oS2V5ZWREZWNvZGVyJiBkZWNvZGVyLCBPcGVyYXRp
bmdEYXRlJiBkYXRlKSB7CisgICAgICAgIGRvdWJsZSB2YWx1ZTsKKyAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZURvdWJsZSgiZGF0ZSIsIHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICBkYXRlID0gT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKFdhbGxUaW1l
Ojpmcm9tUmF3U2Vjb25kcyh2YWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9KTsK
KworICAgIGlmICghc3VjY2VlZGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX29wZXJhdGlu
Z0RhdGVzID0gbWVyZ2VPcGVyYXRpbmdEYXRlcyhtX29wZXJhdGluZ0RhdGVzLCBXVEZNb3ZlKG9w
ZXJhdGluZ0RhdGVzKSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX3Jlc291cmNlU3Rh
dGlzdGljc01hcC5jbGVhcigpOworICAgIG1fb3BlcmF0aW5nRGF0ZXMuY2xlYXIoKTsKKworICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworCisgICAgcmVtb3ZlQWxsU3RvcmFnZUFjY2Vzcyhb
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsK
KworICAgIGF1dG8gcHJpbWFyeURvbWFpbnNUb0Jsb2NrID0gZW5zdXJlUHJldmFsZW50UmVzb3Vy
Y2VzRm9yRGVidWdNb2RlKCk7CisgICAgdXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKHBy
aW1hcnlEb21haW5zVG9CbG9jaywgW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVn
YXRvci5jb3B5UmVmKCldIHsgfSk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjp3YXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uKGNv
bnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGN1cnJlbnQsIGNvbnN0IFJlc291cmNlTG9hZFN0
YXRpc3RpY3MmIHVwZGF0ZWQpIGNvbnN0Cit7CisgICAgaWYgKCFjdXJyZW50LmhhZFVzZXJJbnRl
cmFjdGlvbiAmJiAhdXBkYXRlZC5oYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGF1dG8gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPSBzdGQ6Om1h
eChjdXJyZW50Lm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lLCB1cGRhdGVkLm1vc3RSZWNl
bnRVc2VySW50ZXJhY3Rpb25UaW1lKTsKKworICAgIHJldHVybiB1cGRhdGVkLmxhc3RTZWVuIDw9
IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lICsgMjRfaDsKK30KKwordm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Om1lcmdlU3RhdGlzdGljcyhWZWN0b3I8UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcz4mJiBzdGF0aXN0aWNzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBzdGF0aXN0aWNzKSB7Cisg
ICAgICAgIGF1dG8gcmVzdWx0ID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5zdXJlKHN0YXRp
c3RpYy5oaWdoTGV2ZWxEb21haW4sIFsmc3RhdGlzdGljXSB7CisgICAgICAgICAgICByZXR1cm4g
V1RGTW92ZShzdGF0aXN0aWMpOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKCFyZXN1bHQuaXNO
ZXdFbnRyeSkgeworICAgICAgICAgICAgaWYgKHdhc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9V
c2VySW50ZXJhY3Rpb24ocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSwgc3RhdGlzdGljKSkKKyAgICAg
ICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFy
dHlEdWVUb1VzZXJJbnRlcmFjdGlvbisrOworICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS5tZXJnZShzdGF0aXN0aWMpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2hvdWxkQmxvY2tBbmRLZWVwQ29va2llcyhj
b25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXN0aWMpCit7CisgICAgcmV0dXJuIHN0
YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlICYmIHN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rp
b247Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzaG91bGRC
bG9ja0FuZFB1cmdlQ29va2llcyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXN0
aWMpCit7CisgICAgcmV0dXJuIHN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlICYmICFzdGF0
aXN0aWMuaGFkVXNlckludGVyYWN0aW9uOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6aGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdChj
b25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXN0aWMsIGNvbnN0IFN0cmluZyYgZmly
c3RQYXJ0eVByaW1hcnlEb21haW4pCit7CisgICAgcmV0dXJuIHN0YXRpc3RpYy5zdG9yYWdlQWNj
ZXNzVW5kZXJUb3BGcmFtZU9yaWdpbnMuY29udGFpbnMoZmlyc3RQYXJ0eVByaW1hcnlEb21haW4p
OworfQorCitzdGF0aWMgdm9pZCBkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMoY29uc3QgY2hhciog
YWN0aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlucykKK3sKKyNpZiAhUkVMRUFTRV9M
T0dfRElTQUJMRUQKKyAgICBzdGF0aWMgY29uc3QgYXV0byBtYXhOdW1iZXJPZkRvbWFpbnNJbk9u
ZUxvZ1N0YXRlbWVudCA9IDUwOworICAgIGlmIChkb21haW5zLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKGRvbWFpbnMuc2l6ZSgpIDw9IG1heE51bWJlck9mRG9tYWluc0lu
T25lTG9nU3RhdGVtZW50KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gJXtwdWJsaWN9cyBjb29raWVzIGluIHRoaXJkLXBh
cnR5IGNvbnRleHRzIGZvcjogJXtwdWJsaWN9cy4iLCBhY3Rpb24sIGRvbWFpbnNUb1N0cmluZyhk
b21haW5zKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBWZWN0b3I8U3RyaW5nPiBiYXRjaDsKKyAgICBiYXRjaC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KTsKKyAgICBhdXRvIGJhdGNoTnVt
YmVyID0gMTsKKyAgICB1bnNpZ25lZCBudW1iZXJPZkJhdGNoZXMgPSBzdGQ6OmNlaWwoZG9tYWlu
cy5zaXplKCkgLyBzdGF0aWNfY2FzdDxmbG9hdD4obWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dT
dGF0ZW1lbnQpKTsKKworICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykgeworICAgICAg
ICBpZiAoYmF0Y2guc2l6ZSgpID09IG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50
KSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1ZywgIkFib3V0IHRvICV7cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0
cyBmb3IgKCV7cHVibGljfWQgb2YgJXUpOiAle3B1YmxpY31zLiIsIGFjdGlvbiwgYmF0Y2hOdW1i
ZXIsIG51bWJlck9mQmF0Y2hlcywgZG9tYWluc1RvU3RyaW5nKGJhdGNoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgICAgIGJhdGNoLnNocmluaygwKTsKKyAgICAgICAgICAgICsrYmF0Y2hOdW1i
ZXI7CisgICAgICAgIH0KKyAgICAgICAgYmF0Y2guYXBwZW5kKGRvbWFpbik7CisgICAgfQorICAg
IGlmICghYmF0Y2guaXNFbXB0eSgpKQorICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvICV7cHVibGljfXMgY29va2llcyBpbiB0aGly
ZC1wYXJ0eSBjb250ZXh0cyBmb3IgKCV7cHVibGljfWQgb2YgJXUpOiAle3B1YmxpY31zLiIsIGFj
dGlvbiwgYmF0Y2hOdW1iZXIsIG51bWJlck9mQmF0Y2hlcywgZG9tYWluc1RvU3RyaW5nKGJhdGNo
KS51dGY4KCkuZGF0YSgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGFjdGlvbik7CisgICAg
VU5VU0VEX1BBUkFNKGRvbWFpbnMpOworI2VuZGlmCit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjp1cGRhdGVDb29raWVCbG9ja2luZyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CisKKyAgICBWZWN0b3I8U3RyaW5nPiBkb21haW5zVG9CbG9jazsKKyAgICBmb3Ig
KGF1dG8mIHJlc291cmNlU3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVz
KCkpIHsKKyAgICAgICAgaWYgKHJlc291cmNlU3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2Up
CisgICAgICAgICAgICBkb21haW5zVG9CbG9jay5hcHBlbmQocmVzb3VyY2VTdGF0aXN0aWMuaGln
aExldmVsRG9tYWluKTsKKyAgICB9CisKKyAgICBpZiAoZG9tYWluc1RvQmxvY2suaXNFbXB0eSgp
KSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAobV9kZWJ1Z0xvZ2dpbmdFbmFibGVkICYmICFkb21haW5zVG9CbG9jay5pc0Vt
cHR5KCkpCisgICAgICAgIGRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcygiYmxvY2siLCBkb21haW5z
VG9CbG9jayk7CisKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3dlYWtUaGlzID0gbWFr
ZVdlYWtQdHIoKnRoaXMpLCBzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGRvbWFpbnNUb0Jsb2Nr
ID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Jsb2NrKSwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIHN0b3JlLT5j
YWxsVXBkYXRlUHJldmFsZW50RG9tYWluc1RvQmxvY2tDb29raWVzRm9ySGFuZGxlcihkb21haW5z
VG9CbG9jaywgW3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIHN0b3JlID0gc3RvcmUuY29w
eVJlZigpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgeworICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNo
KFt3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICAgICAg
ICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYod2Vha1RoaXMtPm1fZGVidWdMb2dnaW5nRW5hYmxl
ZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiRG9uZSB1cGRhdGluZyBjb29raWUgYmxv
Y2tpbmcuIik7CisjZW5kaWYKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNvb2tp
ZUJsb2NraW5nRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvQmxvY2ss
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBkb21haW5zVG9CbG9jayA9IGNyb3NzVGhyZWFk
Q29weShkb21haW5zVG9CbG9jayksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICBzdG9yZS0+Y2FsbFVwZGF0ZVByZXZh
bGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0ZvckhhbmRsZXIoZG9tYWluc1RvQmxvY2ssIFtzdG9y
ZSA9IHN0b3JlLmNvcHlSZWYoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVl
dWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgaWYgKGRvbWFpbnMuaXNFbXB0eSgpKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0
Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgZG9tYWlucyA9IGNyb3NzVGhyZWFkQ29weShk
b21haW5zKV0geworICAgICAgICBzdG9yZS0+Y2FsbFJlbW92ZURvbWFpbnNIYW5kbGVyKGRvbWFp
bnMpOworICAgIH0pOworCisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKK30KKwordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzKGNvbnN0IEZ1
bmN0aW9uPHZvaWQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpPiYgcHJvY2Vzc0Z1bmN0
aW9uKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgZm9y
IChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVl
cygpKQorICAgICAgICBwcm9jZXNzRnVuY3Rpb24ocmVzb3VyY2VTdGF0aXN0aWMpOworfQorCiti
b29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aGFzSGFkVW5leHBpcmVkUmVj
ZW50VXNlckludGVyYWN0aW9uKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlz
dGljKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYg
KHJlc291cmNlU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbiAmJiBoYXNTdGF0aXN0aWNzRXhw
aXJlZChyZXNvdXJjZVN0YXRpc3RpYykpIHsKKyAgICAgICAgLy8gRHJvcCBwcml2YWN5IHNlbnNp
dGl2ZSBkYXRhIGJlY2F1c2Ugd2Ugbm8gbG9uZ2VyIG5lZWQgaXQuCisgICAgICAgIC8vIFNldCB0
aW1lc3RhbXAgdG8gMCBzbyB0aGF0IHN0YXRpc3RpY3MgbWVyZ2Ugd2lsbCBrbm93CisgICAgICAg
IC8vIGl0IGhhcyBiZWVuIHJlc2V0IGFzIG9wcG9zZWQgdG8gaXRzIGRlZmF1bHQgLTEuCisgICAg
ICAgIHJlc291cmNlU3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0geyB9
OworICAgICAgICByZXNvdXJjZVN0YXRpc3RpYy5zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZU9y
aWdpbnMuY2xlYXIoKTsKKyAgICAgICAgcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0
aW9uID0gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHJlc291cmNlU3RhdGlzdGljLmhhZFVz
ZXJJbnRlcmFjdGlvbjsKK30KKworVmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjp0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1RvUmVtb3ZlV2Vic2l0
ZURhdGFGb3IoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYm9v
bCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nID0gbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGlt
ZXN0YW1wID4gV2FsbFRpbWU6Om5vdygpOworICAgIGJvb2wgc2hvdWxkQ2xlYXJHcmFuZGZhdGhl
cmluZyA9ICFzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nICYmIG1fZW5kT2ZHcmFuZGZhdGhl
cmluZ1RpbWVzdGFtcDsKKworICAgIGlmIChzaG91bGRDbGVhckdyYW5kZmF0aGVyaW5nKQorICAg
ICAgICBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAgPSB7IH07CisKKyAgICBWZWN0b3I8
U3RyaW5nPiBwcmV2YWxlbnRSZXNvdXJjZXM7CisgICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBt
X3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkgeworICAgICAgICBpZiAoc3RhdGlzdGlj
LmlzUHJldmFsZW50UmVzb3VyY2UgJiYgIWhhc0hhZFVuZXhwaXJlZFJlY2VudFVzZXJJbnRlcmFj
dGlvbihzdGF0aXN0aWMpICYmICghc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyB8fCAhc3Rh
dGlzdGljLmdyYW5kZmF0aGVyZWQpKQorICAgICAgICAgICAgcHJldmFsZW50UmVzb3VyY2VzLmFw
cGVuZChzdGF0aXN0aWMuaGlnaExldmVsRG9tYWluKTsKKworICAgICAgICBpZiAoc2hvdWxkQ2xl
YXJHcmFuZGZhdGhlcmluZyAmJiBzdGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCkKKyAgICAgICAgICAg
IHN0YXRpc3RpYy5ncmFuZGZhdGhlcmVkID0gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHBy
ZXZhbGVudFJlc291cmNlczsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gdG9kYXkgPSBPcGVyYXRpbmdE
YXRlOjp0b2RheSgpOworICAgIGlmICghbV9vcGVyYXRpbmdEYXRlcy5pc0VtcHR5KCkgJiYgdG9k
YXkgPD0gbV9vcGVyYXRpbmdEYXRlcy5sYXN0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHdo
aWxlIChtX29wZXJhdGluZ0RhdGVzLnNpemUoKSA+PSBvcGVyYXRpbmdEYXRlc1dpbmRvdykKKyAg
ICAgICAgbV9vcGVyYXRpbmdEYXRlcy5yZW1vdmUoMCk7CisKKyAgICBtX29wZXJhdGluZ0RhdGVz
LmFwcGVuZCh0b2RheSk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpoYXNTdGF0aXN0aWNzRXhwaXJlZChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBy
ZXNvdXJjZVN0YXRpc3RpYykgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIGlmIChtX29wZXJhdGluZ0RhdGVzLnNpemUoKSA+PSBvcGVyYXRpbmdEYXRlc1dp
bmRvdykgeworICAgICAgICBpZiAoT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKHJlc291cmNl
U3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSA8IG1fb3BlcmF0aW5nRGF0
ZXMuZmlyc3QoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIElm
IHdlIGRvbid0IG1lZXQgdGhlIHJlYWwgY3JpdGVyaWEgZm9yIGFuIGV4cGlyZWQgc3RhdGlzdGlj
LCBjaGVjayB0aGUgdXNlciBzZXR0aW5nIGZvciBhIHRpZ2h0ZXIgcmVzdHJpY3Rpb24gKG1haW5s
eSBmb3IgdGVzdGluZykuCisgICAgaWYgKG1fcGFyYW1ldGVycy50aW1lVG9MaXZlVXNlckludGVy
YWN0aW9uKSB7CisgICAgICAgIGlmIChXYWxsVGltZTo6bm93KCkgPiByZXNvdXJjZVN0YXRpc3Rp
Yy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSArIG1fcGFyYW1ldGVycy50aW1lVG9MaXZl
VXNlckludGVyYWN0aW9uLnZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291
bnQpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX3BhcmFtZXRl
cnMubWF4U3RhdGlzdGljc0VudHJpZXMgPSBtYXhpbXVtRW50cnlDb3VudDsKK30KKwordm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25Ubyhz
aXplX3QgcHJ1bmVUYXJnZXRDb3VudCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIG1fcGFyYW1ldGVycy5wcnVuZUVudHJpZXNEb3duVG8gPSBwcnVuZVRhcmdldENv
dW50OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cHJ1bmVT
dGF0aXN0aWNzSWZOZWVkZWQoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgaWYgKG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnNpemUoKSA8PSBtX3BhcmFtZXRlcnMu
bWF4U3RhdGlzdGljc0VudHJpZXMpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX3Bh
cmFtZXRlcnMucHJ1bmVFbnRyaWVzRG93blRvIDw9IG1fcGFyYW1ldGVycy5tYXhTdGF0aXN0aWNz
RW50cmllcyk7CisKKyAgICBzaXplX3QgbnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1bmUgPSBtX3Jl
c291cmNlU3RhdGlzdGljc01hcC5zaXplKCkgLSBtX3BhcmFtZXRlcnMucHJ1bmVFbnRyaWVzRG93
blRvOworICAgIEFTU0VSVChudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSk7CisKKyAgICBWZWN0
b3I8U3RhdGlzdGljc0xhc3RTZWVuPiByZXNvdXJjZXNUb1BydW5lUGVySW1wb3J0YW5jZVttYXhJ
bXBvcnRhbmNlICsgMV07CisgICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVz
b3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKQorICAgICAgICByZXNvdXJjZXNUb1BydW5lUGVy
SW1wb3J0YW5jZVtjb21wdXRlSW1wb3J0YW5jZShyZXNvdXJjZVN0YXRpc3RpYyldLmFwcGVuZCh7
IHJlc291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFpbiwgcmVzb3VyY2VTdGF0aXN0aWMubGFz
dFNlZW4gfSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGltcG9ydGFuY2UgPSAwOyBudW1iZXJPZkVu
dHJpZXNMZWZ0VG9QcnVuZSAmJiBpbXBvcnRhbmNlIDw9IG1heEltcG9ydGFuY2U7ICsraW1wb3J0
YW5jZSkKKyAgICAgICAgcHJ1bmVSZXNvdXJjZXMobV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAsIHJl
c291cmNlc1RvUHJ1bmVQZXJJbXBvcnRhbmNlW2ltcG9ydGFuY2VdLCBudW1iZXJPZkVudHJpZXNM
ZWZ0VG9QcnVuZSk7CisKKyAgICBBU1NFUlQoIW51bWJlck9mRW50cmllc0xlZnRUb1BydW5lKTsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlc2V0UGFyYW1l
dGVyc1RvRGVmYXVsdFZhbHVlcygpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBtX3BhcmFtZXRlcnMgPSB7IH07Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpsb2dUZXN0aW5nRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudCkKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5k
aXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBldmVudCA9IGV2ZW50Lmlzb2xhdGVk
Q29weSgpXSB7CisgICAgICAgIHN0b3JlLT5sb2dUZXN0aW5nRXZlbnQoZXZlbnQpOworICAgIH0p
OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0TGFzdFNl
ZW4oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBTZWNvbmRzIHNlY29uZHMpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluKTsKKyAg
ICBzdGF0aXN0aWNzLmxhc3RTZWVuID0gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHNlY29uZHMu
c2Vjb25kcygpKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8mIHJlc291cmNlU3RhdGlz
dGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5RG9t
YWluKTsKKyAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYywgUmVzb3Vy
Y2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiBwcmlt
YXJ5RG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0
byYgcmVzb3VyY2VTdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5
RG9tYWluKHByaW1hcnlEb21haW4pOworICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNl
U3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpWZXJ5SGlnaCk7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZW1vdmVBbGxTdG9yYWdlQWNjZXNz
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2go
W3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgc3RvcmUtPnJlbW92ZUFsbFN0
b3JhZ2VBY2Nlc3MoW3N0b3JlID0gc3RvcmUuY29weVJlZigpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgc3Rv
cmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpkaWRDcmVhdGVOZXR3
b3JrUHJvY2VzcygpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICB1
cGRhdGVDb29raWVCbG9ja2luZyhbXSgpIHsgfSk7CisgICAgdXBkYXRlQ2FjaGVNYXhBZ2VDYXAo
KTsKKyAgICB1cGRhdGVDbGllbnRTaWRlQ29va2llc0FnZUNhcCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mM2E5YTdiOTZhMDBkODVkMGMxZWE3YjFjYWE2MWM3MmJkMWRi
MGM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFz
c2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oCkBAIC0wLDAgKzEsMjAz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlc291cmNl
TG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmgiCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1dvcmtRdWV1ZS5oPgorCisjaWYgSEFWRShDT1JFX1BSRURJQ1RJT04pCisjaW5jbHVkZSAi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5oIgorI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK2NsYXNzIEtleWVkRGVjb2RlcjsKK2NsYXNzIEtleWVkRW5jb2RlcjsK
K3N0cnVjdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgT3BlcmF0aW5nRGF0ZTsKK2NsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJz
aXN0ZW50U3RvcmFnZTsKKworLy8gVGhpcyBpcyBhbHdheXMgY29uc3RydWN0ZWQgLyB1c2VkIC8g
ZGVzdHJveWVkIG9uIHRoZSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUncyBzdGF0aXN0
aWNzIHF1ZXVlLgorY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlIDogcHVi
bGljIENhbk1ha2VXZWFrUHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4gewor
cHVibGljOgorICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZShXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUmLCBXb3JrUXVldWUmKTsKKyAgICB+UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlKCk7CisKKyAgICB2b2lkIHNldFBlcnNpc3RlbnRTdG9yYWdlKFJl
c291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZSYpOworCisgICAgdm9pZCBjbGVh
cihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmlzRW1wdHkoKTsgfQorCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OktleWVkRW5jb2Rlcj4gY3JlYXRlRW5jb2RlckZyb21EYXRh
KCkgY29uc3Q7CisgICAgdm9pZCBtZXJnZVdpdGhEYXRhRnJvbURlY29kZXIoV2ViQ29yZTo6S2V5
ZWREZWNvZGVyJik7CisKKyAgICB2b2lkIG1lcmdlU3RhdGlzdGljcyhWZWN0b3I8V2ViQ29yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mJik7CisgICAgdm9pZCBwcm9jZXNzU3RhdGlzdGljcyhj
b25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3Mm
KT4mKSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tpbmcoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlu
cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvQmxvY2ssIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CisgICAgdm9pZCBjbGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5zKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwor
CisgICAgdm9pZCBpbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSgpOworICAg
IHZvaWQgcHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOworCisgICAgdm9pZCByZXF1
ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKFN0cmluZyYmIHByaW1hcnlEb21haW5Jbk5lZWRP
ZlN0b3JhZ2VBY2Nlc3MsIHVpbnQ2NF90IG9wZW5lclBhZ2VJRCwgU3RyaW5nJiYgb3BlbmVyUHJp
bWFyeURvbWFpbik7CisgICAgdm9pZCByZW1vdmVBbGxTdG9yYWdlQWNjZXNzKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CisKKyAgICB2b2lkIGdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRl
RGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgY2FuY2VsUGVuZGlu
Z1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpOworCisgICAgYm9vbCBpc1JlZ2lzdGVyZWRB
c1N1YnJlc291cmNlVW5kZXIoY29uc3QgU3RyaW5nJiBzdWJyZXNvdXJjZVByaW1hcnlEb21haW4s
IGNvbnN0IFN0cmluZyYgdG9wRnJhbWVQcmltYXJ5RG9tYWluKSBjb25zdDsKKyAgICBib29sIGlz
UmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBTdHJpbmcmIHN1YkZyYW1lUHJpbWFyeURv
bWFpbiwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1hcnlEb21haW4pIGNvbnN0OworICAgIGJv
b2wgaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFN0cmluZyYgaG9zdFJlZGlyZWN0
ZWRGcm9tUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiBob3N0UmVkaXJlY3RlZFRvUHJpbWFy
eURvbWFpbikgY29uc3Q7CisKKyAgICB2b2lkIGNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
U3RyaW5nJiBwcmltYXJ5RG9tYWluKTsKKyAgICBTdHJpbmcgZHVtcFJlc291cmNlTG9hZFN0YXRp
c3RpY3MoKSBjb25zdDsKKyAgICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5n
JiBwcmltYXJ5RG9tYWluKSBjb25zdDsKKyAgICBib29sIGlzVmVyeVByZXZhbGVudFJlc291cmNl
KGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikgY29uc3Q7CisgICAgdm9pZCBzZXRQcmV2YWxl
bnRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pOworICAgIHZvaWQgc2V0VmVy
eVByZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbik7CisKKyAgICB2
b2lkIHNldEdyYW5kZmF0aGVyZWQoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBib29sIHZh
bHVlKTsKKyAgICBib29sIGlzR3JhbmRmYXRoZXJlZChjb25zdCBTdHJpbmcmIHByaW1hcnlEb21h
aW4pIGNvbnN0OworCisgICAgdm9pZCBzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29u
c3QgU3RyaW5nJiBwcmltYXJ5U3ViRnJhbWVEb21haW4sIGNvbnN0IFN0cmluZyYgcHJpbWFyeVRv
cEZyYW1lRG9tYWluKTsKKyAgICB2b2lkIHNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdp
bihjb25zdCBTdHJpbmcmIHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBw
cmltYXJ5VG9wRnJhbWVEb21haW4pOworICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdFRvKGNvbnN0IFN0cmluZyYgcHJpbWFyeVN1YnJlc291cmNlRG9tYWluLCBjb25zdCBTdHJp
bmcmIHByaW1hcnlSZWRpcmVjdERvbWFpbik7CisgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0RnJvbShjb25zdCBTdHJpbmcmIHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbiwgY29u
c3QgU3RyaW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pOworICAgIHZvaWQgc2V0VG9wRnJhbWVV
bmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN0cmluZyYgdG9wRnJhbWVQcmltYXJ5RG9tYWluLCBjb25z
dCBTdHJpbmcmIHByaW1hcnlSZWRpcmVjdERvbWFpbik7CisgICAgdm9pZCBzZXRUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdHJpbmcmIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgY29u
c3QgU3RyaW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pOworCisgICAgdm9pZCBsb2dUZXN0aW5n
RXZlbnQoY29uc3QgU3RyaW5nJik7CisKKyAgICB2b2lkIHNldE1heFN0YXRpc3RpY3NFbnRyaWVz
KHNpemVfdCBtYXhpbXVtRW50cnlDb3VudCk7CisgICAgdm9pZCBzZXRQcnVuZUVudHJpZXNEb3du
VG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQpOworICAgIHZvaWQgcmVzZXRQYXJhbWV0ZXJzVG9E
ZWZhdWx0VmFsdWVzKCk7CisKKyAgICB2b2lkIGNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgp
IGNvbnN0OworCisgICAgdm9pZCBzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2Fu
bmVkKGJvb2wpOworICAgIHZvaWQgc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRh
UmVjb3Jkc1JlbW92YWwoYm9vbCk7CisgICAgdm9pZCBzZXRTaG91bGRTdWJtaXRUZWxlbWV0cnko
Ym9vbCk7CisgICAgdm9pZCBzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMpOwor
ICAgIHZvaWQgc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNlY29uZHMp
OworICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMpOworICAgIHZvaWQgc2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sKTsKKyAgICBib29sIGlzRGVidWdN
b2RlRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdNb2RlRW5hYmxlZDsgfTsKKyAgICB2
b2lkIHNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFN0cmluZyYgZG9tYWlu
KTsKKworICAgIHZvaWQgaGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdHJpbmcmIHN1YkZyYW1lUHJp
bWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1hcnlEb21haW4sIHVpbnQ2NF90
IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4m
Jik7CisgICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBzdWJGcmFtZVByaW1h
cnlEb21haW4sIFN0cmluZyYmIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgdWludDY0X3QgZnJhbWVJ
RCwgdWludDY0X3QgcGFnZUlELCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoU3RvcmFnZUFjY2Vzc1N0YXR1cyk+JiYpOworICAgIHZvaWQgZ3JhbnRTdG9yYWdlQWNj
ZXNzKFN0cmluZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJhbWVIb3N0LCB1aW50NjRf
dCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKKworICAgIHZvaWQgbG9nRnJhbWVOYXZpZ2F0
aW9uKGNvbnN0IFN0cmluZyYgdGFyZ2V0UHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiBtYWlu
RnJhbWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHNvdXJjZVByaW1hcnlEb21haW4sIGNv
bnN0IFN0cmluZyYgdGFyZ2V0SG9zdCwgY29uc3QgU3RyaW5nJiBtYWluRnJhbWVIb3N0LCBib29s
IGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUpOworICAgIHZvaWQgbG9nVXNlckludGVyYWN0
aW9uKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbik7CisKKyAgICB2b2lkIGNsZWFyVXNlcklu
dGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbik7CisgICAgYm9vbCBoYXNIYWRV
c2VySW50ZXJhY3Rpb24oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKTsKKworICAgIHZvaWQg
c2V0TGFzdFNlZW4oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBTZWNvbmRzKTsKKworICAg
IHZvaWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMg
Ym9vbCBzaG91bGRCbG9ja0FuZEtlZXBDb29raWVzKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3MmKTsKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRCbG9ja0FuZFB1cmdlQ29va2ll
cyhjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgc3RhdGljIGJv
b2wgaGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdChjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiwgY29uc3QgU3RyaW5nJiBmaXJzdFBhcnR5UHJpbWFy
eURvbWFpbik7CisgICAgYm9vbCBoYXNIYWRVbmV4cGlyZWRSZWNlbnRVc2VySW50ZXJhY3Rpb24o
V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpIGNvbnN0OworICAgIGJvb2wgaGFzU3Rh
dGlzdGljc0V4cGlyZWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpIGNv
bnN0OworICAgIGJvb2wgd2FzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlv
bihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBjdXJyZW50LCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiB1cGRhdGVkKSBjb25zdDsKKyAgICB2b2lk
IHNldFByZXZhbGVudFJlc291cmNlKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmLCBS
ZXNvdXJjZUxvYWRQcmV2YWxlbmNlKTsKKyAgICB1bnNpZ25lZCByZWN1cnNpdmVseUdldEFsbERv
bWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUb1RoaXNEb21haW4oY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYsIEhhc2hTZXQ8U3RyaW5nPiYgZG9tYWluc1RoYXRIYXZlUmVkaXJl
Y3RlZFRvLCB1bnNpZ25lZCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKSBjb25zdDsKKyAgICB2b2lk
IHNldFN0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9zdG9yYWdl
QWNjZXNzUHJvbXB0c0VuYWJsZWQgID0gZW5hYmxlZDsgfQorICAgIGJvb2wgc2hvdWxkUmVtb3Zl
RGF0YVJlY29yZHMoKSBjb25zdDsKKyAgICB2b2lkIHNldERlYnVnTG9nZ2dpbmdFbmFibGVkKGJv
b2wgZW5hYmxlZCkgeyBtX2RlYnVnTG9nZ2luZ0VuYWJsZWQgID0gZW5hYmxlZDsgfQorICAgIHZv
aWQgc2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoYm9vbCk7CisgICAgdm9pZCBzY2hlZHVsZVN0
YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7CisgICAgdm9pZCBncmFudFN0
b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdHJpbmcmJiBzdWJGcmFtZUhvc3QsIFN0cmluZyYmIHRvcEZy
YW1lSG9zdCwgT3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9v
bCB1c2VyV2FzUHJvbXB0ZWROb3dPckVhcmxpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYpOworICAgIHZvaWQgbWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxl
bnQoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOworICAgIGJvb2wgaXNQcmV2YWxl
bnREdWVUb0RlYnVnTW9kZShXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAg
VmVjdG9yPFN0cmluZz4gZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7Cisg
ICAgdm9pZCByZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwor
ICAgIHZvaWQgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKTsKKyAgICBXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzJiBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWlu
KGNvbnN0IFN0cmluZyYpOworICAgIFZlY3RvcjxTdHJpbmc+IHRvcFByaXZhdGVseUNvbnRyb2xs
ZWREb21haW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcigpOworICAgIHZvaWQgc2V0Q2FjaGVNYXhB
Z2VDYXAoU2Vjb25kcyk7CisgICAgdm9pZCB1cGRhdGVDYWNoZU1heEFnZUNhcCgpOworICAgIHZv
aWQgc2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoU2Vjb25kcyk7CisgICAgdm9pZCB1cGRh
dGVDbGllbnRTaWRlQ29va2llc0FnZUNhcCgpOworCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAg
dm9pZCByZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCk7CisjZW5kaWYKKworICAgIHN0cnVj
dCBQYXJhbWV0ZXJzIHsKKyAgICAgICAgc2l6ZV90IHBydW5lRW50cmllc0Rvd25UbyB7IDgwMCB9
OworICAgICAgICBzaXplX3QgbWF4U3RhdGlzdGljc0VudHJpZXMgeyAxMDAwIH07CisgICAgICAg
IE9wdGlvbmFsPFNlY29uZHM+IHRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb247CisgICAgICAgIFNl
Y29uZHMgbWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsIHsgMV9oIH07CisgICAg
ICAgIFNlY29uZHMgZ3JhbmRmYXRoZXJpbmdUaW1lIHsgMjRfaCAqIDcgfTsKKyAgICAgICAgU2Vj
b25kcyBjYWNoZU1heEFnZUNhcFRpbWUgeyAyNF9oICogNyB9OworICAgICAgICBTZWNvbmRzIGNs
aWVudFNpZGVDb29raWVzQWdlQ2FwVGltZSB7IDI0X2ggKiA3IH07CisgICAgICAgIGJvb2wgc2hv
dWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCB7IGZhbHNlIH07CisgICAg
ICAgIGJvb2wgc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwg
eyB0cnVlIH07CisgICAgICAgIGJvb2wgc2hvdWxkU3VibWl0VGVsZW1ldHJ5IHsgdHJ1ZSB9Owor
ICAgIH07CisKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIG1fc3RvcmU7Cisg
ICAgUmVmPFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7CisgICAgV2Vha1B0cjxSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U+IG1fcGVyc2lzdGVudFN0b3JhZ2U7CisgICAgSGFz
aE1hcDxTdHJpbmcsIFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+IG1fcmVzb3VyY2VT
dGF0aXN0aWNzTWFwOworI2lmIEhBVkUoQ09SRV9QUkVESUNUSU9OKQorICAgIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3Np
ZmllcjsKKyNlbHNlCisgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIgbV9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcjsKKyNlbmRpZgorI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQorICAgIEhhc2hTZXQ8dWludDY0X3Q+IG1fYWN0aXZlUGx1Z2luVG9rZW5z
OworI2VuZGlmCisgICAgUGFyYW1ldGVycyBtX3BhcmFtZXRlcnM7CisgICAgVmVjdG9yPE9wZXJh
dGluZ0RhdGU+IG1fb3BlcmF0aW5nRGF0ZXM7CisgICAgV2FsbFRpbWUgbV9lbmRPZkdyYW5kZmF0
aGVyaW5nVGltZXN0YW1wOworICAgIGJvb2wgbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkIHsgZmFsc2Ug
fTsKKyAgICBib29sIG1fZGVidWdNb2RlRW5hYmxlZCB7IGZhbHNlIH07CisgICAgU3RyaW5nIG1f
ZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKKyAgICBib29sIG1fc3RvcmFnZUFjY2Vzc1By
b21wdHNFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fZGF0YVJlY29yZHNCZWluZ1JlbW92
ZWQgeyBmYWxzZSB9OworICAgIE1vbm90b25pY1RpbWUgbV9sYXN0VGltZURhdGFSZWNvcmRzV2Vy
ZVJlbW92ZWQ7CisKKyAgICB1aW50NjRfdCBtX2xhc3RTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVl
c3RJZGVudGlmaWVyIHsgMCB9OworICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBtX3BlbmRpbmdTdGF0
aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZp
ZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVy
c2lzdGVudFN0b3JhZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkZDc4MWI4ZGM3MDgxOWZiZmUxNzIwNjA5
MzlhNTQ3MTRjOGMyMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdl
LmNwcApAQCAtMCwwICsxLDI3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5o
IgorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlBlcnNpc3RlbmN5VXRpbHMuaCIK
KyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCIKKyNpbmNsdWRl
ICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Zp
bGVNb25pdG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9LZXllZENvZGluZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+
CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjb25zdGV4cHIgU2Vjb25kcyBtaW5pbXVtV3JpdGVJbnRl
cnZhbCB7IDVfbWluIH07CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgYm9v
bCBoYXNGaWxlQ2hhbmdlZFNpbmNlKGNvbnN0IFN0cmluZyYgcGF0aCwgV2FsbFRpbWUgc2luY2Up
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgYXV0byBtb2RpZmljYXRp
b25UaW1lID0gRmlsZVN5c3RlbTo6Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUocGF0aCk7CisgICAg
aWYgKCFtb2RpZmljYXRpb25UaW1lKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVy
biBtb2RpZmljYXRpb25UaW1lLnZhbHVlKCkgPiBzaW5jZTsKK30KKworUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVu
dFN0b3JhZ2UoUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlJiBtZW1vcnlTdG9yZSwg
V29ya1F1ZXVlJiB3b3JrUXVldWUsIGNvbnN0IFN0cmluZyYgc3RvcmFnZURpcmVjdG9yeVBhdGgp
CisgICAgOiBtX21lbW9yeVN0b3JlKG1lbW9yeVN0b3JlKQorICAgICwgbV93b3JrUXVldWUod29y
a1F1ZXVlKQorICAgICwgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aChzdG9yYWdlRGlyZWN0b3J5UGF0
aCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fbWVtb3J5U3Rv
cmUuc2V0UGVyc2lzdGVudFN0b3JhZ2UoKnRoaXMpOworCisgICAgcG9wdWxhdGVNZW1vcnlTdG9y
ZUZyb21EaXNrKCk7CisgICAgc3RhcnRNb25pdG9yaW5nRGlzaygpOworfQorCitSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6On5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVy
c2lzdGVudFN0b3JhZ2UoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgaWYgKG1faGFzUGVuZGluZ1dyaXRlKQorICAgICAgICB3cml0ZU1lbW9yeVN0b3JlVG9EaXNr
KCk7Cit9CisKK1N0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6
OnN0b3JhZ2VEaXJlY3RvcnlQYXRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdG9yYWdlRGly
ZWN0b3J5UGF0aC5pc29sYXRlZENvcHkoKTsKK30KKworU3RyaW5nIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6cmVzb3VyY2VMb2dGaWxlUGF0aCgpIGNvbnN0Cit7Cisg
ICAgU3RyaW5nIHN0b3JhZ2VQYXRoID0gc3RvcmFnZURpcmVjdG9yeVBhdGgoKTsKKyAgICBpZiAo
c3RvcmFnZVBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKwor
ICAgIHJldHVybiBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoc3RvcmFnZVBh
dGgsICJmdWxsX2Jyb3dzaW5nX3Nlc3Npb25fcmVzb3VyY2VMb2cucGxpc3QiKTsKK30KKwordm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OnN0YXJ0TW9uaXRvcmlu
Z0Rpc2soKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGlmIChtX2Zp
bGVNb25pdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgcmVzb3VyY2VMb2dQYXRo
ID0gcmVzb3VyY2VMb2dGaWxlUGF0aCgpOworICAgIGlmIChyZXNvdXJjZUxvZ1BhdGguaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2ZpbGVNb25pdG9yID0gc3RkOjptYWtlX3Vu
aXF1ZTxGaWxlTW9uaXRvcj4ocmVzb3VyY2VMb2dQYXRoLCBtX3dvcmtRdWV1ZS5jb3B5UmVmKCks
IFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0gKEZpbGVNb25pdG9yOjpGaWxl
Q2hhbmdlVHlwZSB0eXBlKSB7CisgICAgICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
ICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN3
aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEZpbGVNb25pdG9yOjpGaWxlQ2hhbmdlVHlwZTo6
TW9kaWZpY2F0aW9uOgorICAgICAgICAgICAgcmVmcmVzaE1lbW9yeVN0b3JlRnJvbURpc2soKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZpbGVNb25pdG9yOjpGaWxlQ2hhbmdl
VHlwZTo6UmVtb3ZhbDoKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUuY2xlYXIoW10geyB9KTsK
KyAgICAgICAgICAgIG1fZmlsZU1vbml0b3IgPSBudWxscHRyOworICAgICAgICAgICAgbW9uaXRv
ckRpcmVjdG9yeUZvck5ld1N0YXRpc3RpY3MoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRT
dG9yYWdlOjptb25pdG9yRGlyZWN0b3J5Rm9yTmV3U3RhdGlzdGljcygpCit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBTdHJpbmcgc3RvcmFnZVBhdGggPSBzdG9yYWdl
RGlyZWN0b3J5UGF0aCgpOworICAgIEFTU0VSVCghc3RvcmFnZVBhdGguaXNFbXB0eSgpKTsKKwor
ICAgIGlmICghRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhzdG9yYWdlUGF0aCkpIHsKKyAgICAgICAg
aWYgKCFGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMoc3RvcmFnZVBhdGgpKSB7CisgICAg
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlOiBGYWlsZWQgdG8gY3JlYXRlIGRpcmVj
dG9yeSBwYXRoICVzIiwgc3RvcmFnZVBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2ZpbGVNb25pdG9yID0gc3RkOjptYWtl
X3VuaXF1ZTxGaWxlTW9uaXRvcj4oc3RvcmFnZVBhdGgsIG1fd29ya1F1ZXVlLmNvcHlSZWYoKSwg
W3RoaXNdIChGaWxlTW9uaXRvcjo6RmlsZUNoYW5nZVR5cGUgdHlwZSkgeworICAgICAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gRmlsZU1vbml0b3I6
OkZpbGVDaGFuZ2VUeXBlOjpSZW1vdmFsKSB7CisgICAgICAgICAgICAvLyBEaXJlY3Rvcnkgd2Fz
IHJlbW92ZWQhCisgICAgICAgICAgICBtX2ZpbGVNb25pdG9yID0gbnVsbHB0cjsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyByZXNvdXJjZUxvZ1BhdGgg
PSByZXNvdXJjZUxvZ0ZpbGVQYXRoKCk7CisgICAgICAgIEFTU0VSVCghcmVzb3VyY2VMb2dQYXRo
LmlzRW1wdHkoKSk7CisKKyAgICAgICAgaWYgKCFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHJlc291
cmNlTG9nUGF0aCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9maWxlTW9uaXRv
ciA9IG51bGxwdHI7CisKKyAgICAgICAgcmVmcmVzaE1lbW9yeVN0b3JlRnJvbURpc2soKTsKKyAg
ICAgICAgc3RhcnRNb25pdG9yaW5nRGlzaygpOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6c3RvcE1vbml0b3JpbmdEaXNrKCkKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBtX2ZpbGVNb25pdG9yID0gbnVs
bHB0cjsKK30KKworLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgZmlsZSBjaGFuZ2VzIG9uIGRp
c2suCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6cmVmcmVz
aE1lbW9yeVN0b3JlRnJvbURpc2soKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgU3RyaW5nIGZpbGVQYXRoID0gcmVzb3VyY2VMb2dGaWxlUGF0aCgpOworICAgIGlm
IChmaWxlUGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIHNvbWV0
aW1lcyBzZWUgZmlsZSBjaGFuZ2VkIGV2ZW50cyBmcm9tIGJlZm9yZSBvdXIgbG9hZCBjb21wbGV0
ZWQgKHdlIHN0YXJ0CisgICAgLy8gcmVhZGluZyBhdCB0aGUgZmlyc3QgY2hhbmdlIGV2ZW50LCBi
dXQgd2UgbWlnaHQgcmVjZWl2ZSBhIHNlcmllcyBvZiBldmVudHMgcmVsYXRlZAorICAgIC8vIHRv
IHRoZSBzYW1lIGZpbGUgb3BlcmF0aW9uKS4gQ2F0Y2ggdGhpcyBjYXNlIHRvIGF2b2lkIHJlYWRp
bmcgb3Zlcmx5IG9mdGVuLgorICAgIGlmICghaGFzRmlsZUNoYW5nZWRTaW5jZShmaWxlUGF0aCwg
bV9sYXN0U3RhdGlzdGljc0ZpbGVTeW5jVGltZSkpCisgICAgICAgIHJldHVybjsKKworICAgIFdh
bGxUaW1lIHJlYWRUaW1lID0gV2FsbFRpbWU6Om5vdygpOworCisgICAgYXV0byBkZWNvZGVyID0g
Y3JlYXRlRm9yRmlsZShmaWxlUGF0aCk7CisgICAgaWYgKCFkZWNvZGVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX21lbW9yeVN0b3JlLm1lcmdlV2l0aERhdGFGcm9tRGVjb2RlcigqZGVjb2Rl
cik7CisgICAgbV9sYXN0U3RhdGlzdGljc0ZpbGVTeW5jVGltZSA9IHJlYWRUaW1lOworfQorCit2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6cG9wdWxhdGVNZW1v
cnlTdG9yZUZyb21EaXNrKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIFN0cmluZyBmaWxlUGF0aCA9IHJlc291cmNlTG9nRmlsZVBhdGgoKTsKKyAgICBpZiAoZmls
ZVBhdGguaXNFbXB0eSgpIHx8ICFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGZpbGVQYXRoKSkgewor
ICAgICAgICBtX21lbW9yeVN0b3JlLmdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YShbXSgp
IHsgfSk7CisgICAgICAgIG1vbml0b3JEaXJlY3RvcnlGb3JOZXdTdGF0aXN0aWNzKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWhhc0ZpbGVDaGFuZ2VkU2luY2UoZmlsZVBh
dGgsIG1fbGFzdFN0YXRpc3RpY3NGaWxlU3luY1RpbWUpKSB7CisgICAgICAgIC8vIE5vIG5lZWQg
dG8gZ3JhbmRmYXRoZXIgaW4gdGhpcyBjYXNlLgorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgV2FsbFRpbWUgcmVhZFRpbWUgPSBXYWxsVGltZTo6bm93KCk7CisKKyAgICBhdXRvIGRlY29k
ZXIgPSBjcmVhdGVGb3JGaWxlKGZpbGVQYXRoKTsKKyAgICBpZiAoIWRlY29kZXIpIHsKKyAgICAg
ICAgbV9tZW1vcnlTdG9yZS5ncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEoW10oKSB7IH0p
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRGVidWcgbW9kZSBoYXMgYSBwcmVw
b3VsYXRlZCBtZW1vcnkgc3RvcmUuCisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX21lbW9yeVN0
b3JlLmlzRW1wdHkoKSB8fCBtX21lbW9yeVN0b3JlLmlzRGVidWdNb2RlRW5hYmxlZCgpLCAiVGhp
cyBpcyB0aGUgaW5pdGlhbCBpbXBvcnQgc28gdGhlIHN0b3JlIHNob3VsZCBiZSBlbXB0eSIpOwor
ICAgIG1fbWVtb3J5U3RvcmUubWVyZ2VXaXRoRGF0YUZyb21EZWNvZGVyKCpkZWNvZGVyKTsKKwor
ICAgIG1fbGFzdFN0YXRpc3RpY3NGaWxlU3luY1RpbWUgPSByZWFkVGltZTsKKworICAgIG1fbWVt
b3J5U3RvcmUubG9nVGVzdGluZ0V2ZW50KCJQb3B1bGF0ZWRXaXRob3V0R3JhbmRmYXRoZXJpbmci
X3MpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6
d3JpdGVNZW1vcnlTdG9yZVRvRGlzaygpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICBtX2hhc1BlbmRpbmdXcml0ZSA9IGZhbHNlOworICAgIHN0b3BNb25pdG9yaW5n
RGlzaygpOworCisgICAgd3JpdGVUb0Rpc2sobV9tZW1vcnlTdG9yZS5jcmVhdGVFbmNvZGVyRnJv
bURhdGEoKSwgcmVzb3VyY2VMb2dGaWxlUGF0aCgpKTsKKworICAgIG1fbGFzdFN0YXRpc3RpY3NG
aWxlU3luY1RpbWUgPSBXYWxsVGltZTo6bm93KCk7CisgICAgbV9sYXN0U3RhdGlzdGljc1dyaXRl
VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworCisgICAgc3RhcnRNb25pdG9yaW5nRGlzaygp
OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6c2No
ZWR1bGVPcldyaXRlTWVtb3J5U3RvcmUoRm9yY2VJbW1lZGlhdGVXcml0ZSBmb3JjZUltbWVkaWF0
ZVdyaXRlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byB0
aW1lU2luY2VMYXN0V3JpdGUgPSBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fbGFzdFN0YXRpc3Rp
Y3NXcml0ZVRpbWU7CisgICAgaWYgKGZvcmNlSW1tZWRpYXRlV3JpdGUgIT0gRm9yY2VJbW1lZGlh
dGVXcml0ZTo6WWVzICYmIHRpbWVTaW5jZUxhc3RXcml0ZSA8IG1pbmltdW1Xcml0ZUludGVydmFs
KSB7CisgICAgICAgIGlmICghbV9oYXNQZW5kaW5nV3JpdGUpIHsKKyAgICAgICAgICAgIG1faGFz
UGVuZGluZ1dyaXRlID0gdHJ1ZTsKKyAgICAgICAgICAgIFNlY29uZHMgZGVsYXkgPSBtaW5pbXVt
V3JpdGVJbnRlcnZhbCAtIHRpbWVTaW5jZUxhc3RXcml0ZSArIDFfczsKKyAgICAgICAgICAgIG1f
d29ya1F1ZXVlLT5kaXNwYXRjaEFmdGVyKGRlbGF5LCBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigq
dGhpcyldIHsKKyAgICAgICAgICAgICAgICBpZiAod2Vha1RoaXMpCisgICAgICAgICAgICAgICAg
ICAgIHdlYWtUaGlzLT53cml0ZU1lbW9yeVN0b3JlVG9EaXNrKCk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgd3JpdGVNZW1vcnlTdG9y
ZVRvRGlzaygpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3Rv
cmFnZTo6Y2xlYXIoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIFN0
cmluZyBmaWxlUGF0aCA9IHJlc291cmNlTG9nRmlsZVBhdGgoKTsKKyAgICBpZiAoZmlsZVBhdGgu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzdG9wTW9uaXRvcmluZ0Rpc2soKTsK
KworICAgIGlmICghRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShmaWxlUGF0aCkgJiYgRmlsZVN5c3Rl
bTo6ZmlsZUV4aXN0cyhmaWxlUGF0aCkpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFJlc291
cmNlTG9hZFN0YXRpc3RpY3MsICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3Jh
Z2U6IFVuYWJsZSB0byBkZWxldGUgc3RhdGlzdGljcyBmaWxlOiAlcyIsIGZpbGVQYXRoLnV0Zjgo
KS5kYXRhKCkpOworfQorCisjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6ZXhjbHVkZUZyb21CYWNrdXAoKSBjb25z
dAoreworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NQZXJzaXN0ZW50U3RvcmFnZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFz
c2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjEyYWE5YjhhZWMyZmQ1MDAxZjFkMmNjNmFhMzNkYmIyNzI4ZWU2YmUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNp
bmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorI2luY2x1
ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRmlsZU1vbml0b3I7Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU7CisKKy8v
IENhbiBvbmx5IGJlIGNvbnN0cnVjdGVkIC8gZGVzdHJveWVkIC8gdXNlZCBmcm9tIHRoZSBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUncyBzdGF0aXN0aWMgcXVldWUuCitjbGFzcyBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQ
dHI8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlPiB7CitwdWJsaWM6Cisg
ICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlKFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZSYsIFdvcmtRdWV1ZSYsIGNvbnN0IFN0cmluZyYgc3RvcmFnZURp
cmVjdG9yeVBhdGgpOworICAgIH5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3Jh
Z2UoKTsKKworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIGVudW0gY2xhc3MgRm9yY2VJbW1lZGlh
dGVXcml0ZSB7IE5vLCBZZXMsIH07CisgICAgdm9pZCBzY2hlZHVsZU9yV3JpdGVNZW1vcnlTdG9y
ZShGb3JjZUltbWVkaWF0ZVdyaXRlKTsKKworcHJpdmF0ZToKKyAgICBTdHJpbmcgc3RvcmFnZURp
cmVjdG9yeVBhdGgoKSBjb25zdDsKKyAgICBTdHJpbmcgcmVzb3VyY2VMb2dGaWxlUGF0aCgpIGNv
bnN0OworCisgICAgdm9pZCBzdGFydE1vbml0b3JpbmdEaXNrKCk7CisgICAgdm9pZCBzdG9wTW9u
aXRvcmluZ0Rpc2soKTsKKyAgICB2b2lkIG1vbml0b3JEaXJlY3RvcnlGb3JOZXdTdGF0aXN0aWNz
KCk7CisKKyAgICB2b2lkIHdyaXRlTWVtb3J5U3RvcmVUb0Rpc2soKTsKKyAgICB2b2lkIHBvcHVs
YXRlTWVtb3J5U3RvcmVGcm9tRGlzaygpOworICAgIHZvaWQgZXhjbHVkZUZyb21CYWNrdXAoKSBj
b25zdDsKKyAgICB2b2lkIHJlZnJlc2hNZW1vcnlTdG9yZUZyb21EaXNrKCk7CisKKyAgICBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUmIG1fbWVtb3J5U3RvcmU7CisgICAgUmVmPFdv
cmtRdWV1ZT4gbV93b3JrUXVldWU7CisgICAgY29uc3QgU3RyaW5nIG1fc3RvcmFnZURpcmVjdG9y
eVBhdGg7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkZpbGVNb25pdG9yPiBtX2ZpbGVN
b25pdG9yOworICAgIFdhbGxUaW1lIG1fbGFzdFN0YXRpc3RpY3NGaWxlU3luY1RpbWU7CisgICAg
TW9ub3RvbmljVGltZSBtX2xhc3RTdGF0aXN0aWNzV3JpdGVUaW1lOworICAgIGJvb2wgbV9oYXNQ
ZW5kaW5nV3JpdGUgeyBmYWxzZSB9OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NTFlNzEwOGQ3ODEwZTQxYTU2
NDczNDA4YzI1MTFkZmExMGZiYmMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5j
cHAKQEAgLTAsMCArMSw5MDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKKworI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2Uu
aCIKKyNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5Lmgi
CisjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1By
b3h5LmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlTWVzc2FnZXMu
aCIKKyNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgiCisjaW5j
bHVkZSAiV2Vic2l0ZURhdGFGZXRjaE9wdGlvbi5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhU3Rv
cmUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaD4KKyNpbmNs
dWRlIDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+CisjaW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFk
Q29waWVyLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3Rm
L3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBpbmxpbmUg
U3RyaW5nIGlzb2xhdGVkUHJpbWFyeURvbWFpbihjb25zdCBUJiB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6cHJpbWFyeURvbWFpbih2YWx1ZSkuaXNvbGF0ZWRD
b3B5KCk7Cit9CisKK2NvbnN0IE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+JiBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1vbml0b3JlZERhdGFUeXBlcygpCit7CisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+PiBkYXRhVHlwZXMoc3Rk
Ojppbml0aWFsaXplcl9saXN0PFdlYnNpdGVEYXRhVHlwZT4oeworICAgICAgICBXZWJzaXRlRGF0
YVR5cGU6OkNvb2tpZXMsCisgICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6RE9NQ2FjaGUsCisgICAg
ICAgIFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzLAorICAgICAgICBXZWJzaXRl
RGF0YVR5cGU6OkxvY2FsU3RvcmFnZSwKKyAgICAgICAgV2Vic2l0ZURhdGFUeXBlOjpNZWRpYUtl
eXMsCisgICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUs
CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIFdlYnNpdGVEYXRhVHlw
ZTo6UGx1Z0luRGF0YSwKKyNlbmRpZgorICAgICAgICBXZWJzaXRlRGF0YVR5cGU6OlNlYXJjaEZp
ZWxkUmVjZW50U2VhcmNoZXMsCisgICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3Jh
Z2UsCisjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorICAgICAgICBXZWJzaXRlRGF0YVR5cGU6
OlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zLAorI2VuZGlmCisgICAgICAgIFdlYnNpdGVEYXRh
VHlwZTo6V2ViU1FMRGF0YWJhc2VzLAorICAgIH0pKTsKKworICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CisKKyAgICByZXR1cm4gZGF0YVR5cGVzOworfQorCit2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nh
bm5lZChib29sIHZhbHVlKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAg
ICBwb3N0VGFzayhbdGhpcywgdmFsdWVdIHsKKyAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisg
ICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dl
cmVTY2FubmVkKHZhbHVlKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNS
ZW1vdmFsKGJvb2wgdmFsdWUpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIHBvc3RUYXNrKFt0aGlzLCB2YWx1ZV0geworICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkK
KyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVm
b3JlRGF0YVJlY29yZHNSZW1vdmFsKHZhbHVlKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeShib29sIHZh
bHVlKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBwb3N0VGFzayhb
dGhpcywgdmFsdWVdIHsKKyAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgICAgICBt
X21lbW9yeVN0b3JlLT5zZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkodmFsdWUpOworICAgIH0pOwor
fQorCitXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZShXZWJzaXRlRGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQorICAgIDogbV93
ZWJzaXRlRGF0YVN0b3JlKG1ha2VXZWFrUHRyKHdlYnNpdGVEYXRhU3RvcmUpKQorICAgICwgbV9z
dGF0aXN0aWNzUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZSBQcm9jZXNzIERhdGEgUXVldWUiLCBXb3JrUXVldWU6OlR5cGU6OlNlcmlhbCwgV29y
a1F1ZXVlOjpRT1M6OlV0aWxpdHkpKQorICAgICwgbV9kYWlseVRhc2tzVGltZXIoUnVuTG9vcDo6
bWFpbigpLCB0aGlzLCAmV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwZXJmb3JtRGFp
bHlUYXNrcykKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgcG9zdFRh
c2soW3RoaXMsIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSB3ZWJzaXRlRGF0YVN0
b3JlLnJlc29sdmVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpLmlzb2xhdGVkQ29w
eSgpXSB7CisgICAgICAgIG1fbWVtb3J5U3RvcmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4oKnRoaXMsIG1fc3RhdGlzdGljc1F1ZXVlKTsKKyAg
ICAgICAgbV9wZXJzaXN0ZW50U3RvcmFnZSA9IHN0ZDo6bWFrZV91bmlxdWU8UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlPigqbV9tZW1vcnlTdG9yZSwgbV9zdGF0aXN0aWNz
UXVldWUsIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpOworICAgIH0pOworCisgICAg
bV9kYWlseVRhc2tzVGltZXIuc3RhcnRSZXBlYXRpbmcoMjRfaCk7Cit9CisKK1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6fldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSgpCit7
CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGZsdXNoQW5kRGVzdHJveVBl
cnNpc3RlbnRTdG9yZSgpOworfQorCitpbmxpbmUgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnBvc3RUYXNrKFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIHRhc2spCit7CisgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBtX3N0YXRpc3RpY3NRdWV1ZS0+ZGlzcGF0
Y2goW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgdGFzayA9IFdURk1vdmUodGFzayld
IHsKKyAgICAgICAgdGFzaygpOworICAgIH0pOworfQorCitpbmxpbmUgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBvc3RUYXNrUmVwbHkoV1RGOjpGdW5jdGlvbjx2b2lkKCk+
JiYgcmVwbHkpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUocmVwbHkpKTsKK30KKwordm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZsdXNoQW5kRGVzdHJveVBlcnNpc3RlbnRTdG9yZSgpCit7
CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmICghbV9wZXJzaXN0ZW50
U3RvcmFnZSAmJiAhbV9tZW1vcnlTdG9yZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTWFr
ZSBzdXJlIHdlIGRlc3Ryb3kgdGhlIHBlcnNpc3RlbnQgc3RvcmUgb24gdGhlIGJhY2tncm91bmQg
cXVldWUgYW5kIHdhaXQgZm9yIGl0IHRvIGRpZQorICAgIC8vIHN5bmNocm9ub3VzbHkgc2luY2Ug
aXQgaGFzIGEgQysrIHJlZmVyZW5jZSB0byB1cy4gQmxvY2tpbmcgbmF0dXJlIG9mIHRoaXMgdGFz
ayBhbGxvd3MgdXMKKyAgICAvLyB0byBub3QgbWFpbnRhaW4gYSBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUgcmVmZXJlbmNlIGZvciB0aGUgZHVyYXRpb24gb2YgZGlzcGF0Y2gsCisgICAg
Ly8gYXZvaWRpbmcgZG91YmxlLWRlbGV0aW9uIGlzc3VlcyB3aGVuIHRoaXMgaXMgaW52b2tlZCBm
cm9tIHRoZSBkZXN0cnVjdG9yLgorICAgIEJpbmFyeVNlbWFwaG9yZSBzZW1hcGhvcmU7CisgICAg
bV9zdGF0aXN0aWNzUXVldWUtPmRpc3BhdGNoKFsmc2VtYXBob3JlLCB0aGlzXSB7CisgICAgICAg
IG1fcGVyc2lzdGVudFN0b3JhZ2UgPSBudWxscHRyOworICAgICAgICBtX21lbW9yeVN0b3JlID0g
bnVsbHB0cjsKKyAgICAgICAgc2VtYXBob3JlLnNpZ25hbCgpOworICAgIH0pOworICAgIHNlbWFw
aG9yZS53YWl0KCk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpz
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgdmFsdWUsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgcG9zdFRhc2soW3RoaXMsIHZhbHVlLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBp
ZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUodmFsdWUpOworICAgICAgICBwb3N0VGFza1JlcGx5KFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHBvc3RUYXNrKFt0
aGlzLCBwcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHVybCksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAg
ICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0UHJl
dmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUocHJpbWFyeURvbWFpbik7CisgICAgICAgIHBvc3RU
YXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIH0pOworfQorCit2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0
YVJlY29yZHNQcm9jZXNzaW5nKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgcG9zdFRhc2soW3RoaXNdIHsKKyAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAg
ICAgICAgICBtX21lbW9yeVN0b3JlLT5wcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7
CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNv
dXJjZUxvYWRTdGF0aXN0aWNzVXBkYXRlZChWZWN0b3I8V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljcz4mJiBvcmlnaW5zKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICAvLyBJdCBpcyBzYWZlIHRvIG1vdmUgdGhlIG9yaWdpbnMgdG8gdGhlIGJhY2tncm91bmQg
cXVldWUgd2l0aG91dCBpc29sYXRlZCBjb3B5IGhlcmUgYmVjYXVzZSB0aGlzIGlzIGFuIHItdmFs
dWUKKyAgICAvLyBjb21pbmcgZnJvbSBJUEMuIFJlc291cmNlTG9hZFN0YXRpc3RpY3Mgb25seSBj
b250YWlucyBzdHJpbmdzIHdoaWNoIGFyZSBzYWZlIHRvIG1vdmUgdG8gb3RoZXIgdGhyZWFkcyBh
cyBsb25nCisgICAgLy8gYXMgbm9ib2R5IG9uIHRoaXMgdGhyZWFkIGhvbGRzIGEgcmVmZXJlbmNl
IHRvIHRob3NlIHN0cmluZ3MuCisgICAgcG9zdFRhc2soW3RoaXMsIG9yaWdpbnMgPSBXVEZNb3Zl
KG9yaWdpbnMpXSgpIG11dGFibGUgeworICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9tZW1vcnlTdG9yZS0+bWVyZ2VTdGF0aXN0aWNz
KFdURk1vdmUob3JpZ2lucykpOworCisgICAgICAgIC8vIFdlIGNhbiBjYW5jZWwgYW55IHBlbmRp
bmcgcmVxdWVzdCB0byBwcm9jZXNzIHN0YXRpc3RpY3Mgc2luY2Ugd2UncmUgZG9pbmcgaXQgc3lu
Y2hyb25vdXNseSBiZWxvdy4KKyAgICAgICAgbV9tZW1vcnlTdG9yZS0+Y2FuY2VsUGVuZGluZ1N0
YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpOworCisgICAgICAgIC8vIEZpcmUgYmVmb3JlIHBy
b2Nlc3Npbmcgc3RhdGlzdGljcyB0byBwcm9wYWdhdGUgdXNlciBpbnRlcmFjdGlvbiBhcyBmYXN0
IGFzIHBvc3NpYmxlIHRvIHRoZSBuZXR3b3JrIHByb2Nlc3MuCisgICAgICAgIG1fbWVtb3J5U3Rv
cmUtPnVwZGF0ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9KTsKKyAgICAgICAgbV9tZW1vcnlTdG9y
ZS0+cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOworICAgIH0pOworfQorCit2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzU3RvcmFnZUFjY2VzcyhTdHJpbmcm
JiBzdWJGcmFtZUhvc3QsIFN0cmluZyYmIHRvcEZyYW1lSG9zdCwgdWludDY0X3QgZnJhbWVJRCwg
dWludDY0X3QgcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChib29sKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoc3ViRnJhbWVIb3N0ICE9IHRvcEZyYW1lSG9zdCk7
CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHBvc3RUYXNrKFt0aGlzLCBz
dWJGcmFtZVByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4oc3ViRnJhbWVIb3N0
KSwgdG9wRnJhbWVQcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHRvcEZyYW1l
SG9zdCksIGZyYW1lSUQsIHBhZ2VJRCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkg
eworICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoZmFsc2UpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgbV9tZW1vcnlTdG9yZS0+aGFzU3RvcmFnZUFjY2VzcyhzdWJG
cmFtZVByaW1hcnlEb21haW4sIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgZnJhbWVJRCwgcGFnZUlE
LCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYm9vbCBo
YXNTdG9yYWdlQWNjZXNzKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2Nv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGhhc1N0b3JhZ2VB
Y2Nlc3NdICgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGhh
c1N0b3JhZ2VBY2Nlc3MpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOwor
fQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2FsbEhhc1N0b3JhZ2VB
Y2Nlc3NGb3JGcmFtZUhhbmRsZXIoY29uc3QgU3RyaW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3Qg
U3RyaW5nJiBmaXJzdFBhcnR5RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdl
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBoYXNBY2Nlc3MpPiYmIGNhbGxiYWNrKQor
eworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyNpZiBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQorICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKKyAgICAgICAg
bV93ZWJzaXRlRGF0YVN0b3JlLT5oYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyKHJlc291
cmNlRG9tYWluLCBmaXJzdFBhcnR5RG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIFdURk1vdmUoY2Fs
bGJhY2spKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIGNhbGxiYWNrKGZh
bHNlKTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlcXVlc3RT
dG9yYWdlQWNjZXNzKFN0cmluZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJhbWVIb3N0
LCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgcHJvbXB0RW5hYmxlZCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVzKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBBU1NFUlQoc3ViRnJhbWVIb3N0ICE9IHRvcEZyYW1lSG9zdCk7Cisg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc3ViRnJhbWVQcmltYXJ5
RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHN1YkZyYW1lSG9zdCk7CisgICAgYXV0byB0
b3BGcmFtZVByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odG9wRnJhbWVIb3N0
KTsKKyAgICBpZiAoc3ViRnJhbWVQcmltYXJ5RG9tYWluID09IHRvcEZyYW1lUHJpbWFyeURvbWFp
bikgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpIYXNB
Y2Nlc3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcG9zdFRhc2soW3RoaXMsIHN1
YkZyYW1lUHJpbWFyeURvbWFpbiA9IGNyb3NzVGhyZWFkQ29weShzdWJGcmFtZVByaW1hcnlEb21h
aW4pLCB0b3BGcmFtZVByaW1hcnlEb21haW4gPSBjcm9zc1RocmVhZENvcHkodG9wRnJhbWVQcmlt
YXJ5RG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCBwcm9tcHRFbmFibGVkLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAg
aWYgKCFtX21lbW9yeVN0b3JlKSB7CisgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpDYW5u
b3RSZXF1ZXN0QWNjZXNzKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgbV9tZW1vcnlTdG9yZS0+cmVxdWVzdFN0b3JhZ2VBY2Nlc3Mo
V1RGTW92ZShzdWJGcmFtZVByaW1hcnlEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1lUHJpbWFyeURv
bWFpbiksIGZyYW1lSUQsIHBhZ2VJRCwgcHJvbXB0RW5hYmxlZCwgW2NvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFN0b3JhZ2VBY2Nlc3NTdGF0dXMgc3RhdHVz
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN0YXR1c10gKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoc3RhdHVzKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoU3RyaW5nJiYgcHJpbWFyeURv
bWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcywgdWludDY0X3Qgb3BlbmVyUGFnZUlELCBTdHJpbmcm
JiBvcGVuZXJQcmltYXJ5RG9tYWluKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICAvLyBJdCBpcyBzYWZlIHRvIG1vdmUgdGhlIHN0cmluZ3MgdG8gdGhlIGJhY2tncm91
bmQgcXVldWUgd2l0aG91dCBpc29sYXRlZCBjb3B5IGhlcmUgYmVjYXVzZSB0aGV5IGFyZSByLXZh
bHVlIHJlZmVyZW5jZXMKKyAgICAvLyBjb21pbmcgZnJvbSBJUEMuIFN0cmluZ3Mgd2hpY2ggYXJl
IHNhZmUgdG8gbW92ZSB0byBvdGhlciB0aHJlYWRzIGFzIGxvbmcgYXMgbm9ib2R5IG9uIHRoaXMg
dGhyZWFkIGhvbGRzIGEgcmVmZXJlbmNlCisgICAgLy8gdG8gdGhvc2Ugc3RyaW5ncy4KKyAgICBw
b3N0VGFzayhbdGhpcywgcHJpbWFyeURvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdURk1v
dmUocHJpbWFyeURvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyksIG9wZW5lclBhZ2VJRCwgb3Bl
bmVyUHJpbWFyeURvbWFpbiA9IFdURk1vdmUob3BlbmVyUHJpbWFyeURvbWFpbildKCkgbXV0YWJs
ZSB7CisgICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICAgICAgbV9tZW1vcnlTdG9y
ZS0+cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihXVEZNb3ZlKHByaW1hcnlEb21haW5J
bk5lZWRPZlN0b3JhZ2VBY2Nlc3MpLCBvcGVuZXJQYWdlSUQsIFdURk1vdmUob3BlbmVyUHJpbWFy
eURvbWFpbikpOworICAgIH0pOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKFN0cmluZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYg
dG9wRnJhbWVIb3N0LCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNl
cldhc1Byb21wdGVkTm93LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgcG9zdFRh
c2soW3RoaXMsIHN1YkZyYW1lSG9zdCA9IGNyb3NzVGhyZWFkQ29weShzdWJGcmFtZUhvc3QpLCB0
b3BGcmFtZUhvc3QgPSBjcm9zc1RocmVhZENvcHkodG9wRnJhbWVIb3N0KSwgZnJhbWVJRCwgcGFn
ZUlELCB1c2VyV2FzUHJvbXB0ZWROb3csIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUp
IHsKKyAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgbV9tZW1vcnlTdG9yZS0+Z3JhbnRTdG9yYWdlQWNjZXNz
KFdURk1vdmUoc3ViRnJhbWVIb3N0KSwgV1RGTW92ZSh0b3BGcmFtZUhvc3QpLCBmcmFtZUlELCBw
YWdlSUQsIHVzZXJXYXNQcm9tcHRlZE5vdywgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKGJvb2wgd2FzR3JhbnRlZEFjY2VzcykgbXV0YWJsZSB7CisgICAg
ICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCB3YXNHcmFudGVkQWNjZXNzXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcih3YXNHcmFudGVkQWNjZXNzKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmNhbGxHcmFudFN0b3JhZ2VBY2Nlc3NIYW5kbGVyKGNvbnN0IFN0cmluZyYgc3Vi
RnJhbWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwg
T3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOworCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKKyAgICBpZiAo
bV93ZWJzaXRlRGF0YVN0b3JlKSB7CisgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+Z3JhbnRT
dG9yYWdlQWNjZXNzSGFuZGxlcihzdWJGcmFtZVByaW1hcnlEb21haW4sIHRvcEZyYW1lUHJpbWFy
eURvbWFpbiwgZnJhbWVJRCwgcGFnZUlELCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBjYWxsYmFjayhmYWxzZSk7Cit9CisKK3ZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpCit7
CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHBvc3RUYXNrKFt0aGlzXSB7
CisgICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgbV9tZW1vcnlTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICB9KTsKK30K
Kwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZUFsbFN0b3JhZ2VB
Y2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorewor
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9B
RF9TVEFUSVNUSUNTKQorICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCisgICAgICAgIG1fd2Vi
c2l0ZURhdGFTdG9yZS0+cmVtb3ZlQWxsU3RvcmFnZUFjY2Vzc0hhbmRsZXIoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOworICAgIGVsc2UKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
KyNlbHNlCisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YXBwbGljYXRpb25XaWxsVGVybWluYXRlKCkKK3sK
KyAgICBmbHVzaEFuZERlc3Ryb3lQZXJzaXN0ZW50U3RvcmUoKTsKK30KKwordm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBlcmZvcm1EYWlseVRhc2tzKCkKK3sKKyAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgcG9zdFRhc2soW3RoaXNdIHsKKyAgICAgICAg
aWYgKCFtX21lbW9yeVN0b3JlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fbWVt
b3J5U3RvcmUtPmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCk7CisgICAg
ICAgIG1fbWVtb3J5U3RvcmUtPmNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpOworICAgIH0p
OworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3VibWl0VGVsZW1l
dHJ5KCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgcG9zdFRhc2so
W3RoaXNdIHsKKyAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgICAgICBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpjYWxjdWxhdGVBbmRTdWJtaXQoKm1fbWVtb3J5
U3RvcmUpOworICAgIH0pOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFdlYkZyYW1lUHJveHkmIGZyYW1lLCBjb25zdCBV
UkwmIHBhZ2VVUkwsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgVVJMJiByZWRpcmVjdFVSTCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgYXV0byBzb3VyY2VVUkwgPSByZWRpcmVjdFVSTDsKKyAgICBib29sIGlzUmVkaXJlY3Qg
PSAhcmVkaXJlY3RVUkwuaXNOdWxsKCk7CisgICAgaWYgKCFpc1JlZGlyZWN0KSB7CisgICAgICAg
IHNvdXJjZVVSTCA9IGZyYW1lLnVybCgpOworICAgICAgICBpZiAoc291cmNlVVJMLmlzTnVsbCgp
KQorICAgICAgICAgICAgc291cmNlVVJMID0gcGFnZVVSTDsKKyAgICB9CisKKyAgICBhdXRvJiB0
YXJnZXRVUkwgPSByZXF1ZXN0LnVybCgpOworCisgICAgaWYgKCF0YXJnZXRVUkwuaXNWYWxpZCgp
IHx8ICFwYWdlVVJMLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB0YXJn
ZXRIb3N0ID0gdGFyZ2V0VVJMLmhvc3QoKTsKKyAgICBhdXRvIG1haW5GcmFtZUhvc3QgPSBwYWdl
VVJMLmhvc3QoKTsKKworICAgIGlmICh0YXJnZXRIb3N0LmlzRW1wdHkoKSB8fCBtYWluRnJhbWVI
b3N0LmlzRW1wdHkoKSB8fCB0YXJnZXRIb3N0ID09IHNvdXJjZVVSTC5ob3N0KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGF1dG8gdGFyZ2V0UHJpbWFyeURvbWFpbiA9IFJlc291cmNlTG9hZFN0
YXRpc3RpY3M6OnByaW1hcnlEb21haW4odGFyZ2V0VVJMKTsKKyAgICBhdXRvIG1haW5GcmFtZVBy
aW1hcnlEb21haW4gPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpwcmltYXJ5RG9tYWluKHBhZ2VV
UkwpOworICAgIGF1dG8gc291cmNlUHJpbWFyeURvbWFpbiA9IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M6OnByaW1hcnlEb21haW4oc291cmNlVVJMKTsKKworICAgIHBvc3RUYXNrKFt0aGlzLCB0YXJn
ZXRQcmltYXJ5RG9tYWluID0gdGFyZ2V0UHJpbWFyeURvbWFpbi5pc29sYXRlZENvcHkoKSwgbWFp
bkZyYW1lUHJpbWFyeURvbWFpbiA9IG1haW5GcmFtZVByaW1hcnlEb21haW4uaXNvbGF0ZWRDb3B5
KCksIHNvdXJjZVByaW1hcnlEb21haW4gPSBzb3VyY2VQcmltYXJ5RG9tYWluLmlzb2xhdGVkQ29w
eSgpLCB0YXJnZXRIb3N0ID0gdGFyZ2V0SG9zdC50b1N0cmluZygpLmlzb2xhdGVkQ29weSgpLCBt
YWluRnJhbWVIb3N0ID0gbWFpbkZyYW1lSG9zdC50b1N0cmluZygpLmlzb2xhdGVkQ29weSgpLCBp
c1JlZGlyZWN0LCBpc01haW5GcmFtZSA9IGZyYW1lLmlzTWFpbkZyYW1lKCldIHsKKyAgICAgICAg
CisgICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+
bG9nRnJhbWVOYXZpZ2F0aW9uKHRhcmdldFByaW1hcnlEb21haW4sIG1haW5GcmFtZVByaW1hcnlE
b21haW4sIHNvdXJjZVByaW1hcnlEb21haW4sIHRhcmdldEhvc3QsIG1haW5GcmFtZUhvc3QsIGlz
UmVkaXJlY3QsIGlzTWFpbkZyYW1lKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAodXJsLnByb3RvY29sSXNBYm91dCgpIHx8
IHVybC5pc0VtcHR5KCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5RG9tYWluID0gaXNv
bGF0ZWRQcmltYXJ5RG9tYWluKHVybCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQor
ICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+bG9nVXNlckludGVyYWN0aW9uKHByaW1hcnlEb21h
aW4pOworICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
KyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFy
VXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgIGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkgfHwgdXJsLmlzRW1wdHkoKSkgeworICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
cG9zdFRhc2soW3RoaXMsIHByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odXJs
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlIHsKKyAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgICAgICBtX21lbW9yeVN0
b3JlLT5jbGVhclVzZXJJbnRlcmFjdGlvbihwcmltYXJ5RG9tYWluKTsKKyAgICAgICAgcG9zdFRh
c2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgfSk7Cit9CisKK3ZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKGJvb2wpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAodXJs
LnByb3RvY29sSXNBYm91dCgpIHx8IHVybC5pc0VtcHR5KCkpIHsKKyAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcG9zdFRhc2so
W3RoaXMsIHByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odXJsKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Cisg
ICAgICAgIGJvb2wgaGFkVXNlckludGVyYWN0aW9uID0gbV9tZW1vcnlTdG9yZSA/IG1fbWVtb3J5
U3RvcmUtPmhhc0hhZFVzZXJJbnRlcmFjdGlvbihwcmltYXJ5RG9tYWluKSA6IGZhbHNlOworICAg
ICAgICBwb3N0VGFza1JlcGx5KFtoYWRVc2VySW50ZXJhY3Rpb24sIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoaGFkVXNlckludGVyYWN0aW9uKTsKKyAgICAgICAgfSk7CisgICAg
fSk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRMYXN0U2Vl
bihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkgfHwgdXJsLmlzRW1wdHkoKSkgewor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgcG9zdFRhc2soW3RoaXMsIHByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4o
dXJsKSwgc2Vjb25kcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgICAg
ICBtX21lbW9yeVN0b3JlLT5zZXRMYXN0U2VlbihwcmltYXJ5RG9tYWluLCBzZWNvbmRzKTsKKyAg
ICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgfSk7
Cit9CisgICAgCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgaWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwuaXNFbXB0eSgpKSB7CisgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwb3N0
VGFzayhbdGhpcywgcHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih1cmwpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
eworICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUt
PnNldFByZXZhbGVudFJlc291cmNlKHByaW1hcnlEb21haW4pOworICAgICAgICBwb3N0VGFza1Jl
cGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25z
dCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAodXJsLnByb3Rv
Y29sSXNBYm91dCgpIHx8IHVybC5pc0VtcHR5KCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHBvc3RUYXNrKFt0aGlzLCBwcmlt
YXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHVybCksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICht
X21lbW9yeVN0b3JlKQorICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0VmVyeVByZXZhbGVu
dFJlc291cmNlKHByaW1hcnlEb21haW4pOworICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICB9KTsKK30KKyAgICAKK3ZvaWQgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBwb3N0VGFzayhbdGhpcywgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Cisg
ICAgICAgIFN0cmluZyByZXN1bHQgPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+ZHVt
cFJlc291cmNlTG9hZFN0YXRpc3RpY3MoKSA6IGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHBvc3RU
YXNrUmVwbHkoW3Jlc3VsdCA9IHJlc3VsdC5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHQpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwor
dm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2Uo
Y29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKGJvb2wpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAo
dXJsLnByb3RvY29sSXNBYm91dCgpIHx8IHVybC5pc0VtcHR5KCkpIHsKKyAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcG9zdFRh
c2soW3RoaXMsIHByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odXJsKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7
CisgICAgICAgIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZSA9IG1fbWVtb3J5U3RvcmUgPyBtX21l
bW9yeVN0b3JlLT5pc1ByZXZhbGVudFJlc291cmNlKHByaW1hcnlEb21haW4pIDogZmFsc2U7Cisg
ICAgICAgIHBvc3RUYXNrUmVwbHkoW2lzUHJldmFsZW50UmVzb3VyY2UsIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoaXNQcmV2YWxlbnRSZXNvdXJjZSk7CisgICAgICAgIH0pOwor
ICAgIH0pOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNWZXJ5
UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkgfHwgdXJsLmlzRW1wdHkoKSkg
eworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgcG9zdFRhc2soW3RoaXMsIHByaW1hcnlEb21haW4gPSBpc29sYXRlZFBy
aW1hcnlEb21haW4odXJsKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIGJvb2wgaXNWZXJ5UHJldmFsZW50UmVzb3Vy
Y2UgPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNWZXJ5UHJldmFsZW50UmVzb3Vy
Y2UocHJpbWFyeURvbWFpbikgOiBmYWxzZTsKKyAgICAgICAgcG9zdFRhc2tSZXBseShbaXNWZXJ5
UHJldmFsZW50UmVzb3VyY2UsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaXNW
ZXJ5UHJldmFsZW50UmVzb3VyY2UpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VV
bmRlcihjb25zdCBVUkwmIHN1YnJlc291cmNlLCBjb25zdCBVUkwmIHRvcEZyYW1lLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CisgICAgCisgICAgcG9zdFRhc2soW3RoaXMsIHN1YnJlc291
cmNlUHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbihzdWJyZXNvdXJjZSksIHRv
cEZyYW1lUHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih0b3BGcmFtZSksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUg
eworICAgICAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciA9IG1fbWVtb3J5
U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoc3Vi
cmVzb3VyY2VQcmltYXJ5RG9tYWluLCB0b3BGcmFtZVByaW1hcnlEb21haW4pIDogZmFsc2U7Cisg
ICAgICAgIHBvc3RUYXNrUmVwbHkoW2lzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7
CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBVUkwmIHN1
YkZyYW1lLCBjb25zdCBVUkwmIHRvcEZyYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChib29s
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgcG9zdFRhc2soW3RoaXMsIHN1YkZyYW1lUHJpbWFyeURvbWFpbiA9IGlzb2xhdGVk
UHJpbWFyeURvbWFpbihzdWJGcmFtZSksIHRvcEZyYW1lUHJpbWFyeURvbWFpbiA9IGlzb2xhdGVk
UHJpbWFyeURvbWFpbih0b3BGcmFtZSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICBib29sIGlzUmVnaXN0ZXJlZEFz
U3ViRnJhbWVVbmRlciA9IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc1JlZ2lzdGVy
ZWRBc1N1YkZyYW1lVW5kZXIoc3ViRnJhbWVQcmltYXJ5RG9tYWluLCB0b3BGcmFtZVByaW1hcnlE
b21haW4pIDogZmFsc2U7CisgICAgICAgIHBvc3RUYXNrUmVwbHkoW2lzUmVnaXN0ZXJlZEFzU3Vi
RnJhbWVVbmRlciwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihpc1JlZ2lzdGVy
ZWRBc1N1YkZyYW1lVW5kZXIpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhj
b25zdCBVUkwmIGhvc3RSZWRpcmVjdGVkRnJvbSwgY29uc3QgVVJMJiBob3N0UmVkaXJlY3RlZFRv
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sK
KyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgcG9zdFRhc2soW3RoaXMsIGhv
c3RSZWRpcmVjdGVkRnJvbVByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4oaG9z
dFJlZGlyZWN0ZWRGcm9tKSwgaG9zdFJlZGlyZWN0ZWRUb1ByaW1hcnlEb21haW4gPSBpc29sYXRl
ZFByaW1hcnlEb21haW4oaG9zdFJlZGlyZWN0ZWRUbyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICBib29sIGlzUmVn
aXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyA9IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5p
c1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oaG9zdFJlZGlyZWN0ZWRGcm9tUHJpbWFyeURvbWFp
biwgaG9zdFJlZGlyZWN0ZWRUb1ByaW1hcnlEb21haW4pIDogZmFsc2U7CisgICAgICAgIHBvc3RU
YXNrUmVwbHkoW2lzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbywgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8pOworICAgICAgICB9
KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNs
ZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgaWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwuaXNFbXB0eSgpKSB7
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBwb3N0VGFzayhbdGhpcywgcHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFp
bih1cmwpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgeworICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVt
b3J5U3RvcmUtPmNsZWFyUHJldmFsZW50UmVzb3VyY2UocHJpbWFyeURvbWFpbik7CisgICAgICAg
IHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIH0pOworfQor
Cit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChj
b25zdCBVUkwmIHVybCwgYm9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgaWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBwb3N0VGFzayhbdGhpcywgcHJpbWFyeURvbWFpbiA9IGlz
b2xhdGVkUHJpbWFyeURvbWFpbih1cmwpLCB2YWx1ZV0geworICAgICAgICBpZiAobV9tZW1vcnlT
dG9yZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldEdyYW5kZmF0aGVyZWQocHJpbWFy
eURvbWFpbiwgdmFsdWUpOworICAgIH0pOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkIChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwu
aXNFbXB0eSgpKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBwcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmlt
YXJ5RG9tYWluKHVybCldICgpIG11dGFibGUgeworICAgICAgICBib29sIGlzR3JhbmRGYXRoZXJl
ZCA9IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc0dyYW5kZmF0aGVyZWQocHJpbWFy
eURvbWFpbikgOiBmYWxzZTsKKyAgICAgICAgcG9zdFRhc2tSZXBseShbaXNHcmFuZEZhdGhlcmVk
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRh
YmxlIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGlzR3JhbmRGYXRoZXJlZCk7Cisg
ICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0IFVSTCYgc3ViZnJhbWUs
IGNvbnN0IFVSTCYgdG9wRnJhbWUpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgIGlmIChzdWJmcmFtZS5wcm90b2NvbElzQWJvdXQoKSB8fCBzdWJmcmFtZS5pc0VtcHR5
KCkgfHwgdG9wRnJhbWUucHJvdG9jb2xJc0Fib3V0KCkgfHwgdG9wRnJhbWUuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBwb3N0VGFzayhbdGhpcywgcHJpbWFyeVRvcEZyYW1lRG9t
YWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHRvcEZyYW1lKSwgcHJpbWFyeVN1YkZyYW1lRG9t
YWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHN1YmZyYW1lKV0geworICAgICAgICBpZiAobV9t
ZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFN1YmZyYW1lVW5kZXJU
b3BGcmFtZU9yaWdpbihwcmltYXJ5U3ViRnJhbWVEb21haW4sIHByaW1hcnlUb3BGcmFtZURvbWFp
bik7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpz
ZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgVVJMJiBzdWJyZXNvdXJjZSwg
Y29uc3QgVVJMJiB0b3BGcmFtZSkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgaWYgKHN1YnJlc291cmNlLnByb3RvY29sSXNBYm91dCgpIHx8IHN1YnJlc291cmNlLmlz
RW1wdHkoKSB8fCB0b3BGcmFtZS5wcm90b2NvbElzQWJvdXQoKSB8fCB0b3BGcmFtZS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5VG9wRnJh
bWVEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odG9wRnJhbWUpLCBwcmltYXJ5U3VicmVz
b3VyY2VEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4oc3VicmVzb3VyY2UpXSB7CisgICAg
ICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0U3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbiwgcHJp
bWFyeVRvcEZyYW1lRG9tYWluKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwm
IHN1YnJlc291cmNlLCBjb25zdCBVUkwmIGhvc3ROYW1lUmVkaXJlY3RlZFRvKQoreworICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoc3VicmVzb3VyY2UucHJvdG9jb2xJ
c0Fib3V0KCkgfHwgc3VicmVzb3VyY2UuaXNFbXB0eSgpIHx8IGhvc3ROYW1lUmVkaXJlY3RlZFRv
LnByb3RvY29sSXNBYm91dCgpIHx8IGhvc3ROYW1lUmVkaXJlY3RlZFRvLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgcG9zdFRhc2soW3RoaXMsIHByaW1hcnlSZWRpcmVjdERvbWFp
biA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbihob3N0TmFtZVJlZGlyZWN0ZWRUbyksIHByaW1hcnlT
dWJyZXNvdXJjZURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbihzdWJyZXNvdXJjZSldIHsK
KyAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5z
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJpbWFyeVN1YnJlc291cmNlRG9tYWluLCBw
cmltYXJ5UmVkaXJlY3REb21haW4pOworICAgIH0pOworfQorCit2b2lkIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3Qg
VVJMJiBzdWJyZXNvdXJjZSwgY29uc3QgVVJMJiBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tKQorewor
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoc3VicmVzb3VyY2UucHJv
dG9jb2xJc0Fib3V0KCkgfHwgc3VicmVzb3VyY2UuaXNFbXB0eSgpIHx8IGhvc3ROYW1lUmVkaXJl
Y3RlZEZyb20ucHJvdG9jb2xJc0Fib3V0KCkgfHwgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBwb3N0VGFzayhbdGhpcywgcHJpbWFy
eVJlZGlyZWN0RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKGhvc3ROYW1lUmVkaXJlY3Rl
ZEZyb20pLCBwcmltYXJ5U3VicmVzb3VyY2VEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4o
c3VicmVzb3VyY2UpXSB7CisgICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICAgICAg
bV9tZW1vcnlTdG9yZS0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20ocHJpbWFyeVN1
YnJlc291cmNlRG9tYWluLCBwcmltYXJ5UmVkaXJlY3REb21haW4pOworICAgIH0pOworfQorCit2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRp
cmVjdFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVIb3N0TmFtZSwgY29uc3QgVVJMJiBob3N0TmFtZVJl
ZGlyZWN0ZWRUbykKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYg
KHRvcEZyYW1lSG9zdE5hbWUucHJvdG9jb2xJc0Fib3V0KCkgfHwgdG9wRnJhbWVIb3N0TmFtZS5p
c0VtcHR5KCkgfHwgaG9zdE5hbWVSZWRpcmVjdGVkVG8ucHJvdG9jb2xJc0Fib3V0KCkgfHwgaG9z
dE5hbWVSZWRpcmVjdGVkVG8uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
cG9zdFRhc2soW3RoaXMsIHByaW1hcnlSZWRpcmVjdERvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURv
bWFpbihob3N0TmFtZVJlZGlyZWN0ZWRUbyksIHRvcEZyYW1lUHJpbWFyeURvbWFpbiA9IGlzb2xh
dGVkUHJpbWFyeURvbWFpbih0b3BGcmFtZUhvc3ROYW1lKV0geworICAgICAgICBpZiAobV9tZW1v
cnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RUbyh0b3BGcmFtZVByaW1hcnlEb21haW4sIHByaW1hcnlSZWRpcmVjdERvbWFpbik7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZyYW1lSG9zdE5hbWUsIGNvbnN0
IFVSTCYgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOworCisgICAgaWYgKHRvcEZyYW1lSG9zdE5hbWUucHJvdG9jb2xJc0Fib3V0KCkgfHwg
dG9wRnJhbWVIb3N0TmFtZS5pc0VtcHR5KCkgfHwgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbS5wcm90
b2NvbElzQWJvdXQoKSB8fCBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5UmVkaXJlY3REb21h
aW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4oaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSksIHRvcEZy
YW1lUHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih0b3BGcmFtZUhvc3ROYW1l
KV0geworICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3Rv
cmUtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKHRvcEZyYW1lUHJpbWFyeURvbWFpbiwg
cHJpbWFyeVJlZGlyZWN0RG9tYWluKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIC8vIEhlbHBlciBm
dW5jdGlvbiB1c2VkIGJ5IHRlc3Rpbmcgc3lzdGVtLiBTaG91bGQgb25seSBiZSBjYWxsZWQgZnJv
bSB0aGUgbWFpbiB0aHJlYWQuCisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFtX21lbW9yeVN0b3JlKSB7CisgICAg
ICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX21lbW9yeVN0b3JlLT51cGRhdGVD
b29raWVCbG9ja2luZyhbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlRm9y
RG9tYWlucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvQmxvY2ssIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICAvLyBIZWxwZXIgZnVu
Y3Rpb24gdXNlZCBieSB0ZXN0aW5nIHN5c3RlbS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20g
dGhlIG1haW4gdGhyZWFkLgorICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgcG9z
dFRhc2soW3RoaXMsIGRvbWFpbnNUb0Jsb2NrID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Js
b2NrKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkg
bXV0YWJsZSB7CisgICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkgeworICAgICAgICAgICAgcG9z
dFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBtX21lbW9yeVN0b3JlLT51cGRhdGVDb29raWVCbG9j
a2luZ0ZvckRvbWFpbnMoZG9tYWluc1RvQmxvY2ssIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgcG9zdFRhc2tS
ZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgIH0pOworICAgIH0pOwor
fQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckJs
b2NraW5nU3RhdGVGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIHVzZWQgYnkgdGVzdGluZyBzeXN0ZW0uIFNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwor
ICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW5zID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnMpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKKyAgICAgICAgaWYgKCFtX21lbW9yeVN0b3JlKSB7CisgICAgICAgICAgICBwb3N0VGFza1Jl
cGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIG1fbWVtb3J5U3RvcmUtPmNsZWFyQmxvY2tpbmdTdGF0ZUZvckRv
bWFpbnMoZG9tYWlucywgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50KFNob3VsZEdyYW5kZmF0aGVyIHNob3VsZEdyYW5kZmF0aGVyLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKKyAgICBwb3N0VGFzayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBzaG91bGRHcmFuZGZhdGhlciwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChtX3BlcnNpc3RlbnRTdG9y
YWdlKQorICAgICAgICAgICAgbV9wZXJzaXN0ZW50U3RvcmFnZS0+Y2xlYXIoKTsKKworICAgICAg
ICBDb21wbGV0aW9uSGFuZGxlckNhbGxpbmdTY29wZSBjb21wbGV0aW9uSGFuZGxlckNhbGxlcihb
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
IHsKKyAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OworICAgICAgICB9KTsKKworICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkgeworICAgICAgICAg
ICAgbV9tZW1vcnlTdG9yZS0+Y2xlYXIoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBwcm90ZWN0ZWRU
aGlzLmNvcHlSZWYoKSwgc2hvdWxkR3JhbmRmYXRoZXIsIGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlckNhbGxlcildICgpIG11dGFibGUgeworICAgICAg
ICAgICAgICAgIGlmIChzaG91bGRHcmFuZGZhdGhlciA9PSBTaG91bGRHcmFuZGZhdGhlcjo6WWVz
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+Z3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRh
KGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVyLnJlbGVhc2UoKSk7CisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0
YXRpc3RpY3MsICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ2xlYXJJ
bk1lbW9yeUFuZFBlcnNpc3RlbnQgQWZ0ZXIgYmVpbmcgY2xlYXJlZCwgbV9tZW1vcnlTdG9yZSBp
cyBudWxsIHdoZW4gdHJ5aW5nIHRvIGdyYW5kZmF0aGVyIGRhdGEuIik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAo
c2hvdWxkR3JhbmRmYXRoZXIgPT0gU2hvdWxkR3JhbmRmYXRoZXI6OlllcykKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50IEJlZm9y
ZSBiZWluZyBjbGVhcmVkLCBtX21lbW9yeVN0b3JlIGlzIG51bGwgd2hlbiB0cnlpbmcgdG8gZ3Jh
bmRmYXRoZXIgZGF0YS4iKTsKKyAgICAgICAgfQorICAgIH0pOworfQorCit2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVu
dChXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBTaG91bGRHcmFuZGZhdGhlciBzaG91bGRHcmFuZGZh
dGhlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQoreworICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICAvLyBGb3Igbm93LCBiZSBjb25zZXJ2YXRpdmUg
YW5kIGNsZWFyIGV2ZXJ5dGhpbmcgcmVnYXJkbGVzcyBvZiBtb2RpZmllZFNpbmNlLgorICAgIFVO
VVNFRF9QQVJBTShtb2RpZmllZFNpbmNlKTsKKyAgICBzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQ
ZXJzaXN0ZW50KHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Cit9CisKK3Zv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVy
YWN0aW9uKFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OworICAgIHBvc3RUYXNrKFt0aGlzLCBzZWNvbmRzXSB7CisgICAgICAgIGlmIChtX21lbW9yeVN0
b3JlKQorICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFj
dGlvbihzZWNvbmRzKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRz
IHNlY29uZHMpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBwb3N0VGFz
ayhbdGhpcywgc2Vjb25kc10geworICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAg
ICAgIG1fbWVtb3J5U3RvcmUtPnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3Zh
bChzZWNvbmRzKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMpCit7CisgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBwb3N0VGFzayhbdGhpcywgc2Vjb25kc10gewor
ICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNl
dEdyYW5kZmF0aGVyaW5nVGltZShzZWNvbmRzKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwKFNlY29uZHMgc2Vjb25k
cywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsK
KyAgICAKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorICAgIGlmIChtX3dl
YnNpdGVEYXRhU3RvcmUpIHsKKyAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5zZXRDYWNoZU1h
eEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhzZWNvbmRzLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBjb21wbGV0aW9u
SGFuZGxlcigpOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2Fs
bFVwZGF0ZVByZXZhbGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0ZvckhhbmRsZXIoY29uc3QgVmVj
dG9yPFN0cmluZz4mIGRvbWFpbnNUb0Jsb2NrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
I2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCisgICAgaWYgKG1fd2Vic2l0ZURh
dGFTdG9yZSkgeworICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPnVwZGF0ZVByZXZhbGVudERv
bWFpbnNUb0Jsb2NrQ29va2llc0Zvcihkb21haW5zVG9CbG9jaywgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNh
bGxSZW1vdmVEb21haW5zSGFuZGxlcihjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlucykKK3sK
KyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisjaWYgRU5BQkxFKFJFU09VUkNFX0xP
QURfU1RBVElTVElDUykKKyAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQorICAgICAgICBtX3dl
YnNpdGVEYXRhU3RvcmUtPnJlbW92ZVByZXZhbGVudERvbWFpbnMoZG9tYWlucyk7CisjZW5kaWYK
K30KKyAgICAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNYXhTdGF0
aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQpCit7CisgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKKyAgICBwb3N0VGFzayhbdGhpcywgbWF4aW11bUVudHJ5Q291bnRd
IHsKKyAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgICAgICBtX21lbW9yeVN0b3Jl
LT5zZXRNYXhTdGF0aXN0aWNzRW50cmllcyhtYXhpbXVtRW50cnlDb3VudCk7CisgICAgfSk7Cit9
CisgICAgCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRy
aWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50KQoreworICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CisKKyAgICBwb3N0VGFzayhbdGhpcywgcHJ1bmVUYXJnZXRDb3VudF0gewor
ICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNl
dFBydW5lRW50cmllc0Rvd25UbyhwcnVuZVRhcmdldENvdW50KTsKKyAgICB9KTsKK30KKwordm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVs
dFZhbHVlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7
CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHBvc3RUYXNrKFt0aGlzLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
eworICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUt
PnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcygpOworCisgICAgICAgIHBvc3RUYXNrUmVw
bHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIH0pOworfQorCit2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nVGVzdGluZ0V2ZW50KGNvbnN0IFN0cmluZyYg
ZXZlbnQpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChtX3N0
YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2spCisgICAgICAgIG1fc3RhdGlzdGljc1Rlc3RpbmdDYWxs
YmFjayhldmVudCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4MTcwNGE0ZWYyOTlk
YzA4M2QyNzlmNTM0Yzc3MjgxY2ZhNzZiNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmgKQEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhVHlwZS5oIgor
I2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29w
Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9XZWFr
UHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXVEYg
eworY2xhc3MgV29ya1F1ZXVlOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBSZXNv
dXJjZVJlcXVlc3Q7CitzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKK30KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTsK
K2NsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTsKK2NsYXNzIFdl
YkZyYW1lUHJveHk7CitjbGFzcyBXZWJQcm9jZXNzUHJveHk7CitjbGFzcyBXZWJzaXRlRGF0YVN0
b3JlOworCitlbnVtIGNsYXNzIFN0b3JhZ2VBY2Nlc3NTdGF0dXMgeworICAgIENhbm5vdFJlcXVl
c3RBY2Nlc3MsCisgICAgUmVxdWlyZXNVc2VyUHJvbXB0LAorICAgIEhhc0FjY2VzcworfTsKKwor
Y2xhc3MgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIGZpbmFsIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSwgV1RGOjpEZXN0
cnVjdGlvblRocmVhZDo6TWFpbj4sIHB1YmxpYyBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IGNyZWF0
ZShXZWJzaXRlRGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKHdlYnNpdGVE
YXRhU3RvcmUpKTsKKyAgICB9CisKKyAgICB+V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
KCk7CisKKyAgICBzdGF0aWMgY29uc3QgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4mIG1vbml0
b3JlZERhdGFUeXBlcygpOworCisgICAgV29ya1F1ZXVlJiBzdGF0aXN0aWNzUXVldWUoKSB7IHJl
dHVybiBtX3N0YXRpc3RpY3NRdWV1ZS5nZXQoKTsgfQorCisgICAgdm9pZCBzZXROb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wpOworICAgIHZvaWQgc2V0U2hvdWxkQ2xh
c3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCk7CisgICAgdm9pZCBz
ZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkoYm9vbCk7CisKKyAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nl
c3MoU3RyaW5nJiYgc3ViRnJhbWVIb3N0LCBTdHJpbmcmJiB0b3BGcmFtZUhvc3QsIHVpbnQ2NF90
IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4m
JiBjYWxsYmFjayk7CisgICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBzdWJG
cmFtZUhvc3QsIFN0cmluZyYmIHRvcEZyYW1lSG9zdCwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0
X3QgcGFnZUlELCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3Rv
cmFnZUFjY2Vzc1N0YXR1cyk+JiYpOworICAgIHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzKFN0cmlu
ZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJhbWVIb3N0LCB1aW50NjRfdCBmcmFtZUlE
LCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93LCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmKTsKKyAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzQ2FsbGJh
Y2soYm9vbCB3YXNHcmFudGVkLCB1aW50NjRfdCBjb250ZXh0SWQpOworCisgICAgdm9pZCBhcHBs
aWNhdGlvbldpbGxUZXJtaW5hdGUoKTsKKworICAgIHZvaWQgbG9nRnJhbWVOYXZpZ2F0aW9uKGNv
bnN0IFdlYkZyYW1lUHJveHkmLCBjb25zdCBVUkwmIHBhZ2VVUkwsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IFVSTCYgcmVkaXJlY3RVUkwpOworICAgIHZvaWQgbG9nVXNl
ckludGVyYWN0aW9uKGNvbnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Cisg
ICAgdm9pZCBjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpOworICAgIHZvaWQgaGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOworICAgIHZvaWQgc2V0TGFzdFNlZW4o
Y29uc3QgVVJMJiwgU2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2
b2lkIHNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7CisgICAgdm9pZCBzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIGR1bXBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYpOworICAg
IHZvaWQgaXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wpPiYmKTsKKyAgICB2b2lkIGlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVS
TCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOworICAgIHZvaWQgaXNSZWdpc3Rl
cmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFVSTCYgc3VicmVzb3VyY2UsIGNvbnN0IFVSTCYg
dG9wRnJhbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOworICAgIHZvaWQgaXNS
ZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFVSTCYgc3ViRnJhbWUsIGNvbnN0IFVSTCYg
dG9wRnJhbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOworICAgIHZvaWQgaXNS
ZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFVSTCYgaG9zdFJlZGlyZWN0ZWRGcm9tLCBj
b25zdCBVUkwmIGhvc3RSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYpOworICAgIHZvaWQgY2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJlZChjb25zdCBV
UkwmLCBib29sKTsKKyAgICB2b2lkIGlzR3JhbmRmYXRoZXJlZChjb25zdCBVUkwmLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKKyAgICB2b2lkIHNldFN1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbihjb25zdCBVUkwmIHN1YmZyYW1lLCBjb25zdCBVUkwmIHRvcEZyYW1lKTsKKyAg
ICB2b2lkIHNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihjb25zdCBVUkwmIHN1YnJl
c291cmNlLCBjb25zdCBVUkwmIHRvcEZyYW1lKTsKKyAgICB2b2lkIHNldFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHN1YnJlc291cmNlLCBjb25zdCBVUkwmIGhvc3ROYW1l
UmVkaXJlY3RlZFRvKTsKKyAgICB2b2lkIHNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9t
KGNvbnN0IFVSTCYgc3VicmVzb3VyY2UsIGNvbnN0IFVSTCYgaG9zdE5hbWVSZWRpcmVjdGVkRnJv
bSk7CisgICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiB0b3BG
cmFtZUhvc3ROYW1lLCBjb25zdCBVUkwmIGhvc3ROYW1lUmVkaXJlY3RlZFRvKTsKKyAgICB2b2lk
IHNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVIb3N0TmFt
ZSwgY29uc3QgVVJMJiBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tKTsKKyAgICB2b2lkIHNjaGVkdWxl
Q29va2llQmxvY2tpbmdVcGRhdGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2
b2lkIHNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGVGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBkb21haW5zVG9CbG9jaywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAg
ICB2b2lkIHNjaGVkdWxlQ2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8
U3RyaW5nPiYgZG9tYWlucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lk
IHNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZygpOworICAgIHZvaWQg
c3VibWl0VGVsZW1ldHJ5KCk7CisKKyAgICBlbnVtIGNsYXNzIFNob3VsZEdyYW5kZmF0aGVyIHsK
KyAgICAgICAgTm8sCisgICAgICAgIFllcywKKyAgICB9OworICAgIHZvaWQgc2NoZWR1bGVDbGVh
ckluTWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRHcmFuZGZhdGhlciwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3Rl
bnQoV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgU2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CisKKyAgICB2b2lkIHNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rp
b24oU2Vjb25kcyk7CisgICAgdm9pZCBzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1Jl
bW92YWwoU2Vjb25kcyk7CisgICAgdm9pZCBzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyk7
CisgICAgdm9pZCBzZXRDYWNoZU1heEFnZUNhcChTZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOworICAgIHZvaWQgc2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90KTsKKyAg
ICB2b2lkIHNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QpOworCisgICAgdm9pZCByZXNldFBh
cmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKwor
ICAgIHZvaWQgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2VGb3JE
ZWJ1Z01vZGUoY29uc3QgVVJMJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICAK
KyAgICB2b2lkIHNldFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soV1RGOjpGdW5jdGlvbjx2b2lk
KGNvbnN0IFN0cmluZyYpPiYmIGNhbGxiYWNrKSB7IG1fc3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spOyB9CisgICAgdm9pZCBsb2dUZXN0aW5nRXZlbnQoY29uc3Qg
U3RyaW5nJik7CisgICAgdm9pZCBjYWxsR3JhbnRTdG9yYWdlQWNjZXNzSGFuZGxlcihjb25zdCBT
dHJpbmcmIHN1YkZyYW1lUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1h
cnlEb21haW4sIE9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOworICAgIHZvaWQgcmVtb3ZlQWxsU3RvcmFn
ZUFjY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgY2FsbFVwZGF0
ZVByZXZhbGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0ZvckhhbmRsZXIoY29uc3QgVmVjdG9yPFN0
cmluZz4mIGRvbWFpbnNUb0Jsb2NrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAg
IHZvaWQgY2FsbFJlbW92ZURvbWFpbnNIYW5kbGVyKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21h
aW5zKTsKKyAgICB2b2lkIGNhbGxIYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyKGNvbnN0
IFN0cmluZyYgcmVzb3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYgZmlyc3RQYXJ0eURvbWFpbiwg
dWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmKTsKKworICAgIHZvaWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKKworICAg
IFdlYnNpdGVEYXRhU3RvcmUqIHdlYnNpdGVEYXRhU3RvcmUoKSB7IHJldHVybiBtX3dlYnNpdGVE
YXRhU3RvcmUuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUoV2Vic2l0ZURhdGFTdG9yZSYpOworCisgICAgdm9pZCBwb3N0VGFz
ayhXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJik7CisgICAgc3RhdGljIHZvaWQgcG9zdFRhc2tSZXBs
eShXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJik7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZl
ci4KKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVj
b2RlciYpIG92ZXJyaWRlOworCisgICAgLy8gSVBDIG1lc3NhZ2UgaGFuZGxlcnMuCisgICAgdm9p
ZCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzVXBkYXRlZChWZWN0b3I8V2ViQ29yZTo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljcz4mJiBvcmlnaW5zKTsKKyAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNz
VW5kZXJPcGVuZXIoU3RyaW5nJiYgcHJpbWFyeURvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcywg
dWludDY0X3Qgb3BlbmVyUGFnZUlELCBTdHJpbmcmJiBvcGVuZXJQcmltYXJ5RG9tYWluKTsKKwor
ICAgIHZvaWQgcGVyZm9ybURhaWx5VGFza3MoKTsKKworICAgIFN0b3JhZ2VBY2Nlc3NTdGF0dXMg
c3RvcmFnZUFjY2Vzc1N0YXR1cyhjb25zdCBTdHJpbmcmIHN1YkZyYW1lUHJpbWFyeURvbWFpbiwg
Y29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1hcnlEb21haW4pOworCisgICAgdm9pZCBmbHVzaEFu
ZERlc3Ryb3lQZXJzaXN0ZW50U3RvcmUoKTsKKworICAgIFdlYWtQdHI8V2Vic2l0ZURhdGFTdG9y
ZT4gbV93ZWJzaXRlRGF0YVN0b3JlOworICAgIFJlZjxXb3JrUXVldWU+IG1fc3RhdGlzdGljc1F1
ZXVlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU+IG1fbWVtb3J5U3RvcmU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlc291cmNlTG9hZFN0YXRp
c3RpY3NQZXJzaXN0ZW50U3RvcmFnZT4gbV9wZXJzaXN0ZW50U3RvcmFnZTsKKworICAgIFJ1bkxv
b3A6OlRpbWVyPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gbV9kYWlseVRhc2tzVGlt
ZXI7CisKKyAgICBib29sIG1faGFzU2NoZWR1bGVkUHJvY2Vzc1N0YXRzIHsgZmFsc2UgfTsKKwor
ICAgIFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4gbV9zdGF0aXN0aWNzVGVzdGlu
Z0NhbGxiYWNrOworCisgICAgYm9vbCBtX2ZpcnN0TmV0d29ya1Byb2Nlc3NDcmVhdGVkIHsgZmFs
c2UgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnkuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5NjkyZTEy
OTEyYTZjMWMwOThkM2I5ZjYwODA0YWUyZmYzN2RmOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1RlbGVtZXRyeS5jcHAKQEAgLTAsMCArMSwyOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRy
eS5oIgorCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmgiCisj
aW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxv
b3AuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NvbnN0IHVuc2lnbmVkIG1pbmlt
dW1QcmV2YWxlbnRSZXNvdXJjZXNGb3JUZWxlbWV0cnkgPSAzOworY29uc3QgdW5zaWduZWQgc2ln
bmlmaWNhbnRGaWd1cmVzRm9yTG9nZ2VkVmFsdWVzID0gMzsKK3N0YXRpYyBib29sIG5vdGlmeVBh
Z2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkID0gZmFsc2U7CisKK3N0cnVjdCBQcmV2YWxlbnRS
ZXNvdXJjZVRlbGVtZXRyeSB7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRz
UmVtb3ZlZDsKKyAgICBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbjsKKyAgICB1bnNpZ25lZCBk
YXlzU2luY2VVc2VySW50ZXJhY3Rpb247CisgICAgdW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZy
YW1lT3JpZ2luczsKKyAgICB1bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5z
OworICAgIHVuc2lnbmVkIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG87CisgICAgdW5zaWdu
ZWQgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uOworICAgIHVu
c2lnbmVkIHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEk7Cit9
OworCitzdGF0aWMgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiBzb3J0ZWRQcmV2
YWxlbnRSZXNvdXJjZVRlbGVtZXRyeShjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmUmIHN0b3JlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIFZl
Y3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4gc29ydGVkOworICAgIHN0b3JlLnByb2Nl
c3NTdGF0aXN0aWNzKFsmc29ydGVkXSAoYXV0byYgc3RhdGlzdGljKSB7CisgICAgICAgIGlmICgh
c3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgdW5zaWduZWQgZGF5c1NpbmNlVXNlckludGVyYWN0aW9uID0gc3RhdGlzdGljLm1vc3RS
ZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIDw9IFdhbGxUaW1lKCkgPyAwIDogc3RkOjpmbG9vcigo
V2FsbFRpbWU6Om5vdygpIC0gc3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1l
KSAvIDI0X2gpOworICAgICAgICBzb3J0ZWQuYXBwZW5kKFByZXZhbGVudFJlc291cmNlVGVsZW1l
dHJ5IHsKKyAgICAgICAgICAgIHN0YXRpc3RpYy5kYXRhUmVjb3Jkc1JlbW92ZWQsCisgICAgICAg
ICAgICBzdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uLAorICAgICAgICAgICAgZGF5c1NpbmNl
VXNlckludGVyYWN0aW9uLAorICAgICAgICAgICAgc3RhdGlzdGljLnN1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbnMuc2l6ZSgpLAorICAgICAgICAgICAgc3RhdGlzdGljLnN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZU9yaWdpbnMuc2l6ZSgpLAorICAgICAgICAgICAgc3RhdGlzdGljLnN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG8uc2l6ZSgpLAorICAgICAgICAgICAgc3RhdGlzdGljLnRpbWVz
QWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbiwKKyAgICAgICAgICAgIHN0
YXRpc3RpYy50aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJCisg
ICAgICAgIH0pOworICAgIH0pOworCisgICAgaWYgKHNvcnRlZC5zaXplKCkgPCBtaW5pbXVtUHJl
dmFsZW50UmVzb3VyY2VzRm9yVGVsZW1ldHJ5KQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
c3RkOjpzb3J0KHNvcnRlZC5iZWdpbigpLCBzb3J0ZWQuZW5kKCksIFtdKGNvbnN0IFByZXZhbGVu
dFJlc291cmNlVGVsZW1ldHJ5JiBhLCBjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYg
YikgeworICAgICAgICByZXR1cm4gYS5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zICsgYS5z
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zICsgYS5zdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvID4KKyAgICAgICAgYi5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zICsgYi5zdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zICsgYi5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvOworICAgIH0pOworCisgICAgcmV0dXJuIHNvcnRlZDsKK30KKworc3RhdGljIHVuc2lnbmVk
IG51bWJlck9mUmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbihjb25zdCBWZWN0b3I8UHJldmFs
ZW50UmVzb3VyY2VUZWxlbWV0cnk+JiByZXNvdXJjZXMsIHNpemVfdCBiZWdpbiwgc2l6ZV90IGVu
ZCkKK3sKKyAgICBpZiAocmVzb3VyY2VzLmlzRW1wdHkoKSB8fCByZXNvdXJjZXMuc2l6ZSgpIDwg
YmVnaW4gKyAxIHx8IHJlc291cmNlcy5zaXplKCkgPCBlbmQgKyAxKQorICAgICAgICByZXR1cm4g
MDsKKyAgICAKKyAgICB1bnNpZ25lZCByZXN1bHQgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSBi
ZWdpbjsgaSA8IGVuZDsgKytpKSB7CisgICAgICAgIGlmIChyZXNvdXJjZXNbaV0uaGFzSGFkVXNl
ckludGVyYWN0aW9uKQorICAgICAgICAgICAgKytyZXN1bHQ7CisgICAgfQorICAgIAorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisgICAgCitzdGF0aWMgdW5zaWduZWQgbWVkaWFuKGNvbnN0IFZlY3Rv
cjx1bnNpZ25lZD4mIHYpCit7CisgICAgaWYgKHYuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
MDsKKyAgICBpZiAodi5zaXplKCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIHZbMF07CisgICAgCisg
ICAgYXV0byBzaXplID0gdi5zaXplKCk7CisgICAgYXV0byBtaWRkbGUgPSBzaXplIC8gMjsKKyAg
ICBpZiAoc2l6ZSAlIDIpCisgICAgICAgIHJldHVybiB2W21pZGRsZV07CisgICAgcmV0dXJuICh2
W21pZGRsZSAtIDFdICsgdlttaWRkbGVdKSAvIDI7Cit9CisgICAgCitzdGF0aWMgdW5zaWduZWQg
bWVkaWFuKGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHYsIHVuc2ln
bmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQsIGNvbnN0IFdURjo6RnVuY3Rpb248dW5zaWduZWQoY29u
c3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+JiBzdGF0aXN0aWNHZXR0
ZXIpCit7CisgICAgaWYgKHYuaXNFbXB0eSgpIHx8IHYuc2l6ZSgpIDwgYmVnaW4gKyAxIHx8IHYu
c2l6ZSgpIDwgZW5kICsgMSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgVmVjdG9yPHVu
c2lnbmVkPiBwYXJ0OworICAgIHBhcnQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShlbmQgLSBiZWdp
biArIDEpOworICAgIGZvciAodW5zaWduZWQgaSA9IGJlZ2luOyBpIDw9IGVuZDsgKytpKQorICAg
ICAgICBwYXJ0LnVuY2hlY2tlZEFwcGVuZChzdGF0aXN0aWNHZXR0ZXIodltpXSkpOworICAgIAor
ICAgIHJldHVybiBtZWRpYW4ocGFydCk7Cit9CisgICAgCitzdGF0aWMgV2ViUGFnZVByb3h5KiBu
b25FcGhlbWVyYWxXZWJQYWdlUHJveHkoKQoreworICAgIGF1dG8gcHJvY2Vzc1Bvb2xzID0gV2Vi
UHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpOworICAgIGlmIChwcm9jZXNzUG9vbHMuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBhdXRvIHByb2Nlc3NQ
b29sID0gcHJvY2Vzc1Bvb2xzWzBdOworICAgIGlmICghcHJvY2Vzc1Bvb2wpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIAorICAgIGZvciAoYXV0byYgd2ViUHJvY2VzcyA6IHByb2Nlc3NQ
b29sLT5wcm9jZXNzZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIHBhZ2UgOiB3ZWJQcm9jZXNz
LT5wYWdlcygpKSB7CisgICAgICAgICAgICBpZiAocGFnZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVy
YWwoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHJldHVybiBwYWdl
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorICAgIAorc3RhdGlj
IHZvaWQgc3VibWl0VG9wTGlzdCh1bnNpZ25lZCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3As
IGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNvcnRlZFByZXZhbGVu
dFJlc291cmNlcywgY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiYgc29y
dGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgV2ViUGFnZVByb3h5
JiB3ZWJQYWdlUHJveHkpCit7CisgICAgV1RGOjpGdW5jdGlvbjx1bnNpZ25lZChjb25zdCBQcmV2
YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdGVsZW1ldHJ5KT4gc3ViZnJhbWVVbmRlclRvcEZyYW1l
T3JpZ2luc0dldHRlciA9IFtdIChhdXRvJiB0KSB7CisgICAgICAgIHJldHVybiB0LnN1YmZyYW1l
VW5kZXJUb3BGcmFtZU9yaWdpbnM7CisgICAgfTsKKyAgICBXVEY6OkZ1bmN0aW9uPHVuc2lnbmVk
KGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkpPiBzdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVPcmlnaW5zR2V0dGVyID0gW10gKGF1dG8mIHQpIHsKKyAgICAgICAgcmV0
dXJuIHQuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luczsKKyAgICB9OworICAgIFdURjo6
RnVuY3Rpb248dW5zaWduZWQoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVt
ZXRyeSk+IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9HZXR0ZXIgPSBbXSAoYXV0byYgdCkg
eworICAgICAgICByZXR1cm4gdC5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvOworICAgIH07
CisgICAgV1RGOjpGdW5jdGlvbjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVt
ZXRyeSYgdGVsZW1ldHJ5KT4gbnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZEdldHRlciA9
IFtdIChhdXRvJiB0KSB7CisgICAgICAgIHJldHVybiB0Lm51bWJlck9mVGltZXNEYXRhUmVjb3Jk
c1JlbW92ZWQ7CisgICAgfTsKKyAgICBXVEY6OkZ1bmN0aW9uPHVuc2lnbmVkKGNvbnN0IFByZXZh
bGVudFJlc291cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkpPiBudW1iZXJPZlRpbWVzQWNjZXNzZWRB
c0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbkdldHRlciA9IFtdIChhdXRvJiB0KSB7Cisg
ICAgICAgIHJldHVybiB0LnRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFj
dGlvbjsKKyAgICB9OworICAgIFdURjo6RnVuY3Rpb248dW5zaWduZWQoY29uc3QgUHJldmFsZW50
UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRyeSk+IG51bWJlck9mVGltZXNBY2Nlc3NlZEFzRmly
c3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSUdldHRlciA9IFtdIChhdXRvJiB0KSB7CisgICAg
ICAgIHJldHVybiB0LnRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NB
UEk7CisgICAgfTsKKworICAgIHVuc2lnbmVkIHRvcFByZXZhbGVudFJlc291cmNlc1dpdGhVc2Vy
SW50ZXJhY3Rpb24gPSBudW1iZXJPZlJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24oc29ydGVk
UHJldmFsZW50UmVzb3VyY2VzLCAwLCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3AgLSAxKTsK
KyAgICB1bnNpZ25lZCB0b3BTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zID0gbWVkaWFuKHNv
cnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIG51bWJlck9m
UmVzb3VyY2VzRnJvbVRoZVRvcCAtIDEsIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNHZXR0
ZXIpOworICAgIHVuc2lnbmVkIHRvcFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMgPSBt
ZWRpYW4oc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgMCwg
bnVtYmVyT2ZSZXNvdXJjZXNGcm9tVGhlVG9wIC0gMSwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
T3JpZ2luc0dldHRlcik7CisgICAgdW5zaWduZWQgdG9wU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUbyA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0
aW9uLCAwLCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3AgLSAxLCBzdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c1RvR2V0dGVyKTsKKyAgICB1bnNpZ25lZCB0b3BOdW1iZXJPZlRpbWVzRGF0YVJl
Y29yZHNSZW1vdmVkID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2Vy
SW50ZXJhY3Rpb24sIDAsIG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRvcCAtIDEsIG51bWJlck9m
VGltZXNEYXRhUmVjb3Jkc1JlbW92ZWRHZXR0ZXIpOworICAgIHVuc2lnbmVkIHRvcE51bWJlck9m
VGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uID0gbWVkaWFuKHNv
cnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIG51bWJlck9m
UmVzb3VyY2VzRnJvbVRoZVRvcCAtIDEsIG51bWJlck9mVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0
eUR1ZVRvVXNlckludGVyYWN0aW9uR2V0dGVyKTsKKyAgICB1bnNpZ25lZCB0b3BOdW1iZXJPZlRp
bWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgPSBtZWRpYW4oc29y
dGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgMCwgbnVtYmVyT2ZS
ZXNvdXJjZXNGcm9tVGhlVG9wIC0gMSwgbnVtYmVyT2ZUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5
RHVlVG9TdG9yYWdlQWNjZXNzQVBJR2V0dGVyKTsKKworICAgIFN0cmluZ0J1aWxkZXIgcHJlYW1i
bGVCdWlsZGVyOworICAgIHByZWFtYmxlQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJ0b3AiKTsKKyAg
ICBwcmVhbWJsZUJ1aWxkZXIuYXBwZW5kTnVtYmVyKG51bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRv
cCk7CisgICAgU3RyaW5nIGRlc2NyaXB0aW9uUHJlYW1ibGUgPSBwcmVhbWJsZUJ1aWxkZXIudG9T
dHJpbmcoKTsKKyAgICAKKyAgICB3ZWJQYWdlUHJveHkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRo
VmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1l
dHJ5S2V5KCksIGRlc2NyaXB0aW9uUHJlYW1ibGUgKyAiUHJldmFsZW50UmVzb3VyY2VzV2l0aFVz
ZXJJbnRlcmFjdGlvbiIsCisgICAgICAgIHRvcFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50
ZXJhY3Rpb24sIHNpZ25pZmljYW50RmlndXJlc0ZvckxvZ2dlZFZhbHVlcywgU2hvdWxkU2FtcGxl
OjpObyk7CisgICAgd2ViUGFnZVByb3h5LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERp
YWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgp
LCBkZXNjcmlwdGlvblByZWFtYmxlICsgIlN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMiLAor
ICAgICAgICB0b3BTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLCBzaWduaWZpY2FudEZpZ3Vy
ZXNGb3JMb2dnZWRWYWx1ZXMsIFNob3VsZFNhbXBsZTo6Tm8pOworICAgIHdlYlBhZ2VQcm94eS5s
b2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291
cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgZGVzY3JpcHRpb25QcmVhbWJsZSArICJT
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zIiwKKyAgICAgICAgdG9wU3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lT3JpZ2lucywgc2lnbmlmaWNhbnRGaWd1cmVzRm9yTG9nZ2VkVmFsdWVzLCBT
aG91bGRTYW1wbGU6Ok5vKTsKKyAgICB3ZWJQYWdlUHJveHkubG9nRGlhZ25vc3RpY01lc3NhZ2VX
aXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVs
ZW1ldHJ5S2V5KCksIGRlc2NyaXB0aW9uUHJlYW1ibGUgKyAiU3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUbyIsCisgICAgICAgIHRvcFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8sIHNpZ25p
ZmljYW50RmlndXJlc0ZvckxvZ2dlZFZhbHVlcywgU2hvdWxkU2FtcGxlOjpObyk7CisgICAgd2Vi
UGFnZVByb3h5LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5n
S2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBkZXNjcmlwdGlvblBy
ZWFtYmxlICsgIk51bWJlck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWQiLAorICAgICAgICB0b3BO
dW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkLCBzaWduaWZpY2FudEZpZ3VyZXNGb3JMb2dn
ZWRWYWx1ZXMsIFNob3VsZFNhbXBsZTo6Tm8pOworICAgIHdlYlBhZ2VQcm94eS5sb2dEaWFnbm9z
dGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0
YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgZGVzY3JpcHRpb25QcmVhbWJsZSArICJOdW1iZXJPZlRp
bWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbiIsCisgICAgICAgIHRv
cE51bWJlck9mVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uLCBz
aWduaWZpY2FudEZpZ3VyZXNGb3JMb2dnZWRWYWx1ZXMsIFNob3VsZFNhbXBsZTo6Tm8pOworICAg
IHdlYlBhZ2VQcm94eS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9n
Z2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgZGVzY3JpcHRp
b25QcmVhbWJsZSArICJOdW1iZXJPZlRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3Jh
Z2VBY2Nlc3NBUEkiLAorICAgICAgICB0b3BOdW1iZXJPZlRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFy
dHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEksIHNpZ25pZmljYW50RmlndXJlc0ZvckxvZ2dlZFZhbHVl
cywgU2hvdWxkU2FtcGxlOjpObyk7Cit9CisgICAgCitzdGF0aWMgdm9pZCBzdWJtaXRUb3BMaXN0
cyhjb25zdCBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+JiBzb3J0ZWRQcmV2YWxl
bnRSZXNvdXJjZXMsIGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNv
cnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIFdlYlBhZ2VQcm94
eSYgd2ViUGFnZVByb3h5KQoreworICAgIHN1Ym1pdFRvcExpc3QoMSwgc29ydGVkUHJldmFsZW50
UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9u
LCB3ZWJQYWdlUHJveHkpOworICAgIAorICAgIGlmIChzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNX
aXRob3V0VXNlckludGVyYWN0aW9uLnNpemUoKSA8IDMpCisgICAgICAgIHJldHVybjsKKyAgICBz
dWJtaXRUb3BMaXN0KDMsIHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50
UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgd2ViUGFnZVByb3h5KTsKKyAgICAKKyAg
ICBpZiAoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbi5zaXpl
KCkgPCAxMCkKKyAgICAgICAgcmV0dXJuOworICAgIHN1Ym1pdFRvcExpc3QoMTAsIHNvcnRlZFBy
ZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRl
cmFjdGlvbiwgd2ViUGFnZVByb3h5KTsKKyAgICAKKyAgICBpZiAoc29ydGVkUHJldmFsZW50UmVz
b3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPCA1MCkKKyAgICAgICAgcmV0dXJu
OworICAgIHN1Ym1pdFRvcExpc3QoNTAsIHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgc29ydGVk
UHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgd2ViUGFnZVByb3h5KTsK
KyAgICAKKyAgICBpZiAoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFj
dGlvbi5zaXplKCkgPCAxMDApCisgICAgICAgIHJldHVybjsKKyAgICBzdWJtaXRUb3BMaXN0KDEw
MCwgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRo
b3V0VXNlckludGVyYWN0aW9uLCB3ZWJQYWdlUHJveHkpOworfQorICAgIAorLy8gVGhpcyBmdW5j
dGlvbiBpcyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KK3ZvaWQgc3RhdGljIG5vdGlmeVBhZ2VzKHVu
c2lnbmVkIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzLCB1bnNpZ25lZCB0b3RhbFByZXZhbGVudFJl
c291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIHVuc2lnbmVkIHRvcDNTdWJmcmFtZVVuZGVyVG9w
RnJhbWVPcmlnaW5zKQoreworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdG90YWxQcmV2
YWxlbnRSZXNvdXJjZXMsIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlv
biwgdG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNdIHsKKyAgICAgICAgQVBJOjpEaWN0
aW9uYXJ5OjpNYXBUeXBlIG1lc3NhZ2VCb2R5OworICAgICAgICBtZXNzYWdlQm9keS5zZXQoIlRv
dGFsUHJldmFsZW50UmVzb3VyY2VzIl9zLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKHRvdGFsUHJldmFs
ZW50UmVzb3VyY2VzKSk7CisgICAgICAgIG1lc3NhZ2VCb2R5LnNldCgiVG90YWxQcmV2YWxlbnRS
ZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uIl9zLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKHRvdGFs
UHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbikpOworICAgICAgICBtZXNzYWdl
Qm9keS5zZXQoIlRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zIl9zLCBBUEk6OlVJbnQ2
NDo6Y3JlYXRlKHRvcDNTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zKSk7CisgICAgICAgIFdl
YlByb2Nlc3NQcm94eTo6bm90aWZ5UGFnZVN0YXRpc3RpY3NUZWxlbWV0cnlGaW5pc2hlZChBUEk6
OkRpY3Rpb25hcnk6OmNyZWF0ZShtZXNzYWdlQm9keSkucHRyKCkpOworICAgIH0pOworfQorICAg
IAorLy8gVGhpcyBmdW5jdGlvbiBpcyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KK3ZvaWQgc3RhdGlj
IG5vdGlmeVBhZ2VzKGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHNv
cnRlZFByZXZhbGVudFJlc291cmNlcywgY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVs
ZW1ldHJ5PiYgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwg
dW5zaWduZWQgdG90YWxOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rp
b24pCit7CisgICAgV1RGOjpGdW5jdGlvbjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJj
ZVRlbGVtZXRyeSYgdGVsZW1ldHJ5KT4gc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0dldHRl
ciA9IFtdIChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdCkgeworICAgICAgICBy
ZXR1cm4gdC5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zOworICAgIH07CisgICAgCisgICAg
bm90aWZ5UGFnZXMoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLnNpemUoKSwgdG90YWxOdW1iZXJP
ZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIG1lZGlhbihzb3J0ZWRQcmV2
YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAwLCAyLCBzdWJmcmFtZVVuZGVy
VG9wRnJhbWVPcmlnaW5zR2V0dGVyKSk7Cit9CisgICAgCit2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NUZWxlbWV0cnk6OmNhbGN1bGF0ZUFuZFN1Ym1pdChjb25zdCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmUmIHJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSkKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBhdXRvIHNvcnRlZFByZXZh
bGVudFJlc291cmNlcyA9IHNvcnRlZFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5KHJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZSk7CisgICAgaWYgKG5vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdh
c0NhcHR1cmVkICYmIHNvcnRlZFByZXZhbGVudFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgbm90aWZ5UGFnZXMoMCwgMCwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5PiBzb3J0ZWRQcmV2YWxlbnRSZXNv
dXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uOworICAgIHNvcnRlZFByZXZhbGVudFJlc291cmNl
c1dpdGhvdXRVc2VySW50ZXJhY3Rpb24ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzb3J0ZWRQcmV2
YWxlbnRSZXNvdXJjZXMuc2l6ZSgpKTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IHByZXZhbGVudFJl
c291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbjsKKyAgICAKKyAgICBmb3IgKGF1dG8mIHBy
ZXZhbGVudFJlc291cmNlIDogc29ydGVkUHJldmFsZW50UmVzb3VyY2VzKSB7CisgICAgICAgIGlm
IChwcmV2YWxlbnRSZXNvdXJjZS5oYXNIYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgICAgICBw
cmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rpb24uYXBwZW5kKHByZXZhbGVu
dFJlc291cmNlLmRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24udW5j
aGVja2VkQXBwZW5kKHByZXZhbGVudFJlc291cmNlKTsKKyAgICB9CisgICAgCisgICAgLy8gRGlz
cGF0Y2ggb24gdGhlIG1haW4gdGhyZWFkIHRvIG1ha2Ugc3VyZSB0aGUgV2ViUGFnZVByb3h5IHdl
J3JlIHVzaW5nIGRvZXNuJ3QgZ28gYXdheS4KKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2go
W3NvcnRlZFByZXZhbGVudFJlc291cmNlcyA9IFdURk1vdmUoc29ydGVkUHJldmFsZW50UmVzb3Vy
Y2VzKSwgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiA9IFdU
Rk1vdmUoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiksIHBy
ZXZhbGVudFJlc291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbiA9IFdURk1vdmUocHJldmFs
ZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uKV0gKCkgeworICAgICAgICBhdXRv
IHdlYlBhZ2VQcm94eSA9IG5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eSgpOworICAgICAgICBpZiAo
IXdlYlBhZ2VQcm94eSkgeworICAgICAgICAgICAgaWYgKG5vdGlmeVBhZ2VzV2hlblRlbGVtZXRy
eVdhc0NhcHR1cmVkKQorICAgICAgICAgICAgICAgIG5vdGlmeVBhZ2VzKDAsIDAsIDApOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobm90aWZ5
UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpIHsKKyAgICAgICAgICAgIG5vdGlmeVBhZ2Vz
KHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91
dFVzZXJJbnRlcmFjdGlvbiwgcHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0
aW9uLnNpemUoKSk7CisgICAgICAgICAgICAvLyBUaGUgbm90aWZ5IHBhZ2VzIGZ1bmN0aW9uIGlz
IGZvciB0ZXN0aW5nIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW4gYWN0dWFsIHN1Ym1pc3Npb24u
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHdlYlBh
Z2VQcm94eS0+bG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksICJ0b3RhbE51bWJlck9m
UHJldmFsZW50UmVzb3VyY2VzIl9zLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMuc2l6ZSgpLCBz
aWduaWZpY2FudEZpZ3VyZXNGb3JMb2dnZWRWYWx1ZXMsIFNob3VsZFNhbXBsZTo6Tm8pOworICAg
ICAgICB3ZWJQYWdlUHJveHktPmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0
aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCAidG90
YWxOdW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24iX3MsIHByZXZh
bGVudFJlc291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbi5zaXplKCksIHNpZ25pZmljYW50
RmlndXJlc0ZvckxvZ2dlZFZhbHVlcywgU2hvdWxkU2FtcGxlOjpObyk7CisgICAgICAgIAorICAg
ICAgICBpZiAocHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uLnNpemUo
KSA+IDApCisgICAgICAgICAgICB3ZWJQYWdlUHJveHktPmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0
aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVt
ZXRyeUtleSgpLCAidG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1Np
bmNlVXNlckludGVyYWN0aW9uIl9zLCBwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50
ZXJhY3Rpb25bMF0sIHNpZ25pZmljYW50RmlndXJlc0ZvckxvZ2dlZFZhbHVlcywgU2hvdWxkU2Ft
cGxlOjpObyk7CisgICAgICAgIGlmIChwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50
ZXJhY3Rpb24uc2l6ZSgpID4gMSkKKyAgICAgICAgICAgIHdlYlBhZ2VQcm94eS0+bG9nRGlhZ25v
c3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksICJtZWRpYW5QcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNl
ckludGVyYWN0aW9uRGF5c1NpbmNlVXNlckludGVyYWN0aW9uIl9zLCBtZWRpYW4ocHJldmFsZW50
UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9uKSwgc2lnbmlmaWNhbnRGaWd1cmVzRm9y
TG9nZ2VkVmFsdWVzLCBTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICAgICAgCisgICAgICAgIHN1Ym1p
dFRvcExpc3RzKHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgc29ydGVkUHJldmFsZW50UmVzb3Vy
Y2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgKndlYlBhZ2VQcm94eSk7CisgICAgfSk7Cit9Cisg
ICAgCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OnNldE5vdGlmeVBh
Z2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgYWx3YXlzKQoreworICAgIG5vdGlmeVBh
Z2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkID0gYWx3YXlzOworfQorICAgIAorfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjk2ZTYxYTFhZjBhYjczNTNiMDMxZGI3NTNmOWRkYjZmNTJjNjI5YgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU7
CisKK25hbWVzcGFjZSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5IHsKKyAgICAK
K3ZvaWQgY2FsY3VsYXRlQW5kU3VibWl0KGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZSYpOwordm9pZCBzZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChi
b29sKTsKKyAgICAKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvRG93bmxvYWRzL1BlbmRpbmdEb3dubG9hZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93bmxvYWQuY3BwCmluZGV4IDMwOWE5MzE5ZjZjM2M4
NjRlYmQ1N2E2YTk3MjBjZjNmNTY0MmE1YjAuLjNlYzk4M2UxZjY4OTAwOTg2ODcyOWFhMTg2NGQ4
MmNhMWU1MTlhM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvRG93
bmxvYWRzL1BlbmRpbmdEb3dubG9hZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9Eb3dubG9hZHMvUGVuZGluZ0Rvd25sb2FkLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2lu
Y2x1ZGUgIlBlbmRpbmdEb3dubG9hZC5oIgogCiAjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgor
I2luY2x1ZGUgIkRvd25sb2FkLmgiCiAjaW5jbHVkZSAiRG93bmxvYWRQcm94eU1lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiTmV0d29ya0xvYWQuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5oIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVuZGlu
Z0Rvd25sb2FkLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9QZW5k
aW5nRG93bmxvYWQuaAppbmRleCAwNmY1MzExZjc5ODBlYzM5ZDJkODc0YjFjNGU5MjJlNWRhNWU5
MjM1Li40YjkyZjFiMGVmZGFkNmY2NDRjZTlmNWRkNmIyMjc2ZGU1ZThmZjczIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93bmxvYWQu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93
bmxvYWQuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgog
I2luY2x1ZGUgIk5ldHdvcmtMb2FkQ2xpZW50LmgiCisjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lv
bi5oIgogCiBuYW1lc3BhY2UgSVBDIHsKIGNsYXNzIENvbm5lY3Rpb247CkBAIC00Myw3ICs0NCw3
IEBAIGNsYXNzIERvd25sb2FkSUQ7CiBjbGFzcyBOZXR3b3JrTG9hZDsKIGNsYXNzIE5ldHdvcmtM
b2FkUGFyYW1ldGVyczsKIGNsYXNzIE5ldHdvcmtTZXNzaW9uOwotICAgIAorCiBjbGFzcyBQZW5k
aW5nRG93bmxvYWQgOiBwdWJsaWMgTmV0d29ya0xvYWRDbGllbnQsIHB1YmxpYyBJUEM6Ok1lc3Nh
Z2VTZW5kZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm1NYWMuY21ha2UKaW5kZXggZDY3ZTY0Y2Q5NzQwMzcyODg1OTg2OTdhZmZkM2M2ZTczMjA1
NjZhZC4uMzY4NzFkMzExMWFmNGZjYWRiZDU5MjU2NGQyOTdkYThkYTc5NGFiYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtTWFjLmNtYWtlCkBAIC0xOSw2ICsxOSw5IEBAIGlmIChOT1QgQVZGQVVESU9fTElCUkFS
WS1OT1RGT1VORCkKIGVuZGlmICgpCiAKIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCisgICAg
TmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
Y3BwCisgICAgTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzVGVsZW1ldHJ5LmNwcAorCiAgICAgTmV0d29ya1Byb2Nlc3MvQ29va2llcy9tYWMvV2ViQ29v
a2llTWFuYWdlck1hYy5tbQogCiAgICAgTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL0xl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlci5jcHAKQEAgLTE1OCw4ICsxNjEsNiBAQCBsaXN0KEFQ
UEVORCBXZWJLaXRfU09VUkNFUwogCiAgICAgVUlQcm9jZXNzL0hpZ2hQZXJmb3JtYW5jZUdyYXBo
aWNzVXNhZ2VTYW1wbGVyLmNwcAogICAgIFVJUHJvY2Vzcy9QZXJBY3Rpdml0eVN0YXRlQ1BVVXNh
Z2VTYW1wbGVyLmNwcAotICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwCi0gICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnku
Y3BwCiAKICAgICBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggMmFhMzVhZDQ4MzU3OTk2NDFjMDk0NGE3YWY5
YzkwNzk0ZThkOTAxYi4uMjAwM2IwYWRmNWFkZjRlZjI0YjEzNmI0NGQ0ZGIxOTI5YzBmMTIxOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCkBAIC04LDYgKzgsOSBAQCBmaWxlKE1BS0VfRElSRUNU
T1JZICR7REVSSVZFRF9TT1VSQ0VTX1dFQktJVF9ESVJ9KQogYWRkX2RlZmluaXRpb25zKC1EQlVJ
TERJTkdfV0VCS0lUKQogCiBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUworICAgIE5ldHdvcmtQ
cm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAorICAg
IE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVt
ZXRyeS5jcHAKKwogICAgIE5ldHdvcmtQcm9jZXNzL3dpbi9OZXR3b3JrUHJvY2Vzc01haW5XaW4u
Y3BwCiAKICAgICBQbGF0Zm9ybS9JUEMvd2luL0F0dGFjaG1lbnRXaW4uY3BwCkBAIC0zNiw4ICsz
OSw2IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0RyYXdpbmdB
cmVhUHJveHlJbXBsLmNwcAogICAgIFVJUHJvY2Vzcy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmdO
b25lLmNwcAogICAgIFVJUHJvY2Vzcy9XZWJHcmFtbWFyRGV0YWlsLmNwcAotICAgIFVJUHJvY2Vz
cy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCi0gICAgVUlQcm9jZXNzL1dlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCiAgICAgVUlQcm9jZXNzL1dlYlZpZXdw
b3J0QXR0cmlidXRlcy5jcHAKIAogICAgIFVJUHJvY2Vzcy9BUEkvQy9XS1ZpZXdwb3J0QXR0cmli
dXRlcy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BlcnNpc3RlbmN5VXRp
bHMuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUGVyc2lzdGVuY3lVdGlscy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNWRiYTk2OGJkN2UwYjM4YzNkMjI2OTRkNmQ1ZDJlNmIwNjlkMmE4MQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BlcnNpc3RlbmN5VXRpbHMuY3BwCkBAIC0w
LDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJQZXJzaXN0ZW5jeVV0aWxzLmgiCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIu
aD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0ZDo6dW5pcXVlX3B0cjxLZXllZERlY29kZXI+IGNy
ZWF0ZUZvckZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgYXV0byBoYW5kbGUgPSBGaWxlU3lzdGVtOjpvcGVuQW5kTG9ja0Zp
bGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKKyAgICBpZiAoaGFuZGxl
ID09IEZpbGVTeXN0ZW06OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgbG9uZyBsb25nIGZpbGVTaXplID0gMDsKKyAgICBpZiAoIUZpbGVT
eXN0ZW06OmdldEZpbGVTaXplKGhhbmRsZSwgZmlsZVNpemUpIHx8ICFmaWxlU2l6ZSkgeworICAg
ICAgICBGaWxlU3lzdGVtOjp1bmxvY2tBbmRDbG9zZUZpbGUoaGFuZGxlKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgc2l6ZV90IGJ5dGVzVG9SZWFkOworICAgIGlmICgh
V1RGOjpjb252ZXJ0U2FmZWx5KGZpbGVTaXplLCBieXRlc1RvUmVhZCkpIHsKKyAgICAgICAgRmls
ZVN5c3RlbTo6dW5sb2NrQW5kQ2xvc2VGaWxlKGhhbmRsZSk7CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKworICAgIFZlY3RvcjxjaGFyPiBidWZmZXIoYnl0ZXNUb1JlYWQpOworICAg
IHNpemVfdCB0b3RhbEJ5dGVzUmVhZCA9IEZpbGVTeXN0ZW06OnJlYWRGcm9tRmlsZShoYW5kbGUs
IGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpOworCisgICAgRmlsZVN5c3RlbTo6dW5sb2Nr
QW5kQ2xvc2VGaWxlKGhhbmRsZSk7CisKKyAgICBpZiAodG90YWxCeXRlc1JlYWQgIT0gYnl0ZXNU
b1JlYWQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCB0cnkgdG8gbW9kaWZ5IHRoZSBjb25zdHJ1Y3RvciB0byBwYXNzICYmLgorICAgIHJldHVybiBL
ZXllZERlY29kZXI6OmRlY29kZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVm
ZmVyLmRhdGEoKSksIGJ1ZmZlci5zaXplKCkpOworfQorCit2b2lkIHdyaXRlVG9EaXNrKHN0ZDo6
dW5pcXVlX3B0cjxLZXllZEVuY29kZXI+JiYgZW5jb2RlciwgU3RyaW5nJiYgcGF0aCkKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gcmF3RGF0YSA9IGVuY29k
ZXItPmZpbmlzaEVuY29kaW5nKCk7CisgICAgaWYgKCFyYXdEYXRhKQorICAgICAgICByZXR1cm47
CisKKyAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlID0gRmlsZVN5c3Rl
bTo6b3BlbkFuZExvY2tGaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6V3JpdGUp
OworICAgIGlmIChoYW5kbGUgPT0gRmlsZVN5c3RlbTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRs
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB3cml0dGVuQnl0ZXMgPSBGaWxlU3lzdGVt
Ojp3cml0ZVRvRmlsZShoYW5kbGUsIHJhd0RhdGEtPmRhdGEoKSwgcmF3RGF0YS0+c2l6ZSgpKTsK
KyAgICBGaWxlU3lzdGVtOjp1bmxvY2tBbmRDbG9zZUZpbGUoaGFuZGxlKTsKKworICAgIGlmICh3
cml0dGVuQnl0ZXMgIT0gc3RhdGljX2Nhc3Q8aW50NjRfdD4ocmF3RGF0YS0+c2l6ZSgpKSkKKyAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoRGlza1BlcnNpc3RlbmN5LCAiRGlzayBwZXJzaXN0ZW5j
eTogV2Ugb25seSB3cm90ZSAlZCBvdXQgb2YgJXp1IGJ5dGVzIHRvIGRpc2siLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4od3JpdHRlbkJ5dGVzKSwgcmF3RGF0YS0+c2l6ZSgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QZXJzaXN0
ZW5jeVV0aWxzLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QZXJzaXN0ZW5jeVV0aWxzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMTYwMjcwZjE5MTY4ZjM3ZjlkODI5YWFlZDU3MWI3NjY3NTJmOWRiZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BlcnNpc3RlbmN5VXRpbHMuaApAQCAt
MCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
PFdlYkNvcmUvS2V5ZWRDb2RpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpLZXllZERlY29kZXI+IGNyZWF0ZUZvckZpbGUoY29uc3QgU3RyaW5n
JiBwYXRoKTsKK3ZvaWQgd3JpdGVUb0Rpc2soc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OktleWVk
RW5jb2Rlcj4mJiwgU3RyaW5nJiYgcGF0aCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNl
cy50eHQKaW5kZXggZTBhMzI4MmUwMDkyZDk3Y2UzNWQ2NjQ2YjQzMzFiOGNhMTFmNDhlMC4uNDk2
ZTg4YzgzZmJkOWVjNGNjZWIxYzI4OWYzZDNmOGE1YWFmOGI5ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC00
MSw2ICs0MSw5IEBAIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTb2NrZXRTdHJlYW0uY3BwCiBOZXR3
b3JrUHJvY2Vzcy9QaW5nTG9hZC5jcHAKIE5ldHdvcmtQcm9jZXNzL1ByZWNvbm5lY3RUYXNrLmNw
cAogCitOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZS5jcHAKK05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcAorCiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNv
b2tpZU1hbmFnZXIuY3BwCiAKIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAK
QEAgLTEwNyw2ICsxMTAsNyBAQCBTaGFyZWQvRnJhbWVJbmZvRGF0YS5jcHAKIFNoYXJlZC9MYXll
clRyZWVDb250ZXh0LmNwcAogU2hhcmVkL0xvYWRQYXJhbWV0ZXJzLmNwcAogU2hhcmVkL05hdmln
YXRpb25BY3Rpb25EYXRhLmNwcAorU2hhcmVkL1BlcnNpc3RlbmN5VXRpbHMuY3BwCiBTaGFyZWQv
UGxhdGZvcm1Qb3B1cE1lbnVEYXRhLmNwcAogU2hhcmVkL1ByaW50SW5mby5jcHAKIFNoYXJlZC9S
VENOZXR3b3JrLmNwcApAQCAtMjI1LDEyICsyMjksOSBAQCBVSVByb2Nlc3MvR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0UHJveHkuY3BwCiBVSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHku
Y3BwCiBVSVByb2Nlc3MvUGFnZUxvYWRTdGF0ZS5jcHAKLVVJUHJvY2Vzcy9QZXJzaXN0ZW5jeVV0
aWxzLmNwcAogVUlQcm9jZXNzL1Byb2Nlc3NBc3NlcnRpb24uY3BwCiBVSVByb2Nlc3MvUHJvY2Vz
c1Rocm90dGxlci5jcHAKIFVJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5jcHAKLVVJ
UHJvY2Vzcy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCi1VSVByb2Nlc3Mv
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcAogVUlQcm9jZXNzL1Jl
c3BvbnNpdmVuZXNzVGltZXIuY3BwCiBVSVByb2Nlc3MvU2VydmljZVdvcmtlclByb2Nlc3NQcm94
eS5jcHAKIFVJUHJvY2Vzcy9TdGF0aXN0aWNzUmVxdWVzdC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4
dAppbmRleCBhNDMzNmEwOTgwOTRhNTE4ODA1N2QyZmNhNjUyNDFiNTk5YTk0M2IyLi4zMDhmNjZj
YmU2ZDIzMjQ2ZWRkYWZkYTMxZDJhYTQ1ODU4MmM5NGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0
CkBAIC0yOSw2ICsyOSw5IEBAIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0Nv
Y29hLm1tCiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCiBOZXR3
b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCiAKK05ldHdvcmtQcm9jZXNz
L0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAorTmV0d29ya1By
b2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAor
CiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL21hYy9XZWJDb29raWVNYW5hZ2VyTWFjLm1tCiAKIE5l
dHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9Db2NvYS9MZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJDb2NvYS5tbQpAQCAtMjAyLDggKzIwNSw2IEBAIFVJUHJvY2Vzcy9QZXJBY3Rpdml0eVN0
YXRlQ1BVVXNhZ2VTYW1wbGVyLmNwcAogVUlQcm9jZXNzL1dlYkRhdGFMaXN0U3VnZ2VzdGlvbnNE
cm9wZG93bi5jcHAKIFVJUHJvY2Vzcy9XZWJNZWRpYVNlc3Npb25Gb2N1c01hbmFnZXIuY3BwCiBV
SVByb2Nlc3MvV2ViTWVkaWFTZXNzaW9uRm9jdXNNYW5hZ2VyQ2xpZW50LmNwcAotVUlQcm9jZXNz
L1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKLVVJUHJvY2Vzcy9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAogVUlQcm9jZXNzL1dLSW1hZ2VQcmV2aWV3Vmll
d0NvbnRyb2xsZXIubW0KIFVJUHJvY2Vzcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcubW0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJjZS9XZWJLaXQv
U291cmNlc0dUSy50eHQKaW5kZXggMjY1Mzg0YjY0MTg4NzUzNzg5NWQwN2YzYWQ1ODMyOTQ0YzAx
ZDI5MS4uYjA4ZDcyM2I0YWVlNjBiNDE5ZTdiOTNlMjFkODg2NDQyOTVkMTdmMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXNHVEsudHh0CkBAIC0yNSw2ICsyNSw5IEBACiAvLyBsaW5raW5nIFBsdWdpblByb2Nlc3NHVEsy
LiBJIGRvbid0IGtub3cgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LiBUaGVzZQogLy8gYW5ub3RhdGlv
bnMgc2hvdWxkIGJlIHJldmlzaXRlZCBhZnRlciByZW1vdmluZyBQbHVnaW5Qcm9jZXNzR1RLMi4K
IAorTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwCitOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUZWxlbWV0cnkuY3BwCisKIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJDb29raWVN
YW5hZ2VyU291cC5jcHAKIAogTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlci5jcHAKQEAgLTEwOSw4ICsxMTIsNiBAQCBVSVByb2Nlc3MvRGVm
YXVsdFVuZG9Db250cm9sbGVyLmNwcAogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNw
cAogVUlQcm9jZXNzL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZ05vbmUuY3BwCiBVSVByb2Nlc3Mv
V2ViR3JhbW1hckRldGFpbC5jcHAKLVVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUuY3BwCi1VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5j
cHAKIFVJUHJvY2Vzcy9XZWJUZXh0Q2hlY2tlci5jcHAKIFVJUHJvY2Vzcy9XZWJUZXh0Q2hlY2tl
ckNsaWVudC5jcHAKIFVJUHJvY2Vzcy9XZWJWaWV3cG9ydEF0dHJpYnV0ZXMuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2Vz
V1BFLnR4dAppbmRleCA4ZWUyZmVmNDJhNjY0Nzg1OWYzNWY4ZDM0NzkzYWY5NGEwMjkzOTNlLi41
MTE5Y2FlNTZiYzA2ZjIyOTczZjY3MzNjMDg0MzdhYjJlM2UzZTEyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50
eHQKQEAgLTIxLDYgKzIxLDkgQEAKIC8vIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKIC8vIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KIAorTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCitOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCisKIE5ldHdvcmtQcm9jZXNzL0Nvb2tp
ZXMvc291cC9XZWJDb29raWVNYW5hZ2VyU291cC5jcHAKIAogTmV0d29ya1Byb2Nlc3MvQ3VzdG9t
UHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlci5jcHAKQEAgLTk4LDggKzEwMSw2
IEBAIFVJUHJvY2Vzcy9BY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHkuY3BwCiBVSVByb2Nlc3Mv
RGVmYXVsdFVuZG9Db250cm9sbGVyLmNwcAogVUlQcm9jZXNzL0xlZ2FjeVNlc3Npb25TdGF0ZUNv
ZGluZ05vbmUuY3BwCiBVSVByb2Nlc3MvV2ViR3JhbW1hckRldGFpbC5jcHAKLVVJUHJvY2Vzcy9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCi1VSVByb2Nlc3MvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAKIFVJUHJvY2Vzcy9XZWJWaWV3cG9ydEF0dHJpYnV0
ZXMuY3BwCiAKIFVJUHJvY2Vzcy9BUEkvQy9XS0dyYW1tYXJEZXRhaWwuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNw
cAppbmRleCBhM2UzNDY4MjU2YmI2NzAwODI5NWZjMTNmMDcyZGYzNzliNzAwMTJjLi5jZjZjYWY2
ODlhNjEwNGRhNzc3N2U4NTc5OTM4MjMzZWUzNDBlOGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAKQEAgLTU3
OSwxMyArNTc5LDEzIEBAIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0Q2FjaGVTdG9yYWdlUGVy
T3JpZ2luUXVvdGEoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTCiB2b2lkIFdLV2Vic2l0ZURh
dGFTdG9yZVNldFdlYkF1dGhlbnRpY2F0aW9uTW9ja0NvbmZpZ3VyYXRpb24oV0tXZWJzaXRlRGF0
YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgV0tEaWN0aW9uYXJ5UmVmIGNvbmZpZ3VyYXRpb25SZWYp
CiB7CiAjaWYgRU5BQkxFKFdFQl9BVVRITikKLSAgICBNb2NrV2ViQXV0aGVudGljYXRpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb247CisgICAgV2ViS2l0OjpNb2NrV2ViQXV0aGVudGljYXRp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb247CiAKICAgICBpZiAoYXV0byBzaWxlbnRGYWls
dXJlUmVmID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KGNvbmZpZ3VyYXRpb25SZWYsIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNpbGVudEZhaWx1cmUiKSkuZ2V0KCkpKSkKICAgICAgICAgY29uZmlndXJhdGlvbi5zaWxl
bnRGYWlsdXJlID0gV0tCb29sZWFuR2V0VmFsdWUoc2lsZW50RmFpbHVyZVJlZik7CiAKICAgICBp
ZiAoYXV0byBsb2NhbFJlZiA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShjb25maWd1cmF0aW9uUmVmLCBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJMb2NhbCIpKS5nZXQoKSkpKSB7Ci0gICAgICAgIE1vY2tXZWJBdXRo
ZW50aWNhdGlvbkNvbmZpZ3VyYXRpb246OkxvY2FsIGxvY2FsOworICAgICAgICBXZWJLaXQ6Ok1v
Y2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb246OkxvY2FsIGxvY2FsOwogICAgICAgICBs
b2NhbC5hY2NlcHRBdXRoZW50aWNhdGlvbiA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0
PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsb2NhbFJlZiwgYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQWNjZXB0QXV0aGVudGljYXRpb24iKSku
Z2V0KCkpKSk7CiAgICAgICAgIGxvY2FsLmFjY2VwdEF0dGVzdGF0aW9uID0gV0tCb29sZWFuR2V0
VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KGxvY2FsUmVmLCBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBY2NlcHRB
dHRlc3RhdGlvbiIpKS5nZXQoKSkpKTsKICAgICAgICAgaWYgKGxvY2FsLmFjY2VwdEF0dGVzdGF0
aW9uKSB7CkBAIC01OTcsMzUgKzU5NywzNSBAQCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVNldFdl
YkF1dGhlbnRpY2F0aW9uTW9ja0NvbmZpZ3VyYXRpb24oV0tXZWJzaXRlRGF0YVN0b3JlUgogICAg
IH0KIAogICAgIGlmIChhdXRvIGhpZFJlZiA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShjb25maWd1cmF0aW9uUmVmLCBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIaWQiKSkuZ2V0KCkpKSkgewotICAgICAgICBNb2Nr
V2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uOjpIaWQgaGlkOworICAgICAgICBXZWJLaXQ6
Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb246OkhpZCBoaWQ7CiAKICAgICAgICAg
YXV0byBzdGFnZSA9IFdlYktpdDo6dG9JbXBsKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KGhpZFJlZiwgYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU3RhZ2UiKSkuZ2V0KCkpKSktPnN0cmluZygpOwogICAgICAgICBpZiAoc3Rh
Z2UgPT0gImluZm8iKQotICAgICAgICAgICAgaGlkLnN0YWdlID0gTW9ja1dlYkF1dGhlbnRpY2F0
aW9uQ29uZmlndXJhdGlvbjo6SGlkOjpTdGFnZTo6SW5mbzsKKyAgICAgICAgICAgIGhpZC5zdGFn
ZSA9IFdlYktpdDo6TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbjo6SGlkOjpTdGFn
ZTo6SW5mbzsKICAgICAgICAgaWYgKHN0YWdlID09ICJyZXF1ZXN0IikKLSAgICAgICAgICAgIGhp
ZC5zdGFnZSA9IE1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb246OkhpZDo6U3RhZ2U6
OlJlcXVlc3Q7CisgICAgICAgICAgICBoaWQuc3RhZ2UgPSBXZWJLaXQ6Ok1vY2tXZWJBdXRoZW50
aWNhdGlvbkNvbmZpZ3VyYXRpb246OkhpZDo6U3RhZ2U6OlJlcXVlc3Q7CiAKICAgICAgICAgYXV0
byBzdWJTdGFnZSA9IFdlYktpdDo6dG9JbXBsKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KGhpZFJlZiwgYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU3ViU3RhZ2UiKSkuZ2V0KCkpKSktPnN0cmluZygpOwogICAgICAgICBpZiAo
c3ViU3RhZ2UgPT0gImluaXQiKQotICAgICAgICAgICAgaGlkLnN1YlN0YWdlID0gTW9ja1dlYkF1
dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbjo6SGlkOjpTdWJTdGFnZTo6SW5pdDsKKyAgICAgICAg
ICAgIGhpZC5zdWJTdGFnZSA9IFdlYktpdDo6TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJh
dGlvbjo6SGlkOjpTdWJTdGFnZTo6SW5pdDsKICAgICAgICAgaWYgKHN1YlN0YWdlID09ICJtc2ci
KQotICAgICAgICAgICAgaGlkLnN1YlN0YWdlID0gTW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmln
dXJhdGlvbjo6SGlkOjpTdWJTdGFnZTo6TXNnOworICAgICAgICAgICAgaGlkLnN1YlN0YWdlID0g
V2ViS2l0OjpNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uOjpIaWQ6OlN1YlN0YWdl
OjpNc2c7CiAKICAgICAgICAgYXV0byBlcnJvciA9IFdlYktpdDo6dG9JbXBsKHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGhpZFJlZiwgYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXJyb3IiKSkuZ2V0KCkpKSktPnN0cmluZygp
OwogICAgICAgICBpZiAoZXJyb3IgPT0gInN1Y2Nlc3MiKQotICAgICAgICAgICAgaGlkLmVycm9y
ID0gTW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbjo6SGlkOjpFcnJvcjo6U3VjY2Vz
czsKKyAgICAgICAgICAgIGhpZC5lcnJvciA9IFdlYktpdDo6TW9ja1dlYkF1dGhlbnRpY2F0aW9u
Q29uZmlndXJhdGlvbjo6SGlkOjpFcnJvcjo6U3VjY2VzczsKICAgICAgICAgaWYgKGVycm9yID09
ICJkYXRhLW5vdC1zZW50IikKLSAgICAgICAgICAgIGhpZC5lcnJvciA9IE1vY2tXZWJBdXRoZW50
aWNhdGlvbkNvbmZpZ3VyYXRpb246OkhpZDo6RXJyb3I6OkRhdGFOb3RTZW50OworICAgICAgICAg
ICAgaGlkLmVycm9yID0gV2ViS2l0OjpNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9u
OjpIaWQ6OkVycm9yOjpEYXRhTm90U2VudDsKICAgICAgICAgaWYgKGVycm9yID09ICJlbXB0eS1y
ZXBvcnQiKQotICAgICAgICAgICAgaGlkLmVycm9yID0gTW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29u
ZmlndXJhdGlvbjo6SGlkOjpFcnJvcjo6RW1wdHlSZXBvcnQ7CisgICAgICAgICAgICBoaWQuZXJy
b3IgPSBXZWJLaXQ6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb246OkhpZDo6RXJy
b3I6OkVtcHR5UmVwb3J0OwogICAgICAgICBpZiAoZXJyb3IgPT0gIndyb25nLWNoYW5uZWwtaWQi
KQotICAgICAgICAgICAgaGlkLmVycm9yID0gTW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJh
dGlvbjo6SGlkOjpFcnJvcjo6V3JvbmdDaGFubmVsSWQ7CisgICAgICAgICAgICBoaWQuZXJyb3Ig
PSBXZWJLaXQ6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb246OkhpZDo6RXJyb3I6
Oldyb25nQ2hhbm5lbElkOwogICAgICAgICBpZiAoZXJyb3IgPT0gIm1hbGljaW91cy1wYXlsb2Fk
IikKLSAgICAgICAgICAgIGhpZC5lcnJvciA9IE1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3Vy
YXRpb246OkhpZDo6RXJyb3I6Ok1hbGljaW91c1BheWxvYWQ7CisgICAgICAgICAgICBoaWQuZXJy
b3IgPSBXZWJLaXQ6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb246OkhpZDo6RXJy
b3I6Ok1hbGljaW91c1BheWxvYWQ7CiAgICAgICAgIGlmIChlcnJvciA9PSAidW5zdXBwb3J0ZWQt
b3B0aW9ucyIpCi0gICAgICAgICAgICBoaWQuZXJyb3IgPSBNb2NrV2ViQXV0aGVudGljYXRpb25D
b25maWd1cmF0aW9uOjpIaWQ6OkVycm9yOjpVbnN1cHBvcnRlZE9wdGlvbnM7CisgICAgICAgICAg
ICBoaWQuZXJyb3IgPSBXZWJLaXQ6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb246
OkhpZDo6RXJyb3I6OlVuc3VwcG9ydGVkT3B0aW9uczsKICAgICAgICAgaWYgKGVycm9yID09ICJ3
cm9uZy1ub25jZSIpCi0gICAgICAgICAgICBoaWQuZXJyb3IgPSBNb2NrV2ViQXV0aGVudGljYXRp
b25Db25maWd1cmF0aW9uOjpIaWQ6OkVycm9yOjpXcm9uZ05vbmNlOworICAgICAgICAgICAgaGlk
LmVycm9yID0gV2ViS2l0OjpNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uOjpIaWQ6
OkVycm9yOjpXcm9uZ05vbmNlOwogCiAgICAgICAgIGlmIChhdXRvIHBheWxvYWRCYXNlNjQgPSBz
dGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShoaWRSZWYs
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBheWxvYWRCYXNlNjQiKSku
Z2V0KCkpKSkKICAgICAgICAgICAgIGhpZC5wYXlsb2FkQmFzZTY0ID0gV2ViS2l0Ojp0b0ltcGwo
cGF5bG9hZEJhc2U2NCktPnN0cmluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUGVyc2lzdGVuY3lVdGlscy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QZXJz
aXN0ZW5jeVV0aWxzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRiYTk2OGJk
N2UwYjM4YzNkMjI2OTRkNmQ1ZDJlNmIwNjlkMmE4MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QZXJzaXN0ZW5j
eVV0aWxzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQZXJzaXN0ZW5jeVV0aWxzLmgiCi0K
LSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXN0
ZDo6dW5pcXVlX3B0cjxLZXllZERlY29kZXI+IGNyZWF0ZUZvckZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byBoYW5k
bGUgPSBGaWxlU3lzdGVtOjpvcGVuQW5kTG9ja0ZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9w
ZW5Nb2RlOjpSZWFkKTsKLSAgICBpZiAoaGFuZGxlID09IEZpbGVTeXN0ZW06OmludmFsaWRQbGF0
Zm9ybUZpbGVIYW5kbGUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgbG9uZyBsb25n
IGZpbGVTaXplID0gMDsKLSAgICBpZiAoIUZpbGVTeXN0ZW06OmdldEZpbGVTaXplKGhhbmRsZSwg
ZmlsZVNpemUpIHx8ICFmaWxlU2l6ZSkgewotICAgICAgICBGaWxlU3lzdGVtOjp1bmxvY2tBbmRD
bG9zZUZpbGUoaGFuZGxlKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAg
c2l6ZV90IGJ5dGVzVG9SZWFkOwotICAgIGlmICghV1RGOjpjb252ZXJ0U2FmZWx5KGZpbGVTaXpl
LCBieXRlc1RvUmVhZCkpIHsKLSAgICAgICAgRmlsZVN5c3RlbTo6dW5sb2NrQW5kQ2xvc2VGaWxl
KGhhbmRsZSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIFZlY3Rvcjxj
aGFyPiBidWZmZXIoYnl0ZXNUb1JlYWQpOwotICAgIHNpemVfdCB0b3RhbEJ5dGVzUmVhZCA9IEZp
bGVTeXN0ZW06OnJlYWRGcm9tRmlsZShoYW5kbGUsIGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXpl
KCkpOwotCi0gICAgRmlsZVN5c3RlbTo6dW5sb2NrQW5kQ2xvc2VGaWxlKGhhbmRsZSk7Ci0KLSAg
ICBpZiAodG90YWxCeXRlc1JlYWQgIT0gYnl0ZXNUb1JlYWQpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cnkgdG8gbW9kaWZ5IHRoZSBjb25zdHJ1
Y3RvciB0byBwYXNzICYmLgotICAgIHJldHVybiBLZXllZERlY29kZXI6OmRlY29kZXIocmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyLmRhdGEoKSksIGJ1ZmZlci5zaXplKCkp
OwotfQotCi12b2lkIHdyaXRlVG9EaXNrKHN0ZDo6dW5pcXVlX3B0cjxLZXllZEVuY29kZXI+JiYg
ZW5jb2RlciwgU3RyaW5nJiYgcGF0aCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKLQotICAgIGF1dG8gcmF3RGF0YSA9IGVuY29kZXItPmZpbmlzaEVuY29kaW5nKCk7Ci0gICAg
aWYgKCFyYXdEYXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGaWxlU3lzdGVtOjpQbGF0Zm9y
bUZpbGVIYW5kbGUgaGFuZGxlID0gRmlsZVN5c3RlbTo6b3BlbkFuZExvY2tGaWxlKHBhdGgsIEZp
bGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6V3JpdGUpOwotICAgIGlmIChoYW5kbGUgPT0gRmlsZVN5
c3RlbTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byB3cml0dGVuQnl0ZXMgPSBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShoYW5kbGUsIHJhd0Rh
dGEtPmRhdGEoKSwgcmF3RGF0YS0+c2l6ZSgpKTsKLSAgICBGaWxlU3lzdGVtOjp1bmxvY2tBbmRD
bG9zZUZpbGUoaGFuZGxlKTsKLQotICAgIGlmICh3cml0dGVuQnl0ZXMgIT0gc3RhdGljX2Nhc3Q8
aW50NjRfdD4ocmF3RGF0YS0+c2l6ZSgpKSkKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoRGlz
a1BlcnNpc3RlbmN5LCAiRGlzayBwZXJzaXN0ZW5jeTogV2Ugb25seSB3cm90ZSAlZCBvdXQgb2Yg
JXp1IGJ5dGVzIHRvIGRpc2siLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4od3JpdHRlbkJ5dGVzKSwg
cmF3RGF0YS0+c2l6ZSgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QZXJzaXN0ZW5jeVV0aWxzLmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9QZXJzaXN0ZW5jeVV0aWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDE2MDI3MGYxOTE2OGYzN2Y5ZDgyOWFhZWQ1NzFiNzY2NzUyZjlkYmUuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUGVyc2lzdGVuY3lVdGlscy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxXZWJDb3JlL0tleWVk
Q29kaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6S2V5ZWREZWNvZGVyPiBjcmVhdGVGb3JGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci12b2lk
IHdyaXRlVG9EaXNrKHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpLZXllZEVuY29kZXI+JiYsIFN0
cmluZyYmIHBhdGgpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTcxODMyMDMyNGNjNmI5YjY0
NDRhN2M2ZjZiMjQxZDhiYWZkMDEwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjk3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmUuaCIKLQotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRl
ICJQbHVnaW5Qcm9jZXNzTWFuYWdlci5oIgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NQcm94eS5o
IgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5oIgot
I2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NUZWxlbWV0cnkuaCIKLSNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9LZXllZENvZGluZy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VM
b2FkU3RhdGlzdGljcy5oPgotI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KLSNp
bmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi0j
aWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KLWNvbnN0ZXhwciB1bnNpZ25lZCBzdGF0aXN0aWNzTW9kZWxWZXJzaW9uIHsgMTQgfTsK
LWNvbnN0ZXhwciB1bnNpZ25lZCBtYXhOdW1iZXJPZlJlY3Vyc2l2ZUNhbGxzSW5SZWRpcmVjdFRy
YWNlQmFjayB7IDUwIH07Ci1jb25zdGV4cHIgU2Vjb25kcyBtaW5pbXVtU3RhdGlzdGljc1Byb2Nl
c3NpbmdJbnRlcnZhbCB7IDVfcyB9OwotY29uc3RleHByIHVuc2lnbmVkIG9wZXJhdGluZ0RhdGVz
V2luZG93IHsgMzAgfTsKLWNvbnN0ZXhwciB1bnNpZ25lZCBtYXhJbXBvcnRhbmNlIHsgMyB9Owot
c3RhdGljIGNvbnN0IGNoYXIqIGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UgeyAiM3JkcGFy
dHl0ZXN0d2Via2l0Lm9yZyIgfTsKLQotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotc3RhdGlj
IFN0cmluZyBkb21haW5zVG9TdHJpbmcoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMpCi17
Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9t
YWlucykgewotICAgICAgICBpZiAoIWJ1aWxkZXIuaXNFbXB0eSgpKQotICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChkb21haW4p
OwotICAgIH0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotfQotI2VuZGlmCi0KLWNs
YXNzIE9wZXJhdGluZ0RhdGUgewotcHVibGljOgotICAgIE9wZXJhdGluZ0RhdGUoKSA9IGRlZmF1
bHQ7Ci0KLSAgICBzdGF0aWMgT3BlcmF0aW5nRGF0ZSBmcm9tV2FsbFRpbWUoV2FsbFRpbWUgdGlt
ZSkKLSAgICB7Ci0gICAgICAgIGRvdWJsZSBtcyA9IHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS5t
aWxsaXNlY29uZHMoKTsKLSAgICAgICAgaW50IHllYXIgPSBtc1RvWWVhcihtcyk7Ci0gICAgICAg
IGludCB5ZWFyRGF5ID0gZGF5SW5ZZWFyKG1zLCB5ZWFyKTsKLSAgICAgICAgaW50IG1vbnRoID0g
bW9udGhGcm9tRGF5SW5ZZWFyKHllYXJEYXksIGlzTGVhcFllYXIoeWVhcikpOwotICAgICAgICBp
bnQgbW9udGhEYXkgPSBkYXlJbk1vbnRoRnJvbURheUluWWVhcih5ZWFyRGF5LCBpc0xlYXBZZWFy
KHllYXIpKTsKLQotICAgICAgICByZXR1cm4gT3BlcmF0aW5nRGF0ZSB7IHllYXIsIG1vbnRoLCBt
b250aERheSB9OwotICAgIH0KLQotICAgIHN0YXRpYyBPcGVyYXRpbmdEYXRlIHRvZGF5KCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUoV2FsbFRpbWU6
Om5vdygpKTsKLSAgICB9Ci0KLSAgICBTZWNvbmRzIHNlY29uZHNTaW5jZUVwb2NoKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBTZWNvbmRzIHsgZGF0ZVRvRGF5c0Zyb20xOTcwKG1feWVh
ciwgbV9tb250aCwgbV9tb250aERheSkgKiBzZWNvbmRzUGVyRGF5IH07Ci0gICAgfQotCi0gICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IE9wZXJhdGluZ0RhdGUmIG90aGVyKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fbW9udGhEYXkgPT0gb3RoZXIubV9tb250aERheSAmJiBtX21vbnRo
ID09IG90aGVyLm1fbW9udGggJiYgbV95ZWFyID09IG90aGVyLm1feWVhcjsKLSAgICB9Ci0KLSAg
ICBib29sIG9wZXJhdG9yPChjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhlcikgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBzZWNvbmRzU2luY2VFcG9jaCgpIDwgb3RoZXIuc2Vjb25kc1NpbmNl
RXBvY2goKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgT3BlcmF0aW5nRGF0
ZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gc2Vjb25kc1NpbmNlRXBvY2go
KSA8PSBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBP
cGVyYXRpbmdEYXRlKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBtb250aERheSkKLSAgICAgICAg
OiBtX3llYXIoeWVhcikKLSAgICAgICAgLCBtX21vbnRoKG1vbnRoKQotICAgICAgICAsIG1fbW9u
dGhEYXkobW9udGhEYXkpCi0gICAgeyB9Ci0KLSAgICBpbnQgbV95ZWFyIHsgMCB9OwotICAgIGlu
dCBtX21vbnRoIHsgMCB9OyAvLyBbMCwgMTFdLgotICAgIGludCBtX21vbnRoRGF5IHsgMCB9OyAv
LyBbMSwgMzFdLgotfTsKLQotc3RhdGljIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtZXJnZU9wZXJh
dGluZ0RhdGVzKGNvbnN0IFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYgZXhpc3RpbmdEYXRlcywgVmVj
dG9yPE9wZXJhdGluZ0RhdGU+JiYgbmV3RGF0ZXMpCi17Ci0gICAgaWYgKGV4aXN0aW5nRGF0ZXMu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gV1RGTW92ZShuZXdEYXRlcyk7Ci0KLSAgICBWZWN0
b3I8T3BlcmF0aW5nRGF0ZT4gbWVyZ2VkRGF0ZXMoZXhpc3RpbmdEYXRlcy5zaXplKCkgKyBuZXdE
YXRlcy5zaXplKCkpOwotCi0gICAgLy8gTWVyZ2UgdGhlIHR3byBzb3J0ZWQgdmVjdG9ycyBvZiBk
YXRlcy4KLSAgICBzdGQ6Om1lcmdlKGV4aXN0aW5nRGF0ZXMuYmVnaW4oKSwgZXhpc3RpbmdEYXRl
cy5lbmQoKSwgbmV3RGF0ZXMuYmVnaW4oKSwgbmV3RGF0ZXMuZW5kKCksIG1lcmdlZERhdGVzLmJl
Z2luKCkpOwotICAgIC8vIFJlbW92ZSBkdXBsaWNhdGUgZGF0ZXMuCi0gICAgcmVtb3ZlUmVwZWF0
ZWRFbGVtZW50cyhtZXJnZWREYXRlcyk7Ci0KLSAgICAvLyBEcm9wIG9sZCBkYXRlcyB1bnRpbCB0
aGUgVmVjdG9yIHNpemUgcmVhY2hlcyBvcGVyYXRpbmdEYXRlc1dpbmRvdy4KLSAgICB3aGlsZSAo
bWVyZ2VkRGF0ZXMuc2l6ZSgpID4gb3BlcmF0aW5nRGF0ZXNXaW5kb3cpCi0gICAgICAgIG1lcmdl
ZERhdGVzLnJlbW92ZSgwKTsKLQotICAgIHJldHVybiBtZXJnZWREYXRlczsKLX0KLQotc3RydWN0
IFN0YXRpc3RpY3NMYXN0U2VlbiB7Ci0gICAgU3RyaW5nIHRvcFByaXZhdGVseU93bmVkRG9tYWlu
OwotICAgIFdhbGxUaW1lIGxhc3RTZWVuOwotfTsKLQotc3RhdGljIHZvaWQgcHJ1bmVSZXNvdXJj
ZXMoSGFzaE1hcDxTdHJpbmcsIFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiBzdGF0
aXN0aWNzTWFwLCBWZWN0b3I8U3RhdGlzdGljc0xhc3RTZWVuPiYgc3RhdGlzdGljc1RvUHJ1bmUs
IHNpemVfdCYgbnVtYmVyT2ZFbnRyaWVzVG9QcnVuZSkKLXsKLSAgICBpZiAoc3RhdGlzdGljc1Rv
UHJ1bmUuc2l6ZSgpID4gbnVtYmVyT2ZFbnRyaWVzVG9QcnVuZSkgewotICAgICAgICBzdGQ6OnNv
cnQoc3RhdGlzdGljc1RvUHJ1bmUuYmVnaW4oKSwgc3RhdGlzdGljc1RvUHJ1bmUuZW5kKCksIFtd
KGNvbnN0IFN0YXRpc3RpY3NMYXN0U2VlbiYgYSwgY29uc3QgU3RhdGlzdGljc0xhc3RTZWVuJiBi
KSB7Ci0gICAgICAgICAgICByZXR1cm4gYS5sYXN0U2VlbiA8IGIubGFzdFNlZW47Ci0gICAgICAg
IH0pOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwLCBlbmQgPSBzdGQ6Om1pbihudW1i
ZXJPZkVudHJpZXNUb1BydW5lLCBzdGF0aXN0aWNzVG9QcnVuZS5zaXplKCkpOyBpICE9IGVuZDsg
KytpLCAtLW51bWJlck9mRW50cmllc1RvUHJ1bmUpCi0gICAgICAgIHN0YXRpc3RpY3NNYXAucmVt
b3ZlKHN0YXRpc3RpY3NUb1BydW5lW2ldLnRvcFByaXZhdGVseU93bmVkRG9tYWluKTsKLX0KLQot
c3RhdGljIHVuc2lnbmVkIGNvbXB1dGVJbXBvcnRhbmNlKGNvbnN0IFJlc291cmNlTG9hZFN0YXRp
c3RpY3MmIHJlc291cmNlU3RhdGlzdGljKQotewotICAgIHVuc2lnbmVkIGltcG9ydGFuY2UgPSBt
YXhJbXBvcnRhbmNlOwotICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNv
dXJjZSkKLSAgICAgICAgaW1wb3J0YW5jZSAtPSAxOwotICAgIGlmICghcmVzb3VyY2VTdGF0aXN0
aWMuaGFkVXNlckludGVyYWN0aW9uKQotICAgICAgICBpbXBvcnRhbmNlIC09IDI7Ci0gICAgcmV0
dXJuIGltcG9ydGFuY2U7Ci19Ci0KLVJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlKFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZSYgc3RvcmUsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQotICAgIDogbV9zdG9yZShzdG9y
ZSkKLSAgICAsIG1fd29ya1F1ZXVlKHdvcmtRdWV1ZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHJlZ2lzdGVyVXNlckRlZmF1
bHRzSWZOZWVkZWQoKTsKLSNlbmRpZgotICAgIGluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlm
TmVjZXNzYXJ5KCk7Ci0KLSAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2hBZnRlcig1X3MsIFt3ZWFr
VGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0gewotICAgICAgICBpZiAod2Vha1RoaXMpCi0gICAg
ICAgICAgICB3ZWFrVGhpcy0+Y2FsY3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5KCk7Ci0gICAgfSk7
Ci19Ci0KLVJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6flJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZSgpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRQZXJzaXN0
ZW50U3RvcmFnZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UmIHBlcnNp
c3RlbnRTdG9yYWdlKQotewotICAgIG1fcGVyc2lzdGVudFN0b3JhZ2UgPSBtYWtlV2Vha1B0cihw
ZXJzaXN0ZW50U3RvcmFnZSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpjYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkoKSBjb25zdAotewotICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKG1fcGFyYW1ldGVycy5zaG91bGRTdWJt
aXRUZWxlbWV0cnkpCi0gICAgICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6
OmNhbGN1bGF0ZUFuZFN1Ym1pdCgqdGhpcyk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
KGJvb2wgdmFsdWUpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgbV9w
YXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgPSB2
YWx1ZTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFNo
b3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUp
Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgbV9wYXJhbWV0ZXJzLnNo
b3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsID0gdmFsdWU7Ci19
Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTaG91bGRTdWJt
aXRUZWxlbWV0cnkoYm9vbCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKLSAgICBtX3BhcmFtZXRlcnMuc2hvdWxkU3VibWl0VGVsZW1ldHJ5ID0gdmFsdWU7Ci19Ci0K
LXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZW1vdmVEYXRhUmVjb3Jk
cyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCi17Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIXNob3VsZFJlbW92ZURhdGFSZWNvcmRzKCkp
IHsKLSAgICAgICAgY2FsbGJhY2soKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIG1fYWN0aXZlUGx1Z2luVG9rZW5zLmNsZWFy
KCk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBwbHVnaW4gOiBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6
c2luZ2xldG9uKCkucGx1Z2luUHJvY2Vzc2VzKCkpCi0gICAgICAgIG1fYWN0aXZlUGx1Z2luVG9r
ZW5zLmFkZChwbHVnaW4tPnBsdWdpblByb2Nlc3NUb2tlbigpKTsKLSNlbmRpZgotCi0gICAgYXV0
byBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMgPSB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlu
c1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IoKTsKLSAgICBpZiAocHJldmFsZW50UmVzb3VyY2VEb21h
aW5zLmlzRW1wdHkoKSkgewotICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgUkVMRUFTRV9MT0dfSU5GT19J
RihtX2RlYnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFi
b3V0IHRvIHJlbW92ZSBkYXRhIHJlY29yZHMgZm9yICV7cHVibGljfXMuIiwgZG9tYWluc1RvU3Ry
aW5nKHByZXZhbGVudFJlc291cmNlRG9tYWlucykudXRmOCgpLmRhdGEoKSk7Ci0jZW5kaWYKLQot
ICAgIHNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKHRydWUpOwotCi0gICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFtwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMgPSBjcm9zc1RocmVhZENvcHko
cHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwg
d2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFS
ZWNvcmRzV2VyZVNjYW5uZWQgPSBtX3BhcmFtZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0
YVJlY29yZHNXZXJlU2Nhbm5lZCwgd29ya1F1ZXVlID0gbV93b3JrUXVldWUuY29weVJlZigpXSAo
KSBtdXRhYmxlIHsKLSAgICAgICAgV2ViUHJvY2Vzc1Byb3h5OjpkZWxldGVXZWJzaXRlRGF0YUZv
clRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zSW5BbGxQZXJzaXN0ZW50RGF0YVN0b3JlcyhX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1vbml0b3JlZERhdGFUeXBlcygpLCBXVEZN
b3ZlKHByZXZhbGVudFJlc291cmNlRG9tYWlucyksIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFS
ZWNvcmRzV2VyZVNjYW5uZWQsIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB3ZWFrVGhp
cyA9IFdURk1vdmUod2Vha1RoaXMpLCB3b3JrUXVldWUgPSB3b3JrUXVldWUuY29weVJlZigpXShj
b25zdCBIYXNoU2V0PFN0cmluZz4mIGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSBtdXRh
YmxlIHsKLSAgICAgICAgICAgIHdvcmtRdWV1ZS0+ZGlzcGF0Y2goW3RvcERvbWFpbnMgPSBjcm9z
c1RocmVhZENvcHkoZG9tYWluc1dpdGhEZWxldGVkV2Vic2l0ZURhdGEpLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCB3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpXSAoKSBtdXRhYmxl
IHsKLSAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGNhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbiA6
IHRvcERvbWFpbnMpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byYgc3RhdGlzdGljID0gd2Vh
a1RoaXMtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJldmFsZW50
UmVzb3VyY2VEb21haW4pOwotICAgICAgICAgICAgICAgICAgICArK3N0YXRpc3RpYy5kYXRhUmVj
b3Jkc1JlbW92ZWQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdlYWtUaGlz
LT5zZXREYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgY2Fs
bGJhY2soKTsKLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICAgICAgICAgICAgICBSRUxF
QVNFX0xPR19JTkZPX0lGKHdlYWtUaGlzLT5tX2RlYnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkRvbmUgcmVtb3ZpbmcgZGF0YSByZWNvcmRzLiIpOwotI2Vu
ZGlmCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXVuc2lnbmVk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVjdXJzaXZlbHlHZXRBbGxEb21h
aW5zVGhhdEhhdmVSZWRpcmVjdGVkVG9UaGlzRG9tYWluKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljLCBIYXNoU2V0PFN0cmluZz4mIGRvbWFp
bnNUaGF0SGF2ZVJlZGlyZWN0ZWRUbywgdW5zaWduZWQgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscykg
Y29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChudW1i
ZXJPZlJlY3Vyc2l2ZUNhbGxzID49IG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0
VHJhY2VCYWNrKSB7Ci0gICAgICAgIC8vIE1vZGVsIHZlcnNpb24gMTQgaW52b2tlcyBhIGRlbGli
ZXJhdGUgcmUtY2xhc3NpZmljYXRpb24gb2YgdGhlIHdob2xlIHNldC4KLSAgICAgICAgaWYgKHN0
YXRpc3RpY3NNb2RlbFZlcnNpb24gIT0gMTQpCi0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgUkVMRUFTRV9MT0coUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgIkhpdCAl
dSByZWN1cnNpdmUgY2FsbHMgaW4gcmVkaXJlY3QgYmFja3RyYWNlLiBSZXR1cm5pbmcgZWFybHku
IiwgbWF4TnVtYmVyT2ZSZWN1cnNpdmVDYWxsc0luUmVkaXJlY3RUcmFjZUJhY2spOwotICAgICAg
ICByZXR1cm4gbnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKLSAgICB9Ci0KLSAgICBudW1iZXJPZlJl
Y3Vyc2l2ZUNhbGxzKys7Ci0KLSAgICBmb3IgKGF1dG8mIHN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RGcm9tRG9tYWluIDogcmVzb3VyY2VTdGF0aXN0aWMuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNGcm9tLnZhbHVlcygpKSB7Ci0gICAgICAgIGF1dG8gbWFwRW50cnkgPSBtX3Jlc291cmNlU3Rh
dGlzdGljc01hcC5maW5kKHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tRG9tYWluKTsKLSAg
ICAgICAgaWYgKG1hcEVudHJ5ID09IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuZCgpIHx8IG1h
cEVudHJ5LT52YWx1ZS5pc1ByZXZhbGVudFJlc291cmNlKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGlmIChkb21haW5zVGhhdEhhdmVSZWRpcmVjdGVkVG8uYWRkKG1hcEVudHJ5LT52
YWx1ZS5oaWdoTGV2ZWxEb21haW4pLmlzTmV3RW50cnkpCi0gICAgICAgICAgICBudW1iZXJPZlJl
Y3Vyc2l2ZUNhbGxzID0gcmVjdXJzaXZlbHlHZXRBbGxEb21haW5zVGhhdEhhdmVSZWRpcmVjdGVk
VG9UaGlzRG9tYWluKG1hcEVudHJ5LT52YWx1ZSwgZG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRv
LCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKTsKLSAgICB9Ci0gICAgZm9yIChhdXRvJiB0b3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0RnJvbURvbWFpbiA6IHJlc291cmNlU3RhdGlzdGljLnRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzRnJvbS52YWx1ZXMoKSkgewotICAgICAgICBhdXRvIG1hcEVudHJ5ID0gbV9y
ZXNvdXJjZVN0YXRpc3RpY3NNYXAuZmluZCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbURvbWFp
bik7Ci0gICAgICAgIGlmIChtYXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQo
KSB8fCBtYXBFbnRyeS0+dmFsdWUuaXNQcmV2YWxlbnRSZXNvdXJjZSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBpZiAoZG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvLmFkZChtYXBF
bnRyeS0+dmFsdWUuaGlnaExldmVsRG9tYWluKS5pc05ld0VudHJ5KQotICAgICAgICAgICAgbnVt
YmVyT2ZSZWN1cnNpdmVDYWxscyA9IHJlY3Vyc2l2ZWx5R2V0QWxsRG9tYWluc1RoYXRIYXZlUmVk
aXJlY3RlZFRvVGhpc0RvbWFpbihtYXBFbnRyeS0+dmFsdWUsIGRvbWFpbnNUaGF0SGF2ZVJlZGly
ZWN0ZWRUbywgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51
bWJlck9mUmVjdXJzaXZlQ2FsbHM7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYykKLXsKLSAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChyZXNvdXJjZVN0YXRpc3RpYy5p
c1ByZXZhbGVudFJlc291cmNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGF1dG8mIHN1
YnJlc291cmNlRG9tYWluUmVkaXJlY3RlZFRvIDogcmVzb3VyY2VTdGF0aXN0aWMuc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUby52YWx1ZXMoKSkgewotICAgICAgICBhdXRvIG1hcEVudHJ5ID0g
bV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZmluZChzdWJyZXNvdXJjZURvbWFpblJlZGlyZWN0ZWRU
byk7Ci0gICAgICAgIGlmIChtYXBFbnRyeSAhPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQo
KSAmJiBtYXBFbnRyeS0+dmFsdWUuaXNQcmV2YWxlbnRSZXNvdXJjZSkgewotICAgICAgICAgICAg
c2V0UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZh
bGVuY2U6OkhpZ2gpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgZm9yIChhdXRvJiB0b3BGcmFtZURvbWFpblJlZGlyZWN0ZWRUbyA6IHJlc291cmNlU3RhdGlz
dGljLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8udmFsdWVzKCkpIHsKLSAgICAgICAgYXV0byBt
YXBFbnRyeSA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmZpbmQodG9wRnJhbWVEb21haW5SZWRp
cmVjdGVkVG8pOwotICAgICAgICBpZiAobWFwRW50cnkgIT0gbV9yZXNvdXJjZVN0YXRpc3RpY3NN
YXAuZW5kKCkgJiYgbWFwRW50cnktPnZhbHVlLmlzUHJldmFsZW50UmVzb3VyY2UpIHsKLSAgICAg
ICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxv
YWRQcmV2YWxlbmNlOjpIaWdoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUHJldmFs
ZW50RHVlVG9EZWJ1Z01vZGUoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0
aWMpCi17Ci0gICAgaWYgKCFtX2RlYnVnTW9kZUVuYWJsZWQpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiByZXNvdXJjZVN0YXRpc3RpYy5oaWdoTGV2ZWxEb21haW4gPT0gZGVi
dWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSB8fCByZXNvdXJjZVN0YXRpc3RpYy5oaWdoTGV2ZWxE
b21haW4gPT0gbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlOwotfQotCi12b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVj
b3JkcygpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAobV9w
YXJhbWV0ZXJzLnNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFs
KSB7Ci0gICAgICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBtX3Jlc291cmNlU3Rh
dGlzdGljc01hcC52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKGlzUHJldmFsZW50RHVlVG9E
ZWJ1Z01vZGUocmVzb3VyY2VTdGF0aXN0aWMpKQotICAgICAgICAgICAgICAgIHNldFByZXZhbGVu
dFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdo
KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCFyZXNvdXJjZVN0YXRpc3RpYy5pc1ZlcnlQcmV2YWxl
bnRSZXNvdXJjZSkgewotICAgICAgICAgICAgICAgIG1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJl
Y3RlZFRvUHJldmFsZW50KHJlc291cmNlU3RhdGlzdGljKTsKLSAgICAgICAgICAgICAgICBhdXRv
IGN1cnJlbnRQcmV2YWxlbmNlID0gcmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJj
ZSA/IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2ggOiBSZXNvdXJjZUxvYWRQcmV2YWxlbmNl
OjpMb3c7Ci0gICAgICAgICAgICAgICAgYXV0byBuZXdQcmV2YWxlbmNlID0gbV9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzQ2xhc3NpZmllci5jYWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2UocmVzb3Vy
Y2VTdGF0aXN0aWMsIGN1cnJlbnRQcmV2YWxlbmNlKTsKLSAgICAgICAgICAgICAgICBpZiAobmV3
UHJldmFsZW5jZSAhPSBjdXJyZW50UHJldmFsZW5jZSkKLSAgICAgICAgICAgICAgICAgICAgc2V0
UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMsIG5ld1ByZXZhbGVuY2UpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVtb3ZlRGF0YVJlY29yZHMoW3Ro
aXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXSB7Ci0gICAgICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIHBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCk7Ci0gICAgICAgIGlmICht
X3BlcnNpc3RlbnRTdG9yYWdlKQotICAgICAgICAgICAgbV9wZXJzaXN0ZW50U3RvcmFnZS0+c2No
ZWR1bGVPcldyaXRlTWVtb3J5U3RvcmUoUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRT
dG9yYWdlOjpGb3JjZUltbWVkaWF0ZVdyaXRlOjpObyk7Ci0KLSAgICAgICAgaWYgKCFtX3BhcmFt
ZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW10gewot
ICAgICAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojpub3RpZnlQYWdlU3RhdGlzdGljc0FuZERhdGFS
ZWNvcmRzUHJvY2Vzc2VkKCk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi12b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdHJp
bmcmIHN1YkZyYW1lUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1hcnlE
b21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8mIHN1YkZyYW1lU3RhdGlzdGljID0gZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihzdWJGcmFtZVByaW1hcnlEb21haW4pOwot
ICAgIGlmIChzaG91bGRCbG9ja0FuZFB1cmdlQ29va2llcyhzdWJGcmFtZVN0YXRpc3RpYykpIHsK
LSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKCFzaG91bGRCbG9ja0FuZEtlZXBDb29raWVzKHN1YkZyYW1lU3RhdGlzdGlj
KSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0cnVlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1f
c3RvcmUpLCBzdWJGcmFtZVByaW1hcnlEb21haW4gPSBzdWJGcmFtZVByaW1hcnlEb21haW4uaXNv
bGF0ZWRDb3B5KCksIHRvcEZyYW1lUHJpbWFyeURvbWFpbiA9IHRvcEZyYW1lUHJpbWFyeURvbWFp
bi5pc29sYXRlZENvcHkoKSwgZnJhbWVJRCwgcGFnZUlELCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBzdG9yZS0+Y2Fs
bEhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZUhhbmRsZXIoc3ViRnJhbWVQcmltYXJ5RG9tYWluLCB0
b3BGcmFtZVByaW1hcnlEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgW3N0b3JlID0gc3RvcmUuY29w
eVJlZigpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShi
b29sIHJlc3VsdCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVl
KCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIHJlc3VsdF0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIocmVzdWx0KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQot
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNj
ZXNzKFN0cmluZyYmIHN1YkZyYW1lUHJpbWFyeURvbWFpbiwgU3RyaW5nJiYgdG9wRnJhbWVQcmlt
YXJ5RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgcHJvbXB0
RW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVzKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQot
ICAgIGF1dG8mIHN1YkZyYW1lU3RhdGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UHJpbWFyeURvbWFpbihzdWJGcmFtZVByaW1hcnlEb21haW4pOwotICAgIGlmIChzaG91bGRCbG9j
a0FuZFB1cmdlQ29va2llcyhzdWJGcmFtZVN0YXRpc3RpYykpIHsKLSNpZiAhUkVMRUFTRV9MT0df
RElTQUJMRUQKLSAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRihtX2RlYnVnTG9nZ2luZ0VuYWJs
ZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkNhbm5vdCBncmFudCBzdG9yYWdlIGFj
Y2VzcyB0byAle3B1YmxpY31zIHNpbmNlIGl0cyBjb29raWVzIGFyZSBibG9ja2VkIGluIHRoaXJk
LXBhcnR5IGNvbnRleHRzIGFuZCBpdCBoYXMgbm90IHJlY2VpdmVkIHVzZXIgaW50ZXJhY3Rpb24g
YXMgZmlyc3QtcGFydHkuIiwgc3ViRnJhbWVQcmltYXJ5RG9tYWluLnV0ZjgoKS5kYXRhKCkpOwot
I2VuZGlmCi0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0b3JhZ2VBY2Nlc3NTdGF0dXM6OkNh
bm5vdFJlcXVlc3RBY2Nlc3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFz
aG91bGRCbG9ja0FuZEtlZXBDb29raWVzKHN1YkZyYW1lU3RhdGlzdGljKSkgewotI2lmICFSRUxF
QVNFX0xPR19ESVNBQkxFRAotICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKG1fZGVidWdMb2dn
aW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiTm8gbmVlZCB0byBncmFu
dCBzdG9yYWdlIGFjY2VzcyB0byAle3B1YmxpY31zIHNpbmNlIGl0cyBjb29raWVzIGFyZSBub3Qg
YmxvY2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cy4iLCBzdWJGcmFtZVByaW1hcnlEb21haW4u
dXRmOCgpLmRhdGEoKSk7Ci0jZW5kaWYKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFn
ZUFjY2Vzc1N0YXR1czo6SGFzQWNjZXNzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGF1dG8gdXNlcldhc1Byb21wdGVkRWFybGllciA9IHByb21wdEVuYWJsZWQgJiYgaGFzVXNlckdy
YW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdChzdWJGcmFtZVN0YXRpc3RpYywgdG9wRnJh
bWVQcmltYXJ5RG9tYWluKTsKLSAgICBpZiAocHJvbXB0RW5hYmxlZCAmJiAhdXNlcldhc1Byb21w
dGVkRWFybGllcikgewotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgICAgICBSRUxFQVNF
X0xPR19JTkZPX0lGKG1fZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RlYnVnLCAiQWJvdXQgdG8gYXNrIHRoZSB1c2VyIHdoZXRoZXIgdGhleSB3YW50IHRvIGdyYW50
IHN0b3JhZ2UgYWNjZXNzIHRvICV7cHVibGljfXMgdW5kZXIgJXtwdWJsaWN9cyBvciBub3QuIiwg
c3ViRnJhbWVQcmltYXJ5RG9tYWluLnV0ZjgoKS5kYXRhKCksIHRvcEZyYW1lUHJpbWFyeURvbWFp
bi51dGY4KCkuZGF0YSgpKTsKLSNlbmRpZgotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9y
YWdlQWNjZXNzU3RhdHVzOjpSZXF1aXJlc1VzZXJQcm9tcHQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfSBlbHNlIGlmICh1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyKSB7Ci0jaWYgIVJFTEVBU0VfTE9H
X0RJU0FCTEVECi0gICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdFbmFi
bGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJTdG9yYWdlIGFjY2VzcyB3YXMgZ3Jh
bnRlZCB0byAle3B1YmxpY31zIHVuZGVyICV7cHVibGljfXMuIiwgc3ViRnJhbWVQcmltYXJ5RG9t
YWluLnV0ZjgoKS5kYXRhKCksIHRvcEZyYW1lUHJpbWFyeURvbWFpbi51dGY4KCkuZGF0YSgpKTsK
LSNlbmRpZgotICAgIH0KLQotICAgIHN1YkZyYW1lU3RhdGlzdGljLnRpbWVzQWNjZXNzZWRBc0Zp
cnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkrKzsKLQotICAgIGdyYW50U3RvcmFnZUFjY2Vz
c0ludGVybmFsKFdURk1vdmUoc3ViRnJhbWVQcmltYXJ5RG9tYWluKSwgV1RGTW92ZSh0b3BGcmFt
ZVByaW1hcnlEb21haW4pLCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIs
IFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYm9vbCB3
YXNHcmFudGVkQWNjZXNzKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2Fz
R3JhbnRlZEFjY2VzcyA/IFN0b3JhZ2VBY2Nlc3NTdGF0dXM6Okhhc0FjY2VzcyA6IFN0b3JhZ2VB
Y2Nlc3NTdGF0dXM6OkNhbm5vdFJlcXVlc3RBY2Nlc3MpOwotICAgIH0pOwotfQotCi12b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRl
ck9wZW5lcihTdHJpbmcmJiBwcmltYXJ5RG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCB1aW50
NjRfdCBvcGVuZXJQYWdlSUQsIFN0cmluZyYmIG9wZW5lclByaW1hcnlEb21haW4pCi17Ci0gICAg
QVNTRVJUKHByaW1hcnlEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgIT0gb3BlbmVyUHJpbWFy
eURvbWFpbik7Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAocHJp
bWFyeURvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9PSBvcGVuZXJQcmltYXJ5RG9tYWluKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3NT
dGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1h
cnlEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MpOwotICAgIGF1dG8gY29va2llc0Jsb2NrZWRB
bmRQdXJnZWQgPSBzaG91bGRCbG9ja0FuZFB1cmdlQ29va2llcyhkb21haW5Jbk5lZWRPZlN0b3Jh
Z2VBY2Nlc3NTdGF0aXN0aWMpOwotCi0gICAgLy8gVGhlIGRvbWFpbiBhbHJlYWR5IGhhcyBhY2Nl
c3MgaWYgaXRzIGNvb2tpZXMgYXJlIG5vdCBibG9ja2VkLgotICAgIGlmICghY29va2llc0Jsb2Nr
ZWRBbmRQdXJnZWQgJiYgIXNob3VsZEJsb2NrQW5kS2VlcENvb2tpZXMoZG9tYWluSW5OZWVkT2ZT
dG9yYWdlQWNjZXNzU3RhdGlzdGljKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECi0gICAgUkVMRUFTRV9MT0dfSU5GT19JRihtX2RlYnVnTG9nZ2luZ0VuYWJs
ZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIltUZW1wb3JhcnkgY29tYmF0aWJpbGl0
eSBmaXhdIFN0b3JhZ2UgYWNjZXNzIHdhcyBncmFudGVkIGZvciAle3B1YmxpY31zIHVuZGVyIG9w
ZW5lciBwYWdlIGZyb20gJXtwdWJsaWN9cywgd2l0aCB1c2VyIGludGVyYWN0aW9uIGluIHRoZSBv
cGVuZWQgd2luZG93LiIsIHByaW1hcnlEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MudXRmOCgp
LmRhdGEoKSwgb3BlbmVyUHJpbWFyeURvbWFpbi51dGY4KCkuZGF0YSgpKTsKLSNlbmRpZgotICAg
IGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUocHJpbWFyeURvbWFpbkluTmVlZE9m
U3RvcmFnZUFjY2VzcyksIFdURk1vdmUob3BlbmVyUHJpbWFyeURvbWFpbiksIFdURjo6bnVsbG9w
dCwgb3BlbmVyUGFnZUlELCBmYWxzZSwgW10oYm9vbCkgeyB9KTsKLX0KLQotdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW50U3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBz
dWJGcmFtZUhvc3QsIFN0cmluZyYmIHRvcEZyYW1lSG9zdCwgdWludDY0X3QgZnJhbWVJRCwgdWlu
dDY0X3QgcGFnZUlELCBib29sIHVzZXJXYXNQcm9tcHRlZE5vdywgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotICAgIGF1dG8gc3ViRnJhbWVQcmltYXJ5RG9tYWluID0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljczo6cHJpbWFyeURvbWFpbihzdWJGcmFtZUhvc3QpOwotICAgIGF1dG8gdG9w
RnJhbWVQcmltYXJ5RG9tYWluID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6cHJpbWFyeURvbWFp
bih0b3BGcmFtZUhvc3QpOwotICAgIGlmICh1c2VyV2FzUHJvbXB0ZWROb3cpIHsKLSAgICAgICAg
YXV0byYgc3ViRnJhbWVTdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmlt
YXJ5RG9tYWluKHN1YkZyYW1lUHJpbWFyeURvbWFpbik7Ci0gICAgICAgIEFTU0VSVChzdWJGcmFt
ZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pOwotICAgICAgICBzdWJGcmFtZVN0YXRpc3Rp
Yy5zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKHRvcEZyYW1lUHJpbWFyeURv
bWFpbik7Ci0gICAgfQotICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoc3Vi
RnJhbWVQcmltYXJ5RG9tYWluKSwgV1RGTW92ZSh0b3BGcmFtZVByaW1hcnlEb21haW4pLCBmcmFt
ZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZE5vdywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbnRT
dG9yYWdlQWNjZXNzSW50ZXJuYWwoU3RyaW5nJiYgc3ViRnJhbWVQcmltYXJ5RG9tYWluLCBTdHJp
bmcmJiB0b3BGcmFtZVByaW1hcnlEb21haW4sIE9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCB1
aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93T3JFYXJsaWVyLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKQotewotICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwotCi0gICAgaWYgKHN1YkZyYW1lUHJpbWFyeURvbWFpbiA9PSB0b3BGcmFt
ZVByaW1hcnlEb21haW4pIHsKLSAgICAgICAgY2FsbGJhY2sodHJ1ZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogUmVtb3ZlIG1fc3RvcmFnZUFjY2Vzc1Byb21wdHNF
bmFibGVkIGNoZWNrIGlmIHByb21wdGluZyBpcyBubyBsb25nZXIgZXhwZXJpbWVudGFsLgotICAg
IGlmICh1c2VyV2FzUHJvbXB0ZWROb3dPckVhcmxpZXIgJiYgbV9zdG9yYWdlQWNjZXNzUHJvbXB0
c0VuYWJsZWQpIHsKLSAgICAgICAgYXV0byYgc3ViRnJhbWVTdGF0aXN0aWMgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHN1YkZyYW1lUHJpbWFyeURvbWFpbik7Ci0g
ICAgICAgIEFTU0VSVChzdWJGcmFtZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pOwotICAg
ICAgICBBU1NFUlQoc3ViRnJhbWVTdGF0aXN0aWMuc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVP
cmlnaW5zLmNvbnRhaW5zKHRvcEZyYW1lUHJpbWFyeURvbWFpbikpOwotICAgICAgICBzdWJGcmFt
ZVN0YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSA9IFdhbGxUaW1lOjpub3co
KTsKLSAgICB9Ci0KLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N1YkZyYW1lUHJpbWFy
eURvbWFpbiA9IHN1YkZyYW1lUHJpbWFyeURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVQ
cmltYXJ5RG9tYWluID0gdG9wRnJhbWVQcmltYXJ5RG9tYWluLmlzb2xhdGVkQ29weSgpLCBmcmFt
ZUlELCBwYWdlSUQsIHN0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgc3RvcmUtPmNhbGxHcmFudFN0b3JhZ2VB
Y2Nlc3NIYW5kbGVyKHN1YkZyYW1lUHJpbWFyeURvbWFpbiwgdG9wRnJhbWVQcmltYXJ5RG9tYWlu
LCBmcmFtZUlELCBwYWdlSUQsIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBzdG9yZSA9
IHN0b3JlLmNvcHlSZWYoKV0oYm9vbCB2YWx1ZSkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBzdG9y
ZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayksIHZhbHVlXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBjYWxsYmFjayh2YWx1ZSk7
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURh
dGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt3ZWFr
VGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwg
c2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCA9IG1fcGFyYW1ldGVy
cy5zaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLCB3b3JrUXVldWUg
PSBtX3dvcmtRdWV1ZS5jb3B5UmVmKCldICgpIG11dGFibGUgewotICAgICAgICAvLyBGSVhNRTog
VGhpcyBtZXRob2QgYmVpbmcgYSBzdGF0aWMgY2FsbCBvbiBXZWJQcm9jZXNzUHJveHkgaXMgd3Jv
bmcuCi0gICAgICAgIC8vIEl0IHNob3VsZCBiZSBvbiB0aGUgZGF0YSBzdG9yZSB0aGF0IHRoaXMg
b2JqZWN0IGJlbG9uZ3MgdG8uCi0gICAgICAgIFdlYlByb2Nlc3NQcm94eTo6dG9wUHJpdmF0ZWx5
Q29udHJvbGxlZERvbWFpbnNXaXRoV2Vic2l0ZURhdGEoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjptb25pdG9yZWREYXRhVHlwZXMoKSwgc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJl
Y29yZHNXZXJlU2Nhbm5lZCwgW3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIGNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayksIHdvcmtRdWV1ZSA9IHdvcmtRdWV1ZS5jb3B5UmVmKCldIChI
YXNoU2V0PFN0cmluZz4mJiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1dpdGhXZWJzaXRl
RGF0YSkgbXV0YWJsZSB7Ci0gICAgICAgICAgICB3b3JrUXVldWUtPmRpc3BhdGNoKFt3ZWFrVGhp
cyA9IFdURk1vdmUod2Vha1RoaXMpLCB0b3BEb21haW5zID0gY3Jvc3NUaHJlYWRDb3B5KHRvcFBy
aXZhdGVseUNvbnRyb2xsZWREb21haW5zV2l0aFdlYnNpdGVEYXRhKSwgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhp
cykgewotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZm9yIChhdXRv
JiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluIDogdG9wRG9tYWlucykgewotICAgICAgICAg
ICAgICAgICAgICBhdXRvJiBzdGF0aXN0aWMgPSB3ZWFrVGhpcy0+ZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluKTsKLSAg
ICAgICAgICAgICAgICAgICAgc3RhdGlzdGljLmdyYW5kZmF0aGVyZWQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+bV9lbmRPZkdyYW5kZmF0aGVy
aW5nVGltZXN0YW1wID0gV2FsbFRpbWU6Om5vdygpICsgd2Vha1RoaXMtPm1fcGFyYW1ldGVycy5n
cmFuZGZhdGhlcmluZ1RpbWU7Ci0gICAgICAgICAgICAgICAgaWYgKHdlYWtUaGlzLT5tX3BlcnNp
c3RlbnRTdG9yYWdlKQotICAgICAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+bV9wZXJzaXN0ZW50
U3RvcmFnZS0+c2NoZWR1bGVPcldyaXRlTWVtb3J5U3RvcmUoUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BlcnNpc3RlbnRTdG9yYWdlOjpGb3JjZUltbWVkaWF0ZVdyaXRlOjpZZXMpOwotICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgd2Vha1RoaXMtPmxvZ1Rlc3RpbmdF
dmVudCgiR3JhbmRmYXRoZXJlZCJfcyk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0g
ICAgfSk7Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCkKLXsKLSAgICBpZiAo
IW1fZGVidWdNb2RlRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIFZlY3RvcjxT
dHJpbmc+IHByaW1hcnlEb21haW5zVG9CbG9jazsKLSAgICBwcmltYXJ5RG9tYWluc1RvQmxvY2su
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyKTsKLQotICAgIGF1dG8mIHN0YXRpY1Nlc291cmNlU3Rh
dGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihkZWJ1Z1N0
YXRpY1ByZXZhbGVudFJlc291cmNlKTsKLSAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShzdGF0aWNT
ZXNvdXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7Ci0gICAgcHJp
bWFyeURvbWFpbnNUb0Jsb2NrLnVuY2hlY2tlZEFwcGVuZChkZWJ1Z1N0YXRpY1ByZXZhbGVudFJl
c291cmNlKTsKLQotICAgIGlmICghbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlLmlzRW1w
dHkoKSkgewotICAgICAgICBhdXRvJiBtYW51YWxSZXNvdXJjZVN0YXRpc3RpYyA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4obV9kZWJ1Z01hbnVhbFByZXZhbGVudFJl
c291cmNlKTsKLSAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UobWFudWFsUmVzb3VyY2VTdGF0
aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOwotICAgICAgICBwcmltYXJ5RG9t
YWluc1RvQmxvY2sudW5jaGVja2VkQXBwZW5kKG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJj
ZSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBwcmltYXJ5RG9tYWluc1RvQmxvY2s7Ci19Ci0K
LXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgZW5hYmxlKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwotCi0gICAgbV9kZWJ1Z01vZGVFbmFibGVkID0gZW5hYmxlOwotICAgIG1fZGVi
dWdMb2dnaW5nRW5hYmxlZCA9IGVuYWJsZTsKLQotICAgIGVuc3VyZVByZXZhbGVudFJlc291cmNl
c0ZvckRlYnVnTW9kZSgpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgU3RyaW5nJiBkb21h
aW4pCi17Ci0gICAgaWYgKCFtX2RlYnVnTW9kZUVuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IGRvbWFpbjsKLSAgICBhdXRvJiBy
ZXNvdXJjZVN0YXRpc3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21h
aW4oZG9tYWluKTsKLSAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYywg
UmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJM
RUQKLSAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkRp
ZCBzZXQgJXtwdWJsaWN9cyBhcyBwcmV2YWxlbnQgcmVzb3VyY2UgZm9yIHRoZSBwdXJwb3NlcyBv
ZiBJVFAgRGVidWcgTW9kZS4iLCBkb21haW4udXRmOCgpLmRhdGEoKSk7Ci0jZW5kaWYKLX0KLQot
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNjaGVkdWxlU3RhdGlzdGlj
c1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwotCi0gICAgbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRl
bnRpZmllciA9ICsrbV9sYXN0U3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcjsK
LSAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2hBZnRlcihtaW5pbXVtU3RhdGlzdGljc1Byb2Nlc3Np
bmdJbnRlcnZhbCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBzdGF0aXN0
aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyID0gKm1fcGVuZGluZ1N0YXRpc3RpY3NQcm9j
ZXNzaW5nUmVxdWVzdElkZW50aWZpZXJdIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIW1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNz
aW5nUmVxdWVzdElkZW50aWZpZXIgfHwgKm1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVx
dWVzdElkZW50aWZpZXIgIT0gc3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcikg
ewotICAgICAgICAgICAgLy8gVGhpcyByZXF1ZXN0IGhhcyBiZWVuIGNhbmNlbGVkLgotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdXBkYXRlQ29va2llQmxvY2tpbmco
W10oKSB7IH0pOwotICAgICAgICBwcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7Ci0g
ICAgfSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpjYW5j
ZWxQZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0KCkKLXsKLSAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIG1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVx
dWVzdElkZW50aWZpZXIgPSBXVEY6Om51bGxvcHQ7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgU3RyaW5nJiB0YXJn
ZXRQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIG1haW5GcmFtZVByaW1hcnlEb21haW4sIGNv
bnN0IFN0cmluZyYgc291cmNlUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiB0YXJnZXRIb3N0
LCBjb25zdCBTdHJpbmcmIG1haW5GcmFtZUhvc3QsIGJvb2wgaXNSZWRpcmVjdCwgYm9vbCBpc01h
aW5GcmFtZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGJvb2wg
YXJlVGFyZ2V0QW5kTWFpbkZyYW1lRG9tYWluc0Fzc29jaWF0ZWQgPSB0YXJnZXRQcmltYXJ5RG9t
YWluID09IG1haW5GcmFtZVByaW1hcnlEb21haW47Ci0gICAgYm9vbCBhcmVUYXJnZXRBbmRTb3Vy
Y2VEb21haW5zQXNzb2NpYXRlZCA9IHRhcmdldFByaW1hcnlEb21haW4gPT0gc291cmNlUHJpbWFy
eURvbWFpbjsKLQotICAgIGJvb2wgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gZmFsc2U7Ci0gICAg
aWYgKCFpc01haW5GcmFtZSAmJiB0YXJnZXRIb3N0ICE9IG1haW5GcmFtZUhvc3QgJiYgIShhcmVU
YXJnZXRBbmRNYWluRnJhbWVEb21haW5zQXNzb2NpYXRlZCB8fCBhcmVUYXJnZXRBbmRTb3VyY2VE
b21haW5zQXNzb2NpYXRlZCkpIHsKLSAgICAgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFp
bik7Ci0gICAgICAgIHRhcmdldFN0YXRpc3RpY3MubGFzdFNlZW4gPSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzOjpyZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxsVGltZTo6bm93KCkpOwotICAgICAgICBp
ZiAodGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWlu
RnJhbWVQcmltYXJ5RG9tYWluKS5pc05ld0VudHJ5KQotICAgICAgICAgICAgc3RhdGlzdGljc1dl
cmVVcGRhdGVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoaXNSZWRpcmVjdCAmJiAhYXJlVGFy
Z2V0QW5kU291cmNlRG9tYWluc0Fzc29jaWF0ZWQpIHsKLSAgICAgICAgaWYgKGlzTWFpbkZyYW1l
KSB7Ci0gICAgICAgICAgICBhdXRvJiByZWRpcmVjdGluZ09yaWdpblN0YXRpc3RpY3MgPSBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHNvdXJjZVByaW1hcnlEb21haW4p
OwotICAgICAgICAgICAgaWYgKHJlZGlyZWN0aW5nT3JpZ2luU3RhdGlzdGljcy50b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvLmFkZCh0YXJnZXRQcmltYXJ5RG9tYWluKS5pc05ld0VudHJ5KQotICAg
ICAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7Ci0gICAgICAgICAgICBh
dXRvJiB0YXJnZXRTdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFy
eURvbWFpbih0YXJnZXRQcmltYXJ5RG9tYWluKTsKLSAgICAgICAgICAgIGlmICh0YXJnZXRTdGF0
aXN0aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5hZGQoc291cmNlUHJpbWFyeURvbWFp
bikuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0
cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXV0byYgcmVkaXJlY3RpbmdPcmln
aW5TdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihz
b3VyY2VQcmltYXJ5RG9tYWluKTsKLSAgICAgICAgICAgIGlmIChyZWRpcmVjdGluZ09yaWdpblN0
YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5hZGQodGFyZ2V0UHJpbWFyeURv
bWFpbikuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQg
PSB0cnVlOwotICAgICAgICAgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFpbik7Ci0gICAg
ICAgICAgICBpZiAodGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zy
b20uYWRkKHNvdXJjZVByaW1hcnlEb21haW4pLmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAg
c3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
IChzdGF0aXN0aWNzV2VyZVVwZGF0ZWQpCi0gICAgICAgIHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nl
c3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIHByaW1hcnlE
b21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvJiBz
dGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmlt
YXJ5RG9tYWluKTsKLSAgICBzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7Ci0g
ICAgc3RhdGlzdGljcy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSA9IFdhbGxUaW1lOjpu
b3coKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNsZWFy
VXNlckludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikKLXsKLSAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4pOwotICAgIHN0
YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9uID0gZmFsc2U7Ci0gICAgc3RhdGlzdGljcy5tb3N0
UmVjZW50VXNlckludGVyYWN0aW9uVGltZSA9IHsgfTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcm
IHByaW1hcnlEb21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAg
ICBhdXRvIG1hcEVudHJ5ID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZmluZChwcmltYXJ5RG9t
YWluKTsKLSAgICByZXR1cm4gbWFwRW50cnkgPT0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5k
KCkgPyBmYWxzZTogaGFzSGFkVW5leHBpcmVkUmVjZW50VXNlckludGVyYWN0aW9uKG1hcEVudHJ5
LT52YWx1ZSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpz
ZXRQcmV2YWxlbnRSZXNvdXJjZShXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNv
dXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSBuZXdQcmV2YWxlbmNlKQotewot
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgcmVzb3VyY2VTdGF0aXN0aWMu
aXNQcmV2YWxlbnRSZXNvdXJjZSA9IHRydWU7Ci0gICAgcmVzb3VyY2VTdGF0aXN0aWMuaXNWZXJ5
UHJldmFsZW50UmVzb3VyY2UgPSBuZXdQcmV2YWxlbmNlID09IFJlc291cmNlTG9hZFByZXZhbGVu
Y2U6OlZlcnlIaWdoOwotICAgIEhhc2hTZXQ8U3RyaW5nPiBkb21haW5zVGhhdEhhdmVSZWRpcmVj
dGVkVG87Ci0gICAgcmVjdXJzaXZlbHlHZXRBbGxEb21haW5zVGhhdEhhdmVSZWRpcmVjdGVkVG9U
aGlzRG9tYWluKHJlc291cmNlU3RhdGlzdGljLCBkb21haW5zVGhhdEhhdmVSZWRpcmVjdGVkVG8s
IDApOwotICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRv
KSB7Ci0gICAgICAgIGF1dG8gbWFwRW50cnkgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5maW5k
KGRvbWFpbik7Ci0gICAgICAgIGlmIChtYXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlzdGljc01h
cC5lbmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBBU1NFUlQoIW1hcEVudHJ5
LT52YWx1ZS5pc1ByZXZhbGVudFJlc291cmNlKTsKLSAgICAgICAgbWFwRW50cnktPnZhbHVlLmlz
UHJldmFsZW50UmVzb3VyY2UgPSB0cnVlOwotICAgIH0KLX0KLSAgICAKLVN0cmluZyBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIFN0cmluZ0J1
aWxkZXIgcmVzdWx0OwotICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJSZXNvdXJjZSBsb2FkIHN0
YXRpc3RpY3M6XG5cbiIpOwotICAgIGZvciAoYXV0byYgbWFwRW50cnkgOiBtX3Jlc291cmNlU3Rh
dGlzdGljc01hcC52YWx1ZXMoKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZChtYXBFbnRyeS50b1N0
cmluZygpKTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci19Ci0KLWJvb2wgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFN0
cmluZyYgcHJpbWFyeURvbWFpbikgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKLQotICAgIGF1dG8gbWFwRW50cnkgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5maW5k
KHByaW1hcnlEb21haW4pOwotICAgIHJldHVybiBtYXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlz
dGljc01hcC5lbmQoKSA/IGZhbHNlIDogbWFwRW50cnktPnZhbHVlLmlzUHJldmFsZW50UmVzb3Vy
Y2U7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIG1hcEVudHJ5ID0gbV9y
ZXNvdXJjZVN0YXRpc3RpY3NNYXAuZmluZChwcmltYXJ5RG9tYWluKTsKLSAgICByZXR1cm4gbWFw
RW50cnkgPT0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5kKCkgPyBmYWxzZSA6IG1hcEVudHJ5
LT52YWx1ZS5pc1ByZXZhbGVudFJlc291cmNlICYmIG1hcEVudHJ5LT52YWx1ZS5pc1ZlcnlQcmV2
YWxlbnRSZXNvdXJjZTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBTdHJpbmcmIHN1YnJlc291
cmNlUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1hcnlEb21haW4pIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIG1hcEVu
dHJ5ID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZmluZChzdWJyZXNvdXJjZVByaW1hcnlEb21h
aW4pOwotICAgIHJldHVybiBtYXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQo
KSA/IGZhbHNlIDogbWFwRW50cnktPnZhbHVlLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdp
bnMuY29udGFpbnModG9wRnJhbWVQcmltYXJ5RG9tYWluKTsKLX0KLQotYm9vbCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25z
dCBTdHJpbmcmIHN1YkZyYW1lUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZVBy
aW1hcnlEb21haW4pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0K
LSAgICBhdXRvIG1hcEVudHJ5ID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZmluZChzdWJGcmFt
ZVByaW1hcnlEb21haW4pOwotICAgIHJldHVybiBtYXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlz
dGljc01hcC5lbmQoKSA/IGZhbHNlIDogbWFwRW50cnktPnZhbHVlLnN1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbnMuY29udGFpbnModG9wRnJhbWVQcmltYXJ5RG9tYWluKTsKLX0KLQotYm9vbCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3Rp
bmdUbyhjb25zdCBTdHJpbmcmIGhvc3RSZWRpcmVjdGVkRnJvbVByaW1hcnlEb21haW4sIGNvbnN0
IFN0cmluZyYgaG9zdFJlZGlyZWN0ZWRUb1ByaW1hcnlEb21haW4pIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIG1hcEVudHJ5ID0gbV9yZXNvdXJj
ZVN0YXRpc3RpY3NNYXAuZmluZChob3N0UmVkaXJlY3RlZEZyb21QcmltYXJ5RG9tYWluKTsKLSAg
ICByZXR1cm4gbWFwRW50cnkgPT0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5kKCkgPyBmYWxz
ZSA6IG1hcEVudHJ5LT52YWx1ZS5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmNvbnRhaW5z
KGhvc3RSZWRpcmVjdGVkVG9QcmltYXJ5RG9tYWluKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5n
JiBwcmltYXJ5RG9tYWluKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlE
b21haW4ocHJpbWFyeURvbWFpbik7Ci0gICAgc3RhdGlzdGljcy5pc1ByZXZhbGVudFJlc291cmNl
ID0gZmFsc2U7Ci0gICAgc3RhdGlzdGljcy5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSA9IGZhbHNl
OwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0R3JhbmRm
YXRoZXJlZChjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4sIGJvb2wgdmFsdWUpCi17Ci0gICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluKTsKLSAg
ICBzdGF0aXN0aWNzLmdyYW5kZmF0aGVyZWQgPSB2YWx1ZTsKLX0KLQotYm9vbCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBTdHJpbmcmIHBy
aW1hcnlEb21haW4pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0K
LSAgICBhdXRvIG1hcEVudHJ5ID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZmluZChwcmltYXJ5
RG9tYWluKTsKLSAgICByZXR1cm4gbWFwRW50cnkgPT0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAu
ZW5kKCkgPyBmYWxzZSA6IG1hcEVudHJ5LT52YWx1ZS5ncmFuZGZhdGhlcmVkOwotfQotCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZy
YW1lT3JpZ2luKGNvbnN0IFN0cmluZyYgcHJpbWFyeVN1YkZyYW1lRG9tYWluLCBjb25zdCBTdHJp
bmcmIHByaW1hcnlUb3BGcmFtZURvbWFpbikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKLQotICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JQcmltYXJ5RG9tYWluKHByaW1hcnlTdWJGcmFtZURvbWFpbik7Ci0gICAgc3RhdGlzdGljcy5z
dWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChwcmltYXJ5VG9wRnJhbWVEb21haW4pOwot
ICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3Rp
Y3MgZW50cnkgZm9yIHRoZSB0b3AgZnJhbWUgZG9tYWluLgotICAgIGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeVRvcEZyYW1lRG9tYWluKTsKLX0KLQotdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZU9yaWdpbihjb25zdCBTdHJpbmcmIHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbiwgY29u
c3QgU3RyaW5nJiBwcmltYXJ5VG9wRnJhbWVEb21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0KLSAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5U3VicmVzb3VyY2VEb21haW4pOwotICAgIHN0
YXRpc3RpY3Muc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucy5hZGQocHJpbWFyeVRvcEZy
YW1lRG9tYWluKTsKLSAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhh
dmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgdG9wIGZyYW1lIGRvbWFpbi4KLSAgICBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlUb3BGcmFtZURvbWFp
bik7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgU3RyaW5nJiBwcmltYXJ5U3VicmVzb3VyY2VE
b21haW4sIGNvbnN0IFN0cmluZyYgcHJpbWFyeVJlZGlyZWN0RG9tYWluKQotewotICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeVN1YnJlc291cmNlRG9tYWlu
KTsKLSAgICBzdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uYWRkKHByaW1h
cnlSZWRpcmVjdERvbWFpbik7Ci0gICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2Ug
YWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHJlZGlyZWN0IGRvbWFpbi4KLSAg
ICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlSZWRpcmVj
dERvbWFpbik7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpz
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdHJpbmcmIHByaW1hcnlTdWJy
ZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pCi17Ci0g
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvJiBzdGF0aXN0aWNzID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5U3VicmVzb3Vy
Y2VEb21haW4pOwotICAgIHN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9t
LmFkZChwcmltYXJ5UmVkaXJlY3REb21haW4pOwotICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFr
ZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBk
b21haW4uCi0gICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmlt
YXJ5UmVkaXJlY3REb21haW4pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN0cmluZyYgdG9wRnJh
bWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHByaW1hcnlSZWRpcmVjdERvbWFpbikKLXsK
LSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8mIHN0YXRpc3RpY3Mg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRvcEZyYW1lUHJpbWFy
eURvbWFpbik7Ci0gICAgc3RhdGlzdGljcy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLmFkZChw
cmltYXJ5UmVkaXJlY3REb21haW4pOwotICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJl
IHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4u
Ci0gICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5UmVk
aXJlY3REb21haW4pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3RyaW5nJiB0b3BGcmFtZVBy
aW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgcHJpbWFyeVJlZGlyZWN0RG9tYWluKQotewotICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byYgc3RhdGlzdGljcyA9IGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odG9wRnJhbWVQcmltYXJ5RG9t
YWluKTsKLSAgICBzdGF0aXN0aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5hZGQocHJp
bWFyeVJlZGlyZWN0RG9tYWluKTsKLSAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3
ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgcmVkaXJlY3QgZG9tYWluLgot
ICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeVJlZGly
ZWN0RG9tYWluKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vjb25kcyBzZWNvbmRzKQotewotICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7Ci0K
LSAgICBtX3BhcmFtZXRlcnMudGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiA9IHNlY29uZHM7Ci19
Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRNaW5pbXVtVGlt
ZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzKQotewotICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7Ci0KLSAg
ICBtX3BhcmFtZXRlcnMubWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsID0gc2Vj
b25kczsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldEdy
YW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0gICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKLQotICAgIG1fcGFyYW1l
dGVycy5ncmFuZGZhdGhlcmluZ1RpbWUgPSBzZWNvbmRzOwotfQotCi12b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXAoU2Vjb25kcyBzZWNvbmRz
KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChzZWNvbmRz
ID49IDBfcyk7Ci0KLSAgICBtX3BhcmFtZXRlcnMuY2FjaGVNYXhBZ2VDYXBUaW1lID0gc2Vjb25k
czsKLSAgICB1cGRhdGVDYWNoZU1heEFnZUNhcCgpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6dXBkYXRlQ2FjaGVNYXhBZ2VDYXAoKQotewotICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIAotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBzZWNvbmRzID0gbV9wYXJhbWV0ZXJzLmNhY2hl
TWF4QWdlQ2FwVGltZV0gKCkgewotICAgICAgICBzdG9yZS0+c2V0Q2FjaGVNYXhBZ2VDYXAoc2Vj
b25kcywgW10geyB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OnNldEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKFNlY29uZHMgc2Vjb25k
cykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQoc2Vjb25k
cyA+PSAwX3MpOwotICAgIAotICAgIG1fcGFyYW1ldGVycy5jbGllbnRTaWRlQ29va2llc0FnZUNh
cFRpbWUgPSBzZWNvbmRzOwotICAgIHVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKCk7Ci19
Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjp1cGRhdGVDbGllbnRT
aWRlQ29va2llc0FnZUNhcCgpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0K
LSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBzZWNvbmRzID0gbV9wYXJhbWV0
ZXJzLmNsaWVudFNpZGVDb29raWVzQWdlQ2FwVGltZV0gKCkgewotICAgICAgICBpZiAoYXV0byog
d2Vic2l0ZURhdGFTdG9yZSA9IHN0b3JlLT53ZWJzaXRlRGF0YVN0b3JlKCkpCi0gICAgICAgICAg
ICB3ZWJzaXRlRGF0YVN0b3JlLT5zZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyhzZWNvbmRz
LCBbXSB7IH0pOwotICAgIH0pOwotI2VuZGlmCi19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpzaG91bGRSZW1vdmVEYXRhUmVjb3JkcygpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAobV9kYXRhUmVjb3Jkc0JlaW5n
UmVtb3ZlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCi0gICAgZm9yIChjb25zdCBhdXRvJiBwbHVnaW4gOiBQbHVnaW5Qcm9jZXNzTWFu
YWdlcjo6c2luZ2xldG9uKCkucGx1Z2luUHJvY2Vzc2VzKCkpIHsKLSAgICAgICAgaWYgKCFtX2Fj
dGl2ZVBsdWdpblRva2Vucy5jb250YWlucyhwbHVnaW4tPnBsdWdpblByb2Nlc3NUb2tlbigpKSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuICFt
X2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCB8fCBNb25vdG9uaWNUaW1lOjpub3coKSA+
PSAobV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgKyBtX3BhcmFtZXRlcnMubWluaW11
bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKGJvb2wgdmFs
dWUpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX2RhdGFSZWNv
cmRzQmVpbmdSZW1vdmVkID0gdmFsdWU7Ci0gICAgaWYgKG1fZGF0YVJlY29yZHNCZWluZ1JlbW92
ZWQpCi0gICAgICAgIG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkID0gTW9ub3Rvbmlj
VGltZTo6bm93KCk7Ci19Ci0KLVJlc291cmNlTG9hZFN0YXRpc3RpY3MmIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURv
bWFpbihjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0KLSAgICByZXR1cm4gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5zdXJl
KHByaW1hcnlEb21haW4sIFsmcHJpbWFyeURvbWFpbl0gewotICAgICAgICByZXR1cm4gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyhwcmltYXJ5RG9tYWluKTsKLSAgICB9KS5pdGVyYXRvci0+dmFsdWU7
Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxLZXllZEVuY29kZXI+IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6Y3JlYXRlRW5jb2RlckZyb21EYXRhKCkgY29uc3QKLXsKLSAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gZW5jb2RlciA9IEtleWVkRW5jb2Rl
cjo6ZW5jb2RlcigpOwotICAgIGVuY29kZXItPmVuY29kZVVJbnQzMigidmVyc2lvbiIsIHN0YXRp
c3RpY3NNb2RlbFZlcnNpb24pOwotICAgIGVuY29kZXItPmVuY29kZURvdWJsZSgiZW5kT2ZHcmFu
ZGZhdGhlcmluZ1RpbWVzdGFtcCIsIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcC5zZWNv
bmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpOwotCi0gICAgZW5jb2Rlci0+ZW5jb2RlT2JqZWN0cygi
YnJvd3NpbmdTdGF0aXN0aWNzIiwgbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuYmVnaW4oKSwgbV9y
ZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5kKCksIFtdKEtleWVkRW5jb2RlciYgZW5jb2RlcklubmVy
LCBjb25zdCBhdXRvJiBvcmlnaW4pIHsKLSAgICAgICAgb3JpZ2luLnZhbHVlLmVuY29kZShlbmNv
ZGVySW5uZXIpOwotICAgIH0pOwotCi0gICAgZW5jb2Rlci0+ZW5jb2RlT2JqZWN0cygib3BlcmF0
aW5nRGF0ZXMiLCBtX29wZXJhdGluZ0RhdGVzLmJlZ2luKCksIG1fb3BlcmF0aW5nRGF0ZXMuZW5k
KCksIFtdKEtleWVkRW5jb2RlciYgZW5jb2RlcklubmVyLCBPcGVyYXRpbmdEYXRlIGRhdGUpIHsK
LSAgICAgICAgZW5jb2RlcklubmVyLmVuY29kZURvdWJsZSgiZGF0ZSIsIGRhdGUuc2Vjb25kc1Np
bmNlRXBvY2goKS52YWx1ZSgpKTsKLSAgICB9KTsKLQotICAgIHJldHVybiBlbmNvZGVyOwotfQot
Ci12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bWVyZ2VXaXRoRGF0YUZy
b21EZWNvZGVyKEtleWVkRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotICAgIHVuc2lnbmVkIHZlcnNpb25PbkRpc2s7Ci0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZVVJbnQzMigidmVyc2lvbiIsIHZlcnNpb25PbkRpc2spKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAodmVyc2lvbk9uRGlzayA+IHN0YXRpc3RpY3NNb2RlbFZlcnNpb24pIHsK
LSAgICAgICAgV1RGTG9nQWx3YXlzKCJGb3VuZCByZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3Mgb24g
ZGlzayB3aXRoIG1vZGVsIHZlcnNpb24gJXUgd2hlcmVhcyB0aGUgaGlnaGVzdCBzdXBwb3J0ZWQg
dmVyc2lvbiBpcyAldS4gUmVzZXR0aW5nLiIsIHZlcnNpb25PbkRpc2ssIHN0YXRpc3RpY3NNb2Rl
bFZlcnNpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZG91YmxlIGVuZE9mR3Jh
bmRmYXRoZXJpbmdUaW1lc3RhbXA7Ci0gICAgaWYgKGRlY29kZXIuZGVjb2RlRG91YmxlKCJlbmRP
ZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wIiwgZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCkp
Ci0gICAgICAgIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA9IFdhbGxUaW1lOjpmcm9t
UmF3U2Vjb25kcyhlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wKTsKLSAgICBlbHNlCi0gICAg
ICAgIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA9IHsgfTsKLQotICAgIFZlY3RvcjxS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBsb2FkZWRTdGF0aXN0aWNzOwotICAgIGJvb2wgc3VjY2Vl
ZGVkID0gZGVjb2Rlci5kZWNvZGVPYmplY3RzKCJicm93c2luZ1N0YXRpc3RpY3MiLCBsb2FkZWRT
dGF0aXN0aWNzLCBbdmVyc2lvbk9uRGlza10oS2V5ZWREZWNvZGVyJiBkZWNvZGVySW5uZXIsIFJl
c291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MpIHsKLSAgICAgICAgcmV0dXJuIHN0YXRp
c3RpY3MuZGVjb2RlKGRlY29kZXJJbm5lciwgdmVyc2lvbk9uRGlzayk7Ci0gICAgfSk7Ci0KLSAg
ICBpZiAoIXN1Y2NlZWRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWVyZ2VTdGF0aXN0aWNz
KFdURk1vdmUobG9hZGVkU3RhdGlzdGljcykpOwotICAgIHVwZGF0ZUNvb2tpZUJsb2NraW5nKFtd
KCkgeyB9KTsKLQotICAgIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBvcGVyYXRpbmdEYXRlczsKLSAg
ICBzdWNjZWVkZWQgPSBkZWNvZGVyLmRlY29kZU9iamVjdHMoIm9wZXJhdGluZ0RhdGVzIiwgb3Bl
cmF0aW5nRGF0ZXMsIFtdKEtleWVkRGVjb2RlciYgZGVjb2RlciwgT3BlcmF0aW5nRGF0ZSYgZGF0
ZSkgewotICAgICAgICBkb3VibGUgdmFsdWU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVE
b3VibGUoImRhdGUiLCB2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgZGF0ZSA9IE9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZShXYWxsVGltZTo6ZnJvbVJhd1Nl
Y29uZHModmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSk7Ci0KLSAgICBpZiAo
IXN1Y2NlZWRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9vcGVyYXRpbmdEYXRlcyA9IG1l
cmdlT3BlcmF0aW5nRGF0ZXMobV9vcGVyYXRpbmdEYXRlcywgV1RGTW92ZShvcGVyYXRpbmdEYXRl
cykpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2xlYXIo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAu
Y2xlYXIoKTsKLSAgICBtX29wZXJhdGluZ0RhdGVzLmNsZWFyKCk7Ci0KLSAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLQotICAgIHJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoW2NhbGxiYWNrQWdn
cmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7Ci0KLSAgICBhdXRv
IHByaW1hcnlEb21haW5zVG9CbG9jayA9IGVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVn
TW9kZSgpOwotICAgIHVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyhwcmltYXJ5RG9tYWlu
c1RvQmxvY2ssIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJl
ZigpXSB7IH0pOwotfQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
d2FzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbihjb25zdCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzJiBjdXJyZW50LCBjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiB1
cGRhdGVkKSBjb25zdAotewotICAgIGlmICghY3VycmVudC5oYWRVc2VySW50ZXJhY3Rpb24gJiYg
IXVwZGF0ZWQuaGFkVXNlckludGVyYWN0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBhdXRvIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gc3RkOjptYXgoY3VycmVudC5t
b3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSwgdXBkYXRlZC5tb3N0UmVjZW50VXNlckludGVy
YWN0aW9uVGltZSk7Ci0KLSAgICByZXR1cm4gdXBkYXRlZC5sYXN0U2VlbiA8PSBtb3N0UmVjZW50
VXNlckludGVyYWN0aW9uVGltZSArIDI0X2g7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjptZXJnZVN0YXRpc3RpY3MoVmVjdG9yPFJlc291cmNlTG9hZFN0YXRp
c3RpY3M+JiYgc3RhdGlzdGljcykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogc3RhdGlzdGljcykgewotICAgICAgICBhdXRv
IHJlc3VsdCA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuc3VyZShzdGF0aXN0aWMuaGlnaExl
dmVsRG9tYWluLCBbJnN0YXRpc3RpY10gewotICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoc3Rh
dGlzdGljKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsK
LSAgICAgICAgICAgIGlmICh3YXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0
aW9uKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUsIHN0YXRpc3RpYykpCi0gICAgICAgICAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS50aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2Vy
SW50ZXJhY3Rpb24rKzsKLSAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUubWVyZ2Uo
c3RhdGlzdGljKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OnNob3VsZEJsb2NrQW5kS2VlcENvb2tpZXMoY29uc3QgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYgc3RhdGlzdGljKQotewotICAgIHJldHVybiBzdGF0aXN0aWMuaXNQ
cmV2YWxlbnRSZXNvdXJjZSAmJiBzdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uOwotfQotCi1i
b29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2hvdWxkQmxvY2tBbmRQdXJn
ZUNvb2tpZXMoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgc3RhdGlzdGljKQotewotICAg
IHJldHVybiBzdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSAmJiAhc3RhdGlzdGljLmhhZFVz
ZXJJbnRlcmFjdGlvbjsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6Omhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQoY29uc3QgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYgc3RhdGlzdGljLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlQcmlt
YXJ5RG9tYWluKQotewotICAgIHJldHVybiBzdGF0aXN0aWMuc3RvcmFnZUFjY2Vzc1VuZGVyVG9w
RnJhbWVPcmlnaW5zLmNvbnRhaW5zKGZpcnN0UGFydHlQcmltYXJ5RG9tYWluKTsKLX0KLQotc3Rh
dGljIHZvaWQgZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKGNvbnN0IGNoYXIqIGFjdGlvbiwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMpCi17Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
Ci0gICAgc3RhdGljIGNvbnN0IGF1dG8gbWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1l
bnQgPSA1MDsKLSAgICBpZiAoZG9tYWlucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChkb21haW5zLnNpemUoKSA8PSBtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRl
bWVudCkgewotICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1ZywgIkFib3V0IHRvICV7cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0
cyBmb3I6ICV7cHVibGljfXMuIiwgYWN0aW9uLCBkb21haW5zVG9TdHJpbmcoZG9tYWlucykudXRm
OCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgVmVjdG9yPFN0
cmluZz4gYmF0Y2g7Ci0gICAgYmF0Y2gucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtYXhOdW1iZXJP
ZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCk7Ci0gICAgYXV0byBiYXRjaE51bWJlciA9IDE7Ci0g
ICAgdW5zaWduZWQgbnVtYmVyT2ZCYXRjaGVzID0gc3RkOjpjZWlsKGRvbWFpbnMuc2l6ZSgpIC8g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KSk7
Ci0KLSAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpIHsKLSAgICAgICAgaWYgKGJhdGNo
LnNpemUoKSA9PSBtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCkgewotICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91
dCB0byAle3B1YmxpY31zIGNvb2tpZXMgaW4gdGhpcmQtcGFydHkgY29udGV4dHMgZm9yICgle3B1
YmxpY31kIG9mICV1KTogJXtwdWJsaWN9cy4iLCBhY3Rpb24sIGJhdGNoTnVtYmVyLCBudW1iZXJP
ZkJhdGNoZXMsIGRvbWFpbnNUb1N0cmluZyhiYXRjaCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
ICAgICBiYXRjaC5zaHJpbmsoMCk7Ci0gICAgICAgICAgICArK2JhdGNoTnVtYmVyOwotICAgICAg
ICB9Ci0gICAgICAgIGJhdGNoLmFwcGVuZChkb21haW4pOwotICAgIH0KLSAgICBpZiAoIWJhdGNo
LmlzRW1wdHkoKSkKLSAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWcsICJBYm91dCB0byAle3B1YmxpY31zIGNvb2tpZXMgaW4gdGhpcmQtcGFydHkgY29u
dGV4dHMgZm9yICgle3B1YmxpY31kIG9mICV1KTogJXtwdWJsaWN9cy4iLCBhY3Rpb24sIGJhdGNo
TnVtYmVyLCBudW1iZXJPZkJhdGNoZXMsIGRvbWFpbnNUb1N0cmluZyhiYXRjaCkudXRmOCgpLmRh
dGEoKSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShhY3Rpb24pOwotICAgIFVOVVNFRF9QQVJB
TShkb21haW5zKTsKLSNlbmRpZgotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6dXBkYXRlQ29va2llQmxvY2tpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
Ci0gICAgVmVjdG9yPFN0cmluZz4gZG9tYWluc1RvQmxvY2s7Ci0gICAgZm9yIChhdXRvJiByZXNv
dXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKSB7Ci0gICAg
ICAgIGlmIChyZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlKQotICAgICAgICAg
ICAgZG9tYWluc1RvQmxvY2suYXBwZW5kKHJlc291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFp
bik7Ci0gICAgfQotCi0gICAgaWYgKGRvbWFpbnNUb0Jsb2NrLmlzRW1wdHkoKSkgewotICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KG1fZGVidWdMb2dnaW5nRW5hYmxlZCAmJiAhZG9tYWluc1RvQmxvY2suaXNFbXB0eSgpKQotICAg
ICAgICAgICAgZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKCJibG9jayIsIGRvbWFpbnNUb0Jsb2Nr
KTsKLQotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbd2Vha1RoaXMgPSBtYWtlV2Vha1B0
cigqdGhpcyksIHN0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgZG9tYWluc1RvQmxvY2sgPSBjcm9z
c1RocmVhZENvcHkoZG9tYWluc1RvQmxvY2spLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgc3RvcmUtPmNhbGxVcGRh
dGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3JIYW5kbGVyKGRvbWFpbnNUb0Jsb2Nr
LCBbd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCks
IGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJs
ZSB7Ci0gICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW3dlYWtU
aGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgICAgICAgICAgICAg
UkVMRUFTRV9MT0dfSU5GT19JRih3ZWFrVGhpcy0+bV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJEb25lIHVwZGF0aW5nIGNvb2tpZSBibG9ja2luZy4i
KTsKLSNlbmRpZgotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi12
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6dXBkYXRlQ29va2llQmxvY2tp
bmdGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9CbG9jaywgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9y
ZSA9IG1ha2VSZWYobV9zdG9yZSksIGRvbWFpbnNUb0Jsb2NrID0gY3Jvc3NUaHJlYWRDb3B5KGRv
bWFpbnNUb0Jsb2NrKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIHN0b3JlLT5jYWxsVXBkYXRlUHJldmFsZW50RG9t
YWluc1RvQmxvY2tDb29raWVzRm9ySGFuZGxlcihkb21haW5zVG9CbG9jaywgW3N0b3JlID0gc3Rv
cmUuY29weVJlZigpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSgpIG11dGFibGUgewotICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRp
c3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgewotICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAg
ICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpjbGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5zKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBkb21haW5zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBp
ZiAoZG9tYWlucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3Rv
cmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBkb21haW5zID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnMp
XSB7Ci0gICAgICAgIHN0b3JlLT5jYWxsUmVtb3ZlRG9tYWluc0hhbmRsZXIoZG9tYWlucyk7Ci0g
ICAgfSk7Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotfQotCi12b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3MoY29uc3QgRnVuY3Rpb248
dm9pZChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik+JiBwcm9jZXNzRnVuY3Rpb24pIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8m
IHJlc291cmNlU3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpCi0g
ICAgICAgIHByb2Nlc3NGdW5jdGlvbihyZXNvdXJjZVN0YXRpc3RpYyk7Ci19Ci0KLWJvb2wgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpoYXNIYWRVbmV4cGlyZWRSZWNlbnRVc2Vy
SW50ZXJhY3Rpb24oUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAocmVzb3Vy
Y2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uICYmIGhhc1N0YXRpc3RpY3NFeHBpcmVkKHJl
c291cmNlU3RhdGlzdGljKSkgewotICAgICAgICAvLyBEcm9wIHByaXZhY3kgc2Vuc2l0aXZlIGRh
dGEgYmVjYXVzZSB3ZSBubyBsb25nZXIgbmVlZCBpdC4KLSAgICAgICAgLy8gU2V0IHRpbWVzdGFt
cCB0byAwIHNvIHRoYXQgc3RhdGlzdGljcyBtZXJnZSB3aWxsIGtub3cKLSAgICAgICAgLy8gaXQg
aGFzIGJlZW4gcmVzZXQgYXMgb3Bwb3NlZCB0byBpdHMgZGVmYXVsdCAtMS4KLSAgICAgICAgcmVz
b3VyY2VTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPSB7IH07Ci0gICAg
ICAgIHJlc291cmNlU3RhdGlzdGljLnN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lT3JpZ2lucy5j
bGVhcigpOwotICAgICAgICByZXNvdXJjZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24gPSBm
YWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVy
YWN0aW9uOwotfQotCi1WZWN0b3I8U3RyaW5nPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZv
cigpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBib29sIHNob3Vs
ZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgPSBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAg
PiBXYWxsVGltZTo6bm93KCk7Ci0gICAgYm9vbCBzaG91bGRDbGVhckdyYW5kZmF0aGVyaW5nID0g
IXNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgJiYgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGlt
ZXN0YW1wOwotCi0gICAgaWYgKHNob3VsZENsZWFyR3JhbmRmYXRoZXJpbmcpCi0gICAgICAgIG1f
ZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA9IHsgfTsKLQotICAgIFZlY3RvcjxTdHJpbmc+
IHByZXZhbGVudFJlc291cmNlczsKLSAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChzdGF0aXN0aWMuaXNQcmV2
YWxlbnRSZXNvdXJjZSAmJiAhaGFzSGFkVW5leHBpcmVkUmVjZW50VXNlckludGVyYWN0aW9uKHN0
YXRpc3RpYykgJiYgKCFzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nIHx8ICFzdGF0aXN0aWMu
Z3JhbmRmYXRoZXJlZCkpCi0gICAgICAgICAgICBwcmV2YWxlbnRSZXNvdXJjZXMuYXBwZW5kKHN0
YXRpc3RpYy5oaWdoTGV2ZWxEb21haW4pOwotCi0gICAgICAgIGlmIChzaG91bGRDbGVhckdyYW5k
ZmF0aGVyaW5nICYmIHN0YXRpc3RpYy5ncmFuZGZhdGhlcmVkKQotICAgICAgICAgICAgc3RhdGlz
dGljLmdyYW5kZmF0aGVyZWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcHJldmFsZW50
UmVzb3VyY2VzOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKQotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byB0b2RheSA9IE9wZXJhdGluZ0RhdGU6OnRv
ZGF5KCk7Ci0gICAgaWYgKCFtX29wZXJhdGluZ0RhdGVzLmlzRW1wdHkoKSAmJiB0b2RheSA8PSBt
X29wZXJhdGluZ0RhdGVzLmxhc3QoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgd2hpbGUgKG1f
b3BlcmF0aW5nRGF0ZXMuc2l6ZSgpID49IG9wZXJhdGluZ0RhdGVzV2luZG93KQotICAgICAgICBt
X29wZXJhdGluZ0RhdGVzLnJlbW92ZSgwKTsKLQotICAgIG1fb3BlcmF0aW5nRGF0ZXMuYXBwZW5k
KHRvZGF5KTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omhh
c1N0YXRpc3RpY3NFeHBpcmVkKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNl
U3RhdGlzdGljKSBjb25zdAotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXMuc2l6ZSgpID49IG9wZXJhdGluZ0RhdGVzV2luZG93KSB7
Ci0gICAgICAgIGlmIChPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUocmVzb3VyY2VTdGF0aXN0
aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpIDwgbV9vcGVyYXRpbmdEYXRlcy5maXJz
dCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgZG9u
J3QgbWVldCB0aGUgcmVhbCBjcml0ZXJpYSBmb3IgYW4gZXhwaXJlZCBzdGF0aXN0aWMsIGNoZWNr
IHRoZSB1c2VyIHNldHRpbmcgZm9yIGEgdGlnaHRlciByZXN0cmljdGlvbiAobWFpbmx5IGZvciB0
ZXN0aW5nKS4KLSAgICBpZiAobV9wYXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24p
IHsKLSAgICAgICAgaWYgKFdhbGxUaW1lOjpub3coKSA+IHJlc291cmNlU3RhdGlzdGljLm1vc3RS
ZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lICsgbV9wYXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24udmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBtYXhpbXVtRW50cnlDb3VudCkKLXsK
LSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIG1fcGFyYW1ldGVycy5tYXhT
dGF0aXN0aWNzRW50cmllcyA9IG1heGltdW1FbnRyeUNvdW50OwotfQotCi12b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBw
cnVuZVRhcmdldENvdW50KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgbV9wYXJhbWV0ZXJzLnBydW5lRW50cmllc0Rvd25UbyA9IHBydW5lVGFyZ2V0Q291bnQ7Ci19
Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpwcnVuZVN0YXRpc3Rp
Y3NJZk5lZWRlZCgpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBp
ZiAobV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2l6ZSgpIDw9IG1fcGFyYW1ldGVycy5tYXhTdGF0
aXN0aWNzRW50cmllcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fcGFyYW1ldGVy
cy5wcnVuZUVudHJpZXNEb3duVG8gPD0gbV9wYXJhbWV0ZXJzLm1heFN0YXRpc3RpY3NFbnRyaWVz
KTsKLQotICAgIHNpemVfdCBudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSA9IG1fcmVzb3VyY2VT
dGF0aXN0aWNzTWFwLnNpemUoKSAtIG1fcGFyYW1ldGVycy5wcnVuZUVudHJpZXNEb3duVG87Ci0g
ICAgQVNTRVJUKG51bWJlck9mRW50cmllc0xlZnRUb1BydW5lKTsKLQotICAgIFZlY3RvcjxTdGF0
aXN0aWNzTGFzdFNlZW4+IHJlc291cmNlc1RvUHJ1bmVQZXJJbXBvcnRhbmNlW21heEltcG9ydGFu
Y2UgKyAxXTsKLSAgICBmb3IgKGF1dG8mIHJlc291cmNlU3RhdGlzdGljIDogbV9yZXNvdXJjZVN0
YXRpc3RpY3NNYXAudmFsdWVzKCkpCi0gICAgICAgIHJlc291cmNlc1RvUHJ1bmVQZXJJbXBvcnRh
bmNlW2NvbXB1dGVJbXBvcnRhbmNlKHJlc291cmNlU3RhdGlzdGljKV0uYXBwZW5kKHsgcmVzb3Vy
Y2VTdGF0aXN0aWMuaGlnaExldmVsRG9tYWluLCByZXNvdXJjZVN0YXRpc3RpYy5sYXN0U2VlbiB9
KTsKLQotICAgIGZvciAodW5zaWduZWQgaW1wb3J0YW5jZSA9IDA7IG51bWJlck9mRW50cmllc0xl
ZnRUb1BydW5lICYmIGltcG9ydGFuY2UgPD0gbWF4SW1wb3J0YW5jZTsgKytpbXBvcnRhbmNlKQot
ICAgICAgICBwcnVuZVJlc291cmNlcyhtX3Jlc291cmNlU3RhdGlzdGljc01hcCwgcmVzb3VyY2Vz
VG9QcnVuZVBlckltcG9ydGFuY2VbaW1wb3J0YW5jZV0sIG51bWJlck9mRW50cmllc0xlZnRUb1By
dW5lKTsKLQotICAgIEFTU0VSVCghbnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1bmUpOwotfQotCi12
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9E
ZWZhdWx0VmFsdWVzKCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAg
IG1fcGFyYW1ldGVycyA9IHsgfTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OmxvZ1Rlc3RpbmdFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50KQotewotICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGV2ZW50ID0gZXZlbnQuaXNvbGF0ZWRDb3B5KCld
IHsKLSAgICAgICAgc3RvcmUtPmxvZ1Rlc3RpbmdFdmVudChldmVudCk7Ci0gICAgfSk7Ci19Ci0K
LXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRMYXN0U2Vlbihjb25z
dCBTdHJpbmcmIHByaW1hcnlEb21haW4sIFNlY29uZHMgc2Vjb25kcykKLXsKLSAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4pOwotICAgIHN0YXRp
c3RpY3MubGFzdFNlZW4gPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc2Vjb25kcy5zZWNvbmRz
KCkpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKQotewotICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgPSBl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4pOwot
ICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQ
cmV2YWxlbmNlOjpIaWdoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHByaW1hcnlEb21h
aW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvJiByZXNv
dXJjZVN0YXRpc3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4o
cHJpbWFyeURvbWFpbik7Ci0gICAgc2V0UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0
aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OlZlcnlIaWdoKTsKLX0KLQotdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUg
PSBtYWtlUmVmKG1fc3RvcmUpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBzdG9yZS0+cmVtb3ZlQWxsU3RvcmFnZUFj
Y2Vzcyhbc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBzdG9yZS0+c3Rh
dGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9j
ZXNzKCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHVwZGF0ZUNv
b2tpZUJsb2NraW5nKFtdKCkgeyB9KTsKLSAgICB1cGRhdGVDYWNoZU1heEFnZUNhcCgpOwotICAg
IHVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZjNhOWE3Yjk2YTAwZDg1ZDBjMWVhN2IxY2FhNjFjNzJiZDFkYjBjNC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDIw
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlJl
c291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmgiCi0jaW5jbHVkZSAiV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmgiCi0jaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgotCi0jaWYgSEFWRShDT1JFX1BSRURJQ1RJT04pCi0jaW5j
bHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5oIgotI2VuZGlmCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEtleWVkRGVjb2RlcjsKLWNsYXNzIEtleWVkRW5j
b2RlcjsKLXN0cnVjdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwotfQotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotY2xhc3MgT3BlcmF0aW5nRGF0ZTsKLWNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NQZXJzaXN0ZW50U3RvcmFnZTsKLQotLy8gVGhpcyBpcyBhbHdheXMgY29uc3RydWN0ZWQgLyB1
c2VkIC8gZGVzdHJveWVkIG9uIHRoZSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUncyBz
dGF0aXN0aWNzIHF1ZXVlLgotY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
IDogcHVibGljIENhbk1ha2VXZWFrUHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZT4gewotcHVibGljOgotICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZShXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmLCBXb3JrUXVldWUmKTsKLSAgICB+UmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlKCk7Ci0KLSAgICB2b2lkIHNldFBlcnNpc3RlbnRTdG9y
YWdlKFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZSYpOwotCi0gICAgdm9p
ZCBjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmlzRW1wdHkoKTsgfQotCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OktleWVkRW5jb2Rlcj4gY3JlYXRlRW5jb2RlckZy
b21EYXRhKCkgY29uc3Q7Ci0gICAgdm9pZCBtZXJnZVdpdGhEYXRhRnJvbURlY29kZXIoV2ViQ29y
ZTo6S2V5ZWREZWNvZGVyJik7Ci0KLSAgICB2b2lkIG1lcmdlU3RhdGlzdGljcyhWZWN0b3I8V2Vi
Q29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mJik7Ci0gICAgdm9pZCBwcm9jZXNzU3RhdGlz
dGljcyhjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3MmKT4mKSBjb25zdDsKLQotICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tpbmcoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5nRm9y
RG9tYWlucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvQmxvY2ssIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCBjbGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5z
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOwotCi0gICAgdm9pZCBpbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSgp
OwotICAgIHZvaWQgcHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOwotCi0gICAgdm9p
ZCByZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKFN0cmluZyYmIHByaW1hcnlEb21haW5J
bk5lZWRPZlN0b3JhZ2VBY2Nlc3MsIHVpbnQ2NF90IG9wZW5lclBhZ2VJRCwgU3RyaW5nJiYgb3Bl
bmVyUHJpbWFyeURvbWFpbik7Ci0gICAgdm9pZCByZW1vdmVBbGxTdG9yYWdlQWNjZXNzKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0KLSAgICB2b2lkIGdyYW5kZmF0aGVyRXhpc3RpbmdX
ZWJzaXRlRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgY2FuY2Vs
UGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpOwotCi0gICAgYm9vbCBpc1JlZ2lz
dGVyZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3QgU3RyaW5nJiBzdWJyZXNvdXJjZVByaW1hcnlE
b21haW4sIGNvbnN0IFN0cmluZyYgdG9wRnJhbWVQcmltYXJ5RG9tYWluKSBjb25zdDsKLSAgICBi
b29sIGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBTdHJpbmcmIHN1YkZyYW1lUHJp
bWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1hcnlEb21haW4pIGNvbnN0Owot
ICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFN0cmluZyYgaG9zdFJl
ZGlyZWN0ZWRGcm9tUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiBob3N0UmVkaXJlY3RlZFRv
UHJpbWFyeURvbWFpbikgY29uc3Q7Ci0KLSAgICB2b2lkIGNsZWFyUHJldmFsZW50UmVzb3VyY2Uo
Y29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKTsKLSAgICBTdHJpbmcgZHVtcFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MoKSBjb25zdDsKLSAgICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
U3RyaW5nJiBwcmltYXJ5RG9tYWluKSBjb25zdDsKLSAgICBib29sIGlzVmVyeVByZXZhbGVudFJl
c291cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikgY29uc3Q7Ci0gICAgdm9pZCBzZXRQ
cmV2YWxlbnRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pOwotICAgIHZvaWQg
c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbik7Ci0K
LSAgICB2b2lkIHNldEdyYW5kZmF0aGVyZWQoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBi
b29sIHZhbHVlKTsKLSAgICBib29sIGlzR3JhbmRmYXRoZXJlZChjb25zdCBTdHJpbmcmIHByaW1h
cnlEb21haW4pIGNvbnN0OwotCi0gICAgdm9pZCBzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmln
aW4oY29uc3QgU3RyaW5nJiBwcmltYXJ5U3ViRnJhbWVEb21haW4sIGNvbnN0IFN0cmluZyYgcHJp
bWFyeVRvcEZyYW1lRG9tYWluKTsKLSAgICB2b2lkIHNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZU9yaWdpbihjb25zdCBTdHJpbmcmIHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgU3Ry
aW5nJiBwcmltYXJ5VG9wRnJhbWVEb21haW4pOwotICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdFRvKGNvbnN0IFN0cmluZyYgcHJpbWFyeVN1YnJlc291cmNlRG9tYWluLCBjb25z
dCBTdHJpbmcmIHByaW1hcnlSZWRpcmVjdERvbWFpbik7Ci0gICAgdm9pZCBzZXRTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdHJpbmcmIHByaW1hcnlTdWJyZXNvdXJjZURvbWFp
biwgY29uc3QgU3RyaW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pOwotICAgIHZvaWQgc2V0VG9w
RnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN0cmluZyYgdG9wRnJhbWVQcmltYXJ5RG9tYWlu
LCBjb25zdCBTdHJpbmcmIHByaW1hcnlSZWRpcmVjdERvbWFpbik7Ci0gICAgdm9pZCBzZXRUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdHJpbmcmIHRvcEZyYW1lUHJpbWFyeURvbWFp
biwgY29uc3QgU3RyaW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pOwotCi0gICAgdm9pZCBsb2dU
ZXN0aW5nRXZlbnQoY29uc3QgU3RyaW5nJik7Ci0KLSAgICB2b2lkIHNldE1heFN0YXRpc3RpY3NF
bnRyaWVzKHNpemVfdCBtYXhpbXVtRW50cnlDb3VudCk7Ci0gICAgdm9pZCBzZXRQcnVuZUVudHJp
ZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQpOwotICAgIHZvaWQgcmVzZXRQYXJhbWV0
ZXJzVG9EZWZhdWx0VmFsdWVzKCk7Ci0KLSAgICB2b2lkIGNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVt
ZXRyeSgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dl
cmVTY2FubmVkKGJvb2wpOwotICAgIHZvaWQgc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZv
cmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCk7Ci0gICAgdm9pZCBzZXRTaG91bGRTdWJtaXRUZWxl
bWV0cnkoYm9vbCk7Ci0gICAgdm9pZCBzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29u
ZHMpOwotICAgIHZvaWQgc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNl
Y29uZHMpOwotICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMpOwotICAgIHZv
aWQgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sKTsKLSAgICBib29sIGlz
RGVidWdNb2RlRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdNb2RlRW5hYmxlZDsgfTsK
LSAgICB2b2lkIHNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFN0cmluZyYg
ZG9tYWluKTsKLQotICAgIHZvaWQgaGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdHJpbmcmIHN1YkZy
YW1lUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1hcnlEb21haW4sIHVp
bnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChi
b29sKT4mJik7Ci0gICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBzdWJGcmFt
ZVByaW1hcnlEb21haW4sIFN0cmluZyYmIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgdWludDY0X3Qg
ZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1N0YXR1cyk+JiYpOwotICAgIHZvaWQgZ3JhbnRTdG9y
YWdlQWNjZXNzKFN0cmluZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJhbWVIb3N0LCB1
aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKLQotICAgIHZvaWQgbG9nRnJhbWVO
YXZpZ2F0aW9uKGNvbnN0IFN0cmluZyYgdGFyZ2V0UHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5n
JiBtYWluRnJhbWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHNvdXJjZVByaW1hcnlEb21h
aW4sIGNvbnN0IFN0cmluZyYgdGFyZ2V0SG9zdCwgY29uc3QgU3RyaW5nJiBtYWluRnJhbWVIb3N0
LCBib29sIGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUpOwotICAgIHZvaWQgbG9nVXNlcklu
dGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbik7Ci0KLSAgICB2b2lkIGNsZWFy
VXNlckludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbik7Ci0gICAgYm9vbCBo
YXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKTsKLQotICAg
IHZvaWQgc2V0TGFzdFNlZW4oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBTZWNvbmRzKTsK
LQotICAgIHZvaWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKLQotcHJpdmF0ZToKLSAgICBz
dGF0aWMgYm9vbCBzaG91bGRCbG9ja0FuZEtlZXBDb29raWVzKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3MmKTsKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRCbG9ja0FuZFB1cmdl
Q29va2llcyhjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7Ci0gICAgc3Rh
dGljIGJvb2wgaGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdChjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiwgY29uc3QgU3RyaW5nJiBmaXJzdFBhcnR5
UHJpbWFyeURvbWFpbik7Ci0gICAgYm9vbCBoYXNIYWRVbmV4cGlyZWRSZWNlbnRVc2VySW50ZXJh
Y3Rpb24oV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpIGNvbnN0OwotICAgIGJvb2wg
aGFzU3RhdGlzdGljc0V4cGlyZWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYpIGNvbnN0OwotICAgIGJvb2wgd2FzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRl
cmFjdGlvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBjdXJyZW50LCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiB1cGRhdGVkKSBjb25zdDsKLSAg
ICB2b2lkIHNldFByZXZhbGVudFJlc291cmNlKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MmLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlKTsKLSAgICB1bnNpZ25lZCByZWN1cnNpdmVseUdl
dEFsbERvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUb1RoaXNEb21haW4oY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYsIEhhc2hTZXQ8U3RyaW5nPiYgZG9tYWluc1RoYXRIYXZl
UmVkaXJlY3RlZFRvLCB1bnNpZ25lZCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKSBjb25zdDsKLSAg
ICB2b2lkIHNldFN0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9z
dG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQgID0gZW5hYmxlZDsgfQotICAgIGJvb2wgc2hvdWxk
UmVtb3ZlRGF0YVJlY29yZHMoKSBjb25zdDsKLSAgICB2b2lkIHNldERlYnVnTG9nZ2dpbmdFbmFi
bGVkKGJvb2wgZW5hYmxlZCkgeyBtX2RlYnVnTG9nZ2luZ0VuYWJsZWQgID0gZW5hYmxlZDsgfQot
ICAgIHZvaWQgc2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoYm9vbCk7Ci0gICAgdm9pZCBzY2hl
ZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7Ci0gICAgdm9pZCBn
cmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdHJpbmcmJiBzdWJGcmFtZUhvc3QsIFN0cmluZyYm
IHRvcEZyYW1lSG9zdCwgT3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJ
RCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3dPckVhcmxpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYpOwotICAgIHZvaWQgbWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9Q
cmV2YWxlbnQoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwotICAgIGJvb2wgaXNQ
cmV2YWxlbnREdWVUb0RlYnVnTW9kZShXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7
Ci0gICAgVmVjdG9yPFN0cmluZz4gZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2Rl
KCk7Ci0gICAgdm9pZCByZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOwotICAgIHZvaWQgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKTsKLSAgICBXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5
RG9tYWluKGNvbnN0IFN0cmluZyYpOwotICAgIFZlY3RvcjxTdHJpbmc+IHRvcFByaXZhdGVseUNv
bnRyb2xsZWREb21haW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcigpOwotICAgIHZvaWQgc2V0Q2Fj
aGVNYXhBZ2VDYXAoU2Vjb25kcyk7Ci0gICAgdm9pZCB1cGRhdGVDYWNoZU1heEFnZUNhcCgpOwot
ICAgIHZvaWQgc2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoU2Vjb25kcyk7Ci0gICAgdm9p
ZCB1cGRhdGVDbGllbnRTaWRlQ29va2llc0FnZUNhcCgpOwotCi0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci0gICAgdm9pZCByZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCk7Ci0jZW5kaWYKLQotICAg
IHN0cnVjdCBQYXJhbWV0ZXJzIHsKLSAgICAgICAgc2l6ZV90IHBydW5lRW50cmllc0Rvd25UbyB7
IDgwMCB9OwotICAgICAgICBzaXplX3QgbWF4U3RhdGlzdGljc0VudHJpZXMgeyAxMDAwIH07Ci0g
ICAgICAgIE9wdGlvbmFsPFNlY29uZHM+IHRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb247Ci0gICAg
ICAgIFNlY29uZHMgbWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsIHsgMV9oIH07
Ci0gICAgICAgIFNlY29uZHMgZ3JhbmRmYXRoZXJpbmdUaW1lIHsgMjRfaCAqIDcgfTsKLSAgICAg
ICAgU2Vjb25kcyBjYWNoZU1heEFnZUNhcFRpbWUgeyAyNF9oICogNyB9OwotICAgICAgICBTZWNv
bmRzIGNsaWVudFNpZGVDb29raWVzQWdlQ2FwVGltZSB7IDI0X2ggKiA3IH07Ci0gICAgICAgIGJv
b2wgc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCB7IGZhbHNlIH07
Ci0gICAgICAgIGJvb2wgc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1Jl
bW92YWwgeyB0cnVlIH07Ci0gICAgICAgIGJvb2wgc2hvdWxkU3VibWl0VGVsZW1ldHJ5IHsgdHJ1
ZSB9OwotICAgIH07Ci0KLSAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIG1fc3Rv
cmU7Ci0gICAgUmVmPFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7Ci0gICAgV2Vha1B0cjxSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U+IG1fcGVyc2lzdGVudFN0b3JhZ2U7Ci0g
ICAgSGFzaE1hcDxTdHJpbmcsIFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+IG1fcmVz
b3VyY2VTdGF0aXN0aWNzTWFwOwotI2lmIEhBVkUoQ09SRV9QUkVESUNUSU9OKQotICAgIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Q2xhc3NpZmllcjsKLSNlbHNlCi0gICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIg
bV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcjsKLSNlbmRpZgotI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIEhhc2hTZXQ8dWludDY0X3Q+IG1fYWN0aXZlUGx1Z2lu
VG9rZW5zOwotI2VuZGlmCi0gICAgUGFyYW1ldGVycyBtX3BhcmFtZXRlcnM7Ci0gICAgVmVjdG9y
PE9wZXJhdGluZ0RhdGU+IG1fb3BlcmF0aW5nRGF0ZXM7Ci0gICAgV2FsbFRpbWUgbV9lbmRPZkdy
YW5kZmF0aGVyaW5nVGltZXN0YW1wOwotICAgIGJvb2wgbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1fZGVidWdNb2RlRW5hYmxlZCB7IGZhbHNlIH07Ci0gICAgU3Ry
aW5nIG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICBib29sIG1fc3RvcmFnZUFj
Y2Vzc1Byb21wdHNFbmFibGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fZGF0YVJlY29yZHNCZWlu
Z1JlbW92ZWQgeyBmYWxzZSB9OwotICAgIE1vbm90b25pY1RpbWUgbV9sYXN0VGltZURhdGFSZWNv
cmRzV2VyZVJlbW92ZWQ7Ci0KLSAgICB1aW50NjRfdCBtX2xhc3RTdGF0aXN0aWNzUHJvY2Vzc2lu
Z1JlcXVlc3RJZGVudGlmaWVyIHsgMCB9OwotICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBtX3BlbmRp
bmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA4ZDgwMjE5ZTkwZjA0NWU4Njc1OTdiNjdiZDJiNjI0
YjBmN2I1Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0
b3JhZ2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGVyc2lzdGVudFN0b3JhZ2UuaCIKLQotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCIKLSNpbmNsdWRlICJXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVNb25pdG9yLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9LZXll
ZENvZGluZy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+Ci0jaW5jbHVkZSA8
d3RmL1J1bkxvb3AuaD4KLSNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1jb25zdGV4cHIgU2Vjb25kcyBtaW5pbXVtV3JpdGVJbnRlcnZhbCB7IDVfbWlu
IH07Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1zdGF0aWMgYm9vbCBoYXNGaWxlQ2hh
bmdlZFNpbmNlKGNvbnN0IFN0cmluZyYgcGF0aCwgV2FsbFRpbWUgc2luY2UpCi17Ci0gICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgYXV0byBtb2RpZmljYXRpb25UaW1lID0gRmls
ZVN5c3RlbTo6Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUocGF0aCk7Ci0gICAgaWYgKCFtb2RpZmlj
YXRpb25UaW1lKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBtb2RpZmljYXRp
b25UaW1lLnZhbHVlKCkgPiBzaW5jZTsKLX0KLQotUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNp
c3RlbnRTdG9yYWdlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UoUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlJiBtZW1vcnlTdG9yZSwgV29ya1F1ZXVlJiB3
b3JrUXVldWUsIGNvbnN0IFN0cmluZyYgc3RvcmFnZURpcmVjdG9yeVBhdGgpCi0gICAgOiBtX21l
bW9yeVN0b3JlKG1lbW9yeVN0b3JlKQotICAgICwgbV93b3JrUXVldWUod29ya1F1ZXVlKQotICAg
ICwgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aChzdG9yYWdlRGlyZWN0b3J5UGF0aCkKLXsKLSAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIG1fbWVtb3J5U3RvcmUuc2V0UGVyc2lz
dGVudFN0b3JhZ2UoKnRoaXMpOwotCi0gICAgcG9wdWxhdGVNZW1vcnlTdG9yZUZyb21EaXNrKCk7
Ci0gICAgc3RhcnRNb25pdG9yaW5nRGlzaygpOwotfQotCi1SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGVyc2lzdGVudFN0b3JhZ2U6On5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3Jh
Z2UoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKG1faGFz
UGVuZGluZ1dyaXRlKQotICAgICAgICB3cml0ZU1lbW9yeVN0b3JlVG9EaXNrKCk7Ci19Ci0KLVN0
cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OnN0b3JhZ2VEaXJl
Y3RvcnlQYXRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdG9yYWdlRGlyZWN0b3J5UGF0aC5p
c29sYXRlZENvcHkoKTsKLX0KLQotU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0
ZW50U3RvcmFnZTo6cmVzb3VyY2VMb2dGaWxlUGF0aCgpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHN0
b3JhZ2VQYXRoID0gc3RvcmFnZURpcmVjdG9yeVBhdGgoKTsKLSAgICBpZiAoc3RvcmFnZVBhdGgu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLQotICAgIHJldHVybiBG
aWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoc3RvcmFnZVBhdGgsICJmdWxsX2Jy
b3dzaW5nX3Nlc3Npb25fcmVzb3VyY2VMb2cucGxpc3QiKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OnN0YXJ0TW9uaXRvcmluZ0Rpc2soKQotewot
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIGlmIChtX2ZpbGVNb25pdG9yKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgcmVzb3VyY2VMb2dQYXRoID0gcmVzb3VyY2VM
b2dGaWxlUGF0aCgpOwotICAgIGlmIChyZXNvdXJjZUxvZ1BhdGguaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2ZpbGVNb25pdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxGaWxlTW9u
aXRvcj4ocmVzb3VyY2VMb2dQYXRoLCBtX3dvcmtRdWV1ZS5jb3B5UmVmKCksIFt0aGlzLCB3ZWFr
VGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0gKEZpbGVNb25pdG9yOjpGaWxlQ2hhbmdlVHlwZSB0
eXBlKSB7Ci0gICAgICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgICAgICBpZiAo
IXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHN3aXRjaCAodHlwZSkg
ewotICAgICAgICBjYXNlIEZpbGVNb25pdG9yOjpGaWxlQ2hhbmdlVHlwZTo6TW9kaWZpY2F0aW9u
OgotICAgICAgICAgICAgcmVmcmVzaE1lbW9yeVN0b3JlRnJvbURpc2soKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEZpbGVNb25pdG9yOjpGaWxlQ2hhbmdlVHlwZTo6UmVtb3Zh
bDoKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUuY2xlYXIoW10geyB9KTsKLSAgICAgICAgICAg
IG1fZmlsZU1vbml0b3IgPSBudWxscHRyOwotICAgICAgICAgICAgbW9uaXRvckRpcmVjdG9yeUZv
ck5ld1N0YXRpc3RpY3MoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfSk7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlOjptb25p
dG9yRGlyZWN0b3J5Rm9yTmV3U3RhdGlzdGljcygpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7Ci0KLSAgICBTdHJpbmcgc3RvcmFnZVBhdGggPSBzdG9yYWdlRGlyZWN0b3J5UGF0
aCgpOwotICAgIEFTU0VSVCghc3RvcmFnZVBhdGguaXNFbXB0eSgpKTsKLQotICAgIGlmICghRmls
ZVN5c3RlbTo6ZmlsZUV4aXN0cyhzdG9yYWdlUGF0aCkpIHsKLSAgICAgICAgaWYgKCFGaWxlU3lz
dGVtOjptYWtlQWxsRGlyZWN0b3JpZXMoc3RvcmFnZVBhdGgpKSB7Ci0gICAgICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BlcnNpc3RlbnRTdG9yYWdlOiBGYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSBwYXRoICVz
Iiwgc3RvcmFnZVBhdGgudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBtX2ZpbGVNb25pdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxGaWxl
TW9uaXRvcj4oc3RvcmFnZVBhdGgsIG1fd29ya1F1ZXVlLmNvcHlSZWYoKSwgW3RoaXNdIChGaWxl
TW9uaXRvcjo6RmlsZUNoYW5nZVR5cGUgdHlwZSkgewotICAgICAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKLSAgICAgICAgaWYgKHR5cGUgPT0gRmlsZU1vbml0b3I6OkZpbGVDaGFuZ2VU
eXBlOjpSZW1vdmFsKSB7Ci0gICAgICAgICAgICAvLyBEaXJlY3Rvcnkgd2FzIHJlbW92ZWQhCi0g
ICAgICAgICAgICBtX2ZpbGVNb25pdG9yID0gbnVsbHB0cjsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyByZXNvdXJjZUxvZ1BhdGggPSByZXNvdXJjZUxv
Z0ZpbGVQYXRoKCk7Ci0gICAgICAgIEFTU0VSVCghcmVzb3VyY2VMb2dQYXRoLmlzRW1wdHkoKSk7
Ci0KLSAgICAgICAgaWYgKCFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHJlc291cmNlTG9nUGF0aCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9maWxlTW9uaXRvciA9IG51bGxwdHI7
Ci0KLSAgICAgICAgcmVmcmVzaE1lbW9yeVN0b3JlRnJvbURpc2soKTsKLSAgICAgICAgc3RhcnRN
b25pdG9yaW5nRGlzaygpOwotICAgIH0pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NQZXJzaXN0ZW50U3RvcmFnZTo6c3RvcE1vbml0b3JpbmdEaXNrKCkKLXsKLSAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBtX2ZpbGVNb25pdG9yID0gbnVsbHB0cjsKLX0KLQot
Ly8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgZmlsZSBjaGFuZ2VzIG9uIGRpc2suCi12b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6cmVmcmVzaE1lbW9yeVN0b3Jl
RnJvbURpc2soKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgU3Ry
aW5nIGZpbGVQYXRoID0gcmVzb3VyY2VMb2dGaWxlUGF0aCgpOwotICAgIGlmIChmaWxlUGF0aC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFdlIHNvbWV0aW1lcyBzZWUgZmls
ZSBjaGFuZ2VkIGV2ZW50cyBmcm9tIGJlZm9yZSBvdXIgbG9hZCBjb21wbGV0ZWQgKHdlIHN0YXJ0
Ci0gICAgLy8gcmVhZGluZyBhdCB0aGUgZmlyc3QgY2hhbmdlIGV2ZW50LCBidXQgd2UgbWlnaHQg
cmVjZWl2ZSBhIHNlcmllcyBvZiBldmVudHMgcmVsYXRlZAotICAgIC8vIHRvIHRoZSBzYW1lIGZp
bGUgb3BlcmF0aW9uKS4gQ2F0Y2ggdGhpcyBjYXNlIHRvIGF2b2lkIHJlYWRpbmcgb3Zlcmx5IG9m
dGVuLgotICAgIGlmICghaGFzRmlsZUNoYW5nZWRTaW5jZShmaWxlUGF0aCwgbV9sYXN0U3RhdGlz
dGljc0ZpbGVTeW5jVGltZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdhbGxUaW1lIHJlYWRU
aW1lID0gV2FsbFRpbWU6Om5vdygpOwotCi0gICAgYXV0byBkZWNvZGVyID0gY3JlYXRlRm9yRmls
ZShmaWxlUGF0aCk7Ci0gICAgaWYgKCFkZWNvZGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X21lbW9yeVN0b3JlLm1lcmdlV2l0aERhdGFGcm9tRGVjb2RlcigqZGVjb2Rlcik7Ci0gICAgbV9s
YXN0U3RhdGlzdGljc0ZpbGVTeW5jVGltZSA9IHJlYWRUaW1lOwotfQotCi12b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6cG9wdWxhdGVNZW1vcnlTdG9yZUZyb21E
aXNrKCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIFN0cmluZyBm
aWxlUGF0aCA9IHJlc291cmNlTG9nRmlsZVBhdGgoKTsKLSAgICBpZiAoZmlsZVBhdGguaXNFbXB0
eSgpIHx8ICFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGZpbGVQYXRoKSkgewotICAgICAgICBtX21l
bW9yeVN0b3JlLmdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YShbXSgpIHsgfSk7Ci0gICAg
ICAgIG1vbml0b3JEaXJlY3RvcnlGb3JOZXdTdGF0aXN0aWNzKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoIWhhc0ZpbGVDaGFuZ2VkU2luY2UoZmlsZVBhdGgsIG1fbGFzdFN0
YXRpc3RpY3NGaWxlU3luY1RpbWUpKSB7Ci0gICAgICAgIC8vIE5vIG5lZWQgdG8gZ3JhbmRmYXRo
ZXIgaW4gdGhpcyBjYXNlLgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgV2FsbFRpbWUg
cmVhZFRpbWUgPSBXYWxsVGltZTo6bm93KCk7Ci0KLSAgICBhdXRvIGRlY29kZXIgPSBjcmVhdGVG
b3JGaWxlKGZpbGVQYXRoKTsKLSAgICBpZiAoIWRlY29kZXIpIHsKLSAgICAgICAgbV9tZW1vcnlT
dG9yZS5ncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEoW10oKSB7IH0pOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRGVidWcgbW9kZSBoYXMgYSBwcmVwb3VsYXRlZCBtZW1v
cnkgc3RvcmUuCi0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX21lbW9yeVN0b3JlLmlzRW1wdHko
KSB8fCBtX21lbW9yeVN0b3JlLmlzRGVidWdNb2RlRW5hYmxlZCgpLCAiVGhpcyBpcyB0aGUgaW5p
dGlhbCBpbXBvcnQgc28gdGhlIHN0b3JlIHNob3VsZCBiZSBlbXB0eSIpOwotICAgIG1fbWVtb3J5
U3RvcmUubWVyZ2VXaXRoRGF0YUZyb21EZWNvZGVyKCpkZWNvZGVyKTsKLQotICAgIG1fbGFzdFN0
YXRpc3RpY3NGaWxlU3luY1RpbWUgPSByZWFkVGltZTsKLQotICAgIG1fbWVtb3J5U3RvcmUubG9n
VGVzdGluZ0V2ZW50KCJQb3B1bGF0ZWRXaXRob3V0R3JhbmRmYXRoZXJpbmciX3MpOwotfQotCi12
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6d3JpdGVNZW1vcnlT
dG9yZVRvRGlzaygpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBt
X2hhc1BlbmRpbmdXcml0ZSA9IGZhbHNlOwotICAgIHN0b3BNb25pdG9yaW5nRGlzaygpOwotCi0g
ICAgd3JpdGVUb0Rpc2sobV9tZW1vcnlTdG9yZS5jcmVhdGVFbmNvZGVyRnJvbURhdGEoKSwgcmVz
b3VyY2VMb2dGaWxlUGF0aCgpKTsKLQotICAgIG1fbGFzdFN0YXRpc3RpY3NGaWxlU3luY1RpbWUg
PSBXYWxsVGltZTo6bm93KCk7Ci0gICAgbV9sYXN0U3RhdGlzdGljc1dyaXRlVGltZSA9IE1vbm90
b25pY1RpbWU6Om5vdygpOwotCi0gICAgc3RhcnRNb25pdG9yaW5nRGlzaygpOwotfQotCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6c2NoZWR1bGVPcldyaXRl
TWVtb3J5U3RvcmUoRm9yY2VJbW1lZGlhdGVXcml0ZSBmb3JjZUltbWVkaWF0ZVdyaXRlKQotewot
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byB0aW1lU2luY2VMYXN0
V3JpdGUgPSBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fbGFzdFN0YXRpc3RpY3NXcml0ZVRpbWU7
Ci0gICAgaWYgKGZvcmNlSW1tZWRpYXRlV3JpdGUgIT0gRm9yY2VJbW1lZGlhdGVXcml0ZTo6WWVz
ICYmIHRpbWVTaW5jZUxhc3RXcml0ZSA8IG1pbmltdW1Xcml0ZUludGVydmFsKSB7Ci0gICAgICAg
IGlmICghbV9oYXNQZW5kaW5nV3JpdGUpIHsKLSAgICAgICAgICAgIG1faGFzUGVuZGluZ1dyaXRl
ID0gdHJ1ZTsKLSAgICAgICAgICAgIFNlY29uZHMgZGVsYXkgPSBtaW5pbXVtV3JpdGVJbnRlcnZh
bCAtIHRpbWVTaW5jZUxhc3RXcml0ZSArIDFfczsKLSAgICAgICAgICAgIG1fd29ya1F1ZXVlLT5k
aXNwYXRjaEFmdGVyKGRlbGF5LCBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIHsKLSAg
ICAgICAgICAgICAgICBpZiAod2Vha1RoaXMpCi0gICAgICAgICAgICAgICAgICAgIHdlYWtUaGlz
LT53cml0ZU1lbW9yeVN0b3JlVG9EaXNrKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgd3JpdGVNZW1vcnlTdG9yZVRvRGlzaygpOwot
fQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6Y2xlYXIo
KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIFN0cmluZyBmaWxlUGF0
aCA9IHJlc291cmNlTG9nRmlsZVBhdGgoKTsKLSAgICBpZiAoZmlsZVBhdGguaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzdG9wTW9uaXRvcmluZ0Rpc2soKTsKLQotICAgIGlmICgh
RmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShmaWxlUGF0aCkgJiYgRmlsZVN5c3RlbTo6ZmlsZUV4aXN0
cyhmaWxlUGF0aCkpCi0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFJlc291cmNlTG9hZFN0YXRp
c3RpY3MsICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6IFVuYWJsZSB0
byBkZWxldGUgc3RhdGlzdGljcyBmaWxlOiAlcyIsIGZpbGVQYXRoLnV0ZjgoKS5kYXRhKCkpOwot
fQotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NQZXJzaXN0ZW50U3RvcmFnZTo6ZXhjbHVkZUZyb21CYWNrdXAoKSBjb25zdAotewotfQotI2Vu
ZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3Jh
Z2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJhYTliOGFlYzJmZDUwMDFmMWQy
Y2M2YWEzM2RiYjI3MjhlZTZiZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGVyc2lzdGVudFN0b3JhZ2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNp
bmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0j
aW5jbHVkZSA8d3RmL1dhbGxUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvV29ya1F1ZXVlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEZpbGVNb25pdG9yOwotfQotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOwotCi0v
LyBDYW4gb25seSBiZSBjb25zdHJ1Y3RlZCAvIGRlc3Ryb3llZCAvIHVzZWQgZnJvbSB0aGUgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJ3Mgc3RhdGlzdGljIHF1ZXVlLgotY2xhc3MgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlIDogcHVibGljIENhbk1ha2VXZWFr
UHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZT4gewotcHVibGljOgot
ICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZShSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmUmLCBXb3JrUXVldWUmLCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VE
aXJlY3RvcnlQYXRoKTsKLSAgICB+UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9y
YWdlKCk7Ci0KLSAgICB2b2lkIGNsZWFyKCk7Ci0KLSAgICBlbnVtIGNsYXNzIEZvcmNlSW1tZWRp
YXRlV3JpdGUgeyBObywgWWVzLCB9OwotICAgIHZvaWQgc2NoZWR1bGVPcldyaXRlTWVtb3J5U3Rv
cmUoRm9yY2VJbW1lZGlhdGVXcml0ZSk7Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nIHN0b3JhZ2VE
aXJlY3RvcnlQYXRoKCkgY29uc3Q7Ci0gICAgU3RyaW5nIHJlc291cmNlTG9nRmlsZVBhdGgoKSBj
b25zdDsKLQotICAgIHZvaWQgc3RhcnRNb25pdG9yaW5nRGlzaygpOwotICAgIHZvaWQgc3RvcE1v
bml0b3JpbmdEaXNrKCk7Ci0gICAgdm9pZCBtb25pdG9yRGlyZWN0b3J5Rm9yTmV3U3RhdGlzdGlj
cygpOwotCi0gICAgdm9pZCB3cml0ZU1lbW9yeVN0b3JlVG9EaXNrKCk7Ci0gICAgdm9pZCBwb3B1
bGF0ZU1lbW9yeVN0b3JlRnJvbURpc2soKTsKLSAgICB2b2lkIGV4Y2x1ZGVGcm9tQmFja3VwKCkg
Y29uc3Q7Ci0gICAgdm9pZCByZWZyZXNoTWVtb3J5U3RvcmVGcm9tRGlzaygpOwotCi0gICAgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlJiBtX21lbW9yeVN0b3JlOwotICAgIFJlZjxX
b3JrUXVldWU+IG1fd29ya1F1ZXVlOwotICAgIGNvbnN0IFN0cmluZyBtX3N0b3JhZ2VEaXJlY3Rv
cnlQYXRoOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpGaWxlTW9uaXRvcj4gbV9maWxl
TW9uaXRvcjsKLSAgICBXYWxsVGltZSBtX2xhc3RTdGF0aXN0aWNzRmlsZVN5bmNUaW1lOwotICAg
IE1vbm90b25pY1RpbWUgbV9sYXN0U3RhdGlzdGljc1dyaXRlVGltZTsKLSAgICBib29sIG1faGFz
UGVuZGluZ1dyaXRlIHsgZmFsc2UgfTsKLX07Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdl
clByb3h5LmNwcAppbmRleCA0ZWY1ZGNjMzY1YWEzOWFlNjA2ZDBiYmJmMzhlZjQ0OWZlNDkwNWQw
Li5kZWU5MDZmOGIwODVkYmNmZDI5NGM2YmFjMDg4M2MyNjIyZGFjNTAxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCkBAIC0yOSw3ICsyOSw5IEBACiAjaW5jbHVkZSAiV2Vi
UGFnZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2Vi
UHJvY2Vzcy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAjaW5jbHVkZSAiV2ViUHJv
Y2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgPFdl
YkNvcmUvTWVkaWFDb25zdHJhaW50cy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTW9ja1JlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlYWx0aW1lTWVkaWFTb3Vy
Y2UuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkRhdGFMaXN0U3Vn
Z2VzdGlvbnNEcm9wZG93bi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJEYXRhTGlz
dFN1Z2dlc3Rpb25zRHJvcGRvd24uY3BwCmluZGV4IGVlNmVkOGM5OGVlNzM2MjljMWM1MGY3N2Yz
N2EzZDM0ODMzZThhMjkuLjgyNDJjZWNlYjM2MzgwMTIyMWVlZGRkMDBlYmMxN2Y1ZTYxN2U2NGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkRhdGFMaXN0U3VnZ2VzdGlv
bnNEcm9wZG93bi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRGF0YUxpc3RT
dWdnZXN0aW9uc0Ryb3Bkb3duLmNwcApAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIldlYkRhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bi5oIgogCisjaW5j
bHVkZSAiV2ViUGFnZVByb3h5LmgiCisKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKIAog
bmFtZXNwYWNlIFdlYktpdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNDUxZTcxMDhkNzgxMGU0MWE1NjQ3MzQwOGMyNTExZGZhMTBmYmJjMy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsOTAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKLQotI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmUuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2Uu
aCIKLSNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5Lmgi
Ci0jaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1By
b3h5LmgiCi0jaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlTWVzc2FnZXMu
aCIKLSNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgiCi0jaW5j
bHVkZSAiV2Vic2l0ZURhdGFGZXRjaE9wdGlvbi5oIgotI2luY2x1ZGUgIldlYnNpdGVEYXRhU3Rv
cmUuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaD4KLSNpbmNs
dWRlIDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFk
Q29waWVyLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBpbmxpbmUg
U3RyaW5nIGlzb2xhdGVkUHJpbWFyeURvbWFpbihjb25zdCBUJiB2YWx1ZSkKLXsKLSAgICByZXR1
cm4gUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6cHJpbWFyeURvbWFpbih2YWx1ZSkuaXNvbGF0ZWRD
b3B5KCk7Ci19Ci0KLWNvbnN0IE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+JiBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1vbml0b3JlZERhdGFUeXBlcygpCi17Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+PiBkYXRhVHlwZXMoc3Rk
Ojppbml0aWFsaXplcl9saXN0PFdlYnNpdGVEYXRhVHlwZT4oewotICAgICAgICBXZWJzaXRlRGF0
YVR5cGU6OkNvb2tpZXMsCi0gICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6RE9NQ2FjaGUsCi0gICAg
ICAgIFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzLAotICAgICAgICBXZWJzaXRl
RGF0YVR5cGU6OkxvY2FsU3RvcmFnZSwKLSAgICAgICAgV2Vic2l0ZURhdGFUeXBlOjpNZWRpYUtl
eXMsCi0gICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUs
Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIFdlYnNpdGVEYXRhVHlw
ZTo6UGx1Z0luRGF0YSwKLSNlbmRpZgotICAgICAgICBXZWJzaXRlRGF0YVR5cGU6OlNlYXJjaEZp
ZWxkUmVjZW50U2VhcmNoZXMsCi0gICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3Jh
Z2UsCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgICAgICBXZWJzaXRlRGF0YVR5cGU6
OlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zLAotI2VuZGlmCi0gICAgICAgIFdlYnNpdGVEYXRh
VHlwZTo6V2ViU1FMRGF0YWJhc2VzLAotICAgIH0pKTsKLQotICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7Ci0KLSAgICByZXR1cm4gZGF0YVR5cGVzOwotfQotCi12b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nh
bm5lZChib29sIHZhbHVlKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAg
ICBwb3N0VGFzayhbdGhpcywgdmFsdWVdIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0g
ICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dl
cmVTY2FubmVkKHZhbHVlKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNS
ZW1vdmFsKGJvb2wgdmFsdWUpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQot
ICAgIHBvc3RUYXNrKFt0aGlzLCB2YWx1ZV0gewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkK
LSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVm
b3JlRGF0YVJlY29yZHNSZW1vdmFsKHZhbHVlKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeShib29sIHZh
bHVlKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBwb3N0VGFzayhb
dGhpcywgdmFsdWVdIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBt
X21lbW9yeVN0b3JlLT5zZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkodmFsdWUpOwotICAgIH0pOwot
fQotCi1XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZShXZWJzaXRlRGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQotICAgIDogbV93
ZWJzaXRlRGF0YVN0b3JlKG1ha2VXZWFrUHRyKHdlYnNpdGVEYXRhU3RvcmUpKQotICAgICwgbV9z
dGF0aXN0aWNzUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZSBQcm9jZXNzIERhdGEgUXVldWUiLCBXb3JrUXVldWU6OlR5cGU6OlNlcmlhbCwgV29y
a1F1ZXVlOjpRT1M6OlV0aWxpdHkpKQotICAgICwgbV9kYWlseVRhc2tzVGltZXIoUnVuTG9vcDo6
bWFpbigpLCB0aGlzLCAmV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwZXJmb3JtRGFp
bHlUYXNrcykKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgcG9zdFRh
c2soW3RoaXMsIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSB3ZWJzaXRlRGF0YVN0
b3JlLnJlc29sdmVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpLmlzb2xhdGVkQ29w
eSgpXSB7Ci0gICAgICAgIG1fbWVtb3J5U3RvcmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4oKnRoaXMsIG1fc3RhdGlzdGljc1F1ZXVlKTsKLSAg
ICAgICAgbV9wZXJzaXN0ZW50U3RvcmFnZSA9IHN0ZDo6bWFrZV91bmlxdWU8UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlPigqbV9tZW1vcnlTdG9yZSwgbV9zdGF0aXN0aWNz
UXVldWUsIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpOwotICAgIH0pOwotCi0gICAg
bV9kYWlseVRhc2tzVGltZXIuc3RhcnRSZXBlYXRpbmcoMjRfaCk7Ci19Ci0KLVdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6fldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSgpCi17
Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGZsdXNoQW5kRGVzdHJveVBl
cnNpc3RlbnRTdG9yZSgpOwotfQotCi1pbmxpbmUgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnBvc3RUYXNrKFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIHRhc2spCi17Ci0gICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBtX3N0YXRpc3RpY3NRdWV1ZS0+ZGlzcGF0
Y2goW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgdGFzayA9IFdURk1vdmUodGFzayld
IHsKLSAgICAgICAgdGFzaygpOwotICAgIH0pOwotfQotCi1pbmxpbmUgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBvc3RUYXNrUmVwbHkoV1RGOjpGdW5jdGlvbjx2b2lkKCk+
JiYgcmVwbHkpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUocmVwbHkpKTsKLX0KLQotdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZsdXNoQW5kRGVzdHJveVBlcnNpc3RlbnRTdG9yZSgpCi17
Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmICghbV9wZXJzaXN0ZW50
U3RvcmFnZSAmJiAhbV9tZW1vcnlTdG9yZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTWFr
ZSBzdXJlIHdlIGRlc3Ryb3kgdGhlIHBlcnNpc3RlbnQgc3RvcmUgb24gdGhlIGJhY2tncm91bmQg
cXVldWUgYW5kIHdhaXQgZm9yIGl0IHRvIGRpZQotICAgIC8vIHN5bmNocm9ub3VzbHkgc2luY2Ug
aXQgaGFzIGEgQysrIHJlZmVyZW5jZSB0byB1cy4gQmxvY2tpbmcgbmF0dXJlIG9mIHRoaXMgdGFz
ayBhbGxvd3MgdXMKLSAgICAvLyB0byBub3QgbWFpbnRhaW4gYSBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUgcmVmZXJlbmNlIGZvciB0aGUgZHVyYXRpb24gb2YgZGlzcGF0Y2gsCi0gICAg
Ly8gYXZvaWRpbmcgZG91YmxlLWRlbGV0aW9uIGlzc3VlcyB3aGVuIHRoaXMgaXMgaW52b2tlZCBm
cm9tIHRoZSBkZXN0cnVjdG9yLgotICAgIEJpbmFyeVNlbWFwaG9yZSBzZW1hcGhvcmU7Ci0gICAg
bV9zdGF0aXN0aWNzUXVldWUtPmRpc3BhdGNoKFsmc2VtYXBob3JlLCB0aGlzXSB7Ci0gICAgICAg
IG1fcGVyc2lzdGVudFN0b3JhZ2UgPSBudWxscHRyOwotICAgICAgICBtX21lbW9yeVN0b3JlID0g
bnVsbHB0cjsKLSAgICAgICAgc2VtYXBob3JlLnNpZ25hbCgpOwotICAgIH0pOwotICAgIHNlbWFw
aG9yZS53YWl0KCk7Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpz
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgdmFsdWUsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwotCi0gICAgcG9zdFRhc2soW3RoaXMsIHZhbHVlLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBp
ZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUodmFsdWUpOwotICAgICAgICBwb3N0VGFza1JlcGx5KFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHBvc3RUYXNrKFt0
aGlzLCBwcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHVybCksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAg
ICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0UHJl
dmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUocHJpbWFyeURvbWFpbik7Ci0gICAgICAgIHBvc3RU
YXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0pOwotfQotCi12b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0
YVJlY29yZHNQcm9jZXNzaW5nKCkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwot
Ci0gICAgcG9zdFRhc2soW3RoaXNdIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAg
ICAgICAgICBtX21lbW9yeVN0b3JlLT5wcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7
Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNv
dXJjZUxvYWRTdGF0aXN0aWNzVXBkYXRlZChWZWN0b3I8V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljcz4mJiBvcmlnaW5zKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0K
LSAgICAvLyBJdCBpcyBzYWZlIHRvIG1vdmUgdGhlIG9yaWdpbnMgdG8gdGhlIGJhY2tncm91bmQg
cXVldWUgd2l0aG91dCBpc29sYXRlZCBjb3B5IGhlcmUgYmVjYXVzZSB0aGlzIGlzIGFuIHItdmFs
dWUKLSAgICAvLyBjb21pbmcgZnJvbSBJUEMuIFJlc291cmNlTG9hZFN0YXRpc3RpY3Mgb25seSBj
b250YWlucyBzdHJpbmdzIHdoaWNoIGFyZSBzYWZlIHRvIG1vdmUgdG8gb3RoZXIgdGhyZWFkcyBh
cyBsb25nCi0gICAgLy8gYXMgbm9ib2R5IG9uIHRoaXMgdGhyZWFkIGhvbGRzIGEgcmVmZXJlbmNl
IHRvIHRob3NlIHN0cmluZ3MuCi0gICAgcG9zdFRhc2soW3RoaXMsIG9yaWdpbnMgPSBXVEZNb3Zl
KG9yaWdpbnMpXSgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+bWVyZ2VTdGF0aXN0aWNz
KFdURk1vdmUob3JpZ2lucykpOwotCi0gICAgICAgIC8vIFdlIGNhbiBjYW5jZWwgYW55IHBlbmRp
bmcgcmVxdWVzdCB0byBwcm9jZXNzIHN0YXRpc3RpY3Mgc2luY2Ugd2UncmUgZG9pbmcgaXQgc3lu
Y2hyb25vdXNseSBiZWxvdy4KLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+Y2FuY2VsUGVuZGluZ1N0
YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpOwotCi0gICAgICAgIC8vIEZpcmUgYmVmb3JlIHBy
b2Nlc3Npbmcgc3RhdGlzdGljcyB0byBwcm9wYWdhdGUgdXNlciBpbnRlcmFjdGlvbiBhcyBmYXN0
IGFzIHBvc3NpYmxlIHRvIHRoZSBuZXR3b3JrIHByb2Nlc3MuCi0gICAgICAgIG1fbWVtb3J5U3Rv
cmUtPnVwZGF0ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9KTsKLSAgICAgICAgbV9tZW1vcnlTdG9y
ZS0+cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOwotICAgIH0pOwotfQotCi12b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzU3RvcmFnZUFjY2VzcyhTdHJpbmcm
JiBzdWJGcmFtZUhvc3QsIFN0cmluZyYmIHRvcEZyYW1lSG9zdCwgdWludDY0X3QgZnJhbWVJRCwg
dWludDY0X3QgcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChib29sKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoc3ViRnJhbWVIb3N0ICE9IHRvcEZyYW1lSG9zdCk7
Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHBvc3RUYXNrKFt0aGlzLCBz
dWJGcmFtZVByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4oc3ViRnJhbWVIb3N0
KSwgdG9wRnJhbWVQcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHRvcEZyYW1l
SG9zdCksIGZyYW1lSUQsIHBhZ2VJRCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkg
ewotICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoZmFsc2UpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+aGFzU3RvcmFnZUFjY2VzcyhzdWJG
cmFtZVByaW1hcnlEb21haW4sIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgZnJhbWVJRCwgcGFnZUlE
LCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYm9vbCBo
YXNTdG9yYWdlQWNjZXNzKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2Nv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGhhc1N0b3JhZ2VB
Y2Nlc3NdICgpIG11dGFibGUgewotICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGhh
c1N0b3JhZ2VBY2Nlc3MpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwot
fQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2FsbEhhc1N0b3JhZ2VB
Y2Nlc3NGb3JGcmFtZUhhbmRsZXIoY29uc3QgU3RyaW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3Qg
U3RyaW5nJiBmaXJzdFBhcnR5RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdl
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBoYXNBY2Nlc3MpPiYmIGNhbGxiYWNrKQot
ewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSNpZiBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAg
bV93ZWJzaXRlRGF0YVN0b3JlLT5oYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyKHJlc291
cmNlRG9tYWluLCBmaXJzdFBhcnR5RG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIFdURk1vdmUoY2Fs
bGJhY2spKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotICAgIGNhbGxiYWNrKGZh
bHNlKTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlcXVlc3RT
dG9yYWdlQWNjZXNzKFN0cmluZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJhbWVIb3N0
LCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgcHJvbXB0RW5hYmxlZCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVzKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKLXsKLSAgICBBU1NFUlQoc3ViRnJhbWVIb3N0ICE9IHRvcEZyYW1lSG9zdCk7Ci0g
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gc3ViRnJhbWVQcmltYXJ5
RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHN1YkZyYW1lSG9zdCk7Ci0gICAgYXV0byB0
b3BGcmFtZVByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odG9wRnJhbWVIb3N0
KTsKLSAgICBpZiAoc3ViRnJhbWVQcmltYXJ5RG9tYWluID09IHRvcEZyYW1lUHJpbWFyeURvbWFp
bikgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpIYXNB
Y2Nlc3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcG9zdFRhc2soW3RoaXMsIHN1
YkZyYW1lUHJpbWFyeURvbWFpbiA9IGNyb3NzVGhyZWFkQ29weShzdWJGcmFtZVByaW1hcnlEb21h
aW4pLCB0b3BGcmFtZVByaW1hcnlEb21haW4gPSBjcm9zc1RocmVhZENvcHkodG9wRnJhbWVQcmlt
YXJ5RG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCBwcm9tcHRFbmFibGVkLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAg
aWYgKCFtX21lbW9yeVN0b3JlKSB7Ci0gICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpDYW5u
b3RSZXF1ZXN0QWNjZXNzKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+cmVxdWVzdFN0b3JhZ2VBY2Nlc3Mo
V1RGTW92ZShzdWJGcmFtZVByaW1hcnlEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1lUHJpbWFyeURv
bWFpbiksIGZyYW1lSUQsIHBhZ2VJRCwgcHJvbXB0RW5hYmxlZCwgW2NvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFN0b3JhZ2VBY2Nlc3NTdGF0dXMgc3RhdHVz
KSBtdXRhYmxlIHsKLSAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN0YXR1c10gKCkgbXV0YWJsZSB7Ci0gICAg
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoc3RhdHVzKTsKLSAgICAgICAgICAgIH0pOwot
ICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoU3RyaW5nJiYgcHJpbWFyeURv
bWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcywgdWludDY0X3Qgb3BlbmVyUGFnZUlELCBTdHJpbmcm
JiBvcGVuZXJQcmltYXJ5RG9tYWluKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
Ci0KLSAgICAvLyBJdCBpcyBzYWZlIHRvIG1vdmUgdGhlIHN0cmluZ3MgdG8gdGhlIGJhY2tncm91
bmQgcXVldWUgd2l0aG91dCBpc29sYXRlZCBjb3B5IGhlcmUgYmVjYXVzZSB0aGV5IGFyZSByLXZh
bHVlIHJlZmVyZW5jZXMKLSAgICAvLyBjb21pbmcgZnJvbSBJUEMuIFN0cmluZ3Mgd2hpY2ggYXJl
IHNhZmUgdG8gbW92ZSB0byBvdGhlciB0aHJlYWRzIGFzIGxvbmcgYXMgbm9ib2R5IG9uIHRoaXMg
dGhyZWFkIGhvbGRzIGEgcmVmZXJlbmNlCi0gICAgLy8gdG8gdGhvc2Ugc3RyaW5ncy4KLSAgICBw
b3N0VGFzayhbdGhpcywgcHJpbWFyeURvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdURk1v
dmUocHJpbWFyeURvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyksIG9wZW5lclBhZ2VJRCwgb3Bl
bmVyUHJpbWFyeURvbWFpbiA9IFdURk1vdmUob3BlbmVyUHJpbWFyeURvbWFpbildKCkgbXV0YWJs
ZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9y
ZS0+cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihXVEZNb3ZlKHByaW1hcnlEb21haW5J
bk5lZWRPZlN0b3JhZ2VBY2Nlc3MpLCBvcGVuZXJQYWdlSUQsIFdURk1vdmUob3BlbmVyUHJpbWFy
eURvbWFpbikpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKFN0cmluZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYg
dG9wRnJhbWVIb3N0LCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNl
cldhc1Byb21wdGVkTm93LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgcG9zdFRh
c2soW3RoaXMsIHN1YkZyYW1lSG9zdCA9IGNyb3NzVGhyZWFkQ29weShzdWJGcmFtZUhvc3QpLCB0
b3BGcmFtZUhvc3QgPSBjcm9zc1RocmVhZENvcHkodG9wRnJhbWVIb3N0KSwgZnJhbWVJRCwgcGFn
ZUlELCB1c2VyV2FzUHJvbXB0ZWROb3csIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUp
IHsKLSAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKGZhbHNlKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+Z3JhbnRTdG9yYWdlQWNjZXNz
KFdURk1vdmUoc3ViRnJhbWVIb3N0KSwgV1RGTW92ZSh0b3BGcmFtZUhvc3QpLCBmcmFtZUlELCBw
YWdlSUQsIHVzZXJXYXNQcm9tcHRlZE5vdywgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKGJvb2wgd2FzR3JhbnRlZEFjY2VzcykgbXV0YWJsZSB7Ci0gICAg
ICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCB3YXNHcmFudGVkQWNjZXNzXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcih3YXNHcmFudGVkQWNjZXNzKTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmNhbGxHcmFudFN0b3JhZ2VBY2Nlc3NIYW5kbGVyKGNvbnN0IFN0cmluZyYgc3Vi
RnJhbWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwg
T3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJiBjYWxsYmFjaykKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwotCi0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBpZiAo
bV93ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+Z3JhbnRT
dG9yYWdlQWNjZXNzSGFuZGxlcihzdWJGcmFtZVByaW1hcnlEb21haW4sIHRvcEZyYW1lUHJpbWFy
eURvbWFpbiwgZnJhbWVJRCwgcGFnZUlELCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0jZW5kaWYKLSAgICBjYWxsYmFjayhmYWxzZSk7Ci19Ci0KLXZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpCi17
Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHBvc3RUYXNrKFt0aGlzXSB7
Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgbV9tZW1vcnlTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICB9KTsKLX0K
LQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZUFsbFN0b3JhZ2VB
Y2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewot
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9B
RF9TVEFUSVNUSUNTKQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIG1fd2Vi
c2l0ZURhdGFTdG9yZS0+cmVtb3ZlQWxsU3RvcmFnZUFjY2Vzc0hhbmRsZXIoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgIGVsc2UKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
LSNlbHNlCi0gICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YXBwbGljYXRpb25XaWxsVGVybWluYXRlKCkKLXsK
LSAgICBmbHVzaEFuZERlc3Ryb3lQZXJzaXN0ZW50U3RvcmUoKTsKLX0KLQotdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBlcmZvcm1EYWlseVRhc2tzKCkKLXsKLSAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgcG9zdFRhc2soW3RoaXNdIHsKLSAgICAgICAg
aWYgKCFtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fbWVt
b3J5U3RvcmUtPmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCk7Ci0gICAg
ICAgIG1fbWVtb3J5U3RvcmUtPmNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpOwotICAgIH0p
OwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3VibWl0VGVsZW1l
dHJ5KCkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgcG9zdFRhc2so
W3RoaXNdIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpjYWxjdWxhdGVBbmRTdWJtaXQoKm1fbWVtb3J5
U3RvcmUpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFdlYkZyYW1lUHJveHkmIGZyYW1lLCBjb25zdCBV
UkwmIHBhZ2VVUkwsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgVVJMJiByZWRpcmVjdFVSTCkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwot
Ci0gICAgYXV0byBzb3VyY2VVUkwgPSByZWRpcmVjdFVSTDsKLSAgICBib29sIGlzUmVkaXJlY3Qg
PSAhcmVkaXJlY3RVUkwuaXNOdWxsKCk7Ci0gICAgaWYgKCFpc1JlZGlyZWN0KSB7Ci0gICAgICAg
IHNvdXJjZVVSTCA9IGZyYW1lLnVybCgpOwotICAgICAgICBpZiAoc291cmNlVVJMLmlzTnVsbCgp
KQotICAgICAgICAgICAgc291cmNlVVJMID0gcGFnZVVSTDsKLSAgICB9Ci0KLSAgICBhdXRvJiB0
YXJnZXRVUkwgPSByZXF1ZXN0LnVybCgpOwotCi0gICAgaWYgKCF0YXJnZXRVUkwuaXNWYWxpZCgp
IHx8ICFwYWdlVVJMLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byB0YXJn
ZXRIb3N0ID0gdGFyZ2V0VVJMLmhvc3QoKTsKLSAgICBhdXRvIG1haW5GcmFtZUhvc3QgPSBwYWdl
VVJMLmhvc3QoKTsKLQotICAgIGlmICh0YXJnZXRIb3N0LmlzRW1wdHkoKSB8fCBtYWluRnJhbWVI
b3N0LmlzRW1wdHkoKSB8fCB0YXJnZXRIb3N0ID09IHNvdXJjZVVSTC5ob3N0KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8gdGFyZ2V0UHJpbWFyeURvbWFpbiA9IFJlc291cmNlTG9hZFN0
YXRpc3RpY3M6OnByaW1hcnlEb21haW4odGFyZ2V0VVJMKTsKLSAgICBhdXRvIG1haW5GcmFtZVBy
aW1hcnlEb21haW4gPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpwcmltYXJ5RG9tYWluKHBhZ2VV
UkwpOwotICAgIGF1dG8gc291cmNlUHJpbWFyeURvbWFpbiA9IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M6OnByaW1hcnlEb21haW4oc291cmNlVVJMKTsKLQotICAgIHBvc3RUYXNrKFt0aGlzLCB0YXJn
ZXRQcmltYXJ5RG9tYWluID0gdGFyZ2V0UHJpbWFyeURvbWFpbi5pc29sYXRlZENvcHkoKSwgbWFp
bkZyYW1lUHJpbWFyeURvbWFpbiA9IG1haW5GcmFtZVByaW1hcnlEb21haW4uaXNvbGF0ZWRDb3B5
KCksIHNvdXJjZVByaW1hcnlEb21haW4gPSBzb3VyY2VQcmltYXJ5RG9tYWluLmlzb2xhdGVkQ29w
eSgpLCB0YXJnZXRIb3N0ID0gdGFyZ2V0SG9zdC50b1N0cmluZygpLmlzb2xhdGVkQ29weSgpLCBt
YWluRnJhbWVIb3N0ID0gbWFpbkZyYW1lSG9zdC50b1N0cmluZygpLmlzb2xhdGVkQ29weSgpLCBp
c1JlZGlyZWN0LCBpc01haW5GcmFtZSA9IGZyYW1lLmlzTWFpbkZyYW1lKCldIHsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+
bG9nRnJhbWVOYXZpZ2F0aW9uKHRhcmdldFByaW1hcnlEb21haW4sIG1haW5GcmFtZVByaW1hcnlE
b21haW4sIHNvdXJjZVByaW1hcnlEb21haW4sIHRhcmdldEhvc3QsIG1haW5GcmFtZUhvc3QsIGlz
UmVkaXJlY3QsIGlzTWFpbkZyYW1lKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAodXJsLnByb3RvY29sSXNBYm91dCgpIHx8
IHVybC5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5RG9tYWluID0gaXNv
bGF0ZWRQcmltYXJ5RG9tYWluKHVybCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQot
ICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+bG9nVXNlckludGVyYWN0aW9uKHByaW1hcnlEb21h
aW4pOwotICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFy
VXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkgfHwgdXJsLmlzRW1wdHkoKSkgewotICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
cG9zdFRhc2soW3RoaXMsIHByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odXJs
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0
b3JlLT5jbGVhclVzZXJJbnRlcmFjdGlvbihwcmltYXJ5RG9tYWluKTsKLSAgICAgICAgcG9zdFRh
c2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKGJvb2wpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAodXJs
LnByb3RvY29sSXNBYm91dCgpIHx8IHVybC5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcG9zdFRhc2so
W3RoaXMsIHByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odXJsKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0g
ICAgICAgIGJvb2wgaGFkVXNlckludGVyYWN0aW9uID0gbV9tZW1vcnlTdG9yZSA/IG1fbWVtb3J5
U3RvcmUtPmhhc0hhZFVzZXJJbnRlcmFjdGlvbihwcmltYXJ5RG9tYWluKSA6IGZhbHNlOwotICAg
ICAgICBwb3N0VGFza1JlcGx5KFtoYWRVc2VySW50ZXJhY3Rpb24sIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoaGFkVXNlckludGVyYWN0aW9uKTsKLSAgICAgICAgfSk7Ci0gICAg
fSk7Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRMYXN0U2Vl
bihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKLQotICAgIGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkgfHwgdXJsLmlzRW1wdHkoKSkgewot
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgcG9zdFRhc2soW3RoaXMsIHByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4o
dXJsKSwgc2Vjb25kcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAg
ICBtX21lbW9yeVN0b3JlLT5zZXRMYXN0U2VlbihwcmltYXJ5RG9tYWluLCBzZWNvbmRzKTsKLSAg
ICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfSk7
Ci19Ci0gICAgCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgaWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwb3N0
VGFzayhbdGhpcywgcHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih1cmwpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
ewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUt
PnNldFByZXZhbGVudFJlc291cmNlKHByaW1hcnlEb21haW4pOwotICAgICAgICBwb3N0VGFza1Jl
cGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25z
dCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAodXJsLnByb3Rv
Y29sSXNBYm91dCgpIHx8IHVybC5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBvc3RUYXNrKFt0aGlzLCBwcmlt
YXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHVybCksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICht
X21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0VmVyeVByZXZhbGVu
dFJlc291cmNlKHByaW1hcnlEb21haW4pOwotICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9KTsKLX0KLSAgICAKLXZvaWQgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBwb3N0VGFzayhbdGhpcywgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0g
ICAgICAgIFN0cmluZyByZXN1bHQgPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+ZHVt
cFJlc291cmNlTG9hZFN0YXRpc3RpY3MoKSA6IGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHBvc3RU
YXNrUmVwbHkoW3Jlc3VsdCA9IHJlc3VsdC5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHQpOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQot
dm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2Uo
Y29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKGJvb2wpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAo
dXJsLnByb3RvY29sSXNBYm91dCgpIHx8IHVybC5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcG9zdFRh
c2soW3RoaXMsIHByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odXJsKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7
Ci0gICAgICAgIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZSA9IG1fbWVtb3J5U3RvcmUgPyBtX21l
bW9yeVN0b3JlLT5pc1ByZXZhbGVudFJlc291cmNlKHByaW1hcnlEb21haW4pIDogZmFsc2U7Ci0g
ICAgICAgIHBvc3RUYXNrUmVwbHkoW2lzUHJldmFsZW50UmVzb3VyY2UsIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoaXNQcmV2YWxlbnRSZXNvdXJjZSk7Ci0gICAgICAgIH0pOwot
ICAgIH0pOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNWZXJ5
UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKLQotICAgIGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkgfHwgdXJsLmlzRW1wdHkoKSkg
ewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgCi0gICAgcG9zdFRhc2soW3RoaXMsIHByaW1hcnlEb21haW4gPSBpc29sYXRlZFBy
aW1hcnlEb21haW4odXJsKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIGJvb2wgaXNWZXJ5UHJldmFsZW50UmVzb3Vy
Y2UgPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNWZXJ5UHJldmFsZW50UmVzb3Vy
Y2UocHJpbWFyeURvbWFpbikgOiBmYWxzZTsKLSAgICAgICAgcG9zdFRhc2tSZXBseShbaXNWZXJ5
UHJldmFsZW50UmVzb3VyY2UsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaXNW
ZXJ5UHJldmFsZW50UmVzb3VyY2UpOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VV
bmRlcihjb25zdCBVUkwmIHN1YnJlc291cmNlLCBjb25zdCBVUkwmIHRvcEZyYW1lLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgCi0gICAgcG9zdFRhc2soW3RoaXMsIHN1YnJlc291
cmNlUHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbihzdWJyZXNvdXJjZSksIHRv
cEZyYW1lUHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih0b3BGcmFtZSksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUg
ewotICAgICAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciA9IG1fbWVtb3J5
U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoc3Vi
cmVzb3VyY2VQcmltYXJ5RG9tYWluLCB0b3BGcmFtZVByaW1hcnlEb21haW4pIDogZmFsc2U7Ci0g
ICAgICAgIHBvc3RUYXNrUmVwbHkoW2lzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7
Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIpOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBVUkwmIHN1
YkZyYW1lLCBjb25zdCBVUkwmIHRvcEZyYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChib29s
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgcG9zdFRhc2soW3RoaXMsIHN1YkZyYW1lUHJpbWFyeURvbWFpbiA9IGlzb2xhdGVk
UHJpbWFyeURvbWFpbihzdWJGcmFtZSksIHRvcEZyYW1lUHJpbWFyeURvbWFpbiA9IGlzb2xhdGVk
UHJpbWFyeURvbWFpbih0b3BGcmFtZSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBib29sIGlzUmVnaXN0ZXJlZEFz
U3ViRnJhbWVVbmRlciA9IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc1JlZ2lzdGVy
ZWRBc1N1YkZyYW1lVW5kZXIoc3ViRnJhbWVQcmltYXJ5RG9tYWluLCB0b3BGcmFtZVByaW1hcnlE
b21haW4pIDogZmFsc2U7Ci0gICAgICAgIHBvc3RUYXNrUmVwbHkoW2lzUmVnaXN0ZXJlZEFzU3Vi
RnJhbWVVbmRlciwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihpc1JlZ2lzdGVy
ZWRBc1N1YkZyYW1lVW5kZXIpOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhj
b25zdCBVUkwmIGhvc3RSZWRpcmVjdGVkRnJvbSwgY29uc3QgVVJMJiBob3N0UmVkaXJlY3RlZFRv
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsK
LSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgcG9zdFRhc2soW3RoaXMsIGhv
c3RSZWRpcmVjdGVkRnJvbVByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4oaG9z
dFJlZGlyZWN0ZWRGcm9tKSwgaG9zdFJlZGlyZWN0ZWRUb1ByaW1hcnlEb21haW4gPSBpc29sYXRl
ZFByaW1hcnlEb21haW4oaG9zdFJlZGlyZWN0ZWRUbyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBib29sIGlzUmVn
aXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyA9IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5p
c1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oaG9zdFJlZGlyZWN0ZWRGcm9tUHJpbWFyeURvbWFp
biwgaG9zdFJlZGlyZWN0ZWRUb1ByaW1hcnlEb21haW4pIDogZmFsc2U7Ci0gICAgICAgIHBvc3RU
YXNrUmVwbHkoW2lzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbywgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8pOwotICAgICAgICB9
KTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNs
ZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwotCi0gICAgaWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBwb3N0VGFzayhbdGhpcywgcHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFp
bih1cmwpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVt
b3J5U3RvcmUtPmNsZWFyUHJldmFsZW50UmVzb3VyY2UocHJpbWFyeURvbWFpbik7Ci0gICAgICAg
IHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0pOwotfQot
Ci12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChj
b25zdCBVUkwmIHVybCwgYm9vbCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwotCi0gICAgaWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBwb3N0VGFzayhbdGhpcywgcHJpbWFyeURvbWFpbiA9IGlz
b2xhdGVkUHJpbWFyeURvbWFpbih1cmwpLCB2YWx1ZV0gewotICAgICAgICBpZiAobV9tZW1vcnlT
dG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldEdyYW5kZmF0aGVyZWQocHJpbWFy
eURvbWFpbiwgdmFsdWUpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkIChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBwcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmlt
YXJ5RG9tYWluKHVybCldICgpIG11dGFibGUgewotICAgICAgICBib29sIGlzR3JhbmRGYXRoZXJl
ZCA9IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc0dyYW5kZmF0aGVyZWQocHJpbWFy
eURvbWFpbikgOiBmYWxzZTsKLSAgICAgICAgcG9zdFRhc2tSZXBseShbaXNHcmFuZEZhdGhlcmVk
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRh
YmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGlzR3JhbmRGYXRoZXJlZCk7Ci0g
ICAgICAgIH0pOwotICAgIH0pOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0IFVSTCYgc3ViZnJhbWUs
IGNvbnN0IFVSTCYgdG9wRnJhbWUpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIGlmIChzdWJmcmFtZS5wcm90b2NvbElzQWJvdXQoKSB8fCBzdWJmcmFtZS5pc0VtcHR5
KCkgfHwgdG9wRnJhbWUucHJvdG9jb2xJc0Fib3V0KCkgfHwgdG9wRnJhbWUuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBwb3N0VGFzayhbdGhpcywgcHJpbWFyeVRvcEZyYW1lRG9t
YWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHRvcEZyYW1lKSwgcHJpbWFyeVN1YkZyYW1lRG9t
YWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHN1YmZyYW1lKV0gewotICAgICAgICBpZiAobV9t
ZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFN1YmZyYW1lVW5kZXJU
b3BGcmFtZU9yaWdpbihwcmltYXJ5U3ViRnJhbWVEb21haW4sIHByaW1hcnlUb3BGcmFtZURvbWFp
bik7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpz
ZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgVVJMJiBzdWJyZXNvdXJjZSwg
Y29uc3QgVVJMJiB0b3BGcmFtZSkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwot
Ci0gICAgaWYgKHN1YnJlc291cmNlLnByb3RvY29sSXNBYm91dCgpIHx8IHN1YnJlc291cmNlLmlz
RW1wdHkoKSB8fCB0b3BGcmFtZS5wcm90b2NvbElzQWJvdXQoKSB8fCB0b3BGcmFtZS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5VG9wRnJh
bWVEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4odG9wRnJhbWUpLCBwcmltYXJ5U3VicmVz
b3VyY2VEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4oc3VicmVzb3VyY2UpXSB7Ci0gICAg
ICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0U3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbiwgcHJp
bWFyeVRvcEZyYW1lRG9tYWluKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwm
IHN1YnJlc291cmNlLCBjb25zdCBVUkwmIGhvc3ROYW1lUmVkaXJlY3RlZFRvKQotewotICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoc3VicmVzb3VyY2UucHJvdG9jb2xJ
c0Fib3V0KCkgfHwgc3VicmVzb3VyY2UuaXNFbXB0eSgpIHx8IGhvc3ROYW1lUmVkaXJlY3RlZFRv
LnByb3RvY29sSXNBYm91dCgpIHx8IGhvc3ROYW1lUmVkaXJlY3RlZFRvLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgcG9zdFRhc2soW3RoaXMsIHByaW1hcnlSZWRpcmVjdERvbWFp
biA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbihob3N0TmFtZVJlZGlyZWN0ZWRUbyksIHByaW1hcnlT
dWJyZXNvdXJjZURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbihzdWJyZXNvdXJjZSldIHsK
LSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5z
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJpbWFyeVN1YnJlc291cmNlRG9tYWluLCBw
cmltYXJ5UmVkaXJlY3REb21haW4pOwotICAgIH0pOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3Qg
VVJMJiBzdWJyZXNvdXJjZSwgY29uc3QgVVJMJiBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tKQotewot
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoc3VicmVzb3VyY2UucHJv
dG9jb2xJc0Fib3V0KCkgfHwgc3VicmVzb3VyY2UuaXNFbXB0eSgpIHx8IGhvc3ROYW1lUmVkaXJl
Y3RlZEZyb20ucHJvdG9jb2xJc0Fib3V0KCkgfHwgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbS5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBwb3N0VGFzayhbdGhpcywgcHJpbWFy
eVJlZGlyZWN0RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKGhvc3ROYW1lUmVkaXJlY3Rl
ZEZyb20pLCBwcmltYXJ5U3VicmVzb3VyY2VEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4o
c3VicmVzb3VyY2UpXSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAg
bV9tZW1vcnlTdG9yZS0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20ocHJpbWFyeVN1
YnJlc291cmNlRG9tYWluLCBwcmltYXJ5UmVkaXJlY3REb21haW4pOwotICAgIH0pOwotfQotCi12
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRp
cmVjdFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVIb3N0TmFtZSwgY29uc3QgVVJMJiBob3N0TmFtZVJl
ZGlyZWN0ZWRUbykKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYg
KHRvcEZyYW1lSG9zdE5hbWUucHJvdG9jb2xJc0Fib3V0KCkgfHwgdG9wRnJhbWVIb3N0TmFtZS5p
c0VtcHR5KCkgfHwgaG9zdE5hbWVSZWRpcmVjdGVkVG8ucHJvdG9jb2xJc0Fib3V0KCkgfHwgaG9z
dE5hbWVSZWRpcmVjdGVkVG8uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
cG9zdFRhc2soW3RoaXMsIHByaW1hcnlSZWRpcmVjdERvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURv
bWFpbihob3N0TmFtZVJlZGlyZWN0ZWRUbyksIHRvcEZyYW1lUHJpbWFyeURvbWFpbiA9IGlzb2xh
dGVkUHJpbWFyeURvbWFpbih0b3BGcmFtZUhvc3ROYW1lKV0gewotICAgICAgICBpZiAobV9tZW1v
cnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RUbyh0b3BGcmFtZVByaW1hcnlEb21haW4sIHByaW1hcnlSZWRpcmVjdERvbWFpbik7Ci0g
ICAgfSk7Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZyYW1lSG9zdE5hbWUsIGNvbnN0
IFVSTCYgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwotCi0gICAgaWYgKHRvcEZyYW1lSG9zdE5hbWUucHJvdG9jb2xJc0Fib3V0KCkgfHwg
dG9wRnJhbWVIb3N0TmFtZS5pc0VtcHR5KCkgfHwgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbS5wcm90
b2NvbElzQWJvdXQoKSB8fCBob3N0TmFtZVJlZGlyZWN0ZWRGcm9tLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5UmVkaXJlY3REb21h
aW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4oaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSksIHRvcEZy
YW1lUHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih0b3BGcmFtZUhvc3ROYW1l
KV0gewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3Rv
cmUtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKHRvcEZyYW1lUHJpbWFyeURvbWFpbiwg
cHJpbWFyeVJlZGlyZWN0RG9tYWluKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIC8vIEhlbHBlciBm
dW5jdGlvbiB1c2VkIGJ5IHRlc3Rpbmcgc3lzdGVtLiBTaG91bGQgb25seSBiZSBjYWxsZWQgZnJv
bSB0aGUgbWFpbiB0aHJlYWQuCi0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAg
IHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFtX21lbW9yeVN0b3JlKSB7Ci0gICAg
ICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtX21lbW9yeVN0b3JlLT51cGRhdGVD
b29raWVCbG9ja2luZyhbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlRm9y
RG9tYWlucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvQmxvY2ssIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICAvLyBIZWxwZXIgZnVu
Y3Rpb24gdXNlZCBieSB0ZXN0aW5nIHN5c3RlbS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20g
dGhlIG1haW4gdGhyZWFkLgotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgcG9z
dFRhc2soW3RoaXMsIGRvbWFpbnNUb0Jsb2NrID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Js
b2NrKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkg
bXV0YWJsZSB7Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkgewotICAgICAgICAgICAgcG9z
dFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBtX21lbW9yeVN0b3JlLT51cGRhdGVDb29raWVCbG9j
a2luZ0ZvckRvbWFpbnMoZG9tYWluc1RvQmxvY2ssIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICAgICAgcG9zdFRhc2tS
ZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwot
fQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckJs
b2NraW5nU3RhdGVGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIHVzZWQgYnkgdGVzdGluZyBzeXN0ZW0uIFNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwot
ICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW5zID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnMpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKLSAgICAgICAgaWYgKCFtX21lbW9yeVN0b3JlKSB7Ci0gICAgICAgICAgICBwb3N0VGFza1Jl
cGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIG1fbWVtb3J5U3RvcmUtPmNsZWFyQmxvY2tpbmdTdGF0ZUZvckRv
bWFpbnMoZG9tYWlucywgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50KFNob3VsZEdyYW5kZmF0aGVyIHNob3VsZEdyYW5kZmF0aGVyLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKLSAgICBwb3N0VGFzayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBzaG91bGRHcmFuZGZhdGhlciwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX3BlcnNpc3RlbnRTdG9y
YWdlKQotICAgICAgICAgICAgbV9wZXJzaXN0ZW50U3RvcmFnZS0+Y2xlYXIoKTsKLQotICAgICAg
ICBDb21wbGV0aW9uSGFuZGxlckNhbGxpbmdTY29wZSBjb21wbGV0aW9uSGFuZGxlckNhbGxlcihb
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgICAgICB9KTsKLQotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkgewotICAgICAgICAg
ICAgbV9tZW1vcnlTdG9yZS0+Y2xlYXIoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBwcm90ZWN0ZWRU
aGlzLmNvcHlSZWYoKSwgc2hvdWxkR3JhbmRmYXRoZXIsIGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlckNhbGxlcildICgpIG11dGFibGUgewotICAgICAg
ICAgICAgICAgIGlmIChzaG91bGRHcmFuZGZhdGhlciA9PSBTaG91bGRHcmFuZGZhdGhlcjo6WWVz
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+Z3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRh
KGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVyLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0
YXRpc3RpY3MsICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ2xlYXJJ
bk1lbW9yeUFuZFBlcnNpc3RlbnQgQWZ0ZXIgYmVpbmcgY2xlYXJlZCwgbV9tZW1vcnlTdG9yZSBp
cyBudWxsIHdoZW4gdHJ5aW5nIHRvIGdyYW5kZmF0aGVyIGRhdGEuIik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAo
c2hvdWxkR3JhbmRmYXRoZXIgPT0gU2hvdWxkR3JhbmRmYXRoZXI6OlllcykKLSAgICAgICAgICAg
ICAgICBSRUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50IEJlZm9y
ZSBiZWluZyBjbGVhcmVkLCBtX21lbW9yeVN0b3JlIGlzIG51bGwgd2hlbiB0cnlpbmcgdG8gZ3Jh
bmRmYXRoZXIgZGF0YS4iKTsKLSAgICAgICAgfQotICAgIH0pOwotfQotCi12b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVu
dChXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBTaG91bGRHcmFuZGZhdGhlciBzaG91bGRHcmFuZGZh
dGhlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQotewotICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICAvLyBGb3Igbm93LCBiZSBjb25zZXJ2YXRpdmUg
YW5kIGNsZWFyIGV2ZXJ5dGhpbmcgcmVnYXJkbGVzcyBvZiBtb2RpZmllZFNpbmNlLgotICAgIFVO
VVNFRF9QQVJBTShtb2RpZmllZFNpbmNlKTsKLSAgICBzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQ
ZXJzaXN0ZW50KHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci19Ci0KLXZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVy
YWN0aW9uKFNlY29uZHMgc2Vjb25kcykKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwotICAgIHBvc3RUYXNrKFt0aGlzLCBzZWNvbmRzXSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0
b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFj
dGlvbihzZWNvbmRzKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRz
IHNlY29uZHMpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBwb3N0VGFz
ayhbdGhpcywgc2Vjb25kc10gewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAg
ICAgIG1fbWVtb3J5U3RvcmUtPnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3Zh
bChzZWNvbmRzKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMpCi17Ci0gICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBwb3N0VGFzayhbdGhpcywgc2Vjb25kc10gewot
ICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNl
dEdyYW5kZmF0aGVyaW5nVGltZShzZWNvbmRzKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwKFNlY29uZHMgc2Vjb25k
cywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsK
LSAgICAKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIGlmIChtX3dl
YnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5zZXRDYWNoZU1h
eEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhzZWNvbmRzLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSAgICBjb21wbGV0aW9u
SGFuZGxlcigpOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2Fs
bFVwZGF0ZVByZXZhbGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0ZvckhhbmRsZXIoY29uc3QgVmVj
dG9yPFN0cmluZz4mIGRvbWFpbnNUb0Jsb2NrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQot
I2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgaWYgKG1fd2Vic2l0ZURh
dGFTdG9yZSkgewotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPnVwZGF0ZVByZXZhbGVudERv
bWFpbnNUb0Jsb2NrQ29va2llc0Zvcihkb21haW5zVG9CbG9jaywgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0gICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNh
bGxSZW1vdmVEb21haW5zSGFuZGxlcihjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlucykKLXsK
LSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0jaWYgRU5BQkxFKFJFU09VUkNFX0xP
QURfU1RBVElTVElDUykKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBtX3dl
YnNpdGVEYXRhU3RvcmUtPnJlbW92ZVByZXZhbGVudERvbWFpbnMoZG9tYWlucyk7Ci0jZW5kaWYK
LX0KLSAgICAKLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNYXhTdGF0
aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQpCi17Ci0gICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKLSAgICBwb3N0VGFzayhbdGhpcywgbWF4aW11bUVudHJ5Q291bnRd
IHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3Jl
LT5zZXRNYXhTdGF0aXN0aWNzRW50cmllcyhtYXhpbXVtRW50cnlDb3VudCk7Ci0gICAgfSk7Ci19
Ci0gICAgCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRy
aWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50KQotewotICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7Ci0KLSAgICBwb3N0VGFzayhbdGhpcywgcHJ1bmVUYXJnZXRDb3VudF0gewot
ICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNl
dFBydW5lRW50cmllc0Rvd25UbyhwcnVuZVRhcmdldENvdW50KTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVs
dFZhbHVlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17
Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHBvc3RUYXNrKFt0aGlzLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
ewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUt
PnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcygpOwotCi0gICAgICAgIHBvc3RUYXNrUmVw
bHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0pOwotfQotCi12b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nVGVzdGluZ0V2ZW50KGNvbnN0IFN0cmluZyYg
ZXZlbnQpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChtX3N0
YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2spCi0gICAgICAgIG1fc3RhdGlzdGljc1Rlc3RpbmdDYWxs
YmFjayhldmVudCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTgxNzA0YTRlZjI5OWRjMDgzZDI3OWY1MzRj
NzcyODFjZmE3NmI0ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJXZWJzaXRl
RGF0YVR5cGUuaCIKLSNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KLSNpbmNsdWRl
IDx3dGYvUnVuTG9vcC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KLSNpbmNs
dWRlIDx3dGYvV2Vha1B0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1u
YW1lc3BhY2UgV1RGIHsKLWNsYXNzIFdvcmtRdWV1ZTsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotY2xhc3MgUmVzb3VyY2VSZXF1ZXN0Owotc3RydWN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3M7
Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU7Ci1jbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3Jh
Z2U7Ci1jbGFzcyBXZWJGcmFtZVByb3h5OwotY2xhc3MgV2ViUHJvY2Vzc1Byb3h5OwotY2xhc3Mg
V2Vic2l0ZURhdGFTdG9yZTsKLQotZW51bSBjbGFzcyBTdG9yYWdlQWNjZXNzU3RhdHVzIHsKLSAg
ICBDYW5ub3RSZXF1ZXN0QWNjZXNzLAotICAgIFJlcXVpcmVzVXNlclByb21wdCwKLSAgICBIYXNB
Y2Nlc3MKLX07Ci0KLWNsYXNzIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSBmaW5hbCA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUsIFdURjo6RGVzdHJ1Y3Rpb25UaHJlYWQ6Ok1haW4+LCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVj
ZWl2ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlPiBjcmVhdGUoV2Vic2l0ZURhdGFTdG9yZSYgd2Vic2l0ZURhdGFTdG9yZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZSh3ZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgfQotCi0gICAgfldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZSgpOwotCi0gICAgc3RhdGljIGNvbnN0IE9wdGlvblNldDxXZWJzaXRlRGF0
YVR5cGU+JiBtb25pdG9yZWREYXRhVHlwZXMoKTsKLQotICAgIFdvcmtRdWV1ZSYgc3RhdGlzdGlj
c1F1ZXVlKCkgeyByZXR1cm4gbV9zdGF0aXN0aWNzUXVldWUuZ2V0KCk7IH0KLQotICAgIHZvaWQg
c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sKTsKLSAgICB2b2lk
IHNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wp
OwotICAgIHZvaWQgc2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KGJvb2wpOwotCi0gICAgdm9pZCBo
YXNTdG9yYWdlQWNjZXNzKFN0cmluZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJhbWVI
b3N0LCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spOwotICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3Mo
U3RyaW5nJiYgc3ViRnJhbWVIb3N0LCBTdHJpbmcmJiB0b3BGcmFtZUhvc3QsIHVpbnQ2NF90IGZy
YW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCBwcm9tcHRFbmFibGVkLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmKTsKLSAgICB2b2lkIGdyYW50U3RvcmFn
ZUFjY2VzcyhTdHJpbmcmJiBzdWJGcmFtZUhvc3QsIFN0cmluZyYmIHRvcEZyYW1lSG9zdCwgdWlu
dDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBib29sIHVzZXJXYXNQcm9tcHRlZE5vdywg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7Ci0gICAgdm9pZCByZXF1ZXN0U3RvcmFn
ZUFjY2Vzc0NhbGxiYWNrKGJvb2wgd2FzR3JhbnRlZCwgdWludDY0X3QgY29udGV4dElkKTsKLQot
ICAgIHZvaWQgYXBwbGljYXRpb25XaWxsVGVybWluYXRlKCk7Ci0KLSAgICB2b2lkIGxvZ0ZyYW1l
TmF2aWdhdGlvbihjb25zdCBXZWJGcmFtZVByb3h5JiwgY29uc3QgVVJMJiBwYWdlVVJMLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBVUkwmIHJlZGlyZWN0VVJMKTsKLSAg
ICB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOwotICAgIHZvaWQgY2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIGhhc0hhZFVzZXJJbnRlcmFjdGlv
bihjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKLSAgICB2b2lk
IHNldExhc3RTZWVuKGNvbnN0IFVSTCYsIFNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7Ci0gICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgc2V0VmVyeVByZXZhbGVudFJlc291cmNl
KGNvbnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCBkdW1w
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmlu
ZyYpPiYmKTsKLSAgICB2b2lkIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7Ci0gICAgdm9pZCBpc1ZlcnlQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKLSAgICB2
b2lkIGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBVUkwmIHN1YnJlc291cmNl
LCBjb25zdCBVUkwmIHRvcEZyYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsK
LSAgICB2b2lkIGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBVUkwmIHN1YkZyYW1l
LCBjb25zdCBVUkwmIHRvcEZyYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsK
LSAgICB2b2lkIGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBVUkwmIGhvc3RSZWRp
cmVjdGVkRnJvbSwgY29uc3QgVVJMJiBob3N0UmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wpPiYmKTsKLSAgICB2b2lkIGNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
VVJMJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHNldEdyYW5kZmF0
aGVyZWQoY29uc3QgVVJMJiwgYm9vbCk7Ci0gICAgdm9pZCBpc0dyYW5kZmF0aGVyZWQoY29uc3Qg
VVJMJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7Ci0gICAgdm9pZCBzZXRTdWJm
cmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgVVJMJiBzdWJmcmFtZSwgY29uc3QgVVJMJiB0
b3BGcmFtZSk7Ci0gICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29u
c3QgVVJMJiBzdWJyZXNvdXJjZSwgY29uc3QgVVJMJiB0b3BGcmFtZSk7Ci0gICAgdm9pZCBzZXRT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJjZSwgY29uc3Qg
VVJMJiBob3N0TmFtZVJlZGlyZWN0ZWRUbyk7Ci0gICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHN1YnJlc291cmNlLCBjb25zdCBVUkwmIGhvc3ROYW1l
UmVkaXJlY3RlZEZyb20pOwotICAgIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNv
bnN0IFVSTCYgdG9wRnJhbWVIb3N0TmFtZSwgY29uc3QgVVJMJiBob3N0TmFtZVJlZGlyZWN0ZWRU
byk7Ci0gICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRv
cEZyYW1lSG9zdE5hbWUsIGNvbnN0IFVSTCYgaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSk7Ci0gICAg
dm9pZCBzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7Ci0gICAgdm9pZCBzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlRm9yRG9tYWlucyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvQmxvY2ssIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7Ci0gICAgdm9pZCBzY2hlZHVsZUNsZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
Jik7Ci0gICAgdm9pZCBzY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3Npbmco
KTsKLSAgICB2b2lkIHN1Ym1pdFRlbGVtZXRyeSgpOwotCi0gICAgZW51bSBjbGFzcyBTaG91bGRH
cmFuZGZhdGhlciB7Ci0gICAgICAgIE5vLAotICAgICAgICBZZXMsCi0gICAgfTsKLSAgICB2b2lk
IHNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQoU2hvdWxkR3JhbmRmYXRoZXIsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCBzY2hlZHVsZUNsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50KFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIFNob3VsZEdyYW5kZmF0aGVy
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotCi0gICAgdm9pZCBzZXRUaW1lVG9MaXZl
VXNlckludGVyYWN0aW9uKFNlY29uZHMpOwotICAgIHZvaWQgc2V0TWluaW11bVRpbWVCZXR3ZWVu
RGF0YVJlY29yZHNSZW1vdmFsKFNlY29uZHMpOwotICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJpbmdU
aW1lKFNlY29uZHMpOwotICAgIHZvaWQgc2V0Q2FjaGVNYXhBZ2VDYXAoU2Vjb25kcywgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHNldE1heFN0YXRpc3RpY3NFbnRyaWVz
KHNpemVfdCk7Ci0gICAgdm9pZCBzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90KTsKLQotICAg
IHZvaWQgcmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7Ci0KLSAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUo
Ym9vbCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHNldFByZXZhbGVu
dFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7Ci0gICAgCi0gICAgdm9pZCBzZXRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKFdURjo6
RnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjYWxsYmFjaykgeyBtX3N0YXRpc3RpY3NU
ZXN0aW5nQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsgfQotICAgIHZvaWQgbG9nVGVzdGlu
Z0V2ZW50KGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgY2FsbEdyYW50U3RvcmFnZUFjY2Vzc0hh
bmRsZXIoY29uc3QgU3RyaW5nJiBzdWJGcmFtZVByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYg
dG9wRnJhbWVQcmltYXJ5RG9tYWluLCBPcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgdWludDY0
X3QgcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKLSAgICB2b2lkIHJl
bW92ZUFsbFN0b3JhZ2VBY2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2
b2lkIGNhbGxVcGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3JIYW5kbGVyKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9CbG9jaywgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmKTsKLSAgICB2b2lkIGNhbGxSZW1vdmVEb21haW5zSGFuZGxlcihjb25zdCBWZWN0b3I8
U3RyaW5nPiYgZG9tYWlucyk7Ci0gICAgdm9pZCBjYWxsSGFzU3RvcmFnZUFjY2Vzc0ZvckZyYW1l
SGFuZGxlcihjb25zdCBTdHJpbmcmIHJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZpcnN0
UGFydHlEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJik7Ci0KLSAgICB2b2lkIGRpZENyZWF0ZU5ldHdvcmtQcm9j
ZXNzKCk7Ci0KLSAgICBXZWJzaXRlRGF0YVN0b3JlKiB3ZWJzaXRlRGF0YVN0b3JlKCkgeyByZXR1
cm4gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKFdlYnNpdGVEYXRhU3RvcmUmKTsKLQotICAg
IHZvaWQgcG9zdFRhc2soV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYpOwotICAgIHN0YXRpYyB2b2lk
IHBvc3RUYXNrUmVwbHkoV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYpOwotCi0gICAgLy8gSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIuCi0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKLQotICAgIC8vIElQQyBtZXNzYWdlIGhhbmRs
ZXJzLgotICAgIHZvaWQgcmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQoVmVjdG9yPFdlYkNv
cmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiYgb3JpZ2lucyk7Ci0gICAgdm9pZCByZXF1ZXN0
U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKFN0cmluZyYmIHByaW1hcnlEb21haW5Jbk5lZWRPZlN0
b3JhZ2VBY2Nlc3MsIHVpbnQ2NF90IG9wZW5lclBhZ2VJRCwgU3RyaW5nJiYgb3BlbmVyUHJpbWFy
eURvbWFpbik7Ci0KLSAgICB2b2lkIHBlcmZvcm1EYWlseVRhc2tzKCk7Ci0KLSAgICBTdG9yYWdl
QWNjZXNzU3RhdHVzIHN0b3JhZ2VBY2Nlc3NTdGF0dXMoY29uc3QgU3RyaW5nJiBzdWJGcmFtZVBy
aW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgdG9wRnJhbWVQcmltYXJ5RG9tYWluKTsKLQotICAg
IHZvaWQgZmx1c2hBbmREZXN0cm95UGVyc2lzdGVudFN0b3JlKCk7Ci0KLSAgICBXZWFrUHRyPFdl
YnNpdGVEYXRhU3RvcmU+IG1fd2Vic2l0ZURhdGFTdG9yZTsKLSAgICBSZWY8V29ya1F1ZXVlPiBt
X3N0YXRpc3RpY3NRdWV1ZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlPiBtX21lbW9yeVN0b3JlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U+IG1fcGVyc2lzdGVudFN0b3JhZ2U7
Ci0KLSAgICBSdW5Mb29wOjpUaW1lcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IG1f
ZGFpbHlUYXNrc1RpbWVyOwotCi0gICAgYm9vbCBtX2hhc1NjaGVkdWxlZFByb2Nlc3NTdGF0cyB7
IGZhbHNlIH07Ci0KLSAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+IG1fc3Rh
dGlzdGljc1Rlc3RpbmdDYWxsYmFjazsKLQotICAgIGJvb2wgbV9maXJzdE5ldHdvcmtQcm9jZXNz
Q3JlYXRlZCB7IGZhbHNlIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxl
bWV0cnkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1RlbGVtZXRyeS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NjkyZTEy
OTEyYTZjMWMwOThkM2I5ZjYwODA0YWUyZmYzN2RmOWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOTYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgiCi0KLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmUuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgotI2lu
Y2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRGlhZ25vc3RpY0xv
Z2dpbmdLZXlzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg+
Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKLQotY29uc3QgdW5zaWduZWQgbWluaW11bVByZXZhbGVudFJlc291cmNlc0ZvclRlbGVtZXRy
eSA9IDM7Ci1jb25zdCB1bnNpZ25lZCBzaWduaWZpY2FudEZpZ3VyZXNGb3JMb2dnZWRWYWx1ZXMg
PSAzOwotc3RhdGljIGJvb2wgbm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQgPSBm
YWxzZTsKLQotc3RydWN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5IHsKLSAgICB1bnNpZ25l
ZCBudW1iZXJPZlRpbWVzRGF0YVJlY29yZHNSZW1vdmVkOwotICAgIGJvb2wgaGFzSGFkVXNlcklu
dGVyYWN0aW9uOwotICAgIHVuc2lnbmVkIGRheXNTaW5jZVVzZXJJbnRlcmFjdGlvbjsKLSAgICB1
bnNpZ25lZCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zOwotICAgIHVuc2lnbmVkIHN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnM7Ci0gICAgdW5zaWduZWQgc3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNUbzsKLSAgICB1bnNpZ25lZCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVl
VG9Vc2VySW50ZXJhY3Rpb247Ci0gICAgdW5zaWduZWQgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0
eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSTsKLX07Ci0KLXN0YXRpYyBWZWN0b3I8UHJldmFsZW50UmVz
b3VyY2VUZWxlbWV0cnk+IHNvcnRlZFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5KGNvbnN0IFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSYgc3RvcmUpCi17Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0gICAgVmVjdG9yPFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5
PiBzb3J0ZWQ7Ci0gICAgc3RvcmUucHJvY2Vzc1N0YXRpc3RpY3MoWyZzb3J0ZWRdIChhdXRvJiBz
dGF0aXN0aWMpIHsKLSAgICAgICAgaWYgKCFzdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB1bnNpZ25lZCBkYXlzU2luY2VVc2VySW50
ZXJhY3Rpb24gPSBzdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPD0gV2Fs
bFRpbWUoKSA/IDAgOiBzdGQ6OmZsb29yKChXYWxsVGltZTo6bm93KCkgLSBzdGF0aXN0aWMubW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpIC8gMjRfaCk7Ci0gICAgICAgIHNvcnRlZC5hcHBl
bmQoUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkgewotICAgICAgICAgICAgc3RhdGlzdGljLmRh
dGFSZWNvcmRzUmVtb3ZlZCwKLSAgICAgICAgICAgIHN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rp
b24sCi0gICAgICAgICAgICBkYXlzU2luY2VVc2VySW50ZXJhY3Rpb24sCi0gICAgICAgICAgICBz
dGF0aXN0aWMuc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucy5zaXplKCksCi0gICAgICAgICAg
ICBzdGF0aXN0aWMuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucy5zaXplKCksCi0gICAg
ICAgICAgICBzdGF0aXN0aWMuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5zaXplKCksCi0g
ICAgICAgICAgICBzdGF0aXN0aWMudGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlcklu
dGVyYWN0aW9uLAotICAgICAgICAgICAgc3RhdGlzdGljLnRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFy
dHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0KLSAgICBpZiAo
c29ydGVkLnNpemUoKSA8IG1pbmltdW1QcmV2YWxlbnRSZXNvdXJjZXNGb3JUZWxlbWV0cnkpCi0g
ICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBzdGQ6OnNvcnQoc29ydGVkLmJlZ2luKCksIHNvcnRl
ZC5lbmQoKSwgW10oY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIGEsIGNvbnN0IFBy
ZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiBiKSB7Ci0gICAgICAgIHJldHVybiBhLnN1YmZyYW1l
VW5kZXJUb3BGcmFtZU9yaWdpbnMgKyBhLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMg
KyBhLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gPgotICAgICAgICBiLnN1YmZyYW1lVW5k
ZXJUb3BGcmFtZU9yaWdpbnMgKyBiLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMgKyBi
LnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG87Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gc29y
dGVkOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZSZXNvdXJjZXNXaXRoVXNlckludGVy
YWN0aW9uKGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeT4mIHJlc291cmNl
cywgc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5kKQotewotICAgIGlmIChyZXNvdXJjZXMuaXNFbXB0
eSgpIHx8IHJlc291cmNlcy5zaXplKCkgPCBiZWdpbiArIDEgfHwgcmVzb3VyY2VzLnNpemUoKSA8
IGVuZCArIDEpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIHVuc2lnbmVkIHJlc3VsdCA9
IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IGJlZ2luOyBpIDwgZW5kOyArK2kpIHsKLSAgICAgICAg
aWYgKHJlc291cmNlc1tpXS5oYXNIYWRVc2VySW50ZXJhY3Rpb24pCi0gICAgICAgICAgICArK3Jl
c3VsdDsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSAgICAKLXN0YXRpYyB1
bnNpZ25lZCBtZWRpYW4oY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgdikKLXsKLSAgICBpZiAodi5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICh2LnNpemUoKSA9PSAxKQotICAg
ICAgICByZXR1cm4gdlswXTsKLSAgICAKLSAgICBhdXRvIHNpemUgPSB2LnNpemUoKTsKLSAgICBh
dXRvIG1pZGRsZSA9IHNpemUgLyAyOwotICAgIGlmIChzaXplICUgMikKLSAgICAgICAgcmV0dXJu
IHZbbWlkZGxlXTsKLSAgICByZXR1cm4gKHZbbWlkZGxlIC0gMV0gKyB2W21pZGRsZV0pIC8gMjsK
LX0KLSAgICAKLXN0YXRpYyB1bnNpZ25lZCBtZWRpYW4oY29uc3QgVmVjdG9yPFByZXZhbGVudFJl
c291cmNlVGVsZW1ldHJ5PiYgdiwgdW5zaWduZWQgYmVnaW4sIHVuc2lnbmVkIGVuZCwgY29uc3Qg
V1RGOjpGdW5jdGlvbjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYg
dGVsZW1ldHJ5KT4mIHN0YXRpc3RpY0dldHRlcikKLXsKLSAgICBpZiAodi5pc0VtcHR5KCkgfHwg
di5zaXplKCkgPCBiZWdpbiArIDEgfHwgdi5zaXplKCkgPCBlbmQgKyAxKQotICAgICAgICByZXR1
cm4gMDsKLSAgICAKLSAgICBWZWN0b3I8dW5zaWduZWQ+IHBhcnQ7Ci0gICAgcGFydC5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGVuZCAtIGJlZ2luICsgMSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
YmVnaW47IGkgPD0gZW5kOyArK2kpCi0gICAgICAgIHBhcnQudW5jaGVja2VkQXBwZW5kKHN0YXRp
c3RpY0dldHRlcih2W2ldKSk7Ci0gICAgCi0gICAgcmV0dXJuIG1lZGlhbihwYXJ0KTsKLX0KLSAg
ICAKLXN0YXRpYyBXZWJQYWdlUHJveHkqIG5vbkVwaGVtZXJhbFdlYlBhZ2VQcm94eSgpCi17Ci0g
ICAgYXV0byBwcm9jZXNzUG9vbHMgPSBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCk7
Ci0gICAgaWYgKHByb2Nlc3NQb29scy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIAotICAgIGF1dG8gcHJvY2Vzc1Bvb2wgPSBwcm9jZXNzUG9vbHNbMF07Ci0gICAgaWYg
KCFwcm9jZXNzUG9vbCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgZm9yIChh
dXRvJiB3ZWJQcm9jZXNzIDogcHJvY2Vzc1Bvb2wtPnByb2Nlc3NlcygpKSB7Ci0gICAgICAgIGZv
ciAoYXV0byYgcGFnZSA6IHdlYlByb2Nlc3MtPnBhZ2VzKCkpIHsKLSAgICAgICAgICAgIGlmIChw
YWdlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgcmV0dXJuIHBhZ2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IG51bGxwdHI7Ci19Ci0gICAgCi1zdGF0aWMgdm9pZCBzdWJtaXRUb3BMaXN0KHVuc2lnbmVkIG51
bWJlck9mUmVzb3VyY2VzRnJvbVRoZVRvcCwgY29uc3QgVmVjdG9yPFByZXZhbGVudFJlc291cmNl
VGVsZW1ldHJ5PiYgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCBjb25zdCBWZWN0b3I8UHJldmFs
ZW50UmVzb3VyY2VUZWxlbWV0cnk+JiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNl
ckludGVyYWN0aW9uLCBXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKLXsKLSAgICBXVEY6OkZ1
bmN0aW9uPHVuc2lnbmVkKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0
cnkpPiBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zR2V0dGVyID0gW10gKGF1dG8mIHQpIHsK
LSAgICAgICAgcmV0dXJuIHQuc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luczsKLSAgICB9Owot
ICAgIFdURjo6RnVuY3Rpb248dW5zaWduZWQoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0
cnkmIHRlbGVtZXRyeSk+IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNHZXR0ZXIgPSBb
XSAoYXV0byYgdCkgewotICAgICAgICByZXR1cm4gdC5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVP
cmlnaW5zOwotICAgIH07Ci0gICAgV1RGOjpGdW5jdGlvbjx1bnNpZ25lZChjb25zdCBQcmV2YWxl
bnRSZXNvdXJjZVRlbGVtZXRyeSYgdGVsZW1ldHJ5KT4gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUb0dldHRlciA9IFtdIChhdXRvJiB0KSB7Ci0gICAgICAgIHJldHVybiB0LnN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG87Ci0gICAgfTsKLSAgICBXVEY6OkZ1bmN0aW9uPHVuc2lnbmVkKGNv
bnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkpPiBudW1iZXJPZlRpbWVz
RGF0YVJlY29yZHNSZW1vdmVkR2V0dGVyID0gW10gKGF1dG8mIHQpIHsKLSAgICAgICAgcmV0dXJu
IHQubnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZDsKLSAgICB9OwotICAgIFdURjo6RnVu
Y3Rpb248dW5zaWduZWQoY29uc3QgUHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnkmIHRlbGVtZXRy
eSk+IG51bWJlck9mVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9u
R2V0dGVyID0gW10gKGF1dG8mIHQpIHsKLSAgICAgICAgcmV0dXJuIHQudGltZXNBY2Nlc3NlZEFz
Rmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uOwotICAgIH07Ci0gICAgV1RGOjpGdW5jdGlv
bjx1bnNpZ25lZChjb25zdCBQcmV2YWxlbnRSZXNvdXJjZVRlbGVtZXRyeSYgdGVsZW1ldHJ5KT4g
bnVtYmVyT2ZUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJR2V0
dGVyID0gW10gKGF1dG8mIHQpIHsKLSAgICAgICAgcmV0dXJuIHQudGltZXNBY2Nlc3NlZEFzRmly
c3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSTsKLSAgICB9OwotCi0gICAgdW5zaWduZWQgdG9w
UHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiA9IG51bWJlck9mUmVzb3VyY2Vz
V2l0aFVzZXJJbnRlcmFjdGlvbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIDAsIG51bWJlck9m
UmVzb3VyY2VzRnJvbVRoZVRvcCAtIDEpOwotICAgIHVuc2lnbmVkIHRvcFN1YmZyYW1lVW5kZXJU
b3BGcmFtZU9yaWdpbnMgPSBtZWRpYW4oc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVz
ZXJJbnRlcmFjdGlvbiwgMCwgbnVtYmVyT2ZSZXNvdXJjZXNGcm9tVGhlVG9wIC0gMSwgc3ViZnJh
bWVVbmRlclRvcEZyYW1lT3JpZ2luc0dldHRlcik7Ci0gICAgdW5zaWduZWQgdG9wU3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lT3JpZ2lucyA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNX
aXRob3V0VXNlckludGVyYWN0aW9uLCAwLCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3AgLSAx
LCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zR2V0dGVyKTsKLSAgICB1bnNpZ25lZCB0
b3BTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvID0gbWVkaWFuKHNvcnRlZFByZXZhbGVudFJl
c291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIDAsIG51bWJlck9mUmVzb3VyY2VzRnJvbVRo
ZVRvcCAtIDEsIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9HZXR0ZXIpOwotICAgIHVuc2ln
bmVkIHRvcE51bWJlck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWQgPSBtZWRpYW4oc29ydGVkUHJl
dmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgMCwgbnVtYmVyT2ZSZXNvdXJj
ZXNGcm9tVGhlVG9wIC0gMSwgbnVtYmVyT2ZUaW1lc0RhdGFSZWNvcmRzUmVtb3ZlZEdldHRlcik7
Ci0gICAgdW5zaWduZWQgdG9wTnVtYmVyT2ZUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9V
c2VySW50ZXJhY3Rpb24gPSBtZWRpYW4oc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVz
ZXJJbnRlcmFjdGlvbiwgMCwgbnVtYmVyT2ZSZXNvdXJjZXNGcm9tVGhlVG9wIC0gMSwgbnVtYmVy
T2ZUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb25HZXR0ZXIpOwot
ICAgIHVuc2lnbmVkIHRvcE51bWJlck9mVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3Rv
cmFnZUFjY2Vzc0FQSSA9IG1lZGlhbihzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNl
ckludGVyYWN0aW9uLCAwLCBudW1iZXJPZlJlc291cmNlc0Zyb21UaGVUb3AgLSAxLCBudW1iZXJP
ZlRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUElHZXR0ZXIpOwot
Ci0gICAgU3RyaW5nQnVpbGRlciBwcmVhbWJsZUJ1aWxkZXI7Ci0gICAgcHJlYW1ibGVCdWlsZGVy
LmFwcGVuZExpdGVyYWwoInRvcCIpOwotICAgIHByZWFtYmxlQnVpbGRlci5hcHBlbmROdW1iZXIo
bnVtYmVyT2ZSZXNvdXJjZXNGcm9tVGhlVG9wKTsKLSAgICBTdHJpbmcgZGVzY3JpcHRpb25QcmVh
bWJsZSA9IHByZWFtYmxlQnVpbGRlci50b1N0cmluZygpOwotICAgIAotICAgIHdlYlBhZ2VQcm94
eS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJl
c291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgZGVzY3JpcHRpb25QcmVhbWJsZSAr
ICJQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uIiwKLSAgICAgICAgdG9wUHJl
dmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgc2lnbmlmaWNhbnRGaWd1cmVzRm9y
TG9nZ2VkVmFsdWVzLCBTaG91bGRTYW1wbGU6Ok5vKTsKLSAgICB3ZWJQYWdlUHJveHkubG9nRGlh
Z25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksIGRlc2NyaXB0aW9uUHJlYW1ibGUgKyAiU3ViZnJh
bWVVbmRlclRvcEZyYW1lT3JpZ2lucyIsCi0gICAgICAgIHRvcFN1YmZyYW1lVW5kZXJUb3BGcmFt
ZU9yaWdpbnMsIHNpZ25pZmljYW50RmlndXJlc0ZvckxvZ2dlZFZhbHVlcywgU2hvdWxkU2FtcGxl
OjpObyk7Ci0gICAgd2ViUGFnZVByb3h5LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERp
YWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgp
LCBkZXNjcmlwdGlvblByZWFtYmxlICsgIlN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMi
LAotICAgICAgICB0b3BTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLCBzaWduaWZpY2Fu
dEZpZ3VyZXNGb3JMb2dnZWRWYWx1ZXMsIFNob3VsZFNhbXBsZTo6Tm8pOwotICAgIHdlYlBhZ2VQ
cm94eS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6
OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgZGVzY3JpcHRpb25QcmVhbWJs
ZSArICJTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIiwKLSAgICAgICAgdG9wU3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUbywgc2lnbmlmaWNhbnRGaWd1cmVzRm9yTG9nZ2VkVmFsdWVzLCBT
aG91bGRTYW1wbGU6Ok5vKTsKLSAgICB3ZWJQYWdlUHJveHkubG9nRGlhZ25vc3RpY01lc3NhZ2VX
aXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVs
ZW1ldHJ5S2V5KCksIGRlc2NyaXB0aW9uUHJlYW1ibGUgKyAiTnVtYmVyT2ZUaW1lc0RhdGFSZWNv
cmRzUmVtb3ZlZCIsCi0gICAgICAgIHRvcE51bWJlck9mVGltZXNEYXRhUmVjb3Jkc1JlbW92ZWQs
IHNpZ25pZmljYW50RmlndXJlc0ZvckxvZ2dlZFZhbHVlcywgU2hvdWxkU2FtcGxlOjpObyk7Ci0g
ICAgd2ViUGFnZVByb3h5LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKERpYWdub3N0aWNM
b2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeUtleSgpLCBkZXNjcmlw
dGlvblByZWFtYmxlICsgIk51bWJlck9mVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNl
ckludGVyYWN0aW9uIiwKLSAgICAgICAgdG9wTnVtYmVyT2ZUaW1lc0FjY2Vzc2VkQXNGaXJzdFBh
cnR5RHVlVG9Vc2VySW50ZXJhY3Rpb24sIHNpZ25pZmljYW50RmlndXJlc0ZvckxvZ2dlZFZhbHVl
cywgU2hvdWxkU2FtcGxlOjpObyk7Ci0gICAgd2ViUGFnZVByb3h5LmxvZ0RpYWdub3N0aWNNZXNz
YWdlV2l0aFZhbHVlKERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RlbGVtZXRyeUtleSgpLCBkZXNjcmlwdGlvblByZWFtYmxlICsgIk51bWJlck9mVGltZXNBY2Nl
c3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSIsCi0gICAgICAgIHRvcE51bWJl
ck9mVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSwgc2lnbmlm
aWNhbnRGaWd1cmVzRm9yTG9nZ2VkVmFsdWVzLCBTaG91bGRTYW1wbGU6Ok5vKTsKLX0KLSAgICAK
LXN0YXRpYyB2b2lkIHN1Ym1pdFRvcExpc3RzKGNvbnN0IFZlY3RvcjxQcmV2YWxlbnRSZXNvdXJj
ZVRlbGVtZXRyeT4mIHNvcnRlZFByZXZhbGVudFJlc291cmNlcywgY29uc3QgVmVjdG9yPFByZXZh
bGVudFJlc291cmNlVGVsZW1ldHJ5PiYgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVz
ZXJJbnRlcmFjdGlvbiwgV2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJveHkpCi17Ci0gICAgc3VibWl0
VG9wTGlzdCgxLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIHNvcnRlZFByZXZhbGVudFJlc291
cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIHdlYlBhZ2VQcm94eSk7Ci0gICAgCi0gICAgaWYg
KHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24uc2l6ZSgpIDwg
MykKLSAgICAgICAgcmV0dXJuOwotICAgIHN1Ym1pdFRvcExpc3QoMywgc29ydGVkUHJldmFsZW50
UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9u
LCB3ZWJQYWdlUHJveHkpOwotICAgIAotICAgIGlmIChzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNX
aXRob3V0VXNlckludGVyYWN0aW9uLnNpemUoKSA8IDEwKQotICAgICAgICByZXR1cm47Ci0gICAg
c3VibWl0VG9wTGlzdCgxMCwgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxl
bnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB3ZWJQYWdlUHJveHkpOwotICAgIAot
ICAgIGlmIChzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLnNp
emUoKSA8IDUwKQotICAgICAgICByZXR1cm47Ci0gICAgc3VibWl0VG9wTGlzdCg1MCwgc29ydGVk
UHJldmFsZW50UmVzb3VyY2VzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlcklu
dGVyYWN0aW9uLCB3ZWJQYWdlUHJveHkpOwotICAgIAotICAgIGlmIChzb3J0ZWRQcmV2YWxlbnRS
ZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLnNpemUoKSA8IDEwMCkKLSAgICAgICAgcmV0
dXJuOwotICAgIHN1Ym1pdFRvcExpc3QoMTAwLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMsIHNv
cnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIHdlYlBhZ2VQcm94
eSk7Ci19Ci0gICAgCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgot
dm9pZCBzdGF0aWMgbm90aWZ5UGFnZXModW5zaWduZWQgdG90YWxQcmV2YWxlbnRSZXNvdXJjZXMs
IHVuc2lnbmVkIHRvdGFsUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbiwgdW5z
aWduZWQgdG9wM1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMpCi17Ci0gICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFt0b3RhbFByZXZhbGVudFJlc291cmNlcywgdG90YWxQcmV2YWxlbnRS
ZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uLCB0b3AzU3ViZnJhbWVVbmRlclRvcEZyYW1lT3Jp
Z2luc10gewotICAgICAgICBBUEk6OkRpY3Rpb25hcnk6Ok1hcFR5cGUgbWVzc2FnZUJvZHk7Ci0g
ICAgICAgIG1lc3NhZ2VCb2R5LnNldCgiVG90YWxQcmV2YWxlbnRSZXNvdXJjZXMiX3MsIEFQSTo6
VUludDY0OjpjcmVhdGUodG90YWxQcmV2YWxlbnRSZXNvdXJjZXMpKTsKLSAgICAgICAgbWVzc2Fn
ZUJvZHkuc2V0KCJUb3RhbFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24iX3Ms
IEFQSTo6VUludDY0OjpjcmVhdGUodG90YWxQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVy
YWN0aW9uKSk7Ci0gICAgICAgIG1lc3NhZ2VCb2R5LnNldCgiVG9wM1N1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbnMiX3MsIEFQSTo6VUludDY0OjpjcmVhdGUodG9wM1N1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbnMpKTsKLSAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojpub3RpZnlQYWdlU3RhdGlz
dGljc1RlbGVtZXRyeUZpbmlzaGVkKEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKG1lc3NhZ2VCb2R5
KS5wdHIoKSk7Ci0gICAgfSk7Ci19Ci0gICAgCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIGZvciB0ZXN0
aW5nIHB1cnBvc2VzLgotdm9pZCBzdGF0aWMgbm90aWZ5UGFnZXMoY29uc3QgVmVjdG9yPFByZXZh
bGVudFJlc291cmNlVGVsZW1ldHJ5PiYgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCBjb25zdCBW
ZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxlbWV0cnk+JiBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJj
ZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCB1bnNpZ25lZCB0b3RhbE51bWJlck9mUHJldmFsZW50
UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbikKLXsKLSAgICBXVEY6OkZ1bmN0aW9uPHVuc2ln
bmVkKGNvbnN0IFByZXZhbGVudFJlc291cmNlVGVsZW1ldHJ5JiB0ZWxlbWV0cnkpPiBzdWJmcmFt
ZVVuZGVyVG9wRnJhbWVPcmlnaW5zR2V0dGVyID0gW10gKGNvbnN0IFByZXZhbGVudFJlc291cmNl
VGVsZW1ldHJ5JiB0KSB7Ci0gICAgICAgIHJldHVybiB0LnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9y
aWdpbnM7Ci0gICAgfTsKLSAgICAKLSAgICBub3RpZnlQYWdlcyhzb3J0ZWRQcmV2YWxlbnRSZXNv
dXJjZXMuc2l6ZSgpLCB0b3RhbE51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRl
cmFjdGlvbiwgbWVkaWFuKHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJh
Y3Rpb24sIDAsIDIsIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNHZXR0ZXIpKTsKLX0KLSAg
ICAKLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6Y2FsY3VsYXRlQW5k
U3VibWl0KGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSYgcmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
ICAgIAotICAgIGF1dG8gc29ydGVkUHJldmFsZW50UmVzb3VyY2VzID0gc29ydGVkUHJldmFsZW50
UmVzb3VyY2VUZWxlbWV0cnkocmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKTsKLSAgICBpZiAo
bm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQgJiYgc29ydGVkUHJldmFsZW50UmVz
b3VyY2VzLmlzRW1wdHkoKSkgewotICAgICAgICBub3RpZnlQYWdlcygwLCAwLCAwKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBWZWN0b3I8UHJldmFsZW50UmVzb3VyY2VUZWxl
bWV0cnk+IHNvcnRlZFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb247Ci0g
ICAgc29ydGVkUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbi5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KHNvcnRlZFByZXZhbGVudFJlc291cmNlcy5zaXplKCkpOwotICAgIFZl
Y3Rvcjx1bnNpZ25lZD4gcHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVyYWN0aW9u
OwotICAgIAotICAgIGZvciAoYXV0byYgcHJldmFsZW50UmVzb3VyY2UgOiBzb3J0ZWRQcmV2YWxl
bnRSZXNvdXJjZXMpIHsKLSAgICAgICAgaWYgKHByZXZhbGVudFJlc291cmNlLmhhc0hhZFVzZXJJ
bnRlcmFjdGlvbikKLSAgICAgICAgICAgIHByZXZhbGVudFJlc291cmNlc0RheXNTaW5jZVVzZXJJ
bnRlcmFjdGlvbi5hcHBlbmQocHJldmFsZW50UmVzb3VyY2UuZGF5c1NpbmNlVXNlckludGVyYWN0
aW9uKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc29ydGVkUHJldmFsZW50UmVzb3VyY2Vz
V2l0aG91dFVzZXJJbnRlcmFjdGlvbi51bmNoZWNrZWRBcHBlbmQocHJldmFsZW50UmVzb3VyY2Up
OwotICAgIH0KLSAgICAKLSAgICAvLyBEaXNwYXRjaCBvbiB0aGUgbWFpbiB0aHJlYWQgdG8gbWFr
ZSBzdXJlIHRoZSBXZWJQYWdlUHJveHkgd2UncmUgdXNpbmcgZG9lc24ndCBnbyBhd2F5LgotICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc29ydGVkUHJldmFsZW50UmVzb3VyY2VzID0gV1RG
TW92ZShzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXMpLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNX
aXRob3V0VXNlckludGVyYWN0aW9uID0gV1RGTW92ZShzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNX
aXRob3V0VXNlckludGVyYWN0aW9uKSwgcHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlcklu
dGVyYWN0aW9uID0gV1RGTW92ZShwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJh
Y3Rpb24pXSAoKSB7Ci0gICAgICAgIGF1dG8gd2ViUGFnZVByb3h5ID0gbm9uRXBoZW1lcmFsV2Vi
UGFnZVByb3h5KCk7Ci0gICAgICAgIGlmICghd2ViUGFnZVByb3h5KSB7Ci0gICAgICAgICAgICBp
ZiAobm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQpCi0gICAgICAgICAgICAgICAg
bm90aWZ5UGFnZXMoMCwgMCwgMCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGlmIChub3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZCkg
ewotICAgICAgICAgICAgbm90aWZ5UGFnZXMoc29ydGVkUHJldmFsZW50UmVzb3VyY2VzLCBzb3J0
ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCBwcmV2YWxlbnRSZXNv
dXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rpb24uc2l6ZSgpKTsKLSAgICAgICAgICAgIC8vIFRo
ZSBub3RpZnkgcGFnZXMgZnVuY3Rpb24gaXMgZm9yIHRlc3Rpbmcgc28gd2UgZG9uJ3QgbmVlZCB0
byBkbyBhbiBhY3R1YWwgc3VibWlzc2lvbi4KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgd2ViUGFnZVByb3h5LT5sb2dEaWFnbm9zdGljTWVzc2FnZVdp
dGhWYWx1ZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxl
bWV0cnlLZXkoKSwgInRvdGFsTnVtYmVyT2ZQcmV2YWxlbnRSZXNvdXJjZXMiX3MsIHNvcnRlZFBy
ZXZhbGVudFJlc291cmNlcy5zaXplKCksIHNpZ25pZmljYW50RmlndXJlc0ZvckxvZ2dlZFZhbHVl
cywgU2hvdWxkU2FtcGxlOjpObyk7Ci0gICAgICAgIHdlYlBhZ2VQcm94eS0+bG9nRGlhZ25vc3Rp
Y01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXNvdXJjZUxvYWRTdGF0
aXN0aWNzVGVsZW1ldHJ5S2V5KCksICJ0b3RhbE51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0
aFVzZXJJbnRlcmFjdGlvbiJfcywgcHJldmFsZW50UmVzb3VyY2VzRGF5c1NpbmNlVXNlckludGVy
YWN0aW9uLnNpemUoKSwgc2lnbmlmaWNhbnRGaWd1cmVzRm9yTG9nZ2VkVmFsdWVzLCBTaG91bGRT
YW1wbGU6Ok5vKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChwcmV2YWxlbnRSZXNvdXJjZXNEYXlz
U2luY2VVc2VySW50ZXJhY3Rpb24uc2l6ZSgpID4gMCkKLSAgICAgICAgICAgIHdlYlBhZ2VQcm94
eS0+bG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5S2V5KCksICJ0b3BQcmV2YWxlbnRSZXNvdXJj
ZVdpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJhY3Rpb24iX3MsIHByZXZhbGVu
dFJlc291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvblswXSwgc2lnbmlmaWNhbnRGaWd1cmVz
Rm9yTG9nZ2VkVmFsdWVzLCBTaG91bGRTYW1wbGU6Ok5vKTsKLSAgICAgICAgaWYgKHByZXZhbGVu
dFJlc291cmNlc0RheXNTaW5jZVVzZXJJbnRlcmFjdGlvbi5zaXplKCkgPiAxKQotICAgICAgICAg
ICAgd2ViUGFnZVByb3h5LT5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZShEaWFnbm9zdGlj
TG9nZ2luZ0tleXM6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnlLZXkoKSwgIm1lZGlh
blByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb25EYXlzU2luY2VVc2VySW50ZXJh
Y3Rpb24iX3MsIG1lZGlhbihwcmV2YWxlbnRSZXNvdXJjZXNEYXlzU2luY2VVc2VySW50ZXJhY3Rp
b24pLCBzaWduaWZpY2FudEZpZ3VyZXNGb3JMb2dnZWRWYWx1ZXMsIFNob3VsZFNhbXBsZTo6Tm8p
OwotICAgICAgICAKLSAgICAgICAgc3VibWl0VG9wTGlzdHMoc29ydGVkUHJldmFsZW50UmVzb3Vy
Y2VzLCBzb3J0ZWRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLCAqd2Vi
UGFnZVByb3h5KTsKLSAgICB9KTsKLX0KLSAgICAKLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1RlbGVtZXRyeTo6c2V0Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9v
bCBhbHdheXMpCi17Ci0gICAgbm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQgPSBh
bHdheXM7Ci19Ci0gICAgCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGY5NmU2MWExYWYwYWI3MzUzYjAzMWRiNzUzZjlkZGI2ZjUyYzYyOWIu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1j
bGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU7Ci0KLW5hbWVzcGFjZSBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5IHsKLSAgICAKLXZvaWQgY2FsY3VsYXRlQW5k
U3VibWl0KGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSYpOwotdm9pZCBz
ZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sKTsKLSAgICAKLX0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9EaXNwbGF5TGluay5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvRGlzcGxheUxpbmsuY3BwCmluZGV4IGYzMTNh
NDhmZDdkNzhjYWNlODMzMDFhNGJjNGZjNWEwN2RkOThiZTYuLmJmYjAzMjQyNmQ5OGNmZjM4OGI1
MTA0OTM0ODQzODExYjExMGVmODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9EaXNwbGF5TGluay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL0Rp
c3BsYXlMaW5rLmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShXRUJQUk9DRVNTX1dJ
TkRPV1NFUlZFUl9CTE9DS0lORykKIAogI2luY2x1ZGUgIkRyYXdpbmdBcmVhTWVzc2FnZXMuaCIK
KyNpbmNsdWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJv
eHkuaCIKICNpbmNsdWRlIDx3dGYvUHJvY2Vzc1ByaXZpbGVnZS5oPgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VuaWZpZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2Vi
S2l0L1VuaWZpZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggZGJhNmIzN2Y0MmZlNjY0
Y2JlYjU1Y2QyYTRkOWNhNmFjMzRjMTdjYS4uZTZjN2EwYzdhMjY2MGUxOGE4MmUzYzE1MjVjODky
ZDcwNjg4NmY1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VbmlmaWVkU291cmNlcy1pbnB1
dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9XZWJLaXQvVW5pZmllZFNvdXJjZXMtaW5wdXQueGNm
aWxlbGlzdApAQCAtMSw0ICsxLDggQEAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291
cmNlcy9XZWJLaXQyL0VkaXRhYmxlSW1hZ2VDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcAor
JChTUkNST09UKS9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZS5jcHAKKyQoU1JDUk9PVCkvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuY3BwCiskKFNSQ1JPT1QpL05l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNw
cAorJChTUkNST09UKS9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NUZWxlbWV0cnkuY3BwCiAkKFNSQ1JPT1QpL05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMv
V2ViQ29va2llTWFuYWdlci5jcHAKICQoU1JDUk9PVCkvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9t
YWMvV2ViQ29va2llTWFuYWdlck1hYy5tbQogJChTUkNST09UKS9OZXR3b3JrUHJvY2Vzcy9DdXN0
b21Qcm90b2NvbHMvQ29jb2EvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2EubW0KQEAg
LTU1MCw4ICs1NTQsNiBAQCAkKFNSQ1JPT1QpL1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9z
L1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0KICQoU1JDUk9PVCkvVUlQcm9j
ZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9k
ZUlPUy5tbQogJChTUkNST09UKS9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tCiAkKFNSQ1JPT1QpL1VJUHJvY2Vzcy9S
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5jcHAKLSQoU1JDUk9PVCkvVUlQcm9jZXNzL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAKLSQoU1JDUk9PVCkvVUlQcm9jZXNzL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5jcHAKICQoU1JDUk9PVCkvVUlQcm9j
ZXNzL1Jlc3BvbnNpdmVuZXNzVGltZXIuY3BwCiAkKFNSQ1JPT1QpL1VJUHJvY2Vzcy9TZXJ2aWNl
V29ya2VyUHJvY2Vzc1Byb3h5LmNwcAogJChTUkNST09UKS9VSVByb2Nlc3MvU3RhdGlzdGljc1Jl
cXVlc3QuY3BwCkBAIC02MjAsOCArNjIyLDYgQEAgJChTUkNST09UKS9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc0xpZmV0aW1lT2JzZXJ2ZXIuY3BwCiAkKFNSQ1JPT1QpL1VJUHJvY2Vzcy9XZWJQcm9jZXNz
TGlmZXRpbWVUcmFja2VyLmNwcAogJChTUkNST09UKS9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wu
Y3BwCiAkKFNSQ1JPT1QpL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCi0kKFNSQ1JPT1Qp
L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCi0kKFNSQ1JPT1Qp
L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAogJChTUkNS
T09UKS9VSVByb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAKICQoU1JD
Uk9PVCkvVUlQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmNw
cAogJChTUkNST09UKS9VSVByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDAw
YTFjNWY2NDk5YTliZGEyNjA5YTIwMGJiMzAxNDdmN2NkNmZiMzQuLmU3ZTQ3NzJhMDM2ZmU5ZTJj
YTFmYTM2ZjcxMGUyMjQ3MzRhN2M2YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzUsNyArNzUsNiBAQAogCQkwMDVEMTU4RjE4RTRD
NEVCMDA3MzQ2MTkgLyogX1dLRmluZERlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMDVEMTU4RTE4RTRDNEVCMDA3MzQ2MTkgLyogX1dLRmlu
ZERlbGVnYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMDBCOTY2MTYxOEUyNENCQTAwQ0UxRjg4IC8qIEFQSUZpbmRDbGllbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQjk2NjE1MThFMjRDQkEw
MENFMUY4OCAvKiBBUElGaW5kQ2xpZW50LmggKi87IH07CiAJCTAwQjk2NjFBMThFMjVBRTEwMENF
MUY4OCAvKiBGaW5kQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwMEI5NjYxODE4RTI1QUUxMDBDRTFGODggLyogRmluZENsaWVudC5oICovOyB9
OwotCQkwNzI5N0Y5RjFDMTdBQTFBMDE1RjA3MzUgLyogUGVyc2lzdGVuY3lVdGlscy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDczMjFGOUQxQzE3QkJF
QTIyM0YwNzM1IC8qIFBlcnNpc3RlbmN5VXRpbHMuaCAqLzsgfTsKIAkJMDcyOTdGOUYxQzE3QkJF
QTAwM0YwNzM1IC8qIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzI5N0Y5RDFDMTdCQkVBMDAzRjA3
MzUgLyogVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkuaCAqLzsgfTsKIAkJMDcyOTdGOUYx
QzE3QkJFQTAxNUYwNzM1IC8qIERldmljZUlkSGFzaFNhbHRTdG9yYWdlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzI5N0Y5RDFDMTdCQkVBMjIzRjA3
MzUgLyogRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuaCAqLzsgfTsKIAkJMDcyOTdGQTMxQzE4NkFE
QjAwM0YwNzM1IC8qIFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzI5N0ZBMTFDMTg2QURCMDAzRjA3MzUg
LyogV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTg3LDcgKzk4Niw2IEBACiAJCTUxREQ5RjI4MTYz
NjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNl
aXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUREOUYyNjE2MzY3REEyMDAxNTc4RTkgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NN
ZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQk1MUREOUYyOTE2MzY3REEyMDAxNTc4RTkgLyog
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFERDlGMjcxNjM2N0RBMjAwMTU3OEU5IC8q
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCAqLzsgfTsKIAkJNTFFMzUx
Q0IxODBGMkNDQzAwRTUzQkU5IC8qIElEQlV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFMzUxQzkxODBGMkNDQzAwRTUzQkU5IC8qIElE
QlV0aWxpdGllcy5oICovOyB9OwotCQk1MUU2QzE2NDFGMjkzNUREMDBGRDM0MzcgLyogUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUU2QzE2MTFGMjkzNUNEMDBGRDM0MzcgLyogUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmggKi87IH07CiAJCTUxRUZDMUNG
MTUyNEU2MjUwMEM5QTkzOCAvKiBXS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGQTJENTQxNTIxMTE4NjAw
QzFCQTBCIC8qIFdLQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFGMDYwRTAxNjU0MzE3RjAwRjMyODFC
IC8qIFdlYlJlc291cmNlTG9hZGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjA2MERFMTY1NDMxNzUwMEYzMjgxQiAvKiBXZWJSZXNv
dXJjZUxvYWRlck1lc3NhZ2VzLmggKi87IH07CiAJCTUxRjA2MEUxMTY1NDMxODUwMEYzMjgxQiAv
KiBXZWJSZXNvdXJjZUxvYWRlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwNjBERDE2NTQzMTc1MDBGMzI4MUIgLyog
V2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwpAQCAtMTA4Niw3ICsx
MDg0LDYgQEAKIAkJNjNDMzJDMjgxRTk4MTE5MDAwNjk5QkQwIC8qIF9XS0dlb2xvY2F0aW9uUG9z
aXRpb25JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjNDMzJDMjcxRTk4MTE5MDAwNjk5QkQwIC8qIF9XS0dlb2xvY2F0aW9uUG9zaXRpb25J
bnRlcm5hbC5oICovOyB9OwogCQk2NUI4NkYxRTEyRjExREUzMDBCN0REOEEgLyogV0tCdW5kbGVJ
bnNwZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDY1Qjg2RjE4MTJGMTFEN0IwMEI3REQ4QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZBNTA4MEJGMUYwRURB
QUEwMEU2MTdDNSAvKiBXS1dpbmRvd0ZlYXR1cmVzUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkE1MDgwQkUxRjBFREFBQTAwRTYxN0M1IC8q
IFdLV2luZG93RmVhdHVyZXNQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJNkI4MjFEREMxRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZCODIxRERBMUVFRjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmggKi87IH07CiAJCTZCRTk2OUMxMUU1NEQ0NTIwMDhC
NzQ4MyAvKiBjb3JlUHJlZGljdGlvbl9tb2RlbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNkJFOTY5QzAxRTU0RDQ1MjAwOEI3NDgzIC8qIGNvcmVQcmVk
aWN0aW9uX21vZGVsICovOyB9OwogCQk2QkU5NjlDQjFFNTRENENGMDA4Qjc0ODMgLyogUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkJFOTY5QzkxRTU0RDRDRjAwOEI3NDgzIC8qIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EuaCAqLzsgfTsKIAkJNkJFOTY5Q0QxRTU0
RTA1NDAwOEI3NDgzIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QkU5NjlDQzFFNTRFMDU0
MDA4Qjc0ODMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaCAqLzsgfTsKQEAg
LTExMDksNiArMTEwNiwxMCBAQAogCQk3QUI2RUE0NTFFRUFBRTM4MDAwMzdCMkIgLyogQVBJSWNv
bkRhdGFiYXNlQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QUI2RUE0NDFFRUFBRTIzMDAwMzdCMkIgLyogQVBJSWNvbkRhdGFiYXNlQ2xpZW50
LmggKi87IH07CiAJCTdBQjZFQTQ3MUVFQUI2QjgwMDAzN0IyQiAvKiBBUElHZW9sb2NhdGlvblBy
b3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
QUI2RUE0NjFFRUFCNkIwMDAwMzdCMkIgLyogQVBJR2VvbG9jYXRpb25Qcm92aWRlci5oICovOyB9
OwogCQk3QUYyMzYyMTFFNzlBNDA4MDA0MzhBMDUgLyogV2ViRXJyb3JzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUYyMzYxRjFFNzlBM0Q4MDA0MzhB
MDUgLyogV2ViRXJyb3JzLmggKi87IH07CisJCTdBRkJEMzYzMjFFNTBGMzkwMDVEQkFDQiAvKiBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRkJEMzYyMjFFNTBGMzkwMDVEQkFDQiAvKiBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCAqLzsgfTsKKwkJN0FGQkQzNjcyMUU1MUJBQjAwNURC
QUNCIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGQkQzNjUyMUU1MUJBQjAwNURCQUNC
IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oICovOyB9OworCQk3QUZCRDM2
QTIxRTU0MkYxMDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9y
YWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUZC
RDM2ODIxRTU0MkU4MDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRT
dG9yYWdlLmggKi87IH07CisJCTdBRkJEMzZGMjFFNTQ2RjgwMDVEQkFDQiAvKiBQZXJzaXN0ZW5j
eVV0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
QUZCRDM2RDIxRTU0NkUzMDA1REJBQ0IgLyogUGVyc2lzdGVuY3lVdGlscy5oICovOyB9OwogCQk3
QzA2NUYyQzFDOENEOTVGMDBDMkQ5NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5
cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzA2
NUYyQTFDOENEOTVGMDBDMkQ5NTAgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVz
LmggKi87IH07CiAJCTdDMTM1QUE5MTczQjBCQ0EwMDU4NkFFMiAvKiBXS1BsdWdpbkluZm9ybWF0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzEz
NUFBNzE3M0IwQkNBMDA1ODZBRTIgLyogV0tQbHVnaW5JbmZvcm1hdGlvbi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMUJBMzNFMUE0QTBFNjAw
MDQzRTI0OSAvKiBBUElEaWN0aW9uYXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QzFCQTMzQzFBNEEwRTYwMDA0M0UyNDkgLyogQVBJRGljdGlvbmFy
eS5oICovOyB9OwpAQCAtMTE5NCw3ICsxMTk1LDYgQEAKIAkJODM5OTAyMDMxQkU5QTAyQjAwMEYz
NjUzIC8qIE5ldHdvcmtMb2FkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4Mzk5MDFGRTFCRTlBMDFCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQuaCAqLzsg
fTsKIAkJODM5QTJGMzIxRTIwNjc0NTAwMzkwNTdFIC8qIEhpZ2hQZXJmb3JtYW5jZUdyYXBoaWNz
VXNhZ2VTYW1wbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4MzlBMkYzMDFFMjA2NzM5MDAzOTA1N0UgLyogSGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NV
c2FnZVNhbXBsZXIuaCAqLzsgfTsKIAkJODNBMEVEMzUxRjc0N0NDRjAwMzI5OUVCIC8qIFByZWNv
bm5lY3RUYXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4M0EwRUQzMjFGNzQ3Q0M2MDAzMjk5RUIgLyogUHJlY29ubmVjdFRhc2suaCAqLzsgfTsKLQkJ
ODNCM0NCMTAyMEUyQUIwMTAwNDQxRTlCIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM2
ODFEQ0EyMEUyOTA0QTAwQzI0OUNEIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZS5oICovOyB9OwogCQk4M0Q0NTRENzFCRTlEM0M0MDA2QzkzQkQgLyogTmV0d29ya0xvYWRDbGll
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzRDQ1
NEQ2MUJFOUQzQzQwMDZDOTNCRCAvKiBOZXR3b3JrTG9hZENsaWVudC5oICovOyB9OwogCQk4M0VF
NTc1QzFEQjdENjExMDBDNzRDNTAgLyogV2ViVmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzRUU1NzVBMURCN0Q2
MDYwMEM3NEM1MCAvKiBXZWJWYWxpZGF0aW9uTWVzc2FnZUNsaWVudC5oICovOyB9OwogCQk4M0Yx
QTA3QTFGOTZFNzc5MDA0NUI5NEUgLyogV2ViU1dPcmlnaW5UYWJsZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODNGMUEwNzgxRjk2RTc3MTAwNDVCOTRF
IC8qIFdlYlNXT3JpZ2luVGFibGUuaCAqLzsgfTsKQEAgLTE4NTQsMTQgKzE4NTQsMTIgQEAKIAkJ
MDBCOTY2MTUxOEUyNENCQTAwQ0UxRjg4IC8qIEFQSUZpbmRDbGllbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJRmluZENsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwMEI5NjYxNzE4RTI1QUUxMDBDRTFGODggLyogRmluZENsaWVudC5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZpbmRDbGllbnQubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTAwQjk2NjE4MThFMjVBRTEwMENFMUY4OCAvKiBGaW5k
Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbmRDbGllbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDcyOTQ1NUMxQzE3MTFFQTAwM0YwNzM1IC8q
IFBlcnNpc3RlbmN5VXRpbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUGVyc2lzdGVuY3lVdGlscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3
Mjk3RjlDMUMxNzExRUEwMDNGMDczNSAvKiBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXZpY2VJZEhhc2hTYWx0U3RvcmFn
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3Mjk3RjlDMUMxN0JCRUEwMDNG
MDczNSAvKiBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3Mjk3RjlEMUMxN0JCRUEwMDNGMDczNSAv
KiBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwNzI5N0Y5RDFDMTdCQkVBMjIzRjA3MzUgLyogRGV2aWNlSWRIYXNo
U2FsdFN0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGV2aWNlSWRI
YXNoU2FsdFN0b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyOTdGQTAx
QzE4NkFEQjAwM0YwNzM1IC8qIFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNr
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyOTdGQTExQzE4NkFEQjAwM0Yw
NzM1IC8qIFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTA3MzIxRjlEMUMxN0JCRUEyMjNGMDczNSAvKiBQZXJzaXN0ZW5jeVV0
aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBlcnNpc3RlbmN5VXRpbHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc0RTc1RkIxREYxRkQxMzAwRDMxOEVD
IC8qIFVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA3NEU3NUZDMURGMjAwMjQwMEQzMThFQyAvKiBVc2VyTWVkaWFQcm9jZXNzTWFuYWdl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VyTWVkaWFQcm9j
ZXNzTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3NEU3NjAwMURG
NzA3NUQwMEQzMThFQyAvKiBNZWRpYURldmljZVNhbmRib3hFeHRlbnNpb25zLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRGV2aWNlU2FuZGJveEV4dGVuc2lv
bnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzMxMiw4ICszMzEwLDYgQEAK
IAkJNTFFMzUxQzkxODBGMkNDQzAwRTUzQkU5IC8qIElEQlV0aWxpdGllcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJREJVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTFFMzk5MDUxRDZGNTRDNTAwOUM4ODMxIC8qIFVJR2FtZXBhZFByb3ZpZGVy
Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBVSUdhbWVw
YWRQcm92aWRlckNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUU2QzE1
RjFGMjkzNTUxMDBGRDM0MzcgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9y
YWdlSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bl
cnNpc3RlbnRTdG9yYWdlSU9TLm1tOyBwYXRoID0gaW9zL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQ
ZXJzaXN0ZW50U3RvcmFnZUlPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFF
NkMxNjExRjI5MzVDRDAwRkQzNDM3IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50
U3RvcmFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVu
dFN0b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFFNkMxNjIxRjI5MzVD
RDAwRkQzNDM3IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3Jh
Z2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUU4QjY4RDFFNzEyODczMDAx
QjcxMzIgLyogV2ViVVJMU2NoZW1lVGFzay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXZWJVUkxTY2hlbWVUYXNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTFFOTQ5OTYxRDc2MUNDNzAwRUM5RUI5IC8qIFVJR2FtZXBhZFByb3ZpZGVySU9TLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVUlHYW1lcGFkUHJvdmlk
ZXJJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRjA2MEREMTY1NDMxNzUw
MEYzMjgxQiAvKiBXZWJSZXNvdXJjZUxvYWRlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBXZWJSZXNvdXJjZUxvYWRlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBE
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYlJlc291cmNlTG9hZGVyTWVzc2FnZVJlY2VpdmVyLmNw
cDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTM1MDgsOCArMzUwNCw2
IEBACiAJCTY1Qjg2RjE3MTJGMTFEN0IwMEI3REQ4QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS0J1bmRsZUluc3BlY3Rvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1Qjg2RjE4MTJGMTFEN0IwMEI3REQ4
QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXS0J1bmRsZUluc3BlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QTUw
ODBCRTFGMEVEQUFBMDBFNjE3QzUgLyogV0tXaW5kb3dGZWF0dXJlc1ByaXZhdGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0tXaW5kb3dGZWF0dXJlc1ByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNkI4MjFEREExRUVGMDVERDAwRDdBRjRBIC8qIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NUZWxlbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RlbGVtZXRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QjgyMUREQjFFRUYw
NUREMDBEN0FGNEEgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkJFOTY5QzAxRTU0RDQ1MjAwOEI3NDgzIC8q
IGNvcmVQcmVkaWN0aW9uX21vZGVsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGNvcmVQcmVkaWN0
aW9uX21vZGVsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QkU5NjlDNjFFNTRENEI2
MDA4Qjc0ODMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNz
aWZpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2QkU5NjlDODFFNTRENENG
MDA4Qjc0ODMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Q2xhc3NpZmllckNvY29hLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1MzUs
MTEgKzM1MjksMTAgQEAKIAkJN0E4MjFGNEIxRTJGNjY0ODAwNjA0NTc3IC8qIExlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0E4MjFGNEQxRTJGNjc5RTAwNjA0NTc3IC8qIExlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0E4MjFGNEYxRTJGN0E1QzAwNjA0NTc3IC8qIEFQSUN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElD
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJN0E4NDNBMUEyMUU0MUZCMjAwREVGNjYzIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwOyBwYXRoID0gQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QThBOUQ1NzFFRjExOUFBMDA5ODAx
QUUgLyogQVBJSW5qZWN0ZWRCdW5kbGVDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQVBJSW5qZWN0ZWRCdW5kbGVDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0E4QTlENTkxRUYxMzAyMDAwOTgwMUFFIC8qIEFQSUluamVjdGVkQnVuZGxlQnVu
ZGxlQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUluamVjdGVk
QnVuZGxlQnVuZGxlQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBOEE5
RDVCMUVGMTQ1OEUwMDk4MDFBRSAvKiBBUElJbmplY3RlZEJ1bmRsZVBhZ2VSZXNvdXJjZUxvYWRD
bGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJSW5qZWN0ZWRCdW5k
bGVQYWdlUmVzb3VyY2VMb2FkQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTdBOUNEOEMwMUM3Nzk4NDkwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0E5
Q0Q4QzExQzc3OTg0OTAwRDlGNkM3IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E5Q0Q4QzIxQzc3OUFE
NjAwRDlGNkM3IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5tZXNzYWdlcy5pbiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUubWVz
c2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBQjZFQTQ0MUVFQUFFMjMw
MDAzN0IyQiAvKiBBUElJY29uRGF0YWJhc2VDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQVBJSWNvbkRhdGFiYXNlQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdBQjZFQTQ2MUVFQUI2QjAwMDAzN0IyQiAvKiBBUElHZW9sb2NhdGlvblByb3Zp
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUdlb2xvY2F0aW9uUHJv
dmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1NDgsNiArMzU0MSwxNSBA
QAogCQk3QUYyMzYxRjFFNzlBM0Q4MDA0MzhBMDUgLyogV2ViRXJyb3JzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkVycm9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QUYyMzYyMjFFNzlBNDMxMDA0MzhBMDUgLyogV2ViRXJyb3JzQ29jb2EubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFcnJvcnNDb2NvYS5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FGNjZFMTEyMEMwN0NCNjAwNzgyOEVBIC8q
IFdlYkNvbnRlbnQtT1NYLmVudGl0bGVtZW50cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QuZW50aXRs
ZW1lbnRzOyBwYXRoID0gIldlYkNvbnRlbnQtT1NYLmVudGl0bGVtZW50cyI7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTdBRkJEMzYyMjFFNTBGMzkwMDVEQkFDQiAvKiBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg7IHBhdGggPSBDbGFzc2lmaWVyL1dlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3QUZCRDM2NDIxRTUxQkFCMDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHA7IHBhdGggPSBDbGFzc2lmaWVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTdBRkJEMzY1MjFFNTFCQUIwMDVEQkFDQiAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlLmg7IHBhdGggPSBDbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QUZC
RDM2ODIxRTU0MkU4MDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRT
dG9yYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50
U3RvcmFnZS5oOyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lz
dGVudFN0b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0FGQkQzNjkyMUU1
NDJFODAwNURCQUNCIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0
b3JhZ2UuY3BwOyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lz
dGVudFN0b3JhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QUZCRDM2QjIx
RTU0NTQ0MDA1REJBQ0IgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5Lmg7IHBhdGgg
PSBDbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0FGQkQzNkMyMUU1NDU0NDAwNURCQUNCIC8qIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHA7IHBhdGggPSBDbGFzc2lmaWVyL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3QUZCRDM2RDIxRTU0NkUzMDA1REJBQ0IgLyogUGVyc2lzdGVuY3lVdGlscy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQZXJzaXN0ZW5jeVV0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTdBRkJEMzZFMjFFNTQ2RTMwMDVEQkFDQiAvKiBQZXJzaXN0ZW5jeVV0aWxzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBlcnNpc3RlbmN5VXRpbHMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QzA2NUYyOTFDOENEOTVGMDBDMkQ5NTAgLyogV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyRGF0YVR5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDMDY1RjJBMUM4Q0Q5NUYwMEMyRDk1MCAvKiBXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJEYXRhVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdDMEJCOUE4MThEQ0RFODkwMDA2QzA4NiAvKiBXZWJDb250ZW50LWlPUy5l
bnRpdGxlbWVudHMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0LnhtbDsgcGF0aCA9ICJXZWJDb250ZW50LWlPUy5lbnRpdGxlbWVudHMiOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzY4MCw4ICszNjgyLDYgQEAKIAkJODM0QjI1MTAx
QTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hlU3RhdGlzdGljcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4MzYwMzQ5RDFBQ0IzNEQ2MDA2MjY1NDkgLyogV2ViU1FMaXRl
RGF0YWJhc2VUcmFja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTgzNjAzNDlFMUFDQjM0RDYwMDYyNjU0OSAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU1FMaXRlRGF0YWJhc2VUcmFj
a2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTgzNjgxRENBMjBFMjkwNEEwMEMy
NDlDRCAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTgzNjgxRENCMjBFMjkwNEIwMEMyNDlDRCAv
KiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM3MkRCMjQxQTY3NEM4RjAwQzY5N0M1
IC8qIFdLUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdLUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTgzNzJEQjI2MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlh
Z25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODM3MkRCMjcxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQ
YWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTUwNTEsNiArNTA1MSw4IEBACiAJCQkJMUFEQ0I4NjgxODk4MzFCMzAwMjJFRTVBIC8qIE5h
dmlnYXRpb25BY3Rpb25EYXRhLmNwcCAqLywKIAkJCQkxQURDQjg2OTE4OTgzMUIzMDAyMkVFNUEg
LyogTmF2aWdhdGlvbkFjdGlvbkRhdGEuaCAqLywKIAkJCQk5QkM1OUQ2RDFFRkNEQzZEMDAxRThE
MDkgLyogT3B0aW9uYWxDYWxsYmFja0lELmggKi8sCisJCQkJN0FGQkQzNkUyMUU1NDZFMzAwNURC
QUNCIC8qIFBlcnNpc3RlbmN5VXRpbHMuY3BwICovLAorCQkJCTdBRkJEMzZEMjFFNTQ2RTMwMDVE
QkFDQiAvKiBQZXJzaXN0ZW5jeVV0aWxzLmggKi8sCiAJCQkJQkNDNDNBQjgxMjdCOTVEQzAwMzE3
RjE2IC8qIFBsYXRmb3JtUG9wdXBNZW51RGF0YS5jcHAgKi8sCiAJCQkJQkNDNDNBQjkxMjdCOTVE
QzAwMzE3RjE2IC8qIFBsYXRmb3JtUG9wdXBNZW51RGF0YS5oICovLAogCQkJCUUxOEM5MkYzMTJE
QjlFNzEwMENGMkFFQiAvKiBQcmludEluZm8uY3BwICovLApAQCAtNTUxNSw4ICs1NTE3LDggQEAK
IAkJMkQxNTUxQTkxRjVBOUI0MjAwMDZFM0ZFIC8qIFJlbW90ZUxheWVyVHJlZSAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJRTQwNDkwNkYyMURFNjVENzAw
MzdGMERCIC8qIG1hYyAqLywKIAkJCQkyRDE1NTFBQTFGNUE5QkE3MDAwNkUzRkUgLyogaW9zICov
LAorCQkJCUU0MDQ5MDZGMjFERTY1RDcwMDM3RjBEQiAvKiBtYWMgKi8sCiAJCQkJMUFCMTZBRTAx
NjQ4NjU2RDAwMjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaCAqLywK
IAkJCQkwRkYyNEEyRjE4NzlFNEZFMDAzQUJGMEMgLyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWFQcm94eS5tZXNzYWdlcy5pbiAqLywKIAkJCQkxQUIxNkFERjE2NDg2NTZEMDAyOTBENjIgLyog
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tbSAqLywKQEAgLTY0MTIsNiArNjQxNCw3
IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUU0ODlEMjgyMUEw
QTJCRTgwMDc4QzA2QSAvKiBjYWNoZSAqLywKKwkJCQk3QTg0M0ExRDIxRTQxRkQ5MDBERUY2NjMg
LyogQ2xhc3NpZmllciAqLywKIAkJCQk3RUM0RjBGODE4RTRBOTIyMDA4MDU2QUYgLyogY29jb2Eg
Ki8sCiAJCQkJMzMwOTM0NEIxMzE1QjkzQTAwOTdBN0JDIC8qIENvb2tpZXMgKi8sCiAJCQkJNUMx
NDI2RjIxQzIzRjgyRDAwRDQxMTgzIC8qIEN1c3RvbVByb3RvY29scyAqLywKQEAgLTY4OTMsNiAr
Njg5NiwyMSBAQAogCQkJbmFtZSA9IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJ
CX07CisJCTdBODQzQTFEMjFFNDFGRDkwMERFRjY2MyAvKiBDbGFzc2lmaWVyICovID0geworCQkJ
aXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3QUZCRDM2NDIxRTUxQkFCMDA1
REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcCAqLywKKwkJCQk3
QUZCRDM2NTIxRTUxQkFCMDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlLmggKi8sCisJCQkJN0FGQkQzNjkyMUU1NDJFODAwNURCQUNCIC8qIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5jcHAgKi8sCisJCQkJN0FGQkQzNjgyMUU1NDJFODAw
NURCQUNCIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5oICovLAor
CQkJCTdBODQzQTFBMjFFNDFGQjIwMERFRjY2MyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUuY3BwICovLAorCQkJCTdBRkJEMzYyMjFFNTBGMzkwMDVEQkFDQiAvKiBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCAqLywKKwkJCQk3QUZCRDM2QzIxRTU0NTQ0MDA1REJBQ0Ig
LyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAgKi8sCisJCQkJN0FGQkQz
NkIyMUU1NDU0NDAwNURCQUNCIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnku
aCAqLywKKwkJCSk7CisJCQluYW1lID0gQ2xhc3NpZmllcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CisJCX07CiAJCTdDNkU3MEY4MThCMkQ0N0UwMEYyNEUyRSAvKiBjb2NvYSAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC03MzI3LDggKzczNDUsNiBA
QAogCQkJCTFBQzc1MzdBMTgzQTlGREIwMDcyQ0IxNSAvKiBQYWdlTG9hZFN0YXRlLmggKi8sCiAJ
CQkJODMyRUQxODkxRTJGRTEzQjAwNkJBNjRBIC8qIFBlckFjdGl2aXR5U3RhdGVDUFVVc2FnZVNh
bXBsZXIuY3BwICovLAogCQkJCTgzMkVEMThBMUUyRkUxM0IwMDZCQTY0QSAvKiBQZXJBY3Rpdml0
eVN0YXRlQ1BVVXNhZ2VTYW1wbGVyLmggKi8sCi0JCQkJMDcyOTQ1NUMxQzE3MTFFQTAwM0YwNzM1
IC8qIFBlcnNpc3RlbmN5VXRpbHMuY3BwICovLAotCQkJCTA3MzIxRjlEMUMxN0JCRUEyMjNGMDcz
NSAvKiBQZXJzaXN0ZW5jeVV0aWxzLmggKi8sCiAJCQkJMzc3MTZBNTkxOTVCOTEwNTAwRUU4QjFC
IC8qIFByb2Nlc3NBc3NlcnRpb24uY3BwICovLAogCQkJCTg2Rjk1MzYwMThGRjRGRDQwMDFEQjJF
RiAvKiBQcm9jZXNzQXNzZXJ0aW9uLmggKi8sCiAJCQkJODZFNjdBMjIxOTBGNDExODAwMDA0QUI3
IC8qIFByb2Nlc3NUaHJvdHRsZXIuY3BwICovLApAQCAtNzMzNywxMCArNzM1Myw2IEBACiAJCQkJ
QTU1QkE4MUIxQkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5LmNwcCAq
LywKIAkJCQlBNTVCQTgxOTFCQTI1QjFFMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHkuaCAqLywKIAkJCQlBNTVCQTgxQTFCQTI1QjFFMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHkubWVzc2FnZXMuaW4gKi8sCi0JCQkJODM2ODFEQ0IyMEUyOTA0QjAwQzI0OUNEIC8q
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAgKi8sCi0JCQkJODM2ODFEQ0Ey
MEUyOTA0QTAwQzI0OUNEIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oICov
LAotCQkJCTUxRTZDMTYyMUYyOTM1Q0QwMEZEMzQzNyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGVyc2lzdGVudFN0b3JhZ2UuY3BwICovLAotCQkJCTUxRTZDMTYxMUYyOTM1Q0QwMEZEMzQzNyAv
KiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuaCAqLywKIAkJCQlCQzEx
MUIwODExMkY1RTNDMDAzMzdCQUIgLyogUmVzcG9uc2l2ZW5lc3NUaW1lci5jcHAgKi8sCiAJCQkJ
MUEzMDA2NkMxMTEwRjRGNzAwMzE5MzdDIC8qIFJlc3BvbnNpdmVuZXNzVGltZXIuaCAqLywKIAkJ
CQk1Q0E5ODU0OTIxMEJFQjVBMDA1N0VCNkIgLyogU2FmZUJyb3dzaW5nV2FybmluZy5oICovLApA
QCAtNzQ1NiwxMSArNzQ2OCw3IEBACiAJCQkJQkMxMTFCMEQxMTJGNUU0RjAwMzM3QkFCIC8qIFdl
YlByb2Nlc3NQcm94eS5jcHAgKi8sCiAJCQkJQkMwMzJEQ0YxMEY0Mzg5RjAwNThDMTVBIC8qIFdl
YlByb2Nlc3NQcm94eS5oICovLAogCQkJCUJDRUU3QUIzMTI4MTcwOTUwMDk4MjdEQSAvKiBXZWJQ
cm9jZXNzUHJveHkubWVzc2FnZXMuaW4gKi8sCi0JCQkJN0E5Q0Q4QzAxQzc3OTg0OTAwRDlGNkM3
IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgKi8sCi0JCQkJN0E5Q0Q4QzEx
Qzc3OTg0OTAwRDlGNkM3IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oICovLAog
CQkJCTdBOUNEOEMyMUM3NzlBRDYwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUubWVzc2FnZXMuaW4gKi8sCi0JCQkJNkI4MjFEREIxRUVGMDVERDAwRDdBRjRBIC8qIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwICovLAotCQkJCTZCODIxRERBMUVF
RjA1REQwMEQ3QUY0QSAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmggKi8s
CiAJCQkJNTFEMTI0MjQxRTZEM0NDMzAwMkIyODIwIC8qIFdlYlVSTFNjaGVtZUhhbmRsZXIuY3Bw
ICovLAogCQkJCTUxRDEyNDI1MUU2RDNDQzMwMDJCMjgyMCAvKiBXZWJVUkxTY2hlbWVIYW5kbGVy
LmggKi8sCiAJCQkJNTFFOEI2OEQxRTcxMjg3MzAwMUI3MTMyIC8qIFdlYlVSTFNjaGVtZVRhc2su
Y3BwICovLApAQCAtOTE5MCw3ICs5MTk4LDcgQEAKIAkJCQkyREMxOEZCMDIxODkxMjY0MDAyNUE4
OEQgLyogUGVuY2lsS2l0U1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzI5OERBMDFDM0RGMDIx
MDA0NzBBRkUgLyogUGVuZGluZ0Rvd25sb2FkLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzJFRDE4
QzFFMkZFMTU3MDA2QkE2NEEgLyogUGVyQWN0aXZpdHlTdGF0ZUNQVVVzYWdlU2FtcGxlci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMDcyOTdGOUYxQzE3QUExQTAxNUYwNzM1IC8qIFBlcnNpc3RlbmN5
VXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTdBRkJEMzZGMjFFNTQ2RjgwMDVEQkFDQiAvKiBQ
ZXJzaXN0ZW5jeVV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0U4NUIyMDFDODhFNjRCMDA3
MEJGQ0UgLyogUGluZ0xvYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUUyMDA0MThFNzcwNTEw
MDNFQzNFNSAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyREEwNDlCNDE4MENDQ0QzMDBBQUZBOUUgLyogUGxhdGZvcm1DQUxheWVyUmVtb3RlLmggaW4g
SGVhZGVycyAqLywKQEAgLTkyNjMsOCArOTI3MSw4IEBACiAJCQkJQTU1QkE4MTcxQkEyM0UxMjAw
N0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJLmggaW4gSGVhZGVycyAqLywKIAkJCQk2QkU5
NjlDRDFFNTRFMDU0MDA4Qjc0ODMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTZCRTk2OUNCMUU1NEQ0Q0YwMDhCNzQ4MyAvKiBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hLmggaW4gSGVhZGVycyAqLywKLQkJCQk4M0Iz
Q0IxMDIwRTJBQjAxMDA0NDFFOUIgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MUU2QzE2NDFGMjkzNUREMDBGRDM0MzcgLyogUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
QUZCRDM2NzIxRTUxQkFCMDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QUZCRDM2QTIxRTU0MkYxMDA1REJBQ0IgLyogUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTMwMDY2RTExMTBGNEY3MDAzMTkzN0MgLyogUmVzcG9uc2l2ZW5lc3NUaW1lci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDEwNDgyQ0UxREREMzI0RjAwRjAwNkQwIC8qIFJUQ05ldHdvcmsuaCBp
biBIZWFkZXJzICovLAogCQkJCTBFOTdENzREMjAwRTkwMDQwMEJGNjY0MyAvKiBTYWZlQnJvd3Np
bmdTUEkuaCBpbiBIZWFkZXJzICovLApAQCAtOTUxOCw4ICs5NTI2LDggQEAKIAkJCQkzNzYwODgx
RjE1MDQxM0U5MDBGQzgyQzcgLyogV2ViUmVuZGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTBBRkZCQTE2NTQyMDQ4MDAxQkEwNUUgLyogV2ViUmVzb3VyY2VMb2FkZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxRjA2MEUwMTY1NDMxN0YwMEYzMjgxQiAvKiBXZWJSZXNvdXJjZUxvYWRl
ck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QUZCRDM2MzIxRTUwRjM5MDA1REJBQ0Ig
LyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
QTc5MUVGQjFDN0NGRDAxMDBDNEM1MkIgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTZCODIxRERDMUVFRjA1REQwMEQ3QUY0QSAv
KiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0MTMwNzVCMDFERTg1RjU4MDAzOUVDNjkgLyogV2ViUlRDTW9uaXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDFGQUY1RjUxRTNDMDY0OTAwMUFFNjc4IC8qIFdlYlJUQ1Jlc29sdmVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0MURDNDU5RjFFM0RCREE1MDBCMTFGNTEgLyogV2ViUlRDU29ja2V0
LmggaW4gSGVhZGVycyAqLywK
</data>

          </attachment>
      

    </bug>

</bugzilla>